psi3/0000755000101500007650000000000011146111721010174 5ustar crawdadpsi3/aclocal.m40000644000101500007650000000460010605525474012051 0ustar crawdaddnl dnl Local macros. This are based on files provided with autoconf dnl so the GNU GPL applies to them. dnl dnl dnl See if the given C program is processed by the C compiler OK. Does dnl not necessarily compile. If you want to compile give a -c to the compiler dnl arguments. To compile and link give a -o conftest. dnl arg1: echo text dnl arg2: optional code (main is already provided) dnl arg3: additional compiler arguments dnl arg4: success action dnl arg5: fail action dnl define(AC_CC_PROCESS_CHECK, [AC_PROVIDE([$0])dnl ifelse([$1], , , [AC_MSG_CHECKING([for $1])] )dnl cat > conftest.c </dev/null 2>&1; then ifelse([$4], , :, [rm -rf conftest* $4 ]) ifelse([$5], , , [else rm -rf conftest* $5 ])dnl fi rm -f conftest* AC_MSG_RESULT(OK)] )dnl dnl dnl dnl See if the given C++ program is processed by the C++ compiler OK. Does dnl not necessarily compile. If you want to compile give a -c to the compiler dnl arguments. To compile and link give a -o conftest. dnl arg1: echo text dnl arg2: optional code (main is already provided) dnl arg3: additional compiler arguments dnl arg4: success action dnl arg5: fail action dnl define(AC_CXX_PROCESS_CHECK, [AC_PROVIDE([$0])dnl ifelse([$1], , , [AC_MSG_CHECKING([for $1])] )dnl cat > conftest.cc </dev/null 2>&1; then ifelse([$4], , :, [rm -rf conftest* $4 AC_MSG_RESULT(yes) ]) ifelse([$5], , , [else rm -rf conftest* $5 AC_MSG_RESULT(no) ])dnl fi rm -f conftest*] )dnl dnl dnl dnl Check for LaTeX dnl define(AC_PROG_LATEX, [AC_PROVIDE([$0]) AC_CHECK_PROG(LATEX, latex, latex)] )dnl dnl dnl Check for dvips dnl define(AC_PROG_DVIPS, [AC_PROVIDE([$0]) AC_CHECK_PROG(DVIPS, dvips, dvips)] )dnl dnl dnl Check for LaTeX2HTML dnl define(AC_PROG_LATEX2HTML, [AC_PROVIDE([$0]) AC_CHECK_PROG(LATEX2HTML, latex2html, latex2html)] )dnl define(AC_PROG_BIBTEX, [AC_PROVIDE([$0]) AC_CHECK_PROG(BIBTEX, bibtex, bibtex)] )dnl # Function to look for Apple vecLib on OS X systems define(AC_CHECK_VECLIB, [AC_PROVIDE([$0]) echo "Entering ac_check_veclib" SAVE_LIBS=$LIBS echo "$target_vendor" if eval $CC LIBS=$SAVE_LIBS echo "Finished with ac_check_veclib" ] ) psi3/bin/0000755000101500007650000000000011146111703010744 5ustar crawdadpsi3/bin/config.guess0000755000101500007650000012471210605525474013310 0ustar crawdad#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-11-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: psi3/bin/config.sub0000644000101500007650000007650510605525474012756 0ustar crawdad#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-12-06' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m32c) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; m32c-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: psi3/bin/install-sh0000755000101500007650000000420610605525474012767 0ustar crawdad#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5; via GNU gcc 2.5.8. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" instcmd="$mvprog" chmodcmd="" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; *) if [ x"$src" = x ] then src=$1 else dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` fi # Make a temp file name in the proper directory. dstdir=`dirname $dst` dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp # and set any options; do chmod last to preserve setuid bits if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi # Now rename the file to the real destination. $doit $rmcmd $dst $doit $mvcmd $dsttmp $dst exit 0 psi3/bin/installinc.sh0000755000101500007650000000130507577717345013475 0ustar crawdad#!/bin/sh -f # # # DEST=0 updates=0 for ii in $* do if [ -d $ii ] ; then DEST=$ii; fi done if [ $DEST = 0 ] then cmp $1 $2 > /dev/null 2>&1 if [ $? != 0 ] then if [ -f $2 ] ; then chmod 644 $2; fi /bin/cp $1 $2 if [ $updates = 0 ] ; then echo -n " updating"; updates=1; fi echo -n " "$1 fi else for ii in $* do if [ ! -d $ii ] then cmp $ii $DEST/`basename $ii` > /dev/null 2>&1 if [ $? != 0 ] then if [ -f $DEST/`basename $ii` ] ; then chmod 644 `basename $DEST/$ii`; fi /bin/cp $ii $DEST/`basename $ii` if [ $updates = 0 ] ; then echo -n " updating"; updates=1; fi echo -n " "$ii fi fi done fi if [ $updates = 0 ] ; then echo "no updates"; else echo ""; fi exit psi3/bin/mkdirs.sh0000755000101500007650000000012507577717345012625 0ustar crawdad#!/bin/sh # Warning: mkdir -p isn't portable if [ ! -d $* ]; then mkdir -p $* fi psi3/configure0000755000101500007650000110251511146111714012112 0ustar crawdad#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.60 for psi 3.4.0. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /usr/bin/posix$PATH_SEPARATOR/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # Find out whether ``test -x'' works. Don't use a zero-byte file, as # systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then as_executable_p="test -x" else as_executable_p=: fi rm -f conf$$.file # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='psi' PACKAGE_TARNAME='psi' PACKAGE_VERSION='3.4.0' PACKAGE_STRING='psi 3.4.0' PACKAGE_BUGREPORT='psicode@users.sourceforge.net' ac_default_prefix=/usr/local/psi # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #endif #if HAVE_STDINT_H # include #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias PSI_VERSION PSI_BUILDID PSI_BUGREPORT build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os SET_MAKE objincdir txtdir pkgdatadir INSTALL_INCLUDE MKDIRS LIBINT_NEW_AM LIBINT_OPT_AM LIBDERIV_NEW_AM1 LIBDERIV_NEW_AM2 LIBR12_NEW_AM LIBR12_OPT_AM CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX F77 FFLAGS ac_ct_F77 FC_SYMBOL RANLIB CPP CXXCPP LEX LEXLIB LEX_OUTPUT_ROOT YACC YFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S AR ARFLAGS LD LDLIBS PERL LATEX LATEX2HTML DVIPS BIBTEX DOXYGEN HAVE_DOT DOT_PATH FLIBS BLAS LAPACK GREP EGREP RUBYLIB RUBYINC HAVE_RUBY RUBYLDFLAGS LIBSUF OBJSUF CCDEPENDSUF CXXDEPENDSUF CCDEPENDFLAGS CXXDEPENDFLAGS PSICPPFLAGS CDBG COPT CDEF COTH CINC CXXDBG CXXOPT CXXDEF CXXOTH CXXINC LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS CPPFLAGS CXX CXXFLAGS CCC F77 FFLAGS CPP CXXCPP YACC YFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures psi 3.4.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/psi] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of psi 3.4.0:";; esac cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-max-am-eri maximum AM in ERIs --with-max-am-deriv1 maximum AM in ERI first derivatives --with-max-am-deriv2 maximum AM in ERI second derivatives --with-max-am-r12 maximum AM in R12 integrals --with-integrals-standard specifies the standard for the basis normalization, etc. The allowed values are cca (default) and psi. --with-aix64 Compiling on a 64-bit AIX machine. --with-cc which C compiler to use --with-cxx which C++ compiler to use --with-fc which Fortran compiler to use --with-f77symbol FORTRAN77 symbol convention Allowed values are: lc : lower-case lcu : lower-case with underscore (default) uc : upper-case ucu : upper-case with underscore --with-ar Names the archive creator. --with-ar-flags Flags for the the archive creator. --with-ld Names the object linker. --with-incdirs Specifies include directories (-Idir1 -Idir2). --with-libs Specifies libraries (-llib1 -llib2). --with-libdirs Specifies library directories (-Ldir1 -Ldir2). --with-dot Gives the path to the dot graph generator. --with-blas which blas library to use --with-lapack which lapack library to use --with-ruby-include where to look for Ruby headers (-Idir1 -Idir2 etc.) --with-ruby-lib which Ruby library to use (-Ldir1 -lruby_red) --with-opt Specifies the C++/C optimization compiler flags. --with-opt=no means no optimization --with-debug will turn on debugging --with-strict --with-strict=yes to turn on strict compiler warnings Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags CPP C preprocessor CXXCPP C++ preprocessor YACC The `Yet Another C Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF psi configure 3.4.0 generated by GNU Autoconf 2.60 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by psi $as_me 3.4.0, which was generated by GNU Autoconf 2.60. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers include/psiconfig.h" PSI_VERSION=3.4.0 PSI_BUILDID=alpha PSI_BUGREPORT=psicode@users.sourceforge.net ac_aux_dir= for ac_dir in bin "$srcdir"/bin; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in bin \"$srcdir\"/bin" >&5 echo "$as_me: error: cannot find install-sh or install.sh in bin \"$srcdir\"/bin" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6; } if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 echo "$as_me: error: invalid value of canonical target" >&2;} { (exit 1); exit 1; }; };; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Psi now is primarily C++ ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu srcdir=`(cd $srcdir; pwd)` objincdir='$(top_objdir)/include' if test -z $docdir; then docdir='$(datadir)/doc/$(PACKAGE)' fi if test -z $txtdir; then txtdir='$(docdir)/txt' fi if test -z $htmldir; then htmldir='$(docdir)/html' fi if test -z $dvidir; then dvidir='$(docdir)/dvi' fi pkgdatadir='$(datadir)/psi' INSTALL_INCLUDE='$(top_srcdir)/bin/installinc.sh' MKDIRS='$(top_srcdir)/bin/mkdirs.sh' ######## ## PSI-specific options ######## # Options for libint LIBINT_NEW_AM=8 LIBINT_OPT_AM=4 # Check whether --with-max-am-eri was given. if test "${with_max_am_eri+set}" = set; then withval=$with_max_am_eri; LIBINT_NEW_AM=$((2*($withval))) LIBINT_OPT_AM=$(($withval)) fi # Options for libderiv LIBDERIV_NEW_AM1=6 # Check whether --with-max-am-deriv1 was given. if test "${with_max_am_deriv1+set}" = set; then withval=$with_max_am_deriv1; LIBDERIV_NEW_AM1=$((2*($withval))) fi LIBDERIV_NEW_AM2=6 # Check whether --with-max-am-deriv2 was given. if test "${with_max_am_deriv2+set}" = set; then withval=$with_max_am_deriv2; LIBDERIV_NEW_AM2=$((2*($withval))) fi # Options for libr12 LIBR12_NEW_AM=6 LIBR12_OPT_AM=6 # Check whether --with-max-am-r12 was given. if test "${with_max_am_r12+set}" = set; then withval=$with_max_am_r12; LIBR12_NEW_AM=$((2*($withval))) LIBR12_OPT_AM=$((2*($withval))) fi PSI_INTEGRALS_STANDARD=1 # Check whether --with-integrals-standard was given. if test "${with_integrals_standard+set}" = set; then withval=$with_integrals_standard; case $withval in psi) PSI_INTEGRALS_STANDARD=0 ;; cca) PSI_INTEGRALS_STANDARD=1 ;; *) { echo "$as_me:$LINENO: WARNING: did not recognize value $withval. will assume the default" >&5 echo "$as_me: WARNING: did not recognize value $withval. will assume the default" >&2;} ;; esac fi cat >>confdefs.h <<_ACEOF #define PSI_INTEGRALS_STANDARD $PSI_INTEGRALS_STANDARD _ACEOF ######## ## Check for programs ######## case $target_os in aix*) CC_LIST="gcc cc_r cc" CXX_LIST="g++ xlC_r c++" F77_LIST="ifort gfortran g77 xlf_r f77" ;; *) CC_LIST="gcc icc cc" CXX_LIST="g++ c++ icpc cxx" F77_LIST="gfortran g77 ifort f77" ;; esac # Check whether --with-aix64 was given. if test "${with_aix64+set}" = set; then withval=$with_aix64; CXXFLAGS="$CXXFLAGS -maix64" F77FLAGS="$F77FLAGS -maix64" CFLAGS="$CFLAGS -maix64" LDFLAGS="$LDFLAGS -maix64" AIX64=yes { echo "$as_me:$LINENO: result: Compiling on 64-bit AIX" >&5 echo "${ECHO_T}Compiling on 64-bit AIX" >&6; } fi # Check whether --with-cc was given. if test "${with_cc+set}" = set; then withval=$with_cc; CC=$withval fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_LIST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_LIST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Check whether --with-cxx was given. if test "${with_cxx+set}" = set; then withval=$with_cxx; CXX=$withval fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $CXX_LIST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CXX_LIST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Check whether --with-fc was given. if test "${with_fc+set}" = set; then withval=$with_fc; case $withval in no) F77="no" ;; *) F77=$withval ;; esac fi if test -z "$F77"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu elif test "$F77" = "no"; then F77="" fi if test -n "$F77" -a "$F77" != no ; then { echo "$as_me:$LINENO: checking if fortran compiler works" >&5 echo $ECHO_N "checking if fortran compiler works... $ECHO_C" >&6; } /bin/rm -f ffunc.f echo " program main" > ffunc.f echo " end" >> ffunc.f if $F77 -o ffunc ffunc.f 1>&5 2>&5; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } F77_WORKS=yes else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } F77_WORKS=no fi /bin/rm -f ffunc ffunc.f fi # Check whether --with-f77symbol was given. if test "${with_f77symbol+set}" = set; then withval=$with_f77symbol; case $withval in lc) FC_SYMBOL=1 ;; lcu) FC_SYMBOL=2 ;; uc) FC_SYMBOL=3 ;; ucu) FC_SYMBOL=4 ;; *) { echo "$as_me:$LINENO: WARNING: did not recognize value $withval. will assume lower-case with underscore" >&5 echo "$as_me: WARNING: did not recognize value $withval. will assume lower-case with underscore" >&2;} FC_SYMBOL=2 ;; esac fi if test -z "$FC_SYMBOL"; then { echo "$as_me:$LINENO: checking fortran symbols" >&5 echo $ECHO_N "checking fortran symbols... $ECHO_C" >&6; } if test -n "$F77" -a "$F77" != no -a X$F77_WORKS != Xno; then /bin/rm -f ffunc.f flink.cc echo " subroutine ffunc()" > ffunc.f echo " return" >> ffunc.f echo " end" >> ffunc.f $F77 -c ffunc.f 1>/dev/null 2>/dev/null echo "extern \"C\" void FF(); int main(int argc, char** argv){ FF(); return 0; }" > flink.cc if $CXX -o flink -DFF=ffunc flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then { echo "$as_me:$LINENO: result: lowercase" >&5 echo "${ECHO_T}lowercase" >&6; } FC_SYMBOL=1 elif $CXX -o flink -DFF=ffunc_ flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then { echo "$as_me:$LINENO: result: lowercase with underscore" >&5 echo "${ECHO_T}lowercase with underscore" >&6; } FC_SYMBOL=2 elif $CXX -o flink -DFF=FFUNC flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then { echo "$as_me:$LINENO: result: uppercase" >&5 echo "${ECHO_T}uppercase" >&6; } FC_SYMBOL=3 elif $CXX -o flink -DFF=FFUNC_ flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then { echo "$as_me:$LINENO: result: uppercase with underscore" >&5 echo "${ECHO_T}uppercase with underscore" >&6; } FC_SYMBOL=4 else { echo "$as_me:$LINENO: result: giving up" >&5 echo "${ECHO_T}giving up" >&6; } { { echo "$as_me:$LINENO: error: could not determine F77 symbol names" >&5 echo "$as_me: error: could not determine F77 symbol names" >&2;} { (exit 1); exit 1; }; } fi /bin/rm -f ffunc.f ffunc.o flink flink.cc flink.o ffunc else FC_SYMBOL=2 { echo "$as_me:$LINENO: result: will assume lowercase with underscore" >&5 echo "${ECHO_T}will assume lowercase with underscore" >&6; } fi fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_LEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LEX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { echo "$as_me:$LINENO: result: $LEX" >&5 echo "${ECHO_T}$LEX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test -z "$LEXLIB" then { echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6; } if test "${ac_cv_lib_fl_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char yywrap (); int main () { return yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_fl_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fl_yywrap=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6; } if test $ac_cv_lib_fl_yywrap = yes; then LEXLIB="-lfl" else { echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6; } if test "${ac_cv_lib_l_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ll $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char yywrap (); int main () { return yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_l_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_l_yywrap=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6; } if test $ac_cv_lib_l_yywrap = yes; then LEXLIB="-ll" fi fi fi if test "x$LEX" != "x:"; then { echo "$as_me:$LINENO: checking lex output file root" >&5 echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } if test "${ac_cv_prog_lex_root+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # The minimal lex program is just a single line: %%. But some broken lexes # (Solaris, I think it was) want two %% lines, so accommodate them. cat >conftest.l <<_ACEOF %% %% _ACEOF { (ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } rm -f conftest.l LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root { echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS=$LIBS LIBS="$LIBS $LEXLIB" cat >conftest.$ac_ext <<_ACEOF `cat $LEX_OUTPUT_ROOT.c` _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_lex_yytext_pointer=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS rm -f "${LEX_OUTPUT_ROOT}.c" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then cat >>confdefs.h <<\_ACEOF #define YYTEXT_POINTER 1 _ACEOF fi fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_YACC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6; } fi for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AR" && break done test -n "$AR" || AR="ar" # Check whether --with-ar was given. if test "${with_ar+set}" = set; then withval=$with_ar; AR=$withval fi ARFLAGS=r # Check whether --with-ar-flags was given. if test "${with_ar_flags+set}" = set; then withval=$with_ar_flags; ARFLAGS=$withval fi case $os in aix*) ARFLAGS="-X32_64 $ARFLAGS" ;; esac # Check whether --with-ld was given. if test "${with_ld+set}" = set; then withval=$with_ld; LD=$withval fi EXTRAINCDIRS= CPPFLAGS= # Check whether --with-incdirs was given. if test "${with_incdirs+set}" = set; then withval=$with_incdirs; EXTRAINCDIRS=$withval CPPFLAGS=$withval { echo "$as_me:$LINENO: result: Using extra include directories: $withval" >&5 echo "${ECHO_T}Using extra include directories: $withval" >&6; } fi # Check whether --with-libs was given. if test "${with_libs+set}" = set; then withval=$with_libs; LDLIBS=$withval { echo "$as_me:$LINENO: result: Using extra libraries: $withval" >&5 echo "${ECHO_T}Using extra libraries: $withval" >&6; } fi LDFLAGS= LIBDIRS= # Check whether --with-libdirs was given. if test "${with_libdirs+set}" = set; then withval=$with_libdirs; LIBDIRS=$withval LDFLAGS=$withval { echo "$as_me:$LINENO: result: Using extra library directories: $withval" >&5 echo "${ECHO_T}Using extra library directories: $withval" >&6; } fi for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_PERL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PERL="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { echo "$as_me:$LINENO: result: $PERL" >&5 echo "${ECHO_T}$PERL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$PERL" && break done test -n "$PERL" || PERL="perl" # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_LATEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LATEX"; then ac_cv_prog_LATEX="$LATEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LATEX="latex" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LATEX=$ac_cv_prog_LATEX if test -n "$LATEX"; then { echo "$as_me:$LINENO: result: $LATEX" >&5 echo "${ECHO_T}$LATEX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "latex2html", so it can be a program name with args. set dummy latex2html; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_LATEX2HTML+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LATEX2HTML"; then ac_cv_prog_LATEX2HTML="$LATEX2HTML" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LATEX2HTML="latex2html" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LATEX2HTML=$ac_cv_prog_LATEX2HTML if test -n "$LATEX2HTML"; then { echo "$as_me:$LINENO: result: $LATEX2HTML" >&5 echo "${ECHO_T}$LATEX2HTML" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_DVIPS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$DVIPS"; then ac_cv_prog_DVIPS="$DVIPS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DVIPS="dvips" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DVIPS=$ac_cv_prog_DVIPS if test -n "$DVIPS"; then { echo "$as_me:$LINENO: result: $DVIPS" >&5 echo "${ECHO_T}$DVIPS" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "bibtex", so it can be a program name with args. set dummy bibtex; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_BIBTEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$BIBTEX"; then ac_cv_prog_BIBTEX="$BIBTEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_BIBTEX="bibtex" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi BIBTEX=$ac_cv_prog_BIBTEX if test -n "$BIBTEX"; then { echo "$as_me:$LINENO: result: $BIBTEX" >&5 echo "${ECHO_T}$BIBTEX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi #### # Check for doxygen and it buddies #### for ac_prog in doxygen do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_DOXYGEN+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$DOXYGEN"; then ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DOXYGEN="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DOXYGEN=$ac_cv_prog_DOXYGEN if test -n "$DOXYGEN"; then { echo "$as_me:$LINENO: result: $DOXYGEN" >&5 echo "${ECHO_T}$DOXYGEN" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$DOXYGEN" && break done test -n "$DOXYGEN" || DOXYGEN="NO" DOT=yes # Check whether --with-dot was given. if test "${with_dot+set}" = set; then withval=$with_dot; DOT=$withval fi DOT_PATH="" if test X$DOT = Xno; then HAVE_DOT=NO elif test X$DOT = Xyes; then # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_HAVE_DOT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$HAVE_DOT"; then ac_cv_prog_HAVE_DOT="$HAVE_DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAVE_DOT="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_DOT" && ac_cv_prog_HAVE_DOT="NO" fi fi HAVE_DOT=$ac_cv_prog_HAVE_DOT if test -n "$HAVE_DOT"; then { echo "$as_me:$LINENO: result: $HAVE_DOT" >&5 echo "${ECHO_T}$HAVE_DOT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi else HAVE_DOT=YES DOT_PATH=$DOT fi ######## ## Check for libraries ######## if test ! -z "$F77"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 echo $ECHO_N "checking how to get verbose linking output from $F77... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_v+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift echo "$as_me:$LINENO: $*" >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: WARNING: compilation failed" >&5 echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 echo "${ECHO_T}$ac_cv_prog_f77_v" >&6; } { echo "$as_me:$LINENO: checking for Fortran 77 libraries of $F77" >&5 echo $ECHO_N "checking for Fortran 77 libraries of $F77... $ECHO_C" >&6; } if test "${ac_cv_f77_libs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift echo "$as_me:$LINENO: $*" >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc | -libmil | -LANG:=* | -LIST:* | -LNO:*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`echo $ac_f77_v_output | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 echo "${ECHO_T}$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { echo "$as_me:$LINENO: checking for exit in -lc" >&5 echo $ECHO_N "checking for exit in -lc... $ECHO_C" >&6; } if test "${ac_cv_lib_c_exit+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $FLIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exit (); int main () { return exit (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_c_exit=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_c_exit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_c_exit" >&5 echo "${ECHO_T}$ac_cv_lib_c_exit" >&6; } if test $ac_cv_lib_c_exit = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBC 1 _ACEOF LIBS="-lc $LIBS" else FLIBS= { echo "$as_me:$LINENO: WARNING: F77 libraries don't seem to link with C++ programs" >&5 echo "$as_me: WARNING: F77 libraries don't seem to link with C++ programs" >&2;} fi fi # Check whether --with-blas was given. if test "${with_blas+set}" = set; then withval=$with_blas; case $withval in yes) BLAS='-lblas' ;; no) BLAS='' ;; *) BLAS=$withval ;; esac fi # Check whether --with-lapack was given. if test "${with_lapack+set}" = set; then withval=$with_lapack; case $withval in yes) LAPACK='-llapack' ;; no) LAPACK='' ;; *) LAPACK=" $withval" ;; esac fi # Set strings for particular BLAS and LAPACK functions for later testing case $FC_SYMBOL in 1) DGEMM_SYMBOL=dgemm DGEEV_SYMBOL=dgeev ;; 2) DGEMM_SYMBOL=dgemm_ DGEEV_SYMBOL=dgeev_ ;; 3) DGEMM_SYMBOL=DGEMM DGEEV_SYMBOL=DGEEV ;; 4) DGEMM_SYMBOL=DGEMM_ DGEEV_SYMBOL=DGEEV_ ;; esac SAVE_LIBS=$LIBS LIBS="$LIBS $CLIBS $FLIBS" ### If the user didn't give us a BLAS lib, see if we can find one # If we're using the Intel compilers, we prefer MKL as well if test -z "$BLAS"; then if test $CC = icc -o $CXX = icpc; then as_ac_Lib=`echo "ac_cv_lib_mkl_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lmkl" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lmkl... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmkl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lmkl" fi fi fi # Otherwise, run through a list of possibilities if test -z "$BLAS"; then as_ac_Lib=`echo "ac_cv_lib_essl_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lessl" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lessl... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lessl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lessl -lpthread" fi fi if test -z "$BLAS"; then as_ac_Lib=`echo "ac_cv_lib_scs_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lscs" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lscs... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lscs $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lscs" fi fi if test -z "$BLAS"; then SAVE_LIBS2=$LIBS LIBS="-lpthread $LIBS" as_ac_Lib=`echo "ac_cv_lib_goto_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lgoto" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lgoto... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgoto $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lgoto -lpthread" fi LIBS=$SAVE_LIBS2 fi if test -z "$BLAS"; then SAVE_LIBS2=$LIBS LIBS="-latlas $LIBS" as_ac_Lib=`echo "ac_cv_lib_f77blas_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lf77blas" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lf77blas... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lf77blas $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lf77blas -latlas" fi LIBS=$SAVE_LIBS2 fi if test -z "$BLAS"; then as_ac_Lib=`echo "ac_cv_lib_mkl_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lmkl" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lmkl... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmkl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lmkl" fi fi if test -z "$BLAS"; then as_ac_Lib=`echo "ac_cv_lib_blas_$DGEMM_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEMM_SYMBOL in -lblas" >&5 echo $ECHO_N "checking for $DGEMM_SYMBOL in -lblas... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEMM_SYMBOL (); int main () { return $DGEMM_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then BLAS="-lblas" fi fi if test -z "$BLAS"; then case $target_vendor in apple) BLAS="-altivec -framework vecLib" AUTOAPPLE="yes" { echo "$as_me:$LINENO: result: No BLAS specified and vendor is Apple: Assuming vecLib is available!" >&5 echo "${ECHO_T}No BLAS specified and vendor is Apple: Assuming vecLib is available!" >&6; } ;; esac fi if test -z "$BLAS"; then { { echo "$as_me:$LINENO: error: \"Did not find a BLAS library.\"" >&5 echo "$as_me: error: \"Did not find a BLAS library.\"" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: BLAS library is $BLAS" >&5 echo "${ECHO_T}BLAS library is $BLAS" >&6; } LIBS=$SAVE_LIBS # Similar checks for LAPACK, except that sometimes BLAS includes LAPACK # Also note that LAPACK often (always?) depends on BLAS SAVE_LIBS=$LIBS LIBS="$BLAS $LIBS $CLIBS $FLIBS" if test -z "$LAPACK"; then if test ! -z "$AUTOAPPLE"; then { echo "$as_me:$LINENO: result: Assuming vecLib for LAPACK" >&5 echo "${ECHO_T}Assuming vecLib for LAPACK" >&6; } LAPACK="$BLAS" LAPACK_IN_BLAS=yes else as_ac_var=`echo "ac_cv_func_$DGEEV_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEEV_SYMBOL" >&5 echo $ECHO_N "checking for $DGEEV_SYMBOL... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $DGEEV_SYMBOL to an innocuous variant, in case declares $DGEEV_SYMBOL. For example, HP-UX 11i declares gettimeofday. */ #define $DGEEV_SYMBOL innocuous_$DGEEV_SYMBOL /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $DGEEV_SYMBOL (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $DGEEV_SYMBOL /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEEV_SYMBOL (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$DGEEV_SYMBOL || defined __stub___$DGEEV_SYMBOL choke me #endif int main () { return $DGEEV_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then LAPACK_IN_BLAS=yes fi fi fi if test -z "$LAPACK_IN_BLAS"; then if test -z "$LAPACK"; then if test $CC = icc -o $CXX = icpc; then # Intel's libmkl_lapack64 contains the double-precision routines as_ac_Lib=`echo "ac_cv_lib_mkl_lapack64_$DGEEV_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEEV_SYMBOL in -lmkl_lapack64" >&5 echo $ECHO_N "checking for $DGEEV_SYMBOL in -lmkl_lapack64... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmkl_lapack64 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEEV_SYMBOL (); int main () { return $DGEEV_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then LAPACK="-lmkl_lapack64" fi fi fi if test -z "$LAPACK"; then as_ac_Lib=`echo "ac_cv_lib_lapack_$DGEEV_SYMBOL" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $DGEEV_SYMBOL in -llapack" >&5 echo $ECHO_N "checking for $DGEEV_SYMBOL in -llapack... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llapack $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $DGEEV_SYMBOL (); int main () { return $DGEEV_SYMBOL (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then LAPACK="-llapack" fi fi if test -z "$LAPACK"; then { { echo "$as_me:$LINENO: error: \"Did not find a LAPACK library.\"" >&5 echo "$as_me: error: \"Did not find a LAPACK library.\"" >&2;} { (exit 1); exit 1; }; }; fi { echo "$as_me:$LINENO: result: LAPACK library is $LAPACK" >&5 echo "${ECHO_T}LAPACK library is $LAPACK" >&6; } else { echo "$as_me:$LINENO: result: LAPACK library is included in BLAS+LIBS" >&5 echo "${ECHO_T}LAPACK library is included in BLAS+LIBS" >&6; } fi LIBS=$SAVE_LIBS # Check for libcompat.a availability #case $target_vendor in # apple) # AC_HAVE_LIBRARY(compat,CLIBS="-lcompat $CLIBS",AC_MSG_ERROR([Missing libcompat.a: See http://www.opensource.apple.com/ for more information])) # echo "$CLIBS" # ;; #esac ######## ## Check for header files ######## # check for header files { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_executable_p "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_executable_p "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in errno.h fcntl.h unistd.h stdint.h sys/types.h sys/times.h sys/param.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------------------- ## ## Report this to psicode@users.sourceforge.net ## ## -------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # check for C++ headers { echo "$as_me:$LINENO: checking for cmath" >&5 echo $ECHO_N "checking for cmath... $ECHO_C" >&6; } cat > conftest.cc < int main(int argc, char** argv) {} EOF if eval $CXX $CPPFLAGS conftest.cc >/dev/null 2>&1; then rm -rf conftest* HAVE_CMATH=1 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else rm -rf conftest* HAVE_CMATH=0 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f conftest* CXXDEF="$CXXDEF -DHAVE_CMATH=$HAVE_CMATH" { echo "$as_me:$LINENO: checking for cstdio" >&5 echo $ECHO_N "checking for cstdio... $ECHO_C" >&6; } cat > conftest.cc < int main(int argc, char** argv) {} EOF if eval $CXX $CPPFLAGS conftest.cc >/dev/null 2>&1; then rm -rf conftest* HAVE_CSTDIO=1 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else rm -rf conftest* HAVE_CSTDIO=0 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f conftest* CXXDEF="$CXXDEF -DHAVE_CSTDIO=$HAVE_CSTDIO" { echo "$as_me:$LINENO: checking for cstdlib" >&5 echo $ECHO_N "checking for cstdlib... $ECHO_C" >&6; } cat > conftest.cc < int main(int argc, char** argv) {} EOF if eval $CXX $CPPFLAGS conftest.cc >/dev/null 2>&1; then rm -rf conftest* HAVE_CSTDLIB=1 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else rm -rf conftest* HAVE_CSTDLIB=0 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f conftest* CXXDEF="$CXXDEF -DHAVE_CSTDLIB=$HAVE_CSTDLIB" { echo "$as_me:$LINENO: checking for cstring" >&5 echo $ECHO_N "checking for cstring... $ECHO_C" >&6; } cat > conftest.cc < int main(int argc, char** argv) {} EOF if eval $CXX $CPPFLAGS conftest.cc >/dev/null 2>&1; then rm -rf conftest* HAVE_CSTRING=1 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else rm -rf conftest* HAVE_CSTRING=0 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f conftest* CXXDEF="$CXXDEF -DHAVE_CSTRING=$HAVE_CSTRING" { echo "$as_me:$LINENO: checking for cstddef" >&5 echo $ECHO_N "checking for cstddef... $ECHO_C" >&6; } cat > conftest.cc < int main(int argc, char** argv) {} EOF if eval $CXX $CPPFLAGS conftest.cc >/dev/null 2>&1; then rm -rf conftest* HAVE_CSTDDEF=1 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else rm -rf conftest* HAVE_CSTDDEF=0 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f conftest* CXXDEF="$CXXDEF -DHAVE_CSTDDEF=$HAVE_CSTDDEF" #################### # Check for Ruby # #################### HAVE_RUBY="no" RUBYINC="" CHECKRUBY="yes" # Check whether --with-ruby-include was given. if test "${with_ruby_include+set}" = set; then withval=$with_ruby_include; case $withval in yes) ;; no) CHECKRUBY="no" ;; *) RUBYINC="$withval" ;; esac fi if test X$CHECKRUBY = Xyes; then REF_CPPFLAGS=$CPPFLAGS CPPFLAGS="$REF_CPPFLAGS $RUBYINC" if test "${ac_cv_header_ruby_h+set}" = set; then { echo "$as_me:$LINENO: checking for ruby.h" >&5 echo $ECHO_N "checking for ruby.h... $ECHO_C" >&6; } if test "${ac_cv_header_ruby_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_ruby_h" >&5 echo "${ECHO_T}$ac_cv_header_ruby_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking ruby.h usability" >&5 echo $ECHO_N "checking ruby.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking ruby.h presence" >&5 echo $ECHO_N "checking ruby.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: ruby.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: ruby.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: ruby.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: ruby.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: ruby.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: ruby.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: ruby.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: ruby.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: ruby.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: ruby.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: ruby.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------------------- ## ## Report this to psicode@users.sourceforge.net ## ## -------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for ruby.h" >&5 echo $ECHO_N "checking for ruby.h... $ECHO_C" >&6; } if test "${ac_cv_header_ruby_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_ruby_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_ruby_h" >&5 echo "${ECHO_T}$ac_cv_header_ruby_h" >&6; } fi if test $ac_cv_header_ruby_h = yes; then HAVE_RUBY="yes" else HAVE_RUBY="no" fi CPPFLAGS=$REF_CPPFLAGS fi if test X$HAVE_RUBY = Xyes; then HAVE_RUBY="no" RUBYLIB="-lruby-static" CHECKRUBY="yes" # Check whether --with-ruby-lib was given. if test "${with_ruby_lib+set}" = set; then withval=$with_ruby_lib; case $withval in yes) ;; no) CHECKRUBY="no" ;; *) RUBYLIB="$withval" ;; esac fi if test $CHECKRUBY = yes; then { echo "$as_me:$LINENO: checking for ruby_init" >&5 echo $ECHO_N "checking for ruby_init... $ECHO_C" >&6; } REF_LIBS=$LIBS LIBS="$RUBYLIB $LIBS" REF_CPPFLAGS=$CPPFLAGS CPPFLAGS="$REF_CPPFLAGS $RUBYINC" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { void (*funcptr)() = ruby_init; funcptr(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then HAVE_RUBY=yes { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 HAVE_RUBY=no { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$REF_LIBS CPPFLAGS=$REF_CPPFLAGS fi fi ######################################################################### # Special linking flags for psirb, because it loads shared object files # # This has to do with dlopen being "lazy" by default on Apple, but not # # on Linux # ######################################################################### case $target_vendor in apple) RUBYLDFLAGS="" ;; *) RUBYLDFLAGS="-rdynamic -Wl,-export-dynamic" ;; esac ######## ## Check for compiler characteristics ######## test -z "$LIBSUF" && LIBSUF=a test -z "$OBJSUF" && OBJSUF=o # The GNU compilers work with: CCDEPENDSUF=none CXXDEPENDSUF=none CCDEPENDFLAGS=-M CXXDEPENDFLAGS=-M /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o # Check for an IBM visual age C compiler echo "#include " > depcheck.c $CC $CPPFLAGS $CFLAGS -M depcheck.c > /dev/null 2>&1 if test -f depcheck.u; then CCDEPENDSUF=u fi /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o # Check for an IBM visual age C++ compiler echo "#include " > depcheck.cc $CXX $CPPFLAGS $CXXFLAGS -M -E depcheck.cc > /dev/null 2>&1 if test -f depcheck.u; then CXXDEPENDSUF=u CXXDEPENDFLAGS="-M -E" fi /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o { echo "$as_me:$LINENO: checking whether putenv is declared" >&5 echo $ECHO_N "checking whether putenv is declared... $ECHO_C" >&6; } if test "${ac_cv_have_decl_putenv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { #ifndef putenv char *p = (char *) putenv; return !p; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_putenv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_putenv=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_have_decl_putenv" >&5 echo "${ECHO_T}$ac_cv_have_decl_putenv" >&6; } if test $ac_cv_have_decl_putenv = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTENV 1 _ACEOF extradef="-DHAVE_DECL_PUTENV=1" else cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTENV 0 _ACEOF fi CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" { echo "$as_me:$LINENO: checking for putenv" >&5 echo $ECHO_N "checking for putenv... $ECHO_C" >&6; } if test "${ac_cv_func_putenv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define putenv to an innocuous variant, in case declares putenv. For example, HP-UX 11i declares gettimeofday. */ #define putenv innocuous_putenv /* System header to define __stub macros and hopefully few prototypes, which can conflict with char putenv (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef putenv /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char putenv (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_putenv || defined __stub___putenv choke me #endif int main () { return putenv (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_putenv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_putenv=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_putenv" >&5 echo "${ECHO_T}$ac_cv_func_putenv" >&6; } if test $ac_cv_func_putenv = yes; then extradef="-DHAVE_PUTENV=1" fi CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" { echo "$as_me:$LINENO: checking whether setenv is declared" >&5 echo $ECHO_N "checking whether setenv is declared... $ECHO_C" >&6; } if test "${ac_cv_have_decl_setenv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { #ifndef setenv char *p = (char *) setenv; return !p; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_setenv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_setenv=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_have_decl_setenv" >&5 echo "${ECHO_T}$ac_cv_have_decl_setenv" >&6; } if test $ac_cv_have_decl_setenv = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SETENV 1 _ACEOF extradef="-DHAVE_DECL_SETENV=1" else cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SETENV 0 _ACEOF fi CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" { echo "$as_me:$LINENO: checking for setenv" >&5 echo $ECHO_N "checking for setenv... $ECHO_C" >&6; } if test "${ac_cv_func_setenv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define setenv to an innocuous variant, in case declares setenv. For example, HP-UX 11i declares gettimeofday. */ #define setenv innocuous_setenv /* System header to define __stub macros and hopefully few prototypes, which can conflict with char setenv (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef setenv /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setenv (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_setenv || defined __stub___setenv choke me #endif int main () { return setenv (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_setenv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_setenv=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_setenv" >&5 echo "${ECHO_T}$ac_cv_func_setenv" >&6; } if test $ac_cv_func_setenv = yes; then extradef="-DHAVE_SETENV=1" fi CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" { echo "$as_me:$LINENO: checking for isinf in -lm" >&5 echo $ECHO_N "checking for isinf in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_isinf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char isinf (); int main () { return isinf (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_m_isinf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_isinf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_isinf" >&5 echo "${ECHO_T}$ac_cv_lib_m_isinf" >&6; } if test $ac_cv_lib_m_isinf = yes; then extradef="-DHAVE_FUNC_ISINF=1" else extradef="" fi if test X$extradef = X; then { echo "$as_me:$LINENO: checking for finite in -lm" >&5 echo $ECHO_N "checking for finite in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_finite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char finite (); int main () { return finite (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_m_finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_finite=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_finite" >&5 echo "${ECHO_T}$ac_cv_lib_m_finite" >&6; } if test $ac_cv_lib_m_finite = yes; then extradef="-DHAVE_FUNC_FINITE=1" else extradef="" fi fi if test X$extradef = X; then { { echo "$as_me:$LINENO: error: Did not find isinf() or finite() functions." >&5 echo "$as_me: error: Did not find isinf() or finite() functions." >&2;} { (exit 1); exit 1; }; } else CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" fi # User's input overrides all defaults # Defaults depend on the compiler and the architecture { echo "$as_me:$LINENO: result: -------------------------------------------------------------------------------" >&5 echo "${ECHO_T}-------------------------------------------------------------------------------" >&6; } # default is to optimize with -O2, no debugging symbols will be generated PSICPPFLAGS='-I. -I$(objincdir) -I$(top_srcdir)/include -I$(top_srcdir)/src/lib -I$(top_objdir)/src/lib' CDBG='' COPT='-O2' COTH='' CINC='$(CPPFLAGS) $(PSICPPFLAGS)' CXXDBG='' CXXOPT='-O2' CXXOTH='' CXXINC='$(CPPFLAGS) $(PSICPPFLAGS)' # Check user's input # The default is to optimize. --with-opt=no or --without-opt will turn # off optimization. OPTFLAGS_GIVEN=no # Check whether --with-opt was given. if test "${with_opt+set}" = set; then withval=$with_opt; case $withval in no) COPT='' CXXOPT='' OPTFLAGS_GIVEN=yes ;; *) COPT="$withval" CXXOPT="$withval" OPTFLAGS_GIVEN=yes ;; esac fi if test X$OPTFLAGS_GIVEN = Xyes; then { echo "$as_me:$LINENO: result: C++ optimization flags : $CXXOPT" >&5 echo "${ECHO_T}C++ optimization flags : $CXXOPT" >&6; } fi # if not given by the user, use architecture-dependent defaults if test X$OPTFLAGS_GIVEN = Xno; then case $target_cpu in rs6000) if test "$CC" = xlc_r -o "$CC" = cc_r ; then COPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi if test "$CXX" = xlC_r ; then CXXOPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi ;; powerpc) if test "$CC" = xlc_r -o "$CC" = cc_r ; then COPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi if test "$CXX" = xlC_r ; then CXXOPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" LDLIBS="$LDLIBS $FLIBS" fi if test "$CXX" = g++ ; then CXXOPT="-O3" LDLIBS="$LDLIBS $FLIBS" fi ;; x86_64) if test "$CC" = gcc -o "$CC" = cc ; then COPT="-O3 -m64" fi if test "$CXX" = g++ -o "$CXX" = c++ -o "$CXX" = gcc ; then CXXOPT="-O3 -m64" fi ;; esac { echo "$as_me:$LINENO: result: C++ optimization flags : $CXXOPT" >&5 echo "${ECHO_T}C++ optimization flags : $CXXOPT" >&6; } fi case $target_os in aix*) # _ALL_SOURCE is required because some include files on AIX don't seem to work with pure POSIX # Removed -D_LARGE_FILE EXTRADEFS="-D_ALL_SOURCE" CDEF="$CDEF $EXTRADEFS" CXXDEF="$CXXDEF $EXTRADEFS" ;; linux*) EXTRADEFS="-DLinux -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" CDEF="$CDEF $EXTRADEFS" CXXDEF="$CXXDEF $EXTRADEFS" ;; esac { echo "$as_me:$LINENO: result: extra preprocessor defines : $CXXDEF" >&5 echo "${ECHO_T}extra preprocessor defines : $CXXDEF" >&6; } # Obtain the debug flags. # The default is to not debug. --with-debug will turn on debugging. # Check whether --with-debug was given. if test "${with_debug+set}" = set; then withval=$with_debug; case $withval in yes) CDBG='-g' CXXDBG='-g' ;; no) CDBG='' CXXDBG='' ;; *) CDBG="$withval" CXXDBG="$withval" ;; esac fi { echo "$as_me:$LINENO: result: debugging C++ compiler flags : $CXXDBG" >&5 echo "${ECHO_T}debugging C++ compiler flags : $CXXDBG" >&6; } # Adjust the flags dealing with strictness of the compilers. # The default is to disable strict language checks. --with-opt=no or # --without-opt will turn off optimization. # Check whether --with-strict was given. if test "${with_strict+set}" = set; then withval=$with_strict; case $withval in yes) # "Strict" flags only known for GNU compilers if test "$GCC" = yes ; then COTH="$COTH -Wall -ansi" fi if test "$GXX" = yes ; then CXXOTH="$CXXOTH -Wall -ansi" fi ;; no) ;; esac fi { echo "$as_me:$LINENO: result: misc C++ compiler flags : $CXXOTH" >&5 echo "${ECHO_T}misc C++ compiler flags : $CXXOTH" >&6; } CFLAGS='$(CDBG) $(COPT) $(CDEF) $(COTH) $(CINC)' CXXFLAGS='$(CXXDBG) $(CXXOPT) $(CXXDEF) $(CXXOTH) $(CXXINC)' if test X$AIX64 = Xyes; then if test X$CXX = Xg++; then COTH="$COTH -maix64" CXXOTH="$CXXOTH -maix64" F77FLAGS="$F77FLAGS -maix64" LDFLAGS="$LDFLAGS -maix64" LDLIBS="$LAPACK $BLAS $LDLIBS" fi fi { echo "$as_me:$LINENO: result: -------------------------------------------------------------------------------" >&5 echo "${ECHO_T}-------------------------------------------------------------------------------" >&6; } ######## ## Output ######## ac_config_files="$ac_config_files include/Makefile include/chkpt_params.h Makefile lib/Makefile lib/ruby/Makefile src/Makefile src/lib/Makefile src/lib/MakeRules src/lib/MakeVars src/util/Makefile src/util/MakeRules src/util/MakeVars src/bin/Makefile src/bin/MakeRules src/bin/MakeVars doc/MakeVars doc/MakeRules doc/Makefile doc/macros.tex doc/progman/svn.eps doc/installation/Makefile doc/progman/Makefile doc/userman/Makefile doc/userman/prsty.bst doc/doxygen/Makefile doc/doxygen/doxygen.cfg src/lib/libdpd/Makefile src/lib/libiwl/Makefile src/lib/libpsio/Makefile src/lib/libqt/Makefile src/lib/libbasis/Makefile src/lib/libciomr/Makefile src/lib/libipv1/Makefile src/lib/libchkpt/Makefile src/lib/libderiv/Makefile src/lib/libderiv/MakeVars src/lib/libderiv/libderiv_config.h src/lib/libint/Makefile src/lib/libint/MakeVars src/lib/libint/libint_config.h src/lib/libr12/Makefile src/lib/libr12/MakeVars src/lib/libr12/libr12_config.h src/lib/libutil/Makefile src/lib/liboptions/Makefile src/lib/libmoinfo/Makefile src/lib/libmints/Makefile src/util/tocprint/Makefile src/util/psi2molden/Makefile src/bin/cphf/Makefile src/bin/psi3/Makefile src/bin/ccdensity/Makefile src/bin/ccenergy/Makefile src/bin/cchbar/Makefile src/bin/cclambda/Makefile src/bin/ccsort/Makefile src/bin/cctriples/Makefile src/bin/cceom/Makefile src/bin/ccresponse/Makefile src/bin/cints/Makefile src/bin/cis/Makefile src/bin/clag/Makefile src/bin/cscf/Makefile src/bin/detci/Makefile src/bin/detcas/Makefile src/bin/detcasman/Makefile src/bin/extrema/Makefile src/bin/geom/Makefile src/bin/input/Makefile src/bin/intder/Makefile src/bin/mcscf/Makefile src/bin/mp2/Makefile src/bin/mp2r12/Makefile src/bin/oeprop/Makefile src/bin/optking/Makefile src/bin/psiclean/Makefile src/bin/transqt/Makefile src/bin/transqt2/Makefile src/bin/mvo/Makefile src/bin/dboc/Makefile src/bin/cusp/Makefile src/bin/mocube/Makefile src/bin/localize/Makefile src/bin/stable/Makefile src/bin/response/Makefile src/bin/psirb/Makefile src/bin/psimrcc/Makefile src/bin/nonbonded/Makefile tests/Makefile tests/MakeVars tests/MakeRules tests/runtest.pl tests/scf-opt/Makefile tests/scf-opt-fragments/Makefile tests/mp2-opt-fragments/Makefile tests/scf-opt2/Makefile tests/scf-opt3/Makefile tests/scf-opt4/Makefile tests/scf-opt5/Makefile tests/scf-opt6/Makefile tests/scf-opt7/Makefile tests/scf-opt9/Makefile tests/scf-opt10/Makefile tests/scf-opt11/Makefile tests/scf-opt12/Makefile tests/scf-opt-numer/Makefile tests/scf-opt2-numer/Makefile tests/scf-freq/Makefile tests/scf-freq-first-3/Makefile tests/scf-freq-first-3a/Makefile tests/scf-freq-first-5/Makefile tests/scf-freq-first-5a/Makefile tests/scf-freq-none-3/Makefile tests/scf-freq-none-5/Makefile tests/scf-symm-fc-numer/Makefile tests/scf-fc-numer/Makefile tests/scf-polar/Makefile tests/rhf-oeprop/Makefile tests/rhf-stab/Makefile tests/rhf-stab/rhf-stab.pl tests/uhf-stab/Makefile tests/uhf-stab/uhf-stab.pl tests/rohf-stab/Makefile tests/rohf-stab/rohf-stab.pl tests/cis-sp/Makefile tests/cisd-h2o+-0/Makefile tests/cisd-h2o+-1/Makefile tests/cisd-h2o+-2/Makefile tests/cisd-sp/Makefile tests/cisd-sp-2/Makefile tests/cisd-opt-numer/Makefile tests/fci-h2o/Makefile tests/fci-h2o-2/Makefile tests/fci-h2o-clpse/Makefile tests/fci-h2o-fzcv/Makefile tests/fci-dipole/Makefile tests/fci-trans/Makefile tests/casscf-sp/Makefile tests/casscf-sa-sp/Makefile tests/casscf-fzc-sp/Makefile tests/rasscf-sp/Makefile tests/casscf-opt-numer/Makefile tests/casscf-opt/Makefile tests/zaptn-nh2/Makefile tests/mp2-sp/Makefile tests/mp2-direct-sp/Makefile tests/mp2-oeprop/Makefile tests/mp2-scs/Makefile tests/cc1/Makefile tests/cc2/Makefile tests/cc3/Makefile tests/cc4/Makefile tests/cc5/Makefile tests/cc6/Makefile tests/cc7/Makefile tests/cc8/Makefile tests/cc8a/Makefile tests/cc9/Makefile tests/cc9a/Makefile tests/cc10/Makefile tests/cc11/Makefile tests/cc12/Makefile tests/cc13/Makefile tests/cc13a/Makefile tests/cc14/Makefile tests/cc15/Makefile tests/cc16/Makefile tests/cc17/Makefile tests/cc18/Makefile tests/cc19/Makefile tests/cc21/Makefile tests/cc22/Makefile tests/cc23/Makefile tests/cc24/Makefile tests/cc25/Makefile tests/cc26/Makefile tests/cc27/Makefile tests/cc28/Makefile tests/cc29/Makefile tests/cc30/Makefile tests/cc31/Makefile tests/cc32/Makefile tests/cc33/Makefile tests/cc34/Makefile tests/cc35/Makefile tests/cc36/Makefile tests/cc37/Makefile tests/cc38/Makefile tests/cc39/Makefile tests/cc40/Makefile tests/cc41/Makefile tests/cc42/Makefile tests/cc43/Makefile tests/cc44/Makefile tests/cc45/Makefile tests/cc46/Makefile tests/cc47/Makefile tests/cc48/Makefile tests/cc49/Makefile tests/cc50/Makefile tests/psimrcc-sp1/Makefile tests/dboc-rhf1/Makefile tests/dboc-rohf1/Makefile tests/dboc-uhf1/Makefile tests/dboc-rcisd1/Makefile tests/dboc-rocisd1/Makefile tests/extrema-zmat/Makefile tests/extrema-deloc/Makefile tests/mcscf-rhf1/Makefile tests/mcscf-rohf1/Makefile tests/mcscf-twocon1/Makefile tests/mp2r12-sp1/Makefile tests/mp2-opt-numer/Makefile tests/mp2-opt/Makefile tests/rhf-lindep1/Makefile tests/rohf-lindep1/Makefile tests/uhf-lindep1/Makefile tests/psi_start/Makefile tests/psi_start/psi_start.pl tests/rb-scf-opt-numer/Makefile tests/rb-ccsd_t-sp/Makefile tests/rb-fci-h2o/Makefile tests/rb-ccsd-opt-grad/Makefile tests/scf-mvd-opt/Makefile tests/scf-mvd-opt-numer/Makefile tests/scf-mvd-opt-puream/Makefile tests/scf-mvd-opt-numer-puream/Makefile tests/scf+d-opt1/Makefile tests/scf+d-freq/Makefile src/bin/giao/Makefile tests/casscf-sp-reorder/Makefile src/samples/Makefile src/samples/MakeVars src/samples/MakeRules src/samples/mints/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # Find out whether ``test -x'' works. Don't use a zero-byte file, as # systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then as_executable_p="test -x" else as_executable_p=: fi rm -f conf$$.file # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by psi $as_me 3.4.0, which was generated by GNU Autoconf 2.60. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ psi config.status 3.4.0 configured by $0, generated by GNU Autoconf 2.60, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/psiconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS include/psiconfig.h" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/chkpt_params.h") CONFIG_FILES="$CONFIG_FILES include/chkpt_params.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/ruby/Makefile") CONFIG_FILES="$CONFIG_FILES lib/ruby/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/Makefile" ;; "src/lib/MakeRules") CONFIG_FILES="$CONFIG_FILES src/lib/MakeRules" ;; "src/lib/MakeVars") CONFIG_FILES="$CONFIG_FILES src/lib/MakeVars" ;; "src/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/Makefile" ;; "src/util/MakeRules") CONFIG_FILES="$CONFIG_FILES src/util/MakeRules" ;; "src/util/MakeVars") CONFIG_FILES="$CONFIG_FILES src/util/MakeVars" ;; "src/bin/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/Makefile" ;; "src/bin/MakeRules") CONFIG_FILES="$CONFIG_FILES src/bin/MakeRules" ;; "src/bin/MakeVars") CONFIG_FILES="$CONFIG_FILES src/bin/MakeVars" ;; "doc/MakeVars") CONFIG_FILES="$CONFIG_FILES doc/MakeVars" ;; "doc/MakeRules") CONFIG_FILES="$CONFIG_FILES doc/MakeRules" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/macros.tex") CONFIG_FILES="$CONFIG_FILES doc/macros.tex" ;; "doc/progman/svn.eps") CONFIG_FILES="$CONFIG_FILES doc/progman/svn.eps" ;; "doc/installation/Makefile") CONFIG_FILES="$CONFIG_FILES doc/installation/Makefile" ;; "doc/progman/Makefile") CONFIG_FILES="$CONFIG_FILES doc/progman/Makefile" ;; "doc/userman/Makefile") CONFIG_FILES="$CONFIG_FILES doc/userman/Makefile" ;; "doc/userman/prsty.bst") CONFIG_FILES="$CONFIG_FILES doc/userman/prsty.bst" ;; "doc/doxygen/Makefile") CONFIG_FILES="$CONFIG_FILES doc/doxygen/Makefile" ;; "doc/doxygen/doxygen.cfg") CONFIG_FILES="$CONFIG_FILES doc/doxygen/doxygen.cfg" ;; "src/lib/libdpd/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libdpd/Makefile" ;; "src/lib/libiwl/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libiwl/Makefile" ;; "src/lib/libpsio/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libpsio/Makefile" ;; "src/lib/libqt/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libqt/Makefile" ;; "src/lib/libbasis/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libbasis/Makefile" ;; "src/lib/libciomr/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libciomr/Makefile" ;; "src/lib/libipv1/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libipv1/Makefile" ;; "src/lib/libchkpt/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libchkpt/Makefile" ;; "src/lib/libderiv/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libderiv/Makefile" ;; "src/lib/libderiv/MakeVars") CONFIG_FILES="$CONFIG_FILES src/lib/libderiv/MakeVars" ;; "src/lib/libderiv/libderiv_config.h") CONFIG_FILES="$CONFIG_FILES src/lib/libderiv/libderiv_config.h" ;; "src/lib/libint/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libint/Makefile" ;; "src/lib/libint/MakeVars") CONFIG_FILES="$CONFIG_FILES src/lib/libint/MakeVars" ;; "src/lib/libint/libint_config.h") CONFIG_FILES="$CONFIG_FILES src/lib/libint/libint_config.h" ;; "src/lib/libr12/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libr12/Makefile" ;; "src/lib/libr12/MakeVars") CONFIG_FILES="$CONFIG_FILES src/lib/libr12/MakeVars" ;; "src/lib/libr12/libr12_config.h") CONFIG_FILES="$CONFIG_FILES src/lib/libr12/libr12_config.h" ;; "src/lib/libutil/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libutil/Makefile" ;; "src/lib/liboptions/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/liboptions/Makefile" ;; "src/lib/libmoinfo/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libmoinfo/Makefile" ;; "src/lib/libmints/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/libmints/Makefile" ;; "src/util/tocprint/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/tocprint/Makefile" ;; "src/util/psi2molden/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/psi2molden/Makefile" ;; "src/bin/cphf/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cphf/Makefile" ;; "src/bin/psi3/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/psi3/Makefile" ;; "src/bin/ccdensity/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/ccdensity/Makefile" ;; "src/bin/ccenergy/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/ccenergy/Makefile" ;; "src/bin/cchbar/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cchbar/Makefile" ;; "src/bin/cclambda/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cclambda/Makefile" ;; "src/bin/ccsort/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/ccsort/Makefile" ;; "src/bin/cctriples/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cctriples/Makefile" ;; "src/bin/cceom/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cceom/Makefile" ;; "src/bin/ccresponse/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/ccresponse/Makefile" ;; "src/bin/cints/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cints/Makefile" ;; "src/bin/cis/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cis/Makefile" ;; "src/bin/clag/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/clag/Makefile" ;; "src/bin/cscf/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cscf/Makefile" ;; "src/bin/detci/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/detci/Makefile" ;; "src/bin/detcas/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/detcas/Makefile" ;; "src/bin/detcasman/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/detcasman/Makefile" ;; "src/bin/extrema/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/extrema/Makefile" ;; "src/bin/geom/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/geom/Makefile" ;; "src/bin/input/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/input/Makefile" ;; "src/bin/intder/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/intder/Makefile" ;; "src/bin/mcscf/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/mcscf/Makefile" ;; "src/bin/mp2/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/mp2/Makefile" ;; "src/bin/mp2r12/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/mp2r12/Makefile" ;; "src/bin/oeprop/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/oeprop/Makefile" ;; "src/bin/optking/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/optking/Makefile" ;; "src/bin/psiclean/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/psiclean/Makefile" ;; "src/bin/transqt/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/transqt/Makefile" ;; "src/bin/transqt2/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/transqt2/Makefile" ;; "src/bin/mvo/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/mvo/Makefile" ;; "src/bin/dboc/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/dboc/Makefile" ;; "src/bin/cusp/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/cusp/Makefile" ;; "src/bin/mocube/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/mocube/Makefile" ;; "src/bin/localize/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/localize/Makefile" ;; "src/bin/stable/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/stable/Makefile" ;; "src/bin/response/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/response/Makefile" ;; "src/bin/psirb/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/psirb/Makefile" ;; "src/bin/psimrcc/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/psimrcc/Makefile" ;; "src/bin/nonbonded/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/nonbonded/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/MakeVars") CONFIG_FILES="$CONFIG_FILES tests/MakeVars" ;; "tests/MakeRules") CONFIG_FILES="$CONFIG_FILES tests/MakeRules" ;; "tests/runtest.pl") CONFIG_FILES="$CONFIG_FILES tests/runtest.pl" ;; "tests/scf-opt/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt/Makefile" ;; "tests/scf-opt-fragments/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt-fragments/Makefile" ;; "tests/mp2-opt-fragments/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-opt-fragments/Makefile" ;; "tests/scf-opt2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt2/Makefile" ;; "tests/scf-opt3/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt3/Makefile" ;; "tests/scf-opt4/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt4/Makefile" ;; "tests/scf-opt5/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt5/Makefile" ;; "tests/scf-opt6/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt6/Makefile" ;; "tests/scf-opt7/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt7/Makefile" ;; "tests/scf-opt9/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt9/Makefile" ;; "tests/scf-opt10/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt10/Makefile" ;; "tests/scf-opt11/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt11/Makefile" ;; "tests/scf-opt12/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt12/Makefile" ;; "tests/scf-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt-numer/Makefile" ;; "tests/scf-opt2-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-opt2-numer/Makefile" ;; "tests/scf-freq/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq/Makefile" ;; "tests/scf-freq-first-3/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-first-3/Makefile" ;; "tests/scf-freq-first-3a/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-first-3a/Makefile" ;; "tests/scf-freq-first-5/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-first-5/Makefile" ;; "tests/scf-freq-first-5a/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-first-5a/Makefile" ;; "tests/scf-freq-none-3/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-none-3/Makefile" ;; "tests/scf-freq-none-5/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-freq-none-5/Makefile" ;; "tests/scf-symm-fc-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-symm-fc-numer/Makefile" ;; "tests/scf-fc-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-fc-numer/Makefile" ;; "tests/scf-polar/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-polar/Makefile" ;; "tests/rhf-oeprop/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rhf-oeprop/Makefile" ;; "tests/rhf-stab/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rhf-stab/Makefile" ;; "tests/rhf-stab/rhf-stab.pl") CONFIG_FILES="$CONFIG_FILES tests/rhf-stab/rhf-stab.pl" ;; "tests/uhf-stab/Makefile") CONFIG_FILES="$CONFIG_FILES tests/uhf-stab/Makefile" ;; "tests/uhf-stab/uhf-stab.pl") CONFIG_FILES="$CONFIG_FILES tests/uhf-stab/uhf-stab.pl" ;; "tests/rohf-stab/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rohf-stab/Makefile" ;; "tests/rohf-stab/rohf-stab.pl") CONFIG_FILES="$CONFIG_FILES tests/rohf-stab/rohf-stab.pl" ;; "tests/cis-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cis-sp/Makefile" ;; "tests/cisd-h2o+-0/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-h2o+-0/Makefile" ;; "tests/cisd-h2o+-1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-h2o+-1/Makefile" ;; "tests/cisd-h2o+-2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-h2o+-2/Makefile" ;; "tests/cisd-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-sp/Makefile" ;; "tests/cisd-sp-2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-sp-2/Makefile" ;; "tests/cisd-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cisd-opt-numer/Makefile" ;; "tests/fci-h2o/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-h2o/Makefile" ;; "tests/fci-h2o-2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-h2o-2/Makefile" ;; "tests/fci-h2o-clpse/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-h2o-clpse/Makefile" ;; "tests/fci-h2o-fzcv/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-h2o-fzcv/Makefile" ;; "tests/fci-dipole/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-dipole/Makefile" ;; "tests/fci-trans/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fci-trans/Makefile" ;; "tests/casscf-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-sp/Makefile" ;; "tests/casscf-sa-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-sa-sp/Makefile" ;; "tests/casscf-fzc-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-fzc-sp/Makefile" ;; "tests/rasscf-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rasscf-sp/Makefile" ;; "tests/casscf-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-opt-numer/Makefile" ;; "tests/casscf-opt/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-opt/Makefile" ;; "tests/zaptn-nh2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/zaptn-nh2/Makefile" ;; "tests/mp2-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-sp/Makefile" ;; "tests/mp2-direct-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-direct-sp/Makefile" ;; "tests/mp2-oeprop/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-oeprop/Makefile" ;; "tests/mp2-scs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-scs/Makefile" ;; "tests/cc1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc1/Makefile" ;; "tests/cc2/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc2/Makefile" ;; "tests/cc3/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc3/Makefile" ;; "tests/cc4/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc4/Makefile" ;; "tests/cc5/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc5/Makefile" ;; "tests/cc6/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc6/Makefile" ;; "tests/cc7/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc7/Makefile" ;; "tests/cc8/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc8/Makefile" ;; "tests/cc8a/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc8a/Makefile" ;; "tests/cc9/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc9/Makefile" ;; "tests/cc9a/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc9a/Makefile" ;; "tests/cc10/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc10/Makefile" ;; "tests/cc11/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc11/Makefile" ;; "tests/cc12/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc12/Makefile" ;; "tests/cc13/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc13/Makefile" ;; "tests/cc13a/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc13a/Makefile" ;; "tests/cc14/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc14/Makefile" ;; "tests/cc15/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc15/Makefile" ;; "tests/cc16/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc16/Makefile" ;; "tests/cc17/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc17/Makefile" ;; "tests/cc18/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc18/Makefile" ;; "tests/cc19/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc19/Makefile" ;; "tests/cc21/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc21/Makefile" ;; "tests/cc22/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc22/Makefile" ;; "tests/cc23/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc23/Makefile" ;; "tests/cc24/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc24/Makefile" ;; "tests/cc25/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc25/Makefile" ;; "tests/cc26/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc26/Makefile" ;; "tests/cc27/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc27/Makefile" ;; "tests/cc28/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc28/Makefile" ;; "tests/cc29/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc29/Makefile" ;; "tests/cc30/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc30/Makefile" ;; "tests/cc31/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc31/Makefile" ;; "tests/cc32/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc32/Makefile" ;; "tests/cc33/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc33/Makefile" ;; "tests/cc34/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc34/Makefile" ;; "tests/cc35/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc35/Makefile" ;; "tests/cc36/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc36/Makefile" ;; "tests/cc37/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc37/Makefile" ;; "tests/cc38/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc38/Makefile" ;; "tests/cc39/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc39/Makefile" ;; "tests/cc40/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc40/Makefile" ;; "tests/cc41/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc41/Makefile" ;; "tests/cc42/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc42/Makefile" ;; "tests/cc43/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc43/Makefile" ;; "tests/cc44/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc44/Makefile" ;; "tests/cc45/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc45/Makefile" ;; "tests/cc46/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc46/Makefile" ;; "tests/cc47/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc47/Makefile" ;; "tests/cc48/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc48/Makefile" ;; "tests/cc49/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc49/Makefile" ;; "tests/cc50/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cc50/Makefile" ;; "tests/psimrcc-sp1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/psimrcc-sp1/Makefile" ;; "tests/dboc-rhf1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/dboc-rhf1/Makefile" ;; "tests/dboc-rohf1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/dboc-rohf1/Makefile" ;; "tests/dboc-uhf1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/dboc-uhf1/Makefile" ;; "tests/dboc-rcisd1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/dboc-rcisd1/Makefile" ;; "tests/dboc-rocisd1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/dboc-rocisd1/Makefile" ;; "tests/extrema-zmat/Makefile") CONFIG_FILES="$CONFIG_FILES tests/extrema-zmat/Makefile" ;; "tests/extrema-deloc/Makefile") CONFIG_FILES="$CONFIG_FILES tests/extrema-deloc/Makefile" ;; "tests/mcscf-rhf1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mcscf-rhf1/Makefile" ;; "tests/mcscf-rohf1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mcscf-rohf1/Makefile" ;; "tests/mcscf-twocon1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mcscf-twocon1/Makefile" ;; "tests/mp2r12-sp1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2r12-sp1/Makefile" ;; "tests/mp2-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-opt-numer/Makefile" ;; "tests/mp2-opt/Makefile") CONFIG_FILES="$CONFIG_FILES tests/mp2-opt/Makefile" ;; "tests/rhf-lindep1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rhf-lindep1/Makefile" ;; "tests/rohf-lindep1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rohf-lindep1/Makefile" ;; "tests/uhf-lindep1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/uhf-lindep1/Makefile" ;; "tests/psi_start/Makefile") CONFIG_FILES="$CONFIG_FILES tests/psi_start/Makefile" ;; "tests/psi_start/psi_start.pl") CONFIG_FILES="$CONFIG_FILES tests/psi_start/psi_start.pl" ;; "tests/rb-scf-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rb-scf-opt-numer/Makefile" ;; "tests/rb-ccsd_t-sp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rb-ccsd_t-sp/Makefile" ;; "tests/rb-fci-h2o/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rb-fci-h2o/Makefile" ;; "tests/rb-ccsd-opt-grad/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rb-ccsd-opt-grad/Makefile" ;; "tests/scf-mvd-opt/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-mvd-opt/Makefile" ;; "tests/scf-mvd-opt-numer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-mvd-opt-numer/Makefile" ;; "tests/scf-mvd-opt-puream/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-mvd-opt-puream/Makefile" ;; "tests/scf-mvd-opt-numer-puream/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf-mvd-opt-numer-puream/Makefile" ;; "tests/scf+d-opt1/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf+d-opt1/Makefile" ;; "tests/scf+d-freq/Makefile") CONFIG_FILES="$CONFIG_FILES tests/scf+d-freq/Makefile" ;; "src/bin/giao/Makefile") CONFIG_FILES="$CONFIG_FILES src/bin/giao/Makefile" ;; "tests/casscf-sp-reorder/Makefile") CONFIG_FILES="$CONFIG_FILES tests/casscf-sp-reorder/Makefile" ;; "src/samples/Makefile") CONFIG_FILES="$CONFIG_FILES src/samples/Makefile" ;; "src/samples/MakeVars") CONFIG_FILES="$CONFIG_FILES src/samples/MakeVars" ;; "src/samples/MakeRules") CONFIG_FILES="$CONFIG_FILES src/samples/MakeRules" ;; "src/samples/mints/Makefile") CONFIG_FILES="$CONFIG_FILES src/samples/mints/Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim PSI_VERSION!$PSI_VERSION$ac_delim PSI_BUILDID!$PSI_BUILDID$ac_delim PSI_BUGREPORT!$PSI_BUGREPORT$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim target!$target$ac_delim target_cpu!$target_cpu$ac_delim target_vendor!$target_vendor$ac_delim target_os!$target_os$ac_delim SET_MAKE!$SET_MAKE$ac_delim objincdir!$objincdir$ac_delim txtdir!$txtdir$ac_delim pkgdatadir!$pkgdatadir$ac_delim INSTALL_INCLUDE!$INSTALL_INCLUDE$ac_delim MKDIRS!$MKDIRS$ac_delim LIBINT_NEW_AM!$LIBINT_NEW_AM$ac_delim LIBINT_OPT_AM!$LIBINT_OPT_AM$ac_delim LIBDERIV_NEW_AM1!$LIBDERIV_NEW_AM1$ac_delim LIBDERIV_NEW_AM2!$LIBDERIV_NEW_AM2$ac_delim LIBR12_NEW_AM!$LIBR12_NEW_AM$ac_delim LIBR12_OPT_AM!$LIBR12_OPT_AM$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim F77!$F77$ac_delim FFLAGS!$FFLAGS$ac_delim ac_ct_F77!$ac_ct_F77$ac_delim FC_SYMBOL!$FC_SYMBOL$ac_delim RANLIB!$RANLIB$ac_delim CPP!$CPP$ac_delim CXXCPP!$CXXCPP$ac_delim LEX!$LEX$ac_delim LEXLIB!$LEXLIB$ac_delim LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim YACC!$YACC$ac_delim YFLAGS!$YFLAGS$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim LN_S!$LN_S$ac_delim AR!$AR$ac_delim ARFLAGS!$ARFLAGS$ac_delim LD!$LD$ac_delim LDLIBS!$LDLIBS$ac_delim PERL!$PERL$ac_delim LATEX!$LATEX$ac_delim LATEX2HTML!$LATEX2HTML$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF DVIPS!$DVIPS$ac_delim BIBTEX!$BIBTEX$ac_delim DOXYGEN!$DOXYGEN$ac_delim HAVE_DOT!$HAVE_DOT$ac_delim DOT_PATH!$DOT_PATH$ac_delim FLIBS!$FLIBS$ac_delim BLAS!$BLAS$ac_delim LAPACK!$LAPACK$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim RUBYLIB!$RUBYLIB$ac_delim RUBYINC!$RUBYINC$ac_delim HAVE_RUBY!$HAVE_RUBY$ac_delim RUBYLDFLAGS!$RUBYLDFLAGS$ac_delim LIBSUF!$LIBSUF$ac_delim OBJSUF!$OBJSUF$ac_delim CCDEPENDSUF!$CCDEPENDSUF$ac_delim CXXDEPENDSUF!$CXXDEPENDSUF$ac_delim CCDEPENDFLAGS!$CCDEPENDFLAGS$ac_delim CXXDEPENDFLAGS!$CXXDEPENDFLAGS$ac_delim PSICPPFLAGS!$PSICPPFLAGS$ac_delim CDBG!$CDBG$ac_delim COPT!$COPT$ac_delim CDEF!$CDEF$ac_delim COTH!$COTH$ac_delim CINC!$CINC$ac_delim CXXDBG!$CXXDBG$ac_delim CXXOPT!$CXXOPT$ac_delim CXXDEF!$CXXDEF$ac_delim CXXOTH!$CXXOTH$ac_delim CXXINC!$CXXINC$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 33; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test $HAVE_RUBY = no; then if test -z $RUBYLIB; then { echo "$as_me:$LINENO: Unable to locate libruby-static.a will not link the psirb module." >&5 echo "$as_me: Unable to locate libruby-static.a will not link the psirb module." >&6;} fi if test -z $RUBYINC; then { echo "$as_me:$LINENO: Unable to locate ruby.h will not link the psirb module." >&5 echo "$as_me: Unable to locate ruby.h will not link the psirb module." >&6;} fi fi psi3/configure.ac0000644000101500007650000006643711142124113012475 0ustar crawdad# Process this file with autoconf to produce a configure script. # # # # define([psi_version],[3.4.0]) define([psi_buildid],[alpha]) define([psi_bugreport],[psicode@users.sourceforge.net]) AC_PREREQ(2.57) AC_INIT([psi],[psi_version],[psi_bugreport]) AC_CONFIG_HEADER(include/psiconfig.h) PSI_VERSION=psi_version PSI_BUILDID=psi_buildid PSI_BUGREPORT=psi_bugreport AC_SUBST(PSI_VERSION) AC_SUBST(PSI_BUILDID) AC_SUBST(PSI_BUGREPORT) AC_CONFIG_AUX_DIR(bin) AC_CANONICAL_TARGET AC_PREFIX_DEFAULT(/usr/local/psi) AC_PROG_MAKE_SET() # Psi now is primarily C++ AC_LANG([C++]) srcdir=`(cd $srcdir; pwd)` objincdir='$(top_objdir)/include' AC_SUBST([objincdir]) if test -z $docdir; then docdir='$(datadir)/doc/$(PACKAGE)' AC_SUBST([docdir]) fi if test -z $txtdir; then txtdir='$(docdir)/txt' AC_SUBST([txtdir]) fi if test -z $htmldir; then htmldir='$(docdir)/html' AC_SUBST([htmldir]) fi if test -z $dvidir; then dvidir='$(docdir)/dvi' AC_SUBST([dvidir]) fi pkgdatadir='$(datadir)/psi' AC_SUBST([pkgdatadir]) INSTALL_INCLUDE='$(top_srcdir)/bin/installinc.sh' AC_SUBST(INSTALL_INCLUDE) MKDIRS='$(top_srcdir)/bin/mkdirs.sh' AC_SUBST(MKDIRS) ######## ## PSI-specific options ######## # Options for libint LIBINT_NEW_AM=8 LIBINT_OPT_AM=4 AC_ARG_WITH(max-am-eri,[ --with-max-am-eri maximum AM in ERIs],[ LIBINT_NEW_AM=$((2*($withval))) LIBINT_OPT_AM=$(($withval)) ]) AC_SUBST(LIBINT_NEW_AM) AC_SUBST(LIBINT_OPT_AM) # Options for libderiv LIBDERIV_NEW_AM1=6 AC_ARG_WITH(max-am-deriv1,[ --with-max-am-deriv1 maximum AM in ERI first derivatives],[ LIBDERIV_NEW_AM1=$((2*($withval))) ]) AC_SUBST(LIBDERIV_NEW_AM1) LIBDERIV_NEW_AM2=6 AC_ARG_WITH(max-am-deriv2,[ --with-max-am-deriv2 maximum AM in ERI second derivatives],[ LIBDERIV_NEW_AM2=$((2*($withval))) ]) AC_SUBST(LIBDERIV_NEW_AM2) # Options for libr12 LIBR12_NEW_AM=6 LIBR12_OPT_AM=6 AC_ARG_WITH(max-am-r12,[ --with-max-am-r12 maximum AM in R12 integrals],[ LIBR12_NEW_AM=$((2*($withval))) LIBR12_OPT_AM=$((2*($withval))) ]) AC_SUBST(LIBR12_NEW_AM) AC_SUBST(LIBR12_OPT_AM) PSI_INTEGRALS_STANDARD=1 AC_ARG_WITH(integrals-standard,[ --with-integrals-standard specifies the standard for the basis normalization, etc. The allowed values are cca (default) and psi.],[ case $withval in psi) PSI_INTEGRALS_STANDARD=0 ;; cca) PSI_INTEGRALS_STANDARD=1 ;; *) AC_MSG_WARN([did not recognize value $withval. will assume the default]) ;; esac ]) AC_DEFINE_UNQUOTED(PSI_INTEGRALS_STANDARD,$PSI_INTEGRALS_STANDARD) ######## ## Check for programs ######## case $target_os in aix*) CC_LIST="gcc cc_r cc" CXX_LIST="g++ xlC_r c++" F77_LIST="ifort gfortran g77 xlf_r f77" ;; *) CC_LIST="gcc icc cc" CXX_LIST="g++ c++ icpc cxx" F77_LIST="gfortran g77 ifort f77" ;; esac AC_ARG_WITH(aix64, [ --with-aix64 Compiling on a 64-bit AIX machine.], CXXFLAGS="$CXXFLAGS -maix64" F77FLAGS="$F77FLAGS -maix64" CFLAGS="$CFLAGS -maix64" LDFLAGS="$LDFLAGS -maix64" AIX64=yes AC_MSG_RESULT([Compiling on 64-bit AIX]) ) AC_ARG_WITH(cc,[ --with-cc which C compiler to use],[ CC=$withval ]) AC_PROG_CC([$CC_LIST]) AC_ARG_WITH(cxx,[ --with-cxx which C++ compiler to use],[ CXX=$withval ]) AC_PROG_CXX([$CXX_LIST]) AC_ARG_WITH(fc,[ --with-fc which Fortran compiler to use],[ case $withval in no) F77="no" ;; *) F77=$withval ;; esac ]) if test -z "$F77"; then AC_PROG_F77 elif test "$F77" = "no"; then F77="" fi dnl ----------- See if Fortran works -------------- if test -n "$F77" -a "$F77" != no ; then AC_MSG_CHECKING([if fortran compiler works]) /bin/rm -f ffunc.f echo " program main" > ffunc.f echo " end" >> ffunc.f if $F77 -o ffunc ffunc.f 1>&5 2>&5; then AC_MSG_RESULT([yes]) F77_WORKS=yes else AC_MSG_RESULT([no]) F77_WORKS=no fi /bin/rm -f ffunc ffunc.f fi dnl ----------- Fortran symbol names -------------- AC_ARG_WITH(f77symbol,[ --with-f77symbol FORTRAN77 symbol convention Allowed values are: lc : lower-case lcu : lower-case with underscore (default) uc : upper-case ucu : upper-case with underscore],[ case $withval in lc) FC_SYMBOL=1 ;; lcu) FC_SYMBOL=2 ;; uc) FC_SYMBOL=3 ;; ucu) FC_SYMBOL=4 ;; *) AC_MSG_WARN([did not recognize value $withval. will assume lower-case with underscore]) FC_SYMBOL=2 ;; esac ]) if test -z "$FC_SYMBOL"; then AC_MSG_CHECKING([fortran symbols]) if test -n "$F77" -a "$F77" != no -a X$F77_WORKS != Xno; then /bin/rm -f ffunc.f flink.cc echo " subroutine ffunc()" > ffunc.f echo " return" >> ffunc.f echo " end" >> ffunc.f $F77 -c ffunc.f 1>/dev/null 2>/dev/null echo "extern \"C\" void FF(); int main(int argc, char** argv){ FF(); return 0; }" > flink.cc if $CXX -o flink -DFF=ffunc flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then AC_MSG_RESULT([lowercase]) FC_SYMBOL=1 elif $CXX -o flink -DFF=ffunc_ flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then AC_MSG_RESULT([lowercase with underscore]) FC_SYMBOL=2 elif $CXX -o flink -DFF=FFUNC flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then AC_MSG_RESULT([uppercase]) FC_SYMBOL=3 elif $CXX -o flink -DFF=FFUNC_ flink.cc ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then AC_MSG_RESULT([uppercase with underscore]) FC_SYMBOL=4 else AC_MSG_RESULT([giving up]) AC_MSG_ERROR([could not determine F77 symbol names]) fi /bin/rm -f ffunc.f ffunc.o flink flink.cc flink.o ffunc else FC_SYMBOL=2 AC_MSG_RESULT([will assume lowercase with underscore]) fi fi AC_SUBST(FC_SYMBOL) AC_PROG_RANLIB AC_PROG_CPP AC_PROG_CXXCPP AC_PROG_LEX AC_PROG_YACC AC_PROG_INSTALL AC_PROG_LN_S AC_CHECK_PROGS(AR,ar,ar) AC_ARG_WITH(ar, [ --with-ar Names the archive creator.], AR=$withval ) AC_SUBST(AR) ARFLAGS=r AC_ARG_WITH(ar-flags, [ --with-ar-flags Flags for the the archive creator.], ARFLAGS=$withval ) case $os in aix*) ARFLAGS="-X32_64 $ARFLAGS" ;; esac AC_SUBST(ARFLAGS) AC_ARG_WITH(ld, [ --with-ld Names the object linker.], LD=$withval ) AC_SUBST(LD) EXTRAINCDIRS= CPPFLAGS= AC_ARG_WITH(incdirs, [ --with-incdirs Specifies include directories (-Idir1 -Idir2).], EXTRAINCDIRS=$withval CPPFLAGS=$withval AC_MSG_RESULT([Using extra include directories: $withval]) ) AC_ARG_WITH(libs, [ --with-libs Specifies libraries (-llib1 -llib2).], LDLIBS=$withval AC_MSG_RESULT([Using extra libraries: $withval]) ) AC_SUBST(LDLIBS) LDFLAGS= LIBDIRS= AC_ARG_WITH(libdirs, [ --with-libdirs Specifies library directories (-Ldir1 -Ldir2).], LIBDIRS=$withval LDFLAGS=$withval AC_MSG_RESULT([Using extra library directories: $withval]) ) AC_SUBST(LDFLAGS) AC_CHECK_PROGS(PERL,perl,perl) AC_SUBST(PERL) AC_PROG_LATEX AC_PROG_LATEX2HTML AC_PROG_DVIPS AC_PROG_BIBTEX #### # Check for doxygen and it buddies #### AC_CHECK_PROGS(DOXYGEN,doxygen,NO) DOT=yes AC_ARG_WITH(dot, [ --with-dot Gives the path to the dot graph generator.], DOT=$withval ) DOT_PATH="" if test X$DOT = Xno; then HAVE_DOT=NO elif test X$DOT = Xyes; then AC_CHECK_PROG(HAVE_DOT,dot,YES,NO) else HAVE_DOT=YES DOT_PATH=$DOT fi AC_SUBST(DOT_PATH) AC_SUBST(HAVE_DOT) ######## ## Check for libraries ######## if test ! -z "$F77"; then AC_F77_LIBRARY_LDFLAGS dnl --- This just implicitly checks that FLIBS can co-exist with the C++ linker AC_CHECK_LIB(c,exit,[],[ FLIBS= AC_MSG_WARN([F77 libraries don't seem to link with C++ programs]) ], $FLIBS) fi AC_ARG_WITH(blas,[ --with-blas which blas library to use],[ case $withval in yes) BLAS='-lblas' ;; no) BLAS='' ;; *) BLAS=$withval ;; esac ]) AC_ARG_WITH(lapack,[ --with-lapack which lapack library to use],[ case $withval in yes) LAPACK='-llapack' ;; no) LAPACK='' ;; *) LAPACK=" $withval" ;; esac ]) # Set strings for particular BLAS and LAPACK functions for later testing case $FC_SYMBOL in 1) DGEMM_SYMBOL=dgemm DGEEV_SYMBOL=dgeev ;; 2) DGEMM_SYMBOL=dgemm_ DGEEV_SYMBOL=dgeev_ ;; 3) DGEMM_SYMBOL=DGEMM DGEEV_SYMBOL=DGEEV ;; 4) DGEMM_SYMBOL=DGEMM_ DGEEV_SYMBOL=DGEEV_ ;; esac SAVE_LIBS=$LIBS LIBS="$LIBS $CLIBS $FLIBS" ### If the user didn't give us a BLAS lib, see if we can find one # If we're using the Intel compilers, we prefer MKL as well if test -z "$BLAS"; then if test $CC = icc -o $CXX = icpc; then AC_CHECK_LIB(mkl, $DGEMM_SYMBOL, BLAS="-lmkl") fi fi # Otherwise, run through a list of possibilities if test -z "$BLAS"; then AC_CHECK_LIB(essl, $DGEMM_SYMBOL, BLAS="-lessl -lpthread") fi if test -z "$BLAS"; then AC_CHECK_LIB(scs, $DGEMM_SYMBOL, BLAS="-lscs") fi if test -z "$BLAS"; then SAVE_LIBS2=$LIBS LIBS="-lpthread $LIBS" AC_CHECK_LIB(goto, $DGEMM_SYMBOL, BLAS="-lgoto -lpthread") LIBS=$SAVE_LIBS2 fi if test -z "$BLAS"; then SAVE_LIBS2=$LIBS LIBS="-latlas $LIBS" AC_CHECK_LIB(f77blas, $DGEMM_SYMBOL, BLAS="-lf77blas -latlas") LIBS=$SAVE_LIBS2 fi if test -z "$BLAS"; then AC_CHECK_LIB(mkl, $DGEMM_SYMBOL, BLAS="-lmkl") fi if test -z "$BLAS"; then AC_CHECK_LIB(blas, $DGEMM_SYMBOL, BLAS="-lblas") fi if test -z "$BLAS"; then case $target_vendor in apple) BLAS="-altivec -framework vecLib" AUTOAPPLE="yes" AC_MSG_RESULT([No BLAS specified and vendor is Apple: Assuming vecLib is available!]) ;; esac fi if test -z "$BLAS"; then AC_MSG_ERROR("Did not find a BLAS library.") fi AC_SUBST(BLAS) AC_MSG_RESULT([BLAS library is $BLAS]) LIBS=$SAVE_LIBS # Similar checks for LAPACK, except that sometimes BLAS includes LAPACK # Also note that LAPACK often (always?) depends on BLAS SAVE_LIBS=$LIBS LIBS="$BLAS $LIBS $CLIBS $FLIBS" if test -z "$LAPACK"; then if test ! -z "$AUTOAPPLE"; then AC_MSG_RESULT([Assuming vecLib for LAPACK]) LAPACK="$BLAS" LAPACK_IN_BLAS=yes else AC_CHECK_FUNC($DGEEV_SYMBOL,LAPACK_IN_BLAS=yes) fi fi if test -z "$LAPACK_IN_BLAS"; then if test -z "$LAPACK"; then if test $CC = icc -o $CXX = icpc; then # Intel's libmkl_lapack64 contains the double-precision routines AC_CHECK_LIB(mkl_lapack64,$DGEEV_SYMBOL,LAPACK="-lmkl_lapack64") fi fi if test -z "$LAPACK"; then AC_CHECK_LIB(lapack,$DGEEV_SYMBOL,LAPACK="-llapack") fi if test -z "$LAPACK"; then AC_MSG_ERROR("Did not find a LAPACK library."); fi AC_MSG_RESULT([LAPACK library is $LAPACK]) else AC_MSG_RESULT([LAPACK library is included in BLAS+LIBS]) fi AC_SUBST(LAPACK) LIBS=$SAVE_LIBS # Check for libcompat.a availability #case $target_vendor in # apple) # AC_HAVE_LIBRARY(compat,CLIBS="-lcompat $CLIBS",AC_MSG_ERROR([Missing libcompat.a: See http://www.opensource.apple.com/ for more information])) # echo "$CLIBS" # ;; #esac ######## ## Check for header files ######## # check for header files AC_CHECK_HEADERS([errno.h fcntl.h unistd.h stdint.h sys/types.h sys/times.h sys/param.h]) # check for C++ headers AC_CXX_PROCESS_CHECK([cmath],[#include ],,[HAVE_CMATH=1],[HAVE_CMATH=0]) CXXDEF="$CXXDEF -DHAVE_CMATH=$HAVE_CMATH" AC_CXX_PROCESS_CHECK([cstdio],[#include ],,[HAVE_CSTDIO=1],[HAVE_CSTDIO=0]) CXXDEF="$CXXDEF -DHAVE_CSTDIO=$HAVE_CSTDIO" AC_CXX_PROCESS_CHECK([cstdlib],[#include ],,[HAVE_CSTDLIB=1],[HAVE_CSTDLIB=0]) CXXDEF="$CXXDEF -DHAVE_CSTDLIB=$HAVE_CSTDLIB" AC_CXX_PROCESS_CHECK([cstring],[#include ],,[HAVE_CSTRING=1],[HAVE_CSTRING=0]) CXXDEF="$CXXDEF -DHAVE_CSTRING=$HAVE_CSTRING" AC_CXX_PROCESS_CHECK([cstddef],[#include ],,[HAVE_CSTDDEF=1],[HAVE_CSTDDEF=0]) CXXDEF="$CXXDEF -DHAVE_CSTDDEF=$HAVE_CSTDDEF" #################### # Check for Ruby # #################### HAVE_RUBY="no" RUBYINC="" CHECKRUBY="yes" AC_ARG_WITH(ruby-include,[ --with-ruby-include where to look for Ruby headers (-Idir1 -Idir2 etc.)],[ case $withval in yes) ;; no) CHECKRUBY="no" ;; *) RUBYINC="$withval" ;; esac ]) if test X$CHECKRUBY = Xyes; then REF_CPPFLAGS=$CPPFLAGS CPPFLAGS="$REF_CPPFLAGS $RUBYINC" AC_CHECK_HEADER(ruby.h,[HAVE_RUBY="yes"],[HAVE_RUBY="no"]) CPPFLAGS=$REF_CPPFLAGS fi if test X$HAVE_RUBY = Xyes; then HAVE_RUBY="no" RUBYLIB="-lruby-static" CHECKRUBY="yes" AC_ARG_WITH(ruby-lib,[ --with-ruby-lib which Ruby library to use (-Ldir1 -lruby_red)],[ case $withval in yes) ;; no) CHECKRUBY="no" ;; *) RUBYLIB="$withval" ;; esac ]) if test $CHECKRUBY = yes; then AC_MSG_CHECKING([for ruby_init]) REF_LIBS=$LIBS LIBS="$RUBYLIB $LIBS" REF_CPPFLAGS=$CPPFLAGS CPPFLAGS="$REF_CPPFLAGS $RUBYINC" AC_LINK_IFELSE( AC_LANG_PROGRAM( [[#include ]], [[ void (*funcptr)() = ruby_init; funcptr(); ]] ), HAVE_RUBY=yes AC_MSG_RESULT(yes), HAVE_RUBY=no AC_MSG_RESULT(no) ) LIBS=$REF_LIBS CPPFLAGS=$REF_CPPFLAGS fi fi ######################################################################### # Special linking flags for psirb, because it loads shared object files # # This has to do with dlopen being "lazy" by default on Apple, but not # # on Linux # ######################################################################### case $target_vendor in apple) RUBYLDFLAGS="" ;; *) RUBYLDFLAGS="-rdynamic -Wl,-export-dynamic" ;; esac AC_SUBST(RUBYLIB) AC_SUBST(RUBYINC) AC_SUBST(HAVE_RUBY) AC_SUBST(RUBYLDFLAGS) ######## ## Check for compiler characteristics ######## test -z "$LIBSUF" && LIBSUF=a AC_SUBST(LIBSUF) test -z "$OBJSUF" && OBJSUF=o AC_SUBST(OBJSUF) dnl -- check how dependency information is built -- # The GNU compilers work with: CCDEPENDSUF=none CXXDEPENDSUF=none CCDEPENDFLAGS=-M CXXDEPENDFLAGS=-M /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o # Check for an IBM visual age C compiler echo "#include " > depcheck.c $CC $CPPFLAGS $CFLAGS -M depcheck.c > /dev/null 2>&1 if test -f depcheck.u; then CCDEPENDSUF=u fi /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o # Check for an IBM visual age C++ compiler echo "#include " > depcheck.cc $CXX $CPPFLAGS $CXXFLAGS -M -E depcheck.cc > /dev/null 2>&1 if test -f depcheck.u; then CXXDEPENDSUF=u CXXDEPENDFLAGS="-M -E" fi /bin/rm -f depcheck.u depcheck.c depcheck.cc depcheck.o AC_SUBST(CCDEPENDSUF) AC_SUBST(CXXDEPENDSUF) AC_SUBST(CCDEPENDFLAGS) AC_SUBST(CXXDEPENDFLAGS) AC_CHECK_DECLS([putenv],[extradef="-DHAVE_DECL_PUTENV=1"]) CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" AC_CHECK_FUNC(putenv,[extradef="-DHAVE_PUTENV=1"]) CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" AC_CHECK_DECLS([setenv],[extradef="-DHAVE_DECL_SETENV=1"]) CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" AC_CHECK_FUNC(setenv,[extradef="-DHAVE_SETENV=1"]) CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" AC_CHECK_LIB(m,isinf,[extradef="-DHAVE_FUNC_ISINF=1"],[extradef=""]) if test X$extradef = X; then AC_CHECK_LIB(m,finite,[extradef="-DHAVE_FUNC_FINITE=1"],[extradef=""]) fi if test X$extradef = X; then AC_MSG_ERROR([Did not find isinf() or finite() functions.]) else CDEF="$CDEF $extradef" CXXDEF="$CXXDEF $extradef" fi dnl ------------------- Determine Compiler Flags -------------------- # User's input overrides all defaults # Defaults depend on the compiler and the architecture AC_MSG_RESULT([-------------------------------------------------------------------------------]) # default is to optimize with -O2, no debugging symbols will be generated PSICPPFLAGS='-I. -I$(objincdir) -I$(top_srcdir)/include -I$(top_srcdir)/src/lib -I$(top_objdir)/src/lib' AC_SUBST(PSICPPFLAGS) CDBG='' AC_SUBST(CDBG) COPT='-O2' AC_SUBST(COPT) AC_SUBST(CDEF) COTH='' AC_SUBST(COTH) CINC='$(CPPFLAGS) $(PSICPPFLAGS)' AC_SUBST(CINC) CXXDBG='' AC_SUBST(CXXDBG) CXXOPT='-O2' AC_SUBST(CXXOPT) AC_SUBST(CXXDEF) CXXOTH='' AC_SUBST(CXXOTH) CXXINC='$(CPPFLAGS) $(PSICPPFLAGS)' AC_SUBST(CXXINC) # Check user's input # The default is to optimize. --with-opt=no or --without-opt will turn # off optimization. OPTFLAGS_GIVEN=no AC_ARG_WITH(opt,[ --with-opt Specifies the C++/C optimization compiler flags. --with-opt=no means no optimization],[ case $withval in no) COPT='' CXXOPT='' OPTFLAGS_GIVEN=yes ;; *) COPT="$withval" CXXOPT="$withval" OPTFLAGS_GIVEN=yes ;; esac ]) if test X$OPTFLAGS_GIVEN = Xyes; then AC_MSG_RESULT([C++ optimization flags : $CXXOPT]) fi # if not given by the user, use architecture-dependent defaults if test X$OPTFLAGS_GIVEN = Xno; then case $target_cpu in rs6000) if test "$CC" = xlc_r -o "$CC" = cc_r ; then COPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi if test "$CXX" = xlC_r ; then CXXOPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi ;; powerpc) if test "$CC" = xlc_r -o "$CC" = cc_r ; then COPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" fi if test "$CXX" = xlC_r ; then CXXOPT="-O3 -qhot -qstrict -qarch=auto -qtune=auto -qmaxmem=-1" LDLIBS="$LDLIBS $FLIBS" fi if test "$CXX" = g++ ; then CXXOPT="-O3" LDLIBS="$LDLIBS $FLIBS" fi ;; x86_64) if test "$CC" = gcc -o "$CC" = cc ; then COPT="-O3 -m64" fi if test "$CXX" = g++ -o "$CXX" = c++ -o "$CXX" = gcc ; then CXXOPT="-O3 -m64" fi ;; esac AC_MSG_RESULT([C++ optimization flags : $CXXOPT]) fi case $target_os in aix*) # _ALL_SOURCE is required because some include files on AIX don't seem to work with pure POSIX # Removed -D_LARGE_FILE EXTRADEFS="-D_ALL_SOURCE" CDEF="$CDEF $EXTRADEFS" CXXDEF="$CXXDEF $EXTRADEFS" ;; linux*) EXTRADEFS="-DLinux -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" CDEF="$CDEF $EXTRADEFS" CXXDEF="$CXXDEF $EXTRADEFS" ;; esac AC_MSG_RESULT([extra preprocessor defines : $CXXDEF]) # Obtain the debug flags. # The default is to not debug. --with-debug will turn on debugging. AC_ARG_WITH(debug,[ --with-debug will turn on debugging],[ case $withval in yes) CDBG='-g' CXXDBG='-g' ;; no) CDBG='' CXXDBG='' ;; *) CDBG="$withval" CXXDBG="$withval" ;; esac ]) AC_MSG_RESULT([debugging C++ compiler flags : $CXXDBG]) # Adjust the flags dealing with strictness of the compilers. # The default is to disable strict language checks. --with-opt=no or # --without-opt will turn off optimization. AC_ARG_WITH(strict,[ --with-strict --with-strict=yes to turn on strict compiler warnings],[ case $withval in yes) # "Strict" flags only known for GNU compilers if test "$GCC" = yes ; then COTH="$COTH -Wall -ansi" fi if test "$GXX" = yes ; then CXXOTH="$CXXOTH -Wall -ansi" fi ;; no) ;; esac ]) AC_MSG_RESULT([misc C++ compiler flags : $CXXOTH]) CFLAGS='$(CDBG) $(COPT) $(CDEF) $(COTH) $(CINC)' AC_SUBST(CFLAGS) CXXFLAGS='$(CXXDBG) $(CXXOPT) $(CXXDEF) $(CXXOTH) $(CXXINC)' AC_SUBST(CXXFLAGS) if test X$AIX64 = Xyes; then if test X$CXX = Xg++; then COTH="$COTH -maix64" CXXOTH="$CXXOTH -maix64" F77FLAGS="$F77FLAGS -maix64" LDFLAGS="$LDFLAGS -maix64" LDLIBS="$LAPACK $BLAS $LDLIBS" fi fi AC_MSG_RESULT([-------------------------------------------------------------------------------]) ######## ## Output ######## AC_CONFIG_FILES([include/Makefile include/chkpt_params.h Makefile lib/Makefile lib/ruby/Makefile src/Makefile src/lib/Makefile src/lib/MakeRules src/lib/MakeVars src/util/Makefile src/util/MakeRules src/util/MakeVars src/bin/Makefile src/bin/MakeRules src/bin/MakeVars doc/MakeVars doc/MakeRules doc/Makefile doc/macros.tex doc/progman/svn.eps doc/installation/Makefile doc/progman/Makefile doc/userman/Makefile doc/userman/prsty.bst doc/doxygen/Makefile doc/doxygen/doxygen.cfg src/lib/libdpd/Makefile src/lib/libiwl/Makefile src/lib/libpsio/Makefile src/lib/libqt/Makefile src/lib/libbasis/Makefile src/lib/libciomr/Makefile src/lib/libipv1/Makefile src/lib/libchkpt/Makefile src/lib/libderiv/Makefile src/lib/libderiv/MakeVars src/lib/libderiv/libderiv_config.h src/lib/libint/Makefile src/lib/libint/MakeVars src/lib/libint/libint_config.h src/lib/libr12/Makefile src/lib/libr12/MakeVars src/lib/libr12/libr12_config.h src/lib/libutil/Makefile src/lib/liboptions/Makefile src/lib/libmoinfo/Makefile src/lib/libmints/Makefile src/util/tocprint/Makefile src/util/psi2molden/Makefile src/bin/cphf/Makefile src/bin/psi3/Makefile src/bin/ccdensity/Makefile src/bin/ccenergy/Makefile src/bin/cchbar/Makefile src/bin/cclambda/Makefile src/bin/ccsort/Makefile src/bin/cctriples/Makefile src/bin/cceom/Makefile src/bin/ccresponse/Makefile src/bin/cints/Makefile src/bin/cis/Makefile src/bin/clag/Makefile src/bin/cscf/Makefile src/bin/detci/Makefile src/bin/detcas/Makefile src/bin/detcasman/Makefile src/bin/extrema/Makefile src/bin/geom/Makefile src/bin/input/Makefile src/bin/intder/Makefile src/bin/mcscf/Makefile src/bin/mp2/Makefile src/bin/mp2r12/Makefile src/bin/oeprop/Makefile src/bin/optking/Makefile src/bin/psiclean/Makefile src/bin/transqt/Makefile src/bin/transqt2/Makefile src/bin/mvo/Makefile src/bin/dboc/Makefile src/bin/cusp/Makefile src/bin/mocube/Makefile src/bin/localize/Makefile src/bin/stable/Makefile src/bin/response/Makefile src/bin/psirb/Makefile src/bin/psimrcc/Makefile src/bin/nonbonded/Makefile tests/Makefile tests/MakeVars tests/MakeRules tests/runtest.pl tests/scf-opt/Makefile tests/scf-opt-fragments/Makefile tests/mp2-opt-fragments/Makefile tests/scf-opt2/Makefile tests/scf-opt3/Makefile tests/scf-opt4/Makefile tests/scf-opt5/Makefile tests/scf-opt6/Makefile tests/scf-opt7/Makefile tests/scf-opt9/Makefile tests/scf-opt10/Makefile tests/scf-opt11/Makefile tests/scf-opt12/Makefile tests/scf-opt-numer/Makefile tests/scf-opt2-numer/Makefile tests/scf-freq/Makefile tests/scf-freq-first-3/Makefile tests/scf-freq-first-3a/Makefile tests/scf-freq-first-5/Makefile tests/scf-freq-first-5a/Makefile tests/scf-freq-none-3/Makefile tests/scf-freq-none-5/Makefile tests/scf-symm-fc-numer/Makefile tests/scf-fc-numer/Makefile tests/scf-polar/Makefile tests/rhf-oeprop/Makefile tests/rhf-stab/Makefile tests/rhf-stab/rhf-stab.pl tests/uhf-stab/Makefile tests/uhf-stab/uhf-stab.pl tests/rohf-stab/Makefile tests/rohf-stab/rohf-stab.pl tests/cis-sp/Makefile tests/cisd-h2o+-0/Makefile tests/cisd-h2o+-1/Makefile tests/cisd-h2o+-2/Makefile tests/cisd-sp/Makefile tests/cisd-sp-2/Makefile tests/cisd-opt-numer/Makefile tests/fci-h2o/Makefile tests/fci-h2o-2/Makefile tests/fci-h2o-clpse/Makefile tests/fci-h2o-fzcv/Makefile tests/fci-dipole/Makefile tests/fci-trans/Makefile tests/casscf-sp/Makefile tests/casscf-sa-sp/Makefile tests/casscf-fzc-sp/Makefile tests/rasscf-sp/Makefile tests/casscf-opt-numer/Makefile tests/casscf-opt/Makefile tests/zaptn-nh2/Makefile tests/mp2-sp/Makefile tests/mp2-direct-sp/Makefile tests/mp2-oeprop/Makefile tests/mp2-scs/Makefile tests/cc1/Makefile tests/cc2/Makefile tests/cc3/Makefile tests/cc4/Makefile tests/cc5/Makefile tests/cc6/Makefile tests/cc7/Makefile tests/cc8/Makefile tests/cc8a/Makefile tests/cc9/Makefile tests/cc9a/Makefile tests/cc10/Makefile tests/cc11/Makefile tests/cc12/Makefile tests/cc13/Makefile tests/cc13a/Makefile tests/cc14/Makefile tests/cc15/Makefile tests/cc16/Makefile tests/cc17/Makefile tests/cc18/Makefile tests/cc19/Makefile tests/cc21/Makefile tests/cc22/Makefile tests/cc23/Makefile tests/cc24/Makefile tests/cc25/Makefile tests/cc26/Makefile tests/cc27/Makefile tests/cc28/Makefile tests/cc29/Makefile tests/cc30/Makefile tests/cc31/Makefile tests/cc32/Makefile tests/cc33/Makefile tests/cc34/Makefile tests/cc35/Makefile tests/cc36/Makefile tests/cc37/Makefile tests/cc38/Makefile tests/cc39/Makefile tests/cc40/Makefile tests/cc41/Makefile tests/cc42/Makefile tests/cc43/Makefile tests/cc44/Makefile tests/cc45/Makefile tests/cc46/Makefile tests/cc47/Makefile tests/cc48/Makefile tests/cc49/Makefile tests/cc50/Makefile tests/psimrcc-sp1/Makefile tests/dboc-rhf1/Makefile tests/dboc-rohf1/Makefile tests/dboc-uhf1/Makefile tests/dboc-rcisd1/Makefile tests/dboc-rocisd1/Makefile tests/extrema-zmat/Makefile tests/extrema-deloc/Makefile tests/mcscf-rhf1/Makefile tests/mcscf-rohf1/Makefile tests/mcscf-twocon1/Makefile tests/mp2r12-sp1/Makefile tests/mp2-opt-numer/Makefile tests/mp2-opt/Makefile tests/rhf-lindep1/Makefile tests/rohf-lindep1/Makefile tests/uhf-lindep1/Makefile tests/psi_start/Makefile tests/psi_start/psi_start.pl tests/rb-scf-opt-numer/Makefile tests/rb-ccsd_t-sp/Makefile tests/rb-fci-h2o/Makefile tests/rb-ccsd-opt-grad/Makefile tests/scf-mvd-opt/Makefile tests/scf-mvd-opt-numer/Makefile tests/scf-mvd-opt-puream/Makefile tests/scf-mvd-opt-numer-puream/Makefile tests/scf+d-opt1/Makefile tests/scf+d-freq/Makefile src/bin/giao/Makefile tests/casscf-sp-reorder/Makefile src/samples/Makefile src/samples/MakeVars src/samples/MakeRules src/samples/mints/Makefile ]) AC_OUTPUT if test $HAVE_RUBY = no; then if test -z $RUBYLIB; then AC_MSG_NOTICE([Unable to locate libruby-static.a will not link the psirb module.]) fi if test -z $RUBYINC; then AC_MSG_NOTICE([Unable to locate ruby.h will not link the psirb module.]) fi fi psi3/doc/0000755000101500007650000000000011146111702010740 5ustar crawdadpsi3/doc/doxygen/0000755000101500007650000000000011146111702012415 5ustar crawdadpsi3/doc/doxygen/doxygen.cfg.in0000644000101500007650000007257310762601560015207 0ustar crawdad# Doxyfile 1.2.5 # This file describes the settings to be used by doxygen for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = PSI # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PSI_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./ # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, # Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian, # Polish, Portuguese and Slovene. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = @top_srcdir@ # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a class diagram (in Html and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. CLASS_DIAGRAMS = YES # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explict @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # The ENABLE_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consist of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/src/lib \ @top_srcdir@/src/bin \ @top_srcdir@/include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. FILE_PATTERNS = *.h *.hpp *.cc *.c *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = @top_srcdir@/src/lib/libmathtools \ @top_srcdir@/src/bin/psiclean # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse. FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript and frames is required (for instance Netscape 4.0+ # or Internet explorer 4.0+). GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using a WORD or other. # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to # YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other # documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to # YES then doxygen will generate a graph for each documented header file showing # the documented files that directly or indirectly include this file INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = @DOT_PATH@ # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = psi3/doc/doxygen/Makefile.in0000644000101500007650000000110610762601560014471 0ustar crawdad srcdir = @srcdir@ include ../MakeVars DOXYDIR = $(htmldir)/doxygen DOXYCFG = doxygen.cfg all:: html .PHONY: html html: $(DOXYCFG) $(DOXYGEN) $< realclean:: /bin/rm -rf html latex man /bin/rm -rf *~ clean:: /bin/rm -rf *~ install:: install_html .PHONY: install_html install_html:: $(MKDIRS) $(htmldir)/doxygen $(INSTALL_DATA) html/* $(DOXYDIR) include ../MakeRules # how to make the doxygen config file $(DOXYCFG): $(DOXYCFG).in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=doc/`basename $(srcdir)`/$(DOXYCFG) ./config.status vpath %.in $(srcdir) psi3/doc/installation/0000755000101500007650000000000011146111701013440 5ustar crawdadpsi3/doc/installation/html.sty0000644000101500007650000012167611114561241015165 0ustar crawdad% % $Id: html.sty,v 1.39 2001/10/01 22:47:06 RRM Exp $ % LaTeX2HTML Version 2K.1 : html.sty % % This file contains definitions of LaTeX commands which are % processed in a special way by the translator. % For example, there are commands for embedding external hypertext links, % for cross-references between documents or for including raw HTML. % This file includes the comments.sty file v2.0 by Victor Eijkhout % In most cases these commands do nothing when processed by LaTeX. % % Place this file in a directory accessible to LaTeX (i.e., somewhere % in the TEXINPUTS path.) % % NOTE: This file works with LaTeX 2.09 or (the newer) LaTeX2e. % If you only have LaTeX 2.09, some complex LaTeX2HTML features % like support for segmented documents are not available. % Changes: % See the change log at end of file. % Exit if the style file is already loaded % (suggested by Lee Shombert \ifx \htmlstyloaded\relax \endinput\else\let\htmlstyloaded\relax\fi \makeatletter % allow for the hyperref package to be cleanly loaded % either before or after this package, % and ensure it is already loaded, when using pdf-TeX \ifx\undefined\hyperref \ifx\pdfoutput\undefined \let\pdfunknown\relax \let\html@new=\newcommand \else \ifx\pdfoutput\relax \let\pdfunknown\relax \RequirePackage{hyperref}\let\html@new=\renewcommand \else \RequirePackage{hyperref}\let\html@new=\newcommand \fi \fi \else \let\html@new=\renewcommand \fi \providecommand{\latextohtml}{\LaTeX2\texttt{HTML}} %%% LINKS TO EXTERNAL DOCUMENTS % % This can be used to provide links to arbitrary documents. % The first argumment should be the text that is going to be % highlighted and the second argument a URL. % The hyperlink will appear as a hyperlink in the HTML % document and as a footnote in the dvi or ps files. % \ifx\pdfunknown\relax \html@new{\htmladdnormallinkfoot}[2]{#1\footnote{#2}} \else \def\htmladdnormallinkfoot#1#2{\footnote{\href{#2}{#1}}} \fi % This is an alternative definition of the command above which % will ignore the URL in the dvi or ps files. \ifx\pdfunknown\relax \html@new{\htmladdnormallink}[2]{#1} \else \def\htmladdnormallink#1#2{\href{#2}{#1}} \fi % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. % \ifx\pdfunknown\relax \html@new{\htmladdimg}[1]{} \else \def\htmladdimg#1{\hyperimage{#1}} \fi %%% CROSS-REFERENCES BETWEEN (LOCAL OR REMOTE) DOCUMENTS % % This can be used to refer to symbolic labels in other Latex % documents that have already been processed by the translator. % The arguments should be: % #1 : the URL to the directory containing the external document % #2 : the path to the labels.pl file of the external document. % If the external document lives on a remote machine then labels.pl % must be copied on the local machine. % %e.g. \externallabels{http://cbl.leeds.ac.uk/nikos/WWW/doc/tex2html/latex2html} % {/usr/cblelca/nikos/tmp/labels.pl} % The arguments are ignored in the dvi and ps files. % \newcommand{\externallabels}[2]{} % This complements the \externallabels command above. The argument % should be a label defined in another latex document and will be % ignored in the dvi and ps files. % \newcommand{\externalref}[1]{} % Suggested by Uffe Engberg (http://www.brics.dk/~engberg/) % This allows the same effect for citations in external bibliographies. % An \externallabels command must be given, locating a labels.pl file % which defines the location and keys used in the external .html file. % \newcommand{\externalcite}{\nocite} % This allows a section-heading in the TOC or mini-TOC to be just % a hyperlink to an external document. % % \htmladdTOClink[]{}{}{<URL>} % where <section-level> is 'chapter' , 'section' , 'subsection' etc. % and <path_to_labels> is the path to find a labels.pl file, % so that external cross-referencing may work, as with \externallabels % %\ifx\pdfunknown\relax \newcommand{\htmladdTOClink}[4][]{} % % can do something here, using the \pdfoutline primitive %\else % \def\htmladdTOClink#1#2#3#4{\pdfoutline user {/S /URI /URI #4} % name{#2} count{#1}{#3}} %\fi %%% HTMLRULE % This command adds a horizontal rule and is valid even within % a figure caption. % Here we introduce a stub for compatibility. \newcommand{\htmlrule}{\protect\HTMLrule} \newcommand{\HTMLrule}{\@ifstar\htmlrulestar\htmlrulestar} \newcommand{\htmlrulestar}[1]{} %%% HTMLCLEAR % This command puts in a <BR> tag, with CLEAR="ALL" \newcommand{\htmlclear}{} % This command adds information within the <BODY> ... </BODY> tag % \newcommand{\bodytext}[1]{} \newcommand{\htmlbody}{} %%% HYPERREF % Suggested by Eric M. Carol <eric@ca.utoronto.utcc.enfm> % Similar to \ref but accepts conditional text. % The first argument is HTML text which will become ``hyperized'' % (underlined). % The second and third arguments are text which will appear only in the paper % version (DVI file), enclosing the fourth argument which is a reference to a label. % %e.g. \hyperref{using the tracer}{using the tracer (see Section}{)}{trace} % where there is a corresponding \label{trace} % % avoid possible confict with hyperref package \ifx\undefined\hyperref \newcommand{\hyperrefhyper}[4]{#4}% \def\next{\newcommand}% \else \let\hyperrefhyper\hyperref \def\next{\renewcommand}% \fi \next{\hyperref}{\hyperrefi[]}\let\next=\relax \def\hyperrefi[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hyperrefdef \else\def\tmp{ref}\ifx\next\tmp\aftergroup\hyperrefref \else\def\tmp{pageref}\ifx\next\tmp\aftergroup\hyperrefpageref \else\def\tmp{page}\ifx\next\tmp\aftergroup\hyperrefpage \else\def\tmp{noref}\ifx\next\tmp\aftergroup\hyperrefnoref \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperrefno \else\def\tmp{hyper}\ifx\next\tmp\aftergroup\hyperrefhyper \else\def\tmp{html}\ifx\next\tmp\aftergroup\hyperrefhtml \else\typeout{*** unknown option \next\space to hyperref ***}% \fi\fi\fi\fi\fi\fi\fi\fi}} \newcommand{\hyperrefdef}[4]{#2\ref{#4}#3} \newcommand{\hyperrefpageref}[4]{#2\pageref{#4}#3} \newcommand{\hyperrefnoref}[3]{#2} \let\hyperrefref=\hyperrefdef \let\hyperrefpage=\hyperrefpageref \let\hyperrefno=\hyperrefnoref \ifx\undefined\hyperrefhyper\newcommand{\hyperrefhyper}[4]{#4}\fi \let\hyperrefhtml=\hyperrefdef %%% HYPERCITE --- added by RRM % Suggested by Stephen Simpson <simpson@math.psu.edu> % effects the same ideas as in \hyperref, but for citations. % It does not allow an optional argument to the \cite, in LaTeX. % % \hypercite{<html-text>}{<LaTeX-text>}{<opt-text>}{<key>} % % uses the pre/post-texts in LaTeX, with a \cite{<key>} % % \hypercite[ext]{<html-text>}{<LaTeX-text>}{<key>} % \hypercite[ext]{<html-text>}{<LaTeX-text>}[<prefix>]{<key>} % % uses the pre/post-texts in LaTeX, with a \nocite{<key>} % the actual reference comes from an \externallabels file. % \newcommand{\hypercite}{\hypercitei[]} \def\hypercitei[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hypercitedef \else\def\tmp{int}\ifx\next\tmp\aftergroup\hyperciteint \else\def\tmp{cite}\ifx\next\tmp\aftergroup\hypercitecite \else\def\tmp{ext}\ifx\next\tmp\aftergroup\hyperciteext \else\def\tmp{nocite}\ifx\next\tmp\aftergroup\hypercitenocite \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperciteno \else\typeout{*** unknown option \next\space to hypercite ***}% \fi\fi\fi\fi\fi\fi}} \newcommand{\hypercitedef}[4]{#2{\def\tmp{#3}\def\emptyopt{}% \ifx\tmp\emptyopt\cite{#4}\else\cite[#3]{#4}\fi}} \newcommand{\hypercitenocite}[2]{#2\hypercitenocitex[]} \def\hypercitenocitex[#1]#2{\nocite{#2}} \let\hypercitecite=\hypercitedef \let\hyperciteint=\hypercitedef \let\hyperciteext=\hypercitenocite \let\hyperciteno=\hypercitenocite %%% HTMLREF % Reference in HTML version only. % Mix between \htmladdnormallink and \hyperref. % First arg is text for in both versions, second is label for use in HTML % version. \ifx\pdfunknown\relax \html@new{\htmlref}[2]{#1} \else \def\htmlref#1#2{\hyperefhyper[#2]{#1}} \fi %%% HTMLCITE % Reference in HTML version only. % Mix between \htmladdnormallink and \hypercite. % First arg is text for both versions, second is citation for use in HTML % version. \newcommand{\htmlcite}[2]{#1} %%% HTMLIMAGE % This command can be used inside any environment that is converted % into an inlined image (eg a "figure" environment) in order to change % the way the image will be translated. The argument of \htmlimage % is really a string of options separated by commas ie % [scale=<scale factor>],[external],[thumbnail=<reduction factor> % The scale option allows control over the size of the final image. % The ``external'' option will cause the image not to be inlined % (images are inlined by default). External images will be accessible % via a hypertext link. % The ``thumbnail'' option will cause a small inlined image to be % placed in the caption. The size of the thumbnail depends on the % reduction factor. The use of the ``thumbnail'' option implies % the ``external'' option. % % Example: % \htmlimage{scale=1.5,external,thumbnail=0.2} % will cause a small thumbnail image 1/5th of the original size to be % placed in the final document, pointing to an external image 1.5 % times bigger than the original. % \newcommand{\htmlimage}[1]{} % \htmlborder causes a border to be placed around an image or table % when the image is placed within a <TABLE> cell. \newcommand{\htmlborder}[1]{} % Put \begin{makeimage}, \end{makeimage} around LaTeX to ensure its % translation into an image. % This shields sensitive text from being translated. \newenvironment{makeimage}{}{} % A dummy environment that can be useful to alter the order % in which commands are processed, in LaTeX2HTML \newenvironment{tex2html_deferred}{}{} %%% HTMLADDTONAVIGATION % This command appends its argument to the buttons in the navigation % panel. It is ignored by LaTeX. % % Example: % \htmladdtonavigation{\htmladdnormallink % {\htmladdimg{http://server/path/to/gif}} % {http://server/path}} \newcommand{\htmladdtonavigation}[1]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % based upon Eijkhout's comment.sty v2.0 % with modifications to avoid conflicts with later versions % of this package, should a user be requiring it. % Ross Moore, 10 March 1999 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Comment.sty version 2.0, 19 June 1992 % selectively in/exclude pieces of text: the user can define new % comment versions, and each is controlled separately. % This style can be used with plain TeX or LaTeX, and probably % most other packages too. % % Examples of use in LaTeX and TeX follow \endinput % % Author % Victor Eijkhout % Department of Computer Science % University Tennessee at Knoxville % 104 Ayres Hall % Knoxville, TN 37996 % USA % % eijkhout@cs.utk.edu % % Usage: all text included in between % \comment ... \endcomment % or \begin{comment} ... \end{comment} % is discarded. The closing command should appear on a line % of its own. No starting spaces, nothing after it. % This environment should work with arbitrary amounts % of comment. % % Other 'comment' environments are defined by % and are selected/deselected with % \includecomment{versiona} % \excludecoment{versionb} % % These environments are used as % \versiona ... \endversiona % or \begin{versiona} ... \end{versiona} % with the closing command again on a line of its own. % % Basic approach: % to comment something out, scoop up every line in verbatim mode % as macro argument, then throw it away. % For inclusions, both the opening and closing comands % are defined as noop % % Changed \next to \html@next to prevent clashes with other sty files % (mike@emn.fr) % Changed \html@next to \htmlnext so the \makeatletter and % \makeatother commands could be removed (they were causing other % style files - changebar.sty - to crash) (nikos@cbl.leeds.ac.uk) % Changed \htmlnext back to \html@next... \def\makeinnocent#1{\catcode`#1=12 } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} \def\ThrowAwayComment#1{\begingroup \def\CurrentComment{#1}% \let\do\makeinnocent \dospecials \makeinnocent\^^L% and whatever other special cases %%RRM %% use \xhtmlComment for \xComment %% use \html@next for \next \endlinechar`\^^M \catcode`\^^M=12 \xhtmlComment} {\catcode`\^^M=12 \endlinechar=-1 % \gdef\xhtmlComment#1^^M{\def\test{#1}\edef\test{\meaning\test} \csarg\ifx{PlainEnd\CurrentComment Test}\test \let\html@next\endgroup \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \csarg\ifx{LaInnEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \let\html@next\xhtmlComment \fi \fi \fi \html@next} } %%\def\includecomment %%RRM \def\htmlincludecomment #1{\expandafter\def\csname#1\endcsname{}% \expandafter\def\csname end#1\endcsname{}} %%\def\excludecomment %%RRM \def\htmlexcludecomment #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}% {\escapechar=-1\relax \edef\tmp{\string\\end#1}% \csarg\xdef{PlainEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end\string\{#1\string\}}% \csarg\xdef{LaLaEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end \string\{#1\string\}}% \csarg\xdef{LaInnEnd#1Test}{\meaning\tmp}% }} %%\excludecomment{comment} %%RRM \htmlexcludecomment{comment} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end Comment.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment % % Alternative code by Robin Fairbairns, 22 September 1997 % revised to cope with % and unnested { }, by Ross Moore, 4 July 1998 % further revised to cope with & and # in tables, 10 March 1999 % \def\raw@catcodes{\catcode`\%=12 \catcode`\{=12 \catcode`\}=12 \catcode`\&=12 \catcode`\#=12 } \newcommand\@gobbleenv{\bgroup\raw@catcodes \let\reserved@a\@currenvir\@gobble@nv} \bgroup \def\expansionhead{\gdef\@gobble@nv@i##1} \def\expansiontail{{\def\reserved@b{##1}\@gobble@nv@ii}} \def\expansionheadii{\long\gdef\@gobble@nv##1\end} \def\expansiontailii{{\@gobble@nv@i}} \def\expansionmidii{##2} \raw@catcodes\relax \expandafter\expansionhead\expandafter}\expansiontail \egroup \long\gdef\@gobble@nv#1\end#2{\@gobble@nv@i} %\long\def\@gobble@nv#1\end#2{\def\reserved@b{#2}% \def\@gobble@nv@ii{% \ifx\reserved@a\reserved@b \edef\reserved@a{\egroup\noexpand\end{\reserved@a}}% \expandafter\reserved@a \else \expandafter\@gobble@nv \fi} \renewcommand{\htmlexcludecomment}[1]{% \csname newenvironment\endcsname{#1}{\@gobbleenv}{}} \newcommand{\htmlreexcludecomment}[1]{% \csname renewenvironment\endcsname{#1}{\@gobbleenv}{}} %%% RAW HTML % % Enclose raw HTML between a \begin{rawhtml} and \end{rawhtml}. % The html environment ignores its body % \htmlexcludecomment{rawhtml} %%% HTML ONLY % % Enclose LaTeX constructs which will only appear in the % HTML output and will be ignored by LaTeX with % \begin{htmlonly} and \end{htmlonly} % \htmlexcludecomment{htmlonly} % Shorter version \newcommand{\html}[1]{} % for images.tex only \htmlexcludecomment{imagesonly} %%% LaTeX ONLY % Enclose LaTeX constructs which will only appear in the % DVI output and will be ignored by latex2html with %\begin{latexonly} and \end{latexonly} % \newenvironment{latexonly}{}{} % Shorter version \newcommand{\latex}[1]{#1} %%% LaTeX or HTML % Combination of \latex and \html. % Say \latexhtml{this should be latex text}{this html text} % %\newcommand{\latexhtml}[2]{#1} \long\def\latexhtml#1#2{#1} %%% tracing the HTML conversions % This alters the tracing-level within the processing % performed by latex2html by adjusting $VERBOSITY % (see latex2html.config for the appropriate values) % \newcommand{\htmltracing}[1]{} \newcommand{\htmltracenv}[1]{} %%% \strikeout for HTML only % uses <STRIKE>...</STRIKE> tags on the argument % LaTeX just gobbles it up. \newcommand{\strikeout}[1]{} %%% \htmlurl and \url % implement \url as the simplest thing, if not already defined % let \htmlurl#1 be equivalent to it % \def\htmlurlx#1{\begin{small}\texttt{#1}\end{small}}% \expandafter\ifx\csname url\endcsname\relax \let\htmlurl=\htmlurlx \else \let\htmlurl=\url \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% JCL - stop input here if LaTeX2e is not present %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx\if@compatibility\undefined %LaTeX209 \makeatother\relax\expandafter\endinput \fi \if@compatibility %LaTeX2e in LaTeX209 compatibility mode \makeatother\relax\expandafter\endinput \fi %\let\real@TeXlogo = \TeX %\DeclareRobustCommand{\TeX}{\relax\real@TeXlogo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start providing LaTeX2e extension: % This is currently: % - additional optional argument for \htmladdimg % - support for segmented documents % \ProvidesPackage{html} [1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm)] % % Ensure that \includecomment and \excludecomment are bound % to the version defined here. % \AtBeginDocument{% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment \htmlreexcludecomment{comment}} %%% bind \htmlurl to \url if that is later loaded % \expandafter\ifx\csname url\endcsname\relax \AtBeginDocument{\@ifundefined{url}{}{\let\htmlurl=\url}}\fi %%%%MG % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. The optional argument % denotes additional HTML tags. % % Example: \htmladdimg[ALT="portrait" ALIGN=CENTER]{portrait.gif} % \ifx\pdfunknown\relax \renewcommand{\htmladdimg}[2][]{} \else \renewcommand{\htmladdimg}[2][]{\hyperimage{#2}} \fi %%% HTMLRULE for LaTeX2e % This command adds a horizontal rule and is valid even within % a figure caption. % % This command is best used with LaTeX2e and HTML 3.2 support. % It is like \hrule, but allows for options via key--value pairs % as follows: \htmlrule[key1=value1, key2=value2, ...] . % Use \htmlrule* to suppress the <BR> tag. % Eg. \htmlrule[left, 15, 5pt, "none", NOSHADE] produces % <BR CLEAR="left"><HR NOSHADE SIZE="15">. % Renew the necessary part. \renewcommand{\htmlrulestar}[1][all]{} %%% HTMLCLEAR for LaTeX2e % This command puts in a <BR> tag, with optional CLEAR="<attrib>" % \renewcommand{\htmlclear}[1][all]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % renew some definitions to allow optional arguments % % The description of the options is missing, as yet. % \renewcommand{\latextohtml}{\textup{\LaTeX2\texttt{HTML}}} \ifx\pdfunknown\relax \renewcommand{\htmladdnormallinkfoot}[3][]{#2\footnote{#3}} \renewcommand{\htmladdnormallink}[3][]{#2} \else \renewcommand{\htmladdnormallinkfoot}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlinkfoot}% \else\def\next{\htmladdnamedlinkfoot{#1}}\fi \next} \newcommand{\htmladdnonamedlinkfoot}[2]{% #1\footnote{\href{#2}{#2}}} \newcommand{\htmladdnamedlinkfoot}[3]{% \hypertarget{#1}{#2}\footnote{\href{#3}{#3}}} \renewcommand{\htmladdnormallink}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlink}% \else\def\next{\htmladdnamedlink{#1}}\fi \next} \newcommand{\htmladdnonamedlink}[2]{\href{#2}{#1}} \newcommand{\htmladdnamedlink}[3]{% \hypertarget{#1}{\hskip2bp}\href{#3}{#2}} \fi \renewcommand{\htmlbody}[1][]{} \renewcommand{\htmlborder}[2][]{} \renewcommand{\externallabels}[3][]{} \renewcommand{\externalref}[2][]{} \renewcommand{\externalcite}[1][]{\nocite} \renewcommand{\hyperref}[1][]{\hyperrefi[#1]} \renewcommand{\hypercite}[1][]{\hypercitei[#1]} \renewcommand{\hypercitenocite}[2]{#2\hypercitenocitex} \renewcommand{\hypercitenocitex}[2][]{\nocite{#2}} \let\hyperciteno=\hypercitenocite \let\hyperciteext=\hypercitenocite \ifx\pdfunknown\relax \renewcommand{\htmlimage}[2][]{} \renewcommand{\htmlref}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlrefdef\else\aftergroup\htmlrefext\fi}} \newcommand{\htmlrefdef}[1]{} \newcommand{\htmlrefext}[2][]{} \renewcommand{\htmlcite}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[2][]{} \else \renewcommand{\htmlimage}[2][]{\hyperimage{#2}} \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@} \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}} \newcommand{\htmlrefext}[3]{% \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}} \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[1][]{\cite} \fi \newcommand{\htmlcitedef}[1]{ \nocite{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % HTML HTMLset HTMLsetenv % % These commands do nothing in LaTeX, but can be used to place % HTML tags or set Perl variables during the LaTeX2HTML processing; % They are intended for expert use only. \newcommand{\HTMLcode}[2][]{} \ifx\undefined\HTML\newcommand{\HTML}[2][]{}\else \typeout{*** Warning: \string\HTML\space had an incompatible definition ***}% \typeout{*** instead use \string\HTMLcode\space for raw HTML code ***}% \fi \newcommand{\HTMLset}[3][]{} \newcommand{\HTMLsetenv}[3][]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % The following commands pertain to document segmentation, and % were added by Herbert Swan <dprhws@edp.Arco.com> (with help from % Michel Goossens <goossens@cern.ch>): % % % This command inputs internal latex2html tables so that large % documents can to partitioned into smaller (more manageable) % segments. % \newcommand{\internal}[2][internals]{} % % Define a dummy stub \htmlhead{}. This command causes latex2html % to define the title of the start of a new segment. It is not % normally placed in the user's document. Rather, it is passed to % latex2html via a .ptr file written by \segment. % \newcommand{\htmlhead}[3][]{} % In the LaTeX2HTML version this will eliminate the title line % generated by a \segment command, but retains the title string % for use in other places. % \newcommand{\htmlnohead}{} % In the LaTeX2HTML version this put a URL into a <BASE> tag % within the <HEAD>...</HEAD> portion of a document. % \ifx\pdfunknown\relax \newcommand{\htmlbase}[1]{} \else \let\htmlbase=\hyperbaseurl \fi % Include style information into the stylesheet; e.g. CSS % \newcommand{\htmlsetstyle}[3][]{} \newcommand{\htmladdtostyle}[3][]{} % Define a style-class for information in a particular language % \newcommand{\htmllanguagestyle}[2][]{} % % The dummy command \endpreamble is needed by latex2html to % mark the end of the preamble in document segments that do % not contain a \begin{document} % \newcommand{\startdocument}{} % \tableofchildlinks, \htmlinfo % by Ross Moore --- extensions dated 27 September 1997 % % These do nothing in LaTeX but for LaTeX2HTML they mark % where the table of child-links and info-page should be placed, % when the user wants other than the default. % \tableofchildlinks % put mini-TOC at this location % \tableofchildlinks[off] % not on current page % \tableofchildlinks[none] % not on current and subsequent pages % \tableofchildlinks[on] % selectively on current page % \tableofchildlinks[all] % on current and all subsequent pages % \htmlinfo % put info-page at this location % \htmlinfo[off] % no info-page in current document % \htmlinfo[none] % no info-page in current document % *-versions omit the preceding <BR> tag. % \newcommand{\tableofchildlinks}{% \@ifstar\tableofchildlinksstar\tableofchildlinksstar} \newcommand{\tableofchildlinksstar}[1][]{} \newcommand{\htmlinfo}{\@ifstar\htmlinfostar\htmlinfostar} \newcommand{\htmlinfostar}[1][]{} % This redefines \begin to allow for an optional argument % which is used by LaTeX2HTML to specify `style-sheet' information \let\realLaTeX@begin=\begin \renewcommand{\begin}[1][]{\realLaTeX@begin} % % Allocate a new set of section counters, which will get incremented % for "*" forms of sectioning commands, and for a few miscellaneous % commands. % \@ifundefined{c@part}{\newcounter{part}}{}% \newcounter{lpart} \newcounter{lchapter}[part] \@ifundefined{c@chapter}% {\let\Hchapter\relax \newcounter{chapter}\let\thechapter\relax \newcounter{lsection}[part]}% {\let\Hchapter=\chapter \newcounter{lsection}[chapter]} \newcounter{lsubsection}[section] \newcounter{lsubsubsection}[subsection] \newcounter{lparagraph}[subsubsection] \newcounter{lsubparagraph}[paragraph] %\newcounter{lequation} % % Redefine "*" forms of sectioning commands to increment their % respective counters. % \let\Hpart=\part %\let\Hchapter=\chapter \let\Hsection=\section \let\Hsubsection=\subsection \let\Hsubsubsection=\subsubsection \let\Hparagraph=\paragraph \let\Hsubparagraph=\subparagraph \let\Hsubsubparagraph=\subsubparagraph \ifx\c@subparagraph\undefined \newcounter{lsubsubparagraph}[lsubparagraph] \else \newcounter{lsubsubparagraph}[subparagraph] \fi % % The following definitions are specific to LaTeX2e: % (They must be commented out for LaTeX 2.09) % \expandafter\ifx\csname part\endcsname\relax\else \renewcommand{\part}{\@ifstar{\stepcounter{lpart}% \bgroup\def\tmp{*}\H@part}{\bgroup\def\tmp{}\H@part}}\fi \newcommand{\H@part}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hpart\tmp} \ifx\Hchapter\relax\else \def\chapter{\resetsections \@ifstar{\stepcounter{lchapter}% \bgroup\def\tmp{*}\H@chapter}{\bgroup\def\tmp{}\H@chapter}}\fi \newcommand{\H@chapter}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hchapter\tmp} \renewcommand{\section}{\resetsubsections \@ifstar{\stepcounter{lsection}\bgroup\def\tmp{*}% \H@section}{\bgroup\def\tmp{}\H@section}} \newcommand{\H@section}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsection\tmp} \renewcommand{\subsection}{\resetsubsubsections \@ifstar{\stepcounter{lsubsection}\bgroup\def\tmp{*}% \H@subsection}{\bgroup\def\tmp{}\H@subsection}} \newcommand{\H@subsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsection\tmp} \renewcommand{\subsubsection}{\resetparagraphs \@ifstar{\stepcounter{lsubsubsection}\bgroup\def\tmp{*}% \H@subsubsection}{\bgroup\def\tmp{}\H@subsubsection}} \newcommand{\H@subsubsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubsection\tmp} \renewcommand{\paragraph}{\resetsubparagraphs \@ifstar{\stepcounter{lparagraph}\bgroup\def\tmp{*}% \H@paragraph}{\bgroup\def\tmp{}\H@paragraph}} \newcommand\H@paragraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hparagraph\tmp} \ifx\Hsubparagraph\relax\else\@ifundefined{subparagraph}{}{% \renewcommand{\subparagraph}{\resetsubsubparagraphs \@ifstar{\stepcounter{lsubparagraph}\bgroup\def\tmp{*}% \H@subparagraph}{\bgroup\def\tmp{}\H@subparagraph}}}\fi \newcommand\H@subparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubparagraph\tmp} \ifx\Hsubsubparagraph\relax\else\@ifundefined{subsubparagraph}{}{% \def\subsubparagraph{% \@ifstar{\stepcounter{lsubsubparagraph}\bgroup\def\tmp{*}% \H@subsubparagraph}{\bgroup\def\tmp{}\H@subsubparagraph}}}\fi \newcommand\H@subsubparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubparagraph\tmp} \def\check@align{\def\empty{}\ifx\tmp@a\empty \else\def\tmp@b{center}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{left}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{right}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\expandafter\def\expandafter\tmp@a\expandafter{\expandafter[\tmp@a]}% \fi\fi\fi \def\empty{}\ifx\tmp\empty\let\tmp=\tmp@a \else \expandafter\def\expandafter\tmp\expandafter{\expandafter*\tmp@a}% \fi\fi} % \def\resetsections{\setcounter{section}{0}\setcounter{lsection}{0}% \reset@dependents{section}\resetsubsections } \def\resetsubsections{\setcounter{subsection}{0}\setcounter{lsubsection}{0}% \reset@dependents{subsection}\resetsubsubsections } \def\resetsubsubsections{\setcounter{subsubsection}{0}\setcounter{lsubsubsection}{0}% \reset@dependents{subsubsection}\resetparagraphs } % \def\resetparagraphs{\setcounter{lparagraph}{0}\setcounter{lparagraph}{0}% \reset@dependents{paragraph}\resetsubparagraphs } \def\resetsubparagraphs{\ifx\c@subparagraph\undefined\else \setcounter{subparagraph}{0}\fi \setcounter{lsubparagraph}{0}% \reset@dependents{subparagraph}\resetsubsubparagraphs } \def\resetsubsubparagraphs{\ifx\c@subsubparagraph\undefined\else \setcounter{subsubparagraph}{0}\fi \setcounter{lsubsubparagraph}{0}} % \def\reset@dependents#1{\begingroup\let \@elt \@stpelt \csname cl@#1\endcsname\endgroup} % ignore optional *-version of \tableofcontents \let\ltx@tableofcontents\tableofcontents \renewcommand{\tableofcontents}{% \@ifstar\ltx@tableofcontents\ltx@tableofcontents} % % % Define a helper macro to dump a single \secounter command to a file. % \newcommand{\DumpPtr}[2]{% \count255=\csname c@#1\endcsname\relax\def\dummy{dummy}\def\tmp{#2}% \ifx\tmp\dummy\def\ctr{#1}\else \def\ctr{#2}\advance\count255 by \csname c@#2\endcsname\relax\fi \immediate\write\ptrfile{% \noexpand\setcounter{\ctr}{\number\count255}}} %\expandafter\noexpand\expandafter\setcounter\expandafter{\ctr}{\number\count255}}} % % Define a helper macro to dump all counters to the file. % The value for each counter will be the sum of the l-counter % actual LaTeX section counter. % Also dump an \htmlhead{section-command}{section title} command % to the file. % \newwrite\ptrfile \def\DumpCounters#1#2#3#4{% \begingroup\let\protect=\noexpand \immediate\openout\ptrfile = #1.ptr \DumpPtr{part}{lpart}% \ifx\Hchapter\relax\else\DumpPtr{chapter}{lchapter}\fi \DumpPtr{section}{lsection}% \DumpPtr{subsection}{lsubsection}% \DumpPtr{subsubsection}{lsubsubsection}% \DumpPtr{paragraph}{lparagraph}% \DumpPtr{subparagraph}{lsubparagraph}% \DumpPtr{equation}{dummy}% \DumpPtr{footnote}{dummy}% \def\tmp{#4}\ifx\tmp\@empty \immediate\write\ptrfile{\noexpand\htmlhead{#2}{#3}}\else \immediate\write\ptrfile{\noexpand\htmlhead[#4]{#2}{#3}}\fi \dumpcitestatus \dumpcurrentcolor \immediate\closeout\ptrfile \endgroup } %% interface to natbib.sty \def\dumpcitestatus{} \def\loadcitestatus{\def\dumpcitestatus{% \ifciteindex\immediate\write\ptrfile{\noexpand\citeindextrue}% \else\immediate\write\ptrfile{\noexpand\citeindexfalse}\fi }% } \@ifpackageloaded{natbib}{\loadcitestatus}{% \AtBeginDocument{\@ifpackageloaded{natbib}{\loadcitestatus}{}}} %% interface to color.sty \def\dumpcurrentcolor{} \def\loadsegmentcolors{% \let\real@pagecolor=\pagecolor \let\pagecolor\segmentpagecolor \let\segmentcolor\color \ifx\current@page@color\undefined \def\current@page@color{{}}\fi \def\dumpcurrentcolor{\bgroup\def\@empty@{{}}% \expandafter\def\expandafter\tmp\space####1@{\def\thiscol{####1}}% \ifx\current@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@color @\fi \immediate\write\ptrfile{\noexpand\segmentcolor{\thiscol}}% \ifx\current@page@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@page@color @\fi \immediate\write\ptrfile{\noexpand\segmentpagecolor{\thiscol}}% \egroup}% \global\let\loadsegmentcolors=\relax } % These macros are needed within images.tex since this inputs % the <segment>.ptr files for a segment, so that counters are % colors are synchronised. % \newcommand{\segmentpagecolor}[1][]{% \@ifpackageloaded{color}{\loadsegmentcolors\bgroup \def\tmp{#1}\ifx\@empty\tmp\def\next{[]}\else\def\next{[#1]}\fi \expandafter\segmentpagecolor@\next}% {\@gobble}} \def\segmentpagecolor@[#1]#2{\def\tmp{#1}\def\tmpB{#2}% \ifx\tmpB\@empty\let\next=\egroup \else \let\realendgroup=\endgroup \def\endgroup{\edef\next{\noexpand\realendgroup \def\noexpand\current@page@color{\current@color}}\next}% \ifx\tmp\@empty\real@pagecolor{#2}\def\model{}% \else\real@pagecolor[#1]{#2}\def\model{[#1]}% \fi \edef\next{\egroup\def\noexpand\current@page@color{\current@page@color}% \noexpand\real@pagecolor\model{#2}}% \fi\next} % \newcommand{\segmentcolor}[2][named]{\@ifpackageloaded{color}% {\loadsegmentcolors\segmentcolor[#1]{#2}}{}} \@ifpackageloaded{color}{\loadsegmentcolors}{\let\real@pagecolor=\@gobble \AtBeginDocument{\@ifpackageloaded{color}{\loadsegmentcolors}{}}} % Define the \segment[align]{file}{section-command}{section-title} command, % and its helper macros. This command does four things: % 1) Begins a new LaTeX section; % 2) Writes a list of section counters to file.ptr, each % of which represents the sum of the LaTeX section % counters, and the l-counters, defined above; % 3) Write an \htmlhead{section-title} command to file.ptr; % 4) Inputs file.tex. \newcommand{\segment}{\@ifstar{\@@htmls}{\@@html}} %\tracingall \newcommand{\@endsegment}[1][]{} \let\endsegment\@endsegment \newcommand{\@@htmls}[1][]{\@@htmlsx{#1}} \newcommand{\@@html}[1][]{\@@htmlx{#1}} \def\@@htmlsx#1#2#3#4{\csname #3\endcsname* {#4}% \DumpCounters{#2}{#3*}{#4}{#1}\input{#2}} \def\@@htmlx#1#2#3#4{\csname #3\endcsname {#4}% \DumpCounters{#2}{#3}{#4}{#1}\input{#2}} \makeatother \endinput % Modifications: % % (The listing of Initiales see Changes) % $Log: html.sty,v $ % Revision 1.39 2001/10/01 22:47:06 RRM % -- somehow revision 1.39 was not committed earlier % -- it allows a * version of \tableofcontents (used with frames) to be % treated as un-starred by LaTeX % % Revision 1.39 2000/09/10 12:23:20 RRM % -- added *-argument for \tableofcontents in frames.perl % LaTeX should just ignore it % % Revision 1.38 1999/07/19 13:23:20 RRM % -- compatibility with pdflatex and hyperref.sty % citations are not complete yet, I think % -- ensure that \thechapter remains undefined; some packages use it % as a test for the type of documentclass being used. % % Revision 1.37 1999/03/12 07:02:38 RRM % -- change macro name from \addTOCsection to \htmladdTOClink % -- it has 3 + 1 optional argument, to allow a local path to a labels.pl % file for the external document, for cross-references % % Revision 1.36 1999/03/10 05:46:00 RRM % -- extended the code for compatibilty with comment.sty % -- allow excluded environments to work within tables, % with the excluded material spanning headers and several cells % thanks Avinash Chopde for recognising the need for this. % -- added LaTeX support (ignores it) for \htmladdTOCsection % thanks to Steffen Klupsch and Uli Wortmann for this idea. % % Revision 1.35 1999/03/08 11:16:16 RRM % html.sty for LaTeX2HTML V99.1 % % -- ensure that html.sty can be loaded *after* hyperref.sty % -- support new command \htmlclear for <BR> in HTML, ignored by LaTeX % -- ensure {part} and {chapter} counters are defined, even if not used % % Revision 1.34 1998/09/19 10:37:29 RRM % -- fixed typo with \next{\hyperref}{....} % % Revision 1.33 1998/09/08 12:47:51 RRM % -- changed macro-names for the \hyperref and \hypercite options % allows easier compatibility with other packages % % Revision 1.32 1998/08/24 12:15:14 RRM % -- new command \htmllanguagestyle to associate a style class % with text declared as a particular language % % Revision 1.31 1998/07/07 14:15:41 RRM % -- new commands \htmlsetstyle and \htmladdtostyle % % Revision 1.30 1998/07/04 02:42:22 RRM % -- cope with catcodes of % { } in rawhtml/comment/htmlonly environments % % Revision 1.29 1998/06/23 13:33:23 RRM % -- use \begin{small} with the default for URLs % % Revision 1.28 1998/06/21 09:38:39 RRM % -- implement \htmlurl to agree with \url if already defined % or loaded subsequently (LaTeX-2e only) % -- get LaTeX to print the revision number when loading % % Revision 1.27 1998/06/20 15:13:10 RRM % -- \TeX is already protected in recent versions of LaTeX % so \DeclareRobust doesn't work --- causes looping % -- \part and \subparagraph need not be defined in some styles % % Revision 1.26 1998/06/01 08:36:49 latex2html % -- implement optional argument for \endsegment % -- made the counter value output from \DumpPtr more robust % % Revision 1.25 1998/05/09 05:43:35 latex2html % -- conditionals for avoiding undefined counters % % Revision 1.23 1998/02/26 10:32:24 latex2html % -- use \providecommand for \latextohtml % -- implemented \HTMLcode to do what \HTML did previously % \HTML still works, unless already defined by another package % -- fixed problems remaining with undefined \chapter % -- defined \endsegment % % Revision 1.22 1997/12/05 11:38:18 RRM % -- implemented an optional argument to \begin for style-sheet info. % -- modified use of an optional argument with sectioning-commands % % Revision 1.21 1997/11/05 10:28:56 RRM % -- replaced redefinition of \@htmlrule with \htmlrulestar % % Revision 1.20 1997/10/28 02:15:58 RRM % -- altered the way some special html-macros are defined, so that % star-variants are explicitly defined for LaTeX % -- it is possible for these to occur within images.tex % e.g. \htmlinfostar \htmlrulestar \tableofchildlinksstar % % Revision 1.19 1997/10/11 05:47:48 RRM % -- allow the dummy {tex2html_nowrap} environment in LaTeX % use it to make its contents be evaluated in environment order % % Revision 1.18 1997/10/04 06:56:50 RRM % -- uses Robin Fairbairns' code for ignored environments, % replacing the previous comment.sty stuff. % -- extensions to the \tableofchildlinks command % -- extensions to the \htmlinfo command % % Revision 1.17 1997/07/08 11:23:39 RRM % include value of footnote counter in .ptr files for segments % % Revision 1.16 1997/07/03 08:56:34 RRM % use \textup within the \latextohtml macro % % Revision 1.15 1997/06/15 10:24:58 RRM % new command \htmltracenv as environment-ordered \htmltracing % % Revision 1.14 1997/06/06 10:30:37 RRM % - new command: \htmlborder puts environment into a <TABLE> cell % with a border of specified width, + other attributes. % - new commands: \HTML for setting arbitrary HTML tags, with attributes % \HTMLset for setting Perl variables, while processing % \HTMLsetenv same as \HTMLset , but it gets processed % as if it were an environment. % - new command: \latextohtml --- to set the LaTeX2HTML name/logo % - fixed some remaining problems with \segmentcolor & \segmentpagecolor % % Revision 1.13 1997/05/19 13:55:46 RRM % alterations and extra options to \hypercite % % Revision 1.12 1997/05/09 12:28:39 RRM % - Added the optional argument to \htmlhead, also in \DumpCounters % - Implemented \HTMLset as a no-op in LaTeX. % - Fixed a bug in accessing the page@color settings. % % Revision 1.11 1997/03/26 09:32:40 RRM % - Implements LaTeX versions of \externalcite and \hypercite commands. % Thanks to Uffe Engberg and Stephen Simpson for the suggestions. % % Revision 1.10 1997/03/06 07:37:58 RRM % Added the \htmltracing command, for altering $VERBOSITY . % % Revision 1.9 1997/02/17 02:26:26 RRM % - changes to counter handling (RRM) % - shuffled around some definitions % - changed \htmlrule of 209 mode % % Revision 1.8 1997/01/26 09:04:12 RRM % RRM: added optional argument to sectioning commands % \htmlbase sets the <BASE HREF=...> tag % \htmlinfo and \htmlinfo* allow the document info to be positioned % % Revision 1.7 1997/01/03 12:15:44 L2HADMIN % % - fixes to the color and natbib interfaces % % - extended usage of \hyperref, via an optional argument. % % - extended use comment environments to allow shifting expansions % % e.g. within \multicolumn (`bug' reported by Luc De Coninck). % % - allow optional argument to: \htmlimage, \htmlhead, % % \htmladdimg, \htmladdnormallink, \htmladdnormallinkfoot % % - added new commands: \htmlbody, \htmlnohead % % - added new command: \tableofchildlinks % % Revision 1.6 1996/12/25 03:04:54 JCL % added patches to segment feature from Martin Wilck % % Revision 1.5 1996/12/23 01:48:06 JCL % o introduced the environment makeimage, which may be used to force % LaTeX2HTML to generate an image from the contents. % There's no magic, all what we have now is a defined empty environment % which LaTeX2HTML will not recognize and thus pass it to images.tex. % o provided \protect to the \htmlrule commands to allow for usage % within captions. % % Revision 1.4 1996/12/21 19:59:22 JCL % - shuffled some entries % - added \latexhtml command % % Revision 1.3 1996/12/21 12:22:59 JCL % removed duplicate \htmlrule, changed \htmlrule back not to create a \hrule % to allow occurrence in caption % % Revision 1.2 1996/12/20 04:03:41 JCL % changed occurrence of \makeatletter, \makeatother % added new \htmlrule command both for the LaTeX2.09 and LaTeX2e % sections % % % jcl 30-SEP-96 % - Stuck the commands commonly used by both LaTeX versions to the top, % added a check which stops input or reads further if the document % makes use of LaTeX2e. % - Introduced rrm's \dumpcurrentcolor and \bodytext % hws 31-JAN-96 - Added support for document segmentation % hws 10-OCT-95 - Added \htmlrule command % jz 22-APR-94 - Added support for htmlref % nd - Created ������������������������������������������������������������������psi3/doc/installation/installation.tex��������������������������������������������������������������0000644�0001015�0000765�00000047674�11146062472�016717� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % The PSI Installation Manual % \documentclass[12pt]{article} \usepackage{html} \setlength{\textheight}{9in} \setlength{\textwidth}{6.5in} \setlength{\hoffset}{0in} \setlength{\voffset}{0in} \setlength{\headheight}{0in} \setlength{\headsep}{0in} \setlength{\topmargin}{0in} \setlength{\oddsidemargin}{-0.05in} \setlength{\evensidemargin}{-0.05in} \setlength{\marginparsep}{0in} \setlength{\marginparwidth}{0in} \setlength{\parsep}{0.8ex} \setlength{\parskip}{1ex plus \fill} \baselineskip 18pt \renewcommand{\topfraction}{.8} \renewcommand{\bottomfraction}{.2} \begin{document} \include{macros} \begin{center} \ \\ \vspace{2.0in} {\bf {\Large Installation Manual for the \PSIthree\ Program Package}} \\ \vspace{0.5in} T.\ Daniel Crawford,$^a$ C.\ David Sherrill,$^b$ and Edward F.\ Valeev$^{a}$ \\ \ \\ {\em $^a$Department of Chemistry, Virginia Tech, Blacksburg, Virginia 24061-0001} \\ \vspace{0.1in} {\em $^b$Center for Computational Molecular Science and Technology, \mbox{Georgia Institute of Technology,} Atlanta, Georgia 30332-0400} \\ \vspace{0.1in} \ \\ \vspace{0.3in} \PSIthree\ Version: \PSIversion \\ Created on: \today \end{center} \thispagestyle{empty} \newpage \section{Compilation Prerequisites} The following external software packages are needed to complile \PSIthree: \begin{itemize} \item C, C++, and FORTRAN77 compilers. The FORTRAN77 compiler is only used to determine the symbol-naming convention of and some system routines for the BLAS and LAPACK libraries on some architectures. It is optional in a few cases (e.g. Mac OS X systems). \item A well-optimized basic linear algebra subroutine (BLAS) library for vital matrix-matrix and matrix-vector multiplication routines. (See recommendations below.) \item The linear algebra package (LAPACK). \PSIthree\ makes use of LAPACK's eigenvalue/eigenvector and matrix inversion routines. (See recommendations below) \item POSIX threads (Pthreads) library \item Perl interpreter (version 5.005 or higher) \item Various GNU utilies: \htmladdnormallink{{\tt www.gnu.org}}{http://www.gnu.org} \begin{itemize} \item {\tt autoconf (version 2.52 or higher)} \item {\tt make} \item {\tt flex} \item {\tt bison} \item {\tt fileutils} (esp.\ {\tt install}) \end{itemize} \item For documentation only: \begin{itemize} \item {\tt LaTeX} \item {\tt LaTeX2html} (v0.99.1 or 1.62, including the patch supplied in psi3/misc) \end{itemize} \end{itemize} \section{Brief Summary of Configuration, Compilation, and Installation} A good directory for the \PSIthree\ source code is /usr/local/src/psi3. The directory should {\em not} be named {\tt /usr/local/psi}, as that is the default installation directory unless changed by the {\tt --prefix} directive (see below). It should also not have any periods in the path, e.g., {\tt /usr/local/psi3.2}, because of a bug in {\tt dvips} which will cause the compilation of documentation to fail. The following series of steps will configure and build the \PSIthree\ package and install the executables in /usr/local/psi/bin: \begin{enumerate} \item {\tt cd \$PSI3} (your top-level \PSIthree\ source directory) \item {\tt mkdir objdir} \item {\tt cd objdir} \item {\tt ../configure} (may need some of the options below, esp.~if {\tt blas} or {\tt lapack} are in non-standard locations) \item {\tt make} \item {\tt make tests} (optional, but recommended) \item {\tt make install} \item {\tt make doc} (optional) \end{enumerate} \noindent You may need to make use of one or more of the following options to the {\tt configure} script: \begin{itemize} \item {\tt -}{\tt -prefix=directory} --- Use this option if you wish to install the \PSIthree\ package somewhere other than the default directory, {\tt /usr/local/psi}. This directory will contain subdirectories with the final installed binaries, libraries, documentation, and shared data files. \item {\tt -}{\tt -with-cc=compiler} --- Use this option to specify a C compiler. One should use compilers that generate reentrant code, if possible. The default search order for compilers is: {\tt cc\_r} (AIX only), {\tt gcc}, {\tt icc}, {\tt cc}. \item {\tt -}{\tt -with-cxx=compiler} --- Use this option to specify a C++ compiler. One should use compilers that generate reentrant code, if possible. The default search order for compilers is: {\tt xlC\_r} (AIX only), {\tt g++}, {\tt c++}, {\tt icpc}, {\tt cxx}. \item {\tt -}{\tt -with-fc=compiler} --- Use this option to specify a Fortran-77 compiler, which is used to determine linking coventions for BLAS and LAPACK libraries and to provide system routines for those libraries. Note that no fortran compiler is necessary on Mac OS X systems (see below). The default search order for compilers is: {\tt xlf\_r} (AIX only), {\tt gfortran}, {\tt g77}, {\tt ifort}, {\tt f77}, {\tt f2c}. \item {\tt -}{\tt -with-f77-symbol=value} --- This option allows manual assignment of the F77 symbol convention, which is necessary for C programs to link Fortran-interface libraries such as BLAS and LAPACK. This option should only be used by experts and even then should almost never be necessary. Allowed values are: \begin{itemize} \item[lc] lower-case \item[lcu]lower-case with underscore (default) \item[uc] upper-case \item[ucu] upper-case with underscore \end{itemize} \item {\tt -}{\tt -with-ld=linker} --- Use this option to specify a linker program. The default is {\tt ld}. \item {\tt -}{\tt -with-ranlib=ranlib} --- Use this option to specify a ranlib program. The default behavior is to detect an appropriate choice automatically. \item {\tt -}{\tt -with-ar=archiver} --- Use this option to specify an archiver. The default is to look for {\tt ar} automatically. \item {\tt -}{\tt -with-ar-flags=options} --- Use this option to specify archiver command-line flags. The default is {\tt r}. \item {\tt -}{\tt -with-incdirs=directories} --- Use this option to specify extra directories where to look for header files. Directories should be specified prepended by {\tt -I}, i.e. {\tt -Idir1 -Idir2}, etc. If several directories are specified, enclose the list with single right-quotes, e.g., {\tt -}{\tt -with-incdirs='-I/usr/local/include -I/home/psi3/include'}. \item {\tt -}{\tt -with-libs=libraries} --- Use this option to specify extra libraries which should be used during linking. Libraries should be specified by their full names or in the usual {\tt -l} notation, i.e. {\tt -lm /usr/lib/libm.a}, etc. If several libraries are specified, enclose the list with single right-quotes, e.g., {\tt -}{\tt -with-libs='-lcompat /usr/local/lib/libm.a'}. \item {\tt -}{\tt -with-libdirs=directories} --- Use this option to specify extra directories where to look for libraries. Directories should be specified prepended by {\tt -L}, i.e. {\tt -Ldir1 -Ldir2}, etc. If several directories are specified, enclose the list with single right-quotes, e.g., {\tt -}{\tt -with-libdirs='-L/usr/local/lib -I/home/psi3/lib'}. \item {\tt -}{\tt -with-blas=library} --- Use this option to specify a BLAS library. If your BLAS library has multiple components, enclose the file list with single right-quotes, e.g., {\tt -}{\tt -with-blas='-lf77blas -latlas'}. Note that many BLAS libraries can be detected automatically. \item {\tt -}{\tt -with-lapack=library} --- Use this option to specify a LAPACK library. If your LAPACK library has multiple components, enclose the file list with single right-quotes, e.g., {\tt -}{\tt -with-lapack='-llapack -lcblas -latlas'}. note that many LAPACK libraries can be detected automatically. \item {\tt -}{\tt -with-max-am-eri=integer} --- Specifies the maximum angular momentum level for the primitive Gaussian basis functions when computing electron repulsion integrals. This is set to $g$-type functions (AM=4) by default. \item {\tt -}{\tt -with-max-am-deriv1=integer} --- Specifies the maximum angular momentum level for first derivatives of the primitive Gaussian basis functions. This is set to $f$-type functions (AM=3) by default. \item {\tt -}{\tt -with-max-am-deriv2=integer} --- Specifies the maximum angular momentum level for second derivatives of the primitive Gaussian basis functions. This is set to $d$-type functions (AM=2) by default. \item {\tt -}{\tt -with-max-am-r12=integer} --- Specifies the maximum angular momentum level for primitive Gaussian basis functions used in $r_{12}$ explicitly correlated methods. This is set to $f$-type functions (AM=3) by default. \item {\tt -}{\tt -with-debug=yes/no} --- This option turns on debugging options. This is set to {\tt no} by default. \item {\tt -}{\tt -with-opt=options} --- Turn off compiler optimizations if {\tt no}. This is set to {\tt yes} by default. \item {\tt -}{\tt --with-strict=yes} -- Turns on strict compiler warnings. \end{itemize} \section{Detailed Installation Instructions} This section provides detailed instructions for compiling and installing the \PSIthree\ package. \subsection{Step 1: Configuration} First, we recommend that you choose for the top-level {\tt \$PSI3} source directory something other than {\tt /usr/local/psi}; your {\tt \$HOME} directory or {\tt /usr/local/src/psi3} are convenient choices. Next, in the top-level {\tt \$PSI3} source directory you've chosen, first run {\tt autoconf} to generate the configure script from {\tt configure.ac}. It is best to keep the source code separate from the compilation area, so you must choose a subdirectory for compilation of the codes. A simple option is {\tt \$PSI3/objdir}, which should work for most environments. However, if you need executables for several architectures, choose more meaningful subdirectory names. $\bullet$ The compilation directory will be referred to as {\tt \$objdir} for the remainder of these instructions. In {\tt \$objdir}, run the configure script found in the {\tt \$PSI3} top-level source directory. This script will scan your system to locate certain libraries, header files, etc. needed for complete compilation. The script accepts a number of options, all of which are listed above. The most important of these is the {\tt --prefix} option, which selects the installation directory for the executables, the libraries, header files, basis set data, and other administrative files. The default {\tt -}{\tt -prefix} is {\tt /usr/local/psi}. $\bullet$ The configure script's {\tt -}{\tt -prefix} directory will be referred to as {\tt \$prefix} for the remainder of these instructions. \subsection{Step 2: Compilation} Running {\tt make} (which must be GNU's {\tt 'make'} utility) in {\tt \$objdir} will compile the \PSIthree\ libraries and executable modules. \subsection{Step 3: Testing} To execute automatically the ever-growing number of test cases after compilation, simply execute ``make tests'' in the {\tt \$objdir} directory. This will run each (relatively small) test case and report the results. Failure of any of the test cases should be reported to the developers at \PSIemail. By default, any such failure will stop the testing process. If you desire to run the entire testing suit without interruption, execute ``make tests TESTFLAGS='-u -q' ''. Note that you must do a ``make testsclean'' in {\tt \$objdir} to run the test suite again. \subsection{Step 4: Installation} Once testing is complete, installation into \$prefix is accomplished by running {\tt make install} in {\tt \$objdir}. Executable modules are installed in {\tt \$prefix/bin}, libraries in {\tt \$prefix/lib} and basis set data and other control strctures {\tt \$prefix/share}. \subsection{Step 5: Documentation} If your system has the appropriate utilities, you may build the package documentation from the top-level {\tt \$objdir} by running {\tt make doc}. The resulting files will appear in the {\tt \$prefix/doc} area. \subsection{Step 6: Cleaning} All compilation-area object files and libraries can be removed to save disk space by running {\tt make clean} in {\tt \$objdir}. \subsection{Step 7: User Configuration} After the \PSIthree\ package has been successfullly installed, the user will need to add the installation directory into their path. If the package has been installed in the default location {\tt /usr/local/psi3}, then in C shell, the user should add something like the following to their {\tt .cshrc} file: \begin{verbatim} setenv PSI /usr/local/psi3 set path = ($path $PSI/bin) setenv MANPATH $PSI/doc/man:$MANPATH \end{verbatim} The final line will enable the use of the \PSIthree\ man pages. \begin{verbatim} \end{verbatim} \section{Recommendations for BLAS and LAPACK Libraries} Much of the speed and efficiency of the PSI3 programs depends on the corresponding speed and efficiency of the available BLAS and LAPACK libraries (especially the former). In addition, the most common compilation problems involve these libraries. Users may therefore wish to consider the following BLAS and LAPACK recommendations when building PSI3: \begin{itemize} \item It is NOT wise to use the stock BLAS library provided with many Linux distributions like RedHat. This library is usually just the netlib ({http://netlib.org/}distribution and is completely unoptimized. PSI3's performance will suffer if you choose this route. The choice of LAPACK is less critical, and so the unoptimized netlib distribution is acceptable. If you do choose to use the RedHat/Fedora stock BLAS and LAPACK, be aware that some RPM's do not make the correct symbolic links. For example, you may have {\tt /usr/lib/libblas.so.3.1.0} but not {\tt /usr/lib/libblas.so}. If this happens, create the link as, e.g., {\tt ln -s /usr/lib/libblas.so.3.1.0 /usr/lib/libblas.so}. You may need to do similarly for lapack. \item Perhaps the best choices for BLAS are Kazushige Goto's hand-optimized BLAS \\ ({\tt http://www.tacc.utexas.edu/resources/software/}) and ATLAS \\ ({\tt http://math-atlas.sourceforge.net/}). These work well on nearly every achitecture to which the PSI3 developers have access, though we have identified at least one case in which the Goto libraries yielded faulty DGEMM call. On Mac OS X systems, however, the {\tt vecLib} package that comes with Xcode works well. Note also that we have encountered problems with the version 10 of Intel's MKL, particularly for very large coupled cluster calculations. \item PSI3 does not require a Fortran compiler, unless the resident BLAS and LAPACK libraries require Fortran-based system libraries. If you see compiler complaints about missing symbols like ``{\tt do\_fio}'' or ``{\tt e\_wsfe}'' then your libraries were most likely compiled with g77 or gfortran, which require {\tt -lg2c} to resolve the Fortran I/O calls. Use of the same gcc package for PSI3 should normally resolve this problem. \item The PSI3 configure script can often identify and use several different BLAS and LAPACK libraries, but its ability to do this automatically depends on a number of factors, including correspondence between the compiler used for PSI3 and the compiler used to build BLAS/LAPACK, and placement of the libraries in commonly searched directories, among others. PSI3's configure script will find your BLAS and LAPACK if any of the the following are installed in standard locations (e.g. {\tt /usr/local/lib}): \begin{itemize} \item ATLAS: {\tt libf77blas.a} and {\tt libatlas.a}, plus netlib's {\tt liblapack.a} \item MKL 8: {\tt libmkl.so} and {\tt libmkl\_lapack64.a} (with the corresponding Intel compilers) \item Goto: {\tt libgoto.a} and netlib's {\tt liblapack.a} \item Cray SCSL (e.g. on SGI Altix): {\tt libscs.so} (NB: No Fortran compiler is necessary in this case, so {\tt -}{\tt -with-fc=no} should work.) \item ESSL (e.g. on AIX systems): {\tt libessl.a} \end{itemize} \item If configure cannot identify your BLAS and LAPACK libraries automatically, you can specify them on the command-line using the {\tt -}{\tt -with-blas} and {\tt -}{\tt -with-lapack} arguments described above. Here are a few examples that work on the PSI3 developers' systems: (a) Linux with ATLAS: {\tt -}{\tt -with-blas='-lf77blas -latlas'} {\tt -}{\tt -with-lapack='-llapack -lcblas'} (b) Mac OS X with vecLib: {\tt -}{\tt -with-blas='-altivec -framework vecLib'} {\tt -}{\tt -with-lapack=' '} (c) Linux with MKL 8.1 and {\tt icc/icpc/ifort} 9.1: {\tt -}{\tt -with-libdirs=-L/usr/local/opt/intel/mkl/8.0.2/lib/32} {\tt -}{\tt -with-blas=-lmkl} {\tt -}{\tt -with-lapack=-lmkl\_lapack32} \end{itemize} (d) Linux on ia32 with MKL 10.1 and {\tt icc/icpc} 11.0: {\tt -}{\tt -with-blas='-Wl,--start-group -L/usr/local/opt/intel/mkl/10.1.0.015/lib/32 -lmkl -Wl,}{\tt -}{\tt -end-group -lguide -lpthread'} \section{Miscellaneous architecture-specific notes} \begin{itemize} \item Linux on x86 and x86\_64: \begin{itemize} \item {\tt gcc} compiler: versions 3.2, 3.3, 3.4, 4.0, and 4.1 have been tested. \item Intel compilers: versions 9.0 and 11.0 have been tested. We do not recommend using version 8.1. \item Portland Group compilers: version 6.0-5 has been tested. \item Some versions of RedHat/Fedora Core RPM packages for the BLAS and LAPACK libraries fail to make all the required symlinks. For example, you may have {\tt /usr/lib/libblas.so.3.1.0} but not {\tt /usr/lib/libblas.so}. If this happens, create the link as, e.g., {\tt ln -s /usr/lib/libblas.so.3.1.0 /usr/lib/libblas.so}. You may need to do something similar for lapack. \end{itemize} \item Linux on Itanium2 (IA64): \begin{itemize} \item Intel compiler versions 9.0 and 10.0 have been tested and work. Version 8.1 does not work. \item {\tt gcc} compilers work. \end{itemize} \item Mac OS 10.$x$: \begin{itemize} \item The compilation requires a developer's toolkit (Xcode) from {\tt apple.com}. Note that a fortran compiler is not needed for PSI 3.4 on Mac OS X systems. \item The {\tt libcompat.a} library is no longer needed as of 1/24/2008. \item For apple systems, the latest configure script assumes that the {\tt vecLib} will be used for the optimized BLAS and LAPACK libraries, unless the user indicates otherwise using the {\tt -}{\tt -with-blas} and {\tt -}{\tt -with-lapack} flags to configure. If you encounter difficulty with configure, you may have success explicitly indicating the vecLib using: {\tt -}{\tt -with-blas='-altivec -framework vecLib'} {\tt -}{\tt -with-lapack=' '} \item Pre Mac OS 10.4: Certain PSI3 codes require significant stackspace for compilation. Increase your shell's stacksize limit before running {\tt make}. For csh, for example, this is done using ``unlimit stacksize.'' [NB: This limit appears to have been lifted starting with Mac OS 10.3.X (Panther).] \item Mac 10.5 users can take advantage of the ruby driver in PSI 3.4 by including the following options on the configure command line: {\tt -}{\tt -with-ruby-include='-I/System/Library/Frameworks/Ruby.framework/Headers'} {\tt -}{\tt -with-ruby-lib='-framework Ruby'} \end{itemize} \item AIX in a 64-bit environment: We do not presently support the use of XL compilers on AIX systems. We have tested gcc-4.1.1 under AIX 5.3, and we recommend use of the configure flag: {\tt -}{\tt -with-aix64}. \item SGI IRIX 6.$x$: \begin{itemize} \item MIPSpro C++ compilers prior to version 7.4 require a command-line flag '{\tt -LANG:std}' in order to compile \PSIthree\ properly. \item Use command-line flag '{\tt -64}' in order to produce 64-bit \PSIthree\ executables with MIPSpro compilers. The following is an example of appropriate configure options: \begin{verbatim} --with-cc='cc -64' --with-cxx='CC -64 -LANG:std' --with-fc='f77 -64' \end{verbatim} \item Under IRIX configure will attempt to detect automatically and use the optimized SGI Scientific Computing Software Library (SCSL). \end{itemize} \item Compaq Alpha/OSF 5.1: default shell ({\tt /bin/sh}) is not POSIX-compliant which causes some \PSIthree\ makefiles to fail. Set environmental variable {\tt BIN\_SH} to {\tt xpg4}. \end{itemize} \end{document} ��������������������������������������������������������������������psi3/doc/installation/Makefile.in�������������������������������������������������������������������0000644�0001015�0000765�00000000302�07724477235�015530� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ srcdir = @srcdir@ MAN = installation include ../MakeVars TEX = installation.tex SUBTEX = \ DVI = $(TEX:%.tex=%.dvi) PS = $(DVI:%.dvi=%.ps) HTML = $(TEX:%.tex=%.html) include ../MakeRules ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/macros.tex.in������������������������������������������������������������������������������0000644�0001015�0000765�00000004354�10605256737�013402� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ \newcommand{\PSItwo}{{\tt PSI2}} \newcommand{\PSIthree}{{\tt PSI3}} \newcommand{\PSIversion}{@PSI_VERSION@} \newcommand{\PSImmmversion}{@PSI_VERSION@} \newcommand{\PSIemail}{@PSI_BUGREPORT@} % % Psi Modules % \def\module#1{{\tt #1}} \newcommand{\PSIdriver}{\module{psi3}} \newcommand{\PSIinput}{\module{input}} \newcommand{\PSIcints}{\module{cints}} \newcommand{\PSIcderiv}{\module{cints --deriv1}} \newcommand{\PSIdetci}{\module{detci}} \newcommand{\PSIdetcas}{\module{detcas}} \newcommand{\PSIdetcasman}{\module{detcasman}} \newcommand{\PSIclag}{\module{clag}} \newcommand{\PSIccenergy}{\module{ccenergy}} \newcommand{\PSIccsort}{\module{ccsort}} \newcommand{\PSIpsi}{\module{psi}} \newcommand{\PSIcscf}{\module{cscf}} \newcommand{\PSIoptking}{\module{optking}} \newcommand{\PSItransqt}{\module{transqt}} \newcommand{\PSInormco}{\module{normco}} \newcommand{\PSIintder}{\module{intder95}} \newcommand{\PSIgeom}{\module{geom}} \newcommand{\PSIoeprop}{\module{oeprop}} \newcommand{\PSIstable}{\module{stable}} % % Psi Library % \def\library#1{{\tt #1}} % % Psi and Unix Files % \def\FILE#1{{\tt file#1}} \def\file#1{{\tt #1}} \newcommand{\chkptfile}{\file{file32}} \newcommand{\inputdat}{\file{input.dat}} \newcommand{\outputdat}{\file{output.dat}} \newcommand{\fconstdat}{\file{fconst.dat}} \newcommand{\intcodat}{\file{intco.dat}} \newcommand{\optaux}{\file{opt.aux}} \newcommand{\basisdat}{\file{basis.dat}} \newcommand{\pbasisdat}{\file{pbasis.dat}} \newcommand{\geomdat}{\file{geom.dat}} \newcommand{\geomout}{\file{geom.out}} % % Psi Keywords % \def\keyword#1{{\tt #1}} % % Psi C and Fortran Language elements % \def\celem#1{{\tt #1}} \def\felem#1{{\tt #1}} % % Unix stuff % \def\unixid#1{{\em #1}} % names of groups and users \def\shellvar#1{{\tt #1}} % % Nice output for function description % % Needs 4 arguments: function declaration, % description, arguments, and return values % % Call \initfuncdesc before using \funcdesc % \newcommand{\initfuncdesc} {\newlength{\lcwidth} \settowidth{\lcwidth}{Arguments:} \newlength{\rcwidth} \setlength{\rcwidth}{\linewidth} \addtolength{\rcwidth}{-1.0\lcwidth} \addtolength{\rcwidth}{-6.0\tabcolsep} } \newcommand{\funcdesc}[4]{ \celem{#1} \\ #2 \begin{tabular}{lp{\rcwidth}} Arguments: & #3\\ Returns: & #4 \end{tabular}} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/Makefile.in��������������������������������������������������������������������������������0000644�0001015�0000765�00000002273�11100440730�013005� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .PHONY: default all install clean realclean installation progman userman subdirs = \ installation progman userman DOXYGEN = @DOXYGEN@ ifneq ($(DOXYGEN),NO) subdirs += doxygen endif all: default default: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making in $${dir} && $(MAKE) default) || exit 1; \ done install: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making install in $${dir} && $(MAKE) install) || exit 1; \ done clean: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making clean in $${dir} && $(MAKE) clean) || exit 1; \ done realclean: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making clean in $${dir} && $(MAKE) realclean) || exit 1; \ done top_srcdir = @top_srcdir@ srcdir = @srcdir@ top_objdir = .. $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=doc/Makefile ./config.status �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/MakeRules.in�������������������������������������������������������������������������������0000644�0001015�0000765�00000004607�10764260211�013174� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # # Targets which don't generate files should be listed as dependencies # of the special target .PHONY # .PHONY: install install_dvi install_ps install_html .PHONY: clean # # This should be the first rule. It will create a document without # installing it. # default:: install # Note that LaTeX should be run three times to resolve references $(TARGET_DVI): $(TEX) $(SUBTEX) echo $(srcdir) TEXINPUTS=$(TEXINPUTS); export TEXINPUTS; \ BIBINPUTS=$(TEXINPUTS); export BIBINPUTS; \ $(LATEX) $<; $(BIBTEX) $(MAN); $(LATEX) $<; $(LATEX) $< $(TARGET_PS): $(DVI) $(DVIPS) -o $@ $< $(TARGET_HTML): $(TEX) $(SUBTEX) TEXINPUTS=$(TEXINPUTS); export TEXINPUTS; \ $(LATEX2HTML) -tmp /tmp -dir $(currdir)/html -external_file $(currdir)/$(<F:%.tex=%) -mkdir -local_icons -split 0 $<; \ $(LATEX2HTML) -tmp /tmp -dir $(currdir)/html_sectioned -external_file $(currdir)/$(<F:%.tex=%) -mkdir -local_icons $<; \ # # do installations # install:: install_dvi install_ps install_html ifdef TARGET_DVI install_dvi:: $(TARGET_DVI) $(MKDIRS) $(dvidir) $(INSTALL_DATA) $(TARGET_DVI) $(dvidir) endif ifdef TARGET_PS install_ps:: $(TARGET_PS) $(MKDIRS) $(psdir) $(INSTALL_DATA) $(TARGET_PS) $(psdir) endif ifdef TARGET_HTML install_html:: $(TARGET_HTML) $(?F:%.html=$(MKDIRS) $(htmldir)/%;) $(?F:%.html= CDIR=%; $(INSTALL_DATA) $(currdir)/html/* $(htmldir)/$$CDIR;) $(?F:%.html=$(MKDIRS) $(htmldir)/%_sectioned;) $(?F:%.html= CDIR=%_sectioned; $(INSTALL_DATA) $(currdir)/html_sectioned/* $(htmldir)/$$CDIR;) endif # # clean up # realclean:: dviclean psclean htmlclean -rm -f *.aux *.log *.toc *.bbl -rm -rf html clean:: dviclean psclean htmlclean dviclean: -rm -f *.dvi psclean: -rm -f *.ps htmlclean: -rm -rf $(TARGET_HTML:%.html=%) # # keep the configuration information and makefiles up-to-date # $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=doc/`basename $(srcdir)`/Makefile ./config.status ../MakeVars: $(top_srcdir)/doc/MakeVars.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=doc/MakeVars ./config.status ../MakeRules: $(top_srcdir)/doc/MakeRules.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=doc/MakeRules ./config.status �������������������������������������������������������������������������������������������������������������������������psi3/doc/MakeVars.in��������������������������������������������������������������������������������0000644�0001015�0000765�00000001723�11026242634�013012� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ SHELL = /bin/sh # # Initialize variables that have been figured out by configure. # target = @target@ prefix = @prefix@ docdir = @docdir@ datarootdir = @datarootdir@ datadir = @datadir@ dvidir = $(docdir)/dvi psdir = $(docdir)/ps htmldir = $(docdir)/html top_srcdir = @top_srcdir@ # this file is used by the subdirectories, so top_objdir is relative to those top_objdir = ../.. currdir = $(shell echo `pwd`) LATEX = @LATEX@ BIBTEX = @BIBTEX@ DVIPS = @DVIPS@ LATEX2HTML = @LATEX2HTML@ DOXYGEN = @DOXYGEN@ HAVE_DOT = @HAVE_DOT@ DOT_PATH = @DOT_PATH@ MKDIRS = @MKDIRS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ TEXINPUTS = :$(srcdir):$(srcdir)/..:..: TARGET_DVI = $(MAN).dvi TARGET_PS = $(MAN).ps TARGET_HTML = $(MAN).html ifndef LATEX2HTML TARGET_HTML = endif ifndef DVIPS TARGET_PS = TARGET_HTML = endif ifndef LATEX TARGET_DVI = TARGET_PS = TARGET_HTML = endif vpath %.html $(currdir)/html: vpath %.tex $(srcdir):$(srcdir)/.. vpath %.bib $(srcdir): ���������������������������������������������psi3/doc/progman/�����������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111702�012403� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/adding_new_code.tex����������������������������������������������������������������0000644�0001015�0000765�00000003566�10607000650�016230� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Given the complexity of the \PSIthree\ package, the prospect of adding new modules or libraries may seem daunting at first. Let's assume you want to begin writing a new module named \file{great\_code} for \PSIthree. The following series of steps will generate the proper directories and \file{Makefile}s to get started. For convenience, the top-level directory of the programmer's \PSIthree\ source tree will be referred to as \$PSI3 and the top-level directory of the compilation area as \$prefix: \begin{enumerate} \item Generate the new directory in the source tree: \\ {\tt mkdir \$PSI3/src/bin/great\_code} \item {\tt cd \$PSI3/src/bin/great\_code} \item Copy an existing \file{Makefile.in} from another module: \\ {\tt cp ../cscf/Makefile.in .} \item Edit the \file{Makefile.in} so that it lists only the source files for \file{great\_code} and includes in \shellvar{PSILIBS} only those libraries needed to link the executable. \item Return to the top of the source tree: {\tt cd \$PSI3} \item Add the name of \file{great\_code}'s \file{Makefile} to \file{configure.ac} (near the bottom of the file) and run \file{autoconf} to generate a new \file{configure} script. \item Go to the top of the compilation tree: {\tt cd \$prefix}. \item Re-run the configure script to generate the \file{Makefile} for \file{great\_code}. Make sure you use the same options to \file{configure} that you used before or other \file{Makefile}'s may not function properly. The command you used before can be found in \file{\$prefix/config.status}. (See also the \PSIthree\ installation manual for more details on the options to \file{configure}.) \end{enumerate} Now you are ready to work on the code. Changes to source files (including the \file{Makefile} should be made to the files in \shellvar{\$PSI3}\file{/src/bin/great\_code} and all compilations should be run in \file{\$prefix/src/bin/great\_code}. ������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/checkpointfile.tex�����������������������������������������������������������������0000644�0001015�0000765�00000052654�10757640026�016145� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsubsection{Library Philosophy} The \library{libchkpt.a} library is a collection of functions used to access the \PSIthree\ checkpoint file (\FILE{32}) -- the file which contains all most frequently used information about the computation such as molecular geometry, basis set, HF determinant, etc. Previously, the checkpoint file was a fixed-format file which is accessed using the old \PSIthree\ I/O system. However, this changed in the spring of 2002 to use the new \library{libpsio.a} I/O system to access the checkpoint file, and it is now free format. That is, any programmer can add content to the file at will. The old checkpoint file interface has been updated to access the new underlying I/O system. It is {\em mandatory} that the checkpoint file is accessed via the \library{libchkpt.a} functions {\em only}. \subsubsection{Basic Use Instructions} Following the philosophy that a programmer who wants to read, say, the number of atoms and the irrep labels from the checkpoint file should not have to use fifty lines of code to do so, \library{libchkpt.a} was written. Following a call to a single command, \celem{chkpt\_init()}, the programmer can extract many useful bits of info from the checkpoint file relatively painlessly. \library{libchkpt.a} is dependent upon \library{libipv1.a} and \library{libpsio.a} and thus requires that the input parser and I/O system each be initialized so that the proper file name labels may be referenced. An example of a minimal program that sets up the input parser, initilizes a special structure within the \library{libchkpt.a} library, and reads the SCF HF energy, eigenvector and eigenvalues is given below. In order to illustrate the writing capability of the library routines, a dummy correlated energy is written to the checkpoint file and then read back again within the code. \begin{verbatim} #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } using namespace psi::MODULE_NAME; int main(int argc, char* argv[]) { int nmo; double escf, etot; double *evals; double **scf; psi_start(&infile, &outfile, &psi_file_prefix, argc-1, argv+1, 0); ip_cwk_add(":MODULE_NAME"); // MODULE_NAME all caps here psio_init(); psio_ipv1_config(); /* to start timing, tstart(outfile); */ /*------------------------------------ now initialize the checkpoint structure and begin reading info ------------------------------------*/ chkpt_init(PSIO_OPEN_OLD); escf = chkpt_rd_escf(); evals = chkpt_rd_evals(); scf = chkpt_rd_scf(); nmo = chkpt_rd_nmo(); chkpt_wt_etot(-1000.0); etot = chkpt_rd_etot(); chkpt_close(); /*-------------------------------------------- print out info to see what has been read in --------------------------------------------*/ fprintf(outfile,"\n\n\tEscf = %20.10lf\n",escf); fprintf(outfile,"\tEtot = %20.10lf\n",etot); fprintf(outfile,"SCF EIGENVECTOR\n"); eivout(scf,evals,nmo,nmo,outfile); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } /*------------------------------------------------- dont forget to add the obligatory gprgid section -------------------------------------------------*/ extern "C" { char *gprgid() { char *prgid = ":MODULE_NAME"; return(prgid); } } \end{verbatim} \subsubsection{Initialization} \funcdesc{int chkpt\_init()} {Initializes the \celem{checkpoint} struct to allow other \celem{chkpt\_*} functions to perform their duties.}{the {\tt libpsio} status marker PSIO\_OPEN\_OLD; also requires that the input parser be initialized so that it can open the checkpoint file.} {zero. Perhaps this will change some day.} \\ \noindent \funcdesc{int chkpt\_close()} {Closes the checkpoint file, frees memory, etc.} {none, but \celem{chkpt\_init} must already have been called for this to work.} {zero. Perhaps this, too, will change one day.} \subsubsection{Functions for reading information from the checkpoint file} This section gives an overview of many of the most widely used functions from \library{libchkpt.a}. For more details and descriptions of newer functions that are not yet described here, see the {\tt doxygen} generated documentation at \\ \htmladdnormallink{ {\tt http://www.psicode.org/doc/libs/doxygen/html}} {http://www.psicode.org/doc/libs/doxygen/html}. \begin{center} Functions that return \celem{char*} \end{center} \funcdesc{char *chkpt\_rd\_corr\_lab()} {Reads in a label from the checkpoint file which describes the wavefunction used to get the correlated energy which is stored in the checkpoint file (see \celem{chkpt\_rd\_ecorr()}).} {takes no arguments.} {a string, like "CISD", or "MCSCF" or some other wavefunction designation.}\\ \noindent \funcdesc{char *chkpt\_rd\_label()} {Reads the main the checkpoint file label.} {takes no arguments.} {calculation label.} \\ \noindent \funcdesc{char *chkpt\_rd\_sym\_label()} {Reads the label for the point group.} {takes no arguments.} {point group label.} \begin{center} Functions that return \celem{char**} \end{center} \noindent \funcdesc{char **chkpt\_rd\_irr\_labs()} {Read in the symmetry labels for all irreps in the point group in which the molecule is considered.} {takes no arguments.} {an array of labels (strings) which denote the irreps for the point group in which the molecule is considered, \_regardless\_ of whether there exist any symmetry orbitals which transform as that irrep.} \\ \noindent \funcdesc{char **chkpt\_rd\_hfsym\_labs()} {Read in the symmetry labels {\em only} for those irreps which have basis functions.} {takes no arguments.} {an array of labels (strings) which denote the irreps which have basis functions (in Cotton ordering). For DZ or STO-3G water, for example, in $C_{\rm 2v}$ symmetry, this would be an array of three labels: "A1", "B1", and "B2".} \begin{center} Functions that return \celem{int} \end{center} \funcdesc{int chkpt\_rd\_iopen()} {Reads in the dimensionality (up to a sign) of ALPHA and BETA vectors of two-electron coupling coefficients for open shells (see \celem{chkpt\_rd\_ccvecs()}). Note : \celem{iopen} = MM * (MM + 1), where MM is the total number of irreps containing singly occupied orbitals.} {takes no arguments.} {the +/- dimensionality of ALPHA and BETA vectors of coupling coefficients for open shells.} \\ \noindent \funcdesc{int chkpt\_rd\_max\_am()} {Reads in the maximum orbital quantum number of AOs in the basis.} {takes no arguments.} {the maximum orbital quantum number of AOs in the basis.} \\ \noindent \funcdesc{int chkpt\_rd\_mxcoef()} {Reads the value of the constant \celem{mxcoef}.} {takes no arguments.} {the sum of the squares of the number of symmetry orbitals for each irrep. This gives the number of elements in the non-zero symmetry blocks of the SCF eigenvector. For STO-3G water \celem{mxcoef}$ = (4*4) + (0*0) + (1*1) + (2*2) = 21$.} \\ \noindent \funcdesc{int chkpt\_rd\_nao()} {Reads in the total number of atomic orbitals (read: Cartesian Gaussian functions).} {takes no arguments.} {total number of atomic orbitals.} \\ \noindent \funcdesc{int chkpt\_rd\_natom()} {Reads in the total number of atoms.} {takes no arguments.} {total number of atoms.} \\ \noindent \funcdesc{int chkpt\_rd\_ncalcs()} {Reads in the total number of calculations in the checkpoint file (was always 1 in old \library{libfile30.a}, probably still is for now).} {takes no arguments.} {total number of calculations in the checkpoint file.} \\ \noindent \funcdesc{int chkpt\_rd\_nirreps()} {Reads in the total number of irreducible representations in the point group in which the molecule is being considered.} {takes no arguments.} {total number of irreducible representations.} \\ \noindent \funcdesc{int chkpt\_rd\_nmo()} {Reads in the total number of molecular orbitals (may be different from the number of basis functions).} {takes no arguments.} {total number of molecular orbitals.} \\ \noindent \funcdesc{int chkpt\_rd\_nprim()} {Reads in the total number of primitive Gaussian functions (only primitives of \_symmetry independent\_ atoms are counted!).} {takes no arguments.} {total number of primitive Gaussian functions.} \\ \noindent \funcdesc{int chkpt\_rd\_nshell()} {Reads in the total number of shells. For example, DZP basis set for carbon atom (contraction scheme $[9s5p1d/4s2p1d]$) has a total of 15 basis functions, 15 primitives, and 7 shells. Shells of \_all\_ atoms are counted (not only of the symmetry independent; compare \celem{chkpt\_rd\_nprim}).} {takes no arguments.} {total number of shells.} \\ \noindent \funcdesc{int chkpt\_rd\_nso()} {Reads in the total number of symmetry-adapted basis functions (read: Cartesian or Spherical Harmonic Gaussians).} {takes no arguments.} {total number of SOs.} \\ \noindent \funcdesc{int chkpt\_rd\_nsymhf()} {Reads in the total number of irreps in the point group in which the molecule is being considered which have non-zero number of basis functions. For STO-3G or DZ water, for example, this is three, even though \celem{nirreps} is 4 (compare \celem{int chkpt\_rd\_nirreps()}).} {takes no arguments.} {total number of irreducible representations with a non-zero number of basis functions.} \\ \noindent \funcdesc{int chkpt\_rd\_num\_unique\_atom()} {Reads in the number of symmetry unique atoms.} {takes no arguments.} {number of symmetry unique atoms.} \\ \noindent \funcdesc{int chkpt\_rd\_num\_unique\_shell()} {Reads in the number of symmetry unique shells.} {takes no arguments.} {number of symmetry unique shells.} \\ \noindent \funcdesc{int chkpt\_rd\_phase\_check()} {Reads the phase flag, which is 1 if the orbital phases have been checked and is 0 otherwise (phase checking just helps ensure the arbitrary phases of the orbitals are consistent from one geometry to the next, which helps various guessing or extrapolation schemes).} {takes no arguments.} {flag.} \noindent \funcdesc{int chkpt\_rd\_ref()} {Reads the reference type from the flag in the checkpoint file. 0 = RHF, 1 = UHF, 2 = ROHF, 3 = TCSCF.} {takes no arguments.} {flag indicating the reference.} \noindent \funcdesc{int chkpt\_rd\_rottype()} {Reads the rigid rotor type the molecule represents. 0 = asymmetric, 1 = symmetric, 2 = spherical, 3 = linear, 6 = atom.} {takes no arguments.} {rigid rotor type.} \begin{center} Functions that return \celem{int*} \end{center} \funcdesc{int *chkpt\_rd\_am2canon\_shell\_order()} {Reads in the the mapping array from the angmom-ordered to the canonical (in the order of appearance) list of shells.} {takes no arguments.} {an array \celem{nshell} long that maps shells from the angmom-ordered to the canonical (in the order of appearance) order.} \noindent \funcdesc{chkpt\_rd\_atom\_position()} {Reads in symmetry positions of atoms. Allowed values are as follows: \begin{itemize} \item 1 - atom in a general position \item 2 - atom on the c2z axis \item 4 - atom on the c2y axis \item 8 - atom on the c2x axis \item 16 - atom in the inversion center \item 32 - atom in the sigma\_xy plane \item 64 - atom in the sigma\_xz plane \item 128 - atom in the sigma\_yz plane \end{itemize} This data is sufficient to define stabilizers of the nuclei.} {takes no arguments.} {an array of symmetry positions of atoms.} \\ \noindent \funcdesc{int *chkpt\_rd\_clsdpi()} {Reads in an array which has an element for each irrep of the point group of the molecule (n.b. not just the ones with a non-zero number of basis functions). Each element contains the number of doubly occupied MOs for that irrep.} {takes no arguments.} {the number of doubly occupied MOs per irrep.} \\ \noindent \funcdesc{int *chkpt\_rd\_openpi()} {Reads in an array which has an element for each irrep of the point group of the molecule (n.b. not just the ones with a non-zero number of basis functions). Each element contains the number of singly occupied MOs for that irrep.} {takes no arguments.} {the number of singly occupied MOs per irrep.} \\ \noindent \funcdesc{int *chkpt\_rd\_orbspi()} {Reads in the number of MOs in each irrep.} {takes no arguments.} {the number of MOs in each irrep.} \\ \noindent \funcdesc{int *chkpt\_rd\_shells\_per\_am()} {Reads in the number of shells in each angmom block.} {takes no arguments.} {the number of shells in each angmom block.} \\ \noindent \funcdesc{chkpt\_rd\_sloc()} {Read in an array of pointers to the first AO from each shell.} {takes no arguments.} {Read in an array \celem{nshell} long of pointers to the first AO from each shell.} \\ \noindent \funcdesc{chkpt\_rd\_sloc\_new()} {Read in an array of pointers to the first basis function (not AO as \celem{chkpt\_rd\_sloc} does) from each shell.} {takes no arguments.} {an array \celem{nshell} long of pointers to the first basis function from each shell.} \\ \noindent \funcdesc{int *chkpt\_rd\_snuc()} {Reads in an array of pointers to the nuclei on which shells are centered.} {takes no arguments.} {an array \celem{nshell} long of pointers to the nuclei on which shells are centered.} \noindent \funcdesc{int *chkpt\_rd\_snumg()} {Reads in array of the numbers of the primitive Gaussians in the shells.} {takes no arguments.} {an array \celem{nshell} long of the numbers of the primitive Gaussians in shells.} \\ \noindent \funcdesc{int *chkpt\_rd\_sprim()} {Reads in pointers to the first primitive from each shell.} {takes no arguments.} {an array \celem{nshell} long of pointers to the first primitive from each shells.} \\ \noindent \funcdesc{chkpt\_rd\_sopi()} {Read in the number of symmetry-adapted basis functions in each symmetry block.} {takes no arguments.} {an array nirreps long of the numbers of symmetry orbitals in symmetry blocks.} \\ \noindent \funcdesc{int *chkpt\_rd\_stype()} {Reads in angular momentum numbers of the shells.} {takes no arguments.} {Returns an array \celem{nshell} long of the angular momentum numbers of the shells.} \\ \noindent \funcdesc{int *chkpt\_rd\_symoper()} {Read in the mapping array between "canonical" ordering of the symmetry operations of the point group and the one defined in \file{symmetry.h}.} {takes no arguments.} {a mapping array \celem{nirrep} long} \noindent \funcdesc{int *chkpt\_rd\_ua2a()} {Read in the mapping array from the symmetry-unique atom list to the full atom list.} {takes no arguments.} {a mapping array \celem{num\_unique\_atom} long} \noindent \funcdesc{int *chkpt\_rd\_us2s()} {Read in the mapping array from the symmetry-unique shell list to the full shell list.} {takes no arguments.} {a mapping array \celem{num\_unique\_shell} long} \begin{center} Functions that return \celem{int**} \end{center} \funcdesc{int **chkpt\_rd\_ict()} {Reads the transformation properties of the nuclei under the operations allowed for the particular symmetry point group in which the molecule is considered.} {takes no arguments.} {a matrix of integers. Each row corresponds to a particular symmetry operation, while each column corresponds to a particular atom. The value of \celem{ict[2][1]}, then, should be interpreted in the following manner: application of the third symmetry operation of the relavant point group, the second atom is placed in the location originally occupied by the atom number \celem{ict[2][1]}.} \\ \noindent \funcdesc{int **chkpt\_rd\_shell\_transm()} {Reads in the transformation matrix for the shells. Each row of the matrix is the orbit of the shell under symmetry operations of the point group.} {takes no arguments.} {a matrix of \celem{nshell}*\celem{nirreps} integers.} \begin{center} Functions that return \celem{double} \end{center} \funcdesc{double chkpt\_rd\_ecorr()} {Reads in the correlation energy stored in the checkpoint file. To get some information (a label) on the type of correlated wavefunction used to get this energy, see \celem{chkpt\_rd\_corr\_lab()}.} {takes no arguments.} {the correlation energy.} \\ \noindent \funcdesc{double chkpt\_rd\_enuc()} {Reads in the nuclear repulsion energy} {takes no arguments.} {the nuclear repulsion energy.} \\ \noindent \funcdesc{double chkpt\_rd\_eref()} {Reads in the reference energy (may be different from HF energy).} {takes no arguments.} {the reference energy.} \\ \noindent \funcdesc{double chkpt\_rd\_escf()} {Reads in the SCF HF energy.} {takes no arguments.} {the SCF HF energy.} \noindent \funcdesc{double chkpt\_rd\_etot()} {The total energy, be it HF, CISD, CCSD, or whatever! This is the preferred function to use for geometry optimization via energies, printing energies in analysis, etc., since this value is valid whatever the calculation type.} {takes no arguments.} {The total energy.} \begin{center} Functions that return \celem{double*} \end{center} \funcdesc{double *chkpt\_rd\_evals()\\ double *chkpt\_rd\_alpha\_evals()\\ double *chkpt\_rd\_beta\_evals()} {Reads in the (spin-restricted HF, $\alpha$ UHF, and $\beta$ UHF) eigenvalues: the orbital energies.} {take no arguments.} {an array of \_all\_ of the SCF eigenvalues, ordered by irrep, and by increasing energy within each irrep. (i.e. for STO-3G water, the four $a_1$ eigenvalues all come first, and those four are ordered from lowest energy to highest energy, followed by the single $b_1$ eigenvalue, etc. --- Pitzer ordering)} \\ \noindent \funcdesc{double *chkpt\_rd\_exps()} {Reads in the exponents of the primitive Gaussian functions.} {takes no arguments.} {an array of doubles.} \\ \noindent \funcdesc{double *chkpt\_rd\_zvals()} {Reads in nuclear charges.} {takes no arguments.} {an array natom long of nuclear charges (as doubles).} \begin{center} Functions that return \celem{double**} \end{center} \funcdesc{double **chkpt\_rd\_blk\_scf(int irrep)\\ double **chkpt\_rd\_alpha\_blk\_scf(int irrep)\\ double **chkpt\_rd\_beta\_blk\_scf(int irrep)} {Reads in a symmetry block of the (RHF, $\alpha$ UHF, $\beta$ UHF) eigenvector.} {\celem{int irrep}, designates the desired symmetry block} {a square matrix has \celem{orbspi[irrep]} rows. The eigenvectors are stored with the column index denoting MOs and the row index denoting SOs: this means that \celem{scf\_vector[i][j]} is the contribution of the $i$th SO to the $j$th MO.} \\ \noindent \funcdesc{double **chkpt\_rd\_ccvecs()} {Reads in a matrix rows of which are ALPHA (ccvecs[0]) and BETA (ccvecs[1]) matrices of coupling coefficients for open shells stored in lower triangular form. Coupling coefficients are defined NOT as in C.C.J.Roothaan Rev. Mod. Phys. {\bf 32}, 179 (1960) as it is stated in the manual pages for CSCF, but according to Pitzer (no reference yet) and are **different** from those in Yamaguchi, Osamura, Goddard, and Schaefer's book "Analytic Derivative Methods in Ab Initio Molecular Electronic Structure Theory".\\ The relationship between the Pitzer's and Yamaguchi's conventions is as follows : ALPHA = 1-2*a , BETA = 1+4*b , where a and b are alpha's and beta's for open shells defined on pp. 69-70 of Dr. Yamaguchi's book. } {takes no arguments.} {double **ccvecs, a matrix 2 by \celem{abs(iopen)} rows of which are coupling coefficient matrices for open-shells in packed form. For definition of \celem{iopen} see chkpt\_rd\_iopen().} \\ \noindent \funcdesc{chkpt\_rd\_contr\_full()} {Reads in the normalized contraction coefficients.} {takes no arguments.} {a matrix \celem{MAXANGMOM} (a constant defined in ???) by the total number of primitives \celem{nprim}; each primitive Gaussian contributes to only one shell (and one basis function, of course), so most of these values are zero.} \\ \noindent \funcdesc{double **chkpt\_rd\_geom()} {Reads in the cartesian geometry.} {takes no arguments.} {The cartesian geometry is returned as a matrix of doubles. The row index is the atomic index, and the column is the cartesian direction index (x=0, y=1, z=2). Therefore, \celem{geom[2][0]} would be the x-coordinate of the third atom.} \\ \noindent \funcdesc{chkpt\_rd\_lagr()\\ chkpt\_rd\_alpha\_lagr()\\ chkpt\_rd\_beta\_lagr()} {Reads in an (RHF, $\alpha$ UHF, $\beta$ UHF) Lagrangian matrix in MO basis.} {takes no arguments.} {a matrix \celem{nmo} by \celem{nmo}.} \\ \noindent \funcdesc{double **chkpt\_rd\_scf()\\ double **chkpt\_rd\_alpha\_scf()\\ double **chkpt\_rd\_beta\_scf()} {Reads in the (RHF, $\alpha$ UHF, $\beta$ UHF) eigenvector.} {takes no arguments.} {a square matrix of dimensions \celem{nmo} by \celem{nmo} (see: \celem{chkpt\_rd\_nmo()}). The symmetry blocks of the SCF vector appear on the diagonal of this matrix.} \\ \noindent \funcdesc{chkpt\_rd\_schwartz()} {Reads in the table of maxima of Schwartz integrals (ij|ij) for each shell doublet.} {takes no arguments.} {\celem{NULL} if no table is present in the checkpoint file, a matrix \celem{nshell} by \celem{nshell} otherwise.} \\ \noindent \funcdesc{chkpt\_rd\_usotao\_new()} {Reads in an AO to SO transformation matrix.} {takes no arguments.} {a \celem{nso} by \celem{nao} matrix of doubles.} \\ \noindent \funcdesc{chkpt\_rd\_usotbf()} {Reads in a basis function to SO transformation matrix.} {takes no arguments.} {a \celem{nso} by \celem{nso} matrix of doubles.} \begin{center} Functions that return \celem{struct} \celem{*z\_entry} \end{center} {The z-matrix is read from the checkpoint file as an array of \celem{z\_entry} structs which are declared in \file{chkpt.h}. This structure contains the reference atom, an optimization flag, the coordinate value, and any label used for each internal coordinate. When not applicable (such as the first few lines of a z-matrix) \celem{atom} variables are given values of -1, \celem{opt} variables are given values of -1, \celem{val} variables are given values of -999.9, and \celem{label} strings are left empty.} \\ \noindent \funcdesc{chkpt\_rd\_zmat()} {Reads in the z-matrix} {takes no arguments.} {\celem{struct} \celem{*z\_entry} natom long.} ������������������������������������������������������������������������������������psi3/doc/progman/debugging.tex����������������������������������������������������������������������0000644�0001015�0000765�00000005161�07724471660�015106� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % PSI Debugging Section % % TDC, 8 February, 1996 % Revised by TDC December 2002. % Debugging \PSIthree\ code using an interactive debugger, such as \file{gdb} or \file{dbx} can be difficult at times because of the complicated organization of this large program package. This section discusses some strategies and technical details of using such debuggers with the \PSIthree\ code. \subsection{Code Re-compilation} Any section of \PSIthree\ code that needs to be debugged must first be re-compiled with the ``-g'' flag turned on. This flag is set in the \file{MakeVars} file in the directory above each module or library's source code directory. For example, to turn on debugging in the \PSIcscf\ program, one would first clean the existing object code out of the \file{\$prefix/src/bin/cscf} directory using \file{make clean}. Then edit \file{\$prefix/src/bin/MakeVars}, one directory above the \PSIcscf\ source code: set \file{CDBG = -g} and, optionally \file{COPT = } to turn off optimization flags. (For modules using C++, the analogous variables are \file{CXXDBG} and \file{CXXOPT}. Then re-compile the module. If debugging information is needed for a library routine as well, then follow this same procedure for the library in question. Technically, only the routines of interest need to be re-compiled, though it is frequently more convenient to simply re-compile the entire library or module. \subsection{Multiple Source Code Directories} The most difficult problem of debugging \PSIthree\ code is that object code and source code generally reside in separate directories to allow storage of objects for several achitectures simultaneously. In addition, library codes are kept separate from binary (module) codes. If the code is compliled with \file{gcc/g++}, then this separation of source and object code is of no consequence because the compiler builds the full path to the source file directly into the object code. However, for non-\file{gcc} compilations, one must know how to tell the debugger where to find the sources. Most interactive debuggers allow the programmer to specify multiple source code search directories using simple command-line options. For example, if one were debugging the \PSIcscf\ program and needed access to the \library{libciomr.a} library source code in addition to that of \PSIcscf, one could use \file{gdb}'s ``dir'' command to search several source code directories: \begin{verbatim} dir \$PSI/src/lib/libciomr \end{verbatim} Additionally, such commands can be placed in the user's \file{\$HOME/.gdbinit} file. In \file{dbx}, the ``use'' command specifies multiple source directories. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/documentation.tex������������������������������������������������������������������0000644�0001015�0000765�00000004366�10605250542�016014� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Documentation is often the only link between code's author and code's users. The usefulness of the code will depend heavily on the quality of its documentation. One great failing of most of the PSI code is that it contains little to no documentation. We strongly advocate documentation of at least the first two types: \begin{enumerate} \item A short description of the code's function and keywords {\em must} be written for each new module and library added to the \PSIthree\ package. \begin{itemize} \item Direct inclusion in the \PSIthree\ manuals --- binaries (modules) should be included in the user's manual and libraries in the programmer's manual. \item A UNIX \file{man} page --- These provide ``quick-and-dirty'' access to the program options even when logged in remotely via a terminal window. A \file{man} page should be added for each \PSIthree\ module, and doing so is not difficult when working off another \PSIthree\ \file{man} page as a template. To access the \PSIthree\ \file{man} pages, you will need to add the \file{man} directory to your {\tt MANPATH}. For example, if you run csh or tcsh, and assuming \PSIthree\ has been installed in \file{/usr/local/psi3-bin}, the following can be added to your \file{.cshrc} or \file{.tcshrc} file: \begin{verbatim} setenv MANPATH /usr/local/psi3-bin/doc/man:/usr/share/man \end{verbatim} The usual man path should be added after the \PSIthree\ part and will be different for different systems. Different directories are separated by colons. \item It is also helpful, particularly for complex programs or libraries, to have even more extensive documentation. Certain parts of \PSIthree\ have been documented in more detail via HTML documents (e.g., {\tt cints}, {\tt libdpd}, and {\tt libpsio}). These documents are stored in the associated source code directories and installed in the installation directory under {\tt doc/html}. \end{itemize} \item Second, as mentioned before, the source code should be directly documented by comment lines in the code. We use a special formatting for in-code documentation, which is described in detail in section \ref{code-commenting}. \end{enumerate} Note also that full documentation should also include citations to any relevant publications upon which the code may be based. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/files.tex��������������������������������������������������������������������������0000644�0001015�0000765�00000027551�07724471660�014264� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % Psi Programmer's Manual % % files in psi % % Brian Kellogg, 02/02/96 (groundhog day!) Psi uses several text files to store certain types of information. Storing information in text files makes it much easier for users to inspect and manipulate that information, provided that the user understands the format of that file. In the following file format descriptions, I will use the notation ${ x_i, y_i,}$ and ${z_i}$ to denote the x, y and z coordinates of nucleus i, respectively, ${\eta_{ i}}$ will denote the ${i^{\rm th}}$ internal coordinate, and E will denote the sum of the electronic energy and nuclear repulsion energy. \begin{verbatim} geom.dat \end{verbatim} A vectorized format which is appropriate for the routines in libipv1 or iomr is employed in \geomdat\ Generally, the first line of \geomdat\ is \begin{verbatim} %% \end{verbatim} Though this does not affect the parsing routines in libipv1, or any of the common programs which read \geomdat\ (i.e. \module{rgeom} or \module{ugeom}), some \PSItwo\ modules (\module{bmat}, etc.) expected this line and would muddle up \geomdat\ if it is not present. \geomdat\ will frequently have several entries, with the topmost being the most recent addition by bmat. format: {\em n} = number of atoms. \begin{eqnarray} \begin{array}{lcccr} {\tt geometry = (}\\ {\tt (} &x_1 \hspace{0.8in} &y_1 \hspace{0.8in} &z_1 \hspace{0.8in} &{\tt )} \\ {\tt (} &x_2 \hspace{0.8in} &y_2 \hspace{0.8in} &z_2 \hspace{0.8in} &{\tt )} \\ &\vdots\hspace{0.8in}&\vdots\hspace{0.8in}&\vdots\hspace{0.8in}&\\ {\tt (} &x_n \hspace{0.8in} &y_n \hspace{0.8in} &z_n \hspace{0.8in} &{\tt )} \\ \ \ {\tt )} \end{array} \end{eqnarray} Other geometries of the same format may follow. \begin{verbatim} fconst.dat \end{verbatim} This file contains the force constant matrix produced by \module{optking} or \module{intder95}. Because the force constant matrix is symmetric, only the lower diagonal is stored here. The force constant matrix may be represented in either cartesian or internal coordinates, depending upon what flags were used when \module{intder95} was run to produce \fconstdat . \module{optking} is the program which uses \file{fconst.dat} most frequently, and it assumes that the force constant matrix will be in terms of the internal coordinates as defined in \inputdat\ or \intcodat. For this reason, it is best to have \module{intder95} produce a \fconstdat\ in internal coordinates. The order of internal coordinates is determined by the order set up in \inputdat\ or \intcodat . The totally symmetric coordinates always come first, followed by all asymmetric coordinates. In the following format, ${f_{\eta_i}}$ is the force constant for internal coordinate ${\eta_i}$ and ${f_{\eta_i,\eta_j}}$ is the force constant for the mixed displacement of internal coordinates i and j. format: {n = total number of internal coordinates in \intcodat\ or \inputdat . \begin{eqnarray} \begin{array}{lllll} f_{\eta_1} \\ f_{\eta_2,\eta_1} & f_{\eta_2} \\ f_{\eta_3,\eta_1} & f_{\eta_3,\eta_2} & f_{\eta_3} \\ \vdots & \vdots & \vdots \\ f_{\eta_{n},{\eta}_1} & f_{\eta_{n},\eta_2} & f_{\eta_{n},\eta_3} & \cdots & f_{\eta_{n}} \\ \end{array} \end{eqnarray} If the force constant matrix is stored in cartesian coordinates, however, the format, using a similar notation, with {\em n} now equal to the total number of atoms, is as follows: \begin{eqnarray} \begin{array}{llllll} f_{x_1} \\ f_{y_1,x_1} & f_{y_1} \\ f_{z_1,x_1} & f_{z_1,y_1} &f_{z_1} \\ f_{x_2,x_1} & f_{x_2,y_1} & f_{x_2,z_1} &f_{x_2} \\ \vdots & \vdots & \vdots & \vdots \\ f_{z_n,x_1} & f_{z_n,y_1} & f_{z_n,z_1} & f_{z_n,x_2} & \cdots & f_{z_n} \\ \end{array} \end{eqnarray} \begin{verbatim} file11.dat \end{verbatim} The number of atoms ({\em n}), total energy as predicted by the final wavefunction, cartesian geometry, cartesian gradients, atomic charges ({\em Z$_i$}) and a label are all contained in \FILE{11}. The exact nature of the label depends upon the type of wavefunction for which the gradient was calculated. The first part of the label is determined by the label keyword in input.dat. If an SCF gradient is run, then the calculation type ({\em calctype}), and derivative type ({\em dertype}) will also appear. If a correlated gradient has been run, {\em calctype} [CI, CCSD, or CCSD(T)] and derivative type (FIRST) appear. \FILE{11} will frequently have several entries, with the last entry being the latest addition by \module{cints --deriv1}. format: \begin{eqnarray} \begin{array}{l} label\hspace{0.5in} calctype \hspace{0.5in} dertype \hspace{0.7in} \\ n \hspace{0.5in} E \\ \begin{array}{cccc} \hspace{0.3in}Z_1 \hspace{0.3in}& \hspace{0.4in}x_1\hspace{0.4in} & \hspace{0.4in} y_1 \hspace{0.4in} & \hspace{0.4in} z_1 \hspace{0.4in} \\ Z_2 & x_2 & y_2 & z_2 \\ \vdots & \vdots & \vdots & \vdots \\ Z_n & x_n & y_n & z_n \\ \vspace{0.02in} & \frac{\delta E}{\delta x_1} & \frac{\delta E}{\delta y_1} & \frac{\delta E}{\delta z_1} \\ & \frac{\delta E}{\delta x_2} & \frac{\delta E}{\delta y_2} & \frac{\delta E}{\delta z_2} \\ & \vdots & \vdots & \vdots \\ & \frac{\delta E}{\delta x_n} & \frac{\delta E}{\delta y_n} & \frac{\delta E}{\delta z_n} \\ \end{array} \end{array} \end{eqnarray} \begin{verbatim} file12.dat \end{verbatim} Internal coordinate values and gradients, the number of atoms ({\em n}), and the total energy ({\em E}) may be found in \FILE{12}. \FILE{12} is produced by \module{intder95}, which can convert cartesian gradients into internal gradients. Generally, \FILE{12} will have several entries, with each entry corresponding to an entry in the \FILE{11} of interest. format: \begin{equation} \begin{array}{l} n\hspace{1.5in} E \\ \begin{array}{cc} \vspace{0.02in} \hspace{0.5in} \eta_1 \hspace{0.5in} & \hspace{1.2in} \frac{\delta E}{\delta \eta_1} \hspace{1.2in}\\ \hspace{0.5in} \eta_2 \hspace{0.5in} & \hspace{1.2in} \frac{\delta E}{\delta \eta_2} \hspace{1.2in} \\ \vdots & \vdots \\ \hspace{0.5in} \eta_n \hspace{0.5in} & \hspace{1.2in} \frac{\delta E}{\delta \eta_n} \hspace{1.2in}\\ \end{array} \end{array} \end{equation} \begin{verbatim} file12a.dat \end{verbatim} In order to calculate second derivatives from gradients taken at geometries finitely displaced from a particular geometry, \module{intdif} requires a \FILE{12a}. This file contains essentially the same information as \FILE{12}, but each entry also has information concerning which internal coordinate ({\em numintco}) was displaced in the gradient calculation and by how much ({\em disp}) it was displaced. format: \begin{equation} \begin{array}{l} numintco\hspace{0.5in}disp\hspace{1.5in}E \\ \begin{array}{cc} \vspace{0.02in} \hspace{0.5in} \eta_1 \hspace{0.5in} & \hspace{0.8in} \frac{\delta E}{\delta \eta_1} \hspace{0.8in}\\ \hspace{0.5in} \eta_2 \hspace{0.5in} & \hspace{0.8in} \frac{\delta E}{\delta \eta_2} \hspace{0.8in} \\ \vdots & \vdots \\ \hspace{0.5in} \eta_n \hspace{0.5in} & \hspace{0.8in} \frac{\delta E}{\delta \eta_n} \hspace{0.8in}\\ \end{array} \end{array} \end{equation} \begin{verbatim} file15.dat \end{verbatim} The cartesian Hessian matrix is found in \FILE{15}. The first line of this file gives the number of atoms ({\em n}) and, in case you are curious, six times the number of atoms ({\em sixtimesn}). format: \begin{equation} \begin{array}{l} n\hspace{0.4in}sixtimesn \\ \begin{array}{ccc} \vspace{0.02in} \hspace{0.3in}\frac{\delta^2 E}{\delta^2 x_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_1\delta y_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_1\delta z_1} \hspace{0.3in}\\ \hspace{0.3in}\frac{\delta^2 E}{\delta x_1\delta x_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_1\delta y_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_1\delta z_2} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \vspace{0.02in} \hspace{0.3in}\frac{\delta^2 E}{\delta z_1\delta x_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta z_1\delta y_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta z_1\delta z_n} \hspace{0.3in}\\ \hspace{0.3in}\frac{\delta^2 E}{\delta x_2\delta x_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_2\delta y_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta x_2\delta z_1} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \hspace{0.3in}\frac{\delta^2 E}{\delta z_n\delta x_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta z_n\delta y_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta^2 z_n} \hspace{0.3in}\\ \end{array} \end{array} \end{equation} \begin{verbatim} file16.dat \end{verbatim} The second derivatives of the total energy with respect to the internal coordinates are found in \FILE{16}. As in \FILE{15}, the number of atoms ({\em n}) and six times that number ({\em sixtimesn}) are given. format: \begin{equation} \begin{array}{l} n\hspace{0.4in}sixtimesn \\ \begin{array}{ccc} \vspace{0.02in} \hspace{0.3in}\frac{\delta^2 E}{\delta^2 \eta_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_1\delta \eta_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_1\delta \eta_3} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_1\delta \eta_{n-2}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_1\delta \eta_{n-1}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_1\delta \eta_n} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \vspace{0.02in} \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_n\delta \eta_{n-2}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta \eta_n\delta \eta_{n-1}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta^2 E}{\delta^2 \eta_n} \hspace{0.3in}\\ \end{array} \end{array} \end{equation} \begin{verbatim} file17.dat \end{verbatim} First derivatives of the cartesian dipole moments (${\mu_x,\mu_y,\mu_z}$) with respect to the cartesian nuclear coordinates may be found in \FILE{17}. The first line and subsequent format are similar to that of \FILE{15}. format: \begin{equation} \begin{array}{l} n\hspace{0.4in}threetimesn \\ \begin{array}{ccc} \vspace{0.02in} \hspace{0.3in}\frac{\delta \mu_x}{\delta x_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta y_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta z_1} \hspace{0.3in}\\ \hspace{0.3in}\frac{\delta \mu_x}{\delta x_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta y_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta z_2} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \vspace{0.02in} \hspace{0.3in}\frac{\delta \mu_x}{\delta x_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta y_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta z_n} \hspace{0.3in}\\ \hspace{0.3in}\frac{\delta \mu_y}{\delta x_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_y}{\delta y_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_y}{\delta z_1} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \hspace{0.3in}\frac{\delta \mu_z}{\delta x_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_z}{\delta y_n} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_z}{\delta z_n} \hspace{0.3in}\\ \end{array} \end{array} \end{equation} \begin{verbatim} file18.dat \end{verbatim} First derivatives of the cartesian dipole moments (${\mu_x,\mu_y,\mu_z}$) with respect to the internal nuclear coordinates may be found in \FILE{18}. format: \begin{equation} \begin{array}{l} n\hspace{0.4in}threetimesn \\ \begin{array}{ccc} \vspace{0.02in} \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_1} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_2} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_3} \hspace{0.3in}\\ \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_4} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_5} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_x}{\delta \eta_6} \hspace{0.3in}\\ \vdots & \vdots & \vdots \\ \hspace{0.3in}\frac{\delta \mu_z}{\delta \eta_{n-2}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_z}{\delta \eta_{n-1}} \hspace{0.3in}& \hspace{0.3in}\frac{\delta \mu_z}{\delta \eta_{n}} \hspace{0.3in}\\ \end{array} \end{array} \end{equation} �������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/fortran.tex������������������������������������������������������������������������0000644�0001015�0000765�00000012416�07724471660�014627� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % PSI Fortran Code Section % % Daniel Crawford, 31 January, 1996 % Most of the code in \PSItwo\ was in the Fortran 77 programming language. Essentially all of the new development in \PSIthree\ has been in C or C++. Since a small amount of Fortran code remains, in this section we discuss the structure of PSI Fortran modules. All Fortran 77 programs use static allocation for memory management. This means that the memory requirements of the program must be established when the program is compiled. While this allows Fortran programs to avoid complicated and time-consuming memory manipulation calls, it also may significantly reduce the applicability of the program to computations of widely varying size. That is, if a calculation requires a large amount of memory, the program may have to be re-compiled before the calculation can be run; or, if only a small amount of memory if required, but the program has been compiled to allocate huge amounts of static memory, most of the memory will be wasted. PSI avoids this problem to a certain extent by first allocating the memory using C function calls, and then passing a pointer to this memory to the Fortran program. This means that the routine called ``\celem{main}'' (which must exist in every program, regardless of programming language) is provided by a C program, and that the Fortran code is treadted as a subroutine called immediately after the C routine has finished the memory allocation. The Fortran subroutine is always called \felem{fentry()}, and it requires a pointer to the beginning of the available memory and the size of the memory in double precision floating point words as arguments. This procedure also allows the user to specify the amount of available memory in input. The \library{alloc.a} library provides the code necessary for this technique. The Fortran modules also require an input parsing library separate from that of the C modules, since the C/Fortran interface is not standardized. This library, \library{libparse.a}, has numerous similarities with its C counterpart, \library{libipv1.a} (see section \ref{C_IP}), and its syntax is relatively intuitive. Finally, I/O in the Fortran modules is handled very similarly to the old-style I/O in the C modules. In fact, only the most high-level calls, such as \felem{wreadw()} and \felem{rfile()} are actually written in Fortran. The low-level routines are C functions which are constructed very similarly to those in \library{libciomr.a}. All of the I/O routines required by the Fortran modules may be found in \library{ io.a}.\footnote{The I/O routines to be found \library{iomr.a} are obsolete and should never be used. I (TDC) look forward to the day when this library is removed.} \subsection{The Psi Preprocessor}\label{psipp} Many of the existing Fortran codes in the \PSIthree\ package make calls to the Fortran input parsing routines in \library{libparse.a}. These routines return to the caller special error codes which tell the program what problems (if any) were encountered in searching the input for a special keyword or piece of data. Therefore, all the Fortran codes need to know how to interpret these codes. In C, one would normally simply \celem{\#include} a header file containing the code definitions. However, the \felem{include} statement is not part of the Fortran 77 standard. So, to get around this, and still maintain portable code, the PSI preprocessor, \module{psipp} exists. All Fortran codes in \PSIthree\ are stored in \file{.F} files, rather than the usual \file{.f}. Each \file{.F} file is examined by \module{psipp} for lines such as \begin{verbatim} #include <error.h> \end{verbatim} Such lines are interpreted by the preprocessor, and the correct header file (in this case, \file{error.h}) is included (literally inserted) into the new file, with the \file{.f} suffix. \module{psipp} can understand a number of directives, including \felem{\#if}, \felem{\#ifdef}, \felem{\#elif}, \felem{\#else}, \felem{\#endif}, \felem{\#define}, and \felem{\#undef}. \subsection{Debugging \PSIthree\ Fortran Code} \PSIthree\ Fortran modules can be substantially more difficult than their C counterparts to debug. (See section \ref{Debugging} for more information.) This is because the Fortran source code (\file{.F} suffix) must be preprocessed by \module{psipp} before it is passed to the compiler (see section \ref{psipp}). Additionally, the preprocessed files (\file{.f} suffix) are usually automatically deleted when the compilation stops due to the \file{make} program's defaults (all such intermediate files are deleted). So, if the programmer tries to use the unprocessed code with the debugger, line numbers won't match and the debugger's output will be meaningless. To keep the preprocessed source files, \file{make} must be told that they are important; add the following line to the \file{Makefile} in the Fortran module's object code directory: \begin{verbatim} .PRECIOUS: %.f \end{verbatim} This is a GNU \file{make} directive which prevents deletion of all intermediate \file{.f} files when the compilation stops. Then add the current directory to the debugger's source directory search path, and plow ahead. Note, however, that any changes made to \file{.f} files must be duplicated in the corresponding unprocessed source \file{.F} files to be permanent. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/fundamental_psi.tex����������������������������������������������������������������0000644�0001015�0000765�00000002332�10747662666�016330� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Fundamental PSI Functions Intro. % % Daniel Crawford, 26 January, 1996 % Each \PSIthree\ module (e.g. \PSIcscf) must perform two specific tasks, regardless of the individual module's specific purpose(s): (1) obtaining user input options and (2) writing to and reading from binary files (e.g. the checkpoint file). \PSIthree\ programs written in the C programming language make use of two libraries which provide all the tools necessary to carry out these functions: \begin{itemize} \item \library{libipv1.a} --- the input parser \item \library{libpsio.a} --- the I/O interface \end{itemize} In addition, the libraries \library{libciomr.a} and \library{libqt.a} provide important functions for memory allocation, mathematics, and code timing. In the next section, we will discuss the basic components of a \PSIthree\ C-language program, followed by detailed descriptions of the input parsing and I/O libraries. \subsection{The Structure of a \PSIthree\ Module}\label{PSI_Module} \input{psi_module} \subsection{The Input Parser}\label{C_IP} \input{ip} \subsection{The Binary Input/Output System}\label{C_IO_New} \input{io_new} %\subsection{The Old Binary Input and Output System}\label{C_IO} %\input{io} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/history.tex������������������������������������������������������������������������0000644�0001015�0000765�00000005170�10747662666�014663� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % History of Psi % % Daniel Crawford, 24 January, 1996 % The PSI suite of {\em ab initio} quantum chemistry programs is the result of an ongoing attempt by a cadre of graduate students, postdoctoral associates, and professors to produce code that is efficient but also easy to extend to new theoretical methods. Significant effort has been devoted to the development of libraries which are robust and easy to use. Some of the earliest contributions to what is now referred to as ``PSI'' include a direct configuration interaction (CI) program (Robert Lucchese, 1976, now at Texas A\&M), the well-known graphical unitary group CI program (Bernie Brooks, 1977-78, now at N.I.H.), and the original integrals code (Russ Pitzer, 1978, now at Ohio State). From 1978-1987, the package was know as the {\tt BERKELEY} suite, and after the Schaefer group moved to the Center for Computational Quantum Chemistry at the University of Georgia, the package was renamed {\tt PSI}. Thanks primarily to the efforts of Curt Janssen (Sandia Labs, Livermore) and Ed Seidl (LLNL), the package was ported to UNIX systems, and substantially improved with new input formats and a C-based I/O system. Beginning in 1999, an extensive effort was begun to develop \PSIthree\ --- a {\tt PSI} suite with a completely new face. As a result of this effort, all of the legacy Fortran code was removed, and everything was rewritten in C and C++, including new integral/derivative integral, coupled cluster, and CI codes. In addition, new I/O libraries have been added, as well as an improved checkpoint file structure and greater automation of typical tasks such as geometry optimization and frequency analysis. The package has the capability to determine wavefunctions, energies, analytic gradients, and various molecular properties based on a variety of theories, including spin-restricted, spin-unrestricted, and restricted open-shell Hartree-Fock (RHF, UHF, and ROHF); configuration interaction (CI) (including a variety of multireference CI's and full CI); coupled-cluster (CC) including CC with variationaly optimized orbitals; second-order M{\o}ller-Plesset perturbation theory (MPPT) including explicitly correlated second-order M{\o}ller-Plesset energy (MP2-R12); and complete-active-space self-consistent field (CASSCF) theory. By January 2008, all of the C code in \PSIthree\ was converted to C++ to enable a path toward more object-oriented design and a single-excecutable framework that will facilitate code reuse and ease efforts at parallelization. At this same time, all of the legacy I/O routines from {\tt PSI2} were removed, greatly streamlining the \library{libciomr.a} library. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/html.sty���������������������������������������������������������������������������0000644�0001015�0000765�00000121676�11114561241�014127� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % $Id: html.sty,v 1.39 2001/10/01 22:47:06 RRM Exp $ % LaTeX2HTML Version 2K.1 : html.sty % % This file contains definitions of LaTeX commands which are % processed in a special way by the translator. % For example, there are commands for embedding external hypertext links, % for cross-references between documents or for including raw HTML. % This file includes the comments.sty file v2.0 by Victor Eijkhout % In most cases these commands do nothing when processed by LaTeX. % % Place this file in a directory accessible to LaTeX (i.e., somewhere % in the TEXINPUTS path.) % % NOTE: This file works with LaTeX 2.09 or (the newer) LaTeX2e. % If you only have LaTeX 2.09, some complex LaTeX2HTML features % like support for segmented documents are not available. % Changes: % See the change log at end of file. % Exit if the style file is already loaded % (suggested by Lee Shombert <las@potomac.wash.inmet.com> \ifx \htmlstyloaded\relax \endinput\else\let\htmlstyloaded\relax\fi \makeatletter % allow for the hyperref package to be cleanly loaded % either before or after this package, % and ensure it is already loaded, when using pdf-TeX \ifx\undefined\hyperref \ifx\pdfoutput\undefined \let\pdfunknown\relax \let\html@new=\newcommand \else \ifx\pdfoutput\relax \let\pdfunknown\relax \RequirePackage{hyperref}\let\html@new=\renewcommand \else \RequirePackage{hyperref}\let\html@new=\newcommand \fi \fi \else \let\html@new=\renewcommand \fi \providecommand{\latextohtml}{\LaTeX2\texttt{HTML}} %%% LINKS TO EXTERNAL DOCUMENTS % % This can be used to provide links to arbitrary documents. % The first argumment should be the text that is going to be % highlighted and the second argument a URL. % The hyperlink will appear as a hyperlink in the HTML % document and as a footnote in the dvi or ps files. % \ifx\pdfunknown\relax \html@new{\htmladdnormallinkfoot}[2]{#1\footnote{#2}} \else \def\htmladdnormallinkfoot#1#2{\footnote{\href{#2}{#1}}} \fi % This is an alternative definition of the command above which % will ignore the URL in the dvi or ps files. \ifx\pdfunknown\relax \html@new{\htmladdnormallink}[2]{#1} \else \def\htmladdnormallink#1#2{\href{#2}{#1}} \fi % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. % \ifx\pdfunknown\relax \html@new{\htmladdimg}[1]{} \else \def\htmladdimg#1{\hyperimage{#1}} \fi %%% CROSS-REFERENCES BETWEEN (LOCAL OR REMOTE) DOCUMENTS % % This can be used to refer to symbolic labels in other Latex % documents that have already been processed by the translator. % The arguments should be: % #1 : the URL to the directory containing the external document % #2 : the path to the labels.pl file of the external document. % If the external document lives on a remote machine then labels.pl % must be copied on the local machine. % %e.g. \externallabels{http://cbl.leeds.ac.uk/nikos/WWW/doc/tex2html/latex2html} % {/usr/cblelca/nikos/tmp/labels.pl} % The arguments are ignored in the dvi and ps files. % \newcommand{\externallabels}[2]{} % This complements the \externallabels command above. The argument % should be a label defined in another latex document and will be % ignored in the dvi and ps files. % \newcommand{\externalref}[1]{} % Suggested by Uffe Engberg (http://www.brics.dk/~engberg/) % This allows the same effect for citations in external bibliographies. % An \externallabels command must be given, locating a labels.pl file % which defines the location and keys used in the external .html file. % \newcommand{\externalcite}{\nocite} % This allows a section-heading in the TOC or mini-TOC to be just % a hyperlink to an external document. % % \htmladdTOClink[<path_to_labels>]{<section-level>}{<title>}{<URL>} % where <section-level> is 'chapter' , 'section' , 'subsection' etc. % and <path_to_labels> is the path to find a labels.pl file, % so that external cross-referencing may work, as with \externallabels % %\ifx\pdfunknown\relax \newcommand{\htmladdTOClink}[4][]{} % % can do something here, using the \pdfoutline primitive %\else % \def\htmladdTOClink#1#2#3#4{\pdfoutline user {/S /URI /URI #4} % name{#2} count{#1}{#3}} %\fi %%% HTMLRULE % This command adds a horizontal rule and is valid even within % a figure caption. % Here we introduce a stub for compatibility. \newcommand{\htmlrule}{\protect\HTMLrule} \newcommand{\HTMLrule}{\@ifstar\htmlrulestar\htmlrulestar} \newcommand{\htmlrulestar}[1]{} %%% HTMLCLEAR % This command puts in a <BR> tag, with CLEAR="ALL" \newcommand{\htmlclear}{} % This command adds information within the <BODY> ... </BODY> tag % \newcommand{\bodytext}[1]{} \newcommand{\htmlbody}{} %%% HYPERREF % Suggested by Eric M. Carol <eric@ca.utoronto.utcc.enfm> % Similar to \ref but accepts conditional text. % The first argument is HTML text which will become ``hyperized'' % (underlined). % The second and third arguments are text which will appear only in the paper % version (DVI file), enclosing the fourth argument which is a reference to a label. % %e.g. \hyperref{using the tracer}{using the tracer (see Section}{)}{trace} % where there is a corresponding \label{trace} % % avoid possible confict with hyperref package \ifx\undefined\hyperref \newcommand{\hyperrefhyper}[4]{#4}% \def\next{\newcommand}% \else \let\hyperrefhyper\hyperref \def\next{\renewcommand}% \fi \next{\hyperref}{\hyperrefi[]}\let\next=\relax \def\hyperrefi[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hyperrefdef \else\def\tmp{ref}\ifx\next\tmp\aftergroup\hyperrefref \else\def\tmp{pageref}\ifx\next\tmp\aftergroup\hyperrefpageref \else\def\tmp{page}\ifx\next\tmp\aftergroup\hyperrefpage \else\def\tmp{noref}\ifx\next\tmp\aftergroup\hyperrefnoref \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperrefno \else\def\tmp{hyper}\ifx\next\tmp\aftergroup\hyperrefhyper \else\def\tmp{html}\ifx\next\tmp\aftergroup\hyperrefhtml \else\typeout{*** unknown option \next\space to hyperref ***}% \fi\fi\fi\fi\fi\fi\fi\fi}} \newcommand{\hyperrefdef}[4]{#2\ref{#4}#3} \newcommand{\hyperrefpageref}[4]{#2\pageref{#4}#3} \newcommand{\hyperrefnoref}[3]{#2} \let\hyperrefref=\hyperrefdef \let\hyperrefpage=\hyperrefpageref \let\hyperrefno=\hyperrefnoref \ifx\undefined\hyperrefhyper\newcommand{\hyperrefhyper}[4]{#4}\fi \let\hyperrefhtml=\hyperrefdef %%% HYPERCITE --- added by RRM % Suggested by Stephen Simpson <simpson@math.psu.edu> % effects the same ideas as in \hyperref, but for citations. % It does not allow an optional argument to the \cite, in LaTeX. % % \hypercite{<html-text>}{<LaTeX-text>}{<opt-text>}{<key>} % % uses the pre/post-texts in LaTeX, with a \cite{<key>} % % \hypercite[ext]{<html-text>}{<LaTeX-text>}{<key>} % \hypercite[ext]{<html-text>}{<LaTeX-text>}[<prefix>]{<key>} % % uses the pre/post-texts in LaTeX, with a \nocite{<key>} % the actual reference comes from an \externallabels file. % \newcommand{\hypercite}{\hypercitei[]} \def\hypercitei[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hypercitedef \else\def\tmp{int}\ifx\next\tmp\aftergroup\hyperciteint \else\def\tmp{cite}\ifx\next\tmp\aftergroup\hypercitecite \else\def\tmp{ext}\ifx\next\tmp\aftergroup\hyperciteext \else\def\tmp{nocite}\ifx\next\tmp\aftergroup\hypercitenocite \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperciteno \else\typeout{*** unknown option \next\space to hypercite ***}% \fi\fi\fi\fi\fi\fi}} \newcommand{\hypercitedef}[4]{#2{\def\tmp{#3}\def\emptyopt{}% \ifx\tmp\emptyopt\cite{#4}\else\cite[#3]{#4}\fi}} \newcommand{\hypercitenocite}[2]{#2\hypercitenocitex[]} \def\hypercitenocitex[#1]#2{\nocite{#2}} \let\hypercitecite=\hypercitedef \let\hyperciteint=\hypercitedef \let\hyperciteext=\hypercitenocite \let\hyperciteno=\hypercitenocite %%% HTMLREF % Reference in HTML version only. % Mix between \htmladdnormallink and \hyperref. % First arg is text for in both versions, second is label for use in HTML % version. \ifx\pdfunknown\relax \html@new{\htmlref}[2]{#1} \else \def\htmlref#1#2{\hyperefhyper[#2]{#1}} \fi %%% HTMLCITE % Reference in HTML version only. % Mix between \htmladdnormallink and \hypercite. % First arg is text for both versions, second is citation for use in HTML % version. \newcommand{\htmlcite}[2]{#1} %%% HTMLIMAGE % This command can be used inside any environment that is converted % into an inlined image (eg a "figure" environment) in order to change % the way the image will be translated. The argument of \htmlimage % is really a string of options separated by commas ie % [scale=<scale factor>],[external],[thumbnail=<reduction factor> % The scale option allows control over the size of the final image. % The ``external'' option will cause the image not to be inlined % (images are inlined by default). External images will be accessible % via a hypertext link. % The ``thumbnail'' option will cause a small inlined image to be % placed in the caption. The size of the thumbnail depends on the % reduction factor. The use of the ``thumbnail'' option implies % the ``external'' option. % % Example: % \htmlimage{scale=1.5,external,thumbnail=0.2} % will cause a small thumbnail image 1/5th of the original size to be % placed in the final document, pointing to an external image 1.5 % times bigger than the original. % \newcommand{\htmlimage}[1]{} % \htmlborder causes a border to be placed around an image or table % when the image is placed within a <TABLE> cell. \newcommand{\htmlborder}[1]{} % Put \begin{makeimage}, \end{makeimage} around LaTeX to ensure its % translation into an image. % This shields sensitive text from being translated. \newenvironment{makeimage}{}{} % A dummy environment that can be useful to alter the order % in which commands are processed, in LaTeX2HTML \newenvironment{tex2html_deferred}{}{} %%% HTMLADDTONAVIGATION % This command appends its argument to the buttons in the navigation % panel. It is ignored by LaTeX. % % Example: % \htmladdtonavigation{\htmladdnormallink % {\htmladdimg{http://server/path/to/gif}} % {http://server/path}} \newcommand{\htmladdtonavigation}[1]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % based upon Eijkhout's comment.sty v2.0 % with modifications to avoid conflicts with later versions % of this package, should a user be requiring it. % Ross Moore, 10 March 1999 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Comment.sty version 2.0, 19 June 1992 % selectively in/exclude pieces of text: the user can define new % comment versions, and each is controlled separately. % This style can be used with plain TeX or LaTeX, and probably % most other packages too. % % Examples of use in LaTeX and TeX follow \endinput % % Author % Victor Eijkhout % Department of Computer Science % University Tennessee at Knoxville % 104 Ayres Hall % Knoxville, TN 37996 % USA % % eijkhout@cs.utk.edu % % Usage: all text included in between % \comment ... \endcomment % or \begin{comment} ... \end{comment} % is discarded. The closing command should appear on a line % of its own. No starting spaces, nothing after it. % This environment should work with arbitrary amounts % of comment. % % Other 'comment' environments are defined by % and are selected/deselected with % \includecomment{versiona} % \excludecoment{versionb} % % These environments are used as % \versiona ... \endversiona % or \begin{versiona} ... \end{versiona} % with the closing command again on a line of its own. % % Basic approach: % to comment something out, scoop up every line in verbatim mode % as macro argument, then throw it away. % For inclusions, both the opening and closing comands % are defined as noop % % Changed \next to \html@next to prevent clashes with other sty files % (mike@emn.fr) % Changed \html@next to \htmlnext so the \makeatletter and % \makeatother commands could be removed (they were causing other % style files - changebar.sty - to crash) (nikos@cbl.leeds.ac.uk) % Changed \htmlnext back to \html@next... \def\makeinnocent#1{\catcode`#1=12 } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} \def\ThrowAwayComment#1{\begingroup \def\CurrentComment{#1}% \let\do\makeinnocent \dospecials \makeinnocent\^^L% and whatever other special cases %%RRM %% use \xhtmlComment for \xComment %% use \html@next for \next \endlinechar`\^^M \catcode`\^^M=12 \xhtmlComment} {\catcode`\^^M=12 \endlinechar=-1 % \gdef\xhtmlComment#1^^M{\def\test{#1}\edef\test{\meaning\test} \csarg\ifx{PlainEnd\CurrentComment Test}\test \let\html@next\endgroup \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \csarg\ifx{LaInnEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \let\html@next\xhtmlComment \fi \fi \fi \html@next} } %%\def\includecomment %%RRM \def\htmlincludecomment #1{\expandafter\def\csname#1\endcsname{}% \expandafter\def\csname end#1\endcsname{}} %%\def\excludecomment %%RRM \def\htmlexcludecomment #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}% {\escapechar=-1\relax \edef\tmp{\string\\end#1}% \csarg\xdef{PlainEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end\string\{#1\string\}}% \csarg\xdef{LaLaEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end \string\{#1\string\}}% \csarg\xdef{LaInnEnd#1Test}{\meaning\tmp}% }} %%\excludecomment{comment} %%RRM \htmlexcludecomment{comment} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end Comment.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment % % Alternative code by Robin Fairbairns, 22 September 1997 % revised to cope with % and unnested { }, by Ross Moore, 4 July 1998 % further revised to cope with & and # in tables, 10 March 1999 % \def\raw@catcodes{\catcode`\%=12 \catcode`\{=12 \catcode`\}=12 \catcode`\&=12 \catcode`\#=12 } \newcommand\@gobbleenv{\bgroup\raw@catcodes \let\reserved@a\@currenvir\@gobble@nv} \bgroup \def\expansionhead{\gdef\@gobble@nv@i##1} \def\expansiontail{{\def\reserved@b{##1}\@gobble@nv@ii}} \def\expansionheadii{\long\gdef\@gobble@nv##1\end} \def\expansiontailii{{\@gobble@nv@i}} \def\expansionmidii{##2} \raw@catcodes\relax \expandafter\expansionhead\expandafter}\expansiontail \egroup \long\gdef\@gobble@nv#1\end#2{\@gobble@nv@i} %\long\def\@gobble@nv#1\end#2{\def\reserved@b{#2}% \def\@gobble@nv@ii{% \ifx\reserved@a\reserved@b \edef\reserved@a{\egroup\noexpand\end{\reserved@a}}% \expandafter\reserved@a \else \expandafter\@gobble@nv \fi} \renewcommand{\htmlexcludecomment}[1]{% \csname newenvironment\endcsname{#1}{\@gobbleenv}{}} \newcommand{\htmlreexcludecomment}[1]{% \csname renewenvironment\endcsname{#1}{\@gobbleenv}{}} %%% RAW HTML % % Enclose raw HTML between a \begin{rawhtml} and \end{rawhtml}. % The html environment ignores its body % \htmlexcludecomment{rawhtml} %%% HTML ONLY % % Enclose LaTeX constructs which will only appear in the % HTML output and will be ignored by LaTeX with % \begin{htmlonly} and \end{htmlonly} % \htmlexcludecomment{htmlonly} % Shorter version \newcommand{\html}[1]{} % for images.tex only \htmlexcludecomment{imagesonly} %%% LaTeX ONLY % Enclose LaTeX constructs which will only appear in the % DVI output and will be ignored by latex2html with %\begin{latexonly} and \end{latexonly} % \newenvironment{latexonly}{}{} % Shorter version \newcommand{\latex}[1]{#1} %%% LaTeX or HTML % Combination of \latex and \html. % Say \latexhtml{this should be latex text}{this html text} % %\newcommand{\latexhtml}[2]{#1} \long\def\latexhtml#1#2{#1} %%% tracing the HTML conversions % This alters the tracing-level within the processing % performed by latex2html by adjusting $VERBOSITY % (see latex2html.config for the appropriate values) % \newcommand{\htmltracing}[1]{} \newcommand{\htmltracenv}[1]{} %%% \strikeout for HTML only % uses <STRIKE>...</STRIKE> tags on the argument % LaTeX just gobbles it up. \newcommand{\strikeout}[1]{} %%% \htmlurl and \url % implement \url as the simplest thing, if not already defined % let \htmlurl#1 be equivalent to it % \def\htmlurlx#1{\begin{small}\texttt{#1}\end{small}}% \expandafter\ifx\csname url\endcsname\relax \let\htmlurl=\htmlurlx \else \let\htmlurl=\url \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% JCL - stop input here if LaTeX2e is not present %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx\if@compatibility\undefined %LaTeX209 \makeatother\relax\expandafter\endinput \fi \if@compatibility %LaTeX2e in LaTeX209 compatibility mode \makeatother\relax\expandafter\endinput \fi %\let\real@TeXlogo = \TeX %\DeclareRobustCommand{\TeX}{\relax\real@TeXlogo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start providing LaTeX2e extension: % This is currently: % - additional optional argument for \htmladdimg % - support for segmented documents % \ProvidesPackage{html} [1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm)] % % Ensure that \includecomment and \excludecomment are bound % to the version defined here. % \AtBeginDocument{% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment \htmlreexcludecomment{comment}} %%% bind \htmlurl to \url if that is later loaded % \expandafter\ifx\csname url\endcsname\relax \AtBeginDocument{\@ifundefined{url}{}{\let\htmlurl=\url}}\fi %%%%MG % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. The optional argument % denotes additional HTML tags. % % Example: \htmladdimg[ALT="portrait" ALIGN=CENTER]{portrait.gif} % \ifx\pdfunknown\relax \renewcommand{\htmladdimg}[2][]{} \else \renewcommand{\htmladdimg}[2][]{\hyperimage{#2}} \fi %%% HTMLRULE for LaTeX2e % This command adds a horizontal rule and is valid even within % a figure caption. % % This command is best used with LaTeX2e and HTML 3.2 support. % It is like \hrule, but allows for options via key--value pairs % as follows: \htmlrule[key1=value1, key2=value2, ...] . % Use \htmlrule* to suppress the <BR> tag. % Eg. \htmlrule[left, 15, 5pt, "none", NOSHADE] produces % <BR CLEAR="left"><HR NOSHADE SIZE="15">. % Renew the necessary part. \renewcommand{\htmlrulestar}[1][all]{} %%% HTMLCLEAR for LaTeX2e % This command puts in a <BR> tag, with optional CLEAR="<attrib>" % \renewcommand{\htmlclear}[1][all]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % renew some definitions to allow optional arguments % % The description of the options is missing, as yet. % \renewcommand{\latextohtml}{\textup{\LaTeX2\texttt{HTML}}} \ifx\pdfunknown\relax \renewcommand{\htmladdnormallinkfoot}[3][]{#2\footnote{#3}} \renewcommand{\htmladdnormallink}[3][]{#2} \else \renewcommand{\htmladdnormallinkfoot}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlinkfoot}% \else\def\next{\htmladdnamedlinkfoot{#1}}\fi \next} \newcommand{\htmladdnonamedlinkfoot}[2]{% #1\footnote{\href{#2}{#2}}} \newcommand{\htmladdnamedlinkfoot}[3]{% \hypertarget{#1}{#2}\footnote{\href{#3}{#3}}} \renewcommand{\htmladdnormallink}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlink}% \else\def\next{\htmladdnamedlink{#1}}\fi \next} \newcommand{\htmladdnonamedlink}[2]{\href{#2}{#1}} \newcommand{\htmladdnamedlink}[3]{% \hypertarget{#1}{\hskip2bp}\href{#3}{#2}} \fi \renewcommand{\htmlbody}[1][]{} \renewcommand{\htmlborder}[2][]{} \renewcommand{\externallabels}[3][]{} \renewcommand{\externalref}[2][]{} \renewcommand{\externalcite}[1][]{\nocite} \renewcommand{\hyperref}[1][]{\hyperrefi[#1]} \renewcommand{\hypercite}[1][]{\hypercitei[#1]} \renewcommand{\hypercitenocite}[2]{#2\hypercitenocitex} \renewcommand{\hypercitenocitex}[2][]{\nocite{#2}} \let\hyperciteno=\hypercitenocite \let\hyperciteext=\hypercitenocite \ifx\pdfunknown\relax \renewcommand{\htmlimage}[2][]{} \renewcommand{\htmlref}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlrefdef\else\aftergroup\htmlrefext\fi}} \newcommand{\htmlrefdef}[1]{} \newcommand{\htmlrefext}[2][]{} \renewcommand{\htmlcite}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[2][]{} \else \renewcommand{\htmlimage}[2][]{\hyperimage{#2}} \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@} \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}} \newcommand{\htmlrefext}[3]{% \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}} \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[1][]{\cite} \fi \newcommand{\htmlcitedef}[1]{ \nocite{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % HTML HTMLset HTMLsetenv % % These commands do nothing in LaTeX, but can be used to place % HTML tags or set Perl variables during the LaTeX2HTML processing; % They are intended for expert use only. \newcommand{\HTMLcode}[2][]{} \ifx\undefined\HTML\newcommand{\HTML}[2][]{}\else \typeout{*** Warning: \string\HTML\space had an incompatible definition ***}% \typeout{*** instead use \string\HTMLcode\space for raw HTML code ***}% \fi \newcommand{\HTMLset}[3][]{} \newcommand{\HTMLsetenv}[3][]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % The following commands pertain to document segmentation, and % were added by Herbert Swan <dprhws@edp.Arco.com> (with help from % Michel Goossens <goossens@cern.ch>): % % % This command inputs internal latex2html tables so that large % documents can to partitioned into smaller (more manageable) % segments. % \newcommand{\internal}[2][internals]{} % % Define a dummy stub \htmlhead{}. This command causes latex2html % to define the title of the start of a new segment. It is not % normally placed in the user's document. Rather, it is passed to % latex2html via a .ptr file written by \segment. % \newcommand{\htmlhead}[3][]{} % In the LaTeX2HTML version this will eliminate the title line % generated by a \segment command, but retains the title string % for use in other places. % \newcommand{\htmlnohead}{} % In the LaTeX2HTML version this put a URL into a <BASE> tag % within the <HEAD>...</HEAD> portion of a document. % \ifx\pdfunknown\relax \newcommand{\htmlbase}[1]{} \else \let\htmlbase=\hyperbaseurl \fi % Include style information into the stylesheet; e.g. CSS % \newcommand{\htmlsetstyle}[3][]{} \newcommand{\htmladdtostyle}[3][]{} % Define a style-class for information in a particular language % \newcommand{\htmllanguagestyle}[2][]{} % % The dummy command \endpreamble is needed by latex2html to % mark the end of the preamble in document segments that do % not contain a \begin{document} % \newcommand{\startdocument}{} % \tableofchildlinks, \htmlinfo % by Ross Moore --- extensions dated 27 September 1997 % % These do nothing in LaTeX but for LaTeX2HTML they mark % where the table of child-links and info-page should be placed, % when the user wants other than the default. % \tableofchildlinks % put mini-TOC at this location % \tableofchildlinks[off] % not on current page % \tableofchildlinks[none] % not on current and subsequent pages % \tableofchildlinks[on] % selectively on current page % \tableofchildlinks[all] % on current and all subsequent pages % \htmlinfo % put info-page at this location % \htmlinfo[off] % no info-page in current document % \htmlinfo[none] % no info-page in current document % *-versions omit the preceding <BR> tag. % \newcommand{\tableofchildlinks}{% \@ifstar\tableofchildlinksstar\tableofchildlinksstar} \newcommand{\tableofchildlinksstar}[1][]{} \newcommand{\htmlinfo}{\@ifstar\htmlinfostar\htmlinfostar} \newcommand{\htmlinfostar}[1][]{} % This redefines \begin to allow for an optional argument % which is used by LaTeX2HTML to specify `style-sheet' information \let\realLaTeX@begin=\begin \renewcommand{\begin}[1][]{\realLaTeX@begin} % % Allocate a new set of section counters, which will get incremented % for "*" forms of sectioning commands, and for a few miscellaneous % commands. % \@ifundefined{c@part}{\newcounter{part}}{}% \newcounter{lpart} \newcounter{lchapter}[part] \@ifundefined{c@chapter}% {\let\Hchapter\relax \newcounter{chapter}\let\thechapter\relax \newcounter{lsection}[part]}% {\let\Hchapter=\chapter \newcounter{lsection}[chapter]} \newcounter{lsubsection}[section] \newcounter{lsubsubsection}[subsection] \newcounter{lparagraph}[subsubsection] \newcounter{lsubparagraph}[paragraph] %\newcounter{lequation} % % Redefine "*" forms of sectioning commands to increment their % respective counters. % \let\Hpart=\part %\let\Hchapter=\chapter \let\Hsection=\section \let\Hsubsection=\subsection \let\Hsubsubsection=\subsubsection \let\Hparagraph=\paragraph \let\Hsubparagraph=\subparagraph \let\Hsubsubparagraph=\subsubparagraph \ifx\c@subparagraph\undefined \newcounter{lsubsubparagraph}[lsubparagraph] \else \newcounter{lsubsubparagraph}[subparagraph] \fi % % The following definitions are specific to LaTeX2e: % (They must be commented out for LaTeX 2.09) % \expandafter\ifx\csname part\endcsname\relax\else \renewcommand{\part}{\@ifstar{\stepcounter{lpart}% \bgroup\def\tmp{*}\H@part}{\bgroup\def\tmp{}\H@part}}\fi \newcommand{\H@part}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hpart\tmp} \ifx\Hchapter\relax\else \def\chapter{\resetsections \@ifstar{\stepcounter{lchapter}% \bgroup\def\tmp{*}\H@chapter}{\bgroup\def\tmp{}\H@chapter}}\fi \newcommand{\H@chapter}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hchapter\tmp} \renewcommand{\section}{\resetsubsections \@ifstar{\stepcounter{lsection}\bgroup\def\tmp{*}% \H@section}{\bgroup\def\tmp{}\H@section}} \newcommand{\H@section}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsection\tmp} \renewcommand{\subsection}{\resetsubsubsections \@ifstar{\stepcounter{lsubsection}\bgroup\def\tmp{*}% \H@subsection}{\bgroup\def\tmp{}\H@subsection}} \newcommand{\H@subsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsection\tmp} \renewcommand{\subsubsection}{\resetparagraphs \@ifstar{\stepcounter{lsubsubsection}\bgroup\def\tmp{*}% \H@subsubsection}{\bgroup\def\tmp{}\H@subsubsection}} \newcommand{\H@subsubsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubsection\tmp} \renewcommand{\paragraph}{\resetsubparagraphs \@ifstar{\stepcounter{lparagraph}\bgroup\def\tmp{*}% \H@paragraph}{\bgroup\def\tmp{}\H@paragraph}} \newcommand\H@paragraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hparagraph\tmp} \ifx\Hsubparagraph\relax\else\@ifundefined{subparagraph}{}{% \renewcommand{\subparagraph}{\resetsubsubparagraphs \@ifstar{\stepcounter{lsubparagraph}\bgroup\def\tmp{*}% \H@subparagraph}{\bgroup\def\tmp{}\H@subparagraph}}}\fi \newcommand\H@subparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubparagraph\tmp} \ifx\Hsubsubparagraph\relax\else\@ifundefined{subsubparagraph}{}{% \def\subsubparagraph{% \@ifstar{\stepcounter{lsubsubparagraph}\bgroup\def\tmp{*}% \H@subsubparagraph}{\bgroup\def\tmp{}\H@subsubparagraph}}}\fi \newcommand\H@subsubparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubparagraph\tmp} \def\check@align{\def\empty{}\ifx\tmp@a\empty \else\def\tmp@b{center}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{left}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{right}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\expandafter\def\expandafter\tmp@a\expandafter{\expandafter[\tmp@a]}% \fi\fi\fi \def\empty{}\ifx\tmp\empty\let\tmp=\tmp@a \else \expandafter\def\expandafter\tmp\expandafter{\expandafter*\tmp@a}% \fi\fi} % \def\resetsections{\setcounter{section}{0}\setcounter{lsection}{0}% \reset@dependents{section}\resetsubsections } \def\resetsubsections{\setcounter{subsection}{0}\setcounter{lsubsection}{0}% \reset@dependents{subsection}\resetsubsubsections } \def\resetsubsubsections{\setcounter{subsubsection}{0}\setcounter{lsubsubsection}{0}% \reset@dependents{subsubsection}\resetparagraphs } % \def\resetparagraphs{\setcounter{lparagraph}{0}\setcounter{lparagraph}{0}% \reset@dependents{paragraph}\resetsubparagraphs } \def\resetsubparagraphs{\ifx\c@subparagraph\undefined\else \setcounter{subparagraph}{0}\fi \setcounter{lsubparagraph}{0}% \reset@dependents{subparagraph}\resetsubsubparagraphs } \def\resetsubsubparagraphs{\ifx\c@subsubparagraph\undefined\else \setcounter{subsubparagraph}{0}\fi \setcounter{lsubsubparagraph}{0}} % \def\reset@dependents#1{\begingroup\let \@elt \@stpelt \csname cl@#1\endcsname\endgroup} % ignore optional *-version of \tableofcontents \let\ltx@tableofcontents\tableofcontents \renewcommand{\tableofcontents}{% \@ifstar\ltx@tableofcontents\ltx@tableofcontents} % % % Define a helper macro to dump a single \secounter command to a file. % \newcommand{\DumpPtr}[2]{% \count255=\csname c@#1\endcsname\relax\def\dummy{dummy}\def\tmp{#2}% \ifx\tmp\dummy\def\ctr{#1}\else \def\ctr{#2}\advance\count255 by \csname c@#2\endcsname\relax\fi \immediate\write\ptrfile{% \noexpand\setcounter{\ctr}{\number\count255}}} %\expandafter\noexpand\expandafter\setcounter\expandafter{\ctr}{\number\count255}}} % % Define a helper macro to dump all counters to the file. % The value for each counter will be the sum of the l-counter % actual LaTeX section counter. % Also dump an \htmlhead{section-command}{section title} command % to the file. % \newwrite\ptrfile \def\DumpCounters#1#2#3#4{% \begingroup\let\protect=\noexpand \immediate\openout\ptrfile = #1.ptr \DumpPtr{part}{lpart}% \ifx\Hchapter\relax\else\DumpPtr{chapter}{lchapter}\fi \DumpPtr{section}{lsection}% \DumpPtr{subsection}{lsubsection}% \DumpPtr{subsubsection}{lsubsubsection}% \DumpPtr{paragraph}{lparagraph}% \DumpPtr{subparagraph}{lsubparagraph}% \DumpPtr{equation}{dummy}% \DumpPtr{footnote}{dummy}% \def\tmp{#4}\ifx\tmp\@empty \immediate\write\ptrfile{\noexpand\htmlhead{#2}{#3}}\else \immediate\write\ptrfile{\noexpand\htmlhead[#4]{#2}{#3}}\fi \dumpcitestatus \dumpcurrentcolor \immediate\closeout\ptrfile \endgroup } %% interface to natbib.sty \def\dumpcitestatus{} \def\loadcitestatus{\def\dumpcitestatus{% \ifciteindex\immediate\write\ptrfile{\noexpand\citeindextrue}% \else\immediate\write\ptrfile{\noexpand\citeindexfalse}\fi }% } \@ifpackageloaded{natbib}{\loadcitestatus}{% \AtBeginDocument{\@ifpackageloaded{natbib}{\loadcitestatus}{}}} %% interface to color.sty \def\dumpcurrentcolor{} \def\loadsegmentcolors{% \let\real@pagecolor=\pagecolor \let\pagecolor\segmentpagecolor \let\segmentcolor\color \ifx\current@page@color\undefined \def\current@page@color{{}}\fi \def\dumpcurrentcolor{\bgroup\def\@empty@{{}}% \expandafter\def\expandafter\tmp\space####1@{\def\thiscol{####1}}% \ifx\current@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@color @\fi \immediate\write\ptrfile{\noexpand\segmentcolor{\thiscol}}% \ifx\current@page@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@page@color @\fi \immediate\write\ptrfile{\noexpand\segmentpagecolor{\thiscol}}% \egroup}% \global\let\loadsegmentcolors=\relax } % These macros are needed within images.tex since this inputs % the <segment>.ptr files for a segment, so that counters are % colors are synchronised. % \newcommand{\segmentpagecolor}[1][]{% \@ifpackageloaded{color}{\loadsegmentcolors\bgroup \def\tmp{#1}\ifx\@empty\tmp\def\next{[]}\else\def\next{[#1]}\fi \expandafter\segmentpagecolor@\next}% {\@gobble}} \def\segmentpagecolor@[#1]#2{\def\tmp{#1}\def\tmpB{#2}% \ifx\tmpB\@empty\let\next=\egroup \else \let\realendgroup=\endgroup \def\endgroup{\edef\next{\noexpand\realendgroup \def\noexpand\current@page@color{\current@color}}\next}% \ifx\tmp\@empty\real@pagecolor{#2}\def\model{}% \else\real@pagecolor[#1]{#2}\def\model{[#1]}% \fi \edef\next{\egroup\def\noexpand\current@page@color{\current@page@color}% \noexpand\real@pagecolor\model{#2}}% \fi\next} % \newcommand{\segmentcolor}[2][named]{\@ifpackageloaded{color}% {\loadsegmentcolors\segmentcolor[#1]{#2}}{}} \@ifpackageloaded{color}{\loadsegmentcolors}{\let\real@pagecolor=\@gobble \AtBeginDocument{\@ifpackageloaded{color}{\loadsegmentcolors}{}}} % Define the \segment[align]{file}{section-command}{section-title} command, % and its helper macros. This command does four things: % 1) Begins a new LaTeX section; % 2) Writes a list of section counters to file.ptr, each % of which represents the sum of the LaTeX section % counters, and the l-counters, defined above; % 3) Write an \htmlhead{section-title} command to file.ptr; % 4) Inputs file.tex. \newcommand{\segment}{\@ifstar{\@@htmls}{\@@html}} %\tracingall \newcommand{\@endsegment}[1][]{} \let\endsegment\@endsegment \newcommand{\@@htmls}[1][]{\@@htmlsx{#1}} \newcommand{\@@html}[1][]{\@@htmlx{#1}} \def\@@htmlsx#1#2#3#4{\csname #3\endcsname* {#4}% \DumpCounters{#2}{#3*}{#4}{#1}\input{#2}} \def\@@htmlx#1#2#3#4{\csname #3\endcsname {#4}% \DumpCounters{#2}{#3}{#4}{#1}\input{#2}} \makeatother \endinput % Modifications: % % (The listing of Initiales see Changes) % $Log: html.sty,v $ % Revision 1.39 2001/10/01 22:47:06 RRM % -- somehow revision 1.39 was not committed earlier % -- it allows a * version of \tableofcontents (used with frames) to be % treated as un-starred by LaTeX % % Revision 1.39 2000/09/10 12:23:20 RRM % -- added *-argument for \tableofcontents in frames.perl % LaTeX should just ignore it % % Revision 1.38 1999/07/19 13:23:20 RRM % -- compatibility with pdflatex and hyperref.sty % citations are not complete yet, I think % -- ensure that \thechapter remains undefined; some packages use it % as a test for the type of documentclass being used. % % Revision 1.37 1999/03/12 07:02:38 RRM % -- change macro name from \addTOCsection to \htmladdTOClink % -- it has 3 + 1 optional argument, to allow a local path to a labels.pl % file for the external document, for cross-references % % Revision 1.36 1999/03/10 05:46:00 RRM % -- extended the code for compatibilty with comment.sty % -- allow excluded environments to work within tables, % with the excluded material spanning headers and several cells % thanks Avinash Chopde for recognising the need for this. % -- added LaTeX support (ignores it) for \htmladdTOCsection % thanks to Steffen Klupsch and Uli Wortmann for this idea. % % Revision 1.35 1999/03/08 11:16:16 RRM % html.sty for LaTeX2HTML V99.1 % % -- ensure that html.sty can be loaded *after* hyperref.sty % -- support new command \htmlclear for <BR> in HTML, ignored by LaTeX % -- ensure {part} and {chapter} counters are defined, even if not used % % Revision 1.34 1998/09/19 10:37:29 RRM % -- fixed typo with \next{\hyperref}{....} % % Revision 1.33 1998/09/08 12:47:51 RRM % -- changed macro-names for the \hyperref and \hypercite options % allows easier compatibility with other packages % % Revision 1.32 1998/08/24 12:15:14 RRM % -- new command \htmllanguagestyle to associate a style class % with text declared as a particular language % % Revision 1.31 1998/07/07 14:15:41 RRM % -- new commands \htmlsetstyle and \htmladdtostyle % % Revision 1.30 1998/07/04 02:42:22 RRM % -- cope with catcodes of % { } in rawhtml/comment/htmlonly environments % % Revision 1.29 1998/06/23 13:33:23 RRM % -- use \begin{small} with the default for URLs % % Revision 1.28 1998/06/21 09:38:39 RRM % -- implement \htmlurl to agree with \url if already defined % or loaded subsequently (LaTeX-2e only) % -- get LaTeX to print the revision number when loading % % Revision 1.27 1998/06/20 15:13:10 RRM % -- \TeX is already protected in recent versions of LaTeX % so \DeclareRobust doesn't work --- causes looping % -- \part and \subparagraph need not be defined in some styles % % Revision 1.26 1998/06/01 08:36:49 latex2html % -- implement optional argument for \endsegment % -- made the counter value output from \DumpPtr more robust % % Revision 1.25 1998/05/09 05:43:35 latex2html % -- conditionals for avoiding undefined counters % % Revision 1.23 1998/02/26 10:32:24 latex2html % -- use \providecommand for \latextohtml % -- implemented \HTMLcode to do what \HTML did previously % \HTML still works, unless already defined by another package % -- fixed problems remaining with undefined \chapter % -- defined \endsegment % % Revision 1.22 1997/12/05 11:38:18 RRM % -- implemented an optional argument to \begin for style-sheet info. % -- modified use of an optional argument with sectioning-commands % % Revision 1.21 1997/11/05 10:28:56 RRM % -- replaced redefinition of \@htmlrule with \htmlrulestar % % Revision 1.20 1997/10/28 02:15:58 RRM % -- altered the way some special html-macros are defined, so that % star-variants are explicitly defined for LaTeX % -- it is possible for these to occur within images.tex % e.g. \htmlinfostar \htmlrulestar \tableofchildlinksstar % % Revision 1.19 1997/10/11 05:47:48 RRM % -- allow the dummy {tex2html_nowrap} environment in LaTeX % use it to make its contents be evaluated in environment order % % Revision 1.18 1997/10/04 06:56:50 RRM % -- uses Robin Fairbairns' code for ignored environments, % replacing the previous comment.sty stuff. % -- extensions to the \tableofchildlinks command % -- extensions to the \htmlinfo command % % Revision 1.17 1997/07/08 11:23:39 RRM % include value of footnote counter in .ptr files for segments % % Revision 1.16 1997/07/03 08:56:34 RRM % use \textup within the \latextohtml macro % % Revision 1.15 1997/06/15 10:24:58 RRM % new command \htmltracenv as environment-ordered \htmltracing % % Revision 1.14 1997/06/06 10:30:37 RRM % - new command: \htmlborder puts environment into a <TABLE> cell % with a border of specified width, + other attributes. % - new commands: \HTML for setting arbitrary HTML tags, with attributes % \HTMLset for setting Perl variables, while processing % \HTMLsetenv same as \HTMLset , but it gets processed % as if it were an environment. % - new command: \latextohtml --- to set the LaTeX2HTML name/logo % - fixed some remaining problems with \segmentcolor & \segmentpagecolor % % Revision 1.13 1997/05/19 13:55:46 RRM % alterations and extra options to \hypercite % % Revision 1.12 1997/05/09 12:28:39 RRM % - Added the optional argument to \htmlhead, also in \DumpCounters % - Implemented \HTMLset as a no-op in LaTeX. % - Fixed a bug in accessing the page@color settings. % % Revision 1.11 1997/03/26 09:32:40 RRM % - Implements LaTeX versions of \externalcite and \hypercite commands. % Thanks to Uffe Engberg and Stephen Simpson for the suggestions. % % Revision 1.10 1997/03/06 07:37:58 RRM % Added the \htmltracing command, for altering $VERBOSITY . % % Revision 1.9 1997/02/17 02:26:26 RRM % - changes to counter handling (RRM) % - shuffled around some definitions % - changed \htmlrule of 209 mode % % Revision 1.8 1997/01/26 09:04:12 RRM % RRM: added optional argument to sectioning commands % \htmlbase sets the <BASE HREF=...> tag % \htmlinfo and \htmlinfo* allow the document info to be positioned % % Revision 1.7 1997/01/03 12:15:44 L2HADMIN % % - fixes to the color and natbib interfaces % % - extended usage of \hyperref, via an optional argument. % % - extended use comment environments to allow shifting expansions % % e.g. within \multicolumn (`bug' reported by Luc De Coninck). % % - allow optional argument to: \htmlimage, \htmlhead, % % \htmladdimg, \htmladdnormallink, \htmladdnormallinkfoot % % - added new commands: \htmlbody, \htmlnohead % % - added new command: \tableofchildlinks % % Revision 1.6 1996/12/25 03:04:54 JCL % added patches to segment feature from Martin Wilck % % Revision 1.5 1996/12/23 01:48:06 JCL % o introduced the environment makeimage, which may be used to force % LaTeX2HTML to generate an image from the contents. % There's no magic, all what we have now is a defined empty environment % which LaTeX2HTML will not recognize and thus pass it to images.tex. % o provided \protect to the \htmlrule commands to allow for usage % within captions. % % Revision 1.4 1996/12/21 19:59:22 JCL % - shuffled some entries % - added \latexhtml command % % Revision 1.3 1996/12/21 12:22:59 JCL % removed duplicate \htmlrule, changed \htmlrule back not to create a \hrule % to allow occurrence in caption % % Revision 1.2 1996/12/20 04:03:41 JCL % changed occurrence of \makeatletter, \makeatother % added new \htmlrule command both for the LaTeX2.09 and LaTeX2e % sections % % % jcl 30-SEP-96 % - Stuck the commands commonly used by both LaTeX versions to the top, % added a check which stops input or reads further if the document % makes use of LaTeX2e. % - Introduced rrm's \dumpcurrentcolor and \bodytext % hws 31-JAN-96 - Added support for document segmentation % hws 10-OCT-95 - Added \htmlrule command % jz 22-APR-94 - Added support for htmlref % nd - Created ������������������������������������������������������������������psi3/doc/progman/introduction.tex�������������������������������������������������������������������0000644�0001015�0000765�00000003265�07724471660�015677� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Introduction % % Daniel Crawford, 24 January, 1996 % Revised by TDC July 2002 % The purpose of this manual is to provide a reasonably detailed overview of the source code and programming philosophy of \PSIthree, such that programmers interested in contributing to the code will have an easier task. Section \ref{cvs} gives a succint explanation of the steps required to obtain the source code from the main repository at Virginia Tech. (Installation instructions are given separately in the installation manual or in \$PSI3/INSTALL.) Section \ref{Fundamental_PSI} discusses the essential elements of a C-language \PSIthree\ program, with emphasis on the input parsing and I/O functions. Section \ref{Other_Libs} provides documentation of a number of other important libraries, including the library of functions for reading from the checkpoint file, \library{libchkpt.a}, the Quantum Trio miscellaneous function library, \library{libqt.a}, the \library{libiwl.a} for reading and writing one- and two-electron integrals in the ``integrals with labels'' format. Section \ref{Style} offers advice on appropriate programming style for \PSIthree\ code, and section \ref{Makefiles} describes the structure of the package's \file{Makefile}s. Section \ref{New_Code} gives a brief overview of the necessary steps to adding a new module to \PSIthree, section \ref{Debugging} gives some suggestions on debugging it, and section \ref{Documentation} explains conventions for documenting it. The appendices provide important reference material, including the currently accepted \PSIthree\ citation and format information for some of the most important text files used by \PSIthree\ modules. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/io.tex�����������������������������������������������������������������������������0000644�0001015�0000765�00000010333�10747426706�013557� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Binary I/O --- libciomr % % Daniel Crawford, 1 February 1996 % Updated, June 2000 % For completeness and reference, the old PSI I/O system, libciomr, is described here. A binary file is identified by the \PSIthree\ module through a unit number and not by a complete name, just as in the Fortran programming language. The module does not generally have access to the full name of the physical file(s) which make up the unit --- only the low-level I/O functions require this information. For example, let's say the programmer wishes to open binary file number 92 (the supermatrix file constructed by \PSIcscf) and read data from it. After initialization of the input parsing system (see sections \ref{C_IP} and \ref{PSI_Module}), he or she would call the \celem{rfile()} routine. This function requires only the unit number of the file as an argument --- in this case, 92. This unit number is passed to a lower-level routine, \celem{ioopen{\_}()}, which determines the I/O method available.\footnote{At present, the only method available is sequential I/O, though the originial authors of the I/O routines left open the possibility of other, more unusual I/O techniques, including RAM disks and asynchronous access.} Then, the appropriate file-opening routine is called. This routine (e.g. \celem{sequential{\_}ioopen()}) determines the number of volumes (i.e. the number of physical files) across which the binary file will be partitioned. It then constructs the name of each physical file based on the information provided by the user input (or, if no input is available, a default name), and finally opens each physical file. All of the steps beyond the call to \celem{rfile()} are conveniently hidden from the programmer. After the module is finished with its interaction with the unit, the file is closed using \celem{rclose()}, which will delete the file if the programmer wishes. There are two primary functions in \celem{libciomr.a} which allow the PSI C modules to interact with binary files. These are \celem{wreadw()} and \celem{wwritw()}. Both of these routines require as arguments the unit number, a data buffer, the number of bytes to be read or written, and the starting byte address in the file. In addition, both provide (as an argument, not a return value) the ending bytewise file pointer after the read/write has completed. (See \file{libciomr/libciomr.h} for the exact syntax for calling these two routines.) For example, if the programmer wishes to read 512 double precision floating point words from \FILE{92}, starting at byte number 13, into the array \celem{arr}, the appropriate call to \celem{wreadw()} would be \begin{verbatim} wreadw(92, (char *) arr, 512*sizeof(double), 13, &next_byte); \end{verbatim} The cast, \celem{(char *)}, is necessary so that the data in \FILE{92} can be loaded into arrays of different types, e.g.~integer or double precision floating point words. Note also that a pointer to \celem{next{\_}byte} must be passed so that the ending bytewise file pointer will be returned. A similar call is used for \celem{wwritw()}. The read/write requests are carried out by the low-level I/O routines, which pass the data to or from the physical files in blocks of 8192 bytes (this value may be changed by user input). This can significantly reduce the amount of time spent by the CPU waiting to send or receive data to or from the physical devices. There are four other routines which are sometimes used for reading and writing data in binary files: \celem{sread()}, \celem{swrit()}, \celem{rread()}, and \celem{rwrit()}. These functions work similarly to \celem{wreadw()} and \celem{wwritw()}, but do not require bytewise file addresses as arguments. Instead, the global file pointer is maintained by the I/O routines themselves, and read/write requests automatically begin at the boundaries of so-called {\em sectors}, which are here defined to be blocks of 1024 4-byte integer words. The routines are frequently used by older PSI Fortran modules, which were written before computer operating systems automatically buffered disk I/O in memory. However, modern workstations have made these functions mostly obsolete, and we recommend using them only for interaction with files constructed by older modules. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/io_new.tex�������������������������������������������������������������������������0000644�0001015�0000765�00000025052�10757640026�014426� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% PSI3 Programmer's Manual % % Binary I/O --- libpsio % % T. Daniel Crawford, June 2000 % \subsubsection{The structure and philosophy of the library} Almost all \PSIthree\ modules must exchange data with raw binary (also called ``direct-access'') files. However, rather than using low-level C or Fortran functions such as \celem{read()} or \celem{write()}, \PSIthree\ uses a flexible, but fast I/O system that gives the programmer and user control over the organization and storage of data. Some of the features of the PSI I/O system, libpsio, include: \begin{itemize} \item A user-defined disk striping system in which a single binary file may be split across several physical or logical disks. \item A file-specific table of contents (TOC) which contains file-global starting and ending addresses for each data item. \item An entry-relative page/offset addressing scheme which avoids file-global file pointers which can limit file sizes. \end{itemize} The TOC structure of PSI binary files provdes several advantages over older I/O systems. For example, data items in the TOC are identified by keyword strings (e.g., \celem{"Nuclear Repulsion Energy"}) and the {\em global} address of an entry is known only to the TOC itself, never to the programmer. Hence, if the programmer wishes to read or write an entire TOC entry, he/she is required to provide only the TOC keyword and the entry size (in bytes) to obtain the data. Furthermore, the TOC makes it possible to read only pieces of TOC entries (say a single buffer of a large list of two-electron integrals) by providing the appropriate TOC keyword, a size, and a starting address relative to the beginning of the TOC entry. In short, the TOC design hides all information about the global structure of the direct access file from the programmer and allows him/her to be concerned only with the structure of individual entries. The current TOC is written to the end of the file when it is closed. Thus the direct-access file itself is viewed as a series of pages, each of which contains an identical number of bytes. The global address of the beginning of a given entry is stored on the TOC as a page/offset pair comprised of the starting page and byte-offset on that page where the data reside. The entry-relative page/offset addresses which the programmer must provide work in exactly the same manner, but the 0/0 position is taken to be the beginning of the TOC entry rather than the beginning of the file. \subsubsection{The user interface} All of the functions needed to carry out basic I/O are described in this subsection. Proper declarations of these routines are provided by the header file \file{psio.h}. Note that before any open/close functions may be called, the input parsing library, libipv1 must be initialized so that the necessary file striping information may be read from user input, but this is hidden from the programmer in lower-level functions. NB, \celem{ULI} is used as an abbreviation for \celem{unsigned long int} in the remainder of this manual. \celem{int psio\_init(void)}: Before any files may be opened or the basic read/write functions of libpsio may be used, the global data needed by the library functions must be initialized using this function. \celem{int psio\_ipv1\_config(void)}: For the library to operate properly, its configuration must be read from the input file or from user's {\tt .psirc} file. This call MUST immediately follow {\em int psio\_init();}. \celem{int psio\_done(void)}: When all interaction with the direct-access files is complete, this function is used to free the library's global memory. \celem{int psio\_open(ULI unit, int status)}: Opens the direct access file identified by \celem{unit}. The \celem{status} flag is a boolean used to indicate if the file is new (0) or if it already exists and is being re-opened (1). If specified in the user input file, the file will be automatically opened as a multivolume (striped) file, and each page of data will be read from or written to each volume in succession. \celem{int psio\_close(ULI unit, int keep)}: Closes a direct access file identified by unit. The keep flag is a boolean used to indicate if the file's volumes should be deleted (0) or retained (1) after being closed. \celem{int psio\_read\_entry(ULI unit, char *key, char *buffer, ULI size)}: Used to read an entire TOC entry identified by the string \celem{key} from \celem{unit} into the array \celem{buffer}. The number of bytes to be read is given by \celem{size}, but this value is only used to ensure that the read request does not exceed the end of the entry. If the entry does not exist, an error is printed to stderr and the program will exit. \celem{int psio\_write\_entry(ULI unit, char *key, char *buffer, ULI size)}: Used to write an entire TOC entry idenitified by the string \celem{key} to \celem{unit} into the array \celem{buffer}. The number of bytes to be written is given by \celem{size}. If the entry already exists and its data is being overwritten, the value of size is used to ensure that the write request does not exceed the end of the entry. \celem{int psio\_read(ULI unit, char *key, char *buffer, ULI size, psio\_address sadd, psio\_address *eadd)}: Used to read a fragment of \celem{size} bytes of a given TOC entry identified by \celem{key} from \celem{unit} into the array \celem{buffer}. The starting address is given by the \celem{sadd} and the ending address (that is, the entry-relative address of the next byte in the file) is returned in \celem{*eadd}. \celem{int psio\_write(ULI unit, char *key, char *buffer, ULI size, psio\_address sadd, psio\_address *eadd)}: Used to write a fragment of \celem{size} bytes of a given TOC entry identified by \celem{key} to \celem{unit} into the array \celem{buffer}. The starting address is given by the \celem{sadd} and the ending address (that is, the entry-relative address of the next byte in the file) is returned in \celem{*eadd}. The page/offset address pairs required by the preceeding read and write functions are supplied via variables of the data type \celem{psio\_address}, defined by: \begin{verbatim} typedef struct { ULI page; ULI offset; } psio_address; \end{verbatim} The \celem{PSIO\_ZERO} defined in a macro provides a convenient input for the 0/0 page/offset. \subsubsection{Manipulating the table of contents} In addition, to the basic open/close/read/write functions described above, the programmer also has a limited ability to directly manipulate or examine the data in the TOC itself. \celem{int psio\_tocprint(ULI unit, FILE *outfile)}: Prints the TOC of \celem{unit} in a readable form to \celem{outfile}, including entry keywords and global starting/ending addresses. (\celem{tocprint} is also the name of a \PSIthree\ utility module which prints a file's TOC to stdout.) \celem{int psio\_toclen(ULI unit, FILE *outfile)}: Returns the number of entries in the TOC of \celem{unit}. \celem{int psio\_tocdel(ULI unit, char *key)}: Deletes the TOC entry corresponding to \celem{key}. NB that this function only deletes the entry's reference from the TOC itself and does not remove the corresponding data from the file. Hence, it is possible to introduce data "holes" into the file. \celem{int psio\_tocclean(ULI unit, char *key)}: Deletes the TOC entry corresponding to \celem{key} and all subsequent entries. As with \celem{psio\_tocdel()}, this function only deletes the entry references from the TOC itself and does not remove the corresponding data from the file. This function is still under construction. \subsubsection{Using \library{libpsio.a}} The following code illustrates the basic use of the library, as well as when/how the \celem{psio\_init()}, \celem{psio\_ipv1\_config()}, and \celem{psio\_done()} functions should be called in relation to initialization of \library{libipv1}. (See section \ref{PSI_Module} later in the manual for a description of the basic elements of \PSIthree\ program.) \begin{verbatim} #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libpsio/psio.h> #include <libciomr/libciomr.h> extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } using namespace psi::MODULE_NAME; int main(int argc, char* argv[]) { int i, M, N; double enuc, *some_data; psio_address next; /* Special page/offset structure */ psi_start(&infile,&outfile,&psi_file_prefix,argc-1, argv+1, 0); ip_cwk_add(":MODULE_NAME"); // MODULE_NAME in all caps tstart(outfile); /* Initialize the I/O system */ psio_init(); psio_ipv1_config(); /* Open the file and write an energy */ psio_open(31, PSIO_OPEN_NEW); enuc = 12.3456789; psio_write_entry(31, "Nuclear Repulsion Energy", (char *) &enuc, sizeof(double)); psio_close(31,1); /* Read M rows of an MxN matrix from a file */ some_data = init_matrix(M,N); psio_open(91, PSIO_OPEN_OLD); next = PSIO_ZERO;/* Note use of the special macro */ for(i=0; i < M; i++) psio_read(91, "Some Coefficients", (char *) (some_data + i*N), N*sizeof(double), next, &next); psio_close(91,0); /* Close the I/O system */ psio_done(); tstop(outfile); ip_done(); psi_stop(infile, outfile, psi_file_prefix); exit(0); } extern "C" { char *gprgid() { char *prgid = "CODE_NAME"; return(prgid); } } \end{verbatim} The interface to the \PSIthree\ I/O system has been designed to mimic that of the old \celem{wreadw()} and \celem{wwritw()} routines of \library{libciomr} (see the next section of this manual). The table of contents system introduces a few complications that users of the library should be aware of: \begin{itemize} \item As pointed out earlier, deletion of TOC entries is allowed using \celem{psio\_tocdel()} and \celem{psio\_tocclean()}. However, since only the TOC reference is removed from the file and the corresponding data is not, a data hole will be left in the file if the deleted entry was not the last one in the TOC. A utility function designed to "defrag" a PSI file may become necessary if such holes ever present a problem. \item One may append data to an existing TOC entry by simply writing beyond the entry's current boundary; the ending address data in the TOC will be updated automatically. However, no safety measures have been implemented to prevent one from overwriting data in a subsequent entry thereby corrupting the TOC. This feature/bug remains because (1) it is possible that such error checking functions may slow the I/O codes significantly; (2) it may be occasionally desirable to overwrite exiting data, regardless of its effect on the TOC. Eventually a utility function which checks the validity of the TOC may be needed if this becomes a problem, particularly for debugging purposes. \end{itemize} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/ip.tex�����������������������������������������������������������������������������0000644�0001015�0000765�00000022211�10747662666�013565� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Input Parsing Section % % Justin T. Fermann, 1 February 1996 % % Updated and improved(?) by Edward F. Valeev, 7 June 2000 % Updated to C++ by David Sherrill, 29 Jan 2008 % The input parsing library is built for the purpose of reading in the contents of an input file with the syntax of \inputdat\ and storing the contents specific to certain keywords supplied. To perform such a task \library{libipv1.a} has three parts: (1) the parser; (2) the lexical scanner; (3) keyword storage and retrieval. The format of \inputdat\ follows certain rules which should probably referred to as the PSI input grammar. There is a description of most of those rules in \PSIthree\ User's Manual. A complete definition of the PSI input grammar is encoded in \file{parse.y} (see below). To read a grammar we need a parser -- the first component of \library{libipv1.a}. Then the identified lexical elements of \inputdat\ (keywords and keyword values) need to be scanned for presence of ``forbidden'' characters (e.g.\ a space may not be a part of a string unless the string is placed between parentheses). This task is performed by the lexical scanner --- the second component of \library{libipv1.a}. Finally, scanned-in pairs of keyword-value(s) are stored in a hierarchical data structure (a tree). When a particular option is needed, the set of stored keywords and values is searched for the one queried and the value returned. In this way, options of varying type can be assigned, i.e.\ rather than having a line of integers, each corresponding to a program variable, mnemonic character string variables can be parsed and interpreted into program variables. It's also easier to implement default options, allowing a more spartan input deck. The set of input-parsing routines in \library{libipv1.a} is really not complicated to use, but the manner in which data is stored is somewhat painful to grasp at first. The following is a list of the names of the individual source files in \library{libipv1} and a summary of their contents. After that is a list of the syntax of specific functions and their use. Last is a simple illustration of the use of this library, taken mostly from \PSIcscf. \subsubsection{Source Files} \begin{itemize} \item Header files \begin{itemize} \item \file{ip\_error.h} Defines for error return values. \item \file{ip\_global.h} cpp macros to make Curt happy. \item \file{ip\_lib.h} \#include's everything. \item \file{ip\_types.h} Various structures and unions specific to \library{libipv1}. \end{itemize} \item Other Source \begin{itemize} \item \file{parse.y} Yacc source encoding the PSI input grammar. Read by {\tt yacc} (or {\tt bison}) -- a parser generator program. \item \file{scan.l} Lex source describing lexical elements allowed in \inputdat. Read by {\tt lex} (or {\tt flex}) -- a lexer generator program. \item \file{*.gbl, *.lcl} cpp macros to mimic variable argument lists. \end{itemize} \item C source \begin{itemize} \item \file{ip\_alloc.cc} Allocates keyword tree elements. \item \file{ip\_cwk.cc} Routines to manipulate the current working keyword tree. \item \file{ip\_data.cc} Routines to handle reading of arrays and scaler keyword assignments in input. \item \file{ip\_error.cc} Error reporting functions. \item \file{ip\_karray.cc} Other things to deal with keyword arrays. \item \file{ip\_print.cc} Routines to print sections of the keyword tree. \item \file{ip\_read.cc} All the file manipulation routines. Reading of \inputdat\ and building the keyword tree from which information is later plucked. \end{itemize} \end{itemize} \subsubsection{Syntax} \begin{center} \file{ip\_cwk.cc}\\ \end{center} \celem{void ip\_cwk\_clear();} \\ Clears current working keyword. Used when initializing input or switching from one section to another (:DEFAULT and :CSCF to :INTCO, for instance). \celem{void ip\_cwk\_add(char *kwd);} \\ Adds \celem{kwd} to the list of current working keywords. Allows parsing of variables under that keyword out of the input file (files) which has (have) been read or will be read in the future using \celem{ip\_append}. The keyword \celem{kwd} can only be removed from the list of current working keywords by purging the entire list using \celem{ip\_cwk\_clear}. {\em You must ensure that they keyword strings begin with a colon.} \begin{center} \file{ip\_data.cc} \\ \end{center} \celem{int ip\_count(char *kwd, int *count, int n);} \\ Counts the elements in the n'th element of the array \celem{kwd}. \celem{int ip\_boolean(char *kwd, int *bool, int n);} \\ Parses n'th element of \celem{kwd} as boolean (true, 1, yes; false, 0, no) into 1 or 0 returned in \celem{bool}. \file{int ip\_exist(char *kwd, int n);} \\ Returns 1 if n'th element of \celem{kwd} exists. Unfortunately, n must be 0. \file{int ip\_data(char *kwd, char *conv, void *value, int n [, int o1, ..., int on]);} \\ Looks for keyword \celem{kwd}, finds the value associated with it, converts it according to the format specification given in \celem{conv}, and stores the result in \celem{value}. Note that \celem{value} is a \celem{void *} so this routine can handle any data type, but it is the programmer's responsibility to ensure that the pointer passed to this routine is of the appropriate pointer type for the data. The value found by the input parser depends on the value of \celem{n} and any optional additional arguments. \celem{n} is the number of additional arguments. If \celem{n} is 0, then there are no additional arguments, and the keyword has only one value associated with it. If the keyword has an array associated with it, then \celem{n} is 1 and the one additional argument is which element of the array to pick. If \celem{kwd} specifies an array of arrays, then \celem{n} is 2, the first additional argument is the number of the first array, and the second argument is the number of the element within that array, etc. Deep in here, the code calls a \celem{sscanf(read, conv, value);}, so that's the real meaning of variables. \celem{int ip\_string(char *kwd, char **value, int n, [int o1, ..., int on]);}\\ Parses the string associated with \celem{kwd} stores it in \celem{value}. The role of \celem{n} and optional arguments is the same as that described above for \celem{ip\_data()}. \celem{int ip\_value(char *kwd, ip\_value\_t **ip\_val, int n);} \\ Grabs the section of keyword tree at \celem{kwd} and stores it in \celem{ip\_val} for the programmer's use - this is usually not used, since you need to understand the structure of \celem{ip\_value\_t}. \celem{int ip\_int\_array(char *kwd, int *arr, int n);} \\ Reads n integers into array \celem{arr}. \begin{center} \celem{ip\_read.cc} \\ \end{center} \celem{void ip\_set\_uppercase(int uc);} \\ Sets parsing to case sensitive if uc==0, I think. \celem{void ip\_initialize(FILE *in, FILE *out);} \\ Calls \celem{yyparse();} followed by \celem{ip\_cwk\_clear();} followed by \celem{ip\_internal\_values();}. This routine reads the entire input deck and stores it into the keyword tree for access later. \celem{void ip\_append(FILE *in, FILE *out);} \\ Same thing as \celem{ip\_initialize();}, except this doesn't clear the \celem{cwk} first. Used for parsing another input file, such as \celem{intco.dat}. \celem{void ip\_done();} \\ Frees up the keyword tree. \begin{center} \celem{ip\_read.cc} \\ \end{center} \celem{void ip\_print\_tree(FILE *out, ip\_keyword\_tree\_t *tree);} \\ Prints out \celem{tree} to \celem{out}. If \celem{tree} is set to \celem{NULL}, then the current working keyword tree will be printed out. This function is useful for debugging problems with parsing. \subsubsection{Sample Use from \PSIcscf} These are two slightly simplified pieces of (former versions of) actual code. From \file{cscf.cc}: \begin{verbatim} #include <libipv1/ip_lib.h> #include <libpsio/psio.h> int main(int argc,char* argv[]) { using namespace psi::cscf; ... psi_start(&infile,&outfile,&psi_file_prefix,argc-1, argv+1, 0); ip_cwk_add(":SCF"); \end{verbatim} From \file{scf\_input.cc}: \begin{verbatim} errcod = ip_string("LABEL",&alabel,0); if(errcod == IPE_OK) fprintf(outfile," label = %s\n",alabel); reordr = 0; /* this sets the default that will be used in case the user hasn't specified this keyword */ errcod = ip_boolean("REORDER",&reordr,0); if(reordr) { errcod = ip_count("MOORDER",&size,0); for(i=0; i < size ; i++) { errcod = ip_data("MOORDER","%d",&iorder[i],1,i); errchk(errcod,"MOORDER"); } } second_root = 0; if (twocon) { errcod = ip_boolean("SECOND_ROOT",&second_root,0); } if(iopen) { errcod = ip_count("SOCC",&size,0); if(errcod == IPE_OK && size != num_ir) { fprintf(outfile,"\n SOCC array is the wrong size\n"); fprintf(outfile," is %d, should be %d\n",size,num_ir); exit(1); } if(errcod != IPE_OK) { fprintf(outfile,"\n try adding some electrons buddy!\n"); fprintf(outfile," need SOCC\n"); ip_print_tree(outfile,NULL); exit(1); } \end{verbatim} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/iwl.tex����������������������������������������������������������������������������0000644�0001015�0000765�00000003453�10605246406�013736� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The library \library{libiwl.a} contains functions for reading and writing to files with the "Integrals With Labels" (IWL) format created by David Sherrill in 1994, modeled after the format of the old integrals file from \PSItwo. Most functions deal with four-index quantitites, but there are also a few which deal with two-index quantities such as one-electron integrals. The IWL format specifies that the 4-index quantities are stored on disk in several buffers; each buffer has a header segment which gives some useful info. Currently, the header is arranged as follows: one integer word is used as a flag, telling whether the current buffer is the last buffer in the file. The next integer gives the number of integrals (and their associated labels) in the current buffer. After this header information, each buffer contains two data segments: one for labels, and one for the values of the associated integrals. The datasize for the labels is defined using typedefs, so it is easy to change (currently, it is a short int); likewise for the integral values (currently of type double). The length of these data segments is NBUF * 4 * sizeof(Label) and NBUF * sizeof(Value), respectively. The current use of short ints for Label is really somewhat excessive, making the files somewhat larger than strictly necessary. However, this avoids confusing bit-packing schemes, and instantly allows us to have up to something like 65,536 basis functions addressable. The functions previously documented in this manual have been removed because that documentation is now out of date. Documentation of the library is now created directly from the source code using the {\tt doxygen} program and is available at \\ \htmladdnormallink{ {\tt http://www.psicode.org/doc/libs/doxygen/html}} {http://www.psicode.org/doc/libs/doxygen/html}. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/Makefile.in������������������������������������������������������������������������0000644�0001015�0000765�00000000740�10747662666�014503� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ srcdir = @srcdir@ MAN = progman include ../MakeVars TEX = progman.tex SUBTEX = \ checkpointfile.tex files.tex psi_module.tex \ ip.tex qt.tex svn.tex fundamental_psi.tex \ iwl.tex style.tex debugging.tex introduction.tex \ makefiles.tex documentation.tex io_new.tex other_libs.tex \ testing.tex DVI = $(TEX:%.tex=%.dvi) PS = $(DVI:%.dvi=%.ps) HTML = $(TEX:%.tex=%.html) include ../MakeRules ��������������������������������psi3/doc/progman/makefiles.tex����������������������������������������������������������������������0000644�0001015�0000765�00000010635�07724471660�015115� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % PSI Makefiles Section % % Daniel Crawford, 31 January, 1996 % Updated by TDC, December 2002. % The \file{make} utility is designed to help maintain the many components of a large program, such as PSI. This section will describe the construction and usefulness of Makefiles in PSI, both in developmental code and in production-level modules. We will be concerned only with the GNU Project's \file{make} facility, and not older, less flexible versions. (For a complete explanation of GNU's \file{make}, see \file{info make} or go to \htmladdnormallink{{\tt www.gnu.org}}{http://www.gnu.org}). \subsection{\file{Makefile} Structure} The primary purpose of the \file{make} program is to assist compilation and recompilation of a multi-file program, such that only those portions of the program are recompiled that require it. For example, if a header file is changed, then each source file which \celem{\#include}s that file must be recompiled. \file{make} provides an easy mechanism by which such {\em dependencies} (also called {\em prerequisites}) may be tracked. \file{Makefiles} consist of {\em rules} which describe how to carry out commands. For example, a rule might explain how to compile a single source file, or how to link all the object files into the executable, or perhaps how to clean up all the object files. A rule has the following form \begin{verbatim} target: dependencies command command ... \end{verbatim} The {\em target} is the name of the rule, e.g.~the name of the program or file to be compiled. The first rule given in the \file{Makefile} is the default. The {\em dependencies} are the names of files (often names of other targets, as well) on which the construction of the target depends. A particular target does not necessarily have to have dependencies. The {\em commands} are the actual commands to be executed once all the dependencies are complete. Note that a \file{<TAB>} \ must be used to indent commands under the target name; if you use spaces or don't indent you'll get a (not entirely clear) error message. \file{\file{Makefile}s} may also contain variable definitions to make the file perhaps simpler. \subsection{PSI \file{Makefile}s} The \file{Makefile}s contained in the PSI package are complicated, in part due to the size of the package and the need for code portability. \PSIthree\ \file{Makefile}s are generated automatically from simple input, called {\tt \file{Makefile}.in}, by the \file{configure} script in the top-level \$PSI directory. This script is designed to examine system-specific characterisctics, such as library locations, special compiler options, the existence of certain header files or functions, or Fortran-C cross-linkage conventions, among others. With the information it obtains, it constructs the large number of \file{Makefile}s needed for compilation of PSI's libraries, utilities, and modules. As an example, consider the {\tt \file{Makefile}.in} file associated with {\tt cscf}: \begin{verbatim} srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars PSILIBS = -lPSI_file30 -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 TRUESRC = \ cscf.c cleanup.c dft_inputs.c diis.c dmat.c \ dmat_2.c ecalc.c errchk.c findit.c \ formg2.c formgc.c formgo.c form_vec.c gprgid.c init_scf.c \ packit_c.c packit_o.c rdone.c rdtwo.c rotate_vector.c scf_input.c \ scf_iter.c scf_iter_2.c schmit.c sdot.c shalf.c check_rot.c phases.c\ guess.c sortev.c occ_fun.c init_uhf.c cmatsplit.c dmatuhf.c \ findit_uhf.c uhf_iter.c schmit_uhf.c diis2_uhf.c formg_direct.c \ orb_mix.c BINOBJ = $(TRUESRC:%.c=%.o) ALLOC = include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: cscf.1 $(MKDIRS) $(mandir)/man1 $(INSTALL_INCLUDE) $^ $(mandir)/man1 \end{verbatim} The \file{@string@} directives tell the \file{configure} script where to insert certain variables is has determined from the system. This \file{Makefile} input also includes two external \file{Makefile}s, {\tt MakeVars} and {\tt MakeRules}, both of which are in the parent directory. These files contain (not surprisingly) numerous necessary variables (e.g.~the local C compiler name) and rules (e.g.~how to generate the module itself) for compilation and installation of {\tt cscf}. Similar files exist for the PSI libraries as well. We recommend that programmer's spend some time studying the PSI \file{Makefile} structure. ���������������������������������������������������������������������������������������������������psi3/doc/progman/other_libs.tex���������������������������������������������������������������������0000644�0001015�0000765�00000003131�10576266421�015274� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Other PSI C Libraries % % David Sherrill, 1 February 1996 % There are several other PSI C libraries besides the previously-mentioned \library{libipv1.a}, \library{libpsio.a}, and \library{libciomr.a}: \begin{description} \item\library{libchkpt.a} This library provides many routines for reading from and writing to the ``checkpoint'' file, \FILE{32}. There is generally a different function associated with each quantity in \FILE{32} (such as the SCF energy, nuclear repulsion energy, geometry, basis set information, etc). This library uses the \library{libpsio.a} library to do its input and output. It replaces an older library \library{libfile30.a} which served the same purpose but which used the old I/O from \library{libciomr.a}. \item\library{libiwl.a} The new format for storing two-electron integrals is IWL, or ``integrals with labels.'' The library \library{libiwl.a} provides functions for reading and writing files in the IWL format. The code was written with the goal that it could be easily modified to allow for more than 256 basis functions. Its current limit is 32768 basis functions. \item\library{libqt.a} This is the ``Quantum Trio'' library, which contains a number of very experimental functions or functions which don't otherwise fit anywhere else. \end{description} In this section we will consider these libraries in greater detail. \subsection{The Checkpoint File Library}\label{C_CHECKPOINT} \input{checkpointfile} \subsection{The Integrals-With-Labels Library}\label{C_IWL} \input{iwl} \subsection{The ``Quantum Trio'' Library}\label{C_QT} \input{qt} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/progman.tex������������������������������������������������������������������������0000644�0001015�0000765�00000010155�11114570714�014601� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ % % The PSI Programmer's Manual % \documentclass[12pt]{article} % Use this if you need to include PostScript figures or such. %\usepackage{epsfig} \usepackage{html} \usepackage{epsfig} \usepackage{graphicx} \setlength{\textheight}{9in} \setlength{\textwidth}{6.5in} \setlength{\hoffset}{0in} \setlength{\voffset}{0in} \setlength{\headheight}{0in} \setlength{\headsep}{0in} \setlength{\topmargin}{0in} \setlength{\oddsidemargin}{-0.05in} \setlength{\evensidemargin}{-0.05in} \setlength{\marginparsep}{0in} \setlength{\marginparwidth}{0in} \setlength{\parsep}{0.8ex} \setlength{\parskip}{1ex plus \fill} \baselineskip 18pt \renewcommand{\topfraction}{.8} \renewcommand{\bottomfraction}{.2} \begin{document} %%%%%%%%%%%%%%%%%%%%%%% % Definitions %%%%%%%%%%%%%%%%%%%%%%% \include{macros} \initfuncdesc \begin{center} \ \\ \vspace{2.0in} {\bf {\Large The \PSIthree\ Programmer's Manual}} \\ \vspace{0.5in} T. Daniel Crawford,$^a$ C. David Sherrill,$^b$ Edward F.\ Valeev,$^{a}$ \\ Justin T. Fermann,$^c$ and C. Brian Kellogg$^c$ \\ \ \\ {\em $^a$Department of Chemistry, Virginia Tech, Blacksburg, Virginia 24061} \\ \vspace{0.1in} {\em $^b$Center for Computational Molecular Science and Technology, \mbox{Georgia Institute of Technology,} Atlanta, Georgia 30332-0400} \\ \vspace{0.1in} {\em $^c$Center for Computational Quantum Chemistry, \\ \mbox{University of Georgia,} Athens, Georgia 30602-2525} \\ \ \\ \vspace{0.3in} \PSIthree\ Version: \PSIversion \\ Created on: \today \\ Report bugs to: \PSIemail \\ \end{center} \thispagestyle{empty} \newpage \tableofcontents \newpage \section{Introduction} \input{history} \input{introduction} \section{The \PSIthree\ Source Code}\label{cvs} \input{svn} \section{Fundamental \PSIthree\ Functions}\label{Fundamental_PSI} \input{fundamental_psi} \section{Other \PSIthree\ C Libraries}\label{Other_Libs} \input{other_libs} \section{Programming Style}\label{Style} \input{style} \section{Makefiles in \PSIthree}\label{Makefiles} \input{makefiles} \subsection{Preparing to Develop New \PSIthree\ Code}\label{New_Code} \input{adding_new_code} \section{Code Debugging}\label{Debugging} \input{debugging} \section{Documentation}\label{Documentation} \input{documentation} \section{Creating New Test Cases}\label{Testing} \input{testing} \section{Special Considerations}\label{Special_Considerations} \input{special-considerations} \newpage \appendix %\section{\PSIthree\ Fortran Code}\label{PSI_Fortran} %\input{fortran} \section{\PSIthree\ Reference}\label{PSI_Reference} \input{reference} \section{Text Files in \PSIthree}\label{Text_files} \input{files} %\newpage %\section{Function Declarations for {\tt libipv1.a}}\label{Libipv1} %\input{libipv1.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libipv1.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libipv1.txt}. %\newpage %\section{Function Declarations for {\tt libciomr.a}} \label{Libciomr} %\input{libciomr.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libciomr.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libciomr.txt}. %\newpage %\section{Function Declarations for {\tt libfile30.a}} \label{Libfile30} %\input{libfile30.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libfile30.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libfile30.txt}. %\newpage %\section{Function Declarations for {\tt libread34.a}} \label{Libread34} %\input{libread34.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libread34.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libread34.txt}. %\newpage %\section{Function Declarations for {\tt libqt.a}} \label{Libqt} %\input{libqt.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libqt.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libqt.txt}. %\newpage %\section{Function Declarations for {\tt libiwl.a}} \label{Libiwl} %\input{libiwl.txt} %See \htmladdnormallink{{\tt http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libiwl.txt}}{http://zopyros.ccqc.uga.edu/Docs/Psiman/Devel/Libs/libiwl.txt}. \end{document} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/psi_module.tex���������������������������������������������������������������������0000644�0001015�0000765�00000022375�10757640026�015313� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Essentials of a PSI Module % % David Sherrill, 31 January 1996 % Updates by TDC, 2002. % Updates by CDS for C++, January 2008 % To function as part of the PSI package, a program must incorporate certain required elements. This section will discuss the header files, global variables, and functions required to integrate a new C++ module into \PSIthree. Here is a minimal \PSIthree\ program, whose elements are described below. Note that we are using C++ namespaces to avoid conflicting names between modules, as we are moving toward a single-executable design. However, for legacy reasons certain globals and the \celem{gprgid()} function need to have C-linkage. \begin{verbatim} #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <psifiles.h> #include <libqt/qt.h> #include <libciomr/libciomr.h> #include <libchkpt/chkpt.h> #include <libpsio/psio.h> extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } // begin module-specific namespace namespace psi { namespace MODULE_NAME { // global variables, function declarations, and // #define statements here }} // close namespace psi::MODULE_NAME // main needs to be in the global namespace // but give it access to the psi::MODULE_NAME namespace using namespace psi::MODULE_NAME int main(int argc, char *argv[]) { psi_start(&infile, &outfile, &psi_file_prefix, argc-1, argv+1, 0); ip_cwk_add(":MODULE_NAME"); // MODULE_NAME all caps here psio_init(); psio_ipv1_config(); /* to start timing, tstart(outfile); */ /* Insert code here */ /* to end timing, tstop(outfile); */ psio_done(); psi_stop(infile, outfile, psi_file_prefix); } // this needs to be global namespace also extern "C" { char *gprgid(void) { char *prgid = "MODULE_NAME"; return(prgid); } } // all other stuff is in a special namespace namespace psi { namespace MODULE_NAME { // other stuff below double some_function(int x) { // code } }} // close namespace psi::MODULE_NAME \end{verbatim} In the above example, we have included the typical C++ and PSI header files, although for your specific module you may not need all of these, or perhaps you may need additional ones (such as \celem{string.h} or \celem{math.h}). The PSI include files used in this example are \file{libipv1/ip\_lib.h} (the input parser, described in section \ref{C_IP}), \file{psifiles.h} (definitions of all the PSI file numbers for I/O), \file{libqt/qt.h} (the ``quantum trio'' library, containing miscellaneous math and utility functions), \file{libciomr/libciomr.h} (the old PSI I/O and math routines library -- although it contains no I/O anymore), \file{libchkpt/chkpt.h} (a library for accessing the checkpoint file to obtain quantities such as the SCF or nuclear repulsion energy), and \file{libpsio/psio.h} (the PSI I/O library, see section \ref{C_IO_New}). These include files contain function declarations for all of the functions contained in those libraries. Note that all PSI modules require three global variables with C linkage (i.e., inside an \celem{extern C} statement): \celem{infile}, \celem{outfile}, and \celem{psi\_file\_prefix}. Each PSI module must also have a C-linkage function called \celem{gprgid()} defined as shown. The \celem{main()} function must be in global scope, and other functions should be inside a namespace with the name of the module (which is further contained inside a \celem{psi} namespace). Consult a C++ book if you are unfamiliar with namespaces. The integer function \celem{main()} must be able to handle command-line arguments required by the \PSIthree\ libraries. In particular, all \PSIthree\ modules must be able to pass to the function \celem{psi\_start()} arguments for the user's input and output filenames, as well as a global file prefix to be used for naming standard binary and text data files. (NB: the default names for user input and output are \inputdat\ and \outputdat, respectively, though any name may be used.) The current standard for command-line arguments is for all module-specific arguments ({\em e.g.}, \celem{--quiet}, used in \module{detci}) {\em before} the input, output, and prefix values. The \celem{psi\_start()} function expects to find {\em only} these last three arguments at most, so the programmer should pass as \celem{argv[]} the pointer to the first non-module-specific argument. The above example is appropriate for a \PSIthree\ module that requires no command-line arguments apart from the input/output/prefix globals. See the \PSIthree\ modules \module{input} and \module{detci} for more sophisticated examples. The final argument to \celem{psi\_start()} is an integer whose value indicates whether the output file should be overwitten (1) or appended (0). Most \PSIthree\ modules should choose to append. The \celem{psi\_start()} function initializes the user's input and output files and sets the global variables \celem{infile}, \celem{outfile}, and \celem{psi\_file\_prefix}, based on (in order of priority) the above command-line arguments or the environmental variables \celem{PSI\_INPUT}, \celem{PSI\_OUTPUT}, and \celem{PSI\_PREFIX}. The value of the global file prefix can also be specified in the user's input file. The \celem{psi\_start()} function will also initialize the input parser and sets up a default keyword tree (described in detail in section \ref{C_IP}). This step is required even if the program will not do any input parsing, because some of the functionality of the input parser is assumed by \library{libciomr.a} and \library{libpsio.a}. For instance, opening a binary file via \celem{psio\_open()} (see section \ref{C_IO_New}) requires parsing the \keyword{files} section of the user's input so that a unit number (e.g.~52) can be translated into a filename. The \celem{psi\_stop()} function shuts down the input parser and closes the user's input and output files. Timing information (when the program starts and stops, and how much user, system, and wall-clock time it requires) can be printed to the output file by adding calls to \celem{tstart()} and \celem{tstop()} (from \library{libciomr.a}). The sole purpose of the simple function \celem{gprgid()} is to provide the input parser a means to determine the name of the current program. This allows the input parser to add the name of the program to the input parsing keyword tree. This function is used by \library{libpsio.a}, though the functionality it provides is rarely used. In all but the most trivial of modules, you will probably need to split your code into multiple files. The \PSIthree\ convention is to put the \celem{main()} function, \celem{gprgid()}, and the allocation of \celem{infile}, \celem{outfile}, and \celem{psi\_file\_prefix} into a file with the same name as that of the module (and a .cc extension). Other C++ source files should have everything wrapped within the \celem{psi::MODULE\_NAME} namespace. Any module-specific header files should look like this: \begin{verbatim} #ifndef _psi_src_bin_MODULE_NAME_h #define _psi_src_bin_MODULE_NAME_h // if you need infile, outfile, and psi_file_prefix in the header, // include them like this: extern "C" { extern FILE *infile, *outfile; extern char *psi_file_prefix; } namespace psi { namespace MODULE_NAME { /* header stuff goes here */ }} // namespace psi::MODULE_NAME #endif // header guard \end{verbatim} If you add \celem{infile}, etc, to a header file, make sure they are within an \celem{extern "C"} statement and in the global namespace. Since these variables are defined in MODULE\_NAME.cc, you should also precede these variables with \celem{extern} to tell the compiler they've been allocated in another module (e.g., \celem{extern FILE *infile}). However, that means you then wouldn't be able to include that header file in MODULE\_NAME.cc, because then you'd be telling the compiler both that \celem{infile}, etc, are allocated elsewhere (according to \celem{extern FILE *infile} in the header file) and also that it's allocated in the current file (\celem{FILE *infile} in MODULE\_NAME.cc), an obvious contradition. Most of the official \PSIthree\ modules use a trick defining or undefining a variable called \celem{EXTERN} to avoid this apparent paradox and allow the use of the same header file containing global variables (often called \file{globals.h}) in MODULE\_NAME.cc and all other C++ source files. As always, you are encouraged to avoid use of global variables when at all possible. It is customary to wrap variables that would otherwise be global into data structures such as MOInfo (for things like the number of orbitals) and Params (for user-specified parameters). In the next stage of PSI development, these commonly-used data structures will be standardized as new C++ objects for maximum code re-use and flexibility. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/qt.tex�����������������������������������������������������������������������������0000644�0001015�0000765�00000000732�10605246406�013564� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The \library{libqt.a} library is a miscellaneous collection of useful math and other routines. The documentation previously found in this manual of \library{libqt.a} functions has been removed and is now obsolete. The current documentation of this library is generated automatically from the {\tt doxygen} program and is available on the website at \\ \htmladdnormallink{ {\tt http://www.psicode.org/doc/libs/doxygen/html}} {http://www.psicode.org/doc/libs/doxygen/html}. ��������������������������������������psi3/doc/progman/special-considerations.tex���������������������������������������������������������0000644�0001015�0000765�00000001155�10757640026�017606� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Section on special considerations % % Created by % David Sherrill, 8 January 2003 % % This section is for special gotchas % The following is a list of special items that should be kept in mind while developing PSI code. \begin{description} \item [{\em Malloc() calls on IBM}:] The current IBM compilers (Visual Age C/C++ 5) do not properly prototype {\tt malloc()} unless one includes {\tt stdlib.h}. Please make sure that you {\tt \#include <cstdlib>} anytime you call {\tt malloc()} in a file. If you forget, it will still work in gcc but not on an IBM. \end{description} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/style.tex��������������������������������������������������������������������������0000644�0001015�0000765�00000042764�10754663017�014321� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % Section on coding style % % Created by % David Sherrill, 1 February 1996 % % Revised 27 June 1996 to discuss print levels % % Revised 12 June 2000 to reflect Edward Valeev's % ideas on style % In the context of programming, {\em style} can refer to many things. Foremost, it refers to the format of the source code: how to use indentation, when to add comments, how to name variables, etc. It can also refer to many other issues, such code organization, modularity, and efficiency. Of course, stylistic concerns are often matters of individual taste, but often validity and portability of the code will ultimately depend on stylistic decisions made in the process of code development. Hence some stylistic choices are viewed as universally bad (e.g.\ not prototyping every function just because ``the code compiles and runs fine as is'', etc.). Admittedly, it is easy to not have any style, but it takes years to learn what makes a good one. A good programming style can reduce debugging and maintenance times dramatically. For a large package such as \PSIthree, it is very important to adopt a style which makes the code easy to understand and modify by others. This section will give a few brief pointers on what we consider to be a good style in programming. \subsection{On the Process of Writing Software} At first, we feel appropriate to touch upon the issue of programming style as referred to the approach to writing software. Often, ``programming'' is used to mean ``the process of writing software''. In general one has to distinguish ``writing software'' from ``programming'' meaning ``implementation'', because the latter is only a part of the former and does not include documentation, etc. In general, ``writing software'' should consist of five parts: \begin{enumerate} \item Get a clear and detailed understanding of what the code has to do (idea); \item Identify key concepts and layout code and data organization (design); \item Write source code (implementation); \item Test the program and eliminate errors and/or design flaws (testing); \item Write documentation (documentation). \end{enumerate} Thus, writing software is significantly more complex than just coding. Each stage of writing software is as important as others and should not be considered a waste of time. The code written without a detailed understanding of what it has to do may not work properly. Poorly designed code may not be flexible enough to accomodate some new feature and will be rewritten. Poorly implemented code may be too slow to be useful. A paper full of incorrect values produced by your code may get you fired and will destroy your reputation. A documentation-free code will most likely be useless for others. Of course, for very simple programs design and implementation may be combined and documentation may consist of one line. However, for more complex programs it is recommended that the five stages are followed. This means that you should spend only about 20-40\% of your time writing source code! Our experience shows that following this scheme results in the most efficient approach to programming in the long run. To learn more on each stage of the software writing process, you may want to refer to Stroustrup's ``C++ Programming Language'' book (3rd Ed.) as the most common reference source not dedicated solely to one narrow subject. Besides being an excellent description of C++, it is also an introduction to writing software as well. Particular attention is paid to the issue of {\em program design}. \subsection{Design Issues} Although C lacks the most powerful features of C++ as far as concepts and data organization is concerned, Stroustrup says: ``Remember that much programming can be simply and clearly done using only primitive, data structures, plain functions, and a few library classes.'' This means that one can write many useful and {\em well-written} programs in C. Here are a few pointers that will assist you in structuring your C program: \begin{itemize} \item Identify groups of variables having common function (e.g. basis set, etc.) and organize them into structures. Use several levels of hierarchy if necessary (e.g. a basis set is a collection of basis functions each of which may be described by a structure). This is called ``hierarchical ordering''. \item Think as generally as possible. What you may not need today will be asked for tomorrow. Design data structures that are flexible and modular, i.e. one can be easily modified without affecting the others (e.g. you do not want the structure describing basis sets to know anything about the type of basis functions it contains so that plane waves can be used as easily as Gaussians). \item Write ``constructors'' for the structures, i.e. functions which will initialize data in the structures (e.g. read basis set information). Make as many ``constructors'' as necessary (e.g. basis set info can be read from the checkpoint file or from \pbasisdat). If it is difficult or impossible to write a ``constructor'' for some data structure is a sign that your data hierachy is poorly designed and there are mutual dependencies. Spend more time designing the system. If it doesn't help, then use source code comments heavily to describe the relationships not reflected in the code itself. \item Use global variables sparringly. Placing a variable into global scope leaves it unprotected against ``unauthorized'' use or modification (we are not talking about security here; it is a good idea to protect data from the programmer, because if you do not want some data \celem{A} to be modified by function \celem{B}, do not make \celem{A} available to \celem{B}) and may also have impact on program's performance. Sometimes it is a good idea to use global data to reduce the cost of passing that data to a function. However, the same effect may be achieved by organizing that data into a local structure and passing the structure instead. \item Learn how to use \celem{static} variables local to a source file, it is a very powerful tool to protect data in a C program. \item Organize the source code such as to emphasize further the structure of the program (see section \ref{sourcecode}). \end{itemize} More material on data organization may be found in the Stroustrup's book. \subsection{Organization of Source Code} \label{sourcecode} It is almost universally agreed that breaking the program up into several files is good style. An 11,592 line Fortran program, for example, is very inconvenient to work with, for several reasons: first, it can be difficult to locate a particular function\footnote{Following the convention of C, the words function and subroutine will be used interchangeably.} or statement; second, every recompilation during debugging involves compiling the {\em entire} file. Having several small files generally makes it easier to find a particular piece of code, and only source files which have been modified need to be recompiled, greatly enhancing the efficiency of the programmer during the debugging process. For smaller programs, it is recommended that the programmer have one file for each subroutine, giving each file the name of the subroutine (abbreviated filenames may be specified if the function names are too long). For larger programs, it may be helpful to group similar functions together into a single file. In C programs, we also consider it a good idea to place all the \celem{\#include} statements in a file such as \file{includes.h}, which is subsequently included in each relevant C source file. This is helpful because if a new header file needs to be added, it can simply be added to \file{includes.h}. Furthermore, if a source file suddenly needs to have access to a global variable or function prototype which is already present in one of the header files, then no changes need to be made; the header file is {\em already} included. A downside to this approach is that each header file is included in every source file which includes \file{includes.h}, regardless of whether a particular header file is actually needed by that source file; this could potentially lead to longer compile times, but it isn't likely to make a discernable difference, at least in C.\footnote{C++, which includes much of the actual code in header files, is a different matter.} Along similar lines, it is helpful to {\em define} all global variables in one location (in the main program file, or else within \file{globals.c}), and they should be {\em declared} within another standard location (perhaps \file{globals.h}, or \file{common.h}).\footnote{See page 33 of Kernighan and Ritchie, 2nd Ed., for an explanation of {\em definition vs.~declaration}.} Similarly, if functions are used in several different source code files, the programmer may wish to place all function prototype declarations in a single header file, with the same name as the program or library, or perhaps called \file{protos.h}. \subsection{Formatting the Code} By formatting, we mean how many spaces to indent, when to indent, how to match up braces, when to use capital vs.~lower case letters, and so forth. This is perhaps a more subjective matter than those previously discussed. However, it is certainly true that some formatting styles are easier to read than others. For already existing code, we recommend that you conform to the formatting convention already present in the code. The author of the code is likely to get upset when he sees that you're incorporated code fragments with a formatting style which differs from his! On the other hand, in certain rare cases, it might be more beneficial to incorporate a different style: in the conversion of \module{intder95} from old-style to new-style input, we used lower-case lettering instead of the all-caps style of the original program. This was very useful in helping us locate which changes we had made. It is very common that statements within loops are indented. Loops within loops are indented yet again, and so on. This practice is near-universal and very helpful. Computational chemistry programs often require many nested loops. The consequence of this is that lines can be quite long, due to all those spaces before each line in the innermost loops. If the lines become longer than 80 characters, they are hard to read within a single window; please try to keep your lines to 80 characters or less. This means that you should use about 2-4 spaces per indentation level. The matching of braces, and so forth, is more variable, and we recommend you follow the convention of {\em The C Programming Language}, by Kernighan and Ritchie, or perhaps the style found in other \PSIthree modules. \subsection{Naming of Variables} All non-trivial data must be given descriptive names, although extremely long names are discouraged. For example, compound variable names like \celem{num\_atoms} or \celem{atom\_orbit\_degen} should be preferred to \celem{nat} or \celem{atord}, so that non-specialists could understand the code. It is also a good idea to put a descriptive comment where a non-trivial variable is declared. However, simple loop indices should generally be named \celem{i,j,k} or \celem{p,q,r}. \PSIthree\ programs have certain conventions in place for names of most common variables, as shown in the Table \ref{tbl:VarNaming}. \begin{table} \caption{Some Variable Naming Conventions in \PSIthree} \label{tbl:VarNaming} \begin{center} \begin{tabular}{ll} \hline \hline \multicolumn{1}{c}{Quantity} & \multicolumn{1}{c}{Variable(s)} \\ \hline Number of atoms & na, natom, num\_atoms \\ Number of atoms * 3 & natom3, num\_atoms3 \\ Nuclear repulsion energy & enuc, repnuc \\ SCF energy & escf \\ Number of atomic orbitals & nbfao, num\_ao, nao \\ Number of symmetry orbitals & nbfso, num\_so, nso \\ Size of lower triangle \\ \hspace{0.5cm} of AO's, SO's & nbatri, nbstri; ntri \\ Input file pointer & infile \\ Output file pointer & outfile \\ Offset array & ioff \\ Number of irreps & num\_ir, nirreps \\ Open-shell flag & iopen \\ Number of orbitals per irrep & orbs\_per\_irrep, orbspi, mopi \\ Number of closed-shells \\ \hspace{0.5cm} per irrep & docc, clsd\_per\_irrep, clsdpi \\ Number of open-shells \\ \hspace{0.5cm} per irrep & socc, open\_per\_irrep, openpi \\ Orbital symmetry array & orbsym \\ \hline \hline \end{tabular} \end{center} \end{table} \subsection{Printing Conventions} At the moment, there isn't really a standard method for a PSI program to determine how much information to print to \file{output.dat}. Some older \PSIthree\ modules read a flag usually called \keyword{IPRINT} which is a decimal representation of a binary number. Each bit is a printing option (yes or no) for the different intermediates particular to the program. A practice which is probably preferable is to have a different print flag (boolean) for each of the major intermediates used by a program, and to have an overall print option (decimal) whose value determines the printing verbosity for the quantities without a specific printing option. The overall print option should be specified by a keyword \keyword{PRINT\_LVL}, and its action should be as in Table \ref{tbl:iprint}. \begin{table} \caption{Proposed Conventions for Printing Level} \label{tbl:iprint} \begin{center} \begin{tabular}{ll} \hline \hline 0 & Almost no printing; to be used by driver programs \\ & with -quiet option \\ 1 & Usual printing (default) \\ 2 & Verbose printing \\ 3 & Some debugging information \\ 4 & Substantial debugging information \\ 5 & Print almost all intermediates unless arrays too large \\ 6 & Print everything \\ \hline \hline \end{tabular} \end{center} \end{table} \subsection{Commenting Source Code} \label{code-commenting} It is absolutely mandatory that each source file contains a reasonable number of comments. When a significant variable, data type, or function is declared, it must be accompanied with some descriptive information written in English. Every function prototype or body of it has to be preceeded by a short description of its purpose, algorithm (desirable; if it is too complex, provide a reference), what arguments it takes and what it returns. Having said this, we will argue against excessive commenting: don't add a comment every time you do \celem{i++}! It will actually make your code harder to read. Be sensible. As of spring 2002, we have adopted the {\tt doxygen} program to automatically generate source code documentation. This program scans the source code and looks for special codes which tell it to add the given comment block to the documentation list. The program is very fancy and can generate documentation in man, html, latex, and rtf formats. The file \file{psi3.dox} is the {\tt doxygen} configuration file. The source code should be commented in the following way to work with {\tt doxygen}. The first file of each library defines a ``module'' via a special comment line: \begin{verbatim} /*! \defgroup PSIO libpsio: The PSI I/O Library */ \end{verbatim} Note the exclamation mark above --- it is required by {\tt doxygen}. The line above defines the {\tt PSIO} key and associates it with the title ``The PSI I/O Library.'' Each file belonging to this group will have a special comment of the following form: \begin{verbatim} /*! ** \file ** \ingroup PSIO ** \brief A brief descriptor of the file should go here ** ** A more detailed description of the file can go here */ \end{verbatim} This tells {\tt doxygen} that this file should be documented, it should be added to the list of documented files, and it belongs to the {\tt PSIO} group. Do not put the actual filename after the \celem{file} directive, because current versions of doxygen have trouble when duplicate filenames appear in different modules. Leaving the filename blank after the \celem{file} directive lets doxygen create a unique filename using part of the file path. All functions should be commented as in the following: \begin{verbatim} /*! ** PSIO_CLOSE(): Closes a multivolume PSI direct access file. ** ** \param unit = The PSI unit number used to identify the file to all read ** and write functions. ** \param keep = Boolean to indicate if the file should be deleted (0) or ** retained (1). ** ** Returns: always returns 0 ** ** \ingroup PSIO */ int psio_close(ULI unit, int keep) ... \end{verbatim} This will add the function {\tt psio\_close} to the list, associate it with the {\tt PSIO} module, and define the various arguments. {\em Please note:} In addition to listing all the parameters and return values, it is very valuable to explain what the function actually does. Add this explanation immediately after the function name (see above). This explanation might be a few words, or an entire paragraph, as necessary. It is possible to include formulas in the doxygen documentation and to have them properly formatted when output to HTML or LaTeX. If the formula appears in the running text of a doxygen comment, enclose it within a pair of \celem{$\backslash$f\$} commands, and format it according to LaTeX rules. To make the formula centered on a new line, enclose it within \celem{$\backslash$f[} and \celem{$\backslash$f]}. If the formula is to be in an environment other than simple math mode (e.g., an \celem{eqnarray}, then begin the environment with \celem{$\backslash$f\{environment\}} and end it with \celem{$\backslash$f\}}, where \celem{environment} is something like \celem{eqnarray*}. According to the doxygen documentation, the program can have trouble recovering from typos in formlas, and to get rid of a typo in a formula it may be necessary to remove the file \file{formula.repository} from the HTML directory. ������������psi3/doc/progman/svn.eps.in�������������������������������������������������������������������������0000644�0001015�0000765�00005550621�11114570714�014354� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-3.1 %ADO_DSC_Encoding: MacOS Roman %%Title: svn.pdf %%Creator: Adobe Acrobat 8.0 %%For: crawdad %%CreationDate: 11/30/08, 2:04:03 PM %%BoundingBox: 0 0 777 320 %%HiResBoundingBox: 0 0 777 320 %%CropBox: 0 0 777 320 %%LanguageLevel: 2 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%DocumentNeededFeatures: (atend) %%DocumentSuppliedFeatures: (atend) %%DocumentData: Clean7Bit %%PageOrder: Ascend %%Pages: (atend) %%DocumentProcessColors: (atend) %%DocumentCustomColors: (atend) %%EndComments %%BeginDefaults %%ViewingOrientation: 1 0 0 1 %%EndDefaults %%BeginProlog %%BeginResource: procset Adobe_AGM_Utils 1.0 0 %%Version: 1.0 0 %%Copyright: Copyright(C)2000-2003 Adobe Systems, Inc. All Rights Reserved. systemdict/setpacking known {currentpacking true setpacking}if userdict/Adobe_AGM_Utils 75 dict dup begin put /bdf {bind def}bind def /nd{null def}bdf /xdf {exch def}bdf /ldf {load def}bdf /ddf {put}bdf /xddf {3 -1 roll put}bdf /xpt {exch put}bdf /ndf { exch dup where{ pop pop pop }{ xdf }ifelse }def /cdndf { exch dup currentdict exch known{ pop pop }{ exch def }ifelse }def /gx {get exec}bdf /ps_level /languagelevel where{ pop systemdict/languagelevel gx }{ 1 }ifelse def /level2 ps_level 2 ge def /level3 ps_level 3 ge def /ps_version {version cvr}stopped{-1}if def /set_gvm {currentglobal exch setglobal}bdf /reset_gvm {setglobal}bdf /makereadonlyarray { /packedarray where{pop packedarray }{ array astore readonly}ifelse }bdf /map_reserved_ink_name { dup type/stringtype eq{ dup/Red eq{ pop(_Red_) }{ dup/Green eq{ pop(_Green_) }{ dup/Blue eq{ pop(_Blue_) }{ dup()cvn eq{ pop(Process) }if }ifelse }ifelse }ifelse }if }bdf /AGMUTIL_GSTATE 22 dict def /get_gstate { AGMUTIL_GSTATE begin /AGMUTIL_GSTATE_clr_spc currentcolorspace def /AGMUTIL_GSTATE_clr_indx 0 def /AGMUTIL_GSTATE_clr_comps 12 array def mark currentcolor counttomark {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop /AGMUTIL_GSTATE_fnt rootfont def /AGMUTIL_GSTATE_lw currentlinewidth def /AGMUTIL_GSTATE_lc currentlinecap def /AGMUTIL_GSTATE_lj currentlinejoin def /AGMUTIL_GSTATE_ml currentmiterlimit def currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf /AGMUTIL_GSTATE_sa currentstrokeadjust def /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def /AGMUTIL_GSTATE_op currentoverprint def /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf /AGMUTIL_GSTATE_ht currenthalftone def /AGMUTIL_GSTATE_flt currentflat def end }def /set_gstate { AGMUTIL_GSTATE begin AGMUTIL_GSTATE_clr_spc setcolorspace AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor AGMUTIL_GSTATE_fnt setfont AGMUTIL_GSTATE_lw setlinewidth AGMUTIL_GSTATE_lc setlinecap AGMUTIL_GSTATE_lj setlinejoin AGMUTIL_GSTATE_ml setmiterlimit AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash AGMUTIL_GSTATE_sa setstrokeadjust AGMUTIL_GSTATE_clr_rnd setcolorrendering AGMUTIL_GSTATE_op setoverprint AGMUTIL_GSTATE_bg cvx setblackgeneration AGMUTIL_GSTATE_ucr cvx setundercolorremoval AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or { currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne { mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark }if }{ AGMUTIL_GSTATE_ht sethalftone }ifelse AGMUTIL_GSTATE_flt setflat end }def /get_gstate_and_matrix { AGMUTIL_GSTATE begin /AGMUTIL_GSTATE_ctm matrix currentmatrix def end get_gstate }def /set_gstate_and_matrix { set_gstate AGMUTIL_GSTATE begin AGMUTIL_GSTATE_ctm setmatrix end }def /AGMUTIL_str256 256 string def /AGMUTIL_src256 256 string def /AGMUTIL_dst64 64 string def /AGMUTIL_srcLen nd /AGMUTIL_ndx nd /AGMUTIL_cpd nd /capture_cpd{ //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf }def /thold_halftone { level3 {sethalftone currenthalftone} { dup/HalftoneType get 3 eq { sethalftone currenthalftone }{ begin Width Height mul{ Thresholds read{pop}if }repeat end currenthalftone }ifelse }ifelse }def /rdcmntline { currentfile AGMUTIL_str256 readline pop (%)anchorsearch{pop}if }bdf /filter_cmyk { dup type/filetype ne{ exch()/SubFileDecode filter }{ exch pop } ifelse [ exch { AGMUTIL_src256 readstring pop dup length/AGMUTIL_srcLen exch def /AGMUTIL_ndx 0 def AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ 1 index exch get AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put /AGMUTIL_ndx AGMUTIL_ndx 1 add def }for pop AGMUTIL_dst64 0 AGMUTIL_ndx getinterval } bind /exec cvx ]cvx }bdf /filter_indexed_devn { cvi Names length mul names_index add Lookup exch get }bdf /filter_devn { 4 dict begin /srcStr xdf /dstStr xdf dup type/filetype ne{ 0()/SubFileDecode filter }if [ exch [ /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx currentdict/srcStr get/readstring cvx/pop cvx /dup cvx/length cvx 0/gt cvx[ Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx names_index Names length currentdict/srcStr get length 1 sub{ 1/index cvx/exch cvx/get cvx currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx }for currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx ]cvx/if cvx /end cvx ]cvx bind /exec cvx ]cvx end }bdf /AGMUTIL_imagefile nd /read_image_file { AGMUTIL_imagefile 0 setfileposition 10 dict begin /imageDict xdf /imbufLen Width BitsPerComponent mul 7 add 8 idiv def /imbufIdx 0 def /origDataSource imageDict/DataSource get def /origMultipleDataSources imageDict/MultipleDataSources get def /origDecode imageDict/Decode get def /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse { /imbufCnt imageDict/DataSource get length def /imbufs imbufCnt array def 0 1 imbufCnt 1 sub{ /imbufIdx xdf imbufs imbufIdx imbufLen string put imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put }for DeviceN_PS2{ imageDict begin /DataSource[DataSource/devn_sep_datasource cvx]cvx def /MultipleDataSources false def /Decode[0 1]def end }if }{ /imbuf imbufLen string def Indexed_DeviceN level3 not and DeviceN_NoneName or{ /srcDataStrs[imageDict begin currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse { Width Decode length 2 div mul cvi string }repeat end]def imageDict begin /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def /Decode[0 1]def end }{ imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put imageDict/Decode[0 1]put }ifelse }ifelse imageDict exch load exec imageDict/DataSource origDataSource put imageDict/MultipleDataSources origMultipleDataSources put imageDict/Decode origDecode put end }bdf /write_image_file { begin {(AGMUTIL_imagefile)(w+)file}stopped{ false }{ Adobe_AGM_Utils/AGMUTIL_imagefile xddf 2 dict begin /imbufLen Width BitsPerComponent mul 7 add 8 idiv def MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{ /imbuf imbufLen string def }if 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{ pop MultipleDataSources{ 0 1 DataSource length 1 sub{ DataSource type dup /arraytype eq{ pop DataSource exch gx }{ /filetype eq{ DataSource exch get imbuf readstring pop }{ DataSource exch get }ifelse }ifelse AGMUTIL_imagefile exch writestring }for }{ DataSource type dup /arraytype eq{ pop DataSource exec }{ /filetype eq{ DataSource imbuf readstring pop }{ DataSource }ifelse }ifelse AGMUTIL_imagefile exch writestring }ifelse }for end true }ifelse end }bdf /close_image_file { AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile }def statusdict/product known userdict/AGMP_current_show known not and{ /pstr statusdict/product get def pstr(HP LaserJet 2200)eq pstr(HP LaserJet 4000 Series)eq or pstr(HP LaserJet 4050 Series )eq or pstr(HP LaserJet 8000 Series)eq or pstr(HP LaserJet 8100 Series)eq or pstr(HP LaserJet 8150 Series)eq or pstr(HP LaserJet 5000 Series)eq or pstr(HP LaserJet 5100 Series)eq or pstr(HP Color LaserJet 4500)eq or pstr(HP Color LaserJet 4600)eq or pstr(HP LaserJet 5Si)eq or pstr(HP LaserJet 1200 Series)eq or pstr(HP LaserJet 1300 Series)eq or pstr(HP LaserJet 4100 Series)eq or { userdict/AGMP_current_show/show load put userdict/show{ currentcolorspace 0 get /Pattern eq {false charpath f} {AGMP_current_show}ifelse }put }if currentdict/pstr undef }if /consumeimagedata { begin AGMIMG_init_common currentdict/MultipleDataSources known not {/MultipleDataSources false def}if MultipleDataSources { DataSource 0 get type dup/filetype eq { 1 dict begin /flushbuffer Width cvi string def 1 1 Height cvi { pop 0 1 DataSource length 1 sub { DataSource exch get flushbuffer readstring pop pop }for }for end }if dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and { Width Height mul cvi { 0 1 DataSource length 1 sub {dup DataSource exch gx length exch 0 ne{pop}if}for dup 0 eq {pop exit}if sub dup 0 le {exit}if }loop pop }if } { /DataSource load type dup/filetype eq { 1 dict begin /flushbuffer Width Decode length 2 idiv mul cvi string def 1 1 Height{pop DataSource flushbuffer readstring pop pop}for end }if dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and { Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul { DataSource length dup 0 eq {pop exit}if sub dup 0 le {exit}if }loop pop }if }ifelse end }bdf /addprocs { 2{/exec load}repeat 3 1 roll [5 1 roll]bind cvx }def /modify_halftone_xfer { currenthalftone dup length dict copy begin currentdict 2 index known{ 1 index load dup length dict copy begin currentdict/TransferFunction known{ /TransferFunction load }{ currenttransfer }ifelse addprocs/TransferFunction xdf currentdict end def currentdict end sethalftone }{ currentdict/TransferFunction known{ /TransferFunction load }{ currenttransfer }ifelse addprocs/TransferFunction xdf currentdict end sethalftone pop }ifelse }def /clonearray { dup xcheck exch dup length array exch Adobe_AGM_Core/AGMCORE_tmp -1 ddf { Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf dup type/dicttype eq { Adobe_AGM_Core/AGMCORE_tmp get exch clonedict Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf }if dup type/arraytype eq { Adobe_AGM_Core/AGMCORE_tmp get exch clonearray Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf }if exch dup Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put }forall exch{cvx}if }bdf /clonedict { dup length dict begin { dup type/dicttype eq {clonedict}if dup type/arraytype eq {clonearray}if def }forall currentdict end }bdf /DeviceN_PS2 { /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and }bdf /Indexed_DeviceN { /indexed_colorspace_dict AGMCORE_gget dup null ne{ dup/CSDBase known{ /CSDBase get/CSD get_res/Names known }{ pop false }ifelse }{ pop false }ifelse }bdf /DeviceN_NoneName { /Names where{ pop false Names { (None)eq or }forall }{ false }ifelse }bdf /DeviceN_PS2_inRip_seps { /AGMCORE_in_rip_sep where { pop dup type dup/arraytype eq exch/packedarraytype eq or { dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and { /currentcolorspace exch AGMCORE_gput false }{ true }ifelse }{ true }ifelse }{ true }ifelse }bdf /base_colorspace_type { dup type/arraytype eq{0 get}if }bdf /currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse { /pdfmark_5{cleartomark}bind def }{ /pdfmark_5{pdfmark}bind def }ifelse /ReadBypdfmark_5 { currentfile exch 0 exch/SubFileDecode filter /currentdistillerparams where {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse {flushfile cleartomark} {/PUT pdfmark}ifelse }bdf /ReadBypdfmark_5_string { 2 dict begin /makerString exch def string/tmpString exch def { currentfile tmpString readline pop makerString anchorsearch { pop pop cleartomark exit }{ 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5 }ifelse }loop end }bdf /xpdfm { { dup 0 get/Label eq { aload length[exch 1 add 1 roll/PAGELABEL }{ aload pop [{ThisPage}<<5 -2 roll>>/PUT }ifelse pdfmark_5 }forall }bdf /lmt{ dup 2 index le{exch}if pop dup 2 index ge{exch}if pop }bdf /int{ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop }bdf /ds{ Adobe_AGM_Utils begin }bdf /dt{ currentdict Adobe_AGM_Utils eq{ end }if }bdf systemdict/setpacking known {setpacking}if %%EndResource %%BeginResource: procset Adobe_AGM_Core 2.0 0 %%Version: 2.0 0 %%Copyright: Copyright(C)1997-2005 Adobe Systems, Inc. All Rights Reserved. systemdict/setpacking known { currentpacking true setpacking }if userdict/Adobe_AGM_Core 209 dict dup begin put /Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def /AGMCORE_str256 256 string def /AGMCORE_save nd /AGMCORE_graphicsave nd /AGMCORE_c 0 def /AGMCORE_m 0 def /AGMCORE_y 0 def /AGMCORE_k 0 def /AGMCORE_cmykbuf 4 array def /AGMCORE_screen[currentscreen]cvx def /AGMCORE_tmp 0 def /AGMCORE_&setgray nd /AGMCORE_&setcolor nd /AGMCORE_&setcolorspace nd /AGMCORE_&setcmykcolor nd /AGMCORE_cyan_plate nd /AGMCORE_magenta_plate nd /AGMCORE_yellow_plate nd /AGMCORE_black_plate nd /AGMCORE_plate_ndx nd /AGMCORE_get_ink_data nd /AGMCORE_is_cmyk_sep nd /AGMCORE_host_sep nd /AGMCORE_avoid_L2_sep_space nd /AGMCORE_distilling nd /AGMCORE_composite_job nd /AGMCORE_producing_seps nd /AGMCORE_ps_level -1 def /AGMCORE_ps_version -1 def /AGMCORE_environ_ok nd /AGMCORE_CSD_cache 0 dict def /AGMCORE_currentoverprint false def /AGMCORE_deltaX nd /AGMCORE_deltaY nd /AGMCORE_name nd /AGMCORE_sep_special nd /AGMCORE_err_strings 4 dict def /AGMCORE_cur_err nd /AGMCORE_current_spot_alias false def /AGMCORE_inverting false def /AGMCORE_feature_dictCount nd /AGMCORE_feature_opCount nd /AGMCORE_feature_ctm nd /AGMCORE_ConvertToProcess false def /AGMCORE_Default_CTM matrix def /AGMCORE_Default_PageSize nd /AGMCORE_Default_flatness nd /AGMCORE_currentbg nd /AGMCORE_currentucr nd /AGMCORE_pattern_paint_type 0 def /knockout_unitsq nd currentglobal true setglobal [/CSA/Gradient/Procedure] { /Generic/Category findresource dup length dict copy/Category defineresource pop }forall setglobal /AGMCORE_key_known { where{ /Adobe_AGM_Core_Id known }{ false }ifelse }ndf /flushinput { save 2 dict begin /CompareBuffer 3 -1 roll def /readbuffer 256 string def mark { currentfile readbuffer{readline}stopped {cleartomark mark} { not {pop exit} if CompareBuffer eq {exit} if }ifelse }loop cleartomark end restore }bdf /getspotfunction { AGMCORE_screen exch pop exch pop dup type/dicttype eq{ dup/HalftoneType get 1 eq{ /SpotFunction get }{ dup/HalftoneType get 2 eq{ /GraySpotFunction get }{ pop { abs exch abs 2 copy add 1 gt{ 1 sub dup mul exch 1 sub dup mul add 1 sub }{ dup mul exch dup mul add 1 exch sub }ifelse }bind }ifelse }ifelse }if }def /np {newpath}bdf /clp_npth {clip np}def /eoclp_npth {eoclip np}def /npth_clp {np clip}def /graphic_setup { /AGMCORE_graphicsave save store concat 0 setgray 0 setlinecap 0 setlinejoin 1 setlinewidth []0 setdash 10 setmiterlimit np false setoverprint false setstrokeadjust //Adobe_AGM_Core/spot_alias gx /Adobe_AGM_Image where{ pop Adobe_AGM_Image/spot_alias 2 copy known{ gx }{ pop pop }ifelse }if /sep_colorspace_dict null AGMCORE_gput 100 dict begin /dictstackcount countdictstack def /showpage{}def mark }def /graphic_cleanup { cleartomark dictstackcount 1 countdictstack 1 sub{end}for end AGMCORE_graphicsave restore }def /compose_error_msg { grestoreall initgraphics /Helvetica findfont 10 scalefont setfont /AGMCORE_deltaY 100 def /AGMCORE_deltaX 310 def clippath pathbbox np pop pop 36 add exch 36 add exch moveto 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath 0 AGMCORE_&setgray gsave 1 AGMCORE_&setgray fill grestore 1 setlinewidth gsave stroke grestore currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto /AGMCORE_deltaY 12 def /AGMCORE_tmp 0 def AGMCORE_err_strings exch get { dup 32 eq { pop AGMCORE_str256 0 AGMCORE_tmp getinterval stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt { currentpoint AGMCORE_deltaY sub exch pop clippath pathbbox pop pop pop 44 add exch moveto }if AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show 0 1 AGMCORE_str256 length 1 sub { AGMCORE_str256 exch 0 put }for /AGMCORE_tmp 0 def }{ AGMCORE_str256 exch AGMCORE_tmp xpt /AGMCORE_tmp AGMCORE_tmp 1 add def }ifelse }forall }bdf /AGMCORE_CMYKDeviceNColorspaces[ [/Separation/None/DeviceCMYK{0 0 0}] [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind] [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind] [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind] [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind] [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind] [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind] [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind] [/Separation(Cyan)/DeviceCMYK{0 0 0}] [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind] [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind] [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind] [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}] [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind] [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}] [/DeviceCMYK] ]def /ds{ Adobe_AGM_Core begin /currentdistillerparams where { pop currentdistillerparams/CoreDistVersion get 5000 lt {<</DetectBlends false>>setdistillerparams}if }if /AGMCORE_ps_version xdf /AGMCORE_ps_level xdf errordict/AGM_handleerror known not{ errordict/AGM_handleerror errordict/handleerror get put errordict/handleerror{ Adobe_AGM_Core begin $error/newerror get AGMCORE_cur_err null ne and{ $error/newerror false put AGMCORE_cur_err compose_error_msg }if $error/newerror true put end errordict/AGM_handleerror get exec }bind put }if /AGMCORE_environ_ok ps_level AGMCORE_ps_level ge ps_version AGMCORE_ps_version ge and AGMCORE_ps_level -1 eq or def AGMCORE_environ_ok not {/AGMCORE_cur_err/AGMCORE_bad_environ def}if /AGMCORE_&setgray systemdict/setgray get def level2{ /AGMCORE_&setcolor systemdict/setcolor get def /AGMCORE_&setcolorspace systemdict/setcolorspace get def }if /AGMCORE_currentbg currentblackgeneration def /AGMCORE_currentucr currentundercolorremoval def /AGMCORE_Default_flatness currentflat def /AGMCORE_distilling /product where{ pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and }{ false }ifelse def /AGMCORE_GSTATE AGMCORE_key_known not{ /AGMCORE_GSTATE 21 dict def /AGMCORE_tmpmatrix matrix def /AGMCORE_gstack 32 array def /AGMCORE_gstackptr 0 def /AGMCORE_gstacksaveptr 0 def /AGMCORE_gstackframekeys 14 def /AGMCORE_&gsave/gsave ldf /AGMCORE_&grestore/grestore ldf /AGMCORE_&grestoreall/grestoreall ldf /AGMCORE_&save/save ldf /AGMCORE_&setoverprint/setoverprint ldf /AGMCORE_gdictcopy{ begin {def}forall end }def /AGMCORE_gput{ AGMCORE_gstack AGMCORE_gstackptr get 3 1 roll put }def /AGMCORE_gget{ AGMCORE_gstack AGMCORE_gstackptr get exch get }def /gsave{ AGMCORE_&gsave AGMCORE_gstack AGMCORE_gstackptr get AGMCORE_gstackptr 1 add dup 32 ge{limitcheck}if /AGMCORE_gstackptr exch store AGMCORE_gstack AGMCORE_gstackptr get AGMCORE_gdictcopy }def /grestore{ AGMCORE_&grestore AGMCORE_gstackptr 1 sub dup AGMCORE_gstacksaveptr lt{1 add}if dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse /AGMCORE_gstackptr exch store }def /grestoreall{ AGMCORE_&grestoreall /AGMCORE_gstackptr AGMCORE_gstacksaveptr store }def /save{ AGMCORE_&save AGMCORE_gstack AGMCORE_gstackptr get AGMCORE_gstackptr 1 add dup 32 ge{limitcheck}if /AGMCORE_gstackptr exch store /AGMCORE_gstacksaveptr AGMCORE_gstackptr store AGMCORE_gstack AGMCORE_gstackptr get AGMCORE_gdictcopy }def /setoverprint{ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint }def 0 1 AGMCORE_gstack length 1 sub{ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put }for }if level3/AGMCORE_&sysshfill AGMCORE_key_known not and { /AGMCORE_&sysshfill systemdict/shfill get def /AGMCORE_&sysmakepattern systemdict/makepattern get def /AGMCORE_&usrmakepattern/makepattern load def }if /currentcmykcolor[0 0 0 0]AGMCORE_gput /currentstrokeadjust false AGMCORE_gput /currentcolorspace[/DeviceGray]AGMCORE_gput /sep_tint 0 AGMCORE_gput /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput /sep_colorspace_dict null AGMCORE_gput /devicen_colorspace_dict null AGMCORE_gput /indexed_colorspace_dict null AGMCORE_gput /currentcolor_intent()AGMCORE_gput /customcolor_tint 1 AGMCORE_gput /absolute_colorimetric_crd null AGMCORE_gput /relative_colorimetric_crd null AGMCORE_gput /saturation_crd null AGMCORE_gput /perceptual_crd null AGMCORE_gput currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf << /MaxPatternItem currentsystemparams/MaxPatternCache get >> setuserparams end }def /ps { /setcmykcolor where{ pop Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put }if Adobe_AGM_Core begin /setcmykcolor { 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput 1 sub 4 1 roll 3{ 3 index add neg dup 0 lt{ pop 0 }if 3 1 roll }repeat setrgbcolor pop }ndf /currentcmykcolor { /currentcmykcolor AGMCORE_gget aload pop }ndf /setoverprint {pop}ndf /currentoverprint {false}ndf /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def /AGMCORE_plate_ndx AGMCORE_cyan_plate{ 0 }{ AGMCORE_magenta_plate{ 1 }{ AGMCORE_yellow_plate{ 2 }{ AGMCORE_black_plate{ 3 }{ 4 }ifelse }ifelse }ifelse }ifelse def /AGMCORE_have_reported_unsupported_color_space false def /AGMCORE_report_unsupported_color_space { AGMCORE_have_reported_unsupported_color_space false eq { (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)== Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf }if }def /AGMCORE_composite_job AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def /AGMCORE_in_rip_sep /AGMCORE_in_rip_sep where{ pop AGMCORE_in_rip_sep }{ AGMCORE_distilling { false }{ userdict/Adobe_AGM_OnHost_Seps known{ false }{ level2{ currentpagedevice/Separations 2 copy known{ get }{ pop pop false }ifelse }{ false }ifelse }ifelse }ifelse }ifelse def /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def /AGM_preserve_spots /AGM_preserve_spots where{ pop AGM_preserve_spots }{ AGMCORE_distilling AGMCORE_producing_seps or }ifelse def /AGM_is_distiller_preserving_spotimages { currentdistillerparams/PreserveOverprintSettings known { currentdistillerparams/PreserveOverprintSettings get { currentdistillerparams/ColorConversionStrategy known { currentdistillerparams/ColorConversionStrategy get /sRGB ne }{ true }ifelse }{ false }ifelse }{ false }ifelse }def /convert_spot_to_process where{pop}{ /convert_spot_to_process { //Adobe_AGM_Core begin dup map_alias{ /Name get exch pop }if dup dup(None)eq exch(All)eq or { pop false }{ AGMCORE_host_sep { gsave 1 0 0 0 setcmykcolor currentgray 1 exch sub 0 1 0 0 setcmykcolor currentgray 1 exch sub 0 0 1 0 setcmykcolor currentgray 1 exch sub 0 0 0 1 setcmykcolor currentgray 1 exch sub add add add 0 eq { pop false }{ false setoverprint current_spot_alias false set_spot_alias 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor set_spot_alias currentgray 1 ne }ifelse grestore }{ AGMCORE_distilling { pop AGM_is_distiller_preserving_spotimages not }{ //Adobe_AGM_Core/AGMCORE_name xddf false //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq AGMUTIL_cpd/OverrideSeparations known and { AGMUTIL_cpd/OverrideSeparations get { /HqnSpots/ProcSet resourcestatus { pop pop pop true }if }if }if { AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not }{ gsave [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace false AGMUTIL_cpd/SeparationColorNames 2 copy known { get {AGMCORE_name eq or}forall not }{ pop pop pop true }ifelse grestore }ifelse }ifelse }ifelse }ifelse end }def }ifelse /convert_to_process where{pop}{ /convert_to_process { dup length 0 eq { pop false }{ AGMCORE_host_sep { dup true exch { dup(Cyan)eq exch dup(Magenta)eq 3 -1 roll or exch dup(Yellow)eq 3 -1 roll or exch dup(Black)eq 3 -1 roll or {pop} {convert_spot_to_process and}ifelse } forall { true exch { dup(Cyan)eq exch dup(Magenta)eq 3 -1 roll or exch dup(Yellow)eq 3 -1 roll or exch (Black)eq or and }forall not }{pop false}ifelse }{ false exch { /PhotoshopDuotoneList where{pop false}{true}ifelse { dup(Cyan)eq exch dup(Magenta)eq 3 -1 roll or exch dup(Yellow)eq 3 -1 roll or exch dup(Black)eq 3 -1 roll or {pop} {convert_spot_to_process or}ifelse } { convert_spot_to_process or } ifelse } forall }ifelse }ifelse }def }ifelse /AGMCORE_avoid_L2_sep_space version cvr 2012 lt level2 and AGMCORE_producing_seps not and def /AGMCORE_is_cmyk_sep AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or def /AGM_avoid_0_cmyk where{ pop AGM_avoid_0_cmyk }{ AGM_preserve_spots userdict/Adobe_AGM_OnHost_Seps known userdict/Adobe_AGM_InRip_Seps known or not and }ifelse { /setcmykcolor[ { 4 copy add add add 0 eq currentoverprint and{ pop 0.0005 }if }/exec cvx /AGMCORE_&setcmykcolor load dup type/operatortype ne{ /exec cvx }if ]cvx def }if /AGMCORE_IsSeparationAProcessColor { dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or }def AGMCORE_host_sep{ /setcolortransfer { AGMCORE_cyan_plate{ pop pop pop }{ AGMCORE_magenta_plate{ 4 3 roll pop pop pop }{ AGMCORE_yellow_plate{ 4 2 roll pop pop pop }{ 4 1 roll pop pop pop }ifelse }ifelse }ifelse settransfer } def /AGMCORE_get_ink_data AGMCORE_cyan_plate{ {pop pop pop} }{ AGMCORE_magenta_plate{ {4 3 roll pop pop pop} }{ AGMCORE_yellow_plate{ {4 2 roll pop pop pop} }{ {4 1 roll pop pop pop} }ifelse }ifelse }ifelse def /AGMCORE_RemoveProcessColorNames { 1 dict begin /filtername { dup/Cyan eq 1 index(Cyan)eq or {pop(_cyan_)}if dup/Magenta eq 1 index(Magenta)eq or {pop(_magenta_)}if dup/Yellow eq 1 index(Yellow)eq or {pop(_yellow_)}if dup/Black eq 1 index(Black)eq or {pop(_black_)}if }def dup type/arraytype eq {[exch{filtername}forall]} {filtername}ifelse end }def level3{ /AGMCORE_IsCurrentColor { dup AGMCORE_IsSeparationAProcessColor { AGMCORE_plate_ndx 0 eq {dup(Cyan)eq exch/Cyan eq or}if AGMCORE_plate_ndx 1 eq {dup(Magenta)eq exch/Magenta eq or}if AGMCORE_plate_ndx 2 eq {dup(Yellow)eq exch/Yellow eq or}if AGMCORE_plate_ndx 3 eq {dup(Black)eq exch/Black eq or}if AGMCORE_plate_ndx 4 eq {pop false}if }{ gsave false setoverprint current_spot_alias false set_spot_alias 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor set_spot_alias currentgray 1 ne grestore }ifelse }def /AGMCORE_filter_functiondatasource { 5 dict begin /data_in xdf data_in type/stringtype eq { /ncomp xdf /comp xdf /string_out data_in length ncomp idiv string def 0 ncomp data_in length 1 sub { string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put }for string_out }{ string/string_in xdf /string_out 1 string def /component xdf [ data_in string_in/readstring cvx [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx [/pop cvx()]cvx/ifelse cvx ]cvx/ReusableStreamDecode filter }ifelse end }def /AGMCORE_separateShadingFunction { 2 dict begin /paint? xdf /channel xdf dup type/dicttype eq { begin FunctionType 0 eq { /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def currentdict/Decode known {/Decode Decode channel 2 mul 2 getinterval def}if paint? not {/Decode[1 1]def}if }if FunctionType 2 eq { paint? { /C0[C0 channel get 1 exch sub]def /C1[C1 channel get 1 exch sub]def }{ /C0[1]def /C1[1]def }ifelse }if FunctionType 3 eq { /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def }if currentdict/Range known {/Range[0 1]def}if currentdict end}{ channel get 0 paint? AGMCORE_separateShadingFunction }ifelse end }def /AGMCORE_separateShading { 3 -1 roll begin currentdict/Function known { currentdict/Background known {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf /ColorSpace[/DeviceGray]def }{ ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq { /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def }{ ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put }ifelse ColorSpace 0 get/Separation eq { { [1/exch cvx/sub cvx]cvx }{ [/pop cvx 1]cvx }ifelse ColorSpace 3 3 -1 roll put pop }{ { [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx }{ pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx }ifelse ColorSpace 3 3 -1 roll bind put }ifelse ColorSpace 2/DeviceGray put }ifelse end }def /AGMCORE_separateShadingDict { dup/ColorSpace get dup type/arraytype ne {[exch]}if dup 0 get/DeviceCMYK eq { exch begin currentdict AGMCORE_cyan_plate {0 true}if AGMCORE_magenta_plate {1 true}if AGMCORE_yellow_plate {2 true}if AGMCORE_black_plate {3 true}if AGMCORE_plate_ndx 4 eq {0 false}if dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading currentdict end exch }if dup 0 get/Separation eq { exch begin ColorSpace 1 get dup/None ne exch/All ne and { ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and { ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq { /ColorSpace [ /Separation ColorSpace 1 get /DeviceGray [ ColorSpace 3 get/exec cvx 4 AGMCORE_plate_ndx sub -1/roll cvx 4 1/roll cvx 3[/pop cvx]cvx/repeat cvx 1/exch cvx/sub cvx ]cvx ]def }{ AGMCORE_report_unsupported_color_space AGMCORE_black_plate not { currentdict 0 false AGMCORE_separateShading }if }ifelse }{ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor 0 exch dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading }ifelse }if currentdict end exch }if dup 0 get/DeviceN eq { exch begin ColorSpace 1 get convert_to_process { ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq { /ColorSpace [ /DeviceN ColorSpace 1 get /DeviceGray [ ColorSpace 3 get/exec cvx 4 AGMCORE_plate_ndx sub -1/roll cvx 4 1/roll cvx 3[/pop cvx]cvx/repeat cvx 1/exch cvx/sub cvx ]cvx ]def }{ AGMCORE_report_unsupported_color_space AGMCORE_black_plate not { currentdict 0 false AGMCORE_separateShading /ColorSpace[/DeviceGray]def }if }ifelse }{ currentdict false -1 ColorSpace 1 get { AGMCORE_IsCurrentColor { 1 add exch pop true exch exit }if 1 add }forall exch dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading }ifelse currentdict end exch }if dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not { exch begin ColorSpace dup type/arraytype eq {0 get}if /DeviceGray ne { AGMCORE_report_unsupported_color_space AGMCORE_black_plate not { ColorSpace 0 get/CIEBasedA eq { /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def }if ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or { /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def }if ColorSpace 0 get/CIEBasedDEFG eq { /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def }if currentdict 0 false AGMCORE_separateShading }if }if currentdict end exch }if pop dup/AGMCORE_ignoreshade known { begin /ColorSpace[/Separation(None)/DeviceGray{}]def currentdict end }if }def /shfill { AGMCORE_separateShadingDict dup/AGMCORE_ignoreshade known {pop} {AGMCORE_&sysshfill}ifelse }def /makepattern { exch dup/PatternType get 2 eq { clonedict begin /Shading Shading AGMCORE_separateShadingDict def Shading/AGMCORE_ignoreshade known currentdict end exch {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if exch AGMCORE_&sysmakepattern }{ exch AGMCORE_&usrmakepattern }ifelse }def }if }if AGMCORE_in_rip_sep{ /setcustomcolor { exch aload pop dup 7 1 roll inRip_spot_has_ink not { 4{4 index mul 4 1 roll} repeat /DeviceCMYK setcolorspace 6 -2 roll pop pop }{ //Adobe_AGM_Core begin /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf end [/Separation 4 -1 roll/DeviceCMYK {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} ] setcolorspace }ifelse setcolor }ndf /setseparationgray { [/Separation(All)/DeviceGray{}]setcolorspace_opt 1 exch sub setcolor }ndf }{ /setseparationgray { AGMCORE_&setgray }ndf }ifelse /findcmykcustomcolor { 5 makereadonlyarray }ndf /setcustomcolor { exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop }ndf /has_color /colorimage where{ AGMCORE_producing_seps{ pop true }{ systemdict eq }ifelse }{ false }ifelse def /map_index { 1 index mul exch getinterval{255 div}forall }bdf /map_indexed_devn { Lookup Names length 3 -1 roll cvi map_index }bdf /n_color_components { base_colorspace_type dup/DeviceGray eq{ pop 1 }{ /DeviceCMYK eq{ 4 }{ 3 }ifelse }ifelse }bdf level2{ /mo/moveto ldf /li/lineto ldf /cv/curveto ldf /knockout_unitsq { 1 setgray 0 0 1 1 rectfill }def level2/setcolorspace AGMCORE_key_known not and{ /AGMCORE_&&&setcolorspace/setcolorspace ldf /AGMCORE_ReplaceMappedColor { dup type dup/arraytype eq exch/packedarraytype eq or { /AGMCORE_SpotAliasAry2 where{ begin dup 0 get dup/Separation eq { pop dup length array copy dup dup 1 get current_spot_alias { dup map_alias { false set_spot_alias dup 1 exch setsepcolorspace true set_spot_alias begin /sep_colorspace_dict currentdict AGMCORE_gput pop pop pop [ /Separation Name CSA map_csa MappedCSA /sep_colorspace_proc load ] dup Name end }if }if map_reserved_ink_name 1 xpt }{ /DeviceN eq { dup length array copy dup dup 1 get[ exch{ current_spot_alias{ dup map_alias{ /Name get exch pop }if }if map_reserved_ink_name }forall ]1 xpt }if }ifelse end }if }if }def /setcolorspace { dup type dup/arraytype eq exch/packedarraytype eq or { dup 0 get/Indexed eq { AGMCORE_distilling { /PhotoshopDuotoneList where { pop false }{ true }ifelse }{ true }ifelse { aload pop 3 -1 roll AGMCORE_ReplaceMappedColor 3 1 roll 4 array astore }if }{ AGMCORE_ReplaceMappedColor }ifelse }if DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if }def }if }{ /adj { currentstrokeadjust{ transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform }if }def /mo{ adj moveto }def /li{ adj lineto }def /cv{ 6 2 roll adj 6 2 roll adj 6 2 roll adj curveto }def /knockout_unitsq { 1 setgray 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image }def /currentstrokeadjust{ /currentstrokeadjust AGMCORE_gget }def /setstrokeadjust{ /currentstrokeadjust exch AGMCORE_gput }def /setcolorspace { /currentcolorspace exch AGMCORE_gput }def /currentcolorspace { /currentcolorspace AGMCORE_gget }def /setcolor_devicecolor { base_colorspace_type dup/DeviceGray eq{ pop setgray }{ /DeviceCMYK eq{ setcmykcolor }{ setrgbcolor }ifelse }ifelse }def /setcolor { currentcolorspace 0 get dup/DeviceGray ne{ dup/DeviceCMYK ne{ dup/DeviceRGB ne{ dup/Separation eq{ pop currentcolorspace 3 gx currentcolorspace 2 get }{ dup/Indexed eq{ pop currentcolorspace 3 get dup type/stringtype eq{ currentcolorspace 1 get n_color_components 3 -1 roll map_index }{ exec }ifelse currentcolorspace 1 get }{ /AGMCORE_cur_err/AGMCORE_invalid_color_space def AGMCORE_invalid_color_space }ifelse }ifelse }if }if }if setcolor_devicecolor }def }ifelse /sop/setoverprint ldf /lw/setlinewidth ldf /lc/setlinecap ldf /lj/setlinejoin ldf /ml/setmiterlimit ldf /dsh/setdash ldf /sadj/setstrokeadjust ldf /gry/setgray ldf /rgb/setrgbcolor ldf /cmyk[ /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx /setcmykcolor load dup type/operatortype ne{/exec cvx}if ]cvx bdf level3 AGMCORE_host_sep not and{ /nzopmsc{ 6 dict begin /kk exch def /yy exch def /mm exch def /cc exch def /sum 0 def cc 0 ne{/sum sum 2#1000 or def cc}if mm 0 ne{/sum sum 2#0100 or def mm}if yy 0 ne{/sum sum 2#0010 or def yy}if kk 0 ne{/sum sum 2#0001 or def kk}if AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace sum 0 eq{0}if end setcolor }bdf }{ /nzopmsc/cmyk ldf }ifelse /sep/setsepcolor ldf /devn/setdevicencolor ldf /idx/setindexedcolor ldf /colr/setcolor ldf /csacrd/set_csa_crd ldf /sepcs/setsepcolorspace ldf /devncs/setdevicencolorspace ldf /idxcs/setindexedcolorspace ldf /cp/closepath ldf /clp/clp_npth ldf /eclp/eoclp_npth ldf /f/fill ldf /ef/eofill ldf /@/stroke ldf /nclp/npth_clp ldf /gset/graphic_setup ldf /gcln/graphic_cleanup ldf /ct/concat ldf /cf/currentfile ldf /fl/filter ldf /rs/readstring ldf /AGMCORE_def_ht currenthalftone def /clonedict Adobe_AGM_Utils begin/clonedict load end def /clonearray Adobe_AGM_Utils begin/clonearray load end def currentdict{ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ bind }if def }forall /getrampcolor { /indx exch def 0 1 NumComp 1 sub { dup Samples exch get dup type/stringtype eq{indx get}if exch Scaling exch get aload pop 3 1 roll mul add }for ColorSpaceFamily/Separation eq {sep} { ColorSpaceFamily/DeviceN eq {devn}{setcolor}ifelse }ifelse }bdf /sssetbackground{aload pop setcolor}bdf /RadialShade { 40 dict begin /ColorSpaceFamily xdf /background xdf /ext1 xdf /ext0 xdf /BBox xdf /r2 xdf /c2y xdf /c2x xdf /r1 xdf /c1y xdf /c1x xdf /rampdict xdf /setinkoverprint where{pop/setinkoverprint{pop}def}if gsave BBox length 0 gt { np BBox 0 get BBox 1 get moveto BBox 2 get BBox 0 get sub 0 rlineto 0 BBox 3 get BBox 1 get sub rlineto BBox 2 get BBox 0 get sub neg 0 rlineto closepath clip np }if c1x c2x eq { c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse }{ /slope c2y c1y sub c2x c1x sub div def /theta slope 1 atan def c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if }ifelse gsave clippath c1x c1y translate theta rotate -90 rotate {pathbbox}stopped {0 0 0 0}if /yMax xdf /xMax xdf /yMin xdf /xMin xdf grestore xMax xMin eq yMax yMin eq or { grestore end }{ /max{2 copy gt{pop}{exch pop}ifelse}bdf /min{2 copy lt{pop}{exch pop}ifelse}bdf rampdict begin 40 dict begin background length 0 gt{background sssetbackground gsave clippath fill grestore}if gsave c1x c1y translate theta rotate -90 rotate /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def /c1y 0 def /c1x 0 def /c2x 0 def ext0 { 0 getrampcolor c2y r2 add r1 sub 0.0001 lt { c1x c1y r1 360 0 arcn pathbbox /aymax exch def /axmax exch def /aymin exch def /axmin exch def /bxMin xMin axmin min def /byMin yMin aymin min def /bxMax xMax axmax max def /byMax yMax aymax max def bxMin byMin moveto bxMax byMin lineto bxMax byMax lineto bxMin byMax lineto bxMin byMin lineto eofill }{ c2y r1 add r2 le { c1x c1y r1 0 360 arc fill } { c2x c2y r2 0 360 arc fill r1 r2 eq { /p1x r1 neg def /p1y c1y def /p2x r1 def /p2y c1y def p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto fill }{ /AA r2 r1 sub c2y div def AA -1 eq {/theta 89.99 def} {/theta AA 1 AA dup mul sub sqrt div 1 atan def} ifelse /SS1 90 theta add dup sin exch cos div def /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def /p1y p1x SS1 div neg def /SS2 90 theta sub dup sin exch cos div def /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def /p2y p2x SS2 div neg def r1 r2 gt { /L1maxX p1x yMin p1y sub SS1 div add def /L2maxX p2x yMin p2y sub SS2 div add def }{ /L1maxX 0 def /L2maxX 0 def }ifelse p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto L1maxX L1maxX p1x sub SS1 mul p1y add lineto fill }ifelse }ifelse }ifelse }if c1x c2x sub dup mul c1y c2y sub dup mul add 0.5 exp 0 dtransform dup mul exch dup mul add 0.5 exp 72 div 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt 1 index 1 index lt{exch}if pop /hires xdf hires mul /numpix xdf /numsteps NumSamples def /rampIndxInc 1 def /subsampling false def numpix 0 ne { NumSamples numpix div 0.5 gt { /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def /rampIndxInc NumSamples 1 sub numsteps div def /subsampling true def }if }if /xInc c2x c1x sub numsteps div def /yInc c2y c1y sub numsteps div def /rInc r2 r1 sub numsteps div def /cx c1x def /cy c1y def /radius r1 def np xInc 0 eq yInc 0 eq rInc 0 eq and and { 0 getrampcolor cx cy radius 0 360 arc stroke NumSamples 1 sub getrampcolor cx cy radius 72 hires div add 0 360 arc 0 setlinewidth stroke }{ 0 numsteps { dup subsampling{round cvi}if getrampcolor cx cy radius 0 360 arc /cx cx xInc add def /cy cy yInc add def /radius radius rInc add def cx cy radius 360 0 arcn eofill rampIndxInc add }repeat pop }ifelse ext1 { c2y r2 add r1 lt { c2x c2y r2 0 360 arc fill }{ c2y r1 add r2 sub 0.0001 le { c2x c2y r2 360 0 arcn pathbbox /aymax exch def /axmax exch def /aymin exch def /axmin exch def /bxMin xMin axmin min def /byMin yMin aymin min def /bxMax xMax axmax max def /byMax yMax aymax max def bxMin byMin moveto bxMax byMin lineto bxMax byMax lineto bxMin byMax lineto bxMin byMin lineto eofill }{ c2x c2y r2 0 360 arc fill r1 r2 eq { /p1x r2 neg def /p1y c2y def /p2x r2 def /p2y c2y def p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto fill }{ /AA r2 r1 sub c2y div def AA -1 eq {/theta 89.99 def} {/theta AA 1 AA dup mul sub sqrt div 1 atan def} ifelse /SS1 90 theta add dup sin exch cos div def /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def /p1y c2y p1x SS1 div sub def /SS2 90 theta sub dup sin exch cos div def /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def /p2y c2y p2x SS2 div sub def r1 r2 lt { /L1maxX p1x yMax p1y sub SS1 div add def /L2maxX p2x yMax p2y sub SS2 div add def }{ /L1maxX 0 def /L2maxX 0 def }ifelse p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto L1maxX L1maxX p1x sub SS1 mul p1y add lineto fill }ifelse }ifelse }ifelse }if grestore grestore end end end }ifelse }bdf /GenStrips { 40 dict begin /ColorSpaceFamily xdf /background xdf /ext1 xdf /ext0 xdf /BBox xdf /y2 xdf /x2 xdf /y1 xdf /x1 xdf /rampdict xdf /setinkoverprint where{pop/setinkoverprint{pop}def}if gsave BBox length 0 gt { np BBox 0 get BBox 1 get moveto BBox 2 get BBox 0 get sub 0 rlineto 0 BBox 3 get BBox 1 get sub rlineto BBox 2 get BBox 0 get sub neg 0 rlineto closepath clip np }if x1 x2 eq { y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse }{ /slope y2 y1 sub x2 x1 sub div def /theta slope 1 atan def x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if } ifelse gsave clippath x1 y1 translate theta rotate {pathbbox}stopped {0 0 0 0}if /yMax exch def /xMax exch def /yMin exch def /xMin exch def grestore xMax xMin eq yMax yMin eq or { grestore end }{ rampdict begin 20 dict begin background length 0 gt{background sssetbackground gsave clippath fill grestore}if gsave x1 y1 translate theta rotate /xStart 0 def /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def /ySpan yMax yMin sub def /numsteps NumSamples def /rampIndxInc 1 def /subsampling false def xStart 0 transform xEnd 0 transform 3 -1 roll sub dup mul 3 1 roll sub dup mul add 0.5 exp 72 div 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt 1 index 1 index lt{exch}if pop mul /numpix xdf numpix 0 ne { NumSamples numpix div 0.5 gt { /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def /rampIndxInc NumSamples 1 sub numsteps div def /subsampling true def }if }if ext0 { 0 getrampcolor xMin xStart lt { xMin yMin xMin neg ySpan rectfill }if }if /xInc xEnd xStart sub numsteps div def /x xStart def 0 numsteps { dup subsampling{round cvi}if getrampcolor x yMin xInc ySpan rectfill /x x xInc add def rampIndxInc add }repeat pop ext1{ xMax xEnd gt { xEnd yMin xMax xEnd sub ySpan rectfill }if }if grestore grestore end end end }ifelse }bdf }def /pt { end }def /dt{ }def /pgsv{ //Adobe_AGM_Core/AGMCORE_save save put }def /pgrs{ //Adobe_AGM_Core/AGMCORE_save get restore }def systemdict/findcolorrendering known{ /findcolorrendering systemdict/findcolorrendering get def }if systemdict/setcolorrendering known{ /setcolorrendering systemdict/setcolorrendering get def }if /test_cmyk_color_plate { gsave setcmykcolor currentgray 1 ne grestore }def /inRip_spot_has_ink { dup//Adobe_AGM_Core/AGMCORE_name xddf convert_spot_to_process not }def /map255_to_range { 1 index sub 3 -1 roll 255 div mul add }def /set_csa_crd { /sep_colorspace_dict null AGMCORE_gput begin CSA get_csa_by_name setcolorspace_opt set_crd end } def /map_csa { currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse {pop}{get_csa_by_name/MappedCSA xdf}ifelse }def /setsepcolor { /sep_colorspace_dict AGMCORE_gget begin dup/sep_tint exch AGMCORE_gput TintProc end }def /setdevicencolor { /devicen_colorspace_dict AGMCORE_gget begin Names length copy Names length 1 sub -1 0 { /devicen_tints AGMCORE_gget 3 1 roll xpt }for TintProc end }def /sep_colorspace_proc { /AGMCORE_tmp exch store /sep_colorspace_dict AGMCORE_gget begin currentdict/Components known{ Components aload pop TintMethod/Lab eq{ 2{AGMCORE_tmp mul NComponents 1 roll}repeat LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll }{ TintMethod/Subtractive eq{ NComponents{ AGMCORE_tmp mul NComponents 1 roll }repeat }{ NComponents{ 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll }repeat }ifelse }ifelse }{ ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get aload pop }ifelse end }def /sep_colorspace_gray_proc { /AGMCORE_tmp exch store /sep_colorspace_dict AGMCORE_gget begin GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get end }def /sep_proc_name { dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ pop[/DeviceGray] /sep_colorspace_gray_proc }{ /sep_colorspace_proc }ifelse }def /setsepcolorspace { current_spot_alias{ dup begin Name map_alias{ exch pop }if end }if dup/sep_colorspace_dict exch AGMCORE_gput begin CSA map_csa /AGMCORE_sep_special Name dup()eq exch(All)eq or store AGMCORE_avoid_L2_sep_space{ [/Indexed MappedCSA sep_proc_name 255 exch {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx ]setcolorspace_opt /TintProc{ 255 mul round cvi setcolor }bdf }{ MappedCSA 0 get/DeviceCMYK eq currentdict/Components known and AGMCORE_sep_special not and{ /TintProc[ Components aload pop Name findcmykcustomcolor /exch cvx/setcustomcolor cvx ]cvx bdf }{ AGMCORE_host_sep Name(All)eq and{ /TintProc{ 1 exch sub setseparationgray }bdf }{ AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and AGMCORE_host_sep or Name()eq and{ /TintProc[ MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{ cvx/setcmykcolor cvx }{ cvx/setgray cvx }ifelse ]cvx bdf }{ AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{ /TintProc[ /dup cvx MappedCSA sep_proc_name cvx exch 0 get/DeviceGray eq{ 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx }if /Name cvx/findcmykcustomcolor cvx/exch cvx AGMCORE_host_sep{ AGMCORE_is_cmyk_sep /Name cvx /AGMCORE_IsSeparationAProcessColor load/exec cvx /not cvx/and cvx }{ Name inRip_spot_has_ink not }ifelse [ /pop cvx 1 ]cvx/if cvx /setcustomcolor cvx ]cvx bdf }{ /TintProc{setcolor}bdf [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt }ifelse }ifelse }ifelse }ifelse }ifelse set_crd setsepcolor end }def /additive_blend { 3 dict begin /numarrays xdf /numcolors xdf 0 1 numcolors 1 sub { /c1 xdf 1 0 1 numarrays 1 sub { 1 exch add/index cvx c1/get cvx/mul cvx }for numarrays 1 add 1/roll cvx }for numarrays[/pop cvx]cvx/repeat cvx end }def /subtractive_blend { 3 dict begin /numarrays xdf /numcolors xdf 0 1 numcolors 1 sub { /c1 xdf 1 1 0 1 numarrays 1 sub { 1 3 3 -1 roll add/index cvx c1/get cvx/sub cvx/mul cvx }for /sub cvx numarrays 1 add 1/roll cvx }for numarrays[/pop cvx]cvx/repeat cvx end }def /exec_tint_transform { /TintProc[ /TintTransform cvx/setcolor cvx ]cvx bdf MappedCSA setcolorspace_opt }bdf /devn_makecustomcolor { 2 dict begin /names_index xdf /Names xdf 1 1 1 1 Names names_index get findcmykcustomcolor /devicen_tints AGMCORE_gget names_index get setcustomcolor Names length{pop}repeat end }bdf /setdevicencolorspace { dup/AliasedColorants known{false}{true}ifelse current_spot_alias and{ 7 dict begin /names_index 0 def dup/names_len exch/Names get length def /new_names names_len array def /new_LookupTables names_len array def /alias_cnt 0 def dup/Names get { dup map_alias{ exch pop dup/ColorLookup known{ dup begin new_LookupTables names_index ColorLookup put end }{ dup/Components known{ dup begin new_LookupTables names_index Components put end }{ dup begin new_LookupTables names_index[null null null null]put end }ifelse }ifelse new_names names_index 3 -1 roll/Name get put /alias_cnt alias_cnt 1 add def }{ /name xdf new_names names_index name put dup/LookupTables known{ dup begin new_LookupTables names_index LookupTables names_index get put end }{ dup begin new_LookupTables names_index[null null null null]put end }ifelse }ifelse /names_index names_index 1 add def }forall alias_cnt 0 gt{ /AliasedColorants true def /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def 0 1 names_len 1 sub{ /names_index xdf new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{ /AliasedColorants false def exit }{ new_LookupTables names_index get 0 get null eq{ dup/Names get names_index get/name xdf name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq or or or not{ /AliasedColorants false def exit }if }if }ifelse }for lut_entry_len 1 eq{ /AliasedColorants false def }if AliasedColorants{ dup begin /Names new_names def /LookupTables new_LookupTables def /AliasedColorants true def /NComponents lut_entry_len def /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def currentdict/TTTablesIdx known not{ /TTTablesIdx -1 def }if end }if }if end }if dup/devicen_colorspace_dict exch AGMCORE_gput begin currentdict/AliasedColorants known{ AliasedColorants }{ false }ifelse dup not{ CSA map_csa }if /TintTransform load type/nulltype eq or{ /TintTransform[ 0 1 Names length 1 sub { /TTTablesIdx TTTablesIdx 1 add def dup LookupTables exch get dup 0 get null eq { 1 index Names exch get dup(Cyan)eq { pop exch LookupTables length exch sub /index cvx 0 0 0 } { dup(Magenta)eq { pop exch LookupTables length exch sub /index cvx 0/exch cvx 0 0 }{ (Yellow)eq { exch LookupTables length exch sub /index cvx 0 0 3 -1/roll cvx 0 }{ exch LookupTables length exch sub /index cvx 0 0 0 4 -1/roll cvx }ifelse }ifelse }ifelse 5 -1/roll cvx/astore cvx }{ dup length 1 sub LookupTables length 4 -1 roll sub 1 add /index cvx/mul cvx/round cvx/cvi cvx/get cvx }ifelse Names length TTTablesIdx add 1 add 1/roll cvx }for Names length[/pop cvx]cvx/repeat cvx NComponents Names length TintMethod/Subtractive eq { subtractive_blend }{ additive_blend }ifelse ]cvx bdf }if AGMCORE_host_sep{ Names convert_to_process{ exec_tint_transform } { currentdict/AliasedColorants known{ AliasedColorants not }{ false }ifelse 5 dict begin /AvoidAliasedColorants xdf /painted? false def /names_index 0 def /names_len Names length def AvoidAliasedColorants{ /currentspotalias current_spot_alias def false set_spot_alias }if Names{ AGMCORE_is_cmyk_sep{ dup(Cyan)eq AGMCORE_cyan_plate and exch dup(Magenta)eq AGMCORE_magenta_plate and exch dup(Yellow)eq AGMCORE_yellow_plate and exch (Black)eq AGMCORE_black_plate and or or or{ /devicen_colorspace_dict AGMCORE_gget/TintProc[ Names names_index/devn_makecustomcolor cvx ]cvx ddf /painted? true def }if painted?{exit}if }{ 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{ /devicen_colorspace_dict AGMCORE_gget/TintProc[ Names names_index/devn_makecustomcolor cvx ]cvx ddf /painted? true def exit }if }ifelse /names_index names_index 1 add def }forall AvoidAliasedColorants{ currentspotalias set_spot_alias }if painted?{ /devicen_colorspace_dict AGMCORE_gget/names_index names_index put }{ /devicen_colorspace_dict AGMCORE_gget/TintProc[ names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx 0 0 0 0/setcmykcolor cvx ]cvx ddf }ifelse end }ifelse } { AGMCORE_in_rip_sep{ Names convert_to_process not }{ level3 }ifelse { [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt /TintProc level3 not AGMCORE_in_rip_sep and{ [ Names/length cvx[/pop cvx]cvx/repeat cvx ]cvx bdf }{ {setcolor}bdf }ifelse }{ exec_tint_transform }ifelse }ifelse set_crd /AliasedColorants false def end }def /setindexedcolorspace { dup/indexed_colorspace_dict exch AGMCORE_gput begin currentdict/CSDBase known{ CSDBase/CSD get_res begin currentdict/Names known{ currentdict devncs }{ 1 currentdict sepcs }ifelse AGMCORE_host_sep{ 4 dict begin /compCnt/Names where{pop Names length}{1}ifelse def /NewLookup HiVal 1 add string def 0 1 HiVal{ /tableIndex xdf Lookup dup type/stringtype eq{ compCnt tableIndex map_index }{ exec }ifelse /Names where{ pop setdevicencolor }{ setsepcolor }ifelse currentgray tableIndex exch 255 mul cvi NewLookup 3 1 roll put }for [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt end }{ level3 { currentdict/Names known{ [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt }{ [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt }ifelse }{ [/Indexed MappedCSA HiVal [ currentdict/Names known{ Lookup dup type/stringtype eq {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx} {/exec cvx}ifelse /TintTransform load/exec cvx }{ Lookup dup type/stringtype eq {/exch cvx/get cvx 255/div cvx} {/exec cvx}ifelse CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx }ifelse ]cvx ]setcolorspace_opt }ifelse }ifelse end set_crd } { CSA map_csa AGMCORE_host_sep level2 not and{ 0 0 0 0 setcmykcolor }{ [/Indexed MappedCSA level2 not has_color not and{ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ pop[/DeviceGray] }if HiVal GrayLookup }{ HiVal currentdict/RangeArray known{ { /indexed_colorspace_dict AGMCORE_gget begin Lookup exch dup HiVal gt{ pop HiVal }if NComponents mul NComponents getinterval{}forall NComponents 1 sub -1 0{ RangeArray exch 2 mul 2 getinterval aload pop map255_to_range NComponents 1 roll }for end }bind }{ Lookup }ifelse }ifelse ]setcolorspace_opt set_crd }ifelse }ifelse end }def /setindexedcolor { AGMCORE_host_sep{ /indexed_colorspace_dict AGMCORE_gget begin currentdict/CSDBase known{ CSDBase/CSD get_res begin currentdict/Names known{ map_indexed_devn devn } { Lookup 1 3 -1 roll map_index sep }ifelse end }{ Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll map_index MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse }ifelse end }{ level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{ /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin map_indexed_devn devn end } { setcolor }ifelse }ifelse }def /ignoreimagedata { currentoverprint not{ gsave dup clonedict begin 1 setgray /Decode[0 1]def /DataSource<FF>def /MultipleDataSources false def /BitsPerComponent 8 def currentdict end systemdict/image gx grestore }if consumeimagedata }def /add_res { dup/CSD eq{ pop //Adobe_AGM_Core begin /AGMCORE_CSD_cache load 3 1 roll put end }{ defineresource pop }ifelse }def /del_res { { aload pop exch dup/CSD eq{ pop {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall }{ exch {1 index undefineresource}forall pop }ifelse }forall }def /get_res { dup/CSD eq{ pop dup type dup/nametype eq exch/stringtype eq or{ AGMCORE_CSD_cache exch get }if }{ findresource }ifelse }def /get_csa_by_name { dup type dup/nametype eq exch/stringtype eq or{ /CSA get_res }if }def /paintproc_buf_init { /count get 0 0 put }def /paintproc_buf_next { dup/count get dup 0 get dup 3 1 roll 1 add 0 xpt get }def /cachepaintproc_compress { 5 dict begin currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def /ppdict 20 dict def /string_size 16000 def /readbuffer string_size string def currentglobal true setglobal ppdict 1 array dup 0 1 put/count xpt setglobal /LZWFilter { exch dup length 0 eq{ pop }{ ppdict dup length 1 sub 3 -1 roll put }ifelse {string_size}{0}ifelse string }/LZWEncode filter def { ReadFilter readbuffer readstring exch LZWFilter exch writestring not{exit}if }loop LZWFilter closefile ppdict end }def /cachepaintproc { 2 dict begin currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def /ppdict 20 dict def currentglobal true setglobal ppdict 1 array dup 0 1 put/count xpt setglobal { ReadFilter 16000 string readstring exch ppdict dup length 1 sub 3 -1 roll put not{exit}if }loop ppdict dup dup length 1 sub()put end }def /make_pattern { exch clonedict exch dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub matrix translate exch matrix concatmatrix 1 index begin BBox 0 get XStep div cvi XStep mul/xshift exch neg def BBox 1 get YStep div cvi YStep mul/yshift exch neg def BBox 0 get xshift add BBox 1 get yshift add BBox 2 get xshift add BBox 3 get yshift add 4 array astore /BBox exch def [xshift yshift/translate load null/exec load]dup 3/PaintProc load put cvx/PaintProc exch def end gsave 0 setgray makepattern grestore }def /set_pattern { dup/PatternType get 1 eq{ dup/PaintType get 1 eq{ currentoverprint sop[/DeviceGray]setcolorspace 0 setgray }if }if setpattern }def /setcolorspace_opt { dup currentcolorspace eq{pop}{setcolorspace}ifelse }def /updatecolorrendering { currentcolorrendering/RenderingIntent known{ currentcolorrendering/RenderingIntent get } { Intent/AbsoluteColorimetric eq { /absolute_colorimetric_crd AGMCORE_gget dup null eq } { Intent/RelativeColorimetric eq { /relative_colorimetric_crd AGMCORE_gget dup null eq } { Intent/Saturation eq { /saturation_crd AGMCORE_gget dup null eq } { /perceptual_crd AGMCORE_gget dup null eq }ifelse }ifelse }ifelse { pop null } { /RenderingIntent known{null}{Intent}ifelse }ifelse }ifelse Intent ne{ Intent/ColorRendering{findresource}stopped { pop pop systemdict/findcolorrendering known { Intent findcolorrendering { /ColorRendering findresource true exch } { /ColorRendering findresource product(Xerox Phaser 5400)ne exch }ifelse dup Intent/AbsoluteColorimetric eq { /absolute_colorimetric_crd exch AGMCORE_gput } { Intent/RelativeColorimetric eq { /relative_colorimetric_crd exch AGMCORE_gput } { Intent/Saturation eq { /saturation_crd exch AGMCORE_gput } { Intent/Perceptual eq { /perceptual_crd exch AGMCORE_gput } { pop }ifelse }ifelse }ifelse }ifelse 1 index{exch}{pop}ifelse } {false}ifelse } {true}ifelse { dup begin currentdict/TransformPQR known{ currentdict/TransformPQR get aload pop 3{{}eq 3 1 roll}repeat or or } {true}ifelse currentdict/MatrixPQR known{ currentdict/MatrixPQR get aload pop 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq and and and and and and and and } {true}ifelse end or { clonedict begin /TransformPQR[ {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind ]def /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def currentdict end }if setcolorrendering_opt }if }if }def /set_crd { AGMCORE_host_sep not level2 and{ currentdict/ColorRendering known{ ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if }{ currentdict/Intent known{ updatecolorrendering }if }ifelse currentcolorspace dup type/arraytype eq {0 get}if /DeviceRGB eq { currentdict/UCR known {/UCR}{/AGMCORE_currentucr}ifelse load setundercolorremoval currentdict/BG known {/BG}{/AGMCORE_currentbg}ifelse load setblackgeneration }if }if }def /set_ucrbg { dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval }def /setcolorrendering_opt { dup currentcolorrendering eq{ pop }{ clonedict begin /Intent Intent def currentdict end setcolorrendering }ifelse }def /cpaint_gcomp { convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not { (%end_cpaint_gcomp)flushinput }if }def /cpaint_gsep { //Adobe_AGM_Core/AGMCORE_ConvertToProcess get { (%end_cpaint_gsep)flushinput }if }def /cpaint_gend {np}def /T1_path { currentfile token pop currentfile token pop mo { currentfile token pop dup type/stringtype eq {pop exit}if 0 exch rlineto currentfile token pop dup type/stringtype eq {pop exit}if 0 rlineto }loop }def /T1_gsave level3 {/clipsave} {/gsave}ifelse load def /T1_grestore level3 {/cliprestore} {/grestore}ifelse load def /set_spot_alias_ary { dup inherit_aliases //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf }def /set_spot_normalization_ary { dup inherit_aliases dup length /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if array //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf /AGMCORE_SpotAliasAry where{ pop AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval AGMCORE_SpotAliasAry length }{0}ifelse AGMCORE_SpotAliasAry2 3 1 roll exch putinterval true set_spot_alias }def /inherit_aliases { {dup/Name get map_alias{/CSD put}{pop}ifelse}forall }def /set_spot_alias { /AGMCORE_SpotAliasAry2 where{ /AGMCORE_current_spot_alias 3 -1 roll put }{ pop }ifelse }def /current_spot_alias { /AGMCORE_SpotAliasAry2 where{ /AGMCORE_current_spot_alias get }{ false }ifelse }def /map_alias { /AGMCORE_SpotAliasAry2 where{ begin /AGMCORE_name xdf false AGMCORE_SpotAliasAry2{ dup/Name get AGMCORE_name eq{ /CSD get/CSD get_res exch pop true exit }{ pop }ifelse }forall end }{ pop false }ifelse }bdf /spot_alias { true set_spot_alias /AGMCORE_&setcustomcolor AGMCORE_key_known not{ //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put }if /customcolor_tint 1 AGMCORE_gput //Adobe_AGM_Core begin /setcustomcolor { //Adobe_AGM_Core begin dup/customcolor_tint exch AGMCORE_gput 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not current_spot_alias and{1 index 4 get map_alias}{false}ifelse { false set_spot_alias /sep_colorspace_dict AGMCORE_gget null ne{ exch pop/sep_tint AGMCORE_gget exch }if mark 3 1 roll setsepcolorspace counttomark 0 ne{ setsepcolor }if pop pop true set_spot_alias }{ AGMCORE_&setcustomcolor }ifelse end }bdf end }def /begin_feature { Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if }def /end_feature { 2 dict begin /spd/setpagedevice load def /setpagedevice{get_gstate spd set_gstate}def stopped{$error/newerror false put}if end count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if }def /set_negative { //Adobe_AGM_Core begin /AGMCORE_inverting exch def level2{ currentpagedevice/NegativePrint known AGMCORE_distilling not and{ currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{ true begin_feature true{ <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice }end_feature }if /AGMCORE_inverting false def }if }if AGMCORE_inverting{ [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer AGMCORE_distilling{ erasepage }{ gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore }ifelse }if end }def /lw_save_restore_override{ /md where{ pop md begin initializepage /initializepage{}def /pmSVsetup{}def /endp{}def /pse{}def /psb{}def /orig_showpage where {pop} {/orig_showpage/showpage load def} ifelse /showpage{orig_showpage gR}def end }if }def /pscript_showpage_override{ /NTPSOct95 where { begin showpage save /showpage/restore load def /restore{exch pop}def end }if }def /driver_media_override { /md where{ pop md/initializepage known{ md/initializepage{}put }if md/rC known{ md/rC{4{pop}repeat}put }if }if /mysetup where{ /mysetup[1 0 0 1 0 0]put }if Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put level2 {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if }def /driver_check_media_override { /PrepsDict where {pop} { Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq { Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and }if { Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix }if }ifelse }def AGMCORE_err_strings begin /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def /AGMCORE_invalid_color_space(This job contains an invalid color space. )def end /set_def_ht {AGMCORE_def_ht sethalftone}def /set_def_flat {AGMCORE_Default_flatness setflat}def end systemdict/setpacking known {setpacking}if %%EndResource %%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$None SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0 %%Version: 1.0 0 %%Copyright: Copyright(C)2000-2003 Adobe Systems, Inc. All Rights Reserved. systemdict/setpacking known { currentpacking true setpacking }if userdict/Adobe_AGM_Image 71 dict dup begin put /Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def /nd{ null def }bind def /AGMIMG_&image nd /AGMIMG_&colorimage nd /AGMIMG_&imagemask nd /AGMIMG_mbuf()def /AGMIMG_ybuf()def /AGMIMG_kbuf()def /AGMIMG_c 0 def /AGMIMG_m 0 def /AGMIMG_y 0 def /AGMIMG_k 0 def /AGMIMG_tmp nd /AGMIMG_imagestring0 nd /AGMIMG_imagestring1 nd /AGMIMG_imagestring2 nd /AGMIMG_imagestring3 nd /AGMIMG_imagestring4 nd /AGMIMG_imagestring5 nd /AGMIMG_cnt nd /AGMIMG_fsave nd /AGMIMG_colorAry nd /AGMIMG_override nd /AGMIMG_name nd /AGMIMG_maskSource nd /AGMIMG_flushfilters nd /invert_image_samples nd /knockout_image_samples nd /img nd /sepimg nd /devnimg nd /idximg nd /ds { Adobe_AGM_Core begin Adobe_AGM_Image begin /AGMIMG_&image systemdict/image get def /AGMIMG_&imagemask systemdict/imagemask get def /colorimage where{ pop /AGMIMG_&colorimage/colorimage ldf }if end end }def /ps { Adobe_AGM_Image begin /AGMIMG_ccimage_exists{/customcolorimage where { pop /Adobe_AGM_OnHost_Seps where { pop false }{ /Adobe_AGM_InRip_Seps where { pop false }{ true }ifelse }ifelse }{ false }ifelse }bdf level2{ /invert_image_samples { Adobe_AGM_Image/AGMIMG_tmp Decode length ddf /Decode[Decode 1 get Decode 0 get]def }def /knockout_image_samples { Operator/imagemask ne{ /Decode[1 1]def }if }def }{ /invert_image_samples { {1 exch sub}currenttransfer addprocs settransfer }def /knockout_image_samples { {pop 1}currenttransfer addprocs settransfer }def }ifelse /img/imageormask ldf /sepimg/sep_imageormask ldf /devnimg/devn_imageormask ldf /idximg/indexed_imageormask ldf /_ctype 7 def currentdict{ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ bind }if def }forall }def /pt { end }def /dt { }def /AGMIMG_flushfilters { dup type/arraytype ne {1 array astore}if dup 0 get currentfile ne {dup 0 get flushfile}if { dup type/filetype eq { dup status 1 index currentfile ne and {closefile} {pop} ifelse }{pop}ifelse }forall }def /AGMIMG_init_common { currentdict/T known{/ImageType/T ldf currentdict/T undef}if currentdict/W known{/Width/W ldf currentdict/W undef}if currentdict/H known{/Height/H ldf currentdict/H undef}if currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if currentdict/D known{/Decode/D ldf currentdict/D undef}if currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if currentdict/O known{ /Operator/O load 1 eq{ /imagemask }{ /O load 2 eq{ /image }{ /colorimage }ifelse }ifelse def currentdict/O undef }if currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if currentdict/I known{/Interpolate/I ldf currentdict/I undef}if currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if /DataSource load xcheck not{ DataSource type/arraytype eq{ DataSource 0 get type/filetype eq{ /_Filters DataSource def currentdict/MultipleDataSources known not{ /DataSource DataSource dup length 1 sub get def }if }if }if currentdict/MultipleDataSources known not{ /MultipleDataSources DataSource type/arraytype eq{ DataSource length 1 gt } {false}ifelse def }if }if /NComponents Decode length 2 div def currentdict/SkipImageProc known not{/SkipImageProc{false}def}if }bdf /imageormask_sys { begin AGMIMG_init_common save mark level2{ currentdict Operator/imagemask eq{ AGMIMG_&imagemask }{ use_mask{ process_mask AGMIMG_&image }{ AGMIMG_&image }ifelse }ifelse }{ Width Height Operator/imagemask eq{ Decode 0 get 1 eq Decode 1 get 0 eq and ImageMatrix/DataSource load AGMIMG_&imagemask }{ BitsPerComponent ImageMatrix/DataSource load AGMIMG_&image }ifelse }ifelse currentdict/_Filters known{_Filters AGMIMG_flushfilters}if cleartomark restore end }def /overprint_plate { currentoverprint{ 0 get dup type/nametype eq{ dup/DeviceGray eq{ pop AGMCORE_black_plate not }{ /DeviceCMYK eq{ AGMCORE_is_cmyk_sep not }if }ifelse }{ false exch { AGMOHS_sepink eq or }forall not }ifelse }{ pop false }ifelse }def /process_mask { level3{ dup begin /ImageType 1 def end 4 dict begin /DataDict exch def /ImageType 3 def /InterleaveType 3 def /MaskDict 9 dict begin /ImageType 1 def /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def /ImageMatrix[Width 0 0 Height neg 0 Height]def /NComponents 1 def /BitsPerComponent 1 def /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def currentdict end def currentdict end }if }def /use_mask { dup/Mask known {dup/Mask get}{false}ifelse }def /imageormask { begin AGMIMG_init_common SkipImageProc{ currentdict consumeimagedata } { save mark level2 AGMCORE_host_sep not and{ currentdict Operator/imagemask eq DeviceN_PS2 not and{ imagemask }{ AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{ [/Separation/Black/DeviceGray{}]setcolorspace /Decode[Decode 1 get Decode 0 get]def }if use_mask{ process_mask image }{ DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and { Names convert_to_process not{ 2 dict begin /imageDict xdf /names_index 0 def gsave imageDict write_image_file{ Names{ dup(None)ne{ [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace Operator imageDict read_image_file names_index 0 eq{true setoverprint}if /names_index names_index 1 add def }{ pop }ifelse }forall close_image_file }if grestore end }{ Operator/imagemask eq{ imagemask }{ image }ifelse }ifelse }{ Operator/imagemask eq{ imagemask }{ image }ifelse }ifelse }ifelse }ifelse }{ Width Height Operator/imagemask eq{ Decode 0 get 1 eq Decode 1 get 0 eq and ImageMatrix/DataSource load /Adobe_AGM_OnHost_Seps where{ pop imagemask }{ currentgray 1 ne{ currentdict imageormask_sys }{ currentoverprint not{ 1 AGMCORE_&setgray currentdict imageormask_sys }{ currentdict ignoreimagedata }ifelse }ifelse }ifelse }{ BitsPerComponent ImageMatrix MultipleDataSources{ 0 1 NComponents 1 sub{ DataSource exch get }for }{ /DataSource load }ifelse Operator/colorimage eq{ AGMCORE_host_sep{ MultipleDataSources level2 or NComponents 4 eq and{ AGMCORE_is_cmyk_sep{ MultipleDataSources{ /DataSource[ DataSource 0 get/exec cvx DataSource 1 get/exec cvx DataSource 2 get/exec cvx DataSource 3 get/exec cvx /AGMCORE_get_ink_data cvx ]cvx def }{ /DataSource Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul /DataSource load filter_cmyk 0()/SubFileDecode filter def }ifelse /Decode[Decode 0 get Decode 1 get]def /MultipleDataSources false def /NComponents 1 def /Operator/image def invert_image_samples 1 AGMCORE_&setgray currentdict imageormask_sys }{ currentoverprint not Operator/imagemask eq and{ 1 AGMCORE_&setgray currentdict imageormask_sys }{ currentdict ignoreimagedata }ifelse }ifelse }{ MultipleDataSources NComponents AGMIMG_&colorimage }ifelse }{ true NComponents colorimage }ifelse }{ Operator/image eq{ AGMCORE_host_sep{ /DoImage true def currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse { AGMCORE_black_plate not Operator/imagemask ne and{ /DoImage false def currentdict ignoreimagedata }if }if 1 AGMCORE_&setgray DoImage {currentdict imageormask_sys}if }{ use_mask{ process_mask image }{ image }ifelse }ifelse }{ Operator/knockout eq{ pop pop pop pop pop currentcolorspace overprint_plate not{ knockout_unitsq }if }if }ifelse }ifelse }ifelse }ifelse cleartomark restore }ifelse currentdict/_Filters known{_Filters AGMIMG_flushfilters}if end }def /sep_imageormask { /sep_colorspace_dict AGMCORE_gget begin CSA map_csa begin AGMIMG_init_common SkipImageProc{ currentdict consumeimagedata }{ save mark AGMCORE_avoid_L2_sep_space{ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def }if AGMIMG_ccimage_exists MappedCSA 0 get/DeviceCMYK eq and currentdict/Components known and Name()ne and Name(All)ne and Operator/image eq and AGMCORE_producing_seps not and level2 not and { Width Height BitsPerComponent ImageMatrix [ /DataSource load/exec cvx { 0 1 2 index length 1 sub{ 1 index exch 2 copy get 255 xor put }for }/exec cvx ]cvx bind MappedCSA 0 get/DeviceCMYK eq{ Components aload pop }{ 0 0 0 Components aload pop 1 exch sub }ifelse Name findcmykcustomcolor customcolorimage }{ AGMCORE_producing_seps not{ level2{ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{ [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt /sep_tint AGMCORE_gget setcolor }if currentdict imageormask }{ currentdict Operator/imagemask eq{ imageormask }{ sep_imageormask_lev1 }ifelse }ifelse }{ AGMCORE_host_sep{ Operator/knockout eq{ currentdict/ImageMatrix get concat knockout_unitsq }{ currentgray 1 ne{ AGMCORE_is_cmyk_sep Name(All)ne and{ level2{ Name AGMCORE_IsSeparationAProcessColor { Operator/imagemask eq{ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor }if }{ invert_image_samples }ifelse }{ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ [/Separation Name[/DeviceGray] { sep_colorspace_proc AGMCORE_get_ink_data 1 exch sub }bind ]AGMCORE_&setcolorspace /sep_tint AGMCORE_gget AGMCORE_&setcolor }if }ifelse currentdict imageormask_sys }{ currentdict Operator/imagemask eq{ imageormask_sys }{ sep_image_lev1_sep }ifelse }ifelse }{ Operator/imagemask ne{ invert_image_samples }if currentdict imageormask_sys }ifelse }{ currentoverprint not Name(All)eq or Operator/imagemask eq and{ currentdict imageormask_sys }{ currentoverprint not { gsave knockout_unitsq grestore }if currentdict consumeimagedata }ifelse }ifelse }ifelse }{ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ currentcolorspace 0 get/Separation ne{ [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt /sep_tint AGMCORE_gget setcolor }if }if currentoverprint MappedCSA 0 get/DeviceCMYK eq and Name AGMCORE_IsSeparationAProcessColor not and //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse Name(All)ne and{ imageormask_l2_overprint }{ currentdict imageormask }ifelse }ifelse }ifelse }ifelse cleartomark restore }ifelse currentdict/_Filters known{_Filters AGMIMG_flushfilters}if end end }def /colorSpaceElemCnt { mark currentcolor counttomark dup 2 add 1 roll cleartomark }bdf /devn_sep_datasource { 1 dict begin /dataSource xdf [ 0 1 dataSource length 1 sub{ dup currentdict/dataSource get/exch cvx/get cvx/exec cvx /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx }for ]cvx bind end }bdf /devn_alt_datasource { 11 dict begin /convProc xdf /origcolorSpaceElemCnt xdf /origMultipleDataSources xdf /origBitsPerComponent xdf /origDecode xdf /origDataSource xdf /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def /DataSource origMultipleDataSources { [ BitsPerComponent 8 idiv origDecode length 2 idiv mul string 0 1 origDecode length 2 idiv 1 sub { dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch origDataSource exch get 0()/SubFileDecode filter BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx }for ]bind cvx }{origDataSource}ifelse 0()/SubFileDecode filter def [ origcolorSpaceElemCnt string 0 2 origDecode length 2 sub { dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx }for /convProc load/exec cvx origcolorSpaceElemCnt 1 sub -1 0 { /dup cvx 2/add cvx/index cvx 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx }for ]bind cvx 0()/SubFileDecode filter end }bdf /devn_imageormask { /devicen_colorspace_dict AGMCORE_gget begin CSA map_csa 2 dict begin dup /srcDataStrs[3 -1 roll begin AGMIMG_init_common currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse { Width Decode length 2 div mul cvi { dup 65535 gt{1 add 2 div cvi}{exit}ifelse }loop string }repeat end]def /dstDataStr srcDataStrs 0 get length string def begin AGMIMG_init_common SkipImageProc{ currentdict consumeimagedata }{ save mark AGMCORE_producing_seps not{ level3 not{ Operator/imagemask ne{ /DataSource[[ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def /MultipleDataSources true def /Decode colorSpaceElemCnt[exch{0 1}repeat]def }if }if currentdict imageormask }{ AGMCORE_host_sep{ Names convert_to_process{ CSA get_csa_by_name 0 get/DeviceCMYK eq{ /DataSource Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get devn_alt_datasource filter_cmyk 0()/SubFileDecode filter def /MultipleDataSources false def /Decode[1 0]def /DeviceGray setcolorspace currentdict imageormask_sys }{ AGMCORE_report_unsupported_color_space AGMCORE_black_plate{ /DataSource DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get devn_alt_datasource /MultipleDataSources false def /Decode colorSpaceElemCnt[exch{0 1}repeat]def currentdict imageormask_sys }{ gsave knockout_unitsq grestore currentdict consumeimagedata }ifelse }ifelse } { /devicen_colorspace_dict AGMCORE_gget/names_index known{ Operator/imagemask ne{ MultipleDataSources{ /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def /MultipleDataSources false def }{ /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def }ifelse invert_image_samples }if currentdict imageormask_sys }{ currentoverprint not Operator/imagemask eq and{ currentdict imageormask_sys }{ currentoverprint not { gsave knockout_unitsq grestore }if currentdict consumeimagedata }ifelse }ifelse }ifelse }{ currentdict imageormask }ifelse }ifelse cleartomark restore }ifelse currentdict/_Filters known{_Filters AGMIMG_flushfilters}if end end end }def /imageormask_l2_overprint { currentdict currentcmykcolor add add add 0 eq{ currentdict consumeimagedata }{ level3{ currentcmykcolor /AGMIMG_k xdf /AGMIMG_y xdf /AGMIMG_m xdf /AGMIMG_c xdf Operator/imagemask eq{ [/DeviceN[ AGMIMG_c 0 ne{/Cyan}if AGMIMG_m 0 ne{/Magenta}if AGMIMG_y 0 ne{/Yellow}if AGMIMG_k 0 ne{/Black}if ]/DeviceCMYK{}]setcolorspace AGMIMG_c 0 ne{AGMIMG_c}if AGMIMG_m 0 ne{AGMIMG_m}if AGMIMG_y 0 ne{AGMIMG_y}if AGMIMG_k 0 ne{AGMIMG_k}if setcolor }{ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def [/Indexed [ /DeviceN[ AGMIMG_c 0 ne{/Cyan}if AGMIMG_m 0 ne{/Magenta}if AGMIMG_y 0 ne{/Yellow}if AGMIMG_k 0 ne{/Black}if ] /DeviceCMYK{ AGMIMG_k 0 eq{0}if AGMIMG_y 0 eq{0 exch}if AGMIMG_m 0 eq{0 3 1 roll}if AGMIMG_c 0 eq{0 4 1 roll}if } ] 255 { 255 div mark exch dup dup dup AGMIMG_k 0 ne{ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_y 0 ne{ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_m 0 ne{ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_c 0 ne{ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop counttomark 1 roll }{ pop }ifelse counttomark 1 add -1 roll pop } ]setcolorspace }ifelse imageormask_sys }{ write_image_file{ currentcmykcolor 0 ne{ [/Separation/Black/DeviceGray{}]setcolorspace gsave /Black [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx] cvx modify_halftone_xfer Operator currentdict read_image_file grestore }if 0 ne{ [/Separation/Yellow/DeviceGray{}]setcolorspace gsave /Yellow [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx] cvx modify_halftone_xfer Operator currentdict read_image_file grestore }if 0 ne{ [/Separation/Magenta/DeviceGray{}]setcolorspace gsave /Magenta [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx] cvx modify_halftone_xfer Operator currentdict read_image_file grestore }if 0 ne{ [/Separation/Cyan/DeviceGray{}]setcolorspace gsave /Cyan [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] cvx modify_halftone_xfer Operator currentdict read_image_file grestore }if close_image_file }{ imageormask }ifelse }ifelse }ifelse }def /indexed_imageormask { begin AGMIMG_init_common save mark currentdict AGMCORE_host_sep{ Operator/knockout eq{ /indexed_colorspace_dict AGMCORE_gget dup/CSA known{ /CSA get get_csa_by_name }{ /Names get }ifelse overprint_plate not{ knockout_unitsq }if }{ Indexed_DeviceN{ /devicen_colorspace_dict AGMCORE_gget/names_index known{ indexed_image_lev2_sep }{ currentoverprint not{ knockout_unitsq }if currentdict consumeimagedata }ifelse }{ AGMCORE_is_cmyk_sep{ Operator/imagemask eq{ imageormask_sys }{ level2{ indexed_image_lev2_sep }{ indexed_image_lev1_sep }ifelse }ifelse }{ currentoverprint not{ knockout_unitsq }if currentdict consumeimagedata }ifelse }ifelse }ifelse }{ level2{ Indexed_DeviceN{ /indexed_colorspace_dict AGMCORE_gget begin }{ /indexed_colorspace_dict AGMCORE_gget dup null ne { begin currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and AGMCORE_in_rip_sep and{ [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup] setcolorspace }if end } {pop}ifelse }ifelse imageormask Indexed_DeviceN{ end }if }{ Operator/imagemask eq{ imageormask }{ indexed_imageormask_lev1 }ifelse }ifelse }ifelse cleartomark restore currentdict/_Filters known{_Filters AGMIMG_flushfilters}if end }def /indexed_image_lev2_sep { /indexed_colorspace_dict AGMCORE_gget begin begin Indexed_DeviceN not{ currentcolorspace dup 1/DeviceGray put dup 3 currentcolorspace 2 get 1 add string 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub { dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put }for put setcolorspace }if currentdict Operator/imagemask eq{ AGMIMG_&imagemask }{ use_mask{ process_mask AGMIMG_&image }{ AGMIMG_&image }ifelse }ifelse end end }def /OPIimage { dup type/dicttype ne{ 10 dict begin /DataSource xdf /ImageMatrix xdf /BitsPerComponent xdf /Height xdf /Width xdf /ImageType 1 def /Decode[0 1 def] currentdict end }if dup begin /NComponents 1 cdndf /MultipleDataSources false cdndf /SkipImageProc{false}cdndf /Decode[ 0 currentcolorspace 0 get/Indexed eq{ 2 BitsPerComponent exp 1 sub }{ 1 }ifelse ]cdndf /Operator/image cdndf end /sep_colorspace_dict AGMCORE_gget null eq{ imageormask }{ gsave dup begin invert_image_samples end sep_imageormask grestore }ifelse }def /cachemask_level2 { 3 dict begin /LZWEncode filter/WriteFilter xdf /readBuffer 256 string def /ReadFilter currentfile 0(%EndMask)/SubFileDecode filter /ASCII85Decode filter /RunLengthDecode filter def { ReadFilter readBuffer readstring exch WriteFilter exch writestring not{exit}if }loop WriteFilter closefile end }def /spot_alias { /mapto_sep_imageormask { dup type/dicttype ne{ 12 dict begin /ImageType 1 def /DataSource xdf /ImageMatrix xdf /BitsPerComponent xdf /Height xdf /Width xdf /MultipleDataSources false def }{ begin }ifelse /Decode[/customcolor_tint AGMCORE_gget 0]def /Operator/image def /SkipImageProc{false}def currentdict end sep_imageormask }bdf /customcolorimage { Adobe_AGM_Image/AGMIMG_colorAry xddf /customcolor_tint AGMCORE_gget << /Name AGMIMG_colorAry 4 get /CSA[/DeviceCMYK] /TintMethod/Subtractive /TintProc null /MappedCSA null /NComponents 4 /Components[AGMIMG_colorAry aload pop pop] >> setsepcolorspace mapto_sep_imageormask }ndf Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put /customcolorimage { Adobe_AGM_Image/AGMIMG_override false put current_spot_alias{dup 4 get map_alias}{false}ifelse { false set_spot_alias /customcolor_tint AGMCORE_gget exch setsepcolorspace pop mapto_sep_imageormask true set_spot_alias }{ AGMIMG_&customcolorimage }ifelse }bdf }def /snap_to_device { 6 dict begin matrix currentmatrix dup 0 get 0 eq 1 index 3 get 0 eq and 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop { 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def 0 0 transform AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch itransform/AGMIMG_llY exch def/AGMIMG_llX exch def 1 1 transform AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch itransform/AGMIMG_urY exch def/AGMIMG_urX exch def [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat }{ }ifelse end }def level2 not{ /colorbuf { 0 1 2 index length 1 sub{ dup 2 index exch get 255 exch sub 2 index 3 1 roll put }for }def /tint_image_to_color { begin Width Height BitsPerComponent ImageMatrix /DataSource load end Adobe_AGM_Image begin /AGMIMG_mbuf 0 string def /AGMIMG_ybuf 0 string def /AGMIMG_kbuf 0 string def { colorbuf dup length AGMIMG_mbuf length ne { dup length dup dup /AGMIMG_mbuf exch string def /AGMIMG_ybuf exch string def /AGMIMG_kbuf exch string def }if dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop } addprocs {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage end }def /sep_imageormask_lev1 { begin MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ { 255 mul round cvi GrayLookup exch get }currenttransfer addprocs settransfer currentdict imageormask }{ /sep_colorspace_dict AGMCORE_gget/Components known{ MappedCSA 0 get/DeviceCMYK eq{ Components aload pop }{ 0 0 0 Components aload pop 1 exch sub }ifelse Adobe_AGM_Image/AGMIMG_k xddf Adobe_AGM_Image/AGMIMG_y xddf Adobe_AGM_Image/AGMIMG_m xddf Adobe_AGM_Image/AGMIMG_c xddf AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer currentdict imageormask }{ currentcolortransfer {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll setcolortransfer currentdict tint_image_to_color }ifelse }{ MappedCSA 0 get/DeviceGray eq{ {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer currentdict imageormask }{ MappedCSA 0 get/DeviceCMYK eq{ currentcolortransfer {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll setcolortransfer currentdict tint_image_to_color }{ currentcolortransfer {pop 1}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll setcolortransfer currentdict tint_image_to_color }ifelse }ifelse }ifelse }ifelse end }def /sep_image_lev1_sep { begin /sep_colorspace_dict AGMCORE_gget/Components known{ Components aload pop Adobe_AGM_Image/AGMIMG_k xddf Adobe_AGM_Image/AGMIMG_y xddf Adobe_AGM_Image/AGMIMG_m xddf Adobe_AGM_Image/AGMIMG_c xddf {AGMIMG_c mul 1 exch sub} {AGMIMG_m mul 1 exch sub} {AGMIMG_y mul 1 exch sub} {AGMIMG_k mul 1 exch sub} }{ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} }ifelse AGMCORE_get_ink_data currenttransfer addprocs settransfer currentdict imageormask_sys end }def /indexed_imageormask_lev1 { /indexed_colorspace_dict AGMCORE_gget begin begin currentdict MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer imageormask }{ MappedCSA 0 get/DeviceGray eq{ {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer imageormask }{ MappedCSA 0 get/DeviceCMYK eq{ currentcolortransfer {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll setcolortransfer tint_image_to_color }{ currentcolortransfer {pop 1}exch addprocs 4 1 roll {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll setcolortransfer tint_image_to_color }ifelse }ifelse }ifelse end end }def /indexed_image_lev1_sep { /indexed_colorspace_dict AGMCORE_gget begin begin {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} AGMCORE_get_ink_data currenttransfer addprocs settransfer currentdict imageormask_sys end end }def }if end systemdict/setpacking known {setpacking}if %%EndResource currentdict Adobe_AGM_Utils eq {end} if %%EndProlog %%BeginSetup Adobe_AGM_Utils begin 2 2016 Adobe_AGM_Core/ds gx Adobe_CoolType_Core/ds get exec Adobe_AGM_Image/ds gx [/NamespacePush pdfmark_5 [/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5 [{Doc_Metadata} 2194 (% &end XMP packet& %) ReadBypdfmark_5_string <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.0-c316 44.253921, Sun Oct 01 2006 17:08:23"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmlns:pdf="http://ns.adobe.com/pdf/1.3/" xmlns:dc="http://purl.org/dc/elements/1.1/" xap:CreateDate="2008-11-30T18:56:36Z" xap:ModifyDate="2008-11-30T18:56:36Z" pdf:Producer="Mac OS X 10.5.5 Quartz PDFContext" dc:format="application/pdf"/> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> % &end XMP packet& % [{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5 [{Catalog} {Doc_Metadata} /Metadata pdfmark_5 [/NamespacePop pdfmark_5 currentdict Adobe_AGM_Utils eq {end} if %%EndSetup %%Page: 1 1 %%EndPageComments %%BeginPageSetup Adobe_AGM_Utils begin Adobe_AGM_Core/ps gx <</PageSize [777 320 ] >> setpagedevice Adobe_AGM_Utils/capture_cpd gx Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx Adobe_AGM_Core/ps gx gsave << /0 [/CIEBasedABC 20 dict dup /CreationDate (20080113112328) put dup /RenderingIntent (RelativeColorimetric) put dup /Description (Cinema HD) put dup /ColorSpace (RGB ) put dup /Copyright (Copyright Apple, Inc., 2008) put dup /ProfileID <7100ED4C1D3AB6474DAFEB1CE1509FC6> put dup /DecodeABC [ {{0 0.00012 0.00024 0.00037 0.00056 0.00084 0.00116 0.00153 0.00195 0.00241 0.00291 0.00346 0.00404 0.00467 0.00534 0.00604 0.00679 0.00757 0.00839 0.00925 0.01014 0.01107 0.01204 0.01305 0.01408 0.01516 0.01627 0.01741 0.01859 0.0198 0.02105 0.02233 0.02364 0.02499 0.02637 0.02779 0.02923 0.03071 0.03222 0.03376 0.03534 0.03695 0.03858 0.04025 0.04195 0.04369 0.04545 0.04725 0.04907 0.05093 0.05282 0.05473 0.05668 0.05866 0.06067 0.0627 0.06477 0.06687 0.069 0.07115 0.07334 0.07556 0.0778 0.08008 0.08238 0.08471 0.08707 0.08946 0.09188 0.09433 0.09681 0.09931 0.10184 0.10441 0.107 0.10961 0.11226 0.11493 0.11763 0.12036 0.12312 0.12591 0.12872 0.13156 0.13443 0.13732 0.14025 0.1432 0.14618 0.14918 0.15221 0.15527 0.15836 0.16147 0.16461 0.16778 0.17097 0.17419 0.17744 0.18071 0.18401 0.18734 0.19069 0.19407 0.19748 0.20091 0.20437 0.20786 0.21137 0.2149 0.21847 0.22206 0.22567 0.22931 0.23298 0.23668 0.24039 0.24414 0.24791 0.25171 0.25553 0.25937 0.26325 0.26715 0.27107 0.27502 0.27899 0.28299 0.28702 0.29107 0.29515 0.29925 0.30337 0.30752 0.3117 0.3159 0.32013 0.32438 0.32866 0.33296 0.33728 0.34163 0.34601 0.35041 0.35483 0.35928 0.36376 0.36826 0.37278 0.37733 0.3819 0.3865 0.39112 0.39577 0.40044 0.40513 0.40985 0.41459 0.41936 0.42415 0.42897 0.43381 0.43867 0.44356 0.44847 0.45341 0.45837 0.46335 0.46836 0.47339 0.47845 0.48353 0.48864 0.49376 0.49891 0.50409 0.50929 0.51451 0.51976 0.52503 0.53032 0.53564 0.54098 0.54634 0.55173 0.55714 0.56258 0.56804 0.57352 0.57902 0.58455 0.5901 0.59568 0.60128 0.6069 0.61255 0.61821 0.62391 0.62962 0.63536 0.64112 0.6469 0.65271 0.65854 0.66439 0.67027 0.67617 0.68209 0.68804 0.69401 0.7 0.70601 0.71205 0.71811 0.72419 0.73029 0.73642 0.74257 0.74875 0.75494 0.76116 0.7674 0.77367 0.77996 0.78627 0.7926 0.79895 0.80533 0.81173 0.81815 0.8246 0.83106 0.83755 0.84407 0.8506 0.85716 0.86374 0.87034 0.87696 0.88361 0.89028 0.89697 0.90368 0.91042 0.91718 0.92396 0.93076 0.93758 0.94443 0.9513 0.95819 0.9651 0.97204 0.979 0.98598 0.99298 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind dup dup ] put dup /MatrixABC [ 0.2351988414 0.1247711886 0.004326573 0.1711653694 0.3343248537 0.0431970538 0.075744586 0.0409115872 0.3649353646 ] put dup /MatrixLMN [1.9999694824 0 0 0 1.9999694824 0 0 0 1.9999694824] put dup /BlackPoint [0 0 0] put dup /WhitePoint [0.9642028809 1 0.8249053955] put] /CSA add_res /CSA /0 get_csa_by_name /Intent /RelativeColorimetric >> csacrd grestore Adobe_AGM_Core/pt gx %%EndPageSetup 1 -1 scale 0 -320 translate pgsv [1 0 0 1 0 0 ]ct gsave np gsave 0 0 mo 0 320 li 777 320 li 777 0 li cp clp [1 0 0 1 0 0 ]ct gsave 776.997 320.004 mo 0 320.004 li 0 0 li 776.997 0 li 776.997 320.004 li clp -0.240037 -0.24006 mo -0.240037 213.653 li 282.764 213.653 li 282.764 -0.24006 li cp false sop gsave << /1 /CIEBasedDEFG /ColorSpaceFamily resourcestatus {pop pop false} {true} ifelse {[/DeviceCMYK]} {[/CIEBasedDEFG 20 dict dup /CreationDate (20000726054153) put dup /RenderingIntent (RelativeColorimetric) put dup /Description (U.S. Web Coated (SWOP) v2) put dup /ColorSpace (CMYK) put dup /Copyright (Copyright 2000 Adobe Systems, Inc.) put dup /ProfileID <79D7E984EA3AC74EED7CC92BF6B22A0D> put dup /DecodeDEFG [ {{0 0.00833 0.01601 0.02278 0.02885 0.03445 0.03976 0.04486 0.04976 0.05451 0.05916 0.06374 0.06831 0.07287 0.07742 0.08193 0.08642 0.09088 0.09529 0.09965 0.10399 0.10832 0.11265 0.11733 0.12201 0.12661 0.13116 0.13566 0.14012 0.14456 0.14896 0.15337 0.15775 0.16214 0.16652 0.17091 0.17529 0.17967 0.18404 0.18843 0.19281 0.19715 0.20147 0.20579 0.21012 0.21445 0.21878 0.2231 0.22742 0.23173 0.23605 0.24038 0.2447 0.24899 0.25327 0.25752 0.26179 0.26608 0.27035 0.27463 0.27892 0.2832 0.28749 0.29178 0.29607 0.30036 0.30462 0.30885 0.31307 0.31731 0.32154 0.32576 0.33 0.33423 0.33847 0.34271 0.34694 0.35117 0.35541 0.35963 0.36381 0.36798 0.37213 0.37629 0.38044 0.38459 0.38874 0.39289 0.39704 0.40118 0.40533 0.40947 0.41359 0.41772 0.42181 0.42586 0.4299 0.43393 0.43796 0.44199 0.446 0.45002 0.45402 0.45802 0.46202 0.466 0.46999 0.47397 0.47794 0.48191 0.48584 0.48973 0.49361 0.49748 0.50135 0.50521 0.50907 0.51292 0.51677 0.52061 0.52444 0.52827 0.53209 0.5359 0.53972 0.54353 0.54733 0.55112 0.55487 0.5586 0.56232 0.56604 0.56974 0.57345 0.57716 0.58086 0.58456 0.58825 0.59194 0.59564 0.59933 0.60302 0.6067 0.61037 0.61406 0.61775 0.62142 0.62508 0.62871 0.63233 0.63594 0.63955 0.64316 0.64677 0.65038 0.654 0.65762 0.66123 0.66484 0.66846 0.67207 0.67569 0.67931 0.68292 0.68654 0.69016 0.69378 0.69741 0.70103 0.70464 0.70826 0.71186 0.71547 0.71908 0.72269 0.7263 0.72991 0.73352 0.73713 0.74074 0.74436 0.74797 0.75158 0.7552 0.75881 0.76243 0.76605 0.76965 0.77327 0.77689 0.7805 0.78411 0.78772 0.79132 0.79488 0.79844 0.80199 0.80554 0.80909 0.81265 0.81619 0.81973 0.82327 0.82681 0.83034 0.83386 0.83739 0.8409 0.84442 0.84792 0.85143 0.85491 0.8584 0.86188 0.86536 0.86884 0.87232 0.87579 0.87925 0.88272 0.88617 0.8896 0.89296 0.89631 0.89965 0.90297 0.90629 0.90958 0.91288 0.91615 0.91941 0.92265 0.92585 0.92906 0.93228 0.93569 0.93908 0.94245 0.94579 0.94912 0.95242 0.95571 0.95898 0.96223 0.96547 0.96871 0.97191 0.97505 0.97815 0.98119 0.98414 0.98699 0.98974 0.9924 0.99497 0.99749 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind {{0 0.00742 0.01421 0.02013 0.02537 0.03016 0.03467 0.03901 0.04317 0.04716 0.05109 0.05495 0.05879 0.06266 0.0665 0.07033 0.07415 0.07794 0.08171 0.08546 0.08916 0.09284 0.09654 0.10056 0.10457 0.10852 0.11241 0.11628 0.12011 0.12393 0.12774 0.13154 0.13533 0.13913 0.14293 0.14674 0.15056 0.15438 0.15821 0.16204 0.1659 0.16976 0.17363 0.17749 0.18131 0.18513 0.18896 0.19279 0.19664 0.20048 0.20434 0.2082 0.21208 0.21598 0.21988 0.2238 0.22766 0.23153 0.23539 0.23928 0.24317 0.24707 0.25099 0.25492 0.25886 0.26281 0.26676 0.27072 0.2747 0.27864 0.28255 0.28646 0.29039 0.29433 0.29827 0.30222 0.30618 0.31015 0.31413 0.31811 0.3221 0.3261 0.33009 0.33404 0.33796 0.34188 0.34581 0.34974 0.35367 0.35762 0.36156 0.3655 0.36944 0.3734 0.37734 0.38128 0.38524 0.38918 0.39307 0.39693 0.40078 0.40464 0.4085 0.41235 0.4162 0.42005 0.42391 0.42776 0.43161 0.43545 0.43929 0.44313 0.44696 0.45079 0.45458 0.45833 0.46207 0.46581 0.46954 0.47328 0.47701 0.48074 0.48446 0.48819 0.49191 0.49563 0.49934 0.50306 0.50677 0.51048 0.51418 0.51788 0.52154 0.52517 0.52879 0.53242 0.53604 0.53966 0.54328 0.54691 0.55053 0.55415 0.55778 0.5614 0.56503 0.56867 0.5723 0.57594 0.57958 0.58322 0.58687 0.59052 0.59416 0.59776 0.60135 0.60495 0.60855 0.61216 0.61578 0.6194 0.62304 0.62667 0.63033 0.63399 0.63766 0.64134 0.64502 0.64872 0.65243 0.65616 0.65989 0.66362 0.66737 0.67114 0.67491 0.67868 0.68246 0.68625 0.69005 0.69385 0.69767 0.70152 0.70537 0.70922 0.7131 0.71698 0.72089 0.7248 0.72872 0.73265 0.7366 0.74055 0.74453 0.74851 0.75249 0.7565 0.76051 0.76454 0.76856 0.77254 0.77652 0.78051 0.78451 0.78852 0.79254 0.79656 0.80059 0.80462 0.80867 0.81271 0.81675 0.82081 0.82485 0.82892 0.83299 0.83706 0.84114 0.84523 0.84932 0.8534 0.85749 0.86158 0.86569 0.86978 0.87387 0.87788 0.88186 0.88584 0.88981 0.89377 0.89773 0.90168 0.90561 0.90955 0.9135 0.91765 0.9218 0.92593 0.93005 0.93416 0.93826 0.94233 0.9464 0.95046 0.95452 0.95858 0.96262 0.96662 0.97057 0.97447 0.97831 0.98208 0.98576 0.98938 0.99295 0.99647 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind {{0 0.00786 0.01496 0.02105 0.02638 0.03125 0.03581 0.04019 0.04438 0.04847 0.05246 0.05638 0.06027 0.06416 0.06804 0.07187 0.07569 0.07946 0.0832 0.08691 0.09061 0.09429 0.09797 0.10199 0.10602 0.10997 0.11385 0.11767 0.12147 0.12525 0.129 0.13274 0.13648 0.14021 0.14393 0.14765 0.15138 0.1551 0.15881 0.16253 0.16626 0.16998 0.17369 0.1774 0.18111 0.18483 0.18854 0.19225 0.19597 0.19968 0.20339 0.20711 0.21084 0.21457 0.2183 0.22202 0.22575 0.22948 0.23323 0.23698 0.24074 0.24451 0.24828 0.25206 0.25584 0.25964 0.26345 0.26725 0.27106 0.27487 0.27868 0.2825 0.28633 0.29017 0.29402 0.29787 0.30174 0.30561 0.30949 0.31337 0.31728 0.32116 0.32505 0.32894 0.33283 0.33673 0.34064 0.34454 0.34846 0.35238 0.3563 0.36022 0.36416 0.36808 0.37201 0.37594 0.37986 0.38377 0.38768 0.3916 0.39551 0.39942 0.40334 0.40724 0.41115 0.41505 0.41895 0.42285 0.42675 0.43064 0.43453 0.43841 0.44227 0.44613 0.44999 0.45384 0.45768 0.46152 0.46535 0.46918 0.473 0.47682 0.48063 0.48444 0.48824 0.49203 0.49583 0.49961 0.50339 0.50716 0.51091 0.51466 0.5184 0.52215 0.52589 0.52963 0.53336 0.53709 0.54082 0.54456 0.54829 0.55202 0.55575 0.55948 0.56322 0.56696 0.5707 0.57444 0.57819 0.58194 0.58569 0.58945 0.59322 0.597 0.6008 0.60459 0.60841 0.61223 0.61607 0.61992 0.62378 0.62766 0.63156 0.63547 0.6394 0.64334 0.6473 0.65129 0.65529 0.65932 0.66336 0.66741 0.6715 0.67561 0.67973 0.68387 0.68803 0.69221 0.69642 0.70065 0.70489 0.70915 0.71343 0.71773 0.72204 0.72638 0.73073 0.7351 0.73948 0.74386 0.74827 0.75268 0.75709 0.76151 0.76595 0.77038 0.77481 0.77926 0.78371 0.78814 0.79258 0.79702 0.80144 0.80586 0.81027 0.81467 0.81905 0.82342 0.82776 0.83209 0.83641 0.8407 0.84496 0.84921 0.85343 0.85763 0.86181 0.86599 0.87013 0.87425 0.87832 0.88237 0.88639 0.89037 0.89432 0.89822 0.90208 0.9059 0.90967 0.9134 0.91707 0.9207 0.92428 0.92781 0.93139 0.93533 0.9392 0.94301 0.94674 0.9504 0.954 0.95752 0.96099 0.96439 0.96775 0.97106 0.97429 0.9774 0.98039 0.98326 0.98601 0.9886 0.99106 0.9934 0.99565 0.99784 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind {{0 0.00719 0.01382 0.0196 0.02464 0.02919 0.03344 0.0375 0.04144 0.04526 0.04897 0.05261 0.05623 0.05986 0.06346 0.06704 0.07059 0.07412 0.07763 0.08113 0.08461 0.08808 0.09155 0.09537 0.09921 0.10297 0.10665 0.11029 0.11388 0.11745 0.12103 0.12457 0.12813 0.13167 0.13522 0.13877 0.14232 0.14588 0.14944 0.15299 0.15656 0.16015 0.16372 0.16732 0.17092 0.17452 0.17812 0.18173 0.18533 0.18894 0.19255 0.19616 0.19978 0.20341 0.20703 0.21067 0.21431 0.21795 0.2216 0.22526 0.22892 0.23259 0.23625 0.23991 0.24359 0.24727 0.25096 0.25464 0.25833 0.26202 0.26573 0.26942 0.27313 0.27682 0.28053 0.28424 0.28795 0.29165 0.29537 0.29909 0.3028 0.30652 0.31023 0.31394 0.31765 0.32135 0.32505 0.32874 0.33243 0.33611 0.33979 0.34346 0.34714 0.35081 0.35448 0.35815 0.36182 0.36548 0.36914 0.3728 0.37645 0.3801 0.38373 0.38735 0.39098 0.3946 0.39822 0.40184 0.40546 0.40907 0.41268 0.41628 0.41989 0.42349 0.42708 0.43067 0.43426 0.43784 0.44141 0.44497 0.44853 0.45208 0.45562 0.45916 0.4627 0.46624 0.46978 0.47332 0.47684 0.48037 0.4839 0.48742 0.49094 0.49446 0.49798 0.50149 0.505 0.50851 0.51199 0.51548 0.51896 0.52243 0.5259 0.52938 0.53286 0.53634 0.53982 0.54329 0.54677 0.55025 0.55373 0.55722 0.56071 0.5642 0.56769 0.57119 0.57468 0.57819 0.5817 0.58521 0.58873 0.59225 0.59578 0.59932 0.60286 0.60641 0.60997 0.61355 0.61712 0.62072 0.62432 0.62794 0.63157 0.63521 0.63887 0.64254 0.64622 0.64991 0.65361 0.65734 0.66109 0.66485 0.66862 0.67241 0.67621 0.68003 0.68385 0.68768 0.69153 0.6954 0.69928 0.70317 0.70708 0.71102 0.71496 0.71894 0.72293 0.72694 0.73096 0.735 0.73907 0.74314 0.74724 0.75136 0.75549 0.75963 0.7638 0.768 0.7722 0.77641 0.78066 0.78491 0.78918 0.79348 0.79779 0.80213 0.80646 0.81078 0.81512 0.81948 0.82386 0.82826 0.83268 0.83712 0.84158 0.84606 0.85056 0.85508 0.85963 0.86417 0.86874 0.87331 0.8779 0.8825 0.8872 0.89223 0.89728 0.90236 0.90745 0.91256 0.9177 0.92285 0.92803 0.93325 0.93851 0.94385 0.94918 0.9545 0.9598 0.96506 0.97026 0.97538 0.98041 0.98533 0.99021 0.99508 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind ] put dup /Table [9 9 9 9 [ [<FE8080E57F7FCD7F7EB47F7E9B7F7E837F7E6A7F7E51807F398180FC7E8BE47E89CB7E87 B37E869A7E85827E84697F83507F82388081FA7D96E27D93CA7D90B27D8E997D8C807E8A 687E884F7F85377F83F87CA1E07C9DC87C99B07C96987C937F7D8F677D8C4F7E89367F85 F67BACDF7BA7C77BA2AF7B9E967C997E7C95667D914E7D8C367E86F57AB8DD7AB1C57AAB AD7BA6957BA07D7C9B657C954D7D8F357E88F47AC3DC7ABBC47AB4AC7AAE947BA77C7BA0 647C994D7D92357E89F279CEDB79C5C379BDAB7AB5937AAD7C7BA6647C9D4C7C94347D8A F279DADA79CFC279C6AA79BD937AB47B7BAB637BA14C7C97347D8B> <ED887ED7877DC0867DA9857D92857D7B847D63837E4C837E358380EB8788D58687BF8585 A884849184837983836283824B8282358281EA8693D48590BD848EA6838C8F838A788288 6182864B8285348283E8859DD2849ABC8396A582938E829077828E60818B4A8188338184 E684A8D183A3BA829FA4829B8D819776819360818F49818B338186E583B3CF83ADB982A8 A381A38C819E7580985F809349808E338087E483BDCE82B7B881B0A281AA8B80A475809E 5E8097488090328088E383C8CD82C0B781B9A180B18A80AA7480A35E809B488093328089 E282D3CC81CAB681C1A080B88A80B0737FA75D7F9E477F95327F8A> <DD917CC88F7CB38E7C9E8C7C888A7C72897D5D877D47867E32857FDB9086C78E85B28C84 9D8B838789827188825C8781468581328481DA8F90C58D8EB18B8C9B8A8A868888708787 5B8685468584318483D88E9AC48C97AF8A949A899185888F6F868C5A858A458487318384 D78DA4C38BA0AE8A9C9988988487956F869159858E45848A308386D68DAEC28BA9AD89A4 98889F83879B6E859659849244838C308287D58CB8C18AB2AC89AC9787A78286A16D859B 58849544838F308288D48CC2C08ABBAB88B49687AD8186A76C85A0588499438391308289 D38CCCBF8AC4AA88BC9687B48185AC6C84A457839C4382932F8289> <CE9B7BBA987BA6957B92937B7E907B6A8E7C568C7D42897E2F877FCC9984B99783A59482 9292827E8F81698D81558B814289812F8681CA988EB8968CA4938A9191887D8E87698C86 558A854188842E8682C99897B69594A3929190908F7C8E8D688C8B5489884187862E8584 C897A0B5949DA292998E8F967B8D93678B9053898C4087892E8585C796AAB494A5A191A1 8D8F9D7A8C98668A9453889040868B2E8486C696B3B393AEA091A88D8EA3798C9E668A99 52889340868D2E8487C595BCB393B6A090B08C8EAA798CA3658A9D5288963F868F2E8488 C595C6B292BE9F90B78B8EB0788BA86589A15287993F86912D8489> <BEA47AACA07A9A9D7A889A7A75967B62937C50907C3E8C7E2C897FBDA383AB9F82999C81 8799817495806292804F8F803D8C802C8881BCA28CAA9E8A989B88869887739586619185 4F8E843D8B832C8782BBA194A99E92979A8F85978D73948B6091894E8E873C8A862C8784 BAA09DA89D9A969A9784969472939160908E4E8D8B3C8A882C8785B9A0A6A79CA296999E 83969A7193965F90924D8D8E3C898A2C8686B8A0AFA79CAA9599A58395A071929B5E8F96 4D8C913C898C2C8687B79FB7A69CB19498AC8295A67092A05E8F9A4D8C943C898E2C8687 B79FC0A69BB99498B28295AC7092A55E8F9E4C8C973B89902C8588> <B0AD7A9FA97A8EA57A7DA17A6C9D7A5B987B4A947C39907E2A8B7FAFAD829EA8818DA480 7DA0806B9C805A9780499380398F802A8A81AEAC8A9DA7888DA3877C9F866B9B855A9784 499283398E832A8982ADAB929DA7908CA28E7B9E8C6A9A8A599688489287388D852A8983 ACAA9A9CA6978BA2947A9D9269998F58958C48918A388D872A8884ACAAA39BA59F8BA19B 7A9D9769999458959048918D388C892A8885ABA9AB9BA5A68AA1A1799C9D689899589494 479090388C8B2A8886AAA9B39AA4AD8AA0A8799CA268989D579498479092388C8D2A8787 AAA9BB9AA4B489A0AE789CA86898A157949B479095388B8E2A8787> <A2B77992B27983AD7973A87A63A37A539E7B44987C35937D278C7FA1B68192B18082AC80 73A77F63A27F539D7F44977F359280288C81A1B68991B08782AB8672A68562A184539C83 439783359182288B82A0B59091B08E81AA8C71A58A62A089529B87439686359084288A83 A0B49890AF9581AA9271A59061A08D529B8B439589359086288A849FB4A090AE9C80A998 70A495619F92529A8F43958C358F882889859FB3A78FAEA380A99E70A49A619F96519992 43948E358F8A2889869EB3AE8FADA980A8A470A39F609E9A519995429490358E8B288986 9EB2B68FADB07FA8AA70A3A4609E9E519998429392358E8D298987> <95C17987BB7978B5796AAF795BA97A4DA37B3F9C7C31957D258E7F95C08086BA7F78B47F 69AE7F5BA87E4CA27F3E9B7F319580268D8194BF8886B98677B38569AD845AA7834CA182 3E9B82319482268C8294BF8F86B98C77B38B69AD895AA6874CA0863E9A85329384268C83 94BE9685B89377B29068AC8E5AA68C4CA08A3E9988329286278B8493BD9D85B79976B196 68AB935AA5904C9F8D3E988A329287278B8593BDA485B79F76B19B68AB9859A5944B9E90 3E988D329189278A8593BCAA85B6A576B0A168AA9C59A4984B9E933E988F32918A278A86 92BCB184B6AB76B0A568AAA059A49B4B9D963E979132918B278A86> <89CB797BC4796EBE7961B77953B07A46A87B3AA17C2E987D248F7F89CA807BC47F6EBD7E 60B67E53AF7E46A77E3A9F7F2E977F248E8089C9877BC3856EBC8460B58353AE8246A682 3A9E822E9681258E8289C88D7BC28B6DBB8960B48853AD8646A5853A9E842F9583258D83 89C7947BC1916DBA8F60B38C53AC8A46A4893A9D872F9585258C8389C79A7BC0976EB994 60B29153AB8E46A48C3A9C892F9487268C8488C6A17BBF9C6EB89960B19553AA9246A38F 3A9B8B2F9488268C8588C6A77BBFA26EB89D60B19953AA9546A3913A9B8D2F9389268B85 88C5AD7BBEA76EB7A260B09D53A99846A2933A9B8F2F938A268B86> ][<F27B79DB7B79C47C7AAC7C7A957C7A7D7D7B667E7C4E7E7D377F7EF07984D97A83C27A82 AB7B82947B817C7C81647D804D7E80367F80EE788FD8788DC1798BAA7A8A927A887B7B86 647C854C7D83357E82EC779BD67797BF7894A8799191798F7A7A8C637B8A4B7C87347E83 EA76A6D476A1BE779DA77899907996797A92627B8E4B7C8A347D85E975B1D376ABBC76A6 A677A18F789C787997617A924A7B8D337D87E875BCD275B5BB76AFA477A98E77A377789D 607A964A7B90337C88E774C7D175BFBA75B8A476B08D77A97678A260799A497A92337C89 E674D1D074C9BA75C0A376B88C77AF7578A75F799E497A94337C8A> <E28478CD8378B78378A282798B827A75827A5F817B49817C33827EE08282CC8281B68181 A181808A81807481805E8080488180338180DE818DCA808BB580899F8088898086738085 5D8084478083328082DD8097C87F94B37F929E7F8F887F8D727F8B5C7F88477F86328083 DB7FA2C77E9EB27E9A9C7E97877E93717E905C7E8D467F89317F85DA7EACC67EA7B17DA3 9B7D9E867D9A707E955B7E91467E8C317F86D97EB6C57DB1B07DAB9A7DA5857DA06F7D9A 5A7D95457E8E317E87D87DC1C47DBAAF7CB3997CAD847CA66F7D9F5A7D98457E91307E88 D87DCBC37CC3AE7CBB997CB4837CAC6E7CA4597D9B457D93307E89> <D28C76BF8B77AB8A779788788287796D867A59857B44847C30847ED18B80BE8A80AA887F 96877F81867F6C857F58847F44847F308380CF8A8ABC8889A987879586868085856C8484 5784834383822F8281CE8994BB8792A7868F93858D7F848B6B84895683874282852F8283 CD889EBA879BA685979285947E84916A838E56828B4282882F8184CC87A8B986A4A5859F 91849B7D839769829355828F41818B2F8186CB87B2B885ACA484A79083A27C839D688298 55819341818D2E8187CA86BBB785B5A384AF8F83A97C82A368829D54819641818F2E8088 C986C5B685BEA384B78F83AF7B82A86781A15481994180912E8088> <C39575B193769F91778C8F77798D78668B7952897A40887C2D867EC2947FB0927E9E907E 8B8E7E788C7E658A7E52897E3F877F2D8580C19388AF91879D8F868A8D85778B84648983 5188823F86822D8481C09291AE908F9C8E8D898C8B768A8A6389885087863E85842D8483 BE919BAD8F989B8D95888B92758A8F62888D50868A3E85872C8384BD91A4AC8EA09A8C9C 878B997489956287914F868E3D84892C8385BD90ADAB8EA8998CA4868A9F74889A618796 4F85913D848C2C8386BC90B6AA8EB1988CAB868AA57388A061879A4F85943D848E2C8287 BB8FBFAA8DB9988BB28589AB7388A560869E4E85973D838F2C8288> <B49F75A49C759399768196777093785E90794C8E7A3B8B7C2B887EB39E7DA39A7D92987D 81957D6F927D5D8F7E4C8D7E3B8A7F2A877FB29C86A299859197848094836E91835D8F82 4B8C823A89812A8681B19C8FA1998D90968B7F938A6D90885C8E874B8B853A88842A8682 B19B98A098958F95927E92906D908D5B8D8B4A8A893A88862A8583B09AA09F979D8F9499 7D92966C8F935B8C8F4A8A8C3987882A8585AF9AA99F97A58E94A07D919C6B8E985A8C94 49898F39878A2A8486AE99B19E96AC8D93A77C91A26B8E9D5A8C9749899239878C2A8486 AE99BA9E96B48D93AE7C90A76A8EA1598B9B49899439868E2A8487> <A6A87497A47587A076779D7667997756967946927A378E7C28897EA6A77D96A37C879F7C 779C7C66987D56957D46917E368D7E28897FA5A68596A284869E83769B82669782559481 469081368C81288881A4A58D95A18B859E89759A88659687559386458F84368B83288782 A3A49594A192849D9074998E64968C54928A458F88368B85288783A3A49D93A09A849C97 74999464959154928E458E8B368A87288684A2A3A5939FA1839C9D739899639595549191 448D8D368A89298685A2A3AD929FA8839BA373989F63949A539195448D90368A8B298686 A1A3B5929FAF829BA97397A463949E539098448D9236898C298686> <99B2748BAD757CA9756DA4765E9F774F9B7841967A33917C268B7E99B17C8AAC7C7CA87B 6DA37C5E9E7C4F9A7C40957D33907E268A7F98B0838AAB827BA7826CA2815E9E814F9981 409480338F80268A8198AF8B89AA897BA6886CA1875D9D854E9884409384338E83278982 97AE9289AA907AA58E6BA08C5D9C8A4E9788409387338E8527888396AE9A88A9977AA494 6BA0915C9B8F4E978C409289338D8727888496ADA188A89E79A49A6B9F975C9B934D968F 40918C328D8827888596ADA988A8A479A3A06A9F9B5C9A974D96933F918E328C8A278785 95ACB087A8AA79A3A56A9EA05B9A9B4D95953F9190328C8B278786> <8DBC747FB67472B17564AB7656A67749A0783C9A7A2F947C248D7E8CBB7B7FB57B71B07B 64AA7B56A57B489F7C3B997D2F937E248C7F8CBA827FB48171AF8164A98056A480489E80 3B98802F9280258B808CB9897EB38871AE8663A88556A384489D833B97832F9182258A82 8BB8907EB28E70AD8C63A88A55A289489C873B96862F9084258A838BB7977EB29470AC92 63A78F55A18D489C8A3B96883090862589838BB79E7DB19B70AC9762A69455A191489B8E 3B958A308F872689848BB6A57DB1A070AB9C62A69855A094489B903B958D308F89268985 8AB6AB7DB0A670ABA162A59C55A098489A933B948E308E8A268885> <81C67474BF7468B9755BB3754FAC7742A578379E7A2C967B228E7E81C57A74BF7A68B87A 5BB27A4FAB7B42A47C379D7D2C957E238D7F81C48174BD8068B7805BB17F4EAA7F42A37F 379C7F2C9480238C8081C38874BC8667B6855BB0844EA98342A283379B822C9382248C81 80C28E74BB8C67B58A5BAF894EA88742A186379A852D9383248B8280C19574BB9267B48F 5BAE8D4EA78B42A0893799872D9285248B8380C09B74BA9867B4945BAD914EA78F42A08C 3799892D9186258A8480C0A174B99D67B3995BAD954EA692429F8E37988B2D9188258A84 80BFA774B9A267B39E5BAC994EA595439F9137988D2D9188258A85> ][<E67673D17774BB7875A579768E7A77777B78617C794B7D7B347E7DE4747ECF757EB9767D A3777D8D787D76797E607B7E4A7C7E347D7EE27389CD7488B87586A276858C7784757883 5F7A82497B81337D80E07294CB7391B6748FA0758D8A768B7477895E7987487A85337C82 DF709FCA729BB573989F749589759273778E5D788B487A88327C84DD70AAC971A5B372A1 9E739C8875987276945C789047798B327B85DC6FB4C870AFB271A99D73A487749F717599 5C779447798E327B87DB6FBFC770B9B171B29C72AB8673A571759E5B7797467890317A88 DB6EC9C66FC2B170BA9B72B38573AB7075A35B769B467892317A89> <D67F72C37F73AF7F749A7F75857F76707F775B7F7946807A31807DD57D7CC27D7CAE7D7C 997D7C847E7C6F7E7D5A7E7D457F7E31807ED37B87C07C85AC7C84987C84837D836E7D82 597D82447E81307F80D27A91BF7A8FAB7B8D967B8B827C896D7C88587D86447D84307E82 D0799BBD7998A97A95957A92817B906C7B8D587C8A437D87307E83CF78A5BC79A2A8799E 94799A807A966B7B92577B8E437C8A2F7D85CE78B0BB78ABA778A69379A17F799C6A7A97 567B92427C8C2F7D86CD77BABA78B4A678AE9278A87E79A26A7A9C567A95427B8F2F7D87 CD77C4BA77BDA677B69178AF7D78A76979A0557A99427B912F7C88> <C78771B68672A386739085747C847568847755837841837A2E827CC6867AB4857BA2847B 8F847B7B837C68837C54827D41827D2E827EC58484B38483A183838E82827A8282678281 5381814081802E8180C4838EB2828CA0828B8C81897981886681865381854080832D8082 C28298B181959E81938B809078808E65808B5280893F80862D8083C181A1B0819E9D809B 8A8097777F94647F90517F8D3F7F892D7F84C081ABAF80A79C80A2897F9E767F99647F95 517F903E7F8B2D7F86C080B4AE80AF9C7FAA897FA4767E9F637E99507E933E7F8D2D7F86 BF80BEAD7FB89B7FB1887EAB757EA4627E9D507E963E7E8F2D7F87> <B99070A88E71978D72868B74738A756188764F87783D867A2B857CB88F79A88D79968C7A 858A7A73897B60877B4E867C3C857D2B847EB78D82A68C82958A818489817288805F8680 4D85803C84802B8380B68C8BA58B8A9489898388877187865F86854D84843B83832B8281 B58B95A48A9293889082878E70868C5E858A4C84883B83852B8283B48B9EA3899B928898 8186956F85915D848E4C838B3B82882B8184B38AA7A288A391879F80869B6E85975D8493 4B838E3B828A2B8185B289B0A288AB9187A67F85A16E849C5C83974B82913A828C2B8186 B289B8A188B39086AD7F85A76D84A15C839B4B82943A818D2B8187> <AB996F9C97718C94727B92736B90755A8D76498B7838897A29867CAA98789B95788B9379 7B91796A8F7A598C7B488A7C38887D29867EA997819A94808A92807A9080698E7F588B7F 48897F38877F298580A89689999388899187798F86688D85588B84478983388682298481 A7959298929088908E788E8C688C8A578A88478886378684298482A7949A979298888F95 778D92678B8F56898D47878A378587298383A693A397919F878F9C778D98668B94568991 46878D378589298384A593AB9691A7868EA2768C9E668A9956889446869037848A298385 A593B39690AE868EA9768CA3658A9E55889846869237848C298286> <9DA26F8F9F70809C71719973629674529376438F78348C7A26887C9DA1778F9E78809B78 71987961957952927A438E7B348B7D27887E9CA07F8E9D7F7F9A7F70977F61947F51917F 428D7F348A7F27877F9B9F878D9C867E99856F9684609384519083428D82348981278681 9B9E8F8C9B8D7E988C6F958A5F9288508F87428C853489842786829A9D978C9A957D9792 6E94905F918D508E8B418B88348886278583999D9F8B9A9C7D97996E94955E9192508E8F 418B8B348888278584999CA78B99A37C969F6D939A5E90964F8D92418A8E338789278485 999CAE8A99AA7C96A56D939F5E909A4F8D95418A9033878B278485> <90AC6F83A87076A47168A0735A9C744B98763E9378308F7A248A7C90AB7683A77775A377 679F78599B794B977A3D927B308E7C25897E90AA7E82A67E75A27D679E7D599A7E4B967E 3D917E308D7F25887F8FA98582A58474A184669D835899824A95823D9181308C81258881 8FA88D81A48B74A08A669C885898874A94863D9084308C832587828EA79481A392739F90 659B8E57978B4A93893D8F87308B852687838EA69B80A399739F96659B935797904A938D 3D8E8A308A872686848DA6A280A29F739E9B659A975796944992903C8E8C308A88268684 8DA6A980A2A5729EA1649A9C5796974992933C8E8E308A89268685> <84B66E78B16F6BAC715FA77252A274459D763897772D927A228C7C84B57678B0766BAB77 5EA67751A178459C7938967B2D917C238B7E84B47D78AF7C6BAA7C5EA57C51A07D459B7D 38957E2D907E238A7F83B28477AE836BA9825EA481519F81449A813894812D8F80248980 83B18B77AD896AA8885DA386519E854499843894832D8E8224888183B19177AC8F6AA78D 5DA28B509D8A4498883893862D8D8424888283B09876AB956AA7935DA290509D8D44978B 3892882E8D8624888382B09E76AB9B6AA6985DA194509C9144978E38928A2E8C87258784 82AFA576ABA169A69D5DA099509B9444969038918C2E8C88258784> <79BF6E6DBA6F61B57056AF724AA9733EA275349B7729947A218D7C79BF756DB97562B376 56AE774AA7783FA179349A7A2A937C218C7E79BE7C6DB87B61B27B56AC7B4AA67C3FA07C 34997D2A927E228B7F79BC826DB78161B18156AB804AA5803F9F803498802A9180228A80 78BB886DB68761B08655AA854AA4843F9E833497822B9082238A8178BA8F6DB58D61AF8B 55A9894AA3883F9D863496852B908323898278BA956DB49261AE9055A88E4AA28B3F9C89 3496872B8F8523898378B99B6DB49861AE9555A8924AA28F3F9C8C3495892B8F86238883 78B9A16DB39D61AD9955A7954AA1923F9B8E34958A2B8E87248884> ][<DA716DC6736EB174709D75718777737278755C7977477B79327D7BD86F78C47178B07279 9B747986757A71777A5B787B467A7C327C7DD66E83C36F82AF71819A7281857480707680 5B778046797F317B7FD46C8DC16E8CAD6F8A9871888473876F75865A7684457883317B81 D36B98BF6D95AB6E9397709082728D6D748B597689457886317A83D26AA2BE6C9FAA6D9B 966F988171946D739058758D447789307A84D069ADBD6BA8A96DA4956E9F80709A6C7296 58749144778B307986D069B7BC6AB2A86CAC946EA67F70A06B729B57749443768E307987 CF68C1BC6ABBA86CB4936DAD7F6FA66A719F567498437690307988> <CB7A6CB97A6EA67B6F937B717F7C736A7C74567D76437E792F7F7BCA7876B87877A57977 927A787E7A796A7B7A567C7B427D7C2F7E7DC87680B67780A4788090787F7C797F697A7F 557B7F417C7F2F7E7FC7758BB57589A276888F77877B7886687984547A83417B822E7D81 C57395B37492A175908E768E7A778C67788A537987407B852E7C82C4729FB2739CA07498 8C759579769266778F53798B407A882E7C84C372A9B173A59F73A08C749C787698657794 52788F407A8A2E7C85C271B2B072AD9E73A88B74A378759E6576985278933F798D2E7B86 C271BCB072B69D72B08A73A97774A364769D5177963F798F2E7B87> <BD826BAC826D9B816F8981707681726381745181763E81782D817BBC8075AB80769A8076 88807775807863807950807A3E807C2C817DBA7F7EAA7F7E997E7E877E7E747E7E627F7E 4F7F7E3D7F7F2C807FB97D88A97D87977D86857D85737D84617E834F7E823D7E822C7F80 B87C91A77C90967C8E847C8C727C8A607D884E7D863C7E842C7F82B77B9BA67B98957B96 837B93717C905F7C8D4E7D8A3C7D872C7E83B67AA4A57AA1947A9D827B99717B965F7B92 4D7C8E3C7D892C7E84B57AAEA57AA9937AA5827AA0707A9B5E7B964D7C913C7C8B2B7D85 B579B7A47AB1937AAC817AA66F7AA05E7B9A4C7B943B7C8D2B7D86> <AF8B6AA0896C90886E7F87706E87725C86744B85763A84782A837BAE89739F88748F8775 7E86766D85775C84794A847A3A837B2A837DAD887D9E877D8E867D7D857D6C847D5B837D 4A837E39827E2A827FAC86869D85858D84847C84836B83835A82824982823981812A8180 AB858E9C848D8C838B7B838A6A82885982874981853981842A8182AA84979B83958B8293 7A829069818E59818B4880893880862A8083A983A09A839D8A829A798197698193588090 48808C388088298084A883A99982A58981A179819C688098588094487F8F387F8A297F85 A883B19982AD8981A87880A268809D577F97477F92387F8C297F86> <A1946A93916C85906E758E6F658C71558A7345897636877827857BA19273939074848E75 748D76658B7755897845887936867B27857DA0917B928F7B838D7C748B7C648A7C54887D 44877D35857E27847E9F8F83918E83828C82738A82638981538781448681358480278380 9E8E8C908C8B818B897289886288875386854485843584832882819D8D948F8C92808A90 71888E62878C52868A4384873583852882829D8D9C8E8B9A80899770889461869152858E 43848A3583872882839C8CA48E8BA17F899D70879961869551859143838D358289288184 9C8CAC8D8AA87F88A46F879F60859A51849542839034828A288185> <949D6A879A6B7A976D6B956F5D92714E9073408D76328A7825877B949B72879973799674 6B93755C91764E8E783F8C7932897B25867D939A7A86977A78957A6A927B5C907B4D8D7C 3F8B7D32887D25867E9299828596817894816A91805B8F804D8C803F8A80328780268580 9298898595887793876990865B8E854C8B843F898331878226848191979184948F76928E 688F8C5A8D8A4C8B883E8886318684268482919699839496769194688F915A8C8E4C8A8C 3E88893185862683839096A083939D75919A678E96598C934B8A8F3E878B318588268384 9095A88393A47590A0678E9B598B974B89923E878E318589268384> <88A6697CA26B6F9F6D629C6F5598714795733A91752E8D7823897B88A5717CA1726F9E73 629A745497764793773A90792E8C7B23887D87A3787BA0796E9D7961997A54967A47927B 3A8F7C2E8B7D24877E87A2807A9F806E9B7F61987F54957F46917F3A8E7F2E8A7F248680 86A1877A9E866D9A856097845394844690833A8D822E898124868185A08E799D8D6D9A8B 60968A5393884690863A8C852E898324858285A095799C936C99915F968F52928C468F8A 3A8B872E8885248583859F9C799C9A6C98975F9593529290458E8D3A8B8A2E8887258483 859FA3789BA06C989C5F9598529194458E90398B8C2E8788258484> <7CAF6971AB6B65A76C59A36E4D9E71419A733595752B9078218B7B7CAE7071AA7165A672 59A2744D9D754198773694782B8F7A22897D7CAD7770A97865A57859A0794D9C7941977A 36927B2B8E7D22897E7BAC7E70A87E64A37E589F7E4C9B7E41967E36917E2B8D7F22887F 7BAB8570A78464A283589E834C9A824095823691812B8C812387807BAA8B6FA68A64A289 589D884C99864094853590842B8B832387817AA9926FA59063A18E589D8C4C988A409488 368F862C8B842386827AA9986FA59663A093579C904C988E40938B358F882C8A85238683 7AA89F6FA49C63A098579B954B979140938D358E8A2C8A87238583> <71B96866B46A5BB06C50AA6E46A5703B9F73319975279278208C7B71B86F66B3705BAE71 51A97346A3743B9E7631977828917A208B7D71B77666B2765BAD7750A87846A2793B9C7A 31967B28907C218A7E71B67C66B17C5BAC7C50A67C46A17D3B9B7D31957E288F7E21897F 70B48366B0825BAB8150A58145A0813B9A80319480298E8022888070B38966AF885BAA87 50A485459F843B9984329383298D8222888170B38F66AE8D5BA98B50A38A459E883B9886 329385298D8322878270B29566AD935BA89050A38E459D8B3B9889329287298C85228783 70B29A66AD985BA89550A291459D8E3B978B329288298C86228783> ][<CE6D67BB6E69A8706B94726D80746F6C7572587774447977317C7ACC6A71BA6C72A76E74 9370757F72766B747757767943787A307B7CCA687CB86A7CA56C7C926E7C7E717C6A737D 56757D43777D307A7EC86687B66986A46B85906D847D6F83697182557482427781307980 C76591B5678FA2698D8F6C8B7B6E896870885573864176842F7982C6649BB36698A16896 8E6B937A6D9067708D54728A4175872F7883C563A5B365A2A0679E8D6A9A7A6C96666F92 53728E4175892F7885C462AFB264AB9F67A68C69A1796C9C666E9753719240748C2F7886 C362B9B164B49E66AE8B68A8786BA1656E9B52719540748E2F7787> <C07566AF76689D776B8B786D78796F657A71527B74407C772E7E7ABE7270AE74719C7573 8A7674777775647877517A783F7B7A2D7D7CBD707AAC727A9B737B89747B76767C63777C 51797D3E7A7D2D7C7EBB6F84AB70839971838773827574826276815078813E7A802D7C80 BA6D8EA96F8C98708B8672897473886175864F77853E79832D7B81B96C98A86E95976F93 85719073728E61748B4F76893D78862D7B83B86BA1A76D9E966E9B847097727194607390 4E758C3D78882C7A84B76AABA76CA7956DA2836F9E7171995F73954E75903D778B2C7A85 B76AB4A66CAF956DAA836EA471709F5F72994D74933C778D2C7986> <B27D65A37D68937D6A827D6C707E6F5E7E714D7F743B7F772B807AB17B6FA27B70927B72 817C736F7C755D7D764C7D783B7E7A2B7F7CB07978A17979907A79807A7A6E7B7B5D7B7B 4B7C7C3B7D7D2B7F7EAF77829F78828F78817E79816D7A815C7A804B7B803A7C802B7E7F AD768B9E768A8E77897D78886C78865B79854A7A843A7C822A7D81AC75949D75928D7690 7C778E6B788C5A798A4A7A873A7B852A7D82AB749E9C749B8C75987B76956B77925A788E 49798B397B872A7C84AB73A69B74A38B749F7B759B6A769759779349798E397A892A7C85 AA72AF9B73AB8B74A67A75A169769C597796497891397A8B2A7C85> <A5856597846788846A78836C68836E57837147827437827628827AA4836E96836F878271 77827367827457817647817837817928817CA3817795817886817876807966807A56807B 46807B37807C28817EA28080947F80857F80757F7F657F7F557F7F467F7F367F7F28807F A17E88937E88847E87747E86657E85557E84457E83367F82287F81A07D91927D90837D8E 747D8C647D8A547D88457E86367E84287F829F7C9A917C97827C95737C92637C8F547D8C 457D8A367E86287E839F7CA2907C9F827C9C727C98637C94537C90447C8C367D88287E84 9E7BAA907BA7817BA2727B9E627B99537C94447C8F357D8A287E85> <988E658B8C677D8B696F8A6C60896E51877142867333857626847A978C6D8A8B6F7D8970 6E88725F877350867541857733847926837C978A758989767C88776D87785E86794F857A 41847B33837C26837D96897E88887E7B877E6C867E5E857E4F847E41837E33827F26827F 9587868886857A85856C84845D84834F838340828233828126818094868E87858D79848B 6B838A5C83884E82874081853381832681819385968685947884926A838F5C828D4E818B 40818832808526808393859E86849B7883986A82955B81924D818E3F808B328087268083 9284A68584A277839E69829A5B81964D80923F808D328089268084> <8C966480946773926965906B588E6E4A8C713C8A732F887624867A8B956C7F936E729170 658F71578D73498B753C89772F877924857C8A93747E9175728F76648E77578C78498A79 3C887A2F867C24847D8A927C7D907C718E7C648C7D568B7D49897D3C877E2F857E24847F 8991837D8F83708D83638B825689824888813B86812F8480248380888F8B7C8E8A6F8C89 628A885589864887853B85842F8483258281888F937C8D916F8B8F62898D55888B488689 3B85872F8384258282878E9A7B8C986E8B9561899254878F47868C3B84892F8386258183 878EA17B8C9E6E8A9B61889754879347858F3B848B2F8287258184> <809F64759D66699A695C976B50946E439170378E732C8B7622887A7F9E6C749B6D68996F 5C9671509372439074378D772C8A7922877C7F9D73739A746897755C94764F9277438F78 378C7A2C897B22867D7E9B7A73987A67967B5B937B4F907C438E7C378B7D2C887E23857F 7E9A817297816795815B92804E8F80428D80378A802C87802384807D9988729688669487 5A91864E8E85428C843789832C86822384817D988F71968E66938C5A908B4E8E89428B87 3788852C86832383827C989671959465929259908F4D8D8D428A8A3788882C8585238382 7C979D71959A659297598F944D8C90428A8D37878A2C8586248383> <74A9646AA5665FA268549E6B489A6D3D9670339273298E7620897A74A86B6AA46C5FA16E 549D704899723D9574339176298D7920887C74A67269A3735E9F74539B754898763D9478 339079298B7B21877D73A57869A1795E9E79539A7A48967B3D927B338E7C298A7D21877E 73A37F68A07F5E9C7F53997F48957F3D917F338E7F298A7F22867F72A286689F855D9C84 5298844794833D9082338D822A898122858172A28C689E8B5D9B8A5297884793873D9085 338C842A888322858172A192689E915D9A8F52968C47938A3C8F88338B862A8884228482 72A198689D965D9A9352969047928D3C8E8B338B882A8785228483> <6AB26360AE6556AA684BA56A41A16D379B702E96732690761F8B7A69B16A5FAD6B56A96D 4BA46F419F71389A732E9476268F791F8A7B69B0705FAC7155A7724BA374419E75389877 2F9379268E7B20897D69AE775FAA7755A6784BA178419C7938977A2F927C278D7D20887E 69AD7D5FA97D55A57D4BA07D419B7D38967E2F917E278C7F20877F68AC835FA88255A382 4B9F81419A813895812F9081278B8021868068AB895FA78855A3874B9E86419985389484 2F8F83278A8221868168AB8F5FA68D55A28C4B9D8A4198883894862F8F85278A83218582 68AA945FA69255A1904B9D8D41988B3893892F8E86288A84218582> ][<C26860B16A639F6C668C6E6979706C66736F5375724178752F7B79C0656BAF676D9D6A6F 8B6C70786E726571745374764076782F7A7BBE6276AD65769C68778A6A78776D79646F7A 52727A40757C2E797DBD6080AC63809A667F88687F766B7F636E7F51717F3F757F2E787F BB5E8AAA6189996488876786756A85626D845070833F74822E7881BA5D94A96092986390 86668E74698C626C89506F873E73852E7782B95C9EA85F9B976298856595736892616B8E 4F6F8B3E72882E7684B85BA8A75EA49661A084649C726797606A934F6E8F3E728A2E7685 B75AB1A75DAC9560A78463A272669D606A974E6E923D728C2D7686> <B56F60A5716395726683746972756B60776E4E79713C7B752C7D79B36D6AA46E6C94706E 8272707173725F75744D77763C79782C7C7BB26A74A26C75926E768170777072785E7479 4D767A3C787B2C7B7DB0687EA16A7E916C7E806E7E6E707E5D727E4C757E3B777E2C7A7F AF67879F69878F6B867F6D856D6F845C71834B74823B77812B7A80AE65919E678F8E698E 7D6C8C6D6E8A5B70884B73863B76842B7982AD649A9D66988D68957D6B926C6D905B708D 4A728A3A75872B7983AC63A49D65A08D689D7C6A996B6C955A6F914A728D3A75892B7884 AC62AD9C65A88C67A47B699F6B6C9A5A6E954A71903A758B2B7885> <A877609A78638A78667A79686A7A6B597B6E497C71387E75297F79A7756999766B89766D 79776F697871587A73487B75387C78297E7BA67272977374887575787676687777587878 487A7A387B7B297D7DA4707C96727C87737C77747D67757D57777D47797E387A7E297D7E A36F85957084867184767383667483567682467881377A81297C80A26D8E946F8D85708B 75728A657388557587467785377983297B81A16C97936E95846F9274719065728D55748B 467688377886297B83A06B9F926D9D836E9974709664719354738F45768B377888297B84 A06BA8926CA4836EA0736F9C64719754739345758E367889297A85> <9B7F5F8E7F63807F65717F68627F6B53806E4380713581752781799A7D688D7D6A7F7D6D 717D6F617E71527E73437F75347F7827807B997B718C7B727E7B74707C75607C76517D78 427D79347E7B277F7C98797A8B797A7D7A7B6F7A7B607B7C517C7C427C7D347D7D277F7E 9777828A78827C78826E79825F7A81507A81427B80347D80277E8096768B89768A7B7789 6D78885E7886507985417B84347C82277D819575938875927A76906C778E5E788B4F7989 417A87337B85277D8295749B8875997A75966C76935D77904F788D41798A337B87277D83 9473A38774A079759D6B75995D76954E789140798C337A88277C84> <8F875F8387627686656885685A856B4C846E3E84713183752583798E856882856A75846C 68846E5A83704C83733E837531827825827B8D83708183717482736782745982754B8177 3D817931817A25817C8C817880817973817966817A58807B4A807B3D807C30807D25817E 8B80807F8080727F80657F80587F804A7F803D7F80307F7F25807F8B7F887F7E87727E87 657E86577E854A7E843D7E83307F82257F818A7E907E7E8F717D8D647D8B577D89497D88 3C7E86307E84257F82897D977D7D96717D93637C91567D8E497D8B3C7D88307E86257E83 897C9F7D7C9C707C99637C96567C92497C8E3C7D8B307D87257E83> <83905F788E626C8D655F8C68528A6B46896E3988712D8675228579828E67778D696B8B6B 5F8A6D5289704588723986752D857823847B828C6F768B706B8A725E8973528775458676 3985782D847A23837C818A767689776A88785E877951867A44857A39847B2D837D23827E 80897E75887E69877E5D867E51857E44847E38837F2D827F23827F7F8885748785688684 5C85845084834483823882822D82812481807F878C74868B68858A5C8489508387448286 3881842D81832481817E86947385926884905B838E4F828B4381893881872D8084248082 7E859A7385986784955B83924F828F43818C3880892D8086248083> <78995F6D97626295655792674B906A3F8E6E348B712A89752187797797666D956862936B 57916D4B8F6F3F8C72348A742A887721867B77956D6C936F619170568F724B8D743F8B76 3489782A877A21857C7694756B9275619076558E774A8C783F8A7A34887B2A867C22847E 75927C6B907C608E7C558C7D4A8B7D3F897D34877E2A857E22837F7591826A8F82608D82 548B82498A813E88813486812A84802283807490896A8E895F8C88548B864989853E8784 3485832A8482228281748F906A8E8F5F8C8D548A8B4988893E86873485852A8384228282 738F96698D945F8B9254898F49878D3E868A3484872A8385238182> <6DA25E639F61599C644F996744966A3A936D308F71278C751F88796CA065639E67599B6A 4E986C44946F3A9171308E74278A771F877B6C9F6C629C6E58996F4E96714493733A9075 308C7727897A20867C6B9D73629A745897754E9576439277398E79308B7A27887C20857D 6B9B7961997A57967A4D937B43907B398D7C308A7D28877E21857F6A9A80619880579580 4D9280438F7F398C7F3089802887802184806A99866197865794854D9184438E83398B83 3089822886812183816A998C60968B56938A4C9088438E87398B85308884288583218381 6A989260969156938F4C908C438D8A398A88308786288584218382> <62AB5E59A86050A46347A0663D9C6A34986D2C9371248E751D8A7962AA6459A66650A369 469F6B3D9A6E3496712C9174248D771E897A61A86B58A56C4FA16E469D703D9972349474 2C9077258C791F877C61A67158A3724F9F73469C753D97763493782C8F7A258B7B1F877D 61A57758A2784F9E78469A793D967A34927B2C8E7C258A7D1F867E60A47D58A07D4F9D7D 46997E3D957E34917E2C8D7F25897F20857F60A383589F834F9C824698823D9481349081 2D8C8126888120858060A289589F884F9B874697863D9385348F842D8B83268882208481 60A18E579E8D4F9A8B4697893D9388348F862D8B84268783208482> ][<B7625BA6655E966861846A65736D6861706B4F736F3E76732D7A77B55F65A5626794656A 83686C726B6E606E714E71743D75762D797AB35C6FA35F719362728266737069755F6C76 4E70783D737A2D787CB15A79A15D7A91607A80647B6F677B5E6B7C4D6E7C3C727D2D777E B05783A05B83905E827F62826E65815D69814C6D803C72802D7680AE558D9F598C8F5D8A 7E60896D64875C68864C6C853C71832D7681AD54979E58958E5B927D5F906C638D5C678B 4B6C883B70862D7583AC53A09D579D8D5A9A7D5E966C62935B668F4B6B8C3B70882C7584 AC52A99C56A58D5AA17C5D9C6B61985B66944A6A8F3B6F8A2C7485> <AA6A5A9B6C5E8C6E617C6F656B72685A746B4A766F3A79732B7C78A967649A69678B6B69 7B6D6C6A6F6E5A72714975733978762A7B7AA7646E99666F8A69717A6B73696E74597076 49737839767A2A7A7CA66177976478886779786979686C7A586F7B48727C39757D2A797E A45F81966281876581776780676A80576E804771803875802A797FA35D8A956089866388 766687666986566C854770843874822A7881A25C93945F9285629075658E66688B566C89 476F873873852A7782A15B9C935E9A846197756494656791556B8E466F8A3873872A7784 A15AA5935DA284609E74639A656796556A91466E8D3772892A7784> <9E715A91725E82746173756464766854786B457A6F367C73287E789D6E638F7066817169 72736B63746E537670447873357B76287D7A9B6C6D8E6D6E806F70717172627373537575 447777357979287C7C9A69768D6B777F6D78706F7861717952737A43767B35787C287B7D 99677F8C697F7E6B7F6F6D7F60707F51727F43757F35787F287B7F9865878B68877D6A86 6E6C85606E84517183427483357782287A819764908A668F7C698D6D6B8B5F6D8A507088 427386347684287A829663998965967B68946D6A915E6C8E506F8C427289347686287983 9662A189659E7B679A6C69975E6C934F6F8F42728C347588287984> <92795A86795E797A616B7B645C7C684E7C6B407D6F327F73268078917663857766787868 6A796B5C7A6D4D7B703F7C73327D76267F7A90746B84756D77766F6977715B78734D7975 3F7B77327C79267E7C8F71748272757574766875775A76784C78793F797B327B7C267D7D 8E6F7C81717D74727D67737D59757E4C777E3E787E317A7E267D7F8D6E85806F84747184 6672835974834B75823E7781317A81267C808C6C8D806E8C736F8B6671895873884B7586 3E7785317983267C818B6B957F6D93726E9165708F58728C4A748A3D7687317985267B82 8B6B9D7F6C9A726E97656F945771914A738D3D768A317887267B83> <86815A7B815E6F816162816455816848816B3B816F2E8273238278857E627A7E656E7F68 617F6A547F6D477F703A80732E807624817A847C6A797C6C6D7D6E617D70547D72477E74 3A7E762E7F7924807B837A72787A746C7B75607B76537C77467C793A7D7A2E7E7B247F7D 82787A77787B6B797B5F7A7C527A7C467B7D3A7C7D2E7D7E247F7F8276827677826B7882 5E7881527981457A81397B802E7D80247E8081758A7676896A76885E7787517886457985 397A832E7C82247E8180749175759069768E5D768C51778A457988397A862E7B84247D82 8073987574966975945D769151778E44788B3979882E7B85247D83> <7B895A70885D6588615A87644D866841866B36856F2B85732184787A8762708664658667 59856A4D856D4184703684732B837622837A7985696F846B64846D58836F4D8371418374 3682762B827922827B7882716E82726382735882754C81764081783581792B817B22817D 7881786D807962807A57807A4C807B40807C35807D2B807D22807E777F7F6C7F80627F80 567F804B7F7F407F7F357F7F2B7F7F238080767E876C7E86617E85567E854B7E84407E83 357E822B7F81237F81767D8E6B7D8D617D8B567D894A7D883F7D86357E852B7E83237F81 757C946B7C93607C90557C8E4A7C8C3F7D89357D872B7E84237F82> <70925A66905D5C8F60518D64468C673C8A6B31896F2887731F86786F9061668E645C8D66 518C69468A6C3B896F31877228867620857A6F8D68658C6A5B8B6C508A6E4688713B8773 31867628857820847B6E8B6F648A715A89725088744587753B867731857928847B21837D 6D8A766489775A88784F877945867A3B857B31847C28837D21827E6C887D63877D59867D 4F857E45847E3B837E31837E28827F21817F6C87836286835985834E84824483823A8381 3182812981812181806C868A6285895884884E83874483863A8284318183298182218081 6B859062858F58848D4E838B4482893A8187318185298083228082> <659B595D985D5396604A9463409267368F6B2D8C6F258A731E87786599605C9763539566 49926840906B368D6F2D8B722588761E867A6497675B956952936B49906D3F8E70368C72 2D89752587781F857B64956D5B936F529171498F723F8C74368A762D887826867A1F847D 6393745A9175518F76488D773F8B7836897A2D877B26857C20837E63917A5A907B518E7B 488C7C3F8A7C36887D2E867E26847E20837F6290805A8F80518D80478B803E8980368780 2E8580268480208280628F86598E86508C85478A843E88833586832D8582268381208281 628F8C598D8B508B8A4789883E87873686852E8484268383208181> <5BA45953A15C4B9E5F429B6339976731946B29906F228C731D89785AA25F539F624A9C65 42996839966B31926E298E72238B761D887A5AA065529D674A9A6A41976C39946F319072 2A8D752389781E867B5A9E6B529B6D49996F419571399273318F752A8B7823887A1E857C 599C71519A73499774419475399177318E792A8A7A24877C1E857E599B77519878499679 41937A398F7B318C7C2A897D24867E1F847F599A7D51977E49957E41927E398E7E318B7E 2A887F24867F1F8380589983519683499482419182398E81318B812A88812485811F8380 589888509688499387409086398D84318A832A87832485821F8381> ][<AC5D559D60598D635D7D66616C69655B6C694B706D3B74712C7976AA595F9B5C628C5F65 7C63686B676B5B6A6E4A6E713A73752C7779A8556999596B8A5D6D7A606F6A64715A6873 4A6D763A72782C777BA65273985674895A75795E76696277596779496B7A3A707B2C767D A54F7D96547D87587D785C7D68607D58657E486A7E396F7E2C757FA34D86955186865685 775A84675F83576483486982396F812C7481A24B9094508E85548D76598B665E89576388 486886396E842C7482A14999934E97855394755891665D8F56628C476889396D862C7483 A148A2934D9E84529B755797665C9456619047678C396D882C7384> <A0645592665984685D756B61656E6555716946746D377771297B779F605F916362836565 746868646B6B556F6E457271377675297A799D5C688F606A81636C72666E636971546D73 45707536757829797B9B59718E5D73806074716475626777536B78446F7936737B29787D 9A577B8D5A7B7F5E7C70627C61657C526A7D446E7D36737E29777F9955848B58847E5C83 6F6083616482526882436D8136728129778098538D8A578C7D5B8A6E5F89606388516786 436C853671832976829751968A55947C59916E5D8F5F628D51668A436B88357185297683 96509E89549B7C58986D5D955F619150668E436B8B357087297684> <956B55886D597B6E5D6D70615E73654F756941776D337A71277D7793675E8769617A6C64 6C6E675D706A4F736E417671337975277C7992646786676979696C6B6B6E5C6E704E7172 407475337778277B7B9061708464717767736A69745C6C764D6F7740737933767B277A7D 8F5F7983627976647A68677B5B6B7B4D6E7C3F727D33757D277A7E8E5C81826081756381 6866815A69814C6D803F71803275802779808D5B8A815E897461886764875968864C6C85 3F70843274822778818C5992805D9174608F66638D59678B4B6B893F6F87327384277882 8C589A805C98735F9566629258668F4B6A8C3E6E89327386277883> <8972557E735971755D6476615778654979693C7B6D307D72247F77886F5E7D7061707264 64746756756A49776D3C7971307C75257E79876C667B6E686F6F6B63716D567370487572 3C78752F7A78257D7B86696E7A6B706E6D72626F735571754874773B76782F797A257C7D 8467777969786D6B79616D7954707A47727B3B757C2F787D257C7E83657F78677F6C697F 606C7F536E7F47717F3B747F2F787F257B808363877765866C68865F6A85536D84467083 3B73822F7782257A8182618F77648D6B678C5F698A526C89466F873A73852F7683257A82 8260967663946B66925E698F526C8D466F8A3A72882F7685257A83> <7E7A55747B59687B5D5C7C61507D65437E69377F6D2C80722281777D775D737860677964 5C7A674F7B6A437C6D377D712C7F752380797C746572756866766A5B776C4F796F437A72 377C742C7D77237F7B7B716D70736F6574715A75724E7774427876377A782C7C7A237E7C 7A6F756F70766472775974784E757942777A37797B2C7B7C237E7E796D7C6F6F7D64707D 58727D4D747E41767E36787E2C7A7F237D7F786B846E6D84636F835871834C7382417582 3677812C7A81237C80786A8B6D6C8A636E895770884C72864174853677842C7983247C81 7769926D6B91626D8F576F8D4C718A4073883676862C7984247C82> <7382556982595F825D5482614982653E826933826D298372208377727F5D697F605E8063 54806648806A3D806D338171298175218279717C64687D675E7D69537E6C487E6E3D7F71 337F7429807721817B707A6C677A6D5D7B6F527C71477C733D7D75337E77297F7A21807C 6F77736678745C7975517A76477B783C7C79327D7B297E7C227F7E6F767A65777B5B777B 51787C46797C3C7B7D327C7D297D7E227F7F6E74816575815B76815077814678803C7A80 327B80297D80227E806D73886474875A75865076854677843C7983327A83297C82227E81 6D728E64738D5A748C50758A4577883B7886327A85297B83227D82> <698A55608A5956895D4C88604288643887692F866D2685721F857768885C5F875F568762 4C866642856938856D2F84712684751F84796785635E85665584684B846B41846E388371 2F83742683771F837B66826A5D826C54826E4B82704182723782742F827727827920827C 6580715D80725380744A80754180773780782F807A27817C20817D657E775C7F78537F79 4A7F7A407F7B377F7C2F7F7D27807E20807F647D7E5B7D7E527E7E497E7F407E7F377E7F 2F7E7F277F7F208080647C845B7C84527C84497D83407D82377D822F7E81277E81217F80 637B8A5B7B8A527C89497C87407C86377D852F7D83277E82217F81> <5F93555692584E905C458F603C8D64338B692B8A6D2388721D87775E905B568F5E4D8E62 448C653C8B6933896C2B88702486751E85795D8E62558D644D8C67448A6A3B896D338870 2B86732485771E847A5C8B68548B6A4C8A6C44886F3B87713386742B85762484791E837C 5C896F5489704B88724387733B86753285772B847924837B1F827D5B88755387764B8677 4385783A847932837A2B837C24827D1F827E5B867B53867C4B857C42847D3A837D32827E 2B827E25817F1F817F5A85815284814A84814283813A82803282802B81802581801F8180 5A84875284864A83864282843A81843281832B8082258081208081> <559C544D9A5746985B3E955F3692642E9068278D6D218A721C8877549A5A4D985D459661 3D93643690682E8E6C278B702189751C87795397604C95634593663D9169358F6C2E8C70 288A732287771D857A5395664B936944916B3D8F6D358D702E8A732888762286791D847C 52936C4B916E448F703C8D72358B742E897628877822857B1E847D5291724B8F74438E75 3C8C76358A782E887928867B22847D1E837E518F784A8E79438D7A3C8B7A35897B2E877C 28857D23837E1E827F518E7E4A8D7E438C7E3C8A7E35887E2E867F28847F23837F1E8280 518D834A8C83438B823C89823587812E85812884812382811F8180> ][<A2564F935A54855D5876615D666561566966476E6B3872702B7876A0515992565D835A60 745E6465626756676B466C6F3871732B76789E4D63905266825668735B6B645F6E556570 466A733870772B767A9C496D8E4E6F805370725872635D74546376456878376E7A2B757C 9A46778D4B777F5078715679625B7A53617B45677C376D7D2B747E9943808C48807E4E80 705480615980535F80446680376D802B73809740898B46887D4C876F5286615885525E84 446583376C822B7381963E928A44907D4A8E6F508C60578B525D89446487376B852B7283 963C9B8943987C49956E4F9260568F525C8D44638A376B872B7284> <975D508A60547C63586E665D5F6A61516D6642716B347570287A76955859885C5D7B5F60 6D63645F6767506B6B426F6F347473287978935462875865795C686C606A5D646D4F6970 416E7334737628787A91516C85556D78596F6A5D715C62734E6775416C7734717A28777C 904D75845276775677695B785C60794E657A406B7B34707C28767E8F4A7E824F7E76547E 68597E5B5E7E4D647F406A7F34707F2876808E4887824D867552856857845A5D844D6383 406982336F822975818D468F814B8E74518C67568A5A5C894C6287406886336E84297582 8C4497804A95744F926755905A5B8D4C618B3F6788336E86297483> <8C6450806654736959666C5D596E614B71663E756B317870267C768A60597F635C726560 656864586C674A6F6B3D736F317773267B78895C627D5F6471626764666A57696D4A6D70 3D7173317676267A7A87586A7C5C6C705F6E636370566772496B753C707731747926797C 8655737A59746E5D75626177556578486A793C6E7B30737C26797E85527C79567C6E5B7C 615F7D55637D48687E3C6D7E30737F26787F8450847954836D5983615D83546282486782 3C6C81307281267781834E8C78528B6C5789605C885461874766863B6C84307183267782 824C937751926C5690605B8D53608B4765893B6B87307185277783> <826B50766D556B6F595E715D52736245766639786B2D7B70237E7680675975695C696C60 5D6E6351716745746B39776F2D7A73247D787E63617466646869675D6B69506E6C44726F 3875732D7976247C7A7D606972636B67666D5C696F506C724470743873762D7779247B7C 7C5D717160736663745B67754F6A77436E7838727A2D767C247B7D7B5A79705E7A65617B 5A657B4E697C436D7C38717D2D767E247A7F7A58816F5C81655F815963814E6780426C80 3870802D75802479807956896F5A88645E875962864D6685426B84376F832D7482257981 7954906E598E645D8D58618B4D6589426A87376F852D7484257982> <7773516D745562755956775D4B78623F7A66347C6B2A7E70218176756F586B705C617260 5674634A76673F786B347A6F2A7D73227F78746B606A6D63606F665571694A746C3F766F 3479722A7B76227E7A736868696A6A5F6D6C546F6F4972713E74733477762A7A79227D7C 72656F6867715E6A73536D744970763E73773476792A797B227D7D7162776765785D6879 536B7A486E7A3E717B34757C2A787D237C7F70607E66637F5C667F52697F486D7F3D707F 34747F2A787F237B806F5E856662855C6584526884476C833D6F823373822A7781237B81 6F5D8C65608B5B648A516788476B873D6F853373842A7783237B81> <6C7A51637B55597C594F7D5D447E623A7F6630806B2781711F83766B775862785C58795F 4E7A63447B673A7D6B307E6F2780732081786A735F6175625776654D776843796B397B6F 307C72277E7620807A69706660726956736B4D756E437770397973307B76277D78207F7C 686D6E5F6F6F5671714C7373427575397777307A79287C7B217E7D676B755E6D76556F77 4B717842747939767A30797C287B7D217E7E66697C5D6B7C546D7C4B707D42727D38757E 30787E287A7F217D7F6567825D6A82546C824B6F81417181387481307781287A80217D80 6565895C6888536B874A6E864170853873842F7683287982217C81> <6282515A825551835948835D3E83623583662C836B2484711E8476617F57597F5B50805F 4780623E816635816A2C826F2582731E8378607C5E587C614F7D64467E683D7E6B347F6E 2C80722581761F827A5F7965577A674E7B6A467B6D3D7C6F347D722C7E752580781F817B 5E766C56776E4E78704579713C7B74347C762C7D78257F7A1F807D5D73725575744D7675 4478763C7978347A792C7C7B257E7C207F7E5D717955737A4C757A44767B3C787C34797C 2C7B7D257D7E207F7F5C707F54727F4C737F44757F3C777F33787F2C7A80257C80207E80 5C6E855470854C72844474833B76833378822C7A82257C81207E81> <588B50518A5449895841895D38886130876628876B2286711C867657875750875A48875E 40866238866630856A29856F2285731D847856845D4F84604784633F846737846A30836E 2983722283761D837A5581634E82664782693F826B37826E3082712982752382781E827B 557F6A4D7F6C467F6E3E80703780722F807529807723817A1E817D547C704D7D71457E73 3E7E75377E762F7F78297F7A23807C1E817E537A764C7B77457C783E7D79367D7A2F7E7B 297E7C237F7E1F807F53787C4C7A7C457B7D3D7B7D367C7D2F7D7E297E7F237F7F1F7F80 5377824C7882447A813D7A81367B812F7C80297D80237E801F7F80> <4F934F4892534191583A8F5C338D612C8C66258A6B1F88711B87764D9055478F59408E5D 398D61328B652B8A6A25886F2087731C86784D8D5B468D5F408C62398A663289692B886D 2586722085761C857A4C8B61468A643F896738886A32876D2B86712685742184781D837B 4C886745886A3E876C38866F3185712B847426847721837A1D837C4B856D45856F3E8571 3884733184752B837726827921827C1D827E4A83734484743E83763783773182782B827A 26817C21817D1E817E4A81794482793D827A37827B31817C2B817D26817E21817E1E817F 4A807E43817E3D817E37817E31817F2B807F26807F2180801E8080> ]]] put dup /DecodeABC [ {{0 0.00392 0.00784 0.01176 0.01569 0.01961 0.02353 0.02745 0.03137 0.03529 0.03922 0.04314 0.04706 0.05098 0.0549 0.05882 0.06274 0.06667 0.07059 0.07451 0.07843 0.08235 0.08627 0.09019 0.09412 0.09804 0.10196 0.10588 0.1098 0.11372 0.11765 0.12157 0.12549 0.12941 0.13333 0.13725 0.14117 0.1451 0.14902 0.15294 0.15686 0.16078 0.1647 0.16862 0.17255 0.17647 0.18039 0.18431 0.18823 0.19215 0.19608 0.2 0.20392 0.20784 0.21176 0.21568 0.2196 0.22353 0.22745 0.23137 0.23529 0.23921 0.24313 0.24706 0.25098 0.2549 0.25882 0.26274 0.26666 0.27058 0.27451 0.27843 0.28235 0.28627 0.29019 0.29411 0.29803 0.30196 0.30588 0.3098 0.31372 0.31764 0.32156 0.32549 0.32941 0.33333 0.33725 0.34117 0.34509 0.34901 0.35294 0.35686 0.36078 0.3647 0.36862 0.37254 0.37646 0.38039 0.38431 0.38823 0.39215 0.39607 0.39999 0.40392 0.40784 0.41176 0.41568 0.4196 0.42352 0.42744 0.43137 0.43529 0.43921 0.44313 0.44705 0.45097 0.4549 0.45882 0.46274 0.46666 0.47058 0.4745 0.47842 0.48235 0.48627 0.49019 0.49411 0.49803 0.50195 0.50587 0.5098 0.51372 0.51764 0.52156 0.52548 0.5294 0.53333 0.53725 0.54117 0.54509 0.54901 0.55293 0.55685 0.56078 0.5647 0.56862 0.57254 0.57646 0.58038 0.5843 0.58823 0.59215 0.59607 0.59999 0.60391 0.60783 0.61176 0.61568 0.6196 0.62352 0.62744 0.63136 0.63528 0.63921 0.64313 0.64705 0.65097 0.65489 0.65881 0.66273 0.66666 0.67058 0.6745 0.67842 0.68234 0.68626 0.69019 0.69411 0.69803 0.70195 0.70587 0.70979 0.71371 0.71764 0.72156 0.72548 0.7294 0.73332 0.73724 0.74117 0.74509 0.74901 0.75293 0.75685 0.76077 0.76469 0.76862 0.77254 0.77646 0.78038 0.7843 0.78822 0.79214 0.79607 0.79999 0.80391 0.80783 0.81175 0.81567 0.8196 0.82352 0.82744 0.83136 0.83528 0.8392 0.84312 0.84705 0.85097 0.85489 0.85881 0.86273 0.86665 0.87057 0.8745 0.87842 0.88234 0.88626 0.89018 0.8941 0.89803 0.90195 0.90587 0.90979 0.91371 0.91763 0.92155 0.92548 0.9294 0.93332 0.93724 0.94116 0.94508 0.94901 0.95293 0.95685 0.96077 0.96469 0.96861 0.97253 0.97646 0.98038 0.9843 0.98822 0.99214 0.99606 0.99998 1} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind {{0 0.00391 0.00781 0.01172 0.01563 0.01953 0.02344 0.02734 0.03125 0.03516 0.03906 0.04297 0.04687 0.05078 0.05469 0.05859 0.0625 0.06641 0.07031 0.07422 0.07812 0.08203 0.08594 0.08984 0.09375 0.09765 0.10156 0.10547 0.10937 0.11328 0.11719 0.12109 0.125 0.1289 0.13281 0.13672 0.14062 0.14453 0.14844 0.15234 0.15625 0.16015 0.16406 0.16797 0.17187 0.17578 0.17968 0.18359 0.1875 0.1914 0.19531 0.19922 0.20312 0.20703 0.21093 0.21484 0.21875 0.22265 0.22656 0.23046 0.23437 0.23828 0.24218 0.24609 0.25 0.2539 0.25781 0.26171 0.26562 0.26953 0.27343 0.27734 0.28125 0.28515 0.28906 0.29296 0.29687 0.30078 0.30468 0.30859 0.3125 0.3164 0.32031 0.32421 0.32812 0.33203 0.33593 0.33984 0.34374 0.34765 0.35156 0.35546 0.35937 0.36328 0.36718 0.37109 0.37499 0.3789 0.38281 0.38671 0.39062 0.39453 0.39843 0.40234 0.40624 0.41015 0.41406 0.41796 0.42187 0.42577 0.42968 0.43359 0.43749 0.4414 0.44531 0.44921 0.45312 0.45702 0.46093 0.46484 0.46874 0.47265 0.47655 0.48046 0.48437 0.48827 0.49218 0.49609 0.49999 0.5039 0.5078 0.51171 0.51562 0.51952 0.52343 0.52734 0.53124 0.53515 0.53905 0.54296 0.54687 0.55077 0.55468 0.55859 0.56249 0.5664 0.5703 0.57421 0.57812 0.58202 0.58593 0.58984 0.59374 0.59765 0.60155 0.60546 0.60937 0.61327 0.61718 0.62108 0.62499 0.6289 0.6328 0.63671 0.64062 0.64452 0.64843 0.65233 0.65624 0.66015 0.66405 0.66796 0.67186 0.67577 0.67968 0.68358 0.68749 0.6914 0.6953 0.69921 0.70311 0.70702 0.71093 0.71483 0.71874 0.72264 0.72655 0.73046 0.73436 0.73827 0.74218 0.74608 0.74999 0.75389 0.7578 0.76171 0.76561 0.76952 0.77343 0.77733 0.78124 0.78514 0.78905 0.79296 0.79686 0.80077 0.80468 0.80858 0.81249 0.81639 0.8203 0.82421 0.82811 0.83202 0.83593 0.83983 0.84374 0.84764 0.85155 0.85546 0.85936 0.86327 0.86717 0.87108 0.87499 0.87889 0.8828 0.88671 0.89061 0.89452 0.89842 0.90233 0.90624 0.91014 0.91405 0.91795 0.92186 0.92577 0.92967 0.93358 0.93749 0.94139 0.9453 0.9492 0.95311 0.95702 0.96092 0.96483 0.96873 0.97264 0.97655 0.98045 0.98436 0.98827 0.99217 0.99608 0.99998} dup 3 -1 roll 0 1 3 copy 3 -1 roll exch ge {pop pop pop pop pop 256 get} {pop 3 copy pop le {pop pop pop pop 0 get} {exch dup 4 -1 roll exch sub 3 1 roll sub div 256 mul dup floor dup 3 1 roll sub exch cvi dup 1 add 4 -1 roll exch get 4 -1 roll 3 -1 roll get dup 4 1 roll sub mul add} ifelse} ifelse } bind dup ] put dup /MatrixABC [ 0.625 0.625 0.625 0.3712 0 0 0 0 -0.928 ] put dup /RangeLMN [0 1.1856 0 1 -0.464 1] put dup /DecodeLMN [ {-0.1856 add 100 mul 0.625 div dup 8 le {27 24389 div mul} {16 add 116 div dup dup mul mul} ifelse 0.4821087968 mul} bind {100 mul 0.625 div dup 8 le {27 24389 div mul} {16 add 116 div dup dup mul mul} ifelse 0.5000076295 mul} bind {0.464 add 100 mul 0.625 div dup 8 le {27 24389 div mul} {16 add 116 div dup dup mul mul} ifelse 0.4124589914 mul} bind ] put dup /MatrixLMN [1.9999694824 0 0 0 1.9999694824 0 0 0 1.9999694824] put dup /BlackPoint [0.0210579822 0.0218397835 0.0180157552] put dup /WhitePoint [0.9642028809 1 0.8249053955] put] } ifelse /CSA add_res /CSA /1 get_csa_by_name /Intent /RelativeColorimetric >> csacrd /1 /CSA get_res setcolorspace clp [1 0 0 -1 0 320 ]ct [283.004 0 0 213.893 -0.240037 106.347 ]ct snap_to_device Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf << /T 1 /W 1179 /H 891 /M[1179 0 0 -891 0 891 ] /BC 8 /D[0 1 0 1 0 1 0 1 ] /DS [ [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx ] /O 3 >> %%BeginBinary: 1 img JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!.ZOJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB& JcLB&h>dNVV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcN@^!!14BJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3 aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::C JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"n JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX- !!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNW V>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"t JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB& JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2J JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM): !!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB& JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmd JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`P JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& \c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^!!::CJcLB&JcLB&JcLB&JcLB& PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&Q2gmdJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&\c;^3aoI"nJcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!7`PJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&h>dNWV>u2JJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN@^ !!::CJcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&Q2gmdJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcOX-!!9"tJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&\c;^2aoI"nJcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM):!!.ZOJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB& JcLB&h>dNVV>u2JJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlQC9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcPKEN<+V3JcUH(JcUH(JcV,;JcNOc_uYGjJcUH(JcUH( JcUH(h#XAQRfMXQJcUH(JcUH(JcUH(JcWC_aoI"nJcLB&JcLB&JcLB&JcM&9JcNUe!s&H*"3(Iq"G-c. "G-c."G-c."Pj3X!1a)l!<N?*l3)\AJcpZ.JcpZ.JcpZ.\HL%TJcPQG!W`?)NWaq:JcpZ.JcpZ.Jcq>A JcLB&JcLB&JcLB&JcLB&JcLB&SH&`n!sJo.#OMeK#_E>6#_E>6#_E>6#e:5`!.k4G!!<9)"9e]-Op6LB Jd-f2Jd-f2Jd.JEJcNUe!!<-&rWUCJJd-f2Jd-f2Jd-f2Jd1$8V>u2JJcLB&JcLB&JcLB&JcLB&JcPQG !s8]3$]b^J%"\n>%"\n>%"\nQ%"\Jq!!36*"iUb!#_E>6#_E>6#_E>6#i,c`!1a)l!sAc5l3W%KJdI#8 JdI#8JdI#8\I$CYJcLB&JcLB&JcLB&JcLB&PlQC9_#OQ>"q(t@&BPN9&V:UH&V:UH&V:UH&`"%r!1a)k !sAo.$geCT%>#%@%>#%@%>#%@%Clqj!.k4G!!<<+#R^P>Oq!!PJdm;@Jdm;@JdmtSJcLB&JcLB&JcLB& JcLB&JcLB&SH&g%)Cn!<6gR3m7"RgY7"RgY7"RgY7(G_.!.k4G!!NWB+>>W/OYq_JJi/-;Ji/-;Ji/fN JcNUe":5bd0f6p/Ji83=Ji83=Ji83=Ji;FCV>u2JJcLB&JcLB&JcLB&JcLB&JcPQG#8JsjEHlbTHBW`. I"H`tI"H`tI"Ha2I"D@7!!Ei\6!\""A]eY;B7acJB7acJB7acJBAI3t!1a)m&19hOAc?<0B7acJB7acJ B7acJB7ad,B?C4+!;-<p"UPJB$BkjL$\Ab<$\Ab<$\AbO$\AAp!!=?9H(Fr0aeXNaJu"!oJu"!oJu"!o h5$nJSH&g/4(F)-OR/*]Ob/^IOb/^IOb/^IOh$Us!.k4G!!O0$A;6)(OcP*TJrbMEJrbMEJrc1XJcNOc ":.(a:fPP<JldP*JldP*JldP*Jlgc0V?!.e"Y4/N\@oQA]n3qL]n3qL]n3qL]n3r.]ug>,!;HNu+B!fj Y-"dgXb*[,Xb*[,Xb*[,Xd-#?!5SX;,#j,jrMn#=JuF:"JuF:"JuF:"JuIM(V?!+d"9L<_e(3m?K%kn3 K%kn3K%kn3K%mijaoI"np](IKBq)]I^6-0^^Oj4P^Oj4P^Oj4c^OcI%!!XWILo[Y[Y0!etXb*[,Xb*[, Xb*[,Xkg+V!1a)l,?KVtrhogsm]1r?JuaL(JuaL(JuaL(\Z<jQJcPNF"p-j*hVmJTPNIJZK'%[IK'%[I K'&?\JcNUe"Y=AW]"Pi!^Oj4P^Oj4P^Oj4P^Oj5V^SV"%!!XWILo[Y[Y3i?CXb*[,Xb*[,Xb*[,XgtRV !.k4G!!=HIL8Y$L!326`JuaL(JuaL(JuaL(Q)fK:^]4Q?3l^%8ioJ8EK'%[IK'%[IK'%[IK'(nOV?!.e "Y=AW]"PiE^Oj4P^Oj4P^Oj4P^Oj52^WHP.!;HNu,#sH"Xf\ahXb*[,Xb*[,Xb*[,Xd-#?!5SX;,?KVt rhogsb,^,pJuaL(JuaL(JuaL(h5dCQS,``p3l^%8ioKOiK'%[IK'%[IK'%[IK''W+aoI"np](IKBq)]I ^6-0^^Oj4P^Oj4P^Oj4c^OcI%!!XWILo[Y[Y0!etXb*[,Xb*[,Xb*[,Xkg+V!1a)l,?KVtrhogsm]1r? JuaL(JuaL(JuaL(\Z<jQJcPNF"p-j*hVmJTPNIJZK'%[IK'%[IK'&?\JcNUe"=n)O\@gP/!5A*?!5AEF K"ZcLK"ZcLK"ZcLK"^!RV?!.e"s?isWi`A)mB#o\nu_qprN2otJujR*YcR]'g8on-JujR*b,kHApT2L; JcPQG"!U]rVZ*UQVuWapW;`gnWrT0tVuWa;W.Lt"W/R\OVuEWHW.Lt"W2?NiVt[-A!5JR<!]%.6gY:W@ "5VhjiVqp7jp0u,io/bNh;!V;K%tt5eD0oV[bQJiK%tt5mbIZppY;VGSH&jC@$@t.\[q1?o=G"8rk8?G pqQa?!5,/?K"HWHZ+KbCgq/0MK"HWHb.IJ^pq+ZKJcPQG"s6ThV5gPrhlQs_Y,qW)!3Z1##-P)1XK8S- afU/sJut$7pT=LuJusX,JutoPq6'LpJcNUe"s?`iTr"Zbhl6UT!2ogp!35st!36!rri,stJuO@$JuR;" pSta&JuO@$JuS1;q5X4hV?!(c"=ThV`5_2do>q6\e(`^;iSrqrjp0u,hVR&Be'=f3K#rVdZ,m!hqp,2a grY/iK#rVdb/j\-cMl/lcHFE+aiXU8!;HNu-X;Y8['mI#\,j.Qrk/<GqS3$C!kc1VaLHi3K"-`KrOMj9 K"-EBK".Yer42O2JcNUe#96?\T;8B_W8OWWWiE5'poOP!rN-1)WiE%MWIh+$WR\!BWjo$[WIh+$WU?b\ WqiWk!1a)p*_gmKTqeE[m\]QP#,eK$Vl6Por2U%#W2HSoWi)YiJu4-sYGME"VPg?EVLk[sVLk\eV?Efo V5C0aVTJmj!;6Br++gDjXfpZf#IMFpgYL`FjS\-FiniMGf#u"?ag$H&K!C<?$FI7P]t(\^[^<EHK!Bp4 K!D2X#e%:W^qI:e[']Y6JcNUe"smB-Wj&e7hm3El\@K9O^&#MC]`c!Y\?rSoZ\#N8ZdlDW[(!AnZ\#N8 ZgP1!ZiIQ6[.go(!1a)p)b+k9T:r$Tm\KHM"/VrrY5YO'Y5GC+Y-"h-Y,\FrUk5CoUp6]qV>I(gV;%et Uk5CoUroJ;V50obUnjj]Uri[h!;HNu*Ck+8S=ZA1TEh0eVQ-SmW2TWprhot"WhlPcae46YJtS-soq?u1 JtR^gVP*p^!2KIcq4N<>^AnERCl4:9PMh`3SZfrXgYL`Gr8n:EhV6c-^osDsJsM"SJsOuR$^mQYUSjl^ TUhXARCSW8Q@bESQL:%ESYN*_Vk]fNRJE/G!1a)p+%UOBT:r!Rm\BBK#Ge?%Z*_'R^&,SD]`l!TYcF_! Vk\j=JtoTG$)jo.Yck11X/VuOUOo7mUOo8aUBdToY-G@=Y,VDrqP215JcPQG"r94,KSthMhi@r&Q^j_E Wqrh*Y-"h-X/;MWQ'.8kc&[I;JrbqQ!g/e:rgj:`R[BG*Ob/XGO+NFjNsLi6S=l[NS<oB;OSb)j!5SX> (HZ&WM2R>MN<kT0R@U%LWN)usX8]%$Wi)S]QBD<2O,epRJrPAAer:&uPEqZ,R[KM-P`Us:NIm.ANIm/Y N<bN/R@U%BR?dc4!06r9V?!(c"U6hQ84lVE:@h3d;IXj/Vn'q(jSe3KiniGD`i+c4?<C0'WD8%?JkiUH $WLMOI"ZliE+rcb<8C<$:4c5m:<QB?;IXj/TT")*=&MpmqbG96JcPQG#8JsjEHueSHJj/UI>*ZGSZ&j) qnN-D#J%(9RZEA\J'E@mI"Ha+HjbOdR\QgVT:;1/M1^D-Jp`/tVgJl&P+f"bXJ(l4JU`+FI"D@7!!a&_ 5[@l0AS'e4#\\.$J;BMbWil<&!3Z='"KJ)XKm<`BDeXo<JnK[Jen5A-HA.EFOGepHHZX,8B7acJB7adb B+&L'N16W3NIPk_Bk[BVV?!.e#7r7L?=[VZB's='B,G<$G^bC2Su/HdWiN2!W2HSkS</AJFDklmB7acJ B<l.XCjCYmP)bBRJ9l<Th.M=PJnK[Jb@_2uH]"2aQ]$<2Ch[S[B?C4+!;-<p"UGD@$K):/$l0p84(+,e ioK1_k2P7RgV\nP2Bj(Q%F#94$\AbH$O[Lg2GRRT763+J)A.Q/Jd[/<V[EkC-:W$NE(DGk&.K'F$\AAp !!NcN/j`#shF@iD<a]]eOJK7tqnE?K]t(24K5gs)>Yp,EJk(D_ejg*HDM+7HQ]HlLEF`+\7tO6_7tO8" 7gr79OJfI^OEXl+:eXFX8#?9W!!NWC,;_;;lo=Sr#<P@L=CQW>V#.8$Y-"h+R>#K`;b93Q3.a,A33kLO 6Wn8VM1U"lBO+J(h)L!GJiJ?Ab;]nq?@.p4P'^Y/5sIIlr&Dh!JcPQG":5eg1cX;P%6R-W=CZZ<Tr=uk X/i9"W!B2cK5P!p90pf`Ji\KEN]IP:>&JhFJ9Z$H?;j@G3eBDE3i>"I6=5#$ToaS18OPj.48_-k!0mNs !XBuPT]+tmk2taahVPq`2A$&l!eUK)!.k4$!!iZ=/3bg4((:AU!.k3&!.k4=!!WWO>bbCH#Fkdb!!EE3 %i#lG(\8FK)C7$t891$"^%oDJ\>>-u9Kb$QW>C.&Jet^/$R\DVKp.7;E*l=#.,>\k(P3HT(X!U',>W]\ [%DeI.jZ>Z)#P2m!.k4G!!<?/$P;)*#o"=(/NI-gSuo0mXU))0P'0hf0-hF[&V:UH&WRG2*&^c7I;ib% 9g('LJe<SHJe=mm$lM6ANMMJH6m*Ec()$NWJcNUe!X&`8gCY/7*@3="?\"WEW2ckuX/`1uVN>q%4p!Da )2/ZS&V:VG&ITX><H!8(AmA(q/g%V9Je<SHJe@G`$lVBDMkPuA73W`i()-TXV>u2JmJmb%/q;a;jQ,Ic jQ,=-=;q=<!.k3&!3cG,!Ym'u$3Sr]JcLB&JcNmm":Ri!64CU/JcO*s#Qb;E)(/I;VS)oAr4`QJUkW8B //eir!RCat!.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KQiIHp"q;7d7;e<l XK;<$"KIQ&:,2qr'F+X>LB)o+JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF !:p1!!XB/K*_1+0WiE"rWr8t)VN5[m1*[J<!<K5$JcLB&Z2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)` ?&#&+?8;rq"U"kF!.k3m!!X'>cJ..2jSe3B[Sdm^!.k3&!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[E QiIKp"q2+a7WOj"[CNsJ^BD*KR!rHG6mrTJrW.iUJcLB&ec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/m E1OA*EBb'D#6Y($!.k4B!"8o3#RqM,?@nfHWi`H&XUD.tK5"+=*t&,O!<K;&JcLB&Z2b7=,=>s_B3@hg .MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3s!"8o3#n7V/?\"Z@VQ-TnWsbhlJn\(?+:J;Q!<LRJ JcLB&NW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!0R<d"u(q5_q*iGjoiVA1(4/7 !.k3&!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?o)K1"":#;I2I;*3XL#IOrP&`QZ_s1@>rNN$!s/M* !.k3&!3uS4$nbJ'M0s2G8i.\#h#N$,JcLB&b5_qW2fP=pRrLY*$O6e8`;kJicN"=R"9f&?.SOcAR\Zt] XUD;,P_3aE.hMjc!Wg[KJcLB&NW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!13`p !<`Q3%4b1lNL-?:W;Wb"Wh>N,CBdKa&H`+:!Jpf.!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=h L7s9,1(=Km"9G1rJcP-;"VOOKRDe(_joj%p>VZhe!.k3&!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^Aric cN"@S!WrT4-V89<T<5W:rP&`R\[&9)G"3SW!s8SO!.k3&!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3 S[=l+58">/"9JE#JcM/<$NU;2"9oi,>Bu-sWV`e"WhYu9#%0D*"9S`-M#`,-JcO@%$OJ%F@ru?d8inL> $+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!:p1!!<N?+#9H!4G_qicW;Wb)Wi)JTK46kX"9\f.XT3qQ JcN(V$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!6>-D"!U0VZ/5HA"l$SMDDh^B !.k3&!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EPQ1sk)E(]AOJK4rrP&KK]XkVR#)QP4$3gV7M#`,- JcO@%$OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!:Kmn!u*7T@XF34XS]++X/VM/ 8KS0?"9P\*JcLB&Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3o!#PeP/4X2q O.`GOWiN2!Wi)_[FA!_]"9\eR!.k3&!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE# JcLl4%0n(TQJCQ^k2tOO`j'C])M8$A!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcP6>(]k<u5[&K# Xh;?\^;%Cq]Xb84E'kfc%0ip7JcLB&Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H !.k3o!!r]9+#6AuJt&pEr2g:.Wh4iI1`6l3"OR4$!.k32!"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0.pRn+ L0ZMC#R(>3quD<KPQ1sj%j3W!Aq?>Lrhp"#W2ckqS-FLL2Am)5"Gm,1!.k4%!"0)Y7:gRR>"q+.)%!hR JcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcP'9%LOq2bM:t5jPek?`.orJVuVDLJcMtS!sokR"5!U*!.k3& !6G3D"?WM?"MXqg!6Y?J!=Tkq4(F)A\c0;B^](nO[%W+Y4Xq<Wd/\auJcLf2$OeXdG_pfc>Y6gr%>"S3 !.k3K!"9/mE1OA*EBb'D#6Y)*!.k38!!r]4'H\r(EfmB)riH=+XfS\$#)mFn0-Cr7M#`,-JcO@%$OJ%F @ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!:Kn)!XTP`02ceNVlHbqWi2hqWhG;f:,!e) #d")Y!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcNai%2W!Se(`a?in`A< UIGm?!.k3&!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EPQ29r"q;:g89^Q1]"Pel^V7Cp\H](!G[!E[ %uC:<!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcP6>$ipJ;&/@37Lnq)S XfhZ*#ct%oJ7D/+*"/kKJcLB&Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3o !"Ar3#n[t8@tp\TWi2krrhp(!Q%!:;1*-eM!.k3&!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9, 1(=Km"9JE#JcLf2$O8_f`m`]%jPetN]`Mgs$&&A2!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcP3= $N^D6"u'SNYdh<Y^AYeO]X";oG?$C5XT3qQJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&" &dnpI!Q>%j!6P9K!WrQ.,Z/u^WiW<!XTkJ\HX]Aj&CCK0!.k32!"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0 .pRn+L0ZMC#R(>3quD<KP5kRarWEHQ;gY%3W2cfpWrT.(SrS)+748_(!.k3&!7h,X#p_rNFD"cO4=M-S \H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEkPtc5MRLR[iVhmAerNWO#H@cU!.k3S!!<NG$No#]JcLB& JcNmm"9^fa2[$kqJcNpn$NU>3"Xd/pSuT--^&>\R]sXr6NGM'."pG)1eGt1$JcLf2$OeXdG_pfc>Y6gr %>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k37!"&c0!sBT/B8N%OWr/t!X9thnMg/>^)$C'E!f[23!.k4% !"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcP3=$N^D5"<KmBLR+U0Vu<Y$WhPi: G??gBrWE3&YlK@UJcN(V$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!5nj@$U8Hk ^tntO"l#tp732NV!.k3&!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EP5ksk!WrNF5@]>6WO0A;^AtqS \[/E1J6=N8$3gTl!.k3&!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEmJmRq !WrN?0i2b@Q_aP]$`pA(Ru;&P,RObZ"0hiX!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc2 0b"Bl"9HIAJcNpn$N^A3";WajDM"+HWr8t+W2?8UM/,[/$4$b;eGt1$JcLf2$OJ(IATVQg9fsjB$%`// !.k3K!"9)`?&#&+?8;rq"U"l(!.k30!!Eol@\DKSjoF0>_jPO6%u1.:!.k4"!!<NG$Nma9JcLB&JcP0< "9^fa2[#TMJcP3=rW*9+'J)abJt&sVrP&`R]XbMTPA<;s&./TG!.k3&!3uS4$nbJ'M0s2G8i.\#h#N$, JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiaoDDBrW397+uiG:Ln=IF$*'npI98-7$O6gb!.k3&!0.$e#pVfI FD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLu7!!3'##7i%?;f%2XWr8suW!]Q&Umc[50G+^! "H<D5!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcOp5!t[MCf)=_8hU]WI Hm\us!.k3&!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^Aric`W-5P*%jNiNN'Sg^C%]g]t'kb8g+r[#1W^* !.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KNrTCj'dGJ5GaGT2Xo>F-WfC^R (_I)XN<"P1JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!9sOh#o+^B<Hj\- rMp=+W2QVjN+Y6j&IJZG!.k3&!3uS4#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJi _>jZ>*b*=kjp'o*hVGt>$d\m*!.k3/!!<NG$Np;,JcLB&JcMVI"9^fa2[&gSJcLi3$jdRj/Q$ne[(O)c ^V:/k^V7@[NFtI-*"2k.!.k3&!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZE l2VY*%N$EVB8NFeXK8S,Xfee/QZuIa,8CLcZ2fIVJcN(V$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7 UkW/0%1!+?!Q>%j!6,!U#7h[s6YD1JWiE"rX/`+sWg.d.1*[M?!S.7&!.k32!"0)Y7:gRR>"q+.)$tlp JcLB&VZ7,1/7""(KO-DC#R(>3quD<KM?!kh5G6<Ugu@H#jPo.DA0(f/!.k3&!7LoM#oX0RZiG[XJcLB& m/R7l4/Y"?RfJ$?l2V1r$l'gJC6,C%\\,WS^B_EUSV(HC/JS0bZiG[XJcN(V$OeXdG_pfc>Y6gr%G_#9 !.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!6,!G":5VS0iiRfUoLTrXUD;6T87>]3$Sq8!<LgQJcLB&NW9Fn ,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!07*g":5VU108^dTr+igWsu)/W2c>ADGrS@ %fub4O8sk4JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF!9F1j![;HU^!PWu jQ,=OJiaRH!.k3&!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^Aric`W-AK"q(qm<dpUAZamdJ^C%Z]WLANO 590e+!S@C(!.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KNrTRj":,AZ7;7XL UoLQ!rN-C%Q\B?T0bsfk!K[;5!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1r JcP'9)?U*J$6r&TLmas5W2lu!Wi2VVK5X[D('4L;ZiG[XJcN(V$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N #:s/8TnH`-%1!+?!Q>%j!5JRE$pf$(^t\#6jQ,'jA2Y1N!.k3&!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"? p&K[ENrTRh!WrNE6>VaYY.)*ZrkA`P\[/?1I8M<nrW/,]JcLB&ec6'd/lR"OHu<1]1a*==!.k3&!.k4> !"9/mE1OA*EBb'D#6Y($!.k49!"/f/!s98p=F6+!Vl]fu$EBniN+bKs!s/K([/bdYJcN(V$OJ%F@ru?d 8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!6,!H!<N?*'f9$<NL?TBrMp=)VP'64BL<gC!W`>T !.k3&!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLW-"p,uDGHKW^roOC@_j510 %#Y+;!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcOp5#8/akH'"f*]`#SR^:^t^Xc@!O%LNCB!O_u[ !.k3V!"02b:3(r/Al_AU*t6s*JcLB&JcNso$j\Y'QEZQf3tVf(!s-@@JcNXf#Rr.L@sa9/Y-.`*$a-M* RsJ!`$3p\9!SRO*!.k32!"0&T5$i)6;aiSk((#QmJcLB&VZ7,0-rkeiITA'1#6Y,0quD<KMZ="n-UhQl NL[#I&#uY1W2c_gR!DX^$3p\:!KmG7!.k4%!"0)U5[S>9<(Anp(C@VPJcLB&JcP6>$jJ+]J"(ge0+A0i "9G1rJcOg2%gXFUMTb#?jQ>FJ[[D.Y!jDZV!.k3S!!<E:"p3EWJcLB&JcNmm"9L-+-j%-`JcNXf#n81E >'Z@3\\5]U^C.`e\?hZM:*^\g#Q`WZJcLB&NW9Fp-:VWlC0XIt//o"L!.k3&!2ff*#;9A>UkW55%LNCB !W2qL!/gg_#obQh@t0iFXUhP:Xfeb,WhY>Z4rY1D"p0qfJcLB&ec6'`*&^c*<_5G/+r(Bo!.k3&!.k4> !"9#V96?;89e$JT"9S[u!.k45!!`fN0hGo)Q)FV[%B?A,W2?5@A3_+K$jHdA!.k3&!3uS4#Tbs*@TQ2e 1*[M?h#N$,JcLB&b5_qS,u&KBE)%hh#6Y/1`;kJi^&SWK.V-*HhW!VUgW-[b3!e"6JcLB&MZ<e[#6Oc& JcLB&JcMSH!ZG,Uo`0RDMZ="i(FV=KJt]Tc&&#Zk^V.=n\YP'n4Y%K]"-NY9!.k4%!"0,X5$Vl/;+*;i (^mkSJcLB&JcP6>$jJ.YI$o7Y/dr!h!s,(qJcOp5#6th^/P0f<VZ*\,Y-"h-Y,[V+;D0.-#m7U9JcLB& Z2b7;))+Wa90b?b*"iP5!.k3&!.k3o!"8uP6"bj^6R)mA"9S\D!.k3f!#PqQ+"g3&MP@&IW2Q_oWiDtX FAsq<'aXur!.k3&!0.$e#8o6h=A;+?/05H1JcLB&JcM\K$j7\@B7a_a,RFYX!s/<"JcLN*!t[r#gBucn ioJqLcFI!p!f[23!.k4!!!!)+!.k3&!.k4;!!3Qd$(:jG!9O7d"Ul%b4DpIjrk8<G$GO3eYF'W:5:@0I [K(mZJcN(V$OIk4:gHpf4>7up$Jb]6!.k3&!6Y?N"XHTWMf)*7$jQq<!Q>%j!5\^Q":,JQ/m3b#XKAV- Xfee.XIb&U755hn"53a,!.k32!"/uG.R-Ql2_H?n&-mdeJcLB&VZ7,.)`V&E=ZRW1"U"o.quD<KMZ="c #nIe*>(E6Frhogtrhp+&RY#-A1*7#/OoU(6JcO@%$O7Iu5ts^-0I@\L#Ishd!.k3&!:Kmr"<9I-FBUdL #mCG6!MKLF!9!nf""o_igYUrPio/bJHnl&6!.k3&!.k3&!.k3&!6>-A!uh?V!.k3f!"/l5$4SFfL8h\n ]tOBZ$b`pCNcS2Z*<cKF!Sma-!.k32!"/uI.R-Kj2_QKs&I3mfJcLB&VZ7,/*BI>D<]VB2"p>#/quD<K MZ="b":#5T88soo!NN="XU:ndH<rui('F[?!L3Y:!.k4%!"/oA+>Go4.jQ)L%0a9BJcLB&JcP6>$j7=t 7p\V9(^C0H!s,(qJcOp5$NgM:#p;fYQ)1CYW;Wb)W1f8t?UZL]"9JW*\H%3]JcN(V$Nq%a1-@BE,p!d1 "l001!.k3&!6Y?N";WU]?Ul^d#6Y/3!Q>%j!5&:8(1aVee)(&c"Q#\I+9pBsJcLB&JcLB&JcLB&UAt8u oDjICMZ="a"9o2V7rjop!jK2JrP&cT\?2B`E(hYf"9S]+Q2lL:JcO@%$O%(^.krS%+W:t%"h=Vb!.k3& !:Kmr!u!%F:cg'?"p>#0!MKLF!9O7h!X&W2(cYiQQ_1:Zr2g@,S;V\u4<Fh3!s/M7!.k3&!3uS4":Gtf -R'NI'Fb<Nh#N$,JcLB&b5_qQ%NI,d/fkQ,"9S]+`;kJi_>jrF"9\rI3a[E&S>N=bWskr(R>H2p4s1+6 !s/M[!.k3&!0.$e":Q%i-R0ZM'FtKQJcLB&JcM\K$j7(^0L7?6&Hi4=!Wi3!JcLK)!X:8f!fFA=rT4:B Zune["HNP7!.k3&!.k3&!.k3&!.k45!"/f0"9fQ">^i$9ZFg%L$bNdKUP<,6&-i@@!P/8_!.k3V!"/l9 &/ZE*'bUua"p<Z]JcLB&JcNso$NgbO,:t)T$j6Y6!Q4ti!5\^C!WrQ.&M$FeJs)i*XUMA6Un!Qd9e$MS "9S\]!.k3&!0.$e!s]2H().;h$4$b:JcLB&JcM\K$NgYG)'^"2#Qt52!rDtL!/gg_!WrQ.&M-RhJ-(h( WVrk+W2QDXO)RiE$j?b9!L<_;!.k4%!"/l6$kjBj&J#3S"9c78JcLB&JcP6>$NgYH)C$+3#m:>3!h]OF !8dbZ$nteEao1?*il@^9<#2e?JcLB&JcLB&JcLB&JcLB&_>jrE!<N?5-q%KmR&ddq^C.`e\?q`H6PTt6 "9I?ZJcLB&NW9Ff!sT#<#mUY<"9S[V!.k3&!2ff&!<`W9%LWLF!r`5t!.k3/!!iT,!WrcN2,@ofK:/b9 XU2#'LL)eK#R(>4Q2lL:JcO@%"p+l0"pY>9rWE6(!kA;_!.k3&!:Kmq!<`Q3$4$e<!WiB'TE'QDjo>bi !WiH2+#Zu1JsN83Wsl#.WMZAB?T&K%"U"n<!.k3&!3uS/!X&W1#6tG3"9AT+h#N$,JcLB&b5_nN"9f)= #R(>4!W`>?!.k3^!!<WbDSZ55#3=O\[%KA_fDpL'JcLB&JcLB&JcM&9JcLQ+":6#$7V)^WUU@eLrkAHI rk/Q8KiKE6%L<0&!.k3&!.k3&!.k3&!.k3&!9*tc"r/CB;K.\oXf\c*XU;/3Y*Eon)\<>\"1eJa!.k3& !.k3&!.k3&!.k3b!!``D-9>+FNM?EN%B?J-W2ck\DabZY$3gUh!.k3&!.k3&!.k3&!0mP9!.t7O!Y#o? W8?LmjQ>FVgXBIAO8sk4JcLB&JcLB&JcLB&JcOd1%0dIj0hlhXYIqN]]t_;\]a(^)E(2K'&-TQEJcLB& JcLB&JcLB&JcLB&^&SEA%N-WW@"OuQqlL1+XdjlG2C'%G"Ps-1!.k3&!.k3&!.k39!.k3+!!EE8)CI`S @XsrJWi2ksrhp+&R=8F$,o6smQ2lL:JcLB&JcLB&JcLB&JcOU,%L+V:bLYG)k2G1PgNP+M[/bdYJcLB& JcLB&JcLB&JcNLb(^(6]*]@G`Vms:M]t_=r]tLbGLhTO;)@#$uJcLB&JcLB&JcLB&PlQC9LB%G[#S.Y" #Z#K*W2d#&XfhZ*#G[5u<BMWC"I9%>!.k3&!.k3&!.k3&!.k41!"8u:%i6`nEg!8rWi)osW!K;oMK)]] -PQ]p!.k3&!.k3&!.k3&!.k3&!4W"=(gO8^d,!jDiSNCS7Mc-[!.k3&!.k3&!.k3&!0mP9!/COW!X/l= +U1VcT!Gf8^&>\O^::55Lh]C*#aPIB!.k3&!.k3&!.k3&!.k41!"&c1"pc&.AVm+YWr9%+Y-"[kLiQNS )[<kRJcLB&JcLB&JcLB&JcLB&^&SuO":#5N5%]SAUSk,mWiE"rVNusV=#_3)h>i--JcLB&JcLB&JcM&9 JcLB&&-*#$O/g.Qk2bU_iN[8](BTd#JcLB&JcLB&JcLB&JcLB&i;iiX#7ie-OK#Io^&5VP]<eQ1K3L&= !W`>8!.k4<!;llq!riB$!rN)1!;llt!r`5u!.k3&!.k3&!.k3&!5/@>!<E60/6$t_T;\pjXU;/*R#>fQ -3sYS!T=$1!6P<A!Vc]r"8`0"!R1W3!<3)r!ri:p!.k3&!.k39!.k3*!!<6&!X],`<dL%$V5jHo$E0V_ M/Gs5#m(//R/iHOrrMWkrrKV0!!2rurW1UNJcLB&JcLB&JcLB&g].KZ,\2e9e,8>2a-LF+&[qal!.k3& !.k3&!.k3&!.k3a!<*!($nP8"PG>@mr4`WQ\?W&tDaPHP#R(:h!.k3n!#GY<":#2=$4@7N%1WjW%1EXO "pG)1!<LRJmJmXr!WrQ0#71bI#mLJ4U&]cFJcLB&PlQC9L&h2R!!icQ5[o2'T;qgk$a-J%R=/6q'aP!H !h'+T!<*!'!sAc2#7(Y5$3LS@#R:D5"9SQ']`8<=!sJi6#6kA9rW<-$f`6U(JcLB&JcLB&JcOa0rW*61 ,=5jeNLQdDWXZ#0Whu>PHs8KD#mLM6^&W`bnc/XjrW3-(":"W-#7(P<"Tnl0!kJ@>!X&Z5$4$h=!s/Q+ quD<KJcLB&JcLB&JcN7[":$>MK#%BH#Nk0tZ&E<C"5Em.!.k3&!.k3&!.k39!.k3)!!30%#mMP7=a#n( [f!lJ]t:e\Tmp)o(_@#VRK/NO&-E+B$kEpb(E+55*ZZ7?)AiYl%LE:A!Wg"8$ipG7#R_+T'cI\n"p*BW JcLB&JcLB&JcLB&huF,c!<sAn7pp\-Vlm3$XU;/.Ul9"V+qb7g"24be!:g*u!<E6'"9o2B%M9?i(&f!S ().Al$j["=r;jV4$j$S=%1j!Y$k!=F!s/?#JcLB&JcLB&JcLB&]DriN!='Jq8Rd"-USt,kWiN.uV4`][ 7jAZU#6WrcJcO'r"p+i/":#8CrXo8H'G^T]#nmgY$3p_;!W`>J!:Bgq!X/uE'bC`X"9JZ-!MTRG!.k3& !0mP9!.k4M!"K2Y>,pTAjQ,IXa01du%?pjE!.k3&!.k3&!.k3&!.k4-!!i`B-9+nLS$Kd,^C.`g]Xt5* C-Es^%0aHGJcP3=(Bb!P&f2N1,q(5p0/"n--mTfJ%gW=@!knXC!<i`;&Jc</-QEa*!W<"M!.k3&!.k3& !.k3^!!rc=*%XBeLnh)Tr2g:.XI4?70H:c5"QBE5!6tQE!WE-*"UYbR)&s_BrZhaq,9RsD'Fb<Lr;k:G mJmXs"qD@d(D[Ys%L<.<U&]cFJcLB&PlQC9K)blS(CqQ=6tV1GW2Q_rX/N%uW0V[00ch#8"I]=W!"8o3 "U5>F'H8#5+!;a++9W]$'+bQR#R(>0!PJIA!soPX+W1n""p=u/!SII)!.k3&!.k3&!.k4(!"K>sOl><\ jQ>=Rd)U#J!kA;_!.k3&!.k3&!.k3&!.k3^!!r`7'-/f;O0611qS*9BSU+*h,81:@!.k3q!<*!9"q2+_ +=A`u3'9Dl5sIIk1+44Y$jd(>!R^u9!"8o5$kX<u-8%/')@ZbB!.k3&!.k39!.k3'!!!*-#7_Lr:jJY7 XfhQ'#Gd2f5:RT^"I]=W!"/i0!sJuA(*4\I/MR/["Z8(f-mTf;'+4sE!W`A:!"8r:'-/AC*uu75$j?^c !.k3&!.k3&!.k3&!8[\\!sfDQ-;o)Wrhogsr2U'rLLrh$*"N1d!.k4B!#kq@"9o/D(`k%R.kE>+/hJY( ,TIU3%1*.=!Wg"8%06S@(aUg](_6iT!s8T&!.k3&!.k3&!.k3&!42_0,'i&(ioL%"!h_^ah#N$,JcLB& JcLB&JcM&9JcLE'!!<Q5%2:*cIA+'Z]Y46X#IpXlEDeb>$iU0t!6G3K!<N?*"9er5"Tnf,g]/&i"q;7e -Sdq\;HI18B5)."Des0%@gcF776N:M)\EJ`"9HOC'*/+8!sTJf3_`IR?"-;X)$L'B!Sd[,!.k3&!.k3& !.k4-!"&f3#nIt?BT/ggY5>=.WKVU55qEiY!WiD=!2TZ'!WrQ0"9\f0!s/N)l2^MX,QRoI!t?+p2)mcc 78$ET<`rR0>$>!)9h7K,0I@bR$3UG5!Wg=A&-;t<#7__(4\S:24ZOo,$3L/+JcLB&JcLB&JcLB&\c<*? "UP\[6>27NVlH]nWsY_cG[<ci)$g9F!Ta<7!<3'#!<`6&!!E3%!!1sW&HMt;"pbh\,VM)@85N/^<EE6# <=_r"7R/sd,o[O/#mLJ6!WpmPnc04&"UP\T,rS:p5qEo_#R1A4U&]cFJcLB&PlQC9JcP]K"Uml!\]`b* jo_kl+pF84N<&tZquZm!rr@WNJcLB&JcLB&JcLB&h>dob"UPSU6#2O\Yd_:C^C.TUToF(h/eA*e!<L%; V#Ul*":#2=$4@:N"p=tl!;$7'!<NcQ/jN0:CO:VcLl@@TP*>m0%@**;M1^+_8i@q6&I8EX!#,G8!sK/_ 87R"&OHu8M7jeWH!s/LT!.k3&!.k3&!.k3^!"/i2"pku!=F$7)Vlos"$`]eWG[<TZ$NgJ4!TjB6!"8l1 "UGJC#m^b="9S\^!$hRH!X0N#;KQr#EcH/DH@10jIt3#rH?aRQChI$B0,Y$""9\bV!:g+$!X9#E)_afj F)c&1@6l4O!ho[H!.k3&!0mP9!.t7O!Xf,9#o#3uGa+\nWiH#u$`BJOG[E`^$j-S5!M0;9!"T)2!WiK/ #n%%E"9Sc/!s.<[$N^J;%i$?J9OhdTF8C.dG^"7LD/!Jf<Co5(+VkIi!s8T*`rH\S$Pag;6<\>R>='\I %1*1?!SRO*!.k3&!.k3&!.k4'!!WKK@YCl/jSe3D`.(5u#.jke!:Kn%!<`Z<'c7o4+s\E[-6sZP)&!>\ !k/.3#8[dNpAfdFJcLB&JcLB&JcN@^$NU>5"qWLiHC(G3\bs2M]sY#<NG(Hi"9S]+joBu5$ipG8#n.7S &JYib"TdH[,67fJ(GS?P>&/YYUo(&hX0&M-Yd(O@[_B`$^mfLI3@YsX!nIAB!#,G9"U>`(@tUMicdU:- @5SN!"9JV$!.k3&!.k39!.k3'!!!$,!sA`7-:MKtOe8ZOXUD;/Srn7s0+\6g!WekmaoDhN"UGPN%h8sR #Qt52hZ+2h!WrZX<J@ofX.blHR@BY9rgj7bSXc7B$`L;8XEm\o%LNCB!lk9P":>e\.S+-$R%gIPQX2Na !SII)!.k3&!.k3&!.k4-!"8l1"9],[7qR=5S>E7aWsbr%RZD\o0G+Ei!Wg.<W;mG0!WiH-$4RUX$3p\9 "9S\i!;?I*!XB5O+ZWVLTq7aCR[KP3S!j8B&<r?>NeVLY:-LH['F+aC!s-FB'Eo*m1e;,)Q'Z;\.gumq #Qt//!!%TNJcLB&JcLB&JcN+W"UZtcLVW!Ljos54GuPjehuJ?/bQ%qS-9"FqA8,k"F8g:hG'%\>BjO:c +:nV#!:0[h$8Q-T)[2c4JcLB&JcM&9JcLB&rW*6.,!oglR&[Xn^C.`f\[8,[9H46>!s+tnaoDhN":,DJ ',DH+((UZPh>duc!X9f48PE,tL:4e.]_fDA^&Z%Yi;EWTgSf<k3[GF@`rHDH!s]/R:N_r>rr2p&_gOlb #R(;2h#N$,JcLB&JcLB&JcOU,rW*6,))P3-K:/Y8XUD55Whb_i4;@u%!s6=>V>q#*"Ul%a(D@Ai#mUS7 l2^PY%KQV5":IA:])20\aKDVGqQ1:2Y,nqUm.g:hH9rAW#mCCN!"];E)(%CLI[[P#k24[B80%a0!.k3& !.k3&!.k3&!4`+/!=/fG1fJ4BQ)(GYWsbl+VkK,a4r"2'!s7TbK`D/T!Wic5#n7Rd'FtKS"9S]+huF5g $5=R6;1H"RrRnZYW2]Wk&#Q5&UP`bb:d$HN#mUS8!S.8A!"oJS01of4VRWI@<B:d&%LE4=!Mf^I!.k3& !0mP9!.k4I!!EigB<C7njosPc\YDt0QiNEP#6QMcJu6QAh"fe*g]5t1\sRV7'EYoI#6cf:fSW*6!S%1% !.k3&!.k3&!.k4)!#PkV0M5u3S[#lA^;%Fr]tCnVNF=RZ&IJWW!3#r3!<E6*&0<Dd5XIk.3@PmV"pG)0 mJun[$3:24,st@'>BuCCotM'Tcf4Tsn\^o?=Zn#?#6b21b5_hO%2^?P?[J-Xqu6U#a+-Sk#R(;2JcLB& JcLB&JcLB&[K$O8&gTP<Di14eXUVG8XfS\*R<VLT&e,'JjoC,9!s&H+":PMJ+>,i=2`3?;(^gHF!TO.g !<N?+$pK$Pq"!(PYP#".YeJNFp=G^G4t7HY!WiB(f`:^G'EJ7:":Q;*7UC>&VQee9hU7!E*!)c6JcLB& JcM&9JcLB&rW!0+'.,hADhst_W!o`*WiDn]G>Tb%%1!*.!6tQW!X/lA'cnbZ5;Oc3(_R2\!s&G^!"8r< (*YJ7L;3cY`iQ04WrSt*R>,BR:IHu\(CpcR!<LFF('4UC#88UWA;-_^]VTUK58XtD#m150gAlg*JcLB& JcLB&JcO@%%K[A2N8*4Jio]+ObJ8!:]E!N`nGiau2ft=odcC)`#N=%@UjOm/!PSO>!?4q;hjdI]!r2hJ !.k3&!.k3&!.k3Z!!iZ=+u2Z-P,l7p]aVZi]tM(_R<_R_,8:CF!/:IU!<N?,&-sF@=)rM3ItD?-1)gc4 "p3fb$NU80"Xci<<+CKF](NfL_8t0dp@d4TVghl1*>8hc!nmYF!!riJ0LJcPI@A+Orr35AJ4'tS"Tne& !.k3&!.k39!.k3&!<)s)!t?+q3*^m!Y,qT($EU>3T7g]<-Q*EuScI%9&-<">$kXdH;.s]XBk^<r(Bj[; j8]Sh!X&Z95'jm7m*`PMorS4t&%9F(jl!b9FAO\.!s&H)!RC`[!X&Z3'e`9sL6e[>Yh.gba*9id!SII) !.k3&!.k3&!.k4)!#PhJ)(7OOH^1V2W2Q_pW2ckfJn.+o)@m"g!3-#4!t,ng/3?O2CKjOu0d@JD"9JW* m/Zk\$j-qU,;`S[]Dpp*Wi>Zl&#YqaL2(4"8ieOD%Klh7!R:Z^":#DM,<]@dUpReEV0#j*'bqAi!s&E& !.k3&!.k3&!.k3&!3lM6"=@j+g=tKFiS</1MDY[u!.k4M!!NB1#6P#.ec5m\4b96>e`?Dc#ijU[\tN7[ 'Elhamf3Xs)F8Yahj[:W!M0:C!.k3&!0mP9!.k4M!"Au:&fiK)Jtolg]Y2(prk/QEUl91d2BN<u!6tQY !<WK1%Pq76S#<R)_k1pA//o3/"60@h!<E6+.SNlFCk\@jotLLC&&cQ8g%P!uf;O!k/KY]8!mCWZ!=UAF <Ea$\S&G=+s8Bf`6P'G*!Wh*WJcLB&JcLB&JcLB&g&MB[#7VFk7W"3drN-I1XfSY%OEObj.M`<,!3-#5 !X9&I*][8AOI;lCZ%5Xs"TSQ)!U]s^!"8l0"9f6!G.@/(c+1"MXUq\A[_BiDgWI!Q9-aWA!<N;J!#,J< #7MY?C6c3;]sk2rg!70H4;S%s!.k3&!.k3&!.k3&!4Dk9!XB5O,"HI/Vl?\oWrAq&WhPPs>!OSS#j),A !!<?:,;fm"??M$cH"9i?2C0"?rW2$Z$j-tW,r](c]D'meW2]Hj&#c7nR?DT(>>7C7('OdA!ndSI!#>\H (EYG4HDAI"_m?4_><`oA'b(9H!Mf^I!.k3&!0mP9!.k4G!"KQ8\]NFYjPo%OgSe!h".B52!!`TG:I-]Z 'Em"f"q!_YWl*KMp#Z88#iF=^`/e:h+pYsb$NhSLGc&pGQUqto!S.7&!.k3&!.k3&!.k4)!"/f0"ptr, ELX>G]Y46X#J%".Kkj70&&J=H!#,G9"q),5D3)0Yp&>!GT4^54)@lu=!;6C#!<E6+/5KJYFbua&oY1pP _8=.?lMpn3SS1/:*=r=r!#-#'<*<OGLoSDms8Vo0I6nJL"9JUU!.k3&!.k3&!.k3Z!"&`/":#Aj?&#/T Y5PI/Y-+dpLi6BV+:I<3L&_;X$54Bj.SalAXNTo%pq^r.#6=f*!TX4h!<WK/%R,'CmFoXkY4Sh(Y-5(7 _V+JPYA,fsr;t[Qp&Gd/#7M1l<f+ZXgr?\(e'c+5AMt5'U&]cFJcLB&PlQC9JcPcM#lt/3#7WFpKV>:B WXGl-W2QV^L2^6W+:=\?c2\O^(beKlKV5ZQMJlfu5;F/`!rrB'j8]Sj%N6`V@#MY\ag7nEoW&J%Vkp,S J7i.`3Z\G,!WpXI('YBm/OaKA`9tsZWMXoH5T:a\%0Q\4gAlg*JcLB&JcLB&JcO:#%g4hh^!#0kk2bO] `-49Y!l"`3!!rZHA';-7BhfHGkQ(,Q"q4+o[)q%_o]?JAj5Jk:YE!NG"2b*G(0?g,akP[<8JM=&!.k3& !.k3&!.k3&!4Dk9!<N?+#qoS@W3E_C^AYeS]X+Q*K3pYV"9S`,l2ZP=!s&N0$kO4HE0%cZk5,,JX`6TT *"W;6!%7jK!X0uG?X%2kR_-8F[^36CXfSJ!U7\0Y[^s8peDfuYY^TD1-l)s>!;6C0!sT&A,=l$DH&.il `;]f:q7_8D%gE.<!O;\5!<WK0#6k>8"9S]+JcLB&JcM\K#6=o2#n.+E"9&>t!.k3&!<)s+!<N?+"sci^ QCb"Wr2g@0Um6XN9e?t\!s8V!!6tQY!t5qh10&UdXh<3Mp"FpY#lt#,!TX4j!<NB-$o_mniR5TLWMQBh TEh*^T:qsSX/HQ0XKAY5_U78YH9_uF"9S\O!#5M='Ho/'FeI7:ah+j^e'l16AMt5'f`9S'"9JZ."9n`, !WrK*\H%3]JcLB&mf3[q!sAf6"p>#0!<JemJcOL)$ipD3":$5IEg)ufWi5ls$`]k_K5OF:'*JF?!lb5? !#,SV2,eL[Z,EZ2JQkc71EHi*!<N;i!;?IB!t?(m1f\modCcQPR@Bb=SXlFLVl?u3\\,>OWN)MUL2U9a ,mXVV!s-jN*!$*C":lS07q7:ReAekpV5AKC5T:a\%0Q\4!!';)"9JZ."9n`,!WrK*h#N$,JcLB&b5_kM !sAi8#6Y/2!<L(<JcMtS"W1X#WlsB"joj%s?8`DU!.k1X!!=d(jO1N)G9@%@!$)4uJW?+fR[95!NJrjZ P+&;V^rb*[hrWV9\uIase,]"=$O8J9\&d.YhNgYH!hKCD!.k3&!0mP9!.k4L!"/f/!sU&CE0-cr\@qjU $ba'SW0VR",n(%_"/5e@!#,G;#n7bDEK@l[k5,,JX`6WV*=rD6!#GY;"sQE?B6T)qUS46EOcGBXLl$tE Jq4GkS?]lJbgk\8^6<5)1E6SE!#PkM)^[XF?=etWUU7u=s8Vu2I6nGK"9JV[!7h,X!sT/H'G:ob$O?n< \H%3]JcLB&mf3^s#S7gr(D$lT!W`=p!.k4(!"&c/!sBQ(>^MI#WVik+XJqhXJRCSZ#R1D6`W3"='Eeg] -T5.RR'"$Olh/t^4:2,i!<MTgpAcWC!WrT5/m*h;Wh#9*IX66\FEM_NI"dTJTr"ckY-PXWd):W5*=rP] !n%&b!<E64-ph9jR^U_e^:(;Me^V[GC,m%1r;a,'$NgM;%1`mU#m^_<"5Ns/!.k3&!6Y?M!X9#F(_I,[ !s/N)_uPAh[/^R9!WrQG4C*8kRAQq]Wsbr)S<JJ34rjq6"9[ohL&_;Z*&pt1GFGqYWg\KC91(KW#m151 !TX50!X]V`/4F)uR>ciIG]e1PG'JCbKT)G&^Wt$<Y,\1aQ\]0G/IVgd!s70Vq>_E8"UGDP01p#9UUedY X/DhlG$R<K)\rkc!<KD)$NgM<%1`mT#m^_<"+gN)!.k3K!"/i4$kjKj$jQk9!Wi/uJcLB&pAb@",Y3-a hYlR?gTcNA/d@gGaT)VM08/E7\!V@^"P<\f!>J-q5;t2D-6O9J*[)a\5?2QU$)GGkjkeM/]LidT!"9#T <h.:\gYq"U7hl*U!.k3&!.k3&!.k3&!8.>[!<E6))`CW7NMEhnrP&`R]XY;FLgDeM%1*0W!3-#5!<if> )G4t.^Wu!<s73:467X)g"muB`!%.dJ"WKBuAo2X7I!'46>#eU'<EisICN"QYUVOacaj91oWI\DB,6lKp )$($^/icC#??hs<ZFIjPs8W&5I6nGK"9JV0!"/l;'H\SC)\s%p#R&r`JcLB&JcNso$NghX.l\st%Klk8 !Q4ti!4;e6!<N<*'e2RVG`SZtXU;52Um#gm-P$Lf"R5uA!!<?6*%DCZ?@J<E][c?@g4)3k!r`5]!%@pM !sAiS88XZIG%OfQ91D-26:FFC@rd3aSYW9gYd:gQ^lDbS)A!/Vg&UsL(]aX=!>R_1QFF`XdCHZjYHQO0 cF@aS(BLZ=$NgYF()n#(&If$N"G-W*!.k3K!"/l8'd,%L'ab'G!Wr6!JcLB&r;[3+!WiK>.n*cgNM*3J Wsbi*VP0)k:+$PY#6^b$c2\O_+$*SRT")e?RXn[96T#tn!s8T*j8^&!#S7ju2b[b*CLL=A9M%`C7SQ`] B76,O`XgA?\>lBuS!e1o1(FTq!WpgN)?^<S&g]nXQF=`WaJbu4W2=]A4r"qL$j6S3gAoe)$NpbH(E=5+ &J#0P"M"Ma!.k3&!:Kmq!so\d/Kbc8"9S],TE'QDdJsCR*_r$WrT4:>bI![@(Vg$I!!rfaLZHmmR!0YU kQ()P#6Z"[$j?\5!W)j-!XTc#9m!,Ujl,%JcsI^m`rHPU,YNQqf\PKGhNpbI!Vl_I!.k3&!.k3&!.k3X !"&`-!tce;:3Mr+^&5YE]a(m2E'PHY$jGnrL&_;V"UbkQ*(k1/^Wu!<s73:56S';k"l]M0!<E9:.RI9> ;bftP2(]sm*?6"D1e(;GDL\7m^qmn*lI`h@FA=:lg&UmJ)?BjJ-TaUa;eM9%\@]JnrVuos_0nW\"p=u. Z2b79&0<AY/LVe]&e"qq!.k3&!2ff*!u*.J;*?<B"p4r.!W2qL!.k4K!!rZ,!t?2"5%&r5r2g@0XfS\$ K3U/H%gW<4!6tQU":lS+6"5>5Xh<3Mp"Fs\$N1"c!#Pb=!sKW%;KH8@4";Bm'bCoi(E4\a<GR*qOeA\U Y-5(7]U<Y'.N&Trdf:3c!W`?D;NK/omc2*eYHG"2f\FifE]k6?f`9S'$NphP+t+ZW)&*Mc"M"Ma!.k3& !:Kmr!tQJ.5qa;k"9S`-!MKLF!8%8Y!<E93*%X?aJ=<G8Wsbl(WiD_D>r!3,#mA6JWW3_;+?a(aU:\RJ RXn[96Sokl"9\c,mJut].09\_'-&D[86AJF/L)8R(_dc,,:Y`VH(;OfcG-E[Vkp2:>;m-$#6Y+W!#u.L &fNN-M9Gqmfrq<PWN)h:>!3N7'+4pD!<<,*!"/o<(F(=Q*uPb'#mB&aJcLB&JcNso$j7(`1.*`<&Hi4= !Wg7?JcMnQ!sUB'g\p7=in`A<Q8/U)!.k1X!!kH?jO1N)G9@%>!!!/n!"Au;,><^,k2kX^i,pCLeH#4A %L4IYGG`aHj5f=YQq.qmScF?BJcLB&PlQC9JcPWI#QY;L,r8k^V7HT=r4`KIUOlT',S^W[!6tQY!<ic= )+A7qYg;\5s3d<I4XV0Z"Q9=j!<WiS0LJ#_1G:$o'+"pC"U#/M.QU97A9Na4[(!Z^khsO]Io@s+df9aV "9o,N3(?G9@=t?R^B):Orr35?I6nGK"9JV[!7h,X"r/OK7QrX[,T.*t\H%3]JcLB&mf3b!)`CW5;)TI$ "Tnf,T`BZEec5sW#SA"(9Q6/pqlL1-Y,[S#7OK,d#0$YC!#,PG)_*jMFHNN>hs^6HDDhe%!!*,g!;6C@ !<N<*'.5nA689Vr$j["<!WrT2&gf\=C4_kYZE^X:Xgk$J9J7Cq"4I5X"9f)@/n_'Hq!QJ:rN-@/f\Y&n F?UNBr;a,'$Nq"_/iPI6+r_4("l001!.k3&!6Y?N";NFS>!XYR"p>#0!Q>%j!3uSA!XKAY-r+`CVlHYn WiN.uW2>Sk7jo>h#O2;D!!<BE2H(0/Of#FcLiHd"5;4#`"Tnf,j8^V1"UP\R*[ia+0-V2A$3p_;"pkhS ,<fC`Up\.\V5C2jX+FV:'FP0N!nmYQ!<*!,#oFsF:jK&9s6%"lrMp:&F'1X<'bUlW!<KD)$Nq%a0KLp; ,9.C)"bH`+!.k3K!"8uF/4Ec1//JKn"9JW%!.k3&!;$7#(0JN0h;75TjPo14:_9/taT)VL+^_pUH<30A !Q>$=$48=mXl/0ujQ;"F"j$`K!?=dVSAEtYjojP.8/20U!.k3&!.k3&!:'Ub".9.@!7h,Y!=05S,>*-I Z+.EZ^AYeQ];h-?<BMQ<!<L7AWW3_6!sT)E2-G0iV6[bQTQ3^W*"r\^mJuhY,m"Gg+>##h+s7g<%0m%? !s8`?*@X-SC2JlpV6n#$i5hmI;_AC*!"/r<&fNMs;GpqKN3<,o!Q=s9rs-Dh64X8'!WfS,$O@_.9j:C] 3%c?g$/GT5!.k3&!6Y?N"X?KPL1s+)$O-_9!Q>%j!3uS4!<roG)`qG\TW5)prN-F0XI4TJ6nTDd!<MNe L&_;X$54Hl.mmTbOI)W=XF3bh"onZ)!oj7i!<E6(%3$`V/Kko=#6k).(BXdE%2pZV:NDc8`4WO`Xgk$J 9J7Cq"53bO!"/rA*%=I&X68p'_mB<D#d;n;d_^)i(]gc>$O.=o4\7gp/0buB#(ci,!.k3K!"8uL2HXou 2]N)+"9S]&!.k3&!;Z[6!<rrH*'@\^SYi?cW2lquW2Q#2@RVsk$3:1'!6tQX";N@J<,$fCR!`ID5rBu' #6P#/irBqt":#5C'H82E*u,7k#6b85"9o2C)D=WjJIe<Ybce%EVQ5;S3"u`+"p3BV%fl_5!u*=WAq[#! oB4,rV>[G%VK5m'&JYod"9APX!7h,X"r/ON90bBe,T.*t\H%3]JcLB&mf3b!*&q&>=#qB."9\f-T`BZE ci=O[22no_g>V2TjPn3r.gNokU]:W(+]:W]+VFn?!8[\`!>In]c.1V.k(,)faT)MS3,kCscJST_"Q#M: '`n+1JcLB&JcLB&a8c8C(';2MJcN(V$ipM=%MUm4M5IMc]=n0X#JIF<OEjk_(&e7$!/:IU!<NB-&.9^J >]kFFLQ$+I2'!8:"p3]_$NUJ@&fDH"'G:rb#Q4`>!X/oC(b&*b??([^XM<uWaJjYf/d^53q>^m.'-Jkn <F93fNh<]W^B):Orr35?I6nGK"9JV0!"0,Y5[JA:;FWVo(^koqJcLB&VZ7,0.TM"iI98-2#R(;2quD<K JcPWI$NUA8$4e[aFH`>pXSf1*Y+^r(@mqdWrW/hqc2\CW"q2+_/OETXE,BE,:bijjr;kpYrW*`8#7hXo )%m>`"p4r.!WrN-"qDLp2@j8X`SSkS[&pj2G>'Y1%0P&Z$O\"17q@=TgX!aHZ2Ld1YLq^[_K7sY!SIJ( !"0#N1/(kH5rU>:&dZ#JJcLB&JcP6>$j7\@CPZXn,RFYX!s,(qJcO@%%KQ\;$4e^dFHE#fW2Qbtri-0o Nd>5+-kZFZaT/=@'*Jda-oXY"CjKYk6S]o)%0Q_6!UTm]!"/f/"U52>%MBNh$jch8)?U$C"9f#B+uDi! KVcl;\ZD[/JmC>M$O?q<f)Q<_!sAcM6uJ[3dH9c,Y,A/qWskkH=Zm?3&dngC!<<,*!"0&P1/;%M6olnB '+!CoJcLB&JcNso$j7\ACPHLm,mabY!s-@@JcMhO%N8N+WlNuYk2bUPO&.)-k5^)6rW!*(&e,'J!Q"gD "=nDp_p[E(JLq&U!;6Bt#:<QA_9^iorT47>Qq.qmV>pSuq>c*IJcLB&U]:H,3t1c^JcLB&q#Cd(!sJlV :Nr5*YdhCF^B_H^YbdV)732@.V#\a?'*/+8"V`4A9MSG`<^e_c%gE1>!T3qd!<WH/#m^b?"pG,3!rW-& !X/f8((WE'<*=*oT>0UJaJjYf/d]u,$O[t-4&0.#Kr(r\]D]JF`;T]8#JtmU%gE.<!Smb,!"02a9Q5K$ A5blM*XoRZJcLB&JcP6>$j\V#PHBpZ3"QE$!s,(qJcO=$$N^D5"<9U7KU&10XSf1,WLo?(>rEH"!<L:B WW3S2"9f#<)(@R?7m]@!.N8ctrW2Bdo)K.!!sJo:#R1D6!s/Q'!>Y_<!sJr<*)DF4o\ms&Xgk$J9J7Cq "4I5X&1^=bI[7+O[^33@rN-@/f\Y&nF?UNBr;a,'$O@h:>\RJ@6T$,($/GT5!.k3&!6Y?N"t*>tS9n3d $O6e:!Q>%j!3lM(!r`<-*^F4eP+8DJrMp:*VONZr?8iW$!<MQfL&_;W"q;=X*@a$<<^o"r)\`\c!s&G] !!iT,!WrT/"pYA1!u_4A!<N?+#SeU@7rF[;p<p@HX+FV:'FP0N!nmYR!"T,6"UHYcS`9\LrQ(n5VlBWq $DqlI4V8DA$NpJ2YQ,%;+?j(F?;j9N-5Qu?!.k3&!2ff*"t3GuR<_da$jZt=!W2qL!.k4B!!NTb?Ac2H rT4:<Z%?(."J>aH!"&]A;in-%g?*r<"j6lO#96*X_VF&.jSe3DhO$hK!S%2!!!394"g\2\!.k3&!:9ah ![i+7!h01A!7:cO)EhSaR]3[-rP&`R]=5)CKif`-"TnhK!;$9j!WN5r!WE/s!TsFa!<E9!!rrK&"9/H% !VcX*!X]V`.P*8/2(K^\"p+f+m/Z)F'*/.9$7e\B;dt<G^ZsauWdn&$$J,7c!<E6('.Z7<=_iPaq7csK rVlg%_L4`]"p=u.Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3Q!!a2k:iD&S UoaHq$)aJ\DakfO"9S_n!7ClH!UTsg!Tj@`!<N?#!rrK&"9&B$!W)iu!<N<2":Z1n0InIn*>K"f!m1KV !<E647"WMSmF&SJ\=e%>0,tE'g&V*P$3C;4"WKR1JsW74poOh*f\Y&nF?UNBXoJh9,=>s_B3@hg.MrJD !.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k4D!!X,k;K%2PU&M%uX/i1uUn3Zd7j.d6!!9t:rW2?erW26` rW3$#rWE-&!s8Z."9&B%!Vud-!<`T5%Mg3>3@uBj%13=C"3UZI":c7o2@j/Sb5^S;W2kPV3>;i,"p3BV "p>/?'0LNTrr3#b\G<04VK5m'&JYod"9APX!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC #R(>3T`BZEc2\=h2I`?6jQ,IchT;m\=q\aRJcOR+#n01LT"`h=JLq&L!!NNC3b4l8q;qh:Qq.qmq#ISu !sokR"5!U*!.k3&!6G3D"?WM?"MXqg!3H5;'.ldhK:B$U]tV7r]tCnaY*3`g)\WV`mJtW7"9AQ+"U=Z( rs&E*!WrK*rW2<b#QY#1#7(VE$kE4F#7CkD"U"o/!Vl^+!XK>T+sSH`.j>f@"Te]*blACX!Wi]Z8PN,m JXO:=il\EU<\Fg6!<)s+!X/i<,=,47Bm5Q>q7csKrVlg%_L4`]"p=u.Z2b7@/lR"OHu<1]1a*<[!.k3& !2ff*#rcgo[$u&"&dnpI!W2qL!.k4D!!WoX3`L!QT)PhlY5YO0Wi)G:=Y^^%#R%sD!!3'#!!DQj!!3-$ kPt\c!sAi,#m(G?$2t27"U"o0!WiE#!"T)3!X&iC*$ldL)]'+o"p2pI!s&E(%hD'[aS5)M\uiK8G=sP. %0P2^$O$kL(G\j,O.rSRWqib&YLq^[_K7sY!SIJ(!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc2 0b"Bl"9G1rJcO0u#7i%A<c3Y\WW&h)Wi2qpURHR61)1<+"Ng`?!!30&!q-6n!sAc+!s&H(lMqIs!WiK. #RUqH$OR4H#R:P:rW<3'!Wi3!&-2k:#7D1`+tFiT°I!s7`fiW'Yq%N$HL?]E5.jh@[oK3^JO$j[%= f)Q0b(*P>4NlqD%rmn@MWskkH=Zm?3&dngC!<<,*!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9, 1(=Km"9HIAJcMeN%g!A)H-+q%ioJtI_l@u0"6ff;!4W"8$q#H7^=VLu/HsZ)q#CU#'g#f[[bLW?"Q#M: '`k34!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k4D!#Q+d0h,o:Vn'LS^;%Fr]XkJ@IonEN'aauV!!E<) "UYY2$NCM5$3CJ;"98N&!UB_"!X/i<&/#]p)]K\5)&<hp$O6h;!Vl^+!='#H)]Th=+;tk#"9JT)bl@hH !Wi]>.nNH6@Y'r^lfHBqKNKo8f)Q0^#nIb-;.X]oMOV$L^B):Orr35?I6nGK"9JV[!7h,X$nbJ'M0s2G 8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEd/XFY(+(q?GEf,/riHU3Xfe_$MJ5O-)\<5Tb5h>< #QXu.!sAc2"pjo-r!3B/"9\ei!#,J;#Rq@Y',2/q'+kfd#mUS9!s8T%!"T)3!X&c<'cRu+'b_&_"9Icf i;aMl!<Nd"K#m]Rd^lQjT6<gY)[li#!"0&G+YH8qJ"EXAXK))u#d;n;d_^)i(]jR8Z2b7=,=>s_B3@hg .MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3Q!!`fH-9,(NP,A5W%B?A*Wi)PHBh'Nj&I8F+!7_&S !<NB-"pP>>rWr?*r<NT3"9S],!s7fh#6=l."U5>D')iUP()7Jo%LWOH!sAN(!!3#u!s&K-#7LkJ'Gqo/ &e#!L!sA\K!#,PG(aM"HNQV:_^8S)b>r`W/#mLIb!<)s+&0s54G,*Rep=dEcq5Xk"F'1X<'bUlW!<KD) $OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!:^%!!ZbOZgtq#NinMi"SO!^Y!.k1X !";5CT"`h=JLq&M!!WcbC6Z$IhtcC;hO$hK!S%2!!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcO0u#6th[ -V\lW\,O)@^](nP\Z([08i@k'!QtK9!!`N.#Rh7T%hALH$k<aX&.f?^%L`[K!s8H&li7_##7M4^*?c^X .4?Pi+WD.-$j["<q#Cp+"UPYP',2/s&e#$J!W`>h!9!nk!<N<0.nNH6@Y'r^m,lU"LKZD>f)Q0_%2L'P ?Zh6oUp@T-^B):Orr35?I6nGK"9JV0!"02f;g=.HDHodj+V!6-JcLB&JcNso$jek3S[=l+58">/"9HIA JcMnQ$O$tS*'IkjVlZu%Y5PI.WgA':4";*T!Ug$=!!`N+!sAc3#R^P=!"/W1rsJZ3":>J?!s7Zd'ESII &fDW/*?Q:B)]KJ&$3p\:!Wr9"!W`?("9\l8$k`IM":bbE"9HXF'*/+8%n)#jp[-D?Xgk!H8Ltbg"53bS !"'/V1.>MpOf#:`W;*J#YLq^[_K7sY!NlD1#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE# JcLB&o`,7$%2BpKAr*7_rhp7*W2HSkP^-Lr.iAZp_Z0rD"9f#:$4@1LrX/Q0rX&c:$O6n>rW<-%li7:l !sJl8%i-*,rZM[m*>fJ&%1!.?!s/N)r;[B0!X&Z2$4IFX%LWLF!s8T+b5_YJ%N$HL%pt==s5gtnX+O\< 'b(HR!nRD[(,Ag5R^^l-_n*%Oq5Xk"F'1X<'bUlW!<LpTec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)` ?&#&+?8;rq"U"k"!.k3p!"K<$XkVXfioJtPgV[JE"3(=m!8IP\$q#H7^=VLu/HsE"#6Q,OWQNcIj8%g? hO$hK!Vl`!!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcMnQ$NgS@%l7j^ZFdf`^AYeO]s+)^B1X]jrW2Nh e,]IK#6P8C(EX\=*;g`h*$$%@*ZZ1=)&*Vj$4$h>!s/N)oDfj3!WrQ1%i6B;/i,LP5!1qf1bBso(D.&[ !s8T*r;Zp#"ptt?('bH^$3^M5!<LUKr;dQ6"9f8h92JT!K:BXBjit&b=tg<;!<*!6$5Oj@:2,<`^VI\$ ^V.7i\@K8d`;T]8#JtmU%gE.<!O;\5$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3S[=l+58">/"9JE#JcLB& o`,:#":,A`<.:OBY5>=.XIk>f<&u68!W`>@!"&c0"U5;B&/5lp(A\aP()@W#()7Pt%gi:Bqu[!%!Whup )?Bj?!sJi7%i?E;.P3;./hSV&+W;%)$4$e;rW3?+!<N<*"U>ADrXf;H&e,*K!R:]E!<`H+"9fJM8VG4Z lHd#C\=Rb3//\iugAh3SrW3KB.n!ZcN1[5SY-+n/riH+$$*:>_hU98_4r==R!7h,X#pVfIFD"`K4";'R \H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEd/XOV":,>_<ICC:Wi2lpWsYksLMp0T,S1"X!R1W?!"&c2 $4[X^'bqN$(A\aY()@]%&e>EY#6tD8"9S`-!W`>r!&4KU!X&]6%MB[(.l&k91GUL1,T[g;%giOE!s8T* !<<-&"9o,>$kEp[$jd+A"9S]+lN$)JrW*c9!X95W.6V1(ao:51W2kPV3Yi,1"p3NZ$j$J4"<^'LTY&Cs YH%Q!!i`,tri-F.VK5m'&JYod"9AN'!3uS4#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3 `;kJiVuR#'.$)EtgYr+n"P\\r&d%A!JcN:\#nTX[U;>LEJLgrS!;ca2!>@_Qf]:rGgtUZ@hV[;Ojkc@q '`k34!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k4D!"/l4#R`%ZJ"a'Q\\7sV$b`pHR"Jp8+U%rM!QG*F !<WK0%3@2i;Z9Pj:]aKk;Z9Mq:ejSO#spa/-m'3:$O-\3!VudD!<E<2'HJSZ6;UopA8,q!Ci!lu?Wg8t 4YS6)'FY*E!<E6*'I>_4r_!Mh4tRli$O6e8ec>XL#6Fu0"q)%\-kAgP=_2u=V8)0I_P2<Q/.(&2)$'d@ !uERY;e:01[D:):e&o.pN/Emr\A\@Frs-Dh64X8'!Wh*Wec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/m E1OA*EBb'D#6Y($!.k3u!"/l3"pc;<BoS^[WiZ0$$`p.jK5FI@(^'pC!mUfA!"/l7%i69600)<a5X>32 !'pHJ$p[!;2_ls/(_?rW!sA;u0ED4W":5bc00DQk9i4kj='8X+<)cU_5rp\E(^pWQ!s/K,"pkbV,;2/A 4Ztt^*=_uKli?8MrW*i;!sAc6%M^!=?]W=of#5#!Z'K,e,S^Ufg]/Ju"9o/B,X5OWLR=s>Xf\Y"TUVIL Xf\b-YLq^[_K7sY!W<#(!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcMnQ$NgM9 #TuQMMjpE<W;Wb)W1fH-DGrA0"9\f.nc72?$NpqY.5WtH5X[t+6Mj%]6:4.,5!1k^/0l8Q&If!L"9\i% !#u%D"q)"\,qqJM9N>>&>?b93;,9bP5W^hS*>&PU!sAZ,#7_O\*[NBq4uP#?*Yf1k!s/K(ec5[NrW3o= "U>>G+uDerJu-cN_lou=KjQkT$j["<g].?U"sF?e(cP]T[E?nCXf%kYOHZKNbLX_BWhsi?4V8DA$NpJ2 YQ,%;,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k4>!!Ng&J"ss;rT47<ULGtjUB'<S rW3$$rrW3$W;m8.-"Wg^c.qH1.0Ios('>=2AYe)9_kM^1OIrPY`m`c#Qq.qmeH"%u!sokR"1/&[!.k3& !:9ah"?WM?"IfCC!7:cS!WrT1+%'b#SZ9'1rP&cS\Zr*&H;c@%"pG)0cN*b@#Qb/:%i[E)D2.b<'S_<r KnbA<L4jqb:H^6O'ak*F!<N&t&-2e5#T,$T9j;:ULPh+TQ'M?7+HqnGM1BPN8ieC<#QXr.":$/>@tTMl MN)UQ2BW\C"p42mklC\`(]smE#7D:l00r`QAV5r2ZG5DH[?>>t-OAH,)$0pE#:2oKDL.)-\BE@I`jr". H#J+kWPnc7rs-Dh64X8'!WfS,$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!3H5/ !WrQ.(,T$6MOC9Ar2g@,TU(@E6Qua<"9S\r!7_&T":lG!2+1>PE;"2]E,T]7EH#o9De2U#+VG1g"8Dj. !WrT1&Lp4[H$am`H$XjeJ:RWI%s`;;CgKUc*"NA\"9J`7&IfR,5Z_fAFE`%62AlSsrW1RM)Z]s@!sAi8 &KWG`;0/)Ccbm<!Xfm^l1EI,6"5EkW!<sVT'HB&2EK-B\WiN;$R>HNKN0pQDXfek[hU98_4r=='!"0)X 6Xt4N=\:b*(^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcPHD!!<-]:"FGQ6VWr8t,W2?,LKP!Xt #Qt84!QP0E"WB$b>\.gOE;FMOE!:)pBk(19#Wsdf*"r\b"U+T#$Np_G(*YS+?>st2If=mEIXZTgF`D>9 BkLL2,nU=a!s/T8)(.@3<+9`R;FEGo*"W8U!WgjP$ipD3"9o5D&frl(B8-qj]$e3nW26PK?TSi,#Qk.` !$_OP(*kV3GFlk&eAJ;_P_F4&O0$e$k0gQ4F'1X<'bUlW!<LpTec6'a,Xl9dB3J"l.2`H&!.k3&!.k4> !"9)`?&#&+?8;rq"U"k"!.k3o!!NEC6#<IQrT4:?]o6>Y$HN5=!!**+rYG>Fr>#SO'GCr^"9Rce&I&UV *$Q[V.4Zen,U"-E'G(H>!!NE9%1*1>joF6<$NUr/Ku)'ei9#>3"47)b!Z"7AQ,)8%Q!ZF'7TsGKQb1o, Qq.qmq#ISu!sokR"5!U*!.k3&!6G3D"?WM?"MXqg!3H5/!<N?*'erO(M4_#brP&cT]t(MQOCpK_$3gS5 o)R;@#Qk>D(FVjhLog<N'WeF;XKAhDaj7u$IpbZ#+qb"\!Wi/u,67iJ$me/7<FU*1VlHc"Yd(O?[Bm0D Yd(!aE`bLO%06M5"V;)"?A#;h`mND>Hr2L9'FP#p!<*!:!WrT2$5+R?6rIT8H^gt>\A-e>WI\GC,6lp' !<E9>"UGMo>BYgeT<GlOd`&G`OF(SICjr"prVlg%_L4`]"p=u.Z2b7@/lR"OHu<1]1a*<[!.k3&!2ff* #rcgo[$u&"&dnpI!W2qL!.k4D!"/f/!s9)]5?r;gT<A*o$a-M*S9n3c$O6e:!QP0G"Vi@E9k&4"ReE-S R[]_6S"[$q#f!]t><!W:$O-;*2$*mb#ol9KS\DP8UmmmESXuLIT;&!NSXPOW:bEXu#m157&/c`Z?@&!: [_g1L<[S"M!!*,P!"8l/!WiK0$P"+.6Wn:;L7u5i[Bd!<WeX\*(CgZPg]/K!#o"I38SEjOW2Zo$Y+:;\ ?>4P:RA?sdYLq^[_K7sY!SIJ(!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcO0u $NU;2":unG?$(pmWr8t,W2cbhR<_d`$4$b;!RCcA!!ioX7V[jKTqIbGQ4]IJQB[PeDdH4*3@c'\$jZt: q#E,Q%N$BG:iMSuVkg&]TV.jFR@0G,Q&q)iH<WHK#mUP7";<.E;/1TCQ$d1E7QN":#lXnm!9sP(!WrQ0 $4msm/4sZ=YeeT.W2?DiX+jtB&.&RD!o*c%!tce;:2l?#c,d](WM#,g=^$!=b4>;c]V]aQ4V8DA$NpJ2 !!';)$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!2]`!"<'UYbPgQ-iR>?1G9R+U !71]J"s-3Pp214VDf0E-@SJg0'F!h''`o:::180kIt<6*K7JArGAqA23tMGf!!rW*#:jLl6nf\g`;g;J &i=4#f\PKGk'%sLeH#OJ(C`QjZH(VU^hYV5#o>$L7rFpDhO$hK!N,o"#oX0RquD<KJcLB&V#UW$4/Y"? p&K[EJcP<@#7Me8:iVSr\bs5A]a23CGX`DX$3^IN!!`T7'd,82DiO8$!lWa^%KHIhZ@uXT0,b#u!s/N% !"/f.!s9/l92&;rKV/4X!5SEF*8B,[STn'g&ci(<#SKREO2'!&qZ#u_D*90`%KtA`$ipA1!sJr<&/m8l ;Hj9>H^hdbrkJci^791A3?JI\!!rZ.#Rh;4C5BF8rkJulbd3UbF(8'B@<@^OrVlg%_L4`]"p=u.h#Q"+ $OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!6kKK#T5-W?$hp<qlL4,XK.=j2@p3# "9HgKq#CX)*&L<"I$:JtXU_YWiUccbLf,]B&-W(7!W)j)!X/l>-<lbgp?Kr5oW9(@ST74J)%?`O$Pjm= <-X_2][c?@epB@Z!!!&e!9sP(!<N?*"UYbT-9tj[O.E5NXf\b.Xf$YG*to"c!o*c!!Y-/"4'm<%XKAY- XfRY$6odtMGDr&kY-6L7d_^)i(]jR8Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF !.k3M!!`fJ/4!TgQ)FS]%'$8)Wi(bd3"QE%"9J)oeGog`0jTmVdc8dFWstbeD,3no2CKCS$O-Y6q>^m. '-Jr!ELu%di4>iYWsb&+80A<I"p5#J1J\R!Ofu^'RXn[975c7r!s/N)f)Qcl"9o/D(*=qe@>hbWlJo^] X/`5$KjZhL#6k83g].?W(a1V/D31g5WiN/#X.+NC4?Hr.]]ekRaJO#]4V8DA$NpJ2YQ,%;,Xl9dB3J"l .2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k4<!!<?LAAnH/#3=XrgVubj]`8-:+'#E3joXDZVuqiU *!P^0"W'seU;GX_joFK<joVMF$MON,!\&Z\d^PTf+U#gc!Ws2r$!`V8k2tddjDZ*d!#PedGhhHCjQ*C5 &HDe4$Pk!]K#QT68/20U!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?blARf(FV=KJ=X'[]tM1q^:h4m W/4q>-5[-mcN*b@#6PAL+>Qo7NUX[o_pRK9s6[h'M/loq3\26]"9&<Z!!3<0%3Il8<+LB8WkZ9^`590n ['?sH]"[(W`2.ue2%oum"UG`0Dih`[l2:SMWG=R@)%Hf;!9sP(":,JN*@N^.:0V7@C3GE._9(L$qV&3+ <^%uL"l95,!<E94*%O'QF,[]Le`Z_l_OY^S>ujTk??)1Irr<#s^jSN["p=u.Z2b7@/lR"OHu<1]1a*=a !.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3M!!``@+"^'"MP^<S!3Z:&#d0J8:F[=s#QjSteGogZ*&L<" I?USuXUqbPdGt#OTQO6u.N&Ns"Tec(!$h[U(*YkURb-lV_mHPJXK8D(YHP7:Yck1;TQa$Y)%HfP$5=Tn /l["\XhNHTp=F[O"TSN'ec6Zn%Mp<=0K)*h@<@<pV5^T"YIM?`Q"W;r$jQn:huEo]!WrT2)]pb*@<mp. X00"I`i=Ji0e5_%H^:J0YHQO2can$W(BLZ=$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l( !.k3&!:^$t#8&(295B?WWiDtqWrAq&WfqO%.39-/!lk9G%5:tD]?fE]n>cVdR"e+E='ANr5;FK#$jd%= !<<*#!=Bl*9kfTkj5InYVQ-SpWi2quVkp8hWN)+s80JEK"p5#I1/;YHY/.-+I99*-1`cu+!WiDW!"]/3 !Wi`F,VqML8l9)MUW2R0ldiMDUR7!kCf)bm"p4r/huG,+"9o2G.n=96VROFAV4<X!G@XB"0j9OWrqlB. VKH'*'GqMm"9APX!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEa8cY[6(QT] h;[MShV6=`)T`!P!!<<E<NP]P#iO%?Uj,-I$3BVr('H("Tt8P*jPJY;`m38mhr3VVjf1QRpAbL$.=^F* Z]oGL"6]aD!"B2R3E^j3dc8usXH5CJdJt-d)+p1Nh936u>9F%K!!*??-;K96hNpbI!Vl`!!!<NG$No#] JcLB&JcNmm"9^fa2[$kqJcMbM%0d=\,suU7Xgu'W]t_>]]a(a/Hs&]_'*Ih+eGogV$l'j><,did^H'0Q eD^&hf"eG^P_*mS3?JG,!<E0&#n\"-93bhTMjq#e^;Ik*\#5X`Trti:ioA4aLgE%T!<WK2&/%EMOh]<1 rr;JdC-!RV%0Y8_*!Qro-ojq)CjLPYH?Y(/Yef2ns8LK?C-=$d%g1\h"9AN)";rF?8l]MKOLim6rr2)f K2P!)8OQ*QDN_s;s8W#4I6nGK"9JV0!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<K JcP<@(^(3\)`1`HS>rZlXf\b.XfS+IB1F^!%Kj`O#6u5*9P&X:VspeiYd_IYd,WihR!iRA1`R,9"9JH$ 1^=aA3)b$ocdKbBZE:4,V4XZj]=GDWYcbO3HVZ13%KuqA'HSf'GEo;Fg[Y!iHoM90!!1XN$k+168QK,+ Bl\``R&:IpXKAV6_n`[-;(N.\"Teb`!$qXK"U>Md7qdaFV66r0`lGo^BgEj`5[]/7X0T"6e^hmMCcW=4 f`9S'$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!6kKP":>h`2HtQsVl6VoX8]%' Wg\NP8MVD!"4$uC!!`la=GXB.g<B&e8u8#DLiI?LC1L1+.i8m-"p+c*!<Nc^8o0Qi`SeJ6W26MoVkfr\ WNN4uV5L>TCIfTY$3gS9)DY$%O0$7!R!2J"4YRl`!s/N)mJuYT+9;NG"ViOYBm+lQI>=B"dHK3'Y,I_; E+2a/+://Q!Wh3Z.09_b(F24QL9A/+^8[]WFCn]M3[#nRP19O3rl1gY>WroA'b(9H!<<,*!"0)Y7:gRR >"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcMSH%Ke)$\]<F\k2P7Sg3bacmJtW7!s9TEXRP?Z iRl>dU2j$d*!cT9!#?/2LVD$ci8iY2Y*H-+dF[+0ioR1+%/9f0!!4TujNk#hC)@&s!"f;=&0*H#C5Jh, g>]o.@6>5)e,TmW"Wp-TZJX!&E_7Yar;[0-'.6S1`SQqP'EY04!sokR"8i.N!.k3&!2TYu"?WM?"SMhI !.k4@!"/l6$kb*pKqkua]=n3Y$,4*[Um$+03unIE!!`T7'H])1E/jA%!l;gq8'KK@g!IjeaM"a.="am_ !W`<*%2gHQ;e:$;UTh8C`5BC&Yb$f2PG,4mjlb%!O^gKh!<WN4&OgZ$^X;HKs6un"3$K.J"4mM]$5tHU 7p9khS!]G$P7O7c\&7h;rUn0h<$W4i#6Nc_-ijAN#:;uH?u(.V]ANVfr7[o[2'an>5"8UiOi78!s8'KY 64X8'!Wh*Wec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3q!#PeA#RqtKDipiq XfSY,Y-"e%OaUe4/f"T9!;QU"#95QoApooAn?!8*ZF.9\bJ(6QNHA2^,81:`r;\Y]+#co.KVQGs[^**> XJMDMT<H/O^:1DN\YjsU0c^`-!t#\^/5^SUXhWZ_p=apT"onW(m/ZDO*"t#'FG#C-P*MN0V5pZ!XKK=Q Y*`TX*!QKH!s.<[,m"5T$l1g1Lpah)[][3^^9)cX/.r[X?\PA`\$E3de&JP'3"uDl!3uS4#pVfIFD"`K 4";'Rh#N$,JcLB&b5_qT.pRn+L0ZMC#R(>3`;kJiW;mA0"UPV_8T0Z`VQ$MpWrAq%ToXS59.q%`o)R;@ #7E+`K<`DIbj_YnW2#oPQ]-`VKkjXM,9%7%!s&E(!Ym\(PISilfr:mGW2Q\kSX,eBZa-X0V5]Sm7Nr9M #6Y2J1//0kNNL*uQuu1p3@u0UrW3'#gAi>t!sJlO7s1rM]saf8Z+nH+^9Xc:M/HH\3[kgJ"9JW*huEo` %2gKN<ZumabKS&;WKq[67m/aU'HgA=iW&rV`hmud58bIW%0Q\4YQ,%;,Xl9dB3J"l.2`GD!.k3&!2ff* #:s/8TnH`-%1!+?!W2qL!.k4:!"KW@RC()kk2bO\gmqLo$GQQC"!1IDnE'f5hqJFdag7FfAhjo!oDf[2 ,?UengYh,ObcZe:LShf/e(Wa@X[3Kk!!r]TIcShWLh.;&c2\.S'du:JD1e4W^Bi'9hqt58/Iqs4!"/lQ @=kK(ikBS!(^U$>$3Lni;2<0JQ:DYkeH"%u!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!6kKO!<E6((e&S: Y-baQrP&WP\ZhiqG>0CfcN*b@#6P>J+#6i8NUOVR^qde&^qd_(q>0O6Z$&;?!s/N)"qr176!A/f]=bkl ^V[guZ)O%7Iu0Gj]&r;1]pEFt(BFUA#n]XGOh]?6s8VVeBK%(M$j5ntl2V,#,W@q\>B-1G]`,JQ]Y2%t r;Q?J[Wt+H!s/N)hZ,&*!Wr`b=CuW,PH2@bs8DB/N_gZ$*ABKA<,.H3rVuol^3r<Y"p=u.Z2b7@/lR"O Hu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3M!"&`.!Ws&n@#(>MWr&n'Wh,?)@Qb\6o)R;@ #6u5*9P/a<Vsg_uY-+t3Xfnn3\u(9n3un_1r;[-5-q@j"Pc(^fY5YO>W1K0*Q`J3UaM"sa\Yt3b2'EJ6 !sfMZ%kCIuQ*%m[o_.$f3X,Qa!S.5U)aeS>\\5YZrN$F0Xfeb._mG_K6R*'CrW1mV"Tel9&fjOcGH9HA ^9auY`N>,)1`6H-1gQ$C\\,>RdF#b,A2P&%XoJh9,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+? !W2qL!.k4@!"/f/!Ws)p@>()CV5jKp#cOYjO+:\(*X'L`#7<"[J#pK6b3uD2WrAq5VPg5?@6u7b)%?]M !WrNC7=;`1qYA@7ri.9CVk962Pb>J#Z`9n%O_dK0%grUF"WB*hBT0%.WgI^"75cV5#lXl*!S[SY!X/c6 /7Y[Yrs%r'WMlerWXPo-X/:;P59M*c%0H[f!%.m^+uDr2Qb1JTYGeIYBLjNo*>8\r:RCDIs8C!8H!WcW *uGFi!<LpTec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq"U"k"!.k3k!!NQdH(Db*rT4:B \V*p9#L!2@!!<<D<35QN$g$L2jPo%PfR,Oc!VQKs!YRM8_W:^X&)kEiB169dY.i$-h;k\+%efr0![`BW c)QG)'*@@tkPu5!*'Ir'cJ@=6i8N\Ujkb_O%KXuX$56FG`6mB%XAKl=qZ$s(%OtD7`SQnN('=:3Y5eY2 )@HZ"!.k3&!.k3m!!EEdV`+an!.k3K!!rZ,&iO$JSZ/s.r4`WO['$3\@5\]'"Tnf"!7_'I!t,eb10&:Q ^r=USkj-j>[^*->XfAD"VPB]LQ^FMO\&7k:r9qR\;'6M\#6G)E-8S%nE0nDZajJnt^8dBZMhH4uJr?#* _7HY)?of#'!sJuB&Op`%^XDWOs7*""2^&qF"4mMX&1';$8m?D5q7d?Vr;ZWW\U-UQ"Tnf,huEo^#7_Im 8JklMLm+OC`VB5id&;"O'ac!;4%*(`OMq%qrs-Pr7hl@8"9SQ'[/^RC/lR"OHu<1]1a*<[!.k3&!2ff* #rcgo[$u&"&dnpI!W2qL!.k4>!!rZ,%4Y"gLmOp?rN-L2XJDAKE_e1p"p>#0b5`.[*&L?$I[$b5YI23g _mH;/R@=)E"J)$RTr:G^[BZg7Y.qEAN)qhP"9AQ*!=gSPCkeCYXKSq=^WOHbIV!YWR'!QkV4a-/CeQN( %g<"?&f`AtFHruEht6WsI6%Q4!!1XN#969ZY/SK"Z2Ca'XUD;S^o)cZ.1cO\!!2'ZrW+>K'-]5'Cm)<M ^U^e[bd<@?5U@$H&3+0^\A,egYh.a\`-=Nd!Wr9#hZ24-$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7 UkW/0%1!+?!MKLF!6Y?J!<EW[9l>]NU&M&%X/i1tTp^s];(N.\"9S_S!;QUD$7f#(XMN<,Whc8OM27.S R@'A0R@KnBVQ@GL`P&[^X/Cbo=?\_o('X[?1'JUfI_Y@Hp;Nu(S!]:dIX#aSJ<-7sW3<RiAjddO$O-_; )DOouN3'gpQu>_g1b'=JrW3'#mJuYT"p+r5#VBYmrr3#YZMCO.VKlH/)BKY&!s&G^!%e3Q"U5AW2,7kC WPZ$BURn')?pl=^)%m;u;OR%Ss7sR/FB_'M)A`hd!s/N(Z2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)` ?&#&+?8;rq"U"kF!.k3F!"KW'A=:X%jQ>Uaa.mi[([qFP!$VLc<353;e&/SiQ\]g+F*2VMI"@$7V7=Ol fA5ECTiicO!qu[3";a=L`oQ"/cbbE8/.ipV6WduEKTosn#P\9+!!4KrjNX]V?4m=c!!NTO7WYT_q;qh: M)l+Idf9@P$86VEdb*@1N]RaPqZ$s)&i!ONakrR`)?Qf:!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k4= !!iT6-q7g$R]O't^C.]b['5m>8L"oX#6N'K'*AUV+#6i8NPX*3s8VW6Y*+^#LAli/KnbA7H:N+'LR><^ iqr]Qd%"Z*,T.$o#T"sL7pU2'_9Ca(rSt8HChmcuA86.0IZ'JYOEsk]&ci(<#n]XGOh]?6s8VVeB/^tL $j5)]#7i.A5Y5."V#8",^C8'[s8V]+JO^F]"p4nb!$;4E&0EPg<+Tp3TsVkhpYj&gJm(#F$mIVp7ojGf `:s92$I4H%)\<A]!s/K(huM=.$OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!6P9J !=9f*;f.5WWil9%$EBnoJm^VW%g`C@dfB1D@L!l09P/a<VlmVSgYTW7Jo,:?DK'W<G'8:mS#j*,[&gC= ^:14f9-srJ"9JW6/50u=R]*9j]$0%%cB;a(93>bGG^OskGA1,E/0#0)!XKDY.St5PXhioep=k!V"onW( m/ZDO#9?E`[*-_8Z2(L,YKtP-T4'PjrW1sX-ijAN#U)E<I?ghL]t(\f_U>/u6m`f^"r'15R_QeX\ZjlR jP,eo,6RlG!WiB'[/^R@,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3J!#YeD+#m5; K9rI6WiE,"WhuJZJRLYZ%g`C@pAi_D;@4pPJ#pK6b,Lk`D.7-mD/X<1DfBcDJ;BMpd.?DI^TON$J8edk 4!4k6"U5/O8UnPDp[lD%RZ2>i@:*,/;H[LGGCu$NKO-e]$jd+?"WB*h$tkO#^oEc?:.6uh(^U*B!!1gS "p+r5#VBVkrr3#WZMCO/VKlK3)&sG%!s/K(irBAe"UGST026>HW$AmrWhQ#OQZ61p,TIR5&1(GJoDej^ _520Q66R$W%0m"=!WfS,$OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!9sOp!YI>0 ^#J,6k2b+,TRnm&_#P8R*E9-#c)ue190+F9',))r(E4GA1JhrrNMaA7h;Z)%<A>$Y!#PnZ7"32:eA//C 80\B?!<NE3&KE5X-4L"M!!r]RIcSbRJmK&kcN"+S,=m!Yg&1"3jojP*6PKUO!"0#V;O>ncg!\&`.L5eM $N_2+A!bBrTiiWE!S.8"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcNmm#72>&7:_.J[f!lJ]tM"eUkN,2 ,8CUhdfB1D#m1PL+#6i8NPXZSs&S3gM-a.Y:JFS^<**I>An,@lLSVc3jS/W*X*RK",npLh)D!p@?uqaR f^o.ChkP*W5Wh"a5>"jY@r-41BLs`d!<WK3&Op`%^XDWOs7*""2^&qF"7?0S!!a#]3C$/>EhiHF%)_rA s8L#l9H+HJ"TdT_+9;KI)DXWM<ag?T\&[(^o#d_Q><sYL&10G)869Sh_t3m-#M5#6+r1^s"Tni.!<KV/ $OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!2TZ%"r/CA;/hSoY-.c+$`pM3WfV-m -lER%"8;fG!)a%A1e_M1Pc(\(gYC;SG#gX_4$>eq7S6BYEJC:!\[AWDZa[]aNaXgX#R1A4%P:FrN1HuN Z,bkrpW@qT)BgOa3'g2;?!0lh3%5aU"p,&C*"OMqFHruEht6WsI6%Q4!!1XN#9?Kg\^AdIZMCU.YLM:P ]lH=T!rW/\!!rZ-!Wrle?&Q5/+3D[4[_Bl7dZRia((^fX(-ui3a32Q:Yh\d:lE4PI"oA?$!OVn8#pVfI FD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&m/RFt'dYe;E/gWkW;`e)W2cbmO)IcA)A*8X b5`Ig.oLku_9pE(Nbhro84uK=5!M7s78?llFIL/YrVuB7[AfjcL3mQ./IVpa#;I;mJA:ICn\V)dC/.>f 5rU5D/i#=U>&Ah/;)B1"#mCD7)DOouN3'gpQu>_g1b'=JrW3'#gAhEZ"U>;bA?Gk2!T('YX8].-VKcB6 *?>q)"9JW*irCY5#7qXt6"lFrajS5,SsbgoB2^i4()7Q"/7"n?s8VK"V/oHt-O^Or#mLP8!Smb,!"0)Y 7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcN^h";Xb4io9su"l.SH[Sdjb!;-=""!(@B j1Bk<-l<<mq#Cp+"W97$Gac:tj3tT.H8#Qu!"0#R8;#"A`hn>i*!l??!s&W0!VQL"![`BWc)QA%&d%7s kPtbm,tiKbg%jb5hjmO]"4[A[$S5/)[GBWd`j]"g!Vud'"s60JT$Q>mAMOhm!3ZA)#oX0RfDpL'JcLB& aT)GH4/Y"?^AricV#Uf*%N-T[EL=)H^AYeR^:h4`Q>oAJ+:n\M!7_&U!t,eb10&:Q_Y*p.7F76%.N]WI 'c.f2,;2DZ;cR@QR(pJU`Q?]@O^q'?*!Zfi0Ki':F-so.rr<#JMG501'FtN^)'UUj6W%/l4X:I;!sJuB &Op`%^XDWOs7*""2^&qF"4mMX&19J'8Q^#.q7csJp&=srcAPLA'+>'HiW'2a!XL)<8P<&#Cll9JeE6Dg Z@G_2.NAp3.R$9n=DjDAmJd+niK[Lo)\`_c!s8T*[K$[D/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&" &dnpI!W2qL!.k4<!"B&<'HAr8K;>WOY-"h/riHEsJ6b)Z((18g!#l._1e_M1Pc(\3h:0Js:+?VX$kEsd )]p7[<-1Tr[^`oVXf\b/YG$/2)\*)T!Y-k[G*AT#YHl^Lp@Z15.KKSQ"pkk_.l]RI1+jpm%0Q_<&f`At FHruEht6WsI6%Q4!!1XN#9HWm^t7,]ZM^j(XU),\ini1@9-+36!TX57!<N?+&OUu]p$pqUY-u=#j3`NN (C:<O#TH6TWR0#7]!9u^o^U"C2$a9d!WiB(!T3t/!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc2 0b"Bl"9G1rJcNmm#6YAJ*].2TT`1kjWiQ,t#cF/A?90DL$j>#Zq#Cs5.oLku_9pE'HsfPp,paNEr=MX= +Y,EFJ%#7Ss5gqpW2?AcJR1>J$O[:K+A73tlLF8WTn-'03[5a`$O[@M%2plg>ua*='ak6M!sKSt9P9<c ^oEc?:.6uh(^U*B!!2KfmJmFm"U>;aA$#\0!St!UWsbeM>Xp1^((CBJ!Wh<]/HcIs+#-iM]D_ZXYc41[ JS8:]0bt95)'(MDU%86`k..:49Kag0%LrjP"p=r,!ODb6#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""( KO-DC#R(>3`;kJiTE#H)17$nXioK7]iSNC?/-YSEd/XIT*E9,uUg#,M!qcO&!>7(aGc/pNiniJC@Mnk? $4.qPLWSD^MdA1Cl2V.k![`BWc)QA%&d$AZ"UQSPH*5irjosY=>UKaWf)PmW049G=X3]k]ag\'3&,?25 #U`>hVU=>*E'G<CVuQo+)@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!:9ao!t#SU03sF6\\,Vhr4`KDTnR&K 0H(/p!R:Za!t,eb10&:Q_tsE5rl9ad)\3>a"pYJE&/m,b91VlcBmZPRZadd$_4PmP4!Fn9)D+$D?uh[R iVWZThOA"6.N]<1#nI^e+tP`D6SBAc!<WK3&Op`%^XDWOs7*""2^&qF!rr?&!r`9%"RcKq!s/Mq!"9;[ 2EaT5CQ5?nWN`Z2[^`uekl1SefUZP3,oI-or;Zp#!WrSo"oSNW"pk\T3)*4MBS;qk`mWi7m(/6f:dmE! 2G6tH;dk!B_W(Rps73@=90"UK(D$rY!oX.1!"02`8T&op?r96C*=TIYJcLB&JcP6>$jSLsO/n7O2@g-! !s,(qJcNmm$3LM@&L:"kQ`@3iqlL4%NGh]T,SU@_!<LaOq#G"3*&L?$I[$b6eCr6^F?plK!WrQ1#n.=W +ZrnNP,,J$\$WEDXf?tP,S^^k!Y-eWEJpBgXg6=?p@lOG2?sBg"9Sl?)C6aW,9e0B$NgG9&f`AtFHruE ht6WsI6%Q4!!*'#!X%rqrWN-$!<N;o!$)tFE21"T[Ap4/Za$g?YHG(SkN1Wk>:]s\!s/N(rW*$$"7?<k ""jWX#7VCs>*7,'kK^T>[)(,GeWF2l+X/-U2I1s@da6(DYgN%8o\bj2,o@1""TAH&!O_t9#Tl*1B3S+r 1a<bAh#N$,JcLB&b5_qS-;\uTGZ$%"#6Y,0`;kJiV#Ul+#7M1j9luYsWiE#qWsYPYE)\nG'EeI<!VufH !)a.S;LbdadE8>2>sfPO)%d,Y"U5/=',_rO?]rJ+p\*.8VP^;mKjm1W$OR4H*_Cdlk4.iUUPN&D5qXW- &If'N":ZA(69["C&.&OD!X0Js9FPQmXMCj'Db`_X.MrHj!X&N)!WrPn"T8E(!W`>s!$hUK"pcSUNn3sj gq^+sXJ_nmW2c_L?W'-A,SUIe!s8Q)!WiJh":G;6#T5*S<-Y(eqqNO0W2lMWLiR!/7kQ5D1HJB]YkA%m f!D3-;+*>g.Oung'++gB!s,e0$OIq<>%_):68Tr'$%`//!.k3K!"9#X;L"IN<%J@]"9\c'!.k3&!9X=c )J$Y,g>;bi"._su!lG!D"!(@BhjmO]!qQBl!XoVi:4'D&h;RDVG9?q^!"0#R8;#%A]U!=u$3BDl#m)H& jNX]V?4m=c!"&fF2-57,_T^Zfi!A?&jl*Uk73;cd!"BfBLS_l@k1n4oXAU,AqZ%'-*("A"[asEKMcr"D "4mP%!!362"1%uZ!.k3&!:0[f,&&)"RfJ$?aT)\N"q(qd9Qur.ZamdI^C.QORY,6A-49nW!<LdPq#E_` $PX[<<H*r8qu?]p`Ipi#$jm1B"U>>A&g&Va79*`'JVol"^Y?o3KOR7n#R2%l2+LtnQbq8<r;Z6!P\a;` .Mi!r,nUk5-SR.p&dA@="UPc1E07o`nGiOYVe7q3((:9G!WrQ/#71e3$jd=N%1N^T$O6e9oDfj<)D!j< >&K(\Ne`IWTrtoAf_YXJj0=,74t.6Nr;Zp#":,A'$nr%p#71qX+"p5g=_r\NWkZKqeDKQ5Xc\3\E+`m& C1(LmM5e>AnGiOeae4/u<'`2?+rCak[K$[B+Zrn?>>@LA-5R$F!.k3&!.k3o!"9&[:jA:M;(N+\"TneE !.k3I!"/l3#R_S6@YLDLWiZ-#$`TPJDH&M6#Qk,0!W)lI!)a%A1e_M1Pc(_5f$(UA4W4A&!WrT1#RUtT .6URCL8W>F`O`@WX,C:;*"`DX%Ojq_JsE:8Yeo,]pXG1&-ls'2"pbVN)&a;-'bUr]"9JiA*#0r"FHruE ht6WsI6%Q4!!*'$"9o,>rX/9(#7(P?#6b24!qZI@'J`[8M2mX[R&7C4]XP5NY//iSjf<8]'FG$I!W`<' !X&Z4$4I:M$M4W6#R1A4";2q88ogKKj3]6j[&pXE_TpT,J6u8T;c@+NQFkMd_Q^5^ht-R/YC0J;.i8Kn !s/M3!"0#K/k8l44u=`/&I3mfJcLB&VZ7,.*^=.c@R)+C"U"o.quD<KJcP0<$NgM;$626>K:8L2Wr/n* VNujP<Ats)!s/N)cN"mk.oLku_9pE&H<ilX*uPRo"U,#3#7M1\-:DE4Mm'tHjM%jsV5oD\4;/)0#mM>< H+)`&oZ*epH<<m55r^23'+4pL'HeqV*Y\qb"9JW.)DOouN3'gpQu>_g1b'=JrW33'!X&W2mg01'"U"o0 !Wi&r&-;q;"rog>R'*QlW2R#3[Ak(AV5U>ZEaDd93$Jb:"9\c-!sJl6#RLbArWr3(rWrK.0bGp*AVd1s j4:oGVQ6J]Q]$$+BNeJB@VC"T^%hBY_lfo(Dbihr:K:I`//STo!WrJ^!7h,X#8o3e<D,S6.39',\H%3] JcLB&mf3b!+$jIg@R;:G"U"o.T`BZE_Z0iF2L1_(gAL(9Z"u<2!mgr?!!r`J<34uI9Gmm4o)K1"#UN<) ^<G3ek'SEUq#Cg+(I3;diQJKjC*j>ilMq4m-@Y%#We+Oi!pBXI!##MN-9YCLOKlsYg>CrNa.@?I(^&Fk %h(:5WkZp:k24b5^48`t#6"]:":6>EDj%9EgZ-DUL1;k[&-Mk2XoJG'ec::%JcLB&a8c8J/dK)jJcMVI $NU>6#o>^6KqGEP]DTDO]!JB,JQsr@"9S]+qZ,.H;?I:@+#6i8NPk\os80`d7hl@9"Tni0"U>>G(Eb>$ <E*:FM4q]Cd^PHX8gjrL'I,7u?$)=IaOT;Dq;9)jLLWXt*#0"m$kX3n)%m;Z!<WK3(_K5VOh]?6s8VVe B/^tL$j-M4"U58B&/=[N"Vhab%0m"-!#u4V*\9HM@<@$MF`N4uTsVYZhXLR3_jtmM3ZnY*!!<<.$ki%F %29Ba$kF7(1dP)KB8Mg"UU._P`Q6?]d_iJpUmm[3Mgp#&N1dPoak5kQqUrT^R=Sm?2C9.C[K$[?)(n<R 7Q`FS*>/X0!.k3&!2ff*"Wop8H<i`[$3gV8!W2qL!.k4<!"&c0"9oGj:iD8ZV#.8%X.u#<Ce5u^"9S]+ cN"U`*&L?$I[$b6e'uFDC-*44!<N?%"9\l4$Pjp]01'NEdI>u5\#louB0%:R#m1S^6=>,!T<,6)`6m\u WI%W/.2`I!$O[FS$k*LM#6P&0#SJ+,:iqu)_;FnYgO2*e!!!$"!X/l@'+trL&I/jX$jm7F!sA/q$k4FC <aof]Fb?-keB8fH\$<*D`RNhSIS_7(%0cn8!WiK.#RqC^'b_5P&N(%)"9JiN3)jdQWQN5p[]us=ZaRNf [@W8.Jq8H-Q)2(1^pC/H\&[.blbfENCJ-)c"9S],i;hF/$O%4h2*WuO-Qa*5#.X_c!.k3&!:Kmr";W[c AP4`q#6Y/3!MKLF!6G3K!X&W2&MR+%M3Xd6r2U4'TTt:K9.1,M!s/MT!;QV%$7f#(XMN<,VKcE7)]oq. "p>#2!sAi9%2UKZ=`fk6h<iFmVlPMZ4;/)/#6Yo4G-]ojp<';'Q\K6c<_>A(+;"e`$P=3j&IJ^D!s8T. )DOouN3'gpQu>_g1b'=JrW33'!X/l=rXe`7"VD=X$jd.;!rrDt!$hUI"9fMl7qHssLlRn$[E>qZVl$Gb P'gtM8M(M^#6P#/"U>G7%0R1O%hK<H&H`RT%hARI/K-fcR)7A7j0G_`VQ6PdS=5ClKn4i1N/sL4a5,(V Z`9snP^QqSEHm"G8gk)M"U+u/[K$[='I5S&3%ua'((CK(!.k3&!.k3o!"8uH0hu=T1)^B#"9S\D!.k3B !!F'(Bpm*@joi\fA3LRs!7:cQ"!(@BhjR4V!Whfk$3r+kR'Fcek'e`]q#Cj)&3+aLj4VPcTi3<J!UTjo !!4KrjNX]V?4m=a!"o><&KWf3KWW8Ag>V)C_5`SV%GLje!=C5UQHIZ"gYq;Rh:^5`LLWY23]T2kB8NP" bh1k7fZ(7iG@XK0&HS[-JcLB&JcMPG!"/>uJcLB&m/RLp!<N?4.nsuAT<>a&^C.`c['5p;5SF;(!s-^J '*AUV+#6i8NPk\os7sQ`72#k/"9&<(!WiH-#Yta?1.Oo4>C)ULkM3tMGu6.#"VDb)5$N)n^r"%0c2.>1 kduaY2'j.O"Tno3"pP55!<E9+#n]XGOh]?6s8VVeB/^tL$j-M5"pkbP(EN)k"s>$1)A3D]oDf:'$POL. 3D!=aDJ<L#%u-@R^r"(3cKs)mQuG_J#lO`*!t,_\r?:eW2'*VL&JZWO5tY<qK!;Vl]>).t_Sa42aMu*1 \[AT@VPpW'\@]Pn`5g*HdDs&>XGULZ1)pSY!7h,X"VMt53&)p/*>Jte\H%3]JcLB&mf3au'eDgZ6nK5[ "9S]+T`BZEaT)\L!WiH1+?`tRMk6sHXUD51Un33E1(FEi!s.!Rq#D$4*&L?$I[$b6dF#k3AiLP,!!)s! <!*4*"UPVZ;N9*"o%1OV\=@Y2//elu$mRl9Eep6cY->4=\^J<pOC^g/&.8aK"U"r1"9\f/!<NN>*%Fd, Q*%m[o_.$f3X,Qa!<<3,%Mfp")B/;e#oOTr'bV&e#R(>&!%8*e+tu)I:fqLkYhRsW]s=fEYd1aKOCU<q 'F=mC!X&W2$ksX&*?6$j))2j9#6G5a:ir#"ZFmKJYHG"1YHY:9[BQ^3W2HMiWNEG-Y-"h/Yd1[J]t:SM PANT!!s\r2!k&(:":Z1p/12PZ((^cTh#N$,JcLB&b5_qQ&0a#(2'W_:"9S]+`;kJiV#Ul(!WiH1,!T@W M41=>Wsbr(TppX?1(OKj!s/9!eGp-f.oLku_9pE&H=&u[+;t^nquSDO!sAlD+tuE!Qdc!)`2]hh?TJi. #R1AH5]a*[l13*!V5'WPH>HYO4"1pMrWNB."U"u,!X&N-)DOnoB8iq-WgI^"75QJ2#lXl2!<WQ8&f2B& )Y=mM'bLiZ#6"`"!%\-P!sB)P.m-F+AoNBjZe3F1Whl_mUS+0$=umH0$3^J5"q(qT'bhAu()Ih^)%%2q 'GM2m&L:86eGfILdA<]SW2ZhtW26;bU8"?VVQ$Z#Za?m;WW&n!V4jIZRL,R\K3pPN#6k83[K$[<%2gKE -R'NG&.&Jk!.k3&!2ff*";)k<9/\"."9\f.!W2qL!.k45!!EEF6@$9BjosJSUP(B*`;g2H*E9,tR7e@u !V6<j!!s3%Eg=/bjaercp](a20PeJciSWG=O]3hB"76'p![`BWc)QA%&d$2U"To;i?')B"`73`,iSE28 BH[K6!%@pW,>!9pi8N_Wk2k[_i7uf%\[JlR\%]r4f\GBDjQ5@WgXOQj^p[,RgAlg*JcLB&JcLB&JcNai #m_V6<ca=t[(X3Q^C.`f]""Pf;Buh_"p<HWq#D*2$PX[<<H*r8r;Zfm_LFrb"p=u.qZ&8M!XKu46qC9j NkXlCca8L50an3p(*P\<DM4sm[CX37rVuoPYCKV<0d7;@#mCD0!?D.@!sJuC7W=L)dd[;:nY^"Y+VkIg !s]5J)^I!np-8pL5X.Is4>J/s$2su"!#u(F$kO:&0g8?<@pWANH'YbE\@fTBjj(2f>;?Tc!<rT1'dGM! 5Oq&I3A2d',;r"`:0hn*hnK9C^RT3E;)od+[K$[<$l1'9,9@^:%LN?p!.k3&!.k3o!"/l>+>H,7+;"bZ !Wg4>JcMJE$3h7t7:(8%Uogc%rN-C,Wf_-a)\!&U"8`)K!"]AT1e_M1Pc(_4dDW%s2\cDh!&+ES!Y%DB _"R<X_6(GKIT&*G%Kd"W1J)#$PGt^dX0&M<b/qAUAOS'i'b1KQ!s8W'!!<9.&f_`<:iqu)_;FnYgO2*e !!!$"":cA"0etL=oJ-Y).O?8X&dea5!%8!Z'HADM2Ek&\Q+GT"cb-QfYHG"=TR9Ql*Xr2Q"9f#?(aCap 2`<Ja1(>]Q%g<M'@?.Y(\[8K@iN3?_I7b=^"Tnh7!"/o8&K)W/'bh/c#6]VYJcLB&VZ7),$Pk'E,Sggl !s/Q$!.k3&!9jIg"rAm^?[.X*rhp:+X/DtqVN5O]*"<2W"4$r[$7f#(XMN<,VKuT8*$,q,"9AQ#!!360 &hY+S;hi<ls4jr\JR(;O%LNFC&iO6c^!c*$Z`^@/W02@:<(fG/*"i\d"9\c.!W<!;"WB*hB8iq-WgI^" 75QJ2#Qb)0!X0)R-nmA1o.gP$+VtUo"p>&'!!!'!!Xo>G)'ppt7T<rJR_%2ld`/JeVl6VrK4-n]&.8aG ":Gh[+=&Be/h\n5pG*44/hJOu*uZ\<U%SHcnA4"_#EEF]'F"^D!oX.1!"/o9&K2`2(DIAe#6_R;JcLB& JcP6>$Ng_P-8Hk`%0Qb7!h]OF!5SXF"sR-HhVmJTk2"V.[T=$f!;-<u"!(@BhjI+R!Whcj#mDeYI&G9O LG/r-!"K)Q<28.&hrE_-Jkmp2"RZ6r![`BWc)QA%&d%7siW'Ji%4tV0S@R)+ioB._LGB+j!!NNK5A6M0 hrY#l+oq[q!.k3&!.k3&!.k3E!"9&H-p:[[R]sH<]tV8\]a26OODI01)\*&K!7_&`!t,eb10&:Q_u0Q7 qnmnO&-`7=!W)jO!<EEG2F0f1@u%ehn__BUAiUD,$P=1+9k&!hMk.2jeb&nAl,TZVE*c0u/0GT2!Wr?% !WrT4(_K5VOh]?6s8VVeB/^tL%0QeB(F1_%;If?>$ZgB0DdPg[&d&1:!VcX7!sJr<&fDiA2F^PG>\.Vl OIN8Y^[^jQb+!$(&cDh7%OXSMn8\tP=%>//9N>"g@!A$R^Yup4e@qDi:cKR([K$[;#nIgk(DIGj$3gTa !.k3&!2ff)!Xf_e.j5W9!s/K(qZ)3JJcP$8#6YS[01KT.TDGYrY,n(==>Cs5$3\ZT&-j139P/a<Vm"S" aKfSA('=72rrF_Q$TDgpf@ncoXh_0!@Qu+K!X'2^1JDM<Vn0CEX00"PcH)i:DHfXi-lN[*"U"]'(]jsU *%Fd,Q*%m[o_.$f3X,Qa!<<?D0hM@L!+#5'#@(5&7lVe.#4qm(":,GM)'1%Q3DsUGSJnWEcbR)uYcYaH PA<T8&cr+;$4e%*5?)*#?h[n*?OKUf+:T&OD4\be_7/=(#H*#C)$gEK!oX.1!"/l5$P=*c%h/gM"9Z17 JcLB&JcP6>$N^SF)'Bb-#Qk,0!MBFE!6"pT";)b17q[IDWiDtqX/N%uW0_g41*@;="P3YL!"oVh;Lbda dE8>2?9f>H(C^KJ!W)jO!XK8L,>*F!s8MN%We+S@)A*Gb!tZtUD3;-Pq:`s$XJq_EF(o/l<Co8'*=rM^ "9\T&&Hs(-9P9<c^oEc?:.6uh(^L6C":#;U2,7[k@USn:$=@.;4Xh0V$3gV6q#DoG!<N<,%2'O%-ndJI ?$;=,[(aV_W2?JnJmgh_'b:TQ"qhq*2F0u;?!^k3?OpFI>$=ch1aY%gTCDm\i4@gH"-."Y'E\OC"9Q"3 $NgV@&JYlg%1*:C"5Ns/!.k3&!6Y?M!XK>T+rLpu!s/N)_uPAhS,a$,2M0N7h;RMQgXF2^,QdZ>d/XIT *E9,tRS+Ct!Up'q!ZF::R*"HM2@B0Y%h(=;ZGY5Lj3+9F=#_<3!q?6t!!4KrjNX]V?4m>5!!30&"7uct !oj7j"r8pkJ?[GRh;[RZ3t25a!!!&l#5n]*!W2p&%lIL?XOH=oiT:2m+T\D>JcLB&JcM&9JcLB&kl;.p $lC9OArN_#]Y2"n^AbeNZCQPQ67`rYcN"X]$PX[<<H*r8r;Zfq_gb&c"p=u.q>a:k"W/jS6W7QO^@qKl fW'!X'*\^M%Ndu:?tXV=VSUC0n,2V*_QKPmHY#r2+q=\W!W`<("UPc1E07o`nGiOYVe7q3((CBN'-oD" <,$pURgYslY-!n!59'k1!s//s$ipG6"pthR(EY"[3_1&k@pseBR'=@!r:AmNF[6`I#6kAH3a[L2Rh)$Z SXl!rBi.Z7Am/8HI%T<2#LpGTCeco3$/km8!"/i3#n.=R$jm7E"9Q+6JcLB&JcP6>#QY,<&f;5i"p4c) TE'QD`;g5I#ne1/;g4S/Y,qQ'#cs_VCeQZ0&d?keq#Cs2*&L?$I[$b6eCW!UDEJ^:p]19o/I=%2KsJA+ \uir_Rr_1N&HW%A'Hf88HCqj^\Z`0?]>Me#V3ZjX?q<$q'FFp?!#u%G&f`AtFHruEht6WsI6%Q4!!*'- -qS61LPCNVL]3&5L4X\V4!"\"!%.jP#7D"R',McG6;qWUWR0/7]<\Q^`N>#$0bjcl"qDFs5[/DiM2Ct^ rJ1i%;`#719R3hme&o)UXTPJM8f7^;"p4q8!"/i2"pkYD#R:P:"9RBZJcLB&JcNso#6G#6%2'*U"TAH& !Q4ti!20B$":5_^/l[%[VlHbqX8]%'Wh+u^:,F1/"oA;M!"oVh;LbdadE8>1>sB)B'at3G!W)jP!X/i= )ankXr;ZQ7We"M?*#9%m!t-,+95'O*pAaC$Z`0[cM0j\tG]R=e1`[2<#6P#+!!<BC0h`EsN3'gpQu>_g 1b'=J!sJi4&hd16Tpq:)oRmNe;)]I)$jQk8!Vl^F!<E6)"q(nS()e5D4Af^?RBk/TZDj\$J71V^(DI5[ #oP0R9jr*kJqJ^MKFrffJ:McN8M`J@RcOM=c`sOOiN!3DB0R%6"U"n8!"/i2#71_D#m^_<"9O/TJcLB& VZ6r'":5SP%g`C<!WW8u!.k3&!9=+i!ZbgkcJ.4<iSN>CO$4,p!!r`J<34uG9,7O/o)S^h#Ri1[Ktl`5 3tCub&HWqIK;-38j4M8OOE=\p0GFW[!!r]RIcSbRJmK&kp](Eu$l:3CoJcn$'*[Cr!!EZN98L4&f&5\Y 6P9Ip!!*6Er]0^4rAO`s"TAB*!?P$[RD%81joU)W!Sd[,!.k3&!.k3&!.k3i!"/i4$P+@TI%n-]]Y4<Z $,4*^W0M[75U-Wf!;QU/!t,eb10&:Q_u'K6rks:S&-`7=!Vl^-";<+?5ZVQR^A.^'kdu@9(C0pD3>4#8 ;,q.PRD?_[bL4tjcc+&AXd=-,0bjip!W`<("UPc1E07o`nGiOYVe7q3((CEO)DO<@;J(UU[10OOeaE)" b`#LJ#R1A4p])Q?!<N?*"U>>?$kO'q6s!K$HAeW7o`+sd_h1Q!$47(F+&$aBo!SJ*$DrbtApAT.?#YY" hnK9A]pNR;9f=(![K$@0!X&E*!!N9'!<N;X!.k3&!.k3o!!`N,"9o,9"9\W(_Z58gT`>o2":,AN5%fnT WiiG*Xfee.Vj;jE9/7FkqZ,.H&-j139P/a<Vm"\+d(XQc(]sC2/cc2&88F9ZX0JbJ`2eYn/ee?g!soG[ 7W+R*]tLkWY-5.?[Bd$8T8IM^2'3>2r;Zp$#SJ*o.St5PXhioep=k!V"onW(!"UtsP.8$-Wq<.n\]Dh* OB!e<oDg3>!WrQ/"U52?'-&>[B9pd-f>P,"d+$.?E'G6C!XKG\1KAO\WN#Ne&#Z=gDb2-"=,+QTg;^J$ Xl6AeVg_8W$3gS7[K$@0!X&B(rW<0&!J1<'!.k3K!!`N,"9\o3"9\W(q>c*IJcP$8%0?Y<$5Ys?N2EMQ W2lrtW!B,^IV);0*!jjj&dg-eJ#pK6b,0;d4qnbG$NpJ2qZ$Zu!X2@(&j1*9o_SL;X+4YD*?#Y#"U>\_ .n4Zaqu?]T];hd(Tq7gDQ^N;581GMk$3^G2!!!0@0hc5=XMCj'Db`_X.MrEo"U55M6$Bg5l.3H<U'cEV 4rOh>$3gP4!VcX(!<N?+"9f&;$4n=66!"qPU!DW8YG\FN@6tqP((CEU+>uu,KU\j3T_+rfT:_?p?pI(m ONmFJ\uFSf#EEF]'*\UC!oX.1!!**%qZI!'!s/M6!.k3&!.k4>!!`N,"9\o3"9\W(T)aHC^An`P9!Q=] gud\WiSL\E.gj`*o`,7"*E9,tRnORumJmOq(HcWCjdJOL!VZR+#q]5.Wmg(egt0ll\uhZ1,mX#A#m)H& jNX]V?4m>7!!Ef_8SjO_W!0,uHp8DLirBJi-"N^Zc.qHU:Dj37q#CO!,%mmSoV`4sVdq"S!!!0TDO%NM gu%5rJKY$oJcLB&JcLB&JcLB&T`>H$!WrQ83bt%c[(3jI^C@cYUQ]n"0G"<f!<E0#eGomX$PX[<<H*r8 qu6U#`IL>f"p=u.q#DN>&Krkl<c!W,q#C<[_hC`##6b54#Tu&o:0_UiYID'Sr4`cuiR5K2ED%bt&./L? !sJuJ&Op`%^XDWOs7*""2^&qG"UQ5-4[i7]NV'scg]%3Xn"sPG$O6h:m/RIo$8"kJ<bI#U^[_='$dai- )[m)^$6rMsS++0%b.XNtF+T'_>\JMQ\[hIF*P8km['d6DXfeq:\\,\n`5]p@c,[T:X,(+O0H17s!.k3& !.k39!.k3&!9jIj!<N?+$8#A1T;8LaXUD2$O*tJ',RX\U!WgaM&-j139P/a<Vm"_.e&$8n)$9L3+92Te 5$`MrTW,$8aK^n30GOWh!<WH:1g>O,X0Jn3XfVE%.(HFCEDJA/#64f,!<NN>*%Fd,Q*%m[o_.$f3X,Qa !<<WpEj"$Gd_PLW#K5lhhm[;V$g[ir!X/i<*>_J(_=6R3\#n!3eAQi**<Q?M(*l"NK:q_9$_W#N-n/2M \_koV[e6X,XK&;"VQ$T!Y,qT(&$E.AZa@3FX-dln('k'G!oX-2!.k3&!.k3&!.k3i!"/f/!sAr`=FZg6 VQ0Qp$`BJRHt,Pk$j-P4!S[VM!"oVh;LbdadE8>.><W]7&dngC!Vud@!<N<22f,JZq>B*MJ71\a*#8te "UYeX/R"=cs8ViFYcFb&r2V6/F&tFQ+;>.d!s8T.)DOouN3'gpQu>_g1b'=J"9o);*DVa[s8VGup8\V& X-6d\/d`-t#6Ou-mf4=2%iZo[AsCU>hnQ4mJ7(kk)]0(h%4+2AGal1[n>cqlLhK7E?@8R"_mHK;VAZ/+ VQ$VuZELC2WiE,#W262[TqA-UKjZnQ!sSo2!ep],!.k3&!.k3&!1Nrl!\Aqr^"3,D"NH*i-O9DHd/XFS *E9,tRnORumJmOo%527njdnsV!VZR#!>@1dI^%GXh;J4n"0Y`I"n_j&!!4KrjNX]V?4m>8!!NHF5\cn8 o]?7nF>aQe!"0?/Kr)Z>k,DH*"9J;u!XV/mnE(1[5mmYm"X[Z7T<Q&I_tV%b_8F1/_oL0WgYUlJjQ>L[ gt:0&aMD!mU]>uHJcLB&PlQC9JcP$8$NU81!t6e_I@I1@\bs2M]X4f8N+kQt$3gV7df9[V$PX[<<H*r8 qu6U#`IL>f"p=u.q>_Z=!tc\14B?3Q^@qR&kdl45('OjD!X9Ae3Cd.`GDD<PZ2D?bfAkc:\smqL6SKPh !X&Z5&Op`%^XDWOs7*""2^&qG"UQ5-4[i7]NV'scg]%3Xn"sPG$O6h:mf3Fj!!*?2-U^X)>]Z4Gnc&Or c\kL:$OR4I,?0#Zn@o@U^S6*lEcQ#1FFoVISK4;kR[BD)N.Q;)N1[JnakH([o@CUSR"&R71*[J:i;eH0 JcLB&JcLB&JcNai$NU;2!sg,?BSVkHWr/t,Y,%PJG?$C5#6Y/2gAq$L&-j139P/a<Vm"_.e&$8n)$9I2 +9irQ@"+33XK9IZXGBq3'E\=9!WriV5$W/XMNsa-WiZ-#.(6O\P&XAW)%6`Q!s/`@*%Fd,Q*%m[o_.$f 3X,Qa!<<WpEj"$Gd_PRY$*C>Jl/pm4Bf$4a!#u%B"UGl4G-Ku`e@Vj/gsj;m73)I3$Pt'N@=t6BXUCnS <[StS@>(,:Oc0!jreVMMMM?h;MO:<T`PJsaY-YslhTi?lLhog:%Kck;!Wn)VJcLB&JcLB&JcMJE$ipD3 !sp5CBS;P?VQ0Tq%B?+hNH\G\'aFjE!WW5N!"oVh;LbdadE8>.><W]7&dngC!Vud@!<N<22f#AWq#&sK Jn%"e)AN\a":#>I+[9LtZFn&n`Q,Wqr2U?tJSeI[3[baP#m:>7)DXu'B8iq-WgI^"75QJ2#Qt>:#oud' kPtSK]_&63P?^^4$4mRM!s&Gk!#u+M'HSu7Q.>p2f!MK.?q)4V((LKW,s>FVS%$<)WstVP?TBi2??V9a Lkg_>qM,!&*J/s%Ng#s9`nJ\OZ)XdqQ@`ssH\$`]81+fL"9S\)!.k3&!.k39!.k3&!9*t^$ohRS_rUdY "jj/f9cX;W!!iZI<34uH9GR["!;um(!=gepXlZ*A'*@k-#QYAW4'mZ9^t8MH"i5LS*sr&B!!r]RIcSbR JmK&kq#CR#*C+A2c1L-#_fRdFirBGe#W6=VZd\'9=<7S>!!3HmWpo-PV`Y7a!!NQD/M]4EofEsN4$5Yj 9l5oj^Wb?gj4M>UR!N@A4;.bM!.k3&!.k3&!.k3&!5njE!<E6-,=,afQ`7Fk^C.`c['6-L;(*"b#6W]\ q#C^'$PX[<<H*r8qu6U#`IL>f"p=u.q#DQ?&Krhj<G@3%pAOUAZ$&GJ!s8T*"Uu7m1.G>WEINkA^AYep akl%9eA82LFAk"3!sJl8&Op`%^XDWOs7*""2^&qG"UQ5-4[i7]NV:*g^VAP&rs/"i@P%rm"Tn)l$NU54 ,!8@g=_s,5nc&Orc\bF8$4.%G,?0#Zn@o@X_P2?e?rp3$<F0;0DA[2*BP2.#C0t@hLSqu@p&G'\`1MKl ;a2i9+VkIgL&cf*JcLB&JcLB&TE#<"!WiQD1/DV9Q`'__%'$+qM.]*q%1!+>!!(OL&-j139P/a<Vm"_. e&$8n)$9I2+9iuS@=aZ=Y,o[XV1;Js'*A48!WiTA,rS:uC3ti(U8e'm&%&pSY*F001`[/6!s/]?*#L/% FHruEht6WsI6%Q4!!*'15B<pYf@%J,XTuf/k23X^1^iXM*!$*C"VEe2T$Pa,^9,`;eAZo+*<ZEO(F2+O K:q_9%Ae\W,Sqmn;dj'>>$5#)=oDMD=BAO'@sjWVe'5h9Y//cRjhR$u<Br&O#6P#0!NH-O!.k3&!0mP9 !.k47!"/f/!X9Q";/(QFUT49n$`^(tRtkWD*t8M["4I5_$7f#(XMN<,VK?$+',2&e"9AQ"!!**%+p&02 CT-Lmr7n?)A3V+R'+>!G"U>>I-TtIHJX*4G_T'0erMq?@OFqUb:c]g9&.&ID)DY!!N3'gpQu>_g1b'=J "9o);*DVa[s8VGuoW&=_>Y6UU&.8^F!<MWh"9Sl>'IFVrOk]p9keF0K?:>nO'b(<U,s>FVS%$<)Ws>)> ="YXK4A>BN+BV]H<ENR;BmZ8^p\EX^Y,I\0?WU?5>ZX9D)$pEJ!s.?\JcLB&JcLB&JcLB&]`80E0Oh'C rT4:<_kVfJ$e57M!!iZI<34uH9GRZs!!rZ90kRTMR6qSfoDf*t$mS#LQ,_qajp';7Hr_j0!qu[$![`BW c)QA%&d%k/"Toc1C7`]Djoso0_fRdFiW';g,Z&][c/u!+*<Z':!XV/mnE'eH2[90[!W`<'pB1<p'*A@? $RSJbOflg[j2[p=<&>a0"8r4O!.k3&!.k3&!.k3D!<*!("VrXW?%JQPr4`]S]tCnWNFXja&dngB!7_&U !t,eb10&:Q_u'H5#K;3]&-`7=!Vl^=!tc\14&fmJ^@_9gfViaP&d&19!<NE2%2L?P8lfbZR(iO6&&HE? h<X=[b,KYY*sDfQ#oF7DE07o`nGiOYVe7q3((CER*]6)L;J2!]^B!$frs/"i@P%rm"Tn#j#mD>+5t=si MSJc^rr^T)9H!d8"!^clS++0%e&.r+?;<[7+sncm0erAV%59Ih/iZL&:f1VESAOFfrsR__F\+JA+;G@n "Tk\(JcLB&JcM&9JcLB&kQ(S_#6YV_2+qbCU\h/#XKJRlGYoq)%1!*c!"]AT1e_M1Pc(_:h:'5a5T'Xs !"o89+[KXlQ_ppea1\-m:b<Ca!<*!-":,GN+#6JsG))H]XSo7LY-bXIZ'ou@2]iP5!='2V.St5PXhioe p=k!V"onW(!"V;7Y1M:R_"=`6`9HFA[qRZ,lMq"f!WifI11-$Q^qmXbdG<<kImkC]!t,nj4CNl8n?!(t KN'-*'c\GJ.4H\:-Q=BY,rf7d[FWaJ[]ds=jPZtU6m<BW#6P#/!<M-ZJcLB&JcLB&JcLB&_uTc;#Qt_a 2GJ"DT;qjj$`L)*VO)O+.233s"PWqP!"oVh;LbdadE8>.><W]7&dngC!Vud@!<N<22JT/Rp\`gIJmgnc )&!>[!<WE-#SJ+(1eqhCVmaIZr2V6CU77<p@7Vpi'b1BO)_t*"N3'gpQu>_g1b'=J"9o);*DVa[s8VGu p8\V&X-6d\/d`-t#6Ou-mf4=/"U>GU:Q=62s7j[9IU,>\().2]$me&?Gal1[n>ceZF\X1q(`ajm-Q=BX ,:+ot4&LF0o`+jAZ_iOd<'rW)1FF.U$NpM5!WduTJcLB&JcLB&JcM/<!t[b\jSe3EhV65kE$+lUd/XFS *E9,tRnORumJmOp%PhY!jd&.C!V-3o";Eh3ZK;&I#MmkFYAQ$'!Vl^&!!4KrjNX]V?4m>8!!NHF5\cn8 o]?7nF>aQe!"&`A2d_]ck,2/u"8Dit#skT\joV,0"SMic!"B#M6"Z%]f&=)`80\NFTE'QDJcLB&PlQC9 JcOm4#m1VV.R%X2XhDIF^B_-8G"*l!&-gS`#m1PL+#6i8NPkYmrs-Jl6kBP*!Wi,t'*&.J+u28[BSF1k o]=DkBfZb+!r`6"!#PeK*%<sRG*'8G]",A_]"Pi=s8;62R9_9@#8mj\7W=L)dd[;:nY^"Y+VkLj#TY`a 78[QLoXt7hrr38`SR!]P"p=u-q>p3g!!NWG00;R%BSaFprr3APLeAQj#RLb[;L4i%]aDurRrMCl-kQUf #kA<2#mU\H-9FOa<GI`8o`"jtd#:jG'b:TQ!W`>[!.k3&!.k3&!.k3&!5SXB!so\b0N`anXf\c)XU2/5 UkiD;*Yf%cgAq$L&-j139P/a<Vm"\-d_^,k)$9L3'*/=`7qmsRWNrVC\=.M4.h`!b!;up,!!!-;/ONid M4UfLX8]1JXfee:_5W5p1Dg;t#SA"*:iqu)_;FnYgO2*e!!!$"%QeL&bK\/>p8eS%XNTV]f;W15$iL)) !WN6#!V?@/#qf;5Yd_3RXjPtS`.(5t"9SuH+urnVRII9aV1)2\#R:P;"pXc+r<O5F"pP5J7<Y`\e'G\1 fB(rBNDC`#!<E6%JcLB&JcLB&JcLB&SH'Q1#o+R;=F6I6W2Q_sX/`+sTn[#;*u,1e!!(OL&dg-eJ#pK6 b,0;b4qeYE$NpJ2qZ&&G!WrT:3,>P\q>T'JK4$qc(D$oV!!!$#!X&Z4&1U1`MkdYjXK/A#WVrh)P\j2I *?,Ur"r]6j(h\f/^oEc?:.6uh(^L6K"pl5@LXuM*qT\Z4$AW(]-41:l"p+f,q#U3i#6=o1#8]sih>[Ed cDuD"6lHaP$Npk^3`^<cXLdo$"-74c)Z'j>#l4fH#6k>7#7V=b11?jJs8V>pVKc<7.NKE>"pG,3!i>sL !.k3&!0mP9!.k4/!"K&WFku$9jQ>Ucio6js#0HoO"!(@Bhj[4R!V-6h!!iZ?3,Gk]P<BHG!"]/H6\s@K gYL`EiT'%2>9="C!!r]RIcSbRJmK&kq#CR"(cYf\^@^+]Wa-tVirBGe!=gVXKtlcJ<#bu7!!3?^Omq'+ JKt9X!"/uU88t<Mhka[0#m&TWJcLB&JcLB&JcLB&_#OiF$54L5=Fm3V\\,WR^Bh?FMeGU8*=;i&!;QU/ !t,eb10&:Q_u9W8rPO+P&-W.;!Vud.!<j>q5=\dgLq`EKi5_6t3"Gfe2ZWs_$PXX58S!78Q'78hPbPIr h#IEPhkOa:%h9!V&Op`%^XDWOs7*""2^&qG"U>bj2aLAWLA%AXUSG-0`P\Tn73;^;!s&E)"U58;"Te_u !"f59*]?;S<G@?*oDejic%o"0rW`Q3(dVblo:u;\$_`T#<Br/W%0Hb;#4r-0"pY;7%O=#"7ojAc`:j31 #K_`q*"WM_"9&=T!.k3&!.k3&!.k3A!"&f5%Mg9YClYHoY5GC/Y,[V,<&c3?#6=hT!"]AT1e_M1Pc(_; g<[?N4W+=s!#>S:!Wri`<.:gP\[S]WY`EHb-P?L^!rW3B!W`B6+##u]BRGf(R\QmbX/iA9e&APB9-X]C "q_gk.St5PXhioep=k!V"onW(!"1;SGa+DUo8sHIQ^*PH6Qud9!!33(r<*3)!s/Mu!#kq?!XpqrPf:ba ^TGi9d(alo*<Q?K&/cre@X[j1rfRA4>rNGr"TS])"Tef1"n`$4"9eoC5Am4;bfRQ&e`#6-J4CX_r;ibq JcLB&JcM&9JcLB&jT$/##S.^r7r4-\VlH\qX/`1uVN5h"3[PUJ!Rq)^$7f#(XMN<,VK5p(',2&d"9AQ# !!33*#YtmK7!H!6qXVn2Jmgk^'FtHO!<N<)!sAc3$QUrl?uq$aSZ0'9cH3T"Wg7L%1EmtW#mVA(9P9<c ^oEc?:.6uh(^L3I"pYl$?]hn'Umgq:#^'3/)@m;a"TnZ+!X/]0r<!$$p](Eu"pke_(Jp1Ks8Vc1X++JF )]'1s"UQ(t5ZDKINUr51N<jZ,1(jcq"U>;3#5AB#!uM1L&/?g(T_/9am_5NB>Xp(^(_6fS"9JV[!.k3& !.k3&!.k3&!4r4@&5'.Ed+dXDjQ,=-<uV4m!;-<t"!(@Bhj?qK!U]pn$Rnr*^ZCS<%IX9.!=gSXBn;_X `6d8u_eh%7!r2g&![`BWc)QA%&d%h."9]Gc2b<XA"]SGb*XVr-!"&cF5%Kr!k,))u!quZq$8;!Mr_ihH "QTOj"WfsES^-,e=<ReJq>c*IJcLB&JcLB&JcM>A$NUG?&fjD[PHM7%]_oMN\ZVEUC.Kfb!<E0$ec6Bd $PX[<<H*r8rr<#q_L=f^"Tnf,qZ%91!!aW/8PN?'NkY#NgV]:c2%9Wa!tkY;#7M1_/jicWF*W"RIZ0o0 ec,RRn?-Xh)&3bo(_K5VOh]?6s8VVeB/^tL%0QhF)^mR6=_dSV'RkUaIVVS0'a+U@!<E<0%2'*V"9J5s )?BjE,!/4c=)*`0oDejhb_Sn/#6k>8&1gCcn9b[c?qi[6+;>(`!sA`1"ni-!":>5>+Z;PT<bmc7qYpL" a+R&&%1*1>rW/tuJcLB&JcM&9JcLB&jT#\j":,GP2I(^$UoLT#rN-=)S;;)a3?S_/!S.5^#95QoAq#uB YL_=KZu.uC!r2ft!<N?u"V<\)PfChd]WJoKLgE.f%g)k8"9o&5!s/Q2'-/M\7oa)>JWQP'XK8P:h;$M\ A2+Jm"V;V&:iqu)_;FnYgO2*e!!!$"#95Wu@q90BB,"la>#IX:'a=X>!sAc2"pbM?!sAZ#!!E<(!s9&M 4E%1Rf[@R;c.C1MF[6uL!X&iB*%aKZn7Mi(4<b44"764'!tm\0R_Zq]]WfoAdDC,p)Zp!>g]2p+JcLB& JcLB&JcNUe%0?Y=%i.*0I$pY)Wi2utWX#GiL2U-T+:A)Kh>m?O&dg-eJ#pK6b,0;c4;&DC$NpJ2qZ%?5 #S7e#:kHC\qWtnqK4$h[&e50L!W<-"">pDs*\'0@=D2r>UV5XGd_)TKCg'1S,T$mp)_t*"N3'gpQu>_g 1b'=J!sA`1%3dr=EH,i1p1G"NB3@PP(_$cU"9J]1#R^qE"pFo-!!2lq*!6HX(b8[Mg&M*7]W6Qj73*9^ %0ZtL*\'':;do91$"[[Y;`Ps/"U##."98Vu"<%@E":,DJ.9rD7s8VZ*V0H98+<;=0"p>#0!.k3&!.k3& !.k3&!1*Zj"=SJ[[a=$rro=4#G<-H?quG+E#Ql)HXP]@6&cqG$#m2/;Dk+u3N&:t0!"K&<*&LQ8PdAZn bD&P,"o83+!!4KrjNX]V?4m>6!!<6("UO`.!<rV`!"&lV;0\n]k,))u!qlTo"7Za"$3Ki"n,Nds)*28p bhnsh*X&&7JcLB&JcM&9JcLB&jT#\i!sJr?0jK=(X0]@NrP&TM[&]dQ@lbA(!S.5V!t,eb10&:Q_uBZA q8%MH%g2t9!W2ou!<<o;#U`&::g8"-^@(::\r^8T$ipD3"U,&."#L,c#RV:f.5XV!@V'J)PISs7s8W&, G![Am((_'IE07o`nGiOYVe7q3((:9H#7_Ih-S[dU7L2FO6p)q;$N^D/!=&i<'H@hs"p+K!rW*!*(FML@ :0DP#^[qL*qoadh(^C3I!sf\j3UfKF5;Xi5(_I,Z!<N>n"9&?8$6M)f7osJf`;KZ8r54(T'+"jFrW1mV JcLB&JcLB&JcLB&_#OiD!sAf8-V807RA?k\XTu#)R#,cY/J.m^h>m?O&-j139P/a<Vm"_'aKK;<(BXC4 ;??q("r0IIYN=cm]</]AIoJ6H%Kcb8"pbJ<"9JW-#7M1^,:k`JA9sB2W2m#2i9fj\I6J/B":lG$:iqu) _;FnYgO2*e!!!$""V2S&2)I3Mp,3[E2Dd*=-Qj-3!s&H+"U>;>$kE^N!s/2t*!$*D"VO1K\aJ_8]WKB+ a0BSI)Zp*C":#DR+trIE#WF=U&I&:;!sAN(ncSjm%hLX.P.&'<\?FB2aKo\E(]FI8!.k3&!.k3&!.k3& !1a)u!<WH/$7AJ_MjC$6W;`h)WiDbXLN$-D&-2e3!S.5_$7f#(XMN<,VK?$)&Jc&g"9J?!'a+s^+uNYb _uKP\Yc<=_3uAP;#6P&,"!@^K"9Sc4%MK[(00MpAMm(t$j3=TnD,s7a.3&a%*&C7tB8iq-WgI^"75QJ2 #Qju-!sTAZ/cId%3#"%k)%?iS"9S]/#Rq=T$O?q>!s8T"!#u+N(*PPBPLoj3f!29-@RhL\(_$WP$5"*r -7gtF3!hN&2)Hd'&-W.;q#gEprW3l<"pk_a=e,'_s7jL/G[<`X*uPOk"9JY$!.k3&!.k39!.k3&!8[\Z &4g])`8U^X"m"%'Bg3BW!!iZI<34uB6kTOk!<)s)#W$4UZdRrl0aI"E%06e[7;%ath9_g057I\j!!r]R IcSbRJmK&k_uL/F#W67QZI7m4<#l([!"/iB1gH0bhO7+U!s-sQJcLB&JcLB&JcLB&]`8<?,"HU8U9;#> rP&WO\[8T5GXrbTrW1mVq#C[&$PX[<<H*r8rr38t^jSKY"9S]+qu@c=!Wi`a9iG24L7c6KkKpSm>;?Qe !sJl6"pG/4!s8E%/cl+l1.P8QEf%0Fkl(P]^jo'.,8q1,7W=L)dd[;:nY^"Y+VkIg!<WH/#Rh4Up(dH> !tl%J"8r3*!=9AZ-ls'1!qu^6!Wri^853#lJXO:Fs8Vo:LJ/Nh"Tnc-#7M78'aPKd%h&aK"Tnel!#,\Y 1-A'.CllU6s8Vi-I6nGK"9JUU!.k3&!.k3&!.k3=!!`TD3*^llSuV[i#ca\mMdna^!WrB&f)Q?e*&L?$ I[$b6e^DC9AiLP-q#DE:"U5AS:56d\iQJa5\=Rk8//ep!!sJr>$jd(>!;up7"9o8G.7\!'PbP4Z\(C*B o:&Df!!EcM'Ilq$Q*%m[o_.$f3X,Qa!<<0(#7CG?!"\]5'FkNY#mUS9!W`B,#71eL&ekla"TnK#*!-6I #8^*jbP1DP\uj*$_5V33)$0d=!WrQ0#n?D9#S@LO"Te`+!Wi/unc0401L,d=[^riLdEfV*@Pnf"U&]cF JcLB&PlQC9JcOa0#Qkr*?$hO!VPsHo$`KtsRu(]<'`nF;!S7;`$7f#(XMN<,VKQ3+',M8h"9JB"!s&Q< +@@bLC6m!8d^H'SK3pYS%LE=A!WrQ0"pG)2!W`<%!XB8S,=HC?d,sTBXdaf>84+sP%LO139P9<c^oEc? :.6uh(^U*B#6=l/#Rq7R&+^>H%grXH!sA]-!X9&G(DIDi$O6h;!r2j""V;_+5Sn+!cN!"?W2kP\7jB,p %Kuq;"pPAA%1i(B#nILT$jd(>!W`>i!#>V="pc>QSFQXZqo5LY?U5\T(_-ZL!S[U+!.k3&!.k3&!.k3^ !!NKP8pRf#rT4:<`2A2R$/#=O!!`TH<34uA6P8_d#ng!pXiB)WKe<So!"/uT7<>NafX6cT+pIfC#m)H& jNX]V?4m>'!8IP^%n(i;^=VME;&o`>`W->H&M@+C`nm"O('=:3JcLB&JcLB&JcLB&R/dNq))bK;Nh`nn ^AbkR]tCk^W/4h8'+FsJ"4mNN!t,eb10&:Q_u'K6rPjO_(^p]S!W`?)!sT,I)_+E`>A\tRWk[]L^79=A /-uCa%i-33.P`h/*YSne#6b2E.mQd7E/([?kl(P]^jo'.,8q13&Op`%^XDWOs7*""2^&qF!s&H*"U55> %.Xof&.f<Y"TeZ)!WiN@.m[?668g>=*uP_(%hB*['cJ5J8lo&&GD`01pAFUDZ?JVL"Tnf,!X/o>n.,a5 $OI"@!s/N#!:g+(#TPT^7osMg`;]f:q7h>E%gE.<!N#jK!.k3&!0mP9!.k40!"&fB.R[ZjO/&eYY5YO1 Y,\:_E_Iei#mLL`!"]AT1e_M1Pc(_5f$(UB59'h(!X/Z/"UYqc9Ii;@Pf_q4^pL5KO_$Hp'F4dF'-Jtb -ls*3$3p_:"pYGC,!B+QMjgQF\(C*Bo:&Df!!EcM.St5PXhioep=k!V"onW(!!39,#7:A:oEufK#RCY= !s8T+"U>GJ*%!C(1b0[c'G:l_#mptG%iH]K7i-09dI#W+[]RTcW.e8*'E\=9!WiH-#70f,!sf,6!rW/d !"]Pp>`#Sk]!SZie&8>#3"uDH!.k3&!.k3&!.k3&!5/@L!u*7S@<mj)Wi2krX/DtpTosFk-4^Ce"Q'4T !+-'`;LbdadE8>4?:,\R(_?fQ!s/K)"9f)E,s5(BNigaZ]r\*3KjQnU$OI">#SJ1.0-qPP&.8aH":,MR )`hGh_:7DpY+'o?84+sP%LO139P9<c^oEc?:.6uh(^U*B"p"c."pkYFoEmVd$4$k@!sAZ-!WrfF+"8`o 1,UU-)\W_l$jd7K%M'F*3_j4?WRg1OYc"ORA3qFZ((:<J!sAc3#RU)0#mgkC#6k>6!W`>i!#Pb?"pc>Q SFQXZqo5LX>sK;K((CBI!<<+O!.k3&!.k3&!.k39!"K2U:6F;iioK7XcF0BP)#XH^!!iZI<34uI:)O-& !"&r_D6(G!h<'/7"6fdn!YdJ#T\J,,O(ojBqZ$s'![`BWc)QA%&d#uO$O84pT!cesk*\XP!nIA@!"&`= /lmqNhNgYH!hKCD!.k3&!0mP9!.k40!#PbM-9P1MQE7a4]tV7p]t:hYQ?,SF*>&P.!!r`8'H])1E/ha- rr3JQN)Lo8%g`CA!sJl;)(A?@7pBM9L6%t4^Y?r5L1<Rs#R(bZ.lp7)BkpX1.2EL(#R(hd2F:PbL9\ka rVuo5J4hC;)A3WOE07o`nGiOYVe7q3((:9G!<WE,"U58%$69EW!s/H'!Wr]T7qdj5G\LJ\6T?VE,U+<S /NH0n&R8aQIu0Ps^[UaNaI6a%&-E"5!<NB-#k/0+#mUV:!s/K(li7_**&9WH=)<u:rr<#r^jSN["p=u. h#N$,JcLB&JcLB&JcNIa#QbGT/jWrsR]cRj$EUA0Sq13.*u5:hhZ3HP3sQ`^9P/a<VlnD$d)19',R=JR !W`B,#7D4m3_a4<UWCWp\?`6:L0,i>%0ltD,!8q6:I$TZ*#&ee#lY&Z*&UQ.J!-M+\(C*Bo:&Df!!EcM .St5PXhioep=k!V"onW(!!*0)"U,)7o`tI$"9nu2"9\W)0Eqpu*%XEWDdl[93%l[&)&F))(*YY2@XOHI e^MOMZE:jEO(Ug-&HVq5!<N?+"U=K%#7(J9!s/N)!UB^s$o;.FXgYgJYLV4HZtq`<!W<"M!.k3&!.k3& !.k3=!#>VF*\]ulJ![15W2Q_pWi;kbJ6tA\('+jJf)S\U.oLku_9pE'I:5br,TRI%"U"r1":5PP+ZrtW T!ZMj[]QI(X+t(D&do!M"V;tF?"?_o/g;/F$3UVC%hg^!J[!/Cf!(Wn<(KA.+V"i!1JA3iN3'gpQu>_g 1b'=JrW33'!WrQ/mftcT"9S]-!W`E7*\BQI<F00:8NJCK+;tt2)^$I^7U("pV7P6nZDj\$KOR1e((^fT !<N?+"9f#!#6Y56!s8W!!;6C.!X&]5+BP*'s8Vu9VKQ3.()dqt"9AP!!.k3&!.k39!.k3&!8IPa#:si> h;7,OhV6/cIkCrN!!r`J<35#R=<n(Po)K1!"sQp+`mEGtk'A3QkPtqp,Z9iZfX6cT+pIfC#m)H&jNX]V ?4m=k!!<<6"Te5q!<N]<.oq_Db1>M5OZO!Q`;g5G&M@+C`nm%Q'EZebJcLB&JcLB&JcLB&]`8<=$Pam@ >_Suark/`T^V.=n[A&@b5qO#`hZ3HP#m1PL+#6i8NPb2as'F-=?7d35%0ct@#7;+m5##*fC3uMMZFI[! ^70"<3?JJ3)([d<Ar*=`KOI(j*"r_a&0*2[;f78jalr^'s1j.X.jGrF&Op`%^XDWOs7*""2^&qF!rr?& !WiH,"SN#q"Z-;_!<E6)"q<FsKWq_]U6gLK=[kP62)$s[;cQn+B6ff:Y.)10iQA<T=>1-b!<E0$!WrSp "U"r2!s/Q'!UKe##TPT^7osMg`;]f:rP3hJ%gE.<!J1<'!.k3&!.k3&!1<fr!XK>V-:r-<Wi`A)XfhZ* "f@?!:bj6r'aWCk;?n0u9P/a<Vln;#f?T1N.LQC`!WiK/$kXUD=E0:k[)9D]ZELC*HV5:e#6Y)@1Kf<g G[jfE1F!YD$3g\;'eMj[Fbu]k\(C*Bo:&Df!!EcM'Ilq$Q*%m[o_.$f3X,Qa!<<-%!X%loqu\\U!<NN< )'qLPGaFJCEar$82(L%$-7:ZOG+,hSbKmi1Z`pR@TQs<g*=`/O!!**%!s@ro"9S`-!<Murnc0401L,d= [^riLf%SE\D`eg:U&]cFJcLB&PlQC9JcOa0(]jsT*%"<sO/AqUW2cepWiDeQE)JM;'aWCk)[\)nJ#pK6 b,9i$:GXIE(((3J"9Si<(*584J4$Khi9/RfVPU5lM./LV#m^b@)*;H#VgVl?1aj@U#71_F%4OqlTt/@q ZC?>C84+sP%LO139P9<c^oEc?:.6uh(^U*B!s&E("9&E'"nDfp!uq@C!<a,c5#Z-CM2Z^m<^]&-/0lSp 2*=QFJY9Rh`6-*"Vkp>mKjd1b&.8[E!<E6'!s@ro!s8W,!UKe%!X&]5+BP*'s8Vu9VKH'+'GqMm"9APX !.k3&!.k3&!.k3&!4Mq;'j&<-gtq,OhV6V[9buF_o`,:#*E9,uXCNsn"7uR%!=p_WIC7bai8`sA*;BL; #SdsY!Whup$3Cu1LXt+cO(ojBq>^g'-@Y%#We+Oi!pBXS!!`]U>rs/=!s/2t%KQq`6Y;Cie_8p@k(YSr _uL,F&M@+C`nm%Q'ES"0JcLB&JcLB&JcLB&R/dTq":5MM5]`L+]Y2#V^BM6NQ?c\"!@A?/!!r`8'H])1 E/ha"rr5F>SnC#2*"iJ\#n%4_3DEOWB7$&Z]Y;+pbcut-67j#Y$R%Gl8T1uoi3nAB0d[eM"Ul.j.ns`2 XNB])s8Tlb9.M5*&eGXEE07o`nGiOYVe7q3((:<C!:'Y9!!!$%"U>Z-D2u<_i7ubhS:4pJ:J+&M>?t31 C5&=m]Y;+pi6eutCe6#\qZ,p_p&OX`'F5[64@`IhOMq+ts8Kl`64X8'!Wf.uJcLB&JcM&9JcLB&i;a,a "9o/A11#g;poOahJRqD.*"1?u)[@?>9P/a<Vm";$h:@ir0b=Tp"9S`5&/QooF9\5J]tChWY5YOcSo[+, "Tnf-(.3>O_OcU9E)/A8&e,*M!YH\<:ht]OXLHgMp@FbI'EA7G)CeR*Q*%m[o_.$f3X,Qa!W<#`!WE': !t,ed/lHeTXL>I4P^?t<4Z>;Z2b\@gfCB()bI4RVriHF1OCgKu'ab*@!:0aK!"]Pp>`#Sk]!SZnhU92] 4r==R!.k3&!.k3&!.k3&!5/@A!<`W6%l.LIVQ-YpWiQ-!#H=&?AkOm#$JtjZ!$DV!;LbdadE8>AA5k`G -lWR#"U+u6'-8\oEiJ@(rnY-`WW]A]@Q+bq#Vl]1<L*%NX`d`/2CB:J#RCY>+@'P$Xhi5fRt"C.6S0Gk $61iqB8iq-WgI^"75QJ2#lXl*!WE)h!W2ur!$)4\1/;VEWOo*kHY-2N7mAdf5tb6mLo8r#f=7fZri-7) KO?kT$OHt<quH'akl;P%"9o,S=.Jg\s80g5F'1X='bUlW!<E0#JcLB&JcLB&JcLB&P5kgl5.&nqhW3hu j9<YE/dVLXd/XIT*E9-!ZZ//G#4qm!&3+0SYLEI3!p4A9q#CX&+?`FW(^C*8!!s&kHe$cVO(ojBqZ$s' ![`BWc)QA%&d$_d$3DJqgo5'O*=W,Pqu@!'&2n-YWQ!QOroF7EHmf*I!:Tsq!>-qbN5j_A8/2/s!.k3& !.k39!.k3&!9!nd!<WK3$o).KX0]=K^&>\R]s=DoG?-U=!s8T*gAi/p$PX[<<H*r6hZ!QTkI-=Y;Fir, 0f1gM86KFR@qBe?VSC(!iT.tLDF?6''*Saf2Ej]FXQf9$WIS5M7QW:a6:jjZFc*HIm/I#$^3W6r*u>M$ 7W=L)dd[;:nY^%[+VtRij8^%u!sJrC7<"=%e`Q,VbdF!tHZj@BCiO/pD%D8^Y/&$#f]2,4Son'q+9p!h #m_M,4\&RjP/R=urs-Gj6P'G)!Wh*WJcLB&JcLB&JcLB&]`8E@!sAf6-VeiPUoLTqXUD;*O*P2'.M;gc !Wh<]q#Fk/*&L?$I[$b5_qj8-XaF2./Li+m-7q):9P]E^_8*UcXfo(?[>eNK$NpP4!>\(JZ,Wc*QB?5o 82r=T-Qt96<bH`=T<,TXo_.mH9G@I0%iQooFHruEht6WsI6%Q4!!2HepAcWE$Pjm><Hjb1[_92PQ[j$_ >$>'1BSitMim5BGY->=Mb-QUs,Sggn"3UZU$o;+DXL>[GYLq^[_K7sY!W<"M!.k3&!.k3&!.k3=!"8l1 ":#5\:j&%sVQ-TnWs,MpNHer'"Y15h!s/MX!)a.S;LbdadE8DNDI6747QrLW.46Dk2a^DUNk4o`jN=a- V4Nm0E`"=o"pP;=,[$]:s36R>;c#qE/Lr>#-pqEpVn:*tYFB`26olS4%1+"09FPQmXMCj'Db`_X.MrHj !WW8^!%A'j1JhnLYJdK3Klgm6?<^B1?u'k<R^:f!]<%j/URmg1D,N/%#mUP6g&UgH('4UC#U!3=nc/Xc `hmf[4V8DA$NpJ2U]>uHJcLB&PlQC9JcOL)"WM0D[*IP,joj.o:*Kqi!"/lL<35,rO^C*g$3Bo%!W``` $XAIb_V+#(`NPUe#5J6)"X-3<=>q30"8Mp)!X^5OPhFWkKNoAsq>^g'-@Y%#We+Oi!ndPf!\/`^`faan .N8m$!sJl5&27CKWsQVjhrW\Da1G+]_Z1#F&MI4Ga531S'`lhbJcLB&JcLB&JcLB&]Dr<@!sJrY:3Mr" YdhCF^C.`aXeLnr7jA6B!s7K_q#D*2$PX[<<H*r6dd-r5o$=J%LOXMerbaE,Ed2_HG_VQg^t@f3hm8#= 0d.>A":HD45"K(IjnmuQVN-@YF_ku8E,9]MQak?3rr3eHG<d>k'bCsHE07o`nGiOYW+e7:(_$W9!;?IB !<WK2&k-c#^<5<pkh*n`V4O!7MMQn.EJ9IGZbb#Prr;&cKNLJj(Bqt^#m_P.5"SmpP/R=urs-Gj6P0M+ !s*uRJcLB&JcLB&JcM/<$N^D5"s,s9JWcY*XSf1'Vjrco>6Qu*"U"o/gAi].*&L?$I[$b5\]rpf_46!d ?sQr:=^GNJE.jR^^UptVXgGO=So[IK#6Xr,,S`XfXMqH4U9'Q0F_G5j=]JjGG(GaEVl[Pip@e*I9,%@/ %iZ$/:iqu)_;FnYgO2*e!!!&[!%A!X(*PA3GF#><]XkYRR?)oJH?aXcS$^_j_76bQ\Ba!oY&HW@$O6e9 g&U[D&.C<uLT@elZ`i$<d_^)i(]g?2JcLB&JcM&9JcLB&huF,d"9\oN5[o8*S#3._Wsbr'R>cDr3ZJ;+ "9R<X)[\)nJ#pK6b,LnbDI[6g@pE5A=]o$AEI3YBa%,OTcF^3WRYQ-%=$7Z1"U52<,[-i>s6H\9ChmZk >?kE=>&f:i]ZA:7Wg[ct5qsAp$4.\.9P9<c^oEc?:.6uh(^U9G!Wh?^)$Ls8:i)5s`2fSpKm@icFE;SU M3=I1\]hSpXf&%qS;(fc<C8/E#mCD4cN"^^"9o,S=.Jg\s8'a4F'1X<'bUlW!<LpTJcLB&JcLB&JcLB& [K$I8/m*_4h#6@=gT>Tj+p6X$o`-0<*E9-#c`rLG8MV7m"pG,2!sJr>)E;&[X2!*=ikLFY3tM)d*!IEL @s)9P2^K1G#6b22#o"U?<.M=1d\q:^&-D\.#m)H&jNX]V?4m>'!:g+2!\/`^e$P-O=@bD$-RgPt4CF&L _pI,rj3b9"F"%@3!"&c?0NjIWhO$hK!Vl_I!.k3&!.k3&!.k3<!"/f0!sBW+>^Vd3Zb?=P"hhLTYbZmT =tL-h"U!KZ8-956+#6i8NPNQ_iUQEl`jW+OUnF9JR?j)"N/NjiXL>q)jP%eJCdB'R$O6_@+uVYW?$sfh l.!SVY,J(cR?W\dNL?ZUdJ*Y?#.eh<*#B7u&.qBNOh]?6s8VYgC-!UX%Kthm*WZ?H#SKRFO1rKVgZ.&9 `4NC[WM6#OO-#d+YdhO,rr35YUMN.H*=r>,!:g*r#Tbif8m6.r`;T]8#K)$Z&dJRB!N#jK!.k3&!0mP9 !.k4/!"/i1!sBAl8nWX9UoaKr$EL%qOD[T6#R1D6gAi/t*&L?$I[$b5Ye.p&aKqM$NfAmNM27(LOdi4; Z+.0DXff48Q?uUf(^'j@!Wa!#E2LI^WMI,.U7%1+N/<:IO-H$)V5^T3k4\K=RnFFq"V2P%:iqu)_;FnY gO2'd!!!&[!#YkH(*PA3GF#>5[^s,YYG@eYR$X#)W4B^T&%8dIY/]D_jIfm4#Qb)0!QtHS$o2%BWjB1@ YLq^[_K7pW!SII)!.k3&!.k3&!.k3`!"/i1!sBAm9kSp9TW7sk$`BnsRu_GY,7+SX"60CW!+Q?d;Lbda dE8J`RuVrIJV/Z0KnbA>Od;Q:[`Hk3\?Dp1NHJT!4"(aF!sJo8-!R&Bs8LK<KS>/7KS5,:LmFmFaj%c6 WL.-c4<tON#mhP,9P9<c^oEc?:.6uh(^U9G!Wh]hpAcWG)`(<,OKZU'VOs38NfB0^Pa\5DY-PLBW2HJj W/t^s:-C<R$O6e:!m^i`!X&]5+BP*'s8Vo7VK5m'&JYod"9AN'!.k3&!.k3&!.k3&!0I6a$S#5Dg\p7< h8ZCH;A.@W+p/ibXQA6^]rI*:@nfH^5s@P'9N,GOTY&Fugu7._==FXZp])9;*C"+sToFA6>>7[X69S"K DL@bWd,30CC-W(+qZ$s'![`BWc)QA%&d$_d*WdgAjkS.oWg\irF)Z/AG(cO$cI^k0j5[n9?TAVte,\t< $3Ckr>*-e]Qq.qmScF?BJcLB&PlQC9JcO[.rW*6:.77?gRBF7$^C%Zf]<di?3"ZQ)"PWnq!t,eb10&:Q ^VRe*`P]X5`5BC)]t:kc[C3NQ)Rd)b]=u/EhT2mO<A"U\!s/K2+Z;PU=`BqNrl,Gd_8*ds\@/]I[^iua dej%D(Ue0?(DIGk&Op`%^XDWOs73.)4!bdT"QTOk!<WK2&k-c#^;.P$_Z%=W_8!as\[]8^\@;[Q]Y;;P rr35OO&dVE&-r?\!!rrQ2F0u?E0J6=rr35AImk"V"Tne]!.k3&!.k3&!.k3&!4r4<!<E62+#HT'KV#@F XUD;6Y,nFN==ame"pErdq#Ca,*&L?$I[$b4Y-.],%'Qh:XKSb,XKAM(WiZ3%(9FXDRs%Xd+:\JT!W`98 5Ad+0_S3.Tric[3XKJY)XK/A(ri@*A_<gmfnX</e!!EfO.St5PXhioep=k!U"TSN'm/Zk\#QkGM+YZo? QE:(g!3c@(#-=o,WN3,&riZ^4Xfp4:j4f\k*ruB@!QtHS$o2"@WO'%=YLq^[_K7pW!W<"M!.k3&!.k3& !.k3;!"&`-!Y6D39k]-IWr8t%W2Q_pTR[2J/I`!j"PWne$7f#(XMN<,X/W"nUSO``rhg%$VQ$YuXfnk- rMgF0VhSbQ-6*[*!WiK/#UN`Mrr4&.]VVF$VPgDkWN3,(Z*(1-WiDFh75bqh#mU_T1JA?mN3'gpQu>_g 1b0FM!s/N)j8^S3)`(<,OKZU'WMcViVPgAkWiE/'Xf87sW2ZesVLMlF2'j=X#R(>4f`:^G('4UC#U!3= nc/Xa`MR]Z4V8DA$NpM3U]>uHJcLB&PlQC9JcOF'!t7&4e,AD5inMr&Q7rBg!#G_X<356Bi8<AFf[J*f b/q`HbKS8\g"ZkiiSrq[hLRHjp&H$6)a7o(c.gn&dETkWaiM]Qf%A^4i8i.K?8Mi]!!r]RIcSbRJmK&k f`2]f.Y-X@hqm/DgY1<2f%8R-gYLfJ#it+/hlUQL&HflM$3Cnt>ER"`Qq.qmeGt1$JcLB&JcLB&JcN:\ #7MV+6YD=R\c0;B^](nO\Y=OM-lip+irJlT#6P>J+#6i8NUX[o^r+.4bgt=mccs(sKjm7h"T8<.$61f_ 7p'G\Z*q3VpqHsJ_TC7!rr3hhQ!#[O&.K$Z7W=F'eFW_?o;HCb,T.'pmJut]$NU;3"qEk0Kr(cU](E`K ^q\%;g$eIuiMUQZ)%HrV!QtHK#Tbih93cJ#`;]cBqn[bM&dJRB!O;\5!<`W8$k!CJ"pG)1h#N$,JcLB& b5_eK"UY_Q%LN@@rW0q;JcM#8#7)(j1fSU\WqiatWf@6s5TU[M#29+_#95QoAq#uBn?!8)Z*UmN_nNOY QZuRe+VP.`r;[3;2I;6=YdUm@XK8T!XU_P@]A<#Jn&0B3&-2qG)\4DoFI'&Giq<$$IQ.N3!!2*[$N^VJ *@jm'OK,:^XRiP$Y-P=C`ko6^AiCFS!:g+$$nte7V67,0YLhCLZtq`<!NlD(!X&]+#R(G;"9\f.JcLB& JcM\K$N^G9$4[CJ"9JW*!W)kK!.k4+!#GqW,rSbFOJf%TW2ckrVlHYRBgNmW%0kPe#7;tZJ#pK6b4)G5 Whc:.S=>e.P*'fb3#E58"p+i."U?2HMpqY)o[9kAWMoTm+K2*1S9S:+*<ZWR"UH#$94j*^^oE`99LLT_ (^U9G!Wh?^$j@J"7ppqC\[T#LW2fNk!3$I*URmNc<B(p;'b(<L!WgRH('4UB#U!0=nc/Xc`MR`]4;8SG $NpJ2gAoe)$N^G7#RLbA"p>&2!kA;_!.k3&!:Kmq!X&`8%giOE!WiB'TE'QDZiCR;)d'Z*h;75RhVHqs 8dsPVo`,'r*E9-0jpU;/h:^5s\u^uZ&cq\+#ltSe:k-%/gtq&cjp0i"e]O7X+p@Z@#m)H%jNFEI=UkJr !:g*p!?,:cdb<R=p#ZP?gX!^5@keMr_#OfD&i!LKaPN1O&cqe.JcLB&JcLB&JcLB&PQ2:%'-Jl'H(2+M ]Y2%o^:h4kW<SH'8M_M"!SdY[!t,eb10&:Qn@oOOaOK2<o\Rd'ViPn&67`iRr;[30'dkh*=D3,KTrbg" ^CS35jm)0kd_;,`66H[E$47=T6ue@(fD#=Fo;?:^+r:[jj8]Sh!WrT510JgVOe8bgotM'RcILFja1JC@ EDA/!#mLJ4g&U[D'F5a:5YPI'PJmJ#s7F$S6P'G)!WfS,$NgbN*[;aF'bUo\"G-W*!.k3K!"/l<)_!Zn )\)uQ!Wi/uJcLB&g].Wb%Mg9RAV[%\Y5>=,X-\0;3[bgP!SdY[#95QoAq#uBn>ubr[_`L#hr2AHMfD`W *u#(f!rW*+%Ot%dKp&"*Y-"l$XWOdZ^Ve%,Z^uD8.1?4]&/m#oF-NfHk4\N)I5qK3!!2*[$N^PD(F)7V J=WI7XRrUpXp_M>WhGc5EF(dQ$j"BK&.:'gI%@7@Z*2[)^8,0n'*6bdec6'[#S.Xf().;h#mLOC!.k3& !.k4>!"/l8'd"qJ'ab'G!Wo"pJcN:\(^CQf,=,ppT;S]hW2cepVl,f*>WaDP$3B2fq#CX,.oLku_9pEp X!"7/Q\]d(EH5u"67<BR#Qk,/!X&ZE5A[.:d+H^Z\?W"-X!"4*NIYb=1(jfr"TnuJ0h>i2WP>I!@S/p8 +r(@c!WiDj!;?I%";<.D;/_Pt`Q,WsWqED'Vk9$&G$[Zo)&<_h"Te]*c2\[_!sJoP=.Sp^s89p7F^$sD )\iba!<E0#Z2b78#S.^i(DIGj#mLOg!.k3&!.k3o!"/l8'd,%M'ab'G!Wp:?JcLi3$jenU`6d8tjPetO `af)o"4I5P"!(@BnE():fuq%,I:Gl'%fu;&#Qk_p=cL#7f%p,`#M[1tMcV85!Vl^&!!+EnjN!s8:'q$S !!WfhL8)B4iq;F=hSYe$:+$MRd/`Y9$3:\h;i8WPO[9Z]ScF?BJcLB&PlQC9JcOR+(^19Z(cl;iWjK=L ]t_=r]tCSALi,sA'`m(i#6P>J+#6i8NUX[a`7!cWp]'s7Z^H5N82DM.$j-A-$O..^.6LOAG(l!L[eRTF b2r$WftO/1@7Dg`rWa#A%mt;u^Y&A^s7E1$2BWbD"60@h!<N</.8+5pJWHM:otLLB&(AqH\>"k"=[Oh^ #mCD4!QtHW#95Nb93u\'`;T`7m^mj4%g<%:!Smb,!"/rC,;MA</LMYU%0j?CJcLB&JcP6>$j7A"87+h> )$^<I!WetpJcN:\(^(*R&hR(/RA?jcXf\b.Xfe7RE`kRO&-:hlq#CX)*&L?$I[$c"XUqeSe`QV_XFanS 1a*>9"p4r*!"0/V2c+.4MO^TEXK;3!+18u(^T!<:=?n;O#6G)@)CJ@&Pc`!jp@d?k2[06^!UTm]!"/i4 $PF@9<H=.gU9!pg%'Hn5Q\0'Q5V*rg#6DjF&.C*eG*\r)XffmgZ]\??&HVh1Z2b78%2gNG.O,oK&.&Kq !.k3&!.k3o!"8uB,WSRX,SUCb!s/MB!.k38!"8u9%21?oH'Y/$Wi2utVu`of#)R>'5UI'Dg].Qd.oLku _9pEpX!"1)JRVV^<Dc@M-Pd!m!s8Q)!WiH:/l?k^X1?0i_n3#FWt1n]G\UAJ.M)ad!s8]E/k?O^L8Ved P[6mF,TRR(!s/N)j8]Sk&03>f?%&<W_T06eorAS"P(.7M8iS%,$OHq<!<LgQp&Gj0!sJlN<hAp_s8L-: H<r]Q*u>=g!<KD)$NptY-nm(p*Z#Cp"G-W*!.k3K!"8uB,s+j_,npLc!s/N$!.k3&!7q2]![)<W^!PWu io/b@KL-IWe,TRQ*E9-0joXGb[frIL5pm<LnGids(,f]fYK,Aljp';5G>]q#!VZR#!@3$Q`gpm8#6EHW "p,];ELOo*p#Z80"f#Td(C'uT!!s)_:PQgDN^+0WeGt1$JcLB&JcLB&JcN:\$N^D6"sm,rU9M&:^&>\O ]sXl3N+kU"!TX7V!!`T6'H])1E/jA%&B3Gus8VK#P\sD\,7Y%b!s/?#$NpeL)D4WhDg6o#XSBOQea2Y` a.IHM3%,XP!sAc3%RY2t^Y8Sbs7<'t1EI8="7?0^!"&`."<BL#@WR3k]CioL_pc`9SU+I',T@C)!s/K( aoE+\)_jNM?Z_ROr;ZTW\U-RN"9S]+Z2b7<)_jod9gUcj+VP1<!.k3&!.k3o!"9#U6tq?e73r9F"9S\D !.k38!"/i1"9]Z0Boej_X/u6$!2]sgM0;lU'`m(i#6u5*9P/a<Vspf"ZchJ&p=#122^K:M"9S`,!W<!+ #8SUE8n3+-TW"uqpoP(>`4`@4AjRdY%0cn:#8%ga-Ve]IXi]r'p"t6X"onW(irBGg"UGPO/4X2tN1-X9 XUMG9R=&=0/K+lu"9S\U!:g+$$S+qkOJ&MOY/n>RJP7F%!NlD1"r/LH7QiRY,8^mpJcLB&JcM\K$j7G* <Gteo)[?KK!s/<"JcLB&g].<UrWEoU6YVOLU8OrjX/`1uU6^RW=#:]og].Qd.oLku_9pEpWrerUAI)"' 4uY);(_?uP!s/N(!<*!,$m@W2Di(0q`Q5`tpo>O*IVMqQ1EHi)!W`?*(bJ0aL8MV`P$(::*#T:m!s8T* j8]Sj$l0s=959Ei]>_RborA(h$]8h$4=qWd"U"o0!QtHJ!<NB.*ESm)rr3>JV0cQ6+<qa6"9I3Vec6'^ 'dl+65;Xo9)%Qt_!.k3&!.k4>!"8uK2HOfr2]W/,"9S[u!.k3V!"TN5KW)oGk2tacgSepQ)Znsuo`,'r *E9-0jp'YYUO>rV#OVQr"<0[IPI]9>jorbZ:b3(Wp&G@!,C8FhQ=W8`k5auO"U?;EGdQB$joj=g4;.e/ !!s#X97Xq9N'.aRq#H!HJcLB&JcNjl!Wiu9^&W`bOoPdh!>n+=OJK%g^&>\H]t"KVX.=Z;.L-+Z!Wh3Z &d&LU+#6i8NPNHPcILUsaLepiqm?jMi:Hp:^m&\23@#1;q#Cd("q2(d3DsF0JWZW'[/IED`Q?*2TQjBl +;YLk!<E9+&.:L1N3q7.rr0uo;_8k!#m9)c#m1nk5Z)0COfktg[/@6@['[9R\>bX7=?Ro<#mLJ4ec>7@ 'F#=%3Cd=oMSJ!+g<Z='2[TWg!<KJ+$OS(@>A7>=6oHD/$\AA1!.k3K!"9&\;1+dW;Cr:^"Tnf'!.k3& !87DZ!<Efg=F6.$Vl]fu$`]thMJ,@""U"o/!T3qk#95QoAq#uBY-5+=]Y1_SU7nBXr2'P'dH1`'i1XmL *>Akbp]([*%N$EI942puOI2a:U^<ulQ%NX8-P$=^rW3W8%2L*Q@tg`$jn&/MAM+,drW2'[%06S8#Rqn7 :1SL$PbFrQV#7(lVkg2d#*X@=5:RHUr;jn<&.0XI??_'^Q)1+7G?d*J$Neu]ec6'_))"Q]8j>0`*"`Ie !.k3&!.k4>!"8uP6"bj^5pHX="9S[u!.k3Z!"&`-'/Wg;O.)lEWrB%-W26/PLhK4""U"r0!U'OZ!##\i ;LbdadE8JdU7Rg?R%9qHTqqU\$]]118iA7I(_$fV"S_s)#8S^K:M,!;USjucpn8[`F'D0n-56Xb!<N9) '.#\:DMt-\F]h!Y(_mJarW;HepAbU'#S7gt3`9jTRA?^WrLs.`%A0>cPBgCu,odO(!WiDE!#5M9!sKQ7 KZO,hm`_/E>!O;S((:9GrW'5($O7P'934hR2Com]#i,K4!.k3&!6Y?N"<^'EJn@Cq#mCG6!Q>%j!0.$` ![LZhXkMk8joO>S"-[Fb%+P=f"!(@BjknhAbJLipW2?KiW!/Q-8hC\\li71m(cG*%M>3tOF[m\e!qlU# !!!KrTQNaI#Q`HU"U?#.A=9=oVu3ItVl-AG5nsIG!:Kmn";<@aI[*bS#c.M$!r;nK!.k3&!2KSr$T/7` !.k3&!8.>X!>7+aFcE*!]`#SR]tCk\Wf:^V((U`U!T3qs!t,eb10&:Q_9V3As7FdJSsl"2PEV8sQ^F>; #c*r=@S8U,)%63>$N^J;$l(-O:0q^]LAmD:Pl?pkQ^*\jIqhhA,Sq!u!rr?'!s^5ID31*VUSWHD3ZeqA "p3]_%0@"Z/3?[<GDhNFPE_=1P67&7QBM]2G%+92.MrEq"9JVE!##MH*%EsC@X40+SXYj[81"NB!Wh'V ec6'b,su3`Am%_h.N/`+!.k3&!.k4>!"9&`>D8f(>VQZo"p4n"!.k3Y!!rZ8-:)$aNM!AVrN-I1W1fW( <A5!m#6Y+l!;QU?#95QoAq#uBY-uL*hSc4KH?jgcJ:W<(JV/i=ObI42-PHmn"8Dj(":5SU,;DMa@VKe, r-oi<It)okD.$:,//SZq!WiB("UPYS/4ErnK8YkVC-`pDr;l<dpAcH>!X&]6(*te,;IF<dI=-HmIt3'# Jq/B$H"Bi7.2rg&!<E0$`W-PS(b@sP?"Iu#CKa7d+VG"]r;a,'$O7V-;-m0k4"h]j#i,K4!.k3&!6Y?N "=$KVO)@N:#mLM7!Q>%j!0I6k!=pME@<d^#Wi2qtX/N$*V4Nrs="t9o#Qt4e!$hn%;LbdadE8G[MK<EL FaJOcIsuirI=6K_?;*C3,8q.#"p4u&!"/r@)CRI1;IOHaG^9::rdOio#A[I52CBCP"T8?'":Z:u%lQs` DL#Y^1E7,>#R(82!TO.g!X9#E(a_14>\J&"I/8:#Isl`kH#HkT/K#00"o\PP!;6C,!<N<)&MdC?URma+ F^.Hm*Yo4k!j2M2#TYg%?W9TZ0H_&9JcLB&JcM\K$j7eJE/ea.-OC"\!s/<"JcLB&eGp*a+%V11ioK1_ hTN*`B-.3+!"]5Q<35-/\!VAI:d$9V-n6bH/-@CL)@uoS!pK[e"Uc"cr[Igrr[@pe$NgG#!!NWP)%?`M df9p[#8&1--RgMp.k</%.OZYa!=&Y9!!WK/%iZT""4I7u!!*9*ZN,RWJcLB&li7)&9bNlpJcN.X#Rhq= ;K@r"\\A$W$ba0^Z^lD>-l`j+!pBX[!!r`8'H])1E/h]krr3;i]p*AE@pr_O@/aRA?s[&:75ue?((UWE !&XcZ"U5AM+Y5T=8lT)%?=$uH?t!PN=&)4I/g1r=#mCA1!<E6*(+MUP='&F&6o#nt$3gS5mJuhY$ipSD (a1Im8QAqu?!d>6$X?Iq3%cBm%g<%:!QG*R!soMU+YPuO='/L(<'MiJ"9JT)!3uS4$n+Y_HuNIj67s8e h#N$,JcLB&b5_qU0k69FNFXpX$3gS5`;kJiO8o^r)(e-\I@$t9Y-"h/X9u)0UkiSI*u,4h!oO%n#95Qo Aq#uBY/K,Pfrfj67R]j@:f@9i$W'Sl8jbBZ'ab-K"8Dj*!sJu@'HADO2EaAt:/:^]#u"#^4#AK4(C^TI !WrH+"U>DD)(%417n6*A3$St5!TF)(!<N?+"Ul(c-ndMC7nQEI9MJ;Z;G^.`91Cll+VbLn!s&B&e,]%> &-NF[,qq/;5t*de,8q+""Tbb+$O@h7=D(i55Vs]$#_E&.!.k3K!"9#X:jJFQ;(E"Z"9S]&!.k3&!8%8g #oYEa?[J$6W2Q_sW2choTS@&F+;G=j!oO%m$7f#(XMN<,W/tk';,1"f:f'qa;#X5m9h7B"#U:6%%giLC "9\E!$NpbH(*+YO2*=/p9DhO09he;T5rL/6'b(?L!W`<%!XB5P+"8s-7li4D&e#'M!s/K(irBqt"9o/B (*4kZ3^6)-:/+M[:/Fba:eaPP5R9(j(CpiW"9APE!#,G7!Wi]K0hGDE:eO58.30!0#Qt4^!7h,X#p;<3 B3\8"1aEhC\H%3]JcLB&mf3b"-;o)RG>g%"#6Y/1T`BZEYQ,.;-=XdLioK7]gW?mi3sssIo`,C&*E9-# ^Pc;R+VY+]RfJ$?Y5eV*$Nnu\JcLB&JcNjl![;>"^&W`bO8oRm'I,>1I\F9b^AbkI]aDHd];U[#4";0X "5j.c!t,eb10&:Q_X[X*(Y5-g2(^=,,palc-n$De+<D@6%grUG!r)a@!<E6'"U>AE&JZ3++sS?Z,pjug .OQ>Y(_dJg"p>#0!<<*#!<iN0%29d%rYl(X&ISaE!W`>[!"/f0"pYJG&f2K.+X6k2s!7Ri#UCH.'FtQW "TnZ(eH#.?#6=o1"ptkS)#bK[*?>k)#6Fo,YQ,%>.o:ABGA(,L1*@$X!.k3&!2ff*#W?IbZ'K2g&IJ^E !W2qL!.k4'!"&o@)(%X`N2Wk\Y5YO1XKAUjG#L"9'aY!#!#5_Y1e_M1Pc(\1hV$26=u$d(()e;=rZD7` *#T"t'+YET!sAZ,p](d)!sAc2#R_(R'c7i0*$"nr'cIu,'bLr_#Qt51!WiB&!WiK-#Rh:D'aGKi&ISaD !!2$Y(]aX=!X/c7$P!da(`=52)]Tk?+<V[E)Ai\l%g`IE!s/M@!"]28#Rh1S&el&m%13=D!s8SW!7h,X #Tu?>Ddl[93%#IJ\H%3]JcLB&mf3b#.Th:qJ64E5#6Y,0T`BZEZiC=8%iQc_Bo8bdW"#c,W2Q_qPBBhX +;G1bkQ(DY,RQ&"J#pK6b,9bu9JA"L-m'NR+!;XG*#fb0&ISmL"Tni.!s//s$j$P8#7:hK&J>fp)]\br $QL*(((gu^"p>&1!WE'2!<`Q1$4ROZ'bUr^#6Y,2!WhTepAc37!WrQ."pteM&eu6%*?6%>*ZcCG*ZGq2 &e56R"TAMA!"o;5":5VT)]9G-'G(ZY"U"r1!W<#(!"0)W6"+\A<_5>#(CAmtJcLB&JcNso$jJ4aJXq9m 0F\9j"9HIAJcL]/#Rj2+hVmJTjPC'qgW<hB!nRDY"!(@Bi2L*7$3\!AJcL]/!sTAC!rN%M!.k3&!2TYu !\oWb!qlVG!.k4'!"/r<&fWlIQ*J!8]tXH[$GE[4H<!*V'*A79iW'8e$PX[<<H*r8qu6U*`e6r$%LWRJ #7(VC#mLP9!s/N)!UKdg!<E6(rWNT4"pYD?$4$e;!P/74!<WN""p+r1!JLO)!"02f;g=.HDHodj+Uts^ JcLB&JcP6>$jek3S[=l+58">/"9G1rJcN.X#m:MC'eNO<TWYBmXU1VRAOJ0m%Kc_4l2^V['F,U79P/a< Vm"_.e&$5l(B=I;!sec1!sSl1!U'Lb!<WK'"oST%!rrAL!:Bgh!<N<)r<*K3"pYG@"p>&2!WiD%!3uS4 #pVfIFD"`K4";'Rh#N$,JcLB&b5_qT.pRn+L0ZMC#R(>3`;kJiO8o^m#S.Y&=FQg@Wi)erWsl&0W18KP 75,eo"9AP_!#Q%n;LbdadE8>.><W]9'b:QT"pY>;"pP81!rrDd!!30'"8W-)!sA`/!s/Mr!6P9R!WrN- "U"u3"U5/9"p4o-!!17CNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k4"!!WKT N6p>8iVhm@hM3urf)Q'Y*E9,tRnORunc47AJcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!42_6!sf;J /Qm_$ZFIN[rP&`R[%re->!!c0!W`>f!;QU$!t,eb10&:Q_u'H5#0)9d((1HRrWW9*!sJf/!r`5d!!iT, !WrN-"9eu."p5#3!Wg[Kl2Une!s8]%"Tnl0!Wf8#Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA* EBb'D#6Y(H!.k34!"B#7#n8+LD31NkXK8P+riHO'OaCP./enKj!Wh<]'*fL69P/a<Vm"_.e&$5m(]aU< "9&K'"9JZ-!pBUc!<NB#"T&9%!WhroaoMGBrrW0%rWN3("p>&2!s/N)blEb($OJ%F@ru?d8inL>$%`// !.k3K!"9&^>_o21>qlco"U"l(!.k3&!8%8Z"9o/C,=ud5T;AKbrMp=)ToXM08M:k_!WiD_!"oVh;Lbda dE8>.><W]8'Fk<N#5n]&!rrAc!!<6'!sAB&r<!'%!PSO<!<N?*"9\o)"9JZ,!<<.Q!7h,X#p_rNFD"cO 4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEXoJV;:m%s%h#6@<hOmpq#NPmX!!iZI<34uH9GRYq !.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLl4%0Hb>$R/&ZP,,:i]YD2k^V@LnYG7A*:+-GO!s&G` !!r`8'H])1E/hd4rr32BJk$L^#6t/0rWE9)!Wr?%l2Ukd!<W0$#6Y/5"U"l-!VHH4!<3)n!s/N)!R1V) !"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcOF'$3LD8#T5R*I?C,!qlL7+Sr\D0 4s("3!s/Ma!##SW1e_M1Pc(_:h:'5a5SsM%!<W-$!<WB'!TsI_!qufr!k\O5!WE0#"8`3&!s8T+!WiCV !7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEZiCI9"9o,L3a@#mR\Qn]Wskr) RuMl*5Tg:7!s/Mi!;QU-$7f#(XMN<,VK?$+',2,i"pG,."T8E(!WiDc!<3,t!rrK&!s&H(ciEJ6!!3'# qZ@!)"9S`-!Moe%!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLZ.#6Q;SI&bc[ jp1&2iOOG5.gFZ,#Ql)HXP]L@('2#IJcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k4'!"/f0!sKDr >'uU1Z+KqK$bX!RX,UUG$j?_7!TX4e!t,eb10&:Q_u'H5#f_Ea'*e[C!Wi6$rrN*"kQ(G[quZm!\,c1& rrIcQec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3X!"&c0!sB/b88!I8T_to# Y-+^qR!;FW#Qt52!UKg^!##SW1e_M1Pc(_:h:'5a5T'S&!!2otrrM9_rrMfprrLIHli?tbpB(<pVuX+' $OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!0@0i!WrQ.&1L1`IZL&!X/c`2X/N%p S<\:r.1$+[!Wh?^'+-6fJ#pK6b,08b4qeVC$O$S6"8`0"!TjC^!VZZq!V6<5!<*#n!ri;C!0.$e#p_rN FD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB&d/X:W.o_JLrT4:CcEE+>*n^N!"!(@Bhj[:T !V-5B!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcN"T#7MqH@t0iF\bs2M]tCncSTdF8$3gS5li?h] #m1PL+#6i8NPkYmrs-Mn6kBP*!WennJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI !Q>%j!/pma#TPZtBnDbQY-%]*$`pM2Wet7B%gN4>!os=m#95QoAq#uBYLhUZ_KJ0^!l"_e!0.$e#pVfI FD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&e,U<l*]?o1JX313WiE,"W2cbmLgi7Q#6Y/2 j8]f".oLku_9pE&FB^pB'G:cV!<MrqJcLB&ec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq "U"k"!.k3P!"KGmCq\ihjQ>OYd)<:W#Nc$Z!!iZI<34uH9GRYq!.k3S!!<NG$No#]JcLB&JcNmm"9^fa 2[$kqJcL`0#mqY,7qRIK[(X-_]t_=q]tCnQKj6;R'FP$(!!r`8'H])1E/hd4rr35BJ4'qQ"9JVA!.k32 !"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcO:#(^Cd&3)aaTV6-i$Y-"h-Y,[\( 8gG/_#Qs,f&-j139P/a<Vm"_.e&$8n)$9L3JcLB&ec6'a,=>s_B3@hg.MrK&!.k3&!.k4>!"9&^>_o21 >qlco"U"k"!.k3T!!ifE-9>+FMkR0MW!o])WiDtYE(qYq%gW:(!;QU-$7f#(XMN<,VK?$+',2&e"9AOo !.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLT,"TfH1S_Mp*hW!VQgWm`@ (>8`o"!(@Bhj[:T!P8>`!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EJcO:##R1na/kL)LYIjeI!5JKG #Ha;8:GsI2"QTOh!t,eb10&:Q_u'H5#K;3]&-`7=!VueJ!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6> $jek3S[=l+58">/"9G1rJcN"T#m:\Q,<B.]Suo0oXU;/2Y+1#M4t@Q]"RH-a!"]AT1e_M1Pc(_:h:'5a 5T'Wm!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcL`0#m:\R,WoF`R]3:s W2QbqW2ckcIptYo*"N25!"oVh;LbdadE8>.><W]7&dngC!Pnbf!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K $jS=hL7s9,1(=Km"9JE#JcLB&cN"FZ/:>RggYV)LgtU;#/-ai/#Ql)HXP]L@('3t+JcLB&df9IV)@HYS !.k3&!.k4<!!EEdV`+aJ!.k3T!#PeF&/Hm'Lo@hq]Y2(p^:h4dU5X%g2B2qf!;QU$!t,eb10&:Q_u'H5 #K;3]&-`7=!M9@D!3uS4$nbJ'M0s2G8i.\#h#N$,JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiMuX.d#7D+g 8og5tXT#=%Y5YO.UlT\'5UmKOj8]_r*&L?$I[$b6fA4omG!HoH^AricNW9Fn,=>s_B3@hg.MrJD!.k3& !2ff*"tNr7UkW/0%1!+?!W2qL!.k4#!"8u8$kXaZEKd8uWi)osW!K;oNHJJm.hr3J!"oVh;LbdadE8>. ><W]7&dngC!VcYH!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcMeN%MrN] a4B)/io/bMQ;&;#kQ(8U#Ql)HXP]L@('0a%JcMtS!sokR"5!U*!.k3&!6G3D"?WM?"MXqg!/pma!<WE- (.NPB[($.L^&5VM\?2<YCe#fYj8]Jg$PX[<<H*r8qu6U#`dgGh"p=u._Z58gNW9Fq/lR"OHu<1]1a*<[ !.k3&!2ff*#rcgo[$u&"&dnpI!W2qL!.k4#!"&`/!sB2o@uR4`Y5>=+Wgeie=?%9)j8]_r*&L?$I[$b6 fA4omG!HoGp&K[EJcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!3cG2!<WH- &NF?ZTr+igr2U("R"occ3Z\Om!;QU-$7o))XMN<,VK?$+',2&e"9AOo!.k3V!"0)Y7:gRR>"q+.)%#+! JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLN*!sqGi[K4S+r8n-jE]tBCh#I]_*E9,tRnORu])[E_MZ<hc )@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!7UuV!<N?*&iX?ZUTLo9r4`WNZDa=F>Vm&t"Tneh!!r`9'H])1 E/hd4rr35CJOL1U"Te`$!.k3&!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZE YQ,%3!WrN6.oCGNS><=cXUD2)QAB?L.LcL`!s7rlq#Cs2*&L?$I?^Y5fA4omG!HoGRfJ$?Z2b7=,=>s_ B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k30!!rZ-!sB&a;fn%f!MQOkWsbhtPD3mJ.1ZOa !s7Zd&dp9kK<`DFbbfJd4qeVC$NpJ2_#T&eNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+? !W2qL!.k3q!!F6;Fed7[joi\d?onqU!!iZJ<34uH9GR["!.k3&!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"? RfJ$?YQ,%3!<N?3.SOf?SZ]O$^C.`bZ)X%-7NN!G"Tn/nq#C^'$l'j><H*r8qu6U#`dpSm#6b21T)aHC Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k30!!rZ-!Wr`O4Blud!M$1fXUD;2 TUC:72AHN'"9Rce&-j139P&X:Vm"_.e&$8n(]hAOJcLf2$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21 >qlco"U"l(!.k3&!7UuV!<N<)#p;E:FblH_r2U4*VOa$%>rWW,#6Y+l!"oYl=GO<+g<?F9><W]7&e"mD !VcYH!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcMbM"9TT/GJ3q:"k0`8 CaoSQ!;-<t"!1IDhj[:T!LEe<!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricMZE_W"UZ;/:iD9nUUL*8 $ba3`[\JFV.M`O$"6]^k!t5ne1/r1O_u'H5#KD?b'F4jE!Q+nh!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K $jek3S[=l+58">/"9JE#JcLB&df9^U!WiTA.R.*\Of/,Z$`pM2ViYab+;"tc"6]^r#95QnAUTc?YLhUZ _KJ0]!VQMF!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcMtS$3:20#8\mV >Bc.'r2U4(WhlJNCe#T[$3p\&!;QU-%5:tD]$K3YVK?$+',2&f"Te^q!.k3V!"0)Y7:gRR>"q+.)%#+! JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLH(!<X>C<3#lY"l.D=W_a8`!!iZJ<NP)I9GRZ@!.k3/!!<NG $Np;,JcLB&JcMVI"9^fa2[&gSJcLB&ci=:S&gB&&GFPr9^C%]g]s*]62BW_C"6]^k!t5ne1/r1O_u'H5 #KD?c'aY'H!VueJ!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcMkP#6YJR -TbdlU\LqrSpaQg((^`Rn,W7a&-j1394`L7Vm"_.e&$5m(]g*+JcN(V$OJ%F@ru?d8inL>$/GT5!.k3& !6Y?N"tNr7UkW/0%1!+?!Q>%j!/LUY":Z4r4C\DFT_thuWi2koRs\6f(D$lUkPu8*0jTmTdc8cQFB^pB 'bUoY!W`>=!.k32!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1/7""(KO-DC#R(>3quD<KJcNso!XCZJr8n4E iSNCD-N`0*#Ql/KXP]L@('3t+JcLB&df9IV)@HYS!.k3&!.k4<!!EEdV`+aJ!.k3P!"/l;(F(kLN2aD$ ]tO?Y#dg.O=?@oG"p+5oq#D*2$POR9<,[`5rVuop]mN3^#R(;2T)aHCZ2b7@/lR"OHu<1]1a*=a!.k3& !.k3o!"9/mE1OA*EBb'D#6Y(H!.k3,!!NH1&K<5t"*^*4Y5GC/Y-+UYBgs]r&-N$u!"]>Q0h>`!PGYP9 fZgpF4Vn.6!.k32!"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcO-t)$C6X*%Y$4 Q)CX^W2lu!W2QDGBh'fu&Hi.!!"o\m=GO6(f[$F;>Wi]9'+4sF!VcYH!.k4%!"0)Y7:gRR>"q+.)%!hR JcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcMYJ%39!!d+dF>k2bO]SO!\M!;-<t!?>%<hj-eH!LEe<!3ZA) #oX0RfDpL'JcLB&aT)GH4/Y"?^AricL]@S\#nIe";$D9:ZF7<Wr4`KHW0;L34sLI7!UB_"!soS[0NE+Q _YaB4o!NX+&dJRB!Q+nh!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3S[=l+58">/"9JE#JcLB&ci=FU "q)"a5\5bFVlHisXU))/Q@<=80Gt/q!UB^s"rT$]?$D=*YL_4BX(aU2!VQMF!.k4%!"0)X6Xt4N=\:b* (^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcMkP(]t!M&Ka>OL7Y0<WiN2#Wi2eYHt5l))@6<Co)SRd &dp3dH`"L$cDGkm4;JbJ$j6S3SH+6AZ2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF !.k3&!"K>tO/g.Qk2taciiul>#iG[g!?"_4hipPD!P8>`!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[E JcO-t$NUD:$lD3BNM`ne]_oML]!.uqGuZL-rW2<b'E\UQ)D>'1Nl(Vkpu\Vp4V.f$!s/5uJcLB&ec6'd /lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3P!"/i2"pbhr<-XUuVQTj!$EKe\J7V+o $3C5/o)SRd&-`t&5Zi/hUor.l]q8dn('9s*JcN(V$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0 %1!+?!Q>%j!/LUY!X&]6'/C;'GEA;gWiE,#WiDteO+(\0,mj\S!UB^u$7ADbRBjiTVg;Z3)As1r"9AP> !.k32!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1/7""(KO-DC#R(>3quD<KJcNpn%g!eUJ#LQOk2tac`eRGB $/kji!>S8(hiU5=!qH>C!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcMkP$NU80!t-YYHC:Y7\bs2J ]XY5IP\`Jq!r`5m!;QU/!XK;R/Q?eR_Y3img7`4@&-`7=!M9@D!3uS4$nbJ'M0s2G8i.\#h#N$,JcLB& b5_qW2fP=pRrLY*$O6e8`;kJiL]@SZ!WiH0+pC>FKTi%.qlL4*TU:420+@sa!<MNe&-`n!4]HE[UTVqa ZBSWP'`u,MJcLf2$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l(!.k3&!71]S!<N<)#U;cM JrlM"Wr8t+Whu>PITS97!WiB'li7Y(,!on#W4U*JHs]&W)A<M^!<MrqJcLB&ec6'a,Xl9dB3J"l.2`H& !.k3&!.k4>!"9)`?&#&+?8;rq"U"k"!.k3I!!N]e>)L5YrT4:7[#A]K!q$'\!!a-.U>M%u'*4F"JcMtS !sokR"5!U*!.k3&!6G3D"?WM?"MXqg!/(=Q"sF1:@tBuG[CuOR$ba0^Z_DnG,Rat_"7-"%!XB)G,"ld5 [)0\iXF3qt$j?_7!Q+nh!0.$e$RS;TGA18T4t@Q\JcLB&JcM\K$jSCiM5,c21Ca`r!s/<"JcLB&bQ%tQ (c"p(JsW@:Y-.c+$EU2$NbL`t#mLM7li7S#&g/nr?$(ssSWJ>8748`Lp&K[EJcO@%$O@_1<+8j!4>7lm #e9qe!.k3&!:Kmr"X?W[O`*oA$3p\9!MKLF!2ol&";s$oCk7hFrhp:+X/MtnTT!SO*!liQ"7uTh!"oMU 1JMS6PF\"Z<]M*8%gW:=!M'4B!3uS4#Tbp)@TQ2d0d7>=h#N$,JcLB&b5_qS,Y`<?E)%eg#6Y/1`;kJi JcH>^!"^koW8?OnjQ>4;YEMQei;a&a*(tWH*<s(TJcL]/!WiT.qZ)3JJcLB&U]:H5<#5-,JcLB&bQ%kO (G80cK:T7G]a_`k]tLtdWf:XR+r1Rjli7_#"U>DO1Jr%FL4X\h;E#^)!s/K(q>c*IJcO@%$O@\+8QJGL 2Cosa$+U%f!.k3&!:Kmr"X6<HJn.7q$3gV8!MKLF!2ol&";)k;:Mkr\riHX4Xf\b+WL8!1/f>6-"S;]i !"]8@'d,(k:h"BU=\M"1)%-M8!.k3V!"/uG-9=RW1+OOa%L1_hJcLB&JcNso$j7G)<,GJi)[?KK!s-@@ JcLH(!<`u<,W\e?LRe=A%'-;+Vl#`(<A5:&#mBSp&Hrgl1IP,KCMm6@.i&U%"p4nA!.k32!"/uG-9Od\ 1b9jf%gR[dJcLB&VZ7,.))bK2;`5X%"9\f-quD<KJcNgk%M:m[gYUfHk2"M)Z"G-[i;`u]#8IIEn,S%? JcLB&JcLB&JcP-;!<Nh#!.k3L!!`T9*@sKlOK/;n%DKTk]tD"^Rs\3p-5?gY!;QU.!<WK1$l^`]91_N: 4=qWe"9JT)ScF?BZ2b79&K`V`0.8%a'+>'#!.k3&!.k3o!"8rD.7$ls.M`3k!s/MB!.k3(!!*0/"r8C< =F6I=r2g=-Xfe:NB1+6i&-hJ$&-<%D&/ZN=1d!TG-6O*6"p)I=JcLf2$NpnS,:Xr\)&3Ve"G-W*!.k3K !"8r?+#62<+;"_Z!s/N$!.k3&!6bE[!t#eg1g#$hWi2hoX/MtsWgn`T74]Jl#4)=$!soV\,UtN-4>.lo $j[%?!qlVG!.k4%!"/o=(F1LW+;tt*#m@d=JcLB&JcP6>$j7(`1ds/B&Hi4=!WetpJcMPG%K[hje(`^; k2G+HbDJ4dmf7q>JcLB&JcLB&JcLB&JcLH(!<NK4%2C'`J>Bfi]tOE[$,+$^V2]Fi2BWCn!"K#1!WrZ8 %h]Hd&.f6U"o\P=!.k32!"/l7%2B]p&e>BW"Ts>VJcLB&VZ7)+$5+@,*"iS\!W`?!!.k3&!6bEJ!X/lA )*_nuqlL4.Xf\ObG[!?^('s7,&-2h8"U55=$k3UP#RCV;!s/)qJcLB&ec6'["pkhR&.K!Q"p>%=!.k3& !.k4>!"/i5%2Kou%0lt:!WeqoJcM_L%0?\>&/dcLO/].XW2clsW!B/\G[*Kb(C9X5q#Cp,!sJl8$OdFS $3pb;!s/Rn!.k3V!"/l5#nRa]%13CH"9[H[JcLB&JcNso$N^PD(*42$#Qk,0!Q4ti!.k4L!"KN;ak#5' jQ,=WhQL$'"-ik<!.k3&!.k3&!0mP9!.k3p!"/f0"ptr+E0mo@]"S$V$bEL3Kkj:3&H`(8!Rq+$!.k4% !"/f0"pt_F#R1G8!s,q4JcLB&JcP6>#6=u7$kWmR"oSIp!.k3L!"8l1":#Ai>CrZMX/rK&XUD2$Li6BW +q4VU!Wi&rJcLB&Z2b(1!sAi7#6t/1!<WDZ!.k3&!.k3o!!iW/"pk_E"p>#,!Q4ti!/(=Q!<``4#7WCm JY8m<Wi5ls$`BGJE*,4I%0HY5!M'4B!0.$`!X&W2#R:S5"9AT+JcLB&JcM\K#Qb,6#n71F"9SQ'qZ)3J JcNdj"p6TGZ,YPXrT47&GrlcCblE=qJcLB&JcLB&JcLB&JcM_L$ipG6"q34jJtf<P\\A$W$bWgFRtY96 )?p<H!VcYH!.k3V!"/f0"U529"U,#2!Wh*WJcLB&JcNso#6=o2#n.+E"9&>=!.k3(!!**&#m:A:-:r'7 RA?k\XUD;-Q\KES0,+Nl!s5"nJcLf2"9JZ."9n`,!WrK*JcLB&JcM\K$3:53"pbD9!s/K(q>c*IJcO!p $ipG5":6DJClF[RVl9Qp$`]nbKPs^A'EeO@!n74%!.k4%!!E?*"9\o,"9JZ,!kA;_!.k3&!:Kmp!<WH0 #mUS9!W`=o!.k3E!!Np+DOJH%rT470R:8)fnGn.@JcLB&JcLB&JcLB&JcLH(!<E6/!sAlU7V[dLWj]V> ^C.`cZDsC>9dC)O"Tt:qJcLf2!W`?)rWN3&!WiB'JcLB&JcM\K#lt)0"U5,4!s&Gu!.k3&!6bEN!<N?+ "rfI$Eep-]qlL4*UR?jH4W=Y1"9[-RJcLB&ec5aP!X&E)rW<3'!Wfh3JcLB&JcP6>!W`?)rWN6'rrJ\k JcM_L$ipD3"9ol+=)s%]UT"-l$`^+sQ@rd5*!c]N"8DkJ!.k3V!!30&"8r?*!s8T+!Sma-!.k3&!6Y?C !<W0%!WrH(_>o/fJcP]K"TfN%CoZ@jjosMMO_cr^QN2U;JcLB&JcLB&PlQC9JcNso$NU80";rphCP\[i ^&>\R]tCncX,L@;%grRDe,Y(#JcO=$rrN*#quO;-JcLB&JcP3="p"`+!s/K(S,e-@VZ7)*!WiK=-U(XQ N2*KOXU2#,R<D7K$O?k;p],mGJcN%U!!2otrrLmTJcLB&JcNpn"p"c,!s/N)^]8rdK)blP$3C83'IQ.J EJgBerMp=)Wi)_[F\X1h#Qt7#!.k31!!!&r!WiB'!.k3&!.k3J!!WH*!WrK*!VZSG!.k3h!!E?>7ZlL) josVm`3F2!c2`FrJcLB&JcLB&JcLB&JcMSH$3Cb`2GA.UXM)<]rkJHG#IKq>5op^K"o&(L!.k3&!.k3& !.k3&!.k3&!#bh;!Xfqt4C3N+Y-"h/Xfee-Xe^YV1)1<*"J#OE!.k3&!.k3&!0mP9!.k3l!!iW7*%X9\ I[@)6VuWmtW!KDsK3gAN%g`Bg!.k3&!.k3&!.k3&!.k3&!1s6$"tFT@hVmJViniJFUG`;I!.k3&!.k3& !.k3&!.k3&!.k1h!!!$.(ah.GKqc)i]tM1q^:h4iUP3&<.N&Sa!.k3&!.k3&!.k39!.k3&!6>-K!XKDY .SF]@W335'Y5YO/XJq;"9eRV'#Lia*!.k3&!.k3&!.k3&!.k3H!"Au9'-8SsDiLTnWi2krrhp(!Nc.ZH +;>+V!.k3&!.k3&!.k3&!.k3&!.k4H!"BQ8YKPYTioK(Tgp'ZjQiM^<JcLB&JcLB&PlQC9JcNjl(]ajO (*H+gQa"!1]tV7r^:h(XQ[E++-kOl.JcLB&JcLB&JcLB&JcLB&U];54"UYhW3*q3/W2cr$Xfee.WgSHO 9Jddup],mGJcLB&JcLB&JcLB&JcLB&%fcS1"UYhX3a[E-V5L>lWrAq%Vj;jG:,F%$SH+6AJcLB&JcLB& PlQC9JcNXf%L+VBYJf/RjPo.T`,77;ciAXtJcLB&JcLB&JcLB&JcMSH$ipG7$4J[sM5dej]Y49Y#J@@< Q@<'s(&.c\!.k3&!.k3&!.k3&!.k3&!"Ao.!<WH0#U`>gQ_UL^rN-@.Y+q,0Bh9fdSH+6AJcLB&JcLB& PlQC9JcNjl(]a^A#72eRFHiDoWi2tuWi2qiO+1k:/.pA3JcLB&JcLB&JcLB&JcLB&SH'-<@Zdk;hWEn[ im<fh/.D1OJcLB&JcLB&JcLB&JcLB&JcP`LrW*6J9mE50ZFR[I^C.`bYc!e-7iqg7!<JkoJcLB&JcLB& JcM&9JcLB&`W5u="rTR6M3t'<qlL4*Ss4e43#2St!WgpRJcLB&JcLB&JcLB&JcLB&U&b/n#8oa;LR"L. Vu<Y(W2?&IJ6t>R!s/N)quD<KJcLB&JcLB&JcLB&JcLB&p](I(5&$.ph>QI>gU)W=/d@dFJcLB&JcLB& JcM&9JcLB&`;g2F!?!t+JsWFC^&>\R]t1SSUOuf+&.AdGfDpL'JcLB&JcLB&JcLB&JcMJE#lt&@/kp27 Q)1S[XU;,)Sr[b\-4:(_"8i.N!.k3&!.k3&!.k3&!.k3&!;lg&!<Elf:2GKEU&Cu"X/DkhRuM;Y-4C1a "JGgI!.k3&!.k3&!0mP9!.k3d!!Eif?CfgLj9Fc&`hS#Y'%-c3!.k3&!.k3&!.k3&!.k3C!!a,d7::V6 Y.X_J$ba6a[]Yg573NHW#5eIQ!.k3&!.k3&!.k3&!.k3&!;Z["%3RQ(Bn`/XY5YO1Y,\CiIU"cJ&IJZ7 !.k3&!.k3&!.k39!.k3&!5edQ%j3f-BnMkSW2Q_sW2c\hR=&:!)%d2YfDpL'JcLB&JcLB&JcLB&JcM8? %Lk=AcJmjEk2+S&WcoiopAfdFJcLB&JcLB&JcLB&JcLB&q>^d0)Cms\M5Rr!rP&`R]tCeIJQafS(((): !.k3&!.k3&!.k39!.k3&!5edR#S\C7:iqr&Xfee.Y-"e.Vi>L`-Q<X&!SII)!.k3&!.k3&!.k3&!.k3C !#Q"V+tuo:P,G7WWiN(rWiDhPCe6#p&I8F9!.k3&!.k3&!.k3&!.k3&!.k4D!"BiO`o5q<k2P4NcDjDH S,e-@JcLB&JcLB&PlQC9JcN[g#mLeQ*^t:F\@oTQ^BhKQP&EfF+:SA)!.k3&!.k3&!.k3&!.k3&!1s5u ":5VS2I_TEXf\c'XTt8B=uRfE#m'u)JcLB&JcLB&JcLB&JcLB&JcPWI#6Y>E(H5i\VZ*LoWr8t(Wg8!9 3[bdN!MTRG!.k3&!.k3&!0mP9!.k3b!!WZp[bfm#jSe3Cenuf:e,Y(#JcLB&JcLB&JcLB&JcMDC$NpeH 'fT`bXL>[Q^&>\S]s+,_C/$At!s/K(!.k3&!.k3&!.k3&!.k3&!.k4I!"&i6$4n^dHCCb3Y5GC0XIkDh <]q]?!s/N)V#Z)IJcLB&JcLB&PlQC9JcN[g$Np\A&1ge+Q_UFXW;Wb)Wgnob=$J#D!s/N)g]2p+JcLB& JcLB&JcLB&JcM5>"p,odWl*<BrT47;MF&'[q#H!HJcLB&JcLB&JcLB&JcLB&q>^m*"ptbg;L4h4ZFR[I ^C.`_X.+oY6QlU8!Wf+tJcLB&JcLB&JcM&9JcLB&_Z1#G":#5U6"Pk?UT46o$`p4mLiQHO(^'pB!o*d- !.k3&!.k3&!.k3&!.k3C!"/l3#72M@AqlVDVl9Qp%&fncL2g6P)$C$C!W[fPJcLB&JcLB&JcLB&JcLB& oDf%%3c'qhg\p7<go+pJ(BU3/JcLB&JcLB&JcM&9JcLB&_Z1&G!sJlM5\>b?WjKG;^C.`cZ`KjN<@S1U !s76XJcLB&JcLB&JcLB&JcLB&T)]3"!sA`A1/i.JRAB_^$`^"kNGCp)"9\f.!.k3&!.k3&!.k3&!.k3& !.k4I!"/i1"9]Mr<,dSWTrS'l$`KtsQ]#WJ+9VfL!i5mK!.k3&!.k3&!0mP9!.k3a!!NE>3bP,:rT4:? `0kR8&(U`4!.k3&!.k3&!.k3&!.k3B!<*!(&hZpuM4_#br4`WQ]=>25Bf$,#"9S[V!.k3&!.k3&!.k3& !.k3&!;QWo!='&Y5$N,eT<A-p%'H\6WhY)E.L$"Y!s,8!JcLB&JcLB&JcM&9JcLB&_>sQ9#7i(F>]bgl Wr8t,W2choTRU#l#6Y/3!Sma-!.k3&!.k3&!.k3&!.k3<!!EBB6A!DZjp'i"agRBa!rDtL!.k3&!.k3& !.k3&!.k3&!;6C0$mRf2Efd60]tM.p^V.:l\=\(A+VkOm!N#jK!.k3&!.k3&!0mP9!.k3c!!ilK/O<]i Q)^qaXUD54Xf74i4W"b<"TmK[JcLB&JcLB&JcLB&JcLB&RfE[")D4EbH'5'(W"#c,W2choM.Ssi&IJ[C JcLB&JcLB&JcLB&JcLB&JcP?A%L++`[+sNsjQ,+Iag"8ATE'QDJcLB&JcLB&PlQC9JcNOc(^Us*2d(U# Zb3ub^;%@p]Xau"BKn'h%0PDdJcLB&JcLB&JcLB&JcLB&RfEd"&KE;kBo/XgXK;?%#ca/6<&#U5#m5bZ JcLB&JcLB&JcLB&JcLB&p&Gp7&KWJpBnr@]Wi2krW2Q_oP'9q^,8LRfV>u2JJcLB&JcLB&PlQC9JcN@^ %LbOed+[:6jPJYB`*OGcfDpL'JcLB&JcLB&JcLB&JcM8?%0[.T+?jS(Y.;3Y]t_;\]a(a1J7(ht'a'$f JcLB&JcLB&JcLB&JcLB&p&GF&#nRk+=FH^>Y,qT($*:;$LMKXC+qOjR!.k3&!.k3&!.k39!.k3&!5ALB ":5YV0j&djV5gPoWrAq&WgeZW:cK[3"5Ns/!.k3&!.k3&!.k3&!.k3:!"K&WGJMDVhW3YPgs^a4&,ZEZ !.k3&!.k3&!.k3&!.k3&!;6C#!X&]7,ZTPs[^j&arP&WO[&B:??TfG5V>u2JJcLB&JcLB&PlQC9JcNOc $3C>5#9-'LQ)CXbqlL+!Q%3RC0,4WG!.k3&!.k3&!.k3&!.k3&!1Nrs!X&W2*(=e/USXugX8]+)W1fB( Bhg>u"G-W*!.k3&!.k3&!.k3&!.k4?!!X'BWkd!;k5OEEhP4C.%AEiS!.k3&!.k3&!0mP9!.k3c!"/f/ !s9E/EL3`3\@qjU%)09VUR$+#.LQ@]!Wh6[JcLB&ec6'Z"ptkR%h/pS"p>%=!.k3&!.k4>!"/f4%2Bit %1!%;!<JhnJcM8?$NU;2!u*UuJs`73XSf1*Wh5B'@Qtt@!sA]-!JUT+!3uS4!X&`9%1<IJ#6Y/3h#N$, JcLB&b5_nO"UP_T&.&OC!WiD@!.k3&!;6C#!<N?+'K09JQ(FkQrMp@*Vji]r@R2+B"9S]+WW7VNNW9Fg ":,>D$4."D"9\gY!.k3&!2ff)!X/lA'bCZU!s/N)qZ)3JJcN=]"U$MnO1*gAjos_SJl"!'g&Q^)JcLB& JcLB&JcLB&JcM8?$NU80!u!IoI$US6]DTDK]<n`;M.A[_!t5D;!JUT+!3uS4"V2V'0e=Xp)A3G^h#N$, JcLB&b5_qQ'.5q>4"(gJ"9S]+`;kJiJcPKE$3:20!tH_MB7Z2=r2gC1Xe_POFAXY%#R(>4WW7VNNW9Fi $Pjj4+rhF6%1!)g!.k3&!2ff*!tH;(5;!ug"9\f.!W2qL!.k3c!"/f/!Wrr]8S<R7SuM[h%&g/!RZMVi 0+\En"9RN^JcLB&ec6'\$5Oa3,9@^:%g`BL!.k3&!.k4>!"8u@*\]l5*t\VY!s/Ls!.k38!!E]_=-(K% josbdUNor[rW%NMJcLB&JcLB&JcLB&JcLB&p&P'm#QbG^6!\l(X1A/C$ba*[Z^Z/2+VP7g!ic6P!0.$e #TGKi<_Ph=/Kkc6JcLB&JcM\K$j@hCBS0nc-40q[!s/<"JcLB&^AnWB!<N</*&:0"JXEJ8XUD51Vk\uU 3uAG6"9RN^JcLB&ec6'^'dl%24>\Q5(_-b\!.k3&!.k4>!"8uJ2,nHl2B2r)"9S[u!.k3?!"/f.!WiZL 1ehV5Q)=M\#cao&UnEBN4;e53#m:<a!.k3V!"/uG-Tjm_1b9jh%gUnjJcLB&JcNso$j7G+<c1kq*XDlO !s-@@JcLB&mJm=s/nr#tjp'o$`3#4^#G_?O!.k3&!.k3&!2KSr!YPS-!.k3&!5/@=!<EKD.R%*iU::'8 rOiH8Lg2MO&dea"!.k3&!7h,X$ReM\H>d.f67s8e\H%3]JcLB&mf3b$0k$*AN+4aU$3gS5T`BZER/dNo !<s/Z0M-,AVu*S#XK8RkE_.JX'b(BML&cf*Z2b7<*]R85>"q7=,8LR@!.k3&!.k3o!"9#X:O8@N:aueW "9S\D!.k3&!;$6t!<EE=+>HN,N26BP$`L#(Wg%Kr,8C^p"0)?Q!0.$e#Tl*0Am8"s1aEhCJcLB&JcM\K $j@tTH'NMM.gcLa"9JE#JcLB&[K$@@9!/$R"lA%hdpa-J!.k3&!7LoL!X]%9!.k3&!.k4;!!49R)k$bY !1*Zn"V2P#6ueNs]Y2"mr4`?<Q>o@r0-Cf/L&cf*Z2b7@/Q-kNH>HhY1a*=a!.k3&!.k3o!"9/mE1=5' EBb$C"p4nF!.k3&!:g*p":Gqc2-kd*q5jq*T7L9+,SgajWW7VNNW9Fm,=,g[AQVPd.MrJD!.k3&!2ff* "tNo6UkN)/%1!(=!W2qL!.k3_!#PhG'd#>?J=NX>Vl6YsWiE"fJ6k2](CUH*!.k3&!7h,X#pViKEb8EJ 4=M-S\H%3]JcLB&mf3b$/6mq'K3g;B#Qt82T`BZEOoQ!q/r/$4h;RMYjQ,<U/d26,!.k3S!!<KD$3Ji[ JcLB&JcNmm"9U][2?^bpJcLB&nc0%#$PFC6?%o&\\\,WR^Bq9AM/#d@)[6<DX8mhPNW9Fq/Q-kNHu<1] 1a*<[!.k3&!2ff*#rcgo[$ku!&ISgG!W2qL!.k3_!"/o8%2C6`DipiqY,qQ'$)EW(<^%lG"9AP`!.k3& !7h,X#U;WFEbANI4";'R\H%3]JcLB&mf3b#.pIh*Kj?DB#R(;2T`BZEQN.Ht#S.Xu9lQ/eVlH\rX8]+$ ToF.q"[FIN"9AOZ!.k3V!"0)X6tC=N>"q+.)%#+!JcLB&JcNso$jS=gL7s6+1(=Km"9HIAJcLB&li78+ <27"Igudbuj9)&L)?Qc9JcL]/!sf_O"8i.N!.k3&!2TYu"$<89"SMhI!.k3_!"/l5$P+IRFdK,6\@haS #Ipn,Mf)'5$N:(e!.k3&!7h,X$nYA%M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRW1P)$O6e8T`BZEQN.?p ":,AS3adQ-TrS!l"0.iIFTtu/*!ZNG!Jpf.!3uS4#pV`GFD"`K4";'Rh#N$,JcLB&b5_qT.pIh*Kj?DB #R(>3`;kJiJcP?A$NgM;$620:J<le(WrB%-WiDq`LNH]]*X;`I!Nc?R!0.$e#pViLFD"cO4=M-SJcLB& JcM\K$jS=gL7s6+1(=Km"9JE#JcLB&[/^@70PlfWf)Fe9jQ*[g4rXU\!.k3&!7LoM#oX0RZiG[XJcLB& m/R7k4/4\:RfJ$?QN.Bo!s8]@2dh?3X0]G9^B;*TXePuS?82lf!Jpf.!3uS4$nbG&M0s2G8i.\#h#N$, JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiJcP?A$3C;3":m"XDi:!YqQ1("S<.bb-O9bT!Nc?R!0.$e#pV`G FD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&])W3?!sA`;/5U8AQ(b2TWsYi"R>u8^-OBhU !TX64!.k4%!"0)Y6tLIQ>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcLl4";O7;RE>Bh"3I<\ :]M;a!.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLB&mJmJ"-qnT>T<>a&^C.`c[BZ3A659_/!s,P) JcLf2$OeXdG_pfc>Y6gr%>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k3&!4Mq6#Tl06G`/)lY5PI1XK&.j L0c\J"U"o/jT'l4JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!0[Bo#Tu<: GDV`cW2ckuX/`%kSHjgT1_Blo!s4>[JcN(V$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+? !Q>%j!.k4:!"T2R6?g!"jQ,IcgV]tK2[62\JcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3[!#Pt_ 2c=XTUpRhK^;%Fr]XbJGK3BiE&IJX%!.k3&!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRrLY* $O6e8T`BZEP5kgl'e;RUG`\a!XTPZ-Wi$)`D+Glc%0lum!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso $jJ4eLnoc20b"Bl"9HIAJcLB&mJn(.(G%s\GE8GqW2Q_sW2c_iNc%E5'Fb9LXoO%RNW9Fn,Xl9dB3J"l .2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3W!"K,Q;P;k&iT0.VcFp5S&`3S?!.k4"!!<NG$Nma9 JcLB&JcP0<"9^fa2[#TMJcLu7#6bbe2GnaeYl;<>^;%@p]Xe?LPAiuD+;"d7!.k3V!"02f;g=.HDHodj +V!6-JcLB&JcNso$jek3S[=l+58">/"9HIAJcLB&mJmOr%N?o`@tUASXSo7.XKJUmI9\]U((CDL!.k32 !"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcN7[#QtYY/4*m!S#ZId%'->,Wi)22 >rj5I%0YbmJcLB&ec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq"U"k"!.k32!"0&fK\P;= iTB"OcGfp)-No,'JcMtS!sokR"5!U*!.k3&!6G3D"?WM?"MXqg!.k4=!!iZ7'-/f8N2sVj^&PkH]a(m9 K4.2$)$d;EJcLf2$OeXdG_pfc>Y6gr%>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k3&!4Mq;!sfAP-;J`O Y,n_,XfhZ*#G[2p:GsF3"m#`9!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1r JcLu7&-E1K(+)k#Q)^j_W2lkqVlBupM/H0L,SUE>!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=h L7s9,1(=Km"9HIAJcLB&kPu&2C!bShhWEhSh:n,[&ubk_!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[E JcN7[$NUA8$Q2K_U:@hJ^&5VM\>bd?>sKYCrW23_JcLB&ec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/m E1OA*EBb'D#6Y($!.k37!!r]0"UGf&B90'oqQ1+)Q[iX?1)gK#!<J/[JcN(V$OJ%F@ru?d8inL>$/GT5 !.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k4=!"/i2"UGf(B8rdeWi,cq$Ds)<Akb$##Qb#-YlK@UNW9Fn ,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3U!!Na)[`?tTr8n*iA1S)H!.k3&!7LoM #oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?P5ksk!sJoC4(sYRYd_:C^C.WWUQ]t'1(sfn!s+D^JcN(V$OeXd G_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k4=!"/i1"9f8f<-jn'Vlos"$`fk[I:GYm %Klk9!jVfX!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&[f?d;!sAc<033@` S><1_WsbhpNI58*-k?F`!s7]eJcLB&ec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq"U"k" !.k31!!NEHA;@;4r8n.%KMEm#LB)o+Y5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!:Bgp!<N?,%4tG$ PbYInr4`WQ[]cKfCdT3M"p>"5!.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<K JcN7[$NU;2":6;=@XjH2Wr/t,Y,@kRGuum=#6Y/2kl?;8JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr "tNr7UkW/0%1!+?!MKLF!0[Bk!<NB,#pVfHIZ9hoWr8t+WhZ#DGZZj>#6Y/2NW=Y2Z2b7=,Xl9dB3J"l .2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!9X=c#:`K#^#].S"k0K!=!@^I!.k3/!!<NG$Np;, JcLB&JcMVI"9^fa2[&gSJcLB&[f?d:!<N?0+['%TPGYbc^C.`e\?ho[;C2k\"p=)iJcLB&ec6'd/lR"O Hu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k37!"/f/!WrWD01fZ%PG\8[$a$P1UlT:W*!uoR "-*A5!3uS4#pVfIFD"`K4";'Rh#N$,JcLB&b5_qT.pRn+L0ZMC#R(>3`;kJiJcP3=$ipD2!s]\t94WF3 U8n0m$`L&%ToEhU*XW/U"0qoY!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB& Y5e\2-X*J0rT4:<ag%7.&*!YA!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcLi3#6Ybi5?WE(ZM_H; ^](nOY``NO'b1NPNW=Y2Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!9sOi ":uY07qd^PY5PI1Y-"e,T7'Q`&./UDZ2fIVNW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+? !W2qL!.k3W!!rc>+>QN%L7Y?Dri?$s#caDA;^N%_#6a8kJcLB&ec6'a,Xl9dB3J"l.2`H&!.k3&!.k4> !"9)`?&#&+?8;rq"U"k"!.k3.!!E]kO5f7"josc$gtRT2L]E#,Y5eY2)@HZ"!.k3&!.k3m!!EEdV`+an !.k3&!9sOn!tHA(6#)FZ]=bhj^VBc]#IL%J:ba1.#I4>]!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3 S[=l+58">/"9JE#JcLB&ZN(44$5Fd@<dL,.XU)#)Lh/du)%Hi7!.k3&!7h,X#pVfIFD"`K4";'R\H%3] JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZENrTRj$5XpD=*^(1Wi2kr$`^/'W1erX5pmQ]"c`S7!3uS4#p_rN FD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcOm4%K[b`ak#5'jQ,1RgmpM6XT3qQMZ<hc )@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!4)Y5!t#Y].oh%j[(3i_rkAcQ]ssr"ED\Y<%-[bD!.k4%!"02f ;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcLi3$j-_D(*H"ZMkmAUXfVu5Y-"h)PBpM" .i8PP!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&l2V+m#7hRo7;7UP VZ!OoW!B/\H!Wfg)%!SKJcLf2$OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!3H52 $ppl*bM2+=iniOq=s*t0!.k3&!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?NrTRh"UY\S5]2dh[(3lb rkA`Q\Z_WaEDJ.tNW=Y2Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!9sP$ !X&`7&MdL<Su&HiY-"h/Xf@tNG?mBW$aKba!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl "9JE#JcLB&ZN(gD":#5F10T'oTr4ohWiE"rVj`Hd?9f_Dkl?;8JcO@%$OJ(IATVQg9fsjB$+U%f!.k3& !:Kmr#:s/8TnH`-%1!+?!MKLF!/U[[""8Pf\^TODjQ,=Z`-auo"cEA4!3ZA)#oX0RfDpL'JcLB&aT)GH 4/Y"?^AricJcP$8$NU80"tNl2VQ[A=^AYeO]X=l9NFt?gZ2fIVNW9Fq/lR"OHu<1]1a*<[!.k3&!2ff* #rcgo[$u&"&dnpI!W2qL!.k3V!!rZ-!X'W:Dj-cgqQ0t!S<%no/eI7IJcLB&ec6'a,=>s_B3@hg.MrK& !.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k32!"/f/!X']=DigH^WMocr#HFMdNH\AV&<6aB!3uS4#p_rN FD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcOg2"Vk3jVodorjos>7F\NnYYQ07TMZ<hc )@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!3cG0!<XN8Di^Nm\@qjU$ba*WXdaQ2,mst^"76)?!.k4%!"02d ;0R_=C0F.`+:Yj]JcLB&JcP6>$j\b-RBr5u4V8&,!s,(qJcL`0#lt,G2d1KbS#EIeXU;)(RttQ<)[HWN "-NY9!3uS4#U2NCDdug=3@>RKh#N$,JcLB&b5_qT.ThA!Jm'f:#R(;2`;kJiJcOs6)$'jX3a6icR&-^\ WiN2#VP'<2AO%7A"p>%:!.k32!"0)X6=OnF=%PJ%(C>ZnJcLB&VZ7,0.p.CrJ6O]:#R(>3quD<KJcMkP %g+"EEj+<[jQ>UZ]p<\"$0M;?!.k4"!!<HA#m.I6JcLB&JcP0<"9LHE0E[dEJcL]/#Qko";/hGeZG$4O $ba3_Z`&^j2]<;:"d/k;!3uS4$n>"lJot[+7PPtnh#N$,JcLB&b5_qV1MN/ZPA3/j$3gS5`;kJiJcOp5 $3Lnh5[8GkTrkK#riHO1Whbo%:b*4h#R%R9JcLf2$O@k=?#<tJ75cM/$%`//!.k3K!"9&[<Ig]j<\=ab "9S]&!.k3&!3ZA>!u!(L?$)!rWi2krX/DtpTosLq///U#"RQ2@!.k4%!"0)U5[J88<(Anq(C@VPJcLB& JcP6>$jJ+]J"(ge0+8*h"9G1rJcLQ+"9]Z7O4t!#ioK7XbI![D)N4ZJ!3ZA)"V:k>fDpL'JcLB&aT)GF /:o8O^AricJcOp5#m(Y_1eD\NXh;CI^C.ch]Xb86G>0S0&dPiFJcLf2$OeFUDgcV8;FE2[%"\J2!.k3K !"9,fAWX!RAiL>/"p4o(!.k3&!3ZA0!Xfkq3aI3(Xf\c)XU2/1T7^T9+;PCim/V_<JcO@%$O@h9>%h2< 5rBo&$+U%f!.k3&!:Kmr"t*;qRX.m`$O6e:!MKLF!/gg_!Xotr4C3E&WXl&,WiN(uWi)A=@Qu%Q%gA*r JcN(V$OIq<>A.>@6oHA.$/GT5!.k3&!6Y?N"t*ArQ[)O^$jZt=!Q>%j!.k40!"K/\En94/jQ>FUcGYSq #I+8\!/ggY!t5>0!.k3&!.k3I!!E?KE$,5U!.k3&!3ZA0!=9AY-W>Yo]Y2&X^BqWf\YFsh4t@NZm/V_< JcO@%$O\@QC3a]':dH]R%(Q@i!.k3&!:Kmr#;BPFW/G.D%giLC!MKLF!/gg_!X9)K*(+S+Xq.Y:Y-"h/ Xf\UcE_eA3'F9j%JcN(V$O@e5<b5E-5;FGu#i,K4!.k3&!6Y?N"XHifQ??"R$O6e:!Q>%j!.k45!!iW2 %2BpQDNLmtVu`s!rhp("O)\#O+qt<k!.k32!"0&S3`fos:-g]^'a]HlJcLB&VZ7,/-;\oMFAaUr#6Y/1 quD<KJcMbM%1u^fhVmJVjPo.T\PsC/!.k3&!7LoL!XSt8!.k3&!.k4;!!43L)k$bY!/gg_!<iiC(IE,0 ZN@\M^&5VM]WINH>X9bMr;i2aJcN(V$OIn6;di^!5;FK!$Jb]6!.k3&!6Y?N"t!#dOE"#F$jQq<!Q>%j !.k45!"8l2#RqA&?%f#RY-"l*XUD;$Jn7M/*Xr/P!<Kb3JcLf2$O.@s6Vg-40ddnO#D)r-!.k3K!"8uM 4CEMA4s1+7"9S]&!.k3&!3ZA2!<`Z;&N!gGTr"chW;Wb)WgJ?L9/I_"!WiB'nGn.@JcO@%$O7J!78ZQ; 1+4+S#e9qe!.k3&!:Kmr"<Ka8H!W`Y#mCG6!MKLF!/1CS"Z;\M^s:]orT44*E\Ro]!.k3&!.k3&!.k3l !!3?K"hjtg!.k45!"8l1#7M,!?A52Z[(F$M^C.][UQ^".2]2]"!Wfk4JcLf2$O.:l2aKJZ.3fZ>#(ci, !.k3K!"8uJ1/DOW1E6Z(!s/N$!.k3&!3ZA1!<WK2$Re\eOe8GNqlL4#Oa^k5.hi'f!WhfkJcLB&ec6'\ %id)T/LDPW&decP!.k3&!.k4>!"8uE-U(Km-kuph!s/Ls!.k3/!!iT."UPMa:2l6rS"ZdZrMp=+T9"A3 9.Ub[!s/Lh!.k3V!"/o?*\9-#-6O3?$3]/bJcLB&JcNso$j77m5ZL#s'a=dD!Wg7?JcLB&hZ*fq=+[?j hYlR>er`o[$F9_a!.k3&!.k3&!2BMo!qZJE!.k3R!"/l3"plYNEK['!\@qjU$ba'SV3Z-m,6\2P!V$/A !.k4%!"/l:'HSJ@)AWqo#R%[<JcLB&JcP6>$NghW.5iRo%g<%;!MBFE!/^a]!sA`2*'@MT"-9%PXSf1- WLo?(?9&l+"9S^k!.k3V!"/l7%i$$!'G1c\"pE`^JcLB&JcNso$Ng\M+"JEJ$NpP6!lP(j!.k44!"/l3 ":#u3?@.[#V5X?n$`KqlOFLV!)?^0F!kJA`!0.$e":,MS*#B;$%1*4AJcLB&JcM\K$Ng\M+=nWM$3UG5 !rDtL!.k3L!!NNQ9mNqtrT4:<Z%?(/#3u8@!.k3&!.k3&!.k3&!.k3.!!`N*!Ws?#>'U46UU.Z4^C.`f \[8An>Ufs^!s4bgJcN(V$NU>5#71Y?"pG)2!Sma-!.k3&!6Y?I!<WN5%13:Br;jh:JcLB&jT#Yh!WiH< /4a?#Oef)VXU;52UmZ6p+9_lM!kJA`!0.$_!WrQ/"pY&0!WrN+JcLB&JcM\K$NU>4#71V<"9JW*!W)kK !.k3R!"/f/!Ws,g8S3@2TW7sk$`L)'Tp9Xk+9_lN!q?8B!.k4%!!NE+"9f#7r<*-'!kA;_!.k3&!:Kmq !<`N2#m^Y:!WiB'TE'QDK)blX"".'6g\p7<hU&g+B,H^1JcLB&JcLB&JcLB&JcLB&i;a/s.7@KjRB=*7 ^AbkS]tM"`QZ,,'&./TP!.k3&!.k3&!.k39!.k3&!3-#'%3IH$BS;oTXUVG8Y-"k-Uk2f)&.8^GnGn.@ JcLB&JcLB&JcLB&JcLN*!t?A2:'50]RAp1a%'$8)Wi)M@>VQg!#R$FnJcLB&JcLB&JcLB&JcLB&h#Ion 20I$tiSrqXgXF0.0a"f`JcLB&JcLB&JcM&9JcLB&WW3hD*A9clM57Yo]tM1q]tM(fTn6H',SgaW!.k3& !.k3&!.k3&!.k3&!/:IU#Sn[B"&j6%W;`n-Y-+n.Y,@7r81,>g#F5@A!.k3&!.k3&!.k3&!.k40!!rrI ,rS_CO/8kVrhp1%WiDkQCe6#p&I>rJJcLB&JcLB&JcM&9JcLB&V>q)-(fIQggYUrLh:p;Y8.b+fJcLB& JcLB&JcLB&JcLB&L&_;\&KE2)9Qur2\\,Vi^](nP\Z1j9;*-'8!LEe<!.k3&!.k3&!.k3&!.k40!!rf< 'coJHKqkZNqlL.(R=8O0/fP0!])[E_JcLB&JcLB&PlQC9JcMeN(^1?`+$O1eT;S]hW2ceoW2>i-@7)[g $j#o!JcLB&JcLB&JcLB&JcLB&JcH;]#<%^_d+dO?hVHr(B.*tI!.k3&!.k3&!.k3&!.k3&!9!nc!s]5G 11Q?H\@K8crkAcR]s+2hE`+Y.!P8>`!.k3&!.k3&!0mP9!.k3N!!r`2#R`"VHCUt7rN-F0Xfe:UG@!Q_ &HVG&JcLB&JcLB&JcLB&JcLB&L&_;Y"UPSO-rP>YVPgGmX/`+sWgnuk?UQ:S!LEe<!.k3&!.k3&!.k3& !.k4*!"L,oZ,G5Mk2bO\du$[:#.FSa!.k3&!.k3&!0mP9!.k3N!"/f/!s9`CIA3sQ]"S'W$ba!LSr@GR +ThfJ!VHGE!.k3&!.k3&!.k3&!.k3*!!<6'!s8cG5%p"KUoUTqXUD5.R>H,i2AcMu!WnejJcLB&JcLB& JcLB&JcLB&i;a5d!WrQC5\Q.HTr4jfWsbl$QA9Zd2]2`#!Wp(9JcLB&JcLB&JcM&9JcLB&U]:Q,9n]Fa h#6@=go>6V*<P[0JcLB&JcLB&JcLB&JcLB&L&_;V!<N?.)F%hjSZ9'1rP&cS\[&6,ITS94#mLJ4RfJ$? JcLB&JcLB&JcLB&JcOa0$NU;1!u*IgFGcK^XSf1.WhYu=Bgs?S"p>#/^AricJcLB&JcLB&PlQC9JcMeN $NU;1!u*LiFGQ6VWr8t,W26,OLM97*#mUS8!VQMF!.k3&!.k3&!.k3&!.k3&!!`K(!ZF@@VqV+3"l@%W B0Qfh!.k3&!.k3&!.k3&!.k3&!9!qW!=/`?/kp/:T!,g*^C7ih\?i8uCHr[I$O$RG!.k3&!.k3&!.k39 !.k3&!3-#,!<E6'%O4,=E/C0hr2g@0Whc)1=>CHr#Qt5&!.k3&!.k3&!.k3&!.k3&!/:LR!WN3+%jXAA E/0p_rMp@*WhuJVH<;p7$jZt;RfJ$?JcLB&JcLB&JcLB&JcOL)"9K?'J'7fQ#3!q;R;aDQ\H%3]JcLB& JcLB&PlQC9JcMbMrW*64+#?K)NMsDc^C.`f]==J\:a6eg#QaW!JcLB&JcLB&JcLB&JcLB&K`M)Q#7)(n 3`pWmWr9%.Y,nb-WJbCR)\NM_!h01A!.k3&!.k3&!.k3&!.k4/!<*!(#o>!P=Ep%-rMp@*W2choM.]*o '+>'H^AricJcLB&JcLB&PlQC9JcMMF!s0QP`;Sg&inW,,Ysf)j!.k3&!.k3&!.k3&!.k3&!.k1W#8/.2 :OJeD]tXBY#ed6t@l,ML$j)muJcLB&JcLB&JcLB&JcLB&h#Icc%2L0PB8`[iXfhQ'#FTg5.NB',!l"_e !.k3&!.k3&!0mP9!.k3J!!`Z<(F)1XM5:-L!NN4"WX,PhG>]k2'+"a6!.k3&!.k3&!.k3&!.k3&!.k4K !!`luXkr$rjQ?I&!o%N4PlQC9JcLB&JcLB&JcLB&JcOU,$O$qR+?jP%Xgl!U^&>\Q]s*uS>!XVQ!s&G= !.k3&!.k3&!.k39!.k3&!2]`&":5VT0NNOiWiZ'!$(lud82;;!!s&Gt!.k3&!.k3&!.k3&!.k3&!.k1h ":5YV0ir[gVPpMnX/i8#VjrER8MhP$"9AOo!.k3&!.k3&!.k3&!.k3&!8%8]![Mfpa4B,0k2bUZLH#^R !.k3&!.k3&!.k39!.k3&!2]`(!sf>L/QdLpYI(jRrP&WO[&91;?9KA6rW2fpJcLB&JcLB&JcLB&JcLB& JcH,["pkba7VRdPUoO<o$D`o:BM:&p"9JT)ScF?BJcLB&JcLB&JcLB&JcOU,$NpY?%jOSYM4:39WrB%- Wi2VSIV;J1(Bad?!Q"hg!.k3&!.k3&!0mP9!.k3D!!Ng#J"sp9roOCFhP4=+%.XCM!.k3&!.k3&!.k3& !.k3&!"/i1"pl>=DNLZs[_2RR$bj0UVji!0-jB_R!M0:C!.k3&!.k3&!.k3&!.k4,!"&c0"9oSu=aQ7% Vu*S'Wh5N2AO%=?!WiD>!.k3&!.k3&!.k39!.k3&!2]`(!X&W2(H,HBO.)iDrMp=)V4<^%AjRUC!WiDu !.k3&!.k3&!.k3&!.k3&!.k4J!!NHK;L,:nrT4:B^kuAV$CCgF!.k3&!.k3&!.k3&!.k4(!!a&i=F?F1 ZFg%L$bX$WY``TS$3L>1!Q+nh!.k3&!.k3&!0mP9!.k3F!!WfY7V@:7U&(kuWhc88;^_kQ!WiE!!.k3& !.k3&!.k3&!.k3&!.k4L!!`o[7q[@5SuM[h%'$>)TppC.-jKhU!WennJcLB&JcLB&JcLB&JcLB&ec5g] /m"+UrT4=Ff"I`.-3Cj\JcLB&JcLB&JcM&9JcLB&U&YK.-:2*gQE%I.^AbkT]t:e]SU!gM&e"sGq>c*I JcLB&JcLB&JcLB&JcLB&r;[01*&LE(JXNO?XfhW)$*'eW@lkG8#Qt4$!.k3&!.k3&!.k3&!.k3&!8.>W #p(p"BRlAFri#gr$E9nrL1EC_%g`@?_Z58gJcLB&JcLB&PlQC9JcMAB%Lat&[,0d$jQ,(;[%KJdoDjIC JcLB&JcLB&JcLB&JcLB&r;['/)(e3`K:fOM]a_`k]tCtfV28\A-5d3oT)aHCJcLB&JcLB&JcLB&JcOI( #6kke1eqqHV>dRsY5PI.WfhC!/0#?1"2b+j!.k3&!.k3&!0mP9!.k3F!#PqT,;rA9M4prIW2Q_oWi;kW E`+J1'F=m<!.k3&!.k3&!.k3&!.k3&!.k4G!"BQ0S_MuWioJqHah:dnR/hg=JcLB&JcLB&JcLB&JcOI( #6bSU-UMd;Yl;<F^;%Cq]tCM7GZ-[O'EuASJcLB&JcLB&JcM&9JcLB&U&YK&$5=I:>C`?KXST%(Sq:H> /fYB)q>c*IJcLB&JcLB&JcLB&JcLB&r;[Z;$5=O<>^i0BWi)erW2HYqRXo$=0-1W,T)aHCJcLB&JcLB& JcLB&JcO:#%Ke55e(`^;k2G.Nep/tV^&W`bJcLB&JcLB&PlQC9JcMMF#Qk5;$m\r2Wk88Dr4`KDUlB=j 2B2qt!.k3&!.k3&!.k3&!.k3&!.k4L!!r`1#72>=Ega&4qQ1!uOEb"r.MW)Y!.k3&!.k3&!.k3&!.k3& !8.>]!sAi8*(P"7WN)nqX/l6"#GI3&>sg+W"N(4k!.k3&!.k3&!0mP9!.k3@!!a<Vaj]#$k2u[("/Aa8 "SMhI!.k3&!.k3&!.k3&!.k3&!;um*!<WN4)b+t>YI(jRr4`WLXdt;b8LOuL!s/Lu!.k3V!!NB)!sAc1 rW<3'!<M!VJcLB&JcNso#lt,2"U>25!s&G>!.k3&!8.>[!WrQ0'fTNTStrBfr2g@,Rtu)e3ZeV0!s/MD !.k32!!30&"9&H&!s/N*!J1<'!.k3K!!rZ."9\l2!s8Q)q#H!HJcMMF$N^G6#8K:.KU\[3Wr/n*VO3*Y =?I]4"9S]+rW%NMJcO@%!W`?)r<*6*!s/N)\H%3]JcLB&mf3Xp!sA`1"9\f-!M0:C!.k4F!!NQcJ"XU3 r8n-jE]Y*>S,e-@JcLB&JcLB&JcLB&JcOI($NU>4"r'"&K:T!J]DTDO]<eN.K3gGM#6b21`rL\kNW9Ff !sT)?$4$k@"9S[V!.k3&!2ff%!<ic<&I\sLr;lcqJcLB&U&YN%!sA`;.nji:Q_aM\$`p.lMJc*<%g<(< !r`1O!.k4%!"/i1":#2;"pG,4!s6"5JcLB&JcP6>#Qb,5#n7.E"9SQ'TE'QDJcP`L$N^D5":m%YDMFFL WVie)W1]E3DGD_n"U"o/UB#lGZ2b76"9\r8#6k>7"9S_]!.k3&!.k3o!!iW/#71hG#6Y,-!Q4ti!.k4! !!EorA<t@8joi_jB0d0G!.k3&!.k3&!.k39!.k3&!29H$!<E9)%4F_[Kq#-Rr4`WQ\[8Q-F%.,X#mCD0 !.k3&!7h,X!X8uB&e>E[$3gV8\H%3]JcLB&mf3Uo#7VCf'b(BMrW/YlJcLB&r;[3+!WrN2+#m5<L7,(> XUD51Un33F2\cT&"9P=uJcN(V$N^G9$OmIM#R:J8"5Ns/!.k3&!6Y?M!X/lA'bCZT!s/N)_uPAhJcOI( $NU;2!sp)2<c<YWVu3S'WhuJZJmUPR#mUS7`rL\kNW9Fg":,>D$4."D"9\gY!.k3&!2ff)!X/lA'bCZT !s/N)qZ)3JJcM8?"9K2pDRo]-"kpY_Ikh6'!.k3&!.k3&!.k3&!.k3&!.k4K!<*!(#TGKiB8NCkr4i6E #eR'i<[A=d"p:V#JcN(V$NgYE'c@`"&.AmM"5Ns/!.k3&!6Y?M!X]S_-ls$/!s/K(_uPAhJcOF'rW*6. 'dl%AEf[*oXU2/4QZ#;3%1!(=`rL\kNW9Fh"ptnU&.T'S#6Y-\!.k3&!2ff)!XB2N*Yf.i!s/N)qZ)3J JcMJErW*6.'dl+DEfHgkWsbl)Wi;5$7i`$F"9\W'JcLB&ec6'["ptqV&J#9V#6Y.>!.k3&!.k4>!"/i6 %i6<(%gW7=!WeqoJcLB&o`,'q(f%%-josVre&c&6SH+6AJcLB&JcLB&JcLB&JcO=$#6b_b1er4\YPu3: ^;%G^]a(d+DEfHc%0X]OJcLf2$NpqX-nZnm*>]7o"bH`+!.k3K!"/lA,;r(N,SL=`!s/9!JcLB&ScB$! %3$c\@"OuOrN-(&riHEtIp"KG'F=pA!.k3&!7h,X":>ha,9Id=&ISgH\H%3]JcLB&mf3^t%3$fX.N8j# !s8Ut!.k3&!;QU#":lJ$5[o85WrAq*X/MtpW1/6>1*.,9"JYsK!3uS4":>hb,Tn!@&I\pJh#N$,JcLB& b5_nP%3-o\.i]'&"9S_D!.k3&!71]U"u(P\gYUoOiniMGJgpl>!.k3&!.k3&!.k39!.k3&!1j0-!t5tj 2dqQ?\@TAe^V@Lr]sF>`?plRa#Q=^T!.k4%!"/uH.R-Hh2D-9o&-o`GJcLB&JcP6>$j@V1=E.>#+:/2R !WetpJcLB&q#Cd)#SA"+:NDZ!X0/Q%XTtY[DGE&6'Et63JcN(V$Nq%a0f_!>,9%=)"l001!.k3&!6Y?N ";NIW>sp4Z"p>#0!Q>%j!.k4$!#PhF&KE?!Efd/rWi2tuW2QVfM/H-J,8:=%!.k32!"/oA+>Q#6/0l5M $jD4_JcLB&VZ7,.'eMp^74f;\"9\c,quD<KJcM/<%2`9U`m``*jPetOR7.ba!.k3&!.k3&!.k3&!:'Ub "do@B!.k4H!"/l5$kadZH(2(I\\7sV#emgKQ[iR5,n$IJJcN(V$OS%==Ct`25r0f&$Jb]6!.k3&!6Y?N "t38kP]fkR$jQq<!Q>%j!.k4$!#Pe@#Rq_9@u-eUWiW>)Y-+n+R=]3N1`H_@!.k32!"0#K/k/c14YeE) &I3mfJcLB&VZ7,.*^4%_?p>b>"U"o.quD<KJcMAB%0H_>%idfEL7P*;WiN0!W!B2bJSS.A*=2WEJcLB& ec6'_))"KZ8O#$[*>&Rf!.k3&!.k4>!"8uP5\#7P5p?U="9S[u!.k3&!:p1##WdpE`7sG8io8q%B/'ph !.k3R!!!)O!.k3&!.k3l!!3BT#/1(h!.k4$!"/f/!sK5qB90*t\@haS#J7:?Rt+Zs%EAI#!0.$e$n4kh Ir]'u6nfYjJcLB&JcM\K$j\V#PHBp[3"QE$!s/<"JcLB&ScB-!!WrQ5/6$n^T;\pjXTtr&Q%j'F-40YO JcLB&ec6'`+$<eB?;X'I,S^Wr!.k3&!.k4>!"9&Z;gk0_<%JC^"9S[u!.k3&!;QU&!<NB,$nYJ(Q(4\N ri6@*Wi2PQKPO.+$)7KP!3uS4#p;E;BjXe-2C94Hh#N$,JcLB&b5_qT-rbS^GucL*#Qt82`;kJiJcO*s "Tfl^MQbD+jp'o-a,s[e&&\I"!/ggY":YS4!.k3&!.k3I!!E?NFWpn\!.k3&!1Elm#:WMrR\m="r4`TO \?MrrDaG<G"Tn`*K)gK'ec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3&!;-<s "Wp$AKp/./qlL4)T9k"11_^&q!s5A#JcN(V$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+? !Q>%j!.k3u!!rfO6Y:t4S>E6cri6F,VOWlu>;R#s"9S_K!.k32!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1 /7""(KO-DC#R(>3quD<KJcM,;"q!7lMSS<6roOC8Z&3!="8i.N!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa 2[#TMJcLB&o`,7%+?j+[Q)M((rP&`R\[AZ6Io\'6%1!'6!.k3V!"02f;g=.HDHodj+V!6-JcLB&JcNso $jek3S[=l+58">/"9HIAJcLB&d/XIU(,/EqJ<cq4Y5PI0WhuDHBgj-T#mLLT!.k32!"0)X6Xt4N=\:b* (^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcM5>(BbO/:2#*>Tr=oiWiN.tU7@'S7j8HM"ondY!.k4% !"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcLB&nGj%-.pf.4ioK1_gVg%J71Gpj JcMtS!sokR"5!U*!.k3&!6G3D"?WM?"MXqg!.k3u!!rcC.R@9fS$9T?rkAiS]XkVQO)%!,)%Hhn!.k32 !"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcM5>$3Un_1.c29T<55urN-@+WgS-7 1)go7!!IoSJcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!.k4D!!`W<+>c`* L7J7A%B?J-Wi)_[GZZ^A'FFu@!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIA JcLB&bQ&+]3f;eQioK7Yf#G(5+p,aaJcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3>!"&f:(aV(O NNBh,^AbnH]`tg6HrW'O'`\Ml!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1r JcLB&o`,g2#SJ(,;L"Y3Xf\b.Y-"e,Ukr_P.i]*)VZ;;KZ2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^ >_o21>qlco"U"kF!.k3&!7:cO!soV]/6$k\rMT^srhp+&Tnd8L/05B-b5d+oNW9Fn,Xl9dB3J"l.2`GD !.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k39!"K&PE89=/io]7WgtS5\%/g0X!.k4"!!<NG$Nma9JcLB& JcP0<"9^fa2[#TMJcLB&o`,@$"q2.f:48nJ]Y2#V^B_<JNc.ZN+:S5MWW7VNZ2b7@/lR"OHu<1]1a*=a !.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!7:cR!X&f>(-ZDmWiiH#XTtkkH<NK^('sm?c2`FrNW9Fn ,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k3>!"8o3#nIh;BT8piWi2rrWs5GaH!<Na (B=d@!JUT+!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcP6>"q48Fd+dF< rT43q?6B?F!.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLB&d/XOT"UPVR5AZLcZad[G^C.ZWSV_8[ /eS6f!<LLHJcLf2$OeXdG_pfc>Y6gr%>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k3&!1Elr!X&]6&M[C9 S><0fY5PI,XIb;i>!=/6%0HY5!J^Z,!7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3 T`BZEJcPHD$j$P:#n\ppH^UP(Wi5ls$`KMMEa(dS%g)k7!NQ3P!3uS4#p_rNFD"cO4=M-Sh#N$,JcLB& b5_qU/7""(KO-DC#R(>3`;kJiJcNso"p-,qQF>0"rT47'HpJSOa8gelMZ<hc)@HZF!.k3&!.k3I!!EEd V`+bP!.k3&!1Elr!<WK2%P_(6SZ&g(^&>\M]sOf3M.SpS)?g3F!J^Z,!7h,X$nbJ'M0s2G8i.\#\H%3] JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEJcPHD$NU>4"pu\HBS_tIWr/t,Y,%JDFAjk-"9S`-WrR_OZ2b7= ,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3&!7:cT!<WH/$788VL6J1)W;Wb)WhG`8 FAst/"9\f.cN&OsNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k37!!Ncm@#VnX rT4=5UMN78!W[fPJcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!.k4D!"8l/!s8cQ6t_4BWjTP=^C.`c ['66O:EfuH!s5M'JcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k3u!"/f/ !s8]G2,nLJRATk`$EBnnN+Y<l"9\f.cN&OsNW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+? !W2qL!.k3>!"8l0!sAcI2H=^KQ(k5UWs5N#TpppP5QD]$"98LY!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB& JcP6>$jS=hL7s9,1(=Km"9G1rJcLB&mJmCl(,fg(hYlR?gVg"C7LZ*nJcMtS!sokR"5!U*!.k3&!6G3D "?WM?"MXqg!.k3q!!iZC0huP@Ts;<0^C.ch]Xb5+?nMlq"p<0OJcLf2$OeXdG_pfc>Y6gr%>"S3!.k3K !"9/mE1OA*EBb'D#6Y)*!.k3&!1!Tk!tckD=E9@nXfhT("KnbrH;4Sf#mUS8LB)o+ec6'a,=>s_B3@hg .MrK&!.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k3&!:^%+!tckF=E04hW2Q_rX/N%uVjhs.,RF_Z"02ER !3uS4#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcNmm%K[G9N8*@QjQ>FUd):DV aT-nmMZ<hc)@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!1!Tj!YH\::3)Q!])KAJ^V7Cp]X+)O"A(!]&I4'k JcO@%$OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!.k4@!"&c:)_4*YI@.(;XT#=/ XK8S#L131c'b(>I!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&blAR^ %3-oa?[S-:Wi2krW2Q_rTS-c:+;G=hcN&OsNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+? !W2qL!.k35!"K2\Bu\o_hW3YNg<Q!C#D)r-!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?JcP<@%06hP ,V`MUU:7bI]t_>]]a)$BM.]:4*Xo(LJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI !Q>%j!.k3q!#PbC&K<)hD2tNrXfS\.XfSV%OE=G[-5?g4!.k32!"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0 .pRn+L0ZMC#R(>3quD<KJcM):$3CJF*%+BsN23GQr29^tUlTU#<B)<A$&8M4!7h,X#p_rNFD"cO4=M-S \H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcP*:%M;=8ak#8,iniJFX\p&=VZ;;KY5eY2)@HZ"!.k3& !.k3m!!EEdV`+an!.k3&!6kK\!<iiC(IE,.ZFRT\^;%Fs]t(87Jn@J%&^LH/!0.$e$nbJ'M0s2G8i.\# JcLB&JcM\K$jek3S[=l+58">/"9JE#JcLB&Q2hR!":,GK1gP^.Wi`A)Xfee.Wge_GD,WA9%>Oq8!7h,X #pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcP<@%06S;%1tF'JY/j>Wi2rsW!B5f KPXUK+:Y@OJcN(V$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3k!"T2eOh&Tg iT0"WhSaFn&-C&UJcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k39!"/f0!sC,[N30It]tOBZ!kkq= #+1!K3#;SrM#`,-ec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3&!:Tsq!WrN- +A6mIUoLTqXU2))Q%NpI/.hm`XT3qQZ2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF !.k3&!6bEN!WrN-,#*3ITr+igrMp7)Tot"D:+[%Y!RUn!!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=h L7s9,1(=Km"9JE#JcLB&NrT>&Ehg=shYlR<g6l7J1(]*=JcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC !.k4?!"/f/!s9c?FdJr/\@qjU$ba'SUm6!p-4'kZ"0V]V!3uS4$nbJ'M0s2G8i.\#h#N$,JcLB&b5_qW 2fP=pRrLY*$O6e8`;kJiJcO!p$NU;2!uX1.Js)_*XSf1-WLo<'?9B23"9\hU!.k32!"0)X6Xt4N=\:b* (^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcM&9$NU;2!ua:1J<67tW;WauWhu6kO+(G"*X;fN",d/2 !7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcP'9"U6Y_KXT\7josMEJlaH, W;qMMY5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!6bEN!<E6()E1iFPG>ItrP&`R]="l<KjHPJ%1*0d !.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcM&9$NU;1!u*7VAUT]:XSf1$ XJQ8pO`*oA%1*4AMZA>/ec6'a,=>s_B3@hg.MrK&!.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k3&!:Tsr !<N<)'J)gfI#jr#rMp=(W1ocBE)%el#mUU:!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9, 1(=Km"9HIAJcLB&`;g#I-WHDdrT4:>a/FYj(<li2!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EJcM&9 r;d-9-U1^XQ`e%#^B2-_]El'QQZ5D8'at;)!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+ 58">/"9G1rJcLB&n,WFg#QbGT0h,Z)S?Ddl$EUD1TRpH,((^cTY5j.SZ2b7=,=>s_B3@hg.MrKJ!.k3& !.k3o!"9&^>_o21>qlco"U"kF!.k3&!6bHB!=/`9*\p5sJ=3G9Wsbl+Whu>;?8`T3#mA]WJcLf2$OJ(I ATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!0$s\#r$SPrT41?gWK]4N%bEi!.k4"!!<NG $Nma9JcLB&JcP0<"9^fa2[#TMJcLB&li77t(*tbAL8V]\^BhQcUOlDo*tem`!.k3V!"02f;g=.HDHodj +V!6-JcLB&JcNso$jek3S[=l+58">/"9HIAJcLB&a8cGM&K<,jE0RO&XU2/4XH@?e+;PCjdf=t"NW9Fn ,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k35!!`cA*@OX$P,eG\!NN((W2Pbn73EBW #E&S6!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcOs6!Z#%ar8n1Dio.pW &?5_^!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricJcNjl$O74],tW<MZb*oa^AYeQ]r[E;8i@k(!<L^N JcLf2$OeIVE.2e:;FE2[%"\J2!.k3K!"9,gAWj0VB/gG0"p4o(!.k3&!0I6f"Uc"`3b!i>XKMK'$E^J" I9eoa)%-HGN<"P1ec6'`+$3\@>u3gE,S^Wr!.k3&!.k4>!"9&Z;LP$[<%JC^"9S[u!.k3&!:0[n"Ul(c 4CWu:W2cepri6C+WgA*>4=_9V!<KG*JcN(V$OIq<>\RMB6oHA.$/GT5!.k3&!6Y?N"t3GtR!;U_$jZt= !Q>%j!.k3g!!WZeQH.J/iVqsBjO8&q"O@("!/ggY!t5A1!.k3&!.k3I!!E?MEZtSY!.k3&!0I6h"UYhX 3+RrGZadZ]rkAcS]s=>iE)AA,!r`4]!.k4%!"0,Z6=Y"H=@kV))@X.VJcLB&JcP6>$jJ7dKqX*&0b"En !s,(qJcLB&li7@q#7V7r;0A/!WNQ0$#cs_ZF^.0Z&H_q4ZN,RWZ2b7;)`1As;FW]"+;>+;!.k3&!.k3o !"8uS88jH(8LFfK"9S\D!.k3&!6>-J":,GK/Q6bSTVe`erMp4(Sr7\r67<EIrW1UNJcLf2$O@_/;I3<m 4>7ll$%`//!.k3K!"8uT8T0K&9.(#N"9S]&!.k3&!/gg\)d\`5bME0["m4R#8/h\f!.k4!!!*6)ZN,RW JcLB&li7)"7M)!gJcLB&li7Cq"UPSc:jJJ.Z+.LG^BhN^XeCbm73D^3!ODcX!3uS4#p;3-A6;Mj1F3eD h#N$,JcLB&b5_qT-VeiKF&+:p#6b21`;kJiJcNjl$3LD8#Tl9@KU8@3r2g@.VjiWk=Z.#t!W`>R!.k32 !"/uH/4<?)4>J<(&I3mfJcLB&VZ7,.*'RbY?9TJ;"U"o.quD<KJcLo5$NgM:#p;NEJs;h'WrB%-X/Mh] MKrAa(BX^>!KR54!7h,X#8\s\;b'#,-lim*\H%3]JcLB&mf3b!*^F1^?U,eA"U"o.T`BZEJcOp5"UHtp N4.L>josPBE^h/RXT3qQJcLB&JcLB&a8c8G-O.9bJcLB&a8cSK!<N?@4_0;<WjKG;^C.`e[]lZ`===7Q !<LdPJcLf2$O7S(7oMuE2Cosa$%`//!.k3K!"9#S6=tdZ6R<'D"9S]&!.k3&!0I6g!<N<)'JE=&Lmb(; Xo>F/Vk92l7NV^6!We>^JcO@%$O%4i3(#_^.O#W<#.X_c!.k3&!:Kmr";isoCf*#.#6Y/3!MKLF!.k4; !"/f/!Ws,j;fIJVTrS'l$`L&"S<@e\+9MZH!ODcX!3uS4"V`:E76E=U,8Ujqh#N$,JcLB&b5_qR))P</ ;`5X%"9\f-`;kJiJcNUe";X(3T[s)("l@A$LKkSA!.k3&!.k3&!.k3H!!*-4oDjICJcLc1$5+pbDi('h ]"Yqo%DTWi\[Sf-Cci==#Qt0i!.k4%!"/uF,rS"I0I\1^%L0HDJcLB&JcP6>$j7D%9k?pP*!c]M!Wetp JcLB&kPtnu,<]4NM4UcMY5PI0Wi)J===t$g"p=t6!.k3V!"/o?)_3Zo,Tdm9$3]/bJcLB&JcNso$j71j 4]4?h'a=dC!Wg7?JcLB&_uLV`,<oCQLRP->W2ckrWi)Y_ITS95#mLM5fDpL'NW9Fi%im2V/1)JW&IJYm !.k3&!2ff*";<.I<'2QD"p>&1!W2qL!.k3.!!`TC5CCK0ioC@*iRYrLLFN@_!.k3&!.k3&!.k4:!!!(g !.k3&!9aD"$m@N)E/ga)]tM.p^V.:j[%DbF.N]<2!OMiY!3uS4":Q+m.O?5W'b:WTh#N$,JcLB&b5_qQ &0`kt0d756!s8Q)`;kJiJcN^h#RD7t5$N8qWN?*$%'H_8WhbPd6Qd-S#6NNXJcLf2$NpbK)^$(:'bC`X "G-W*!.k3K!"8r;)(.9h)%?]N!s/N$!.k3&!0$s`#oP9Z>^2@-rhp:+W2Q_nTo!GO+;YOn!g!D6!7h,X ":5_]+<;=7&IJdH\H%3]JcLB&mf3au$lLHO-Q*Et"9S]+T`BZEJcOj3%KdeVZ/"3pjPnq@_l#g0XoO%R JcLB&JcLB&JcLB&JcN^h(^Lg#0i<7f[(O)c^V@Iq]Xau$DFQ?(%g1GaJcLf2$NgVB',D5n%L`XI"+gN) !.k3K!"/i7&fW)7&de^C!<N&tJcLB&N;s1f%iH]ZAVm8_XT5O&XU(qmH<E-R(^gG-!.k4%!"/l4#n@OW %13@F"9Z17JcLB&JcP6>$N^MA'cRhr#6P&0!MBFE!.k47!!ic>)C@d_LS:aIW!o])WiDq[H!30T)%$JQ !.k3V!"/l4#nIUY%13CH"9[H[JcLB&JcNso$N^PB'c[ns#Qk/1!Q4ti!.k3c!"K?"S^uQPioJtNf#(l< "4I7%!.k3&!.k3&!0mP9!.k31!"&f7%M^d3P-DU3]a_]j^V7CpYapDV7kGGXO8sk4ec5aP!sAK*"9\f/ !Wfh3JcLB&JcP6>#6=o1"pkJ;"9&=n!.k3&!9aCi!sT)D-rYPcY-"f&XTtJTD,<2:&-K9>JcN(V!W`B* qud*(!s/MZ!.k3&!.k3o!"&`/"9\o3"9S]+!Q+nh!.k3h!#PhD$4nUbH^h%8W2QbsW2Q_dLMg!N,7t%1 !.k32!!**&qZI!'!s/LT!.k3&!2ff(!<WH-#6Y/3!W`>u!.k3&!/LUY![`TDf%^Pik2bLXgP7s)MZA>/ JcLB&JcLB&JcLB&JcP!7$N^G8$7&N#UU7PD^&>\R]sO`(IU>;_"p4o-[fD![JcLB&JcLB&JcLB&JcN^h $N^G6#9,sFOeo(\XSf1-Um6IE9edIf!s/PY!.k3&!.k3&!.k39!.k3&!0$sc!X&W2*(4V(Tr+giW;Wb) W1fB(BhgE$"9S],P5p17JcLB&JcLB&JcLB&JcOd1"V=Y([*.8'jojP=?7ZMh!.k3&!.k3&!.k3&!.k3& !5njF!<WK0*("J'Uoq/=rP&cT\ZhiqGu?4&"p>#/g]2p+JcLB&JcLB&PlQC9JcLc1$3C;4";NaqH]Xhs qlL7+SrnV75pH[="9S[h!.k3&!.k3&!.k3&!.k3&!9aCj!WrQ.'f9$<O.)iDrMp@*Vji`tA4.XK"9\f- \,_*\JcLB&JcLB&JcLB&JcNLb"TflGH)fHojos_SKN'W2eGt1$JcLB&JcLB&PlQC9JcLc1$3:21";ERh G)rB%!5&0D$bWsQWf:XR'FP-K!L*S9!.k3&!.k3&!.k3&!.k47!"/f/!sB,^6XY2"Suhmm%'Hb2T:'q' /e83k"9Q(5JcLB&JcLB&JcLB&JcLB&_uL/G!WrQ9-UhKhN16dEWskr,Un!]p<A4ph"U"n^!.k3&!.k3& !.k39!.k3&!/:IU"sQZm!6>'##3*q1LM%\1NW=Y2JcLB&JcLB&JcLB&JcP!7r;d-3,<T(OPGu+j^C.`f \[\8W8K89L"p2:7JcLB&JcLB&JcLB&JcLB&_uL/G!<N</)_OTfI@$u3XUD55Wi:nf3Y`#."9R?YJcLB& JcLB&JcM&9JcLB&N;s:d!<N</*&'llI$=W/rMp@,W2cbmM.Sjb$jZt;PQ6:8JcLB&JcLB&JcLB&JcO^/ !sU,^\c(XpjP8,#Yseu)!.k3&!.k3&!.k3&!.k3&!5JRA#T"pQ>CiER]tM/Z^](nOWf(.8*>8b^g]2p+ JcLB&JcLB&PlQC9JcLW-"pPY]01fu<!2TOp!3Z='#FT^-,8Lao"-`e;!.k3&!.k3&!.k3&!.k43!#PnP +>?H)M4piGW2cnsW2HS[FA4"r%gW9I!.k3&!.k3&!.k3&!.k3&!4r4?&43&GhVmPXiniMGC`Cq*JcLB& JcLB&JcM&9JcLB&M#[_`&032fE0Cm9\\,Vh^V@Lr]s*lL:cB[6"I&n<!.k3&!.k3&!.k3&!.k43!"B&= (*>D<I@I7>XKAV-riHEsK4@+r)\*"\!.k3&!.k3&!.k3&!.k3&!5JRC":Q%g2I(WsVQ-YpX8]%'Vji9K 5qF#e"Pa!/!.k3&!.k3&!0mP9!.k3(!!*0L%!'82gYV)PiSNCD1'ip@JcLB&JcLB&JcLB&JcLB&j8]Pi $5"+.>D&]X\@]HR^BqWf[%r_'<Atp&\,_*\JcLB&JcLB&JcLB&JcNRd#m1DA&gU%dO/8lTXU;55Xe_&) ?:6:Z"Pa!/!.k3&!.k3&!0mP9!.k3-!!WQ2%21$\D?c)oVQ$MpWrAq%ToXJ+74]2WPQ6:8JcLB&JcLB& JcLB&JcOX-%MDO-[)q(bjPo.TTMcm:ZiG[XJcLB&JcLB&JcLB&JcNRd$N^G8$62NUQ`[U)^&5VM\Z_]g E_Rqgg]2p+JcLB&JcLB&PlQC9JcLW-"p+o1#8K.'"G3/>WiZ0$#d12!NI+tp*X7i/JcLB&JcLB&JcLB& JcLB&j8^"u"9\rE3+%6)TVnfjX/`1uVj`Ni?U#V;\,_*\JcLB&JcLB&JcLB&JcN@^%gFb2QFY`3k2bU_ \U6pn#2'!.!.k3&!.k3&!0mP9!.k3)!!3Qb?Nc1ZXgGb=^C.]]Y,$ta1^sNg!<JPfJcLB&JcLB&JcLB& JcLB&huEug-r"`CS#!4bXUD;-Srn.k.L?1Y!Wfq6JcLB&JcLB&JcLB&JcLB&]Dr0C-r+cAR%^PXWsbr$ RZDPf.1$(X!Wh3ZJcLB&JcLB&JcM&9JcLB&JcGoi9lcoMr8n.*Vg2>_OT9t5JcLB&JcLB&JcLB&JcO^/ #7;kMDMapd\GX)L]XbAPQutqB%giLB]E!N`JcLB&JcLB&JcLB&JcNF`#R;D2=`fLiWil9%$EBnnK4$\T $O6e9huJ?/JcLB&JcLB&PlQC9JcLK)!XKl0'j>^7R&6g^WiN2#VkKQ2@6584#Qt3r!.k3&!.k3&!.k3& !.k3&!8RVc!ua@D[c6B/k2t7*R=$ao[K(mZJcLB&JcLB&JcLB&JcNF`#mVG+9l#T\[(X3Q^C.`f\[A5e >r!K9$j5DfJcLB&JcLB&JcM&9JcLB&K`D/X'ds;M=EKV"Xf\c*XU;52VN>^h-Pd3u".0(?!.k3&!.k3& !.k3&!.k4/!!`ZB-pLgUNM6?M%B?J-WhuMODbVVr%g`BO!.k3&!.k3&!.k3&!.k3&!4W"=!ZFh/hVmJT k1e(mW)=Aa!.k3&!.k3&!.k39!.k3&!/1CS"VDj`01U)MYe@`a^VBc]#e[=*EC_`+&d=X&JcLB&JcLB& JcLB&JcLB&huEub%2L3K?@ngHXU;/2Y+C/L3@#FN"M=_d!.k3&!.k3&!.k3&!.k3`!!`W9(F;+LJXl_< %B?J-W2ckdIU5)^)%?`,!.k3&!.k3&!.k39!.k3&!.k1^!!!3XMVd4KjQ>=Sg<Oso"d8q<!.k3&!.k3& !.k3&!.k4/!!`T3%M^BrM6-]iqnEBDU4Zf>//SW)!.k3&!.k3&!.k3&!.k3&!5&:>!sT)D+%^RCXfSY- r2g4$Nc%QJ+qb(;!.k3&!.k3&!.k39!.k3&!/1CS!sT)9&0OVfQ`C%`r2U'sN,DBI,816J!.k3&!.k3& !.k3&!.k3&!87DV)K=HdhW"Iq!iS^([fD![JcLB&JcLB&JcLB&JcNF`$N^M>%j+DhS[5i;^&5VQ\>kjC ?pZ1K!s/K(j8ac3JcLB&JcLB&PlQC9JcLK)!WiK0#R_D0@u-nYX/u6$$`]VGBMLB(#m151!Ls.A!.k3& !.k3&!.k3&!.k4/!"/i2#RVA1A;6bRVlKZq$`92>BM^N,#m151!Pe\e!.k3&!.k3&!.k3&!.k3Z!!NWi PHW!\r8n*iB.aVJ!.k3&!.k3&!.k39!.k3&!/1CS!<`T4$5GX5M578\]DTDO]<S/uHs/<="9S]+S,e-@ JcLB&JcLB&JcLB&JcO^/$3C>5#7rLbFHE#gqlL7-TTOh=814oM!s/M=!.k3&!.k3&!.k3&!.k3&!5&:> !X&W2&MI()O-u]@r2U4(SWA;68LP)P!s/Ma!.k3&!.k3&!.k39!.k3&!.k4L!!F3<Fed(Vjoi_`="k&J !.k3&!.k3&!.k3&!.k3&!8mhb!<N?,%4k:qOJ/hfr4`WP\?W*#E'kKI"Tne@!.k3&!.k3&!.k3&!.k3& !5&:>!<N?+#pMQ>H]=VsqlL4*TU:771_^&q!s7N`JcLB&JcLB&JcM&9JcLB&K`D/T!X&f4#pV]BH&J,h Wr8t+Whu>PIpFrH"9\f.S,e-@JcLB&JcLB&JcLB&JcOI("U6/AH+E#7jos>CN+jgG\c@<^JcLB&JcLB& JcLB&JcN=]#QY,N4'HikVR??:$ba6c\Yt-X+:/5S!os?5!.k3&!.k3&!0mP9!.k3&!!iT.'eW$dI?UQ* XU;/2Wg7Ng('XmD!h97B!.k3&!.k3&!.k3&!.k4,!!rZ/(GA?iH]Xu%rMp=)Wi2hZDF53F"9\eA!.k3& !.k3&!.k3&!.k3&!42_/#:<WQjSe3EhV-#\?kV;rJcLB&JcLB&JcM&9JcLB&JcH&V";NCQ>^i0Hrk/cT ^V7Co]W[K43Zf(F"e5RE!7h,X!<WN5$OR.D"U"o.\H%3]JcLB&mf3Uo"UPSL$jd(=rW/YlJcLB&g].W` &0Nf$Bni7]XS]+*Y+C&A/J\m'"Mb"h!3uS/!WrQ1#R:S5"9AT+h#N$,JcLB&b5_nO"9o/A#R1D5!W`>? !.k3&!4W"7";)b5950'KWrAq*X/MtsWg\99/f,'*"QTQ7!0.$`!X&W2#R:S5"9AT+JcLB&JcM\K$N^G9 #n71G"9JW*!W)kK!.k3&!;ca+$o`dmgtq#PiS2r,HmSo]!.k3&!.k3&!.k3&!.k3&!8IP`!tH>&5\Z1U \\,Vh^VBc]#IBtM=ZRrH#f$Fl!3uS4!sfAO)&<ks$jm1@h#N$,JcLB&b5_nO$54L0*Y\ta!s/MA!.k3& !4W"G!t#ef10&O`WiiG*Xfee.XJ:Vd7kGbo#35c9!0.$e!sT)D'G1f_#mUS8JcLB&JcM\K$N^PC(*=8% #Qk/1!W)kK!.k3&!"Ao1$5OjA=*Kh*WiE"trhp+&TSI5Q/ftZ0S,e-@ec6'["ptqV&J#9V#6Y.>!.k3& !.k4>!"/i6%i6?)%gW:?!WeqoJcLB&f)Q9^*F?\2gYV#NhV6bJ4q,%'JcLB&JcLB&JcLB&JcLB&\,[?I #S.^t:jenD\\,Vj^V7Cp\>YR7=Zmu<j8ac3NW9Fi$lC6>,p4*@%giGk!.k3&!2ff)!tZV26STbt"Tni- qZ)3JJcLB&$NL54$P==BB8`[fY5>=+W0Md?7kYeeS,e-@ec6'\#ne1")\s,!$O6gF!.k3&!.k4>!"/l: (ah-e)%?]N!s5+qJcLB&g]//m"ptq_6"c%LV5gJoWi2koV36178MD+j^]8rdZ2b78#nn:$*>]D$$3p^i !.k3&!.k3o!"/l;)(7Bi)%?]O!s6C@JcLB&Z2b@C6E7iHgZ7GShVGAA-3rH/JcLB&JcLB&JcM&9JcLB& JcH2Z!<WH/$oi$gZF@BXr4`KKYbI2%;(iKN!.k4%!"/rC,;MA</LDMR$jO6BJcLB&JcP6>$j7=u7p\Y< )$U3G!WetpJcLB&g].``!sA`5/6IFrVlHi$rN-=+SrS)(5pQiR!.k3V!"/o=)(.$d,9.F0#mB&aJcLB& JcNso$j7.e3(u4U'EeO@!Wg7?JcLB&\,Zs=!sA`5/QdLoUo15kX8]+(W1/`j@RDFMj8ac3NW9Fi%iQiM .3flM&.&Jk!.k3&!2ff*";)n?:,jO6"9\f.!W2qL!.k3&!;Z[#!\BD7`7j55ro=4&KM!EmR/hg=JcLB& JcLB&JcLB&JcOO*$NU;2"tN`*U9(]3^AYeS]sOi4N+bHq"p>#/_uPAhZ2b7;(bJ*N76<4P*"`J4!.k3& !.k3o!"9#Q4^E;;4sC=<"9S\D!.k3&!4Mq8!WiH,+@U+-R\Zt]XUD;-R>Z5f1)0op!s7ZdJcLf2$O%.f 1d3fM-6<m2#(ci,!.k3K!"8uG02#eH0Gt)u"9S]&!.k3&!.k1[!!!'%!sBf<ClOdTVl9Qp$`]ndM02iS 'a+XA!h]OF!7h,X"VW+=5W:>C*u,4h\H%3]JcLB&mf3b!(GJQp9/.:h"9\f-T`BZEJcO=$"V=CIRDe(_ jos5/DFGKG^&W`bJcLB&JcLB&`rH)G]`<WaJcN7[$NU80"X6<HL7>6P^&>\R]t(JNRsIp\%grRDkQ$27 NW9Fn+#d)+<Cf;.,8CQ;!.k3&!2ff*"sur_O)[iB$jQq<!W2qL!.k3&!"8i-!<N<*))P<3LR>":XU;)( RYYN@*t&>W"/#XG!7h,X"r8^T:II2s-Q<U%\H%3]JcLB&mf3b!*'7JP>s'27"U"o.T`BZEJcOO*$NU;1 ";s*tE.jLOW;Wb)WhuGUL1Wdq$4$b:_uPAhZ2b7;(G%sO76<4O*"`G3!.k3&!.k3o!"8uO4C<>>4s1.8 "9S\D!.k3&!3lM-!Z!b0Wo!^:"l$_VE&n?c!.k3&!.k3&!.k3H!!3?K"SDbH!.k3&!<3&u!=/cD0M,l1 T<Z*.^C.`f\[AGsAN1S@$O*1'JcO@%$OS1IA92?c8N\I@%(Q@i!.k3&!:Kmr"ta&5U4Z]*%1*4@!MKLF !.k4*!"/f.!Ws#[3`BsTTWJ'n$EgD+R<VU\'Fb<N_uPAhZ2b7;)`1Du;b&l$+;>+;!.k3&!.k3o!"8uT 8T0W+8LFfK"9S\D!.k3&!4Mq9!<E6)&LKV>Di($`rMp=)WhlGTG>p..%gW=%!.k32!"0&Q2H*s^8N\[L 'FB?kJcLB&VZ7,.,>2s6DG)>`#6Y,0quD<KJcLB&p](Eu'gdl7rT4=@d(lSm*Whf2JcO4!!<rV3!.k3& !.k4;!!3m-&Xi]O!.k4'!!iW9*\K`pOKH4o^](nO[$u81-5mF"_uPAhZ2b7@.o15=G@t#I0cph[!.k3& !.k3o!"9,iC6l)gCHN19"p4nF!.k3&!42_2!X]Ye10Ammr2g@0XfSV"Lgi@a'FP'-!.k32!"0&T5$i,9 <(8eo((#QmJcLB&VZ7,0.TV+mIon<4#6Y,0quD<KJcLB&qu@$)$5XsE=F-@7WrB'uW!KDsL134c'FY,; !.k4%!"0)W5[SD<<C](t(C@VPJcLB&JcP6>$jJ.^J=M'j0F\9j"9G1rJcLB&df9LP,]_Z#roOFEhV?k\ 3X<D"JcMtS!sTAC!n[L)!.k3&!6G3D!\T6X!l"_e!.k3X!"/f7&frK%JYTcg]tO?Y$+Zpi@6Q1[$NU:n !.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&qu@!(#7VCi6u7paq5jt' PB'GQ+;>(^!MTRG!7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcOF')?L-S (Ec._NM`_SW2co!WiDqXE`"P8'F4^?`W1SjZ2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq "U"kF!.k3&!3Q;2&5KpigYV#Rk2bU@=r?9"JcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3&!;lg* !<rrH*(4b2YI1pR^AYeO]WR]Q?puLWrW/boJcO@%$OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&" &dnpI!MKLF!.k4'!"&`0#nIb.>_&ECWr&n*Y+12[:,X1'!W`>B!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB& JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&ZiCL8":5SR2I1d#U8=lgrMp:*R=f3M2]rP2!<MKdJcLf2$OJ(I ATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!.k4E!!WQVI&Oj3iVhm@bBGiRS,e-@df9IV )@HYS!.k3&!.k4<!!EEdV`+aJ!.k3&!8%8[!<WQ8%l.CBU91f5^&>\O]X+Q'JmLJT!r`5A!.k3V!"02f ;g=.HDHodj+V!6-JcLB&JcNso$jek3S[=l+58">/"9HIAJcLB&ZiCI7!sJr<-VA69S>E7_XTkSdJo+15 ')hq4!UKf<!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&JcP]K$ipJ7#mr(T DN(!WVl9Qp#HFJ\JS\(6'E/%5!Mf^I!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3 T`BZEJcO0u"VF@LS]'C`joj8'?83#-!.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLB&ZN(@6!sAcP 88s`dY.21D^C.`cZ`9RA8g+9<!<MNeJcLf2$OeXdG_pfc>Y6gr%>"S3!.k3K!"9/mE1OA*EBb'D#6Y)* !.k3&!.k4J!"/i1"9]Z(>^_['W3#s"$`pA'R>>?7(]sg@!Mf^I!7h,X#pVfIFD"`K4";'R\H%3]JcLB& mf3b#.pRn+L0ZMC#R(>3T`BZEJcOC&$N^D5"<9L/H]=GiW;Wb)W2?5RL1ECa!s/N)a8gelZ2b7=,Xl9d B3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!3H5)"=?ieYMB*="l-eTCc_pb!.k3/!!<NG $Np;,JcLB&JcMVI"9^fa2[&gSJcLB&JcPNF#8]:%HBY,1]`#SQ]tCn_X,L@;$3p_:U]>uHec6'd/lR"O Hu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3&!7LoR&M$C`I?C;,Y5PI0Y,\:cG"a+c"U"qK !.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&Y5f@N/4jH$O.`MOWiE+u WhuJUF\X1f"U"qo!.k32!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1/7""(KO-DC#R(>3quD<KJcLB&oDf@. -WH;\ioK1_hU&s6DB#/IJcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!.k4"!#H4q6<no)XLc*Y^;%Cq ]=G/4E^h5h%L0uSJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k3S!!`rS 1eMD4R]H@g$EUA0T7UB-)%d2Yli;V;NW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL !.k3&!;?I0%3IE$B7Q>HVl6PoW2chpS:P$,)%d2YU]>uHec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)` ?&#&+?8;rq"U"k"!.k3&!7(WT$SZP>h;7,OiS2JbMD5=Q!.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kq JcLB&Y5ee9)CdjWKql0W]aVZj]tM(eU4lr9.2iW]!.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=p RrLY*$O6e8quD<KJcLB&pAc!8'Hf#'Dih!#XKAY.XfS\'O)I`F*u#!V!.k4%!"0)X6Xt4N=\:b*(^[_Q JcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcLB&df9X['Hf)+E/pfqrMU($WiDhRDb_r.'FDh\JcN(V$OJ(I ATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3N!"B]?[+jBmio8eJcDjSOk5^)6MZ<hc )@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!.k4F!#PnK'd#keS$]iA]t_=r]tM"WQ?cLp-4p9T!.k4%!"02f ;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcLB&df9aY#nRk1@"tJ[XKAZ(XU(tqJ7D#% *";qj!.k3V!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&Y5fCB#n[t4@>(>S Wi)eqW2QVlQ@EF80cgc)m/V_<NW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3& !:g+""ui4#gYLlMiSND1Cb,jb!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcLB&df9aX"U>Ad@#hG# ]=koV^BhNYU5a1k1Dg2m!R(Oq!3uS4$nbJ'M0s2G8i.\#h#N$,JcLB&b5_qW2fP=pRrLY*$O6e8`;kJi JcMtS$3LD7#9uuiSuSlnqlL4#O*Fts-kZR_!<MZiJcLf2$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21 >qlco"U"l(!.k3&!.k4F!"/l3"UH>LH((V/Wi5ls$`]hYG@*`d'*849!N6!M!7h,X#p_rNFD"cO4=M-S \H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcO$q"X&3$a4fDKjojG$9caMX!.k3S!!<NG$No#]JcLB& JcNmm"9^fa2[$kqJcLB&Y5eq3!sJoT:3`8.ZFR[I^C.``X.>2c7O/0A!s7rlJcLf2$OeXdG_pfc>Y6gr %>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k3&!.k4F!"&c0"9f`.@u-PJWr/t,XJ_JDG??dC"9\f.VuVDL ec6'a,=>s_B3@hg.MrK&!.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k3&!7LoU!X&W0*'e(iQCk%QrMp1% UR$^[=?7H$"98MI!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLB&W;m). 3c'qlg\p7<go>6X*<PL+JcL]/!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3&!;?I$!<WE-)a.S]RAdI) rP&cS\[/B2Jm0r<$3gS5W;qMMec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3& !7LoT!WrN-'e`=!KU&A1XUD/)RZ2/U-4'n[!s-XHJcN(V$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7 UkW/0%1!+?!Q>%j!.k3S!"/i1"9]Gn:i:lJTrS'l%&g(tQ]#ZQ-4'n[!s.olJcLf2$OJ(IATVQg9fsjB $%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!.k4?!!Elk?CBCCjosV[R;b\.U&]cFdf9IV)@HYS!.k3& !.k4<!!EEdV`+aJ!.k3&!7LoU!<E6(&h?F_JX`gSrP&cT]t(YWQ>\u$%1*1=blE=qZ2b7@/lR"OHu<1] 1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!3ZA0!<N<)%3RT-CkeJWXUD51W1STD0b+Ko"9J#m JcLf2$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l(!.k3&!.k4F!"/f/!WrrW3`KpKRAp.c %&g2(V4<$>1(OZr"9GJ%JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF!.k3p !!E?72g<CBjp'eu`35%L"31Cn!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricJcMhO#7DM*7;%RV\bj,K ]tM(RIn^pt$jHb&!.k32!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&o)K"$ 'dP\:G*As(XUD;6Xfde#4VeP7"9PP&JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+? !MKLF!.k3s!!`cE-9"qIOJVrV%BHP.W2HYVBg3@D#m:=S!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso $jS=hL7s9,1(=Km"9HIAJcLB&VZ6f#)d:&Vj9Oi0iniM:<"8-nJcL]/!sokR"8i.N!.k3&!2TYu"?WM? "SMhI!.k3&!:p1-#S\L<;0eY:]Y2"m^V@Lr]W.$-5:mlb!iZ0O!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB& mf3b&2fP=pRrLY*$O6e8T`BZEJcO*s%0d=\-9u-tUTU]"Xf\c*XTt8><\Yg7#m/?OJcN(V$OJ%F@ru?d 8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k3O!"9&B)C@d_KV,9EW2QcrW!KDhGZQXF('t'4 !.k32!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1/7""(KO-DC#R(>3quD<KJcLB&mJm_'30DD<gu7DTiSN.% +p+P?JcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!.k3s!"/r='d#PNNN0Ft]Y4<Z$,4*WSqCQE/f"Q6 !.k3V!"02f;g=.HDHodj+V!6-JcLB&JcNso$jek3S[=l+58">/"9HIAJcLB&WrNJ0#nRk)<-Xh/Wil?' $EgM5T8@G_3?o+<nGn.@NW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k3&!:p1- ":5VU0NE@_USXugX/`+sWgni^;`c6:"/u9P!7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC #R(>3T`BZEJcNpn%K[_bWkd!;k2bO\gP8!+a8gelY5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!36)- !sT)A-rPJcYdCsSrP&WO[AfUKAO.FAnGn.@NW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&"&dnpI !W2qL!.k3&!:p0t!sAi8*^OItStrCbXU2/4VO*!T;DK!jW;qMMec6'a,=>s_B3@hg.MrK&!.k3&!.k4> !"9&^>_o21>qlco"U"k"!.k3&!7(W^!sAl9+%0e!S"ZaYX/`1uVkTH/DcAP0"O-pu!3uS4#p_rNFD"cO 4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcMVI%h(m[Vo7?PjQ,=VW+7e$!q$&?!/ggZ#oX0R quD<KJcLB&V#UW$4/Y"?p&K[EJcLB&nc8Xi#8KI@Pc1gr^&>\O^:CSMTmouh"fVKR!7h,X$nbJ'M0s2G 8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEJcO'r$3://&2@=;QCk.Xr2g4(Um[0U6QZHU!.k3V !"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&WW3A,!<Nig>(2[*VQ0Tq#cOYo QATBF+9_37JcLf2$OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!.k4<!!NHS@#)#@ rT4:B`0P4/%Aj,W!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?JcNso#7rUjHBb50]DTDO]XY5HO(^Wh $3gV6d/\auZ2b7?-:VZmC0XIt//o#R!.k3&!.k3o!"9)c?&>A3?Si6""p4nF!.k3&!2ff&$RS;RIup;( Y5YO3Y-+^rR<_aa%L3+>!qcPF!0.$e#TPa%@TH&`0d7><JcLB&JcM\K$j@nLFHLN:.LHC`!s/<"JcLB& JcP6>(^q`]Aq#f2W2Q_rX/N%pSX+M$0FnEl"9P\*JcO@%$O@e5<b#3(5;FGu$+U%f!.k3&!:Kmr"XQlb O)RiC$3p\:!MKLF!.k3l!"TDd;MrNSjQ,I_cEE1C+p,pfJcMtS!WiT.f)UC&JcLB&a8c8[<u/LMJcLB& VZ6u2,<oFXPc;1,rP&`R]"#);H;Gt+&.&I3!.k32!"0)T2Gmg[7m/RO'afNmJcLB&VZ7,0,tW*9E(VPf #6b21quD<KJcLB&mf411)_jooJ![1;Y-+n/XK/:qLh/dj&dnmGXT3qQec6'^(+V[F6T?_G)\<7b!.k3& !.k4>!"8uL3aHu74!+_3"9S[u!.k3&!6Y?I#ok]nAU]l@ri#gr$E'_nL1W^m'+>*Jd/\auZ2b7;(G%pK 763+L*"WA2!.k3&!.k3o!"8uN4C38;4<Oq6"9S\D!.k3&!2BN(#qBDkiSrkXjP.\XQ9,HB!.k3&!.k3& !.k3H!!3<G"8)YG!.k3&!:Kmo#SngM>(E6P]tOE[$ba6d\YkBu4=D*W"0DQT!7h,X"r8UM7R&d_,oR=" \H%3]JcLB&mf3b"*&^f9;E#[("Tnf,T`BZEJcNso$3h(a/kBc9Uogc%riHO/Y,[_0;_B.+#m8QTJcN(V $Nq%`0/kU8,9%=)"l001!.k3&!6Y?N";NFT><sbT"p>#0!Q>%j!.k3K!!`]?+>6<%M4spI%B?G+WiDqZ F]:%;'F=p8!.k32!"/oA+>>i3.jH&K$jD4_JcLB&VZ7,.'eDdY6nB,Z"9\c,quD<KJcLB&l2V;)6DNDo ioK1Vg<7B=)Zlr<JcLB&JcLB&JcP*:!!AVhJcLB&b5_kP$ks^@C6Z!:]tXH[$,4*WRWq[j-5-O0!.k3V !"/r@*%<Qk,Tdj9$O,>dJcLB&JcNso$j.+g3_VIZ'F"XA!<L.>JcLB&VZ7P:#S.\$<e$dDXf\b.Xfee. T7pc@/K>6'o`0RDNW9Fi$Paa/+<)(/%1!)g!.k3&!2ff*!t?2$4=_B^"9S`-!W2qL!.k3&!:Kmm":5SS /6@:krMTatWrAq%S:bB?/fkN+XT3qQec6'\$5F[1+<212%1!*I!.k3&!.k4>!"8r?*A0N,*Y/AV!s/Ls !.k3&!6,!K!\0/ahVmJVjPo.TLGfI_!.k3&!.k3&!.k3&!.k3&!2ff)!s]5I-s2+u\@K8cr4`TGUQ'7k 2]`5+!<MrqJcLf2$NgbM*?lOB'bLi["+gN)!.k3K!"/l;)CREj)@clP!Wi/uJcLB&JcP6>$3LG;%3J&W P,PC`qlL4$Oa(.t.hr6i!WfM*JcO@%$NgYE()[i$&.JmL"1\D`!.k3&!:Kmq!soY`.NT92"9S],TE'QD JcNso$NgP=%3S/YOJShSVu3S&ToXG)6nB,Y!WiDP!.k3V!"/o8%i-$!'G(]["pE`^JcLB&JcNso$Ng\L +=SBH$3UG4!lP(j!.k3E!!O!;YJ\`Cr8n*Z<$)85!.k3&!.k3&!.k39!.k3&!.k4>!"/i3#RheEEL!Q/ \@haS$b<F4NGqTA$j-S5!O2WV!7h,X!s]5I'b_/g$j["=\H%3]JcLB&mf3^s#n\+$)A3AZ!W`=p!.k3& !6Y?L!X&]5(,fHKR@pPVXUD/!Mg/Ji+:&&O!WggOJcN(V$NgP=%1j!Y#m^_<"5Ns/!.k3&!6Y?M!X9)K )\`_d!s/N)_uPAhJcM\K$N^G8#o>R-I[-J$Wr/n*VjWBc>sBG<"9S]+q#H!HNW9Fh"UP\O%h/gO"p>$[ !.k3&!2ff)!XB/L*#&he!s/N)qZ)3JJcLB&kl:ki.qagGf)4Y5\T^@]"KDHR!.k3&!.k3&!.k3&!.k3o !"/f0"U5]">^i';ZF]tK$bWjKUPWJ>&d8C?!S%1%!3uS4!<`W7$jm:G"pG)1h#N$,JcLB&b5_eK"UY\O %137?rW0q;JcLB&VZ7)+!sA`<.S4?,PG,&TXUD;-S<.bf.h)Ua!s/2tJcLf2$N^G7#7(P="U"r1!eLE( !.k3K!"/i2#71hG#6Y)0!<N&tJcLB&JcP6>$N^D5";!(VBnDG<Vu3S'WhGi@E`+Ft"9\f-YlK@Uec6'Z "9f&;#R:M9"9S_9!.k3&!.k4>!"/i2#71nI#6Y)0!<JhnJcLB&_uKoK10TaYr8n.*UNKBMc2`FrJcLB& JcLB&JcLB&JcM\KrW*9+$n"JUJsiXKr4`WQ]=>5>G=EAS"Tnf$!.k32!!30%!rN-#!r`4P!.k3&!2]`% !<WE-!s8T*!Vl_I!.k3&!:Kmq!<E6'#TPa$D1n=WqQ1((UkrP=&I&@?!jM`W!7h,O!<N?#"9&?%!P&2^ !.k3&!:Bgm!WrN-!s8T*!M0:C!.k3o!"/f.!WiZL2cOUFQDXS\$`L&%Tnd):&I&@@!n@:&!3uS+!<N?# "9&?%!Sma-!.k3&!6P9B!X&E)!s8T*!Q"hg!.k3D!!E?72/K`!josM][%KVgo)O@BJcLB&JcLB&PlQC9 JcLB&lMq=u)_t*$M5%Aj]tV7rrk/TLWJ4S+'b1KOYlK@UJcLB&JcLB&JcLB&JcNgk#6bhi4B6E^V>@;# Y,mt/80AHN"p<BUJcLB&JcLB&JcLB&JcLB&UAu,7'du7IEf?]iW2Q_sW2ckrP]02:&IJ^Eq#H!HJcLB& JcLB&PlQC9JcLB&k5Ytn(eU@ThVmPXhV6N"@MZ!EJcLB&JcLB&JcLB&JcLB&`rHPP'-f>/FdB2C]Y2"n ^AbeNYEj3!0-Cl2eGt1$JcLB&JcLB&JcLB&JcMPG#QtVV.R%6jS?Dak$*:;$J6k2\((CEB!.k3&!.k3& !.k39!.k3&!.k4:!#PhL*%=-]J!m=:W2QbqVlHbcIpY5_(C^MP!.k3&!.k3&!.k3&!.k3&!5\^G"tXuD f%]'DiSE8;Hn5KK!.k3&!.k3&!.k3&!.k3&!2BN'!t5kc11#^3\@TAe^VBc]#IC+[BhC-##l+IP!.k3& !.k3&!0mP9!.k3&!:'Uo!sfDQ-VSKBWiN;)XfhZ*#Gd?"<BDQC#-e/[!.k3&!.k3&!.k3&!.k3k!#PhF %i6WhE0-rpWi)nrW2HSfMfDf\-kus:!.k3&!.k3&!.k3&!.k3&!1a*"(0J#be(s0GhVHqS8/D@#!.k3& !.k3&!.k39!.k3&!.k4:!"/f2#RhV@GFc+N]=n0X#emgLRtYQG-O[0ZJcLB&JcLB&JcLB&JcLB&`rHGJ "9o,G2e%W?WiZ0$$*LD1R>,W[2]N+R!.k3&!.k3&!.k3&!.k3&!2BN2!X&]6'KT`ZTr+cgX/`1uW2>l6 Dc\t@#l+IP!.k3&!.k3&!0mP9!.k3&!9F1k#<n]ca4ob;jPo.,DDr:3XoO%RJcLB&JcLB&JcLB&JcNgk $NU80!t7"tNiTCo]_oMP]<\B)J6XlC!s8Q)f`6U(JcLB&JcLB&JcLB&JcMPG$NU;1!sgASHC1>'Y5>=. UQpRL8LP#M!s/N%!.k3&!.k3&!.k39!.k3&!.k4:!"/f/!Wr`X<-ab!V5jHo$`Tb]KPO4/%0H\6!OVoZ !.k3&!.k3&!.k3&!.k3e!!NEHBo9+@r8n.(O^9sWdK"k!JcLB&JcLB&JcLB&JcMMF$3://$7SbnPG>=l r4`WQ\?MoqE(1rY#R(;.!.k3&!.k3&!.k39!.k3&!.k49!"&`.!XBf2@"+0.Wr/t,Y,IqWI9\ZG#R1D5 [/bdYJcLB&JcLB&JcLB&JcNdj$NU;1#9Z9?I#XVmWr8t+Whl2JHsJ]J#mLM6f`6U(JcLB&JcLB&JcLB& JcM;@"U6AMJ%aqAjos5;KO-#/pAfdFJcLB&JcLB&PlQC9JcLB&l2^ea#6l82=E]e%[/@ZH]t:e\U4QN# 'b:TQ[/bdYJcLB&JcLB&JcLB&JcNdj$3://";WRY@!e$3qlL4,W2#Ai7jAQQ"p<NYJcLB&JcLB&JcLB& JcLB&U&YQ%!<NB?/k9ArO.iTPWsbl)V4`c`8L+lT#6au*JcLB&JcLB&JcM&9JcLB&JcOg2"9p&OVr[g= "l%)$P=cCi!.k3&!.k3&!.k3&!.k3&!6"pE!<E<:-9>"KR]u_)$ba6d]<@E64X(XM"k`m-!.k3&!.k3& !.k3&!.k3E!"&`-":cD'5\#M?Y5,1)Spa]o)%d/Xr;_ELJcLB&JcLB&PlQC9JcLB&kl;(l!<`oS/ja-% S>`IeWsbl)Wi;G7=>1U)#m@X9JcLB&JcLB&JcLB&JcLB&^&S9B2N$MTroOFAgXaJo-N_ctJcLB&JcLB& JcLB&JcLB&T)])u$l(!B@>q5c^&,PL\"A%F0d@A;r;_ELJcLB&JcLB&PlQC9JcLB&k5Y_h#S7k$:Nr6+ XT5O%XTtb^B0[g`%gB?@JcLB&JcLB&JcLB&JcLB&_Z0oD#n\((;0S?)W;`h(WiDkOB0msc%gCVdJcLB& JcLB&JcLB&JcLB&R/dC2Ctmh'ir8'CjQ*F3%/9gS!.k3&!.k3&!0mP9!.k3&!9X=i!XK;Q,uAoZ[(3i_ r4`KIW/u!s3[,"3!Or,]!.k3&!.k3&!.k3&!.k3g!"&c3$P==BAVm4_Y5>=.Wg8!;5qNr[!W`>W!.k3& !.k3&!.k3&!.k3&!1s5t!X8uD*C4:mTr7miri6I-VNZ=46nT>`!W`<%JcLB&JcLB&JcM&9JcLB&JcOa0 "q!Sm\]`agroO@E]jN)hYlK@UJcLB&JcLB&JcLB&JcN[g$NUD<%N%EENN'.k]_oMM]<IuhF\sh*!r`5V !.k3&!.k3&!.k3&!.k3&!1s6"!X&`8&i!C2Q_11YY5PI1XIbDt?pQ%I!WiB'JcLB&JcLB&JcM&9JcLB& JcOs6$j$P:$550rGa4epWi5ls$`KPQH!s&e%0?S3!P&2^!.k3&!.k3&!.k3&!.k3a!!WKHA;@;1ir/!B a+Qu+#1`d+!.k3&!.k3&!.k3&!.k3C!"8l1"9o8e;gOq2YdqIG^C.]`YG71p5SsS)!<IcPJcLB&JcLB& PlQC9JcLB&k5Ykj!sA`4,=?$sPb4uQXU:ttOaC1c&d&1:!P&2^!.k3&!.k3&!.k3&!.k3g!"8l1"9]#V 7:q49S>N7`Wsbr'RZD_r1(s`k!Wh*WJcLB&JcLB&JcLB&JcLB&QiI9s2dD6RhYlR?eua=!+p.WAJcLB& JcLB&JcM&9JcLB&JcOg2#Ql/7AqleU[_;XS$ba3_[%r7L+9_iL!P&2^!.k3&!.k3&!.k3&!.k3c!!`TA 1/i.IR&Bh`$EgD*O_d5t"9S`-h#N$,JcLB&JcLB&JcLB&JcM8?#Qkl"<,dMUUT"-l$`C#%ToX"U(BajC !eLE(!.k3&!.k39!.k3&!.k4/!!NE>3,,DLrT4:>bI3sC&@2@g!.k3&!.k3&!.k3&!.k3c!#PeR0MQ;9 SZoc?^;%Fr]XkVSNb13e&IScu!.k3&!.k3&!.k3&!.k3&!1Nrn!tceA<c<kfriH1'riHL-WLA-3.hW9s "G-W*!.k3&!.k39!.k3&!.k42!!iZ=-9kRNLn(LEW!o`*Wi)_\GuQ=.%1!*I!.k3&!.k3&!.k3&!.k3& !4r4A!Z"(Wf&#BFk2+\/Z#CfefDpL'JcLB&JcLB&JcLB&JcM8?#QbM\1IlDGWOi)B%)9Ni]t:S>Gu6:@ 'F99jJcLB&JcLB&PlQC9JcLB&irB>d$Q1?P>C2^;qlL1-XJ(D\5pdH[#.X_c!.k3&!.k3&!.k3&!.k3c !#PbE)(7ONH'P;-Vl6VoW2cefKP!Ru)@m&.!.k3&!.k3&!.k3&!.k3&!1!Tp"!V9qgYL`IiS2i%O#RID !.k3&!.k3&!.k39!.k3&!.k42!"Ar8&fiB!J"jHc]tM1qrk/QHUl9+^1a!4;!.k3&!.k3&!.k3&!.k3& !5ALN!X9)L+%'b&WiiG*Xfee-Xf.A+=?@uJ#i,K4!.k3&!.k3&!.k3&!.k3?!"8o6%i-9VBoJphWi2rs W!KE"O*=\g.2N;B!.k3&!.k3&!0mP9!.k3&!8RVb%8+(UgYV#NhV?kh<uh@M!.k3&!.k3&!.k3&!.k3& !5ALA!<WN5$p&<p[(F#br4`KLYFC/W7k52-!.k3&!.k3&!.k3&!.k3&!1Nrs!<WH0#q]>6Uo^`#Y5PI- Y+CGe<&c!0JcLB&JcLB&JcM&9JcLB&JcOg2$ipG5#73"eJt]-CW2T]r#cannL2L!P+q;'_JcLB&JcLB& JcLB&JcLB&\Gug925eLDguA=q"m!jS3YDMJ!.k3&!.k3&!.k3&!.k3&!1Elq!sAf6/R*q*YdM*VrP&TM Z_s.??T];1"Tni-L&d56$N^M>%h]B]$jm1A"+gN)!.k3K!"/f4%2Bis%1!%;!<N&tJcLB&JcOd1$3LD6 "sZ]XP+JPPqlL4$P_*[F/enKk!s6.9JcO@%$N^G9$OmIM#R:J8"1\D`!.k3&!:Kmq!X/lA'b:TT!s/N) TE'QDJcNLb$NgM7"sZcZOIMuCW;Wb)Wh>N*CJHPu"9\f.i;eH0Z2b76":,>D$4."D"9\h_!.k3&!.k3o !"/i3#nRg^#mLJ5!Wg4>JcLB&PQ1k%=G3WnhYlR>es9Pp&,lQ\!.k3&!.k3&!0mP9!.k3&!9*td!WrQ/ ,=ZU4Trkf;rP&`R\?MltG"sCl#6b4C!.k4%!"/o<(aLRW+<)%+$3[m>JcLB&JcP6>$Ngq`1.*c?&d8@> !MBFE!.k3b!"&c0"9]Z&>'Z'sVu*S'Wh,H,?p5P8"U"qd!.k3V!"/o9&fVr4()7Ag#6`i_JcLB&JcNso $NgbR-T!.f%0Qb8!lP(j!.k3>!"/i1"9]]*>Bl$nUo=6m#H4MhP(7",*WlZO"9XAYNW9Fi#nn:$*>]G% $3p]c!.k3&!2ff)!t6%q2C9:N"9\f.qZ)3JJcLB&g].K[,"?^Wg\p7<gU)W=0F"udJcLB&JcLB&JcLB& JcLB&^&SNA!WrNB1fA=PU9_K2^C.`f\?i/k?nr9%#6WobJcN(V$O.=o4@VIi/0c#C#2K92!.k3&!6Y?N "<06sDG`;5#R(;3!Q>%j!.k3>!"/f/!s95e6!\\pTre0o#-Ou%QZPtM!t,A<",6f9!"/o@*\K?(-mBTE $Nu%]JcLB&VZ7,.'e2LP5V!QR"9S]+quD<KJcLB&iW'>e!WrN=.7@KdN1R'JWsbl+VP'/q:ac_Y"U)L= JcO@%$Nq%`0K:a7,9.C)"M"Ma!.k3&!:Kmr";NFT>!abV"p>&1!MKLF!.k3[!!EHG8rqa*josVb[$G/> gAlg*JcLB&JcLB&`rH)A]`<WaJcM2=rW*67,</M@Q)q[s^](nK[@;2%!uDOV"bm#;!"0)U3)a<f8O"pS 'afNmJcLB&VZ7,0-;8QDED7nk#6b21quD<KJcLB&i;iiX#7DJ%5@/l/Y5PI1Y-"h/VMAJ5&IesJ]`<Wa ec6'^(+_gL763.N)\<7b!.k3&!.k4>!"8uM4CEMA4Wk"6"9S[u!.k3&!5/C3!=&rO/O<`mQ`C"b$`L#( WhP/R1(as$"Q9?4!3uS4#8\s\;F`i)-QE^'h#N$,JcLB&b5_qR*^4"Y?9]P="U"o.`;kJiJcLr6!sU8p e,AD6iniG=W&Ot]JcLB&JcLB&JcMSH!X9nRo`0RDJcLB&h>dcg(aq@LKql0W^&GbQ]tLtOKj-8V'ahVS JcO@%$OS.F?uTUU7li%9$b67h!.k3&!:Kmr"tNf-SUXcr$j["=!MKLF!.k3^!#GnR+"U''O/]4_Xfee/ Xf\UcDb28p&-q.oJcN(V$O7V+:0^U`3%Z3d#i,K4!.k3&!6Y?N"<^0NMJ5R+#mLM7!Q>%j!.k3:!!iiD +>$<+NM``TVuWjsVurrYDbC0Z*"`I2!0.$e#TPZt>uF*P/g(i6JcLB&JcM\K$j7bECkuds-4'kZ!s/<" JcLB&JcOI(%2)F@g=tKDjPo%Q`)IAZ!.k4!!!!/-!.k3&!.k4;!!3]t%@R9K!.k3^!#PqP)CA!rQa"!3 ]tM1q^:h1\Q?Q=l-4p:<!.k3V!"0/^7VI'_>Y[L7)[tO&JcLB&JcNso$jSFlMl);;1_'is!s-@@JcLB& Q2hR%$PXR@?@ncKXK8P+Y-"h/RXeiM6n]Mh!J^Z8!"0&P2cO9h8j4sR'aTBkJcLB&VZ7,/,YW?EE_S"j #6Y,0quD<KJcLB&h>drf$ksaE?\"WCW2cerrhp+&Q[`L60HLZ(^&W`bec6'`*]d>4=A;%9,8CNq!.k3& !.k4>!"9#W:3;S;:+6MT"9\b!!.k3&!4;e:"u(_=a4fD2io/b;E%D7M!.k3S!!33-!nRF(!.k3&!6>-A )d4&l!.k3&!1!Tm":5MN1gl0<ZFIN[rP&HJZD3KaGuus@!J^Z8!"02a9Q5K%A5blM*XmW#JcLB&VZ7,2 11l`POD$Tb$3gS5quD<KJcLB&h>dib"pkbh:3)SoW;Wh*Y-+k$OF(J,.M2]q!.k4%!"0&S4BuT,;+!2d 'a_DNJcLB&JcP6>$jJ(XI@PX`/.2[c!s,(qJcLB&\c<QM#71ni:i__kV5^AnWi2krT8n2-7k5/PiW+Q1 Z2b7=+?j(F?W0BO-5R!E!.k3&!.k3o!"9&[<.(*Z<\4^c"9\bE!.k3&!0@0i(gN3,akc+?io8[S:a,lF K)gf0!X&r:qZ)3JJcLB&V#UW"-ZpU7p&K[EJcLB&h>doa!s8]N9R3,.ZamdJ^BhN_YG7D'7j%iH!.k4% !"02d;0Rb>C0O4b+:Yj]JcLB&JcP6>$j\b/R^8?"4qS/-!s,(qJcLB&\c<'=!s8ZD4Ca28UT46o#ct%t Oap^s('3CpJcN(V$O@qA@W5gX8NA17$/GT5!.k3&!6Y?N"tNi1Uk2f)%1!+>!Q>%j!.k3:!"/i1"9]T+ A;6DCVPsKp"KJDtRu[]%?9/l'LB*>7$OJ%E@W5m[904O<$%`//!.k3K!"9&_>(`K!>VQZn"U"l(!.k3& !.k4'!!NWhDNhcgroOFGgpDQ1/-WWcJcO7"!s]SJ!jhrZ!.k3&!:9ah"#cH"".K:B!.k3Z!!a9$@u-\U [(ZFQ%)'9[YG?kW/dV^b!s.NaJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j !.k36!!a)g:i_D\UosWt!j&2h#a'$s,6e8R!s+;[NW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0 %1!+?!W2qL!.k3&!87DW&MI%%LR"S3WXZ#-W1f]ADbD>\"9\f-_>o/fec6'a,Xl9dB3J"l.2`H&!.k3& !.k4>!"9)`?&#&+?8;rq"U"k"!.k3&!4)Y.(HuK)e,JD4k2+.VIodBB!.k3S!!<NG$No#]JcLB&JcNmm "9^fa2[$kqJcLB&OoPb".nOK0S$'?:rkAQL]t(KUY*<lm)\NP`!K-r<!"02f;g=.HDHodj+Us#'JcLB& VZ7,32fP=pRrLY*$O6e8quD<KJcLB&g&MEg+?EPALn(NJY5YO2Y,\:hIp4`E%1!(<_>o/fec6'a,=>s_ B3@hg.MrK&!.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k3&!4DkE%3do9Dha[XW2Q_rW2c_gRXSL"'b:TR !p0K7!3uS4#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcLi3$j%/)GK/V$jQ,:K ]qYXS.KbA)MZ<hc)@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!.k4)!!s&T0h,l9V7=4PrkAiS]XbGDJ6=NM 'ak)[!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcLB&[K%-M'dkq?G*8l- Xfee/Xfe\$N,(p/)%[&TjoBu5Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3& !0R<e#o=sM=*9V%rhot"W2Q_o#bm2l8L58e#QfnaNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`- %1!+?!W2qL!.k3&!7h,[!ZP7MhVR8QinMhuW(%<1!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcLB& [K%-K&/uufGFc+S]tV7r^:h4mX,q6h0d.&0joBu5Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA* EBb'D#6Y(H!.k3&!0R<f":Gqa3F[f?XS]+"X9btrHWi<T(^gG(!0.$e#pVfIFD"`K4";'RJcLB&JcM\K $jJ4eLnoc20b"Bl"9JE#JcLB&JcOL)#6YGM*]mkdU&M"jWrAq&Wg.m73%#RN"2Y%i!7h,X#p_rNFD"cO 4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcN%U%L5(ngtq#NjPetNc=nO+i;eH0Y5eY2)@HZ" !.k3&!.k3m!!EEdV`+an!.k3&!0R<i!sf>L0k??K]"G_jrP&WOZCZ\W7P5GZrW/#ZNW9Fq/lR"OHu<1] 1a*<[!.k3&!2ff*#rcgo[$u&"&dnpI!W2qL!.k3&!87DZ!sT&A-W,/\X02<$#GHuk:H'L1"TAG@!.k4% !"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcLB&[K$[<"pkef;g=b/WiE#rWsGYq LMfsM,S:1Y!U0T9!3uS4#p_rNFD"cO4=M-Sh#N$,JcLB&b5_qU/7""(KO-DC#R(>3`;kJiJcL`0"X8?6 d+dOXjoaJ$57rVMMZ<hc)@HZF!.k3&!.k3I!!EEdV`+bP!.k3&!.k4)!"/l5$4J:ZI%@IJ\\7sV%)''J Q[rX4,6n;Q!<L1?JcO@%$OeXdG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!.k3Z!"&f2 #72A9B8W:VWr&n+VO)mN:biml!s8T*l2ZD9Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco "U"kF!.k3&!0R<i!sAi8*^aRrS"Z^XrMp@*U6L4F;D]9q!s8T*NrY1?$OJ(IATVQg9fsjB$%`//!.k3K !"9)`?&#&+?8;rq"U"l(!.k3&!.k4#!!NcsJ"X^6rT47>W+%Im^&W`bdf9IV)@HYS!.k3&!.k4<!!EEd V`+aJ!.k3&!4Dk8!WrW4*C4@sT<#?4rP&cT\Zr*&HrVa,"Tnf,l2ZD9Z2b7@/lR"OHu<1]1a*=a!.k3& !.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!0R<i!WrQ0(,Aj3Mj^BDrN-L1Wh>W5B1*sM"9S]+NrY1?$OJ%F @ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l(!.k3&!.k4)!"/i2"9oVu<cj1aTrS'l%&g"nP(mU< ,7+JU!Wg:@JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF!.k3T!!NEC7;emL rT4:B^l2S\%-%>>!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricJcLr6$NU;2!tm:bEK$Nn]D]JQ^V.1b YEN]^%gN7?!KR5@!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&g&MK]!WrN6 ,X>XZMk7$KXUMA8Whl;8<\4[_"9S\E!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl "9G1rJcLB&[K$[9!WrQ9-:2$_M4:IBWskr,VkKT-="Xg`"9S\i!.k3V!"0)Y7:gRR>"q+.)%#+!JcLB& JcNso$jS=hL7s9,1(=Km"9HIAJcLB&MZ<k`*CYIurT4=De%)$!-N],)MZ<hc)@HZF!.k3&!.k3I!!EEd V`+bP!.k3&!.k4%!!iuX4BQciW49S?^C.`g]Xaba8K&'G"TcUCJcO@%$OeXdG_pfc>Y6gr%ClIj!.k3& !:Kmr#rcgo[$u&"&dnpI!MKLF!.k3V!!roK/k05sQE%'irN-F.Y,[Oq3YVo+"9RigJcN(V$OJ%F@ru?d 8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k32!"0)O0LoT!PGY:WWi?K-W2ckqNFt?f$3p\8 NrY1?$OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!.k4!!!NQR@'nnPro=7>gWm`3 $buao!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?JcN(V$j[\"5?r`0ZFmla^;'Z\#e[-qAN(qQ$j5bp JcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k32!!`]@+>HH'M51$OriHL. Y*X?1.i]0."-3GB!"0)X6Xt4N=\:b*(^YcoJcLB&VZ7,0.pRn+L0ZMC#R(>3quD<KJcLB&ec6Nk'-K&' CPSO^Wi)erW2Q_rQ$61Y*YSh^`W1Sjec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq"U"k" !.k3&!3H52%mH-,gYLiNhV6c0A/ta5!.k3S!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLB&NW9Fj%iZl_ Clka/]Y1uZ^V9]\#I'YE>!OMO"ciYD!"02f;g=.HDHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<K JcLB&ec6$[$PaX<=F6L:Y,qT($*:5#KkEq3*tSRp!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4e Lnoc20b"Bl"9G1rJcLB&Z2b:9$5FU==F-=1WiE"urhp+&RtG?F1*@,2l2ZD9Z2b7=,Xl9dB3J"l.2`HJ !.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!/U[[![Ma#bM(eXk2G1PgO_<lM?&P7!sokR"8i.N!.k3& !2TYu"?WM?"SMhI!.k3&!7h,X!s]5I-rtqq[(3i_rkAcR]sOW"G[*?Q#0$Xp!7h,X$nbJ'M0s2G8i.\# \H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEJcN(V(]spI%3J#UOJJnZXKAV-Xf\C^I:Gi$('Nn&JcN(V $OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k32!"/l4#n8"IClb9eWi,s!WrAq% ToaY59/%.bNrY1?$OJ(IATVQg9fsjB$%`//!.k3K!"9)`?&#&+?8;rq"U"l(!.k3&!.k3t!"KQ<VnLC2 k2bO\hOmsu$,Q[o!7LoM#oX0RZiG[XJcLB&m/R7l4/Y"?RfJ$?JcN(V$NU80!u!t@S$991^&5VM\Zhim G#'OorW2BdJcN(V$OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k32!"/f/!Wrof ?A>&IWiZ-##HFDWIUG>]#Q=ae!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB& JcO@%$NU;1!tR4qKU\[4Wr/n&V43Hl@R)%@rW1+@JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8 TnH`-%1!+?!MKLF!.k3P!!NQcKVu`Br8n-tJkd]uk5^)6Y5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3& !0.'Y!=/`;10fF%WO'57^C.Z\XeLY_3u&&+!s+ScNW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&" &dnpI!W2qL!.k3&!7h,W!<E6'$R\M_LmOq6XU:knO)e)M&-`7>!m1Lp!7h,X#pVfIFD"`K4";'R\H%3] JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcN(V$NU80!X^>KCke1IWVie)WM,]=E`4V'#6Y/2mJqh=Z2b7= ,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!/COW&3F?eao(9(ae3ZK(lSHQ!!<NG $Np;,JcLB&JcMVI"9^fa2[&gSJcLB&JcO=$rW*64-:MKtRB!dp^C.`c[',mA9Ht/Y#6W*KJcO@%$OeXd G_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgo[$u&"&dnpI!MKLF!.k3U!"&`.!XKc(;Jh)TWr/t,XK&+gKOR%_ %1!+>mJqh=Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3&!0$sc!<N</*]I&7 JsN;3Wsbr)TppXC4rb(>"TsqgNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3& !7(WJ!Y@5*[f#7kg:a&,2$_&"JcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!.k3U!<*!(#8o0a@>1G_ r4`WQ]Xt_PLgDeW'+4p1!.k3V!"02f;g=.HDHodj+V!6-JcLB&JcNso$jek3S[=l+58">/"9HIAJcLB& N<&qY#6bee2G\7OV#%2"XK%M*9ICPb#Qp7jNW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+? !W2qL!.k3&!7_)K!=/iC,reb?N1m9MWsbi*W2Geu:+$hg#R&9MJcO@%$OJ(IATVQg9fsjB$+U%f!.k3& !:Kmr#:s/8TnH`-%1!+?!MKLF!.k3M!!<s.UZDC9"l7bM\Qfs7!.k3S!!<NG$No#]JcLB&JcNmm"9^fa 2[$kqJcLB&M?!ka%N6`[E0dg)^B_'2EC)&m%gA-sNW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&" &dnpI!W2qL!.k3&!7CiP":>ha0jB4&qQ1(,Y+^GQ1`mG?"Ng^r!7h,X#pVfIFD"`K4";'R\H%3]JcLB& mf3b#.pRn+L0ZMC#R(>3T`BZEJcMqR#m:SL+#7)OSuSgiWsbr-W2Q;<?8Nc>$3]bsJcN(V$OJ(IATVQg 9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3)!!36TO8n;?jp'o-io6"Q"HEJ?!!<NG$Np;, JcLB&JcMVI"9^fa2[&gSJcLB&JcO4!$Ng_K*%tQNVRa=O^&5VM[%`7a7P>YcrW17DJcO@%$OS+D?Z9FP 7Q;e6$b67h!.k3&!:Kmr"tEZ(SUOZp%1*1?!MKLF!.k3R!!iZ3%2C-\Dj.3sXTtY_Dbr>;'F+O;nGn.@ Z2b7;)_t,l:I@&l*u#":!.k3&!.k3o!"8uQ7;I`o7O/9E"9S\D!.k3&!/^a]!sfDP,u&??"/`&tVu<Y% WhGDk;E,s:#6"Xh!0.$e#TPTp>Z!pN/Kb`5JcLB&JcM\K$j7\CCPQUo-4'n[!s/<"JcLB&JcO!p"Vt:T ak#;Hjoa\B9bt\JJcO4!!!BM,JcLB&JcP-;!Y7I'RK.p>JcMqR$NgSA&gBnjR'3m-]_oML\Z;0OAk"-V rW2NhJcN(V$O.Cu6;9g.0IIhP#MfB3!.k3&!6Y?N"Wfa1G?R*P$3gV8!Q>%j!.k3.!!`T/#RqY4@"SNP V5jEp$EBMJD,W>4#Qb&.Q2lpF$Nq%c1d*ZI,TIO."bH`+!.k3K!"8uF/kKMC/f4fr"9S]&!.k3&!.k4! !"/l3#n7b7@Y1&BVlKZq$E'2BDH&S:#m(//blE=qec6'\&L0+s2D-<t'b(>W!.k3&!.k4>!"8uH02#bG 0Gt)u"9S[u!.k3&!2ol$"u:Rs\^p]@"M&D.&H_7uJcLB&JcLB&JcNgk!!g1;JcLB&M?!k^!sT&H3+7LC TrYN3r4`WOZ`0LJ>Vm#p!W`=g!0.$e":Z4q.jcG['b:WTJcLB&JcM\K$Ngtc1ds/E&d8@>!W)kK!.k3& !7CiT!WrQ0&1gUqNL?TDqlL4$Q\]KN.LcI]!WgRHJcO@%$NpbM*$?4='bC`X"M"Ma!.k3&!:Kmq!t?+t 2CB@O"9S`-TE'QDJcMqR$N^G6#7rIaE/U$UW;N\(WM#K1DG;Ph!s/N)nc47AZ2b78#o"F)*Z5\)$4$dj !.k3&!.k3o!"/l<)C[Tn)@lrR!s6C@JcLB&K)ble"%[<ta8G'&ad-Bt&Wd!E!.k3&!.k39!.k3&!.k3u !"&`-!X^>MEKHls\bs2M]t(MSRr^q3!s8Q)c2`Frec6'Z"UPSI$k!CI"Tnh:!.k3&!.k4>!!iT0$ka?h $jHe4!MBFE!.k3Q!"&`.!XBf1?$hR&Wr&n*Whc8B?8N2q!s/Mo!.k3V!"/i2"pkVC#R:M9!s79YJcLB& JcNso$N^G:%1s$T"9JW*!Q4ti!.k3-!!WH*!XBi4?3>J2R]$(a$`^(tRtP-,&H`+:!LEeH!"/i2#71_D #R:M9"9O/TJcLB&VZ7)+":5ML%1*.=!W`?!!.k3&!.k3o!!EHL89qcDjosMWUOkH0a8gelJcLB&JcLB& JcLB&JcMeN#mMG3=a,t&[(X3Q^C.`f\[J>e===ai"p=DrJcN(V$NU>4"pY>9"Tni.!Sma-!.k3&!6Y?I !<WN4$jd(>rW0n:JcLB&L&_;Y'eMo[@XF66Xf\c*XU;52Vikpe*t8JY".'"J!!E?*"9\o-"TJT(!eLE( !.k3K!!`N,"9o,9"9\W(q>c*IJcLB&c2\(P(G89hHB4d!W"#c-VlHSgOD[Q2%1*.>c2`Frec5gS!sA`1 r<*0(!Won4JcLB&JcP6>#6=o0#71V<"9&=n!.k3&!2]`+#:*9>hVmJTk2"D"W`To#!.k3&!.k3&!.k3& !.k3&!/:IU";N=L"'Br=YPu3E^;%@p]Xb/.DaPol%gA:"NW94`!WrQ/"TAK)!W`=R!.k3&!2ff'!<WH/ #6k;5!<MurJcLB&JcO'r#Qt\\0h,f/Suhjl$EUD1S:+Qt*Yf%cc2`Frec5aP!X&E)rW<3'!Wfh3JcLB& JcP6>#lt,2"9eo2!s&Fo!.k3&!3-#)":u\27q[FBWrAq*X/N%uVO;g92BNY@"S)PE!3uS+!<NB%"9\f/ !WiDY!.k3&!.k3o!!rZ."9\l2"9SZ*_>o/fJcLB&%fctpI+m?3iTB"ObJSHM"-NY9!.k3&!.k39!.k3& !.k3r!#PeH(a_1OMl=8#]tM1p]tM(bSUt05//\c>!.k4%!!30%!rW6$!r`52!.k3&!.k4=!!`N,!sA]. !<J_kJcLB&WW38+#SJ+-:j&*!XTtVYD+l]/'F++.JcN(V!W`?(r<*$#rrLpUJcLB&JcNpn#6Fu0"9S`- !Pnbf!.k3*!!<<0'-7i=;KS,%Wi2krW2HYqTSRDZ1*[J<QN3$G!W`?(r<*$#rrI]OJcLB&V>pVu"9&E) !s/Mu!.k3&!.k3l!"BlTak#5'jPeqLerrB2aT-nmJcLB&JcLB&JcLB&JcMeN$NUD<%iRuaTt.hL^&GbQ ^:h%UP^-Is,Rj5DJcN%Up]9+LJcLB&JcNpnq>nA3JcLB&L&_;W":#;='KK``WiiH&XU;55Xf@_;@nA?n #aYON!;HTp!.k3&!.k3J!<3*!!ri;q!.k3&!.k3r!"Au4#RV8-Ar<IcWi)ksrhp(!P^[.90cUMF!.k4$ !;HT(!.k3&!.k4=!<3*!!ri:k!.k3&!2KT)#tDVOg>1iNio/b&@O_ZO!.k3&!.k3&!.k3&!.k3&!/:IU !<WK0#7WV*P-;7'^&5VQ]<J#iF]'q-!s8Q)RfJ$?JcLB&JcM&9JcLB&JcO'r$ipG5":6SXI@d77Y-.]) $D*9(?pQ.M!s8T*dK"k!JcLB&JcLB&JcLB&JcMeN$ipG5":6V[H^g_+Wi5ls$`TVSH!s)g%g)n8!VQMF !.k3&!.k3&!.k3&!.k3&!!iQ)![`Di^!l!>joieZ8g">&!.k3&!.k3&!0mP9!.k3&!6tQQ!<N?,$7o)$ S#<L$^AYeS]sOl7N+t^%#R1A4dK"k!JcLB&JcLB&JcLB&JcMeN$NU;2":$,:AVZMBWr/t,Y,%MGG?-O9 "p>#0p&K[EJcLB&JcLB&JcLB&JcLN*!s&H+":,8X6tV+8S>N7`Wsbr$Q]$&h2AZQ#"9P%mJcLB&JcLB& PlQC9JcLB&`rH8M3*_?SiVhmBe#..U*<OFbJcLB&JcLB&JcLB&JcLB&W;m;,!WrWM5@Au,W3j8:^C.`c ['-*N;^i1`"p=Q!JcLB&JcLB&JcLB&JcLB&K`D/U!WrZ1(bnd"JX*&.XU;)(Sr7;M*sr5U".K:B!.k3& !.k39!.k3&!.k3q!"/i0!sBJs:hbHCTr@pj$`KqrRu(iJ+:8AW"4@1$!.k3&!.k3&!.k3&!.k3F!!E`` ?DlZYjosMWUOP]@n,S%?JcLB&JcLB&JcLB&JcLK)rW*9,'eDaYJ=WpXrP&`R]tCnZOCg<a%LN?.!.k3& !.k3&!0mP9!.k3&!6kKO!<E6(&0`u)CP\UaqlL1-Wh+Q9.M)pl"O[:%!.k3&!.k3&!.k3&!.k3M!"/f. !X')[2GItAS>cCe$`L)*VODg1.1cgk"SMhI!.k3&!.k3&!.k3&!.k3&!;lg!%m,[(rT4=@gWm]a,Qa83 JcLB&JcLB&PlQC9JcLB&aoDbM%3@,fC6#=,]tOBZ$,+$]Sp3gS)\<5%!.k3&!.k3&!.k3&!.k3&!2]`5 !XTSd10/^hY-"h/Xf\b.Xf%"c3ZJkB"SMhI!.k3&!.k3&!.k3&!.k3&!"Au9(F1h=H'PD-W2Q_rrhp't LLiRh'at57!.k3&!.k3&!0mP9!.k3&!6"pJ![).$h;7/PjPo%QXZm-:!.k3&!.k3&!.k3&!.k3&!2]`( !=BMa/6..k[(3i_rkAcR]t(#!C.9p!%/'[Q!.k3&!.k3&!.k3&!.k3&!#PbB%i?KYBoAdeY-"k/Y-"h+ PBU%d-PZoV!.k3&!.k3&!0mP9!.k3&!6P9N!XK;S,=Q='Tr4ohW2fiq#H!T,=#q]F$.8g*!.k3&!.k3& !.k3&!.k3D!"KE(Vo6s:ioK+XhS!)5!qH>C!.k3&!.k3&!.k3&!.k3&!"8l4$kaIFDNh30\\,WT^BhQc Y+:8]8h:UE!.k3&!.k3&!0mP9!.k3&!6P9L!<`Z;'Jrs@S><0friHL0Xf\1NDcSqD%FP6.!.k3&!.k3& !.k3&!.k3J!#P_>#nI_,>'ua3VlH\rWi2kqRYG`^4<k=/!.k3&!.k3&!.k3&!.k3&!.k4J!"T/ZFeH:l hWEnYiQ6@,'`sa&JcLB&JcLB&PlQC9JcLB&aoDhN!sJl9/m<n&Y-bdRrP&TM[&]aSANUdW!.k3&!.k3& !.k3&!.k3&!2]`(!<WH-#9ucVOIi8KqlL'uR#,i]/eRdWJcLB&JcLB&JcLB&JcLB&JcH8]!sA`3,Y;m6 R\?XXX/l6"#,.<;E`=_)RfJ$?JcLB&JcM&9JcLB&JcN[g%hVW`UW20Qk2bUSUM2n/!mgq!!.k3&!.k3& !.k3&!.k3E!!aT8EL!?'\@qjU$ba*WXdsc5+p.oK!VueJ!.k3&!.k3&!.k3&!.k3&!;lg%(,oNLOIiGQ rN-I/Whc,AANgt6!s/Or!.k3&!.k3&!0mP9!.k3&!6"pD(HPlOO.3#FWrB%,W262TLh8mi"9S],ec::% JcLB&JcLB&JcLB&JcMDC"p?GSJ$IeiroOC>^mT4/$M4=M!.k3&!.k3&!.k3&!.k3&!;lg&(,T'9OJB+p ^AbkT]tCk]W/G(B'+G6NT)aHCJcLB&JcM&9JcLB&JcNai#n\XU@XF00Y-"l+XU;51UR$$u.Llah"P*R) !.k3&!.k3&!.k3&!.k3E!#H4r7q6h(SuS`fWiN(uVP',p;(E.`#6al'JcLB&JcLB&JcLB&JcLB&JcPTH %L41QO43(IjQ>=BZ'/Q7R/hg=JcLB&JcM&9JcLB&JcNai(D%lU<Hj_/]=kqn^V7Cn\?M?D9ICel#hB!- !.k3&!.k3&!.k3&!.k3E!#H"^0199"RB3NmY-"h-XK%nF?p#DD%0lY/JcLB&JcLB&JcLB&JcLB&JcP]K "q2M+7:L_3rMU.)W2cenS:Y36*Yf+gT)aHCJcLB&JcM&9JcLB&JcNUe%L4M%a55e7jPeh5[YHUBd/\au JcLB&JcLB&JcLB&JcMJE(CCm&10T=*\\5\j^V@Iq]XXbl@6H+Z%/KsU!.k3&!.k3&!.k3&!.k3&!;lg& #7qh%88aNhXT#=%Y5YO.WK;'p0-Cr7T)aHCJcLB&JcM&9JcLB&JcNai#7(n]-qS<:VZ*LoWrAq&Whthr ;(s1.$.]*.!.k3&!.k3&!.k3&!.k3@!"BQ;^"hK'jPo%Nf!/*go`0RDJcLB&JcLB&JcLB&JcLB&qu?s* $4dk7ELXB8^&5VN]WRTF;`l?<!MBFE!.k3&!.k39!.k3&!.k3i!"/o7$P4ssL8M&SXfhT(#FpBT6S9;e !S7='!.k3&!.k3&!.k3&!.k3E!!i]4$5"suKVGLGW;Wb&WgSBI75,_k!W)kK!.k3&!.k3&!.k3&!.k3& !;?Ht"?3:5gYUrgjoa1Y0F+'IJcLB&JcLB&PlQC9JcLB&`;g8J#7D%s?AYVe\@fNR^C.`\UQ0Is2AuZ" !Wh!TJcO4!!!0A*JcLB&JcP0<quN8eJcLB&T`>E%"UGJ_9QHGpWil6$$DWZ.?plLZ!s8T*rW%NMXoJG& ec::%JcLB&aT25>^AricJcLB&qu@*-"UGG^:3)PkVQ-TnWsbr"NHnr$///0g!Wf%rM?!VWq>c*IJcLB& V#^Dop&K[EJcLB&^AnES@$\1ChYlR>gQ>5R#1ER(!.k3&!.k3&!.k3&!.k3E!"/l4#7;eOFdAo/\@qjU $ba'QToa4a,mFJS!r`1O!3cJ"!SRO*!.k3&!6P<<!Pe\e!.k3&!;lg(!sAc4*'@VZPFniPXUD5/S;hl# 3?&)(!s54tMu`\TrW%NMJcLB&V?$VsrW<*#pAfdFJcLB&`;g8J"9f&P5%/r&S#34aWsbl&R>Z>r3unG, !s70VJcO:#q>n#)JcLB&JcP3=rrN*#rrJViJcLB&RfETr/6[Y1g\p7<gokom+p@Z@JcLB&JcLB&JcLB& JcLB&JcP]K$NU>3"WBF,I[6h:^&>\S]t:\VVM/8.$3gV8!Mf^T!;HTp!.k3&!.k3J!<*!!!r`5p!.k3& !.k3i!"/i1!sB;i8nig=UTXNs$`p4sPAa&=#6Y/3!S[U+!7_)E!Oi&\!.k3&!:Bge!W<*"!Ls.A!.k3E !"/i1"9]Dk9kf*=TW7sk%]H>#RuhS`,mOPU!s&B%JcN%Up]9+LJcLB&JcNpn!!3$"rrKn8JcLB&JcPHD ":Qh`PLKKm"l@:uKN].^!.k3&!.k3&!0mP9!.k3&!5SX?&1L%XJ=E^Rr4`WQ]XtVAE'"I7"p4n\!.k4$ !;HT(!.k3&!.k4=!!WH)!WrK)!Ls.A!.k3A!!WfQ2Ge1DSG]K!Y,nb,VhSD.#R1D6!<<+O!3lP(!WE0! !S[U+!.k3&!6P9G!<N<)!WiD<!.k3&!.k4G!!`oT2c=FERAp.c%&g,)W2##N0*qjd!s,1tN<&tZrW<$! rr@WNJcLB&V>pf$!WiH*!Wi#qJcLB&JcNIa!tR>7ao1?+inW,*W](%1!.k3&!.k3&!.k3&!.k3&!1a)p $m%,oBoAdrrk/iW^V.=n\YF^U-lip,!<<+O!3uS4!soGP)AWtt$jm1@h#N$,JcLB&b5_nO$5=U3*u,1d !s/MA!.k3&!.k4G!"0&I-TP1LOJf4^XfhW)#c`r%6lm*Q"p1S#NW9Fh"ptnU&Io0T#6Y-\!.k3&!2ff) !XB5O*u5Cn!s8T*qZ)3JJcLB&_#O`I(FM:GFH<5trhp7*W2ckoNGM$*((UWOgAlg*ec6'[#7;%W&J#9V #6Y.>!.k3&!.k4>!"/i6%i6?)&.&IA!WeqoJcLB&R/d]u)cEfmgtq&OhV6Vs:([4$JcLB&JcLB&JcLB& JcLB&JcPQG(^Ld!0Mct^Ye%K\^;%Cq]tCD/EC_o1&-J^.NW9Fj&gK.o1G'pq'at:u!.k3&!2ff*";WU[ ?:HRd#6b22!W2qL!.k3&!5SXA"qDLr5%B8<X02?%#d0PC>raAP$No,`JcO@%$NpnV-S?el*#9(l"M"Ma !.k3&!:Kmr";)k<9K".1"U"o/!MKLF!.k3A!#c%P)(%UZJt/a=Wi2qrVlHb^HX8c_)%6TI!.k3V!"/o? )CR9f,9@X5#mB&aJcLB&JcNso$j7.f3_hX\'EnUB!Wg7?JcLB&JcPBB%L=qL`mEK!jPeqLb@r:+T)aHC JcLB&JcM&9JcLB&JcNUe(^(0X))c#aX1,XQ]t_=r]tLYBLhog@(^&LmJcO@%$OIn6;IEKq4u"8s$Fp.g !.k3&!:Kmr"sll^Nc7Z@$jQq<!MKLF!.k3A!#btF%2:<iGF5;.Y-"h/Xf\[sMfMo`-P?L]!.k3V!"/uH .mZou3A;g"&-q"kJcLB&JcNso$j7M2?@#j=*s`#Q!s-@@JcLB&JcPQG$j6hF'J*1,Q)(:WW2oor#caDO EEGIR'*G$1NW9Fl(G%sN76<4O*"`F-!.k3&!2ff*"<BU3H!NTV#mCG6!W2qL!.k3&!4r4@*GMXne)'6H iSN:G72H$W!.k3&!.k3&!.k4;!!3?I"I]=B!.k3A!"/f0"9ouDIA=-Y]=n0X$GEpKSVq2M+TqcFJcN(V $OeL[EeAOJ<^nec%,Co8!.k3&!6Y?N#W-7]Y`iia&IJ^E!Q>%j!.k3&!;HO%!WrQ.(-ZDmUSt;rr2g4% R>>uc2&HIl!0.$e#Tu<;D.$=32CB7HJcLB&JcM\K$jJ1]JY%<m/e&$g!s/<"JcLB&JcNUe(]jdB";a=: NM*,IW2lu!Wi2_ZL3-KT)$J[oJcO@%$OIq@?Z'=Q7lVk4$+U%f!.k3&!:Kmr"t<W(Rs\<k%1!(>!MKLF !.k3;!"TK5PHW*`k2tachQ:TU)Zop;JcMtS!sT>A!n[L)!.k3&!6G3D!\T-S!l"_e!.k3&!;HQn!=/`A 5&$(RY-u"A^C7ieZDa=B=>('e"9S\'!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3S[=l+58">/"9JE# JcLB&JcNUe$3://!Y@%cH'"VqqlL7+TpCOK7O/6B"9S\^!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6> $jJ4eLnoc20b"Bl"9G1rJcLB&SH'#u!<N<70irU\R\Qn]WsYf&Ss+qC7jSHE"9AT*KE/:X$OJ(IATVQg 9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3&!:g*n![:NfWn..2"l[@[?p5!m!/ggZ#oX0R quD<KJcLB&V#UW$4/Y"?p&K[EJcLB&_#XE7#7rLbEfHcs])9;N]XY5HOD@-"%LN@?hZ/6.ec6'd/lR"O Hu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3&!1a)t!<E6'$R7oCG`88qrN-F0Y,J"]HWW$; $3pS7!e^QZ!"0)X6Xt4N=\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&JcPQG*!$'A!Xp>@ ?[.HtVlHbtX/N%pSX+P'1_^9&"9PM%NW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL !.k3&!4i.@"s6<d`oQ4Ck2O[iN,0[>f`6U(df9IV)@HYS!.k3&!.k4<!!EEdV`+aJ!.k3&!1X&g!='#V 3)O[VW4;c?$,+!^[%D_C-lEQs#m5h\Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H !.k3&!.k4F!<*!(#T,*Y?$V^8qlL4.WhbPc5op^J"p:e(NW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7 UkW/0%1!+?!W2qL!.k3&!5JU6!=&oK/ONihP,A5Y!3?+!$)aJRB1!aT$jQml!.k4%!"0)Y7:gRR>"q+. )%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcLB&PlLmh,$q_Wj9Oi.gWR.*64EemJcMtS!sokR"5!U* !.k3&!6G3D"?WM?"MXqg!.k3&!;$6r"qr49:jekAqnN-D#HNhq2C'(I"/l3[!"02f;g=.HDHodj+Us#' JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&]`8<@%N-WYB8NFerN-I1XfSXmGZ$%2&I8Kr!.k4%!"0)X 6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl"9G1rJcLB&R/dWu%iQf]B8<1ZWiE,#rhp%$Q?Z@[ *"`2X",$Z[!"0)Y7:gRR>"q+.)%#+!JcLB&JcNso$jS=hL7s9,1(=Km"9HIAJcLB&JcP6>%LYM!ioK1_ k2P7QgMS)7UB$2P!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3&!5/@?":Q"f3ba\Y]Y(qlr4`QDRsIpm -PQ^b!T=$1!7h,X$nbJ'M0s2G8i.\#\H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEJcM2=#QtDE(+iO5 T!%mk"eg]_5qO&Y%g2n6L&eLZ$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k3& !;$7!":5YV/m!@fWiE"rr2U-qKP!S(*Y/AS!NH-[!"0)Y7:gRR>"q+.)$tlpJcLB&VZ7,1/7""(KO-DC #R(>3quD<KJcLB&\,Z^7,^ISagYr(m!fo;Jg&Q^)df9IV)@HYS!.k3&!.k4<!!EEdV`+aJ!.k3&!1<fp !soGP.oq1oZF@EYr4`ECV3#k'3rpH0rW.cSZ2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D #6Y(H!.k3&!.k4C!"&f4$4n=KCQ5*eX8B"+VNQ:67kPP]!WiD'!0.$e#pVfIFD"`K4";'RJcLB&JcM\K $jJ4eLnoc20b"Bl"9JE#JcLB&JcNIa$NgV@&0aV[Mk?fCWr/n)U6'\18M:ka!WiD^!.k4%!"0)Y7:gRR >"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcLB&P5kas8<L$og\g1;W)t;L!!%TNY5eY2)@HZ" !.k3&!.k3m!!EEdV`+an!.k3&!.k4C!"/i3#RhbBDigj"[_2OQ$b<L:PBKbQ$NgG2!NZ9]!"02f;g=.H DHodj+Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&]`8EA"9o,H2-P?jSu8ahXUD/$O+(J$+:&&N !Wh<]JcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF!.k3=!"/i2"pl)(>C)C# UT46m"f7]JHt#AF+p\8P!We)WZ2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3& !.k4=!!NHM>(<R!r8n-tJkd]uV#ZDR!sokR"8i.N!.k3&!2TYu"?WM?"SMhI!.k3&!5/@?!<N?+&i*U< Q_gsur4`WP\?MuoAiC2%!s&G_!.k4%!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1r JcLB&R/dTq!WrQ7-V%j%P+\lRXTbl+T:'t'"Y0o^!s/LZ!3uS4#pVfIFD"`K4";'Rh#N$,JcLB&b5_qT .pRn+L0ZMC#R(>3`;kJiJcLB&oDf7"!WrQ7-qS*'OI`<IWsbr(S<\=u/.)I]!WfA&NW9Fn,Xl9dB3J"l .2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3&!4Dk1$o(kC`r+s&d'&=>+p-R#JcO7"!sokR"1/&[ !.k3&!:9ah"?WM?"IfCC!.k39!!ioX6tV(>X15nB^BM<`\[7uR"\9R?#6Y'`!3uS4$nbJ'M0s2G8i.\# h#N$,JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiJcLB&n,Nb")`:Q2KUAdAY5PI0Y,\:U@lY80"U"n.!0.$e #pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&JcN=](^M-?<,R;QVPpGnWiN(uVkJrY 3u&#)"9RT`JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF!.k36!"T,C2/0GV ioK1_gWR.*64&5DY5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!.k4?!!``J0hH#3TsOa3%DTZk]Xt_Q M-r+^'at2G!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3S[=l+58">/"9JE#JcLB&JcN=]#6bhh3`L$V U].@qY5YO0XK%P+:+-kh#Qs)eJcO@%$OJ%F@ru?d8inL>$+U%f!.k3&!:Kmr"tNr7UkW/0%1!+?!MKLF !.k39!"oGM-9P:IMP-oGW2QbpWi2hYEWo8f(D$lUL]F^\$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8 TnH`-%1!+?!Q>%j!.k3&!:0[q!Z"7hgYL`Gk2"V/\R$,M!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[E JcLB&\Gum=&Ki_sEKmW=rk/<Hrk/TMYEsH02C&t@irFZ2ec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/m E1OA*EBb'D#6Y($!.k3&!0mNk":Z+l3*h$(Y,n`(XTY`,Y+C4K@Qu=]%g7[gZ2b7=,=>s_B3@hg.MrKJ !.k3&!.k3o!"9&^>_o21>qlco"U"kF!.k3&!.k4?!#PhJ(F;+KI[R49W2QbqW2ckdJ7:ep*"N1R!0.$e #p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB&JcN.X%Kn8*d+[:3k2+nIc?q;Nh>i-- df9IV)@HYS!.k3&!.k4<!!EEdV`+aJ!.k3&!0mNs!soJR.9_G(\\,Vh^V@Lr]sOO<Mel0G*=.H$Z2b7@ /lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!.k4?!"B#7$P=IODj@?*XKAV-riHF$ O*+Pg.M`5i!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&JcN=]$j-_A&KjY` P,G=[W2oor#cFAUFBCdW('`e!JcO@%$OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF !.k33!"9TK`6R,ok2P@Vh4RLD)ZkZmY5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!.k4?!"/f0"U>c0 G+H"M]=n-W#J$q*KkX%*%/p:2!0.$e$nbJ'M0s2G8i.\#JcLB&JcM\K$jek3S[=l+58">/"9JE#JcLB& JcN=]#m(23"V<LuM570JXU;(sLMp0P*XDfK!TjB6!7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+ L0ZMC#R(>3T`BZEJcM&9$N^D5"V<S$LS:TEW;N[sVO%RADc\tA#m(//MZC$_$OJ(IATVQg9fsjB$/GT5 !.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3&!9sOf#!SfjakQaU"MJb6'`t?7MZ<hc)@HZF!.k3&!.k3I !!EEdV`+bP!.k3&!.k3]!"/f0!sK5o@#1S[[(H7N$bN^CRXna''a=gD!TsH7!7h,X$nbJ'M0s2G8i.\# \H%3]JcLB&mf3b&2fP=pRrLY*$O6e8T`BZEJcM&9$3:52":H\SEfcfeqlKn#UC!3>CeH8i"9\f.Mu^-` $OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k3&!:Tsr!<WH-$nG.oNgZT?r2U4( T9=hC9e6kZ"9S_0!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB&JcN(V";amW TZR,o"NQX22A"dHJcO7"!sokR"1/&[!.k3&!:9ah"?WM?"IfCC!.k39!"/f.!s8r[8oKZ[Xgn;D!PGoK Z)X+180JBJ"Ts\`Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!.k4?!"/f/ !s8fN4'HfaS#Z@f$EBbeJ6k5Q#R1D6YQ0[`$OJ%F@ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l( !.k3&!.k3]!"/f/!sAoQ4Blr`R&9e^$`^(pQ%*.&)$pNN"6TZ9!7h,X#p_rNFD"cO4=M-S\H%3]JcLB& mf3b$/7""(KO-DC#R(>3T`BZEJcLf2"9TT-Ejko.!S4U[N+X[GL&eCW!sokR"5!U*!.k3&!6G3D"?WM? "MXqg!.k3&!:Kmp!<E6,*B$c5N2*cX^C.`f\[SGi=t:6p#Qq:2NW9Fq/lR"OHu<1]1a*<[!.k3&!2ff* #rcgo[$u&"&dnpI!W2qL!.k3&!4W"9!<N<+(+MRQG*&NsXU;52Viu$i+:\\^"6TZ9!7h,X#pVfIFD"`K 4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcM#8$3:20"VrUT>BPt"r2TjrWX5PuODd]7%g`FB Mu^-`$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+?!Q>%j!.k3&!9aCb!uk(0r8n1=d)2th 'rh7l!!<NG$Np;,JcLB&JcMVI"9^fa2[&gSJcLB&JcN1Y#6PS`1e`(ZYkl*@]tLb<CcEFK$j>_nJcO@% $OeUbG_pfc>Y6gr%ClIj!.k3&!:Kmr#rcgm[$ku!&dnpI!MKLF!.k35!!iZ9)_*sXJtB.CXT5L1Xf\@L ==b3t#R$(dZ2b7=,=,g]B3@hg.MrKJ!.k3&!.k3o!"9&^>DT)/>qlco"U"kF!.k3&!.k4;!!i]:*%='\ JX`V;WWB0#rhp'pJ64B=%g`BC!0.$e#pViLFD"cO4=M-SJcLB&JcM\K$jS=gL7s6+1(=Km"9JE#JcLB& JcN"T!sUK5ir8!Dk2bOYhNKPniW+Q1df9IV)@HYS!.k3&!.k4<!!EBbUG`7E!.k3&!0I6h!t6"n2e.]A \\,VhrkAcR]sXPb>!",J#`Jbh!"02c:j%J9BN[eZ+:[-,JcLB&JcNso$j\\)Q`u`k4:qo)!s-@@JcLB& JcP-;$3LSI*%Oj+PH(deriHO1Xf\IZCe-0#&I,H>NW9Fm+?s7P@T5iV-Pd#?!.k3&!2ff*"tEZ*T7C#r %0m"<!W2qL!.k3&!4;e9!soV^/5gMMVlHbpWiH&s#GR)l8M;1u#3Pu<!7h,X#pMZDDdug>3[Y^M\H%3] JcLB&mf3b#.9D(jITS95#Qt82T`BZEJcL]/#T-a`cJ.19jPg=$hP`mTLB+LX!sTAC!n[L)!.k3&!6G3D !\oQ_!l"_e!.k3&!:0[n!XK;Q,u/]SZa[KYrP&WP\Z(j>>X'JBYQ0[`$OeIXE.;k<;a`;\%"\J2!.k3K !"9,gAs9?YB/gG0"p4o(!.k3&!.k3Y!#PbA$P==A@u$hWWiWA*Xfee+Q[iX=0cLD]!.k4%!"0&S4BuT+ ;+!2d'a_DNJcLB&JcP6>$jJ(XI@PX`/.2[c!s,(qJcLB&OT5jm"ptq_5\5VAUo15kWi?B(W2Go0AkOm! $&eki!"0)U5$_l/;aiSk(CAmtJcLB&JcNso$jJ+ZI$o7[/IVmf"9HIAJcLB&JcOp5%LG+YXi/rQjQ,=Z \R[2sX8n.Y!X&r9qZ)3JJcLB&V#UW"-ZpU7p&K[EJcLB&[/^R8":#;J4(jPQYd_:C^B_BUUQp.-0bNRK JcO@%$O\@QCO'f(:dH]R%(Q@i!.k3&!:Kmr#;BPFW/G.D%giLC!MKLF!.k35!"K&5"UGSj<-Xh'Vlm2) Xo>F,TTOb97OJY(!3uS4#Tbs-AQ_\k1*[M>h#N$,JcLB&b5_qS,YiTMF\jOq#6Y,0`;kJiJcLB&li7Ir "9f&A03*4]S><0`X8]+(WL]*!Ak+3XYQ0[`$O@h8=Ct`35r9i%$%`//!.k3K!"9#X:j8+F;C`(Z"9\c' !.k3&!.k3S!!`QHB8Wh7io^7$"NcU%.gk>;JcO7"!WiZ1ZN,RWJcLB&li7).?lPO7JcLB&NrTRh!<jlL I@mOG\\>hn$,=6g\?W$!E'Y4t!3uS4$RS;SG%b)R4t@Q\h#N$,JcLB&b5_qU/mO4-Kj?GD#mLJ4`;kJi JcLB&l2V+k!<aH0BT&:RWr/t(XK%q[JQjl@YQ0[`$O@_1;d`Qr4>7lm#_E&.!.k3K!"9#U8og#39.(&N "9S]&!.k3&!.k3W!"&`-"<U$FM3Xa2W;Wb%Whu>PJ6XoCk5^)6ec6'`*]I&-<_GV2+r(Ep!.k3&!.k4> !"9#V9lZ239dg>R"9\b!!.k3&!/^a]$q4fm_r9b?#Nk1'[#ANJ",[)^!!33+!nRF(!.k3&!6>-A(JkaY !.k3&!.k47!!iZK5\,S:WO0A;^C.`d[BQBU;^`%]"p;44NW9Fm*&1&f9g^ik+VP06!.k3&!2ff*"X6?J K4[P!$O-b:!W2qL!.k3&!3lM1!u<XhDhOIQXKMN($EL%rNb_!(#mUS8lMuM:ec6'^'dl(44Z"Z6(_-b\ !.k3&!.k4>!"8uJ2,nHl2B2u*"9S[u!.k3&!0$sc";`glDh=7JW2Q^*WiN(rU7@0X73DmA"9X_cZ2b7: 'dl+65;k&;)%Qu.!.k3&!.k3o!"8uJ2HF]p2]`5-"9S\D!.k3&!.k43!"K`$A>e5BjQ,IX`i+Yb&$>na !.k3&!.k3H!!337!qcPF!.k3&!3lM@!u3FYA:pGW]tM.p^V.=k\#PL'4s1RK"mZ/?!7h,X"VMt43&)m. *>And\H%3]JcLB&mf3au'e;[T67`rX"Tnf,T`BZEJcLc1$3Lha3)OOLSuf&rriHO1Wi)81<A51"#m?=i Z2b78%2^?A-6O6C%g`Bp!.k3&!.k3o!"8r@+>lYG+qb"]!s/MB!.k3&!.k47!#PeM,W\kALRY<BW2cns WhuSXGZQU9&IATI!0.$e":Z4q/LDS[((U]SJcLB&JcM\K$j7.d2G#_M'*JF?!Wi3!JcLB&JcMkP%M:mX g>:fLk2+S)X_]0_joBu5JcLB&JcLB&JcLB&JcLc1$3CYW/O*s0Wk?$Y%DTZl]tD"aSU=En,S^WI!3uS4 !soMT*#KD'%LNCBh#N$,JcLB&b5_nO$Paj9+VbCf!s/MA!.k3&!.k47!#PbD(*bP6HC:q<Xfee.XKAY# LhB+()\<4\!0.$e!sT,F'bV&e$3p\9JcLB&JcM\K$N^SF)'Bb-#Qk/1!rDtL!.k3&!3lM@!XTVe108ad Wi)eoWi2krWh>)Z749,f#O;AA!7h,X!s]5H'b_,f$4$b:\H%3]JcLB&mf3^s#S7jt)%d/X!s/Os!.k3& !/LUY![).$h;/FsjPenFbEG!rMZA>/JcLB&JcLB&JcLB&JcP!7$NUG?'cftqUV"4Q^AYeP^:C2%Ce6B( %($"p!!E<(!s8])!s/N)!J1<'!.k3K!!`N+!sJl4!s8H&q>c*IJcLB&YlG%2":5VT4D0_VqlL1-Xf@Y2 =?7fF#jVJB!7h,Q!<N?*"T8E(!WiD5!.k3&!.k4>!!30&"9&E(!s8H&T)aHCJcLc1#6G#7&/IHBNW,jV W;`e'W2QPUGZ['V(C?0'Z2aq,!X&E)rW<3'!Wh*WJcLB&JcNso!<E9""98N&!Q+nh!.k3&!9*t^$r4jt hVnIp"leLV?696Q!.k3&!.k3&!0mP9!.k3&!3lM4!<`Z:&NjlpYdh9X^AYeS]W[lYB1XZg!s/K(mf7q> JcLB&JcLB&JcLB&JcLc1$3:86#RrCgJ=igA!3H+#$a-(WDH&YA%Kcb6!L*S9!.k3&!.k3&!.k3&!.k47 !"8l2"pk_m=FQd;VlH]oWsbqrL2L!R,7akX!Wfe2JcLB&JcLB&PlQC9JcLB&WrN>*.uLUOg>W"m"O;BV &d%7sJcLB&JcLB&JcLB&JcLB&N;s:d!sJr=03Nh!XKqr<^&>\R]sO`,K4@+d"U"o.PQ6:8JcLB&JcLB& JcLB&JcP!7$NU>4"pcJECQ+^XWr/t,XJM5:DGW&'"9\f.\,_*\JcLB&JcM&9JcLB&JcN%U$ipG5"plSI CPnIOVPsHo$`]naK5ORB('FaB!q-,@!.k3&!.k3&!.k3&!.k3*!!<a$E0^OBhYlR>g7;V0&rcmC!.k3& !.k3&!.k3&!.k46!"/i1"U62?C5\X_[CuOR$ba*VWge91-O9nZ!k85^!.k3&!.k39!.k3&!.k3T!"&c0 "9]Z%<cs7eVYdJ&WhYu<ANq.="9\ep!.k3&!.k3&!.k3&!.k3&!/pma!WrQ.*&gr@LR%t8W;Wb)W2?2Q L1W^m"p>&1PQ6:8JcLB&JcLB&JcLB&JcOa0"TfW,CoH+ejosMQO_d&bZ2fIVJcLB&JcM&9JcLB&JcN"T rW*9+(G\j,MkRDhrP&`R]t1_VNaXUM#mCG"!.k3&!.k3&!.k3&!.k3&!/pmX!WE-(<hKFc?EpXSf1- XK/=lH;>dl"p>$m!.k3&!.k3&!.k3&!.k3&!9X=^!WE-*&L]tOFGl]irMp=)Wi)__Gu5mp#6Y.=!.k3& !.k3&!0mP9!.k3&!3#r$"<0mjg\p7<hV,uSGp)>OJcLB&JcLB&JcLB&JcLB&L]@Si,s,"JPQRtt]tOE[ $GF-c[@;>/*Yf(fPQ6:8JcLB&JcLB&JcLB&JcOg2(CM076"#20X0&M,Xfee-Y,7"_2AHc0"LnG`!.k3& !.k39!.k3&!.k3P!#H%a0198uQ)COYW2ceoWiDeJ@Q5/8#mB\sJcLB&JcLB&JcLB&JcLB&KE)#W.L^%2 h;7/Pin`A9W&b-D!.k3&!.k3&!.k3&!.k3&!94%f$Q1?R?%\iX]Y2"n^](nO\>+ji4Y%H[\,_*\JcLB& JcM&9JcLB&JcMkP(C1]s/PBr?Uopf#Y-"h-XK%D':bNq+#k%bF!.k3&!.k3&!.k3&!.k3,!!NWB+>-B+ &W<?_Wi2krW2Q_nO)\&O+r(EK!.k3&!.k3&!.k3&!.k3&!8[\b&P/hFg>(]KhV?ko<#;k@JcLB&JcLB& PlQC9JcLB&X8j%@%Mp<XEL*i=]=knm^:h4lXdFKA6R`Z:!.k3&!.k3&!.k3&!.k3&!/LUY":>_Y2I-H: SuSlnr2g4*RtG?H1`m0k!.k3&!.k3&!.k3&!.k3&!94%q":>_Y2dV$(VPpMnWi2koW0i0L9f=+)\,_*\ JcLB&JcM&9JcLB&JcM\K%KnD;[`@+YjPetOa)WpDlMuM:JcLB&JcLB&JcLB&JcLT,"Tno7$nY]fM5dkm ]Y49Y#JII?P^Qdr)3b,Q!.k3&!.k3&!.k3&!.k42!"&f2"pcGGEgNT%Y5PI.Y,nF^IqVG*'Y"-p!.k3& !.k39!.k3&!.k3P!#G_?#72VLEg<>rWi2tuWi2qjOFCk;/JRXRJcLB&JcLB&JcLB&JcLB&JcH8tA>$KY hWEn[inB]#.L_F>JcLB&JcLB&JcLB&JcLB&irBGf!<N<E8U$Z(ZamdJ^C.`bYG@G(8gFQB!s-%7JcLB& JcLB&PlQC9JcLB&X8i5$rW39>3b!o5UT43n$EB\ZJ6k;V"9S`-o)O@BJcLB&JcLB&JcLB&JcLT,!!3'# !>dj%@tp;BVPsHo$`BkkO+(Fu*!??G!git>!.k3&!.k3&!.k3&!.k4,!!NTgCm2QerT4:>[!tt(#.=M` !.k3&!.k39!.k3&!.k3P!<*!)!Z*h&JX<:@^&>\S]t1SRUP3#2&.AdH!V?AD!.k3&!.k3&!.k3&!.k3, !!NB(!Wirb"\``aPbbJ[XUD2*Srdka.LQLc"9FnjJcLB&JcLB&JcLB&JcLB&irBJg!<N<7/P^,5P+\hT ri6I+VkKQ>Db__i#mCG4]`<WaJcLB&JcM&9JcLB&JcMVI"V<CnQIFpojosV]TQs?Km/V_<JcLB&JcLB& JcLB&JcLQ+rW*$3-j<"HI[R=MrP&cT]XbGSQ>oA8'b(?JR/hg=JcLB&JcLB&JcLB&JcOd1$3://%3IH& BnVtWqlL4*VOrBE2AHc0"9Q7:JcLB&JcLB&PlQC9JcLB&WrO(>!<N]Q2Ge+>R&I$bX/i2!VP9Q0?8r`4 #m:>%!.k3&!.k3&!.k3&!.k3&!.k1^!!!EbEl[8%k2tXR_l//<"d8q<!.k3&!.k3&!.k3&!.k4/!!iT5 )Cn!ZL8;BX^](nP\YFd[/0GW6!PJJb!.k3&!.k39!.k3&!.k3M!!iT2'Hf))E070sXU2/1ODRK3((UWO oDjICJcLB&JcLB&JcLB&JcLK)!W`Q@"X5ZtE0$mqWXZ#/W2ckpNc%E5(CpcQR/hg=JcLB&JcLB&JcLB& JcOL)!Z"kNro==HjPJY?]hf<M!.k3&!.k3&!0mP9!.k3&!2ol&"qDIp7<P*,rk86E#edC)DF,uu%Kl>' JcLB&JcLB&JcLB&JcLB&KE)#U$3_%]2IM<9poOdkI9ABP(((/3!.k3&!.k3&!.k3&!.k3&!8dba":>e^ 2dqB5W2HSorMp4%R=&0p,o6mj]`<WaJcLB&JcM&9JcLB&JcMPG"pR&^gYL`IrT44<G:*L]!.k3&!.k3& !.k3&!.k3&!/(=Q":>GI(cGl_WOB@M^&>\O]s=8aB1alq"TAFl!.k3&!.k3&!.k3&!.k3&!8db`":#AK .St;TVlHosXU:h]DcAeF&d/7:!Pe\e!.k3&!.k39!.k3&!.k3L!"/o8%216iFd8_uWi,fr$`K\SE)f"I '*J@;!VZSG!.k3&!.k3&!.k3&!.k3&!;um$)e>tad,"Z_"Q#80('9a$JcLB&JcLB&JcLB&JcLB&hZ+#d "q(nh:jAJ1ZFR[I^C.`aX.+oY6mDm<!<Kt9JcLB&JcLB&PlQC9JcLB&VuR2-":,>U5@]G9UT1EnXU:tn LN6?O)$C$C!VZSG!.k3&!.k3&!.k3&!.k3(!!*0)#m^k[6"P_8T;S^fWsbl%Q%X-X2Au]#!WeekJcLB& JcLB&JcLB&JcLB&f`20^2f=bgg\p7<hQ:KO(BV/JJcLB&JcLB&PlQC9JcLB&VuR2+!sJlI5%TP@X0fP; ^C.WZXJ1;L/I;L]!<MrqJcLB&JcLB&JcLB&JcLB&KE)#S!so)5'JNF*MO:3BrN-L2X/)2FD+>fT!s8T* SH+6AJcLB&JcLB&JcLB&JcO[.$N^D5";ERiEJTmRWr8t,W2H>UNGM02#6P&0!Pnbf!.k3&!.k39!.k3& !.k3F!!NE?6#!"=rT4:C`gLd?&FfaP!.k3&!.k3&!.k3&!.k3&!!rW*%kURtNM3Sfr4`WQ]"#)5DE810 !s8Rp!3cJ"!SRO*!.k3&!6P<<!Pe\e!.k3&!8@JY$R7iAG`88qr2g@.X/VnH=Y0p_!s8S?!/ppS!WE(N !.k3&!2]bq!<<3#!VZSG!.k3&!2KT#$6qfCGD_lfWrB%-WiDtoTn-B"#m:A5!VcYH!7V#F!O_u[!.k3& !:Bjd!<<3#!Ls.A!.k3&!;lg#"s-6c`oR-]#3=OYZ'd<KQN2U;JcLB&JcLB&JcLB&JcOO*(^qTM<csM$ \%TJh^V@Ip\[\>^;'m(i#QhgBNW9+]!sJT-"U,&3!s/LT!.k3&!2ff%!<WK2$O?n<rW2iqJcLB&JcMSH #7)2"7::J+Vu*S'Y,\I\BgE^N$O-\-!.k4%!!**&qZQp$rrT_2JcLB&JcP6>$3:53"pbD9!s/K(T)aHC JcLB&)?9aD))"KgH'"i"W2Q_rW2c_lMePO"&IJ^DSH,qq!<E<!"9JZ,!o3j.!.k3&!6Y?L!<WH/#R1D6 !W`>>!.k3&!.k4&!"K2W>-6W;iT0(Sd)3+Z%(cLk!.k3&!.k39!.k3&!.k3H!#PtW-otIXS$K]?]tV7p ]tCtVNG:d3*Y/AJ!.k4%!"/i3#n.:P$OR+B!s6"5JcLB&JcP6>#QY,;&JYib"p4c)TE'QDJcLB&#ljr0 &KWMnB8E8XXU2/3QZuOf,8CRgSH,qq$N^G8#RUhC#6b54!o3j.!.k3&!6Y?M!X&c<&.8aH!WiB'_uPAh JcLB&gAi&p&K`VqB83"XWi)eqW2ckrP^$7d,8U[i_#TJq$N^G9#mptE#6b55!eLE(!.k3K!"/i2#Rq@S #Qt21!<N&tJcLB&JcMDC%LbCZf%]$>jPJY<a'p+lo)O@BJcLB&JcLB&JcLB&JcLB&$31&0$l'mGBTT@. rk/?I^AbeNYa^/L6nB)WSH,qq$NgVB',D5n%1ELG"5Ns/!.k3&!6Y?M!XTJY,8q.$!s/K(_uPAhJcLB& gAhN_#S7b'<-t.:Y5GC.XKA(MCJ6T0&HooMNW9Fh"UPYN%Li^M"p>$[!.k3&!2ff)!X9)K)\`_d!s/N) qZ)3JJcLB&U]:f+#nRn*<dC+3WiE"urhp+&Rtb]R2Bre:p],mGec6'["UP\O%h/gO"p>%=!.k3&!.k4> !"/i5%2Bis%0lt:!WeqoJcLB&JcPWI%K[hsa4&f"k2G1PgOqTuQiM^<JcLB&JcLB&JcLB&JcOO*$N^D7 #p2uqW4BOR^&5VM[]#F:>Wj26_#TJq$Ng_K)^$(9'+bQW"+gN)!.k3K!"/l;(a^s_(^pKK!Wi/uJcLB& JcMSH$3C;4"r9F?Q)^sfqlL+$Q%*@;0,=]c!.k4%!"/l6%2BWn&Io0S"Tu:8JcLB&JcP6>$NgYI*$uU; #m182!MBFE!.k3&!"Ao.!X&W2(I;l#Vl?\pr2U'tP(%";0Gak_!3uS4!sf>N(DRMm$jd(?h#N$,JcLB& b5_nP#nn@,*"rV]!s/MA!.k3&!.k4$!!Np?\]NR^r8n*]?7H;q!.k3&!.k3&!0mP9!.k3&!2KT&!<WH/ (I;u)X0T7Jr4`WMYG.2';(W7]!s/N$!.k4%!"/rC+>5Z-.3ffH$jO6BJcLB&JcP6>$j.4o6<HN((Bt!E !WetpJcLB&JcH2Z!!36*";*CmJ=*%1qlL7+SrS5,5U-U=!s/Ls!3uS4":Z+l.jQ2U'b:QQh#N$,JcLB& b5_qQ&0Nf!1*@/3"9S]+`;kJiJcLB&gAhT_!sA`=1g>EoSu/OcWsbeoN-f##,74PV!Wg7?NW9Fi%2U<A -6O9C%g`Aj!.k3&!2ff*":u\47l2D%"9\f.!W2qL!.k3&!1j/o""S)H[+>0;"MK:W-3j,CJcLB&JcLB& JcLB&JcLB&JcH5[!!*-'";*@jHBt>1])9;N]X4i;Me5*g$3p\7T`D@u$O7S'7SuZ>1FX@X#i,K4!.k3& !6Y?N"X$'=Hs],`$3gV8!Q>%j!.k3&!8@J]!<N?+%4=VVJWZS*r2g@0Un!Nh;_J^f"U"nG!0.$e"V`4? 5r^PH*u,4hJcLB&JcM\K$j7>$:M3BW)[?KK!s/<"JcLB&JcMSH$NU;2":Z_KAq5r4Vu3S'WhGiAFAsq+ #R(>4quD<Kec6']'I>_+3\`$*(Cp_\!.k3&!.k4>!"8uH1/V[Z1)pQ&"9S[u!.k3&!.k4G!!EW]</S]n jorr'G>]@]RfJ$?JcLB&JcNgk!"?O@JcLB&JcOO*$NU80!t6G??$_d8\GX)L]t1\YSTmjQ&.AaF`;knu $OS+C?#F%J7Q;e5$\AA1!.k3K!"9&]<I^Kc<\Fje"Tnf'!.k3&!.k3H!"/f/!Wr]I1.u2/Q`Btc$`pD, UPWJD)%-]Q"8i.N!7h,X#8o6h=\_7@/05E0\H%3]JcLB&mf3b!+@Kq"B14'P"p>#/T`BZEJcLB&%0-A/ !WiH1*&:6#I[-f.Wsbr*Un<ER58ak9"9Y=tZ2b7;)DY#j:dd8p*tnq9!.k3&!.k3o!"8uQ7;7Kh7jSHG "9S\D!.k3&!.k4"!!<QYA@29s"l%&!OZj)d!/^aV"8W"L!.k3&!2KSr%6=pj!.k3&!.k3E!!iT0(FhXR JY0=I^C.ch]tCG*>q?d&#m:)*JcO@%$OeO^FbP$R=[t4i%ClIj!.k3&!:Kmr#W?IbZ'K8i&ISdF!MKLF !.k3&!;lg&!<`uW0hH2>V"h%sRW_=J&ISdFT`D@u$O@k>?uKLS7lVk3$/GT5!.k3&!6Y?N"tE`,TR^/t %1!(=!Q>%j!.k3&!8%8W!<`uW1.uG?U&:r!W2HYqQZZ"I&IJaF`;knu$OJ"C@;fXW8NJ79$%`//!.k3K !"9&^=Fm#m=tgBk"9\c'!.k3&!.k3?!!3^#U\s6XiSE8>E#\KNJcO7"!sTJF!jhrZ!.k3&!:9ah!\oWb ".K:B!.k3&!;ca("V;_+6u\?l]Y2"mrkAcR]s3rI81u(t"ebq%!"02f;g=.HDHodj+V!6-JcLB&JcNso $jek3S[=l+58">/"9HIAJcLB&JcOC&$3U_O+uNSRS?ArpriHO1Xf\7K?o]JJ%0XWMNW9Fn,=>s_B3@hg .MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k3&!2'<$":Q(k2I(WtWiE"rX/c/t#G$HT4!b[P"T/7O !7h,X#p_rNFD"cO4=M-S\H%3]JcLB&mf3b$/7""(KO-DC#R(>3T`BZEJcLB&p&GR).!<nkgu7DVio/aQ 1'X6KY5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!.k4&!"/l:'-/c3K;5fa]Y49Y#em[@Mec'D*=0Ua NW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&"&dnpI!W2qL!.k3&!2'<!!sfAP,Y;m7UoLTsXU;56 Xe_&$=?\,K#5eIQ!7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcLB&qZ%'. #S.[t95]`_VlH\rWrAq%ToO4s5U[BPT`D@u$OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`-%1!+? !Q>%j!.k3&!7:cV&l,@8bM21?io8pp:`BJP!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EJcLB&TE#?$ "ptk_7WOfsZad[G^BqHQSr%AX-k$+WrW%NMec6'd/lR"OHu<1]1a*==!.k3&!.k4>!"9/mE1OA*EBb'D #6Y($!.k3&!.k4J!"&c1#7D;+?@eWBWr/t+Y,\"KFBUaJ#QXt$!3uS4#pVfIFD"`K4";'Rh#N$,JcLB& b5_qT.pRn+L0ZMC#R(>3`;kJiJcLB&f)Q]j":,>N3a[E*TVe`iX/`1uVjW<^><F#7!<L4@NW9Fn,Xl9d B3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3&!1Elu"tk%a[asU'jQ,=2F[$cHq#H!Hdf9IV )@HYS!.k3&!.k4<!!EEdV`+aJ!.k3&!.k4J!"/f/!s8ug?\Y>X[(H7N$,!XIU5<;:%fl^+!3uS4$nbJ' M0s2G8i.\#h#N$,JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiJcLB&f)Q-Y!WrN2-r"ZBS>?%a$*L(nO*"/I $NU:K!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&JcMGD$NU;2":6JOE/p?[ WVrk)WiDb[NHA#J$3:2,!.k4%!"0)Y7:gRR>"q+.)%!hRJcLB&JcP6>$jS=hL7s9,1(=Km"9G1rJcLB& JcPEC";XgVTZR/p"m!t(E_RID!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricJcLB&df9UX-VAB?Trtp' ^C.`c['#mA7i_m?!s6RENW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&"&dnpI!W2qL!.k3&!1X#p "WTU0H]4JpY5PI2XK&+gL0utV"p>#0!.k4%!"0)X6Xt4N=\:b*(^[_QJcLB&JcP6>$jJ4eLnoc20b"Bl "9G1rJcLB&JcPNF(^1sC??qErVPpMpX/i7tTpgXD3Yhr'"9PD"Z2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o !"9)`?&#&+?8;rq"U"kF!.k3&!.k3t!"T5W7X)<#jQ,IcgV'/'2[7/"MZ<hc)@HZF!.k3&!.k3I!!EEd V`+bP!.k3&!.k3@!!rfK2H+UTUU.YJrkAlT]XY>DKj6>M&IJU?JcO@%$OeXdG_pfc>Y6gr%ClIj!.k3& !:Kmr#rcgo[$u&"&dnpI!MKLF!.k3&!;?I1";NFS?$MI,Xf\b.XfS\*UlfRf-56mo"/Q"'!"0)X6Xt4N =\:b*(^]!uJcLB&JcNso$jJ4eLnoc20b"Bl"9HIAJcLB&JcO7"#6Ybm7:(5!U&Lu"WiN(uVP0&h9dUP` #R&6LNW9Fn,Xl9dB3J"l.2`GD!.k3&!2ff*#:s/8TnH`-%1!+?!W2qL!.k3&!13`r"WpR/hVmJTk1n.g TMu[&!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcLB&JcPNF#6YYb2c"XaYPu3E^V@Iq]Xb20ECVQ% &I,'3Z2b7@/lR"OHu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!.k4"!#PhJ)_4*]JtB'G Xfee.XKJRnIpG#X((CDg!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc20b"Bl"9JE#JcLB&JcM;@ #6YPW/3mZqS,K8pX/N%uVO;m>3[5FM"9=#Rec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq "U"k"!.k3&!.k4A!"K5gJ)&o;io]+PcGOiU"eYk!!!<NG$No#]JcLB&JcNmm"9^fa2[$kqJcLB&JcO7" #6P;H*\CWRWW'R4^;%G^]a(p<K3pnq)%"CbNW9Fq/lR"OHu<1]1a*<[!.k3&!2ff*#rcgo[$u&"&dnpI !W2qL!.k3&!1X#q!s];N,>*!CXK;E'%'H_7XJCem9emn,"os5Tec6'a,=>s_B3@hg.MrK&!.k3&!.k4> !"9&^>_o21>qlco"U"k"!.k3&!.k4F!!iZ4%i6HbEg<[(VuWmsW!B#RDGE#5'F1H7Z2b7=,Xl9dB3J"l .2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!.k3q!"BcUgYCZEk2P7SgnR=O_uP\q!sokR"8i.N !.k3&!2TYu"?WM?"SMhI!.k3&!1X#s!<if>(e/eC\@TAer4`NJWg.j65:$a>rrIcQec6'd/lR"OHu<1] 1a*==!.k3&!.k4>!"9/mE1OA*EBb'D#6Y($!.k3&!.k4F!"/i2#72#%@uI@fY,qQ'$EBME@nABo#m(// VuX+'$OJ%F@ru?d8inL>$/GT5!.k3&!6Y?N"tNr7UkW/0%1!+?!Q>%j!.k3&!7LoV!X&`7'09Z\VPgGm Wr8t*V3QL?9/7Lo!WiDH!0.$e#p_rNFD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB&JcM): "pdQ&`m``(rT43tB.F8c!.k4"!!<NG$Nma9JcLB&JcP0<"9^fa2[#TMJcLB&JcPNF$NU>6$5,=0N2a%j ]_oMP]<J&lGuc^9"9S]+W;s4($OeXdG_pfc>Y6gr%G_#9!.k3&!6Y?N#rcgo[$u&"&dnpI!Q>%j!.k3& !7LoV!WrQ1%4kD$Q_11YY5GC/T9">/748]M!s/PK!0.$e#pVfIFD"`K4";'RJcLB&JcM\K$jJ4eLnoc2 0b"Bl"9JE#JcLB&JcM;@$j$P7#Rr@bGEn\oWi5ls#cX>RH=TMo&-N%:!Wn&Uec6'a,Xl9dB3J"l.2`H& !.k3&!.k4>!"9)`?&#&+?8;rq"U"k"!.k3&!.k4@!!WKFA;@;1ir/!BabNV:#bh=&!!<NG$No#]JcLB& JcNmm"9^fa2[$kqJcLB&JcO7"$ipG5"q3"ZGF##-\@qjU$bWsPUQBC_*X;iN!mL_*!"02f;g=.HDHodj +Us#'JcLB&VZ7,32fP=pRrLY*$O6e8quD<KJcLB&S,`ot!sA`4+@'CdOIiKLXTtbqOaC7i'a4XA!s4/V ec6'a,=>s_B3@hg.MrK&!.k3&!.k4>!"9&^>_o21>qlco"U"k"!.k3&!.k4F!"8l1"9]#T6=PG)S#3._ Wsbr'RZDc!2\uW#"9PP&Z2b7=,Xl9dB3J"l.2`HJ!.k3&!.k3o!"9)`?&#&+?8;rq"U"kF!.k3&!.k3p !!NTY:k,q1rT4:7XaF(n"31D"!!<NG$Np;,JcLB&JcMVI"9^fa2[&gSJcLB&JcM8?$NU;2"s?'6I$:G7 ^&>\O]tCk]Uk;Yp$N^S;",-a+!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+58">/"9G1rJcLB& JcPKE$3C82";WX_B7?&?qlL4.Whbbo6lZI:"9YV'Z2b7=,=>s_B3@hg.MrKJ!.k3&!.k3o!"9&^>_o21 >qlco"U"kF!.k3&!.k4!!"/i0!sBDo9kSj8Tr@pj$`C#%ToX([*XDrQ"3gh+!"0)Y7:gRR>"q+.)$tlp JcLB&VZ7,1/7""(KO-DC#R(>3quD<KJcLB&PQ1go-sED&rT4:>bI![=&cMc^!7LoM#oX0RZiG[XJcLB& m/R7l4/Y"?RfJ$?JcLB&o)K(!'e;^ZJ=EdV^AYeR]tM(aP\;lf%LE6:!3uS4$nbJ'M0s2G8i.\#h#N$, JcLB&b5_qW2fP=pRrLY*$O6e8`;kJiJcLB&cN"da&0Nl)CP\RaXfee.Y-"e.Tmp#k%giLCblEb($OJ%F @ru?d8inL>$%`//!.k3K!"9&^>_o21>qlco"U"l(!.k3&!.k3<!#5SI+u`84L7>3AW2cnsVlHbgIT@m. !X]/8K`K[($OJ(IATVQg9fsjB$+U%f!.k3&!:Kmr#:s/8TnH`-%1!+?!MKLF!.k3&!:Bgs%m#BuiSrq\ in`A9O"(4,!3ZA)#oX0RfDpL'JcLB&aT)GH4/Y"?^AricJcLB&cN"CU%NdAmCQ5:']Y2"n^](nO[%2SB 0d@A<blEb($OeXdG_pfc>Y6gr%>"S3!.k3K!"9/mE1OA*EBb'D#6Y)*!.k3&!.k3<!!iW5(*kb>Ga5<- XU))3XK84TB0djG)%Qq*!7h,X#pVfIFD"`K4";'R\H%3]JcLB&mf3b#.pRn+L0ZMC#R(>3T`BZEJcLB& o)K1#$5Y$I=Efq)Wi2krrhp+&Tnm>L-5mC!W;s4($OJ(IATVQg9fsjB$/GT5!.k3&!6Y?N#:s/8TnH`- %1!+?!Q>%j!.k3&!6P9O!Zk[`f%]'BiniJFUHo=0!/ggZ#oX0RquD<KJcLB&V#UW$4/Y"?p&K[EJcLB& QiIj%$54I0;LG(C\\,Vj^V7Cp\>YI.:]`R"%#"]4!"02f;g=.HDHodj+Uts^JcLB&JcP6>$jek3S[=l+ 58">/"9G1rJcLB&JcPBB$j$YD'd#_SM57/SXfhZ*#ct%kH!NWb)%!8BZ2b7=,=>s_B3@hg.MrKJ!.k3& !.k3o!"9&^>_o21>qlco"U"kF!.k3&!.k3s!"Au7%i6?VB8<1WWiE"trhp(!P'C;!//\c=!0.$e#p_rN FD"cO4=M-SJcLB&JcM\K$jS=hL7s9,1(=Km"9JE#JcLB&JcLr6%h([q^s:]ojPetN[U(-\!.k4"!!<NG $Nma9JcLB&JcP0<"9^fa2[#TMJcLB&JcPBB$ipJ;$kb[;PHVC)]Y=B[#empST8R\b0+t5aZ2b7@/lR"O Hu<1]1a*=a!.k3&!.k3o!"9/mE1OA*EBb'D#6Y(H!.k3&!.k3s!"&`0"pk_k<dgR:Wr9%+Y-"gtMfi;h ,RquuNW9Fn,=>s_B3@hg.MrJD!.k3&!2ff*"tNr7UkW/0%1!+?!W2qL!.k3&!13a$!<`W6%5:k2R\HXY W2ckrW2Z8CFC##6,nG\0ec6'a,Xl9dB3J"l.2`H&!.k3&!.k4>!"9)`?&#&+?8;rq"U"k"!.k3&!.k4< !"T,YI&Oj3iT0(ZiQ6R9)[*#<Y5eY2)@HZ"!.k3&!.k3m!!EEdV`+an!.k3&!.k3r!<*!)![h$&VQdM@ ^&>\N]sOi4N+Y?mrW1@GNW9Fq/Q$eMH>HhX1Ed3Z!.k3&!2ff*#rZ^k[$bks&dnpI!W2qL!.k3&!1*Zc !WE-(*(=e0T;VRg"K\DeMfo8'0baZi!Jga,!"0&W6"=qH=@kP%(^[_QJcLB&JcP6>$jJ4cLS]Z/0F\9k "9G1rJcLB&JcP?A!!3'##9HBROIW)FW;Wb(WhG`8F]C12!W`>'!3uS4#pVfJEb8EH4=D'Rh#N$,JcLB& b5_qU/6de$JmC)?#R(>3`;kJiJcLB&a8cAV>)0-"hYlR?gS\pU)Zn1_MZ<hb(^^?B!.k3&!.k3I!!EB` SM^QD!.k3&!.k3;!;up'+%0q*T<5T9rP&KK\[&6)#'j&p$j["=M#c*,$O\@RCO0o+:dH]S%(Q@i!.k3& !:Kmr#;KYHWJk@G%giLC!MKLF!.k3&!:g*s!<E6'(,]3?MjpXAXU;)%R>5?>*s`&R"0DR/!"0&R3ETir 9g:BX('r^rJcLB&JcNso$j@tRGaESN.glRb!s-@@JcLB&JcO'r$NU80!Z*asH&7oaW;Wb)W2H5PKP!Ro #mLM7d/]1,$O@h9=Ctc45r9i&$%`//!.k3K!"9#X;0\@K;_/7\"9\c'!.k3&!.k35!!NEH7<5NbrT47; \W:A_!""8Xdf9FN$3RU7JcLB&JcP-;!ZtqlRK.p>JcLB&nGrOh#8JsiE/UEo^&>\R]tCk]WJkFN(_I,Z XT5X,$OS+C?#F"H7Q;e5$f(f7!.k3&!6Y?N"tEW&Rs\6i$j["=!Q>%j!.k3&!6kNC!='/`5?i8hT<.sm $EgA(QZl@\&e,*Ld/]1,$O7P(93FtT2Com^#_E&.!.k3K!"8uQ6tqHi73i0D"9S]&!.k3&!.k3:!<*!' <kLFGcUfWWoN)W2c_fPQl>20,"d#"Gm-0!"0#M1/1qI6T?Y>'*u,KJcLB&JcP6>$j7\ABng7j,mabY !s,(qJcLB&JcP*:%g*b?MV@.Pk2tODZ'Ji>!iQ+%!!!,P!.k3&!.k3l!!3Tj%))^n!.k3&!6bEL!<EZS 1eM_MWkA;F$bj<e]!IlM9ICbk#giX4!"0&Q1f%@R7QW:K'afNmJcLB&VZ7,/,Y2m5DFl5a"pG)0quD<K JcLB&PlM*k!=B\o4'[3%Y5>=&Y,e?&LLN@c'b(A(!7h,X"r8[P8jG9e,T.-u\H%3]JcLB&mf3b!)`_,G =ZRT0"9\f-T`BZEJcLB&n,N^p!=B\n4C*<"ri-F.X/MtsVkA]Q4rtFJ#-@m2!"/uH.6pTo3%lTs&-q"k JcLB&JcNso$j7P3>]j44*s_uP!s-@@JcLB&JcNdj%Kn+pcK+'Kk2G(A`g/RhbQ*4pJcLB&JcMSH!WsAD o`0RDJcLB&P5kgn&fiAtJ>BgQ^AtnNW/+b<-5R&H!7h,X"rJmX9g^rr-l`g)\H%3]JcLB&mf3b"*^!_R ><O/;"U"o.T`BZEJcLB&mJmLs%2L$NCQPX#qQ1"*Q#]PJ*"`IY!3uS4";2n84Z"`;*Yf+gh#N$,JcLB& b5_qR'eW-h8M:qd"9\f-`;kJiJcLB&aoDbQ%2L'QCQGEmWiH'!ri-0cEDA#*&I?baNW9Fi'-f=u2D-<u 'b(A!!.k3&!2ff*";`adA4nTo#6Y/3!W2qL!.k3&!0.$_%oUI-jQ-=&!p&Fc!F?Rq!.k3&!.k3&!:'Ub #ak[E!.k3&!:Bgp"q21c6#`-o\\,VirP&TMY*aK;5:@0C!O2X1!"/rC+YPc/.O6#K$jPMfJcMbMnH&Cd o)n^hq#p3kmfrUnpB^U%mgAn!kR7G#q$m-0q%*63q@W<3$PtEb?Zf[F0c_/K(&J]f!.k3&!.k3n!"&i7 %i$j(JY/sFXS]+)SqCTE0cgc*rW1OLNW9Fi%2^?@-6O6C%gW;i!/1FP!WE,f!pKg="Sr;k#4`#u#NuH` $2Fqt$g\<1&L05/?q`O-().>lq[\8YJcLB&P5ksn#nIb->_&?@WiE#rWrT.)RY#-C1*6r,rW.uYec6'\ %2gHC-6O9D%g`BL!.k3q!;cfb!q?BM"RuWk"nr5k#Or)W$1SAt%/p_.%K$_E&L9D4@88j2().>mq[]P( JcLB&JcP$8"p6K8^rtKkrT445Gqo]*!.k3&!.k3&!65'>#/("g!.k3&!6P9L":,DK0jKF-YdD!TrP&`R Z_We2><!Q(!W`>P!0.$e!t5kc,Tn$A&e#$KJcLT,qZ-ZtrW;Wmr<2s#p]g[%rWrH/p^6s-oaLd.r!rZ9 rXf#?p_*N=rY5,Br>,AK!#PSNrYbVPr>YYSr>kkYr?(t\r#u"_qBPqar$D:gr?qFir$hRor@8705uD05 A5blQ1,1K]0E3_X!.k3&!0[Bi"9o/A-VA<=StrFaXU:kdI:Yu$'a"L=!K@*1!"/l7%i-*"'bLl]"pDI: JcO-tr;lcsncS7^r<<$%p]pKursAN.r!N9.oF:a/rX\c8q%<Q<q%WT=r>,AIq%ilFq&/iEq&KDU!$:nW q&g"i1-ncD;+!2j-R\a9V>u2JJcLB&mJmUt"pk_d9lH&]Tr4geWsbr#O*kP4/JS?h!WfP+Z2b78#nIgl (DRMm#mLOg!.k3P!;urq!quf_"TAQ&"o\`$#PeYq$2=l,%/CA*&,d(3&cEC='_iFA(AAUF(\emH)YtHO *VgcU+7p]S+q#_S6W7>j75cSC-RSd<s!GkgJcLB&JcN^h"VOXbVoIQkjojG)=!n@#!.k3&!.k3&!2BMo #4qnI!.k3&!0[Bj!sAf8,Y<!>Up%;ArP&?G$Fm=:QZc%J!s8T*N<%N0$N^M>%MB9\$jm1A"1\D`!71`D !<<2r"9&H#"oJT)#Q>#.$2Y)0$i1;2%K6k:&,m.>&c<:A'E8dH(&\mH(B,-L)#bEQ)ZLcU*<$uX*r[8\ +TEVb,5`\b,lT+h-N5Cj./taq.fLst/H7=#0)mU(0`<a*1B'*/2#B322ubl:3r_;?4T@SD55meG5QF(O 5sdp;6iKLQ7JfO]8Q/o.E+iT\:JO[`:&[nb!.k3&!.k4=!"/l3":#l,?%%g+W3#p!$EB\\Jm^\[!s8T+ YlM'0$N^G9$4R@L#R:J8"5Ns/!3?2#!W<)p"7lZq"oAN%#65#*#lG#.$Mt5,%K?q<&,Qq8&cNF@'`8^F (B,'G(B56M)>G0J*<%#X+8[2[,5WV_,l]4h-NGRp./PLl/,q1"/c.1#0E*[)1&Ng)2#]B02Z>W?3^ZP> >Z=Eer]^9Dr]\I)JcLB&JcNpn$NgM7#95j4I#j_mWr8t+Vl#rFJRUe_"9S],eGtU0$N^G:$4R=K#mUS9 "+gN/!<3)u!rW5h"TJZ)#5e`'#knZ&$N:J2%Jp\7&GZq;'DrRB(&f!D(]>6O)Z(NR*W-rY*r[8X+T<S_ ,Q/nf-2]+i-i5=k.K1jq/H7=$0)mU%0`Eg(1As',2Z>Z73;trD4@MtF>uj]jr]pEHr]l&8JcLB&N;s+c -W5>qg\p77h#t0>=>:#8!.k3&!.k3&!:0[e!X&Rn!.k3&!.k4=!<*!)!Z!\!I?p_9^&>\R^:_"`Xc-R< "Tni-YlM'0!W`<'r<*'$rW1gTJcMnQr;lp"r<*'&qZZp&rWiH/rsAZ3!"8W3!Y#SK!"Su=!Y>nTrY#2D rtPDHrtbVNrYPkX)&aG5*$$(!*rd>^+TEVa,5i_j,U=Z_-7:2>./tar.fV$u/-[[X/hSe20`<a+1B000 2#T<92`E]W3]m='s#pBGs$-NKr^$QNs$QfSs$coVs%!)[s%32^#Y[od9hnGZ:Jh!es&/kqs&K&!s&f;( s'#G,r`oJ/s'G_4s'Yh7%:`mYA7]@dC2@g+ChmebC]8,ODJjC8!.k3&!.k3n!"/f.!Wira8SEX;UTXNs $EgD)S9IXO"9S`-eGtU0!W`?(r<*$#rrI]OM#dPVr;ls$rWDfrrWW6)rWi<+r<`K2r!WH4rXSr=r=Jo> rY#2ErY>GKrY>AIrttYOr#>SSruV+\r?2(`r?M:es!I[ls![dp!%\%!!\>oTr@\+'s"OI-r%e4-s#'d6 s#9s;s#L*?r]C-Bs#p<E!^Aq8rB^HNs$ZiTs$m#Ys%*,\s%<;as%NGes%`Ph%8]ku;,U=l<`iO.=BJW$ =9;W.>(Qa+!.k37!"/f.!Wirb95&g:TW7sk!2p7)VkKN&:*TlE!s4G^ec5aP!Wr<&rW<*#\H%3]d/a1I r;us#oE>-srs&H-rWr9*r!NH4rXJ`8rt,&>rY,8FrY>GKrtkSLr#,MQr>YeXr>tt\q]Pn_r$)7g,UNC9 s!Ranr[Ijtr@A%&/hSgT0`Nm+1Aj!-2?Gfr3;ko<48_5@56!kG5R'M@6:4+.7/]RP8,Z$Y9DqT`:B+/i ;%6E$;c?Xp<``C->$+m.qcEo'>$Ij(JcLB&JcOs6":Qh`PLKKm"l[h=TQM9U!.k3&!.k3&!6bH@!riAt !r`;E!.k3&!.k3j!!s2c7:Uh8XLZ$YrkAiS]XbA;F%$r[%LNC="RQB[#6+o&#PJGu$18/o$fVTi%JC;, &,Qq9&GQk)')!"6'^HM/(A8R>)"njB)ZLcO)u(EI*VUWL+8-iP+nd,I,PWPW-3#=l-iPLr-n-Spr@@ju r[n.&r\+:*rA"=-r\OR2r&4O5s#C$>s#^6Cr]U9Fr]gEJr^$QNs$QfSs$ciTr^ZrYs%35_r_3>ds%`Si s%rVjr_i_os&K)"s&f;(s'#D+r*95,s'G_4s'Yk8s'u%=ral+Arb)7Erb;CIs(hXNs).gSr,DRRs)S-\ s)n?br-/-cs*4Ngs*FWks*alqs*t#us+10$r.Fm#s+^N/reZ4,JcLB&NrTRr+#Zr0KUSpCXfee/$E^J2 UkN,5'FkHTdffFLm0;t`lNm7km0WInm0htap($j.mh#F/m1K++m1eq&pD3K<lk]@5r>G,Ci>__8ruV+\ r#kt_r$2+bs!I[lr[@[or%%dus"41%r\+:*r\==+rA=O3r&4R6r]'m;s#U0Ar]L3DrBC6Gr]pBIr^6]R s$crWs%!)[r(6l[r_*8bs%WMgs%iYkr_`Yms&8hpr`/u!rE0)&r`]>+r`oA,rEfG1r*oS6r+5n@s(D@F r+Z.Gs(qRLs).^Ps)@mV!-G(<JcLB&JcP'9#7M_6;JC`LVZ*M&Wi2qtVP/WL2\Zc0#L`hN"ni/l#Q"bo #h]OO$MFnq%JC>$&,$Ro&bm%,'^ZY0(ASd3([W+8)XSO;*W7&Z+8d8[,5WVb,lT+g-N>Ik./taq.f_.! /H7=%0)mU&0`Nm*1Aj!-2ZG`83;bi:48h;@56!kG5lX.L6N9FP7/TLP8,Z$W9D_H^:B+/j;?'Pn;uBVo <W?+t=8c8$>5qe.>?kG4?2S%-?iOR4@fKs;AH-6=B)QBBB`)TDC]&#HDZ+MPE;jhYEcQ9E!.k3&!.k3f !"KGqE5UPkioK+RbIs<%#1*@%!.k3&!.k4C!:Bpb"8i<$"o/B##Q>#,$3(A4$i1;3%K6n9&H3:?')r^F (B,*O(`40C!.k3&!07*b$lq#jAr*4irk8?H%DBHf\>4jf3%Q6g$jm@@$h=`*%K$_7&,[":&c!(;'E&X? (&\pG(]5-K)>tKP)uL]R*W-uW+9*G`+T*D\,5<D^,lAtd-N#7e./YOm.f:gp/H.7!0)RC$0_mI$1Ais, 2#0'-2uGZ53rM/>4T%A?55[YD5lF"I6Ms4K7/]RL7f5dT8Gl'Y9)MB\:&Rib:]=2b;>a>k;uK_o<rH,# =Su>#>5_\#>l7n+?N"70@/==1A,^$=AcHB?BDlNBC&VlHC]8/LDZ+MME;OYSErC(XFoHR]GQ)mdGlE!e HMW$gIK"]pJ,OosJc12tKD1)uLAm#+M>iG/N;AP5NrP1:OSt@=PQ$gGQ26gCQi<BPRJiTJS,/]UT)P;W T;DU?!.k3&!9sP&#Sn[D;f[qrXKAV-Xf\\-WfV0q/0YrC#R:V,#l+f)$MY#$%K$_7&,6_2&cWLC')<7: (&SjF(&A^D)#"p@)tt?O*qpcO+T*GZ,PWP_-N#7i-i>Cg.ekOl/Gq*r0)RC#0`3[$1AE^(2>K0.2uGZ6 3W(r;48_5=4o.AB55meE5kdSD6iBFN7JoXQ8,Z!S8c23Y9DqQ_:&Ri`:]4,h;?'Po;ts>j<W6%r=T2J% >5_\)>l.h'?M\(,@esU2Abp'=B_uNBC]8/HD>nGIDuFYPErL1[Fo?L^GPZR`HN/9gHiJHgIK"]pJ,=cp JbjutKE$W'L&Hc*L\Zc(M>iD/Mol$O!.k3&!6,!E#o4jH<,mnlWrAq*Wi)ksVN5[n/L),F$2b(t$2=l* %/UM5%J12/&G-S4'DW@;(&Sj?(\\gF)YtHO*VUWS+7gWQ,5EJ],lAta-N,=d./bUn/,1[n/c77"0DR=" 1&*O"2"rp,2uP`83r1o948D#:55[Y?5lO(I6Ms4K7/B@H8,,[O9D;0V:An#c;>jDl;ZKer<;]bp<r,np =T2M&>Q%h+?2It)?i=F0@fKs;AGp*9B)60>B_uNBC\hlEDYe;JDuanXEW1"UFT$@YGPudcH2i-fH2`-g Hhr-eIf=imJGt,tK)L>uK_^B#L]3,+M1P_Z!.k3/!!iWB:8ln$hW!T"h:g&Z;AP&gJcLB&b5g],p&k-o rrquuqZm*+r<`H0r<iK2p^I-2r=A`9rXo#?r>#/ErYPPNrYkVPr>kkYr?)"]q]c"br?hIjr[@aqr[[t! r@\%&r\=C-s#'a5rAX^8rAsm=r]^?Hr^$KLr^E[aJcLB&JcP'9$jI:`-qJKJZ+R`_^;'Z\$+m=,HsB0" ,SLdf')iRD'`/XE(B53M)#bEP)ZC]T*<$uX*r[8]+TEV`,5WVa,lT+i-N>Ii-ib^r.K1gr/,q1#/cIC% 0E*[&1&Wm,1]K<02Z>Z73;tu<48qAB4oRYE5Q3qI62j4M6iTRS7J]LQ8,c'Y8cD?^9`Iid:B"&f;#=,h ;?Tos<E3*"<rQ5#=oMV(>Pqb*?2e10?iFI4@K'd9AH-6?B)ZHBB`;`FCAr#KD#\DPDu+GMEW:(ZF8g=] G5HL^H2`'fH2i3gI/\QnIf4crJH(0%JV&LNKD:0"LB!),M>iG1N;JV6NrP1<OSt@>PQ$gHQ2HsGQhZsH RJ`NAS+`BQSbo#VSb8WKU%P/RU\gk`U\pqcV>I.eVtR(]WVidoX88jnX8T-lXnT!jYO8X;!.k3&!.k3j !!i]:'d#GDK:oCCXTt>JB1Y'4)\2`SrXSo<q[iZ;rY#)Bq\B)GrtPMKr"f;LqAK&Ir>beXqB,SWs!%@c q]u.fqBu7jr@7[pr[e%#q_%n%r\4=+q_J%*s#'^4rAX^8!'1'>r]:$?s#g<Eq`asCr]p?Hs$QfSr^HfU r^ZrYqapf[r_*5ar_<Aer_NMir_`\nr_r\nr`/qur)iu%r`];*rET5*rEfA/!+Pk8qIBG7r+H"BqJ#tF rbVLLrbhLLrc%gVrH/$]rc\9bqfr*ds*=NhqL/?lrdXlsrdk!!pk/R!!/19(q1ed%p5&Bur/10*r/CN4 qi:?1p5ns0r0$r@rKR>Hr0@/FoU#KDr0[,ErL3VQopkKBqk*hYpn*-<JcLB&NrTRk%2C!I@=k&MWi2kr $`Ku'WL/9M90+RC&,m%5&,m.9&cNI@'`/XE(ASdD)?(QO*<$uW*r[8U+T<S`,Q8tf-2T%g-i,7k.K:pq /H.7#0)dO%0`Eg(1A`p+2ZG`83;P]848V/?56!kE5lF"J6N0@O7/]RO8,GmT9DhN]:B")h;?'Mo;Z9Vm <;ons<r5tr=T;S(>Q.n+?2It,?iFL2@fBm9AH$0<B)H<@B_lHCC]&#GDYnALE;sqXEr'nWFT?X`GQ)jd H2i-gH2i3hHi&3gIfFopJH(2mK)C8mK_C/nL\uu$M>W8.MZA_6N:i2.Npi&&OS4k7PP^U6Q1UC@Qi!0C R/i]MRdcgAS>H:<!.k3&!9F1j"u;.\f%]0EhVHr.E\\'*!.k4(!:'^^"8W0""nr5u#Q4r*$3(A4$ht// %K?t=&H37?&c34?(&JdH(]P?N)Z(KQ*W@,Z+9!D\,6&qe-N5Cl./k^r/,q1"0)dR)1&*O&2>fB.2u>T4 3r;#:4odeD5Q!hE6Mj4L7f,aR9)D?[:Adrc;YjAj=8Z1t>5MS&?Me.-@esX5BDcK?D#8,KE;O\PFo6I] H2E!cJ,=irK_gK(MTPpN!.k3&!6,!H!sT,D/RFC<\\,VhrkAuX]sOW#Ht>u,*#KP3)B0Xp*<.&Z*r[8] +TEVb,5rhe,l]1i-N>Il./k[q.fLq#/1iJ,r\+:*rA":,s"j[3r\jd8s#C!=s#^6Cs#p?F#X:O=5X@_' 6UUi@s$clUr^R;d84cBF8k_oQ:/:das%rYkr_a##;cQgu<`iL-r`]>+rET>-$sm7I?XR8M@q0%[AS(jQ s(D@Frb2XQC27U$Ci4-/r,DUSrc8$[s)n?brceBfs*4Ngs*FTj$@R>OIXcitJUrE)r.Fj"s+^Q0rJ:N4 r/CT6rf7#>rK.&Brfd>Gs-<PKr0IPRR$jD3qjRSTrLNqZs.0+\rLs1arM0CgrhKLhs/#ams/5jpr2K^r ri?(!s/Z1$riQ.%r3,n"riuI.qm6()s0_m8s0qj7o=;QFlakl`rO]nYm(Mi"JcLB&JcLi3$j-V<$R8>h S>r`nXfW#6Y-"e%P(.+B4=:jVrY58FrtbVLr"f;LrYbSPr#G_Xr#bhZ!$_Cer$;:hr$VLmr@7dss"+.$ r@\+'r\4@,r\FF/r\aX4s#9p:#WXn+3]fDc4?`U+s$-NKr':TU6UX=277Kd;r^cuZs%<8`$qs>h9hnGZ :f("d;H!KmrD`brs&T)#"Bel2>?h)3rE]>-rF#V6rF>b:r+H%CrFl=KCi'#ds).[Os)@pW"E\a.G'<k/ rHS<fs*=QirdFfqrdXlss+1*"#_Rb_KnY89LPPe`r/(H2rJLf;N/`gWr/^f<r/h8JP*;)oPa.Q#r0RGO rg<YP!h,RIrLE_Us.B:^rLa(^!29Cer1s@hqP=.grMK^qWMuqurN#Cfm&]TV]rpk-m]E>dJcLB&JcP'9 %0H_=$6r;iRAHp`W2lrtW!K)YIV2VD-l!Ep'`8^G(A\jG)#tTR*<.&W*rd>Y+T<Sb,QB%g-2f1j-i>Cm .K:pt/H7=$/cm[Z0`Ed*1&Wm,2#K932ubl83r_;?49@]15Q!eH62s:O6iKLP7K,gT8c;<[:&Rfk:f("e ;H$Nl<<#tu<r?%t=9Mf2>?kG4?2\+-?iOR5@KU+NA7YaPr+>k>s(M@F!,MOLr,2IOr,D[Us)S*\s)n6` s*4Ngs*4Qhs*F]lrd=Wms*srss+10$s+C9'r.b-)s+pW1"H&(pMi@Rns,Qr:rf@,Arf[;Frfm8ErK[MO Q^I`>r0mJOrLEkX!hQ$VrLikX#,7ieUSO]^qkjCknYYWKpSRY]eu.l5mA]'E\Z3dPJcLB&JcNRd%iof. bM1n9jPo.RSQI?M!n..-!;HWj!rN/u"TJZ##6"l-#lG#/$NCM1$j$kI&,d(=&cE@B(&SjI(]P?P)ZC]T *WI2\+9!D]+pK;<-71)g./k^r/,q1#0)dO50ekF=2)[?O2`NcX3WqK*4$Gk-570\B6:++07Rfp>9)_Qb :B+/j;Z9W&='&L+>$>09?=71?@fL!=BDuTRCi"!,E,]i?Fa&%TH2`3kJ,b-"K`?i-MZ/P:O-,Qgrg*SP s.0.^&u25"Vl6PoWi`D,Z*C[C[^N`WotC=;lbMl)m)850m)SY<rQ4BKm*=tEm*kCRJcLB&JcLi3$ipG6 "s?TcT<P]5]taQ]&&,QWUQpFK<B`H*4$5Vg4oRYF5Q3qJ62s:O6iTRS7K#^T8,l-Z8cME^9En3c:/4S\ ;#F2i;ZB\p<W?,!=9Mc1>$G5/>lS+/?N4C3?j:%L@q9+]Ac?<ABE)ZEC&_rIC]A5NDZ=YRE;X_UErL.[ FoHR`GQ2sfGlN'gHMr6jI0P.MIt3'#Jc:9!KDL<$L&d&.M>rM3N;S\7NrP1>OT1LAPQ$gHQ2HsIQiEHP RK&`PS,JlXSc52\Sc,2YU&:Y_UBIBgUSO^bV>mFmVu3LkW<B6$X/`3!X8f:!Xo,@"YPGF&Z2Cp(Zh_!- [K!]8\,!Q-\H'2>])92<]`,VE]^<E4^@8o0^<+(<^%8o0^"^3g]D9)1](<J0!.k3&!.k49!"&c0"9]K& AW*.UWr&n(Wh,9%D-97\/c@=%0E*[*1&Ng*2#fH32ZG`83<)#<3r_;@4T@SC4odhH5l<qJ6iKLR7K,aX 7n?2L8cD?^9E%Wb:&[ll:Jakb;,U<k;uK\p<W?+t=T;P(>5qh,>l7n*?Mn41@f0a6Ac69@B`;`GC]A5K D>nGLDuO_TErU7]FoHRaGPl^bHN/9iHiJNnIK+cqJ,FisJc:9$KDpQ(L&Zo,L\uu+M#`G3MuJ\8NW5%: O8P+=OoCODPQ-mHQ2d0JQNESCR/EBPRf8fSSGJfYT:VYPTDtS`U&:\cU]R?fV>@"eVZ!FlW;ijfWrB(! XT#?tY5bX%XSf4"XSAptY5bWrY2HGNXn/XYXlukXXl6GOY4JdgXRiLaWlb<n!.k3&!6,!H!WrQ.(HuGf S"ZaYrMp=)VONQoCg'7^/h\mV0`Eg)1As'.2ZG`93;bi;48_5?4odeI5Q*hI62j4N6iKLO7Jo[T8c;<[ :&Icc:]sWn;H$Nl<<#tu<r?%s=T;S)>Q7t.?2S%,?iOR5@fKs<AH$0<B)QBAB`;`GC]&#HD?+VRDu=PU EH6*uFT-F\GQ2peGm8M<H$Xd`Hi/9hIf=irJH(2uK)^K$K`$T&LB*//M>iD4MuSb6NW+t9O8P+;P5gaF Pl-gEQ2m6OQi<BMRJ`NOS,AfVSc55\TDYAVU&LedU]7.hV>R4iVuNXnV>mFjVuN^pWUQqbW;idjW;iml W7S!@Vrt#,WlqF6WV*4RVuEQF!.k3&!/U[[$:TWG`7sGRjp'eQInhL*"/>ka!rW6$"8i<%"nr6##QG)- $2t;3$i:A4%K?t:&H<@?')iXD('GEj(`F=j)ugrX*rd>]+T<Sb,l]4j-iYUo.fV$u/-[^Z0JP:;1B'02 2ZG`83<)&=3rhGE55mbL5sdn,7K,dV8H2<]:&duf:]sZo<**0#=T;S)>lJ(0@/aU>A7T=cBl%VbDZ=\T ErU:]GQ2sfHj5(MJqSf4L]322N;en<OoCOKQBmr,SY2YTU]77kW;imtXo>L,Z*C[C[f3i;^&GeK_o'Cm `;[dVa8X0`bKJ2Xd/MMof)FD"g]$".h>H.0iW%p;jRhI(iTK(jh=KG#gY^cZg@Nnge+D#ZcLoBPao09U a7I=E`;[ZO!.k3&!.k49!"/f0!sBH(A;HeV[(Q=O#J7@GUmmBpEW0qREW1"XF8^7]G5HL_H2W!eH2W'e I/\QnIf4cqJGt,uK)C8tL&Qf*LAm#,M>`A/N;AP6NrG+:OT(F>PQ$gHQ26gCQi<BPRJrZLS,/]TT)YAY TDG8XUAUecV#@(fV#I4iVZ3RjW;<LmWr9!uWrK-uXST'rY5GKpYl:p*ZM1]u[/RK3[f3c3\G`r,\c98< ]D&u:^&G[T^&5PA^&Pe<]_8u8]'6cm\G`o7[f!Q#[.CX&ZMUs)Z0njkYP53oXo5?uX8f3B!.k3&!.k3j !"/i1!sB5i;0%P^UosZu$a-S,S<8SQCL(.L>l%b'?Me.-@esU2AH6BABDuT@C&VoID#8)KDYJ)KE;XbU FT$@]G5ZX]GlN*hH2DsbIK"]pJ,=cqJbjutKE$W(L&Qi*L]*&.M#3&/MYi>1N;eh8Nr4t8OSY+=P5^[F Pl6mHQMQsIRJiNORJiTRS,/ZNT)G;\T),)YT`:_^U\gkcV>6qdVY[4hW;`d^WrK."XSo9mY5YR$XST'u XQ-G^Xo5?pXn]!qXmW@hXo,9uX5BrTWVi^iVu3FlV"LP\V>$e\U\ph_T_Y5WT)>5PT(\]QS,JfOR=YEj !.k33!"8o2!sB8k;fRVZTrP0mWsbl)Tp^spH#$_k?![;5qd9;1r*oY8rabt=qI]Y<rb2.BrbM@Hr,2CM qJcFRs)RsXrcS']rHS?fs*+Ngrd"Khrd4Khr-nToqgeWrr.=p#qLn^"qhP3-qhb9/rep`6r/L]9pQ,35 qi^rBrKR/Drg!GJrKmMNqO.5Lpm_,Mrgj(\rh'%[ntH&WrM0@frMB=erho^lrh]UkqksImrMfXnn#H5_ qkr_XrMTCggT(.Mr2BCg!2f^lr2':frMT4`r2'@fr1j1akb7dEr1EnYqjmPQnXK<Bp6klHrKm>GV>u2J JcLB&irB2u6#<4@rT4FGa.mi[3$8_8"8i<#"n`)s#Q>#*$2k51$i(50%K6n7&H<@>')iUG(AemH(]P?O )YtEO*W@,Y+9*J\,5rke-N,=k./k^r/,_$u0)dR'1&`s.2?#N52uP`83rM/>55meH62j4M7K#^T8Gu0[ :&duf;#XAk<;otu=T2M(>lA".@/XR6AH$6?C&`#LDZ+PRErC.[GQ)meI/e]pK)UH&L]*,0N;nt<Oo:LC QN!<NSc5;]U]77kW;WaqXo5I&YlM02[/[T6\c'5@_#D7M`;djWa8O-ZbPf`cd/DGmf)OIug]$"*h<Nkq h>Q.!g\ok(f)=(te,7SlcMYl_ao'3W`r3jR_u.=I^&>M?[emH0Z2Cg(Xo,3sW;ELkU]$k_Sc"oRQMm$G OT:OAO8Fn7MZ&>-K`$H"J,OcmH2Mm`Fo?@ZE;OPQCrua0!.k3&!6,!H!<E6(&M6[mL7PKYr4`HL\[SlI W1s!Tp7;/RqjmGQ!294^p7h;Vr1s4br1s:fqkj:hp8I_br2T[qrMoaqqlKRpp9+.nm'-Gnp9O7qm'Q\u qmQF3mC;r%n@AM/ot0h.qn;p?]Y43Urk/6DpUpF9rjq[2oXOn0rjMg6osFM#r3H=,oW\7sqQB^trN-"! s/Q(!ri5goql'Omrhf[krhTLfrhTIeqkEq\qk*hXs.9.ZpRD,Ms-`nSqNq5JJcLB&JcLi3$ipD2!t?J; =E'+gX0)?&#ct&(UR[X2Lkbk`p5&L#qhk**r/CT6qi:E3pQ5*2rK@&Ar07)Dr0@>Lpm:oHr0[5HqjRGP pmglGr1EnYp7M;Vqk<_Ypn[e`r1s(_r201crM]XngoC=RqlK[smB6AhpT4=qqQ9[shlZmZqQ9[sriPgq s/l:%ri>Ccri,jpqksFjr1s=frMBCeqkO1brh0+[rgs+]pn%AQrgWkTr0dPOrgEVLrg*PKs-3MHrf[,? qiL`:rf6u;rJ^W3s,-i6rJCB,reLK-rIt9)s+C0"s+.$IJcLB&JcP'9$NU;1!t?J==E'%aVu<Y%WiDtm T:(n&LAZ_uLA6Q$M"Z]'MZ&J1N;&>0Nr"h3O8"b0P5LOBPjt%5QM[$HR/!*BRe*$BSGeuYT)>2XTD,#A U&:Y^U\pqdV=CG]Vu*@gV>R4cVu*FiWW&pQWqNCiVs()WVu!@VWrK'tW;ELlV?!LmV>d@lVtd.fV>d:i U]."YU&1M^TDtM^SbelOS,8ZORJrTPQi*0EQ2QsHPPgU@OS=h8Nr4n9N;eb6MYi8/M#E,*LAQZ&KDgE$ Jbsu?!.k3&!.k3c!!E?=5'b0HjpC,&`3#/G?qi[@rAa^9q`F^>rBL0Fr'L9L!(QoVrCHfXr([)ar)!;h qc*JprE/r#r*9,*r*]J4qdfV;r+Z+Gqel:Mr,VaYr-/$`qgA?lr.=j"qhP*,rJ^W7r/pl?rKdALqjmYX r1j1fr2BLmr2oq$r3?.+r3lR7r4N*DqnW-Ir5AQRqoATUr6,&ar6Y>ir7:i#nD!lrrS?\or8%A-qqM,) rn@A&rmUknrQbDcs2k8\rl4rUrPSWMrk8?BrjMg5riuF*riQ1"ri#gos.fRdrLNqUrg*PIrfR5Arf$f5 reLK+rdt-!s*Xcjrce?arc7sVrbhaPrb;@Erabt:ra>_3s'5P,r`K/$rD`bor_WVir_<Aar^cuWr^HfQ rB^HJs$$EDrAsp;r\sd6s#'g3r\=@*s"8m'JcLB&NWB%Z#R__19P]Wb\A/!Wrk/EH]=GJn\Al)M\b*Jn ]@FRc^%T,:]T0]%^A,G/^]2%8^&PbF^&,J?]DoJ9\bN]7\,Wo9[JI9+Zi.3/Z2(U(YPta'Y5PL%X9P`+ WiE,"Wr/joW;idpV?WlmUna]\V#7"cUAU_`T)tRST)>/US,\rVR/iWQQi*0LQ2[$HPQ-gEOT1CANr4n7 N;nh8M$/ZlLk^Z\L&?T'K)U<*J:E&tIXQYBI/eMi!.k3&!.k48!"&`-!XKPi4BQilWr&n%XK8S,WiG]i o;Ts6cDpN;nuVDai3):HnZCoSj/qpSo<$NEo</%oriZ$uriH%"r2fq#q6'b"riH.#nuD_hri#jps/5jn r1s@hr1s7cs.TFbrLa+]s.B1[r1*eVrgNeR!goCDr0RDKs-<VKrf[>FrK7#>r/^l<s,I#:rJU]5re^Q/ reLN.s+UH*!/(6%!eGoQrIFlss*joprHnQis*FTfs*+Hcs)n<_rc8$XqJZCOr,)FL!,MOIs(M=Cs(0=Q JcLB&JcNai$3://#T"mQ=Efk(rMp1'W2Q_rWMZTcV;eBEVXp_UVXpYTVWF`HW:d.hWJmkRW9^DQVoPb7 Wq`OlVu*FeWqraqWW&jpVuERnV>mFmVu*@jV>m@kU]."^U&:S`TDtM^Sc,)VS,A`QRK&ZRQi36IQ2d*J PPp[COSb+<Nr4k<N/WYpMuJV4M>rD2L\uo)K`?]'K)^E#JGt&rIf4ZoHiJElH2i-hH2`'eGQ)a_F96K' EW'kSDu=MNC]J8LC&_lEBE)Rq!.k3&!/COW!ZkORk5OKJjPJ\Hd)j29oWRkkn[.nro==D)o>'q7o#11? o#L=Co?6^Mo$I!Wp=B/mo@haLoA&omjkfjmpu1i(rT*t;s5Eq5rn[S/q:kr's475!s3Ueks3(Garl>&Y s2=oS#/J$f]t(\^rj;^1ric@(s/Q's#,eAoUS+0KrgEePrfdAEs,[/<#`=LpLP1>4Jq*cIs*=Tfs)n?^ rbr'ZDJX-'B4q3Ss'kt8s'G_1r`TM.='&@#;H!Kjs%`Pfs%<;^r^I/^77'=,5sIOsr]C-@r]'p:s#0j6 "u7nf0JG+3r[e("r[Rprs!Rgns!7Oeruh:_ruV1\r#>VR!Z2ajr>,AIr=])Ar"&o?%1W.BrsSi6V>u2J JcLB&jo>Yk'I,A0Gal"OVS2*)n@\8(be3V\lauVsWk#sU"LkkK[^Gn;qQp+*s0;F)r3-%$rN-4(XK/A$ ri?(!rM]drrMTjsVl$>frhTRhs.oRfr1a.`rh'4]rgs(ZqO@MRs-`nSrKmGJs-<VKr0%,DrK.&?rf6r: r/CZ6rJCQ1s+^B(rIb*$$%[YXIt)orI=6MAI/eNlH2i-hH2`$fG5cXaF8p:YEVsb_Df9N2Chmg$C2%D] B`D`FB)Z?IA7T1[@:3JM?iFC3?2n0P!.k3&!.k3f!!rc=)^dj[L7t`NiN;UNr2o%^hQ64Ke#qr<n?)2] n#Oa6];kA"oVh_d!2fUgs/#XhrM0@c!2'=brh'4^s.B.Zr1*eVs-iqTrg<_Rr0I\TQBd`"P`q;or/po= rK$r<s,I&;repf6r/(?-s+gW/s+UK+s+C9%s+1)us*t#srdF`ls*=TirHS<cs*"EbrcJ-[s)@gQs).aO !c2[grFu:Fr+Gq=rF>h9r*]J0r*B>-r`fD+s&o>'s&T/"r)E\pr_a#!;,C(b:/4MXr_3>bs%7kCJcLB& MZ="c%icu`AV?YT!ii2sor.>Whl+MoZE!Dnn>PrVm&0?Mn>5TNn#,!=ntu&U"JhigUS@IUr1O(^rgs.\ rg`hSrL3YPs-WhQrg*DGrfmGHrK@/AqN(W9rJgf8s,6o7re^Z2r.k3)rIk3'rIY'#rIFlsrI4Zl#((ZB H$OXZrd"Ngr-/0`r,`!\EH1qrr,;OOr+l@KrFu:Fr+Gq>s(24@s'u%;raGb4r*KD/r`fG-!aAi3r`K,# r`9&!r)<l!;c6Lj:f.'brCs-hJcLB&JcOa0"pm5Lf%\s8p"o/nnD)[Np"T#jnCI*Xn'LOKnB:LHr5nHK n&Fk8nAFb2n%J2#n@%hnn?MVh#d(5/Wi2hnUSIg]s.01Xrg*SJs,m;A#`O_"MMHk<JqEuOs*Xilrc\Wj F`MMAE,KK.rb;CFs().=$"@:M?=$lA>$>&-=8u8";Z9Mm:B+&f8dIsY7Rfg86:!p:5Q<qI48q;@3<(r; 2ZGZ71B0*/0`Nd)/H77#.fLh!-RU5d,lJqd+TEP`*r[2Y)u^`W(`+"e(B5-I')rRA&-<@O%K$Y7%0$_8 $N(51#lY)(#6"f)"Sr5i!kJA`!.k3&!5\^D"Uu:n4Cj;DZaI<RqRlR7qmtn"!4_F+r3uU4qmGasn[%no r3>RlpTOOuq6'IoqlK[qrMoaqql9@hpSdter20CgqkX+arM9+]p7hJYr1WeUrLNhWp7:]BqjRJOqj@)D pQkW?rfmAFrf[,>rf@&=rJgi:r/CW5qhb9-s+^<&qh+m"rdk*"rdXorrdFZkrHeHgs*4QhqKMp^rcS3] rc7pVqf)OQrGMXOs(hUKrb;@FrFc.B!+u4Arac%=raGe6ra5Y2ra#D+s',J+r`T2%r`9"us&8qqqGI5g r_NMgr_<Acr_!2^r^d#YqF:HQs$ZlSr^-QLs$2/9JcLB&MZ="c#ne10;0%ep!iDutqQBaur2fdrgoC7N ql'7eqkinZqk`t]s.fCbqk<q\pRh>Sqk*DMpRM,MqjR8Iqj@8Kp6Y`Dqj%)D!0mDFr0$`8pQ5'/r/U]7 r/C<,rJL9)pPA^%qhG!%rIk'#!.srsr.4KjrdXrsr-eEgrd"Khqfr-brc\9`rcJ!Ws)@aOrbhUMrbVUM qe?%Cqe,b:rF5h:qdTG1qd02+r`oG,r`]8'rE0&"r`/eor_reor_`\lr_NMgr_<Acr_*5_r(6lYr^ZoV r^HfSs$Q]MrBU?Hq`b!B!'L9Dr]C-@r]0s;rAXU3s#'^2q_G#KJcLB&JcOp5$NpbL*&(<3O.`5EVu!Fk WVi^fVu3FiV>I.eVt-_^V>R.eU\geIU%b5WTDP5XSbJZDS+`<FRJWBKQhQgGQ1:.;Pl6g=P4t(.O8Ft1 NVnb5Mu8J*M>`8'L]3&)L@p5sKD0upJbO]mJ+e?iI/\KkHN&3hGlE!eGl;jcFo-:[ErC"UE;OSOD?+SO D#\;JC&VfCBDQ6?AcH<?A,9[6@JaF0?N+70>lIt+>5_S#=8l8!<Vobp;u]bp;>sDh:A[c`9DqH^8btsT 7K5dT6iB@N62NqH5Q3kE4T7G=3rV,<2uPZ22#f>R!.k3&!.k3`!!O3=QDh71rm(Jcr5nlWqo8NOr58HJ qn;m;!4Mj7rNuI,qlfq"r2TXmqks=drLj%YqjI>IrKI,@qiCZ6rJLK-qh4iur."WlrH\Egqfi!]qf;RQ qel@Kqe>q?qdfV6rF#M/qcs&&r)ihtqc*Mlqb[/bqb?u\r(-`TqaLBKrB^<Fq`ap>r&X^7q`"C1rAFI- q_A"&r%@muq()Fos![mpr[.Rhq]c"^r?)%\ruLtUrYkbQr>5AIrtYACrXo#=rt#)<p^I-0r<iH/rs8H+ o`kF"qZQWqmK3=gR/hg=JcLB&MZ="b#RqIr9llMq!j&W5ppg=4s0hm6o<e;!qQg+*os":rqQBaurN-"! rMojtrModpqPa@jrhf[ks.oUgrhTCcqkEt]qOd_Wrgs"XpRD/NrL*YPqj7/Frg!JIqih#BqN1Z:rf6o9 qMbB2re^T1s+pZ/p4`Brs+:3#rdarsrdOfoqgAEirH\BerH\9arc\9`rcA$YqJlFPrGV[QrG;IKrG)=G s(MCErFQ%@s(2.>raYq9s'Ye4s'GP-q-<i%r*'#$r)inurDi_nr)3>fr)!;er(d5cr(R#\r(6fWrC?iV qaUKPr'^KNr'L<Ir':3FrBC-Br&jm=r&Xg:r&=@.rA=F.rA++%r@n.&r%@n!r@@q"r@@grr$h@gr[7Ri r["EAJcLB&JcOp5$NgS>%j*r@IZp4mV#ICnWW&joVu<LeV#@.fV#$kbU&L_^TDkG]TD"lSSGo#VRfAfR RJrTPRJ`ENQMm*IPl?mGP5CC<OSY%<NrG%;N;AJ2MY`2-M#N2.LAlo*K`6W$K)U>tJGt&tIf=cpIJS<h H2`-fGl;jcG5ZR_FSg+XE;"5LDZ"AMD#S5HC&M`BBDZ9:A,Ba4@/=4+?2n1/>Q%b)=o)8!<rQ+s<;fbp ;Z0Jl;#X8j:Amoe9_qE[9)2'V8Gl!U7f>dS7/K@H62a(H5Q*eC55m_C4T%;=3rD#:3;kf12Z,H-2"rd( 1&Wg(0D@*s/cI<q/,1Ul-ibXi-iGCe,kiP],5EAU+8d2T*<$o"!.k3&!.k3f!"/l5#nJ.C?[Rs%S>#hW rh]Uis.fOen=f`Prh'.\rga%Zr1*MNqO7>Mrg<YNqNgoArfmDGq3(W:plGB6qMkN6repc5qMG0,qM5!' qh+s&re('!s+1#srI=]nqgABirHeHgrHS<ercn<arcS'ZrGqpXqJc:Lqel:IrbM@ErFl(@rau.Aral%= raYh7raGY1qHj2-r`oD+r`]/#qH*\tr`/eorDW\nr_`\lqbHfYq+LHRr($]UpI5!JrBpNMr'C'Br]g<E pH8@8q)\F5r&=C/pGDY#rA"%#s"F@)r%@t#pFQ4mr@.Liq^;1dr$D7dpETV\o-!rQp`BDTJcLB&JcLK) !X:&V"`T6l[^NRBZ2Us+XoGF"W;`^nU]-qbSc5&WQMm$HOo:@?N;\Y6L]2u+K)L2uI/S?iGQ2gbErBtV DZ+DNC&M]EAH$';@/XF1>lIq+=T;J$<;oeo;#X5g:&dib8H)*W7K,XP62j+I56!_D3rV,;2uY`62?#B2 1&Wg*0)[@#/,h$t./kUn-N,4d,5r_a+9*D\*Vp`S)Z:NQ(]"pH(&ARB&c3.=&,ct3%/pY7$Mk)-#l=l! #6"f'"SW#_!ri=T!.k3&!.k3&!.k45!"8l1"U>c#>^i!2W3<T+Zi.00Z1kL#YPbR%XoGL&X8f4!X8f3t WVi[rVl$?jV>m@jU]7.eU]."dU&1J^Sc55ZSbnoURfAfUR/E<KQN*6MPl6gFP5LF@O8k7=NW"h9Mu/A2 M#N/+L&HZ'K)^E%JGt&uIf=coHiSKlH2i-gH2MmcFp<)3F)l;@EW0tUE;jeUDZ4JPC]A/LC&_lHBDuNC AcH<?A,g!:?j'hC?<pk7>lIt,=pA,4=BJU)<W5qs;Ys>k;#X8j:B!rj9MA&M8cD9\8,PjV7K,^T6iTLQ 62s4M5Q3kH4oRSC3rh;D3]K&Wr&4R3r\OO/r%\4*s"FC)s"47%r[\!ur[Idor[.ao,piO9rZhFeoHElM p)iuLp)WiH!$(_Poc!NAobdE>obQg-pD!96o+Lj3p(?s/pCHp,pC6m+aoI"nJcLB&_>juG!sAc=.nOH* Mj9m1rhTLf!hl<\r1F"\rh'%Yr1*eVs-inSrg<_Rr0IDL#*tR?Q'@Jrrf[2Ar/gl<s,R,=s,?i5s,-`2 r.kE0LPGe^s+LE)r.=p!rIFots*jlor-SEgs*FWg!-eEcs)n<_r,VdUqeuLPr,)IMs(hOHrb27CrFPn: r*oS3ra,M.s'5P-r`]>)r)iu"s&K"sr_rhps&&bls%iVh"AMQ`92#7Vr(6lY#"M0Q7R]a6r^6TLr]pKJ r'(*C"["n/3]];$3WD)<2uPZ62>oB11B0*.0`Ng'/cmUV/H%*s.fLjo-iPIk,lJtf,5`S]+9*D\*;UWR )>"d5(B,*C(%rF/($ZM+''g.p&GH_.%c@f^$hXkp$%`//!.k3/!!iW."9fAg95/kYM3=@%U&CVeT:_^H Sc##RS,JfRRK&ZSQi36GQ2d*JPQ$aCOSY%;Nr=t;N;nh9MYi81M#<&+LAll*KDgE$Jc(&uJ,OipI/\Km HN&3hGlN'hGlDpdFo6@\ErU.WE;a_RDZ">NC]%oGB`2TBB)cHAAH-0:@fKm9?i471?2e+.>Q7n)=T)>$ <rZ1t<<#nr;ZBVn;#X5f:&IZ^8c;0X7K5dT6iKFP62X"I5Q<qH4T7G?3r_2>2uGT42#T3/1&Na)0*3aY /c@7"/,q'q./t[m-N>Cl,lJte+oib_+TEP^*rd8Y)upoJ);c8((@)_#'`Sj@'B'Pq&E+/b%J:/-$LeDj $)R]S!.k3&!8dbg$nO_OJ"<!nQBRMpOcPQ^MMhCgs+LB'rdXrqs*=Tfs)n?^s)A!Us(q[Ks(D=As'kt8 "C>D>>$Co-s&]2!s&/hmr_<Yl8kMWF7RmAGr^-WNr]gEHs#^3@!]W.ur\jd6s"aR.s"OF)s"+1#s!n$s s!Rdms!7Ic"s>$1+!)IDr#>VRrYYYOr"f;Ir=],Br"/l=rXJ]4!XfACr!E?.r!3$%rrr<'q#g'eT`BZE JcLB&JcLB&JcNLb#mqtHAU]T)U8b-kW!]H#VP^2cUna]\V#@(dUA^e`T)tRTT)G5WS,SlVRK&ZRQi36M Q2d*HPQ-gEO91K(Nr=t8N;nh6M>rD3LAZc(KE$Q&JcC9#J,ausIK+]pHN/9iGlN'eG6W56F`hbHErC"V E;jeUDZ=PQC]8&PBk_6nB4h-S"Cu%Q@po@Gra>b5s'G_2r`oJ-s'#G*r`K2$s&K(ts&/hns%r_kr_EJf s%NDas%35]s%!#W"@Y^H6UUi>s$?ZMs$-NIr]LEI4$,J_3;tl82Z>Q51]K601&is-0E3[)/cI=$/,q+! .JtRt-RU5e,U<@8r?M=drZM[m+<M[H*ZZ4?)]K\6rYb_Qrtk\Nr=oAJ'GLBWrt58Brt#)=rsei6rsSf5 rsAZ1rs/K,qum''qZHj"rW1pWJcM&9JcLB&JcLQ+":#l';J?P_JrZ1aQBd`"P`q;orK7&?rK$r<s,I&; r/1Q4re^Q/s+gW/re:B*s+C<&s+1-!s*t#srI+Wk!dT';rHS<cs*"EbrcJ*Zs)@mSs).dPrbVUMrFu7E s(D:Ar+#Y6rF#V2rE]G.s',J+s&o;&r`9&!r_rkrr_ibns%r_kr_<Yl9h\5R91o.Ss%*/[r^QoVs$ZlS rBUKM5<o'0s#pBEr]C-@s#L*=s#9p8s#'^2rA"F/0e`S]r\+7'!\GrSr%%[ps![gn!%.Xir?M:cr?2"[ ruV.Zq]#JOrYYSL!YlFcr>#5Ert>8Br=B#@%hAFFr<rT3r<`?,rWi?*!!N?+pB:?qrW<*#QiM^<JcLB& JcLB&iW';k*B$l2Fb,L:P`u'/rfI#<s,R&;rf$l8s,-`2!/UW0r.b0're(0$s+10"s*surr-SiuH[:!` H$FRZG^0.1s)n6]s)S-ZrG_aSrGMOLs(hRIrb2=ErFZ%?s().>r*o\7ra5V1s'>Y0r`fD+rE/u!!`i<$ rD`eqs&/kor_WPgr_<>arCQoWrC$rZ6pj=.5s[d75lX(K55[PC48h2A3&ikq2Z,E11B0*-0Ea$^/hJ[Q /H77".K([p-iPIm-3#7g,QAta+TEP_*WR5Y*<-rT)>b3M(B#!G'`SjD&cWF?&,Zn:%/^J.$2t5/#Q=r- "n`#s"9&B%!PADa!.k3&!.k3&!4r4L!Xp#&8n;C=?=$lA>$>$0=&`-s;G^1b:/+I^9)hH^7fGg[6:*t& 5<f'.s#U0>s#9p8s"t3?1,1L;/hS\+.k<)!r[@dos!Iakr?;@e+!2OFrZ1qVrYkeRrtkVLrtYMGrt5/? rt#,=q[<N6$4?\;rs8N-q?Hs'r<2s!nH/UgJcLB&JcM&9JcLB&JcLQ+":#i!7U-".Ed[k?rIb-%s+10" rdXorrdFZkrd+Qh!-nKgqfi$_rcS3]s)S$Wqf)OQrbh^Os(hXLrb;@Frb)4Bral(>raYt:s'Yh5ra,S0 qcs,)!*]A)r`K/#r`/qrr_i\lr_WSir_EGer_3;`r^m,\s$urUr^HfSr^6ZOs$?ZMr]gBGr]U6Cr]C*? !''s:q_nC0s"jU/r%\4*s"F='s"41#!%\("s!n$tq^DFkr[.UjrZqFerZ_=brZM1^rZ;%ZrZ(qWru1kS rYYVNrYGDHrY5AGq\&l?rXf&>rso&<p^I-0q[3</rs8W0qZd'(r<<0'q?-]ur;i5bJcLB&JcLB&JcOd1 #6bee2b?tTBDufLDZ"AOD#S5IC&VfCBDZ9=A,Ba4@/O@/?2e+.>Q.h*=o;D%<rQ+s;ufns;uT\o;>sDl :]F2h:&[ic9E%Q\8H;<\8,c!W7K,^S6i97M5lO"F55m_E4T7GA3r_5?3;tl62Z>T22#T3/1&`m+0DdC$ /H@@$/,h'q.fUpo-iPIk,l8hb,5`S^+8m8X*;LQO)?(KM(B,'J(AnpF'`JaB&c<4>&-!.7%JpM5$31G2 $2=f'#Q+f+"nDfm"8i6#!P8>`!.k3&!.k3&!58F<"V`:E93,D4rbqaQrG;IKqe?%Cqe,e<!+l.?raYh7 ra>e6rEoJ/ra#M.r`fA*r)ikur`9"uqc*Pnr_ibns%rSfqb?r\rCQlVqaLKPs$QfQr^$EHr]gBGq`Om? r&Xg:s#0p:q_n@/r%e7+q_8"&r[n1&q^h^sr@.Uls!R^ks!@Uhq]l(aq]PhZq]>_Wr#G_Tq\f/FrYGDH r=f5GrY,&=rt+u:q[NN5r!N-(q[!'(rs&K,mf`RkquZm!hZ/6.PlQC9JcLB&JcGlS"q27G')iLA&H34> %JUA2$iUM3$2t5-#PJB%"oAGt"7$$L!.k3&!.k3&!.k3&!.k3&!9*tc"V2V'2EsZ+;c6Nh;>sDi:]4&d :&I]a9)V?[8Gl!R7f>dS7/TFM6N0:L5l<hH55mbD4oIMB48_/<3;b`32Z,E11]0$)1&Na(0DmI#/c@7" /,Umq.JP=j-i>=i-2]%b,QAte,5i\_+T*>\*rR,X*;gcR)ZCWQ)#Y9K(AS^D'`A^>')W@@&H*.<%f?e/ %/gS.$N:A1#lP#SN$"S;fq!r2l/!.k3&!.k3&!.k3b!!i]8(*G+^2EjM*62a(J5PRG?4o@GA48h5= 3W(l92ubi52Z5N-2#9!*1&Wg(0D[=!/c@6p/,Cao./51h-MSk\,Q/h^+T<J[+8m8V*:t3G)>tEH(B,'I (AJX?'`A[>&c!":&,d"/%JpM5$iLG,$2+Z!#PnZ'"mZ<`"8N#t!T*m/!0mP9!.k3&!/COW":>ne/-Rdg 5Xe(/rBpNMr^$<Er'1*CqE4^<pH&:5rAXL0q)%k%rA"($r\+1%r@Raps""!rpaH(gq'Q%dr$;%^rZ^qV r?(hVr>kYQrYkPLoG@HAp_EcBr"T)Co+Cs5oFL[*rXAT0n-Sjqq$6j&r<;Bf!!N'!q#^NrQN2U;JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNLb#m1A?&JZ0'+<r-.,5EDV+S[&R*r-iV*Vg]L)u:KI)>>!D(\\^6 (&/L<'CQS0&HEF<&GQe1%f$Rq%/:5!$Mb#&#knT##5/8j"nr/_"8;ld!Sma-!0mP9!.k3&!/COW!sAl= &-<O\(ASjD)"&17(&&L4(%;q3'(6G/&G?\1&,6Xs%IX]!$L\;b#lb2!#O_lk"k3\<"8N#l!r2k^!.k3& !.k3&!.k41!!r`1#n7I\'c.c,o,6X+pD334nIts;pCl^%pCQEsn.#.$mL&dsj9b;]mg&RkpBB+NpB9pe mK31b\H%3]JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcOp5(BFU?"U52<#mq%J$k!CM$OI"@!s/N) !PSO>!<N?*"U52<$3CD7!n%&^!<N?*"9o)<$4."E#R:P<"U"l-a8gelKE2#Q#lt)0"9o)<$4.(=$O@(H #mUY<"9JUk!.k3&!.k3&!6"s;!<rW/"9er5#Q=u/$2t25#6k;5"9&>Q!9O7h!<WH/"pG/5!sA`.dJsFP !sAc2"T/H0#6k;5"9S],!UKf<!.k4.!!<9(!sJT,rW`H0#Q=u7#m^\;!s8T+!PADa!.k3&!.k3F!!!'! !X&W/"U>;/#Qk;9"U+f,!!2lq_>jfB"9\r8"Tnl+!WW8M!!NB)"9eu6r<<E1#R:P:"TAH&!K[;5!4r49 !WrQ."U##7rWi]8#m^eA"U+c+!<N;n!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!5edR!<WN3$OmX[ 'c%W()B'J0(DIDg#6Y,1!SIJ8!"/f0"pYJE&/,ch$3\fX'EJ7;"U58B&Jc)q'GD)j%hB*T"Tn#jJcLB& hZ+&c!WiK/#n7I['G_N'rYPkV'G1ia#R(:B!.k3&!.k3&!29H0!<E6'"9o/?%1X!a'bhAt'+k`b#m^Y9 rW2os_>jrF"UGMH%1<LM#6P+X!!NB*"U>AB!XoMJrXT8G$jm7F"9\f.OT9t5])W0>"9f#:$OmXY&J=pR #8%CO#6Y,2!qQDD!.k3&!.k3&!:'Un!<N<*":#8C&.fHd'E/UN&J,BY#R1D7!Wfn5#Qk5<%h]9V"Tnf. !WpgN"p"i3$P*[UrXK8G&.oEZ"Tni.!Wg@BJcLH(!<WH/"pkYG%hTHQ'abTc%L`XK"U"o0!git>!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!1s6.!<i`;&eu<,,:+]d.k2tq,Tms;$jHk;!W<#8!"/i3#Rh7Z)B^4A %gLJ_"T\]/#71nN(*"SF+s7pI)]BP-%L<0!!.k3_!"/f/"9f)B(*"JB,U`R>#U^rA*#K>!#R'`!JcLB& JcLB&JcP'9$3:20!sK#A',MN+r#c4d*#TM($3p\3!PSO>!s];M(`!eu&-<1D"Od>b!<`W8&J>`l(Ddo* )&<eo$3p_;!lt@n!/(=Q"9f&;$kEsc)&aJ8r>l4d*#/tj"U"o/QiM^<JcLB&JcNgk)?BmB"U5>F'H.r2 *?H7B*$#q4&e,0Q!s8Q)f)Xq5$NpeL)''G%#Qt53!n.,\!X/uD(`!o(()Ii.*Z#@o"9&?%!UKf<!.k4/ !#P_>"q(nR'Gqf3+X/0V*ul+2%grXG"9Sb=!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!9X>!!=&uF (`t%S0f1gM4?GP]1G'gi°G!knX?!sT,E(EOkQ0*3=4$I\th!<WN4%Mg081,1F6.ju_i+WD(&"NURp !/(=Q!X&i6"qD@i-nI&.2`^js#;n+]+WD('"df:A!.k3&!.k3j!#P_<!X&c=(*"GA.5!;-0/>./,Tn!: #Qb),!SIJ8!"/o:'-&2<*#fY)$3S`W'ESIH&f2E)*[)^P,UFQO'+G9Q!s7fhJcLB&huF/d":#>I'H/&= -7:5mr[\=,-m'68#R(;3]E!N`JcLB&JcMPG(]a^B"pb_S*@*!]-n?f!.k2hd)%mDd"p=i*quFS6$NpqV ,q0lL$jHh:!n.,Q!XK;R+s@F>+WqmQ-Rg2S%0Q_7!s4SbJcNF`(]aaH%hom',Uk8t0JbI8-6X?D&.&OD "9\5qJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&p](?r!Wr?'"9\l2!Wh$U+9;ZR&/QH>2aU#1;d*F5 @:WnW?X6]*69$SC*>8he"TmK[l2^ea%0?bL,W%eV9N+kQ-5$CZ!S[So!<WK1$5F[62aBo2>$>!.;c-=b 8O>3\)\NPa"7Q;B!0dHl!<E6("9er3!s/N)!W2rX!"T)4"9f8P,;2#@8PrMk>@.;9&7AgF:J*u6/gMAM %gW7=!Wg4>JcLB&JcLB&eGo^Q!WrQ/rWE3'rW:pVrW+,E$Pa^30/GRN6:FLA:f(%g:J42E3\r60)\`_d !sAZ,`W-MN!sJl<)C[X34ZP>O+;+t3!!r]0#7D(\,VD&;"$Jn;7/fU_5s$nW-6*X*"p>#0PlQC9nGi[m !<N<)qud'&!<M!V&-2n<#n@Xi-SRD>5Xn7892,=Z%SfY_3&)g')%d5^"U"f+q#H!HJcLB&JcMDC!s&E( "9&E,!s8T,!Whfkmf4U6!X&Z4%i-34/i>g^8k_rS:/+DT83o<p/gVGO%1*7A!s/N)`W-DK"U>DL+YlGV 2C'%E!XAl1g&V*Q(]t!P',i&H3CH5%6:++28PDN50-qPM$jQ\5!!:@EJcN@^$3C82"9\f0"9S`-gAhEZ "UP\R)^?7Q2*=/o928>_<`;ac6pEXc.jQ,M%0m%>!s+qmJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO=$ $ipD3"pYD?$O[4D!s.3X&-2qF*%F$A=ClPtI=R!*M2M4i$\s=\F(S65/KY`<#0$WV!<N?,&1U+WF*r[u K3UP\"9S]+gAhN]#7M4c018u[EtWbKLPLM6J:N-"Is#0p4=qWg#F,:@!:^'f!=K#8$4RCN#6b22!Wh3Z ,ln)O#n8(<:hFTdG^k9sKSPA?M2I.EK78)^?;X'G,SgXh!s/N$!.k3&!.k3&!1j0!!<`T4#m^e@"U"o0 !V-6Y!$_LG!XB]%9k@mKB4u'uE--5GG'A%JEG]E#?<Bl[,SLCd!s?OC$j-\A%i[/l?>4"]>YtP\*XpX# $j-hM*@Nj9<Ff]RCMj&g$u]us@pi8#.iJj'"TusKJcN@^%KZ\6"9\o7$4$e<!<<-$hZ*i^#7q[q00KS9 ?=IM\DJsE2rc/TlFE;;2@96&_/Kki;"T\T'!MBFE!.k3&!.k4K!<*!,!X&]5#mUY;!s/Q+hZ+#c"UGPP +u;\i?=[jNE><M7EH#o:D/!Kf=A1t7-6!O'!sA]-h#Q^?&HrOV*\0NVCMZm.+:SY_"T\YZ!$;4C!X98[ 0gSH7AT2L&CMIX&E,f](?<0QO+V+e\"9\,nJcM,;%06M5"U55;#R1J8!s&H!!9=,)!t?.s1dFc>ASGsu EcZDIG]n+FC1Um^>>mgB+qb=j"Te]*_Z58gJcLB&JcMAB"p+l3$kEpbrYPnY)&O%u%1*.<p]/&/!sB#9 !QtHE!XK,7%1a'M&d8p[$O6h9NW=Y2\H!6C"U>AD',23!)AsA.'bUr^"Tn/nJcLB&JcLB&ScB0"!s],? %1Ws`%LE7=nc8%W+oq]K(bnES?>kIcS=cIMVPpJpX/`;(Z*^sJWeY1X1*[SB`W-DJ!sJoJ5\,M=[)'bl #(of("pG)1gAi2q$Pjj;94WF8S"HLTVPU)^U8=cgV3?468i%OtbQ*4p\cD^1$j$YA&Jl,l$j[">!Wh3Z "p"l7&/R<.*d*[8S"?:IUSF]aW2Q_rW2Z\mTp:@Q=$.`<#mCD3T`BZEJcLB&JcPTH$j$S<%1s*Y$4$h< "9IE\,QRrJ!t6haJu>B6Q&UidPa7T$QC4/,Q'I`.TUq0R66QaD"U!Q\l2V=t$5+4-87[43QC*e`:+[%/ !#u+Q+>H5bBR#JqNf]BdOcY]fOH5BPAk=Qj&.&L/!.k3;!"8l0!sAc5$P!dY#Qt5.!W2rY!$D@Q)^dX? @!%<dNK93aP*2#nQ'Rc(PE:cZG@aW4-Pd!d!Q4ti!.k3&!.k4'!"T)3!X&`8%1`jQ"p4r/!Wh3Z,Qe8^ (*Y_=FchcKP*M8qPEM)jOH5?YLkU.f=%GA**Y8P["9QRC%gNdm1.G]!O,@C6,n:Fl"o\PZ!"Ar1!X&lR 3)a^CMNO0e&sA<8NK93cO,JaCDH&M4$O-_9PlQC9nc0.#"9f)?$jm@M#R(>4!<M$W,6S`36!J,PLQ.@X P*;/rQC!l"OGesPL4stb:,X42%gW7=!VueJ!.k3&!.k3&!9aCh"ro'O6r6f_>@%57$=I+A<)H(=+qt7_ \c;pA/k@E&!s$XI&HWIk8k`&Z<E3+&=]8$b5pZcU!.k3'!!!3;)a?hd;HR+-?=7,H?!:<+8OPEP"d]4@ !.k3&!.k4H!"8l3#Rh7W'Gqf(%0cji!"K#2#UDZ-93#MU[^N`X])92N^;.P0lhpeZ_in_%1E[4a!9sOu !X&`8,ZAuUbkV5<nZ?Rc$O6h:!SdY^":uV+5?r;j\%0$G]*l0]^;.q/Wek@[/J@OQJcM):%fl\4!soPW +rqI4$O?n<!W<#Z!"K#7%Mg6[Bnih$\[K&[])92Q^:q:o^<4pK]r-3W1DC9("9HIAJcLB&JcLB&eGp!Z "q;4_'bV#b#R(>3huF8g!WrQ;6@?E7l.X"TX0&H"Xq%Y<Y.WNYpZ\>]2%g?'"3(<O"V2Is4^NT,\CoZf ]5ThGf)Q*\(b\BcFGQ?bWWB6'qlL4,XKJRaCI0?a%0i'tJcP?A$ipD4"U>DH()dkp"p4c)hZ+,h'.#\9 Bn;SLX/`5&X/l0$riZa4XKJLeH!NQW$ig;/q>c*IJcLB&JcMJE%fl_5":5MO(D7/_"p4u0!V-6Z!"T2@ 'd#,-I^&_2cF0dSWN>us%]?2$Q$HtD7li+8#mUP7`W-DS*AL,rLS;#<C/->e"UtnH!s&GZ!"T)3!sK2f ;L>7I^V["NW2TTm$E0erNbh95%1<CCbQ*4p])Vp6":,G8&I/jY$jZt<!<M$W"pH#0@#(AY#Ipk5WiN,# XSf(0Vl-DhV4)a=7k5_u$j6Y5!MBFE!.k3&!.k3i!!i`Y>'ZOGaN2L"b6Z83aLROQ:+$J%!9F1b"Ykb> A1S&5!!`WF7=iIua2e)!"inU#L,'#"!.k3&!8db]#q]o-`l?*AqTB/eb/hWBY$WUc]E!N`JcLB&JcOF' '*/+8"V2Lu0JbUI4=hTg#6Y,1!TO.e!<E6/.S!-/?[\=6^C/!1lh^YA[Z+ll1)pB#"TnhK!!i`:'d,VJ J=t*brs8V8F?0d7"Tne`!"Ar1!sK)U1e(J[I$_U_p:h!af>XhJAO7UM#mCBu!.k4A!"]/6"q(q\-o=:T 1bL-r'FP$$!!iW2&/ciiC59Fk^C8!@kM+(MF&">2((13A!.k3&!.k3&!29H)!<NB,#8%t*1GC@/-QEa) !r`5n!:Kmq!<N?+'M=5-q!Z_EoW8P-`7jPN`e[SJ+;5"^rW1:E&-2h6!t62%5[/GqV7#@Fh8fYA58MuR $N^G8#8/IQ?[%9mVY$trZ_iRj6nTAc"9&AK!.k3_!"Au7%M^!.-ndG,*=rDXrW;!X"p>_m6X"Sl!28na %'I.HRt"R")?g3F!WetpJcLB&JcLB&r;[E2":#>I)C$dh.NoZB$jZt;!T="d"V)@o2d_Tis6IM#oW&@n Q[2k88inO?&ISa@!T3tG!#>V<"9fJi7V%.F[C`#B;)]!t&-r@=!T!ea!sfDQ,t;a@`7!A]oW&4fHX&c\ )A*5R!WW8n!.k3>!!WH*!X0&N,Q9;%/M&(]%L*(>!s/?#j8]Gh+\$CA[`QjpnZ*(qMJcN^2C0(B"9S`, `;kJiJcLB&JcMJE"V!bARCh&Bjp'\aZ'\oD#lF\>!!iTF=h<1B6PKRK!!WTF5'+3qk4[p>_-J,bOT9t5 ])VpF6^$BtjosP,;'cMLo`0RDJcLB&JcMMF'EJ7;"UlS9;J0c`EH>2G-l!0s"Te;smJmRp!<NW\8l&H! KU_VK&Au`Gli6M%Z^#E&0,5!)"TcdH#RMG&5ZMTLU<EQ9!;m)3F#jX4"Te__!"/i3#n@k2:LS!`LS".Q $d78R`N=l&4s_-Z#1*@%!4r4B!X]P\-9=k0G&_+u:d-BH"lK@b!XKDY.8FUYKtHli%)UlajP.85FB1UU 'a(-0JcLB&JcLB&r;[N5"U5>I,<&D*?X6o?4sppC!<N9&j8]Pg!sAcB8qtL^l-?j3XUh\JakHC>X+XnI -4g1Z!Wh6[mJmn%"9euF0M?&1PGPFhhqutsD`JKc!"/o:&fW8e>]bmjU8[^d$aHn-Lhod=('asE"7uSF !1*Zs!tZV278-Zb@o>B9'FY3L!rW,[!!`WB/4<cdO/)3H%'I7RYFTl:1D^N-"TcRBJcLB&JcLB&f`2Zg $l0m63(R(X;+3>j*YJb]!W`>^!"/r?)C7ISONd[[\u>8%$`'5SH='oR5r0f'$N:),!R:Z\":#AK,X>^i TsD>>T5.Fd&JPfa!W`>Y!"B,F+YuZ&N3Ld`fYFPgp8\RrM/lop3?et:"9S^n!.k4E!#,G8"9f/S1JD=h @9m#)0cpo5"p>"c!!icS8p-uDcdf#bWskkgJ8JRd3?\e:"U"o)!.k3&!.k3&!1Elh"Te_k!9jIe&4hJM _V"MC#iO4NZ%b[k$3@pB#m1r/IE9ur5nO.G!!NNH6tr(2o]?;&L.EElaT-nmZiC./"Td-R!Wa!(!L2O4 jp'\LH;5t"!Lj(@!.k3&!.k4L!#,G9":#Vu>'Z@(W3<Rd@6YnO&-i9s!"&`-!XpbY<*=*oU%H)2_8a^L kk=;p_j5"(+rV!u!TF+F!!rZ:.n*ECCk/D+rr38u[W4A7"p=u.huF,e#n[t'94N-rMjgd?^C.m.g=F?B JQk;h*";H>JcM,;&-EIb00<!AI\!7)O+1V+,mjMMj8]Ge#nn=1:MPTqn\5LJcJ[pLd^u0'?U#\<`;kJi JcLB&JcOI(&H`4H'H]>9E/KaBR\"7Z*<Q<@!TX4g!<WH.'ha5#o\ms%oW8M)[(=3-iQo$(Bg!@;!s&H) !RC`Z!X/f:,"-40X0]7?ZeO0YX^s=%gAhZd&g&bo>]P[lUSt8rXnAe'['-ElCI]ZZ#R(<u!.k4A!"]8O 2H+O9HA%6&?UH1Y%L3*o!!`WB01TDqO/26H$b![[[?kr30HUr7!rN%M!.k3&!.k3F!##MM,;VeoE.N^^ >YI76*Y/AS!Whromf3_!%iZo[AWb(+d^?"FWt2,"R[8VE@TQ)\,nU4\!WgRH&-`U\+#R)HUqagaYFo`5 3#)T6'+4jB!T!ea#ou!+Efm?=gXaHOoW&@sQ\g'(<&Y[!"9S_P!.k3c!#,G:"pbhp;LGL>Rui269edLr $3^Lh!!WWR9R3eZe,e+!nZ*(sT9+\L?q;j]$jZt<T`BZEJcLB&JcPNF#6Pf'/Kki;!S7;T&PnRla4g1J $00gjag-.b/JJ9@!9aCi"<^6VVUsFS5S*tF!!WNF97ihOf(A).gU;iD1(<RNJcLu7"pPV[/j($UpAj+O "9B<0Qf.Dr#3*q4M.S7F^AricJcLB&JcOI('EJ:?$QDZVOgia(q#8'd=>:s7$Nf>g$3://%5Upc@X3j- oY1dL_8F45j88fM^5H+s1*mbF!R1T[!<<ir<*<LELTnu$s8VVqEB"4."9JV^!"B&>(aCt@E/(0h\%9>h otLjMbL>%YUO$!+-k_pJJcP?A&-Wk$4@<+\J$[YP`NP)&1C`7B#Qb>I+>$B(K=gZg%)B`uc._L@b-?S" /I)+QJcLB&JcLB&U&Yl1$POL4:iDAr`S^(RU0T5M!<<-$p&OO]$NU>5"r0^]_sQ*q[e-[5Y-5+9\C0X2 jHWdn!<N9'!RC`W":#>I/R+.LhU]`PZdmLAT)r7N&DI0m#9#3_?$(srVlcu#nuW5'Z`K'o1_^?'"4.%" !4r4B"XQiaStr<^X.kA^6RW`Y"5j.`";`a_@XF7<VXLVpY-5:C[@)581`Qr,T`BZEJcLB&JcP`L'*fI2 87R4@Wh=lX>"h"0'a4X>!oj7g"V;Y&5\QD%ji4O&oW&M&Vkg#WLi?p.8Mh7e"9JY`!:Bh󗈤ad7 j4(T;TQ+*p)BBP"!W`>Y!"05e;LP=NaO7]+X/bfm$`KqtSW.JX,7"JV!qZJE!1Ns&!X/i=)FAVUs7bg% VLDl<+;G@l"8r5\!!i`V:k?'sf@m4nWsbf$T:'e#2%pH-"p2aDJcLB&JcLB&e,TaU*FGt1C.g8if)Psg =.ZnFh"9_:jl>:Uf!gi[6kfY%_uL,^=,X*"gt.6C&-C>]#m(r4N6^#0i9'1qjp'f!cbYJm"dB"=!:Kmn #U)B@Mm6V5"kN_W!>nIti:5q7jPJV<^KhrbpAfdFJcLB&JcMMF'EJ@C$m8DlQbh,9r;Y]KAiM.V%KlD) mJm[s!<NZa;dNaEI%8'h^](e\[^<?FY,\G'[^j&ebM)4\f;!7Q1*@,0cN"LX"U>>[8mPYFLmbTmrr<#d #-r5.#6b22hZ+;n'I>Y-@!7jO_SjL<cI'hT^p^NIWY)ME\%'&ad+,h"F]::<!WiB'e,Y(#]DrNE"rfB` 78mcQ]C54E`g^['&)[El!XTM\/59j_LqgmC^qK`Y)7[)[Z*(72Xg5=C]"GlQpZ^/!BK$>%!W`=u!.k3& !.k3&!;um3":Q+l2I(^%YJJr\p;Cr)"9AK'!TX50!<WK/'LR)Mkh4%dWN)ttW2QVmVkp8iX0&J)Xfo:W f^uOe1'Id_!Wh9\mJmn)&KN8kG,4!Jah"a_e'Pgs=Y13B!%7jK!WifW5?rAgS>iZqZF.6U]<nT9W26Dk Xfnq4YHG"6VLMJo*"N5F!.k3;!"];d?&uqGa1e[dUjc5u*=W,L!9=,-";WUZ?ZV!iXfnk/X/W.uW2cbl Vl?`&Yd(F9Y-,jXT6X*\'*A79`rL\kJcLB&JcOI('+#dC=*C%@`2AuK<_>Y2)$L'A!oj7g"V2P#4CEuJ h8Q[trhKIh&uhk3YHbF@Z)jq)Vjiit?W0*/!sJf0!n%&b!<N<)%j!Ak@#;&Da0_eBTlO6q)]fb%rW2!Y &HMq9";O"2SB'7=bGqD4SXZ)aR[]tIWirb8ZE0t&W2ZejG#9[q#R1C!!.k4E!#,J=$5"@SN7\+0qT>go AO7RW&./Nt!!icT9R3_P_S2`CTGaN$USXfaXKSh3ZE'q$W2ZepIU"iK'b1KOquD<KJcLB&JcM>A#mWGV j3=ikE>\iI!9jJ(%7lPRYdq9PZEg[;Yd1XJ_opHYg>:iLf#4nL-j7Hg$OAbI[E-tYf7c9t!n@8j!Y@5- ]&ho-gXa]l]s>&U]=u;6g#(iMjQ4K^'$C9,!4`(9!>RP"O2BtA3=FF=!W`oo#'[hs]XP2PriZj;\%BJr dFd75j5f=[M)Yp6!.k3&!.k3&!;um3!X/l>+]<KK_:%ZIs5K_b3@>aU"60C\!@8($9OVOXMk7&MUn=*C QBIAmO,SjMQ(ke)`m<B4hQqo@6S&uSiW/BH(Bt?d,<f+7BS_kK\'+dNs7!@73!TTh!oEtk$6hN(<G-QE _8t6jo_RC^Yc"%UreV5AO.E;W]?TKh^RT45-3j\V!r)bI!13`u!<sN$5XeO[KY-[>gV]@i3"Prfj8^V0 #7h[t7:h:c[B6<uS=,b0PEV,iN/E:CPFnqc_"I^'mBUk$('t0I!Qb=n!.k3&!.k4(!#,PH)_!mVJ=`s\ g@"[SEA7Or!!*/^!$hRH"9fArAsL-8UR-pqKnFl(J:W9+Ng604WMur%[(aZC[Wk+A&e,'K!n%)J!>?"m 5Zr?!\D#'=[]m*ge&.ea0+d"@&HW%;"V`^kFcr>sY-5:Re`>s1`1i$>KS5)CU:%hI['?dF_P`)n4Wt6% !.k4C!"o;5#;g(df\+coXgt6W<&>[,"5j.h";<.F;.FWuR?`klKn=mTJ/*`lLlnF?`4iagYcZ@&_l@N: *!?9CrW%NMJcLB&JcMMF'+#jG>CE'O`i#2M<_>V3)@$?G!qcQ^!%A'](*PJ0Di:6OMM$G/Isum"KSb_V V6e+b`O`+KSsba^?:?+F"U"o.df:'`"U>>P01fc2TtJp_X/DnhEE>+:!ZMg\rW2!Y-j'Y]&LL1sXk2Og ^o3chJS8k=FErFrRAR6u^Tsf8VQ$,,:FZb\#R12.df=t"^AnrL#7V=i:5@9ts7=40Lh&gq((U]RhuErb +@0V"QBi\UK7SW(IXcluJVK2PU9(]5^8n0/W2P,Q66@0_$j-P3!Mf^I!.k3&!.k4G!!romRcDYtO`;3> fDloo,?Ii>7mB$m0eG%61c@a'D1e=ccJ@R:d);V;$/>OG!"8uT>,'*eguI"?3tDDC!$)S(=HCSbfuLRt G[a9%2a0T#@>(c-g"kWJcX\.#n,S%?PlM*l)F.r&`oN=D$hs_Z!#u.Y1KI7?4>\cH/hJh?6qq*@V8Uj: hW*Uc9,RiJ!.k3&!.k3&!8.>d!X/rB,Z8fN_:%ZIs5Kbd3[bpW"6';)!<EHM5[%rEH\$s$F`1i%@q&n[ DK0]>Js3CS`5g0_j27DjFB(:?"4.#W!=Khu3Cd+YH^LY8]$(*Q#P5<B3!TTh!oO%g!=g\T>$l)rU;>@H rr;j7bbg,AEb]'!EcH/XQDh:7q=j'pO'==L$O-\6ScF?BoDfL)!X9Z(5X\IZLqE'?ft`h_2\+aG*WZKS '-0/;Gb14YHuNk6A7/kXBPML.E+ji]S$Klrrr38DKME[&$O-Y4JcLB&JcLB&U&Yl2&03;f@tL>V_:n>N `c3a:!WW6&p&OO].00JP":Zq\H^ftBD-pLJ;+jV[;cI(@I#42^WNEA0[CjhpJl!X,%0cm_!#,G7!Wa3( B9K@0bgF&2ZELUef?'ol@58GP!%7mO#7;J;Bp#X.\?`<Th!t.'Xa=&H='T0UPH`QU]X=uOhq5i;@5\hH !.k3b!<*!1#s*(1lfmBIXgt6W<Abj."5j.`":lV26r7,0BR4]3?<'m":/"Pf?=n8>Yg_"<\[&BcjPnjR :a?/A!ModJ!.k3&!.k4L!##Y`6",A>]Z6q;H<*X'0cC6!!X%H_.0Ktk*%=*RDL6>7?<L9,;bp@p?=S#3 TXrCp`NQ58SXPFL9.C5R"p+hb!:g++":,DJ-UVR3YJ&3!WMcSlTPmji'H%PkrW2!Y/-H@s*]7/[]BAA( Z_s.4;b9_Y:ek))FG-*`^Ws'`VPp/+:FZb^$O6b8!<MrqJcM8?'ESON'dZY2ci=%2]rHm!5p6sR#m:,+ j8]Vm)`:T9F)Yi&?X$T0;Z9N0=_;`*P,5V3]s"B2WJ+hW0dIbM"9JW*a8gelJcLB&JcO:##mrnej3=ik E>Sc/!$)@j)A*>\"9JT)!!**%#8J^S?\Yl=jPS_?\k*G5`rHPS,"[9tf%f3Ef7lBu!S.5Y#;0>:Yh%jX Xc7*O&g%Sb!X/f9*(5(XbgkP0eTEMNPlQC9n,Nar+@pFBalJXG$Io+r":Q(Y#mCA2!<<*#":#AV5Ad(. c.Lt7Y@]L!"8MqK!.k3&!.k3F!#,J=$P=X_Fd'YilhpeBUM2e=)\3&E!:9b6!<EED0M>_X>?Oot5W(&@ -mpDu6VplqFblp1_8=.:kL$VtBL<pFd/XXW!>$\A5tP$jQ*[p1]Z^<S!;6W)EB"1,!s7E]+9;HU4'?$) H&f)FiV``Uo!3[@7m8ga6sF,.I>OH#a8Z)<#I8;5((^fV!S%1%!5/@F!<EBH3'fu1AW"+cl.3P1@5SPQ !!WH-#n@_&73Z)dCg'@h0eFh$-S7/98R#V+BRc&B_;5+js4ET>//f*,!i5mK!.k3&!.k4L!#,PL+>HAu KqPWcg@"[SE\dh!!!*/^!%@pM!WrcR5@8YI;aE)e,TRa@*Zu^a8mldsQ_UO_YHY=E\WC;Y,8:FbiW/NL (BFR<![Us3cfO9F]s4fFY-Zm8bcYP7'&N[>!sT)C,uB&pe'#S1YgDh3p"PL(+Wr0e3*(I+hUKQUZ*j#k n`>j,)ZTj=pAfdFRK+!%!<NTmIDPdOkJXO6V1;T)+:\MP!9=,,!tH8!3'K]%<C],(+s%aE)BUCa4]Hd( f]U`#['.X@o'j&!/HZ"P!Qb=n!.k3&!.k4(!##\c6Y(tN^W<=?H<*X(1)gH%!s7K_,Qe8_(*P=q;Hus^ 1Faar+W_dS/i6+3L8_r3c+'dPV5'N#;D&([#mLJ5df:0f$5+45>E$eqlIW/8Vl?\hD,iJ,((prQ!TF(k "qr(17W+[6jj:K;V2//A4Xh9s,TS<o93ut6\)5$-W2?/";EPO$%L<1>!WehlJcPKE'ESOO(ai.4bQ%V& [Aesm5p-jO#m9)c.KgJ:6X!Ga76W[b-m9]T+!E'n8mHCtXk;FEY,8.X?Vs0B,ngI`!Wi?%JcLB&JcLB& SH&s)6([,]Z&s#E!q63R!!30)!qZI%"r9"#PgJOQiSVse)?InZ%LFRYGH'$LioK4QL-,qHec6*p=e2tF gu5o.@m:;%qZ%$*(eg.*b1P\*Pu&J%blE=q\Gup=-;SfZbN+jH$If(I!"ArC5Bs$;ce[ZtN*J1GScF?B JcLB&JcP`L'ESIH&0t%lP.oiLs8UN7@lG_Q%KkYi-348`,WA7Z4#Sf?*>/Y`#6k>B*\TfWCO;AV\@]Jl lJ'1MG"a4biW/NL$NU>4"roTj7o<]KXSom6bPqMHpU,!##6b22irBMh!<N??7Ug%cOJ0&!mf*4udu[`d +rV(%+@B43@!7X;`pE^)#LJ/t*u5@k!Vl_I!1<g"!<EBF3'fu/?@KE@g;gCN=tpHa!9=,/!<WN5%j3Sp =%G1p'b:ZV"9f,E(FDII;H7=\TY]1Ms8V;U@P],B$NnKNJcLB&JcLB&f`2]i&K`Yn@t0oQd-^T%ZtM&p !WW6&irC;)!WiQD/k/r21*I5=#6Y)0!sT&J/O`ufMP.8ZYHG"2\!V(:6Rs&_!n.,W!sAc41N0Slq!QD6 rN-=2h:p8\BJgF[!"f>?%i6p+NPs#U\$<3op\"*f)JLl/"UYn^3bOo0kgmPR[+k9Io<r!N!!!$#SH+6A o`,X+!<NWmH+itEl-HT=QZGqW*"E)/!"Au;'d,"X/hf(0)\<5XrW=#A%2L$EA<Y4,jNY-:`8^F_cuq5K !!!$#!.k3&!.k3&!29H,#pV]DJY'0[VMAtk:HgEM"p=u0o`4F\.09__&JuZC3'T&?((:KS"U##<&Jloe BTT@1aM"ONWN)b@<\Y$k#Qt4Z!"Ar0#S\C59mNl@s6$qirMp'oCfE;(!Yl:RrW2!Y/-m(C5$EQ9agS:K VPJE45:?mJ#m:YV/O*KmWSQa[ZDX:<9L1EM'at3I!s-mOJcNOc'ESOO(a_k"ZiBj^\uL?j5op[K#6Wla "p5AY1.+,X*[i0K&dnmH"U##<)CdjKH(WL_hS,tfQYK5_1as1FrW8kqJcLB&JcLB&p](U,21s8\MeZ!# !QG*J!u*h@_rKe<jkO_s!o3kD!!WHH:3N/FhYlR>f7lBt!S7;[""f;JdG!R:X)'d0!Vl^("=\/W\'Npd YBs"i!qH>C!0mNj![1*MP.K(b/I;+Oc2\:T*`@Wd_qF+mVL;\[!Q+nh!.k3&!.k4(!#,G;#7DG9@tLAW ^<G$!E_@l%'++g!!$D@Q)C@-i.4$/W'+G0M"U"r8'dGA%?uC(MT<,N=lJ'/YU393W"4I5X"UYhX1.b;> ?[7^=rP&?Urr35t[;e/2"Tnhd!"f57"plJKBPrp$XLH%=qs`@6)fA%f(_R8_(cG#d=_3#[`817hs4*<: /g;&=!M0:C!:p1&!<a,f4@2tZKrVP_S:tQD-48Z2.KKVT"q).i0Kh-;)@m/["Tni3$P4767nlf`DNquf oDejSTOK]"((13EJcLB&JcLB&U&Y],$l:-E9kT'GU9;#>InLsa!<E6&p&OL\%06M3"VMt44>.lq$j[%9 !Z(tB"V;e16X4u0_nNXfYckO'DaQ#n$NecW$O..[,YWWonaG,HZ2Ld-ZeaB^Yl\Sr'&N[@"V)@p5%Tej ^q$hVYi=]n\pHsk"9\r<'.d%/VSL*cZ*MU<p@l(0.KKSN!WggOJcNLb'*/.8#VTD@]=5#ASr7Sf1EmJ> "5j.`!XB5P*ZuO.+<ha<$O6P3(^(-U'e)t)VU!T5]s#B6o_-XT1^!dY!<K"sJcLB&JcLB&r;[K9)DF]h G)McTHtH8A1aE_<!s/Pa!%@sQ#7M4^*[N9Y(_?uY"U+u3#7M.c2c=RTVnC*OVl$DgHWDj1$O?k:iW/ZP %fl_5!u<IW?[\Qdrp.S+VZ!P#TPRRc&/>c`rW2!Y/.3RZ:i;K'bH.Y>W2"B40+&'p#6P5F+=orqOhTT( b,q@s?;!aB-5$Ib!s85tJcM8?'ESIG&K<W1J?Pi?P`Tl`2Aco2"p4`'j8]Pi$Pjp>-mBWI&I\sC";D+S *@a6^MRr3@fsRcFC/%)Q.2E0f!lt@n!.k3&!.k4"!!a#lA5PH;(B_SU$NhJOVUO8Uj4nMq!m(EH%Qnd" \'X+4joj:j4:VDD!"9)mQI4@Aj5#SS%0-D'!"05o?\u2ChS>\)6jf7\JcP6>#6l;,7p'@X%Dr/S#qAht VU4DGVL;\[!VueJ!.k3&!.k3F!#,G9"U>Ym9kf*2Ng5uQ;)K=+$jHb+!:'Um!XK;P*?,k4'bLiZqu[W< %2BpA;e'3_M4(ZdlJ'1MG"a4bdf9a]'H\em<Es!_Mk@KW^AuIVrrDct[;e/2"Tnhd!%e9X$kb-jDL8(Y Zb"!6f>*u#:bids$O?nI,W\CoB6g,dcf4TseXgJ=/fbH'eGt1$])WBE%N?r[9jr:0NIc%U8MV7ihuEr^ !WrQ1%2:!,,Tdg6#mLP8!WrT1#nS=?6V:QuNPX0:s8V;U@P],B$Nm4*JcLB&JcLB&r;[B2#S.[o2,7\+ GBeFZ;)/mhr;kpY-ij>M":>b_+rqC.#6k84!<N?+":>ha.77p?cdp+IZELa)DaQ#n$Nf;fo)K1"$lq#i A;[eVe&8c#rN-=2h:p8\BJgF[!%eBg+YcQ+P.8!.Z*1@NZBAro/JJ9g":#;V4^N]-Up.&,^<u!9[;%E" "U"l-q#H!HRK*To!<NHH4^EMbrdG)d;)f[4$jHh4!9=+_!X/l?')iOf'FtNU!s8T,!WrT4%3.N=KVu)c []dX/o_-XT1^!dY!<L:BJcLB&JcLB&f`2Zh&Kibn;e1$!BN7JW-Q!9q!WiD_!"K#3"U>AE&Jc8t%1*1@ "TAK9"U5;L-TtCGOK[6QZDaUqHWDj(%1<FE!nRD_!WrQ0,XuX?[`dXl^osZ7rMp0rCfE;('bLcO!TF(k %jsbUKr)K)Vl$>jUj#`h$OI^U"9Sf9&fWN&H`"a-d'fd=L1jRY2Au]$!s>(oJcPKE'ESCB#n\FF=E\h- E,SiD-4gIg!s7B\,m"8\'H@o&%h8mN"Tni0!s8]8&K*&lFJ[C<gr-.XC/%)Q.2E0f!ri7P!.k3&!.k3? !!NZK'FY3JmJtc;$4AnL]#rX_ghn8:aoDYO-X<4Tc._4Vjoj:j4:VDD!"'9-V:sebjP4l,"n_j'&2.4N dG`H`Ui7@VcN&Os[f?U7#S.[l#m&KTn,Nh*.T(u>jN49I>Rpk-!.k3&!.k3&!;um3!<E6)#oYHb<`r^9 @7`6t%L<4?!T3q\!<WN4$iUJ9#mLP8!rW-6!sT)B+@B10@<md2_WommU393W"6'=O!"08X00;s;CP/+T Zb-1N!6bBA#PYWG3!TTh!oj84":Gh\2Hk3\[(!WZ_U5u\CJZu5$3p_:!XKG`0h,SrS&*(eeF1kbG>:1G '*@t0JcM,;&-3"H(EkP&=);>F83JUK&Hr%4irBMh!<N?-$4@@R$3gV8!r`3:!WrQ2'I#4o=)El3earh@ kb)B@+;P=eaT-nmJcLB&JcOI(&-<">$5"F:6rQiQ7RJgL$j-D/i;a8e!<NB/$P!ON"Tni.rW3!"%g31I &h@=ReaD).['-s+DZiEX)@HVr!"8lA/P0K$R'OiE[BZn5XTu2ggX!-<2%ndH&IB7(4BHZgZ*CO:Y-4m\ >;7<@'+"^A!sA`?.n!]fNM!>VZams0Wc'm+#R(81ScF?Bo)K@'";2n777p?S>"CFm%gW=@!oO%\!<NB. rW`Q3#R:J7r;ml<!WrT0&1U1^JX!"8YJfGmp<[t>"98E&!<@]OJcLB&JcMMF&d/OT*$m@+;-Q[T/05Q9 #6P#.oDn=[$NU;1"9\l5#RLb@"TAKA!W`?)!sB#P.6:CRUtk.QYGS+B<\Y$k#Qt4\!"T,6"UHhmT&08> q8'#,VQ'Np"JBR12@op)&IJF;iW(M@02d+e\')afW2ZenHr_g'"U+r/!sJo:+$F(nYJA>qW1]WHI:Ynm "9Sc.e,Y(#^AnrK!WrT3'dYb092&#P3@>RL"Tnf-huEr^"9o/?$4$\<"U+f,r;mZ8"U5;M3+%`[bLFV3 QYK5_1as1FrW8kqJcLB&JcLB&o`+sm^&SKA,\NXVc/%/m+TgI"mf3Ut*CbOtf\PNIrT477L-,qHfDl6[ )cj<(j5f=U@2SV:$NU_pElR1rf#t!R#P.qI!07*[!VHH:!"/f:0P@`QaejJk%fsQJJcLB&JcLB&eGp*^ %2L0@0f(aM/05?*!W`>H!"K#1!t[4]9iP_YTu-*L_??TV9I9kk!!iT<-9+@nC4`\c^AuIVrs/;+EB"1, !s7K_#6bPQ,<T7WS,L)*_Si9m8N-\q&H_n2#6P5A'f0!:Rf0u,_p5K@>=0qW!hKCD!:g+$!<WK2$lLBL 7QrUX+W1gt!m:QY!soPY/5^2>_:A/Ws6-+b1E[G@!s!oQJcLB&JcMJE%fl_5"qV_&1b:(#*to%f!V-6E !#,G7!Wj38OP'9kc*smcQu>>B)@HVr!!iTD3aRE'UoLHjXTYudgX!,+BJgF[!!`iO1Itu&Pc4P_#dBY/ 2$jHh!<N-!#728$6<e\tW;Wh(YFKSt&e,'K!n@:&!4r4?!X9)I)^-R_3@c'\"9\W)f`:UD'F#L494iX> WNX8"o_-XT1^!dY!<K"sJcLB&JcLB&r;[B1"U>AG)^[@(0-M,@$3gS6b5`4[%iQ`XAsh<OhRTP[HWDj1 $O?k:iW/]Q#6=l0#7E_Db5VDAkcjl`#G>m42@pT8$2stb!!a,o?]VS8f>[]h#GuuO-NXAP!W2p&&2$e& R^C,OrMp'uIT@m$rW<-$q#H!HQN.0j$5=U4.K1e$*YSk_!W`B#!7(WV#q8YuWkm$-W0_6n6o6>.#Q=eG !.k3&!.k3&!/pma'i9OY_qNm`+Tfjf"ToJsA#%iTjoj:j4:VDE!!<BNA%qp(!n^<VrW)Wl!s0ED\GbOk fN&NM!.k3K!"&cF;5WErVL;\[!VueH~> %%EndBinary grestore np 282.284 -0.24006 mo 282.284 213.653 li 565.287 213.653 li 565.287 -0.24006 li cp gsave << /CSA /1 get_csa_by_name /Intent /RelativeColorimetric >> csacrd /1 /CSA get_res setcolorspace clp [1 0 0 -1 0 320 ]ct [283.004 0 0 213.893 282.284 106.347 ]ct snap_to_device Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf << /T 1 /W 1179 /H 891 /M[1179 0 0 -891 0 891 ] /BC 8 /D[0 1 0 1 0 1 0 1 ] /DS [ [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx [AGMIMG_fl 1179 string /rs cvx /pop cvx] cvx ] /O 3 >> %%BeginBinary: 1 img JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcM&9JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB&JcLB& JcLB&JcLB&JcOC&r;cm"o`G6s!<L=CrW3$#qucfu!WiE(MZC<g!W`<'bQI&2rrW0#TE)1rrW*!#p&b?t !<M9^JcLB&JcLB&ZN't+rW;]orrV3\k5bM`o)f$q!WfJ)Q2gsf!X&E)o)m#8"9\f/!Wg+;N;rqZrW;ou r<*$#!!.rWJcLB&JcM&9qZ-WtoE5'o!!14B!W`?(o`P3qrW2-]JcOa0rW*!#quaJ4rr`9&pAfdFec5[N rW;cqrrW0#_#T&eJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&ZN(11!WrN-"pao0!sSo2!TX7E!!`N*!s8Z0 "pb&4#7(S?#6k;4!O)Qi!!E?*"U>>4$2"YF$3pkA"U"o/!<L.>N;s.`!<N?+"UFu4#RLbB#6tD7!We2Z JcLB&JcM&9qu?p%!WrQ/"U+],rrrB)!WrN*b5_SE!sJ<%"pG,5"9\c,k5^)6h>dW["9o22#egQB#Qb,2 "8r8t!.k4%!!30&"9&E'"oAK("o\W+!s/P?!.k3&!.k3&!8%8V!<WH."pP;:r!*9-"9e]+!<N;F!!<6( "9eQ+":#/8!sAK'MZCHk"p"c,!sAc3r!1UTmKa%kA8"9S^r!3uS+!WrT)"oef*#64u+!s&H(jT'l4 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&PlU^^#6=l."9o);%/CA9%h&^I!QtHJ!<WE-#7(YFr!ir@%LigR "p4nh!.k4.!!`N,"pk\I%hH2_#7_.L"pG)1!W2qL!7h,T!<E6'"U>>Br!ir@%LrpT"p4nC!.k3&!.k3& !8%8V!<WK/#RC_Cr!EZ8$4-tC"9S_K!!<9*"q(>;r<`i<$4."E#R(>6!fR,k!!WH,"ptkO%aPUL%0HnA !s8H&TE)7t#6Fu1"U55=$2b,4#m^_<rW<-$joBu5JcLB&JcN.X!s/T/$N:G1$3LP="pOu.!!2-\kPtbf ":#5@$i124#6b54rW3'#YQ1*l"p+i."U,/<r=&<-apeO`$jm:G"U"`)_Z5\s!s/T/#l+f4$4$h="9JZ, M?&5.JcLB&PlQC9JcLB&JcLB&JcLB&JcLB&fDl-W!s8`4$P!gI(&\mM&I\jFb5_bJ!sSu;%1a*N(&epP 'G;#g$3^Ki!4r4:!<`Z;&JGio(ss5d)$^lh%grUG!s,(qZ2b+1!WiK/#n@UG'aGEd'+tc]"Td`cJcLB& JcLB&ZiC=4"9o/?$k3aF&-i^V$k!@H!s7N`kPthh"UPYN&eP`Q&-`RP$OHt>!jDZk!!`N-$4dpg()?HU `Y8Ib#6au+_uPet#6G#3#RUqJ&,d%F&.JsP#6b22!K-r0!.k3&!0mQ^!!NE-#n@IYq@NrB$jm7D!s8VJ !!WK.$4RU[&Gm%@%1!.9!WW8a!.k42!!rZ-!sJl8$P*j_rY*![#nmm^%grUF!s&H!!.k4%!!<<,#Rp\C !"f)@#S7CM"Tnl/!s-7=JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcN.X#6=u6$kX=!.JPS%-ls*3#6b21 kQ'oKrW*6,$5+7$,q1DC0F'6`.k;b[%0ZY2ZN-<l#QY5D)C-^^0/E2V`\RiN,T[^4$O$UN!0.$a!<WK1 $l'j4r@eL1/hJV)+;G7crW/#ZJcLB&JcM&9qu?p'#ne.!+sZq0$6gT6)%m5Y!s/N)df9aV!WiK.%2L'4 -71&:,R5M8*?,\%#6O&gJcOa0#lt&.$5=X8/Lr<]-itD%#lF`$!.k4%!!`T1$P4$j*[1J-#ULQ5(_dGd "9QF?JcLB&JcLB&gAq3R"9],I*[UV/$6pW5)AEVc"9JW*dJsOS!sAf9&JuT;q^)Ur-6*^."U"l/!fR,o !!`N,"UGMK(`rZ(cRA30$7@/H,8q.$"9S]+TE)7t#6YDK*$HLO,lK%q,TIL-"pG)3!TjB6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!0mQ^!!`T4&f`;X7TT:q#?aPT-lj!0"4I5X!<E6(#otcl>?tWHqdg+F@:)Y` *t&/P!<MKdJcO^/#lt)>+uW(l=^YmRBa7g64"VQj$Np;,JcO@%#6G&8%iR&e<r6G8@pr_60,b#s!W`>A !.k3&!.k3&!8%8V"VrLK9MSD\qbdbu:ej5+)@H]N!s-jN$N^J9$5+L;6rHo];uTZ$;Gp7\6Tm%B%0MOh ^&SNA!WiK>/4EuS>Zt1U<UEfc<X1i='a+U>!Wo%qZ2b+5%Mp<?1d=V1;?ola5<1)-$3K>iJcLB&JcLB& \,Za7!WiH1)(nAW<WH.t<!uPu9M.;l'aFjD!WhKbli7Cq#S@ms/iu[)<)Z`n<!P`C*"3&V"Ttt/RfE]q "ptqZ,;MSar`8Ymb#\sN<)QUV-PZgg!s8SC!0.$a#8\gP85)iYrDX&"4Y.K[$3gV7MZA>/JcLB&PlUIW !!3!!r;je9r;lfthZ/6.gAq0Q\H;C'JcO'rr;ls"\c@<^JcLB&JcOF'#6bY[/il^9HM`p6Q'RbpG$RNl ,S^O4!"/f/!sB5k;fmqXOH][.%@!*JU84H/;_Sjg!s/Lb!5/@>!<E?C2Gdn$HA7X2QKshBQ\olg6Sfo! "JGh$!!`T4%i6W`@=A*=%$mN[URuR".LQC^!WhQdJcLB&JcLB&ZiC=:,=5jfIXQYAIgUXSIVDP1'aY'I !pBXN!!r`3$ksjE;JUc4qL8`uHZs=%0,=Yo!1Nrs!<N?+"sZTRQB@)[Jb=Q8JGt*)AO@aL!s8Q)`;knu #6kkf1dk8PErCInIslT_B146]!fI&1!.k3&!0mNm!!*-'"V3(VFd8)IL&?B-I!^']?pc4L"U"o/df9aZ &fiG_:LnTuIXZ_CIL0IQ.hW3r"p=r-kl?;8irB;c#7qas3)=;!IgUUPHsK#^$3gV7!W2qL!7h,T$me8K GCP0orI,*!>X9_I%LE=A!<L+=JcLB&JcLB&e,TRT%Mp>e.Kh1K-7')?!!NB7-R^Dmr[J%#.MrHmLB+ga "9]bj-S!IolRW&e$CUss!!33/)Z;,f-PQddi;eH0JcLB&JcN.X#6kqn2Et#IJbub\['mEQV1rMQ1EHkd !:0[n!<WH0)Fn_.Xfo"7r3Hd^l0IH;G=*5Q"Tne4!1<fo!<E?L87#S:HBG?&ZcTQP[0E4N>=1"\"iUJ% !!`Z9(*GJ6EKL.*%(Y-XlK"gX3tMT"!s+G_JcLB&JcM&9qu?s110omGZE:&%U^EroUlo[g+qG"a!n.,W "Uc"c02QSJUS=T]r1jS+^qR'u7NVcr!.k42!"8l0"9f,f@$T!V]Wn?IV#I4rM./=P"Tni.quD<Kec5p] *&0rhE.X>QU^3m.^q-R^4W+=<!.k3&!.k3&!8IP^!<WK1(Hl`Am,63tqk3qZ#Cp#<&dJOA!n.,U#T,'X =E]duU8%RY$_X/7;_\gm%1!(;!KI/p!"/i:'d58,F-F/?Whe"8m@jNN#C9H)%0m%=!MKM!!!a&m?&Yqr ]<M7,$C>X).glms#Qk).kQ$27JcLB&JcN%U":?;8?\&$>"I5.58.ab\k5YVc(fQZ`qN_1i/I\Z[PlM!j ,A;CZOdPg0adN-p!BCG#!/^aY!Ym\3rK[PI<$Vd)!.k3&!.k39!;lg%"ro?X5u(pGpqI3hb,g;,7Oo&Q !W`>R!!`Q0$P4^fHCFWD!:Bdc#MP;;*XN#Q!UBa4!!30'"TAT(#6"c."9S]+_Z8Zr$NU80"tNGQ@!.<u ]=P`^e@_,_:,X-tquD<Kec5pY%iQ`V>BH,.^B)7Jrr35HJjpF["TneF!.k3&!.k3&!8%8V%m+^0f%JKh poOn-O_6Zr'++jD!<LjRrW*6.'Hf&!BnrGZXU2,3e*,lGRoLd=\Gum9!<N<)"9\l3r<3*%!W`?'k5`6s $ipG5"V!S9Z0g8d\?=5]lE(;dF[QiI"9S_!!3uS0$R%T2D1n@WrN-@/h!!_KMb>&kjoBu5JcLB&JcN:\ $N^G7#THKuj8]/O_"ar8Nbh3,%1*4@kQ()P$NU;1!tHS==F$=@_>(&<Ip#/`%1`gL!W`>8!!rZ-!WrN- "U,#3r<3-&rrW3$V#Uo+%3$]T?Ac8Wag7nEorH*5#DltP&-rIC!lY/"!!a6'DlM4HmEba3$`7oD4r=b@ $3^J3!KI/3!.k3&!0mQ\!!NE?3+8,qpuVXE1^;&%!Y%SspuV[^?mc0=!.k4,!!Wg$S$^;kjLXISE?"TO JcO4!!sgGj^A[0shk*gf"24be!.k3&!.k4'!!`]J0f_QsA;^/s$ej4PXb^FN+qP+d!nRDW"q_t27:U\7 qS**H^[;%##M5&7*=)iO!PJL4!=o>@&JuQ2+<i!O*#]V*$O,\n^&SNA!<NHS9ikJ8L7>d%^ZrQ=e@LrZ 9f3pqT`D@u#6bST,Wf4NQ2SGu_tsB4#K_Nd'*naD!U9Z:!.k3&!.k3X!!`uoC7rbtc+s+V#Ig[jBh'fo #lOhk!:Tsr!<N?+%jaA>Dhjg]poOeKin`%E:Ep"R!!r]."9f#=',_`.#oX^!'+P?R"Tnh&!"8l0"9f2s Fg^i"bdjqMXi@IJUNT$=#R(;3`;knu#7D_9;f%)UWr9%*YM%sjc@JD'!K-r0!.k3&!0mNm!!39,#THO# jo>AT_YC/=O`FG\,T$sn!WiDV!"/l4#Rh\1<-FY2]Y+$?$@uJO+V>=q"9JT)l2]<6#6G#5$Om^`(]>6W (D7/_!sA]._Z8]s$j-tX-T>=e](OL]W2[A/#DltO&-rFB!rN%M!7h,T'K^'&b1u4)rMp:&FB:^E&ePKS !Wg4>JcLB&JcLB&ec5jT'f96[anY!#XABf:b5_VL.qcKjjoso0Y?iFUL]Fsc"pmYYXi/lQdH9`V!HB'J !3Q;(#:a?!rT47?Skg7+iW+Q1JcLB&JcN.X#6l,%3^ZeWMtk$pf&Y`9YC]k5*Yf(eli?AP#7;S37T3oC T(p&#mf*4kdZ.-D#6b21]`8<=!<NN@+YYr>$9pgC4>noG+;>.`V#Ul(!<NHQ8lJc(K:'7C^W+"nd^bTT 9Jd^n`;knu#6bPQ,<B"KQMnQ!_u'H5#K;6_&dJRB!KR54!.k3&!0mQ^!!`rkA=(-Q`OtuJ$b='[TQj-Z %0?P3!S[S^!X&Z3)*(rPS>``upoOeGhU]]!807ut!7Uu^!X/c6%iHZJ3&``Q0dn+Z%13:A_Z8]s$ipD3 "UdG9\+Jk0]<AfJ#GZH2'*naD!rN%M!7h,T$QqK.CkA(UrN-@/fA4onG!HoG_>o/fJcLB&JcOR+$N^G7 #TQ[(kPtSY`V?JARX/C84"D-R!W`?'gAhTa#nRt)8oC$(_8Wn[Wsbu/K3q+l(DRD`!<Kh5#6Y;B'H//D 0`<j61*meJ#6Y/3k5`6s$j-qV,r]%b\bk0oWN":GlDk/H@lY)*"Tnh"!3uS0&N=6g_:.AbrMp:&FB_$G (DI5[!<MBaJcLB&JcLB&Z2b%/'/<[N`q\[!_0%jW"Q]XJ!!E]\<K>8tjo_bj+9\bGPlM!o5DQ)Of&ZMd `o[;A)nuB1!!<ERB"e0*"Q,\C(]fBlJcLB&JcM&9qu?s+)_jBA<+h0b^C/3Pq"rU:E()<"'*d(h#QYJh 85`GrH_L5L$h42rrQpO")[6HJ!UBa8!<*!2!Xp/-93PV/A7StE9L:ET%fsTKiW'>e!<NEO7T!)nI?hCT ^B`2tP%@6A*!Z<@JcO@%#6YGN,!&nKR/Oc._u0Q7r54"P&I&@>!QG+k!.k3&!.k4'!!`of?B2G.^q0<C $b+RAhlh#_'*87:!o!\_!X/f:,>ENgd*TkBqQ1(+XioAA]6Qab"M+RI!sT&A(b%OA=BAO&:I$WZ((LWR !U'Nu!"8l0!sArnGIdG7e@i'5Xm3"nUNT'>#mCD4T`D@u#7;S6;/1]NWVrq)YLM+EZu%l?!TjB6!.k3& !.k3\!"/i2"UH)FQ0A8JrQ"]6$_N#f>YI4($N^A1!UKgU!"/uB)C7OSM7DL!afY?=$%ubX+rhF0"T\Y: !!rf<(*4q^5YP*T#uaf"3[bdO#6b4+!"8r=(aLtCLqE]K_5aL-X2_1FM.8OV#6b22`;knu#7r[sOgrQe aSi.HVKZ?3)&sD$"9AO_!.k3&!.k39!;Z[!!>-qcN5bSS"k0;g807r[!!N]dA;dkIpuV[Z=<@\+!6bHA !P8?f!!WZiI@e(#jLXISE?"TOJcO4!!sL#]]D^jqhjR1S!Wg%9JcLB&JcLB&fDl-])DF6A<GRWi^C/$/ jR`5bNa+b")@QNFh>doa!WrQA4]50cH&Sj$^C@rmnGiOcc&>C:"p=u.^&SoL!WrQ=/4sDnGC5!rIWT:/ 67WcP!<MHc]`8B?!X0i<:/P>DPIT#TlG!SP\<18m1)gFk!3uS0":Q(h3*LEirP&cYrr<#n_1+f`"p=u. l2ZD9JcLB&JcN.X#7E7hL9.ko[J6j3Zbb,Mka,6k#6b53li?MT$Np\D'/3sehXB+7[.pa.ajJ&1EBP6C \c<$?#S.^t3DaI7FUE51Cg0Ff,8^pr!N#i*!<N?*#s<FDp[HeKYP#$;XTtVE7MH.4!s6FANW9:k+#m)3 K:/b<XU))Yd(lSk2&-1N!.k3&!.k39!"8i/"9f&O;jQYIs8L.8WsbSfKPFa_/e8$d!X%6Y%06J8(*th8 HDTcg`ic36WsOJk80]5r&Hr19klB35#6tnb/j)g4B`2iTB2CQ2&.8^F!Q4uu!"8o;(F(e>L;!WS`2fiJ Ws=Jk3=Z8t!s8B#JcO@%#7iLjM6FkH`VlhEVg)Q8*?Q./"9APA!.k3&!.k3&!7h,R!=p\ZLW&uM"l7G5 VFqTL!!WKMB:HBUhYQ@<k2r^H*X&YH"pP\Q',1oYi;gCg"p[)1R(1W*dH9`V!HB'J!3Q;("=7NgrT4:@ Q:Men!TO03!.k3&!.k3X!!``I0KV^'CQA2)&&c]Ek5<i9LLWk/(^:-G!q63Z!"/o9&K*>u>?c6*R'QM% $h42rr6C9s)[6EH!PSO?!sf>M-UhBfMN/10QCOM6PD*F0,RO_Y!Wf5"$3:23-:gs4@t0fUotSM]#L^/F @nAEo#/pS&!!`W8(Eb\@FI)m?%)`)Es8'T^6P'G)!We>^JcLB&JcM&9qu?s00j074\%&j@XUVSIa49@[ J5@pA%g;t7h#Ifg(*tn<I&PfRb.FtSXTuu!b-c=V*<YI)e,U0f&g/ko<G?rBMi!7BH>m:h2^&S2rW1%> irBJg!WrQ44Ee=/m*iVN\uc44G=E8Q"U"o)!.k4%!!`iQ3)F@BRB$4f#d2_,`i`u7(BVGRJcLB&JcLB& g].]`"9f&O;jQYIs8L.8Wsb\kP_!ID3#W)."pFo+iW'Jj!sJlD.7%0_RCM7u[Ag#!Wsbu/Kk!Ur*Z5Il !<Kt9$NU80!Y6P>=DW54KDgH1HX]W(*Y]%g!W`>e!5ALB!Xoki1g,REs5UnpWR7d3Ws=Jj3",up!s,(q Z2b+?0Na18`7)^(WsYbJ?9fDL(_$TK!U'N8!.k3&!.k3V!!NB6.oV5ApuVe<eAet4-3`Q4lMq,"5D6Da f&6>c"05NF"L.q0!=L).2$Glr0,FioRfEWt4Fj':e`?Dc`o[;A)SZ90!!<?M@_2O#"lGY<(BOVn!.k3& !.k39!;lg%#9#9X79+,`pqI?V`m3-3mFJh5Bgj?[$O-^j!"0&H,;MYg@;1R`V7-06$h42rrQpO!)[6EH !UBa8!#PnO)C@LED2=dXV5^Z1^V7+/=>Ua&#m::M!9!nb!<E?P92nr+KUKE_^B`2tO^gs<)@$*>JcO@% #6YGO+?3PHQMnQ,_uB]9r54"O&-`7=!QG+k!.k3&!.k4'!!`ld=ba#e\@)+6$a@"N`95UUNb1R$$N1"_ !"05_5[Jc&[+E=2[]oV1$*C>QfZh$R6QQBA!##b^1eD(nJ<QOoR[KY;SskUA1_orilN"["$ipD4"UdG: \+Jh.]!'M`lE(;dG=E;R"U"n#!3uS0$6M6(C4hqSrN-@/f%8-SD*&O8joBu5JcLB&JcN:\$N^G7#TZj0 kl:\^anVnHV4O-BE*GRO&.]*O!WiDk!;$7%!X/i=+?j4jVnCF0ZDsh#po=^S@R_FY(CgTL!Pe[E!<N<) (cbu_UT(5cQ'DZ@Q&KT^5:@Zi$N:),!N?&-!Xohg1K]@@qV&NZWV*=3Ws=Jj2@BZk!s-@@NW9:p0Na18 `7)^(WsY_H>X'#C((CBI!K@)2!.k3&!0mQ\!!NB6.oV5ApuVh?gsX<)5njCM!!iT6/n1X!eD0'Yjo_Yd *WtF&ci=IU&hQpmB4u!d4sCF<^]<0j"pdJNVo%'H]&j$5)YO/_!7CiL"=7NgrT4:@QUqqo!P\Vd!.k3& !.k4'!!``I0KV^'CQA2)&&H0%a6!=!p!/\+1`-f4"Q9=i!<ETP2*Xc<AqQk[[(H1L!l)M>rr35NND:Ds "9JV<!#Q"Y-T":tE/h'+Zadg*mIotMF$q)c%L)t#!5/@>!<E?R:0:\=L7>g&^ZrQ=e%(TN8MV1gT`D@u #6YGO+?3PHQMnQ,_u9W8rPO+P&-`7=!U9Z:!.k3&!.k3X!!`ld=ba#e\@)+6%^3.C[F=X1h61QQ%fcV2 mf;hW$PYL*LSV;oa0r@[Y5#+(c.p^_IRP=]\c<$I.S+0"MO:-=WXGi*XiK&Me:pU;!<E*"WW3G.!X&Z8 4E\%%hoiR5orZ69#GcQ5'aY$H!lY/"!!`iQ3)F@BRB$4f#d;n6cb+3[(]oTqJcLB&JcM&9$ig>3"UH,I QK\AKrlOr9$`KkpSVCWH.2EO*#lXl*!TO.j":,JN033e@i907>Vl$>jpo=^Q?q).R((LKK!U0U:!"/f/ !sKiCL;r?:gV*Q^$^c*E82;\:%g2q8!QP3#!"8o;(*YP:Kt$X"[]$1:Ws=Df2$sHh!Wi3!JcO@%#7iLj M6FkH`VlhEVK5s*'c7Vn"9APA!.k3&!.k3&!7h,R!=p\ZLW&uM#isq#gU1TC$3A]X#ltVj<JeWJhVmPl joso0XB6MGZN(I<'J`pVY-+t3VfbW[%g(hm\Gug?7$Fdnf]:HBlK/+c)4LW/!!<?M@_2O#"lG\=('+Hr !.k3&!.k3&!42_2#9#9X79+,`oY1FPo`"jp^Ni3j(CgZ=!:g*s!<Nlc5t4UTGGDnF^B!d&rs-u3:)aB? !Wg"8#n.q55>>L/S\MoL^V@\Bq>^KHO]NtP'FFo?!"&`-"Y3DS@X3g&]CiqY^B`5uOCLj;)@".\NW9:e $l:$G>'-)/^B)7Nrr35AImXbO"9JUb!.k3&!.k39!;lg%$Sbe=XLG^IoW8M6j7i9=Sk^"#!!*,X!!aH8 HahAKaKkH?#LD8X`Ig]("Qod7!!a2s>_SfNYcn#-%'e%Ap\2:4-ij;J!Wg@BirBJg!sJi;4ERjofZ(G( \uc45G=E;R"U"o)!.k4%!!`iQ3)F@BRB$4f#d;n:e&$5l)$7YTJcLB&JcLB&g].]`"9f&O;jQYIs8L.4 WsbA090Y!F&deaC!Wh<]$j@"P)E_rBrVuoMYc@Gu$`g=Z?UYtL'Fb3H!Pe[>!WrT1.qc-drrMf*rMg7$ NF,@J0I7>8!WiDg!5ALB!Xfbf10B4;ji4U(WR7d3Ws=Df1C4-d!WetpZ2b+?0Na18`7)^(WsY_F>!<T7 '+4pD!U'N8!.k3&!.k3V!!NB6.oV5Ao]?>*Ui8g7!U9[Q!!Wid=G!m4jn7a<XB?PGZiC=4&MI:OdH'?n jQ,46S9.=1SH&j$8=m<5g>qqh`o[;?)8?0/!!<?M@_2O#"Q,S=('00jJcLB&JcM&9qu?s,)DF6A<GRWe ^CSEJr;ZfJSo%%X,7jnX!<M?`$NgP>%4+>;;d4!jXn9@.nG`FmdZ%!@"p=u.lN#E7#7Mb45>5@+TDcM5 `8CIls4NN8-QEa*!ltB#!"&`-"<^$8@rHgXV=:MnXK8P+VkBNBR\R+!q7d0MbL+ed`OiARVuNa_Ws>DY C.pQ5'a=L8JcO@%#6YGO+?3PHQMnQ!_u9T7#K2*Z&-`7=!QG+k!.k3&!.k4'!!`ld=ba#e\@(t2$b"UR p@P\)0+8'g!oj7f":5PQ1L>pPdETQ$XU2,3ced6lK1I*f\c;sN4(F8JZEpk8XU2;Ym.U1gB.3i]rW2?c ^AnZC!WrT4/m*h9ZDsXfm[+9JQC!r*R\-IUpoOe(Z*LF.URdhPQiWPAm$J$)=YU?i"9S[u!3uS0$6M6( C4hqSrN-@/f\P#nF[$`FjoBu5JcLB&JcN:\$N^G7#TZj0kl:\^an2VAS:O^375#u(%1*1?n,W1_%KQS3 %3$f[?Au]"s6@\-oW&:L?UYtL'Fb3H!Pe[>!X&Z4/SMEgrr_c$X/cT.X.tSU83eRF&-Vt6W;m;-#SJ%& 6=GA9SXGi:Q26aPPEhW9ZbO>f[&Nl%#H+>bP)>6]Pl6s7Pm;>'-3sYT!s-@@NW9:p0Na18`7)^(WsY_F >!<T7'+4pD!K@)2!.k3&!0mQ\!!NB6.oV5Ao]?>1[ukDX$.o4^"!CHhU;YjZjo_\f*<Y=%dJsFQ'Jj-c f)=_7hnGCk5mP4+g].Kl8QB)-B^f^DB4kddD0^_kTtSn3q;qq>ca9!bG&hL!B^9@5,6RW>JcO4!!sBoZ ])Caohj@"O!PSPc!.k3&!.k4'!!``I0KV^'CQA&%&&m/eqZ#luSU"<t*!HEG!TsFj"Ul(c3Dj-lCk.eX p:g[D^[V7&#L\T,)[6EH!PSO=%3dYo9O2e5rP&cZjSo2ZfoK&Y)\E>Vli=^!$3://(+VgW@r$4;mt1Ok #D%;NG(GXE](s)J^s^WP]rdc^I=6PFJ:['=#BF'>1F3qL"/,_#!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G) !WhQdJcLB&JcLB&ZiC==0j074\%&j<XUDJTg["ILK23p7%0c5$oDf4)'dPS3Eg4Aa`4GQB#LD8X`Ig]( "M+R>(HuMtYIM-LXfVu5Xg6FGp@c@9-ij>I!N?&,!WiH.*]mMOH?O=HokjYE$uB`pCM@^.G^PC8UT=0l $a-:jK6q]XC2@[%C[>mC<&bm(!s8T+`;knu#7;P4:hkWNWr9%*YLq[[_KA'\!fI&1!.k3&!0mNm!!39, #TZj0kl:\^an2VCTU'e+<(/_l((^iV!<MEb%fl_5!u<IX@tgr/qrZ58Wq<=uJR:hd'GLu[!<MEbfDl*W "U>>dBsI[;!U[DqWsb\U;ai_i)%HfO!Wg=AirB>d"q;1a.m@!Lltd&EBkV.%LRG9T^qZoFWsGViLNI*@ CMe"gDX;0E:bipm!s/N)quD<Kec5pc0Na18`7)^(WsY_F>!<T7'+4pD!Q4ti!.k3&!.k4%!!NB6.oV5A o]?A6a01k5*<t0s"q`tCUqP16p>uP@k,_]+"1/%3!uO".T%<l&"lHhL?oJ5M!4Mq1#R_(Omgoj;%h9$` *[rmCIC.c)jp0\BD*T<e)&3&\l4<prRK0Jj!sBoZ])Caohj@"O!TF*2!.k3&!.k3X!!``I0KV^'CQA&% &&QE9h>[B7c)uIk.L-+Z!qZKb!"0)H+>-,hC3GK'X1@l;!:^!f#L\T,)[6EH!PSO?%jO"u93cS2^V9lc ^Vo@8rs.29;C!+k#Q^e&#QbAM,r7PF6:^]>q+(c_92JJ_Aq,oLq7d<ReB#"eKl:*^6UaN28-_=4-6*a1 "p2aDNW9:e$l:$G>'-)/^B)7Nrr35AImXbO"9JUb!.k3&!.k39!;lg%$Sbe=XLG^IoW8M*[_^2QdA2"a 0cC;W!"'2\3`0^ITY81MY4Jb#ced6lK1I*fk5a!3#8]XAS[cAGZi.!4ZIeaBoY>&e!<E*"a8k3"$3:20 ":uY/69m^sml:b83&``\8lT)9LRY@?XUD;5O`XVu76NRh2`U+`""G9$"TAH&!W2qL!7h,T$6M6(C4hqS rN-@/f\P#nF[$`F_>o/fJcLB&JcOR+$N^G7#TZj0kl:\^an2VAV4<p4Bj=+]*>oCprW29a%fue7"Wfm> PHi-fikW")WqNJ$X/geY73*'V%0Zb5^]4Q?"UGJjBX.R:!UI8oWsbVN:.$iT'FY-H!WhTe^AnWB"9o2C (a1Fh3&s%g3t").2`4-6G`el3^p*X8$Dr]#=$Jr75<_1l!'KR/"tLW%"9S]+TE)7t#7iLjM6FkH`VlhE VK5p)',;/g"9APe!.k3&!.k3&!3uS.!=p\ZLW&iI#N=@\^lUes"7-$W!!`i]?`2)sgu@tg"0>WG"1/%5 "<0L<U"8Ag#Nk1*[=VC0!f@!O!!NE.*(c1Cq;qk7Il\,A!MKLN!!<?M@_2O#"Q,S=('00jJcLB&JcM&9 qu?s,)DF6A<GRWe^CS,r_8=h(s8(`PC,QG)"Tmie$Oe",3)3t+T"2GF^@]/?nG`FmdZ%!@"p=u.lN#H8 #QYD\2aBu>F.iKH!Q=@(rs.59:E^Mc#6DmGhZ*l^!s],@%M06?'+,Ee',DK-+\$:(Xnf^>aO.PcEE>:L %M'-`lOsL7$jm1A!s/N$!.k4%!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wg:@JcLB&JcLB&fDl-a0j074 \%&j<XUD;8YHYaia01.m-4Ai6#o,3mEf$9cZ)t2$XU2,3ced6lK1I*f\c;sR6ZJs:_niYWXU2;fp%J$n B.3f\rW2?c])W':":,DK&J,KA%LW^S$ORRk/NQsUP,\8Z$F6=M:F@5%&I]*X!"J6(!so27!r`4n!3uS0 $6M6(C4hqSrN-@/f\P#nF[$`FjoBu5JcLB&JcN:\$N^G7#TZj0kl:\^an2VDWi2hlR;Z%^+!).)!s&Go !;HO)!WrT1-WGuFj6u<DWiE,"oW&:L?UYtL'Fb3H!Pe[>!sT&A0kmlkrr_DlX/c]1X.a`25VEWX$3UD3 !N?&*!<N<*"U>>A%M&%?r!s/E$jm7]2,S7NX1Yh8WsYYP>rWQ6'+tlg&F'c/$O6e9!Q"hs!!a#g=Ga6" e&D9d$DqlJ4qeYE$NpJ2N<"P1JcLB&PlUX\"T],a;hr<`jp:)0j5J+"0FIs<!!ifQ9oRKZj5f=ojo_\f *<Y=%dJsFT*^X_?fDXh8hQM2r,6>U\]`8-:,\ta%joWt;(tAV<!7CiL"=7NgrT47?QqA+p^&W`bJcLB& JcOF'#6u/$4%3.bNpsdlbPhJ@p:l;Y-QEd*!UKdo!<WH/(be?P?#>7uo"P7@^[V7&#L\T,)[6EH!PSO= $m.8e93cM/rP&BPo)AXodYLU='b(?Jli=Ts"p+l0"pP;<lNme(%M9C;Aqm;\^C&01Z]&Hg1E$E#"p"r7 lj3k#"U"l.!<JhnZ2b+4$l:$G>'-)/^B)7Nrr35AImXbO"9JVh!.k3&!.k3&!42_2$Sbe=XLG^In?!)) dEon3CHWO;!s&Mr!;HO%"9f&>,t2F$RAI'fn>urAhU]Yu80A&H!!sE&AWa""\$W9>%BZb<h=U:*XBQkK !!*+r!!36*"oS\u#5eZ5"U"o0$l:0D:iVPpq5jn,SodC@'b(HJ"T\f4limOp!s/M>!0.$a$6M6(C4hqS rN-@/f\P#nF[$`FMZA>/JcLB&PlM3m!X&Z4*E/9fs8W)?n>cqiH"9Z.0I.>:"U"nn!"8l4$kjUECSBY[ rSFdJWsO>a73*'V%0Zb5klB?9$N^J;$7fDOlMpnS[f*67TlNmn.hE7!!s8T*`rP*!!s&H)"9&H%#4Dd) "p>&2(+r0jL8DPkq5Xq!Hrr!0$OR1G#R:S=lj!Uq"9S]"!.k4%!!a#g=Ga6"e&D9d$DqlJ4qeYE$NpJ2 _uPAhJcLB&JcO@%"T],a;hr<\josA&<[S7VhZ*fa+@C+Ig@FA0k2raJ*<WYK"Tf>m?^]ICjojM=D*/Qo !13`f)e.+gjoWk.&buEY!3Q;("=7NgrT47?QqA+piW+Q1JcLB&JcN.X#6u/$4%3.bNpsdl`om@$s3RK\ 9/n10!VHHf!"/l5$4\OU>@VMsOLO_o!:^!f#L\T,)[6EH!PSO?#oY<P8RHP1^V9lc^W-*Krs-Yu8K/9M "TbG"!s&H*"T8Ms#5AB-#RV"P3FmiFq7d?\bcut37kb_^!sAc2limOq"9S`)!Q4tu!!`W8(Eb\@FI)m? !Q4m8rs-Jl6P'G)!We>^JcLB&JcM&9qu?s00j074\%&j8XUMDNdaQ!a="b0p#6P"o!"8l4%Mg-I=a-1. XfnepXU!2/f#<84+9^j-e,T^d1/rFYT<59pXU2;kmHNMk9cO-6`;n`p!WiH,quuQmr<!93'd,&$DN:Xj XTu/#Da5*M$4$M4!!V]l!WrN+pAfdFec5p^+#m)3K:/b<XU),_h:'5`58aO>!.k3&!.k3&!8IP^!X&Z4 *E/9fs8W)?n>cqlNH/N/82hRu#mLP!!"/i:)C[[NL9g+CkKNIs$`g=Z?UYtL'Fb3H!Pe[C!X&Z3,Ys*2 kje#PrMp=!D,WbK'bh&[!WiDg!58F9!<E6'"6p!t!sA`/!u*:UA:pbl[J?j1UO?2n#m^b="pG/1"mH-i !h97r!!a#g=Ga6"e&D9d$DqlJ4qeYE$NpJ2kQ$27JcLB&JcN(V"T],a;hr<\jp'VLJlXH6!Ug$[!!WNE 8oU-6hXKY0XB?PGZN(17+A@X<k2lp2k1lV8.gQ05!:p0l).1V`joWk,&"WcY!!<?M@_2O#"Q,S=('00j JcLB&JcM&9qu?s,)DF6A<GRWa^C8$.kPY88]pWq@2]2Y`!"8l3$5"+:=`&D;P,5_Y^B!d&rs-u3:)aB? !WhTee,T^Y'-],"@<nFB^B)@Qrr35?J4C@c$3^IO!8[_U!WE/f"8r?-"U>>B2.D9@q7d6YbH6A#6S&uT !p9Xc!r`5s!.k4%!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wg:@JcLB&JcLB&fDl-a0j074\%&j8XUMAA _pQYtEChAl%0ck#!"/i9(aV%9CknmiY-7At$*C>UhU]Yu80A&H!!`u]6XFtrT<%pm#I)tBgrjt.(?Y\/ !!33'"8i;l!t5;7!s/N1'-8SnCQ,1eXTu%uD*/LA#R120!<WJj"9/Fm!3uS0$6M6(C4hqSrN-@/f\P#n F[$`FjoBu5JcLB&JcN:\$N^G7#TZj0kl:\^amc>>Vk&fnEF)*b&If!J!VHHg!"8oC-p_*dT>BdJbI";= WsO>a73*'V%0Zb5^]4fE!WrQF6#WR=eDS*BWsu,1U2X4#*?,b'"Tnf,VZ?\srrW'"o`Y3r!<WK(!s]Ji 6skM@]X@R9#,QZH-O'bYqud!%li[@l!Wp.;NW9:p0Na18`7)^(WsY_F>!<T7'+4pD!K@)2!.k3&!0mQ\ !!NB6.oV5AnE'r4caK6U/.(88"qX"QWl*BGnE'hS=WIV)!7:cL!>%89b5LH*gmLnW!l+fK!!3p?bk^B& c;+l!!.k4!!!<?M@_2O#"Q,S=('2,LJcLB&JcLB&fDl-])DF6A<GRWa^C7oq`Q6p&fY3tt8Kn6'!"8l4 &/c]`Aq$;U\%06D^B20bnG`FmdZ%!@"p=u.^&SBB%N$EU@XXmI^Au=Rrs8D3HpeVV#6Y(o!4`*k!=&Z0 #7*(mKW=j_#L(>jIT8Q]'`J-r!Ls.q!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!WhQdJcLB&JcLB&ZiC== 0j074\%&j7XUD>9Ye%0$Aj.RW$3Kl#q#Cg)&0`u'Aq?ANXK/J)n>urAhU]Yu80A&H!!s#R1Itr%Q)^sg $E^G7f$qa@A2=euTE+B\p]1U*&K<&bBoAh`XU)5"C,c_2"U"nh!P\Vp!!`iQ3)F@BRB$4f#d;n:e&$5l )$5]rJcLB&JcM&9$ig>3"UH,IQK\AKrlOW0$`9_oQZ?%]'G(ZU!UTjp!ua1)KV>s$^TOW;n#HbG?UYtL 'Fb3H!U0U9!<*!((,]9LWP-TjrMp=$FB^pJ*Z,=h!s&GC!8[_:!='5c6=#)9]XR^;#buZC,m48O!s7Tc p&K[Eec5pc0Na18`7)^(WsY_F>!<T7'+4pD!Q4ti!.k3&!.k4%!!NB6.oV5AnE'u:hqd#"<ZD2$!!``\ Dp$hkiT9Xm"m4sK=WIUM!!<BPBZ0l3"P\u*'E[=qQiI1$=NgO&!mF:Dq#H!HXoJP,-"=IajojS/8eqHe !.k3&!.k3&!42_2#9#9X79+,`m(WtHmc`9;O'jmX$O-\6q#L<mrW*9,&0Weo>B>\3o=t4;!l)M>rr35O ND:Ds"9JV<!!rc7&fEQ0H'bb@%^`^ah;[;;R:S>f#mLJ4OT>.V#6=o2"u'G=X80L9bfHc3<'MfF!Mf^U !!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!We>^JcLB&JcM&9qu?s00j074\%&j4XUMADV2&PH.2)je!s/Mr !"8l0"9euK1JD>+O.iZIXUhJ3W2?MnX0'_)f#<84+9^j-e,Ta['dY_1AU]u@rhTk!WLf&h7O8J\!5SX? "qMUu6YMCTq5jn-Q>&8f#R(:`!.k4%!!`iQ3)F@BRB$4f#d;n:e&$5l)$7YTJcLB&JcLB&g].]`"9f&O ;jQYIs8L.,WsbbTA4J0q((10G!Whon$ipG6#7i:[G,2[idAli>"g"i/YHFu8XK-nZ73*'V%0Zb5]Dr]X .7@ZqQD:@QTqS'>E)\h?*>Aka!WhQdSH&m,-ph0fU:I]-Wro,C;C)5D!!<-"JcN(V#7iLjM6FkH`VlhE VK5p)',;/g"9APe!.k3&!.k3&!3uS.!=p\ZLW&QA"P\Dc%fu2#o`,*u+&A6Yo]?PCj5]+YjQ5O*=WIUL !!E]bDk!7#SXP@.+UNr)o)Jh*=N^I%!mF:DScFWJ!sBoZ])Caohj@"O!J^Z,!.k3&!0mQ^!!``I0KV^' CQ@br%)_;skLce^;(Ne'$Nfr#$NU>3#9Z'*@<$ma\b*WB^:h7q^:h7qnG`FmdZ%!@"p=u.lN#E7(]ssM &0sVNI>sDSQ^j_@RZ1uM-OL%\!Wg@B_#O]@"9o)c@"kZW^Bi'+Wde#6.MMp<!.k4%!!`W8(Eb\@FI)m? !Q4m8rs-Jl6P'G)!Wg:@JcLB&JcLB&fDl-a0j074\%&j4XUMDG[%iLg5pHaB"Tni!!"8l3#7M4q7q6t, RAd4[XTkl*URRO>U^=$&ced6lK1I*f\c<BJ%i?QK86g+^IXcltEF`$7.i&BQ!1a)p"qMRt6YMCTq5jn- Q"`,c#R(;/!.k3V!!`iQ3)F@BRB$4f#d;n:e&$5l)$8q#JcLB&JcLB&\,Zm<"9f&O;jQYIs8L.,Wskh` G%+33.MW'f!s/N!!;um+!XB;T,su=+]>r49WV*;)XKJh;]X=uGX+=VH*>B1s"T\Y:!!rrN/jiTLF+/^i %"*D@>!jkZ'FkBN!<J5]p](O2-ph3hU:I]-Ws>DG;^MYN"9YD!NW9:p0Na18`7)^(WsY_F>!<T7'+4pD !K@)2!.k3&!0mQ\!!NB6.oV5Am,eK-U1#kn"6TXf#:<#eZJP9:%-?O,g!e^6j6!FG*<Y=%c2[nL)(>J5 ![A6Y^&YeG!Y\\Yq;qb&9*s,KJcO4!!sBoZ])Caohj@"O!PSPc!.k3&!.k4'!!``I0KV^'CQ@br%)UW] mc_KUDFcW0&d.e,$ipD4"Uct]Cjh##U:^'4"hh[e`PK7i^;'1:rs-u3:)aB?!Wg"8(BO^D#o"^I:L%49 B4k^[=&1n+('OdA!UB`V!!`Q.#7*(nKrb$a$I$YnJ6,#e'EJ16JcN(V#6YGO+?3PHQMnQ!_u9T7#K2*Z &-`7=!U9Z:!.k3&!.k3X!!`ld=ba#e\@(\*%'I+Q\?1Be2&-Q,"TnK"r;[3,"q;=i4'R#qT;AOZXUqP/ Q]6l^S#3=6hU]Yu80A&H!!rc6%MTp43Cch@#uFMp68pD:'ak2(!;HO!"qMRs6YD=Sq5jn-P\;r`#Qt4( !0.$a$6M6(C4hqSrN-@/f\P#nF[$`FMZA>/JcLB&PlM3m!X&Z4*E/9fs8W)?m&LPmRu2T3=[=/7"Tnf, o`,C'%id,_?@erpc,dJqorA_,Ye%cu_mchMJR:hd'GLu[!<MEbe,U3f%N-ND3CH_F<)?=[3%#XV$O?n; !Q>&T!!a,b6=#)8\[D76#GZZG-3jYV"53a,!7h,T%kq+BYJeo/rMp:&F':a@'b^rX!<L+=JcLB&JcLB& ec5jS%kCS6`9cUjho(t(:)F&s!!WQRAVdJ6i:Z4:jl"\3^WY:6iT@4E*<WGE"9AK&!<M*YQiI1%=N^I% !mF=Fq#H!HXoJP,-"=IajojS/8eqHe!.k3&!.k3&!42_2#9#9X79+,`m(WtE_T:0`e$P-H9JRLhq#L?n $NU>5#nK74KUo!F\b*WC^:qG(bf7H3^[V7&#L\T,)[6EH!PSO?!<E6("q;:f+smXI0/5"(+;tn&"p4c) O9#%U#6G&6#W#nDX80L9bfd)==[FYR!Mf^U!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!We>^JcLB&JcM&9 qu?s00j074\%&j4XUMA8ZEq'3G"a(p%0Zh+!"/i8'HSi$DiL`qXK;&r&?;@^Lk:JGUTDeuf#<84+9^j- e,T^T"9\o9%i-/a+:'/6)&!D`"TeeD!5SX?"qMRs6>)1Qq5jn-P\;o^#6Y+^!.k4%!!`iQ3)F@BRB$4f #d;n:e&$5l)$7YTJcLB&JcLB&g].]`"9f&O;jQYIs8L.,Wsku)US!cm;_/.W"9S_u!"8uF.R70bS[cDD YGnPpWs5]4_pmYl^C.<JJR:hd'GLu[!<Kh5'*8=B#nIdk,UXi\*Z5Y%#R(>5!p9QS!!a,b6=#)8\[D76 #GZ]J-jTtZ"9&:P!3uS0%kq+BYJeo/rMp:&F':a@'b^rX!<MBaJcLB&JcLB&Z2b%/%kCS6`9cUjj5&>/ Zq(\u!;HO!!?#"Ud+R79p#Z\Dgrm:0^!GTtXB?PGX8mhPo)Jh+=N^I%!mF@GScFWJ!sBoZ])Caohj@"O !J^Z,!.k3&!0mQ^!!``I0KV^'CQA>-$c9m)cHF8?Y-#.D]_T;N^tQo4M.T4*$j?_7!Vl^$!=',O,>W<= ^%oDT^qmt4bf%&rYIhZmc,RT5^[V7&#L\T,)[6EH!UBa4!"T)4"U,/?%hfWf$O$S5!<L(<_#O]A"UGAi @YUrZ^Bi',XFXPA///->!.k4%!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wg:@JcLB&JcLB&fDl-a0j074 \%&jDXU;56Yd:R9W2?PpX8&e)Y-="#4X_-T!s/K)qZ$s(!<NE<+u;]#K:V_<%'Qq>X/W.tPDb0HM2qt< XO#bS`Ig]("L\:5!X&]7%/gP8#m:@j!1a)p"qMRs6>)1Qq5jn-P\;l]#6Y,-!.k3V!!`iQ3)F@BRB$4f #d;n:e&$5l)$8q#JcLB&JcLB&\,Zm<"9f&O;jQYIs8L.<Wsbi%U7nB]YI:g@WN,cp$E&Mb5oC:D"p+f+ qZ%$*!WrQ4+?EVMQ`n3(q5YF4Vl$5cWiiV7_9LZmd(uugJR:hd'GLu[!<K\1"Tno8%M'!P#m^_<"9XG[ p](O3-pq9iU:I]-Ws>DJ<[e:X"9YD!NW9:p0Na18`7)^(WsY_F>!<T7'+4pD!K@)2!.k3&!0mQ\!!NB6 .oV5Ar8nCFh:U3)daQUng>:ibjoaIa-j8i9!spoCiVDUMinW24bgG"nf$2";WP-R6jfDT*"60B5!5&:5 'NiNRjoWb$$Io-.!7CiL"=7NgrT47?QqA+p^&W`bJcLB&JcOF'#6u/$4%3.bNr6X"aPQOco$Xk0Odr;Z pqI3he]"bL@QkkI$jHe/!!iZ=+uD\pGE9E4^CJ*/gt^JqVicq2[DTu"^&l$`nG`FmdZ%!@"p=u.\c<-> !WrT1#R_(O$O6h:rW20^SH&lr"UGAi@YUrZ^C&3.XFXPA///*b!.k3V!!`W8(Eb\@FI)m?!Q4m8rs-Jl 6P'G)!WhQdJcLB&JcLB&ZiC==0j074\%&jDXUD>A^VI+IPa%T-V5sBn$aHC]CJ6B!"Tec-!W<!+!<N?+ $6_H2EeKgYpT575XJVYZQ_'n:NJ`UQS#3=6hU]Yu80A&D!!NE+"U55<rWiQ/!s48Yp](O'%iHWZB8WS^ XTu.rBJ^)%"9P=uNW9:k+#m)3K:/b<XU),_h:'5`58aN\!.k3&!.k39!"8i/"9f&O;jQYIs8L.<WsYVh M1:>KXMiE*]D/E7W/u1/75Z5"!s&H(qu@-,"UPYU1/W.^XhDTOq5YF3Tp:OoS@-f(hU^3%_mchMJR:hd 'GLu[!<MEbci==Q"U5;A#RCV<rWBn8_#O]Q-pq9iU:I]-Ws>DJ<[e:X"9[?XJcO@%#7iLjM6FkH`VlhE VK5p)',;/g"9APA!.k3&!.k3&!7h,R!=p\ZLW',Q$eiClL4kPEKTNC\h>-19iLE^e#42Bn#:E`Piq_^H gr#e6F,$'QTWGT5^WY:6iT@4E*<V)tQiI1%=N^I%!mF@Gq#H!HXoJP,-"=IajojS/8eqHe!.k3&!.k3& !42_2#9#9X79+,`r4`Wiq#:9^bbTi@N1.'J^C7p+g==KJIT8-H(CUEE!;um'"s#Zs<Fg38^%oDTaPGY& b-RIbG)2d!^qRLr^[V7&#L\T,)[6EH!P/77!<E6(!sJi4#RCV;!r`4Y!;HO!!X/i81Lc*>q7d3ZbH-7u 67`fOU]?DT#6YGO+?3PHQMnQ!_u9T7#K2*Z&-`7=!KR54!.k3&!0mQ^!!`ld=ba#e\@)7:$b!ph[\8P- I>3oWWq`\(ZE^9mDbDD`"9S`-r;[6,!sJo@0N<=hWj/n5q5kL;Xe:f1KSGPUR$<\rSYW3dced6lK1I*f k5`j/$NU;2"9er3"U"o1!l"`O!!`]=)'hO]MPg3O#I9S-1^aNk!nmX+!7h,T$6M6(C4hqSrN-@/f\P#n F[$`F_>o/fJcLB&JcOR+$N^G7#TZj0kl:\^ao&1ISV2&rE.spoaN_i3q5Xq'S;DN,<]_?,!s/N)r;[6. #ne.)7VRsr_oKKkq5Y"&P([juN2k7roAn31[BL%AX+=VH*>B1s"T\Y6!!WK,"U,,6"T8E&!oj9O!!a,b 6X>29\[D76#GZ]J.0p(["9&:P!3uS0%kq+BYJeo/rMp:&F':a@'b^rX!<MBaJcLB&JcLB&Z2b%/%kCS6 `;Ja*b*m$47nlZE;1#Itq;qk@^5,rN%JBeu!!Ncc=,=ZPq;rC?S7Oi?7p'8:L8D]5gYh,SXB?PGX8mhP o)Jh+=N^I%!mF@GScFWJ!sBoZ])Caohj@"O!J^Z,!.k3&!0mQ^!!``I0KV^'CQA>-$fq9dqW,AQCMJ?[ WqjC<^qnCJftj1r755nt"Sr*)!=(#F=]]*ZR_JU4$e!k]`O2FqDe*sHV#J(0^VB:;rs-u3:)aB?!WhTe cN*nE!!<-%rrW3$^];1N#6G&7#W#qEX80L9bfd)=>!abS!S[U+!7h,T":Q(h3*LEirP&BNrVlg%`.(,c "p=u.`W1SjJcLB&JcOF'#7E7hL9.ko[J[-7\\P\LL2pm<F,$*\pT4e/['Pp*2@Tfm!<N-!$N^G9$5Z!H U"@f;\bN9:Z)3V)B5;O:N0]s(VPpI#X0'_)f#<84+9]+QrrN-$qu[!%!Wh<]SH&m!%iHWZB8WS^XTu.r BJ^)%"9SQ&JcN(V#7;P4:hkWNWr9%*YLq[[_KA'\!p0K7!.k3&!.k3\!"/i2"UH,IQK\AKrlP)=$^>pG 9NlLuWOp6q\G3*4VP0?<F&OOn!s8Q)r;[6/%N6ZS>_K6>fu^Iuq5YF,LiQd*GFZ\Bo'OW(Y-"e+JR:hd 'GLu[!<K\1!W`?(rWE0&rW3'#L]I2M#8/FP?%8TZ[J?j.UO?/l#R(>5UB$;S#7iLjM6FkH`VlhEVK5p) ',;/g"9AO_!.k3&!.k39!;Z[!!=p\ZLW',Q$bCFC)BL+G)(&4>dJ;o/jP.ebSiR,H!!WW_EKmo\jn\$Q a*0W]%36rW5\6(qiT&t[k,_]+"60B5!5&:5'NiNRjoWb$$Io-.!7CiL"=7NgrT47?QqA+p^&W`bJcLB& JcOF'#6u/$4%3.bNr6X&n,NCVgTZ3-=E0"_ZaI?VpqI*[[>eN^0H:?"r;d9-"U5T#<a9HlO/Tek^CS/u `5gok`iY\cFBqp\GaA?D!l)M>rr35OND:Ds"9JVr!"&`-!WiH,"U5/9#Q>#*#6kA:"U,#2!rW/b!;up# !WrN-qucp$!WrK)pAk0n!!<-%rri9&rWE?*!W`9$rW3$#rri?*rs&?*rW`?*!s8T+!PJI<!X/i81Lc*> q7d9\bH-7u67`fO!!)KgrW2`q!sA`/!rW0"!<*!+!WrQ/"pP;;#RC\7"p5#3!s8H&quHZr!!<-%!!N3% "U"r1!W`>g!!30%!r2rt"9JZ,!r`5p!!**%q#gU!!WrK*rW*E-!<E6'!s8]1"pP;;rWrN/rs&K,rri?' rW2Hf#6YGO+?3PHQMnQ!_u9T7#K2*Z&-`7=!Up'i!<W3%p]CU$!s8W'!L!M8!.k3&!42_2$Sbe=XLG^I r2gFE_6&lA?;aR*GEA]&X7iY'VLMA`%giIB!<E0#$NgVE(+3(:_;it[[J[-;Y-5%6\=IqI8QB5ALR+d; r2g4MhU]Yu80A')!!33'"9&E*"U"u4r<E0'rWN-$!<N;c!<3*!!r`9&"9\H%!<N;s!!30&!r`9("9Sc0 q?%!)!W`9%!<N<)rWE9+"U+]+rWN-$!WiE(`W5c6#6k\V,XQ.$VYR>!ZBT#Z$O6e9mf<@grW3'%rWN0% rWE<*!s/N$!!iT,!s8Z/"U"u-"o\Z'"9/H&!W)iu!<N?%"9&H%!rrK'!sAZ,!<<,f!!NB)!s8Z/qucs% rr`9&rrMoqrW*-'!s8Z/qu[-+"9S`-!<N0"!W`?)rWN0'r<E9*rri<'"9\c-!<MQf#7;P4:hkWNWr9%* YLq[[_KA'\!posk!<N<)!sJB$rWE9)!WfY.JcLB&JcM&9$ig>3"UH,IQK\AKrlP)=%Z5+%2b%.tNi'>1 afMPCpT#-f@Q4c"!WrK(!<E6+(FM7?G+HY(^9+94rMpI.VPKrJHX]T;BTU*uoC'g!WsO>a73*'V%0Zb5 o`4sl!<NB&"9Sf1"pFu1r<E3("9Sc0!sJT*!<N;b!!30&!r`9*"9\f0"9nc-"9S`-!<Mrq*!$*B!s8Z. "9S`/"U,#3!s8T*!<<-%!WrQ."U4l.qZR3-"9Sc0!s8W(!W<#7!!a,b6X>29\[D76#GZ]J.0p(["7H3k !<N?""8rB$!s8T+!<E&u!WiH+r<3-)rWNB,"9Sf+!s/N)!Vud"!<N?*"9e]+!sA`1"TAK)!WiDj!<*!& !WiH,"9\Q)rW<3'!Wi&rrrN-$rr`'""p4r1!Wi?%rW*'%!sAH(qZR-*!sA]/"TAK(!WhWf#7iLjM6FkH `VlhEVK5p)',;/g"9APo!<3*!!riAr"TAK)!WiDg!.k3&!.k3&!7h,R!=p\ZLW',Q&$/t^#mq(I":?er \_c6'jS7j<Fr^#P"r^jK^<k]trT4XNhqd%b;B,f?#S\=0:PHdejoso0XB?PGL]EeB!YebZq;qb&9a^[r JcMqR!sBoZ])Caohj@"O!TF*2!.k3&!.k3X!!``I0KV^'CQA>-&+BPuo@Ksa7S$s.G(G[G[.qBDfZLCU Bh9ol#R:J6$j-hM*A'rlA:f`-YeL(N&&m)_qt/17LN.-><)@%GPl/8rnG`FmdZ%!@"p=u.oDf@'"U>DG 'cJ2=,q(5n.Ok6C$R6c5(_[Ac"Tnf,!UKdm!<E6("pk_N',1?X!"o2C!Y,M?rW2lr#lt,1"U5;C&JGiV &eYcg&.JmJ!<E6'"9o5F()e5<-2]/!-70r]*>oP&$O6e8`rPl7#6G&7#W#qEX80L9bfd)=>!abS!Up'n !<E6(#71n=&IK-a&eboj$jd(>!r`3:!X&]4%29^),UY#l.OZSe*Z,M!#mLJ5qu@!(!sJi6$kEsar=])A "V1tF!WW5g!!WH,#7D"P&cE=K',(rf$O?q>!Wi)s!s&Q3%/ge;&ge8*&Io0R"U+u/!<iZ7%20O!+s\Ka .k2ts-mg)Y)ANhm"p>#0!Up'o":Q(h3*LEirP&BNrVlg%`.(,c"p=u.n,NOm#R_1A&cE=M',(ul&Io0R !s/N)\,_*\JcLB&PlU^^#7E7hL9.ko[J[-;_8WdLF]_'n8nWgT\$`QDpoP@@TmKZq+qOkX!<<-''-oJ1 EL=Vj`4E8PXU_PHak"7gA3Vh@@<n$.WV`e&ced6lK1I*fo)Saj#QtA?%hfa!+!LV,'-JD>+!)C@*#]S* &.AgK!s/N)!UB^i!X&Z2#mq(>%LERR$k*IL#R1A4p])E<"9o/@$OmRV%LijU$OR1G#6Y/1!WrT0$4[^c *#fk<r#Q4c(`!bq$O?q="9S](!5SX?"qMRs6>)1Qq5jn-P\;l]#6Y+t!"/f/"9\o7$4IIW%M&II"q1nI #Qk)-rW!c9"9f)?&/6!&*?,t<)]9G,&e50M!s8T+r;[-)!sJo;$OmOU%fQnB$k!CK#6Y/2mf<=f"Tno6 $k<dH%13RT%hB!P"9S]+!rDs9!<N<*"UPSK&.T-Y%Ls![$3pY7!<E6&!sK#7%MKTr*;^if*ZZ19'G:l_ #6Y,0!Wh`i#7;P4:hkWNWr9%*YLq[[_KA'\!q60r!<E6'"UGJG&.\IE":PYD"9RlhJcLB&JcLB&g].]` "9f&O;jQYIs8L.<Wt(#&:bXq)>\8GX`:2F"\G*$@L1<Fb%1*1?!X&]3&LK_II%%Fh]s"B2Wr8t/Umd-_ DdlR)4CjZ!rVuW5ri6F-X+=VH*>B1s"T\Yt!"]/4!sAi:%MKQn)]^"C+<i$/+:K>5*?#e0&.8^H"9JVf !##G<#7:kI%1E^V%hK6Y#R1A5!X&2t&-;t?$k*RR%1NdX&.f6T"Tf2:!WiB)"UGPJ&f)?)*$-1!*t'&+ 'b_#_"Tni.!Wg"8#8/FP?%8TZ[J?j.UO?/l#R(>5rW)Ni#lt,4#n%.L$OdIB%0d.G#6k>6!rW**!X/o@ ',;B)+<US*#94No%giOE"9&?%!W<!$!<`T6%K6bE%1Wm[&.T!O"9Sc/!q60p!<N?,"UGGFr=9/C%1EXQ #6b53rrMus%06M5"U58@$kEjY%LimH$krsO"9JW,!sJl9%MBKn)BBk?*?6+!)[RDu&Io*Q"U"l-m/RA% 0Na18`7)^(WsY_F>!<T7'+4pD!V-3s!X&Z2#mq%L%hAULr=&uA$jd.D"U"ph!.k3&!.k3V!!NB6.oV5A r8nNk=X+.T"9JQ('0q2X`R`rAjoUPu#5A2r!!`ojHb[hWi8sq"&)GF:Rp@EJ!!!$/)_+[<`;Ja"XB?PG X8mhPo)Jh+=N^I%!mF@GScFWJ!sBoZ])Caohj@"O!J^Z,!.k3&!0mQ^!!``I0KV^'CQA>-&+T]"p=,^J 2D\-8@:s_?Wqa=Fj6"t/P\*3)&I\mH"r&:=6Wdl9OIN8Yr4`cfnGiO\^5l\r:f'_U?>bo'^B!d&rs-u3 :)aB?!Whon#R(MF'd"k\5=PiM:K(7k;,I3d$qs,S2(g-n&d\^E!WhWf#lt)1"UPbY+snZ8,mGV?+rV%! !r`5u!$D:G"pbYO)BgIT,paf^+X%sF&-r:;!sJl;(*P1b4$cI9:('Zc7RK-g,om^2#6Ol)_#O]A"UGAi @YUrZ^Bi',XFXPA///-S!!`N,!sK)H)^G8+#:1]D+;kau"WIOF!<E<-$4e('1daf-;-$Ri845Kl,T.4' "p=f(#lt,3#R_1Z*[N04,mP\>+X%g>$j>ns'E\UO'cS2:+s\E[-79lS'bCcZ"9J;u(BOmS(a'tG,:"N\ -79rU'bC`Y"T\]1%2fj",qh;H7nli]<)QOg8O>Ko.NfK:#R(;2n,N[r$l:$G>'-)/^B)7Nrr35AImXbO "9JVo!!iT1%Mg-0+sJ90,RPhE,pO?B$j?b9!Ug#?!.k3&!.k4'!!`ld=ba#e\@)7:&&lc)U2j$g,VrPJ Tt%\BXSAn&bJpfOAj.7=r;d91+$*PHNi9n3\[8U=XUhhagtfDa9dV#K?@JEBZ*=50$*C>UhU]Yu80A'- !$_LF!WiQ9'd"eU2a9Vr6UX=.5sIOr3]T,Q-6F*<$O-Y6!<VQe'*ACF%MBHm)]]n;)]9G,'+tZX"8Dj- "9o;K()Rr0*?6";)Aa,$&.]0T"9JZ0#n7Oe-87A=4$EL*$TKss.3TTB$O6h<!knX>"qMRs6>)1Qq5jn- P\;l]#6Y,-!:p0t!<`Q3$kO-k+!)F#)[.3#'b(?Kr;[Z9"Ul"\+=K!,3]fGd2`!-=,8q.""Tni.r;[-) "UYbT(E+24*W?u_)&<kt%LE=Bmf4"%!<NB2&fMl6*?6";*$$%8%gW4=!s/K(r;\SR!WrT1$POF$*ZZ4> )]Tk=((LQN!<N9'":Gn`-7q&:6UO7177'7%2_cg-*#9"h!Wr?%n,N\#+#m)3K:/b<XU),_h:'5`58aOl !!rZ-!Wr]<(*=S<!?E0W)[.3$(_?rTO8sk4JcLB&\,Zm<"9f&O;jQYIs8L.<Wt0tt9.2JV5=/M-\bZ9k c*I,F$\W%Y+Vt^s!s8`5$k""7>_]AqdakLuVPj?m&"eGf>uOE[.55"kec5[Kao&1GJR:hd'GLu[!<Mlo +p%lN"q;:e,V1W-4$Gqt77BU35sROl2DQ['(CpiX!s/K(l2V+n#S%Rc(`4,0*!mZ.*Z#Fs"pP/3p](C! #n@aL)&O83*?QC@&IJ[E!s/K+#nRmo,V(Z03B]P(5R]h80Ie@g&deaD!s/MD!;HO!&h$+QJ"jK]q5Xaq I9%d&"U"qs!$MCJ$P=-j(`4,0)]Th7'bV#b#R(;2!<<*%$4n+%.l04Rr^$lV3A2a$((U]SrW3'#r;[T6 "Ubq\)&aG4)]]tB)\`bf"U"o/!!)Qi(BO^C#7D%V)BKq?*#fh7(DRJg"Te`+!W2p(!X&]6$kX3l*?G,! ,T@U;'bLiY!s8Z0#7D1a,:bE)3B]Mf4?GS`2)Qs2)A3Mc"9\W(mf3S'0Na18`7)^(WsY_F>!<T7'+4pD !V69t!<`T5%1s6j*$+kq#oXQm&.AgJ"9AP3!.k3&!.k39!;Z[!!=p\ZLW',Q"fkWF"Tnf)!!WNJ;1>1R gA'e4U.c@)p&G@!$Ro5JdFd:7r8n44XF!hp%0?G."U5bl;23$ejo_\f*<Y=%JcNF`!YebZq;qb&9a]DN JcO4!!sBoZ])Caohj@"O!PSPc!.k3&!.k4'!!``I0KV^'CQA>-&+T]"q9YC0,p50>:K1kOSbTr9j8JuW a,3qM)A<J^#TYck9j2.ZXKo:Hr4`6brr3AkX`-KS2F'Pt=)<rs^B20bnG`FmdZ%!@"p=u.oDfI.%i-<A 5>Y^$DK^DVI!KpZG5c[nCL9n-2^fRS#mLJ4li7_$"9f#A)^dF'3B9&X2`<QM-5m<prW2os#m1>;%M^$5 1-7Mq3!2&q1,0:c(^pHI"U5>K+u;S`>@_XLFpiA1ChQpA3%Q0e$Nn*C#6G&7#W#qEX80L;bfd)=>!abS !<<,k!!iT,!sJoB*@NfD2C(4@3BAoA)@m&V!s&E,$4mt%5#Ps.EdE:cH#[P$7l;V3'+4sA!#,G;#7M.^ ,;(r;3&iiT1c$j:*YAVC!"]8A(*P.[0/GLF3&s#T.3KN2'+>'Hq#E,O%2gKI1,CdG2`NfY1+FFa&I\mH ":Gte.m$@+Ao2U9Jq/8sH#R:s:-UEV((:HP!q60p":Q(h3*LEirP&BNrVlg%`.(,c"p=u.nc/mq!=BPb 0/><a1c>1h$9't,2CTXZ#R1D5PQ6:8JcLB&ZiC==0j074\%&jDXUiP$_Q%TG-kIFgCmMQ?\?kt4$e+P3 kGDT<#64c+!=K5d<.(IF]YLn[Ycdo+&&6lRe"gP7'G33-K;Po^Zi$p1ced6lK1I*foDejlrW4#H'd>:n 85s,5C2%EsB4YO[?<gZ990P-Y)\NJV!ri;f!!rc7%i$$+,qCT#$7m\W,pF?K&deaBq#DK>$PXR*-7CDt /hAM%,p43H&e"sG":,JO+"TKI<`r])?jg+8911Wd*"`Sa"9QUDp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m $j$P;%2'O$-nm;+/1^ZK"!JBc!rW*9!XTJY-8Ie[>[1Q>?!1*#7QDn;%L*(=!rW*7!<s&N+XJKc/hS\* .OQJ_)\rni"98Gl!#GY;!X0)Q-SR/)/1W5%/hS=a$j6S5!Wi6"'*/.<"UG_]-o*G./1W5%/hS@a$N:&I !WrT<+"THB;I=-PCMe!'@p`D975uqE((16H!W`>k!!`iQ3)F@BRB$4f#d;n:e&$5l)$9:-$3C82":Z.l 0JP13q^_Xq""+rq"LJ/\!.k3&!0mNm!!39,#TZj0kl:\^ao&1MKO[Io,:=c]3c;(ts8V,ipo>3eAkam! (_6fR#n7Op9RO58nEeGtV5L<jWt1P6>Y$_/-lF:2Pi2TArlP)=$%ZGP*>B1s"T\Yt!"8r5#72(e/3?6q ='f>LAS5^kB4bX]>Zas$5VaW&&IJ[CrW2<b'*Sg[*[<!Y-RgT"0eXdl&dejJ"S_s>":Z+i-7C;k.4d&( 0dRbN#mUS8!<s&P,VM,F:KUh-?i=F>?s$,j3\)0]#6"])!r`29!!a,b6X>29\[D76#GZ]J.0p(["7Q:* !XTGW+s\K^-n6_t/1)MZ((^o\"9B;>!<<33)Cd^8:g@XFARo:P8j+gN(C^QH!rW*5!XTGX-RU>j-n?l& 1+OF^$j[%="7Q:,!X/f;&JuW>0.nh-/1;hk,8h$t!s/N)qu@$)"UPYP)B^F\/cI:2.4?Je)\WM\"9o,> '-8V<3(6P@>@1]A>$+m-;c-"C.N]B7#6b#,mf3S'0Na18`7)^(WsY_F>!<T7'+4pD!V6:"!<i`=',_o= /1rJ(/,_"+.3]fN'+G6O!W`>i!.k3&!.k3&!7h,R!=p\ZLW',Q"K59=!s/<""UckYGcB6gjoi/01(46Y !!j)g;hD[=i8Whqjore[9HacEr;[!&&LgP1_uAd%k2raJ*<YF("9AW0#R^P>"pkM="U"o/Z2jOt!s&E) "oJQ*!WfJ)!YebZq;qb&9a^[rdf9UR"9eu7#6Y(;!8.>Z!<iZ4#mgh?"9JV_!!<?M@_2O#"Q,S=('3Cp JcLB&JcLB&ZiC=9)DF6A<GRWm^D$/;s81&u9c4Eb2*=E3D3;HC]Y=<Y$e=tNs7rg84sqBb$3q(m6qpKa F-ca="Mhgh_<Cmu$eLYE+V,\N3^QbXN;UEjnG`FmdZ%!@"p=u.q#DfD!<N?+$l:0E6WRfAJVoPWSXZ%6 Q'e#0S</>C@88p5(_I/]!s/K(mf3Xq"U>GO-9"Io;$'Qi:B!rm8Mqb+!s/K(qu@iA#S%Oj/36@$;,C%a 91h`E1a<Y;"UP\R+uDhoB6/N[r07eWP*(]LA5PQE+VY1a!WiDG!;HO!!X/i81Lc*>q7d3ZbH-7u67`fO nGigq!sJo<)C[aBrD"\8:JjtY1aEeD#6k84#n\(%5#c6FL67t%Un3s:I:Q#2-lip,!Wr?%"pGAI(aUt' r_X&":JFMS7m/@@$3:.q!#5M<'-T%m5t+C@:Jk"h7QN.H)A*8Wq#E,P'I5Y/8kViQ:Jk"g838IK)\WYc #S\I:5>bj-IYX&VW2-/\SX#%ZCfs4`+r1^s"oSJo!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Whon$NU;1 !tc\26qL!E:&I`n:f("_3[kpS#6b1=!.k3&!.k39!;lg%$Sbe=XLG^Ir2gLQe]4n64rXV71gGj8ZadIC Y5>=+`9$^djG#l-rW*9+%m+U#c-45=r2gX8Y-5%OgsEll9dBrL/m=%5\\5HLXU!2/f#<84+9_E=%fl\4 !sAf5'-f8"<FU$%M&(u,Mi!4BJpr/rHZs1-8inOE&I&@?"8r8h!##ME'HSPP2*XDn5<_1g1G1'q&-qt1 +9`;r.PitE5XIb$5!1b[/LVVQ$3LJB'd#"m;e:#nH@5[A%"<A;BOFUu/KGN7#6b#-!!0q:#6k\V,XQ.$ VYR>!ZBT#Z$O6e9n,Ngt"q2+_,;(uF6pa-94p3S]%0?M:!<E6*%iZoT7p'F'Gp[c^G&_;0;`uQG%13:A !WiB'!Xf_f0f1mS6:!k$4ukDP.3TH8"7Q:-!<N<)#8JRG770C,5!M>"6o,tu"9SZ+!rW*<!X&Z3%2pZU 7R][05!M>"68Teq!s&H*"UuJ)(-kf,DLRJ%Nf]NcLk'ei@8]KL,8:CdrW<'"o)K"&+#m)3K:/b<XU),_ h:'5`58aOm!"/f0"U58I,VqhW6p^`7#<b123]%uk"mZ/?!.k3&!.k4+!"/i2"UH,IQK\AKrlP)=!eOfI rYZ%U$6WE?mf3=``2Wa9r2UKtAP,6=,8^an%i-0BA"Dlas51?aWt251W2GJ_9ICf#((;*WPj&,H!6Y;A $`g=Z?UYtL'Fb3H!Vucr!WE-C"UPSM+"fiX@;C"4It<9.LP180IWogKB3.V_,odO("9&B%!UTk$"qr(/ 1c@?U4[;A(6o65.%LNFC!r2g-"qi%53]]>b4[;A'7lMe5%1W[L"U#2L,r@qc@;gC:Hi&7!E+N3K4tR]] #R(>0!WW8;!!a,b6X>29\[D76#GZ]J.0p(["9&;l!&=Wb(F:dm2`Wu_4[21k0IS+a&IJ^F!sA]1(+;:B ?uUONKnP&-Ea_j31aNtI"pG)2!r`37!Y$"r3BK>a4$Gqu7m8OI&d\dH!q61(!X8uB)'^dr6pj7*5Wh%b 1F3kG"9&B"!&Xi`%29a-0KMNd5sR[t3B&cD)\</W$4dgk.m6a<CN=`LH$44HDJEp">>@C8+VtUm!s/N) n,N\(0Na18`7)^(WsY_F>!<T7'+4pD!V??t!<NH9(`k"W3;u2D62WtT4>J?/)&!D_!s&Fd!.k3&!.k3V !!NB6.oV5Ar8n*\:`0?3!!WK:/QIbNjSn9=jorl%F&!&CqZ$j$!!b)[JumDujp:)1jQ!XV-3aMK!!NB4 -W#N7r8n*_=WIV-!"f;C*\&j%4[(h_0Ie@l*>f%`fDs>""9oAP*$tP6"=bB(#mA!Co)Jh+=N^I%!mF@G bQ%tO%3d)H.kVtY#m/r`[f?j=#o>!>/MAk1-Qj?;"QBC`"=7NgrT47?QqA+pLB)o+JcLB&PlU^^#6u/$ 4%3.bNr6X*nc/XecAYI8%2gQN6<%B2PFnqcr4`ojkkkDZa-^X?75cJC86K/'CkJJ[^D"Q-dbOluk0BiE 6Q6IV1HS!)C5i)*!:^!f#L\T,)[6EH!W2p/!<N?+$POL+1db,GBQJZ\O;jOWV5^DiUSOffXKJInQA^-* >=q%3,8Un!"p48o#m1D?&gKG9D0pU.GRAbDH#utC*<cNH!W2p?"Uu:o1IbMaH[9p]GBeCXFBh3d)B^Rk 79!Z2GCYO4SGf2nUnsudVOENoDdH.%/gD2D!!`E'`;g,E"UGAi@YUrZ^Bi',XFXPA///-T!!iT/#RqIu 6sY!7G6iMBIt2?12'*Ai&.K$Z+YlJdATNHaQ_::_['Hm:T8e22=%5(r)A<M`!XTM].m6^<GC"LYGB\=W F(7Wg&cr+8!V-4+!<EEE0hGPWB5i'?H@($U=@G%p)@clI!#bk>!XBo4>&eV*G'A4XH[KjA:I-om-mU3$ 8dJO1E-d2!QCk/UZOsIHWhc,JKlpm'6Sg&+%LNCAoDf+!$l:$G>'-)/^B)7Nrr35AImXbO"9JVs!"8l3 $P=.)6!%oCF*2[)G7/YCI=6-73$/J3"Tn,mJcLB&JcLB&fDl-a0j074\%&jDXV8n1bdM[\*<ZZo6XtY6 Yfjbj['9J1'>2r`p?@uK,nq(0)Cnd6WQ`K$ZM^g<ZF@Znl-#rQ;_]*l#qoG9XgbpNriHL/Xj>kT`Ig]( "Si$0!<WH/#ne=13($MHB6&EVQ'qW=(mgMNOcb`dO,ej<DIcd>4Z"K(%gE+<!Wqik'*]'k.lTjn?=meZ @p`G?:Id#W$hs]5#ok]k='T-DAnGO_?sd/A<=_GP+VbqF2+CMQE.<_$NfO("&<Da(JpVEF<D#;&*Y8Y` "9QF?#6k\V,XQ.$VYR>!ZBT#Z$O6e9rW)Ni8coD8+"TEC=_DAYA7B(\BP:7!(^'jA#n\++3_NXgEdik' MMd@NM2$Y*AQ2)T.2rj*"p=u/'.,nC>$kcNAn,=Z>usor3[PRGn,O.'!WrN5,<]4JCM79gA7]Cd:Ga'u rri?'r;\\V"UGSS.6^dHBOt^`A7]Cd<BVZ@&KE2U5YP<lDL.%uR[T_=U7@U7O+r((BjOS$2(9LW#Q4_r !!`iQ3)F@BRB$4f#d;n:e&$5l)$9=.$3CMI*\''=<bQ/Y!G#^=@L$:D:e<_q'*XHtJcLB&JcN:\$N^G7 #TZj0kl:\^ao&1QJmUna(DdVh(d`>Jf]i(fX/Dhnr2U3oIp#B74"qg#.l9Ns<e7I@s6Iq8r2UL+S!]:O <]q]J(_[>t;3gAFs8L1=WsO>a73*'V%0Zb5qZ&#G":,AI)C$go8Q]VLIYN`>O-,ThP`h,hN/<1:H>[7p 9L(?Z)&!A_rW<0&!Up'q$QV#q<a/p<?t0RUB4Oat,8(Fl"Te`(!$_LF!WifR3)jI#A78kUAS5XQ4t%-^ )]TtN3_N^mFaf('Nf<mr&<2<hDeWQV7Q2h?(CUNO"9ZgIp](O3-pq9iU:I]-Ws>DJ<[e:X"9\,n"p>Vf 5#PHdra8'$@UiP85rC,3&I&IK'HJP^9jr3rM3=<mP`_#ZG%k8_9g^fj*u#(d"U"r3(G/-fAn>FZ@qB:f >!st\%LN@A!!)Qi(^(*T(Et\*>\I_\ARf.U>ZsHD('OdA!s/?#1^"4'+tc#Q>\7PXA7K%T>Zsf].2WsI /2osr@rm3TM2dLOL4Xo)I=6H`AmJ>)3[u0c%LE%8!!2Zk#7iLjM6FkH`VlhEVK5p)',;/g"9APs!"K&3 "9oYi4&8p`@qB4^AGfpE>Y7%,*u,4i!W`>2!.k3&!.k39!;Z[!!=p\ZLW',Q"0#0:!r;m&!td>#VUO8U j8A$Cd^>B^-OfhO"p,`<JY9d1r8n7AfZh9W2%Kcc!!NB6.8ku>r8n*_=WIV0!!WK0&KWSm:_-T3@:EPF <)-%S5rpA0$j>De#6=u6#mgkB!poso!<WK2#mgkC!s/,r#6>&B+u))D9)VQk:-^Wa*Y8MVq#J&-!YebZ q;qb&9a]q]!!<-*"U>89"9JW%!;Z[+!t6)#7nQHO;FNDi)@ZiNo)K't!X&c8#m^h@!TF(b"U,)9#6tM> #OVQl!WEB0#R:S?#6t;)!!!$4"qV_'3_W@J<)ujg76N4B&I/C!!!<?M@_2O#"Q,S=('3Ot"9Jf7#mgG6 !X/T*joBu5JcLB&JcOF'#6u/$4%3.bNr6X*nc/Xfc\tR:$PFC(2GI@[H&.cjr4`ocfBDu.hS#M8EEl%+ ?>=4pJWm56^D"]@lh^Y@]pX"?0bas91He0-CQAD/!l)M>rr35OND:Ds"9JW&!#>S:!sJoF-p14-ATE<V NKTa&UoLZ)ZMq'A['mKW]!nrGVk002F'1g_+VkIhn,O:.$5"./:2#KTS=,b6V6$eqF\=+g"Tnf,r;[-. 'I5J"<GR>[SGnoYTr>,s%uY0s1d=oLFFJn$O-?'.WVit6[C3WWZ`L!oOah4P7PYtl!WiB'`W-5F"UGAi @YUrZ^C&3.XFXPA///*b!:p0r!='#I*^*YLQi3<XSu/ToQY]/?)#b=/+?EG9I>*]JSu&Nq]>).t^q$SB R#6&p8iJ.:$NgnZ/N?C2H'XtjR@'SDWi;%h4W=P,!Whil&ci"@,skgLF+B7<S"#t@Oa:>'"#M8:"T8<I !<E9*%5Ck+PEhK$R@B\:T9b7S?WBor7S6fqGD1p9QCXhR[Cs9Q]FVT`[Bcm/S<82*6nTDn$jH8'#6YGO +?3PHQMnQ!_u9T7#K2*Z&-`7=!VHF"!Xfbe/k0#bNKob/Qi*6ZTW"rlRVkYB#mLM6PQ6:8JcLB&ZiC== 0j074\%&jDXV8t5cF\?i*X)]`.mR<gUsmu<]X%I;$an"+k2r[b7Q!%_3sJ;kM6=t<]DJ]D[`@+em'M(5 /fY<%$85P9XL>^Jr2g4MhU]Yu80A'2!"]27#Rh@o5?W,UItNK7PFA9GU]R<dU&LYtTV8'OS!K(iKR\2a <B264"U+u/n,Nb$(FV:9>&8YEL'iWeJq8GtCI]c`!Vl^<%4Oh^It<6+M2$_<K8YeTPB'\f.lBh#CNb;f Pae,5T)>2kSXZ%4O,8@2Al1T9(_6lSb5h;;#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,Q,b%N[5c:L\C%Lkpe= M3+$nHqP^h!!jAe2Fq%hI"dQCR@Kb8S"6(AS<f%^F_+<-,SU[l!s9H$>'kaMK8529Kn=r-HZN@M*XD`G nc0L-!WrT<0ii^iPE1QRL51SCCeQ;f#6P#.r;\h["q;7h3`^3WLk^Y;L5(MBFB_$X.6ppNIY!3/N09U% Vl-MoY,S=qTUqL6O,/@5EF(mW%g2q9!qZHt$6M6(C4hqSrN-@/f\P#nF[$`FnGipu&0s;5?>=\<Lkpf` KEm$MBj4%W('_,GJcLB&JcM&9$ig>3"UH,IQK\AKrlP)='7jLY)Aa+u"qr[fGau.bk/Od.V>RA-SX+b7 ?W0KW4@rXgJ"XXIiQf*<r2UL$P^6V;6Sf_s&Io0g;O-MHs8C(;WsO>a73*'V%0Zb5qZ%30#S7ju1IPA] G(>F5R%0b=S/\#jT:_^FS=>h.OH"p@G]."h6o681&-i:>!Whcj4V0,6C4(_jK78E+L4*Dr-kd.!"p+f+ !!!$$!sKAo<IpU'NeMq6KnY1l9f*b81-7m&A9<KbPF.r5SXZ2JRgt[BL4XbmCh6R3/K,0/"oneC!!a,b 6X>29\[D76#GZ]J.0p(["7Q9q"W]R)GCbI$rdY?,JokEu6T6J3$48[/.6LI;G))BPT;/9XT:MI8MLTnm DJE]a6nB/_#m^\>,"$(5QB@#TJqA]4E)\k>%h/dH!<M`k(^1<_*A'`hH&@E3KS"]%I!Am\+9r#O!Wi6" )[-is0go,[I"[0*K7\T&I!BF/6S:&V:hFg"M$T62S=Q4>R$3^4NY.81L4FMgAQVMa.3&m(!WrK)oDf+, 0Na18`7)^(WsY_F>!<T7'+4pD!VZR)!<NE0%44GRMis6aLkLG6r.58s>t6Rj(_6lR!<MTgJcLB&JcLB& ec5jS%kCS6`;Ja"WDji=q#CX$(.3Y^aOT5Hjp'S\[@pJE$N'l/!>7G8WkQj8r8n4:`j(t%(^0[8"T]/c </JQmjoso0XB?PGm/S.0$l:0G6W.E<JV];JOcPBTJpV`aDH]Rl/0#0)!oj7f!tcn=2`<QJ)@6H7!"Au9 'I#.f2`<QO,8(1]!!2ut#mM(i1IP8TCik+'JdHL2>Z!a>+r:Ib[f?ID=N^I%!mF@Gq#Kg_!W`NEr&"U/ ,8h!op](s0'.Z1?@X3BOJqS>\=A(e/+;G.T!"/uA)^mO%2`<TB'*[Fs$4\L:0JbRC1GglrrW)Ni!s')p 2Z>T51]fHM"oJ?<!X92W00r?>Dh*FmL51A/G&h"d5VjZ##m0;j!sBoZ])Caohj@"O!U'Le!tHD/2E(Fi ![eWcMZA>/JcLB&ZiC=9)DF6A<GRWm^B!d&rt!M::)aNK%h^'O;,UV=M51!`$cC$2fDP3ucFTX!AHuR\ H%;$KX18)B'@5q@s8L**BM16,$O@e05=emnO8Q`mnG`FmdZ%!@"p=u.r;[K3!sAi;,X510@rR!aSt`'\ Y-GA2\J)Qf^r41/`PKaDe'kU\Ak"O"'F+%,#mC_Q+ZWYIR'O"-Z*1ajioJ[Z@P\Ar"9JW&!$DRe0KMX' C6#U*Z*1IZipH3NPAX6(F,$$QTVA0ZXKf/1\J)Zm_SjC0^Uq.aToEq`/eS6f!WgUIp](O#"UGAi@YUrZ ^Bi',XFXPA///-T!!iW4&K3&hAqR2`YWokMhs/1>=u%0C,:,'>C4i"KTrG0"\%BGpa2uKE_7mLfV2fLq 4sq!I'IPh&9ji=HZE^U:`nTM3^Oo9+#6b,1!qQC.!<E630Ml1fEIsU_YdCdFZCH2A67j#Xr;[''!WrZ@ 5\H#SXo>R(ZkTjGR=fd)AQ)H3DhXgWUo:H%\%TZX_>_@^`P]gFeCD9qBLFBm'*n.0#6YGO+?3PHQMnQ! _u9T7#K2*Z&-`7=!VHF#!tc\54]>s@U91Q#r3-RJf@eTdM-);7"p4q:!.k3&!.k39!;lg%$Sbe=XLG^I r2gXWh:'2h73;X7#o"LBB:INDh8m&&XV.nH^;ep:Nbhj!='THgQ*.g-Y5>=7^=_lIl'tm&&.&F?$SPY8 WjK:Br2g4MhU]Yu80A'2!"f8:%20aGA;dh%YGe1jVQ-i%!NiI#WWT?&WiQ,u%&L;A^qc1E3>Df(!s7rl '+5j;87$7ePbFeDStiX$ZCYJ^'_hYN&N=*WWMubhTqS-NTt\t2hl_K96;M-=O.2`:VQ$SqWVib+X/i.u WhuM_P'L>!.2r]r!l=pB"qMRs6>)1Qq5jn-P\;l]#6Y+t!#5VN-Tk7<H&\JkU7\']_pR;ABJBbn1_:rq ;J196S"6:KWMc\oVlZu&Z)jmuSre/!4!>@J"9TlAG,M@<U7e3QSt;pg[B"pT.1>VF(]jdB"Vs@@T>nLJ W1T]WUSN]U3>2Z%!s8E$#6Y>G)_4NpM#O+ITDkSmP':(o7qRRY^U^]lWM?;fXf\e2Z*UX;YcOn*W2Zu1 ^qla\4r=J,!Wquo#7;P4:hkWNWr9%*YLq[[_KA'\!q?6t!ua."GCb[:T:qtTT*C^>FB117#O;AA!.k3& !.k4+!"/i2"UH,IQK\AKrlP)='7sOY)]'8#"q2P09P0-aiUP-uVu3S/Un*p>FDG2Y<G6fGXME<<]X=lA r2UL!I9&p+1*[D?$k!@];O6SIs89t;Wsbu/JR:hd'GLu[!<N&t&-E=Y-T4b9LS^lHWiW;&XJl#o!iDfk rhC$tS!K5"G\:&G3%>jU"p4r/n,P$U2d_QDZEpKuR[p(6Bh9`^&.JmI!<E0#!WrT1)ae_QfZq:3R[Te> RW)7f*"Obp>A\kNS>N0`W2m#!WN,lnbgQ]mSnNHAAm.2`^)"i:6E&h$+QJ"jK]q5XaqI9%d&"U"r, !:p1_"slobUTUr*S=5n:S:tid9gCNX%1agQ@=aZ<Xfek2YcY%-VP^#WQ]R;iNf8Eq7OA]W$OR:p>a3pl `jDA,SY)O*?9K8<%giO?!V6:*"V2Ls3*:O!Z`9gmS=Gt6Q#okQ#m1;5!s/?#"pPqr6<\JjrLNqXrg5*h FC.R3??_d@Y,nb+Wi`;!UnOEOSt2IGS<oM&JS\L^4"VEZ!s8T*oDf+,0Na18`7)^(WsY_F>!<T7'+4pD !VZR(!<`W7&iaBhe^VpZUn+(RS-k'd9ed_.&d\U?!L!M8!.k3&!3uS.!=p\ZLW',Q"0>NC"8Dj#"!q<> Z,tbujpU,%d)Uu<-4C.f$k3FU2J&]1f%f9_jos,<O`)?Jq#CR!&MI1C`Vej#XB?PGmf3as&ir`pFbuHY XLQ$^rPT5a^qI@i[^)fuNIk\30H:>Z!!NH?3GXP2"cS@d80/!*!$)Io5[JbpMi<RM?8`Q%#RCP6";E\# I#4,bXg,:Gr4NHFYGn.WKQq;p('DPVo)Jh+=N^I%!mF@Gjo>hs-;fVXMi*C:?:6@W!Vud3#pW5uO.WMa ]">Yh\#uQsOFhUi72>t#!"B&L1JVhDMi<RPBf6V*qZ,s_$jJM#FFJt%MM[1F0a@.J!>@s%N;e_6M'>hC #QOl0(+2+<B7Z8=WO0:N^V@Rt]"#,JT9G%K;)f^-!U9Xe"=7NgrT47?QqA+pl2V%j$QqT?LQ%2hM?@TO 'EbQ>JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rt!P;:E'NC"To/a7S-E_I@9oG%D^ZnrV>^#TQb-sMPRu^ ^D#5ns8VkrDEfKf&-`@[1dO`;DNXk3!:^!f#L\T,)[6EH!W<!,!<WN4&2HmX<bR&M\bs2C^V9<S$dRu4 s89]l?UHIc#k.g!"V;V#6!e`(rP&BRrr2p&_0S<U#R(;2r;['1+u_\T<,%Wr^B)11rr36%\qXj?M4:g; ^BW][f"dYe56Mf+!s/MC!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#QbDN+tui.KtRB!#g20&s7rg94=17] /i,UnEKL"2s1nKG&CAk;S9@mj)$Lm44$ZMHICB*h!8RSR#OnU#/dhmf!qQC!!<E673`oR"IZLN,^B`6$ QYK8R*<uHB#6=o1#T6<XPPDm"cH<_pRYb]R;IP.WU%uJ&_#(kSa5?Xks2^7,3[u$UoDf+!$l:$G>'-)/ ^B)7Nrr35AImXbO"9JVt!!rZ/(G.g?<b[5qq7d<jrr2E?V.VLf"Tnhp!.k3&!.k3&!8%8V$Sbe=XLG^I r2gXYhU]`"80A$8!WrQD;30<(nC5&FXUMA<\uqNVG]J%`PG"iKXV8_:p@dKu49toe!<EQ]=b<TX\$H"8 $*C>UhU]Yu80A'2!"8o8&K<)uLVEEDdCZUKXUDhom.]\.<?_hW"U"5o#7i(C=E'(cW;Wh(ZJt'+e:L+- !Vl^#'h!>Rf@SE]rN-4+dId/)#PG?I=_<)GVsLMj[&/Re5pd0H_>jfF%iHWZB8WS^XTu.rBJ^)%"9SQ& o)K"!(beQnI$:B(XUhqhlLsCr5n!f32H+LHRA]PV&@8'Y<\km2"U$A_QI4C7aKGKD#K5lhhRR>W%Ia?* !WrT1*)DC4jjV&Qr2g'sGtJnU$jQn:r;['+$lC0H>'uh7XUD(hFB)e0]^kjbcaN_QrN?"!$an:Cp%5"a ,mFMU!qZHt$6M6(C4hqSrN-@/f\P#nF[$`FnGimu,YN6SYd:^<Xf_K&#IqaZP\<-!#ESq;!.k3&!4W": !X&Z4*E/9fs8W)?r2UK^?Uc%M'Fb3N%iQ]S@[#CCmD5asWsG_sJo=q+Ju$EiiTK+2Wqi\/Q=<HO-Qa$/ "pP>>*E/9is8Vu:r2U-T?UYtL'Fb3H!W)j*";2t<9Q6B9qqSodW;<OnX7iP$RX\R96o?2"#6b22n,Nb5 7!Q)kkjZQkWZ%n;TP@Cc'+GEX"9JT(!!39-#U<B=qZ$TZ\G`E9VM7o82`t,eT!,iG[-XduP&O;T+W([m !R(Q=!!a,b6X>29\[D76#GZ]J.0p(["7Q9q#VTMLc/S3Mr2L9tL0mYG3[YLQ1L6!Pb1Y#7WrK-rWXtYF <\kR,&e,C6GJaC[rQhJAWX4nq8hLD]$jQk8!!2Zk$O.4b/OaQEb1a\7VYmG!LL;tI"U"o.r;['-*]I#; QEn@%WXGJXG@+g(Sb2sF]Vt_-"KAB#WiQ#s$_<2c:/3bo%Kcb6"7uQu%kq+BYJeo/rMp:&F':a@'b^rX !<Mop#6G&8%iS&rdJj.Gf_DHORrVF]*#fLsrW0J.JcLB&JcM&9q>^["%kCS6`;Ja"XB?SHpAb@,6?AO+ fD4P<ji3$N-mpo72a:rDcK4la"im<V9*kXp!!NB90j'CSr8n*_=WIV5!!X'*L8DZ8ir%j<jQ6C'p>cD( [?ktZ#j)*h$o2hDrT"+7P"?Jko)Jps+[g:DdJ`,7iOXeJ2B4+f%3J6&ea2?!Vb.a,rW'S2!YebZq;qb& 9a^%`"9TW>SDsM."kL8TH70!s!<)s##:Nr^nDjYb;\f*."VNXpM7haEj9*;@2@S^J"WM'O][5L4j8j0; nc/^o16D:l$F!e`#7N+^ApKo_!8@80s5j+<"kgV_IkqJt!!<?M@_2O#"Q,S=('3\#"Uc\OHF;Z+j9*G: -3r]6JcLB&JcLB&fDl-])DF6A<GRWm^B!d&rtEh?:E'NB"9SoP3^u_B@tM"n\@_[R$deJArUSC9KQi$5 Xn]XEjo#)N_2)/G*"r_a#95Na8QfqlrkANL^[V7&#L\T,)[6EH!W<!,!t,kg1.tbRApoT2]Bm9CaP-%X rme0.B1OZk#R(;2oDf+"%iZi[??Vk;^B)CSrr35<Gs;`C"Tnf(!"]M]2EjT0CR2`L^:h;7pAb-trPt4Q LR"UFm(Wq_lJpF$Kj$;R'FP&`!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t$5Fa<:hk`urP&ldk552X \:%"16r$W]C3u?;^C\iQd^kf]6m;sY1-@cq?[fH^^B!!ers.qh@P%ok"9S/p$3:20&NE`j@sX*4r4`?` ]9[.5:,O$rr;[''!sJrJ9QcQo^C/30a1AC@E`lanMlcE_&&m&^q#B0UKO72$(BjpD!VcX"":Q(h3*LEi rP&BNrVlg%`.(,c"p=u.q#Cm*":#>K/OWK;A93gA^V:Aq^VnCNli-M6afBeb-3XMR!L*S9!.k3&!42_2 $Sbe=XLG^Ir2gd]hU]`"80A$8!<WE:4`-q=dFHCFZ*1>.XTu2C[B5mRJqsMlSYW@^XV94MkM;\6.g>tS !<<K]=bE][\$Q"7#LD8X`Ig]("T/61!<E6)'IZ+CGFln>eASi!m&^])akZ4LZ?oA%+;"bYrW2Wk#nA4C =)`n`WNE90Xf\kcj4qh'5o0Rt!#QD9F0*[7bIO^SVkp6*iq)m;]o?uULmb7/XUDJ?SV:N=,7ObX!s-^J p](O'%iHWZB8WS^XTu.rBJ^)%"9S&m#R))#8S!13VQTm"&%U6Wp@+DH*YU2%C4qeFWpm,%\@\Me><3f3 !\%94b0eJRY5PI/_<'\/Y@B6o!!)Qi$N^D6"rpHsbj<s![J[-3UO#KJ$O6e9r;['+$PssC>'lb6XUD,! LN%U._=$dF`3f$9$a[_%kk)WD;D0+(#4qm#$6M6(C4hqSrN-@/f\P#nF[$`Fo`,C%"Ul%c5%92LZa[9B rN-I2Zb+3!X+k+K,n^Bg!.k3&!.k39!"8i/"9f&O;jQYIs8L.<Wu$=o7NE0W%0ZnB&fN8oFJRF?e\.fV W2]]q$_WK-D0Cr@dHBcAZhUR7L1O%0*Z5Ln"9o);*E/9is8Vu;r2Ufg?UYtL'Fb3H!<<*#!sJo=+ZN>; N2Y"X_69c9r2]@g$_3B&>?FBT+rCdr"TAGn!!aE0Ei[OFm)/e&.ACTX3t`/;$3L;0!!!''"pcGUSGrQg lF<ptY->*rC/75tBoB+,`lP:KWs5#AAktWE*!?ZR"9S_F!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#:s&? `S0S3Wr8t(Rt4^77mT0a/I#!nUW_6B`pg#?S9.[a(`*hq&NtEZs8W)FWVrk)Q=3H=$ka$T!W`>n!"/rB +"TfrR*js4Y,;,t#DlhG$j?_8!W<!'#9Gj(EL*oIpo=auQ%jC(M50D&a0,K?n>d"kQ[`CF75,M`"pG)0 !VQKu%kq+BYJeo/rMp:&F':a@'b^rX!<N#s%KQV4"VDb*4DLPIs8VT0r2U:(TU:X]?q;mi'bCQM!UTl= !.k3&!.k4%!!NB6.oV5Ar8n*_=WR\>!!rZD5\?8!i8N_Wr8nC7UiK("=^YKELpGV,joi&)/dhaU!!NB8 03=+OroOCHk,_]+"7Q9q$SQ.g]?T'jm,eN*`3#Cq)[,=(!t$f'ao1?)gQG)C!V6:$"<KjEU!i&`io/b7 U3p,L6VKft6>rgWm,eG`DDi.1\c;dG=N^I%!mF@Gq#Kj`"9KN<T&]e3#1g8LE@21rrW!*&%4+\u_sldj aC?@rq>^[20NEk?iVhm@`H3mDjo>Q&@%XsSh>HC;E>efWoDepq1R%Ur$cINc,:ZN7MOClshXKY3h933u =W@M/!!<?M@_2O#"Q,S=('3_$#R)DGDjnZ)k2m!4k2+Y-Z?\;=!K7#1!.k3&!42_2#9#9X79+,`r4`7$ rr3Y[NDCJu"Tnf1'IPk/<b?BAV6IK-^B_j<p&"C5ZB,0AOe9)W^D#PbdCG?L5p?pN#6P2N1Hn<2D3+V0 !:^!f#L\T,)[6EH!WE'.!<j2f5"f$d@t9K*Y.X,9&&llMl2Bnn[?>2k,ng^m"7uR""V)Fs5@/Q)^V9ib ^W6?R#lVD\4q%W!!Wi6"(^hHD4[rIgQ+t&I^V\:VpAb$6V3."6XLdc5$d\&&jiO3@;E-'A#gWMG!!`Q/ #RE4qL9(-b#gCJnJQbAk'ER_(#Qb>H+>-K+Kt[H"&'jM?s8Tlk>>AR@DJjfXV=;52cgpM[]S'69&0`tp 5Ykd:[f*r@gA_*Ul(hc>#mLD5!qQC!!<E652GmFXEf$Xj^B`2uP\3ZH*!Z?A#6=o1#T6?ZPk`!$aNr,R ]r$<uHAS&rn@oLObLbhTo@::2B1+$S#mCG+!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wi)s$j$_H)'qUN @VKn;S@ea7&'3l3s8C]_QZQ1c)?U'C!Or,]!.k3&!0mQ^!!`ld=ba#e\@)7:(XLsha+Ho*"98H(!t6YP Digg(agnjcYPbL1Y-kjNX-\p6St`*]poOe@_PrK%3ueD%!=&ud=bNf^\?l+8#LD8X`Ig]("T/61!<N<- ,=,dlS$UGg`4E:Xr2oLk&$s!nf^I+aKj[%d#lt&.!qZHt%O=/;DhX[YrN-@1gYUGpE'"g9q#D6G5&R.7 aMtfmVOs-6U<2Edo#$uON0g6<m&^Ju\?;TY>rVs)#mLM7`W-5J%iHWZB8WS^XTu.rBJ^)%"9S&m#R)&" 8S!12V69d!#e\m^p@G+k1b&]"@ssZ8W2oEi&&$T>[>e6?%KRhTLVLmM_YgM@^u*nmTj0,Un,Ngt!sAcH :lE]kh8Zo$XTtVI7huI;!s8E$#6YDM+Z!;LRJ<lkXJ;,?Of$%Qf>tN'Z1+k'Z+7m'o\6^4A3_@IoDf+' +#m)3K:/b<XU),_h:'5`58aOq!"8u?*A0Q^Ga,PD[^*"5XUDALe(20j@m(qK$3]YpJcLB&JcLB&g].]` "9f&O;jQYIs8L.<Wu$=o7NE0W%0Zk>$kXR@=acsM_oSdSV5X<m$`'/IItX;ueE,5uXSAh0Kk3b!(_R/Y "9eu8*E/9is8W#<ri7*@X+=VH*>B1s"T\W(!!3?3&K3E%F-NW:d(cc_V5im_$_WoLI:cSQ2^o^W"o\Po !!a<(D5,#&il(er';BGI4;&GD$3L;0!!!''"pcJXTDnitmCTI'Zb42YN+u,mAp^#Y`l5UVWsbVYHY?VQ /JJKo"9QRC#8/FP?%8TZ[J?j.UO?/l#R(>5rW)Ni#R;hZLqD'lgoC=R&"7fA7n6!?6qhEW[b9K`\+$F+ RW)(T'GqPt&jL`brr3#JWr8t*Q=N`B&JYi^!W`>n!"/rB*\9ZnRF1QKZD[W$",UAC%0Hb:!s/?##6u8. ;/_]'`;$A@W1B62MjLEg`3ZD>n>d%pS!J_8;`Pj+$3p_9!Wi#q#7iLjM6FkH`VlhEVK5p)',;/g"9AQ# !"T)3!X&fM1.l2?\*X.ae@bd]%]cY)O*52B9fjX8%giI@OT9t5JcLB&Z2b%/%kCS6`;Ja"XB?SHp&G@" &i=4!f\GEFr8n7<^79LnL5^rkOK?RZpuV[N8f%R'!!NB8/lmnLr8n*_=WIV8!!r]</Q[kFc.Ck7m,eQ/ d)*,-3>i%b!!NZ_E6.2(#3P(&O@9iao)KO-)Eh]'dH0?Be'$(LU54&AF'`mS_;4J?"jNEH4rXUG!:p0l 'NiNRjoWb$$KhBl!Z=_&j8J*Nd]n^B-PQX_!!3]c<I:[lnE'htE\.Uo!!Noa;1c@;rT47%EA@h$quH'` "W(=,Z-(l"joKH?nc/^o16VFp$dbeq;HnXEYIM^+iUGt6i7>rYIl.c&!!<?M@_2O#"Q,S=('3b%#6Pl5 HCDCmj8J*Eg:32T3#)P!!.k3&!.k39!;lg%#9#9X79+,`r4`7$rr3Y[NDCJt"U"l/$PXX::h=F$QDLtd ^C/!)g$%MH\>#FdYdsPD'A(:+L1Ee,'aY*J!XBZ"4\&RiNr6WlnG`G)dZ%!@"p=u.!!!$$#9Z3,<*NmW QD:Uk^APb9^CS3#bL,qXp$'8N>rE`=$jH8'#6bVU,X,LXS,L)%a8Z)EpptZ5$O-_8!W<!8$Qh2h7osPm ^V.G#aN2]]jPnIlUSFls]Bm9:_Udi4ft3XTE`5(G%E8AQ!X/i81Lc*>q7d3ZbH-7u67`fOnGigr#o"I5 :ht`trP&BZn,E=hacgOO#'Y`TKp/.:n@oOXrr<#\U1H5!,re(R:L\g^rP&?frr35bUL>YY"Tnht!"&`- !Y7(^;-.RhU\qk3d^kTQ9/@Olr;[''!sJrJ9m;lt^C%d#cd9Y;S</r,XoQ!$^CS0!aj9;QrUA$m>r39, #mC#'#6YGO+?3PHQMnQ!_u9T7#K2*Z&-`7=!Vl^(!t?.s2c*t%KTDY-]`#SRdf0:Ho"pMu5qjAj!r`5h !.k3&!.k3&!8%8V$Sbe=XLG^Ir2gd]hU]`"80A$8!!*-+(bJ'YI%7sh]XG*CXUD;;ZF@'8T:r*[WiPos '=F?P8hh@s!s&E&!"1JaKr_Vl[Jm97Xf]q+f#<84+9_WC%fl_5!t-hhMn?pOd(?`mYj8D%Yd:mTiT8k= RU@o\!<E6&oDf++,<SqDL7>1@XTu)`fZUI32\Yrd&/.*<RCg8N\>uBgMhmCh_:&Y=_5NcjUSt9\XUD;> \$_cO:am%c#6VsG#6k\V,XQ.$VYR>!ZBT#Z$O6e9rW)Ni#R)&!8Rd".VQTm"&&-omp@kq:8OHd-OJ]"V XRN>&\a/_Lb'H;e!$Y3f[(aAhr2g4?g!ms(<@J7D!"/f0"9f]>NRIL[b-q5M"/C*2'a"dI!s8E$#6YDM +>R&FReWumXK/=oV67MJ^::MQn?!)%ZF@R'o'4i/C,lmu!!`iQ3)F@BRB$4f#d;n:e&$5l)$9I2$Nq>% 8Rm"*UpRJ6XT#=2Xf](]d`J>'6ludA"9OYbJcLB&JcN:\$N^G7#TZj0kl:\^ao&1UJR:ke'GLu[!sJo7 &h$"KH'bbVY,\Csr2U("U7RR:V6n/Cc+UB^po>'`AO.1E$3pY8"9o,P;jQbLs8:":WuQ[t73*'V%0Zb5 !!!*,&fN2hCm;ZTcH<2cV5L?[Wt2&"S!\G7=@G.t('aj?!<Mfm#o5U7R_@)'_lKgQX/i"8=?I?:'at0F !<<*$"9o,X>G;&r'(N];Z+\9/`2f2WLleUS`k&IUm&LMkS<8SK>!3i6#mCFW!;HO!&h$+QJ"jK]q5Xaq I9%d&"U"qs!!icW:k#alf@[,%Wt1V=:..QD=^c6*UqkO'^9$h)$_;!11D(E>&edQ[bl7VCeuJ\L$']+" /f5H=#Qb#,!V6:!"qVe(6>Mq<psujNr2U'Z?oJMu"Tnf(!!``L2GnCVYJBq6$`KtsS=HCVYcF[uW:6hu VkKTJI:#Ac$k3UM"9S]+p](O00Na18`7)^(WsY_F>!<T7'+4pD!W)j-!<NB-%k:4mS$gT5fZ:_.r2U3r G@jf?3%5[R#R(@<!.k3&!.k39!;Z[!!=p\ZLW',Q"0>WH"7uQt&3u)te_K-]jpU%r`jN1a^V%A-g#)Se !fJc;p&G6s&1pn>`;Ja"XB?PGo)K*u'glJh[+3pgioU+#n`C,9h:BoIC-E^Gkl:ek05\f/jojFu6P9Fk !#>VP2dr-#jknJ(]#r=;\@/fLU9V\hi9]S1gr$%G8ehB>!!3j:b5(0$bY8H-!!E<>9:Y&@jp9>8Jm9]D %KQV8&2S$l[EI=ojoj+d4V%Vk!!Ni[9RXD/rT47#E%_Luk5YZ$</ditg\g17E>nBJ!X(6?puVq=ag.;, [`HeDg>;njnE'u9hUp2W>9X7;!!<?M@_2O#"Q,S=('3e&#Qb]%EOEd6h;nOs"j`E;0,"HL!.k3&!.k3& !8%8V#9#9X79+,`r4`7$rr3\\NDCJt"9SZ*!sAiB5$_fRMjprbrP&QP_84%+^qTfZs1\9C#L'K1><shZ #Q=`0!!aDr4@N:dNrHcp^VB:;rtj+C:)aB?!W`9%!<NQX9N5#%I@.OV]Y<^H&&>us_9V<Ds7`dA74B5h #4qm#"V)=n5$iH'rP&c]rr<#i[rsnA"p=u.r;[B9*]#rM=`9V?^;J(=aMYg2!lD^brk&3Em(WqD^qmkC e$t]`:G<F$!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t#nn=1:MY]urP&B\oD\ase"(`)M4CKR\\#QE ^B)LOrr3AAGsWN$3^>r-@Xtoc^C/iss8ClL?n)?a!s8&o$3:20%l-aO<+^iVr4`?[\WLA(8MV4hr;['' !sJrK9m;lo^BVBa\[oDc^@/f>^qmk4qu6U"^3E!b'b(?A!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wi)s $Nq+h2*b5WK!i,"]`,YU^VAM&s8M#UC,HY6#Qk*i!.k3&!.k3X!!`ld=ba#e\@)7:#LD8Xa+Ho*"T8<. ":,VY/6IS8cc!B"qlL(*Xfee.XK2N*Xf\]"XTtVI8JqpA"9SN%#7E7iKrh_o[J[-3ced6lK1I*fr;[<. !WrN85Bs^1l-d2IY-.&l&$E(=YIrNXpu.*#'*818!qZI!%O=/9CkeI[XfVr4Xg$=$^nG*i&HV\-(_J`; O0Q7+[AodVL44r=UTq&+XfJM(XfUlk$a-S6Y-=.)4<>.B"O@)C!!`]=)'hO]MPg3O#I9S-1^aNk!q60q ";`a_@="'5Y5PI5^Z+q[q8J%n=`T:hX0&M,n?!83k4eT?Uf/-2*_COT[C`uMrN-C>e]YIV:*g/G!:g*t !<N?+),H=Dp?Bi3r2g3tG=E8R"p4r*!!`W7'HSu1H(+B-#-P)2YHP+3m]?i!YHPY*p\"*K:`/g)#7;P4 :hkWNWr9%*YLq[[_KA'\!qcO""X6<HM3t-EX/u0"#J8L/\qX$/$iU15!.k3&!.k39!"8i/"9f&O;jQYI s8L.<Wu-Cp7NE0W%0Zb6!<NHB.6^g[Tu4LGW26NlWs,K$Vl-JmrMoUm'8p?^%L*%<!WiK.#TZj0li7"` ao&1YJR:hd'GLu[!<E0#":c7n2dD0NrSbSnW2ZesqlB7f%'$>+Vj`*>:II#\#m1),oDf+22dh`U`mhg& WtV7M>W`uH((:9G!<<*$"9o,Y>bh;u%e[T=[E.%beAADbV5L8kri5:b#-"T"VN5Re"=+Kc#6VsG#8/FP ?%8TZ[J?j.UO?/l#R(>5n,N_!-;8Z_^X1B.rMp3kC.gl_:2,<F#,\oEWiE%un>cqeB1kB7'c7Su6\*J] rrLfSrMp6jCJlc+*YSe[!V-3u"q_h(5\ZV=rnb2`r2U'\@Q4i%"Tnf(!!``L2,J.QYe^%7!36$s!2ogp !i`0!!35Lg%]ZJ*RUSlM+:f"j"9\f-p](O00Na18`7)^(WsY_F>!<T7'+4pD!W)j,!<WK2'KKctf&lGT X/i8tWsb;3<Ac*I(^^EL!s7cgJcLB&JcLB&ec5jS%kCS6`;Ja"XB?SHoDf*s+Dns>f\klijoXW(ir7j7 hu_ltjnRs=FW9uR"T],b</JQmjoso0XB?PGo)K((5_>WBe`5`Pjm2%8jlPR`d'8LC,6d?4!s^Dpa8P-' gPnN4!qQC%!YdFqPg8@E`jDMPbMD(]i8<DJhr*PVm,eN4inrR\3!d.s!YebZq;qb&9a^[rmf3Ik(J:1W rT4X:VKYie-Qim01242Ri8EYbjos>0ANC2"qu?m.,"Hmbi;Md@_eq(5!p9Oe'Ma:V_qP%N"*#4Z!;$6m ">Q&6jpU8/hVI#EiSrqZjlPsn#j(.-d$\9!#Qa>n!sBoZ])Caohj@"O!U]pn!YRD(WSc^qjSn9Gk2sX( 1(48A!.k3&!.k3X!!``I0KV^'CQA>-!:^!f'[ht:)[6EI!<<-%!XgVX@Ua80TYC*6pqI3ReCr`nRqtGG +V=kU!!``I0KV^(CQA>-!:^!f'[ht9)[6EH!<<-$!XUDO;cd^fS\G';'>VH*daHC]^pphYXf8A#YHt^L ]_oMPa4TbUrPOV!4tR]\oDf1$%Mp?R??_pS^CJ#na8Z,=oXK',$3^M5!W<!H$6Cud86Khr^V.J'b/_H> `Pf[1^V\%?gtL)n]X>,MXfA:oT:`!a\bNoIhW)qiO(1<k!s8T*dfB.C#6G&7#W#qEX80L9bfd)=>!abS !V$."!XTM\.o0r9]tqS(`RjVYrtjFhMM@FmZG=?!eD&Bh]s4Z;Wi`S8]"\-X&Bk(Qs6Z[s3>a)%5!VtT J@5?j$/GR\ro'PY.L$%W!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<*5&kl[(*fd a3E2ac,[Z3[^*$7VkK`PR%^Oc\%M[S!QXI(rs$i0=>;$9$MXT+":Q(h3*LEirP&BNrVlg%`.(,c"p=u. r;[6,!sJo@-9Y""@<.FCrP&l\a3`Q:qWunCJPRNs"Tnh5!.k3&!.k39!;lg%$Sbe=XLG^Ir2g4MhU]`" 80A'6!"8o4#nJ"AD3i/Z^p^?2XUD;<['>R!1^sQi!<N-!#7E7iL9.hp[J[-3ced6lK1I*fr;[3+!WrQ9 6@ZiEjit=5XTYf/Y-G)=Xf84nUo'rcXg#%7Yck5-XUDPWg[+3n<?DDJ!s8)p#7Vn>;f%/XWr9%*Ygh+< UL5kj!Vl^D&NF3[Y.)!MX.bT2Ko(hYX/i>'Xfet:[^<-7U7\!IS=H1DTV\TfX8&du]WdA"AO7g]"on\F !!`]=)'hO]MPg3O#I9S-1^aNk!q61)";`^]@X=04Y-5(8Zc:nop@uq!Ec2S@PG>:`ZaR<GWM?2dXg>@> Ycmu,&@q6"ma?SO'`]=IG,VaX\Z>\2#Jes7\qj*-#k.g%!<N?+)GlFDp?Kr5r2g3tG=E8Q"Tni)!!`W7 'HSo/H(+N1$EgS:Z*L^C[_'>d&Zhn+U7@^CSXc7KZb!TPZEUM1XUDPhoChg]>p9:N!!;oq#7;P4:hkWN Wr9%*YLq[[_KA'\!r2g(!X/f;))k]ESZ&`sr2g@1Z+.Wt^nZB]1`6M\!.k3&!.k3&!8IP^!X&Z4*E/9f s8W)?r2UWb?Uc%M'Fb3H!<<*&&0<Dg@Yq;@d)3'RWu.k6SWetQ;C`(W!s/K)"9f&O;jQ_Ks8C(=WuA%> JR:hd'GLu[!<E0#":c:q3adrbq:N6VWr8t3Vl-DbTq@sJTr"ZhYcb40VPpJor2U3rP]p815Ud0G!s8Vs !!a2s@$%b8eA2$`';KYQ3uT(R$j-M2!!!''"pcP\U]19#p:m]7_9gr`_mZHYW2Q\rVPB`LPEqN&R@Be@ UTLo;^q$cFWsFl)8gb2Z#m14K!!a,b6X>29\[D76#GZ]J.0p(["9&;l!$DLn96R5HcI8elV5']LDbio% ?[A$;[C`iGVP9WLSYN7bZ3@;+V5L;mrMp<sAl:Gp'G_;q6@mG]rrCaMWsP#*;D&n.&I/=;nc0%%&KE5a B:7HQi4>iaWrn8h3"?#q"Tnf(!!``L2,J.OYe^%7*3-!:VPU#ZS=>h-QBdc'S"64KXK](=Z)FOrW2ffs $_;]A76De8&-i@@"8Dj$%kq+BYJeo/rMp:&F':a@'b^rX!<N-!%KQS5$Pjg;<eImNo'4AtrMosrU(!QX H!s5q*uPUp!W`=_!.k3&!.k3V!!NB6.oV5Ar8n*_=WR\:!!W]fI\+7(jn7d3jp'o#_lT"[#5%s"!=p\[ M8]>S"0>WG"7lKs%S2JU_qF/MjqHY-e&T86Yc4P"X0&bIeCrmAjQ6=%"l%&#Q9>`C!!NTXD9(f$#3P(& NBe*Xo)L*='/<^TcK3p-]s>>peD/m;io]+La1/4FQApWQKnP8HU9D/Mf%p,`!jkW7aoM#5!YebZq;qb& 9a^%`,lncQRcEJfhqc>QLh]UQ5:eEgNlpD;e]>D9]=>5cd+I14ioK5"joj+d57mqn!!N`S7X)5srT47# DCu4rquH'`"Va[^U;GX^joKH?nc/^n0p27n*9H8AiSi\Lg!I[DU6CUpKn5#<P*rGgdb3I7j5p7%"l$A< ?75sE!!<?M@_2O#"Q,S=('3k("p#>m=c1,YrT4@BgX3us5SjO(!.k3&!.k39!;lg%#9#9X79+,`r4`7$ rr3\\NDCJt"9SZ)!<E6,,!Jq3Cj_S_mCs(FeD/^'W-qW!+;P=er;['-)DF6A<bm`n^B!d&rtNn@:)aB? !W`9%!<NNW92S]$KU]^S^BDC&hW*<"c+pZcURmj<P`h0$Wj9/4^C/!*h!=m`U3'?s,RsAG#6bSR,<fFX SGg2&a8Z)Ep:,9.$3^M5!W<!I$6Cud86Khr^V.@t`5g!Hf$D@R^r>*hjk%GWU6h%&M27"FL4kSSWP82C !o3J6#hH8,9-X`I"9Q^G#6G&7#W#qEX80L9bfd)=>!abS!V$.)!XTM\.o0r9]u.k6eDKTcr;Y]`S<st` X1,pljQl$[^os>sObo0fV6di5^C\idm+Aas;_8S*1H[p"@t:uc^B!'grs.SX?n)?a!s.un$3:20%P^UN <+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<$G*UGTr,?Eg[OFT&\kTLT9PCqMMHn<I;sapR&mpu^C8'5 o)JaBTl*@W+V4\M!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wi6"$N^M@'-KG:?Y+2/Sc$55a5$7crSk_j J6Y)Q"U"l-lMuM:JcLB&JcOF'#7E7hL9.ko[J[-3ced6nK1I*fr;[6-"U>>I0iN1ZU8kH#m&^MuZ)*_& 80eH>!rrE$!!`ld>)',e]!_O>$*C>UhU]Yu80A'6!"/f/!sB0&JAV!DcFNkT'<\R@X.c&KOGf$UNKTm: ]XY>SYPbL1ZFnB7jITd3&ISdFoDf+*,<Jh?Kq,1AXU)/_e]+Ru1_Toc!"]`%@?7S#]!\T8Ru`JdNgHCU VQ6f#YdV'IUR$deH$4@QG(#%'PaeMKXSJt(_p#]`ECM2]!QP0F"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p1> ";`^]@X=04Y-G@F_TplsmeP>/Lk:\VW3*P?\[/-!Oc,[/^;.=gZ*+&-&AQf;Y_?".%07SEGGqjY\Z>\2 #Jf$?^lD;@$1Ip&!<N?+)GlFDp?Kr5r2g'pG=E8K#mCD4r;['*$PXX8=*^80XW4OL[(!QU_p%#aZC-Ju H?XCOG^P%-XN&Z+]<na>XUDGTiUc]KBIsGm!s85t#7;P4:hkWNWr9%*YLq[[_KA'\!r2g(":Q%i1Jr"H W33D0r2g")_[4lOd%be]0cgf-Mu\G0JcLB&\,Zm<"9f&O;jQYIs8L.<Wu-Cp7NE0W%0Zb5!!!-/'-/Vs DjS2Wb.jtLX8/e5WLJZeAlCc4#6Y,1!<NB-#TZj0lMpn_ao&1VJR:hd'GLu[!<E0#":c:q3adrcr8,#` Wr8t3VP'?<NJWIGM3+$pV6I;7Vl$;hr2U4!RZMi,9f!Fd"Tnhu!!s>u@$%b8eA/,c's"C1E`kF>)AEP] !<E0#!X&]5-=!>Fs!%0OXK]1MaiD6*WMuhpX/)&8H['dYF)uSQIY3l[ZcC5*[eQm1P&!T4&Io-P!W`>M !;HO!&h$+QJ"jK]q5XaqI9%d&"U"qs!%A."96R5HcI8ehSsl"(H=^,_EJ^O#^:^\KSWSVULQe4+YdD$H W2HMmrMp<oD+l8e'+kcg6@dA\rrCaMWsP#):b3G$&-i4:nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s!s/?# #6u8,:i2;u_"ar=WMZPjU77L2H?aXWFoHOmG^tR2R\[4,^os`7WVrk*Tp0Ci:H^?L#mLM6p](O00Na18 `7)^(WsY_F>!<T7'+4pD!WE'/!<E6,(FhULH(`1Lmb>>NWstefHYHnb4X_0[$j6S3Z2fIVJcLB&PlUX\ "T],a;hr<hjo_\f*Wu!6"p#8o>`6JZmH+T4]Rs0<%.jN'!=p\[M8]>S"0>WG"7lKs%7Q#I_V!uKjojJY XGhE7Bj+2$9N+u$K;coGh;I>kjp'\j_Qd8_!UB^f#:jZ3rT47;NBe'Vo)L->'/<^TcK4$<c,@ZHb/_i_ hW3=tNbVN]2CK^j+<Md_6We2cZI7k1joW5#*WQ;U!!3j:b5(0$bY8H-!"f5I8Xe\tgsjN]Z(mG,FDY2d '8*L?i68EaEcQ,6@tC>fce$t2jo+<Db@r:,q>^[+,"?d`hu2[?_eq(4!TsFd'MX.Q_V4qM!HB%K!!36W One&GjPetLg=XZeVgr.e6np2=*ucCP0/cdWUVG()hW4Xt#2[@uLeeWamf3Fm-"=IajojS/8eqHs!!WH7 1h)0?chuo0gV]qH9-4At!.k3&!.k3&!8%8V#9#9X79+,`r4`7$rr3\\NDCJt"9SZ)!!**('IGn6A9X0K mCs(FgXsTSMdegi&ISdEr;['-)DF6A<bm`p^B20bnG`G%dZ%!@"p=u.!!**%#V&DA<+LTK^AYe[aPZ(< e%_uQNJN7:I=m,uNgZiQr4`WV`lus*fXHoW9J-qL!!`Z;(F)+MGF\WH!6>*=#l(uT4:25o!Wi6"&.0I7 4\/^nQG:/I^;.e:hWG^2dD`rLjl>.:X-.a@@U3&:?tO1mI>X`n^C/]ns8CK3=t^Ep"p<!J#6G&7#W#qE X80L;bfd)=>!abS!<<,k!"8o8'-/T!CPTUAbh2"SjqlabWhli)]Y`Rllf?6qSV`2RF*`\.Wk//D&CfOX XbU=L+U]5B4$ZYQJ@5?j!8RSR#N_[f.L$%Y!V69u!<N<40hY5?AV?]R^B;flO^eJb1)gGr!!`N,"UH#@ GEqs<*4N#?OI!H3nc.^hVN-7LA6N2C?=%;[?X\/8S[eX5%)U3?k5X5AKjI2"('442#6YGO+?3PHQMnQ! _u9T7#K2*Z&-`7=!W<!+!t,hb0MZ/!H\n/or4`9ZndYX!qT#+F:c]j5!s/K(O8sk4JcLB&ZiC==0j074 \%&jDXU!2/f#ND6+9_WC$NU;4"UcM8<,[ARV=^ncXUMA:Uk`\W/f"Tk!s/N%!!`ld>)',e]!_I<#LD8X `Ig]("T8<.!<N?+&4;#dp?U,;r2gX;YGe"RKQqEOD/OHAOf648]!\g@XUDA?]#**pD`o*Q$3To##n8+@ ;f%/XWi`B1Xf\h\fZUI32\cAh!%8F=@?7S#]!\W=V4X3@PF7u8VQ6i,\#l-TF(8-@7n,s>=(ZN(NLZsB XUE,5kM<4O2%BWe!!1OKp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m$j7A"7q-e,Uoq#7a4(";(tZs6R[0PB XKK(DZ(d>4G]AS6`72lA['0G1&A#04DFZ>t#6H)AG,VaX\Z>\2$,PBH`KO:N#ljtr!"/f/!sBN=NRdaf cFEeS#GH?2'F=pF!rW*(":Gnb03<FfpoPO?[(*oc_q!iAbFNf_<D>nH85E8lH_&4CfuU\,rN-I3\]<7i Z?&)?$O-_.!!`iQ3)F@BRB$4f#d;n:e&$5l)$9U6$3h1j3_sIAS$90%qlL79e`Po/KN'E7$jHd;!.k3& !.k39!"8i/"9f&O;jQYIs8L.<Wu-Cp7NE0W%0Zb5!!!')$4e"4<d^[M`5enFWu.aqF'M$f+;"_X!W`9& "9f&O;jQ_Ks8C(;Wu-Cp73*'V%0Zb5!!!-3)'q=ONQ(qV]r7t0Ws#5bMLTj\FE226Edi_*Ts)/4W2?Hi WsbbqR[8(u4;eG1"9S2q#8B+)OL3$W_#:;IUN'?q'GhDj!s&E&!!39-#UWfOrr45:^T=QAZadZYYc"Cu Vl?;CG%=i]<(f_U:Jt>7LS;B"b.ObMWreMt9EumT%h&XE!WgCC#8/FP?%8TZ[J?j.UO?/l#R(>5n,Nk% -;/N[^!>*,Tph4!rIG*(LmbK_'>(TMVNujVAo`9VQ_Uh$`3ZJ@WVrk"RWD4OrXK&?&OCrmrr2uOr2U-g B2:#m(Cp`O!V-3u"q_h(5A-D;s5:Jdr2U'\@Q4i&"Tnf(!!``L2,J.OYe^%7$E0i#XJ;,<D-p^V&Qhk+ :.n8\@;C%IV8VK9Z`'i$WsbbnP_!=E4s:7<"9\E!#7iLjM6FkH`VlhEVK5p)',;/g"9AQ&!"K#2!Xg;@ @YUVheDSfiXo,4-S9n[H90FpH&.8^Fk5^)6JcLB&JcO@%"T],a;hr<hjo_\f*Wtp4":HbgW8d4,"Q,YB *X2-8"T],a</JQmjoso0XB?PGo)Jt'6\1rGfB)tn'@j15=[Fkh(D@Q&*[sd0YKthViV_gBiS;r+HRT*` !!<HVD9)V;"P\o%&-;A&%K[:u>Ed@oj5JeFd)Wf$%):'Bj2m<b1*-u2!<N0"#QY&<+#I,X^uY=R"3#.0 #JC*='NiNRjoWb$$Ma\j!!iT@8Xe\reAf#s[huHSWLB<bbh_-cKNL;t2_ljRELXS^eD93ajo`P((BO@4 "UQABGI69+joiS>/dML@!!O'2JYL$8r8n*$)?9d0!!36WOne&Kj5/J:d`oD$G=O%m"9JW'!"&`/"WTjL S[HSmj8J*EiRZ#XIOYNi!!<?M@_2O#"Q,S=('3n)"punhTt&;"r8n%-VZV3A,70))JcLB&JcN.X#6u/$ 4%3.bNr6WlnG`FmdZ%$A"p>#/r;[*)#SA"(;K@f2otU=;%)CZAZ&WNg-OU"X!Wi6"#6u/$4%31cNr6Wl nG`G%dZ%!@"p=u.!!**%#Ur;=;dk0C^AYe[dH'<@`iPAMC1h!^?uU:*KoV_0r4`WT_8=+Rj2n<S>W<Jj !!rf=(F)+MGFZF_!l)Ljrr39#\p$4C"Tnf,r;['0*]#rM=`0Q)^E1,(akGqGkh=.pgZ7/6YDd0d1G1(" +tl,Q<GmAR^%oDDdJa(E#-_l&((^fUdfB.C#6G&7#W#qEX80L9bfd)=>!abS!V$.=!XTM\.o0r9]uJR_ oBkMdaMYg-]tCti^;B+$jk%/<L2M-SAS$7HT=Fj7&C8S(KjdG''a5=&3C$GOJ@5?j!8RSR"m2Oe.L$%W !s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<*42E$LPr_,rr:`TKOdtH0I.tn.kF+f ;c7"LP.(>(%)B]t`SKCfSp4<s)?KX6#6YGO+?3PHQMnQ!_u9T7#K2*Z&-`7=!W<!+"V2V)4]lQTYI1mP r4`6crr35jY&ZfT*"W>R!ODcX!.k3&!0mQ^!!`ld=ba#e\@)7:#LD8Xa+Ho*"T/6,!<N<+'-fA)B7cW> XUD;9OCp^((CL<G!Wi3!#7E7iL9.hp[J[-3ced6lK1I*fr;[3+!WrQ:6\35NmaJfGXTYi.SVhV$Bj4>& 9iG,%J"Od+_RQoLXUD;8Yd)*DHqu=4%L)J)#7Vn>;f%/XWr9%*Z.n!Z[VIo>!Vl^E&NF3[Y.)!MXfSS' WM5oMP+&&CXgbO*JnIe:,o[^=(`b;!=DNDKU9=<o!l+-q#P./?7M5\%!Qb<H"qMRs6>)1Qq5jn-P\;l] #6Y+t!#5VQ01TJtOef.e_UIN"d)*5sYH=n,'<A4:Y.M*7MKrrD=EU%KkLRV^YPkR7Ya9,e)%[&U"!^K` W3a%FX8T.*_;EnfR91pGn,Ngs!WrQD:lX$!lHZp;XTtPD7MH.4!s8E$#6YDK*\UT?ReWulZ+%NkaNs)B p:l4l;DBO@(D7W3/2gst_tNQN^Td[=$a-\=Zc/qj9-=rX"o&'&$6M6(C4hqSrN-@/f\P#nF[$`Fq#Cd- *]Hu4JX318XKAZ'XUDu'j5.%T2%BWf!WhHaJcLB&JcLB&g].]`"9f&O;jQYIs8L.<Wu-Cp7NE0W%0Zb5 !!!$$!sAoS5[]>B]#Uf;Wu.ae?p5A=$O$V5!<<*$"9f&O;jQ_Ks8C(=WuA%>JR:hd'GLu[!<E0#":c:q 3adufs6%1sWr8t3UQ9nAARAM59NGS<H]tDG\ZVm-r2U4*W26;GAj[XI#mLM(!!a2s@$%b8eA2$`';BDH 3=uu<$3L;0!!!''"pcP\U]19#p:mZ0XKAV.XJhm2V5C5kR!iL?5WC;;)]p4L01ff4Wk-6iWqi\'R9iHD 'G(]Z"9S]+aoDYZ-pq9iU:I]-Ws>DJ<[e:X"9\W'o)L3E-;/N[^!>*,SsP+FFblBSU8=cgX/`/!VMoV* :g@[TJ!?qLhSZRqW;Wb"STR^R$2t86&4(ilrr2uOr2U-gA54Td'b1EK!V-3u"q_h(5A-D;s5:Jdr2TpX @Q4i"#6b21r;['-*ApZ1OKcOqWuS"7XL5'kDc9V,5rC&:+WVRQ2FLD`Q,*Fa`2om8Wsbr*US*`e9dpDT #6X`$#7iLjM6FkH`VlhWVK5p)',;/g"9AN'!!**%!Y@.nNk<Njfr_9SWVidtQ>$Y-7kZ>4%gN7?!K7#1 !.k3&!3uS.!=p\ZLW',Q"0>WH"7Q9m$p'F-p#c)4"5\5L"S)Nr!=p\[M8]>S"0>WG"7lKs$UB-1][l3C jp&nc=Yq02"o\N/!Wr]T<0P5Gg#2ej#3Fq)i1iCAlMq(n.rE>hjp'u1gQ"Q2!V6:-!Y[:mPKr=PjlGFP _lJp"_UdbYCbl\,pAb@!&2@b!j8%g?c&l'Y!mCZ9!!3j:b5(0$bY8H-!"K#F8Xe\pbIFFO]Z]!ah#5t? hW*C`>r!34'+P<m8UI5DbhD+UjoW1`$MaZ*#pMi_[,:iE"N,.1#6F`&li72'9nB%UgAL(6E>nBJ!Wt0> puVqBg<ms^^nlrb+:.]A#6Pl8H(2=lir/!Djl>7S]h/h(!!<?M@_2O#"Q,S=('3q*#6lGRT%`#Xir%pB `JRM?#m%%+JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rs-u3:E'K@!s/?#$ipM:%2M9BJXE+4\@qRM%)Kj) f]^qrPA3iL)[,s:#6u/$4%31cNr6WlnG`G.dZ%!@"p=u.!!**%#V&A?;dt?LbL4kea2uB9Z_%nfDcf\( 770XPCM[R"Iupb<\%9<P^B`c]e$Y<K4VmYi#6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!'$6Cud86Khr rP'Mk`n'8=l0%-_g<I4+LM'43*Z,P!$lC9H6!\PbQ_CIi^&>\IcL_&As8TfW5p$jO"j-fM!X/i81Lc*> q7d3ZbH-7u67`fOnGj+%#nn=0:MYa!`mWi7kh+"nrP&?J.)O?]g=OWbXd4EK<+'?P?=I`"PGPn;h<DkI CIg9*%K[:m3'^>NJ@5?j!8RSR#Nqgh.L$%Y!V69u!<N<40hY5?AV?]R^B`)pO^gs<)[?6@#6=o1#T?E] Q2&*$\>u*bVpOo1iNe=U@R`7()\3Po'c/Ji:/"SoH(hUS]"\-X#gD8PY`*-Z*s)0;#6YGO+?3PHQMnQ! _u9T7'?#Ag&I&@>!<E6("UlJ/6Vq?=PPi0+_8OC<p\t-]`/.PH'+G0Kk5^)6JcLB&JcOF'#7E7hL9.ko [J[-3ced6nK1I*fq#Cg*$PjsA;fRbqWiW8(orSY*Y-k^NT6EsS((LNMq#CX-0j9=5[^rmGXU2,3ced6l K1I*fr;\5H!WrQ:6\35NmaJk\^V@4WSW8)4>"q7=0/>LM8S<aQ`Q#p5['?j=r2g46WeOV5+V4kM!!`rX 4&]sLS>uOi#dN.>dC=$S('442#8&q(O05t'[J[-/X.l2O*1EV%Z`BC<?Ucdo&do'R#n7n-5?)EMQ)L^b XKMN($bYKmp@FkN'`\47!QkBI"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p1%";`^]@X=04Y-c$lhUffWYPkRP Y-,+<ZDE\1A6Mbu5[Ji0`6-'3YGJ+u\$1Nc,R=PU!Ws]BGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFD p?Kr5r2g'pG=E8K#mCD4r;['*$PXX8=*^80XWOjZ_9Lm+p$^"a?8``:%L<4F&K)c`F.q%>hpJm;Ycmu, #d^L`=Y:a,#6FW##7;P4:hkWNWr9%*YLq[[_KA'[!W<!+!X&]5'e`6pJs)k0r2g.+ZF.:!g^234J4Upg !<<*#Mu\G0JcLB&\,Zm<"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5qZ%$-(G86hL8D],]sFc>q5aIp%&p%r Ru_Mb/I;Xc!Wr<#$N^G7#TZj0lMpn_ao&1sJR:hd'GLu[!<E0#":c:q3adufs5CGWR[KG*R#ZQ1>Z+-Y 2)IEa:L87+WQ)rnZDOLtWN,ot#F'!n+:AJ\"7uR"'K9E][)UV2X/cu9X.jN53"Qc9$3L;0!!!''"pcP\ U]18op:pO+rhpj5UR[a:JSS7K/L)/E$P!a^)_joqK:T<gbIb'[Wr8t+RVGGZ/f56/"9S`,dfB.C#8/FP ?%8TZ[J?j.UO?/l#R(>5n,O")-;/N[^!>*,SsY=SJ!?G#rMq3AVP0B9G\'`=8Q&]"FGQHu_oTs?]We6" L1`pq"pbG@&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jdr2U'\@Q4i&"Tnf(!!``L2,J.O Ye^%7+JbU#T8.8h:.%#p*u,G#%1F$r/3-[ST\&;\a/Z#8WN,ot#GHBA/dr'm"8Dj$%kq+BYJeo/rMpd4 F':a@'b^rX!<E0#!sT,F,YE9`g#hSCr2U=*Tq.Wr@nSF#*>/V[!s,S*JcLB&JcM&9q>^["%kCS6`;Ja" XB?SHn,N[o)d0etf%oBZjp'l$e&87T%e0N&!=p\[M8]>S"0>WG"7lL'$UK64^!tQT^TaGR73rEI!!2or $O7nPJXj3phVmMUjo+<CZ:,8h!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jp^>*aKh2)USb/22A6/b!!iT< 3-<!_f\PTdjoWu.E<8ZA!P\U9'NiNRjoWb$$KhBt!>\7qj4qnlXL6(#j8J*?h\t4j\<U/J&Hi1;!<<9@ 3FR8uXi8Q.aM<6O!r2g"#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^joKH?nc/^n0p27n$K0R`_l\Mj2&li% p&GF&+%^:2\_,m$jQ6@&"416g!Up'k"=7NgrT47?QqA+pnc/dt*_(Oor8n:FhV6PN<$_hPhuJ?/JcLB& JcOF'#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/r;[6,!sT#A1/ht4J<-G:otLpPf^JP(a.@<E2^B%=q#CX) )DF6A<bm`p^B20bnG`GBdZ%!@"p=u.!!**%#V/MC<+_'/n+bh^[&0=PI;E+\4>JTC/MTRi?"@bjEJp-Z Zb67O#NG"!\s6kk(\@\4"V)=n5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^BD?jc.D"rl/gjU _PrT:>"(.g'G(Z[#S7jt/k]SjGCYaL])BAEbNo0-#/Pg_-lip*aoDYJ"UGAi@YUrZ^C&3.XFXPA///*b !:p1%!XTM\.o0r9]u8+Dhq65o_>V+t^t%2jbdX:(Eb&->3($JD>\%ViGDiZYqXD+Q<\bs;$3Cki3'^>N J@5?j!8RSR#Nqgh.L$%Y!V69u!<N<40hY5?AV?]R^B;flO^eJb1)gGr!!`N,"UH#@GEqs<+Mc+KgZI>9 \tX[]6SB`*'+50W%M0^:5=\[\BSN"TZb-1N$HhSa^70%2+p%cGqZ$j($l:$G>'-)/^B)7Nrr3YMJ41(T "Tnc,"UPSV2GROiFG-@c^BMX)hsLI2$.65CAO%@I#mCBh!.k3&!.k3X!!`ld=ba#e\@)7:#LD8Xa+Ho* "Si$*!XB5O,!TC[QD(.RpoXLs%'I.U^p8Z!2AQc."TnK"#7E7iL9.hp[J[-3ced6lK1I*fr;\8I!WrQ: 6\*)Km+'YDkea'LF_4ZB3%ud)*[)dX0h>\oN1R>t`4WO`Y5PI-]<@)u3[5:BoDf1,,<Jh?Kq,0FXU;24 Z.n']\8=8B!Vl^#&NF3[Y.)!Mr2h'AVkTfXUSFE;Dc]%O+;P@i#6kA=&frM^;egoRU8Y'hXUD\noChgK :`'04!<LXLp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m&-Ne&7q-e,Uoq#6_Tp37['0G1.B^%_V3QOD;a35s /h'"dCk[n5R%K_/Tt7+@6lH42!WiHL9m<PB\[ed>XU2i$fuojf/.)@Wnc0$u!WrQD:lX$!lHZp;XTtPD 7MH.4!s8E$#6YDK*\UT?ReX!-[Dgnjqr,>_Hs/WW&I\sL!sf8H(,8X)P,Ge1aLS^`Y5PI.['Ga)4XLpM !Vl^#$6M6(C4hqSrN-@/f\P#nF[$]Dr;[3.$5+:.7Upk2SuA[eXUVYPcJ7^)RrV4V'a"F:XoO%RJcLB& PlM3m!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!W)j*!tZP.6tM:\h;-MlWV*;#VjW?cCfinH#R(;3!W<!+ !X&Z4*E/9hs8W&>r2Uul?UYtL'Fb3H!<<*&%N-QR@#`/)etIn?D/s]?CgBn+2\Rnq,U4Zg1I"iTL7PEV `iuJ@VQ0Tq#Eigk+:\_`"7uQu'K9E][)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.r2Us=Wi)hb N.#_W<'`#V(_6oX#n%1S+>?,_GF?/0kgd8ErMp!hH;=f84X_?]"p4o-aoDYZ-pq9iU:I]-Ws>DJ<[e:X "9\,n&-jOTG,N%!e#K14Q]%)sSuDUg!2_!,LNmW@:HpEd2EF*!?Z1FZY06=mZB09B;)K*m"U>>F5_%)Y rrCaMWsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s!s/?##6u8,:i2;u_"ar;SsFqA?;sKZ 1asO^((L`\#mh+X*@<mNHC_:SbIXXLVQ'Np#GQEB0G"[""S_s%%kq+BYJeo/rMpd4F':a@'b^rX!<E0# "q_k-6tqh!jm:d7r2U=!R#?)r:cp*G'b(<K!WhE`JcLB&JcLB&ec5jS%kCS6`;Ja"XB?SHmf3Or.VFX? cJ\BX#2d@gE(q5PnGi^n%kCV9`;\m&k2raJ*<Ym5%1GUVTXhY8J7M8.*")lB!"&c>.7nQWc.1V.jo+<C Z:>Gk!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojc$d`/WuR!E%0,n0nH!!`Q=3Gjk^cf+ib"kKr5?l]Bb !!3j:b5(0$bY8H?!:Kmr!>\7qj58G2^;eUVjSe3Ggp2H42Alc$q>^m-'IQ(IG);3/BKH_!!!NWP7X)5s rT47#D_D=rk5YZ"9nB%UgAL(8E>efWoDepp0p27n#i*V0Rq4W&$j-###m1kr>EHkWh;RGnjoa(@*!5U0 !sBoZ])Caohj@"O!V69p"sZ`[T[3Pu"l.G<X^N[[%0;+^JcLB&JcN.X#6u/$4%3.bNr6WlnG`FmdZ%$A "p>#/r;[6,!WrQ2+[&_1DLIe\q7lmC%)VE)o&I'/<A#F0$Ng,(#6u/$4%31cNr6WlnG`GBdZ%!@"p=u. !!**%#V8YI<beAns8CBKO*YMA7m&OV+<)4;)&jhS3CR+_@s!HhW4W#C#N=t%^6r_"(\@\6"V)=n5$iH' ^V9ib^W6?R#lD5X3sl,n!Wi6"#7;M.4\/^nQMeK?_SsXEjPSD&V1W5F0ddqR$OI"@"UPYP)DOc`?Yt.R \c'8Na5Qjos2Bdn1*dVAdfB.C#6G&7#W#qEX80L9bfd)=>!abS!V$.$!XTM\.o0r9]u%b1cca>G_#;"s akG7_Y**j,5;k/B+!iEl3D*=ZAU1'#p?Af(5p$jO"p,Ge3'^>NJ@5?j!8RSR"m;Uf.L$%W!s.un$3:20 %P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<+N`aCs8:9EKP+.F.2s!5$3pb?#7(k[,qqqtASm9h W4;f@#g)Jmb,fqb,m+&Hqu?s)$l:$G>'-)/^B)7Nrr3YNJ4:1W"Tnc-#n@_#94N!gLR,1B^CSQJp](6A WdnJG///9l!s,V+JcLB&JcM&9qu?s00j074\%&jDXU!2/f#ND6+9_K?$j$P;%2:EeAV-);W3#Zo%'ICY Y*N]f,7=_[!s88u#7E7iL9.hp[J[-3ced6lK1I*fr;[Q5!WrQ:6@crHl/VI0l`bnD8NSOM*>98)&J,Ti 'cSS]8QpJ4_qN;J[BBJ1#J77$ANqOX#4qm#%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN\%9!FXWOXF WMZPcOF(J21a*VG$O6e:"9\l8&/QHL<GmVXTrS$m!k$D>#kdh^;]>]<!!::C#6k\V,XQ.$VYR>!ZBT#Z $O6e9n,O"&(GA9fHBG#+Yd:gQ\[8WErN-(*.'K7uD-'"V*ul19'd>:o8mH+VM2$P?Ul\h;&cr.:!Ws]B GGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1$G5'crr'fp >sBqa'bL`W"p4r1#71eZ0LT,gQFYbi]sY'BXU)8DS97LZ)[c]B!!`iQ3)F@BRB$4f#d;n:e&$5l(BOI7 $O.4c01&uhO//bVXSf11]$][4l`5%l-Q!0l!!!&^!.k3&!.k3&!8IP^!X&Z4*E/9fs8W)?r2U-T?Uc%M 'Fb3H!W)j*!XTGW-:r3Ld,*X%WV*:tVM]G%90b!C"o\T(!W<!+!X&Z4*E/9hs8W&>ri7uYX+=VH*>B1s "T\W(!!EcL,s#Fn_tq9*@80d$;,'G</gDDU(D@Aq(`X_W8R6P&W5m#gX/;lpWs=f'7j8BM#6XSu#8B+) OL3$W_#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\k/4W;ih:PBpe=75lS1&I\sL"9eo5$5"1%03!D$ ipH$WWr8t+SVUTG9/e10"pG)1aoDYZ-pq9iU:I]-Ws>DJ<[e:X"9\W'o)K=,-;/N[^!>*,V4a<GS"?FU rMq3>M/lcj4u"<#)]TqE/2fgjCll-ifqs+$838.0"U,)9&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h( 5A-D;s5:Jdr2TpX@Q4i"#6b21r;['-*ApZ1OKcOqX!!j\=\D4E1+""Z&ISjK"pG/9%1j7$4]H?YVSCWd Whu`nWs>AB<\kF$$O-;*#7iLjM6FkH`VlhSVK5p)',;/h"9AN'!!sZ&9l#ZebiREsYPbF)RYG9H:-8b5 )%R)["9AO\!.k3&!.k3V!!NB6.oV5Ar8n*_=WR\5!!N`^:joe/q<%Y<"l6"c2&6>a!!NB6.o_ADr8n*_ =WIV9!"'0)LSCc5I6T(l"7Z?s!YdhC[)USNjSe3CZq:o2li71o.rE>hjp'u1gQ"Q3!V69p!Y[:mPKs*g #iFFgc&l!X&d@b)"p,Gp<e\-CrT4:<]Ua=%$I&SB!!3j:b5(0$bY8H-!"8lD8Xe\uh:U**gu.;mjos1f 7NDa8p&GC#$m@`/;ai8O!r)a!#U2`^[,:iE"N,.2#6F`&li72'9nB%UgAL(6E>nBJ!Wt0>puVe1Z]A`J &HqPHtnXif/Lj8J*BeS$00n,NOn-"=IajojS/8eqI"!!WQK;Mh<jgAL(;e@M?*1(XJa!.k3&!.k39 !;lg%#9#9X79+,`r4`7$rr35ONDCJt"9S]&!"/f.!Ws#Z2*kDbL:?ij%)_c0jj0E03t_o+!s/2t#6u/$ 4%31cNr6WlnG`G.dZ%!@"p=u.!!**%#q\kN=)YeNs8'Hg?qE=+(_Hi[$jm:=#7CkK&K!T0=C-$(S\"d7 #NG.*_jtX/)"[e5"V)=n5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q'^ECA/_SbBa^nlQd3ZJV; #R(>5!s/N+"9o,J.69h#Dhtq%^B2C+lj3IfaH9dk.iSl=!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(%g!%N *@jp$LV:L>_Sa:-_>M%Jcm[PcX,:O[.hWC&$jm@N%hTs?6V_3U`p)6P@kJ,p"Tnf>.6'Ri@t:uc^B!'g rs._]?n)?a!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<!RpfBrrp,h;`H9I"V:nC "Tni)!t,8<$kFse?XA,:S[SL3$d/),fXuu>.0BVP!W2p&":Q(h3*LEirP&BNrVlg1`IUJm#R(;2"Uc(f 3*:3VU8tc7r4`clo)Jae\:7@8.2W?m!W`>b!.k3&!.k3&!8%8V$Sbe=XLG^Ir2g4MhU]`"80A'2!"8l0 !sAfJ2,J(=P,,/OXTu#FYEWuu.MMd`rrMoq#7E7iL9.hp[Jm97Xf]q+f#<84+9_WC'EJ7;":mhK_"R!b s7YTA=t(C*%gr:@&Hi4?"U55B(*4u.Lq`?6agePQXTuSJPA3K8(C0R4#7Vn>;f%/XWr9%*Z.n']\8=8B !Vl^#&NF3[Y.)!MqlTk!%Bc+E<]_]G$O6h;!s/T(!Xf,6"puM9=)s%^V6'Wt$a[k-lg^NI*WcBD!m1KJ "qMRs6>)1Qq5jn-P\;l]#6Y,-!:p1$";`^]@X=04Y-+t4Z*CL9r2g:2VhnnL0-:c2#lY#J#n7I].7.6Z F_u8UE^_/Z!WiB'"!gTbW3a%FX8T.*_;EqhRoq9Ln,Ngs!WrQD:lX$!lHZp;XTP8@7MGq2"Tni)!!`W7 'HSo/H(+N1+N!=;q"LUk.1lpn"p4r/!s/N+"9])H*@=F'VrZFK\?Pq6#d_=GKjHha$N^&'#7;P4:hkWN Wr9%*YLq[[_KA'Z!W<!*#TGEb>BYq"X0&H"XTcT#o_.F0"\osC"p4p_!.k3&!.k3\!"/i2"UH,IQK\AK rlP)=$%ZGQ*>B1s"T\Z$!"/f0"U>Mj=,=W<h:_S(rMp=&IUY\p+rC^j!s/N$!"/i2"UH,IQKnMMrQ4u< 21]+'*>B1s"T\W(!!EcL,s#Fn_Y:3L9g^fo/Ku&I%giRI"p>&4#7(\U.QC.BQGDk2[&Bu&Ws=c&7jAQR #6OMt#o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;+Wt),.W2PYl:+d\-&-rFA"T&9/ "UGGH2.;j"j6PO$rMp=!Q?QP775#>Z"9SbT!;HO!&h$+QJ"jK]q5XaqI9%d&"U"qs!"T;]96R5HcI8en Vkp2bVl9No,bTNi4X(gY$O6kA#mq1Y*$[ghT\%JVBL"'n(C1*G#7(l+J'S&n!87:N$'\sq.M*:("p"bq !"/uC*%=*bRG%Vu\u5J,#E*%N%L3.>!W<!'#9>ZuD32!;po=ag@S/j6)\rkg"pFl,&HW"9"9erD,W880 NjRrdZDa]"Ws>AD<\kL)$jQJ,#7iLjM6FkH`VlhSVK5p)',;/h"Te])!"LMQEgEoHdC?K_WVie)QYfGb 2(0CO"pG)1X8mhPJcLB&PlUX\"T],a;hr<hjo_\f*Wtd0":6DUS_`u$"P\Mi&-D;#"T],a</JQkjo_\f *<Ym5#S'FbUm#^u'F+C6oDf(3;4+W0g#W+o"11`8!UKdg#:jZ3rT47;N^46Xo)Jpq'/<^TcMZf/j5StQ ME277!!NB5/R>(+rT41;a0,Q38e\r>!YebZq;qb&9a^%`$NV#7RcEMiiS`YSjS\-?`r]Ti"7cEr!u*(3 *t&/E!!NWP7X)5srT47#D_D=rk5YZ"9nB%UgAL(6E>nBJ!Wt0>puVb'TPHt%!rN&h!!Wm"P.Jfhir/!A eSci?n,NOn-"=IajojS/8eqI#!!`QB8X7ZTh;J4n"j<im=qUqn!.k3&!.k3&!8%8V#9#9X79+,`r4`7$ rr35ONDCJt"9S]#!"8l7'HSbtAp]oG[(!^H^CS/u`lmB4i5r-M:acDI!<Mrq#6u/$4%31cNrHcp^VB:; ruBIH:)aB?!W`9%!<NQY:0C\Kan>\^QtS`:*t\YL!!rZ/,XkR/?[.gFrP&TroAe&oF%%&I!VZR!"V)=n 5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q'^B;?laj::Qaf'eu59^C+!!iT5(*bJ.C4Wkm^C/!* h<k3`Qt8W>*Xp0k#6G&7#W#qEX80L;bfd)=>!abS!<<,k!!iW4'-/T!CPTV!^C.ipaO/tlYD[!b/ee$\ )$('_.lpUTV8p3%:ET]?!<E68.6'Ri@t:uc^B!'grs._]?n)?a!s.un$3:20%P^UN<+U`Tr4`?[\<18' 8MV4hr;[''!sJrK9m;lt^B!*hrs.b]A2kVG$j?8(#m(,I6<7)rH',H3^C/-Yp#X>\>qQ6]!Wi3!#6YGO +?3PHQMnQ!_u9T7&&j)h'FG'K!t#kn3(mh1S,C#(^qmn*k5PA]fTubL1a*VC",Hr/!.k3&!42_2$Sbe= XLG^Ir2g4MhU]`"80A'.!"/i@,s,"?KUSpAWiQ'"%'Hb;ZbEl6E(_f%#m']!#7E7iL9.hp[J[-3ced6l K1I*fr;[N4!WrQ95^Bp5nFunR[W+A@#6Y,0q#Cg(":#;J5BO*ql.!AKrN-==]Ua7C0c:8h!!s)Z4&]sL S>r]n$E^G8gYC2dD)rF5q#CX33+7lN\%9!FXUD;8ZF@3!@5T2C$3^#%#Qb\j7:(+qU9"6p#dV+eh!:G4 +Tq]FdfB.C#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,N^s(GA9fHBG#+poOn,ZFRH3Dabuh%L)b1!!3'#$P=aP >?t92>tljb#5nN-"!gTbW3a%FX8T.,_;EqhRoq9L!!)Qi$NU;2"<(*reb8:R\GWH6Tm&s?#mCD4r;['* $PXX8=*^80XUE>Ho^^=V57dhr!Wi&r$NgS>%PhO^g#^\tYl1[/ZH9P@DaYo^p](O++#m)3K:/b<XV@tk h:'5`58O>$!WrT=.7.6\LRP4?XUhS<Yd)aQp%,n82$j9`!WfA&JcLB&JcM&9$ig>3"UH,IQK\AKrlP)= $%ZGQ*>B1s"T\Yu!"/lL6>W4%bi$IIXfVH$%&p/!TTX:o2Am2<#6O]$$N^G7#TZj0lMpn_ao&1_JR:hd 'GLu[!<E0#":c:q3*Lm6jFpo22^0:Y$j["=!W`&s$j-nT,VrY__>iuIYc7T%#Eijo,n^Xn"7uQu'K9E] [)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.r2U4'UnF9(>s&r6$3gS)!!`TO:4Kh#hr+F5!i)3D #^'WS3#Di'!s?[G#8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*,q5XXsV4sK9#&?m[%13:Bqu@N8 "pkeh:jfOJHr_sB((LKK!sJrA5_%)YrrCaMWsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s !s/?##6u8,:i2;u_"ar;N`Sb*$4R:E!<<-#!VcX&#o=gB;h2(CkK:*.rMp3uG#pO;((LTOq#CX10Na18 `7)^(Wt_FP>!<T7'+>$I"U55O4_Btib0n3*Wsl#+V5/cJ:-9X;%Klk4!TO03!.k3&!.k4%!!NB6.oV5A r8n*_=WR\3!!`riFN<+li8jk!#NO^sf=>!)"7?-m!=p\[M8]DU"m4sK=WIV9!!`isLP&b^('Nt("p[&2 R(:Z*rT43j:_j)u!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA1joaPtf[0b5+Tq'2"9B9,Okouu#2dkEX^W7N ^]4EM=N^I%!mF@Gq#Kj`"9B90RcF5+#3+Ijc'('nn,NRn$46t<p&G7%,"?d`hu2[?_f%15!TsFd'MX.Q _V4qM"*#4Z!;$6m"#5r5jo`AE5oJtg"p6AsTXrM/rT446F=ddf!!<?M@_2O#"Q,S=('4+/"9B&mF2Rq< $0C4+i3[_u*WuIp!.k3&!.k3X!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!Vl^(!<ruI*^EnFGD;<V\Ga/N _p[WCroM(mIU"uV"9&>r!!``I0KV^(CQA>-!:^!f*7BgA)[6EH!<<-$!XU>PA8@@1\@Ri=8hM5%$Np&% #Ql,392/Q*Lq*Du$fCdLhR\84+9MZH!VcX$"V)=n5$iH'^V9ib^W6?R#lD5X3sl,n!Wi6"#7;M.4\/^n QMnQ,^s1j3s5LPI?puae#5%s%!='/S,ti!,\,F&L_T:0]pW8tA82VM"dfB.C#6G&7#W#qEX80L9bfd)= >!abS!V$-q!XTM\.o0r9^%oDN_qjnWjLg^k8MhP"p]([+&KN>c<cX(M>rWVu!=/`?.6'Ri@t:uc^B!'g rrqS[?n)?a!<WAo!"&`.!Y-qX9iP\WTDZG/ca]*I8MV4hr;[''!sJrK9m;lt^C09'o]*<-:Fd1k#Qs`" #Qbf&:JtD4L9LQj$ci5Do%9LC1'Rj`!rN$'":Q(h3*LEirP&BNrVlg-`.(2g$4-tD(,&3[AT`d'rP&oZ _SsXCq=`t!UN&gP(D$iSX8mhPJcLB&PlU^^#7E7hL9.ko[J[-3ced6nK1I*fo`,C%$lUQT<H*nqY-"n/ rN-L3\AcnEUN]K`*"W;To`,4)0j9=5[^rmEXU!2/f#<84+9_WC'`e@<":mV7Xle3SZ^bl$,mshY!s/K! !"/f0"U>JqAXLrrcbfU^#JJ-[N++jh$1n3&%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN\%9!FXUDMS dGCjJ9-Y)Y"p=Mu#QbP_3)"%=S#ZFh!jK,L#gD4p>9j@T!s6UF#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,N^s (GA9fHBG#+q5je&]#DRf#(BW/((U]Rqu@6.!<N<2)_=3?4#f2O*"E/N!!iZP9m<PB\[ed>XTu]"fuojf /.1kH$NU;2"<(*reb8:R\GWH6Tm&s?#mCD4r;['*$PXX8=*^80XU<J7f"d,A/IVX\!WW;s!"&c1#72k] LV_Ea`;H_BZ-U:dJPRd,p](O++#m)3K:/b<XV@tkh:'5`58XD&"Ul%j5$E&`Q)(GYXUqY>Za[[3h8ujH 8L+K?!<N;^!.k3&!.k3&!8IP^!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!VZR%!Ym=\CQPs\r8,Q*r2U7' SW.r6>t-C[%grL@q#Cd("9f&O;jQ_Ks8C(=X!4UFJR:hd'GLu[!<E0#":c7o2,8"AO(hEM,97R2#Qt84 !Vl^(!XKAV,uTN?s8V5tWr8t(P\`o<'+kQT!VHEt'K9E][)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>F rrMi.r2TplOF(^I@7i3d$O6_7o`,4!+%'h3[E-kqWsbboR#Q#f4rOV/"9Q^G#8/FP?%8TZ[J?j.UO?/l #R(>5rW)Ni#R;\LG,N%!e#N5E$`')AG\L/@*=<#S"8i-8!X/f8*&UZ:DcAhG'bC]T!<WK2&3t`jrr2uO r2U-gA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jdr2TpX@Q4i"#6b21r;['-*ApZ1OKcOqWsXSj4r"G5"TeZ) !VZR$#8%n$89qZDs6%E"WsPMC<AG=*%L<+:q>^a20Na18`7)^(Wt_FP>!<T7'+4pJ%Mg0G=b3Wre'Y]( WsYl'TUV?e>!F8O'*/FBrW.cSJcLB&JcN(V"T],a;hr<hjo_\f*Wta/#6G]3N3:+Nir/!Dhp8j'Cb?(^ !!NB6.o_ADr8n*_=WIV9!!WQXC.BQZ!p]gj"!grqV97frjo`4u*!>O-"U?Ppa6)Lgk2tEY5nO.h!!NE; 0jBjerT4=Fe\.].2[emN!t7/Ah#6@>iRuJkGU*@9!:p0l'NiNRjoWb$$KhBl!>\7qj8%gAgqB(s6PTX[ !!NWP7X)5srT47#D_D=rquH'`"Va[^U;GX^joKH?nc/^n0p27n"0YW@!pTah)H)$Z`SLLT"5%iP$1Ios "=7NgrT47?QqA+ppAb?u'fTNeci)u3jl,%Jd"Xn)"Jc$L!.k3&!0mQ^!!``I0KV^'CQA>-!:^!f#L\T- )[6EI!Vl^(!<`W:&M?[\@rHgZ[/I`?`T7$u#M#_t;`uNC!r`5q!!``I0KV^(CQA>-!:^!f*R]pB)[6EH !<<-$!XL2LDMaL9K6:Ef0,tW6#6Fo!!!iWD2+:,=BSX%p^C/irr9qgh<[ItQ!s//s#6bSR,<fFXSGg2& a8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&BLh#@<Ygno!U/KYQ,o`,6u"UbnZ7;@UdrP&EM`5i51m)bl> 9fO@.aoDYJ"UGAi@YUrZ^Bi',XFXPA///-T!!iW4'-/T!CPTV!^BDjQp@Hl?VKYZb+;5%U!"/r;&JucK 6;UE8+V"DO#lk#?.6'Ri@t:uc^B!'grs._]?n)?a!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N, "UH#@GEqs<$K9sfY_QRK*Xi;X!!;fn#QYSn7SQloJ#N=\%*8DIqrObk2@'Hg!Wi6"#6YGO+?3PHQMnQ! _u9T7&&`oa&./dS%O=PPEI<P/Z2MEK^r4IIiV2$:R<2:_)@ZuV!oj94!.k3&!.k4'!!`ld=ba#e\@)7: #LD8Xa+Ho*"SDa'!=')N,!B7[TW5/uX8T./YJo5LaGX7W&e#!I!VHEt$Sbh>XL>^JriHL/Xj>kT`Ig]( "T8<7!<N?+%QA'rfsm8d:H0X7"p4r/!r2g(!<NB-#VK52[_KSfr2g4>d(c>u6mE$1!!`rX4&]sLS>uOi #dN.>dC=$S('442#8&q(O05t'[Jd31Y//fJfE[mV2\HE$"9S5r#QbGS/Nd<cQ`U.f$a6kE^=&<R-O0eW !m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5,1-\&?(hO(:Hs$O?n=qZ%*,!<NH8)'gIN *ZPq*#Qjr)#Ql>HGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5r2g'pG=E8K#mCD4r;['*$PXX8 =*^80XUE%VRrqRa)[?EG!<Mrq$N^D5"X6ZcX22WbYPkR.Z.7+1P?BLLp](O++#m)3K:/b<XV7njh:'5` 5T'V*$lC6L<cEnaUoF9o$Eg\G`6dALMe#4*"Vh.@!W`=X!.k3&!.k3\!"/i2"UH,IQK\AKrlP)=$%ZGQ *>B1s"T\Yu!"8o=*\TipT%*f?l,]t)Wsb__Ddug>3$Jh?"pF]$$N^G7#TZj0lMpn_ao&1^JR:hd'GLu[ !<E0#":Z1m1.>;UAl:iE(_R;b"9\f/!Vl^(!X/rC)G,Y-s8W#CWr8t)P\a&B(DRDb!<Mlo#o#=+OL3$W ^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsktlEFMs=3$Sk;"Tni!!!iZF2ck<q[E#BIWsbi! S=+b76QQF8!s@!Pp](O3-pq9iU:I]-Ws>DJ<[e:X"9\,n#R;\LG,N%!e#N5E$_N&i>>.70&dALB!rN$7 !WrT0&0EPj4te)q%137@!<WK2&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jdr2U'\@Q4i& "Tnf(!!``L2,J.OYe^%7#DZeP('k0L"9&>q!!WT7&fElT[Jp1,f!51S$DDK?0bY<6#m12/qZ$j30Na18 `7)^(Wt_FP>!<T7&dngM)C[^HGF?.mdDW3dWt25(R[8hB:H'4*$O-\7!<K5$JcLB&JcM&9q>^["%kCS6 `;Ja"XB?SHlMq+m,ZT2c`S^XV#2QhG>r*&nm/R:j%kCV9`;Ja"XB?PGo)Jpp(d8oF!VZTc!!O&s?B)\X rT43u@3YsB!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jp'k`P%$Qh!pTaf"=n`NrT41AhUr"XOY-aO!!3j: b5(0$bY8H-!!E<<8Xe]8joj(s>r*5r"5a(^#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^joKH?nc/^n0p27n !hVagq#Kpb"V*FqLUZ"9joa7b1^idQ!sBoZ])Caohj@"O!VcX!!Yn+EQb1rLjp1#)eB,@/,R<$'JcLB& JcLB&fDl-])DF6A<GRWm^B!d&rs-u3:E'K@!s//s$NU>5#95Wn;I49tY5Q*EanYo9rPOIl/Kki9!<Mlo #6u/$4%31cNrHcp^VB:;ruBIH:)aB?!W`9%!<NNR9Q?GPCJmAO,Sgam"9JVs!!iW>.m-7$BS3_k^C/`p s8LiF?RlBd!s85t#6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&BLm/I"id?%<R((LTO oDf*u"ptf'BoBM"^C.in_o1BOUifNs-4n<"#6G&7#W#qEX80L;bfd)=>!abS!<<,k!!iW4'-/T!CPTV! ^C/]eo&[cK>V?^!#6X`$$j$P9#Rh=^*?5b%"TeT&#QbYg3'^>NJ@5?j!8RSR#Nqgh.L$%Y!V69u!<N<4 0hY5?AV?]R^B;flO^eJb1)gGr!!`N,"UH#@GEqs<$eie*K4.2!&Hi1;!VHEu!>$S?7T*]BU]%q9aSu5> o!EF!$O-b9!W<!'":Q(h3*LEirP&BNrVlg-_gOf]#n.C]1KS[TS"m7!rP&]Ta40,<mD"m!:,W8!$j?_7 !Jg`-!.k3&!42_2$Sbe=XLG^Ir2g4MhU]`"80A'-!"/o5#7DqQD3C]qY,hN'$aJ.6d^aEb)Zg'A!qZHt $Sbh>XL>^Jr2g4MhU]Yu80A'6!"]/4!sB&g@$\s$ANL\=$3gV3!WW8r!"/f/!X'c?Dk!]0ZE*r+#Jf!< ]o#]:$1n3(%3mr5Ck\CZXfVr4Xg-X9dC=$S('442#8&q(O05t'[Jd39Y05VPc@o%@#6P#/!VHEu!XKJ_ /5L>KXSo7/Y-5+9]ocVO$3^M5dfB.C#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,N^s(GA9fHBG#+q5k%9_R#_O 8LY5S!s8T"!"8l1"UPSH$4-tC"Tni)!!iZP9m<PB\[ed>XU2i$fuojf/.)@Wnc0$u!WrQD:lX$!lHZp; XTtPD7MH.4!s8E$#6YDK*\UT?ReWul[$GGh,Sgdj!<N;r!!!'!!XBW/BU,^-[BTV3#I<%6aJ`T*')2G3 $6M6(C4hqSrN-^9f\P#nF[-fG"r/C@:MklYWN,it%'I"TdGNB8>:UU&#Qt&,WrR_OJcLB&PlM3m!X&Z4 *E/9fs8W)?r2U-T?Uc%M'Fb3H!VZR!!<s&M+A@I1rr3#RYl1U1TmC3G3&;ot#mLM7p](['"9f&O;jQ_K s8C(;Wu?Or73*'V%0Zb5!!!-2(EtIm6qU!1.MiL!#Q=f-!W`9$q>^a$!sJo?5_./ZrrCjPWsY,,:b*A# &-r=<!VZR!'K9E][)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp@*L1O:C/L2&9"9\f-o`,3u (+_m_L8;HZWrf<!U^3`TDbD2V"U"nL!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#:<)eVnLC)Wqi[uR<Mju /d<O9$3LA3!rN#u!WE-6"UbkW'bLfZ"9\f.!<WK2&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h(5A-D; s5:Jdr2U'\@Q4i&"Tnf(!!``L2,J.OYe^%7$Ai7V&dJRA!W`9$pAbC""UPYqD7BNE!U$rjWsYM<<](F' &IAR@!W)j%%kq+BYJeo/rMpX0F':a@'bUiV%jX;?GaGYS_mlkLrMpF.SX5(L>=L.R#R:G5!<M-ZJcLB& JcLB&ec5jS%kCS6`;Ja"XB?SHl2Uts/Ppi"h#6@=fUlG&%g2.u"T],a</JQmjoso0XB?PGnc/^s)$T1' "UH8?Fg0d%joiY?.gH+B!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2joj_KC,HP&"R,mg!?Q(2rT4=Gj5Agp 2[$nr!YebZq;qb&9a^[rmf3Ik(.jtTq;qguD))S&h>d]b,"?d`hu2[?_f%15!TsFd'MX.Q_V4qM"*#4Z !;$6m"#5r5joUVs"R,mi"s-'IV:Y\."5&;g%Ia?""=7NgrT47?QqA+pp](L/4Ggu%g#2hk#3FU_\uJ", r;_ELJcLB&JcN.X#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/oDf71,;qhdA9XNP]=u/jf`2!NjeuuW&.AdG oDf+$)DF6A<bm`n^B!d&rts1D:)aB?!W`9$!<EBI5\H!i9/7M'%L)t*!"&`-!tut>5ZMNN[/I`>g&D!V kb_lD$3gV7p](U(%Mp?R??_pS^B20ba8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&BMq#:9u`dpPl"p=u. oDf7"!sJleAVI"j]"GcU^B`**VKu6+-kOi-p](O#"UGAi@YUrZ^Bi',XFXPA///-T!!iW4'-/T!CPTV% ^CS,q_857*jj0rK7N;I2!<MBa#QbYg3'^>NJ@5?j!8RSR"m;Uf.L$%W!s.un$3:20%P^UN<+U`Tr4`K_ \<18m1)gGr!!`N,"UH#@GEqs<#LgARC/$T-$1Ip"$m7;f:1/:=rP&?Rrr39"\p$=H#R(;2r;['*$l:$G >'-)/^C\<]s8W):ImO\U(*=qnB7cuU^C7s'kPtS6Ui8dZ+VFpV!.k3&!.k39!;lg%$Sbe=XLG^Ir2g4M hU]`"80A')!!a9!>(2[2YdXP9#dV;!cFT6A.gthH#7E7iL9.hp[J[-3ced6lK1I*fr;[?/!WrQ6.oC_o EBtND!!*,t!;QU&!<E6)*^F4jR&6scrN-==gXX?2="=UL!!`rX4&]sLS>uOi#dN.>dC=$S('442#8&q( O05t'[Jd35Y1)1Q_0&!^!V$-t!<ruK+%0n-Z`pX9rN-@-Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.rBJ^)% "9S&m#Qtqs7q-e,UosZu#d1>6YJRrCGYnMs(^T1&#Ql>HGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFD p?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#H3,I*!ulQ!r`2k!!a5t>_ANFYd").#I3(=dC!aL'_hY5 $6M6(C4hqSrN-X7f\=ceF$UfL$m7H%AUp,Gq5k(.]@HECZYh]0"9SZ*hZ/6.JcLB&JcOR+$N^G7#TZj0 kl:\^ao&1GJR:ke'GLu[!<Mlo"p+r4#W-A'rr3T&\#-!tUR#b!3[,^a%Klk7!VcX&!X&Z4*E/9hs8W&> ri7'?X+=VH*>B1s"T\W(!!<QB*[iTp1b^0j$NgG3!V??s!<N?+#sE[Zrr3#[XSo1,QY98O)B0:p!W`>r !!a2s@$%b8eA2$`';BDG3"Qc9$3L;0!!!''"pcP\U]18op:pR,"K-NN6lQ:L((:<H!V6:"!Y?S9:3)`. YGeG#Wr8t'S9@[P#6b53aoDYZ-pq9iU:I]-Ws>DJ<[e:X"9\W'o)K%$-;/N[^!>*,rMp=+Wi2hUCJ-/n &e"m+!!`N,"UGZ)J'S&n!87:N$'\sq.M*:("p"bq!"/uC*%=*bRG%Vu\u5J,",gVJ%Kcq>!s/?##6u8, :i2;u_"ar8Nb1B`!sA]-oDf's!sAcWAZl%4!VEu%WsYP;<]CX)&IJXB!W)j%%kq+BYJeo/rMpL,F'Cd@ (_mPd(c53<S$0Z=q5Xk%RtPBX9fjF$"9\Z)KE-T(JcLB&Z2b%/%kCS6`;Ja"XB?SHl2V+l&MI:PeD]BE hZUuC2A$#V!!NB6.o_ADr8n*_=WIV8!!**'jo>Pf'K0R$hu2[?a)a!C!UTjj#:jZ3k2lm1k1bn^&HVJ' "Tf>l>EdA2jojV8;&f]$!!X0GfAkrRjo+<C\3:,B!:p0l'NiNRjoWb$$KhBl!>\7qj8J*FjlPR`Z;;A> h#ITa,"?d`hu2[?_f%15!W2ra!!O'2JYL$8r8n$")Y*k0"#5r5joU2Z!U0Rf!=p_aQ.5cp"PJ\u&-;;$ !sBoZ])Caohj@"N!Vl]t"tFE/q;qnAd'JdN+p=V?JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rs-u3:E'K@ !s/#o(CM*/2G..^F,us4g]%*4cED^q/IMgf"7uQu#9#9X7942ar4`7$rr3h`ND:Ds"9JT(!!**((G&$] 7PlA*%giI@quHNm$NU>3"r8^O79OD\[JdiJgAh3PihU'9#R1A4p](O&%Mp?R??_q<^Au=Rrs8M6G<6-8 !s/N%!!`iP1He93DO179%)Vf>s8Bof72#k.!Whon$NU>3"Ya/$J<lt9]DfPN^X'rtH<!-W&BXtX!X/i8 1Lc*>q7d3ZbH-7u67`fOnGigr#nn=0:MYa!rP&WS`5g'nkKU2f"(+)*!r`5a!!iW>.6'Ri@t:uc^B!'g rs._]?n)?a!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<#LgARCJ?].$2sqr!!`lN /2g./G+nlL!6G0>#l2#T4UVJu!Wi6"#6YGO+?3PHQMnPu_uBZEpr%kZ(*#"q;.Y!1WVO:;^u"><h62B2 1F!_G"5a*1!.k3&!.k4'!!`ld=ba#e\@)7:#LD8Xa+Ho*"RlC)&19bJG*KD`_S*n5m*r.i=udT.n,N\$ 0j9=5[^rmGXU2,3ced6lK1I*fr;[6,!WiH/*]R,;9J$kWrW2Wk$ipD3":$/<@tg2DX/u9%#JSg6\qa'. #kS*%%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN\%9!GXTYfTfZgr/E'5'>nGisu"UYeX5Acn5]XG,K rN-=/OC'OI#Qt4O!!`]=)'hO]MPg3O#I9S-1^aNk!r`2k!!i]D01TJtOef/YXUD><[COekKip8X&I%4q #Ql>HGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5r2g'pG=E8K#mCD4r;['*$PXX8=*^80XTteS :)jTF"9S&m"qrakG)r8rr2g4/gtU5aCH*%'!!`iQ3)F@BRB$4f&?aR4`N*fA+q#>G9k\s9SuMOf$EqFn `OC:k-O9eVrrRiRJcLB&JcN:\$N^G7#TZj0kl:\^ao&1GJR:ke'GLu[!<Mlo%fuh:"t!/t\^]d4dAi_' N='E+7PPu&&.&F?!VZR%!X&Z4*E/9hs8W&>r2Ucf?UYtL'Fb3H!<<*$#7hRj*Zu^P(D$iS!WiDr!!rZ, !X&]7&OCc]rr2uYr2U0jC/HN#)\EAX!<Mop#o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u !VX;,WsYbN?:,_S(_$TK!V6:"!Y->.6YMRe_5aE0WVrk&S9@[P#6b53dfB.C#8/FP?%8TZ[J?j.UO?/l #R(>5n,N_!-;/N[^!>*,rMp=(URdm#@7)=S$j[""!!`N,"UGZ)J'S&n!87:N$'\sq.M*:("p"bq!"/uC *%=*bRG%Vu\u5J,#E*%N%L3.>!W<!'#9>ZuD32!;po=X[AipY."9S_t!"/f/!sBoPR,e5HqRQR*$DD<; 3"Qc9$3UA1qZ$j30Na18`7)^(Wt;1P>WifF,9IgV9lH<#]u@GUWskkbFC@m./JeNl!WiD$!.k3&!.k39 !;Z[!!=p\ZLW',Q"0>WH"6fdo!Y[P3ZHq%F^lh&&"R5sj!=p\[M8]>S"0>WG"60CQ!!NNB3GGGLrT47% DCl+pm/R4n.rE?*jojG!5nO.h!!NE;0jBjerT47@T2$:+k5Y\s;S^i;i8jn""6R*W#/C3?'NiNRjoWb$ $KhBl!>\7qj8J*Gj58VBOua$P!8[\Z#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^joKH?nc/^n0p27n!e_]t q#Kma":-2HNR@^e"PJ\u&-;;$!sBoZ])CaphipPC!<N&t":6AOO4*jd"lQb173Vuh!.k3&!.k3&!8%8V #9#9X79+,`r4`7$rr35ONDCJt"9S\s!#GkN(a;(=>$?!6cM@M+_k)0W4!+Y1!s8)p#6u/$4%31cNrHcp ^VB:;rs-u3:)aB?!Wi9#%06P@)C[Nn*u5:l"p4o!!"8l1"9o/P0L899DMYb"^C/iss8(NE@4MNc!s85t #6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&KPqu?]o#K20^'*\R@!V?@"!<N?+.8aVe KTDn<rP&T`a/4/_4t$ub!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t#nn=0:MYa!rP&`XaO/`:fsZuY 9J7%X!TsFg!Y["B5Z)$A[Jdi?h#@<YkFu?6"pG)0o)K*u!Wiid92/AsKV/1W"4+K>@fo:X)[?6@#6=o1 #T?E]Q2&*!e%M,a9f=%!n,N\"(*t_+??`%?^Au@Srs8G2G!$-:"Te`'!!`W8(Eb\@FI)m?&B+SJs7+'c ;'.A`@rcpQR^`+-$GbEI`NP#(59^jR!=&[Z!.k3&!.k3X!!`ld=ba#e\@)7:#LD8Xa+Ho*"RlC!$5k9R >_KBGhU:<L#P5um=>1j/"RlBr$Sbh>XL>^Jr2g4MhU]Yu80A'5!"&`.!X0/Z1I*K1$N1"t!"8l1":#;^ 7:Ln5TrG*kXTuPf`2n;T+UI]?#n8+@;f%/XWi`B1Xf\k_gsNWK3Yhbl!!a)q@?7S#]!_L=#d2V,aKo_G (]j.,$ipJ8$kPO<UZ9Y9[]fY3#I':s/.;de!n./E!!`]=)'hO]MPg3O#I9S-1^aNk!q60q";`^]@X=04 Y5PI1Z*qEhh550U+;>.cj8]Gf,Y`K]ZamWIrN-CBhq?2B=Y'm[!:g*t!<N?+)GlFDp?Kr5r2g3tG=E8Q "Tni)!!`W7'HSo/H(+N1#H3,I*!ulQ!q60p&M6XjKU8O9rN-=0gtU5aCH*((!!`iQ3)F@BRB$4f&$OC' \XI+s.2F@'AqQ>>VYI8!Y.1HmF&+M-"TAH&!N6!M!.k3&!0mNm!!39,#TZj0kl:\^ao&1GJR:ke'GLu[ !<Mlo(BFR>"<9@&H^hChpr/_N?WK]V,S^gt"o\Ps!"/i2"UH,IQKnMMrQ4u<%tS(V*>B1s"T\W(!!3<0 %fR(G',1o^"Tnf,q>gHo$3://!sT/G)b,1crr2uVr2U-iC/6?!)\NAV!VQKu'K9E][)UV2rMpU+DcSh/ 'G1ZS!<E0#!X&]5-=!>FrrMi.rMp:'H<rrZ*>f1f!<Mcl$j$kW.QUjkZ/3'oVl9Tq#cjJ=:Eg#I"9Q^G #8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*,rMp4"S=#IW=?IT5!XT#4kPthg!sJrA5_%)YrrCaM WsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s!s/?##6u8,:i2;u_"ar8NbCQg"U"o/rW)Zm !!3'##9Z`o`Tm0f^AY)>Tl!gi&/5]`"9AQ#!!a#g=Ga6"e&D9d"f?KL4;fRH0Et$[MQFS0_"ar<Vho:i 3@c'Y!s8T*h>i--JcLB&JcO@%"T],a;hr<hjo_\f*WtU+$3M5@N3L!uR9^s@kl:kf%kCV9`;\m&k2raJ *<Xgl"U,f,CocIljoiS7-O'V=!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojV4:)O-6!U'Lf#tC],d+dUZ joW%V#/C3?'NiNRjoWb$$Ma\j!!E<<8Xe]<jp'bscbsoS"l'(]#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^ jo]TA!!)Wk!Wt0>puVX2+p$m-"9TH-J^45V"PJ\u&-;;$!sBoZ])CaphN:,;!<N)u"V*CrL:#\1jojP+ 8fIm0!.k3&!.k3&!42_2#9#9X79+,`r4`7$rr35ONDCJt"9S\s!"/l6$P4[P:/4o@eGfpVf:d.W3@,:? !WiDp!!``I0KV^(CQA>-!:^!f#L\T,)[6EH!W<!+!<rlB'G1c\"Tnf,oDf:#!sT#?+Z2Y_?uh.6rP&`s s8V`DSmNrN"9JW!!!rf=(F)+MGFZF_!l)Ljrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^C8!Vs8Vr5JOL4V "9JVq!"&c0"!^?;<GI/P[f*rGcc;o/<B_fBdfB.C#6G&7#W#qEX80L9bfd)=>!abS!V$-q!XTM\.o0r9 ^&>\T`6R0(r61dR;EH*4!<M<_#QbYg3'^>NJ@5?j!8RSR"m;Uf.L$%W!s.un$3:20%P^UN<+U`Tr4`K_ \<18m1)gGr!!`N,"UH#@GEqs<#L^;QCJ?]/$1Ip""qr(/6=+o.rP&?Rrr39"\TU%@"p=u.r;['*$l:$G >'-)/^C\?\s82-$OB<kp@t0Q,U9D0(^C7p-_PMck6R`QQ"p4n)!.k3&!.k39!;lg%$Sbe=XLG^Ir2g4M hU]`"80A')!##MD',s2XY3u)NqYg,pCblV1"p+2n#7E7iL9.hp[J[-3ced6lK1I*fquH]s$3LJ@'GqDh !s&B&q>g?l$j$P:$P4dX@t0T5W3#s"#J/-jS8CG2#P8!$%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN \%9!GXU))Vd`&A&3>V_c!"/l4"pd2*X7GAu]WhC;#d(=m?RuTk"9Q^G#6k\V,XQ.$VYR>!ZBT#Z$O6e9 n,N^s(GA9fHBG#+rN-@2]Z]$gRU%9M!XJo1j8]Gf,Y`K]ZamWIrN-=@hq?2B=Y'pL!"/f/!sBN=NRdaf cFEeS#GH?2'F=pF!rW*(":Gnb03<FfpoOduIngsj"p4r+!:p0q&10_MG`AAsrN-=0gtU5aCH*((!!`iQ 3)F@BRB$4f&$O$jWeatK0HrP_H^^b1X7r_#WJY4I.2`Nm!ri;Y!.k3&!.k3&!8IP^!X&Z4*E/9fs8W)? r2U-T?Uc%M'Fb3H!VQL0!<E6'&0Wl$Ara@rmZ_*Q8M__0$4$b:oDf7#"9f&O;jQ_Ks8C(=WuJ+?JR:hd 'GLu[!<E0#!<NB."pbG>#R1G7!<Min%fl_5":>_W,"m6foDAODWr8t)Q>B>I*#T=p!<Mlo#8B+)OL3$W _#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\t29VgDc<*<dK%%0Zb5o)K1#$Pt$C<.M7OfXn/]rMp0n G#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p(["9&;l!!ifV96R5HcI8flWsbViOEtG51_g6!!s@`e#6=o1 #S97NcMmhDg&.lWP[mN=&/5TY!<M`k$O.1_.6hI5g&L!AVu3RtMdeXU!s\u3!W<!'#9>ZuD32!;po=X^ BKm.7"U"nu!"&`-!ZFCEW6*cR^&=u=Tl!gi&/5]_!s&H"!!a#g=Ga6"e&D9d&>jk`59DXD6UtX=TtJ7Q ZDmZ#$E&Vh666jN"p+i,!!7cQJcLB&JcN(V"T],a;hr<hjo_\f*WtR*"pQ\kNM25G!AY&H!!NB6.o_AD r8n*_=WIUp!!NQI5B![]rT46u@j;-Xm/R:p.rE>hjp'u1gQ"Q3!V69p!Y[:mPKs-h"lPnE)$0j&!!WTc KW)`;ir/!@\3:,B!:p0l'NiNRjoWb$$KhBl!>\7qj8J*EhU99G=W.=r!!NWP7X)5srT47#D_D=rquH'` "Va[^U;GX^joKH?nc/^n0p27n!eqm"kPt_d%QJ[VrT479Ma.gSnGiXo-"=IajosV'5nX5#r;[$.14ZUJ f&-;c"5IuF"J5[G!.k3&!0mQ^!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!V6:(!<E670gnK+Fj^6h]6m4! *>/VH!!``I0KV^(CQA>-!:^!f#L\T,)[6EH!UTme!>>J7!WiH+"9f)?',W5c:/tnKO1>/'$fD!anC3q7 -j9\S!VcX""V)=n5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^C8!Vs8Vl3J41(T"9JVq!"&`- !ZjU%:0DUr[/RfG^X'rtH<!-W&BXtX!X/i81Lc*>q7d3ZbH-7u67`fOnGigr#nn=0:MYa!rP&WXe`cf) _2;DY!\5/qj8]Ge'.Gn+;.G-arP&?frr35dU0oGT"Tnes!"&`.!Y-qX9iP\WTDZG/ca]*I8MV4hr;['' !sJrK9m;lt^B`3"QtoDS*sqoHo)K"!%i6HS??i.A^Au@Srs8G1FZTj4!s/N%!!`W8(Eb\@FI)m?%)i#A q<>tgA2R80Pd:,"%)BZn^WOa%KN^_o('E:kJcLB&JcLB&fDl-a0j074\%&jDXU!2/f#ND6+9_06'*87= "Y!oTkPY,Ts72XU)?Bg=!q60p$Sbh>XL>^JriHL/Xj>kT`Ig]("R6!d!WE-3!s8Z/"UPVO)Dk0$J<-A% X8T.*]#M(@A2tS6oDf+*,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L="Kp%t_5IHI3#2Pa!"/i1 "9gPuYkI_F_m00B#I':s/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5PI1[)CS[ jH31P!s/K)j8]Gf,Y`K]ZamWIrN-=@hq?2B=Y'pL!"/f/!sBN=NRdafcFEeS"/0p.'E\XF!s8E$#6YDK *\UT?ReWuiVLD8Z$3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g#RVY5:hkWNWic9%%'@@WTR^B@3\jHI NMlTS%^)q9Y-OO85SFM0"9JQ'JcLB&JcLB&\,Zm<"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5nc0%%%Mg3N B:J8QK2tAC0HLr8"9&>n!"/i2"UH,IQKnMMrQ4u<$%ZGP*>B1s"T\Yk!<*#u!YGM:"U,,<&fW)L;LYb- mdnu/rMp6jD,)Q#)%d,T!VQL"'K9E][)UV2X/cu9X.jN53"Qc9$3L;0!!!''"pcP\U]18op:pR,$E&;Z 66@9d%0Q\4o)K1"#SS7.9mNrAp<9\:rMp0nG#':e"U"nU!;HO!&h$+QJ"jK]q5XaqI9%d&"U"qs!!ifV 96R5HcI8flWsbMcIpcAH.LlO_!WqQc#6=o1#S97NcMmhDg&.lWP[mN=&/5TY!<M`k$O.1_.6hI5g&L!A Vu3S#MdeXU#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!!j)h =Ga6"e&ABeX:2"XA4@q/9j2%WT!Ym#Wsl#,W2HD==Y9sb"9S\#!.k3&!.k39!;Z[!!=p\ZLW',Q"0>WH "6KRg'LHGV>!!2qkPtbe%kCV9`;Ja"XB?PGirJ]O"p#)W7s2&nrT43r?Q]L<!!<HVD9)V;"P\r&&HVJ' "Tf>l>EdA2jos\49,I^2kPteg.r(0NcJecb"6R*W#/C3?'NiNRjoWb$$KhBl!>\7qj8J*DgrZsr64Wtp h>d]b,"?d`hu2[?_f%15!TsFd'MX.Q_V4qM!HB%K!!36WOne&?L*H`p!:Kmi#VL&:rT479Ma.gSnGi[p -"=IJroFRFO?sZ`!s/H&![27(q;qnCiniM;;@h:XJcLB&JcLB&fDl-])DF6A<GRWm^B!d&rs-u3:E'K@ !s.rm&HMnA,!&1nFdfqJJlafM'at98!!``I0KV^(CQAD/!l)M>rr35OND:Ds"9JVn!#P_;!WiN1$4[[c *?lpf4$u_H@VBFrJX<qG^C/ous7Y-;?n2Ea!s//s#6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!'$6Cud 86KhrrP&KPqu?]n#K2-]&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kON$#6G&7#W#qEX80L;bfd)= >!abS!<<,k!!iW4'-/T!CPTV%^C/-=oDea%KMs`S(C9(%#QbYg3'^>NJ@5?j!8RSR#Nqgh.L$%Y!V69u !<N<40hY5?AV?]R^B;flO^eJb1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39" \90k="Tnf,r;[Z;$l:$G>'-(F^:q:tli$eWgp2]EEf-Kuq7dETd*pRkZ&N?^0d.)0!!%TNJcLB&JcN.X #7E7hL9.ko[J[-3ced6nK1I*fn,Ngs!WrQG7<PK:[^WdPSRXPj!<E6&n,N\$0j9=5[^rmEXU!2/f#<84 +9_$2(BO[A"U,/>%MBU!,:G0%4@E:cI#skpWVik'^!=?dE'PNNoDf1,,<Jh?Kq,0FXU;24Z.n']\8=8B !Vl^#&NF3[Y.)!MrN-@.d*p%>C,m(2n,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9R$Pp](O'%iHWZB8WS^ XTu.rBJ^)%"9S&m#Qtqs7q-e,UosZu$b":=oB;9.'*&(6!os=e"!gTbW3a%FX8T.,_;EqhRoq9L!!)Qi $NU;2"<(*reb8:R\GWH6Tm&s?#mCD4r;['*$PXX8=*^80XTt_P:)aNE!s7rl#7_t@<,ID\Wr9%)Z/"*] [;.`:p]([/+#m)3K:/a@WMZF!Su/frTn$i^=)!8PWqib*Y-P:5TQsKg$O?k;!i,gJ!.k3&!0mNm!!39, #TZj0kl:\^ao&1GJR:ke'GLu[!<M`k%g<7N(+VmgNeV%60-M2C#Q4\q!"/i2"UH,IQKnMMrQ4u<$%ZGP *>B1s"T\Yl!!E?*"9f,G$kEsg+=Jp(5XnOQGF?/3o&e)prMp6iCJH;s)%d/U!VQKu'K9E][)UV2rMpU+ DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp:'HXB&X*#B"d!<Mcl$ipYK+"C'5YQ"7>Y,;3!#cjJ=:Eg#I "9Q^G#8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*,rMp3oNG;6a4!tI?!WrH(kPthg!sJrA5_%)Y rrCaMWsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s!s/?##6u8,:i2;u_"ar8O_I&p"pG,2 rW)Ni#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!#Q5#=Ga6"e&ADjYHbI)H=9<HBQo)sWjo8.Wsko!Q&:!! 73Vs>!s/MX!.k3&!.k3&!7h,R!=p\ZLW',Q"0>WH"6KRf!>He%'F=j(!!NB6.o_ADroOCHk,_]+"4mMX ";<=WCR2osrT47!@j;-Xm/R4n.rE?*jojG!5nO.h!!NE;0jBjerT47@S4aY"!!29`"p6AjOKm*irT40k 4pJe&!YebZq;qb&9a^[rmf3Ik(.jtTrT4::^nuoC$/5F`#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^jo]TA !!)Wk!Wt0>puVX4,6?s-!sgMtaSk6(fo&*,!V$.("=7Ngjl>=WfVrLB()[hs"rTmef_OY6hT)IB=;h8: !.k3&!.k3&!42_2#9#9X79+,`r4`7$rr35ONDCJt"9S\p!!iT3'dPY(;IOJKC/-]3&e,'Jn,N[u)DF6A <bm`n^B!d&rs-u3:)aB?!Whcj(]a^@"UP\T*[WU)8Q/r/F+&RjI<^F.UUpE=$f(d^r8"&U/-c=\!r)a% "V)=n5$iH'^V9ib^W6?R#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ,_YaB5r5=+S&dAI?!V69u!<N<D5Yb'W Ef@C(^B`**VKu6+-kOi-p](O#"UGAi@YUrZ^Bi',XFXPA///-T!!iW4'-/T!CPTV%^C/6IqZ$Q*IS;C< 'F*Uu#QbYg3'^>NJ@5?j!8RSR"m;Uf.L$%W!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@ GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39"\90k="Tnf,r;[3.$l:$G>'-(F^:qAk`S^4`roqIt KT)=r]D92M^t-rT[ZYGt.j,Q6!Mf^I!.k3&!0mQ^!!`ld=ba#e\@)7:#LD8Xa+Ho*"RlC)!<N<)&hQ[f F)G`*<]M<2!<E6&n,N\$0j9=5[^rmEXU!2/f#<84+9_$2"9J]1#Rh=Y)'C=a5>5'^@VB\,Kp&+)WN?$" #JJ[.Z@5@h#kS*%%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN\%9!GXU))Xf?:U>4;\+g!"/i1"9gPt YkI_F_m03C#d(=m?RuTk"9Q^G#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,N^s(GA9fHBG#+rN-@9ea)qqO@Ki_ rW2'[#Ql>HGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1 #GurF)[ZcO!r`2k!!`uY4B-0QS>uOi#I3(=dC!aL(&.bG$6M6(C4hqSX/;GON/aI7]:Xq/G_;*NX8/k+ Y-4U_GZd!H#6Y/3!S[U+!.k3&!.k4+!"/i2"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\Yp!##G=$4[t)5#kQK 0d7DF#m:81!<Mfm$N^G7#TZj0lMpn_ao8=KX/geY73*'V%0Zb5mJn(+"UPYO)'ULe6rdrEH$k'mQESL$ j3Y<9rMp0hBh]um(_I#P!VZR!'K9E][)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp(!H<icR "WA*`!s&Go!"8l7'Her'IBieFbc[iAWs>/<:Eg#I"9Q^G#8/FP?%8TZ[J?j.UO?/l#R(>5rW)Ni#R;\L G,N%!e#NAI$_)]O8jkEX%0Qb7!U'Lg!<WK2&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jd r2TpX@Q4i"#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!#Q5# =Ga6"e&ADl[CsVrRXA^gJWZ\/\@8L6Ws>MaIVVtO/J\6e!!<-"JcLB&JcLB&Z2b%/%kCS6`;Ja"XB?SH huMm>"T],a</JQkjo_\f*<Y's$j$V?&K35i@=+EPdc(/e"N+k!"p+)k"U?Ppa6)Lgk2tEY5nO.h!!NE; 0jBjerT4:AS4aY"!U'Lf""S,JZ-M>,joW%V#0m5?!!3j:b5(0$bY8H-!!E<<8Xe]<jos>FQuaGUgAhB_ ,"?d`hu2[?_f%15!W2ra!!O'2JYL$8r8n$")Y*k0"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGids-"=II iS2`ga1.=K84l<71J<%ug\Kt8gn%q0'*=^)JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rs-u3:E'K@!s.lk %g31L(*+YO1GL3p&-rIB!q60p#9#9X7942ar4`7$rr35OND:Ds"9JVn!!E<)"pYSN(F1Xs9j;+CG(c!N T:2%/S>Nd/rP&?frr35`Ugl"`"p>#&!!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ, _YX<4rPa:U&dAI?!V69u!<N<D5Yb'WEf@C)^BhU#a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_( #Qb;G*@jp$LV<Z$!RC*3rr]`T74A9Y&I.:r#QbYg3'^>NJ@5?j!8RSR#Nqgh.L$%Y!V69u!<N<40hY5? AV?]R^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("rW)Ni#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3 !W<!8":Q(h3*LEi^:h>$b0So,q!6>8TVAEj]_T;N`mr,5O_mcF'b:TS!S[U+!.k3&!.k4'!!`ld=ba#e \@)7:#LD8Xa+Ho*"Rc=$!<E6.'d54d0eP"')%HiPrW2Kg#7E7iL9.hp[Jm97Xf]q+f#<84+9_$2(]ssK %29j31dP&LEIEIqNg?*'TrP)nX02E'#Jf$>^l2/=$1n3&%3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN \%9!GXTYfVgX*S8E^(EBn,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9Q^G#6k\V,XQ.$VYR>!ZBT#Z$O6e9 rW)Ni#Qtqs7q-e,UosZu$bY9dp?[i/%KHJ0!TX4d"!gTbW3a%FX8T.*_;EqhRoq9Ln,Ngs!WrQD:lX$! lHZp;XTP8@7MGq2"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!q60p%O4)8D24X]rN-=0gtU5aCH*((!#Gta 3)F@BRB!9\Oc"mKNi'\#U7.F=TrIgh#dUFiDG2l1&-Mn5!W`9$JcLB&JcLB&\,Zm<"9f&O;jQYIs8L.< WsO>a7NE0W%0Zb5nc0%!"9eu='HAGG*Yo7g$3gY9rW2Tj$N^G7#TZj0lMpn_ao&1GJR:hd'GLu[!<MTg (^(*T'HSY[6<.r_VS0RJWhZ`1bKn)6XK)6"$C#0u-l*U1#6Fo,pAbL62dh`S`mhf)Wth\9U2O'l&/5]` !s&E&!!39-#UWfOrr3#m^\t2?Vg)H2()IVl!s&Go!"8l7'd5/+IBieFbc[iAWs>/<:Eg#I"9R$Pp](O3 -pq9iU:I]-Ws>DJ<[e:X"9\,n#R;\LG,N%!e#NAI$^u367Q;k;$O$V6!U'Lg!<WK2&3t`jrr2uOr2U-g A54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jdr2U'\@Q4i&"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!q60p(-,ca Zc1A+rMp:!D,rV-'+bHP!<N&t$P+pnM6FkH`N?G\bm`:R^S$7>RARC$\?`+0Wsb_XC/$B,((13G!Wf%r JcLB&JcM&9q>^["%kCS6`;Ja"XB?SH`;g&B%kCV9`;Ja"XB?PGirK#X%fltU0Kr9>EJ0^Z]#iIXj8J*C _e^e-!UTjh#:jZ3rT47;N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe""S,JZ-M>-joabU4pJe&!YebZq;qb& 9a^%`"9B90RcFA/"k'N-@28tE!8[\Z#U2`^[,:iE"N,.2#6Euf"Va[^U;GX^joKH?nc/^n0p27n!eqp# q#Kj`!sgMtaSk6(fo&*,!V$.("=7NgjPJ5![(<lQR[BD(M4V9*htcC:f5r\RdK"k!JcLB&JcOF'#6u/$ 4%3.bNr6WlnG`FmdZ%$A"p>#/m/RCm!<WH."Tnf,li77q)DF6A<bm`p^B20bnG`FmdZ%!@"p=u.n,Nt# "U5;I+u)A\?YF4oI?16(^]2%D^B!!ers.ecA1n;q"TnH!#6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!' $6Cud86KhrrP&BMqYpL"`dpPk"p=u.o)K*u!WjE.:/4r4N3rPu#LCGfH<!-W&BXtX!X/i81Lc*>q7d9\ bH-7u67`fO!!)Tj#Qb;G*@jp$LV<Z$!R^Q=rs#iM59h$V"loXh!Y["B5Z)$A[Jdi?h#@<YkFu?6"pG)0 o)K*u!Wiid92/AsKV/1W"4+K>@fo:X)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("n,N[s%i6HS??i.A^Au@S rs8G1FZTj4!s/N%!"T2@(Eb\@FI'YT_opBJ_7ooarkAHIpV.!XdC#$K9J@7`qZ)3JJcLB&JcN.X#7E7h L9.ko[J[-3ced6nK1I*fli77k!WiK-!s8T,!W`?'li77u0j9=5[^rmEXU!2/f#<84+9_$2%g3+H&f`>[ 8R$(aR]EQnYPtX(XSAn&^tm\eSQ[QOoDf1,,<Jh?Kq,0FXU;24Z.n']\8=8B!Vl^#&NF3[Y.)!MrN-@. e_S]lF[6rIn,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9R$Pp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m#Qtqs 7q-e,UosZu$GYWpp?mo*$NL/-irB>e,Y`K]ZamWIrN-CBhq?2B=Y'm[!:g*t!<N?+)GlFDp?Kr5r2g3t G=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!q60p%O4)8D24X]rN-=0gtU5aCH*((!"0,U3)F@BRB!9V MhD1]LQ/%tXU)5,G"<\i$j?[)!.k3&!.k39!"8i/"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5mJmOp!sAc2 "9S]+!U]pq!X&Z4*E/9hs8W&>r2U-T?UYtL'Fb3H!U]pj":Pta.1/+0?[/-]q>]d+[Jm0,X/bur$C56u /.r[/#6Ou-pAbF42dh`S`mhg&WtV4G<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsYbK><`f:&de^A!V6:" !=9Ja/lR5(rq=R=VZ*V%X.4?/+pS8S!m1KJ&h$+QJ"jK]q5XaqI9%d&"U"qs!!ifV96R5HcI8flWsG)+ 90k-O(^gKK!s8Sf!!`N,"UGZ)J'S&n!87:N$'\sq.M*:("p"bq!"/uC*%=*bRG%Vu\u5J,#E*%N%L3.> !W<!'#9>ZuD32!;po=X^Bg<@:"U"o+!:p0q(-,caZc1A+rMp:!D,rV-'+bHP!<N&t%hC?rM6FkH`N?Vk h<NV1Z2Ug&WqWP!UNoii#mLP9ec::%JcLB&JcO@%"T],a;hr<hjo_\f*Ws@]"T],a</JQmjoso0XB?PG huEua(,T0DTYK.YjT"?;joiYC0*hUG!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^G iVhm?\3:,4!!3j:b5(0$bY8H?!:Kmj!>\7qj8J*Dc_P\Y$N\u^"UH;AGI69+joiS?0*_O@!!O'2JYL$8 r8n*$)?9d0!!36WOne&?L*H`^!!<KZDohn>"PJ\u&-;;$$Nqbb]&_P_YG&DIhYZ@6jnIm=bYo)G!.k3& !.k3&!42_2#9#9X79+,`r4`7$rr35ONDCJt"9S\k!!<6&!WrN,!WiDh!!``I0KV^(CQA>-!:^!f#L\T, )[6EH!VcZn!>>VD&/?660fhd%?"S"sG'/1jRBH1s!8@GP#O&!p/d_dc!r)a%"V)=n5$iH'^V9ib^W6?R #lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kOi- p](O#"UGAi@YUrZ^Bi',XFXPA///-T!!iW4'-/T!CPTV%^B)aQrr32/EBYQ`%L(nn#QbYg3'^>NJ@5?j !8RSR"m;Uf.L$%W!s.un$3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip" "V2Co5$iK,rP&?Rrr39"\90k="Tnf,r;[3.$l:$G>'-(E^;J+rccO#:n@o7Qd'f!J9J@7`TE'QDJcLB& PlU^^#7E7hL9.ko[J[-3ced6nK1I*fli@%dqZ6j#!W`>g!!`ld>)',e]!_I<#LD8X`Ig]("S;[&!WrQ/ $4mso,V(T06OHUoATEBaUp$r(X7WM!^Y@A]QWPaFoDf+*,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S# ]!_L=#d2_6e&-;o)ZfF.$N^D5"Ysr!p@R1YZ2Uj2Xg!mo/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y+t !!i]D01TJtOef/YXU)]#p%Ig564Enr!!*,]!!iZP9m<PB\[ed>XTu]"fuojf/.1kH$NU;2"<(*reb8:R \GWH6Tm&s?#mCD4r;['*$PXX8=*^80XTt_P:)aNE!s8H%o)K"*,<SqBLRbCCXTu,dgX3EE3#22g%gjC< :hkWNWiDPHKRS]9U%#/hZCc;1*Y]"dec::%JcLB&JcOR+$N^G7#TZj0kl:\^ao&1GJR:ke'GLu[!<MTg #QXu/"9S`-!<MQf$N^G7#TZj0lMpn_ao8=KX/geY73*'V%0Zb5p&Gm2"9o,C)'LIa3'Tf/?uCFUXjHk0 f#+`aWsY/*:Fm4s&-i7;!VZR!'K9E][)UV2rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp(!G?[9G "VhXW!s&Go!"8l7'd52.I^/nGbc[iAWs>/<:Eg#I"9Q^G#8/FP?%8TZ[J?j.UO?/l#R(>5rW)Ni#R;\L G,N%!e#NAI$^bd)6SK]$$NgG3!U'Lg!<WK2&3t`jrr2uOr2U-gA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jd r2TpX@Q4i"#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!"TSo =Ga6"e&AGuakc76`3Sm5#GZTF.LHCa"8W"L!.k3&!.k3V!!NB6.oV5Ar8n*_=WR\'!9O7b!=p\[M8]>S "0>WG"60@g!<`fM2ckC![`[CtjoiYC/dMLF!!NTXD9(f$#3P(&N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe ""S,JZ-M>,joW%V#0m5?!!3j:b5(0$bY8H-!!E<<8Xe]<jos)0GuG.RgAhB_,"?d`hu2[?_f%15!W2ra !!O'2JYL$8r8n$")Y*k0"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGids-"=IHfu1&rTsi,#nE'er;\,;s JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rs-u3:E'K@!s.`grrN'"rrMHd#6u/$4%31cNr6WlnG`FmdZ%!@ "p=u.p](^'!<N?2)(%1-;."0`"+>cUM#N,2NL-EIoY1C[rr35cV.2(`"p>#&!!`Z;(F)+MGF\WH!6>*= #lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C)^BhU#a/4/_4t$ub !!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$LV<Z$!RL97rr]TJ4sC%F%L(nn#QbYg3'^>NJ@5?j !8RSR#Nqgh.L$%Y!V69u!<N<40hY5?AV?]R^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("rW)Ni #6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!/":Q(h3*LEi^:qM.ccO#:n@o7Qd'f!J9J@7`f)UC&JcLB& JcOF'#7E7hL9.ko[J[-3ced6nK1I*flN$qcqZ?culMq.t0j9=5[^rmGXU2,3ced6lK1I*foDf[0"U55J ,Vqk`='fKUFaJe"PFSSSYHP#!XTuVoe&.;J-jfMG#7Vn>;f%/XWr9%*Z.n']\8=8B!Vl^#&NF3[Y.)!M rN-4*e_S]l"*HmK!Up's!WrQ/12X8ho\IEirN-=/OC'OI#Qt4O!!`]=)'hO]MPg3O#I9S-1^aNk!r`2k !!i]D01TJtOef/YXUDl#o_.[364Ntq!<M6]#Ql>HGGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5 r2g'pG=E8K#mCD4r;['*$PXX8=*^80XTt_P:)aNE!s7rl#7_t@<,ID\Wr9%)Z/"*][;.`:p](g3+#m)3 K:/a>Ru;rKLQ/"sXTu/(G"3Sf$jHJ-JcLB&JcLB&\,Zm<"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5mJmIm !WiH+!WiDh!"/i2"UH,IQKnMMrQ4u<$%ZGP*>B1s"T\Yu!#P_?$4mt!3)4"%E,p)IK8l4n\^f`f`42o@ WsY/+:b3G$&dSO>!VZR#'K9E][)UV2X/cu9X.jN53"Qc9$3L;0!!!''"pcP\U]18op:pR,$E&)P584hF $3L;0o)K1"#o+U9;gu"Np<9\:rMp0nG#':e"U"nU!;HO!&h$+QJ"jK]q5XaqI9%d&"U"qs!!ifV96R5H cI8flWsb>69ggc`)[ZZK!WhKb#6=o1#S97NcMmhDg&.lWP[mN=&/5TY!<M`k$O.1_.6hI5g&L!AVu3S# MdeXU#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!"0;k=Ga6" e&AGuak['af>OuaWs>DG<@S=\"Tt@sJcLB&JcM&9q>^["%kCS6`;Ja"XB?SH`;g&B%kCV9`;Ja"XB?PG k5YSb"UbqM*@a$BBSE7pak,GBjoiYB/dVRG!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNU C65^GiVqsAk.!SZ^]4EM=N^I%!mF@Gk5YVc(.jtTrT4:1Wdn4a!r`2V!!NWP7X)5srT47#D_D=rk5YZ" 9nB%UgAL(6E>nBJ!Wt0>puVX4,6@T?mf3Fq/oSi0joj@q5S*td!"/oU@_1XR`35lCb22XM!mFRRd/\au JcLB&JcOF'#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/lN$e_lMq.p)DF6A<bm`p^B20bnG`FmdZ%!@"p=u. p])*2!WrQ=-p1.*C3u,6St2ICR[T_=X0fD/^B!!ers.SZ@Oqcg!s85t#6bSR,<fFXSGg2&a8Z)Eqn%&6 $3^M5!W<!'$6Cud86KhrrP&BMqYpL"`dpPk"p=u.o)K*u!WjE.:/4r4N3rPu#LCGfH<!-W&BXtX!X/i8 1Lc*>q7d9\bH-7u67`fO!!)Tj#Qb;G*@jp$LV<Z$!RL04rs#fM4sCgR"loXh!Y["B5Z)$A[Jdi?h#@<Y kFu?6"pG)0o)K*u!Wiid92/AsKV/1W"4+K>@fo:X)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("n,N[s%i6HS ??i.A^Au@Srs8G1FZTj4!s/N%!"T2@(Eb\@FI'YT_opBJ_7f?Q#gCZ(O(V-?(BOC5JcLB&JcLB&ZiC== 0j074\%&jDXU!2/f#ND6+9^s0qZ6]tl2V%s0j9=5[^rmEXU!2/f#<84+9_?;(]aaD$P+LE<Gm&2KoM7] R%'\BVlR&&WiYip#JSa7^5Gi9#kS*'%3mr5Ck\CZXfVr4Xg-X9dC=$S('442#8&q(O05t'[Jd35Y1;@W _f\6a!Up's!WrQ/12X8ho\IEirN-=/OC'OI#Qt4X!;HO!"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01TJt Oef/YXUDkuo_.[46Oj(r!<M6]#Ql>HGGqjY\Z>\2$,PNPbF;Wc$31(s!"/f/!sBN=NRdafcFEeS#GH?2 'F=pF!rW*(":Gnb03<FfpoOduISLgh"p4qr!!`uY4B-0QS>uOi#I3(=dC!aL(&.b:$6M6(C4hqSWgep" "+H#bU%#/hZCc;1*Y]"dT)aHCJcLB&PlM3m!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!UTje!WE0#!UB^n !X&Z4*E/9hs8W&>r2U-T?UYtL'Fb3H!VZR'!='/Q,!91cY-tU7St-1]W3!>=`59-nXn/S#Q>9>L)]TIs !W`>r!!a2s@$%b8eA2$`';BDG3"Qc9$3L;0!!!''"pcP\U]18op:pR,$E&)P584hF$3L;0o)K1"#o+U9 ;gu"Np<9\:ri6=*S9@[P#6b53aoDYZ-pq9iU:I]-Ws>DJ<[e:X"9\,n#R;\LG,N%!e#NAI#aog175cM4 $3C81!WhKb#6=o1#S97NcMmhDg&.lWP[mN=&/5TY!<M`k$O.1_.6hI5g&L!AVu3S#MdeXU#6b21r;['- *ApZ1OKcOqWs=c$5SOD+"9SQ&o)K"23FIrT`R;HuWsYP;<]CX(&.&F>!W)j-%kq+BYJeo/XgcF.lIWt[ n>cehH;uF%#6b4\!.k3&!.k3&!7h,R!=p\ZLW',Q"0>WH"2t6D!=p\[M8]DU"m4sK=WIV/!"]PX/3Zs? CNtQ!X1ZR(g>:i]joiYB/dVUH!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVhm? \3:,4!!3j:b5(0$bY8H?!:Kmj!>\7qj8J*Dd&ht-'E["h"UH;AGI69+joiS?0*_O@!!O'2JYL$8r8n*$ )?9d0!!36WOne&?L*H`^!!<KZDohn>"PJ\u&-;;$$Nqbb]&_P_YG&DIhXKY/bYo&F!.k3&!.k3&!42_2 #9#9X79+,`r4`7$rr35ONDCJt"9S\g!9aCf#9#9X7942ar4`7$rr35OND:Ds"9JW!!"K#3"9fc)8lK)7 K;Q>q]`,MH]"5Md]Y=$Q$ekX\rSjS].g?.Z!r)a%"V)=n5$iH'^V9ib^W6?R#lD5X3sl,n!Wi6"#7;M. 4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kOi-p](O#"UGAi@YUrZ^Bi', XFXPA///-T!!iW4'-/T!CPTV%^B)XHrr32/E]tZa%L(nn#QbYg3'^>NJ@5?j!8RSR"m;Uf.L$%W!s.un $3:20%P^UN<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39" \90k="Tnf,r;[3.$l:$G>'-(E^;J+rccO#:n@o7Qd'f!J9J@7`TE'QDJcLB&PlU^^#7E7hL9.ko[J[-3 ced6nK1I*fb5_bT0j9=5[^rmEXU!2/f#<84+9_?;%06V>%i-s"F-rl+X/N/tX9#H)nZ<&1e'#7T:*^/< !!`rX4&]sLS>uOi#dN.>dC=$S('442#8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEiriHI. Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.rBJ^)%"9S&m#Qtqs7q-e,UosZu#e\p`p?[f-%fcY2!<M6]#Ql>H GGqjY\Z>\2#Jo<NbF;Wc$Le$'!<N?+)GlFDp?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO !r`2k!!`uY4B-0QS>uOi#I3(=dC!aL(&.b>$6M6(C4hqSWgep"IYWoVn>ur$T6<^G'FY/r!.k3&!.k3& !8IP^!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!RUlT!X&Z4*E/9hs8W&>ri6F-X+=VH*>B1s"T\Yu!!`Q4 (*bM7Mo5Po$08XsWi;trW2clsWrT0lWs=r,;D0(4'F=[=pAbF42dh`S`mhg&WtV4G<]CX)&IJU@!<<*$ "9o,Y>bh;u!VX;,Ws#>E><`f*'bUiU!<Mcl$ipYL+YH]BZ2XI@Y,;/u#Fos5+pS8S!m1KJ&h$+QJ"jK] q5XaqI9%d&"U"r,!:p0r#:<)eVnLC)Wr8t+RWhOs3[u*W!W`?'kPthg!sJrA5_%)YrrCaMWsP#$:+?eh %L)q7nc0%%&KE5aB:7HQi4>iaWrn8h3"?#q"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!q60p(-,caZc1A+ rMp:!D,rV-'+bHP!<N&t%hC?rM6FkH`N?Vkh<NV1ZLFn"UO#oi$3p_:q>c*IJcLB&JcN(V"T],a;hr<h jo_\f*Wt=#jo>Pc%kCV9`;Ja"XB?PGlMq+i&MmC4VpPFt#i+7mi8N_WjQ6$r"N>=4$3KSp"U?Ppa6)Lg k2tEY5nO.h!!NE;0jBjerT47@SP0h#k5Y\g.r(0NcJe`a!k:Duc2dG9!YebZq;qb&9a^%`"9B90RcFA/ "k'T1@i#4$!!NWP7X)5srT47#D_D=rquH'`"Va[^U;GX^joKH?nc/^n0p27n!eqp#k5YSi/oSi0joj@q 5S*td!!`WQ@_1XR`309:[`[IrjoWb*&"3KM!.k3&!0mQ^!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N #9#9X7942ar4`7$rr35OND:Ds"9JW%!"]/3!WrfG+tc;b?!h>mOgMq<_o9^?e^)LZ_7R4`WhGf@RA@7) rP&`os8W)YUL>YW"Tni$!!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<` &dAI?!V69u!<N<D5Yb'WEf@C)^BhU#a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$ LV<Z$#gVf9s8TEG4sC%F%L(nn#Qb\i3C-PRJ[YNl!8RSR#Nqgh.L$%Y!V69u!<N<40hY5?AV?]R^B`)p O^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("rW)Ni#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!8":Q(h 3*LEi^:hA&bK\Snlf6:$V5UN*^%oDOa4/#,M.]@0&e,*L!S[U+!.k3&!.k4'!!`ld=ba#e\@)7:#LD8X a+Ho*"NpcM$Sbh>XL>^JriHL/Xj>kT`Ig]("Si$C!<NB-#8%q)2,S1HX0T(;X08e7[^j5aZ)FRnSXQ(> Tr"`dX8K()^=CK@M,>W,oDf+*,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L="Kp;2e&)915oTjo !"/i1"9gPtYkI_F_m00B#I':s/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5PI1 ]\E#Nm#FIE!!!$#j8]Gf,YWE[ZadKFrN-=@hq?2B=Y'pL!"/f/!sBN=NRdafcFEeS"/0p.'E\XF!s8E$ #6YDK*\UT?ReWuiVLD8Z$3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g(CD6D:hkWNWiDbRM1gVCT"VD- T:MUNWq`\+ZD`Xm6S9Aj"p>&1!<<+O!.k3&!.k3\!"/i2"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\Yd!:0[n !X&Z4*E/9hs8W&>r2U-T?UYtL'Fb3H!W)jC!<`T5%NI#a;L#.os8VB)XJhqfS=Q"3Q'RZ$R$seR_9Bp1 XfD?#$'o@)/fYiE#QXu"!!s>u@$%b8eA/,c's"C0DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp:'G?[9G 'bUiU!<Mcl$ipYL+YH]BZ2XI@Y,;/u#Fos5+pS8S!n./E!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#:<)e VnLC)Wr8t+RWhV!3\)0X!W`?'kPthg!sJrA6%@2ZrrLcRrMp6hA54Tc'Fk<J!V-3u"q_h(5A-D;s5:Jd r2U'\@Q4i&"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!q60p(-,caZc1A+rMp:!D,rV-'+bHP!<N&t$P+pn M6FkH`N?G^cj\a[`2\lcTWG`:['-J)Wsb_UAO\$h&d\UA!Wo+sJcLB&JcM&9q>^["%kCS6`;Ja"XB?SH `;g&B%kCV9`;Ja"XB?PGli7:l%l%15TZ5mM'B%^"d`8hnQB$`LG_hWYXM)p6j8J*C`GdF9!posi#:jZ3 rT47;N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe""S,JZ-M>-joabU4pJe&!YebZq;qb&9a^%`"9B90RcFA/ "k'T4AJYIJ!8[\Z#pVrb[G_#G"N,.2#6Euf"Va[^U;GX^joKH?nc/^n0p27n!eqp#q#Kj`!sgMtaSk6( fo&*,!V$.("=7NgjPJ.pYIM<\Z*:I7V7"FtiVDU<eSZ`<dK"k!JcLB&JcOF'#6u/$4%3.bNr6WlnG`Fm dZ%$A"p>#/cN"1T)DF6A<bm`p^B20bnG`FmdZ%!@"p=u.qu@uC!sAiK1eqOuEGocAMO_/maO/f2lI3VV WM#Q:MM$4pI>FN,rP&?drr35bUgYbX"Tni$!!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^n QMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kON$#6G&7#W#qEX80L;bfd)=>!abS !<<,k!!iW4'-/T!CPTV%^C/?Rrr<#)E]tZa%L(nn#Qb\j4$uqXJ[YNl!8RSR#Nqgh.L$%Y!V69u!<N<4 0hY5?AV?]R^B;flO^eJb1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39"\90k= "Tnf,r;[Z;$l:$G>'-(F]tV>&g[+_7lcZ5cOIW;^q7dEUf$M=<NG1p7+;G7b!!%TNJcLB&JcN.X#7E7h L9.ko[J[-3ced6nK1I*fj8eBD#7E7iL9.hp[J[-3ced6lK1I*fq#D]A"U>GK+u`5)EeB^^['I!=YdV<i hUAp(N.Q@rCit/]OdVuDXSo7+^=UcLO&IJ7oDf1,,<Jh?Kq,0FXU;24Z.n']\8=8B!Vl^#&NF3[Y.)!M rN-@.e_S]lF[6rIn,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9R$Pp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m #Qtqs7q-e,UosZu$bY6bp?[f-%fcS1!TX4d"!gQ`VR!\?X8T.,_;EqhRoq9L!!)Qi$NU;2"<(*reb8:R \GWH6Tm&s?#mCD4r;['*$PXX8=*^80XTt_P:)aNE!s7rl#7_t@<,ID\Wr9%)Z/"*][;.`:p]([/+#m)3 K:/a?V43MSMi!n(]V1F>JW#kgX8&e)Z(Qto;`Gp0#mLJ5U]>uHJcLB&PlM3m!X&Z4*E/9fs8W)?r2U-T ?Uc%M'Fb3H!RUlT!X&Z4*E/9hs8W&>r2U-T?UYtL'Fb3H!W)j/!XB8R+uN#'HC2>,s67qDX/-K"R#l]> G^"=PEc>rMS$USrf>+EbWsP),:b<P'&dJF<p&G=32dh`S`mhg&WtV4G<]CX)&IJU@!<<*$"9o,Y>bh;u !VX;,WsYbK><`f:&de^A!V6:"!=9Ja/lR5(rq=R=VZ*V%X.4?/+pS8S!m1KJ&h$+QJ"jK]q5XaqI9%d& "U"qs!!ifV96R5HcI8flWsG/<;+EYt*")fL!<N;c!!`N,"UGZ*JBn/o!SFLPWsP#$:+?eh%L)q7nc0%% &KE5aB:7HQi4>iaWs=Pl3"?/s!s/?##6u8,:i2;u_"ar8O_I&p"pG,2rW)Ni#8T=-OL)pS^&=u=Tl!gi &/,T]!s&H"!#Q5#=Ga6"e&ADm\&$5.UPEc8MOprZ]Xk-=WskkcH=]o<.2<!g!s/MX!.k3&!.k3&!7h,R !=p\ZLW',Q"0>WH"2t6D!=p\[M8]DU"m4sK=WIV3!$)@d4(!Z9][Gctg!@O8JnI\7/0YuI+u;YdFe-S2 rT47%E%VFum/R4n.rE?*jojG!5nO.h!!NE;0jBjerT47@SP0h#k5Y\g.r(0NcJe`a!k:Du^]4EM=N^I% !mF@Gq#Kj`"9B90RcFA/"k'T4AJYI'!!NZS8U7`%rT47#D_D=rk5YZ"9nB%UgAL(8E>efWoDepp0p27n !eqp#k5YSi/oSi0joj@q5S*td!#,P^@_1[[g!.FESpX[G>#\('NP"$BjosM+<$r(Tp],mGJcLB&JcN.X #6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/kQ'fH#6u/$4%31cNr6WlnG`FmdZ%!@"p=u.r;\,E!s8`9/lQeN NJ`IJOe/_e`6mQ5s6@\*PD"!f<a&^0<G6W;\Ga/BgA_*Wk+lE9"pG)1p](U(%Mp?R??_pS^B20ba8Z)E qn%&6$3^M5!W<!'$6Cud86KhrrP&BMqYpL"`dpPk"p=u.o)K*u!WjE.:/4r4N3rPu#LCGfH<!-W&CUXS !!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$LV<Z$$dS,<s8TEG4sCgR"loXh!Ym7K6r[fO[f*r@ h#@<WkFu?6"pG#0!V69u!<N<40hY5?AV?]R^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("n,N[s %i6HS??i.A^Au@Srs8G1FZTj4!s/N%!"/o<(Eb\@FI'\U]tOomkP4uPi44tfH]F]/q7d?Sd+6ajYDm3b 1a*G4U]>uHJcLB&PlU^^#7E7hL9.ko[J[-3ced6nK1I*fb5_bT0j9=5[^rmEXU!2/f#<84+9_K?&HW.H 'HK&1DMXIDVQ[;1X0&Z@^X1m4d\M>'=\M(?86KVOM4(3@rN-=>gXX?0<[nIK!!`rX4&]sLS>uOi#dN.> dC=$S('442#8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEiriHI.Y`N3C$jZt;aoDYN%iHWZ B8WS^XTu.rBJ^)%"9S&m#Qtqs7q-e,UosZu#e\p_p?[f-%fcY2!<M6]#Ql;EFeuCP[]BA/#Jo<NbF;Wc $Le$'!<N?+)GlFDp?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!r`2k!!`uY4B-0QS>uOi #I3(=dC!aL(&.bG$6M6(C4hqSXJhtfR@pLZV1ru%@W@-kX8/k+YHY1-R<Vdj(D$oW!o!^,!.k3&!.k4+ !"/i2"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\YO!"/i2"UH,IQKnMMrQ5&>$`g=Z?UYtL'Fb3H!W)jC!tH4t 3)a^OT!-,gf#PD,WhYr;Dd6^W=]8'c5Wr:qS\ib+cDpiD$'o4"//B'7#6=l!!!a2s@$%b8eA2$`';BDG 3"Qc9$3L;0!!!''"pcP\U]18op:pR,"K-HJ58489&de^A!V6:"!=9Ja/lR5(rq=R=VZ!P#S9@[P#6b53 aoDYZ-pq9iU:I]-Ws>DJ<[e:X"9\W'o)K%$-;/N[^!>*,rMp<pG>Ujk.i\ou!<N;c!!`N,"UGZ*JBn/o !S=FOWsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWrn8h3"?#q"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D !q60p(-,caZc1A+rMp:!D,rV-'+bHP!<N&t(Cr3%M6FkH`N65HZacicCK"_cKpJ^G]_JN;VOs!'F^.9W #6b/2!<<+O!.k3&!.k3V!!NB6.oV5Ar8n*_=WR\'!9O7b!=p\[M8]>S"0>WG"7H43!>e:<JY'<ie(j!@ cb-9(9J.(c!s&B%!<`oP4`%1UrT47%E@qOum/R:p.rE>hjp'u1gQ"Q3!V69p!Y[:mPKs-h"Q5hE(BN\! "p6AjOKm*irT40k4pK:4o)Jh+=N^I%!mF@Gk5YVc(.jtTrT4:3YDZs."5<eZ$78Ak[c%,H"N,.2#6F`& li72'9nB%UgAL(6E>nBJ!Wt0>puVX4,6?s-!sgMtaSk6(fo&*,!V$-p"=7Ngjl>=T%+MG'73O!'*"sf( RG7Q"#2R+]Ce#3AScF?BJcLB&PlU^^#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/cN"1T)DF6A<bm`n^B!d& rs-u3:)aB?!Wi6"&HMt<#S9:;NNTRjZEpsJ]=u5tg@5+Ai3J;V<'i2[,:P9$;/:inrP&?drr35eUgYbX "Tni$!!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D 5Yb'WEf@C)^BhU#a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$LV<Z$#gVf9s8TEG 4sC%F%L(nn#Qb_m4[rIcK=:`n!8RSR#Nqgh.L$%Y!V69u!<N<40hY5?AV?]R^B`)pO^gs<)[?6@#6=o1 #T?E]Q2&*!d_(r_9f=("rW)Ni#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!'":Q(h3*LEirkAoV_Y4!* m*MML8RHq4[.qBD_8+.<afgV38M:n_gAlg*JcLB&JcOF'#7E7hL9.ko[J[-3ced6nK1I*fb5_bT0j9=5 [^rmGXU2,3ced6lK1I*fq#Cj*#SJ++8oBWcWiN5%X8]17ZcV+pp;`,!4"MEb#otcl?$2'uWVrq(^YRPc Roq<NoDf+*,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L="Kp;2e&)915oTjo!"/i1"9gPtYkI_F _m00B#I':s/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5PI1]\E#Nm#FIE!!!$# j8]Gf,>3-TYdLp?rN-=@hq?2B=Y'pL!"/f/!sBN=NRdafcFEeS"/0p.'E\XF!s8E$#6YDK*\UT?ReWui VLD8Z$3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g(^_?E:hkWNWi`A'WiES9U5!8Y83pC$OK&#W%Bch= Z^Z/6,T%$r!WW4P!.k3&!.k3\!"/i2"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\Yd!:0[n!X&Z4*E/9hs8W&> r2U-T?UYtL'Fb3H!W)j*";<+B:ihf"Z*CU;XSo16TTX4l;bKP>/0c,I%kU\,XM`K=XSo1+Q=WfB',D)_ !<Mlo#o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsYbK><`f:&de^A!V6:"!=9Ja /lR5(rq=R=VZ!P#S9@[P#6b53dfB.C#8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*,rMp<pG>Ujk .i\ou!<N;c!!`N,"UGZ*JBn/o!S=FOWsP#$:+?eh%L)q7nc0%%&KE5aB:7HQi4>iaWs=Pl3"?/s!s/?# #6u8,:i2;u_"ar8O_I&p"pG,2n,N\/3FIrT`R;HuWsYP;<]CX(&.&F>!W)j)%kq+BYJeo/X/rD)%'#2$ ;)M!OCNtu@\Ztt2%'$5(UmcO./d_jf!s,1tJcLB&JcM&9q>^["%kCS6`;Ja"XB?SH`;g&B%kCV9`;Ja" XB?PGmf3_3=MrG8gYLcGj5o)$`2\es,RjeM!!E<<7?61%joiYC/dMLF!!<HVD9)V;"P\r&&HVJ'"Tf>l >EdA2jojV59G[`m!!WNUC65^GiVqsAk.!SZ^]4EM=N^I%!mF@Gk5YVc(.jtTrT4:3YDZs."9&;W!!N]W 9RF5+rT47#D_D=rk5YZ"9nB%UgAL(6E>nBJ!Wt0>puVX4,6@T?mf3Fq/oSi0joj@q5S*td!#,P^@_1^` jlG9d:*0]I#6Fo30R2+Cjp'o&gX<W*&Cgc4!.k3&!.k4'!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N #9#9X7942arkANL^[V7&#L\T,)[6EH!W<!(!XK;Q,Z&NB^&>\__SsjTmIg8MhQr/S90"F>$ka<q,"H6q \,F&AgA_*WkbV]<"pG)1p](O&%Mp?R??_q<^Au=Rrs8M6G<6-8!s/N%!!`iP1He93DO179!Q+^4rs-Pp 71oe-!Whlm$3:20*^EIq=`TJ.rP&T`a/4/_4t$ub!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t#nn=0 :MYa!rP&`cm/I%bZZ85R(_-`1!!iZ?.Q^$uB7dVk^B!'grs.\\?n)?a!s.un$3:20%P^UN<+U`Tr4`?[ \<18'8MV4hr;[''!sJrK9m;lt^B`3"QtoDS*sqE:#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!'":Q(h 3*LEirP&o]qu6EVaI$Em8Sa'HTr590q7d9PeASACB1OQe$O6\8!JCH)!.k3&!42_2$Sbe=XLG^Ir2g4M hU]`"80A&r!9aCf$Sbh>XL>^Jr2g4MhU]Yu80A'4!"&`-";2q;8ns*QY5PI>Y->FKbhM.>bEQU(,8Ual !Y6VB<H*efWr9%)^tm\gSQ[TQoDf1,,<Jh?Kq,0FXU;24Z.n']\8=8B!Vl^#&NF3[Y.)!MrN-@.e_S]l F[6rIn,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9R$Pp](O'%iHWZB8WS^XTu.rBJ^)%"9S&m#Qtqs7q-e, UosZu$bY6bp?[f-%fcS1!TX4d"!U6QR]!EtXSo7-_;3_aQW>RC!!)Qi$NU;2!uXppeb8:R\GWH6Tm&s? #mCD4r;['*$PXX8=*^80XTt_P:)aNE!s7rl#7_t@<,ID\Wr9%)Z/"*][;.`:p](O++#m)3K:/b<XU_MR ]q^3e7lDkb@t:#HVt[;%Y,m_$755kr"Tni.!N6!M!.k3&!0mNm!!39,#TZj0kl:\^ao&1GJR:ke'GLu[ !<LRJ$N^G7#TZj0lMpn_ao&1VJR:hd'GLu[!<E0#!<N?+#okj"DN:^-W;Wb"Vk]iMKG&<6:ddE%-5dF( "9]l:E21%jfDMZUQ=WfA&eto]!<Mlo#8B+)OL3$W_#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\t2? Vfu?0'GV5f!s&Go!"8l7'd52.I^/nGbc[iBWsGbrG#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p(["7Q9r #:<)eVnLC)Wr8t(RWhV!3\)0X!WiB(!U'Lg!<NE/%QejMrr2uRr2U-gAkslh((LNL!V-3u"qV_%5A->9 s5:Jdr2U'\@Q4i&"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!r`2k!!a9"@$%_6d_5U[$DD<;3"Q`7#m12/ qZ$j30Na18`7)^(Wt;1YA4@n-8Q&Z3OfZF4\ZMk,WsGSXAk+'a&IAU>!o<p/!.k3&!.k4%!!NB6.oV5A r8n*_=WR[a!!NB6.o_ADroOCHk,_]+"7Q9m#WRb%rT4IEg<[X4HW;pD$3Bl$!t@>Gh#6@<`GmO:!UTjh #:jZ3rT47;N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe""S,JZ-M>,joW%V#/C3?'NiNRjoWb$$Ma\j!!E<< 8Xe]<jos2:Me*\,gAhB^*^XqPi;Md@_f%.4!TsFd'2=%P_V4qM"*#4Z!;$6m"#5r5joU8^!TsFb#VL&: rT479Ma.gSnGiXo-"=Iajq-F66l#k,!<<*#&ODYsce@=QjoaFd/dD.PJcLB&JcLB&ZiC=9)DF6A<GRWm ^B!d&rs-u3:E'K@!s.TckPthm)DF6A<bm`n^B!d&rs-u3:)aB?!Wi6"#QkVZ/j3?VM7if%(rkM(oBOoF YF'WB7PZ>2&df-a*$e'eK"(]n!8@GP#O&!m.g?.Z!r)a%"V)=n5$iH'^V9ib^W6?R#lD5X3sl,n!Wi6" #7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kOi-p](O#"UGAi@YUrZ ^Bi',XFXPA///-T!!iW4'-/T!CPTV%^C/?Rrr<#)E]tZa%L(nn#QbP_2*OuOJ[YNl!8RSR"luCc.L$%W !s.un$3:20%l$^O<+U`Tr4`K_\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?R rr39"\90k="Tnf,r;['*$l:$G>'-)/^C\<]s8MN.OB<kg;ep]3N1[WU^C7p.d))uHCJ$9(((15C!.k3& !.k39!;lg%$Sbe=XLG^Ir2g4MhU]`"80A&Y!!`ld>)',e]!_I<#LD8X`Ig]("T/6,!<N<-+$<eUO.i`S XTYoC_n`erXIY>q=[4DQ&-r@>&10YDF,HTirN-=?h:^&D=tL-S!!`rX4&]sLS>uOi#dN.>dC=$S('442 #8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEiriHI.Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.r BJ^)%"9S&m#Qtqs7q-e,UosZu#e\p_p?[f-%fcY2!<M6]#Ql,6ArE1ZYcI`)#Jf*C_idqI$1Ip&!<N?* (Jg%@p?Kr5r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!r`2k!!`uY4B-0QS>uOi#I3(=dC!aL (&.b6$6M6(C4hqSrN-X6bf@)WAk"Bm0MZ>8Pb+_Oq5k(.Z_ED"<]M<4#R(;3hZ/6.JcLB&JcOR+$N^G7 #TZj0kl:\^ao&1GJR:ke'GLu[!<LRJ$N^G7#TZj0lMpn_ao8=ZX/geY73*'V%0Zb5!!!'("pknm8o'Zj \A#!AWu%LoK6V0;:d[/o+VtXs#R(>R7<#!4c.Dlo$'o-t.hWR-"p"bu!!a2s@$%b8eA2$`';BDG3"Qc9 $3L;0!!!''"pcP\U]18op:pR,"K-HJ58489&de^A!V6:"!=9Ja/lR5(rq=R=VZ!P#S9@[P#6b53aoDYZ -pq9iU:I]-Ws>DJ<[e:X"9\W'o)K%$-;/N[^!>*,rMp<pG>Ujk.i\ou!<N;c!"/f/!sK#fBrh42s5NsW $'](!.i&s4#6=kr!"/rA)C@[]QeDDs\u5J,",gVJ%Kcq>!s/?##6u8,:i2;u_"ar8O_I&p"pG,2n,N\/ 3FIrT`R;HuWsYP;<]CX(&.&F>!W)j%%kq+BYJeo/rMpL-HXT2^0/u$V<-+82`Q#]pq5Xk#OF(M44t7?S !sAW,!JCH)!.k3&!3uS.!=p\ZLW',Q"0>WH"5j1A!!NB6.o_ADr8n*_=WIV7!!EKP>,L<Xjp9VLPAa5P )[lf@!!<]nL>;ai"N>@6#Qa;m"U?Ppa6)Lgk2tEY5nO.h!!NE;0jBjerT47@SP0h#k5Y\g.r(0NcJe`a !k:Duc2dG9!YebZq;qb&9a^%`"9B90RcFA/"k'T4AJYI'!!NH=2J9#HrT47#DCu1qquH'`"VXU]U;GX^ joKH?nc/^n0p27n!eqp#k5YSi/oSi0joj@q5S*td!!<?M@_2O#"lGM4'`nI8!!WH=6#)Rog\Kt8hO[gs $NZq$JcLB&JcM&9qu?s,)DF6A<GRWm^B!d&rs-u3:E'K@!s-^J#6u/$4%31cNr6WlnG`FmdZ%!@"p=u. rW!6*"W&gX7p'D]^&>\Ke+*,#ee>HVF'2!m-lj$6$3gkO)^S'fJ@GKl!8@GP#O&!m.g?.Z!r)a#"V)=n 5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^B)4Jrr35CJOL1U"9JVq!"&`.!ZjU%:0DUr[/RfG ^X'rtH<!-W&BXtX!X/i81Lc*>q7d3ZbH-7u67`fOnGigr#nn=0:MYa!rP&W`m/I%bZZ85R!Z2CNj8]Gd %j!Da;.kEfrP&?frr35_TjT>S"Tnes!"&`.!tR+Z9iP\WTDZG/ca]*I8MV4hr;[''!sJrK9m;lt^B`3" QtoDS*sqoHo)K"!%i6HS??i.A^Au@Srs8G1FZTj4!s/N%!!`W8(Eb\@FI)m?&B"MIs7aKh:E1Q<9Nl4[ O088m$dR>Nbcm4G9fOF5"Q'32!.k3&!.k4'!!`ld=ba#e\@)7:#LD8Xa+Ho*"NpcM$Sbh>XL>^JriHL/ Xj>kT`Ig]("T8</!<N<)$SPY:Z+7Z_Y5PI>\\Z%dQ[E:94"VQh%1*4@!YQqJ=`]LpWr9%)^tm\gSQ[TQ oDf+*,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L="Kp;2e&)915oTjo!"/i1"9gPtYkI_F_m00B #I':s/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5PI1]\E#Nm#FIE!!!$#j8]Gg )`q5POJ&\VrN-=?g!@Bk;'u\>!"/f.!s9?8N7@RdcFEeS"/0p.'E\XF!s8E$#6YDK*\UT?ReWuiVLD8Z $3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g#7;P4:hkWNWr9%2Y1(e7WGP'M%j*],Bml&6Wqib(Y-G4. RsJ6s(_-iQ"Tj>WJcLB&JcN:\$N^G7#TZj0kl:\^ao&1GJR:ke'GLu[!<M<_li7Cp"9f&O;jQ_Ks8C(; Wu-Cp73*'V%0Zb5!!!')$kXL@?])P:aM"VPWu%:XDHp%.4"MEj'+G6P"9S`J7;nm3c.2`m$'o-t.hWR- "p"bu!!s>u@$%b8eA/,c's"C0DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp:'G?[9G'bUiU!<Mcl$ipYL +YH]BZ2XI@Y,;/u#Fos5+pS8S!n./E!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#:<)eVnLC)Wr8t+RWhV! 3\)0X!W`?'k5Ykj!WrWY>aaF8oAHYIWsP#);(NS'&-i4:nc0%$%iQcXAX:sJi4>iaWs=Pl3"?/s!s/?# #6u8,:i2;u_"ar8O_I&p"pG,2n,N\/3FIrT`R;HuWsYP;<]CX(&.&F>!W)j%%kq+BYJeo/rMpL-G[<TP ,UXo`2cb0q[D9hhq5Xq%T8eGC>XBbG"p>#0VuVDLJcLB&PlUX\"T],a;hr<hjo_\f*Ws@]"T],a</JQk jo_\f*<Yj4"UHJOJ\C+Bjoihh>;I6"$3Kf!!tIJLh#6@<`GmO:!UTjh#:jZ3rT47;N^46Xo)Jpq'/<^T cMcl.i13OX!TsFe""S,JZ-M>-joabU4pJe&!YebZq;qb&9a^%`"9B90RcFA/"k'T4AJYIJ!8[\Z!=C;\ U#,b1"N,+0#Qa)g"VXR\U;GX^joKH?nc/^n0p27n!eqp#q#Kj`!sgMtaSk6(fo&*,!V$-l"=7NgrT4:@ Q:DYj!W2p$!Y6kaPgoNk#3!IaBLN^=f`6U(JcLB&JcOF'#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/cN"1T )DF6A<bm`p^B20bnG`G%dZ%!@"p=u.!!!$##9c6%8QBGa]`#S^ht-Bt_3/Cp-Qa*7#R1G7!soSZ,tVa" \,F&AgA_*WkbV]<"pG)1p](O&%Mp?R??_q<^Au=Rrs8M6G<6-8!s/N%!!`iP1He93DO179!Q+^4rs-Pp 71oe-!Whlm$3:20*^EIq=`TJ.rP&T`a/4/_4t$ub!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t#nn=0 :MYa!rP&`cm/I%bZZ85R(_-`1!!iT6)(.49Aq%8g^C/iss8LuN?n)?a!s.un$3:/0%P^UN<+U`Tr4`?[ \<18'8MV4hr;[''!sJrK9m;lt^B`3"QtoDS*sqE:#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!'":Q(h 3*LEirP&o]rr<#s`.CDj&KE2S:2GZ^pqI-Na3`5XZ]]-#2$"^%KE-T(JcLB&ZiC==0j074\%&jDXU!2/ f#ND6+9^a*kPthq0j9=5[^rmEXU!2/f#<84+9_WC$ipD3":m\=ZgI&9_63a=%D0H_R<)+Y)%-`U"p>&- !XBAf6<eSkTrS'n#Jf0Kc(/#i$hOE*%3mr5Ck\CZXfVr4Xg-X9dC=$S('442#8&q(O05t'[Jd35Y1;@W _f\6a!Up's!WrQ/12X8ho\IEirN-=/OC'OI#Qt4X!;HO!"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01TJt Oef/YXUDero(MF16k97t!<M6]#Qko#;/h5WWiZ0$$,+m4\qWs+#QOkq!"/f.!Wj-4N7@RdcFEeS#GH?2 'F=pF!rW*(":Gnb03<FfpoOduISLgh"p4qr!!`uY4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-X7 f%J?[F$L`L%O*c'A:9]@pT=G##Fp$6,o-sp"/l3O!.k3&!0mNm!!39,#TZj0kl:\^ao&1GJR:ke'GLu[ !<LRJ$N^G7#TZj0lMpn_ao&1VJR:hd'GLu[!<E0#!sfJV-qnlhs7Y6RWr8t$Q$$:s1Bo?N&IJgJ"TAK/ !WsN5DkXeeeblHSQ=WfA&eto]!<Mlo#8B+)OL3$W_#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\t2? Vfu?0'GV5f!s&Go!"8l7'd52.I^/nGbc[iBWsGbrG#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p(["7Q9r #:<)eVnLC)Wr8t(RWhV!3\)0X!WiB(!Tj@h!<E<N;2)g7iS1C2WsP)-;D&q/&I/=;nc0%$%iQ`VAsV'K i4>iaWs=Pl3"?/s!s/?##6u8,:i2;u_"ar8O_I&p"pG,2rW)Ni#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H" !!a#g=Ga6"e&D9d&>jSS4qnkQ'FPpC>D&WX`OYfF%'$5$TUC(-2@p0!!s7?[JcLB&JcLB&ec5jS%kCS6 `;Ja"XB?SH`;g&B%kCV9`;\m&k2raJ*<Ym5"p6,MH`#*MrT46pCGHG'nGiY&5)7qljoiYC0*hUG!!<HV D9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVhm?\3:,4!!3j:b5(0$bY8H?!:Kmj!>\7q j8J*Dd]\R?(B`@k"9fiCR,.`'"N,+0#m'2h"VXR\U;GX^jo]TA!!)Wk!Wt0>puVX4,6?s-!sgMtaSk6( fo&*,!V$-l"=7NgrT47?QUqklq#CL&05nu.jp'o%e]"sl'E%o_!.k3&!.k3X!!``I0KV^'CQA>-!:^!f #L\T-)[6EI!U'OI!!``I0KV^(CQA>-!:^!f,gqZI)[6EH!<<-$!spGK:/bVOR(gAP_Sba,h8c:28L+fR "p4`'#QY/B)C7sfJ@GKl!8@GP#O&!n/-c=\!r)a%"V)=n5$iH'^V9ib^W6?R#lD5X3sl,n!Wi6"#7;M. 4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C(^B`**VKu6+-kOi-p](O#"UGAi@YUrZ^Bi', XFXPA///-T!!iW4'-/T!CPTV%^C/?Rrr<#)E]tZa%L(nn#QY8I,:uW%J%,Bk!8@GP"luLh/ID[_"9S2q $NU;1";<^j;-@dmU\qk3ca]*I8MV4hr;[''!sJrK9m;lt^B`3"QtoDS*sqE:#6bVS,<fFYT`)V*aSu2F q7(Q/#R(;3!W<!'":Q(h3*LEirP&BNrVlg-_gOf\#n@Ub2HtKiVm!\DpqI3ib-@"D9.pqa"Tne,!.k3& !.k39!;lg%$Sbe=XLG^Ir2g4MhU]`"80A&Y!!`ld>)',e]!_I<#LD8X`Ig]("T8<8!<WK0'M3tup[-GA Xfek3Z,X8AG#8;o('OR:r;[*)'IlISG)W,prN-=?h:^&D=tC$Q!!`rX4&]sLS>uOi#dN.>dC=$S('442 #8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEiriHI.Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.r BJ^)%"9S&m#Qtqs7q-e,UosZu#e\p_p?[f-%fcY2!<M6]#Qkkt9PK!AVQ9Zt#J\p=_i[nH$1Ip&!WrQ/ )c;UBo\mp#r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!r`2k!!`uY4B-0QS>uOi#I3(=dC!aL (&.b6$6M6(C4hqSrN-a:f\P#nF[-fG"VW+;9l#KTVlQlmXUD:pC-sKl%g<(;!<M3\JcLB&JcLB&g].]` "9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5d/XOU"9f&O;jQ_Ks8C(=X!t*MJR:hd'GLu[!<E0#":Z.k2-YsW s5h%qWiE"oUkWVZ0H_2C"Tnf,qu?s(*^jq?]$/_&Ws=r%:+Hql%gW(7pAbF42dh`S`mhg&WtV4G<]CX) &IJU@!<<*$"9o,Y>bh;u!VX;,Ws#>E><`f*'bUiU!<Mcl$ipYL+YH]BZ2XI@Y,;/u#Fos5+pS8S!m1KJ &h$+QJ"jK]q5XaqI9%d&"U"r,!:p0r#:<)eVnLC)Wr8t+RWhV!3\)0X!W`?'j8]Df,"m6haOf5FWsY/. <&5R:'F=gA!V6:!"VDb+6u/4Ap<p=Gr2TpX@Q4i"#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=- OL)pS^&=u=Tl!gi&/,T]!s&H"!!a#g=Ga6"e&D9d'W,qT4qeYD$3Uni6XYM:ZGX2XWi>co"cI+f,8^sq #m:;2!<IuVJcLB&JcN(V"T],a;hr<hjo_\f*Wt=#jo>Pc%kCV9`;Ja"XB?PGo)K7/6%,?;f&c#SiS^J+ )?]I/!t[YOh#6@<`GmO:!UTjj#:jZ3k2lm1k1bn^&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVhm? \3:,B!:p0l'NiNRjoWb$$KhBl!>\7qj8J*Dd]\R?(B`@k"9KH4PMQ3""N>L?$j$8+li72*=-0Q*g\g17 E>nBJ!Wt0>puVX4,6?s-!sgMtaSk6(fo&*,!V$-l"=7NgrT47?QqA+pp](L16C#dGgYhkh!f/T;UB#lG JcLB&PlU^^#6u/$4%3.bNr6WlnG`FmdZ%$A"p>#/cN"1T)DF6A<bm`n^B!d&ruKOI:)aB?!W`9%!s8uh ;d*^XMke#'`5p6ph8H1A#$j8/$3gV7r;[*(#7qb!8S3L^rP&?drr35eV.2(_"p4r%!!`Z;(F)+MGF\WH !6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C)^BhU#a/4/_ 4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$LV<Z$#gVf9s8TEG4sC%F%L(nn#QY5H+Y6<! J@GKl!8%5M#Ong/1Csou"7uR$!<WN2)F@V3E.jFXr4`K_\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/ $2sqr!!`Z<(F)+MGbG#M!6G0>#l1uQ3sYul!Wi6"#6YGO+?3PHQMnQ!_u9T7&&`oa&./gU&1:(^H\R]V [.qBDf$q^GP&3lH*u,.cirFZ2JcLB&JcOF'#7E7hL9.ko[J[-3ced6nK1I*fb5_bT0j9=5[^rmGXU2,3 ced6lK1I*fr;[`;"UPVX9n^:If>P,"Yd1^MdAVLo1`m51!<N&t#QbYg6<SAfTrS'n#Jf0Kc(/#h$M4<' %3mr5Ck\CZrN-@1gYC2dD)rF5q#CX33+7lN\%9!GXTYfWh:'7DF[6rIn,Ngt!sAc_D6Wa+h8?MrXTu(l ?RuTk"9Q^G#6k\V,XQ.$VYR>!ZBT#Z$O6e9rW)Ni#Qtqs7q-e,UosZu$bY6bp?[f-%fcS1!TX4d!u<O] A:9W:X8T..^>e,)Y[oQu!<<*#oDf7$"Ubqk=H:M\cG$X_XTP8@7MGq2"Tni)!!`W7'HSo/H(+N1#GurF )[ZcO!q60p%O4)8D24X]rN-=0gtU5aCH*((!!`iQ3)F@BRB$4f'<g'Ee&$5m)$0mK(F1t>Dhj[QVY@1r YbR.p;E4n*%L3.>!Jg`-!.k3&!4W":!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!TjCK!"/i2"UH,IQKnMM rQ4u<-\5Vn*>B1s"T\W(!!NrV01BW@_VrG:VlHSeS=4V/6mWZ^$3UD2!W2p&"!9pLTtAS"r2U0jAPO`g 'b:NN!<Mop#o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsYbK><`f:&de^A!V6:" !=9Ja/lR5(rq=R=VZ!P#S9@[P#6b53dfB.C#8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*,rMp<p G>Ujk.i\ou!<N;_!!`WO9RO7ig"uY-$(5F+4Wkd\$3L>0!V6:!"rJaL<.(Ffd(69Sr2U'\@Q4i&"Tnf( !!``L2,J.OYe^%7#E`^c'F"^D!q60p(-,caZc1A+rMp:!D,rV-'+bHP!<N&t#7iLjM6FkH`VlhOVK5p) ',;,f":Q;'6X4r'Z,4AlXn\q)Q$["84=CsO!sA]-X8mhPJcLB&PlUX\"T],a;hr<hjo_\f*Ws@]"T],a </JQkjo_\f*<Ym5%i&-=\BWdiiSN89JMdf8!:^$k%R#U&rT47%EA%Rum/R4n.rE?*jojG!5nO.h!!NE; 0jBjerT47@SP0h#k5Y\g.r(0NcJecb"6R*W#/C3?'NiNRjoWb$$KhBl!>\7qj8J*Dd]\R?(BaX:h#IQZ (IsYErT47)JjU@XkPtef,B'a%e)1)c!HB%K!!36WOne&?L*H`p!:Kmi#VL&:rT479Ma.gSnGiXo-"=Ia jojS/8eqI&!!WK?7!+g/gA'e5W*:VV!Sd[,!.k3&!.k4'!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N #9#9X7942arkANL^[V7&,gqZI)[6EH!<E6("VEn(C5%\=ZG+9!eD9fBX+OkN/JJ?k!Wi6"#QY/A(aMXa K"(]n!8@GP#O/*q/dV^b!r)a#"V)=n5$iH'rP&?Qrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^B)4Jrr35C JOL1U"9JVq!"&`.!ZjU%:0DUr[/I`Ecc;o/<B_fBaoDYJ"UGAi@YUrZ^C&3.XFXPA///*b!:p0r!XTM\ .o0r9^&>\RcKtQ1s0H`0+rCdnj8]Gd#SS:/94ra`rP&`grVuoqY\lE9&.&L3!"/i3#RqtPAo!6gUU9s6 "4+K>@fo:X)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("n,N[s%i6HS??i.A^Au@Srs8G1FZTj4!s/N%!!`W8 (Eb\@FI)m?!Q4m8rt!%t6kKb5#mqP*93lC`NN)]f"k)&QcEr`<D+ur8'aBHoJcLB&JcN.X#7E7hL9.ko [J[-3ced6nK1I*fj8eBD#7E7iL9.hp[J[-3ced6lK1I*fr;[c=#7VCp;Ll*u_RQnRZF@]pes^20*>&PY !!!&t!!iW>-U:aSMP$pIXTuYtg!-'k/.2"L#n8+@;f%/XWi`B1Xf\k_gsNWK3Yhbl!!a)q@?7S#]!_L= #d2_6e&-;o)ZfF.$N^D5"Ysr!p@R1YZ2Ld0Y`N3C$jZt;dfB.C#6k\V,XQ.$VYR>!ZBT#Z$O6e9n,N^s (GA9fHBG#+rN-I?g[b()N^OBX!!*,]!!iZB/k0;qO/&cSXU2]&m-2i@4:_Dm!!2Zk$NpkP*Aq8a^W*sq Z2C^/Tm&s?#mCD4r;['*$PXX8=*^80XTt_P:)aNE!s7rl#7_t@<,ID\Wr9%)Z/"*][;.`:p](O++#m)3 K:/b<XV@tkh:'5`58XD&"q21k4]cNPOJ&QIXUDD;V3lO22]<,3"Tth+JcLB&JcM&9$ig>3"UH,IQK\AK rlP)=$%ZGQ*>B1s"T\YO!"/i2"UH,IQKnMMrQ4u<+b<uh*>B1s"T\W(!!O,d4]Ha"_RZhJV5g;[Q]5c] 3u\V3$3p\7!W)j%"!9sNU:SV$r2U0jAPO`g'b:NN!<Mop#8B+)OL3$W_#:;IU2O'l&/5]`!s&E&!!39- #UWfOrr3#m^\t2?Vfu?0'GV5f!s&Go!"8l7'd52.I^/nGbc[iBWsGbrG#':e"U"nL!!a,b6X>29\[D76 #GZ]J.0p(["7Q9r#:<)eVnLC)Wr8t(RWhV!3\)0X!WiB(!TX4c"<pQf[`dF`r2U3oAQ(oA+;Y@e!s/Mq !"0)P1.Yu5X2qTHVl'Bm#E*%N%L3.>!W<!'#9>ZuD32!;po=X^Bg<@:"U"o+!:p0q(-,caZc1A+rMp:! D,rV-'+bHP!<N&t#7iLjM6FkH`VlhOVK5p)',;/g":,SZ-TbCSS$ToK[eQm2TT4M?>=0eK#6Y/2irFZ2 JcLB&JcO@%"T],a;hr<hjo_\f*Ws@]"T],a</JQmjoso0XB?PGoDf@%*c/a?g#1uLfZV'>+Tq05!tIGJ h#6@<`GmO:!UTjh#:jZ3rT47;N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe""S,JZ-M>,joW%V#/C3?'NiNR joWb$$Ma\j!!E<<8Xe]<jos2:Me*\,g&M6V'h+5?rT47-PZTF@kPtei0o='&gYr(m"*#4Z!;$6m"#5r5 joU8^!TsFb#VL&:rT479Ma.gSnGiXo-"=IajojS/8eqI%!!NE;1L$*hpuVb!P%$Qi!eLE(!.k3&!42_2 #9#9X79+,`r4`7$rr35ONDCJt"9S\g!9aCf#9#9X7942ar4`7$rr47lND:Ds"9JT)!sAiD7V[@JY-bdT `R3Z5o"U>s7ku.o!WiB'r;[*(#7q[q7qR:\rP&?drr35fVIV=e"p>#&!!rf=(F)+MGFZF_!l)Ljrr39$ ]6?=D"Tnf,r;['0*]#rM=`0Q(^B)4Jrr35CJOL1U"9JVq!"&`.!ZjU%:0DUr[/I`Ecc;o/<B_fBdfB.C #6G&7#W#qEX80L9bfd)=>!abS!V$-q!XTM\.o0r9^&>\RcKtQ1s0H`0+rCdnj8]Gd#nn=-8nNR^rP&BY pAY'p\8skS'EJUGoDf7$#7M1n<H<\kZF7CC^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("n,N[s %i6HS??i.A^Au@Srs8G1FZTj4!s/N%!!`W8(Eb\@FI)m?!Q4m8rt!)!7M?+6"U,8O.QUCAK;&(T$c($9 e]kIaCelu3$*4,Y!.k3&!0mQ^!!`ld=ba#e\@)7:#LD8Xa+Ho*"NpcM$Sbh>XL>^Jr2g4MhU]Yu80A'6 !#5VD'-/`,IAXHZZ*1:9^X1igN)(H$!sSi/!Vud%!YZnF<H*efWr9%)^tm\gSQ[QOoDf+*,<Jh?Kq,1A XU)2dgsNWK3Yhbl!!a)q@?7S#]!_L=#d2_6e&-;o)ZfF.$N^D5"Ysr!p@R1YZ2Uj2Xg!mo/.;de!m1KJ "qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01TJtOef/YXU)Soo(MF16k98!!!*,]!!iW@/OWohO.r]RXU;Z! o^h7)7M5\$!V6:!"V;_+6t_I`['Hp=r2g3tG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!r`2k!!`uY 4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-d;f\P#nF[$ZC!<NB.&gf\<BRlDIpT4e-ZEKgD:FR%g #6WudJcLB&JcLB&g].]`"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5d/XOU"9f&O;jQ_Ks8C(=X!XmJJR:hd 'GLu[!<E0#"r]3fAr<V*Vkp8iX.Yi9EaMHm&-W4?"8Mp%"!:!PUV"h'r2U0jAPO`g'bCTO!<Mop#8B+) OL3$W_#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\t29Vfu?0'Eo3a$3L;0o)K1"#o+U9;gu"Np<9\: rMp0nG#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p(["9&;l!!ifV96R5HcI8flWsbA?;+EYt*")fK!Wh?^ #6Z8HIC@ATir#hbRqb_c/g(u=!s8T*oDf7,,!/kMS$^#/V5L<jWrn8h3"?#q"Tnf(!!``L2,J.OYe^%7 #E`^c'F"^D!q60p(-,caZc1A+rMp:!D,rV-'+bHP!<N&t#7iLjM6FkH`VlhOVK5p)',;/h"9eu:%37K5 I\=$`]D/E1Vk]]GH!(;2'F>!H!f-i.!.k3&!3uS.!=p\ZLW',Q"0>WH"5j1A!!NB6.o_ADr8n*_=WIV: !"AuZKBjQ>:E]W=[;mJm=u4,)JgjoiYC0*hUG!!NTXD9(f$#3P(&N^46Xo)Jpq'/<^TcMcl.i13OX !TsFe""S,JZ-M>,joW%V#0m5?!!3j:b5(0$bY8H-!!E<<8Xe]<jos2:Me*\,g&M6V'17c8rT4:3U2NF. !W<#c!!WitU>=bejS\-@E>nBJ!Wt0>puVX4,6?s-!sgMtaSk6(fo&*,!V$-l"=7NgrT47?QqA+po`,($ 0PnJujp'Vb\tr1:!N,pL!.k3&!0mQ^!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N#9#9X7942ar4`7$ rr3MWND:Ds"9JT)!sJoG96??p^Bhj/jR_fJJP\9,-5Hg]!!iT1&/uofAq7Ah^B!!ers7hbA1n8o"Te`# !!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'W Ef@C)^BhU#a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$LV<Z$#gVf9s8TEG4sC%F %L(nn#QY2C)^S*hJ@GKl!R'g.rs$;i9I_(s#lXl%!"/f.!WrW<(aD4RI[p2J#LBoB@nAEp#5nN,!<WK2 )GPF@pqI'^]U3J/2BN8)!:p0q"V2Co5$iK,rP&?Rrr39"\90k="Tnf,r;['*$l:$G>'-)/^B)7Nrr3YN JO^C["Tnc.$5+45>'H(5\@TBK^C/]<ZB&fr0G=Tm!WhHaJcLB&JcLB&fDl-a0j074\%&jDXU!2/f#ND6 +9]jf#7E7iL9.hp[Jm97Xf]q+f#<84+9_WC#6YDN+u<AKRf'8q[)1;Oe:U."!Wi?'q#C[%'.H1KEJgEh rN-=>hq6,A=Y'pZ!<*#q!!`rX4&]sLS>uOi#dN.>dC=$S('442#8&q(O05t'[Jd31Y1;@W_ZP$I)ZfF. $N^D5"Ysr!p@R1YZ2Ld0Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.rBJ^)%"9SQ&o)K%!(GA9fHBG#+rN-I? g[b()N^OBX!!*,]!!iW?.mdH^N1m<NXTuDjoChdJ;&T?6!!;oq$NU;2":Q5#5#uccV>..pTm&s?!so,5 !rW*(":Gnb03<FfpoOduISLgh"p4qr!!`uY4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-@/f\P#n F[$ZCr;[00(+)%<D2FpeWiPlr!O.gmDF#Zh%L)h5!!/#YJcLB&JcN:\$N^G7#TZj0kl:\^ao&1GJR:ke 'GLu[!<M<_li7Cp"9f&O;jQ_Ks8C(;WtU%k73*'V%0Zb5!!!6E2H+R[Z,?L?$_E]<C0F"P#m(/.!W)j' !<E<I8p@DUf%p8)%$kF!/.iX/#6Fo,!!2lq#o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u !VX;,WsYbK><`f:&de^A!V6:"!=9Ja/lR5(rq=R=VZ!P#S9@[P#6b53dfB.C#8/FP?%8TZ[J?j.UO?/l #R(>5n,N_!-;/N[^!>*,rMp<pG>Ujk.i\ou!<N;_!!`WP974(ggYr(2$(H6:76`1A%gN4<!s/2t$ipD3 "9fGj95KZe]YF6B#E*%N%L3.>!W<!'#9>ZuD32!;po=X^Bg<@:"U"nr!!a9"@$%_6d_5U[$DD<;3"Q`7 #m12/qZ$j30Na18`7)^(Wu.^T>!<T7'+>$G!<E0/,XGdgS[6/:XJr2oWsXl'9-b/[#m:;2!NuKT!.k3& !0mQ\!!NB6.oV5Ar8n*_=WR[a!!NB6.o_ADr8n*_=WIV:!!36WO8S,Dgrm4)5R[PknGiY&5)A"mjoiYA /dMLF!!<HVD9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVqsAk.!SZ^]4EM=N^I%!mF@G k5YVc(.jtTrT4:3YDZs."9&;V!!E<75`=Isjos>@L0u&*l2Unf**0KBjoKH?nc/^n0p27n!eqp#q#Kj` !sgMtaSk6(fo&*,!V$-l"=7NgrT47?QqA+poDf(-7$cHZhVn7l!gbhPh>i--JcLB&JcOF'#6u/$4%3.b Nr6WlnG`FmdZ%$A"p>#/cN"1T)DF6A<bm`p^B20bnG`FudZ%!@"p=u.!<WK2(JAk5r4`WXbh2"B\;"$H .MrEd!!iT4(*tV.BS!Si^B!!ers.\]@Oq`g"9\T'qu?s*%Mp?R??_q<^Au=Rrs8M6G<6-8!s/N%!!`iP 1He93DO179!Q+^4rs-Pp71oe-!Whlm$3:20*^EIq=`TJ.rP&T`a/4/_4t$ub!!`Q/#RE4qL9(-b$I$\p JQbAk'EJ16o)K$t#nn=0:MYa!rP&`cm/I%bZZ85R(_-`1!!iT0&K)leBS*_l^CSB@o`+s:RVG;K+qOhX !Wi3!$N^J:$5P$P:LJF(V>.e-ca]*I"%b6e#5nN,!<WK2)GPF@pqI'^]U3J/2BN7p!!`Z<(F)+MGbG#M !6G0>#l1uQ3sYul!Wi6"#6YGO+?3PHQMnQ!_u9T7'?,Jk'*e[C!<NH5'.-:^HA%?NZ1u'7e^OoFZ'&rt 0-(]6"H3>4!.k3&!42_2$Sbe=XLG^Ir2g4MhU]`"80A&r!9aCf$Sbh>XL>^Jr2g4MhU]Yu80A'6!!`W8 (*PG9HCFc6$aR@ae'3P:'*JC=!r2g%!Ym@YA9s?4WVrq0^YRG\Pu]=?!!!$$!s/N)qu@$4,<Jh?Kq,0F XU;24Z.n']\8=8B!Vl^#&NF3[Y.)!MrN-@.e_S]lF[6rIn,Ngt!sAc_D6Wa+h8?MrXTu(l?RuTk"9R$P p](O'%iHWZB8WS^XTu.rBJ^)%"9S&m#Qtqs7q-e,UosZu$bY6bp?[f-%fcS1!TX4d!Yd"F<cEkeX8T., [ER\'oVl=M$O-V7!r)a'!sT,D*\g2kEeTmZpoOdpG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!q60p %O4)8D24X]rN-=0gtU5aCH*((!!`iQ3)F@BRB$4f#d;n:e&$5l(BOI7$O%(\-9G:LMOgNBXSAn*YbI"k :cBU0"pG)1YQ07TJcLB&PlM3m!X&Z4*E/9fs8W)?r2U-T?Uc%M'Fb3H!RUlT!X&Z4*E/9hs8W&>r2UK^ ?UYtL'Fb3H!<<*(*&^Z4PH_t&WsGDfP_<UA/.2OY!W2p*!WiH//6ItThsfj3rMp3iAkjfh'b:QNquZm! qu?s92dh`S`mhg&WtV4G<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsYbK><`f:&de^A!V6:"!=9Ja/lR5( rq=R=VZ*V%X.4?/+pS8S!m1KJ&h$+QJ"jK]q5XaqI9%d&"U"qs!!ifV96R5HcI8flWsG/<;+EYt*")fL !<N;_!!`TL89LlIdb+Ju$_<8j:/O50*"<5Y"T/61!<E6'"q;7d/P9c;VmsXTpo=XX@Q4i&"Tnf(!!``L 2,J.OYe^%7#E`^c'F"^D!r`2k!!a9"@$%_6d_5U[$DD<;3"Q`7#m12/qZ$j30Na18`7)^(Wu.^T>!<T7 '+>!E!<<**)(\*YHC2"Xah4hPWs>&AA4eg0((1$C!!;<`JcLB&JcLB&ec5jS%kCS6`;Ja"XB?SH`;g&B %kCV9`;\m&k2raJ*<Yp6!Wt-;r8n1>eAf!p&FTT%!Z=Olh#6@<`G[:4!UTjh#:jZ3rT47;N^46Xo)Jpq '/<^TcMcl.i13OX!TsFe""S,JZ-M>,joW%V#/C3?'NiNRjoWb$$Ma\j!!E<<8Xe]<jos2:Me*\,f`2*b 4c/"njp'SUUkCiB!UKdh"WB^S`VAQtE>efWoDepp0p27n!eqp#k5YSi/oSi0joj@q5S*td!!<?M@_2O# "Q,S=('4%-"p,T3J=s^2puVU^?NDJZKE-T(JcLB&ZiC=9)DF6A<GRWm^B!d&rs-u3:E'K@!s.TckPthm )DF6A<bm`n^B!d&rt!P;:)aB?!W`<("UGr<FHcX;$c9p-eDn-!><jbZ#Pe?*!=g,%2c=@A[f*r@h#@<] jJ$$2"U,#3!WiB'qu@$,%Mp?R??_pS^B20ba8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&BMqYpL"`dpPk "p=u.o)K*u!WjE.:/4r4N3rPu#LCGfH<!-W&CUXS!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*@jp$ LV<Z$$dS,<s8TEG4sCgR"loXh!=',P,"ZI$\c'8L`6[?0rnOi<B1rIb)?g6G!W2p*!s];L-Uh<\IYX5l pqI'[\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39"\90k="Tnf,r;['* $l:$G>'-)/^B)7Nrr3YMJ41(U"Tnc,"U>DO1/2+lHAeZq^C/EBe]bC`DG)i5('h&DJcLB&JcM&9qu?s0 0j074\%&jDXU!2/f#ND6+9]jf#7E7iL9.hp[J[-3ced6lK1I*fr;['*$Pjj>=F-A4XU)/<]#)=:8J_R4 "9S`$!!iWB1f/(DQ_pe]XUi8$d__)E.1-%U!WrQ-!Wr9"#7Vn>;f%/XWr9%*Z.n']\8=8B!Vl^#&NF3[ Y.)!MrN-@.e_S]lF[6rIn,Ngt!sAc_D6Wa+h8?MsXU)&5OC'OI#Qt4O!!`]=)'hO]MPg3O#I9S-1^aNk !q60q";`^]@X=04Y5PI.]\E#Nm#FIE!!3-$!TX4d!YQhB;/V)YWr9%-ZG+W@n??q!*>&PZp]([*$l'm> 8n*.)R%gVUXTtPD7MH.4!s8E$#6YDK*\UT?ReWuiVLD8Z$3gS6rW)Ni#7_t@<,ID\Wr9%)Z/"*][;.`: p](O++#m)3K:/b<XU),_h:'5`58XG"!"/o9&/Q]X>&f:\TW%Xf$a[+5PB^4i*=W;Z"6TZ9!.k3&!.k4+ !"/i2"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\YO!"/i2"UH,IQKnMMrQ5&>'s"Bd?UYtL'Fb3H!<<*(*B$c3 P-Dh$WsbbqR[8%r1(+0c!Wi6"$ipD4"Um8%VX+9\m]HGg$^>:!-kmF,"p"c,"9&?%!W2p&'K9E][)UV2 rMpU+DcSh/'G1ZS!<E0#!X&]5-=!>FrrMi.rMp(!G?[9G"VhXW!s&Go!"8l7'd52.I^/nGbc[iAWs>/< :Eg#I"9Q^G#8/FP?%8TZ[J?j.UO?/l#R(>5rW)Ni#R;\LG,N%!e#NAI$^u9:7li.?$N^>1!TX4c"!C!K S[cnpr2U:%R>Z)o;F2fI&./UB!WE'0!<N<)$lUQR:2>Z`]>DLmpo=LT@Q4i"#6b21r;['-*ApZ1OKcOq Ws=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!!a#g=Ga6"e&D9d(oD@X4qeYE$NpJ2!!!04 )CIULH_A!haLV)H!MPGYHu3"R.1lae"9OM^JcLB&JcN(V"T],a;hr<hjo_\f*Wt=#jo>Pc%kCV9`;Ja" XB?PGoDepp0TH"m"l\7db@DFX!!ENO;OQA>joiS<.gH+B!!NTXD9(f$#3P(&N^46Xo)Jpq'/<^TcMcl. i13OX!TsFe""S,JZ-M>,joW%V#0m5?!!3j:b5(0$bY8H-!!E<<8Xe]<jos2:Me*\,f`2*_3/$)cjp'_i ^8tup#Q=_m!!N]Z;L,7kpuVTs)Y*k0"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGiXo-"=IajojS/8eqI! !!NH?3FS,npuVb%OBjdZ!ic6P!.k3&!0mQ^!!``I0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N#9#9X7942a r4`7$rr3MWND:Ds"9JT)!sJrI96HHr^BhZm`5^NCO^UZ[0cLDo!!iW<+uDMcCPB4q^CT-"s8M#N?RGsZ "U"o0!Wi3!#6bSR,<fFXSGg2&a8Z)Eqn%&6$3^M5!W<!'$6Cud86KhrrP&BMqYpL"`dpPk"p=u.o)K*u !WjE.:/4r4N3rT!#f"^+VKu6+-kON$#6G&7#W#qEX80L9bfd)=>!abS!V$-q!XTM\.o0r9^&>\OcKtQ1 s0H`0+p&Sk"loXh!=')N+A$:"\c'8R_8OIAo]=5tMI]'u#R1D5qu@*.$l'dD>'GmjTrYa!^B`)pO^gs< )[?6@#6=o1#T?E]Q2&*!d_(r_9f=("rW)Ni#6bVS,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!'":Q(h3*LEi rP&BNrVlg1`.(/e"p=u.!<N?,$QCW[:MG<IpqI3PcILXn[$#9$3$A^n!.k3&!.k3&!8%8V$Sbe=XLG^I r2g4MhU]`"80A&Y!!`ld>)',e]!_O>$*C>UhU]Yu80A'6!!`W7'HSo.GaSE2$a6e?['kW^*!lfP"8Mp& !ua1'I#X\qX8T.2^t?uHMGYc/!!*0*"U"o/qu?s2,<Jh?Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L= "Kp;2e&)915oTjo!"/i1"9gPtYkI_F_m00B#I':s/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r ";`^]@X=04Y5PI1]\E#Nm#FIE!!!$#j8]Ge&0s2-C4r+WrN-I2ZF@R#Z\;O=+V"YM!"0#F+>62nH^1>( WiYut"/0p.'E\XF!s8E$#6YDK*\UT?ReWuiVLD8Z$3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g#7;P4 :hkWNWr9%*YLq[[_KA'[!W<!+!X&]6'.H.JD1e4RpoOS"YR.Y>SU"*a((LTPMu\G0JcLB&\,Zm<"9f&O ;jQYIs8L.<WsO>a7NE0W%0Zb5joF`J$N^G7#TZj0lMpn_ao&1QJR:hd'GLu[!<E0#"roKsCltp<r2U4( V5'W3?8rAr!s/N%!!`N,"UGZ(GeX1W!U-W`WsP#':+-el%L)q8r<*'$qu@$;2dh`S`mhf)Wth\9U2O'l &/5]`!s&E&!!39-#UWfOrr3#m^\t2?Vfu?0'GV5f!s&Go!"8l7'd52.I^/nGbc[iAWs>/<:Eg#I"9R$P p](O3-pq9iU:I]-Ws>DJ<[e:X"9\,n#R;\LG,N%!e#NAI$^u9:7li.?$N^>1!TX4c"!0^?PHMmOr2U.% TpqHtB2CE,(D[Pd!W`<%!!*-("VW7I<cF(s]#;4fWVEM!MdeXU#6b21r;['-*ApZ1OKcOqWs=c$5SOD+ "9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!!a#g=Ga6"e&D9d(oD@X4qeYE$NpJ2!!!*)$4e1@?A,;h `525L$`9\bNd4hk)$pKL"0_cW!.k3&!0mQ\!!NB6.oV5Ar8n*_=WR[a!!NB6.o_ADr8n*_=WIV:!!36U NVqoBjPf"OG9-Y_o)Jpq%PD%]hYlR=_eLY*li7+m.rE?*jojG!5nO.h!!NE;0jBjerT47@SP0h#k5Y\g .r(0NcJecb"6R*W#/C3?'NiNRjoWb$$KhBl!>\7qj8J*Dd]\R?(BaX:g].E`2M0`_jp0r'f[-0X'E[_' "q*)'WP6g:puVTs)Y*k0"#5r5joU8^!Vl`a!!<KZDohn>"PJ\u&-;;$!sBoZ])Caohj@"O!V-3n!=gl" \+o(igrQ[`:DNuj!.k3&!.k3&!8%8V#9#9X79+,`r4`7$rr35ONDCJt"9S\N!!``I0KV^(CQAD/!l)M> rr3MWND:Ds"9JT)!sT&K96HHn^B`6%RVY_Y+q4GP%06J2"9\oG/Nu^/D25Ot^C]3#s8M#P?mu9b#mq"F "Tnf(!!`Z;(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M.4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D 5Yb'WEf@C(^B`**VKu6+-kON$#6G&7#W#qEX80L;bfd)=>!abS!<<,k!!iW4'-/T!CPTV%^C/?Rrr<#) E]tZa%L(nn#QY,<'H9PVK=1]mr4`WflJKdeJQFT?%LWL>":,/>(EtG(Cknq\^B;flO^eJb1)gGr!!`N, "UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK,rP&?Rrr39"\90k="Tnf,r;['*$l:$G>'-)/^B)7Nrr35A ImXbO"9JW&!"/l8&K*6$F,mfB]=n'U%DT[0ca8aK9e[4_!W`=`!.k3&!.k3X!!`ld=ba#e\@)7:#LD8X a+Ho*"QTRH!!`ld>)',e]!_I<#LD8X`Ig]("T8<*":Gk`/ld.`poOe%LKGi7$jHh3!Xf)4"9fu9AVc_M X/c-#&&?fC]S]T:%fuk;#R^k@"8i-*%3mr5Ck\CZXfVr4Xg-X9dC=$S('442#8&q(O05t'[Jd35Y1;@W _f\6a!Up's!WrQ/12X8ho\IEirN-=/OC'OI#Qt4X!;HO!"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01TJt Oef/YXUDero(MF16k97t!<M6]#QbM[1e)&-R]Q=e"gkP$F\spr*!lZF!riB%":#GY0g]/iOf.iR#GH?2 'F=pF!rW*(":Gnb03<FfpoOduISLgh"p4qr!!`uY4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-@/ f\P#nF[$`Fq#Cd,(+MIIEJgHkXf\c$XUDJ'E'klf%0Ze7!<KP-JcLB&JcM&9$ig>3"UH,IQK\AKrlP)= $%ZGQ*>B1s"T\YO!"/i2"UH,IQKnMMrQ4u<'7jLZ*>B1s"T\W(!!XE":MZ#n_YC/7O(LQf"TJT%!XAf3 $kO@QNRe%.!TC-YWsFr':F[2#&d\a?"9&B"!!a2s@$%b8eA2$`';BDG3"Qc9$3L;0!!!''"pcP\U]18o p:pR,$E&)P584hF$3L;0o)K1"#o+U9;gu"Np<9\:ri6=*S9@[P#6b53aoDYZ-pq9iU:I]-Ws>DJ<[e:X "9\,n#R;\LG,N%!e#NAI#b#s77li.?$N^A1!Wh?^#Ql&-?A>;gb,kTBr2U-rHs]/h+W(Xm"o\W4"U58A *]R2EQEIs3oW&4T@Q4i&"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!r`2k!!a9"@$%_6d_5U[$DD<;3"Q`7 #m12/qZ$j30Na18`7)^(WsY_F>!<T7'+4pD!W)j%#p_lMMl=;.ri#mtpo=X`E(hPg$O6h6!U9Z:!.k3& !.k4%!!NB6.oV5Ar8n*_=WR[a!!NB6.o_ADroOCHk,_]+"7uQp"##Z/joUGf!V$-n#9#aAX5Em<"N,%+ #6F2l!s^>na8P-'gQ"Q3!V69p!Y[:mPKs-h"Q5hE(BN\!"p6AjOKm*irT40k4pJe&!YebZq;qb&9a^[r mf3Ik(.jtTrT4:3YDZs."5*YV#;U_^roO(?"3G:-#k.fr"Xn-*o]?6q)?9d0!!36WOne&?L*H`^!!<KZ Dohn>"PJ\u&-;;$!sBoZ])Caohj@"O!Up'n&k88Ehr*Pkjoji/WBLZE!.k3&!.k3X!!``I0KV^'CQA>- !:^!f#L\T-)[6EI!U'OI!!``I0KV^(CQA>-!:^!f&(6G4)[6EH!<E9+#T$-VPk`!1f[%!mFB:UM'bLoa $P=*o,s"_">A8AG\,F&Aec,Reo<s!8-7gl24Y.Wc!s/N)!!NiK,<fFXSA2f?^V@hgrs8M6G<6-8!s/N% !!`iP1He93DO179!Q+^4rs-Pp71oe-!Whlm$3:20*^EIq=`TJ.rP&T`a/4/_4t$uk!;HO!!X/i81Lc*> q7d3ZbH-7u67`fOnGigr#nn=0:MYa!rP&`cm/I%bZZ85R(_-`1!"8l3#nIb;AUBrQ[^s3O^BMaDkM4.U &qaU]4>J?/,:"Tb1dXr<Bmu/EoY1XW\<18m1)gGr!!`N,"UH#@GEqs<#L^8PCJ?]/$1Ip""V2Co5$iK, rP&?Rrr39"\90k="Tnf,r;['*$l:$G>'-)/^B)7Nrr35AImXbO"9JW&!"/i4$kadTA:'/rTX":,$dmJD Y``is0,YB1"ge8]!.k3&!0mQ^!!`ld=ba#e\@)7:#LD8Xa+Ho*"NpcM$Sbh>XL>^Jr2g4MhU]Yu80A'6 !!`W7'HSo-HC=Q1"LOhN<]^sE)@cuX#mq(S)^6h'@="?:WN*#tXUi)!g<d!B73rTb+!i?U&-r+5#7Vn> ;f%/XWr9%*Z.n']\8=8B!Vl^#&NF3[Y.)!MrN-@.e_S]lF[6rIn,Ngt!sAc_D6Wa+h8?MsXU)&5OC'OI #Qt4O!!`]=)'hO]MPg3O#I9S-1^aNk!q60q";`^]@X=04Y5PI.]\E#Nm#FIE!!3-$!TX4g!Xoqq3Egj& \?`?Br2ggB[]#@5@8&X1,T[g;*$Zsh5"o*hFGQB`oW8@lG=E8Q"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO !r`2k!!`uY4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-@/f\P#nF[$`Fq#Cd+&0<>c>&oIjU8Y0g XUDG2N,)0G+V4h]!s7cgJcLB&JcLB&g].]`"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5d/XOU"9f&O;jQ_K s8C(=Wth\9JR:hd'GLu[!<E0#"rf?mBoT1.po>6nDG)8j&J#0R#mq.U*\'-@G,sg+s81-DrMpKuD-94W 1,:=')A<Sc#6b22r;[':2dh`S`mhg&WtV4G<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,Ws#>E><`f*'bUiU !<Mcl$ipYL+YH]BZ2XI@Y,;/u#Fos5+pS8S!m1KJ&h$+QJ"jK]q5XaqI9%d&"U"r,!:p0r#:<)eVnLC) Wr8t+RWhV!3\)0X!W`?'j8]Sj(G\j-Pcr!/V5L;mrMpd0LN$Ei5r9o,)B0V5+=8Wq7ppY0XLc9XoW&(P @Q4i"#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9S&m#8T=-OL)pS^&=u=Tl!gi&/,T]!s&H"!!a#g=Ga6" e&D9d$DqlJ4qeYE$NpJ2qZ%!.)D=TjJY0O%c+gIYWsu,1Rt"p?1aa(I!sA]-O8sk4JcLB&Z2b%/%kCS6 `;Ja"XB?SHhuMm>"T],a</JQkjo_\f*<Yp6!Wt'6puVXO64NJc"pcA:@ZJ1\rT4:,L.3'd!q$$l#:jZ3 k2lm1k1bn^&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVhm?\3:,B!:p0l'NiNRjoWb$$KhBl!>\7q j8J*Dd]\R?(B`=j#6H2jeDT?Ijo+<FeVm0H%0Q5&"To)U9oIEkjoKH?nc/^n0p27n!eqp#k5YSi/oSi0 joj@q5S*td!!<?M@_2O#"Q,S=('3n)"p,]:NiBqLpuV[k@ODG_!.k3&!.k39!;lg%#9#9X79+,`r4`7$ rr35ONDCJt"9S\N!!``I0KV^(CQA>-!:^!f&(6G4)[6EH!<E9+#8KjRPk_urg#:K!U(_oY4t7g#)&FJL 3_*7\C2eKXT"4g7!RCK>rti_?AP6*7E-YMG*sMiM!W`H7(F)+MGF\WH!6>*=#lD5X3sl,n!Wi6"#7;M. 4\/^nQMnQ!_YX93#KD<`&dAI?!V69u!<N<D5Yb'WEf@C)^BhU#a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJn JQbAk'ER_(#Qb;G*@jp$LV<Z$#gVf9s8TEG4sC%F%L(nn$ipG7$4T%'FGHKi[(Q@P(rPA!khaCcRtPfk ;FF&M;H-t8Dg$\kS@%q'#LBoB@nAEp#5nN,!<WK2)GPF@pqI'^]U3J/2BN8)!:p0q"V2Co5$iK,rP&?R rr39"\90k="Tnf,r;['*$l:$G>'-)/^B)7Nrr35AImXbO"9JW&!"/f2#R_A&:Le?lMP9g[$dI>RbI!FM 9Je"2$0qSC!.k3&!.k4'!!`ld=ba#e\@)7:#LD8Xa+Ho*"NpcM$Sbh>XL>^JriHL/Xj>kT`Ig]("T8<* ":Gnb0NEFepoPCK^8m?5:,Et(',23$.61"(CjqJBWN3/&rN-X?fAkf3Nab:,2F'o32BNA/r;['3,<Jh? Kq,1AXU)2dgsNWK3Yhbl!!a)q@?7S#]!_L="Kp;2e&)915oTjo!"/i1"9gPtYkI_F_m00B#I':s/.;de !m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y,-!:p0r";`^]@X=04Y5PI1]\E#Nm#FIE!!!$#j8]Si#SS:1:jAVP \?rNDrN-m=\@/H0O+DCb<_,8(4AB*uG'SOgMjL./XTP8@7MGq2"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO !q60p%O4)8D24X]rN-=0gtU5aCH*((!!`iQ3)F@BRB$4f#d;n:e&$5l)$9U6$NpbK)_"'WEJBXKW;<V* Xf\t6UQKb'3?JY9"TshdJcLB&JcN:\$N^G7#TZj0kl:\^ao&1GJR:ke'GLu[!<M<_li7Cp"9f&O;jQ_K s8C(;WtU%k73*'V%0Zb5!!!3B1.u5:X2"G1(Qi];3@c?q'bV9!*$dL?BS32&pAasA^AP#DST\@;6qU?R 8NA7=%1<CE!Wi9##o#=+OL3$W^oOLNX/ht5<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,WsYbK><`f:&de^A !V6:"!=9Ja/lR5(rq=R=VZ!P#S9@[P#6b53dfB.C#8/FP?%8TZ[J?j.UO?/l#R(>5n,N_!-;/N[^!>*, rMp<pG>Ujk.i\ou!<N;_!"8oD.mmTmU:e%7VP^BlWs,>aJokU/&l1hN2E<cY6r.'"FGQEh]u7dioW&4T @Q4i&"Tnf(!!``L2,J.OYe^%7#E`^c'F"^D!q60p(-,caZc1A+rMp:!D,rV-'+bHP!<N&t#7iLjM6FkH `VlhEVK5p)',;/g"9AQ#!"/rA*%X<\JYgH8cbK7U$_`T-Bim_Q'F4jF!jhrZ!.k3&!0mQ\!!NB6.oV5A r8n*_=WR[a!!NB6.o_ADr8n*_=WIV:!!36TN;2N<[UCQi!VQL!!Y?hREfm]Tir/!Dd\(57*"rME!!<HV D9)V;"P\r&&HVJ'"Tf>l>EdA2jojV59G[`m!!WNUC65^GiVqsAk.!SZ^]4EM=N^I%!mF@Gk5YVc(.jtT rT4:3YDZs."9&;T!!XBNaP,M0jo+<IgTl3-2BWS9!W)j'!<`cI-ok=XZ.ej4!HB%K!!36WOne&?L*H`p !:Kmi#VL&:rT479Ma.gSnGiXo-"=IajojS/8eqHr!!NHC6"Q;#puVb)P$9XS!p'E6!.k3&!.k4'!!``I 0KV^'CQA>-!:^!f#L\T-)[6EI!RC`N#9#9X7942arkANL^[V7&&(6G4)[6EH!<E6("r'XNPPDm0eF`V3 e#%Rs69-_I,r\@l=(?)mNg69A]`#SbaQ*7!s3[ZpE.smk_MVGK$3gV7!<irL,<fFXSGg2&a8Z)Eqn%&6 $3^M5!W<!'$6Cud86KhrrP&BMqYpL"`dpPk"p=u.o)K*u!WjE.:/4r4N3rPu#LCGfH<!-W&BXtX!X/i8 1Lc*>q7d9\bH-7u67`fO!!)Tj#Qb;G*@jp$LV<Z$$dS,<s8TEG4sCgR"lfRj!<WK110JL@P+StjrP'2c bM21Ck2=n:Y*FHNDK'H(C3+i_R%pdqoY1LS\<18'8MV4hr;[''!sJrK9m;lt^B`3"QtoDS*sqE:#6bVS ,<fFYT`)V*aSu2Fq7(Q/#R(;3!W<!'":Q(h3*LEirP&BNrVlg%`.(,c"p=u.r;[6,!X&Z7*\p,]C4;G^ qnETT^VJ4IfZgdeD,3,9&!-dC!.k3&!42_2$Sbe=XLG^Ir2g4MhU]`"80A&r!9aCf$Sbh>XL>^Jr2g4M hU]Yu80A'6!!`W8'H]&1HCO]3(W,+ig95j#/fc&X+tQ,eEeopMV5gW!Wr/t1Zd%V!jJdE/9NZ([McMPF !W<!)%3mr5Ck\CZXfVr4Xg-X9dC=$S('442#8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEi rN-=/OC'OI#Qt4X!;HO!"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01TJtOef/YXUDero(MF16k97t!<M6] $ipPA'cf_aU!pcdZEF/."g52<\[fNh`5&jJG[F*PG`f&0X/;M^VQ$ZhXTtPD7MH.4!s8E$#6YDK*\UT? ReWuiVLD8Z$3gS6n,N\',<SqBLRbCCXTu,dgX3EE3#22g#7;P4:hkWNWr9%*YLq[[_KA'\!r2g(!X/i< 'e)@JD1RnHpT4e.Z`T[A<%esr#QqF6JcLB&JcM&9$ig>3"UH,IQK\AKrlP)=$%ZGQ*>B1s"T\YO!"/i2 "UH,IQKnMMrQ4u<'7jLZ*>B1s"T\W(!!X;o7q7CT]_JN1QZQS)4;'P(+WV^S/NR$]TubpSo[q9uYl(OA T8@,[=^l>oF'(RO$k<UL!s&E&!#.A"OL3$W_#:;IU2O'l&/5]`!s&E&!!39-#UWfOrr3#m^\t2?Vfu?0 'GV5f!s&Go!"8l7'd52.I^/nGbc[iBWsGbrG#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#:<)e VnLC)Wr8t(RWhV!3\)0X!WiB(!TX4h!Y?P79lQE,`2ol5WVrk7VkTW?JoG*p6qgQ`?#"Y?R\d*o^;@Ig W:[+qMdeXU#6b21r;['-*ApZ1OKcOqWs=c$5SOD+"9SQ&o)K"23FIrT`R;HuWsYP;<]CX(&.&F>!W)j% %kq+BYJeo/rMp:&F':a@'b^rX!<N&t$j-\C'Ho_PNjlsRa/\s9$`BY]MgJeu+:SV\"7#r=!.k3&!.k4% !!NB6.oV5Ar8n*_=WR[a!!NB6.o_ADroOCHk,_]+"7uQp""fH+jork^9dL>Rq#Ca(&19eRM6t7NguSFr $e`(TCIL0*$j6\8!V??o#:jZ3rT47;N^46Xo)Jpq'/<^TcMcl.i13OX!TsFe""S,JZ-M>,joW%V#/C3? 'NiNRjoWb$$Ma\j!!E<<8Xe]<jos2:Me*\,fDl*g<4pZ5i8jk!(uNfTU4co@.N&p/"T\iB-pLR?G`JT5 dbaWY"*#4Z!;$6m"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGiXo-"=IajojS/8eqHq!!NE:2/'2TqrS1H k1mqPKhiNdMZA>/JcLB&ZiC=9)DF6A<GRWm^B!d&rs-u3:E'K@!s.TckPthm)DF6A<bm`n^B!d&rt!P; :)aB?!W`<'!sTE1FHcL7'Zo>/s8UNAG?dp12De$,='0'[Qb<./*lQLdoDd=AQB8?&qu=KY57Rr&!s&Q8 (F)+MGFZF_!l)Ljrr39$]6?=D"Tnf,r;['0*]#rM=`0Q(^B)4Jrr35CJOL1U"9JVq!"&`.!ZjU%:0DUr [/I`Ecc;o/<B_fBdfB.C#6G&7#W#qEX80L9bfd)=>!abS!V$-q!XTM\.o0r9^&>\RcKtQ1s0H`0+rCdn i;a/b!@^oZCl"@T](s)A_q,Ffrr;f9Vi6FYART\9S%$-%^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_ 9f=("n,N[s%i6HS??i.A^Au@Srs8G1FZTj4!s/N%!!`W8(Eb\@FI)m?!Q4m8rs-Jl6P'G)!Wi)s#QkGJ *A:?3N5####f+j7[#f)u0GCenJcLB&JcM&9qu?s00j074\%&jDXU!2/f#ND6+9]jf#7E7iL9.hp[J[-3 ced6lK1I*fr;['*$ksd<<dU>2XTZ,[kk+HVZ#i;^/MAkB?$`'X^V.,OXUqeSdGjf4N,N0NT?#H672c4* !!`rX4&]sLS>uOi#dN.>dC=$S('442#8&q(O05t'[Jd35Y1;@W_f\6a!Up's!WrQ/12X8ho\IEiriHI. Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.rBJ^)%"9S&m#Qtqs7q-e,UosZu#e\p_p?[f-%fcY2!<M6]$ipJ9 $kYU=U#*o)[BKD.&@'73o(VCSK4KS-am7a)\?GD(#GH?2'F=pF!rW*(":Gnb03<FfpoOduISLgh"p4r+ !:p0q%O4)8D24X]rN-=0gtU5aCH*((!!`iQ3)F@BRB$4f#d;n:e&$5l)$9I2#Qthh4&BgLTWIjh#d1A! E'tf_$jGqsJcLB&JcLB&g].]`"9f&O;jQYIs8L.<WsO>a7NE0W%0Zb5d/XOU"9f&O;jQ_Ks8C(=Wth\9 JR:hd'GLu[!<E0#"rJs]@Y^kopo>'tLgWtT6TctM0fM?qI')`7s51QcWuRh#L2(4COen^l9ILPa%LE7> !<<*62dh`S`mhg&WtV4G<]CX)&IJU@!<<*$"9o,Y>bh;u!VX;,Ws#>E><`f*'bUiU!<Mcl$ipYL+YH]B Z2XI@Y,;/u#Fos5+pS8S!m1KJ&h$+QJ"jK]q5XaqI9%d&"U"r,!:p0r#:<)eVnLC)Wr8t+RWhV!3\)0X !W`?'j8]Si%3-l\@#;/<[&U"&q5Y+'Q?-#!=_)T(NhaANb-n=LWq!+lMdeXU!s\u3!W<!'#9>ZuD32!; po=X^Bg<@:"U"nr!!a9"@$%_6d_5U[$DD<;3"Q`7#m12/qZ$j30Na18`7)^(WsY_F>!<T7'+4pD!VZR! #:;u]T!legqQ'Op#caG><%ALf#6^+gJcLB&JcN(V"T],a;hr<hjo_\f*Wt=#jo>Pc%kCV9`;Ja"XB?PG oDepp/;s;c#2$S\I5huEqZ$j'(d2A`XjH/)jp^+k\u(.!<Ac!I)$^38!!NTXD9(f$#3P(&N^46Xo)Jpq '/<^TcMcl.i13OX!TsFe""S,JZ-M>,joW%V#0m5?!!3j:b5(0$bY8H-!!E<<8Xe]<jos2:Me*\,fDl*_ 8Z^"_h;nCo!T;!/XGgm`4Y.C*=bE9Oa4TD5n`Bjl)Y*k0"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGiXo -"=IajojS/8eqHo!!<j%Qf[r'"6I0e%^,ka!.k3&!0mQ^!!``J0g/!-Cl\G.!:^!f#L\T-)[6EI!RC`N #9,B\7TXDdr4`7$rr3\\NDCJt"Tnc+!WrQ95%AhpQ)(e$rP&KTfB`84&)FgcKm@QF?Y=+bATNX"^A5M` _opZoo[L4BT>^$ps2'(H%L<4?!<irL,<fFXSGg2&a8Z)Eqn%&7$O-_8!W<!'$Qh2h8m?5"rP&BMqYpL" `e$Yn"pG&/o)K*u!WjH0:et;<O0no$#f"^+VKu6+-kON$#6G&7#W#qEX80L9bfd)=>!abS!V$-q!XTM\ .o0r8^&>\OcKtQ1s0Hc3,Q\ho"lTFf!<F<3?=@JmPdpP(&Al`OoDSO5[@`e@EHR"tV7Q02#LBoB@nAEp #5nN,!<WK2)GPF@pqI'^]U3J/2BN8)!:p0q"V2Co5$iK,rP&?Rrr39"\TU(B"p=u.r;['*$l:$G>'-)/ ^B)7Nrr35AImakQ"Te`#!"8o5%M^-W@sX#uU9VH.^C/?:a0:_D9eR7n$3fkuJcLB&JcLB&fDl-a0Nj+1 [C<RAXU!2/f#ND6+9]jf#7E4hKr_Vl[Jm97Xf]q+f#<84+9_WC$NgVE(FDk!R_-,7XSf16[)Uhao>6Q$ <)Zas??V7*_SEagpoP+4\]31\^R0IlO1*EbK16a[r;['3,<Jh?Kq,1AXTu,cgsNWK3YhDi#7rh&Nifb# [Jd31Y1;@W_ZP$I)?K=-$N^D5"Ysqtp%$hQZ2Ld0Y`N3C$jZt;aoDYN%iHWZB8WS^XTu.rBJ^)%"9SQ& o)K%!(GA9fHBG#+rN-I?g[b()N^O?W!!*,]!"8l1"UGMi>)'N)_RZiFXUq_Ld,OQ\]9R])W5mT8^p^H9 XTP8@7MGq2"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!q60p%O4)8D24X]rN-=0gtU5aCH*((!!`iQ3)F@B RB$4f#d;n:e&$5l(]j:0$NgnZ.m6sRMkm2JXT#@!XUDA/N+km@+V=n^"9OefJcLB&JcN:\$N^G7#TZj0 l2Ue^ao&1GJR:ke'GLu[!<M<_li7Cp"9f&O;jQbLs8:":Wu-Cp73*'V%0Zb5!!!09,W8DBU!1TjZ`C,) Wt_.kH<sr^=&D^m?"A&B]'o[^c*jYJWue(+Q@X12S?T#69.U_d%1*.=!<<*62dh`S`mhf)Wth\9U2O'l &/5]`!s&E&!!39-#UWiPrr3#l^\t2?Vfu?0'GV5g!s&Go!"8l7'd52.I^&hAafVH=Ws>/<:Eg#I"9R$P p](O3-pq9iU:I]-Ws>DJ<[e:X"9\,n#R;bQH`P!3euJ\L$^u9:7li.?$j-M3!TX4h!XTP_.nt/WcIg:K W;3IpV4%mMC0,(hJWQA#_9'3gVlB0d#E*%N%L3.>!W<!'#9>ZuD32!;po=X^Bg<@:"U"nr!!a9"@$%_6 d_5U[$DD<;3"Qc9$3L;0qZ$j30Na18`7)^(WsY_F>!<T7'+4pD!VZR&"WK<rE/^[,bK%9!Wqi\'UP3>U 2's.K!s8T+\,_*\JcLB&PlUX\"T]/c<J\Tkjo_\f*Ws@]"T]/c<Jn`mjo_\f*<Ym5"rh0mdFd@<rT47< a0D1C%lbR7!WiH+"WKO1L82Q9jn\$Ii7>rXU6'S$6olFr!VHEp#:jZ3rT47;N^46Xo)Jpq'Jj$ZcMcl. i13OX!TsFe""eDU[*[e2joabU4pJe&!YebZq;qb&9a^%`"9B<2S)aJ0"k'T4AJYIJ!8@JX![2-9Yg))$ jq-M"]V^[(?qr^aI\F0fdG3gPjoKH?nc/^n0p27n!eqp#q#Kj`!sgMtaSk6(fo&*,!V$-l"=7NgrT47? QqA+pli77m)bla*a4]MKjo`\?.gY;<JcLB&JcLB&fDl-])_sTI=Da)r^B!d&rs-u3:E'K@!s-^J#6u5( 5"A^kO8clq^VB:;rtNnA:`K]D!s&B&!<N]c<+BTaM57la^D+W1f]N.pbdOF?PDOmBI!'[gQ`e'u^Dt)0 cIL^u]<&3iqZ$T4H9VlF"Tnc/%Mp?R??_q<^Au=Rrs8M7GWcH>"Te`'!!`lS2*af=E0gI;!Q+^4rs-Pr 7hc13!s.un$3:20+@B"'?[7a?rP&T`a/4/_4t$ub!!`Q/#RE4qL9(-b$I$\pJQbAk'EJ16o)K$t#nn@1 :MY]urP&`cm/I%bZu\MZ)A!)0!!a;s:0;%JMmiGr&AcE8hsKj_]re#nLl%:eYe0D>"4+K>@fo:X)[?6@ #6=o1#T?E]Q2&*!d_(r_9f=("n,N[s%i6HS??i.A^Au@Srs8G2G!$-:"Te`'!!`W8(Eb\@FI)m?!Q4m8 rs-Jm71oh/!s/2t%KQ_>%M^cqA8cjOTY%tRqnENYf[@jJP&<rJ,8LZO!.k3&!.k3X!!`lc=bNf^[^H%8 #LD8Xa+Ho*"QTRH!!`lc>(io_\[249#LD8X`Ig]'"T8<.!X/l?)aeG-_SWsir2gU;]#W@fb,:,CG^=[b N16ub]=7O:&?iIR`6>riO,0j\f@5FB)?Kd:#n8+@;f%/XWi`B0Xf\k_gsNWK3>M;h#7rh%NNBOt[Jd35 Y1;@W_f\6`!Up's!WrQ/0l3uan(>F\rN-=/OC'OI#Qt4X!;HO!"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D 01KDsOef/YXUDero(MF06k01s!<M3\$N^G7#:)fVP+o%_XSJt!YI+kVcJ79mUQ1nJ_T'@#ZEE]!#GH?2 'F=pF!rW*(":Gnb03<FfpoOduISLgh"p4qr!!`uY4B-0QS>uOi#I3(=dC!aL(&.b6$6M6(C4hqSrN-@/ f\P#nF[$]Do`,@%#ne1*6!JGjQ_LGRXUDA8TT4.s3[5.C"p;@8JcLB&JcM&9$ig>3"UH,IQKeGLrQ4u< $%ZGQ*>B1s"T\YO!"/i2"UH,IQL"SNr5ef:(kH$_*>B1s"T\W(!!EcM-p;77f(n:HZ`<u)"J_EMJSbp; EH#oAI"dZ\`96((^94L3WuS%/R[9%rTs_"B9JR7k%1*.=!<<*62dh`S`mhg&WtV4G<]CX)&IJU@!<<*$ "9o,Y?).E!!VF/*WsYbK><`f:&dngC!V6:"!=9Ja/lR8'rp.S*VZ*V%X.4?/+pS8S!m1KJ&h$+QJ"jK] q5XaqI9%d&"U"qs!!ifY;1>ahe_7&%WsG/<;+EYu*"2oN!<N;_!"8l4%29dC?Ac87cGcgZWt;5#R#?37 JWcY'YI_-CVkpB^Ws=Pl3"?/s!s/?##6u8,:i2;u_"ar8O_I&p"pG,2rW)Ni#8T=-OL)pS^&=u=Tl!gi &/5]`"9AQ#!!a#g=Ga6"e&D9d$DqlJ4qeYE$NpJ2pAbU)&0Wl$A;$f!c-a;*q5Xn#OaUtI74f5Y"9Sbp !.k3&!.k3&!7h,R!>$kaM8]>S"0>WH"2t6D!>$kaMT,SW"m4sK=WIV9!!Wp&O/p1Njo+<UhpfZTO_@?@ ,:+W_/P0f?X2!$:jn\$Ij4r))^9aMgDc%nl!VHEp#:jZ3rT47;N^46Xo)Jpq'f96_cMcl.i13OX!TsFe ">4__\'a15joW%V#/C3?'NiNRjoWb$$Ma\j!!E<=8t4l>jos2:Me*\-f)PsZ/5gr'h"g(DjP.qnY*t?! C5/Rub0o#%jRD:6E>efWoDepp0p27n!eqp#k5YSi/oSi0joj@q5S*td!!<?M@_2O#"Q,S=('3_$#Qu,< C6lcqk2uR'"kT&C0G+AH!.k3&!.k3X!!``K1I"H5DNF_1!:^!f#L\T-)[6EI!U'OI!!``K1I"H6D3+V0 !:^!f'[r(>*=)iO!<<-$!XL,?;,h"JPJ$k/'>_Z0ce7.&ahG6dURmg7Ng$'9[eRTD_8F75ai_?)^@V@( &]/iY%L<4?!<irL,<fFXSA2f?^V@hgrs8M7Gs2ZB"Tnf(!!`lS2F1#AEL?^>!Q+^4rs-Pr8/2C6!s.un $3:20+[f:-@XO?IrP&T`a/4/_4t$uk!;HO!!X/i81Lc*>q7d3ZbH-7u67`fOnGigr#nn@1:MY]urP&`c m/I%b[<4e_)\<21!!a#Y2FL\dKs1<e!PlV`a3;r]cbd2rW1fi^ZF@L9^B`)pO^gs<)[?6@#6=o1#T?E] Q2&*!d_(r_9f=("n,N[s%i6HS??i.A^Au@Srs8G2G<H<="Te`'!!`W8(Eb\@FI)m?!Q4m8rs-Mn7M?%2 !s/2t$ipD5"q)M/7oF#INk+u#$c(0Ae]kIaDGN8<&@_^l!.k3&!0mQ^!!`lc=G*T[[Boe5#LD8Xa+Ho* "NpcM$SY_9WO'+@r2g4MhU]Yu808!5!"/f0"U5Q!AWjsK^q0HG"L#/@^;pc(\#,^bR@9V;W3Nq@Y4o%0 YHbFB\@AN1SB9RBe:U4/!W<!'%3mr5Ck\CZrN-=0gYC2dD)i=*!!a&o@#V.n\$Z+9#d2_6e&-;o)?K=- $N^D5"YjhooBk,DYl:a1Xg!mo/.;de!m1KJ"qMRs6>)1Qq5jn-P\;l]#6Y+t!!i]D01KAqOef/YXU)So o(MC/6k'+t!!*,\!"/i0!sBK!;K.;VVQ]ft&?`=H]"l7tXeD\t\$rcNYcdJt#GH?2'F=pF!rW*(":Gnb 03<FfpoOduISLgh"p4r+!:p0q%O4)8D24X]rN-=0gtU5aCH*%'!!`iQ3)F@BRB$4f#d;n:e&$5l(BO1/ $j$S<%2:9Y>]b^dVQBQp$F-_4RX/-r)A3A]mf7q>JcLB&JcOR+$N^G7#TZj1l2Ue]aS`(FJR:ke'GLu[ !<LRJ$N^G7#TZj0li7"_aSr4XX/geY73*'V%0Ze6!<<3.&fWB*Q.l9<iP5;k';qLmR?<;_N/s9oTVf39 beLTiWq`V7W2-)VSY)pkWcCuq'+PHX"9JT(!#.A"OL3$W_#:;IU2O'l&/5]`"9AN'!!39-#UWiPrr3#j ^\t29Vfu?0'Eo3a$NpM3o)K1"#o+U9<.D(Mjhn0trMp0nG#':e"U"nL!!a,b6X>29\[D76#GZ]J.0p([ "9&;l!!ifZ;M)@"gYAh-WsbA?;+E]!*"2rO!Wh?^$ipJ9#nACVF.g"[bH:T@&?;LrR[BA,TW,#sXJi"m W2f?f",gVJ%Kcq>!s/?##6u8,:i2;u_"ar8O_I&p"pG,2n,N\/3FIrT`R;HuWsYP;<]CX)&IJXA!W)j% %kq+BYJeo/rMp:&F':a@'b^uY!Wi#q%KZnI)'_IXMR11FaJl5@ql:+&T9P1Z?U5kC#6Y-n!.k3&!.k3V !!NB8034"Mr8n*_=WR\'!9O7b!>-tdMoGVV"0>WG"7lKs"Y*f/Wm9](jqHe2f[.O<Q$mXmFEW%sY//E7 gu8%j%-6@&g!nEh]r5U$&HVP)"U?Ppa6)Lgk2tEY5nO.h!!NE>2.)]rrT47@SP0h#k5Y\h0mB5#dc15f !k:Duc2dG9!YebZq;qb&9a^%`"9B?3S)aJ0"k'T4AJbR$!!EQR;j>u2joOT$%boLXa1o*a]uejYh;I>T nE'ak)Y*k0"#5r5joU8^!TsFb#VL&:rT479Ma.gSnGiXo-"=IajojS/8eqHm!!NH=2eT2Jq;qn:_k;?P )$7,EJcLB&JcM&9qu?s,*Ag#Q>&TK"^B!d&rs-u3:E'K@!s-^J#6u8+5tY<uOo2ronG`FmduR?I#mLJ4 rW!6*"rfBa78miT]`#VF_#D.M_>_1V^:h1l]=PPa]=blP^BhWj_83q$]ZC*Orsutm57Rr&!s&Q8(F)+M GF\WH!6>*=#lD8[4q7i%!s/?##7D\66;:a,R/Oc#_YX93#KMKg('t0I!V69u!<N<G7TEAtJ!7>?^BhU# a/4/_4t$ub!!`Q/#RE4qL9(-b#gCJnJQbAk'ER_(#Qb;G*\1$%L;!Q##gVf9s8TKM6RMpS&-^qk#6k_Y ,tM^$X8'F>^qde&^qd^u]Xthg]Y(uI^B`)pO^gs<)[?6@#6=o1#T?E]Q2&*!d_(r_9f=("rW)Ni#6bVS ,<fFYT`)V*aSu2Fq7:f7$j["=!W<!'":Q(h3*LEirP&BNrVlg%`IUMo#mLJ4p]19o#QkGM+tlf3LUd)n $GaL*d'SsP:GN[dn,S%?JcLB&JcOF'#7E1eK;l/`Zi$p1ced6nK1I*fb5_bT03Nn*ZF@.=XU2,3ced6l K1I'equH]s#73(iNP<?K]DSf2Y5PO(Y5YL*XfSY+XR`IqY-+t2riHI4iof:MK16a[r;['3,<Jh?Kq,1A XTu,cgsNWK3>D5g#7re#MlO.m[/I*0Y1;@W_ZP$H)?K=-$N^D5"Yjemo'=c=Yl1[/Y`N3C$jZt;aoDYN %iHWZB8WS^XTu.rBJ^)%"9SQ&o)K%!(GA6dH'+o*rN-I?g[b((NC43U!!*,Z!!rZ,&0s84C4r%UpoOk* Y-5%3YH=n.Xo5EjXTP8@7MGq2"Tni)!!`W7'HSo/H(+N1#GurF)[ZcO!q60p%O4)8D24X]rN-=0gtU5a CGut&!!`iQ3)F@BRB$4f#d;n:e&$5l(BO..%06M3";NFS=E97kX0&N"XU2/5ZCcD;-lNU#PQ6:8JcLB& \,Zm<"9f&O;jZbKs80n8WsO>a7NE0W%0Zb5joF`J$N^G7#TZj0li7"^a8DtSJR:hd'GLu[!W`<%!X/l? *_hXIs8Vu>r2U%%Wi2knVPjBk"0&5tWW&muX/bop*NH-<WMuhqTk[Ic'+PHX"9JT(!#.A"OL3$W^oOLN X/ht5<]CX)&IJXB!<<*$"9o,Y?).E!!V4#(WsbhL><`f:&dngD!<Mfm$ipYL+YH`DY5[CqX/Gos#Fos5 +pS8S!n./E!!a,b6X>29\[D76#GZ]J.0p(["7Q9r#V/o1]?fHkWr8t+RWhV!4"M?["9JW*irBGf!<N<@ 3*_35]#_8RWrT.'Wi2hoVPsElri5Ff#E*%N%L3.>!W<!'#9>ZuD32!;po=X^Bg<@:"U"nr!!a9"@$%_6 d_5U[$DD<;3"Qc9$3UD2qZ$j30Na18`7)^(WsbeG>!<T7'+>$G!<Mop$3C;3#9uZSS?g/Zpo=e&W2HM^ G#U%$$3p[C!.k3&!.k39!;Z[!!>7(gN5b_W"0>WH"2t6D!>7+hN5keX"0>WG"7lKs!>ICrNksfTjojf- jQ,8$hqd)cgBQKkiT'"[jnImFjlPR`j5JnIMaeNao`,(!.rE?*jojG!5nO.h!!NE?2di$!rT47@SP0h# k5Y\h14,_-e)LAh"6R*W#/C3?'NiNRjoWb$$KhBl!>nFuj8J*Dd]\R?(^0g<fDl![0mM4CjpU;4jQ#:Y hVR/Jj5g4$n)aXj)Y*k0"#5r5joU8^!Vl`a!!<KZDohn>"PJ\u&-;;$!sBoZ])Caohj@"O!U0Re!>@eZ h>-1;jPetN]M&q&!.k3&!.k3&!8%8V#95Na8m-(nr4`7$rr35NNDCJt"9S\N!!`cL1I4W:E0("5%DT[I s8W)GN_pi("p4o)!"9#E,rRtb@s"$3Y.2.?^CS,r_o0R@da?:SZDsRpXgn/@(r=,0bME3uqr=Jb2@B]l !W`H6(*YnJGF\WH!6>*=#l(uV57Ii$!s/?##7DY45ttX*Qi4Z%_YjH6r!12m8/2C6!s.un$3:20+@K.+ @=46HrP&T``hdr[4spoa!!`Q/#RE1pL9(-b$I$\pJ6>/g'EJ16o)K$t#SS4/:ht`trP&BZn,E=kZun\^ )\<21!"T5?&K!Q6H'+ViSu&Nq\%DFM'>_W,ajA_md`K/.X/);QPb"bY\GX)Dd'o$D"%Y-b"oSE+!<WN3 ),5=@pqI'\]U*;)1`ctm!!`Z;(Eu%LH(b,N!6G0>#kkcO4pqT!!s/?##6YGO+ZNYJQMnQ,_uB]9r54(T 'F4jE!VHF"!<ruJ*CF:_OI`-I[(Z:M%*$i=Y``cl-jp:a!s+eiJcLB&JcN.X#7E.cJYfWXZi$p1c/$gb J4C[aj8eBD#7<(aJ>TQVZi$p1bM:IXHUJkWq#Cd+,=l[7SY`HhWN</qXUqY=Z*LdN\?W'1TUq^IV5pcp XUD>;[(4?Ch92^.3#2>k#n8+?;Jh,WWi`B0Xf\h]f?17/1_]Wa#7ratLo.DaZi.!3Y12.M\8XSI!Up's !WrQ/0l3r_maf.WrN-=/NaF:E#6Y+W!;HO!"qMRs6YD:Rq5jn-P\;l]#Qt4u!!i]D/ONcdNMWfVXUDl" o_.[46Oa"q!<M'X%LX.&3`9aHRA$IUYH+\(riQ%!'<e^K\%]\kYc=CdQ^jq\]stJUYPbL-U3K*@#mLM6 r;['*$54F4<Hso+XTt_Q9cOKF"9S&m#7`"@;f%2XWr9%)Z.dgPXCX4$p](O++#Zo/JX<D8XU),]fZq!F 3u.ke!"&c;*\TfaFcE&lVY@1tZE01,9f!k#r;sV3JcLB&JcM&9$ig>3"UH,IQg+PMrQ+o;$%cJP)\s+s "T\YO!"/i2"UH/JQg=\Or5ef:)h_Qe*>]G""Te]*!!39-#SfI<Vs3gEl,gNBWr&jrWt;;/UnOBKR$Er, VQRJA[&p;&Wu.e2SstaM9IC2X$jZq9!<<*62I2<H_U?6uWu.UM=?.$2'+4pD!<<*$"9o,W=Iej[s7X5+ WsYbK><W]9'+>!F!V6:"!=9Ja/lI,$ro_2#VuE_&X.4B/+pS5R!m1KJ&gotLI%\$Xq5XaqI9%a%"U"qs !!ifX;Lu0qg=iS*WsG,6:.7&g)[ccM!s/M\!"T\j6XY;-WOTUT^pUJMXK)&r';qUsS!oS&Od)B0VlR/3 Yc+FqW;N\$M./FQ"U"o.r;['-*A^E)NNKtjWs=c#5SOA)!s8H%o)K"12dhZO`7)EuWsYP==#^j0'+4pD !W)j%%kq+BYf5/3rMp:&F^%!A()./\!Whlm$j.>$:N)/e]$%q&Xf;,s$D`>d8h;(u#Qk).nc47AJcLB& JcO@%"T]2f<Jncnjo_\c*<X7\"T]5h<f=rrjoso0X&^5Cnc/su(,B$P`R!5ojS@pLjl>:Ug!.11R[g%E T=)eoiq_^AjP\hE^hG8(oDest.r33(jojFr5S*tf!!NE<1L-0hrT47@RRn1ok5Y\h0R'%udc15f!k:Du ^]4EL=N^I%!mF@Gq#Kj`"9B9/RcFA/"jj?(?5*Lk!"'8uIAja!e_As=jS7jNj58YEc+gHRP`UfVN2XP= g"kTHr8n*")#s[/!!36UOSIr>L*?Z]!!<KYDTMe="PJSo%fu2#!sBoY])Caohj6kI!U'Le!uk")]ZgK2 iVDU<f6&\PO8sk4JcLB&ZiC=9)_sWL>&KE!^C0T3s8L?':E'K@!s.TckPthn*&KoR>B#]%^C0T3s81'# :`TfF!s/?#$j-qV-8\A%DL75)VS)`>&Ac<+ceI^;bIt'MObSpdWOqu@)T'VHir&fAd'J3u.gH1Z!W`H5 (*PhIH(D^b%_od!rr<#i\9C+F#6b/0r;['0*]#uR?>u;1^C8!Ys8Vo3Jk$L["Tnes!"&`.!Zs^):Kqt& [/I`Ecc;i+;`uK>dfB.C#6G#5#VokEX80L9bfZu9=$S8M!V$-q!XK>U.8O`8^&>\HdIR;:#.&>8,T.*r hZ+5j#7D%j7q$XnKnYJMT<,N:^\Y\Y`66]ip?:)I[AB1FK7e;]Iu0T!r4`K_[>S?[0,Xrl!!`N,":,f< GEhm;#LU,HAP"Ws#k.g!"Uu4j5@8Z,rP&c_rr<#g[WO_@"pG&/r;['*$l:'I>BQ81^Au1Nrs8D:J41+V "Tneu!"8l3#RqG%:hOp%Mk@TV^C7p1e&\qT@6GPE%0cjH!.k3&!.k39!;lg%$S>A,U9(],r2g4KgsE`] 732TT!!`i_<.(@@Z*F5/#KtZ<Z#W)K"8Mp)";ijcA9<KgTr"`iqlTk"&$N:I^<4g6UQLCeJU`WHVYI8% Yd_Qum,Z$NE(DDh!W<!'%3df.C4hqTrN-=/e^D=/?SE)e!!a&l>(`NL['BS3#d2_,`N<f5'`me($N^D5 "Ysqtp%$hQZ2Uj2Xg!jn.1-7^!m1KJ"qMRs6YM@Sq5jn*Q"DfZ#6Y+t!!i]C.mR0VMkR<PXU)]#p%Ig5 6Oa"s!!*,X!"T;G)^[UCBRPf'T;f#sX/u)u'=,0ed,NBWS;Mf>E-@GNf[IjOZM^g0U38p=#mCG5r;['* #SJ(-;KnQ(XTteR9H4BD"9\W'o)K"*,<A\:K:K"@XTu,\d__Y_0G+!Z#7;M09kJj@Wr9%*Y1;%AX(O@+ !V$-u!XTP_.mmTaMjL09X8/k'Y-FgaGZ6I7"TAH&!V?AD!.k3&!.k4+!"/i2"UH,JR-O_OrlY/>$%ZDN )AWtq"T\YO!"/i2"UH/KR-akQrQ5&>*il>n@7;4V(CpZN!<E0$!X/c<.SFfQZGkMbhp8^1q5Y(*Tq%O4 I=-<_JW62#[(3TDq5Xt$S!Sk?=?Ro>%137?!WE'('K'-QY/8T"rMpd1E`k@;)\i__!<E0#!WrT2+]FQ\ s8Vl/rMp(!G$I0E"W.s`"T\Yq!"8l7'Her'IB`_@afVH=Ws>/;:EfuG"9Q^G#8&:I=aH[K[J?j.V0Z,i "pG,3rW)Ni#R;YKH)JF*fW+nN$^bd)6SK]#$NpM4!T*ke$Q:NZ<,IA\Yf,;N`k8VOWtV1rQ\]g+F)c>K JqfD\Zd-@lW29Em",UGF$NgM7!Wi6"#6l/&94j*`_"ar8NbLZi"U+u0n,N\.2I26E_pQ3sWsYPA=>ps5 'FY*F!W)j%%l%4EZ,Y>5rMp:'G$@!@(D@2Z!<Mcl$3C_[1Ikr-U;G1"!Ptc2WsbedH=g&?-kZR`!WeYg JcLB&JcN%U":lt[L;WrO"0#6>!oO(@!!NB7/Q@SFr8n*\<#c#1!!iW;.oD"o^=;0<jq-V1g!IU&F&P.b 5s[bFNkXEHjp0ktah!d('a+(."U6Di`ocCfk2tEU4V%Sb!!NB7/Q\"WrT47@QUMPgk5Y\g/T-i\d,Frc !k:>sc2dG9!Y\YXq;qb&9+'e]!u"+hj8J*Dc_u1h%0G#Z$ipeh:2Gura3r`$k2uO&'Ah<^]UO%H5W(2B +=U!0UV+b$i;D^<D]&$F!Wk!8puVX2+p$j,!sU;maSk6(fS;Nu!V$-l"=.EerT47?PXH)ak5Y\h*_UI> _;>"M"l,VO/e7uk!.k3&!.k39!;lg%#9,?[86Kkkr4`X0s8W&CN)(As"9S\N!!`cL1I+T<EKL+5$hF>t pWJIj*!ZWL!W<!,!<ruH*][&)CNY?!])9>B^C\6&dbXN\dC>p4IrAe@N1[]W^DOo;kkY8Qc)H>&4s'n/ !W`9)$l0sJ?$Mt>^C8-]s8MGpG<QB="9JW&!!`fM0g&$4EL6X=%)W#Ds7=$W7M>t0!s.un$3:20*^<@o =E0;+rkA`Rcc)Z&;EQ9;aoDYJ":#2f@Y_#[^Bi'+WI7c2.MDjQ!!iW3&/Q]hCl#e'^B)dVrr3),E'>EH (_-`,!"T,6"U>hp6<.T9Fa8Y&T!\:-'?A_gpAX-nY*OTR='&mA<aKm)V>S(5c*N7367j&Yr;[''!X/fF 9Quft^B`)pO^^d7)[QECo)K"!$l'mK?[8:B^C86`s8MAmFZ^!8"9JW&!!`Z:(EkeDFdW-B%)i/Fs73pR 6kT\-!s/&p$ipD4"plD19Nl7]OLFu"%)C<Cf$1+A;_K:0$Nfr#JcLB&JcLB&fDl-`/Q6tfX0Al,XU!,' bd_g_*<aOc#7<"[H(:k:Yl:a2Xf]Xh]r#I()$B[7$j-tY.QL=;I?L1tWiZ#u&?iOYbi7'OL21C2@:426 S?2Og%'m_$l1`o+E(;Q$$j$;,#7M_7:25?KWVrq(YL1S(PZKCIp](O00irgpWNi`,XTYfUcb5tR?o/Js n,Ngt!sAc_DR&p-hSZVrXTjbj.1$.[!m1KJ"qMRs6YMCTq5jn*P@ZKU"p>#,!:p0r";E4I;f@PdY5PI1 _<(CamZ'XD!!!$#hZ+/i#nI^o1eCtkJ<Qh5Xg+r%XV8+^fB)JBSU"^F8jH-sVV^gt`jYfI"/C'.'*AOE !s8E$#6P8E)(JO-R/!cgW..M]#mLM7n,N\&+urJ7Jsr\;XTu,Xb.!O6/.VFT#72D-8nEF9Vu<_'YL1Y- SmO2b!V$-s!<ifA(+V^UEeKVWU9+0m%'HtAX.F?(+p7uK!We\hJcLB&JcN:\#6G#3#Tcs4li-nabl"LJ JR:e_()./\!<M<_li7Cp"9f&P<13+Qs8L4>WuQh(7j/lj%g;t7!!!$$!X&`H/k02sTY^-gil8"oWt;2! R#Q3)A6i,ADLdhDZb*75WskbjIpQ#B1E[)6#Qt5-!!s>q>)98ocG-E\)QTp7FBU[D*Z#4e!<E0#!WrT2 *_qL8rr;]-rMp:'G@!?H)&*M_!<Mcl$ipYK+"C'5YQ+@BY,;/u#G607+9huO!n./E!!a)^4]cit['f_1 #GlfJ-NsYV!q60q"sc`ZS[Q_jWr8t+Qt8lT.NT<3!s/N)hZ+5l%Mg-A8n<C>\(CE4be'sWX88k1SX+b: @pE)4;HI"+Cl#(KmE2`4r2U'Z?o8;o"9S]'!!`]H0M#`2WPA5/#E<@Y&Hi1<!q60p'K''NX2*&srMp:! FBU[C*Yo.d!<N&t#7rUmMm:=Ra8N%GVKZ6+'GqPn!s&Go!"8o7%iQ][@Yh;+bg!6bWsGVoO+_X^59'h* "2"Vc!.k3&!0mQ[!!E`Y:4pC\jo_S\)?IbV":cnYKu3cM"K50;!s.lk"pu_SFI^D0r9""@&EDHg^nbO& *=</_%1F[hS_X&'#2d\5SSKJWo)Jjr-tpTujojFo3tDA`!!NB3-W5iErT47@PX?&ak5Y\g.VOmIcJecb "6R*U"i(*>'3E?PjoWb"$0D3i&42WArT4:.UN9'7!WE)L!!i]C1g>g=_:.<:jqHLi[A.4p+q4bZ!<<-9 5]W6ub1upW!H/hG!!33QN;2N:KHUBl!:Kmi"t=?.rT478KfT_FnGiXo,@S.]jojP'5S4%Z!!NHA3+er> q;qk;_jYU='(#[N!.k3&!.k4'!!`]G/j)X,D34\1$h=8sqok!p)[6EI!RC`N#TGNa93cJ!rkAoW^\%R+ n]6Va)[6HJ!W<!,!<NB.#Tu0'=_W,B\G<lN_T^g%s6.:kHtlbR2I1]r]D92Y`SL:gs6$\>>='kU!W`<% !!N`F+$3eST)HD4aSl/:lEk^t$O-_8!W<!'#oP?V8R68#rP&KPrVuia#JP^W&dAI?!V69u!<E6A4\A@J D2P[u^B`*(U3'3n,nS3!#6G#5#VokEX80L;bfH`1<'D`E!<<,k!!iW1%i-EcDMZ")^B)jZrr32.DEK$W %0bVhrW*E/#SA+,5ZVH6GD;EfpqIKdiqNKQfW^<N;E5sH5#"XG>^`+>^B;Z`L04UD/JnZi!!`N+"9oT7 GaJ3?#L9f>?UHIb#Oh]u"Ul+f4^NH-rP&c_rVufZZZA27"p=u.r;['+%2U0K>]uM5^C8'Zs8DAuIRF_O "9JVr!!rZ,!WifM.5t1C!J[cP^C.lna3VJfC-XHo&-A7"JcLB&JcN.X#7E([Gak\:Y5GC,bLFV=E^1QG j8eBD"UQ_VG+#6(XTung\!US]'a+73$j$P:$PG!^AqZA@WN5is&?rahg\&dSBL>$J5!<+rQ)j__%("1? p%Q[d:*phg#6Fc'#n.q8:1o-GWNE9/Xf\hN`2nbj.1Z+Q#7`CcH'bA2Yl1[0Y0G(qP#s=K!Up's!WrQ/ 1N0Vop#<rqr2g0_?76'_!s6pOp](O'%iHW[BT&b`XTu%oAMFJq!s.lk#Qthf3DOFGTW\6q$Gu$#p$[o- $ig8.h>e,h!sA`:*%F$JC4`(ZY-+e,Xno.5]$][4n@!gE3%H!^,[6\kq=2tFr2g3sG"!#M"p4r*!!`T3 %i6WjFd`$,#GuoC)[Q]O"7Q9q%3RT)B7ZGMrN-=/c,-T;:F?YI!!`fM1.bu&Pc+J^#d;InZBA9@&HVA$ $3C;4"ViLP=E'%cpT4h,Y-P9k?S2Kb!s/M:!.k3&!.k39!!iQ+"9f&P<LN4QrrC=AWsOAd6Q-dV$j?Y4 d/XCQ"9f&Q<LW=SrrC:@WsOGk7jT?!&-W(8r;[<.!<`fI+tuuDY3#0Fe>iGIri6R+RZM`!>>IF85#5R) NMa;^WskY\@SB?N-lNL#"p4o)!!a2o=G<`fbeO+W(nu4Z4!,U^$j-M2!!!'&"U5u;I_YFGnA,"'$E&/T 3uAkO%0Q\4o)K1"#SS7.9ma,Eqp_jIri6=*T6<mM"9\f.aoDYX,s5.LS$]U!Ws>JK<$qhP"9S&m#R2G> BTfL9c)U`C#a\pi4sLmX$3UD4!Wh0Y%fuk;"ViLR>^rZts7kHiYkY74RYG9H;+!Dr.4m2.6>;hDs6me& r2U'\?S`&m!s/N%!!`]G/k'0'W4_o+"-7+Y%fQP1!r`2k!!a2o>)0&jcFs1W$DMZI3?B:Z$j-M2qZ$j4 10][Ba4JB1WsY_M>ric@'at3G!V-3u!X&]4,=?76Zbt(nq5Xn'VPg5[HW2?q"9S_s!.k3&!.k3&!7_&P $7&8p_#3<sWDXT8_uKoL-Vf<1roOCHk+tim"RZ6n$Rnes[GUfB#N=1LYCo%U"8i-$#Vph_q;qn;^nH*I &-DG'!sL#a`Vnp%g4_Qu!qH<o#pW0!aSk6(i/g28!TsFe"".K3X3BQ$joW%T"i(*>'3E?PjoWb"$2FSh !!<]qOlQE&"j<NR6j<\>!!`N81h;`OaP?RQ#1U5XJiFVPqZ$g$(eJe7]@d&D")eqT!;$6m!\96)joU/Y !TsFb"Y"3,rT478JiF5AnGiXo,@J(\jojP$57[eV!!338566Jhq;qnBh:pJi56mAPJcLB&JcN.X#6bef 2F:G[L]"FcdbWa0WGt3>"Tnf,kQ'fH#6kql3_!:iM#=OddG!7"Vf>$>"Tnf,qZ%--!<Nr`4\T7)Lo7Ma Z*Ue9[1p9reDT)kR<Mk.4Y@mHC5JjlZ*CY7[10U\fB2Va["r-U0-1W)r;[-,#n\"1<d'n:Z4=1G^=M#h aH^-g#R(;3!W<!'"r&==6s=YorNZj@e_Aa$S7jnn"Tnf,o)K*u!<Nuk84uolH_LDD#IL7Z?UHRi%FY=P !!`N-"UHPXIA$DA#dgLfAO\Hu&-;;$#QY):&KO;QM6Hl`$d.K!pWJP!0cCZ4"5<eb":5SQ-pq'JDgRA5 Z*F86(:CQYak>hFc)QM19K+.*%jaD08lobbr3?R/P&!TF,SL=Z!!`N+"9fE&CQS=s#HsG6:,aO9#4MTt ":>_X2-5$jrNZjIf@nfrP[6'K"Tnf,r;['*$5+:6<HFB&Z4+:ogXj]>B/g>(!s/Mm!!`]=(a;=UJt_kC #dgF^>rjJU%Ka<DJcLB&JcM&9qu?s,,=,adLQ.PrTa.EdPC?Lc'a)VZ#6uG<@![NdPPh*ZSWeV?7jeiL q#D!-!WrN/)`(9'G(YpKV50i]U^O&pUT:rEccDDh8Lj]e#Ui)NJ"*1/V54*c%Ag8Kf]L_M@5Sc1#m:;- !!`iM/3['MJX$,,#bmcIH=/fV$N^&'#7MqH@sN`eR/EW_Ss=h<5U$X<n,Ngt!WrTU>ER1[a1/&HTa7?X F%RPZ"TnhK!!`Z9'HK,6G*_rt#FTj6-3j\W!q60p":uV,5?Vr]r1OD/e`H/+D);S"rrLgR%0[7\-TY.> J<#bVS>)kYU_]i)Vn:.*iO4GC2^9(H"qs=JZJ3dDYl(1"LL2nK#6Y)/r;['("q2.f6=Y`ETa-Ng4;8#( !s8H%o)K"&)_F<UD1S#NTa$sGH!WKP$2=K*#T"mO:M"p9r1O@fP(%"-+q4S>!!`oP/jEBRK:2D+#bHHC -j9_U!WhonJcLB&JcLB&g].]_!sJoI7=)Q7leTGUSdBUD3ZJnJ$3^G2d/XOT!sJoJ7=2Z9leK>USdV-] HsT,e+;bOl!<N&t-NXJ\',ru:K!;_pZ_a=fUS4BQTV.HuEb&<J4t7O#1db)TKUJR/T_tJlSrReq7PlV; '+"mI"8i-(%k1"_KpJI-rLO=YEE5(D*"rY\!WE',!<NB-(-,cc[(!HCrLO.YFAt4>"W7m["9APp!"8l5 &/ZQR@>MS4ZDO8mScapb5T0P(!!::C"q;S+6sP&%pmq_RCe,WO"9Sc*!:p0r"WK9qEf$6YSc,,bH!N`b (_mPdrW3'#gAhWi)D4<\J"k!>eAAGbr1OmtSst7H>"_(<.2`m<*$-Y(EhLXiXeP`b"*dcq#Qk,1!Wi6" #6kkg3)44DRJ<?YIT\B7!s8T*n,N\(.nFE.Q_C2QSdCO!<&c$A'++dAq>^a0.SF]?TW"adSdLg)<&bg6 &deaB!U]pk'JE4%MO4F?U\12`QuPeD"9S`-QiM^<JcLB&YlFn/&Lp=hr/Uq[-OTt5!9F1`";<:XDu>Xu <%&+Tm/Re-+?O%kQBmo+R?s5*O*P;63#;\n!!WlkJ<Z@fRJrWZR#5KD-P6IN!!E`cB9/)WO,nWT*<u$6 "9K#Z7W/0c",BGh#3>gg%67C&IZ+/c!F?Vf!:p0l""%gZNrj,>!p0Ib!uXXgrJq)!73Ms=cN"4O%kpae G)M`UrL!qXQ^)r)6S&oSq#CR"*^NqLK`$l31Bm:K!=hKlNr_ENjT#>m126]J"+!9R#4DNn$nbueNrt), *X:X)!s00!G4gmtHR/^%!.k3&!.k39!;lg%":c=s1e:nnr/;#HQ'@AM9e?kX!s/ML!!`W;*%<g>?Zc4) $^-d=O)RfF%g)k7!Vud+!<N]L.6(%0F,,d;Ockq/Pl?p\QC+&'I:Q/<1+=:[026/6MiWu!PR`tEQ^OA6 P&j_j/Kbc8!W<!'!s]2F,=#O\rJV,DPa.Dg@mM:B!s/N$!!`Z;)'_"3@<qd0$^6j=NG1m2$3L>1!V-3s !<E]R2b6tZF+jOO#`OIW=?nM^'aVq^#6=l."WKO0Ieep.LNHci1*[SC!V$-q!<i]9'/<9uM>`A=O-Q-& Ip5#Y&HW@F"5<f(!X8r?)D4<S@;L.AO-#NgPa%GuQBmr-RYPf`6o-,+$47\%5"\skHi/g-H!s6!,oI-o r;[''!WiK5.SXgUN!F`A9K"7:%g;k3o)K!t#7D(f6!ep:N!kZ1Q'-o35Tp:5!Wi3!#6G,=&gKVEG5[@. NK]WjN+b[-#m150!Up'o"UP_U/kT]*oo'04F'([U*>Ae\oDjICJcLB&JcOF'#6bnp6WRK'D>\P^Ch$I8 1*$i+b5_bN(FqgP>[qULFpW>8BjFCp.2WBnp])ZC!WrT=+uMnj?tst7I"$NoI=6KjI=Hcm>sp7_)&X>2 /k'&fH[C2?Ih$pWJV&W3Hs8`Y%LNCB!W<!'"qht,3D*LlrH8EcAQMD],8(:W!!`cJ/j`KAAT%Hi"ES3Z 90*/%'aXs2!"/f/!s9N,@Yp,#J9_$9#AHja'EnU@"3LTK":,GM,Wet@q0!!\;)9!l!s/Q'!:p0r!t#_a .m$L7Fo?IgH\.$1CI99Nr;kXQ%L!4Q)CII9>%MGgGC4gfrdP]6It<-'L4sD?3$K.K#6PDc:jA1`Km`fA "'[r3#m1;4!Wr<##6G&7$l(9\?MJ[K?UH+J"U"l-n,N[t&frP`93c?4FpDqs=%G4n'*n:4#6bVX-oFLt B`3)[FD"cM3@,CH!pfmj#SS704%oZ\DtS8ZE)\\3"9SZ+!LWq>!.k3&!4W":!<NB-&2$e'Q]m>Wr,i9M 75#Ji$O6b7jT+WI$NU;3"VE@`GaFVPJGaNq?:d!s(D$iT!VudC!<`Z;'.,hAE-?SWI!g?iI!U0dH#mV( ;F`bu*>0;:/N-.&CO(:*IL^aPH#Ht\4"DEg$jHh:"8i-*$6(Te<+0T_F`e(7F_t/H//f03#6Fr*!"/f/ !Wru\5@&8PGBWq-$$'-8/Jf$/#6P"t!"/f2$4n"&4]lZHF`dP(#A6XY&-N(;!n./E!!`cC+"TQO@W;-c "D^ac'EnC;n,N^s&L05,=ClDmrH/HU9/Rh+&./OA!Wh!T%0dFc/3QmEJ<#M@JU`+eIXQZmH?jXG=@t\2 -Q3R,&JPs$0M,f!G'.p)FU)&.*!QKH!Wi6"#6YMS,r7tlCA;oV>Ws8:!s/N)n,N\$*%s`\@;Bo^FU;nc 5qErh%0ch6q>^a,*AL,iAo;\gFU<"h67Wlb$jQk8m/RA$+>c\lA8QA[FTZP[1Dg#m!!9e5JcLB&JcM&9 p](Bs":>h?)Z^?L_#OQ<":Gn@)Z^?Ll2V(k#884*-71,g#:CiE+WD.+#58*-"red5-RpSp-mp2T$jHe% !!*36r>PeR#QjDo!WrZ?r>PeU#m0,e":#DL(E38l!ZMRL^&S08&G[7G&cq"m!!rKA!u)+G!W2rF!"oDD ',hu?-RgJo.4?Mh*#&bb!VZQs!=B>O)#P<Q"Rc<j#P]5<#58,b!!*37r>PeQ#6F2l!<Wi1)Zgl_!oO%Z "r-_L!>Yb(!.k3&!.k3&!8%8V!X9,K*@a!8qbRVq:JO,*)$g9F!<LLH#6P2@(*G+e7/g$_;#X5r:-U9I #Qb&.!Vl^(!=')M+"]KC<E`X6@/OFH?<^Q075ukC*>T4q)(IdF<a&g>rFH@H?X$N)5;4B$&dnm@!!`Q. "pbke1I_1;#u=>j3$o=A!W`?"!!`T2%2'X13(EgBr_EMg#!44K"Te]*n,N^p#SJ.-1H\'"rD3_j4YS0$ '+4ud!!`N*!WrrV1J%=<#>IE;-6!X-"o\Mn!!`N,"U>AQ.R*`+$;XDl689Vs#mLM6gAiW&!sJo?)'gpu 6VLKb?=78RA7K+X?X$Q07m/OQ*Yf+f"Uu7k/2f^`r(mJ_2(0FH'b1ELqu?p%!<NE@.6mT(#=UO#*u5@m !q60p!X&]5'I,G)qbRSp:J3Vm'*A::!W2p&!X&]6&gB,!r(m_r:JOVG-kume!<MWh"Tei6$lLJp3(ij? #YmT;,8Un!"Tb"kJcLB&JcN.X#6YJP,qh#348_;J3&)m-)%QrSj8eBD#6YGQ,VCi148_;J2_HBs'+5!H p])66!WiH2&f`8O2a9l,9heAY:/";Q7moX)0-_;3%2]Qm-8n:b9M\J^;,C"^8Oc'1/ft]2"p4u*!!rc8 &/ZK:0fhN`$9pa<1Fj[f&IAR@q#CX'%N-QE0fD,l56sG1/0c)I$3^J"!"/f.!WilU1eLG46pU]8#<4+J $3L;1!Rh&D!!`T0#R_:f.m!Jj#<F=R$j6V6!q60p!X9#D(Eb1ar'(KQ5s[gr,8(+[!SIG^"9o2C'HJPT 3'Tf&9htdc;#O6*:eXGL5rL/4&dnpJ!s]\p5>Fg?6Ms%Q0HUl1!s/N)r;[''!sJl<(F:j356itg'*eXA !s7rl#6YAF(a(4]3rM8J4YnT5)%d2Yp](O$#nIak,qh7V56sG1/0l/I$3^Is!!`Z8&JlN;1HkCq"$S7T %/g5-!PJJb!.k3&!0mNm!!*-&!sfer5>FjA7JoFV1aa1N#mUP6cN"=R!WiH1)D"*J91MGK5mK4q*>&\d "9SB!&HMt;#72.h/NQ0d8PMuV:f1%::J=GP5W:AG+;YRr%MK[#-SdkY:/=_c;bp1a7QN+F)&!D`!WrN+ qu?s*%iQ]F1-.Ss5mKS.,T.+##6k#*$3://!XKJb0KVH_r':TR0dR\H$3p\8n,Ndt"pbYS+=oN95!]'4 #XLI!('t'E!s-OE#6bGI(a1Cd4o%AK4=V3V!WrK)n,N[q#o"F0/i>]f5mTCu*to%h"9S`*!SRN%":5VU +Y5TB:/=Y_;H$Il;bp+[83Sm^,9%@.#m^eD$P41%1-@]a5l<nP0-1W+!s/N$!!`T2%29d-00&_m"#1r2 "TAH&!WE)j!!`Z<)C6pi3^EX0#<aac)%R)["o&'&"V2P$0fD*XrBU]R0dRYG$3p\7li77q&KE2P2)mem 5mKS*)[lfL!s.unJcLB&JcLB&JcNair;jb8JcLB&JcLB&JcLB&JcN.X#6=o0"U>DG'DrUD('>0Y"p4c) k5a]G#6=o1"pbVJ'DrRM()@]%&e,$HrW2`n,Qe/S#RqC`+!DmW.4Qet.k)eh*ubt.%LNIG"Tnu<&JlK3 -7f$H$S*SI*>]A"$O-e;!rN$)!<E6("pkbQ'c$``rY>VQ'bC`WrW2lr#6=o0"UGMJ'`8[P()@]%&ISdE !<MTg#6G)8$OmUZ'`AaO'G1c^#6b22dfB+BrW**(#n@XD'a>6[$O6h;!q-*n!<E6(#7M4>'aG?]$3^M5 !<LpT%06J2!sJo:%1s?o+=&9P-n?l$/1W1t+rqR;&e>?U"p=u/"9o/?%M0<O'aGB_$O?n=!Wi/u"T\W* #7M7?'aGB_$j[%?!Whcj#6=i,!sT)C'`AdG('GEg&.8^A!W)j%!<E6("UY_Pr=oYS()@]%&ISdE!<MTg #6=l-"9o5F'_E+E&If'O"Tnh=!.k3&!.k39!;lg$!X&`8%1NgE&-i[R#m^b<!s6XG"p+o3#n7=Rq[`uB $O?tA!WrMu!<*!-"9f#;%MKTs*??1C*t',1*#]V-&.T$P"p=f,'F5-])&sY=+sS9S+<DC9&eGBU"U"`* qu?s'"9eu9$4IID&-i^U$3pe?!s85t#6G#5$4I@Q&,ZtD%LNIG"Tni-mf<=f#6bDD'bh;o&cN=I&.T!N !s/N)!QkBI!<N?+"UPPIq%*cA$3pY7!W`>k!!`N+"9eu8$OutErXf8C#m:;1!!1aQ*!-0D"9f&<$kO*i )]g(E+sS<V+<_^A'G(ZZ#R120#Qb)4$ka<i'+t-R"q1b@!s/K)qZ$g%!WrQ0#n?Y@#7UqC"9JT*!WE)j !!`Q."U58?$kN:J#7h:O#6tD7!r)a#!X&W1#RUqMr"')C$4$h>!s8Sj!!WK-"U,2>%.b#7$O-\7!<N;n !.k3&!.k3&!8@MQ!<rZ3$kX0f')N7G%LNFD!sA],c2dhE"p>/>&JPolr=K/E&Io-QrWE6(!VcXN!<N<* "pk_L',DN.+!DgO+<DOB)&<hq$4-q?"9Sc3#Rh:\)]^%F,9e<S*?#V%$O-b;rW<0&!W2p&!X/c8%1E[V r"/u>$4$M3q>^g&!<WK3%1a$^&H!+B%LNCB!sA]-!Up'r!<N?+"UYYJ%hK<M&I&aQ#6Y&.!m(EI!X&Z2 #n%1Qq%3]?$3p_5!W<#i!!`N,"pbSF%1rFL#7h4K"U"l/!nRD[!WrT2$4RR_)&s\@rZ`:+,9IsG()%8h #m^_<!sA]/"9f#:%1`s\&H!+B%0m";rrMus#6=o0"U>AC&,6_=%1!(<rW2Hf#6P,7$4RIU&H!+E%1*7A "9Sc$!!`Q/#RV%O&.ndP#S7IQ"p4u1!WhWf"Tno5$k*UH%hSCG!tYhG"TAFg!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!0mPB!!iT-":#2>$k<dT%hB3]$jd.A!s/N$!##A6!WiN2$kO$`&J>Wa#R(82!<K%tJcO-t '*/1=#mq(N&/#Qe&.]0U"Tnf,!QP1l!.k3&!.k3&!.k45!!<9*"UG#5#RUnF#RCY<!s//s%fuk:#7(VC %1N^R$4-q>!lb4l!3?/)!X&Z3#mq(=%0[.K#m:>2kQ$27JcLB&JcLB&JcNXf&-E%?$4.+J$OR.F"pG,3 !s/2t%fuk;#71bG%1ERM#R:P:"6ol<!/pma!<E6'"9f)?%1NXR%LiaN#6Y/3!s+A]JcLB&JcLB&PlQC9 JcLB&JcLB&JcLB&JcLB&JcOp5#6=o/"9f#;$N1>;$4$h=!s/K(quHZr!WrW6r!WZ8#R(>/!QkCo!3?/) !<WH.#RUq<$jI(H$4$h>!r`5d!.k3&!.k3&!.k3&!5\^>!WrT0"pXu1"9nu2!s//s#Qb)2"U5/9#RUJ9 !s\r2!U9Z:!/LUY!WrQ/#7(56r<WQ1!s8R`!.k3&!.k3&!0mPB!!E?+"U>;2#R1P="U"r1"8Dj,!WrT0 #7(VB#RCY>"Tni.U&]cFdf9RQ!WiH-"UP#4#6tG:!s/Q,!Q4ti!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!5\^?!<E6(!sAf)"p5#3!s8H&qZ-Tr!s8W/#5nc/"pG,2rW2BdJcLT,"T\W+"9\o.#6+r-"p+r1 !rW.]!.k3&!.k3&!0mPB!!33'"8`3$"T8H&!r)`s!<N?%"9J`0"o\Z)"9/Fs!.k3t!!rZ-!sA`1"9\l3 qud$%!Q4ti!.k3&!.k3&!.k45!!*-'r<*9-"9\f0"TAK'!VcWr!WiK&":,28"9\f0!s8VE!.k3S!<*!) !WrQ/"U"r4"oAB%!p9Q8!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!/^dT!WN6$"9&E%!rW/p!<*!! !rE'"!r`4q!.k3s!<*$!!r<$!!r`5>!.k3&!.k3&!.k3&!9O:]!W<)s"9/H&!VZTo!WE/s!s/N*!QG+k !36)$!<N>t!s/N*!TsH7!.k3&!.k3&!.k3f!!!'!!rE)u!WW8q!<3*!!r<$!!ri;d!.k3-!<3*"!r`<" "9&B%!K7#1!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4`*P!J1?(!J1?(!J1?(!J1?( !L3\;!J1?(!J1?(!J1?(!J1?(!J1?(!J1?(!J1?(!J1?(!J1?_!QkCo!.k3&!.k3&!.k3&!.k39!.k?* "G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-c."G-cA"G-W*!.k3&!.k3& !.k3&!.k4,!2^$R#_E>6#_E>6#_E>6#_E>m#g*@'#(d&2#(d&2#(d&2#(d&E#(d&2#(d&2#(d&2#(d&2 #(d'8#,VBP!.k3&!.k3&!.k3&!.k3]!6P_%%"\n>%"\n>%"\n>%"\nQ%"\b:#_E>6#_E>6#_E>6#_E?< #c7o[$%`J8$%`J8$%`J8$%`Jo$-E7"!.k3&!.k3&!.k3&!.k39!.kf7&V:UH&V:UH&V:UH&V:VN&Z-"h %>#%@%>#%@%>#%@%>#%@%>#%@%>#%@%>#%@%>#%@%@%BS!.k3&!.k3&!.k3&!.k3&!8RXP7"RgY7"RgY 7"RgY7"RgY7(G_.21d];21d];21d];21d];23g%N2M*i=2M*i=2M*i=2M*i=2Vg9g!.k3&!.k3&!.k3& !.k3&!4`*PI"H`tI"H`tI"H`tI"H`tI$K)2B7acJB7acJB7acJB7acJB7acJB7acJB7acJB7acJB7ad, B?CU6$\Ab<$\Ab<$\Ab<$\AbO$\G1+Uk5CoUk5CoUk5CoUk5DuUo'9+Ob/^IOb/^IOb/^IOb/_+Oii`: O+NFEO+NFEO+NFEO+NFXO+LGb=+XM*=+XM*=+XM*=+XN0=/NZ_]n3qL]n3qL]n3qL]n3r.]umI/Xb*[, Xb*[,Xb*[,Xb*[?Xb*L'W.Lt"W.Lt"W.Lt"W.Lu(W2A=$gOe13gOe13gOe13gOe1jgWI9_^Oj4P^Oj4P ^Oj4P^Oj4c^OiS>Xb*[,Xb*[,Xb*[,Xb*\2Xer.NX+IC(X+IC(X+IC(X+IC_X30RVk(;`Ik(;`Ik(;`I k(;`\k(:@"^Oj4P^Oj4P^Oj4P^Oj5V^S\,bXb*[,Xb*[,Xb*[,Xb*[cXid\rX+IC(X+IC(X+IC(X+IC; X+KJck(;`Ik(;`Ik(;`Ik(;aOk,,nF^Oj4P^Oj4P^Oj4P^Oj52^WN[1Xb*[,Xb*[,Xb*[,Xb*[?Xb*U* X+IC(X+IC(X+IC(X+ID.X/>$2k(;`Ik(;`Ik(;`Ik(;a+k/tGj^Oj4P^Oj4P^Oj4P^Oj4c^OiS>Xb*[, Xb*[,Xb*[,Xb*\2Xer.NX+IC(X+IC(X+IC(X+IC_X30RVk(;`Ik(;`Ik(;`Ik(;`\k(:9u]n3qL]n3qL ]pHD4^@]2:]n3qL^"pB!XFdO*XG3hTXo>GVXFdO*XS/anXT5NtXT5O%Xe`%MXLYFTW.Lt"W.Lu,W;<Ek W.Lt"W7%XEVu<OoWq`UpWrAsrVoYfgW0O<5gk+=5goB0+h;I(?gk+=Ng]lTjhVR5NjS7j>jPo%Qrn[V0 K%tt5h;"m>K"HWHL:dDsrk*rsK"HWHp:L@;rOi3FpV6aAr4Jl<K"JS*b,p8tJusX,iN;sZWNCcSK!!J' riQ7&orS4sriQ.%afU/sQ*#Y;JuO@$Wi>ipi2M=-JuP6=r2KdqW;*CoW2KNm!3(RLJuRS*VTFG3K#rbh "3]!8ciVM<bD"&iab%Y.aTg&;e(WR4iV;O?in`A?cHaVVV9+>2\]N"(K"-EBK"0^JrOJl:K"-EBd^]:e "1u4Z^%f>D^:h2Y\];43\<XRUWIh+$WN<)oWo0k.WIh+=WW&muXKM2t!3Z7"!3(RLJuRS*VP\sBJu43u !N2dqVPf*EJu4-sp8/(mV5L8lWi2roWs5T&WiDtoVk^,@VR`SHZ%B64Z%B7@Ym@_D[^N`[]t(MLZ%B64 Z-ol^\\Q/(d+dF<qW8(EiS2_t]t(SYag$H&Q*GqIK!U'8WjD]3!4Dg5i3S$AK!UrQ#.1eJ\@TAepqHpE ]XkWP[/[IaZ\#O>Z_jOMUk5CsU][HhUo"3hUnrd@Ju"!ooqVbgW2co$XS/b!X/VnjV50o=Uq*;DTRrhg TRrisT_tJ`UAgjcTRrhgT[KJ<Tq\B\VlH\qql9n#Wi2qqVZ!41TRri%TRrJ]Q@bF(Q3`nHSY2mZVkBU= Q@bESQCF0FTW#'&`m``(qrS7HjPJJ-Z)=@fR?iGjJsP5YVPAa<Jtn-s"f8)rXg#,6YcXn#L80?qJtr"6 "fA5uYdCt?]`>eE^B_Hb\[8TDWhlPeJtolOb)_.8JrbMEjc9e2OckorS=ZLJS!T5:O+NFEO4''pOcu*! T;8KgXSJt&Y,\:iS=,P^O+NFXO+N@CNIm.mN=1c-OH>`qS"Q:=P`Od_JrPAARuIZ6OHYs!Tr"dgW"#c- X/`1tWi)P\R?`knJrPAAh2S:,JkgnmMG=CQ<*3=:FbGq\LN6j%L/*=qJkl#7(K=RGB7cnog>(QDjQ>Uc jPA+lUPa8.=J\cE::X-BI"H`tI"Hb-HjbFVL5V@iW3E:mOFaEZJp`/tdX2CMIt<6:U9:u9]Y46X#JIaZ ZE'^cLrk$rI$K)2B7acJB<GkTBl7m4J;]_bR>Q?-iFdaTJnLQc$YX6jDL[\:VlHo%Y5>=*W1fW>J9#:S B7acJB7acJB8U=,Bl7m3Iu0AY"-n[gCkcSSB7adiB+&BeCi4]\RA?^[W2T]r#caf%V4O!3IrV;tJnMW, apWe/Jd[/<jU2G*&f)E;7::d]5pR#A$\Ab<$doCj$k3a\.S=oe_pI/troOLIh8uj]DFuGraU<\.Pm`16 Jk(D_Y=B!l:fq%8HB4]#U5X(iiCAJiJk)>$$qNr^9hoMZSZ]?1]Y=?Z#eddUYG@A.?Uo]<Jk+WeVDs/e JiJZJ#WY+=9N#GIMjsm1G?mLh3.a,A3;5B?3BB5b5$2c\StrBhr2g4*Whc5KI:Z-L3.a-#36F:63eBDE 3p&I34$cA3<+^B3R>lDs7&i;"3eBEA3Xe)44?l)5E/0mUVlH]oWs>T$Tpq*jAkpH/Ji]/XJcLB&JcMhO #6G5V7<M<F"lKB4!.k3;!!`Q@5'`g3d,Frc#i*@nIoe!)!!%TNJcOU,VAFh#Jes=]#T4g81-AffQDt%T G>9H=(P3HT(\SXQ(`4,/5%TSHY-bdRrP&TN\[/B0JQt%.(P3I6(Wm>A&V:UH&`sZ6'H%u?/kKW*R=o$5 )laL%&V:VC&IK-`'GN6!EfclgX8B"'Whc)ACe?2!&V:U[&V:UH&V:Uu&I]?k+=Jp:Aq6.u@mD'n&V:UH &Xs@?',)&o0iW1SR\?XXrMp4&V4a03CeZ>jJe<SHh%?LaJcLB&K`D/]/nY2B#D<)/!.k4@!!WKA;L,%W hYlR?gVB+o64fmlJcLB&JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&c2\(k7WFZfYIM:E^C.`cZ`TgF :*ToE!s-XHJcM&9JcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&QN.7+2dLopSuJgiXU)#.Umm3P4rFJ) !s8UY!.k3&!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&nc/q33aR8qR\m$`ri6F*V4j93Aj@7;"9S_) !.k3&!.k3&!.k4/!!EBH?ml)T!.k3&!6bEI"=d5qZ/"F>josPUR;tM!`rL\kPlQC9JcLB&Y5et3#S7ju 7W+6bP@ui_i;eH0JcM,;#8]3tGE8N)]`#SN]tCk]W/G.D'`nmQ"GHi-!.k3&!.k3/!!iW1$PXO==aHA9 IT.d&L&cf*JcP?A#n\XU@X4$.Xfei+XU;51UR$%!.hE'n"K;BQ!.k3&!.k3&!9O7i!X9&I*'.8KPC-C] $*!uW!.k3r!#H4r7q-_&SuS`fWiN(uVP',p;Ci@d#6`9OJcM&9JcLB&JcMbM"9TcS-j&9+JcLB&PQ20u ,#43Mio9%]hTN0f?lT(FJcLB&JcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!:g++&1'G;GEo5@]tV7r ^:h.hYaBW/-lip+W;qMMJcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcO'r"q)A&6XkS6riHX4Xf\\, Wh4oQ4WbFK#0d."!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3;!!`oQ0L]H"QDsk^$*'r(WMc8< @Qtt:((CJ%!.k3&!.k3&!/1CS"!CtP-j#&%JcLB&mJm_%.rNJciSrqWgW@!]1'aTTJcLB&JcLB&JcOp5 $ipVF)'_UgNi8.T2@QScJcLB&c2\7['dGG:K;?&k]tV7rrk/QHUkiPG//o#B!.k39!.k3&!.k3S!"8o5 $PXO==aHB_<%814!.k3&!1*Zj#7qh$88aNhrN-@.Xf\\)OE+2Q![8?bK`H])JcLB&JcL]/#Qb2='HB/; H'8>X<\"K2!.k3&!:g*t#8%q&8T'TcVl6Porhp+&VN5^q1*[M?W;qMMJcLB&JcLB&huEl^+CHT!VuVDL JcNmm%2)RSh;7,OiniGDZr.^]!.k39!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!1*Zm"UYeU5B31# ]Y2#V^BD3PQZuU84sppC!J^Z,!.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcP?A#6Y8>&2@IFVZ*[t Y5GC-S:Y6?0H:N&!NQ3P!.k3&!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k3r!"/o8$kY7$KVGKHW2TZq $*'DEAOeHr%06LU!.k39!.k3&!.k3M!!EBH?ml*6!.k3&!0R<d"?3:1gYUrgjoj7Z0aRi3!.k3&!.k3& !/gg_!=05S,=ZR2Vur5s2@P<?JcLB&nc0%"#7M+t?AYVe\@fNR^C.`]UQB\%2]Di$!WfD'JcLB&JcLB& JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&c2\1R"UGJ`9QHDnWNQ0$$`p+bHX]Gp'a"O>!mq""!0mP9!.k3& !3ZA2!X9&I*'.8KPC-C]$/kl9!.k3;!"/o5#mr%TEg!)mWi5ls"KJ,TH".%K//86h!Wn2YJcLB&JcLB& K`D/V+CG3u!e^Q*!.k4;!!O3GPHi<frT47;P>EG.V>u2JJcLB&JcLB&jo>ej#S7ju7W+6bP@ui_WW7VN JcO'r$NgP;$78GfQ)(Un^&>\R]st5>PAs/?"pG)1d/\auPlQC9JcLB&Y5et4"q)+a2d(HmIT.d&i;eH0 JcM,;$3LD7#95j4J<?G&r2g+'WLf0!#$j8/"9\f.M#`,-JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3& !:g*t!sAc5*^3q[O.3#HrMp=)VOEKl?9B52"9S_-!.k3&!.k3&!.k4/!!EBH?ml)T!.k3&!6>-D"tNc) Z.o6>"l-A.9d^+f!.k39!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!1*Zn!<WE-)EM,NPbbY!rP&KK ]=5#C#DcV<$3gY9!K$l/!.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcP?A$N^D4";EFZB7H&=Y5>=. Vk95p8gFWE"9S\-!.k3&!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!6tQP!WrQ.'J<$kIZL/%rMp@* WMH&IED7_a"9\f-dK"k!PlQC9JcLB&W;m&'+CHT!hZ/6.JcLl4":H\\PLKKm"Q%8&MI$9!K)gK'JcLB& JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!:Bgl&1BnQI[R=Mr4`WQ]tChDE'"I8"p4n/!.k3&!.k3&!.k45 !"8o5$PXO==aHB_<%80R!.k3&!6P9G$Qh3"BnW#SXUMA7XKJIV>V6<f"9S\Q!.k39!.k3&!.k3S!"8o5 $ks[B>'Z<Z<\"L8!.k3&!0[Bf$m7H'BnDbPrMp("VlHbm#D?A9#mUS9!K$l/!.k3&!.k3)!!36F?i_YW KE-T(JcP'9!t7&0ao1?+in`>3XZ-H^!.k3&!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!6P9H$m%,m B8NFnrk/cU^V.=n\YFaW.N]<2!R^t"!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k37!"0&I-8nhF OJf1]XfhW)!3-9cD+,Q_%L3&m!.k3&!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&mJmM!(FD+AFH<5t rhp7*W2Q_nNbh3.(Cp`PXoO%RJcLB&JcLB&huEl^+CHT!VuVDLJcNdj%K[PHXkVXfioJtNf"FlkbQ*4p PlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLu7&-rpl/P^MXYe%K\^;%Cq]t4NLPAs8S,7jp6!.k3& !.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&mJmOt%Mg9Q@YCASY557*R=/@'.iSitXoO%RJcLB&JcLB& jo>ek"q21c3a-fmHr_a(WW7VNJcNpn(^:Ke,=#ajS>WBeW2ceoW2Z)1?9Tn[$j+iWJcM&9JcLB&JcMbM "9TcS-j&9+JcLB&NW9Fl22]E#gYq5Ph:p$QCaTC?!.k3&!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB& mJn(,$4mt0@uRIt\\5\k^V7CpZ(["n:bijiXoO%RJcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcNpn (^('O&LpV$R&?seXf\b.XfS1SFB^sW&d-P^JcM&9JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&P5l!o #Rh:o;KnD%VQ-Sqrhogs#G$`o>X9bO",[)1!.k3&!.k3)!!36F?i_YWKE-T(JcP!7%NT8c_pdK)io/bJ N(+]fWW7VNJcLB&JcLB&jo>ej#S7ju7W+6bP@ui_WW7VNJcNpn$NU>3"<UBfUU.JB^&>\O]st/7NGCs+ "4@1$!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k37!"/i1!sBB'Boo*gXfVH&#H4)KGZZj@",[)1 !.k3&!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcP3=$N^D4";a=;NhE5JW;`h(Wi2b\Lj)r[)$I)BJcLB& JcLB&JcO^/"9TcS-j$=IJcLB&_uKrL:m8*)h#?F?jPI(Z5op*R!.k39!.k3&!.k3S!"8l6&/c]^DN:ZZ BJp:X!.k3&!0[E^!=/`B5&$%PY-u"A^AttU\[&3*Ip"E5"p>#/NW=Y2JcLB&JcL]/#Qb2<'H8u6HBnY^ <%80.!.k3&!:Bgo!<E6'&MR42OIW6GXUD/(Q\oKI,R=MU!s,\-JcLB&JcLB&JcOp5$j$VA'HB/;H'<VV .g`3UJcLB&aoDeM!<N<70irX\RA6e\Wskr(T9Y4H8L4ZG"9S\U!.k39!.k3&!.k3M!!EBH?ml*6!.k3& !0$s^![(<`Wn..2!9"'uO^p`eLB)o+JcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!:9dc!='2h:i_Ph Ye0hJ$bX!TXH76a)%HuW!O;]W!.k3&!.k3&!9O7i!X9#H)`LoGQ@;d_#c[lV!.k3m!"&`.!Y$A=??hF$ XSo70Y-+atRX8-l'FG'J!nI@'!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k36!"&`.!Y$D@?[%Bs W;WasW!fW&SsOb*1_^9&"9OS`JcLB&JcLB&K`D/V+CG3u!e^Q*!.k46!!EKI7Y8\Zjp'hjZ&`iL!iuBR !.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3m!<*!($m@Q,E0$s.r4`WQ]XbJCI8M@0&.&Eh!.k39 !.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!0R?]!=&lI.mR?bQ)aba$a$S3Vi,4S*#&bb!fd84!.k3& !.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcP0<rW*92)(\*[G`nu)ri6I-W2c_iM.f6t'FY3JZ2fIVJcLB& JcLB&huEl^+CHT!VuVDLJcNXf"9]oT\`EbP#3=Oa]rFC-ciAXtPlQC9JcLB&Y5et3#S7ju7W+6bP@ui_ i;eH0JcLi3#6khc0Md(e[f!l?^](nOX,UXJ,SpjkNW=Y2JcLB&JcL]/#Qb2<'H8u6HBnY^<%80.!.k3& !9sOh":c:p5%fbNr2g@0Xf\[mGYoq0&I8KE!.k3&!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!6,!F ":l@s5\GnJWiH'!rMTseGZ-+4&IAQj!.k39!.k3&!.k3M!!EBH?ml*6!.k3&!/^aZ$ULfRjSn9FiniPI DBFZ7JcLB&JcLB&MZ="`#7_On6=ttG",pVC$\eY5!.k49!"/r='d,SPOKQ4.]tO?Y$*p%H;EH6?"T\Y2 !.k3&!.k3&!.k45!"8o4$5"+3;fI_>:+$=I!.k3&!6,!D":,PS/ld7ipoOjrLLib(*"N/Q!S@C(!0mP9 !.k3&!3ZA2!X/oC))P<3MfhiE#iPc8!.k33!"8u:&Jm*%HCCh5W2QcqWsPANAje9n%g2n6O8sk4JcLB& JcLK)!Wj-.!#pOjJcLB&jT#Jd,^IM_gYVkj!fo;JXT3qQJcLB&JcLB&jo>ej"q24e4'[0!J64B1WW7VN JcNdj$Ng\F'e<=8TsD,<^&5VM[AAt/=Z[`2rW1[PJcM&9JcLB&JcMtS$ipJ;&/HliB7Xhf,7!0-JcLB& NrTRj"ptna7;IjUVlQr%rN-F(P'^Y./f"Tl!<J;_JcLB&JcLB&MZ="`":5VT02#r.")CCO#DN51!.k49 !"/o7$4nCOCPn^YVlKZq$DNW.@S&3h"Te]*[/bdYJcLB&JcLB&hZ*]c/e=i[JcLB&^]4NK7ZXRhg\g19 W)t;MdK"k!PlQC9JcLB&Y5et3"q2+_1Jr+JF%n%hi;eH0JcLi3$j$S<$m%fSO//tf]YFE[$G!C9P]oqR $3C5/OT9t5JcLB&JcL]/#QY&6%2:3U>BBsR4WXf^!.k3&!9sOl!X&]5'fB->Oe/JRr2g=+T9+P359L14 !Wf\/JcLB&JcLB&JcOp5$ipJ;%hpEY>]a=;*s\eGJcLB&`W-AJ"9o/K2Hk?dR\Qn\WsY_nNdbG'+:&#M !SII)!0mP9!.k3&!2ol!!u_C#!.k3&!/U[["!UfoWmKo,joiAL:au^.!.k3&!.k3&!/gg_!<ifA(+i!a H37bH,6rr'JcLB&l2V1m!WrN:0j&ghUp7N/^C.]aZ)Wjs2@KZh!<KV/JcLB&JcLB&JcOp5$ipJ9$P=UB :M!H])[35AJcLB&`W-AI!WrN6-Uqa"OeAcQXUD;2TUC((.gZ:Z!Wh!TJcM&9JcLB&JcMtS$ipJ:$kX^F ;.`cc*!P:$JcLB&NrTRh!WrQ7-V%g"O.E2LrMp=+VOa#t<%J=X!WiCc!.k3&!.k3&!.t7O$31-[!.k3& !94%^$SGM>`r+s&d'8OG+p+tKJcLB&JcLB&JcOp5$ipJ;$kagF:1R3Y*!WDCJcLB&_>jiK,su3nQ`@R0 rP&`R]XY>@GXrb^#R(:`!.k39!.k3&!.k3S!"8l2"pk_X/3Zor.MW*F!.k3&!/gg_#9,KsCP%tRXT5O& XU;52Ul/_C'aP!H!g3P8!.k3&!.k3/!!iT.#71hZ/O35:67EWPL&cf*JcOp5(^M-?;eprLVPpGnWiN(u VP/iX3u&&+"9Q"3JcLB&JcLB&JcLB&JcLB&^&SWR0k[cMioK1_gWR%#64)-AJcM&9JcLB&JcMtS$ipG7 #n.Xu1ds>K&d7.nJcLB&MZ="f)DFZlKqG]b&&#Zk^V.:l\Yk9l1a*SB"-NY9!.k3&!.k3/!!iT-"9o,E *%EiK.iSp#L&cf*JcOp5#6bee3)OUPU].@qY5YO0XK%M*:+@(l#QqL8JcLB&JcLB&JcOp5$ipG5#72%b .5rdt%g8m4JcLB&_>kDV'IGk>Di(-cVl6PpVlH\nP&aAJ)%d/Xg&Q^)PlQC9JcLB&JcLB&JcLN*!u47g gBl]mio](Ja15FlMu\G0JcLB&JcLZ.#6Fu2#7VCi-NbJ+$Nl+`JcLB&jo>en&0EJnE0RN<]tM.prk/TM YEsN32^T4C[K(mZJcLB&JcLB&jT#Yi!sAc6&/H6$&-rB<!.k3&!5\^C":Gti2I(a%Y,n`(XU;/2Y+C5T 5q<oc"PNj-!0mP9!.k3&!3Q;0!X&W0#n[sp(D$iSi;eH0JcL]/#QtPP,</tXRApdtW2QbqW2ckdJRh,! *Y/C:!.k3&!.k3&!.k3&!.k3&!9!nf"=eWBgYCcMhV?i1Hnbo3!.k3&!.k3&!.k44!"/f.!WrT2$4I7H "9GM&JcLB&_>kDT#RqLs=bWfc]Y2"n^V7Cp[%iS!;)TI$g&Q^)PlQC9JcLB&XoJh1!WiH,"U>>="U"nc !.k3&!/gg_!sT&C+%L77Wr]B)qlL+!OEXno.MW/N!.k3&!.k3&!/^a]!<N<)"9f&;!sf&5!ep],!.k45 !#PeB#nS4NE0@-!Wi2tuW2QVfNd"_p.i/Du!.k3&!.k3&!.k3&!.k3&!5&:A(1,#-gYV)RiSNC`:`TYh !.k39!.k3&!.k3&!.k3&!/gg_!<WK1'h!59Zi[bL^&5VN\ZMEWCIfi^!r`4d!.k3&!.k3&!.k3&!.k3& !9O7f!WrQ/&2djPV5jBo$`]\PE*,+B#Qb&.!P/8_!.k3&!.k3&!.k3&!.k3f!"/i1"9f>p@Y^YSWN,ls $`9;GE*,1E#m(//!T!g.!0mP9!.k3&!.k3&!.k3)!!3?gSH?1?g\g1:]lH1M!fm>5!.k3&!.k3&!.k3& !.k45!"/f0!sK5o?\Y;V[(H7N$bNaDRt=s+'a=gD!P/8_!.k3&!.k3&!.k3&!.k3f!"&`/!sAu]9lQ/^ V#%2#UR$[P9Ip_X"9S_^!.k39!.k3&!.k3&!.k3&!/gg_!<WH-$nG(lN<5H?WVie)WM#H.CecPo"9\f. Q2lL:JcLB&JcLB&JcLB&JcO[.";X^NTZR,o"Ncj83"WCrJcLB&JcLB&JcLB&JcLB&_>jrE!<WE4-qS<5 SZTF"^C.]aZDs4380JBJ"U!T]JcM&9JcLB&JcLB&JcLB&MZ="`!WrN1+$*PH!f<DHqlL4*Tp^I<3>`#+ "9XqiJcLB&JcLB&JcLB&JcLB&jo>bi!WrQ3+?WhLLR=t:Wsbr)SsFn63uJ>0"9Z48JcLB&JcLB&JcLB& JcLB&])Vs9)Er2Mr8n16[#]#U#1rp-!0mP9!.k3&!.k3&!.k3.!<*!%#95QrC]]Ni[/@ZH]tLtdVhJ;( '+>-KQ2lL:JcLB&JcLB&JcLB&JcOm4$3:20"ViLN=ET\#qlL4.Wi2/#80ABK"p;F:JcLB&JcLB&JcLB& JcLB&_#OfC!WiN?.6q!WNM69N$`C#&V35ag+:eb_"5X$0!0mP9!.k3&!.k3&!.k3'!!!'%)c!((josSi `33D\O8sk4JcLB&JcLB&JcLB&JcOd1#m:kc1J2hWYeIjM^C%]g]s<r>3Z\tD"M+Sb!5eg7!W3#A!.k3& !.k3&!.k3&!58F?":Z4s4(*Z3Xf\c'XTtVO==k6u#R&uaJcMGDrrMlrJcLB&JcLB&JcLB&LB%G[%2pWW !b-_Mrhp:+X/`+sVk8H@/f,$)"I9%>!9jL`!VZYm!.k3&!.k3&!.k3&!8RVb"u1eiiSrq\jPetOOXpRA !.k3&!.k3&!.k3&!.k3&!58F@!t6"m2IVH>\\,VhrkAcR]sOJb><F>N#i5Q5!2'<!!<WH0#RLhG$k*Ss !.k3&!.k3&!.k3+!!EB0&fW>):NDZ!Y,qW)$EgM5Ul9.^/ftZ0Q2lL:lN$nb"p4u3"U>;>r<fD%JcLB& JcLB&JcLB&iW'Di#nn=1;0%bqWiDtsWrAq%To*YZ0H^r3\c@<^a8c2@rW3-("UFi0aoI"nJcLB&JcLB& JcN:\%2`9dbM(e5jPo.TVa_6N!.k39!.k3&!.k3&!.k3&!/COW!XK8O,R."hS$TT7^&>\O^::/.H<`]\ %$gmF!9aCi!sT#>%hTNm)B0]o!.k3&!.k3&!.k3&!9*td!X8uD)a7beUSk,nriHL0Xf@_<AP+]s#eC"f !6>-M!<E6'"9o2B%hTHj'c.\/!.k3&!.k3&!.k3&!58F?!X8uD*'e%fTVSLaWX5W&VNlXC9em[ph>i-- U]:T#!X&W2$4ZtI";DOb'GQ-!JcLB&JcLB&JcLB&"onogPHDdWro=7BiO38J$BbC@!.k3&!.k3&!.k3& !.k41!"/f0"ptu(ArWgp\%MXR#J77:Q@)dh&\7so!5njE"UGML(E=PD-n6gk!.k3&!.k3&!.k3&!58FA !WrQ1%4tM'R@gC[Y5PI-XIt]+B1=6Xh>i--U]:AqrW3<.$4ddf*$6C(,_?#J!.k3&!.k3&!/COW!X&W3 %gXdeGEn\oWi2utWX#JnO+1e4-Ol@AJcP-;%KZb:"q(qW)]Tn@+<_jMV>u2JJcLB&JcLB&JcOR+#6GrZ MQP(]k5OEEa,F(N%(?4g!.k3&!.k3&!.k3&!.k3^!!i`V;LP1;ZamgK^BhN_Z)X+/5nsFX!.k3G!<*!+ "q2.`+=A`u3'9EW!.k3&!.k3&!.k3'!!!-+*^OItRA6e[XU)#.TUC@81(XJQ!.k4;!"/i0!sJuA(*4\I /MR/[V>u2JJcLB&JcLB&JcOX-#Qu5;BSi"IVPsHo#cabmQ%3*r&HTKDJcNmm%flb8"pkeW*[`Be/2&V. /]n'F!.k3&!.k3&!.k3[!!NctB9U6lrT4:<[#AWM"5Em.!0mP9!.k3&!.k3&!.k3'!!!*++$a@hR&RI+ rP&`R]!\c:J5n$.$O-^%!1j2i!=Ju4"U>58"Tnf-!<Mfmm/RXt"q;7e-Sdq\;HR79B5).Y!.k3&!.k3& !.k3&!8[\^!u<XhDM+:OXKMN($EL%rNb_$)$4$b:^&W`bq>^KrrW3B."9er3!s8T*!T="k!<E6)%2gNN 3'KVt92AJg=]ntO!.k3&!.k3&!.k3&!4i.I";`glDM"+HW2Q_rX/MqjS;_5P+:8AW"6'<4!7h/M!r`<& "oJH&!T3qk!<WK0#ne1%0/l*d:f1.k<`W4#JcLB&JcLB&JcLB&JcPcM%MCO+Vqg:mjQ>4:W/!tUPQ6:8 iW/uZrW8qsJcLB&JcLB&JcLB&h>eAp'eMm`Jt9-Z]tV7r]tLtcWfLm[+r:[m^&W`bq>gHp$NpbE%h/mP "p>#0!T="i!<NcQ00r?<CO:VcLl@@TP0*cV!.k3&!.k3&!.k3^!#PeL,<&D8Ln:]MXfee.Y,\CfGuc[< &IAU"!.k4%!"/i0!sAc4#n.+E!s8H&iW'Sl!WiNE2cOm>F)l8AG'\ObIXcqLJcLB&JcLB&JcLE'!!<H< ,<A\<L7>4BW!o`*WhuSXGZQX<&IAT/!2';o!<WH/r<NQ2"p>#0!V$0[!"/i3#S.Xq2+qFnDfbc#!-k@@ JcLB&JcLB&JcLB&f`2Kn4+uAFiSs"Ve&/;(+p,:TJcNai$NUA9%M]g#+!MsU--?4>!.k3&!.k3&!.k3^ !#PbH*%X6dNN0Y)]t_=r]tM(bSUFNs-5HpI!.k4%!<*!-!XB,H)&<hp#mLM6!TF(k!<E??0h+i?CP&+Q V5L;nXf[0TJcLB&JcLB&JcLE'!!3rC'd>;1GaY_:Xfee.XK8S"M.f=-*"`CD!1s6!!X&Z1#R_1X&.&LA rW2TjnGj4'!WiH//6@P7ZE'XbQ^F82SXuFM!.k3&!.k3&!.k3&!8[\m!XTSd0NNF`Wi)eoWi2krWh>,\ 7k5Vm#JL1i!;c`u!<WN3rXB)@%1*4A!W`>]!##D=%i-<L=a?d6S"#k7S!oh7Q^>hpJcLB&JcLB&JcLB& [/^[<+(rsVhW!VTgtL&;4q-6IJcMMF#mVh:7oj/7D/jXrFb0UF!.k3&!.k3&!.t7O!=B#>'-'\oUV"4Q ^AP_N\YtO+9Jdk#RK/r[%fl\4!soPX,Tdm;%1*4@!V?B\!"Ar1"sQ9'9N>b]\@oPfrOo'.JcLB&JcLB& JcLB&h>dc^":,JP4D9iPXU))0Q?l[r.M`<(!.k4J!"/f/"9f#=&Jc?$%L2n5iW'Gh!WrQ64aF[:p#F)p XK;?%aoI"nJcLB&JcLB&JcN@^#Qb,8%i%9ANiE#V%'$A.Wi2eYH!3B\(CB($JcOC&!s&N1%K-nE&If$M !s/K(irBPk$5FX8;h27TrRnWXW2]]mJcLB&JcLB&JcLB&JcP]K%Lc1UgYUoMk2bU__dFShQ2lL:lMq.l /Ra7.a4oDHh511(!.k3&!.k3&!.k4-!"8l2#Rh>.CQu'4\\,ZT^C.]XSV:fP/eeBh!<L%;JcPZJ&-2qA %ML!=5#+[82_ZQs%Ktbk$3:23,t(F(>^;OEqS1/QJcLB&JcLB&JcLB&\c<'<"9o,@/m*UpVlKWr$a-(X DcStF%g)k7!TjB6!7q2^!XKAW,qC`05;ON"#m:A4!TX4h!<N?+$pT*Sq=3+OYPPAQ!.k3&!.k3&!.k3' !!!$-"9o/A0N`dnUo(/jrMp=+Rtko`4sUX@!WiCo!2BN-!<N<+&0*2\3&roT.NT3."U"o.oDnC]$j-nS +u38V^AmZAX/YrrV>u2JJcLB&JcLB&JcOF'"p-9-Xi&`KrT47+Im+SK])[E_`rH;L2ft@pe)^AfaoI"n JcLB&JcLB&JcN@^$ipG6#Ri@gJ"NaI\\7sV$bWjGRtYB;*<cNI!TjB6!7q2^!=BM_/3d'FIXQ9M>=^Lh #NGdl!<E6*-qI06A:^&YqS.U^JcLB&JcLB&JcLE'!!*E/"9o,W7VRdKUT43n$Da#DDc&5)"9S`-ScGD` &-ELi3DNU[A8GL=0,b<+"U"AsnGisu!X&Z95^L0<ldEGKqQ6UpJcLB&JcLB&JcLB&h>drb!sAf7,tD[+ QCt(QrMp=+Tp::M;_f*k"9S_B!.k1d!!!$$"9o/T3)aj:DJ<TW4!bLI#6Y+h!"8r=(aCkAM7ilI^8e1/ X3(Eo!.k3&!.k3&!.k3W!!NfuCm2ZkrT476TO^"thZ/6.dJsCN!X9#7f)Q!]5(TEAe`?ShJcLB&JcLB& JcLB&JcH/[!sJlR6thCGX0fS=^C.`cZ`K^D:aQGP"9P.pTE#N)&Krnm;.b?PY,\%ND+Z;eoDn@\$NU80 "tE;H=DW_]]DB:>!.k3&!.k3&!.k3&!8RV^!WrQ.))YB6LmY"8XU;)(RYbT?*!QNK!l=qh!;ca-!uj4& H%(C&P_3[E0,tQ1"69Fj!<NB-%R53Lo]+0+Y559C!.k3&!.k3&!.k3&!4`(;!WrQ.)E(W9L6\I2rMp=) V4a01AjIIB"9\eg!.k4*!#,G:"pkns=G=;lWgnr`;`>X-$jHgp!"8r>)C7=KMS8c8\>ZD'X+C>'!.k3& !.k3&!.k4J!!NE?3bbMHrT4:<^m8q'$CCg`!!W`H.QpQV$LRo[!!Wg!O/g.NjSJ#9!.k3&!.k3&!.k3& !8RYS!=/`B0i)\DT<Z*.^C.ch]=G,+@5&)q"TuUAJcP]K&HMtM/NlL$A:1]@i6]*#A2t7^!"/f.!XC8Q >@DZ2T=k$8aoI"nJcLB&JcLB&JcN=]$NU80!YHbC=`TFnXSf1-XKALoGu#[k"p>%j!.k4&!"]8Z:3ikC Z`pR6PB'AN*"2u2!"8l1"U,E$GIHqnaLJDLXb$P)!.k3&!.k3&!.k1Y!<E6'&LKbHEf$?erMp=)Wi;nc GYodo"p>%"!2KT/!X/i>)+8hcs8VuMXG17R,8Ldr"7uT`!"8u?)CR[SMRqumZ_si"X/5lK!.k3&!.k3& !.k4%!!EB@7?$""jos_taglmF]E!N`p](R--V&-Mb'GcKf`23c8t<91g?&1naoI"nJcLB&jT#Yh!<N<) "U>A?"Tne*!.k3&!4;e8%jX25F-EW8]tM.p^](nO[$u5.+;G=ijoBu5fDlKa";s!\6W%?H\aAkBa.I02 '&rs)!<E6+-r")RBRH8\]t:_ZZ*:?^!.k3&!3Q;%!WE-*!sAc4"p>#/i;eH0JcLB&r;['1)_F<]I@7/7 XUD;6XfeIU?oAc3#m?h"T`>Z*"Y<o=aN_iBXgk3Z=#D'0"S;]a!"K#2"9f5oC7jJ5_m?>=U]-neT:i%] JcLB&M?!VWrW30)"9f#4"p>#/L&cf*JcOI((CD-76=5,*Vl-JlWi2hqWhG/V3#</5"Mt.j!#>P7!X8uD *D;+4s8W#@Wf1R[,8Umu"69Fq!t?+n2HG3udCcELR@Bb=SXlFLaoI"nJcLB&JcLB&JcN%U%L+:n`nfM1 jPo"Me#,52i;eH0eGomV'K9<W^uCeF%bUgk"Z(^iR%0V3PE1]^NKJemJcLB&XoJh1!s8]6%i$'"%L<-p !.k3&!.k4L!"95P-oP=^TsVJG]t_>]]a)'BM.Ah%)[r;<T`>Z*"<03_6Vh-A\ErV<`11O(&bH(l!"f55 "sQE?B6T,rUS40COcGBXV>u2JJcLZ.#6Fu0":#;G'a#$T"p0MZJcLB&f`2fo&frPqD2b9nXK8S,XfSY) O`F;R+r(C#!.k4M!<*!1"YjP[gtgT'Y.1<\=>h93"QTOr!<N?,$SGS;\>l*^KRS8mFEDYJaoI"nJcLB& jT#Yi!sA`4$4mpa$3gR3!.k3&!4;eC#SS:29l,]\WiE"rWi2krVN5ar1*[M?joBu5gAhoh#7V=g8qbFg s7OF3N+YR'((^fTj8]hq$5FX67q@.<N.ZM&F`qnNG^P$n!.k3&!.k3&!.k3&!;HO'&4WS@g>(]KhV?ko <#D#'ScB&u)*hf!`8d:K%dsD`!"ArC8k)!'/h&(h*#p"CV>u2JJcLZ.#6P)5#n\+&0EW[?$j24aJcLB& f`2fm%2C!REL*i=]=kqn^V.=mXdOWG74Jqe!.k4L!"o;6"WTEb6Vq3F\EiJ6_3nmr&E3[%!<E?C3)aI, Fa/=WCLUII<`R9BJcLB&JcOm4$NgM7"q;:d,TIL)"0)?Q!.k3Y!#GbE&/I-/J=`dBXKAV-Xf\[pKP=1> +:[H5JcOL)rW*Q72fQ"ilf?-i\>=g\2^/b9j8]ho!WrQ1-:_p=L3I62;+a;B5XInk!.k3&!3Q;0!sA`3 %2Bm1*Y\n_i;eH0JcLB&r;[W:#n[t3?@SHAW2cerW2QVmR=]-L2]rX&!2KT/!XK;O,"mR.s8VN$WJkIY +VbLo"7uT`!##D>&K)iR:1SN`?s$2u8Ol3=9i7bfJcLB&JcLB&JcLB&e,Ts]/;1IPg>V,PhVH4p2%72! JcPTH#m)2>DO\],RQM&3!!`WH'+4sF!<L.>JcLB&JcOp5$ipG7#n.Xu2F]YP'*P<8JcLB&[/^R:"U>Ad >`#Jf\\,WS^B_HYVNua<3Z7&[JcOI(&ci":*&p2P;.PNnlg!'8Q"2iciW'Pk!<X&d6<RAg:.mo2/Kc)T *.e0B!.k3S!"8l1"9o,E*%Eit)\*#0!.k3&!.k4L!"&f2"U?8EEg``'Y5PI.Y,nF_JSRn1'V5<"!##A6 !XLo7_#3oi`ilnLKN^>Z&-_\+n,O(&!WrTF2H4g-9KO^I)\inq',RMGJcLB&MZ="`!sAi8'-8Y`""bN( "GQo.!.k4(!#G_?"UH>IEg<>rWi2tuWi2qkOFV+@/el/&JcHPd!!3E;(a_q*_Z0Ys[A]$r6m*0S#Qs,f '*8@J'HAP]7or5B/0Z)P(_dc-,K^"<!.k3&!.k3&!.k3S!"KiYTXiA)k2bU_g6l+s&*!YA!7_&U![LQ` TuuDa4:TmB!!MuqJcLB&JcMtS$ipJ9$kOU>87"tE)@#.#JcLB&JcP`L$NU80!Zt!XS#`j*^&>\R]st;B Q?>kI"Tni-U&^nf&ci":)Da]I9jDnHe'Ge-JQOZ;oDn:Z&-2hC+#$)G2`!'4*"rV`"U1b'JcLB&MZ="` "9f&=)(IX?"$@qF"GQo.!.k4(!!!'!!X9E$@Y^>GWr/t,XK%nTJRCSZ"9S`-`W1SjrW!T4!<NKbDQ`Bk h9)q!O`*lF*"E)2!"o;6!X'2b4B"R#+VG1h"Te`-"j-gs!.k3&!9O7i!<`Q4$lLKU:-L$>"KDHR!.k3Y !!!'!!XBN(@YC#=Vl9Qp$`KqlO+:Y&*<ZKI!pTc;!8@Jf!XK8O+[U(?p[$A8Uk<#?+;#"f"69Fq!X/l@ 'ce\Y4Y@op%13=D"9o/DJcLB&JcLB&JcLB&JcPNF"U@#$Oh'6FjosPIJlaQ/S,f,\#ltf(?%AcbC*s5S !.k3&!.k3/!!iT/$4dk%6sY!=@6l(BL&cf*JcOI(r;d->3*h'$VmF)8^C7fe['-9Z?8N3%#6Y(J!.k4K !"f56&gfS);J:ZVXJ;#/@R;CLhuF8h$PX^8.4-5])\WYc"U,"N!.k3&!.k45!"8l2#7D(c2+qCS1)U7q !.k3&!4;e7!<E6'&M-RjJs<(6r2g@-Un3Zd9I^DU"U"kl!.k4)!<*!1"Xm2qY,\7fR"]<O0cq&9"60@j !<E6)%3$cW/Kbf;#6k).!<WIV!.k3&!3ZA2!<`Z8&0a#,@Sns""lTH5!.k3&!;um+!<E6'&M6^mJ<HS* WrB%-W2H>XO)RiC$jd(?!M]Xj!#,J<#nIk+:j&J"PDtB7;)K1"#mCG'!:^%&!<`W6%MTj*.3968#R:M: !sAf8V>u2JJcLE'!!e)UJcLB&dJsF]0O0pmjSn9FhSu=<;AR%JJcPQG#6GYf2apUn$BkIA!.k3&!9O7i !<rrF)Dk?3N-A&H$*!uW!.k3X!<*!(&L^"RI@..KrP&cT]XbMUQ>oA7'at9IlMuM:f)Q?`$lC<J7pKtf Km7956nfPbhuF,c#7M4_()7Mr&.8^@"+gN)!.k3S!"8l2#RqIt6!\\D4s(!f!.k3&!.k4K!!rZ,!Y$5. 9k]0KqQ1+)Vk/HF2AQi1"9P=uUB(8o"U#`#;/gRTF9c;L1`[29"U"Asn,WFg%futH(a'\/$j["=!s&H* "/Z'M!.k3/!!iT.#nI_!6sb'>@R)%@L&cf*JcOF')Z]s@%3RQ(BS)VNWiE,#W2cbkRt+g)((^cT!lk:m !!rW*!<WN3%NmZ+rbDgSB2gr<&-rIC!os=h!<NE/#Rq7V((gr\rWE?+!WrQ/aoI"nJcLB&hZ*]]*=&JB JcLB&XT/h>131LtjQ>U`f#4\D/d:>:JcO7""T\]1%2/oe!.k3&!.k3S!"8l5%Mg0PA:pG0?82fG!.k3& !.k4I!!iT4)(IaUL8;BX^](nP\YOj[.j,N5!M]Xf!"]/8$kjR04AB3e9L1Te*=rAG!:9ao!<WH/#m^b? "pG,2r;ibqJcLB&MZ="`"UYhW1/VqH"*.'^#DN51!.k4%!!iT1'Hf#&E070sXU2)/ODRH0((UWO`rL\k qZ%00%3$cW5=A+@5;!rc"p>#0huF,c"9f#;#R1D6!s/Q'!<<2D!.k3&!.k45!"8l3$5"(0;f7D3:*p7H !.k3&!3uS1!=0A^0MZSJV>dJ(X/`+sWhkbo7j8`[#6O2kJcOL)"p+i."VMq2r^$oW6Sfo$#Qt84!oj7^ !<N?%"9Jc4#5eQ+!W`<'"+gN)!.k3L!!3d!(u>7E!.k3&!;$6m(0A<Nj9Oi.hV6c";A#H"JcLB&JcLB& MZ="`#S7ju7W+6b"-[CV%#+b6!.k4$!!`]<(aDLmS$`1.r4`NNXcmWh0-:Z+`rO3]qZ6]up]:Brq>oj] !W`<'qZ?g$r<*'$rW2uuqZ%0.!sJr<(*bLt3A2d'(_?uTR/hg=JcLB&jo>ek"q)+a2d(HmIT.d&WW7VN JcN%U$NpeL)`D)ZUo^Z"Y5PI.XIO]A1aEhD"7#ra!<3)d!r`5p!:p0k!<W-#!!N6&rW<'"p](a("Ul"\ *[E9n.2rg$"9&AK!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3&!.k4H!!i]7'-&u?KV>FFW;Wb&W0r$: 1aNqF"/>ka!<3)e!ri;d!<*$!!r`<$"9S`/!sAN(rrMfn%g!%L)^m'^-7'ZG$3L>1!qQDD!.k3&!/1CS "!CtP-j#&%JcLB&ci=7S32#$]hW"Lr"5J#H"2Y%i!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3U !"/o:&K!E9MlF(o]Y49Y#edO9KkF"4(^0g=mJs*a#QXu/!sAc2"pXf*#R1G9"9S`-!<MuroDf-t!sAi7 #n.4Pr=&u>$3p_;!s/N!!"]/4"U58G*%!Bl,p+!<%0cm\!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3& !.k4H!"&i6%2(-eFdJo(Y5>=.UPj%i4!kRC!W`>!!:Kmm!<N?+"U"r3q#pX"r<*6*!s/N)li7+g!sAi, #m(G?$2t27"U"o0!WiDu!"8l3#nI^e*?cgQ((CHG!qZJE!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB& eGos[#RqFt;KS.sVlHZnWsbhtM/ZHW-5-L`!<L=Cb5__I!X&W0"9e]+q#p[!!sA].!r`5g!"]/4!X&Z4 $4@1K$47%E#6k>1!s/N*!WE)r!!<9,%Mns`"r@dT"9JW*QiM^<JcLB&huEl^+CHT!VuVDLJcMhO"WLpK \^'%0jojM&72>sf!.k39!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!.k4H!"/l5$4\I\H((e>\@qjU $ba$LRu(iI,6e2M!N#kc!!`N+!sJo8#mpJ9r<`E0"pkP>"U"l-li7_$"UGMJ&eu6&)]BS3((q)b#6b21 q#Cs,!X&Z3%2Bj.+<212%LE:?oDjICJcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k4$!"/l3#7;M:@tg;D WiZ-#$E';JE`Ft7"9JW*aoKTb!s&K-#6"o-#lk81#Q"c4#m^\;"9S`-!UKe%!X&c<&J>`k'bh;n&I\sN !sA]-!<<,s!"8l2#RqC[()\&,%g`F=!WW7h!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!3lM3!sAl: +$jFiQ(FkQrMp=)Um?aU=#Ls"!WiDj!2ff%!<`Q2#m^b?q$6j(!s\u4"9&?%!VcZi!!`N+!sJl:%2/XT #o46h&.T'S"p4u,!WW8s!!<6*$P34O#Sn3g$jQk9!WgUIJcLB&JcMbM"9TcS-j&9+JcLB&JcPBB"UI## O1*gAjosVDCcWC7TE'QDJcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!7_&W!<WH/)EhVbSZ9'0rP&cT ]!ST7K39`2!s/K(b5f]c$NU>5"pkVF%M00^%fHhF%M'$[&.]3X$4$e;!pfn&!XB,H(`abG.4HYm,p=3B &.AgJ!WW5s!"T,5"9o/A&f)2p%h/jM!s+eiJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&YlG.5!sA`@ 02ZYDRAI(aXUD2+Ru_DV+pJ,N!Wh`iVZ6f#"9o53%/pV;$4.%H$iLJ>$OR1G"9\f.!r2ig!#,J=%2'Nt *??4B*#fh2%giOE"9JZ#!"/f1"pthN%hTEc$4$P4!<N;K!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3& !.k4H!"/i1"9]Dm;fIJVTrS'l%&g(tR#PuT,6e5O!Wf2!mf3On":#5A$OZk>!XK)=rX'&A$OR1H#6b22 !<N9&n,N^p!sJl9%i$$+rZM[m*>oP'$jd+?!s/N)q#Cp+"9o2B$k<aX$jQq<!WiDo!.k3&!.k3)!!36F ?i_YWKE-T(JcO'r";X(3S^@>t"l[IlE_[4b!.k3&!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!3H5+ %kLIpN1[;br4`WQ]"#)5DE842"9S\n!2ff)!<ic<&eu3%*ZZ7@r#6.d*$$%>)Aa,%%h&^I"9\f)!VcX7 !<N?,#7q^q-n[;95<_1l3A`94*>]:r"p4r/!W<!0!<WH/#RV(T'bq>m%grUF!n%)K!J1<'!.k3S!"8o5 $PXO==aHB_<%814!.k3&!.k4D!!`lU5$W8hSu_dk$`pD-Uk2`$#m:A5!N,qd!!<9,$l&XW!Z)UfrY>DK rYQ%[((q,d#m^_<!sAZ,rW2fp)?Bj?!sJi7%i?E;.P3;./hJP%+WD+*#m^\:rW3'#r;[B0":#>J&J>Zf %LNFE!sA]-oDmbKrrJtsJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3u!!`iU5[AMhR]$.b%BHM/Vkp&: =tU*a"9S\J!6tQP!<E6)#Rh:^(DRVtrY5AIr>#\S',(oe$3p_;"T8E&!qu[&!<N<*"pkbP)^?jgr\G$> /1Dhc)&!Me#6Y,2!W`9%qu?g#":,D7%g`g[%g`FC!s/N)e,]IK!!::CJcLB&JcO^/"9TcS-j$=IJcLB& WW3/))a\qlro==HjP.\XQ7rF*!.k39!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!.k4D!#Q+g3)XaW V74.O^;%Fr]XbPGIShI0&.&E9!:Kmn":lJ%3C$&-;Z9Pj;#X<';GU"Z7mK!e.3KK?#mLM6!W)j<!<E?4 'd"h^6Vq#qASH%"Ci!lu?Wg8t4YS6)'FY-C!"]/8$kjR+1-S<#5s$nQ*>&JI!94(X!<E6(V>u2JJcL]/ #Qb2<'H8u6HBnY^<%80.!.k3&!7:cP#T50Z?$VU2XSf1-Y,\I[BgE^O$O-[U!6tQY!<E6*'.,_284>p4 5sR\"5=%V'6iKC_5s@=h1b0dj'G(QT!WrK*qu@c=!WrQ2'I,:o5t=XH<)m"&=B8C#:.IQ10I%AB#6b,1 !rW*1!Xoqp2E3]X4Ye?'&./UE!nIAN!<N<)"Ng^r!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k3Q!!`fJ /OWoiOJMlS%B?G,WhuYNBgWpT$jQk&!36)+!X&`6%iQfQ6:(Q8rBV2c6:4(,5sRUp2)Hp3)\WYd"p=u/ !<N)u$N^J9$P=:&0g.p"<W654>?Y'):J!u?3]/E.&dSC<#m()-!WiK9+"oqZ5R9M,+VY4c!s8VV!!!'! !WiK.#D)r-!.k3M!!EBH?ml*6!.k3&!.k4@!"K/V=KUB8iT0(Sd)3+X%&![3!!iT+!WrN+!W`>N!.k3& !.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcO0u(^Cd&2H>-oZFmla^;%@p]Xt/'CI9]r%g0uTblA.Q!<sGt 9O27MI#!H2re:<(!/:B+%Y]UeH#6th689Vs%LE7=qu@9/!<NND.m?^5Bm>DjNfoZmrg!kSOGo$GDd,gp .014jr;[B0$Pt'D6WRrPJ9Yg88i.Ooec>[M!WrQ/aoI"nJcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcMnQ #6bYY.n"$+U\_)!Y,mt9=>V6<$NohtWrNV1!WiH2,=5pkI!KmTE,bep'6%o1EH#o;E,]]2AQ_Ve/g;&= "TAH&!W<!1!WrT1&h?F_H$Xg_H$XjeJ:RWI$[Hl6CgBLb*"N>["T8<3";NIW@:NqbD-fdk+VbFj"4dGU !<E6(":'MYJcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB&o`,g4&KWJlB83%YWi)eqW2ckrP^-@h,Spdj VZ?;g%KZkE&frbt?u^1*DJa9/rbqdTs)7mR%VfWg?VNU4*>Anc!<N<'qu@*-#S7ap1IthkFa8H8JL5hp H?jXQDes0$<BMN<"pG)1!<N?+#9Q!2JUVldDHK(K&.&RD!qZKR!!WH*!sAf9%]05X!.k3)!!36F?i_YW KE-T(JcO!p%LY=[f%]$>jPJY<a'p.m`W4'["9K&F&ek-Wr"]MP'bh5j%L<+$!"o;:$kjU),pt,l-mg2_ *#KA$"T/8n!!E?-$P<Q*!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!3H5,":Ptb2eS5T]DfMD^](nO YapAR7P,D[mf9<e$NU;9-q[iVEIsLYXo#.'WiE,#XfSZ'XpLtoL1j7:*>T+h!!3#u+9;KE!t?SB:fV"J NM`_UY->1;ZF.'FZ*:F-NcJ2b,Rs\P&-<Cf1H\ECIA4*QTo3_Z.h(#0rW**&!sJs^!.k3&!3ZA2!X9#H )`LoGQ@;d_#iPc8!.k3&!;-<u":,MR.o^kcXKMQ)$a-V5Xe1Dd:,X=/"K)7k!"Ar1!s8ug@?A(+WMH#Q qjA1gS"-"<R[KS4QAKiu:,jO5"U"l/!W<!@!X/c7*("P6]sb)>SXc4@StMaKU7n3MRZ)/]/fG9-"8r32 "!0dAN0'0dR#H#b2'E\A"7uTS!!WH)!WiK0$DmfT!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcO0u$j6kI (+`I2RAd-aW2oor#caDLCf!)9&Hp8WcN":T$54C28Sj<]SsoYCqj.8Kr0.YSOG7XU5qF,m$3C;2!rN$+ "V)@n1f87WWhuSdrh'dmS!f\3P`q2jOa1+j(C16]!s8Q*"9f2e>ER:S^9!`F<]1a&#m:@^!!WK,"9o2E (<QW/!.k3&!8mh["!Cu"!iQ*N!.k3L!"K&SGK81ehWEhSgtRTG&F'7l!!`QI;d3dIDf>Mjs)@sU#An3i A5Xrj"8Mrj!#,JR4\oL,IXcp$KS+f'H?F1CB/pLp!!iW<,<A_:2@fi3!.k3&!.k3S!"8l6&/c]^DN:ZZ BJp:X!.k3&!.k4D!"/f0"U?)FJuH5l]tO?Y#I^RsI9o)\#,_Il!"&`.!Y%"f>A/GDW:7P2`T?")]96ku .3901!Wi9#$NU81!u!La9N5VXU&D_+_"k_MhUoQ3G#C%,r;[B2(+q[7:Lf!dlfus/O^^6]oDmqP"p"`+ !sJr<V>u2JJcL]/#Qb2<'H8u6HBnY^<%80.!.k3&!7:cR!WrQ/'gHQ#WiW<!XTtbiJ7qV1(^/"^cN"=R !WrQ<7Xi,8eAJ]`XUMGHXHdp+2B2r*"9S]'!"/l4#n84eQeV5uc+!>I"gje>7OAuR%0ZV0&-OIaKtP=@ ]relAHr)L;%0Y8_"p"c-!sK#CaoI"nJcLB&jo>ek"q21c3a-fmHr_a(WW7VNJcMnQ$N^G6"W'I@P,G7Y W;N\$UQ^1@:,*Uhmf9Bg$O%%Z-9Yn$_q`)2VXUVkUOm2V3@u0ZrW<-%!!3#u$O.7f0M6>Wir7fFVt@## O_[E.$O?n<!<WK2&O:ijrr3;QWek1L)\*5\"4mMW!X&]6&/QC>!.k3&!3#r$"!Cu"!oF!0!.k3&!:Kmk &72ofg>;bi"0,`[%&3gi!!O$>V7Y%/nE'l+M*i-`mf3M-;1k[^gAU.6jS@p>UHAkU!!j&c;M;[APr8p: !.k3&!.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcO0u$NU>4"W'ICPcCst]_oMP\ZhinG>Tt&"Tni-cN)5j $3:20$o1a`@!.=$n@pWmhrNS<Y`a*1755qt$O6e8!X/i=+[T1.AUKN<^V7G#_S!4^Z*UpN^>@\aUjlJI 1_]ff&-E\"4$c\RJ[k"/dC#!B2A"I?"p>2A'HJSXaoI"nJcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcMnQ $3C;4";*CmJ!lq.qlL7+T9"J25pH^>!s8Sq!36)-!<N?+&k@Ggn(Pdin?!)%]=4]%G$[Wo,Sph7!<N<' !<`iI,!B\2g?R8+[&pI3XJrA+YHkF;YH>4(F\4)$%L)e2&-OF]K"/V3]WJfAI8DX=%KtA`"pGJQ+t>9) JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcPHD$N^D5";*IpI[-G#Wr/n*VONQo@RDCJ"9\f-WrV_k $O%%Z-9Yk#`TbLMVsp`IUlBV1<)#e@.NT91!s8T*!=Ku,:MPrsj5@hXVQ-SpWi2quVkp8hWN)+r7j&3H "p4l."UG]*JBn/o$.Go1@Qtb@$O6e+!9aCi!<E6'$Pt'E4@Df=!.k3&!/1CS"!CtP-j#&%JcLB&b5_\J .VFXDf)4Y5]n0!/#KQne!!O!8S$^>mnE'r1ULuV.$j,u"('Q4)U:S\,jPJY;`m38mhr3VVjek9LrW)]n #Rr4ZJ[sd*2@,NIJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&XT/_0!WrN;0iiRbUp.H.^C.]]Y,.(i 4VnG1"9J)oWW3A,!Wica:K1J7LS=4P$c1KVjP7e_T8mtm4!c*h&.&C@#n\"/9O2%XMjq&g^r+(,\#5X^ UTV&<iSr"]L0Z_Or;[B2'eDC3;.P9flK?L"N*\@Qf)Q!Z&03/Z93d&KJcLB&Y5et4"q)+a2d(HmIT.d& i;eH0JcLB&o`,@#!WrN6-UhTsOIrTOXUD;-Ss":s0+eEm"9PV(o)K.!!WrQ<8:nhQiQAY!XYI#h]st/1 Klq!$0Gaio!WiB-(+)">GG*@2`4<.TXJhtfVm3kE[^33@\>":E/K50'r;[B3-rGK"]=keW];0jO0cgf- oDmqP"q2P093,>-V>u2JJcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!7:cS!<N?+%4=YXIZL"sr2U4*Tph'e <A5!j"U"nQ!7(WQ"V2Lu4_'Sqo[:.Fn>e4>R>#m'CM%']6RiiS!WiH*&1^CjOfcX]]s"B3WN)klT;8Hh WMcSjWfUsc+:JS`"p4l."UG]+K$XGr$.Q#3@Qk\>$3gUe!"&`.!sKDj8SN?qI`_YB!.k3&!8mh["!Cu" !iQ*N!.k3J!!ETY;MrKljorr+Guu'gm/Ws_"VFOnXiK/bjp9eXP%mZK,S^Xb!;?I/&jhJjc.M"8g;L.Z XhrK;gY_#PVa(X_!!iu\:4Kh5Pr8om!!*0-JcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcLB&JcPHDrW*9+ $m\&BGa,2;r4`WQ]=>2=GtfIo$O-[5!:g*s!<N<1/k]#ABn`,I^G3ODe_oH:b.b9TI9/9Q)@ZcP%iQ]T <Fp6=UTh8C`5TO'Yap`2PG,:ok2t$uOCC9dr;[B2'e;=2;.P9fkiL'oM-MkJoDmqP"q)>#3Cd:mV>u2J JcL]/#Qb2<'H8u6HBnY^<%80.!.k3&!7:cH!WE-*#TGKj@t0iFqlL4,WMGA^4W+V5"9QmLcN"=R!WrQ= 8;,(Wk0:F)XY-of]tCVHSs47i-3jVT!Wi`O2bn+AUr9mRZELF4URRF=Z,=Pp\$E0KVL;;q*WZcTr;[B3 -;],n\\,JS];0mQ1*7#0f)Q!f0i<%FLPs:TJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&XT/>%rW3<2 *&:6"I[$`-Wsbr+VP/cW58ak8"9S/pWrNM2%iQcX@Z\h2g:=0OWsbl$S;rA]M2-h!7Nqg9rW=SN(-#fg ]$9*aWMcSkW2ZS`Q(4_XZ)ae!WK1da+q=qb"9AT.#SB@Td/O%OeuOU94rFe9"p<T[$3C;5"sHH[Y/.cZ JcLB&JcMbM"9TcS-j&9+JcLB&JcP0<!spGd[/B%igW-Re57+.dm/R;$8r'=^g$n,2in))NQ%a<i;ATB. !#Gea>,g*-i8`h@X,1JEVnUC(g>M%i5n*Dd#R_tPICJ1#2@/aOi;`r`'e)AE!.k3&!/gg_!=05S,=ZR2 Vur5s2@P<?JcLB&bl@tQ(+;=LJ=j4G^](nOXGgC7((U]RcN)5j$3:20$S4hD;e(EIn%\k;(;[i%^:qL[ G"FM8'*JLQ,;2AeDiqZErk8u]_7HnNQ$Ik9QE%RZldib8BE::4r;[B2'e240;IkEhk2XXgL0HGEf)Q!c ,r\(^>]RseJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&W;m/+&K`YsCQ#"dXUD;6XK@q78g"]R"p=Gs WrNM.!WrQ=8VP=]m*WE5XU;55Y-5%3Y,n"+3"?8u!s&E4.S"-'QDUmhY5YO:W1K0*Q`\?WaLnm_\Yt0_ 1`m84r;[B3,u8ie[(3WH];0mR1ER,1f)Q!n6ues3]Xi[pJcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB& nGids&Kic!CPeb_X8]%'Wg@j&+qY.e"02Fn!"/r@)C@UVOO!md]r:D#%&p2'VP^8gW.eP3#R(,/#TH9] ^?>=faf59>*2od-Q&1d"[_T5LVQ#\m6m*!J#6Y&0"UG],K$jSt$.l56@QkY<#mLM(!9aCe!X/c6/nM'^ rrDJa!.k3&!/1CS"!CtP-j#&%JcLB&a8c8P6DOJ@"leCogMe+R!6G3E%Rki=^Xqr:$01%&hqd,DgK>'^ !!NH<3d&C%roF[L_in_%A;dV)ajo5.W^70o!;HO"#pVue[c*K0#g`PS"W]a>SB:h`!.k3&!9O7i!=05S ,=ZR2W0:mQ%&s;Z!.k3M!!i`>*@jKqPHDLs^&GbQ^:ge=G"FA2&d@k,WW4+A!Wi][853#lJXO9jcI(.a ^ppMIWiN+uV4jKOVQIH-^B2irQmHTH3$AV;)(@C3>]Z7J`6$E^ftXJMOc+m8H%LsA\&#\UMI/=Wr;[B2 'e24/;.P<gk2XXfKj-;Cf)Q!d-94=`>B>ArJcLB&Y5et4"q)+a2d(HmIT.d&i;eH0JcLB&nGin!$PjjA >()pDXK;E'$EgM5TS$W5,T$snWrV_k+9;NG";=@\bP1DP\ui0@XJqthSsc%;R[]b:SXuOQWN?$".&hbu -Q!<t!XpSPCknCUY-5.?^WaQbIUdMUR]iooV4a*.CeZT)%gDn3&-O:SHE+?_[]I*:ISqsD%g;M)j8]B( 89h>XaMt(WJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3q!"B&>(*YY@I$q"7W2Qbsrhp'mJmphh)%?_p !7(WY"V2Lu4CXDts5gtnX/;JTO-,TjrgO4cT;&9f\\>S\Wr/nEL1*(P#RCV=*_M"$n+cUnW1f]JNdZA$ D0LMiS><*e[#\cc+:S\b#6Y&0"UG],K@0\u$.l56@QkV;#mLLd!!WK.#73%qZ2Xb'iQ;.P!.k3&!8mh[ "!Cu"!iQ*N!.k3H!"K)YFjA^rhWEnYiSKMK#4;Jf!#c>8I@e1)k1IMHL4O_sFED\MH%:g<T!#oXh#-:9 F<:PZ!#PhU6@?i7hUp/hKMj?5*\ToaB6Jrm@3l-N!!ilT8:%`'Pr8op!!EQO7WYV^!.k3&!3ZA2!=05S ,=ZR2W0:mQ%,h2<!.k3&!:^$s!t#Y\0O'1)[(3i_rP&WP[%iRt:Ga'tWrV\j*ruEE$7n_B;dt<G^X(<P ^pBi%LP(54KSG57KSGSZYl)6ain(l6F\jb(&K`Va87$A*_Tq'.ro(5FCMRZtA86.0IZ'MYOEjbZ')_eA !u3:G5Z)'E\)u_oY(^(8&+fk_!!Wu]3Bp,>F/Aqh!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcO$q$3LMB 'dQ@fO//eYriHO1Y-"L]G$.!Y('`(bcN"[\!WrQ=8VP@^mF&SJYbmb?I!9UJD>nGYFaARkN0g6:r2h<W TmTcs*Xr/Y.SXi=S#NNo][#F+bE-7!8m#\GG^OskG@srB/0"[#"oSE4"=6fhWjK=FXLk9W;DTC*"P3VX *D:ggbg"2N!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!3#r-":,MQ-;/69Tr4ohX/c/t#GI0#>!OMP #4hhq!$DFU)C@RUOO!mf^8S*'NI5JUCi434EclVVNgm&Y^:goOWrdl\4"V0X%LWL`9S:1Lp%-%sRYu)g ?sZr.;d!RGG_;-OKO$_[%13=B!<WK2&OM,trr3;VX,(4K(^p]T"5<e[!X/f8/nM6crrCr.!.k3&!3#r$ "!Cu"!oF!0!.k3&!:'Up&Pf77bM21?io8pp:`BM7!:9b)%Rb`:^=VM[In_@8*>oP)'c.]..lTn"J#q)r joU2i#Pe?:"rp'^aPkR]Wea.h#64c+"UYn_.5iFZ!VHEu#pMod[c*K0#k%cQ!!ETR8p7;5!.k3&!/gg_ !=05S,=ZR2Vur5s2@P<?JcLB&blA+Q"UY_\7WOftZad[G^BqHQSW%M[-k$+Wd/_Gl*ruEE$7n_B;dt<G ^XLE;TSmu':J+>U:K1P,A8HdZVu4:VnFPbgSngP.'dPRt8mc\/`7jh_s4sAd6U3an2Esf4>@_SlG@sGI .hDRY&-EXs3C$GPK=C"'bH?P'1(Vt:"qW.C5Y5+!aoI"nJcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcMbM $3C>8$5GL+JXiO9r2g=/Wgnri><<o4!<MinWrO7C!WrQ=8VP@^mF&SJXHn*79gq</4?Ynp85ii-F,$!Y r2g%D`iLJD=u6rp#q8ShNLm2QZH;+upW.bP)'LF`3^QMA?!'ff2^]LR"oSE4"=6fhWjK=FXLk9W;DTC* "P3VX*_h0rdF$-h!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!:^%-!X&`8(HPoRR@pFWX/i8#W2H&> F^.$O#lt(/!:p15"V2Lu4CXDts5gtnX-7g96UF((5X@h093#\QOf5\(\GWB]J6k;Q().8g,#*^*lgsS[ UQT@e8O>[#-nHu+2FgqeJoFOB)@QoU!s&K-#SBCUdJj.Pf;j^:4r=\7"p=JtkPteg"U>>cAZl%4!8aRQ JcLB&K`D/V+CG3u!e^Q*!.k3k!"T8dGF#\gk2tacijj1t)[":aaT)\Y7"(Z@fB/Sr)$0j7!!WK0&0a_s _u/WuPs5fT!"0&U8qkFF`28,e)[H0=!s&W1!W<#n!!ilT8:%`'Pr8op!!ETT9R3b_!.k3&!.k45!"8l6 &/c]^DN:ZZBJp:!!.k3&!3#r+!<E9)%5V@IUTLo9r4`QN[&p*]@5\Sr!VHGm!$;4C!X^JL9iGMPRD74c T6FR0/f><:(Dn2A1H\HLKq8.V!qH<j%fa\-:a$f.3C$8HFIU83rr3Y\LeJj,'FkH])'UUj6r@;m4<k:5 !"]5I.QKakA:qARj3+TZ>;?`@!!Wu^3^?8>F+OCD!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k4@!"/f/ !s8iX9lc>cUosWt$*L(oOEF>K$3:10!:p15!<N?+'1mo$p[-D?XepVM-lj*9%M'-b'HJY_86U(nUAV,A eDf?3M+Sfi#UrPlOeJkZZdn[@ot+c`!<N?-#ne:03BAuP/ghJF"oSE4"=6fhWjK=FXLk9W;DTC*"S;]T !!XNAKtu<ibbbAl!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcO$q$NU;2!spANEK6H\Wr/n(WhGi@FAXOq !<LRJcN#'k%iQcW@Z\n8jh@[oMJ5Es'bh;n',DK,.6q$VOf5h)r2V/n?:5hN)&Nr4:4g:HnE[c\JPSZo ,Tmj0$OdFQ)_XWd<B_fH$O@%B!s&K-#SBCUdJj.Pf;j^:4r=\7"p<T["p+r5#qTSfrr2uRaoI"nJcLB& huEl^+CHT!VuVDLJcMMF";amWUW`St"O<of:`Jm(V#Uf37"(Z@fB.<(!qZHp"<q'Sr8n'Z<uq>Dq>^j1 ,u9EBh7&2F0a6_?#RM\GHFDdt2@.Y0":?PPHEVo#JcLB&Y5et3"q;:h5%&r2Kj6;=i;eH0JcLB&m/R@s -VAB>Trtp'^C.`c['#j@7ii!A"9Pb,nc0s:!Wi][853#lJXO=&\Wgf'3$AV4#7(SD'HADY>BYmmUTM&@ lMgf/h3M1l+Y5W;8muh1`8UXos4`rN2(B[]#RV(U)'UXo7m\gI$N0r=!u3:G5Z)'E\)u_oY(^(8%fcV2 !r`9%"T/Gq"Tec-!V??r%O*bn8Q]c*!.k3&!/gg_!<`]?(,/L"L]_Qe,R9&(JcLB&aT)SN*'7GON1?oN rN-I/Whl;@?oSl+"9\eT!7(X=!<N?+'1mo$p[-D?Y,$D;)\38[!sA`3#S%^u1.5MtP,G:\X0'e7ki&:> ,ln5u95ofYWiiYSmIp7iE&.\%"9\f4&/uoD,pFNR&ci@Cr;[K6,u/cd[(3WH];0mR1ER,1!<NAk"T/?& !Whon"rfsNUq+%DaoI"nJcLB&jo>ej":5YV0i2\@DbDD_WW7VNJcMVI#R2>4??h?qVPsKo%'-D*TpgUC 3Yr&)"9S;tWrOOO%iQcW@Z\n8jh@[nLL<(O#mge>#7:nM)(IjMDMt=%_7HqQX+OSI/M\:e)%\&eJA(+8 mD#?N=@b\/.3/s/$3^PB*\TiC/KGB."Tnf,!sJrB6A*\brsdS\LgiOb$jd+?!<N?*mf`Rk!WiB'p](X& "9o,Z<0,Z*leI'lJcLB&VuQl13YgKOJcLB&JcP'9"U$#=GIHN1j9Fc$]q'F,#,qUi!!j'&I@e1)j_l+/ !"9/dD7@O9h<)%]2\H2h!"0&U8qtOG]Td.p$3B>j#RM\GHFDdt2@/aOiW')`))bQFV>u2JJcL]/#QY); &f<>uCkVt18LFdu!.k3&!6G3I"roO"EK-a"]tXK\$ba3_[%i=\1)gi6"Od@r!$qXI!X^JL9iGMPRD@4\ P@dNI*s_uP"U55B',`/c?Z::DOf,tRrr3hpRpI]m/N,X\??;LOeEm,5mCSQs;a2`HrXoDI'cn_V/KY!+ #5nN=!u3:G5Z)'E\)u_oY(^(8%fl_6"U52<$hOi4%1N^T$O6e9oDf(')D!j<>AhR`JcLB&JcOp5$ipJ: %2($P=DqG**!WDCJcLB&V#V>8'e;XWG`\`'Xfee.XKJS!O`*l?'b(EOpAh5o-ijAO";=@\bP1DP\uqiR 8f/!D"Tni0"U58E(a1M)A:9`6V5^T@mHl4aZXYHd"sZTNK9`@9Z,58_pWnas-lj!0#7(_O)&a;.'b_#] "8r36"=6fhWjK=FXLk9W;DTC*"9J]1#lP,&#mU_@#R:M8"9S2q"qrdnHAdcDJcLB&JcMtS$ipJ;%21*S =DqJ-*X:R'JcLB&JcP0<#6Ybm7:(1uU&Lu"WiN(uVP0&h9dg_e#R%=2o)Mep%iQcW@Z\n8jh@[nLL;tK #6tA7"pG8>&0*,X95'*Z_T'O'X,:%R3[5db%j4Jm\`<2M`2&`D=AMLS2C':W$Ng\L+>"u^'++mG!s8Q+ "UG],K@0\u%G.Y:@QkV;#mLJ5"9]#*$2=f2#6b54!s/Mu!"&c0"U6#3BUZ',X/5lK!.k3(!!*-9!!IoS JcLB&`;gAO*`/9]iSrq\grm.!<#*XXaT)SV7"(Z@fB$ifnGiq)/REt-d,qri9-XW;!"9#J6@Ho4bHI.D ,n'hF!;HO"#pMod[c*K0#gWJQ"r/LKaoI"nJcLB&jo>ej"UPVN-9P1A=?7K-WW7VNJcMVI#6YYb2GSI_ YPu3E^V@Iq]Xb21E_.l+&dJ(1WW4CI!Wi][853#lJXO=%\<1;p1E?Z$!s8Z0#7:nT.m['?Ee9grh>[F# s6-+c1FOh02+1bmQbgeojS8Q,_l8?!5p[Kc&.8mY'cS#'$3U5,(]tL&3C$GPK=C"'bH?P'1(OBf"U>>C &/=[N"Vhab%0m"-!!WZA+"f`Q@=eK2!.k3S!"8l2"pk_Y/jWT//JSEI!.k3&!.k4<!#PhJ)_4*]JtB'G Xfee.XKJRnJ6k8]((CDM!:p1(!<N?+'1mo$p[-D?Y+p53((:ENrW>(^"9f&?&K<K!A:'9)W3+/,oC9_7 /cu;#6"#&"TW>9*`7*l"Vg26).2WBu$O[CR$k*LM#6P&+!#Gba:3rqI\[JTOUjc2t*tJJU"UY_Q&eb'R q%3iC%h&dN#6Y/$!!WlX4&og+DPdDc!.k3/!!iT.#71n^0LT"F7kPS\L&cf*JcNmm#6YPW/3mZpS,K8o X/N%uVjW!@4<t^P"Od@s!)*P,)C@RUOO!mf^8S&d?Si,o"9\f/"9\o8%i-088nsHp^rO3jO^1XG.O>uA *_1L`h=1'WVjj$+BOk+83\)6`"pbSK)&3_j"p+l5!WiB)"UG],K@0\u%G.Y:@QkV;#mLJ6"UPY;&G$J= %h&^J!s8T+p](X&!X&ZA/4aDuJV_GKJcLB&JcOX-!!9"tJcLB&TE#H,0Rqm7hW!\SgWm`].gGPEV#Uc2 7"(Z@fB$cbn,N_","Hskk/*3g!BLM`!"AuA3H`@%fZCXq;'l\Pl2V(r,"R$giKZ;,c2[nI#8)OfJcLB& Y5et3!sT)@)_4$G5:I<Ni;eH0JcLB&m/R@n$5+=0>`#HZ]a_]j^V7Cp[%W1]6S02_Y5n+n'*/.9$7n_B ;dt<G^sTZQ@7`3m#5nQ&!r`9P#SJ734^<2n^X`)Ys6cat3%QU600`]`Q,(8T`m4GWo]E`B>Vm`F%g<%= rWWE-!s/?#(]tL&3C$GPK=C"'bH?P'1(OBg"pkbP(ENDtp`]nb+<ML7$O$)%"pGAK*%3g>V>u2JJcL]/ #QY#1#72+f/j9@l*tSR0!.k3&!6G3I!s]8M,"ZgAXK;9##Gd>t:,F10#1ERu!#>S:!sB9/L!05Xd^lTV G=3,P"p=u.!WE-U!sAc7*]$DtH'"f'_rUI_drmSP"s5s1Ef$?eY->4=]$S3lNatI(&.8aK"U"r1"9\f- !Wi6"(^)-[HE+?_[]I*:ISqsD%g2t>%Mfp")B/5c#8S$e&.8aH"7uQt#S\I;4%2rf!.k3&!.k45!"8l2 ":#5J+tu8;+:n[U!.k3&!2TZ$!s]>O,>3'BWrAq*X/`+sVkK#e:c9O4#PS5!!##MH)C@RUOO!mf^8S&d ?8;fh"9\Q'%g)t=#SAU_FI]YSa/bP=:*;qY.2W@/7!5cflg`/uV5'WOH>?SM3[kjL"U,)7"U"u,!XJf- !sJrB6A*\brt3k`LgiOb$jd+?!sf;J(Dn#.oGIlK&I\mK!sA`$!"&`.!sB)P.m-L-AqC#7!.k3&!.k3& !.k46!"BcUgYCZEk2bLXh4mLRWW;Dd#S'7NT"`h<CDcL?$3VDKU?9RlF]&YLqu@3-$ScM9jl,+Pd#M!Q &-M4u#RM\GHFDdt2@/aOJcLB&JcL]/#QY#2"ptta.5h8Z*=i7,!.k3&!6G3K!<if?)Fo(D\@K8cr4`KI X-S':5UHs=!S7=s!##A7!X^JL9iGMPRD@4ZNaYL6)?op:0*2@g(*u^nKt#Crs8VVhD*B[+.k!DZDMG*o [Ca<:rr;uOY('D90Hh,>#mCA2!<</u!#PeQ.QKakA:qARj3+TZ>;Hck#7V=c,qV(J5R0M<5!1VH'aXd> pAbC"#7M.^,r3UCJcLB&JcOp5$ipG5":#AN+"AHM$NmC/JcLB&V#Ui(":#8J3+IiEWil6$$`]SEAP+]t #m(//!W)kt!#,G8!sB9/L!05Xd^lQTG!m#N"p>#'!"/oC,WJJ6Lo%>mi:S8eg3bmc"rT-d@saH>Y,n\* Y.W!#]S^5f.30-4#6Y,2!r2g5"=6fhWjK=FXLk9W;DTC)"9f8S.5<S51\<F-0.J7l)A3A[oDf(!$PXR, /N&+[JcLB&Y5et3!sA`3%i6?=,8LUhi;eH0JcLB&m/ROr":#8J3b4&CVQ-SprMp=&Q%*C?1*-`'!W`>. !:p1)"V2Lu4CXDts5gtnX+jn7#m182!Vl^I"Wom6K;#ipW0hU$7l`1@#o5U5R(h#5hQsAcX/D/(AlD;e /fPH5#R(>4!s/?##6=o1#SBCUdJj.Wf;j^:4r=\8#6P,?)^mBp1&Ea%1']<Q(Cg`U"9S>u!!3'#"pbbX ,qqAMV>u2JJcLB&JcLB&JcN[g"pdMu_pI0!rT43tBe0V;!6G3H%Rb`:^=VF\(@D//$p0R2c)ZV2'a"74 %KmqTVqKn`j5@M!:Fd%\o`4ae#RM\GHFDdt2@,NIJcLB&JcOm4$N^D6"q21d,p!^,"0)?Q!.k3I!"/f0 "ptu&AW3Rl[ClFP$bNX<PBg7e'a+U?!W)ks!##A7!X^JL9iGMPRD@1YNaYL6)?op:$NUD<%ie)RH_\F> q^):4YB3/h/L;Gj9k/*lNLdDlfCo7El,TWSE*c0u.j,H1!WiB'r;[Z:'e24/;.P<gk2XXfKj->D"Uu7n 1."lKoPt=\F)l2*5q*EK!WiDt!!WN/#Rh=`+bB]G!.k3R!"/i1"9]#A()mtu#6WobJcLB&JcP0<$j$M6 #7W4^G*\btY-.])$D3E.AO\-\"9S],ZN0Rs'EJ7;";=@\bP1DP\uhWK6kfq3"9SB!/HcS)/3[QuVmaFu nFtRb4:29,,W/;2LT%bm[&^=@aNV]%LMg6c2CBCT$O-\.!#Phb:3rqI\[JTOUjc2t*tADY)_t#i>[C_6 ?MRn4>#\3d3$f4BoDf'u#S%Lc*[IT_JcLB&M?!VXrWE<0%i-/f(CpcRL&cf*JcNmm$j$P7#S/LdFd&;h Wi5ls$`TYVHtGkt&-N(:!nRFu!#,SI)C@RUOO!mf^8S)g?8;ij!s/N!!&"Nr2H"OYYJR3)I9B0.1`m)< /PL&F[++p)aLJ=MRY,]q@U2u*3@Z$\#mUS8!!!<*!!*0*#SBCUdJj.Xf;j^:4r=_:#R(VY1f.^l@USh8 #Z<f7((:HP"9J;u$3://!X9)H)'LC^aoI"nJcLB&JcLB&JcMDC"p,`OJuHlPrT47)MGPZ,oDk]f#S'7N T"`h;CDQ=<"pHZ2gX*0h!cf:aq>_$92KlIGe_]<-U3KZs*t8;>!!ilT8:%`'Pr8pB!!30&"7uct!p0K7 !.k3&!3Q;0!<N?+#7M.Y&I\jFi;eH0JcLB&m/ROq!sAf:.o:AQU9D)@rP&`Q\$)WlE((fQ"Tnh4!:g+' !<N<0/4`K6@Y'r_d'o$E8MM+eq#E,M!sT&G6=OtuWn@(GnZmI73@u?f+@0%8B6B'0_9(L$r9i1RY+Lc$ A5+s*%0H\6!W<!8!u3:G5Z)'E\)u_oY(^(9%gE[m1dG#SJc)#5RgYskY-!gs4rX\/!s//s"p"f0"q(nS V>u2JJcLZ.#6Fr/"9f&=&-E@I"9O;XJcLB&aT)\L!sA`4+?s7`O.NBKXU:ttP'pOm'a4^B!nRFu!#,G8 !sB9/L!05Xd^lQRG!luM"p>#'!&"E_(EkP:Jul`&fB`+]JjBkM%Mg3H>'csV]Xb2JYe.fq\>5=CF^IWo +;>+`!!)lr(^)-[HE+?_[]I*:ISqsD%Km.g8T'<>L5,>U#DIh_G?d0M#kS*$!sJo;%1s8r!.k3&!.k44 !"/i0!sAc6$kNjS"9PS'JcLB&V#Uo)!sA`5,!fXdNLH`CrMp=+UmmHn>W3H&"9\f'!36)6"V2Lu4CXDt s5gtnX,((=$O$V7!Vl^'"W&d[@>1PmXI4fP,#1`j+pni'2,%eN_Y=)nbd4:CQ\g':H?jR>9/IV$$jQn9 rW!0(!sJrB6A*\brt3k`LgiOb%1ERK&hm::Tph4'oRmNf;E#U,$jZq9!Vl^%!<E6)"q(nS()hc)JcLB& JcLB&JcLB&jo>Ph.SY<!iVhmBeuaF(-NgINm/RD%7"(Z@fAp]_mJmOp,]hD]\=J4!#5S<3!ZY!gUqtaE fYahQE`tjb'Edh)#RM\GHFDdt2@0*Y"9JuJ,r#6Vq)AF)'*X?qJcLB&M?*VV"9JZ."U>,6"9S[Z!.k3& !6>-J!<N?-+$<bPPGPY"rP&`R]XY>FK2j6*#6b4]!6tQX!<N<0/4`K6@Y'r_d'esD8MM+eq#E&K!WiK4 3F-BSQGr4go!X-J4=hH]'JDsR<b6TH^r+18dausm_o]WoQ?#eU'EnU?!Wi6"(]tL&3C$GPK=C"'bH?P' 1Cj^00fqa$AVTib$eFb<nB6_g,mX\W!r)a"!<E6(!sJqP!.k3&!.k44!"/f.!WiH,"9eo2!s,D%JcLB& U]:`'!WrQ@/kKQ$P,.uW$EgD)P&3T,#6b54qZ*Ys'EJ7;";=@\bP1DP\uhWJ6k]k2"9SB!$N^PE(aW"+ YKOi0jWX'CKLHOZ#R_.d88aj-]XtPRY-5.?\?`?;TSRG[1`m20q#D67,u/cd[(3WH];0mR1ER)0%Q@m^ ]!o&GoVMl'aN(rS;^i(G!!WK+!sAc2#(ci,!.k3R!"/f.!WiH,"9eo2!s.?\JcLB&JcP-;$N^A3";`ab AUKT5W;Wb)VlHVfOD[K.#R(>5ZN0Rs'Eo!c-9Pb!cN!"?W2k_^2%0Zl!s/2t3<U!C3Djpi]XFJoE`c1& ,mt(q+>$0/ZMOV$i4>qdUS49KR[9Fk@n.pc'+4sE!<<*#!sJrB6A*\brt3k`LgiOb%LidP)FJ_]pZU/= r1a"]$@lDE)\!;c"p+f+p](O"!WrQ."UGF3!.k3&!.k3&!.k3&!5SX<#q&iJhYlR?h937"=:rp\aT)SV 7"(Z@fAp]`m/RD1B#`*2W0B%Cq#D!703Eb*eE,TCf?_CHXeAlC#5S>p!!ilT8:%`'Pr8pD!!Eia8o9a` Vuq<0'a(`AJcLB&JcLB&JcLB&T`>B$'IlITI[dRT^AbkT^:h4mZ'/iZ'b:WSqZ*Vr'*/.9$7n_B;dt<G ^sKNM@S&9m"nr!'!<<B]=_3)B]B0h(n@+'O4Y%?T#p;2q:0_XkYI;!Rr4`ZuiR5H0E(VPq&./L?rW!c; 'e24/;.P<gk2XXfKj->D#p;)g78mi[oY1C\rr35kV-tn_#6Y+u!.k3&!.k3&!.k3&!.k48!"&f=+>c]) LS(ZMY5YO1XK8RtIT.d.$O6g@!:p1)!<N?+'1mo$p[-D?Xe9f)'+"jG!r2g<!X/rD*D(U^e&T\lldUVZ 'aFmG!u*XuK;GWQZ*(10qlL7;XH7Br1)U;s!WiE$!#Phb:3rqI\[JTOUjc2t*tAAc5]a*\f@%D2Xnf(( `9HF@[V%B'OoU(6JcLB&JcLB&JcNai(]t9k2GIn=S#WEcWiN(sWiDV;<\"ah#6`WYcN"X_%iQcW@Z\n8 jh@[oLgW(K#6Y,0q#DN?&Kro#DO.rNVNZ40<Bql>#n7Lc03j^ks8ViCYcOh'r2U-cF&tCQ*u#"b!so&2 !<WK2&OM,trr3S^X,(4K(_.#b$6;s,mJm4Q]C`-2P?^[1$4dOL!s&G5!.k3&!.k3&!.k3&!1X$!$oijn iSrq\iS<27N$nc$!2TZ$%Rb`:^=VF]([V2+'OJGo_lNp-2[]?\#ltbs<I_=+g>1]bjo_V`*X)$6#RM\G HFDdt2@0-Z"Toc2CS&iDjo`MC2%8^LJcLB&JcLB&JcLB&JcP$8#QbJW00s<2Vn)f?s1eQH#IL%M;_fR4 $*sX&!##A7!X^JL9iGMPRD@1XNabR7)?oj8*WcBL1Ke:=O2:/[o<j*G3[bdL#8S^J7p'GJLle44r4`Wk j5&.oR<Vq'0HCQ"!>knR.QKakA:qARj3+TZ>;Hcr+>l;N;eM0h^\PVEg]%3Xm\O>C$O6e9Q2lL:JcLB& JcLB&JcNai#m(GK,ViADPcCncXUD;6XfS=UBL=-d&-g_dcN"X[!WrQ=8VP@^mF&SJTQNX9#mLM6q#DN= "Ubn^8UI\jaO98@fS)a-"p>#1$me,DF+9+6SY`?hr2g:4ZD<Y(;)B*t#6=r/r;[Z;,u/cd[(3WH];0mR 1ER)/&jUN@f[nQcoW8A:l/pj2B/9n'!.k3&!.k3&!.k3&!20B$!X]_i1fnmaV5gPoWrAq&WhG5^749,e #Q"M%!#,SI)C@RUOO!mf^8S)g?o8>t"9S]#!"/oB+u;i0R(U51NGfM3:-Bj/"pteP,!]_$ZFdrk`PfEl r2UL"K5FX[3[bdR#Qt82!sJrB6A*\brt3k`LgiOb%LrpT*Dhses8VGtoW&=_>Y-IR%h&XE!<MZiJcLB& JcLB&JcLB&JcOj3%K[YU^sh&pjPo%Ng7pqBXoRhh#S'7NT"`h;CDZ@<#Sg[YaM"F30*q=Q#QYDY4C<l> ^tASI"i#@O*XMl>!!ilT8:%`'Pr8pE!!NHF6#3(;r9!h;"2f4<%#t=>!.k3&!.k3&!.k3i!#P_C&fiAt I%I^U]Y2(p^:h4iW/u$s3[5'b!6tQX!<N<0/4`K6@Y'r_d'esD8MM+ep])B:!Wr`c=_</I`UNp"[!kb. -5Hdh%2U6F7os;BIZ:-#^Br$>j5AG&X-7X(*]"N4!W`<('e24/;.P<gk2XXfKj->D#p;)g78mi[oY1C\ rr35kV-tn_#6Y+>!.k3&!.k3&!.k3&!20B$!X9)L*^OFqUoLT"Y5YO/XK%P4?9p.\$2X_'!#,G8!sB9/ L!05Xd^lQRF[QlL"p>#'!"/i3$P4:LHEbl?f'=%Cfn;a)"9JZ-#8SUE8QoqXMjL3<r2g@6\@&B%FAjq7 &I/F:!#Phb:3rqI\[JTOUjc2t*tAAc5]a*\f@%D*XTuf/k2*OZ1CELLJcLB&JcLB&JcLB&JcP$8%0?bD (*>nVLS:QEWi2rsW!B2_H!`ok)@<_Mo)KI.%iQcW@Z\n8jh@[oLgW(K#6Y,0q#DN?&gB5-EL=ARU53JY 8i\%%"pP;>'du1ECkJ%P\\H%nr2UL*OF_Oa:HB^9%giF?!sJrB6A*\brt3k`LgiOb%LrpT*Dhses8VGt r2]Xo$Bn^d/.)mr"p4l,PlQC9JcLB&JcLB&JcNOc%LYLo^s:]ojPetN[U(-^df@Ji#S'7NT"`h;CDZ@< #SpaZa17gr-jKAF"p,8[6>)V(r8n44Vg;Aq%KcV0p](R+,"R$giKZ;,q>^[$*C4J4cLg6$_fRaEZ2fIV JcLB&JcLB&JcMJE$ipJ:$kPL8PHVC)]Y=B[#empTToF(i0G=6_WW3\5!Wi][853#lJXO=#[Z4fg0cC5j !"&`.!t$ngAq-)fob@GtZ?f,!,8:=`"UY\S-ost%D1J)Q^F6q?fA5fWgW?C=8KIs9!W`B<.QKakA:qAR j3+TZ>;Hcr+>l;N;eM0`^B!$frs.tg@4Vck"9S)nJcLB&JcLB&JcLB&JcP$8$3:86#R`7cI@d=9rN-C/ Xf\4SG[<W\%C6'+!#,G8!sB9/L!05Xd^lQRF[QlL"p>#'!$D=H$4n.JHEblAg@4ghK0]tK!s&H+#S%Ok 1J2(uLmb.<XUD;=[^`W2HWE'I%Ku_1(^)-[HE+?_[]I*:ISqsD%Kd>/F0=0Id_>X]q5jn?l/pj2B/9mX !.k3&!.k3&!.k3&!6"pT!<`T5$nk\0S"caZW2ckrW2Z8DG@*Z`&(^g-!#,SI)C@RUOO!mf^8S)g?o8>t "9S]#!$DCX,reY@R_HS2K4%DC2BN5/"9\l6&f`5V:Mboe\AZ2\WsPYtS!&/-7k>Vo#n7%>!sT#C6A*\b rt3k`LgiOb%LrpT*Dhses8VGtoW&=_>Y-IR%h&XE!<K_2JcLB&JcLB&JcLB&RfEs#-\&)1f&>]Nio/"2 7NMd/!2TZ$%Rb`:^=VF]([V2+(1+Ym[$^uC,6d]>"9]K$Dm]H)#MmkFYA>g"!VQL!#pMod[c*K0#l4N) "!'[CT$Huj"2f4<%-[bD!.k3&!.k3&!.k3&!9aF^!=/`T<eI6Q[Ca-N^BhN\XeC_g5T0_'!Oi("!##A7 !X^JL9iGMPRD@1XNabR7)?op:'`e@="V!FqB7cVuqZ$,jG"45/'*SF9!&Xih)_!mSGE98F]",A_]"Pi> s8;61Qs;!C"Tnf.'e24/;.P<gk2XXfKj->D#otic78[QNr4Vp>!9sL_#i_@Z.1-7^!W`&tScF?BJcLB& JcLB&JcN^h!!3'#"s-3NP+JPPr2g4*VONNh<AG9f!WW8U!7(WZ!<N?+'1mo$p[-D?Xe9f)'+"jG!r2g@ !X9#F*_^pbdE:;<pY(0^$ipG2!W`<%!!O/k7:(+pT<,)ori?C-Y-#@OWeOV1!>bq<!#Phb:3rqI\[JTO Ujc2t*tAAb4Dpt<cH3TgX9Zr.hUeZ60FIaYrW3$#rW0k9JcLB&JcLB&JcLB&TE"rmrW3<H7rFEXU8Y$h Ws>Z!R#6)h1)0]h!W`9$WrNh;%iQcW@Z\n8jh@[oLgW(K"p>#/q#Cd*'IZ(CGb;aaSUXf\90tET#Qk/0 !<NB-#SAOWBoSpo\u_s4WN#ir&!Cg(.j#`B"p+o3#SBCUdJj.Xf;j^:4r=b>$jmtKM:_e-qTST3$AW%\ -4:=l"p+f,q#U6jJcLB&JcLB&JcLB&JcOd1"VOpjW5mcnjosM<E^h)OYlO.k#S'7NT"`h;CDZ@<#T7'c `j(VI*sD08&-<\:MqQk>h;7)Kj5mdR*<c'9#RM\GHFDdt2@0-Z"TfQ%?]DhugA0G)W`pbRNW=Y2JcLB& JcLB&JcN^hrW*9++%0n(T<,K7rP&`R\[/<,Hr2=$#mCFc!6tQX!<N<0/4`K6@Y'r_cF&X?7kbhbq#E&K "UGMS6XakjWndOPnud"#/Kb]2!WiB(":Gnb/4sK&R$EkrNg-9C]\`\gr8"(gA2"K##6P&C.QKakA:qAR j3+TZ>;Hco(+;+.<,7<^UD1#K`P\Ql6llO9!s&E)"U58;"Te_B!.k3&!.k3&!.k3&!2'<!!<E6'(,]3= MjgR@XUM5)R>>KA*s`&R!rr>%!#,G8!sB9/L!05Xd^lQRF@-WH"Tni%!"/l:'d,56JZcr1iUnMkfml0l !<WB+!s8T*!tQM/6<@lLN0Kd*Wi`>'XhE0%Z$f1g#Q4Z>"=6fhWjK=FXLk9W;DTC)":QhZH'FSWo8sHG Q^*PH5p?U8!!33(r<*0(!s88uJcLB&JcLB&JcLB&JcP!7$NU80!Z*asG_qc^W;Wb)W2?5RL1`jr#mUS8 [fH""'Eo!c-9Pb!cN!"?W2k_`2%0Tk!s/2t3<^9T9kfQe`ikeV=%PV2*!cZL!WrN-"U5AV1.YbnKT_n* [`?\8\?2crCfE/9+;G1c"U55E6A*\brt3k`LgiOb%1ERL'fTK`\?D]sr/^Z7#^9?1)@m;`"TnZ+!X/]0 r<!$$ScF?BJcLB&JcLB&JcNLb"Tfc4E2q[kjosMQPAE;geH!\k#S'7NT"`h;CDZC=#m)Dnc-3;LDAr]K !"f8C.TC,5R^'fXgZ$%b/d_X[p](R+,"R$giKZ;,q#CO#(+)"4oMboV*XVqR!.k3&!.k3&!.k3&!1s8j !='Ap:N))^YeC"M%DBEaZ`/mq3Z&G:"TSP&!##A7!X^JL9iGMPRD@+UN*\t.)?op:$N^PC(*uXfFdp)/ rWrPnXD^BT*u#"[!tkY;#Rh=b018uZFEr.SIZC)3fDbdmmAt.a(D$rX!u3:G5Z)'E\)u_oY(^(9%g<F^ -oORuC\2ugIY!#uC.g2o"9S`,!<`]<&e,-M!VueJ!.k3&!.k3&!.k3&!9X=h!<E66-9bUTMk@*KXU;52 UmH:(/J8Ku"LeC&!#,G8!sB9/L!05Xd^lQRF[6TF"9S`$!)<Y.+>H8sLoe/)iq<'!J3+#;!s8]2"9S]- #nn@/2b$eXF+KIJW2m&&^#.VoW*q=e!!**#"=6fhWjK=FXLk9W;DTC)":#r*;.F-JB)H<;B,"la=AhF6 ('Xa?!sAc2"pbM?!sAXs!.k3&!.k3&!.k3&!5edC!<E66-9tdWM4FRF%BHP.WhuJTG>p1.%1!*k!7(WZ "V2Lu4CXDts5gtnX,(.?$O$Y8!Vl^,"s5s6Jt]ctW0_^-83AIC$2t)-"9&E=#8/(.3_3FhG`AT8j5SLt WgRU)67F/d)%-NM#71u/K@0\u&_F(>@QkV<$OHtG,<f@PEG]I_B+S-2//Ja%"p4o0"pbSC#R1G2!rrA> !.k3&!.k3&!.k3&!1<ft!uaUcg>q>Wk2+CjR:I<>q>d>l#S'7NT"`h;CDQ=<"pm/>fZgLT!b`AOn,Nq# $QV*(Fd08[i5pU@)?oj8#RM\GHFDdt2@0'X!s&K-#kSK*"TmieJcLB&JcLB&JcLB&JcOp5#lt&:+YuZ. P,c1n^C.ch]t:V?G>'>&&I5cFnc0=(!Wi][853#lJXO="[#83Y0H(,j!#>VD'Hf),Ck&b7mf3=WWbjpK *YSh`"TAK[":#2?(*=t^8Q]G4DgdhZch[V@r3^Z4+;PIm!u3:G5Z)'E\)u_oY(^(9%g!"H'cn_W55[nF 7L2FO6p)q;$N^D/!=&i<'H@hs"p(=rJcLB&JcLB&JcLB&_>jlC!=BYl3Epp"Y5>=-Y-"LT@QYVF%0bJd cN"X[!WrQ=8VP@^mF&SJT6!7/#6b22q#E&O'e2LPGE8c0_r::^g3bjb!<WK3#R(;3!X&`:&fDlD2G[q3 PG+tWXLd?VldC/%4q@Vn!<E<L:3rqI\[JTOUjc2t*tADW%id)V1c@;b2A@u%/12PS$NgD2"9eu8#n.=O #6P"E!.k3&!.k3&!.k3&!1j/r!<ENF-p([\QN!lpX/i1tWi;\F@m1qK%0Z_3WrNh;%iQcW@Z\n8jh@[o LL2kF"U"l-q#Cd-,t`3K[E6dlQZ>n+7Q2k:#mU>2,6J)O":,JN)'q"$9PTQli994EWLIa*8MMY5$j6b> #SBCUdJj.Tf;j^:4r=\8#6Y5D+>3XRo/IF;,8gpr"U"o/"UGSL%LWOH"Tni-q>c*IJcLB&JcLB&JcLB& huF5h->_&ijQ>U`gXF943!Z_hm/RD%7"(Z@fApW\mf3[q'h4JHc)QJ-'E[\&%06e\7;7t&hU%p/4UhJf !!ilT8:%`'Pr8p:!.k3&!.k3&!.k3&!.k3d!!`cA*%4[7Uq?H;#J@!k>r3lE$JPR+!##A7!X^JL9iGMP RD7%RMHrV')$Tj:*!$0Q*@j0PDMc-Xo)JaZW+n@@*>Akd"pG/4!s8E%%fuhN1ItGSF,@<Jkl(P]^)h\o -lis,!u3:G5Z)'E\)u_oY(^(8%fl_8"pbVJ&b$M;&e,'Jr;[*($5+C.*Y\t`q>n_=JcLB&JcLB&JcLB& S,`j"%2BpLCQPX#Y5>=-Y*F$#.NB$*!!'&"'EJ7;";=@\bP1DP\uhTG5nO>*!s8?"%06J5*&gc5KU8X> _Vt+rp=FXL"T\]1$k*FG!s&9#/-H.c&1U4`KU&74X1?jNp@=SE&HDe3!<a]DHE+?_[]I*:ISqsD%g2q; #7LM@!"\]5'FkNY#mUS9!W`B,#71eL&eki`"TnN$JcLB&JcLB&JcLB&JcOj3"pPMO+$sb(rhogsr2U(& P&X2F*YA[e!:p1)"V2Lu4CXDts5gtnX+t%<$3^P6!W2rs!BCK;<f"B2g<cmeD,*JV.2`Bp"U##6"Tni. !<E0%#S7ju7rP$JkO$d"Rt"C.5qO,f"U,/;&OM,trr3P]X,(4K(^p]T!s/T3$k<aXq[iQ7'FtQW"Tnl0 !WiQ7&f25n%LWOG!s8<"V>u2JJcLB&JcLB&JcNC_"V4MOio9%sjoWh7(Y/T.!!j'&I@e1)k%PS!!"&oV >,^T,W.8+c!UKdo#9u`\XkhR9O(]X>p](R+,"R$giKZ;,PQ6:8JcLB&JcLB&JcM;@$O."R*("V1YdqBZ ^AYeQ]WRWJ=[4AJ!<N3$X8jUK!Wi][853#lJXO:#\Wgc&2BW;.!s/K*"U58F,s4k%C3l/[h>[F@s5]e^ 1*Rh^)]g7T1,C9u&dnsM"ToJi5YYU*L:,4grVuo3I7Yh-'*n[T.QKakA:qARj3+TZ>;?]i!WrT1#RV"2 %iGoi%LE:?!!*-&"W&[U>"q=A.jH,R'+k`cJcLB&JcLB&JcLB&JcOj3$3UVF'f9-FT;o#pqlL3sK4RP. *Xr/P!<Ke4o)KF)!WrQ=8VP@^mF&SJV0biS%LN@:!`&n%#n7_,:2#9BTrbB9lL+#KB.X5g%3@2Z-lj$3 $3pb<"pYJD,<f=TM4(<D\_$<DnsE)_!!!$#"=6fhWjK=FXLk9W;DTC*"9J]1#7:A:r!W<.)[QcU#6b23 !WiN1$kaL+0g@KF+;be*%LNLL$)R]S!.k3&!.k3&!.k3d!"/o9%i$p+J"3F9Wi5ls$`]YIAk=a"%0?S3 !T*n'!)*P,)C@RUOO!mf^8S)f@5nc'"p4r/!WrQ/$P4("7rP$Ce_A-FO^CsQ/LDAC$54L50-hJO&.8aH ":,MQ)a.\m_q*_pXIF]=83ng6*Y&>W#RD#/K@0\u&(dk<@QkV;#mLJ5"9f,?$h=WD#R:P9"9JZ,!t,hc .4d,-1b9jj'+YN\#mq%MaoI"nJcLB&JcLB&JcM,;"p6E3\]NUbrT445Gqoa(!2TZ$%Rb`:^=VLc)t3h5 #p`)i]B6qj>6-SflMq:o'K'BpgX`cnBHRKR!!ilT8:%`'Pr8ok!.k3&!.k3&!.k3&!.k43!"/o8$kb:" K;,QV\\7sV$b`mBPBpIp)?U$A!P8@&!$qXI!X^JL9iGMPRD77eSp"7#,n1"]"9Sf6%i$9P=(cDrM4hWG rr5:=Qs2'_+t,**8QfbB;EcKE&e#$L&g]J(>&]8'bNSp)s1WnQ-lis,!u3:G5Z)'E\)u_oY(^(8%fl\5 !sAc3$2b/'$5WsP!s&B&!Wr`V7qmp6G%k8Y6T6PD,U0)cJcLB&JcLB&JcLB&^]4]E"pk_d8T'T\UoO<o $D`f5AP"Hf!s/N)hZ1t&3WT9a";=@\bP1DP\uho`=""ms#m(21!s8]8'HSl!A:Bi;W2cuDj5Sd[<@%\O *]mM2:-UEX*"r_dr<EcP1f.q;P+o%gfC/G(QlA^2!!!$#"=6fhWjK=FXLk9W;DTC*"9AT-"U4l0o*5C& "9Sc/rW3]:$kjR36<A)7<(Ao$-m0?C(Db-nJcLB&JcLB&JcLB&S,`p""pk_d95]`YTr4geWsPf!O*kP4 /eeBh!<N;(!%8!])C@RUOO!mf^8S)f@6P>5#mCD5"9o&=(aUt,BT01Kg!RL6Lga+33[Z0j%21*U?=Qbn /g2)E#m:MB&/-m%J[3>FfWL]n<(K;,*Y&>W#RD#/K@0\u%G.Y:@QkV;#mLJ5!sAf,#65&$#9!aJ!s/Q+ !<`oS/Nua+?=R&,3\2R")AX,.+G'TF!.k3&!.k3&!.k4-!!O!0J"ss<rT47;Q<,IAZiKIn#nB@OT"`h= Fs-nW!"0)_<I1Oek-o@m'a3e%$4.tUQ.jfsO(]X>p](R+,"R$giKZ;,mf;VQ!s9&;!M'4B!.k3&!.k3& !.k3d!"/i2"plPGE0-it\%VaT$ba'SVO2O#,Qe,M!T*n&!)!=o!X^JL9iGMPRD7@nWJ"bO/.r6o"pG5B (a:e9Cj^r#T=)H's8W)EO&I5@-T!nUB8WUcK4$ng*"r_a&KWG^<,RDnbNSp)s1TP&8LPSm#Qkek3C$GP K=C"'bH?P'1(O?c!<N<)"9e/s('=U=!<NB.%5hLHZEL:&Q\0*W7Qi^gaoI"nJcLB&JcLB&JcM;@$N^G6 "rfR-H]O\pXSf1+Wh5K-?p#A1"9/G)!#,G8!sB9/L!05Xd^lQ_NF=^i((1<E!tPSL+u2VrHBP2*WN3/E g<VsrH:&YR$nth:N-/Z275?)&%13=D";WOX??M-sXh!'Pp@=SE&HDe3!<a]DHE+?_[]I*:ISqsD%g2n7 !X%loqu[Z8!<NN<)'qRSGaXVCEar!72(L%$-@u5L!.k3&!.k3&!.k43!"/i2":#o.?$_KuUoOBo$`Bkl OFgq**!??F!kSI(!*076)C@RUOO!mf^8S)gA3h.G$jZt="UGGL-9>"?MP\/=b.b!YKO[Y',9[g3)aA). V0lQ<2('=Q#71\E%4P"nU:\Y!YFC#@83ngK%L!"A#SBCUdJj.Sf;j^:4r=\7"p4l-"9&E'"oAGt"T8E< !W`<)'e)=HC4(krH"L)F4YnW7-S73Q!.k3&!.k3&!.k3&!4i.6"=-`dXkWg:"l6VB=u$<8!6G3I%Rb`: ^=VLq-j9,A$jJ(bTXDttk,V]4"p+T$"UPkU#Qb&#!"&cD7#KXJ[?"uD"o&''#pMod[c*K0#h]1_"t*\; *tAAR_uPAhJcLB&JcLB&JcM8?rW*6=2HkKmUpIc5^BqWf\[8N!?7c<_!<WA(!%.dK!X^JL9iGMPRD7J# Z]T0$0bt0)#R1VN,;2DpI$;+Q]YD5Vs8P.L`J7,*(+MF18o_?!hR%u;0dRbL"Uu4j/59l4Y06&-s8Tf] 8LPSm#Qkek3C$GPK=C"'bH?P'1(X9_lN%_#!!*0*#89LBNkX3)gsNR!IUZ>R8qI%p!.k3&!.k3&!.k42 !"&`-!Y?hPB7H&=Y5GC/Y,\:fGYB=b!s8V:!:p1)!<N?+'1mo$p[-D?Xfmq,74oVm#5nW/$61`g>]l(% r2i-)b.!^C1DKp'6?]WNRtlQ5:Gj7-%0m%<&1'A7CP8+X\_$<DnsE)_!!!$#"=6fhWjK=FXLk9W;DTC* "TADq!V?El!##GB'Ho,-Fd&o8ZDNk5A5GEJ2`RZ7JcLB&JcLB&JcLB&^AnTA!<Ni`8S<L5TW7sk$`L)& Tp^+",6S,O!oF"(!)*P,)C@RUOO!mf^8S)hBLO!Y&.8UE#R_+^2-"deYJA/XWN)u!J7:ba*uu+--<QZ- r2Y'A4Z4T%$4$nB#9cBGOflRGZ($5B83ng6*Y&>W#RD#/K@0\u$.l56@QkV;#mLM2!:0aa!##MT1/;SD Wk>9mHY-2N83\mg5u#K%JcLB&JcLB&JcLB&PlLpp.T_h_rT4:Be%MN#*rQ)8!!s-'I@e1)k(YSqoDf7$ +'#5si8Wh[Sk'Rr!rDs&"sH0(2AQJtp&GC-2h0E0[?"uD"o&''#pMod[c*K0#hf7c![W$FWG+I8%0Q_1 !.k3&!.k3&!.k3&!.k4/!!s2b6stG0X1>pWrkAiS]XbA:E^U`W$jHaF!:g+[!<N<0/4`K6@Y'r^g"+0I P]p=u3&WQJ2aU5;?Z_$q^r+16dJiq&c(Su='GMrV5>#XnlgW/sIU#]=4"rZ^8PNW;NO-jrrr3eIGsrts &I8IS.lp!qAqRSTj3+TZ>;?`]!:^%&!<WK2&k6f$^X_N2j34m#L3n#\V>u2JJcLB&JcLB&JcNF`(^hEC :2#6IWi`D+Xfee/Whb;S2%g?("9IE\cN$W>!WrQ=8VP@^mF&SJZ_E7j<CJbo,UF`^/O*'@FGH3\Y-G@C ^XorUANh:I!>@nHZc/f(Q]Z8m82r=T,p>'5<bQi@TWG`[o_.jE(/#8?!!**',u/`bZadHF];0mR1ER,1 j8]hq$Pjm?<Hsn5[_0,OQ[s*`>$>(O!.k3&!.k3&!.k3&!13`k$m7H)BRuJHrhp1(W2ckpTRpN/'+G!L "9GY*-j:,"-9Pb!cN!"?W2l#&>!G#'/LVtr/M]RqG*T8EaM+[MSsu*b<B:[3)]'.t-X<>Cs3-F9;bfhC r[Sj9-q%KsW4^3rY*sK.6ocM2$j6_=#SBCVdJj.Pf;j^:4r=\7"p<od'*T=4:i2B"_5j)[FCeid=]AI1 C4ZG;!.k3&!.k3&!.k4+!"KDlDSt>fioK+RbIs3!#.=O!!"09)I@e1)k+5<h"9J8t%0?hU6$g9,i7uu2 D_)7l!!ifR6XEeO*"<#G!"/i8-<-;be?+=+(BX@3#RVhKHa_mu2@/aOli7Ls.tQj&O^UC&)\)uQ"U1b' JcLB&JcLB&JcLB&]Dr0E*%jThL820U]a_`k]tM(gUP2u0-5[-lhuM%&7f`Ym$7n_B;dt<G^XLodb-n"' H?4(ED/OE9FE`G&Vng@$iU-U#^Ro^J0+AL?3Bp)DQfe/&_krHJI!'7DE,]T:KUK?roD\ai\JB<Q+;PIm !u<FM6W7WN\)u_oY(^(8&**^(!<WK2&k6f$^WPKskh!h_VOj*8aoI"nJcLB&JcLB&JcM/<'aPO!1f84Q VQ?o%Y-+n.Y,RJ#9.1b]&dSQA!%7jL!sB9/L!05Xd^lQgYG%#,Eb8NY=BJU1B6/QZQD1@][DC5FfV37E 4s^mK!YdtCY/IT4TrO9,F(f#i=]JjFFb>aDV5q>ip@e*G9+q:*!<E<L9mEVC\$`<LUjc2t*tJM8!##GB (*PD4GaPV@]=PPNR>lfIH?b#AJcLB&JcLB&JcLB&huF#g'dP\9E/gTlrMU+%WiDqUDbVW$'+"`Q!:p1k "V2Lu4CXDts5gtnX-eW_?sR&C=^,3?@r6g`X2)cp\#Q!dLim#p0,G65%La[hUAk2YWe"u$AmnnK>[(BO Ln_T(cGZcOC.gfF*#&b`"pYDG6A3bcrs@8WLgiOb$jd+?oDnC]'*T=4:i2B"_5j8mKm@ldF`DPTM5C9) !.k3&!.k3&!.k3[!"B]=W7p"_io8eJbHXeTg&T4p%LtmTT"`h=\pI!p)%d/XrW<]7#8/.78oUHMjkJ%m X[a0/q>_K=+@0O]@n&=$'ab0L!s/cC,;`AM[,'*+F\<2Gp](R-,t`QoiKZ;,g&MTa.tQj3ZAra'82r%G .4`O@JcLB&JcLB&JcLB&QiIO!&/uudF-s8G]Y2%ork/KIX-Im,49?iB"0DPN!<N<0/4`K6@Y'r^ak,;% c+pW_U7e*JS!T=uNKp9I_9V'6s7aL!+)Xt:+UJZ*2a9i=J'dlPe\\YqW1oiNP`:BTRAd^Eq#::0\8XMK '+>'I(G.a;<G7&pk2XXfKj-;Cj8]ho!sJrC7W4C'_Tporg!RgO['-H\!.k3&!.k3&!.k3&!8mha":Gqa 2dV-1Y-"f'XU)"rJ7:es*"<"_!:p2#!<N?+'1mo$p[-D?XgPOBXeD/GMhd+DKo(ePQCXbLXKT:ajn%)_ ;BQSZ!s03'EiHsfW26u,UR@:,N/<:IO-H',V5UK1kk=]?R7S(m!<E0',u&W]Z*q'A];0mR1ER,1oDnC] '*AUX+YcuAR'!O"]"GDRVOs9DQ_jb7!.k3&!.k3&!.k3`!#PhI'coDCJtB!BW2Q_pVlH\]IUY]!*Xr50 !7(X="V2Lu4CXDts5gtnX.kr;J:E0(L51VDO-H?@^W=I,XJhSBAPYoZ,7b1j$OS7eU]:Anc^TZCKS>)4 LPUbPV7"Ij`42h7?q<@''+#3U"9o);&OM/urr3;UX,(4K(^p]T"69Fq"WK<qD3D->X/;MUNfK*[O-H** aoI"nJcLB&JcLB&JcLu7&-anNbLYJ-jPJ_Ia)3C4!!&hq+q@"hT"`h=e$G$M?r]oh5X7V%8QfbRO0-FU jO1W7L*m9-q>_K=*^OG#T8e/3>>7[X69S"KDLRt[d,<6BBKl_&p](R--VSrtiKZ;,g&MTa.tQj<cFg0G Mgf_dEccm5JcLB&JcLB&JcLB&huF,e"ptej?B)+u]Y2#W^BhNZU5X(i1`6D.!:g+"!<N<0/4`K6@Y'r^ ^VRbc`W<oirOX)[[^3?M\[oGieaib?kc&Je0d./5%3mer8Qp,*`W!je`507']=>5RYdh6T^XW/[rti%Y 2AQi2"ToPn5"8OdL:?=*bH?P'1(X!WnGisu!sJrC7W4C'^qdh(rkJWP^V@CX!.k3&!.k3&!.k3&!5&:= !sAi8,#!6OWiiH%XU2/4UQ9V)5q3QNhuM(''EJ7;";=@\bP1DP\ui*;Xg5.7YH7])"0/E'X8]19Xfo\% o_-UX3XPuk!<Ep"DPY(c]W\L;YS+.@Y,nY)WN*,$XK8P@m.U)AQPN1,!!**#"=6cdV6RG7XLk9W;DTC* "QTOg!t,kf0i`IcXo>I'YPkU*XK8JF!.k3&!.k3&!.k3&!13a$!sAi8,>NHNV5gPoX/`1uW1],o?:4iD 'EbK<'*Smb-9Pb!cN!"?W2lkoVPL)dVu3M)Y-5%5XK&8"VjD6q7Q2e3#6b88#72bbV>gK=mCK-iVP^8j Vl?_uZE^R6WN)tb=[Y+^$O[1B"pYGH6A3bcrs@5VLgiOb$jd+?j8]hs)`:H/P-Dd'WMcViVPgAkWiE.P !.k3&!.k3&!.k3&!87D_*d>ECgYV)RjPnpX9cXDI!:9aq%Rb`:^=VN+h:pQ1dEMO1%a<;Mf\5-<ioA.Z KOGGnq#D?;*'\/-ceI+(dETkWaiM]Rf%Aa5i8i(I>VZEU!!iu]9n'V2Pr8p:!:0[q!\8iaj58_KgtUQ8 f%/HM!.k3&!/^a]!<N?*"ptbM!t5J>!JUT+!.k3`!"/f0"9ouBHCqFK\\7sV%)'-NSVq8Q,mXST!<M6] c2\1P!Wi][853#lJXQ#B*5KD3e_]lmr:d^P;D'%+$Ng_V1-A-2CPoC*\\7dQ$,FF"de3V>s4<AK==k'm #6Y,F/NlO'C4s(XiQ8-Q=>CEJ!"/f/"9oB%B8*.\[(?(JaoI"nJcLB&jT#Yi!WrN-#71bE"p>"-!.k3& !13`n!WrQ.(-H/dT;8LaXTYPiM02o)2]Dr'!s/M/!"/f/!sB9/L!05Xd^nnL$EgYB]\)9-jd0'u!<iQ( !=KN!@#:eb['Hj9XKM?#+KhoS]A;uIn%j',%flY2!<aZ@Fec+F[B-j4Hr)L;%g:qn$Ng\K*\1!'NiB+^ XSJuM!.k3&!3Q;0!WiH,":#5A#mUS7i;eH0JcLB&huF,d!sA`C5%]Y@Tr+deWskr&QA9Qa3ZSD-!s/M= !:p0u"V2Lu4CXDts5gtnn>dP.VPK`FFC7j'.io-&!s8`4+]46KrVuT=XfAA!po>(+UnXB(>XBD5#RCV; "U55E6\Nkdrs@8WMI\ph$jd+?oDnC]$j@M%7Uh"E]XbDOW2f]pV>u2JJcLB&JcLB&JcN4Z"U[SJUVkjb josVDDE]!@h#POs"V*qKT"`hGjpC)'e]+tH;_Sphp](U$&1gY/]%PlqiqVXBhqZc)Qr5(1!!)co#R_tP Haht!2@/":#6>`Majf&$jSJ#]!.k3&!.k45!"8l1"9o/E)C-p^(^pMH!.k3&!13`o!<N?+(d)>`Su]62 rP&NM\[/<.JHf=6%g`FB!O2V3!<N<0/4`K6@Y's:^C.m,i8rtMaL\C#>!!9;((LTO#8\aF6s45QQCk:j pqIrgfB)>`i6f9+BL*aK#R(;4(+_U:<G@,qjke%WJQ=K8j8]Sh!WrT61g,$YOe8biqS.U^JcLB&Y5et3 !sA`2%29a+*"iP[i;eH0JcLB&huF,d!WrQ</l?SER&$n_XUD/(R>YlQ-OU+]!s-1;o)K.!!WrQ=8VP@^ mF&T8XW4LN\$`H?TpCI=2]Di"!<N93.njf6PFnbUXKS`#XWXj[_SsR2ZCZ85-jp"U!!*3I8opZ,ZF$^E Sp*j[*"E)C!:^$s!XB8Q,XQ$mSYN0cq5pLoJcLB&MZ="`!sA`3%29d-"!/*^",6f-!.k3`!"/i0!sB8k ;fIMWTrS'l%&g%rQ&0<M-jg1^!s.H_cN"=V%iQcW@Z\n8jh@\_WuS%/O+_[e;ElWR'FFpC!sAfI6#NRB dauj[]<A1.WsPShMLK560G4Tq#mCD5":#2E6\Wtfrs@>YLLrdi$jd+?j8]Sk'.,b:Di_$>a1S^XqQ%a= JcLB&JcLB&JcLB&OT5M"5A?e;rT4:B_in_"&>]@1%Rb`:^=Vl:#iE[uIpG)W$j-D.q#C[&'J`gO]#iU] puVh9`2JJl,maVG!!ioV7sVN$P;W^"!!WfjLSDK5j8.ni!.k3&!3ZA2!<WN6%NR,c;*lcJ"lTH5!.k3& !8mhb!<E6(&M-OiKq5BXr4`WQ\[8Q)E'bBO$3^IG!:g*s!<N<0/4`K6@Y's:^Dt,LjPeS"TS$lQ3$]+E #6b,4&032^<+pH.OeK5Y^ECeamH`H>TR^H>//8?m!s/Q>.m$+!BS<kUh8H.<<%ngS!:Tsr!<N<.-qe,p Jrc\=qS/m-JcLB&MZ="`!sAl:(*bP!"#M,3"GQo.!.k3`!"/f/!WrlU4'6EWSu_gl%'Hb5V4N0@1_L-# "9RWacN"=R!WrQ=8VP@^mF&T8XW4LSZ)<h8C/dMP*=MrM!W`<0+?*/2H&S;nXKAT!XU2JT_Rue,F'(XT ()@)S!!*'&,"ZaDW3EV0[[hM2//es"j8]Ph"q)%`2ck*]R%gSUXi^Wq!.k3&!9O7i!<`N2$5OjA68Tku "KDHR!.k3<!"/f/!WrlV4BQQWR]$+b"fSH!TppK8>Vm*$#6Y+6!"/r@)C@RUOO!mf^8UP%$`9#9D-g%& /K#0."V1V8!WrN=0N3:eXLQ-e_796?':t#*CKX"R&-`7?!s/T0#SBIYe,K@Rg8g'@5oL.="p<od$j7+^ /O*KgT=i.`\uGP,JcLB&JcLB&JcLB&JcOI("9K?#H,fgF#3++BSUW*k\cD*t"V*qKT"`hGjp'VCF@R_k "7lKt";a".Q*JHbpuVe.V0,Zc%0?,%#RDM@FgBti1C*@KlMq+j)btCA`o-^UV>u2JJcL]/#QY)9%i$Q\ >]U!R59U5c!.k3&!4r71!=&uR1J2D@VRZQ=$ba6d];0sS,8CXm!os@,!"&`.!X^JL9iGMPRIIs2_rTe+ ^moOF1aa4R"Tnf,!<``C)_XfkDg6u$Xn]X;fBV_``LV'G3%+hF$3L2-&-EUq3^HbZKt$'q^nQ-R0Fm(B $3:23*&pi*F+fsnqS1/QJcLB&JcOp5$ipJ9$P4F;8R>(F(^-i=JcLB&QN7!c#7)%m4'$QhWqrh!Y,m]h CHraK#mCC9!"/f/!sB9/L!05Xd^nqM$a6t:OE4Jb,7Y%b":tV9!<E0*(*tn3@sO00Vl[)sXUDbW]rd0& 5U7$Q#6Xo)&-O.HD4.6(Z)k:#E^_Do$j5Pj$N^J;%21<a@t'B*V>76F!.k3&!3ZA2!<`Z8&0Nf&?VW?o "Q9?4!.k3&!8deU!=&lH-p1RTOJ_uW%'$8+Wi1to65gCA"TlI>o)K.%%iQcW@Z\n8jh@\_Wstn]E*>Xg -PZji!s/K'rW*B9+ZWM@M4qAqaM>"SWtUkNC0!b[*sr)O!<N9("UG].L=?/%$/;M<AO%1C#mLM(!:^$t !t5qf0MH8BZ+IulWVWZm!.k3&!.t7O#(ci,!.k3X!!<9C>.4Cl#3=Xqd)T#ph>kXt"V*qKT"`hGjosJ$ 9Ha]CnGiar*(4h3\_-]>"iQ0m.LuRY!;HO"#96$LZ/Lm&#M9"[#:2rd[,:`BaoI"nJcLB&jo>ej"q2+^ 1/MnFED.beWW7VNJcM#8#6tqf1/W=dZi7Z:^B2-_XTjl"3$oLO"0hhC!<N<0/4`K6@Y'r^^W=XGbJ^uu Yd:[D[JmTB^;RaiS97dh)\WVa!!3#u$N^M@&Kj,5AorTcUAVCs[L:'r`Oqge;D]L4%0c\1&-<Ff1d4fM IAk&oUP<AM-k"r5#m1kj5Z)0CPHM1i[/RC`!.k3&!3ZA2!<`Z;'IQ+KEa:dK#2oQ6!.k3&!8IPk"V2P" 5\5bHXK8P,Xf\b.Xdj`;/0#?1"2Fp.!#>S:!sB9/L!05Xd^lQ_YHFq*W2HDdU].+jVuEIsQ\B9U2]rM/ rW2os$O%"W,W/5(GDVKMT_P;jV4a'(AO7^R"9S],r;[B2*BdYWMNO:#R!`-r+;5(aoDnC]%06S8#Rqq8 :1eX'PGG&SV#I6g!.k3&!/gg_!<`]>'IZ7OE<BN2*s[N#JcLB&\,Zd<%icuaAqltYrhojuWrAq%R<_da *Y\n_j8dL+'*Smb-9Pb!cN!"?W2lhnTUq[FT`1bdU(3fhTpL(58hq\/$NU80!W2p*#T,!P:hP0>U8=fb pn8"OEEbpj,ngI`!>Y_;!<NE/%Q\R6rVQ*6WIS88)%-]R"69Fj!XK>S,<8Y?NLQZ@V#@"dU<3If!.k3& !8dbX!uD-=!.k3&!07*g#s+:)gtq&QjPo.TFTEZfVZ75;7"(Z@fB1l9_m$5BWi2ioW;`[sMb>/uq#L*g "U,f':2,R[VZ_*1+q4SE!!iW:-V/9K;],Vf!!NWJ4(OeWrhoaoJcLB&JcMtS$ipP@'HB)8GER>P.gk58 JcLB&JcOR+$O$tU,<]_"WOTLP^&>\O]s=2Z>XL"W"i(-/!%7jL!X^JL9iGMPRD7"oc,@,lT9GA!PE_B" Q^F,$L3[H/4!kRL#Qt2,!"/i3#RhFq4&94!H&)B_s-3MJ%%!6AM198:3@#CP#m:,+&-31U,VhelEJod* DI#ae*!c*9m/RXu%id,_:h+^-OHPflP`q<.!.k3&!/gg_!<`]>'eDjaI04+L+:!W$JcLB&\,Zj=#n\+0 <-Xb/Wil?'$EgP6To!PW1a!A5j8dL+'*/.:";=@\bP1DP\ui-5RZ*#RJc:-2J:W9$IXQKU=@P+l'F+X> !Wi3!$NpeK(aCh(<+0N\GPlq"IXcirF_bDa5:RKV!s/K)!W<!0!u!.L=C>f\G\L&8+VbFk"69Fq!<NB. #o4gD7T3]2H$t'gIt*!!aoI"nJcLB&jo>ej":5SR/P0H!B14!LWW7VNJcM#8%0QtL*&(E;Q):IZVlQis VuWCnLMKUB+qXs`!%8!])C@RUOO!mf^8S*,PD+7+H?t!gIsulqI=-B^?;!1$)%QuR!W`?"!"/uA)^mR3 ;dsWbG^KF<rdOio#AdR72CBCP"8i05!WrT4-q\NSSs>1^@R_dY#R1A4j8]Ph"q)"\-oah*B5i(jIY%QO !.k3L!!3BP$f1l8!.k3&!7q2\!ZkmW`7*Q)jPo1UO$4)d!:9b(%Rb`:^=VMdO^L=11+t(*.P!&$.Ocbf $N]Pn!sK&H+T<hh.fLk!)%-NInGiao"Uu:m$j#brkPtqj#8&4/-RgMp.k@IsJcLB&MZ="`"q;:h5%&o1 ",0u5$AJP4!.k3\!"/l7%210gI%IRL\\7pU#e$[tIpbMb"p*fcc2\X]!Wi][853#lJXO:%bIaX9JoG!u >[Ck;@gldJ:.@>u+r1Ok"Te`'!$2.C"U5AN+Y5T=92o2&?=$uH?t!PN=&)4H/g(l<#lt22r;[B0#7V@e .Q9ju:e*`-.NK*)huF/d#7hXp/iuX)>$G9=ra3eJJcLB&JcOp5$ipJ;&/HrpCPQh",R:=LJcLB&PQ2'n "pkb]6"c%HUoLNpXT>T&#F9pT:,3Xh!ODbA!<N?+'1mo$p[-D?XfIe:?s$?(9h\=]:C^,n8jtco,T@=' "T\Z*!W2p,!sT&A'H8>O2EaE":/:^]#u"#]4#AK4((CHG!rW*1!Xfei1H%?]76)k>&./UE!os=p!<N?+ "Ul(c-n[GB7nQEI9MJ;ZJcLB&JcMtS$ipJ;&Jm/uCP6V!,m`H0JcLB&JcOR+$j-\?%j48QLRY!7WiQ-! $)jV_J8%h8)$BuV!:p1%"V2Lu4CXDts5gtnX-S<O;uBE':f1.g:J=DM2^od]%L<1=!<N&t$Np_H(*+\P 2*=/o9)MF09he;T5r:#3'b1HO!WiB&!!33("r8XP<Du[d7lMe4$3gS7!qZK_!"Ar3"pkbT*[id)5=\CB r_ESj:f+"hJcLB&KE)#`2ujSD!.k3&!3uS/$pT?=_qX>Qj94JB?nMoH!6G3M%Rb`:^=VMA<?h_N!Wg@B JcLB&JcLB&jo>ej#7hUp6YVCPNFOaPWW7VNJcM#8$NU>5"rKU@OJ]4i^&5VF\HoL>Rs\-b#lt(5!#P_< !X^JL9iGMPRD7(_U3pKH3$TLg,pt/@.LR[L*>fJ$$O-\8!Wi3!+9;KE!X/f:%M9Eo+!MpT,pjre.4QYe *#KA#$O-_9!Wi6"&-2k:"pteO()n,-'bUu`"TmT^$NU>6#R_.U(E4D=,5ig>!.k3&!3ZA2!X/rD))P?8 OEaSM#iPc8!.k3&!8IP^!WrQ.&i*R9PFe\Tr2g:*Tp:CG6QcR6!Q"j.!$hRH!sB9/L!05Xd^lQVJm'fR +rqXC*??4C)]BP/&e59T#6P),!W2p-!<WH."pbSH&JZ-%*?6't)\!]((DRMl#mUS8!<N<'r;[B0":#>G &J>`l&Io'N!s8T+oDn@\&ci"7!X/c7$k<mb(`=52)]Tk?V>u2JJcL]/#Qb/:&K*K.FH-HJ;CDg*!.k3& !4W":!WrQ.'/E[8OIN#Fri6F,WhuANKP*^t#6=kf!7(WZ"V2Lu4CXDts5gtnX,h-n.3]lV*r[5j+<DRC )&Eko#mCD6!s/2t$j$P8#71eK&/#]o)BAYq$lg3)((gu^"p>&1!<E*!rW*Q3#7V@d)&O/)&I\mI!s/N) j8]ho!WrQ/"pteN&eu6%*?6%>*ZcEG!.k3&!.k4/!!<9@:`lS8JcLB&NW94a,$KJre,JJ2jQ+2\O'XdS W;m577"(Z@fB.W8"R#iN!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!.k4'!!`oc<d^71Z+BkJ$ba'U X-.0Y&Hr7=!Q5!/!#GY;!X^JL9iGMPRD@.WNakX8)?g0E"pt58!so28!pfmh!<E6(rWNT4"pYD?$3p_: !S7>4!!30'"oSY&!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&ZiC=;,Xl?tP+\lRXUD;3UR?O1/e%pc !s.TccN"X[!WrQ=8VP@^mF&SJT6*I6#mUY<rWWW6#6b23!WiB'li7(f!sJQ+r<3$#!!2rs_uKl?!WiK& "9J`2#Kd$u!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k34!!`fV7q[C7SYuIe!irB%$DsG]HWMj0"9\f- [K$pD%iQcW@Z\n8jh@[oMI\^Y$OH_9r<EN0"9S]-!Wi)soDepn!sAB&"p4u2!s8T*^&SKA!s8Z0"9eo3 "pTYZJcLB&W;m&'+CHT!hZ/6.JcLB&eGo^[0j'CSro==Hk0p]"DC,G!!:9al%Rb`:^=VF_(nUe[!.k3& !/gg_!=05S,=ZR2Vur5s2@P<?JcLB&ZiCC>,=#U`QDqC-^AbkT]t1\YSU+*Z'Fb9LkQ&m.('+I<$7n_B ;dt<G^sBHL@S&9m"T\].r!!6."Tnel!<3*"!riB&"TJZ)"p5#3!Wi/u^]4H;!s8]*"j-gs!.k3&!9O7i !X9#H)`LoGQ@;d_#c[lV!.k34!"B/P1/2D3Q`.$gY-"h-$EL)"M.Jmk%g`CA[K%'D!WrQ=8VP@^mF&SJ T6*I7#mUV:"9nc-rWE-$!!2lqoDepn!X&<&qZ?j#!PSR6!WN6#"9&E'"bH`+!.k3S!"8o5$ks[B>'Z<Z <\"L8!.k3&!.k4'!!`cL1/;J3PbnAX%B?J/Vkfr?AjIIK#mCFL!:p1,"V2Lu4CXDts5gtnX,:FI%g`IE "9eo3rWN3&!WiB'li7(f!X&6$r<!$$ec=n6"p"c-!sA`1r</ttJcLB&K`D/V+CG3u!e^Q*!.k3T!"KDg @^"YIioK7V`iY@e$K;'-!!j'&I@e1)jD>aO!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k34!"B,K .m[HlS[6#C^;%Fr$G<s[W/P=N-Q*?r[/_9L!Wi][853#lJXO="[Z4fg0cL8s!WrN-"9er3!s/N!!:p0l !<E9"!s\r3"U,#1!<Kb3rrN$"JcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcOF'#6YV]1.uG@U].@q Y5YO0X/_G.;_B%(#mA0Ho)KF)!WrQ=8VP@^mF&SJT6*I7#m^\5"8r?+!s/K)!WhTerrVosrW:XNk5bM_ rW<*%rWK(uJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3X!!i]>+uE#1LnL[FW!o`)Wi)_WF]:%9'F=p+ !7(WZ"V2Lu4CXDts5gtnX,:@F%L<4A"8i<$!s/N)!U9[b!rE'""T8E'!Wi,t_uKc<rW;s!!!LFEJcLB& JcO^/"9TcS-j$=IJcLB&MZ="o6'L-]iSs"U"kL]%?5isH!!j'&I@e1)jD>as!0mP9!.k3&!3ZA2!=05S ,=ZR2W0:mQ%,h2<!.k3&!8%8V":Z1o4DU.ark/BJ^V9]\#I'YB;`Z9@#/gN4!##A7!X^JL9iGMPRD@1X NabR7)[?9BqZ?`tl2^Y]quZm!ec=_1qZ3PoJcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k3X!"/o9&fWH* I@dRBXfhW)#csVOAOA$h&-V1scN"UZ!WrQ=8VP@^mF&SJTQER8#mUS-!r`5c!<3)n!ri;t!5\a7!W3#A !.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!0@0d":5_^0N`^kWrAptX/HB(W2c>>Ajn<n&-TEA'Eo!c -9Pb!cN!"?W2k_`2[p#q"9\K%rW2`no)SdkpB(?q])_g2q>u6KJcLB&W;m&'+CHT!hZ/6.JcLB&df9jZ -[a\(hW!\VhV6b;2@7+um/RD%7"(Z@fAp]aT)aHCJcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3X!!iW1 $P+I[K;cE]^&5VO\"o"%:c9@$!<MHcc2\LY!Wi][853#lJXO=#[Z4fg0cC5;!.k3&!.k3&!9O7i!X9#H )`LoGQ@;d_#c[lV!.k34!!r]0#R_M9DO%<+rN6($$)`o1>!FJO"p"b7!#,G8!sB9/L!05Xd^lQRF[QlL "p>"p!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!8%8Z!X&c9)FSJ+W2ckrr2U."O*=eo.i/Ek !QG-2!#,SI)C@RUOO!mf^8S)g?o8>t"9S\$!.k3&!.k3)!!36F?i_YWKE-T(JcMqR"VP.^e(`aWjo__e *WtI'aT)SV7"(Z@fAp]`_Z58gJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&O8o^k"U>DR6ueNqZam`` ^](tU\ZMEZDG2Pj!s8T*\H!9D!Wi][853#lJXO=#[Z4fg0cC5_!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_ #iPc8!.k3&!8%8Y!X&Z4'K'0IStrC`XUD/!M/l`]+:82Q!Wg@Bo)KI*!WrQ=8VP@^mF&SJTQNX9#mLM6 V#Z)IJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3X!"/i2"UGf#?@\K<VlKZq$`9>IE`tXN$3UG4!UKg4 !#,SI)C@RUOO!mf^8S)g?o8>t"9S\H!.k3&!.k3&!8mh["!Cu"!iQ*N!.k3.!!`WZH'u4ok2u[*"MJqA (^$l?#S'7NT"`h;CDZ.6PlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&fDl9[!sJlA1gGU&W3X#4 ^C.]\X.P)S3Y_i%!s-ICnc0=(!Wi][853#lJXO=#[Z4fg0cC4l!.k3&!.k3/!!iW1$PXO==aHA9IT.d& L&cf*JcN.X$N^D5":ZhPCl"CPX8K(-Y,%GCDbhqr"9\f.li>?3'EJ7;";=@\bP1DP\uhWJ6k]k2"9Q[F JcLB&JcLB&jo>ek"q21c3a-fmHr_a(WW7VNJcLl4%0?V7":lqSCke.GVlQltWsbr$Q&0HW/eJ3h!s6%6 'Eo!c-9Pb!cN!"?W2k_^2%0]m!s.chPlQC9JcLB&W;m&'+CHT!hZ/6.JcLB&d/X:\4(+2jr8n.*R;"u' _#Wj&#S'7NT"`h;CDWTCJcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!42_6!<E9)$n"MXKpo$Or4`WQ \[8T1G=W_]"p>"o!6tQX!<N<0/4`K6@Y'r_d'esD8MM+eaT-nmJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$S JcLB&O8o^j!WrN1*&^c7KpepBXo>F1XK&(fLgi@[#6Y/2\c<EF!WrQ=8VP@^mF&SJTQNX9#mLM6m/WCO JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcOF'$NU;2":6,/<c<VVVYmJ&WhuJZL134[#6Y/2a8kf3 'Eo!c-9Pb!cN!"?W2k_^2%0]m!s,4uJcLB&JcLK)!WsQQ!@S#&!.k3&!3H5(!YRD-Z2E_fgV]e>3X=dI aT)SV7"(Z@fAp]`_Z58gJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&MuX.f)DOp"M5%Al^](tU^:h4m XGL(,%137@\H!9D!Wi`\853#lJXO=#[Z4fg0cC5_!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k3& !7UuR";E4G<H=.sqlL4,XKJ"67iVg?"9Z^Fo)KI*!WrQ>8VP@^mF&SJTQNX9#mLM6V#Z)IJcLB&MZ="a "q21c3a-fm"+4-"$&/G3!.k3T!!i]A-U(UPNM3BNWsbl)WiDD-8KJ0C"9[ujcN"X_%iQcW@Z\n8jh@[o LgW(K#6Y,0aT-nmJcLB&JcO^/"9TcS-j$=IJcLB&L]@S[(epR^k5OKHiS</4E#PkZ#S'7NT"`h;CDZ.6 PlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&e,U<g&gTA2G*]8C]tM.p^:h4mYa08s-lW[#a8kc2 '*/.9$S=tH<+U]O^sKNM@S&9m"f23N!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&YQ+n2%3$f]@"=dB XTtJL>r<Z<$O#ercN"X[!WrT?8VP@]lHd#CTQNX9#mLM6aT-nmJcLB&JcOp5$j$VA'HB/;H'<VV.g`3U JcLB&MuX.e%id,c@XjfGWXbr*X/MqrWgnTG2BNY@"M+RI"V2Lt4CXDrs5:MfX,(.@$jQn;!UTlP!.k3& !.k3M!!EBH?ml*6!.k3&!.k3s!"K2aFk5='iTB+TgX_-4"N(6,!!j**JYL!5jD,R(!.k3&!.k3/!!iT2 &/c]^DN:XtP@ui_L&cf*JcN"T%0I"T,W&k^UUdtL]t_>]]a(p=Kk*Y+)[bp3c2\LY!<NW]92JZ&KUop* [Z4fg0cC5;!.k3&!.k3&!9O7i!X9#H)`LoGQ@;d_#c[lV!.k30!!r`5&K<2oDiq'#"0S`-Y5YO.UlK@j 2C'"B\c<EF!sAcB8VYC\kK^T>TQNX9#mLM6m/WCOJcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcO:# (]t'V*%=X%O/JnUW2cepVl6;JE)S_B'aMe[o)KI.%N6WT@Z\e1gq'GbLgW(K#6Y,0V#Z)IJcLB&K`D/V +CG3u!e^Q*!.k3N!"B]C\]3+RjPo%PgRq.Sk5`U(#S9R_V8CpHCDXkgJcLB&JcLB&jo>ej#S7ju7W+6b P@ui_WW7VNJcL`0#m(;>&fsSfS$TU*]"S*X$,4*`WgSEL7OS\U!##A6!XgYU;HIUfT>8g^NabR7)?oL. PlQC9JcLB&Y5et4"q)+a2d(HmIT.d&i;eH0JcLB&e,U<e":,GO3F[`=W2m#%Xfee.WgSNV;DoR&a8kf3 'EJ:>"Vsaban=c>\?2EH6k]k2"9PD"JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!3cG1!X&f=(HZ)Z Tr"[dWrAq%Vj;pN<&bs+li>?3'Ensa,s,Rtb4sW!VlPV]2%0]m!s-LDJcLB&JcLB&huEl^+CHT!VuVDL JcLN*!s^cQY7&A)jQ,=ZhRRG[&-B*:#SBahW5RENCDZ.6PlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0 JcLB&e,TjW!<WE211ZHKZad^H^B_EXW1/BD1_Rk0nc0=(!<NZ`:/kA6LS)B/[Z4fg0cC4l!.k3&!.k3/ !!iW1$PXO==aHA9IT.d&L&cf*JcN"T$ipD3!s^2NH(Lh3Y-.`*#HjkgL2BO4%I=)@!#,G9"U5`8Ku`iE b.+RHF[QlL"p>"L!.k3&!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k30!!rZ-!s8cV;g=b(!iDurrMp1' TTb%F9dpO_!#,SH)'h7PO3%%C[AU']?o8>t"9S\l!0mP9!.k3&!3#r$"!Cu"!oF!0!.k3&!6kKI,'fK_ e)L>g"O<<@2\<q.m/RD(:QV^!g>m#cT)aHCJcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3S!<*!)"t38m R\m="^&>\R]st;EP]0)6#R1A4n,U`6'*/+8$8"qL<b6iRa47YX?q)gf"j$ar!.k3&!.k45!"8o5$PXO= =aHB_<%80R!.k3&!/gg_!<E6)*^4(fP6%;Ur2g@.W1T<(>W*?%"9S_>!#,G9"9fN0I_G43cFL<_GXE)M "U"no!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!7LoV!<E6)+$a@hOIW2HWrB%,Whl2JIU+oL "p>&1bQ.57'Enp`,<91pc2QY6U7Q[61(+6h!Wf+tJcLB&JcLK)!WsQQ!@S#&!.k3&!3#r&#W>kA^#%iL josJBJm9c.l2\p+#S'=WUVbX;?PLBXJcLB&JcLB&jo>ej#S7ju7W+6bP@ui_WW7VNJcL]/rW*0**^!\T P6.Vg^&>\R]t1VUU4QQ%'Fb?N]`8]H!<NTY85N5kGGs-L[>A-V/f=i[!0mP9!.k3&!3ZA2!X9#H)`LoG Q@;d_#iPc8!.k3&!7LrI!=&`B/kTc*PGJ)X$EL%rNbq<4%g`FBbQ.57'EJ7;";4"EZKL<!_8Wm06PBb0 !s5;!JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!3ZD%!>kqU0MQ2-OJ/SPWiN2!VkT]?Ce5o`#mUV& !7(WZ"V)=m2e&$'s7+!uQ>9>K$3^P7!Qb=n!.k3&!.k4/!!EBH?ml)T!.k3&!/(=Q$RcEeT\\\ik2tF< W/!tVZ2b.<4`lt"cGr]kk5^bIJcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcLB&JcO4!$3:/0'IZ4KI%%:Q rP&`R]t:hXP&*B-((CGk!:g+'!<E6..7?m,>B@==j0XPD67j#XV#Z)IJcLB&MZ="a"q)+a2d(Hm"+F3! #_i>2!.k3R!"/f.!tQJ/7V@FIXfhW)$EUA0S:+Kp)%d/Xn,Uc7'EJ4:!tRM5WSH@\dFZ3^6P9Y.!s6RE JcLB&JcLB&jo>ek"q21c3a-fmHr_a(WW7VNJcLZ.#6=i-%j3VtB+fidW2Q_rX/N%tVjVm61)UZ1"MOjM ":Z+i2Ii-/s89ZnI:,Sn#m:A4!UTlP!.k3&!.k3M!!EBH?ml*6!.k3&!.k3o!"KApK%o;GjQ>=QaglUB !lk<.!!ifaAVmV)ZTnnj!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcMkP#QbDM,V`\cWkJ;E$,+$] T6sKh+qk7O!6kKV!<NNP5>"[RDoMJ7["DCD//JK3!.k3&!.k3&!9O7i!X9#H)`LoGQ@;d_#c[lV!.k3, !!NE0&K<)m"Ep37Y-.c+$EgM5Vi,1Q,T.'r^&SiJ!WiH63,+u3eC*@=a*p>f#R1A4m/WCOJcLB&JcMtS $j$VA'HB/;H'<VV.gb/7JcLB&JcO-t%0?hJ*%+R*Q)^d]WiN0!W!B,TB0mm^%gL5Xo)KI-$l0m@@@H0T r4%5d<'MT4!sAZ+V#Z)IJcLB&K`D/V+CG3u!e^Q*!.k3J!"Bl[gZ%5Rk2bOYhQ93TlN#$,#QuSWI&*d9 0aPYsJcLB&JcLB&jo>ej"q21d3a6lqITA!,WW7VNJcLT,"T\i<(*QBUH(DFV]Y46X#J$goDFu`.%/p:B !"o;5#Tbil9jW.Fh6i;V7PZ/#"76)R!.k3&!.k3S!"8l2#nIe'8S*Ed73Vuq!.k3&!.k3t!"8o4$5"+< AW!CfXfS](XTtkmH<E<Z(('s@cN*M9'*/+8$7f#$U8+]qc]_]l%0m";!ModJ!.k3&!/gg_!<`]>(+r6l IfjCT,6rr'JcLB&X8iY1"UYhZ5A#_IWN)nqrMp1$P^-Fp.2N<i!V6<;!#,MA&K*)oGcKB)O`=St2&c]$ !WiDE!.k3&!.k3&!8dbX#qQL_!.k3&!.k1T#sk]8f%f9`jo`P2+9SqM#7`@P:/*te!TsHJ!.k3&!.k3S !"8l3$4[b!6!A;74s:-h!.k3&!.k3t!"8l3$4dk7BTB."\@fNR^C.]YSV_8[0,+Ki!<LOIn,O%$"VN%< 6rdiFOEOkt0I%DC!i5mK!.k3&!/gg_!<`W7%j*Pt?3<hS(^,QnJcLB&X8iV/":#;G03!7bUT(EoXUD;( MK2la,S'tY!Whonc2dhE&-X+7<,?GnG(*UW+:&)P!s6REJcLB&JcLB&jo>ej":#8E+>cYs9edLgWW7VN JcLT,"T\`3$5"rr<dBt'VQ-TnWsbqsLiQ]b,nC(Z!Wg.<&-<(E&KEN!C4gY?=%G4n&Hi"6!!2HePlQC9 JcLB&VZ6]$h#N$,JcLB&aoDVI+DI%EcJJN^"O;Tb(^%k[lMq%j#7(YBSH+6AJcLB&MZ="`!sT)@)(7F7 "$7kE"bm#/!.k3P!"8l1"UPSh;gOq3YdqIG^C.`^X.P>a5TBk.!Whonb5`(U$5+@+0KDHn4u"B''Fb6J aT-nmJcLB&JcOp5$ipG5#7)"c.lf4%%g8m4JcLB&L]@SZ!sAf6,6^GGL6eI3r2g@.Um[-a<&,0j!s/M> !<*!$":uS)r]:EK4t[lg"9S],!UTlP!.k3&!.k3S!"8l1":#5I+=oT-*Y/D4!.k3&!.k3t!"8l1":#5X 7:q4:S>W:`Wsbr$QAK`b1)0oo!WgXJo)KF*"9o/C)CIF/4#JW<*"`GZ!s/M!!.k3&!.k3&!.k3&!.k3I !!N]g@#DMNrT4:;Vf"g?!q$&?!.k3&!.k3&!9F1g!WrQ/$kaF%)A3AZWW7VNJcLQ+"9AQ+"!@e6Aqc_S [(ZFQ$ba-ZYbQ\F,R"8P!PSOF!<WK1#n.:U'+YKY"pG)1!UTlP!.k3&!.k3R!"/i1"9\u>'H%So#6Wob JcLB&JcO*s$3C82!u<XjDha[UqlL4+VOro`5T9h.!s6gLmf3Fk"U>D5%L3LO#Qk/1!<T%sJcLB&JcLZ. #6Fu1":5MO)$:Q^#6T\\JcLB&WrNM/!WrQA1fSFIQ(b/TWsbi'U7@3W66$+2!s8)pcN"RY!WiH,"pteM %1EUN#6Y,1!<L4@JcLB&JcLB&JcLB&JcLB&"on]?2eT&CrT4:>`i+Yf%?gdW!.k3&!.k3R!"/f.!WrT3 $P!RN"9IH]JcLB&JcNso#Sf$gDMb!i]tXK\$ba6c\?D!+1_C-$"4.%"!.k3&!.k3.!!`N+!WrQ0#RUY> "p>!^!.k3&!2ff'&0sGBEf6NlXfhZ*$EU>/SpOBc%1!+>oDjICJcLB&JcLB&jT#Yh!WiH,"pbPB"p>"- !.k3&!.t7O&/HTX>&oIhWi2krX/N%sVODd0.1HRe"IT7T!.k3&!.k3&!.k3&!.k3l!"T/K6A3hHioK7Y g;gRJ+p,pfJcLB&JcLB&M?*VV"9JZ/#RUY>"Tnd[!.k3&!2ff%%jO#.EKI01rk/`T^:h4kZ^Z28.NT3. oDjICJcLB&JcLB&jT#8]rW3<,"9o)8"9S\)!.k3&!.t7O$O.J!5$`N%Wr&n)Y,e@S@m2"M%0i4#PlQC9 JcLB&XoJG&rW3<-"9o,9"9S\`!.k3&!.k3o!#Gt\/3mNfPbkCXW2cepWi)MEAO%@S%gLA\JcLB&JcLB& JcLB&JcLB&UAtc,,\"RDh;75OgXF0.3XP6TJcLB&JcLB&JcOm4r;d-*!sJl4!s/M'!.k3&!.t7O$4@Rn 0NN[q[_0;e^VBc]#IpRgC.9p"%@I3]!.k3&!.k3R!<3*"!riB%"9JZ,!T=$1!.k3&!6Y?Y#7qau7;7[X Y,nb.Y-"h-Wf_I*2^]@IciAXtJcLB&JcLZ."9AN)!X&E)!sA`.!JUT+!.k3K!"&rB)C@sgM5.)NVu<P" Whti"=#q]F$1n4L!.k3&!.k3&!.k3&!.k3&!;um-%7R;DgYLlKhV6bk<uV4+!0mP9!.k3&!3?2!!<`H+ !W`>[!.k3&!.k3o!#GeG%i%3EQEn'6]tV7r^:h1^Rt>3A//-A1JcLB&JcLB&L]IDT!WiE*!WiE(K`H]) JcM\K#m:J@&2%+:UT1KrXU;55Xfe7ND,N>;%eKaQ!.k3&!.k3&!94(Y!<iN+!s/N)W;qMMJcLE'!!EZ7 $4nmpJ=ia>W2Q`qW!B>kKPXUK,7g1BPlQC9JcLB&JcLB&JcLB&`W-MO/s4*!gYq5QiSMb'3"Q/9!.k3& !.k3&!.k3&!.k3&!2ff)!WrT1-sDA)[(*c^rP&`R[&94>?9B20!W`>s!.k3&!.k3&!.k3&!.k3&!.t7O !XSr3"<U0RQ_g^bqlL4%P_!OB/enHi!WehlPlQC9JcLB&JcLB&JcLB&b5_nO!sA`L8T9rgVQ-TnWsbr$ P(77A0GOZk!WgdNJcLB&JcLB&JcLB&JcLB&T`>63A=^0ShYlR>gRVS%%IjFM!.k3&!.k3&!.k3&!.k3' !!!$,!s8]M7WFZgYIM:E^C7fcYG7D,:+-DQ"9S[r!0mP9!.k3&!.k3&!.k3&!6Y?L!WrN-(cP`MOe/QM XUM;2SrnP24s't3"9S\T!.k3&!.k3&!.k3&!.k3&!2ff)!WrQ.)*2)QO.3#HrMp@*VONWr@R)%@"9\f- q#H!HJcLB&JcLB&JcLB&JcLB&qu?m'.T_,)g\p7<gpDQ1/-_F@PlQC9JcLB&JcLB&JcLB&b5_nN!WrN@ 2HY6dUU%T3^C7ff[]lZd@5\]+#Qt1Y!.k3&!.k3&!.k3&!.k3&!2ff)!<N?*&Lp7[H]Xr(qlL4'T9O@l .LcXf"9J;uJcLB&JcLB&JcLB&JcLB&K)blP$3C;3&M$@^HB+SsrMp@*WM>uHE`"=r#mLM5ScG#UJcLB& JcLB&JcLB&JcN^h":-8LO44'i"l@A$LKk\A!.k3&!.k3&!.k3&!.k3&!2fhq!='/_5$</sX1S;E$ba3` [$u,*)%m>^!Vl_I!.k3&!.k3&!.k3&!.k3'!!!$+!<N<1*&'lmJ=6>;%'H_8WhkGV2A?T+"9G(oPlQC9 JcLB&JcLB&JcLB&b5_nN!<N<2*\g5sJ!R)4Wskr*WhuJC?T/Z.#m::Z!.k3&!.k3&!.k3&!.k3&!1s5n #V9l8rT4=DgWm^-2[8jRJcLB&JcLB&JcLB&JcLB&JcPcM#mqLt3a@B6\@oWT^C%]g]r-Qb-lip,!M0:V !.k3&!.k3&!.k3&!.k3k!"&rD+"^*'OK,FbY5GC-Y*<in*Yo1h!n@:&!.k3&!.k3&!.k3&!.k3G!!``B +>-B,Ni)fS%B?J/W2Q_ZDatlb%0lt1!.k3&!.k3&!.k3&!.k3&!.k4H!"BQ;[bg!&jQ>O^hU>^BQiNBO JcLB&JcLB&JcLB&JcNgk$O77a-qJEGYdqE[^&GbQ^:gY6F%eJ:&HgP`JcLB&JcLB&JcLB&JcLB&UAtT( %2L$G?@ncKY5PI0Y-"dqJ6k>g)[uoF!.k3&!.k3&!.k3&!.k3&!.k4M!#PkK(*G\GJ=EF9Wi2tuW2Q_a IU>8i*"<"A!0mP9!.k3&!.k3&!.k3&!5\^G"u(_JcJ.4<jPo.PFXm[C!.k3&!.k3&!.k3&!.k3&!2BN% "Ubq\2IM98ZadW\rP&WOZ_ECu;D]6nq#H!HJcLB&JcLB&JcLB&JcLB&rW!</#RqIt:2l>jW3*0#XU2/4 UQ9V)5q3QNScG#UJcLB&JcLB&JcLB&JcNgk(^(*R'J!"!O.`>KW2lquW2QAKG@!Zd'EckcJcLB&JcLB& JcLB&JcLB&SH'-8=-Ki0gud\YinKYk*<l*9JcLB&JcLB&JcLB&JcLB&JcPcM$NgP;$RADiRB*X'^&>\P ]st5=ODm]7"9G+pPlQC9JcLB&JcLB&JcLB&`rHJL"9f&M4CWu2TrP3lXU(nrNI+ni)$Buk!.k3&!.k3& !.k3&!.k3&!2BN3!sAc5*'Rh`Q(FkQX/i8#W2>u@H<iQM"9J?!JcLB&JcLB&JcLB&JcLB&JcPQG%gOt+ O1*g*k2bU[Z$/_a"IfCV!.k3&!.k3&!.k3&!.k3g!!a/s@u6hY[(ZCP#J@LLWJFe1"o\PT!.k3&!.k3& !.k3&!.k3&!1s5r%P1FsMj^BDrN-I1Y,@kXE_.GX!W`?"!.k3&!.k3&!.k3&!.k3&!.k4I!!a#d;K@V[ TrS'l$`L)#S!7nc,6S&K!MKLY!.k3&!.k3&!.k3&!.k3d!!F--DPP\ZjosbfWe=gtdK"k!JcLB&JcLB& JcLB&JcMDC#S&@YDi($f\\A$W$bX$WYa05p(_-lV!W<"M!.k3&!.k3&!.k3&!.k3&!;Z[4$6VH7Ef$<d Xfee.Y-"_"Sq('&&dejH!ho[[!.k3&!.k3&!.k3&!.k3g!#Q%e5$N&_RAQp]WiE"tVP0K/>r33%#6Y+] !.k3&!.k3&!.k3&!.k3&!1X$"!uO4G_r9V9jPnb(UP(0$pAfdFJcLB&JcLB&JcLB&JcLB&q>_??+#H`1 N23qr]tV7r]tCnaTn-?"+;>1cU&^GYJcLB&JcLB&JcLB&JcN[g#7)(p5$<)lVu*S'Y,\CYCe#`d%gW9j !.k3&!.k3&!.k3&!.k3&!1s5r#T"pT>'H%'rhp:+Wi2qoUP`kZ,o7't"8r4O!.k3&!.k3&!.k3&!.k3& !;6C&"!(IFhVR5PjP.tqW^[Pi!0mP9!.k3&!.k3&!.k3&!5edA"qi(49mN57rk/cU^V.=n]W7-57PQ%u "5*[+!.k3&!.k3&!.k3&!.k3C!!`W9(aM7SLSXpO!3Z:&#d0PA>;moH%0QP/JcLB&JcLB&JcLB&JcLB& JcPWI(^(?e,sPpnTW"ceW2cepWiD>1>WO5M%0WC*PlQC9JcLB&JcLB&JcLB&^&SWK30r=ThW!VQgXaP^ ,QlNrJcLB&JcLB&JcLB&JcLB&T)])u#RqG"@?@_m^&,PLZ^l_V74f8Yr;_ELJcLB&JcLB&JcLB&JcLB& q>^m*"pkba:OA_8Xf\c)XU)))MJZ*H,7t'Q!0mP9!.k3&!.k3&!.k3&!5edB!sT&B,Z/iVWrAq*X/i8# W1\ra:cBU2"PEd,!.k3&!.k3&!.k3&!.k3=!"C-(g=tKDk2tacifcY?p],mGJcLB&JcLB&JcLB&JcLB& q>^m*"UPS^:jo%D\@]HP^C.NLQ@3++,74MS!<K%tPlQC9JcLB&JcLB&JcLB&_Z1#G"9o,N5A6%PWN?!! $`B;@BMC6$#6P#/!Sma-!.k3&!.k3&!.k3&!.k3C!"/l3#72A9BT&O\W2TWp$`&u9BMLB(#6P#/!J1<' !.k3&!.k3&!.k3&!.k4C!!Nd%QEeKbr8n*`?n;_X!0mP9!.k3&!.k3&!.k3&!5edE!WrW5)F/"rUoq); r4`WMYbRP1<A4md!s8S[!.k3&!.k3&!.k3&!.k3&!1s6!!WrQ0'J`[5OIW,Lr2g@,T94_:6mN*B!s8RU !.k3&!.k3&!.k3&!.k3&!;Z['!X&W2'J`a6O-u]Ar2U4%S<&2474&?E"9S\%!0mP9!.k3&!.k3&!.k3& !5/@9!Zk6`VpPA("Mfdl0F?;1JcLB&JcLB&JcLB&JcLB&T)]6"!WrT=0MutRTs)$)^C.]aZ)`t$4r">- !s*uRJcLB&JcLB&JcLB&JcLB&q>^m(!WrQ7,XGg`NLm0JXUD;1TU:(,0G"Ek!s5>"PlQC9JcLB&JcLB& JcLB&_Z1&F!X&W8-:;3dMjpUAWsbr(SX"M&0b=Nl"9RBZJcLB&JcLB&JcLB&JcLB&QiI6n,"R4$r8n10 YDd0@!rDtL!.k3&!.k3&!.k3&!.k3&!;QWo!=&rU4BZlkW4;c?$ba3b\YFRH*"3)V!i>s_!.k3&!.k3& !.k3&!.k3f!"&`-!XBSq7q-n3WVW_'XK%@q4;A,+"9RBZJcLB&JcLB&JcLB&JcLB&ScB)u!<NNE0M,`# P,A/X$`C#'ViGFS'aY'I!eLE(!.k3&!.k3&!.k3&!.k4A!!<HQ?EsFj"l7bM\PN^-!0mP9!.k3&!3Q;0 !<WE-#n7L`'+>'Hi;eH0JcLB&^AnKC(FqdVJ=X"F]`Ps`^AbeNX,UUE*Y\tah#N$,JcLB&JcLZ.#6Fu0 "9o/A&H`LL"9O;XJcLB&RfEZr&Kii$CPehcXT5O'XU2)3R<VOU'b:QPJcLB&JcLB&JcOm4$N^D5":#5D &J#0N!ic6P!.k3&!;6C0";)h79l#NVW2HSmX/MqrWg7j,-l3C""Ju0a!.k3&!.k3&!.k3&!.k3^!"BH& Ok\^Kio]4UgXC$]f)UC&JcLB&JcL]/#QY#3#n.Xt1dhF(,SC67!.k3&!1Nrt"V;\)6Z/!c\\,Vh^VBc] #I'\D;`Z9@#(ci,!.k3&!.k45!"8l1"9o,E*%Efr)[uqM!.k3&!.k4E!#PhH(*GG:H^Un:XKAV-XfSXs L1N_(*"W7M!0mP9!.k3&!3ZA2!<WH0#nn@/2CogY"Q9?4!.k3&!5ALB":Q%i2HkBlVlHbqX8]%'Wgn`S 74oVm"Pj'0!.k3&!.k3&!.k3&!.k3:!"K)TCrFWRhWEhSgtR]F$N'mU!.k3&!.k3&!9O7i!<if?'Ic@Q EaCpQ#-%ZT!.k3&!;6C0!soMU.p.@s[(3i_^V@Lr]sOSsF]^^J$)R]f!.k3&!.k3S!"8l2#7:t`1eD"I 0GjrO!.k3&!.k3c!"&f4$PFROClbBlY5>=+Ulg"37P5G\h#N$,JcLB&JcL]/#QY&5$4e7994%cr0c:+K !.k3&!1Nrt!s]5J,"HI/Tr4ohX/c/t#GI3(@7Mse#D)r-!.k3&!.k4-!!!5#!.k3&!.k4?!"KQ7Vn("* k2bLXhPXF!#,2*_!.k3&!.k3S!"8l4%2BpI?@SDr>;$?B!.k3&!.k3c!"/f0"U>c.EL<u;\\7pU#J%%4 OEFAM%,Co8!.k3&!.k3/!!iT.#nRh)9PK1_DFl)YL&cf*JcM8?$N^D5"V<FpK:\m=XSo7,Y,\(RHXK&\ #_E&.!.k3&!.k45!"8l2#nRn,:2,>u9-jkD!.k3&!.k4E!#Pb>"9fAo?@nZ?V5gSsWiE"oRuDZ%5p?W4 !0mP9!.k3&!2ol!%5njU!.k3&!.k3]!"T2fKVQ?:k2tacikU%9,R2s&JcLB&JcLB&MZ="`#7hXr7Vn'^ "-R:T%#+b6!.k3>!<*!($o)%AUTLo8r4`KL[&p'\ANLV/"Tni-L&cf*JcLB&JcOp5$j$S?&fET0Ga*VU .L<$SJcLB&JcPHD#lt)/#UW2_O.2sBXUD;-Ru_\i/eA-f!s5J&PlQC9JcLB&Y5et4"UYn]3*:EgHW;R& i;eH0JcLB&^&SK@!WiZT9lQ)ZTrIsj$`]nfNHA,Q&-N+<!oX-2!.k3&!.k3)!!33D>QH/QKE-T(JcM#8 ";XaQTZR,o#L9)b9cF-6!.k3&!.k3&!.k45!"8l5%i?N\ClP?VB/U0u!.k3&!.k4D!<*!(#pr/XM4L`X r4`WQ\[/E,G>0=o$O-^5!0mP9!.k3&!3ZA2!X/rE))bTAP^QL\#iPc8!.k3&!58F?!<E6+*&q&@Lmk@A XUD51Un!-J4W=b7"9[T_JcLB&JcLB&MZ="a"UYn]3*:Eg"+4*!$&/G3!.k3>!"&`-!XBc-=E9._VZ*S% X/i7uTUCFB59'b6#Qt6a!.k3&!.k3&!8mh[!ZtYp!iQ*N!.k3&!:Kmj!Z4"<[/T+kk2tC.Q?>(jU]?Y[ JcLB&JcMtS$ipVE(aDLfNMr%S2@SOEJcLB&JcNIa#lt&2)DOp"Ln_6R^C.`f\[A;j?o/l;$j>MhJcLB& JcLB&MZ="a"q)%]2Hb9i"+=,u#_i>2!.k3=!"&`-";E4G<H=+qY5PI-XKJS#PB'DJ!u;@P"GQo.!.k3& !.k45!"8o5$54=;>'Q3X<\"KV!.k3&!.k4C!#bk=";E4I=)j1mW2ckuX/N%qU6'@k.2EF#"KDHe!.k3& !.k3M!!EBG?7,g3!.k3&!.k3[!"K&H8t"]"jQ>U[cFp/[(Y\qA!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_ L&cf*JcM,;#6YS[01BlHYl)6@^:h4mYa9B"""G<&#)3,0!.k3&!.k45!"8o5$PXO<=aH?^<%80R!.k3& !.k4A!!rc9(*keDJ=j!IqQ1!pJmLAY((18F!0mP9!.k3&!3ZA2!X9&I*&q,IP'g:\$/kl9!.k3&!4r4J ":Q(m2dV!'W2Q_rX/MqrWgnTH3Zo1H"Q9?4!.k3&!.k3)!!36F?3)GUKE-T(JcLr6%g4G8io9%[k2G.N equ-c!.k3&!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!.k4A!!`T5&fN6'KrFs`r4`QJUP3#>.iAWo !NZ9d!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3_!"&f5%29pUDj@K,XS]++WK1sk1*@88!<M3\ JcLB&JcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3;!"/l6%29pVE0@6$W2TWp"/_&r:'EBs'F+X>L]E#, JcLB&JcO^/"9TcS-j$=IJcLB&JcP-;"VtFngYCZ`joVe_&u>Sn!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X !.k3&!.k3_!"/i4$kaXQFd]PD\\7pU#e?t%Hs]5g%KcV1jT'l4JcLB&JcL]/#Qb2<'H8u6HBnY^<%80. !.k3&!1*Zn!X&c<(-,cUTr4olr2g($R=]&V9f*gs!WiB'M?&5.JcLB&JcOp5$j$VA'HB/;H'<VV.g`3U JcLB&JcP?A$j$P<%i7<9JtAa7WiH#u$`0/?B21?+$3C80!NlEf!.k3&!.k3M!!EBH?ml*6!.k3&!.k3Y !!WWbO/g+OjSe3C^hb_6h#N$,JcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!1*Zn!<`W8'KBNTUTLo7 r4`?HZDNrnITn]E!s8Q)M?&5.JcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcP?A$j$P8#S/I^DigHb X02E'$a-7gJn[e+%g)n8!NlEf!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3&!.k3_!"8o3"UGVj;/hP_ Tr4jfWsbr"OFV%<.h;^a!WhB_JcLB&JcLB&K`D/V+CG3u!e^Q*!.k34!!O-7Eh150rT44*O]jF=%"eP3 !.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!.k4A!"8l0!sK#[9lZ8gY.24E^C.`bZDs:47N2I4!WfG( PlQC9JcLB&Y5et4"q)+a2d(HmIT.d&i;eH0JcLB&])W3>!WrQ1+$EnVNL[$HXUD51UR?a@2AH>s!WqH` JcLB&JcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3;!"8l0!sAlP5@/YoRAQq]WroB!T9]_6?T8c'!s/O] !.k3&!.k3&!8mh["!Cu"!iQ*N!.k3&!:'Ug"XHW_[,LuG"l$JJCbc3n!0mP9!.k3&!3ZA2!=05S,=ZR2 W0:mQ%,h2<!.k3&!4Mq6!us@+H'4u1^&>\R]tLtdWJ+A"$3gV7jT'l4JcLB&JcL]/#Qb2<'H8u6HBnY^ <%80.!.k3&!0[Bf!u3CZAUT];qlKq&Wi-/hDabWN"9\d`!.k3&!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW !.k3&!:Bh(";NO^Ap]T4VlHbtX/N%rV3Q!i*X;fN!j2Ng!.k3&!.k3M!!EBH?ml*6!.k3&!.k3W!"K;^ =.S1.jQ>U]e&8G#(>f+D!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLu7&-EUr6<nr,Y.VH]^;%@p ]X\9NP\r`0((CG)!.k3&!.k3&!9O7i!X9#H)`LoGQ@;d_#c[lV!.k3&!:Bgn!tQM28SEdKY,qQ'$*L;" Ip"ND&IATC!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!4Mq6!tQM295&pGWrAq*Wi2qtVON$< 1)UZ1"Q]W8!.k3&!.k3)!!36F?i_YWKE-T(JcLf2$Oen<d+mL:jPJY:_ZG<;",-`,!.k3&!.k45!"8l6 &/c]^DN:ZZBJp:!!.k3&!.k4=!#PbG*%O-`Ml+%t]tM1p]tM(cT7L6/.2WDp!0mP9!.k3&!3ZA2!X9#H )`LoGQ@;d_#iPc8!.k3&!4Mq6!XTSa/lQnVWr&n)XKJCXCe66$&dRLuJcLB&JcLB&MZ="a"q21c3a-fm "+4-"$&/G3!.k37!"]2<'d>>2FHE?!Wi2qrVlHa%To!SY0-Co5M?&5.JcLB&JcO^/"9TcS-j$=IJcLB& JcP$8%K[SQ^t.8sjPeqLd%*K7W;r1`JcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcLB&JcN7[(]ajO'd-1q S[Z5D]t_=r]tLqTPBU.n,nB#:JcLB&JcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k37!"8o4$4mt8AW!Ce XfS])XT5F-WgA0D7kbkhM?&5.JcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcP3=%0?\?&JmWCLnpuL W2Q`qW!B2aHt,`&*=AqLPlQC9JcLB&W;m&'+CHT!hZ/6.JcLB&YlG7?6*82Ygu@DRhV>PK-jS]2JcLB& JcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k37!"/f/!sJrdB9]^3]=n-W#e[C9Nce5S'*4!kJcLB&JcLB& jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&mJmXr!WrQ0-rb\kWi`A*rN-@.T8n5*5pd'BY5jgfJcLB&JcMtS $j$VA'HB/;H'<VV.gb/7JcLB&JcN7[$ipD4"9p8SI\3L:Wi5ls#caDRH!s)f%ftemJcLB&JcLB&K`D/V +CG3u!e^Q*!.k31!!WKSOg`Bdir/!Bd#(F<#)<21!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!.k4< !"/i1"9p;RI\3[I\\7sV$b`pJT8[MP+9huO!jVfk!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3Z !"&c0"9]f6BoACTWr/t,XJD8BG#gF8"9\f.kl?;8JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!0R<i !WrQ.+@U"$QCt+RrMp=+TpCOX=#Lit"9S^c!.k3&!.k3&!8mh["!Cu"!iQ*N!.k3&!9X=c$q5'"_qt@S "kokl65p!-!0mP9!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!4Dk8!<N?++@0RmR]3[-rP&`R\[/B. I8qg-$3gUs!.k3&!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&OoPgj!WrQ@1/`%EQ_aP]$`pA(RYkcH +peJW"-*A5!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!.k4<!"/i0!sBDs<,[DSTr@pj$`KnpQ\]<D ,7+VY"0qol!.k3&!.k3M!!EBH?ml*6!.k3&!.k3T!!NE=2Ir`?rT4:=^m8q*%-%>>!.k3&!.k3/!!iT2 &/c]^DN:XtP@ui_L&cf*JcLr6rW*9,'eW$hK:T6[rP&`R]XbMROD$Zj&./T$!.k3&!.k3&!9O7i!X9#H )`LoGQ@;d_#c[lV!.k3&!:9ao!<N<)&0j26DMasdqlL1)Vjr*5/J/?q"L8#m!.k3&!.k3S!"8o5$ks[B >'Z<Z<\"L8!.k3&!.k3Z!"/f/!Ws#[4&g*QS#ZFf$`L)&UmZL//eJKt"R,o<!.k3&!.k3)!!36F?i_YW KE-T(JcL]/"9K3"K\HCe#2[qKX`YfhM#`,-JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&JcP'9#QY>S 01'B5X1eDF$,+$_T6NjK((CJR!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k3&!4)Y2!=9Me1f\jh Y5GC/Y-"h+Mdn^^&IAU)!.k3&!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&NrTFd#o4gD=*^(2rMp=+ W2QVlM.J^a&IAT#!.k3&!.k3&!8mh["!Cu"!iQ*N!.k3&!9F1_![)4+rT4=FiniM%71$'rPlQC9JcLB& Y5et3#7hXr7;@dWO(C-Ui;eH0JcLB&Z2b4='I#/.I\4$\]tOBZ#empLN+G4))[ts2JcLB&JcLB&MZ="a "Ubq\2HG!`"*mco#_i>2!.k32!"0#B)'_L_Ml*YYXf`&6Xfee.Q?H.\+r(BD!.k3&!.k3&!9O7i!X/oE )E1`?O*FVQ#c[lV!.k3&!9jJ"#7h[t7;7UQWiDtqX/`+sWKVI(1*[M?Z2g-iJcLB&JcMbM"9KND+p-X% JcLB&JcMnQ%Lb\&cJ%+6k2bO\a^?%hjT'l4JcLB&JcL]/#QY/?(El+XL8"d/@584F!.k3&!0.$e"q24g 6>hsg[(3i_rP&TMYFC)Q7Oo.4!.k3&!.k3&!9O7i!X/oC(c532Nd"8H#c[lV!.k3&!9jIj":5VT1g,6r UoLTrXU))4Sqh,Y2]rU9!0mP9!.k3&!3ZA2!X/oC))P?4N-A,I#iPc8!.k3&!3uS@":5VU1g56nTr+ig X/`1uWg\TW;E?!4kl?;8JcLB&JcLK)!Wj-0!$-[lJcLB&M#[_^-??#td,##ijQ,=IHoM[p!.k3&!.k3& !9O7i!=')M+@'FhSqpZ,$E=)X!.k3&!9jIk!sT,D03Nk"Y-baQrP&ZP[&BCF@6GP1!OMil!.k3&!.k3S !"8l3$5"%/:i;,19-so&!.k3&!.k3V!"/l3#R_nJClOs]WiZ0$$*9qgKPjR='`e@$!.k3&!.k3&!/gg_ !<ifB(G\m+LBDNj-4#>+JcLB&NW9Fi":,>\8Sj<QTr+dgX8]+)Tp((G;(r^c!K[;5!.k3&!.k4.!!3ct (T.7b!.k3&!94%h&4h#9_qaD:jQ,'g?o8S#!0mP9!.k3&!3ZA2!<ruJ+$O%]RY+ft$K1u:!.k3&!3uS4 !<E9)*^t%3Up%;ArP&TN\[/?/Hqu!d!UKf<!.k3&!.k3/!!iT.#nRk+9kf:`DFl)YL&cf*JcLf2$NU;2 !u3^uI?:&!Xo,:*Whc&@B0I:6!KdA6!.k3&!.k45!"8l2#n[t.:2,>u9-jkD!.k3&!.k48!"/f/!s9>u >^VU$V5jKp#H+GlQAK6>*<#uH!0mP9!.k3&!2ol!%5njU!.k3&!.k3P!!NHP;LG\&rT4:>_j51,$g.MA !.k3&!.k3/!!iT/$P=408n`bXCdo]VL&cf*JcLZ.#8K'uHBY/1]`#SR]tCk]Wf1FD$jm1@!L!M8!.k3& !.k45!"8l2#RqCl4&g#u2]Dt$!.k3&!.k44!!j,c7qI+1TrtQsXUD;3UmZF'-jU%\!s,k2PlQC9JcLB& Y5et3":,GM-9P=F=?7H,i;eH0JcLB&XoK:M.7n-!O.NAMWiE+uWhuGTG>]gq#6Y,0mJqh=JcLB&JcLH( !<Nf4!eUK)!.k3+!!EWV;NK*0ioK1_hTiKoC`SH7JcLB&JcLB&jo>ej":#>H+YcDh7kY\_WW7VNJcLB& jT$,.-9tg]QE.R0^;%Fs]t:e[R<M7J(_6iP[fDZnJcLB&JcMtS$ipJ7#R_Is2FoeQ&d7.nJcLB&JcMqR (^h<=8S*F>Wi`D+Xf\\+WhG)T3uJY="Tn)lJcLB&JcLB&MZ="`"9f)?)(.@7"$._A"GQo.!.k3.!!`iP 1.u5/Q)=PZ%B?A,W2?/<@QYPB$3^Kp!.k3&!.k3&!.k3&!.k3&!9!nf#qTf.hVmJTiS)>ZO#70I!0mP9 !.k3&!3Q;0!sAf7&K<#L-Q*<pi;eH0JcLB&XoK:G(b%OPK;,lh]tV7r]tM(gUkWA?.2iTrmJqh=JcLB& JcLZ.#6P)3"q;:d,Qf###m5n^JcLB&M?!kd&g&`!DNC^rXT#=1Y-"e.WfV0r/KYZ5!g<V9!.k3&!.k44 !"/l3":#AN*@2a@#m71-JcLB&JcOm4#7(tc026>DV>dD&Wi2hqWhthr;D'(+#m.R9PlQC9JcLB&JcLB& JcLB&W;mA?9s<@/iT0"Sg<6j$(?baM!.k3&!.k3.!!`N*!WrT1$4I"D"p4m\!.k3&!/^a]"Ul(c5B*$t rk8<G$GO3dY*XE44XUjEP5p17JcLB&JcOm4$NU;1!sA`3#R:J7!ic6P!.k3&!9F1i":,MR0jKC.XK8P, XfhZ*#FpBU6SBDg"1J8q!.k3&!.k3R!"/f/!WrQ.#71V<"9RN^JcLB&JcMqR#QtGE(,B0ITrS*j!3?*t #ca;CA480n%g25"JcLB&JcLB&JcLB&JcLB&K`D/W24Y-0gtq&Qio/bFG;';_!.k3&!.k3&!.k3&!.k3& !9F1g!sT)B/6n%3\@K8crP&`RZ_NM";DoHt!W`>5!0mP9!.k3&!.k3&!.k3&!3Q;.!sAi9,"csFWN,fs $D``->sTqT"9JW*nGn.@JcLB&JcLB&JcLB&JcLZ.#6P)7$6r8eQ34"^Wi5ls$`K_XG@!Zf'a+R>!L<_; !.k3&!.k3&!.k3&!.k4.!!O9WZ,G5MrT47>Q;/J)ZN-6jJcLB&JcLB&JcLB&JcMqR$N^J:$6r/dR&[I% ^&>\S]st28NGhB9$3UG4!V-5B!.k3&!.k3&!.k3&!.k3.!!`Q."U>o,@"SQLTrP3lXUD(sMKi;c*!ZTK !WeVfJcLB&JcLB&JcLB&JcLB&jT#Yi"9f&L4CWo-Su/OdWskr'R##rj4<=_1!s/M8!0mP9!.k3&!.k3& !.k3&!2ol$"u9hP[bLcC"l?G'5op-o!.k3&!.k3&!.k3&!.k3&!/^a]!<WH/)*2)T".6!m]`#SR^:L\R UP2u/%L3.>!LEe<!.k3&!.k3&!.k3&!.k44!"/i1"9]Dj9Pf?GUTXNs$`g+oODdc>$3^P7!P8>s!.k3& !.k3&!.k3&!.k3R!"/i1"9]Dk:2GNFTW7sk%&g(tR>u2[-jg+\!s.rmJcLB&JcLB&JcLB&JcLB&K)bl_ "#=,FcMcl/iPqF2:_f&lJcLB&JcLB&JcLB&JcLB&jT#Yh!<N?7.Rn!#R]X-u^C.`e\?qZD5nj\3"9H+7 PlQC9JcLB&JcLB&JcLB&XoJh1!WiH3+?*27Kq#+?XUD53WhkAS1(OWo"9S,oJcLB&JcLB&JcLB&JcLB& M?!k^!WiH4+?EI(CkJ+QrMp@,Wi2egJmL8E#R(>4QN2U;JcLB&JcLB&JcLB&JcOX-"9K,mEl@q=#3=OZ [%0&W[/cHlJcLB&JcLB&JcLB&JcMeN#mq\-8SO*Y\%TNT^](nP]VU6Y,8C[n!qH>C!.k3&!.k3&!.k3& !.k3*!!<HA-TVH3Fc`N'XfhZ*$EU>3P&3K(&./RBQN2U;JcLB&JcLB&JcLB&JcOa0#7)(m4BHWcV#I;% WiE"rWiD.u6lZdG"Tl:9PlQC9JcLB&JcLB&JcLB&V>q)-)cEfpiSrqZhV?l4=:sm"JcLB&JcLB&JcLB& JcLB&L&_;\'I,C?:jJJ5]Y(ql^V9]\#HX),6n]Vm".'">!.k3&!.k3&!.k3&!.k40!!i`=)^mp\KV#@C XU)"sI9JKR((15V!0mP9!.k3&!.k3&!.k3&!3-#-"V2S$6"GS:WiE"rX8]%'WgA':2C0.H"S)PE!.k3& !.k3&!.k3&!.k3&!"T&822'0(gYq;RhV6e(-3KD2JcLB&JcLB&JcLB&JcLB&i;a\u$l'jDA;mLt\\5\k ^V7CpZCch`8hh1e])\)rJcLB&JcLB&JcLB&JcMeN(^(*U(+`=+Q`-peXf\b.XfS4SDcAeF'Emt,JcLB& JcLB&JcLB&JcLB&L&_;Y#nRmY/Q6eVV5C8jX8St%Sr%Dd4=1aFQN2U;JcLB&JcLB&JcLB&JcOO*%NAl\ _pdH(io/bLO$XT`[fDZnJcLB&JcLB&JcLB&JcMeN$NgP=$mSPqT<br;^&>\O^:1/4KkNk!#4_bG!.k3& !.k3&!.k3&!.k3*!!<<+"pbDN5%feIVlTcu$*LD.R"fNY2&c[b!.k3&!.k3&!.k3&!.k3&!9!np!sAi8 )F.qlStr9_X/`1uW2,]3E)nk:"M4Z!!.k3&!.k3&!.k3&!.k3H!"TH+O0-FVk2bU_iN6fQ('<q)JcLB& JcLB&JcLB&JcLB&K`M)Q#8'(6PH(js]_oMO]!JB-J6=K4!W`=j!.k3&!.k3&!.k3&!.k3&!8mh`!<E62 /m*RjT;h^i$EKqgM/,U+#Qb&.^&XDuJcLB&JcLB&JcLB&JcMbM$3://%5:n3Q(4_Or2U1&TTt:J8L+QC !WhroJcLB&JcLB&JcLB&JcLB&JcH#U!!4Q]MQtb1joi\fA3UTh!.k3&!.k3&!.k3&!.k3&!8mkV!='&d ;L+M%Yds\H$bWsQWK:p^)%6cS!l"`#!.k3&!.k3&!.k3&!.k3M!<*!(#pV`GIup;&r2g@0Vk9<&=>CQr "p>#$!.k3&!.k3&!.k3&!.k3&!/1FP!=9&X6tCb,S>WBeri6F,Un!]r=>U]u"p>!s!.k3&!.k3&!.k3& !.k3&!87DW#V&Z+`8p"Yjos,6LL_Y3\H%lpJcLB&JcLB&JcLB&JcM_L#lt&6,!B+RPGl"h^C.`d\?h`S ;^iLo#m9l$JcLB&JcLB&JcLB&JcLB&KE2#Q#6u,"87I"4W;E\(X/MeNBL<jR$O-^&!.k3&!.k3&!.k3& !.k3&!8db_!<EHD0M,c%P,8/X%BHP0Vkp&BBLO$U$jQmL!0mP9!.k3&!.k3&!.k3&!29Gq#:Ei]ro==H k1dnZP<fWH!.k3&!.k3&!.k3&!.k3&!.k1U"r/LH<ILFEr4`WQ]tCtXNFt=!(_$V;!.k3&!.k3&!.k3& !.k3&!8RV]":uP)6thFQY-.])$*L@sGZ6:7&d\]U!0mP9!.k3&!.k3&!.k3&!2]`5":uV,7;.IMW2Q_s X/N%uW0MU-0-(]4"SMhI!.k3&!.k3&!.k3&!.k3&!;lg,$pL*=ioK7ahV6DtBcdDB!.k3&!.k3&!.k3& !.k3&!8RV]!t,ea1M2fS]tX?X#IBnE:,=+-"ht&&!.k3&!.k3&!.k3&!.k3J!"&f6%i$KkI@mXDY5>=+ UkiME-lWTup&K[EJcLB&JcLB&JcLB&JcLBY;C(FW70S,T>dWr/n&Tn[,D-l`a#RfJ$?JcLB&JcLB& JcLB&JcOF'"p--'hVmJTr8n'K3XN@tPlQC9JcLB&JcLB&JcLB&V>pu+#S%Rt;h1UM\\,WR^B_6ENGq`R +:A)Kq#H!HJcLB&JcLB&JcLB&JcLB&$3LJ>&0=2SO/Aq[qlL4'P'C4t.i&?k!WekmJcLB&JcLB&JcLB& JcLB&h#Ifb"ptn`7;ImWVQ-TmWsYYaG[3Zf(C(!C!Q"i%!.k3&!.k3&!.k3&!.k3D!!Nm-W4gL2r8n*` =<@\:!.k3&!.k3&!.k3&!.k3&!.k1Y!X/o>*COh/WN`nFr4`WMYFgeo:+QkW!W`=o!.k3&!.k3&!.k3& !.k3&!8RV_!X&`7(,]9DQ_14Zr2g@,Sr7i!4sC=9!WiD?!0mP9!.k3&!.k3&!.k3&!2]`(!X&`7(,fBD Q(4\Nr2U4%RYc5p5U-U<!WiE!!.k3&!.k3&!.k3&!.k3&!.k4J!!NHOA;@A8r8n-tHpo([QiM^<JcLB& JcLB&JcLB&JcOU,$NU>5"qi[oI@6t;\bs2M]X4i;N+P*a"9S]+_Z5r%JcLB&JcLB&JcLB&JcMYJ$N^D5 ":Z_KBS;SBWr/t,Y,%SLG>g('"9S]+q>c*IJcLB&JcLB&JcLB&JcLB&$N^D5":ZbNBS)>:Vu3S'WhGiA G>p1*"9S]+T)aHCJcLB&JcLB&JcLB&JcO@%":R.kN5YYV"jX#i;B5hP!0mP9!.k3&!.k3&!.k3&!2KT$ !<EHN6tV.AWjquA$ba3`[%_k;(^1!D!VueJ!.k3&!.k3&!.k3&!.k3&!"/c,!<EBD2,eFIRAp+d$`pM2 UlK"H&d/:=!hTIE!.k3&!.k3&!.k3&!.k4*!!rZ,"roO#DhF@Qr2U4(Wi)PLAigY/"9S_C!0mP9!.k3& !.k3&!.k3&!1s5o!YRD-Z2E_fgrm7'8db1jJcLB&JcLB&M?*SU!s8W/"p5#2!s+,VJcLB&JcP`L(^1g4 9koKXZG!rc^V@Iq]=Fr"?SN?.$3Qn#JcLB&JcLB&jT,;]rrW3&rWE9)!s,D%JcLB&JcOI((^(O#4]ZT^ UTCT"Y-"h-Xf@e39dUG[#6VjDPlQC9JcLB&XoJS*!<N<)qud$&!T=$1!.k3&!29Gu";E4J=)j+irMU.* W2choQ#obJ&I\mIq>c*IJcLB&JcLB&JcLB&JcLB&q#Cm+(IjPBhVmJVhV-)bB,d6=JcLB&JcLB&jT#Yh !WrN.#Rh1O#Qt1.!.k3&!.k4(!!i]?,;Vr4PH;Fr]aVZh]tD"^QZc(X+qk0u!0mP9!.k3&!3Q;0!<N?* "9o,=#R1D5i;eH0JcLB&U&YN'%2gQU?@J?GXK;?%#d0eO?p,hS%KuV.JcLB&JcLB&M?!k^!WrN-"pkV= #mLM6L&cf*JcLB&r;[Z;%2pWW?[S3?Wi2krW2Q_rRt5$5-5d<sT)aHCJcLB&JcLB&JcLB&JcO:#%L+># d+[:3jPJYBbCVGQ^&XDuJcLB&JcMqR$NU>3"UPVN(_[;^!oX-2!.k3&!29H&!t#\_/mF%)\\,Vh^VBc] #IL7_C.pE)$MjaS!.k3&!.k3.!!`Q-!sAf7%2&aQ#m:<a!.k3&!.k4L!#PeC%M^3[Diq'&XKAV-XfSY# O*"Db-kuuZ!.k3&!.k3&!9F1g!WrQ.#71nS%g`@?WW7VNJcLB&f`2E_#S.^s95flgWiDtsrhp+&ToF.q 4t%3Q_Z5r%JcLB&JcLB&JcLB&JcM;@%MDaYbM(e5iniJFUJ;^/p&K[EJcLB&JcLZ.#6Fu2"q2.`,6Jnu $3Q"_JcLB&JcP`L$NU>6$55aIS[Z/B^&5VM\ZM?TBh'Q\T)aHCJcLB&JcOm4$N^D5":,JO)&3Sc"0)?Q !.k3&!8.>Z!WrQ1%Q%LJVlHotXU))0Rtko^3$/IE!0mP9!.k3&!3Q;0!WrQ.#nI^g'b:NOi;eH0JcLB& U&Z#3"9\r?1gc!5V5gJoX/`1uV3lpS=#qH1q>c*IJcLB&JcLB&JcLB&JcLB&pAb^.40?<DgZ7MXjPmsq 3"c:_!.k3&!.k3&!9O7i!<WK2$Pam?4u"5n"KDHR!.k3&!8.>[!<N?+$Sl+JWN`hDr4`WPZ_s1@>rNN& !s8SE!0mP9!.k3&!3ZA2!<WH/#S7k!0II_I"Q9?4!.k3&!29H%!<N?+#U`AiQ_11YY5PI1Y+q56CJ-/i "9S`-rW%NMJcLB&JcL]/#QY#1"pbeZ-8>TM)%?_'!.k3&!.k4L!"8l0!sAlX:iqtmUT19kWsbr#P(IID /.i!f!s54tJcLB&JcLB&JcLB&JcLB&dJsFiA;@2.ir/!BbEH0d&&811!.k3&!.k3S!"8l2#Rh:i2G@UW 1E-PW!.k3&!.k3F!"8l/!s8fW9Q?5iY.24E^C.`bYc!b,8L"WL"U"`(JcLB&JcLB&MZ="`"9o,@)_4$I "$\1K"GQo.!.k3&!;um*!<N?*"s,m4I?'o!r2g@.W1K6(?90#2"p>%'!.k3&!.k3&!9O7i!<`T5%3-o_ ;F)]G"KDHR!.k3&!8.>\!<N?*"s6$8H]4DjW;Wb)Whl2JIU>2W#mLM7`rMA)JcLB&JcLB&JcLB&JcM8? "U-5FH*lQ/josJBKNp#3p],mGJcLB&JcL]/#QY):&f<>tC4cV,81"Us!.k3&!.k4K!"/f.!X0T'<HF1r Zb?=P$ba0^Z_W:[0G=m%"/>jJ!.k3&!.k45!"8l2#RqCn4]ZH(3?/7'!.k3&!.k4'!"&`.!X'8h6sb2$ V#7>&XKAItO`*f:%LE=A`rMA)JcLB&JcMtS$ipJ:%21'Q=)M5(*X:R'JcLB&JcMJE$NU;1";WOW?[7^+ W;Wb)W2ZYeO)IZ<%g`IDrW%NMJcLB&JcLH(!<Nl6"+pT*!.k3&!;-<p"s?g3hYlR?grZge<u%8+JcLB& JcLB&jo>ej#7_Ll5\,S>M-_nDWW7VNJcLB&f)Q-Y!<Wr\3)=abYeC"M$bj<f]X!i@4WP4F"igV.!.k3& !.k3S!"8l3$5"%/;/_>49I:#'!.k3&!.k3D!!rZ,!t?2#5%9,9qQ1(*Y+^DL0,>'("TACQ!.k3&!.k3/ !!iT/$5"(0;f@HoE_[qeL&cf*JcLB&qZ$s(!<WcO/O3fsS#?4c$`Ku'Wh+`E0GY0*"JYsK!.k3&!.k4. !!3d!(oI@c!.k3&!71]J#;LhdrT4=Ch:p;;/d&rjPlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB& ScB#t$lC<J@#:enrk89F#emgCJ5n<K'aaj>JcLB&JcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k3&!;QU# !XKDY.Sb#KXS]++Y-"^aCIBNh&-em0JcLB&JcLB&jo>ek"q21c3a-fmHr_a(WW7VNJcLB&eGosY#nn@/ :i__tWi)fpWX5W&VMo:Z-QE[&`rMA)JcLB&JcMbM"9TcS-j&9+JcLB&JcM/<"W1LbgYL`cj94K$Zq:l) !.k3&!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB&JcPTH$NUME)C/('S$KQ9^&5VO\Z1j9;`c35!<K"s JcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&eGpKh"q)+a5%B>BWiW;)Xf\b/WgS9C6S9;a!<L:B PlQC9JcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB&ScB]2"q21c5\,P?VPpMnX/`+sVNlO;75#Ve!<E1P !.k3&!.k3)!!36F?i_YWKE-T(JcLB&o)K7+2j(JfgZ%AVio7jg-O-1CJcLB&JcLB&jo>ej#S7ju7W+6b P@ui_WW7VNJcLB&eGp!Y"UY_R4(XALYdV0WrP&TMYbI2&;_f'd!QkD-!.k3&!.k3S!"8o5$PXO==aHB_ <%814!.k3&!.k3B!"&`0#7:to;Ke@uVu*S$Y+Lc#@RDLRrW.TNJcLB&JcL]/#Qb2='HB/;H'8>X<\"K2 !.k3&!.k4H!"Ar3#7:tp<-=CpUT(2mrMg'lNHeo$-kH:XV>u2JJcLB&JcO^/"9TcS-j$=IJcLB&JcO*s #6GiPMQ4eTk5OEEcAG=?#K-V-!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3&!.k3A!"/i1"U6APH(1b; \\7sV#JIXNUQ]U`)u]ki!.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcLB&p](X&!sA`K5\5_:TW7pl $EU1tOaUCi'`nC:V>u2JJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcO:#!!<- Z?FKTht(VuE_) WiDnaO*k.i'`nC:aoI\,JcLB&JcMbM"9TcS-j&9+JcLB&JcM,;"UR.rN4n'Hjp'o$YC':s"8i.N!.k3& !.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLB&oDf+95@oS=WjKJ<^C.`e[]lQZ<@8"T!s5A#JcLB&JcLB& jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&ci=7b0iDtGRAB_^$EU.tODRB*"U"o/b5de-JcLB&JcMtS$j$VA 'HB/;H'<VV.gb/7JcLB&JcM2="r/mmE.jLMri-C-X/DnkS<%JT*X)ZL!!7cQJcLB&JcLK)!WsQQ!@S#& !.k3&!.k4A!"T,H3+o#@jQ,Ich8cOQ;@oN%JcLB&JcLB&jo>ej#S7ju7W+6bP@ui_WW7VNJcLB&ci=jr /kTi3SZf]>^;%Fr]t(PQOD6rt&e"re!0mP9!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k3&!1<g&%jO/9 Di('gXf\b.Xfe\$RsS0i'Fb<J"G6]+!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcPEC#7i(B=)Wk` WrAq*Wi2qoU6p4-0bb-)"K)6O!.k3&!.k4/!!EBH?ml)T!.k3&!.k3q!"T,G5(Cl7iSrqTe%ho&+p,aa PlQC9JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&R/e!3+>H?%NMsD$]tV7q]tCn^SU=El,8C1cK)gK' JcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k3&!;$6s#o4mI=Ep.3XSf1,Y,\:SB1+'c&-o*5JcLB&JcLB& jo>ek"q21c3a-fmHr_a(WW7VNJcLB&ci=:W(FM7GGa#')W!o])W2cbgLM'%&*"W@u!0mP9!.k3&!3#r$ "!Cu"!oF!0!.k3&!0mNo!Ztgggtq#NiS2_tQ9G`U!.k3&!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB& JcPEC#7(n\-Vf&_\Gj2A^](nO\YtL*8M_M!VZ;;KJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcO-t #mLhR*'S"oWi`B"XTtkkGZd'U(^\@cPlQC9JcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB&R/e!,%2BpL B8WRdW2Q_rW2HSkP'C.m-lE!kK)gK'JcLB&K`D/V+CG3u!e^Q*!.k3&!:Kmt$q@VYgtq,QhVHr"?699E !.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!71]R!sT,D2JSPa]=knlrP&TNYapDX7k>AR!R:\1 !.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3=!!r`1#R`+_J>93KqlL((T87>^3$J>5rW.`RJcLB& JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!.k4C!"/o4#RW(`J"Wa?W2TZq#HF8JDH&YA&,lU0!.k3&!.k3& !8mh["!Cu"!iQ*N!.k3&!6Y?H!\BPUe(`j[jojCi3tVP8!0mP9!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2< !.k3&!1<fp!sJr<.p.CuYdD!TrP&QM[&B=B?p=c9"Tni-LB)o+JcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2 !.k3&!;$6u!sAf6+@^4/T;8ObXU:khJo"1:('F^A!il<Q!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3& !.k3t!"/l3"pcDCClOpXVl0Ko$`]n`J8A%;(BajC!m^k3!.k3&!.k3M!!EBH?ml*6!.k3&!.k37!!Np/ Ju?WErT4==TO';`!!%TNJcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!.k4C!"/i1"U6,=CQ4sf[CuOR %)'3UW1%s..1$1]!s,J'JcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&ci=FT!sA`D2HY3^R\m1a XUD/$Q%`^5*sMiN!s-aKPlQC9JcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB&R/d3grWEHD2ct9\Q_LMY Ws5K"S<AM963SJ:"9\f-L]E#,JcLB&K`D/V+CG3u!e^Q*!.k3&!:Bgj!ZjdLW8%:5"l6_H?8`+d!.k3& !.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!71]R!<N?*(,Aa,N1mJgrP&cS]XbDNNFXpU$3gS5ciB=2 JcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcM2=$NU;2!tcnH?$D:#Y5GC*Y,\=eGYnVo#mUS8!Jg`- !.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcPEC$NU;2!tcqK??_<tWr8t,W2cbhQZuFZ#mUS9!NZ9Q !.k3&!.k4/!!EBH?ml)T!.k3&!.k3m!!EHG8;GRjjosVg\Xd[]aT.S+JcLB&JcMtS$ipVF)'_UgNi8.T 2@SOEJcLB&JcM&9#7Vn>;K\2(])9>B]`Pa:G6L>I%LN@?L]E#,JcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2 !.k3&!:Tsn#obK_@"+KDqQ1(*Wf(=C%LNFD!NZ9Q!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!.k3p !#Q"^0195rQ)CX^X/i8!W2c_O@Q"`(#6Y(S!0mP9!.k3&!3#r$"!Cu"!oF!0!.k3&!0I6k"t43*jQ,Ic jPJYF]g;sU!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLB&n,O:4)(IdTK;#Zb]tM1q^:h4lVhe\9 ,o6sjX8mhPJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcO!p#6tqc02$/@V#IIrY5PI.XH[a"-lWa( !mgq4!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3&!.k39!"oPO+>?N-MP7&MVl6VoVl6PWE<T)c*>&SZ L]E#,JcLB&K`D/V+CG3u!e^Q*!.k3&!:'Uo&OrPHgYLlMiSE8/>Sj7;JcLB&JcLB&jo>ej#S7ju7W+6b P@ui_WW7VNJcLB&bQ&(V&/uudEL!];]=knm^](nOY*XE95:@-HciB=2JcLB&JcMtS$j$V@'H8u6HBs"Z .L=u5JcLB&JcM&9&d/RW*&_)QSuSooXf\b.Xfe1G"_C.X*Xr4-!.k3&!.k3/!!iW1$ks[B>'Z;6Hr_a( L&cf*JcLB&n,O:.$l'gC?@J?@WN)nsW2QVoR=Ss?1*7#/X8mhPJcLB&JcO^/"9TcS-j$=IJcLB&JcNgk %Kn;-\]NR^jPo%Pds!MQb5de-JcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcLB&JcM&9$NgYC&hdLDVR3kG ^&GbK^:gkJ"d4.83#_sU!.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcLB&n,Ndt"pk_a8oKoiWil?' $EgM5Ulg(:8LtSYX8mhPJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcO!p(^($L%jaqhOJ/POVlQhr W2cMOHY,o&'a)e_PlQC9JcLB&W;m&'+CHT!hZ/6.JcLB&NrTS(>+N%Dh<*eXiS0Yt!@A,+!.k3&!.k3/ !!iT2&/c]^DN:XtP@ui_L&cf*JcLB&n,Ngs!<N?B7sCN-[(3mK^BhN`YbRP.9I'_A!.k3&!.k3&!9O7i !X9#H)`LoGQ@;d_#c[lV!.k3&!6bEM!<N<)'f]ZZStrC`XTtkuOb-t')["FePlQC9JcLB&Y5et4"q21c 3a-fmHr_a(i;eH0JcLB&PlM0m!WiH=3b*r6Tr+deWrf5tRg"k'@Qkb7L]E#,JcLB&K`D/V+CG3u!e^Q* !.k3&!9sOf#<mO._qY.P"l?eA<%nNU!.k3&!.k3&!9O7i!=')M+@'FhSqp]-$E=)X!.k3&!6YBA!=';t @"k/NZb67O%)0?\Y+p_Y1_0iq!s-mOPlQC9JcLB&Y5et3"UYhW1/MkFE_Iebi;eH0JcLB&PQ:[`#7i=[ DhsaUY5GC&XJ?/mO`4#E$O-_9!K7#1!.k3&!/gg_!<ifB(G\m+LBDNk-4#>+JcLB&JcP6>rW*36/5U8> Q(e2W%]cY/W1fW?E)%hh"p>#/YQ07TJcLB&JcO[.!YR^6VZ;;KJcLB&`;gA_4(Oc)jQ,IciQ%U8<#3^Y PlQC9JcLB&Y5et3"q21c2ct9cH;Z7#i;eH0JcLB&PQ:[`#7`1QBS2eV\bs2C]t"HVYa0<"*to%e!fR,2 !.k3&!/gg_!<`Z='e;a_HNRhF+:!W$JcLB&JcP6>rW*93+#m5;L7>3GriHU3Y,\:iJR1;O%L<1=YQ07T JcLB&JcOp5$ipJ;%i$Wc@X;WS+pY+JJcLB&JcNsorW*iC+?EP@KUAX8WiE+uWhuJZJ6t>R%g`@?e,Ya6 JcLB&JcM_L!XBtXh>i--JcLB&NW9Fg&iXjKioK1_imYRCTRnd#L&cf*JcLB&MZ="`"UbnY0MH24")^UU #_i>2!.k3&!:9am!=Bf#7V.FP\A%pV$ba6b\>+[\0H_)<"0_cW!.k3&!.k45!"8l2#Rq@k4B66$3#i.& !.k3&!.k3m!"&`3'dP\8Efd6%Y5YO2XKJV(O)@N7((^`Re,Ya6JcLB&JcMtS$ipJ:%1spN=);&$*X:R' JcLB&JcLr6$3:DI-9+tFO/8eRri-!tWX5T#NG_B9(D$iSMu\G0JcLB&KE)#S&-)fb!.k3&!.k47!!NE@ ;Qo'=ro=7<e&Jgk&ukq`!.k3&!.k45!"8l3$4[b!6!A864s1'0!.k3&!.k3l!!i`=)C@jnS$]p-^C%]g ]rmQ;67j5h"4R=9!.k3&!.k3S!"8l2#7:t`1.Y\D0GXfM!.k3&!.k35!"&i:'HAu:L8:rSY5PI/Xf\1D =u7H=$Nl=fJcLB&JcL]/#QY&5$4e798R;Kn0c'tI!.k3&!.k4;!!`W6'HT/>KVACD%B?J/W2QV_Hs8EP (CC;L!.k3&!.k3&!8[\U"f;9O!.k3&!5edH"ui46io9%]jPetOGpid@!0mP9!.k3&!3ZA2!<WQ7%j3Sp =@On["lTH5!.k3&!0I6h!t#SU0jos@\\,VhrkAcS^U'Pb?q)ac#6"Xa!.k3&!.k3/!!iT-"UGJO-8e6p 2^8q<L&cf*JcLB&li7@p#7D+k:3N#)Y,qN&$D`St:,X=0"9JT)ZN,RWJcLB&JcOp5$ipJ7#RV@p2FfeR '*P<8JcLB&JcNjl$Np\C&LUCtQ)1L\W;N\'TS[P_3$].?!W`>R!0mP9!.k3&!.k3&!.k3&!/gg\)em+2 g>;hk"Qnj465#%RJcLB&JcL]/#QY#2#7;.g/NNte*tSO/!.k3&!.k4;!"/l5$P4U[GakkC\\7pU$b34( Jn.4o$3L>1!OMiY!.k3&!.k45!"8l1"9f#@(aCUX((15E!.k3&!.k3l!"/l3#R_S8@u$YPWiZ-#$`KJG D,E,/#6P#/!S@C;!.k3&!.k3S!"8l1"9f&A)'^a[(CUH*!.k3&!.k35!"/l3#Rh_=AV?MGVQ0Wr%BHP+ Q%EgN2B2r(!WiCa!.k3&!.k3&!.k3&!.k3&!9O7b#rm4$^"`JI"0Z>m&?Gk`!.k3&!.k44!"/i1"9o5G (EXM+#m71-JcLB&JcNjl$N^D7#oPp<LnC]S]_oMP\[&0)Ip"H6!s8T*fDq0:JcLB&JcMqR$N^D5":,GK ().,\"5s63!.k3&!0I6h!WrQ0'JNF*Mj^EEriHX3XfA.^LhT@)#m182!K[;5!.k3&!/^a]!WrQ.#Rq@^ !u).K",6f-!.k3&!:0[n!X&W2'JWR,M3aj8r2U4'T9G"D8L=`H!s/M1!.k3&!.k3&!.k3&!.k3&!5\^> !Z+:AS]grn"N6F13t9R;PlQC9JcLB&XoSG%#Qb)3"pY>8!s.?\JcLB&JcLo5$NU80!tHnYEK-To\c0>Q ^V@Im['5m84V7i"!s+J`JcLB&JcLZ.#6=i,!WrQ."Tnl1!s+,VJcLB&JcP-;$NU;1!t$8:?$M:!Wr/t, XK&(fJm'f:"9S`,ZiG[XJcLB&JcOm4$NU80!WrQ."U"r1!NH-O!.k3&!6>-J!<N<)$6qfBG_qldr2U4* V4jB/>;-Kh"9S\W!0mP9!.k3&!.k3&!.k3&!/^aZ"Wp0\_uAd'k2tC5UP(<'M?&5.JcLB&JcLB&JcLB& JcP!7#mqh<=a,t)[_9ES^C.`f]""Pd;'QV["p2.3JcLB&JcLB&JcLB&JcLB&_uL,L(bS<fH]tA0XfhW) $*1(fCHraF#Qt4]!0mP9!.k3&!.k3&!.k3&!0$s`#8o3e@X=-2rhp:+X/DtqVN5LZ)@QlS!g!D6!.k3& !.k3&!.k3&!.k43!"K5Z>,pH<ioK7Xf#G-r&$>na!.k3&!.k3&!.k3&!.k3h!"9&I.6h!aS$9Q=]tV8\ ]a26MNbL[*)@co&!0mP9!.k3&!.k3&!.k3&!0$s`";)_188*dNriQ.$$*L@tH;uX?'FFu)!.k3&!.k3& !.k3&!.k3&!9aD"";)b38SEdIWiDtqX/N%uW0V^10cq):"LJ/\!.k3&!.k3&!.k3&!.k3c!"KDsMUpP< iTB"Oe&Q8I!n..7!.k3&!.k3&!.k3&!.k31!"&i<)(%L[NiTb(]`Pm^^AbeNYa^,I5q<`UO8sk4JcLB& JcLB&JcLB&JcP!7#m:PK*%t9;R&dCeXU)##LhTI:+;"a`!.k3&!.k3&!.k3&!.k3&!5njG":5b`0NNIa VlHbqX8]%'WgnfX9f+%+"P<^>!.k3&!.k3&!.k3&!.k3,!!NEHBu\NS#i=_&hV6bA3XpuIJcLB&JcLB& JcLB&JcLB&kPttl"q(te:k,7M\\5]U^BqWf[\o=6>Ws>=ZiG[XJcLB&JcLB&JcLB&JcN^h$3C>9$Q20C OK,=`riHO1Xf\LcIUbr')$edoPlQC9JcLB&JcLB&JcLB&N;s:e":,DS6"u@VVlBfrX/c/t#G[H0AP4`q #ESq;!.k3&!.k3&!.k3&!.k41!"KH7[)CGLk2bO\hPsg/$*XD]!.k3&!.k3&!.k3&!.k3h!"/f/!sK<# DjR]8\\7pU$b<L9OEOJR%Kcb5!Sd[?!.k3&!.k3&!.k3&!.k31!"&`.!sB&d>(WBBWW9-uXUD/$NdG/! ,74MS!WeMcJcLB&JcLB&JcLB&JcLB&kPttk!X&W80O''sTr"deWsbeoN-\r",ROVT!Wfe2JcLB&JcLB& JcLB&JcLB&^&S<=0S6(8gAL(9_h(K+#1W^=!.k3&!.k3&!.k3&!.k31!"&`-!s8rc=aup>Z2hH5^C.]] XJ1Vc58ab3!s4\eJcLB&JcLB&JcLB&JcLB&kPttk!WrN2,Y)R)QD:JXXUD;-RZ;Mi0bafp!s5t4JcLB& JcLB&JcLB&JcLB&_uL/G!WrQ3-:qp+PFncNWsbr$Q]-#d1)'rr"9R?YPlQC9JcLB&JcLB&JcLB&L&_;b 3ae'M`;Ja$cCf,K)Zl$"JcLB&JcLB&JcLB&JcLB&kPttk!<N?1,XZ'lQ`7Lm^C.`c['-$G:F6V]"p;@8 JcLB&JcLB&JcLB&JcLB&_uL/G!WiH/)`1B,JsWG6XUD51Un3BR4raq9"9[EZPlQC9JcLB&JcLB&JcLB& N;s:d!WiH/*&^]1JX$53r2U4*V4jB5Aj@CG#m:?p!.k3&!.k3&!.k3&!.k3&!8mhZ%l%Uur8n1;^n?0= $*jP_!.k3&!.k3&!.k3&!.k3g!<*!("rJp\?\=uWr4`WQ]tCnUN*n@W&IJWq!0mP9!.k3&!.k3&!.k3& !/pma!<E6)&gK;/D2SCiqlL4,Y,[n5:+$Y`#6U1jJcLB&JcLB&JcLB&JcLB&k5Yhi!<NB;,<&A8M4jdI $`L)*VNu@$-PHpp"LnG`!.k3&!.k3&!.k3&!.k3_!!3a!QMfkKhV65kC`Cq*PlQC9JcLB&JcLB&JcLB& M#[_^%NR&cDNb1*]tM/X^BhQ\Rr^tF)@m"9!.k3&!.k3&!.k3&!.k3&!9=+b!t#ed10K'tqQ1(,XegbY 2&m;<"LnG`!.k3&!.k3&!.k3&!.k3d!!`W6(*YS=I%(&5%B?J0Wi2kiKO6VY'FFuu!0mP9!.k3&!.k3& !.k3&!/(=Q""4S'hVR5Pk2taaiLMn3NrXb3JcLB&JcLB&JcLB&JcOj3$NgbN+"pfMUU[kI^&5VN\>4sn 7PGeh!P&2^!.k3&!.k3&!.k3&!.k3d!"/l7%i-E]D3(]sY,qT($*L4gE`4kA'aFcq!0mP9!.k3&!.k3& !.k3&!/U[[!sfDR,tVteNM`VRW2cnuWi2bTE`>"F'aFc)!.k3&!.k3&!.k3&!.k3&!8[\c&Pf^Od+m^E jQ,=(;A]JB!.k3&!.k3&!.k3&!.k3&!5JRB!X9&G+%C78YHtdQr4`QKXdarV7k"oK!T!gA!.k3&!.k3& !.k3&!.k3-!!WK-#RqP.>m5bMUoLT#rN-C+Rtkl\3$/J.!L<_;!.k3&!.k3&!.k3&!.k43!"Au4#nIh5 ?@J?:VlH\rri-:%R"T?X3Znb1!P/8_!.k3&!.k3&!.k3&!.k3^!!`ZXI$qOoio^7$"N,7>&d$_dPlQC9 JcLB&JcLB&JcLB&M#[_\!sJrA1L10<UTCi6^AYeO]X4]0KjZhQrW/>cJcLB&JcLB&JcLB&JcLB&j8]Pg !sAf9-qeK>R\d(_XTu#*R>GiW.h;OZ])[E_JcLB&JcLB&JcLB&JcNRd$ipG5"q2nSDiL*WVl9Tq#canu Q%s9S/._^\hZ/oAJcLB&JcLB&JcLB&JcLB&"VORLS]9XfjoshkSS(,$OT9t5JcLB&JcLB&JcLB&JcO^/ #QuDEEKm3$\@qjU$ba*XYF]r-)$9p@!PADa!.k3&!.k3&!.k3&!.k3`!!`WG3aI5rSuV[i$EBnnM./CX !s/N)huK#BJcLB&JcLB&JcLB&JcLK)!X'K*"^ZY;R\m%^Wsbl'TppgI3YVYt!WeYgJcLB&JcLB&JcLB& JcLB&h#IT^.SY<!hYlR?gV]e956nUsJcLB&JcLB&JcLB&JcLB&]Dr6?)`LlCO/0+q^AbkT]tCk^VM/8. '+>-KhuK#BJcLB&JcLB&JcLB&JcLK)!Ws/f#=`0JOJK"\Y5YO1Y,\=^Db;8b#mLL!!.k3&!.k3&!.k3& !.k3&!8mh^";NIX@sF'-rhp:+X/DtpToa4f,nC:d"M=_d!.k3&!.k3&!.k3&!.k3\!"K5X;O6(rioK7X bI3sF(>8bR!.k3&!.k3&!.k3&!.k3)!!368-NlS2GaGQ3]a_`k]tM%gY*Eur-l`g'QiM^<JcLB&JcLB& JcLB&JcO^/(]t3e0106$S?AurY-"h-Xf@tC>rNi?%0X<DJcLB&JcLB&JcLB&JcLB&]DrcN%j!DnAUp2K Vl6PoW2choRXSR(+;G=ghuK#BJcLB&JcLB&JcLB&JcLB&&-)\:0Qkk#hW!VQg<%$R.g;+:JcLB&JcLB& JcLB&JcLB&huF#a$Pk!B?APJjrk/`T^V.=n[%W1]5V*f\]E!N`JcLB&JcLB&JcLB&JcNF`#Qb8D)^e=" PH=_b!3Z='#Gd>t:,4"-#N,TI!.k3&!.k3&!.k3&!.k3)!!33-&JZ95:2uAoWi)eqW2HYqTo3hc1*[J= QiM^<JcLB&JcLB&JcLB&JcOL)%2W3ggYL`Iin`A?UIZ$,!.k3&!.k3&!.k3&!.k3&!5&:>!<ic='16u9 \\,Vhr4`KJWg.j44s^]s!0mP9!.k3&!.k3&!.k3&!/1CS!<`T1#nAe$MlQTT#HO8C@n/3l$CCgF!.k3& !.k3&!.k3&!.k4/!#P_>#71o!@Ypt^W2Q_sX/`1tQ@<@90c^V6!.k3&!.k3&!.k3&!.k3&!4Dk;#=?,T gYV#Rk2bUCCb#eH!0mP9!.k3&!3Q;0!<N?*"UGJF$jZt:i;eH0JcLB&K`D/T!sT&<$oDLSXL#FL^AYeS ]We,jG#^=6!s8T*S,e-@JcLB&M?!k^!WrN-"pbM;#R1D5L&cf*JcLB&huF,c!sAf6.T(GZUoLTqXUD;( Nd>)$-kQO`!Wg(:JcLB&JcLB&jT#Yh!WrN-"pbMA"p>"-!.k3&!.k3`!"8l1":#5^;g=Y&VQ-TnWsbqt N-Sl$-kQRa!Wh?^PlQC9JcLB&JcLB&JcLB&JcP`L"Wq]O[a="3joj%g8g">'!.k3&!.k3.!!`Q-"U5AK )C#>(&de_q!.k3&!.k4/!"8l1"9o/]:jJG*YdhCF^C.``XeCbm7Nr'@!s67<JcLB&JcLB&jT#Yi!sA`4 %MTcq%0m!8!.k3&!.k3`!"/f0"9\oN5@]>0T;qgk$`p7qNI"_c)$L-F!os?H!.k3&!.k3R!"/i1"9]#A 'H.\s#6WobJcLB&JcLK)!W`B+#m:JU6"GS/S>N4_Wsbr&R#?5n3#Ml&"9P(nJcLB&JcLB&JcLB&JcLB& f`20]10TIAh>QI>gT#9b+9T1TJcLB&JcLB&jo>ej!sJo:'Henc/fkN*WW7VNJcLB&])W3>!s8]K4^NT' VR4&8^C.`d['6<W==Xdd"U!fcPlQC9JcLB&Y5et3!sAc4%i-9=,8CRgi;eH0JcLB&KE)#S!seu3(,&?q J<Qi,XU;,)Sr[_X+:&/S".T@C!.k3&!/gg_!<WH.#S.^q/H[77$3Z(`JcLB&JcO[.$N^D5";`aeBn)5< W;Wb)Vl-5XNGM*/#mUS8^]8rdJcLB&JcLB&JcLB&JcN.X":QhbS_O,*"l71rKME*8!0mP9!.k3&!3ZA2 !<WN5%37#a:dHQG"lTH5!.k3&!.t7O!=8c-'.ZLYJ=EdVr4`TP]t:V:C,QV3#6UIrJcLB&JcL]/#QY#1 #72.j0L#Xp+:n[1!.k3&!.k4-!"&`-!Y->29l#NVXSo7/Y-"k.UOZAq$O?n<^]8rdJcLB&JcOp5$ipJ6 #RM7k0gRW=&Ho*6JcLB&JcN@^$3://%jEr-CP81WrMp=)W2cehIoe00#mCIm!0mP9!.k3&!.k3&!.k3& !.k4J!!<`kK%g1c#3+Cda-/%UQN2U;JcLB&MZ="`":5JL-9G(="'%9##)3,0!.k3&!8@JY%3I;oC5o.% rk8?Hrk/QHTmTWa*"iOm!.k3&!.k3&!9O7i!<`T5%3-uc<CA>Q"KDHR!.k3&!4Mq5#o4jG<d9k/q5jn% N+Y<q'b(B.!0mP9!.k3&!3ZA2!<`W6%j!Aj=%+YU"Q9?4!.k3&!.k1g!!!<A-9,(NP,51VW2ckrVlHVO B0[OR%0i=&JcLB&JcLE'!!7`PJcLB&JcOC&%K[\V^t[]%jQ,1RgU'EY])[E_JcLB&JcOp5$ipM>&Jd#k AU\>_,RCCMJcLB&JcN7[(CCj#/lI(fZam`^^;%Cq]t()%DFcQ,%HIMS!.k3&!.k3S!"8l2#Rq@k3`9Zl 2B)kZ!.k3&!.k3&!"/c,#7h[s6"c"LWil6$#HF)9=ZIlI$(M!I!.k3&!/gg_!<`Z;&LBP=B`hEr*!V,t JcLB&JcOO*(C(Hg,Xc:"TVnfgW2cepVl#Z'>!",M$,?Om!.k3&!.k4.!!331!iH$M!.k3&!3uS7$TjZm d+dO?iSND.?m#R0!0mP9!.k3&!3ZA2!<rrH*&q)FPC-:Z$K1u:!.k3&!.k1g!!!01&fEiHOKGq$]tM1q ^:h1`SVCrT0GU)XJcLB&JcL]/#QY&7%i$Wc@XS>k6QcVg!.k3&!.k4*!#GbD%2:HqH^gn4Y-"h/Xf\au MJuZ\,S7`kJcLB&JcLB&jo>ej":5SR/P0H"B14!LWW7VNJcLB&[f?g>#RqJ%=*^1-V5gJorhp(%Rtu#c 5:-s&!0mP9!.k3&!2ol!#:Bo9!.k3&!.k3&!;Z[+![;Z`^sh0$io/b>JjC.RR/hg=JcLB&MZ="`#7_On 6>)+K"-$_E$\eY5!.k3&!8@J]!WrT1-WPboYdM*VrP&TN[AogVBL!QQ!.k3&!.k3&!9O7i!X/oC(c534 O*FGJ#c[lV!.k3&!4Mq8!WrQ.*(4Y*T;J^eXTkYjM02cQ($#@[!.k3&!.k3S!"8o4$5".4<H4"B;()_/ !.k3&!.k3&!"T&0!WrQ.*^sn+S>)s[X/l6"#,7E=FB1.3S,e-@JcLB&K`D/U(JOlNK)gK'JcLB&eGp*k ;MV3kh<*k\jP-VL58s[<!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!4;e5!<F-,Dj.!#\@qjU $ba*VX.F]:.0]qX!pBWL!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3&!;um(!<Eol>()L(W3#p! $EBkgM.]*r"9\f.TE'QDJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3&!8.>Z!<Eon>C;L#V5gQpWs>Q! T9Y1E6m2I3!!:(=JcLB&JcLB&huEl^+CHT!VuVDLJcLB&YlFt1-W5>qgZ8@r"l6tVBg3$c!0mP9!.k3& !3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!.k4K!!iT>0iN7UU9M</^C7fg\?`)nB0-h<$3^I(!.k3&!.k3/ !!iW1$PXO==aHA9IT.d&L&cf*JcLB&fDl3Y%js_PHB4]$Y5PI1Y,J%\GZ6:,$3p\7`;kJiJcLB&JcOp5 $j$VA'HB/;H'<VV.g`3UJcLB&JcN.X)$(6q7:LP%S>rNfWiN(uV4Nrr<A+mj#6Y(l!0mP9!.k3&!3#r$ "!Cu"!oF!0!.k3&!.k4G!"T8V9o@6UjQ,I[bHHt;*Whf2JcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3& !.k4&!!j#Y4&U3bWk#kB^C.`e\[.cM:*ghk#Q_mEJcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB& ZN(gK)_OEaI@7+;Y-"h/XKALtLLWLe'b(?Kkl?tKJcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB& qZ%H>*%s]gI$LV.W2cnsWi;nhKOmCh'b(?KT`BZEJcLB&K`D/V+CG3u!e^Q*!.k3&!7LoX"t+'%iSrq\ inMScP;il`!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!4)Y3#o+[><IggR]tXK\rk/TKVhnh? -lEEpkl?tKJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcLB&qZ$s-&/uubCQ>EsXfhT(#cj21:FdJ# #Qg\"JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!.k4&!!``?*%+0jN2HTQ%B?G,VlHYXE`"A0'F=i[ !.k3&!.k3&!8mh["!Cu"!iQ*N!.k3&!3Q;2%na4ciSrqZhVHr+>SuK$PlQC9JcLB&Y5et3#S7ju7W+6b P@ui_i;eH0JcLB&JcPZJ$O$qP)a/))ZFmla^AYeR]s!cH;*-*;!s&Ft!.k3&!.k3/!!iW1$PXO==aHA9 IT.d&L&cf*JcLB&f)Q*[#S%S&=b39LXS]+,XIb#Q5V=#c!s&GC!.k3&!.k3&!9O7i!X9&I*'.8KPC-C] $*!uW!.k3&!4)Y5":5SR0Ns!uWiDtqrMp:(Rt5'90-1W+!<MKdPlQC9JcLB&W;m&'+CHT!hZ/6.JcLB& JcPKE"p6K=d+dC8rT44;Ik_1u!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLB&f)Q0\#Rh>!>_SuZ \@]HQ^C.`]UlKRu2]W&'!<L7AJcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&ZN(@8"pk_a8T0]c W3!)uXU:kcH=0/l('F[?!UKfO!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3&!.k3&!;ca("9o/C,ti0; T;AKbrMp=)ToXJ-7k>DY!WiCu!.k3&!.k3)!!36F?i_YWKE-T(JcLB&d/X=_;N\0'h#6@<hO.7a#/L:k !.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k3&!.k3W!"/l4#RhqKEKd6&\%VaT%)'0RU6BUk-O9eV!<MQf PlQC9JcLB&Y5et4"q)+a2d(HmIT.d&i;eH0JcLB&JcPZJ$NgM9#TGd0IZg;#XSf1.Wh,6!?9B23!s8T* V#Z)IJcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3&!7q2Y!sAf7*'7JSOIN&GrMp@*VOEHk?ToM8"9S]+ aT-nmJcLB&JcO^/"9TcS-j$=IJcLB&JcMnQ"U$5UJ$%H'josVKGtKFgjoCYHJcLB&JcMtS$ipVF)'_Ug Ni8.T2@SOEJcLB&JcLB&qZ%!)!s8]B2HtTqUp@Z2^C.]`Yc<Uh0ae-e!Wf+tJcLB&JcL]/#Qb2<'H8u6 HBnY^<%80.!.k3&!.k4&!"/i1!sB2d8SEX:Ts"?r%'Hb2T:'gs-O9hW!WgCCJcLB&JcLB&jo>ek"q21c 3a-fmHr_a(WW7VNJcLB&ZN(@7!sA`=/5'Z+O.NBMWskr,Un!]l:aZMO"9JVk!0mP9!.k3&!3#r$"!Cu" !oF!0!.k3&!.k4C!!E]]=-(Q'josbfXbpa1ScF?BJcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3&!7LoQ %4FYVJXW[Nr4`WQ]XbPCF[?`K"p4nJ!.k3&!.k3&!9O7i!X9#H)`LoGQ@;d_#c[lV!.k3&!3ZA.#p)!& Ck\=XY5GC/Y,\FV?o/>u"9S_m!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!.k4F!#Q"a2cOUG Q_gX\WiN.uWhuVI@5JK#"9\e&!.k3&!.k3)!!36F?i_YWKE-T(JcLB&ci=RX&2nLCioK1_jP/&!Y<)s+ !.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!3ZA-$6:ilBS`Cirk/cU^V.=n\YFj_/ftc7"76)R !.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3&!;?I1#8S[I<-"%qXfSY-Xf\\-Wf_3k,8Ldp"/Q!L !.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcO7"#RD1n4'$?\TrS*j%'$5*Whthq9-b;a#Qr0KJcLB& JcLB&huEl^+CHT!VuVDLJcLB&WrNV2(JU[Zgtq&Oh:g/l<"e?oPlQC9JcLB&Y5et3#S7ju7W+6bP@ui_ i;eH0JcLB&JcPNF$jI=f01pARYe.Q]]taQ[#e[7'F%nP;&d5$2JcLB&JcL]/#Qb2<'H8u6HBnY^<%80. !.k3&!.k4"!!`W9(aM1NJtMqB$EU>3RX\X,.N8g"aT-nmJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB& JcMtS(^(?e,s5UdS#NEdW2cepWiDD7?U$%\%0Z%uPlQC9JcLB&W;m&'+CHT!hZ/6.JcLB&JcP?A%L+V= ak#5'jPJ\Hcu:H=TE'QDJcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3&!7Lob!t#ST0OBU8\\#Mf^V@Lr ]s=>gDGW,."j$ar!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k3&!.k3S!!r`4$P=XXFI0#/riHR2Xf\\" NHA;f-kumP!0mP9!.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!.k4F!"8u8$kXg]FHrc&Wi2usW!ArQ FBUsY'a1?5JcLB&JcLK)!WsQQ!@S#&!.k3&!.k3q!"KoX\]<:Xk2P@VglY,G"2t7l!.k3&!.k45!"8l6 &/c]^DN:ZZBJp:!!.k3&!.k3S!"/f0!sKN4HD7dV]Y46X$+R(+Lh]C)#6=ko!0mP9!.k3&!3ZA2!X9#H )`LoGQ@;d_#iPc8!.k3&!.k4F!"/f0!sB5sAWERdY,qQ'$*'GME`P(;"T\Y%!.k3&!.k3/!!iW1$ks[B >'Z;6Hr_a(L&cf*JcLB&df9aV!sA`?4(aGFVQ-TmWsPYiL2g9S*!H?Db5d+oJcLB&JcO^/"9TcS-j$=I JcLB&JcMbM"U[kp[`dJ(joi&13Yqk_!0mP9!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!.k4F!"/f/ !s92tAW3Ce[(Q=O$b<RARt"Wu&I&C@!N?'N!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&JcO7"$NU;2 !tHn\GEA>jY5GC0WhG]5Bh9]^"9\f.blE=qJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcMtS$NU;2 ":m+aGE/)bWr/n*Vk0')BhKi`"9\f.nGngSJcLB&JcMbM"9TcS-j&9+JcLB&JcLB&nGi^o*DgsXd/<#/ `/e4a%AEiS!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB&JcO7"$NU80!tHkWEK$Nm\bs2M]XY5IPAio0 %137?blE=qJcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcMtS$NU;1!t$59?$D3uWr/t,Y,S(]I9SQD #mUS7nGngSJcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB&pAbR%!WiH2,=#RZM41=>Wsbr)SX"S- 2AHN'"9PP&JcLB&JcLK)!WsQQ!@S#&!.k3&!.k3p!!EEF6@$KHjos,:N+jXA`rL\kJcLB&JcOp5$ipVF )'_UgNi8.T2@QScJcLB&JcMqRrW*62+?!)9NMX,^^C.`f\[J5_;^`@j#QsSsPlQC9JcLB&Y5et4"q)+a 2d(HmIT.d&i;eH0JcLB&JcPKE$3:20#8SgT>Bl=/r2g@.Y,\C\CI90T$3gU3!.k3&!.k3/!!iW1$ks[B >'Z;6Hr_a(L&cf*JcLB&dJsUT!WiWD/4*TdOJMfT$`L)%UQ'%X+;"qb"3ggt!.k3&!.k4/!!EBH?ml)T !.k3&!.k3K!!<<F=KVM`"l.D=W_F#i!0mP9!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!.k4B!!`Z? ,;Do;S$Vt+$,+$UOCg<k'FY)C!.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcLB&cN"1Q%2gNV@u-rX XU;55Xe'l<.M`O#"3ggt!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!.k3O!!`W;)CIa\L8"OG!36$s #Fg$=.2NL$"RuJW!.k3&!.k3M!!EBH?ml*6!.k3&!.k3&!:Bgg#s+LPjp'o+hVN`-!i,gJ!.k3&!/gg_ !<rrI*BRMRQ32Y>/II44JcLB&JcO*s$NpkS,W]RtX1GsW^&5VNZ^lJD3[YXH!R:[s!.k3&!.k45!"8l2 #nRk)8S<Ti7O&/<!.k3&!.k3O!!rc7&K<<$GaPP7r2g=/Y,$ne6nKAi"9J&nPlQC9JcLB&Y5et3":5VT 02#r.CI]TSi;eH0JcLB&JcPBB)$C6X*%k69Q)CX^W2lu!W2QDFB14Eo&-N$6!.k3&!.k3(!!*H[!"X\^ JcLB&JcNpn%K[_d`mEJsk2taaigDt=a8gelJcLB&JcOp5$ipM>&/HlhA:8,[,RCCMJcLB&JcMhO$Ng\G (+E./T!Gf8^&5VM\>YU8>!4&:rW2WkPlQC9JcLB&Y5et3":,AI,<8V7<&P["i;eH0JcLB&JcPBB$NgS@ &Ka;OM4piIXSo7,Y,IV6@Rr-i#Q=b*!.k3&!.k3/!!iT.#Rh:j4&]ep<];!&L&cf*JcLB&cN"da#7;%c 6t_:HUSk,mX/`1uV36498MD"frW1@GJcLB&JcLB&h>dQb!iH$M!.k3&!2TZ*$pTfQ`7sG:jQ,=(?7-!F !0mP9!.k3&!3ZA2!<`Z:&L02+?VW?p#2oQ6!.k3&!.k4B!"/i3#RhS9C6#6s[_2OQ#J%(6P^$(Y%K6C0 !.k3&!.k3/!!iT."pbYU.Q^?,4sq$IL&cf*JcLB&cN"=S"9o,G10/^dT;SjiXU;)#OFLb+,7+DP!RLgu !.k3&!.k45!"8l2"pk_W.m-Ql-klfa!.k3&!.k3O!"/i2"pku!=*]suUT4<o%'$>*S;r&06mN'?!<Mfm PlQC9JcLB&JcLB&JcLB&JcP0<"TffQJu[,qjp'o-`.q/=$)R]S!.k3&!/gg_!<WK2$l1*C5m&nf&d3ph JcLB&JcO*s$NU80!t6e_I@I.?\bs2L]XY5HPA<5m!W`>K!.k3&!.k3&!9O7i!<WH/#SA"'1+4"L"KDHR !.k3&!36)-!<N<)#U;cOL6SC3qlL1(TUC72/e%j`!V?AW!.k3&!.k3S!"8l1"9o/E*%*Qk)@Zi.!.k3& !.k3&!:p0u!<N<)#p`#SKT_q)r2U1)VOa!"=>(*b!WfA&JcLB&JcLB&JcLB&JcLB&a8c>O2dDE^r8n16 Z&E<D!m:Rq!.k3&!.k45!"8l1"9o,C)'^^Z(^pMH!.k3&!.k3K!!ifS6=ke:WOBP>^C.`e\?_`S:Ep8T "U"DtPlQC9JcLB&Y5et3!sA`2$PXO))\NDYi;eH0JcLB&JcP6>#mD2';Jh&QVld-#XU;/.UPibK)$pNN "0DQT!.k3&!/gg_!<WH-"q21c,6Jr"#m5n^JcLB&JcNso(^1g7<,R;QUSt,kWiN(sV4WTW5T0q6"9[$O JcLB&JcLB&JcLB&JcLB&U]:o,&MdmsiSrqZk1dq[O[T]I!0mP9!.k3&!3Q;0!WrQ/$P=-q(_?uUi;eH0 JcLB&JcP6>(^1a087[FFZ+[ib^V@Iq\[\VtANCtL$jEa5JcLB&JcLZ.#6Fu1":,GK'a#'V"p9S[JcLB& JcNso(^(Hs3Dj^PTWG8tY-"h/Wi;>/;Cr^s#mAWUJcLB&JcLB&jT#Yi!sA`4%1sBi$jQm7!.k3&!.k3K !!`W?,s,%DLn4LC%'-;+Vl#]&<%]%##mBo$PlQC9JcLB&JcLB&JcLB&JcP'9%MD'dgtq#Lk2"M)Z!n^T VuVDLJcLB&M?!k^!WrN/#n.@I$jd(<L&cf*JcLB&b5_bL%j!;iDN_+#]a_]j^:h1lYaTi82C0(Cd/\au JcLB&JcOm4$NU;2!sAf6$OI"?!ic6P!.k3&!2ff&!t,hg1g,6qXST%)Y+C>Y5q3fb"n_k\!.k3&!.k3R !"/f/!s8Z2#n.+F"9RN^JcLB&JcLB&mf3Ur$5XpF>'lU9rhp7+W2Q_rRtG<@.if0)XT3qQJcLB&JcLB& JcLB&JcNdj%Ke%sgY:TDk2G(GbChb[bQ*4pJcLB&JcOj3rW*6*!s8Z.!s&G&!.k3&!.k3K!!iW2%2C*c Ju--Z^&GbQ^:h"NN,26G*t%Z@PlQC9JcLB&XT/\/!<N<)!sA].!Wh6[JcLB&JcLB&mf3[r"UP_Z6#Ddf XK;E'$EgM5Vic1*4t7<QXT3qQJcLB&M#[_\!<N<)"9\f0!s/LX!.k3&!.k3o!"Au5#nS(EClkZsW2Qbs rhp'tO*=\k.2N9;!.k3&!.k3&!.k3&!.k3&!20B&&6R<5gtq2Sio/ar<#l&1!0mP9!.k3&!.k3&!.k3& !.k4>!"/f0"pu#/ELF2D]=n-W$b<C/KkX(.&-Dt7!O2WV!.k3&!.k3&!.k3&!.k3o!"/i1":#Dl?%f&R XK;?%$`]_QDcJe?$NgG3!S%1%!.k3&!.k3&!.k3&!.k3K!"8o3":,Mn?@nlJW2clrWsbhnL2U-T+q+PT !Wi)sPlQC9JcLB&JcLB&JcLB&JcP$8"p?fSZ,bV[rT47$FZL-:WW7VNJcLB&JcLB&JcLB&JcNso$NU>5 "qECnKqk`V])9;N]X+Q*K3p\X"p>#/eGt1$JcLB&JcLB&JcLB&JcM\K$ipG5":?MKDi^?`X02E'$a-:k Kl'O:'EeO@!r2h]!.k3&!.k3&!.k3&!.k3&!:Kmr!<WH-$7JVeNL-?:W;Wb)Wh>Q.DGDi!"9\f.YlK@U JcLB&JcLB&JcLB&JcN^h"VORLS]9[fjoitq?oAVB!.k3&!.k3&!.k3&!.k3&!2ff*!<N?+$7A>[N1I#Z ^&>\R]stAJR<M=L$3p_9q#HZ[JcLB&JcLB&JcLB&JcLB&mf3^r!WrQ1*&q&DM4(=?XUD51UR?dE4;eA- "9Ph.JcLB&JcLB&JcLB&JcLB&b5_qO!WrQ1*]dDGLR+d8rMp=+VOs0+@Qk\9"U"nW!.k3&!.k3&!.k3& !.k3&!2';q!ZO=@YMT6?"l$JJCc)Ih!0mP9!.k3&!.k3&!.k3&!.k4=!"/f.!X0Ju;/_AeZb?=P$ba3a \>tHk/.N!k"0hiX!.k3&!.k3&!.k3&!.k3n!"&`.!X'2c5[&;jV#%2"X/_P/8g4TI"9[0SJcLB&JcLB& JcLB&JcLB&V>pu)!WiK=-ph-[N1d-JWsbl+Vl#`$9d9uN"9\H"PlQC9JcLB&JcLB&JcLB&JcOs6"9TT8 QJVT&"l@hMZtUGZ!.k3&!.k3&!.k3&!.k3&!65'H!tln>:Ni&+]Y2&Y^](nO[$Yes*>AnceGt1$JcLB& JcLB&JcLB&JcMPG#6PDS/3[HlSGoW"Y-"k/XKA=O>VR!)#R'r'PlQC9JcLB&JcLB&JcLB&JcP*:#QkMV /O3cpRB$7b!3?*t#caSM>r!0+#m@L5JcLB&JcLB&JcLB&JcLB&_>k&M/9TP#iSs"ZhV?kV1'Gr(JcLB& JcLB&JcLB&JcLB&UAu,4$lLHO@"kAc]Y2"n^V7Cp\>"[_4=M*Sq#HZ[JcLB&JcLB&JcLB&JcLB&lMq=p #S\=1:2c5oY,nb.riHI-W/kji/ft]2YlK@UJcLB&JcLB&JcLB&JcNgk%0?hM+"U6-Ni&hVVl6WpW!B/Y DbVo.'+!+gJcLB&JcLB&JcLB&JcLB&SH'*7:peF"h;[MShV>;/'(c0h!.k3&!.k3&!.k3&!.k3&!:'V% !=',O+\?jFZ+.BY^;%Fs]t(//H<ifa&$Z+d!.k3&!.k3&!.k3&!.k3k!#Pb@$P=4:@"b2PX/rG*Y-"h+ R=SpB1)p\P!.k3&!.k3&!.k3&!.k3&!2BN'!X/oC)*DA[SYi<bW2fiq#Gm`:Akb*'$Ma[e!.k3&!.k3& !.k3&!.k3&!9F1j"uV@E`nKD4io/b0Cb?'s!.k3&!.k3&!.k3&!.k3&!65'J!<WN5$oDIQX0T7J^&>\N ]X">uHs/?AeGt1$JcLB&JcLB&JcLB&JcMPG$NU>4#7)eUGF5/)Y5PI.Y-+O^J7hD&&GZ<k!.k3&!.k3& !.k3&!.k3&!:'V%!<WH0#q8brQ(OqRW2lquW2cJNIV25$&?u4e!.k3&!.k3&!.k3&!.k3d!"L#`Og33g k2bU_cB20Y%+5--!.k3&!.k3&!.k3&!.k3E!<*!(,>WWVX0]@MrP&`R\?MiqECLuO!s&H$!0mP9!.k3& !.k3&!.k3&!.k48!<*!')a7hjR%p\YXU;&"PCQps'a"O>!OVoZ!.k3&!.k3&!.k3&!.k3i!<*!(*'e+l Q(XtOrMp=+VONZr?8r`'!s/MV!.k3&!.k3&!.k3&!.k3&!1X#m$:/Bi^tntO"l$;6=t9aM!0mP9!.k3& !.k3&!.k3&!.k47!!rZ,)a.V^R&IC*rP&`R\[8Q7Jm'f<$jQmB!.k3&!.k3&!.k3&!.k3&!5njC!<Eog :Mk`MV#7>&XK&(fNbq<4$O?n<f`6U(JcLB&JcLB&JcLB&JcMGD#QXr@0Mu_>PG.rT%'->)Tpq!W8L4]M "U+c(PlQC9JcLB&JcLB&JcLB&JcOg2";*CsT\KJ,#3O^ZUOPlIY5j.SJcLB&JcLB&JcLB&JcN[g#QYSh 7U^h:YJ'nL$ba6a[B5U066I$Q#2'!.!.k3&!.k3&!.k3&!.k3C!!`N7+?!#2LS"LJriHO1Whu86=Ypm+ #mC2,PlQC9JcLB&JcLB&JcLB&JcOs6(]b-k3)OIER]<<bWiN(uV4s?(=u7$-#m@X9JcLB&JcLB&JcLB& JcLB&^&SWR3.037ioK7Ye%ho&-3M`tJcLB&JcLB&JcLB&JcLB&ScB$))_4*`N2XA&rP&]Q]tC_EIo\9K 'ajm>PlQC9JcLB&JcLB&JcLB&JcOp5(C1`u0N*([Xf\b.Xfee-Y,$ti74&rb#IOP`!.k3&!.k3&!.k3& !.k3f!#GqV+u*&>PGtLZWiN(rWiDbLBh'Ki&-pkgJcLB&JcLB&JcLB&JcLB&RK*g!)dpeHioK7]h:p5Q 71K"lPlQC9JcLB&JcLB&JcLB&JcOp5$3gnR+%LRJ\\5\jr4`KLX,h$b0cgb2!.k3&!.k3&!.k3&!.k3& !5\^@":5VT3+IlHq5jn)R!Ddl-5?j?!.k3&!.k3&!.k3&!.k3&!1j/u":5VU3b=/FVl6PorMp1'Q$?Ci -5R!e!0mP9!.k3&!.k3&!.k3&!.k40!!W`u^"qQ(jSe3CctO[*YlK@UJcLB&JcLB&JcLB&JcNXf$O$kJ 'fp#iXgYdR^&>\R]s+)^B1afl!WiB'h#N$,JcLB&JcLB&JcLB&JcMAB$3USA&1pk.S>WBir2g4*Sr%Ab 4!YC:!WW7d!.k3&!.k3&!.k3&!.k3&!9O7h":#8G/lm7cUSb&irMp1'Rtko^4=(U=!WW83!.k3&!.k3& !.k3&!.k3&!5/@:![;ce_pdK@jojCk58"%K!.k3&!.k3&!.k3&!.k3&!1j/u!sT)A/5pqeWjB7LrP&`R [&KOKAjIOB!s/Lg!.k3&!.k3&!.k3&!.k3&!9O7h!sAi8,"$""RA6d`r2g=%Q\KEW1)9up!Won4JcLB& JcLB&JcLB&JcLB&_>jrG":,;Y7;%CATVe[dWsbl"Q%X*U1`$8s!Wq0XJcLB&JcLB&JcLB&JcLB&QiI9u 5&?Frh#6@=gS\R@('=@5PlQC9JcLB&JcLB&JcLB&JcOp5$N^D6"s?6GM4L]S^&>\R]t(JMT70Zd"p>#0 \H%3]JcLB&JcLB&JcLB&JcNXf$N^D5";WgnEf$0ZXSf1-Whc&@BgEgD"9S_]!.k3&!.k3&!.k3&!.k3& !1j/u!WrQ.(Go05LR"R5rMp=)VP'63Bga'H"9S^j!.k3&!.k3&!.k3&!.k3&!8mh\!Z4+8UY>\/"l@._ DFFu?!.k3&!.k3&!.k3&!.k3&!5JR@!<Eif:iVGfYe9nK$GF']ZBSuW#R1D6h#N$,JcLB&JcLB&JcLB& JcM;@#lt&:,X5RXN1[9OXUD;5XfA(E<$qkQ"9XnhJcLB&JcLB&JcLB&JcLB&j8]Je!=pMC??M-qWr8t+ W2choSpjZf"p>&2\H%3]JcLB&JcLB&JcLB&JcNC_"9]Z5LX?"^#3+CZ[Z;m>fDpL'JcLB&JcOm4$NU>3 "UPSM(D@2]!ic6P!.k3&!1Em(%3mr7Fcr]6]tM.p^V.:l[[qb<+;PFl!!/AcJcLB&JcMqR$N^D4"9o/A &Io'L!oX-2!.k3&!.k41!!ilM/js)qQE%%cXUMA6Xf\LXANU_?$3^LB!.k3&!.k3.!!`Q-"9\r9%hSmS #m:<a!.k3&!.k3b!!`fM01B;rPGeDY%B?A*Wi;bKAj."C$3^Lf!.k3&!.k3&!.k3&!.k3&!1!Tp"t!`g gtq#NinW,,W]pgf!0mP9!.k3&!3ZA2!<WK1$5=U63%c9`"5s63!.k3&!.k41!#Q%Z-obC\S[?&C]tV7p ]tCnQMe>4)*=W(]!.k3&!.k3/!!iT-"9f#@(*Y:3,8LXhL&cf*JcLB&^&SHE&KWJoCPnskXS]+*WfqR) 0Hq8=!o<p/!.k3&!.k45!"8l1"9f&A(F(LW(CC;F!.k3&!.k3>!#GkP+"^'"LnUiKVl6VoW2c\UFB(%? ('ssBQ2lL:JcLB&JcLB&JcLB&JcOU,%M(jrd+dC8jPJYB^fhZY[/bdYJcLB&MZ="`":,DI+u;bq"&(Ef "bm#/!.k3&!58FM"Ul+g5Al[g\\,Vh^V7Cp]WR]Q?:?@Z"5X$0!.k3&!.k45!"8l2"pbSS-ojp_-PQ]` !.k3&!.k3>!"&i8&/I!'I\*RBXSo7,XKJ.KBhUE-&-)fu!.k3&!.k3S!"8l2"pk\U-p(-e-PQ^B!.k3& !.k3&!9*te":5YV10T'pVQ-YpWrAq&Wg\QS:,a@."1eJa!.k3&!.k3&!.k3&!.k3]!"K)ZJ&BIahW3YP gsC=)%G:`5!.k3&!.k45!"8l3$P=1.8S<Qh7O8>?!.k3&!.k3>!"/i2"plVYKrMPl]tOBZ#JILAQ$lq# )up),!.k3&!.k3S!"8l2#Rq@k3`Kls2]Dt[!.k3&!.k3&!9*tc!X&W1*(Fk5VlHotXU)#(PCR=>/enK" !.k3&!.k3/!!iT.#Rq@l4B6/!=?7H,L&cf*JcLB&^&SQC"9\rN7rX`hVQ-Sqri-7&Toa_:9e[:ah>i-- JcLB&JcO[.!Wil6VZ;;KJcLB&PQ1n'A?EbuhWFgu"PfYR.h)CWPlQC9JcLB&Y5et3"q2.a2H=gYGu6$t i;eH0JcLB&JcOd1$NU;2!uj[LR&dO&^&>\S]st8@P]]_M$3^M5!PSPc!.k3&!/gg_!<`Z<'e;[YH37YB +9mQ#JcLB&JcNLb$NU;2!u3_#K:&@4XSf1.Wh,9$?p5Y;"9S]+iW+Q1JcLB&JcOp5$ipJ;%i$Wa?[60K +:"nHJcLB&JcM5>$NU;2";Nk&JsDq)Wr8t'W2?#CIUPJa":#&3!We_iJcLB&JcM_L!X9bQh>i--JcLB& JcOR+"U6_rO1*gAjosVMHql-q[fD![JcLB&MZ="`"q24e4'[0""+XK*$AJP4!.k3&!58F@!<E6('K00E QDLn"rP&cT]<n`:LgrCX$jQn9iW+Q1JcLB&JcOp5$ipJ;&/HljB7ang,6t4KJcLB&JcM5>$NU;1!tQkQ Bn;GBY5GC+XJDAKE_n:i%L<4@!h'+@!.k3&!3ZA2!<`]?(,&BpJ87Y"#N5Z7!.k3&!.k41!"/f/!Wrr` 95/p<T;qjj%&g+uR?)>c/Ir-k"9Q:;JcLB&JcLH(!=LR]%tak6!.k3&!4Mq2$nbYEbPgQ,iQ%^;<u9Tk JcLB&JcLB&jo>ej#7_Ll5\,M<M-_nDWW7VNJcLB&RK3<f#QbJ`6=,&+Wk&&B#/.RVZC5r-"<S6b"p14n JcLB&JcMtS$ipM=&Jd-!DMiI.-3rK0JcLB&JcLB&iW'>e!<N<0*&L?%JsiY;XUMA6Wi)VG?o\u3#Qt4C !.k3&!.k3/!!iT/$5"(0;f7BnE_[qeL&cf*JcLB&^&SNA!<N<0*]-W)J<m)2Wskr,Vkfr;@QPA:#m:=h !.k3&!.k3&!8dbX&j[A4!.k3&!.k36!!<W`Cr?56#NFIUXcYLG!0mP9!.k3&!3ZA2!=',P,=QC,Ul].E $fM);!.k3&!.k4/!!rZ,#oG-U?%o&`r4`6Grk/Q8Kj#rF&de`T!.k3&!.k3/!!iW0$PF=8=E]f/HVu=! L&cf*JcLB&]Dr6=!<s/Z0M?>FWVNY%Y*Eor+;G=j"6'<4!.k3&!.k45!"8o4$54=:=ET[M<%/*Q!.k3& !.k3<!!rZ,#88479lH#gr2U%#VlHb[E(L0T'b(BMRK.p>JcLB&W;m&&)cn3bhZ/6.JcLB&JcOI(!YS85 r8n1Ah:pCb(:X?r!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB&JcN@^$O..^-q86DYe7Z_^AP_NYa08t 0-:`-iW+Q1JcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcM):#6YDL+#[GWTD>SkY+L5M"?%M@$Nlgt JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB&h>eAq$l'mE?\"ZHWi)erX/`1uRt"a',o6sm^&W`b JcLB&K`D/V+CG3u!e^Q*!.k3&!4;e:"u(qcgYLiNk2bU_Jh.&\!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ %&s;Z!.k3&!1!Tm":Gh^1LGm5[(3i_r4`<>U59(g9edOj!<J\jJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5 JcLB&JcLB&h>dod#RqLs9lQ8kWiiH$XU1e`E`G7M'EeF;^]8rdJcLB&MZ="a"q21c3a-fm"+4-"$&/G3 !.k3&!4i.>":,MQ-r+`CTr4ohX/l6"$)*;u=$J&H"9APa!.k3&!.k3&!8mh["!Cu"!iQ*N!.k3&!0@0c (0IKFcJ7REro=-K8f.O0Q2lL:JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&JcOX-$NgS@%jXhmR&mU' ^&5VM\?)6XCITTUrW0h8JcLB&JcL]/#Qb2<'H8u6HBnY^<%80.!.k3&!.k3^!"/l3#R_S6@Y:,EWiZ-# $EBPNFBCI@"p+f+jT'l4JcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcM):$NgM;$626=JsW+,WrB%% WiDq_L'Mg&3ZSD+!<J_kJcLB&JcMbM"9TcS-j&9+JcLB&JcLB&fDl'[12rAagA^4=jQ*[e3uS14!.k3& !.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLB&\c<*=!s8]A3b*u<WjKG:^B_BXXeUST0ams]jT'l4JcLB& JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB&JcM):$N^D4";!.]Ef6?^Y5>=%UmhUMDb;>^!WiCn!.k3&!.k3S !"8o5$ks[B>'Z<Z<\"L8!.k3&!.k3&!8[\`!WrQ.&2$k#M3aj8r2U1(TpUgY9dU,I!Wg+;JcLB&JcLK) !WsQQ!@S#&!.k3&!.k3W!!F*,Cn8cIjoif!E_[D-!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3& !0R<e$n>"lNM!Aar4`<H\[2XHQuPD,#6b21ScF?BJcLB&Y5et4"q)+a2d(HmIT.d&i;eH0JcLB&JcOL) #RDP:?$M:!Wil<&$`pA(T7^E)&-W1=!l=qh!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcN4Z(^V<M ??h<qV5UDoX/i7tTq$^@1_9fn!s7TbJcLB&JcLB&huEl^+CHT!VuVDLJcLB&NrTRl+%:IjioK1_k1[_N !fA`9QiM^<JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&JcOL)(^V<E<H=+p[(X/e^V@Ip\[A/`==Y7$ $3S-FJcLB&JcL]/#Qb2<'H8u6HBnY^<%80.!.k3&!.k3Z!!`]D/4<fjOehlV$EgD+O)7?/'Fb9LjoBu5 JcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcLr6%gNn&7:1>$Tr4ifWiN(uV?ioUCe#Z`%0m!,!.k3& !.k3M!!EBH?ml*6!.k3&!.k3&!7h,["s?mCh;7,Ok1e(mW(di9!.k3&!.k3/!!iT2&/c]^DN:XtP@ui_ L&cf*JcLB&[K$O:'IGb9H((u:]a_`k]tM(hWfV-f/KYN-joBu5JcLB&JcOp5$j$V@'H8u6HBs"Z.L<$S JcLB&JcLr6%g3C_.m[a#T<52sY-"h-XpD%qHWi<P((18:!.k3&!.k3S!"8o5$ks[B>'Z<Z<\"L8!.k3& !.k3&!87DY":lP)6Y:t@WrAq*X/N%uVj;X52^9+I"Mt.j!.k3&!/1CS"!CtP-j#&%JcLB&JcN%U%LG%N gYCZFk2+k<`,$\$i;eH0JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&JcLr6#6P>I*\q5bXT#m9^;%Fr ]a2<WSq:<;/Jn\`!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3&!87D^!sfAO-W#&VY,n_,XfhZ* #G[,m9f4.."Mt.j!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcN4Z(^(*T(FW1*Q`@'aW2lkqVl65C Cecl5'*RFtJcLB&JcLB&huEl^+CHT!VuVDLJcLB&MuX/*E7<RsiTB.Vh#lDo57j4_JcLB&JcMtS$ipVF )'_UgNi8.T2@SOEJcLB&JcLB&g&MK^":,AT9RW\G]=biT^B_9JP^$Fs,7=DN`;kJiJcLB&MZ="a"q)+a 2d(Hm"+F3!#_i>2!.k3&!4Dk6!X&]5'g-/kWiZ'!$E9AA@nA?l#6Fo,kl?;8JcLB&JcOp5$j$VA'HB/; H'<VV.g`3UJcLB&JcLr6$N^G8#SfO:Ni&bTVu<Y(X/;,1AP4`r#Qb#-T`BZEJcLB&W;m&'+CHT!hZ/6. JcLB&JcO:#"Un59a4B)Ejo_kt.LEfhJcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!.k3&!.k3Z!"/f0"UGi, C65I"\@haS$b<L9P'9hZ&d8@>!U9Z:!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k3&!.k36!"/i1"9oDk <dU7,W36*$%'?P%O*tJ)-4L([!s,+rJcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB&g&MK^"9\o? 0irXcS>E7`WsbhpNI,/(-4L(\!s-CAJcLB&JcLK)!WsQQ!@S#&!.k3&!.k3T!!NEJB8Wn>r8n.#Jk[Qs irFZ2JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&JcLr6$NU>3"V37bGa>/0\c'8O^V$tWUQ0(T)@6TN !ho[H!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!.k3&!.k4)!"/f0!sAuW6XtY.SuV^j$a-@uOa:%`'F"[C !lb4l!.k3&!/gg_!X9&I*'.8KP6625.g^q1JcLB&JcN4Z$NU>4":?GDAUfc1V>RA%WhPrCGulg:#6Y/2 l2ZD9JcLB&JcO^/"9TcS-j$=IJcLB&JcL]/":6VWKY[QK#3O:2GuPmfS,e-@JcLB&Y5et3#S7ju7W+6b P@ui_i;eH0JcLB&JcOL)$NU80!t$8;?$_a6[f!lJ]t:e\U4,o`%137@`W1SjJcLB&MZ="a"q)+a2d(Hm "+F3!#_i>2!.k3&!4Dk8!<N<)#8o6hAUfuCqQ1('UlK.R)[Q`P"6ol<!.k3&!.k45!"8o5$ks[B>'Z<Z <\"KV!.k3&!.k36!"/f/!WrZG1/2A0P,%uV%'->+VP/r_5o^19"9Y@uJcLB&JcMbM"9TcS-j&9+JcLB& JcLB&dJs@V.UK.QjosM]Z'e2m^]8rdJcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3&!3uS0"ViOS>_&EO qnN-D#I'7t/eea#"6ol<!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k3&!.k32!!`W<+>c]+M51$O%'?\7 XK8%>:EpAV"p:S"JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB&ec5pX&L'&+CPSP]WrK.!W!KDm GYo^s#mLLO!.k3&!.k3)!!36F?i_YWKE-T(JcLB&XT/D55EYs+#Nk1.hV?k;,3/`U!.k3&!.k45!"8l6 &/c]^DN:ZZBJp:!!.k3&!.k32!"/l?+"p$"OK6%,]tOH\rk/QCRs7[_+qb*S!.k3&!.k3S!"8o5$PXO= =aHB_<%814!.k3&!.k3&!7h,U!t,ki2-G9nY5PI1Y-"h-Uk`GD-5d6q`W1SjJcLB&MZ="a"q21c3a-fm "+4-"$&/G3!.k3&!3uSA":Q(m2HkBkWiE"rWi2koW1\fT5UI?Z"R5u=!.k3&!.k4/!!EBH?ml)T!.k3& !.k3-!!WNLC!5)^h?W-$hVHtQ3!l,UJcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcLB&JcLB&ec6'[$54I4 =Fd*Q\\,WT^BqTe\"o"&:c9F(`W1SjJcLB&MZ="a"q)+a2d(Hm"+F3!#_i>2!.k3&!3uS3!s];N,=ZI- VQ-fuXU;55Xf%;+><aVR#jMDA!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k3&!.k32!"/l7%i6H\CPnj` Wi5rtrhp'tO*=hp//JSd!.k3&!.k3M!!EBH?ml*6!.k3&!.k3&!71]U%n<M2bM2+=iniOo<uqI\!.k3& !.k3/!!iT2&/c]^DN:XtP@ui_L&cf*JcLB&Z2b75"UY\U6?&3o[(3mK^BhQaY+:Ji9e6e>!.k3&!.k3& !9O7i!X9#H)`LoGQ@;d_#c[lV!.k3&!0.$e!X&`7&i<gCT;8Ki%'H_7Y-"^qMKN/e+pt%EJcLB&JcMtS $j$VA'HB/;H'<VV.gb/7JcLB&JcLB&ec6Ng":#5H1gGL!Tr+igWiE"rVOE<_>sBP@`W1SjJcLB&K`D/V +CG3u!e^Q*!.k3&!3?/2""Str^!l!%jPo.9GsNAPk5^)6JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB& JcLc1rW*6./R4%/YdM+@^B_HZXeLbc3YS4fJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcLB&eGosX !WiKL8T9reVQI$"XTu#)RuVYi/Ioc#JcLB&JcL]/#Qb2='HB/;H'8>X<\"K2!.k3&!.k3U!"/f/!X'`@ E0?]bWMocr#HFJbN-/)P&*a.H!.k3&!.k4/!!EBH?ml)T!.k3&!.k3+!!F'DJuHckir/!Ce#.4Y)ZlZ4 JcLB&JcMtS$ipP@',ic-EfG9>.1+r5JcLB&JcLB&df9[T"X?NVOJ/ed^&>\R]t(JMRs.RO$O?n<aoI"n JcLB&MZ="`":,JO.RRNe"(FJ:#)3,0!.k3&!3ZA.!<a?$>C2=!WVik+XK&%`L13:b#R1D6mJqh=JcLB& JcOp5$ipJ;%hpN_?[$!G+:"nHJcLB&JcL]/#QY&J3a?rfRALOoWiE,#Wi)MUKO[4d#R1D6V>u2JJcLB& VuQl'*XCO%JcLB&JcLB&cN"IX,"?^[hW3b[k1dG1DDqg=!.k3&!.k3/!!iT.#Rh=l3`'Gk;DoO"L&cf* JcLB&XoJ_0))P31N2!VkrP&`R]=>2DLgW+Y&dnm2!.k3&!.k3&!9O7i!<`T5%3$l`<'`#M"KDHR!.k3& !/^a]!u*4N?$;7'&?W+<Xf\\,WMG\t:+?qe#R%")JcLB&JcMtS$ipJ8#n7n-5ug<(('NRrJcLB&JcLB& dJsLT'IcCUFc;slW"#c-W2ZYfOE")I'Fb<NaoI"nJcLB&K)blQJcLB&JcLB&WW3M3)bQ7Iio9%]grZgh =;U0$JcLB&JcLB&jo>ej!sJo:'I#.l0H^o/WW7VNJcLB&M?!k`&L02+Eg<a-]tXK\$ba6d\ZhEC8Lbbo #GqKQ!.k3&!3ZA2!<WH.#7h[s/gM2?"5s63!.k3&!.k4!!"&f;)(I^SJ=N^CY5PI/Y,\(F?ofDF%0alS JcLB&JcL]/#QY#1"UGVV,VT<I(CUG$!.k3&!.k3R!#PeI)CmpWI[R47W2cnsWiDtdJ71P_(C^Q9!.k3& !.k3&!.k3&!.k3&!/1CS"tOg(gYq/Qk2+k<`.TfKT`BZEJcLB&XoJh1!WrN/$P*p`$O-[k!.k3&!.k3& !7CiS!=9AY-WYr!]tM/Y^BqWf\>+aa4=M*SaoI"nJcLB&M?!k_!WrN-#R_.F%1!(<L&cf*JcLB&XoK:? "q;:e7;nEnXf\b.Xfee.WfV-m/ft]2mJqh=JcLB&JcOm4$N^A3!sAl:%h/dI!ic6P!.k3&!/^a]!XB/L *_1.3!36$s!NW7"W!B2[Db_u/'*tH8JcLB&JcLB&JcLB&JcLB&bQ&(b>gqQgio]=]iSM">'u^0)!.k3& !/^dT!<WE-#7:P="Tnd[!.k3&!.k3R!"/f2$kaCFF.0JH]Y46X#J7%&GZm<Z&H)Y#!.k3&!.k3&!9F1g !<E6'!sAc4"p>#/WW7VNJcLB&M?!k^":,GL2-tt>V5g]#Y5PI1XI4WL822(l!WiB'WW7VNJcLB&XoJh1 !<N<*"9f&8"9S\`!.k3&!.k3&!7CiU!<`]<'/j3MTr"chW;Wb)W0VsF8MV=q!WiB'c2`FrJcLB&JcLB& JcLB&JcM_L"pQuV^s:]orT44&DCu7\!.k3&!.k3&!9F4Z!=&]/"U5,5!s,D%JcLB&JcLZ.#6=r4$kP=) L]jQY[Ca-N^C.`\Ulot*2AZGt!Wf;$JcLB&JcMqRrW*'%!sAK)!<WA]!.k3&!.k3&!7CiT!<`Q3$S"nl P+SVQr2g@0Toa\47k5/R!s/MK!.k3&!.k3.!<*!"!X&E)!sA`/!JUT+!.k3&!3Q;1!<`Q4$nG.oOIMuC W;Wb)Wh,8uAP"Eb"9S]+nc47AJcLB&JcLB&JcLB&JcLE'!#Gc?JuH`HrT473O&@;2UB#lGJcLB&XT8;# qucs"i;eH0JcLB&JcO4!$ipG5"pl\PF-EB&\@qjU$ba'SV3Q$j+U%uN!R:[s!.k3&!/U^T!<<3#!s8W- !We#UJcLB&JcMqR$ipG5"9or2?@Is,WN?$"$E9Y\J6b,O"9\f.nc47AJcLB&JcOj3rW*6*!s8Z.!s/M' !.k3&!.k3.!!`N,"9\rP5@4P@NLH`CrMp=+VONZr?9/r,"9S_*!.k3&!.k3&!.k3&!.k3&!6Y?G"t35o Z/#<?"l$;6==XQr!.k3&!.k3*!;urt!JLN*!.k3&!3H5/!<E6()`h5OPbk_"rP&`R]XbDKLfu54"Tnhs !.k3&!.k3&!9!qW!WN6$!N?'N!.k3&!/U[[!<N<)'eMuZB7H)?qlL4.Whbu%808!<!s5J&JcLB&JcMeN rW3$#rrM$XJcLB&JcLB&d/XOT!WiH=/k]i+OJ/]QWsbl+VkKAq8K\0>"9QjKJcLB&JcLB&JcLB&JcLB& V>p`,.Ti+nrT4:?d(,f[([M-R!.k3&!.k3&!.k3&!.k3)!!3c_720-ZR]a<:^;%Fs]tM"_Q>\o%&./T@ !.k3&!.k3&!.k3&!.k3&!6kKN%3RQ(Bn`([Xf\c*XU2/2UOcT%&ISgHc2`FrJcLB&JcLB&JcLB&JcMbM #7hq9:hbQMWrAq*Wi2krVk8KD0G+^!"S)PE!.k3&!.k3&!.k3&!.k3&!"T&=2L!@$iSrqWgXF0)/d%pM JcLB&JcLB&JcLB&JcLB&blA.\*\]uqMkmkq]tM1qrk/QFTn$9$,S^[3!.k3&!.k3&!.k3&!.k3&!3#r' #o+^C<-=>'riHU3Y-"e.Vi5C]-Q<U%nc47AJcLB&JcLB&JcLB&JcLK)!XTYi"ZBD'O/ArUW!]H&WhYGe 8LPPj#c[lV!.k3&!.k3&!.k3&!.k3m!"K&L=1$Q5hW!PNgXE/l&'4g'!.k3&!.k3&!.k3&!.k3M!"9,G *@O[-S$T]=]tV8\]a)*IP&jJ],S0GGJcLB&JcLB&JcLB&JcLB&K`D/Y%2K-i5%BADX02?%#HF,=?9p.^ $`X2Y!.k3&!.k3&!.k3&!.k3q!#GhK(*GkRKV56CW2Q_pVl6GWHXB,m*"'skJcLB&JcLB&JcLB&JcLB& U]:l230qS2gYq5Mh:o_U-3il<JcLB&JcLB&JcLB&JcLB&K`D/V#7LkL1hDcP\@TAerkA`Q]We)gED\G* WW7VNJcLB&JcLB&JcLB&JcO$q$3LG;$S#&$SuJclriHL0Xfe:TG$R?\&C(9-!.k3&!.k3&!.k3&!.k3M !#GbA#n/7^H((V.Wi2tuW2Q_dMKN5l-P>nLJcLB&JcLB&JcLB&JcLB&JcHA_!!4?lZ,YMSk2bO\d"b(0 "K)6O!.k3&!.k3&!.k3&!.k3q!"/f/!sBlHJ"s6U]"S'W$b`sJSVq2L+9M]I!R^t"!.k3&!.k3&!.k3& !.k3M!"&c/!sBQ/Boej_X8B"+VO<9`<AYHn!s/Pt!.k3&!.k3&!.k3&!.k3&!/1CS!WiH0"<9dCNLQZ? Vu<Y(W1oT5FB:@:"9S],XoO%RJcLB&JcLB&JcLB&JcNgk"V"4[W5dZljosM<Cd&d>bQ*4pJcLB&JcLB& JcLB&JcMbM$NU;2!usU?N1[/X^&>\S]t(GJSU=Hj$jd+?!VZSG!.k3&!.k3&!.k3&!.k3)!!30&!seuD 1/rFTRA?q^XUD/&Q\]9C,7"JV!s,S*JcLB&JcLB&JcLB&JcLB&blA+P!WrN>1feaUQD(>WWsko'Ss>%C 7jJBG"9S\R!.k3&!.k3&!.k3&!.k3&!2BMt!ZOIDVq_14"l6kQA314h!.k3&!.k3&!.k3&!.k3&!/1FP !=/`@02?D@SZod*^C7fg\?i5sC-ECE$3^I6!.k3&!.k3&!.k3&!.k3&!6kKD!WE-*%jX>AEf-Klr2g@0 Whc&.<\P*n#6Y(V!.k3&!.k3&!.k3&!.k3&!3#qu!WE-*%jaJEEJU*arMp@*WhuGTGZQU3$jZt:pAfdF JcLB&JcLB&JcLB&JcLB&r;Zs&(I<YurT4=@cErmT+p+_DJcLB&JcLB&JcLB&JcLB&bQ.VC#7M_28oB]h ])9;N]tM(gT6a6V(_6iPdf=t"JcLB&JcLB&JcLB&JcM_LrW*61(+;7IH'bT1XUMA6XKJL[ANgtE$O$V+ !.k3&!.k3&!.k3&!.k3&!/(@P!=/]4(FVCLGa,-)Wskr*WiDnPAj@4I$3^L7!.k3&!.k3&!.k3&!.k3& !6"p?"!V3orT4=DgtKrT641s;JcLB&JcLB&JcLB&JcLB&V#Uf-'-Su*I@n$_^&,PM]rR*#1F<nH!qu\H !.k3&!.k3&!.k3&!.k3&!"/c2%N$EUBT&gkXfhT(#csD::FI1p#Qh10JcLB&JcLB&JcLB&JcLB&aT)PM %iHWZBSiSbVu`p!rMg*fF\sP.&IANf!.k3&!.k3&!.k3&!.k3&!2';s$q7AVhW!VYro=.8BcHRBJcLB& JcLB&JcLB&JcLB&JcH2Z"Uu4j5\uUc\@]GfrP&]QYa^#D5q*KM!<KG*JcLB&JcLB&JcLB&JcLB&aT)YN #n\"0=FH^>XK;<$$(cla82;7t!s&GQ!.k3&!.k3&!.k3&!.k3&!2TZ6":5YX10AmkVPpMnX/i8#W1/HQ 8MhP#!s&Gu!.k3&!.k3&!.k3&!.k3&!.k4J!"K&WFgf?EhWEt]jP,>H%&s;Z!.k3&!.k3&!.k3&!.k3m !"/l8%21BtJYB<T\\7sV#edUBP^Qh"*X)HCec::%JcLB&JcLB&JcLB&JcMVI$3LJ=%O=P\NM!#HqlL4$ PCI7=/enKj!<N#sJcLB&JcLB&JcLB&JcLB&JcH2Z":#5D,tVp2S"ZaYri6I-VkK3$BMC/s"9JT)Z2fIV JcLB&JcLB&JcLB&JcN[g"V=4VUVtpdjosi%TNWfRcN&OsJcLB&JcLB&JcLB&JcMVI$N^D7#TuTUP,#4i ]`#SQ]t(AFRs7aX"p+f+q>c*IJcLB&JcLB&JcLB&JcLB&$NL51"9oW">CDX*Vu*S'Wh5N1@m;";!WiD. !.k3&!.k3&!.k3&!.k3&!6G3K!X&W1(H>ZHO.)lErMp=)VOWg&AO.C@!WiDR!.k3&!.k3&!.k3&!.k3& !1s5p""$upXk*I5"l?qM>W2u]!.k3&!.k3&!.k3&!.k3&!.k4K!!a,l>(2g8ZFp+M$ba*XYE3<N$3LA2 !ODcX!.k3&!.k3&!.k3&!.k3i!!`r\883[>UTXQt%'Hb5V4N$3-O0_U!WgmQJcLB&JcLB&JcLB&JcLB& T`><,-qS-'OIrQOWskr,VkKT*<%%tR!s/N#!.k3&!.k3&!.k3&!.k3&!.k4H!!E]a>*7#,jp'ho\Xe3o !j)HS!.k3&!2ons!T!g.!.k3&!.k3i!!s&]6t:\4X15jWrkAiS]=>5;G=`kh$jHdb!.k3&!.k3(!<3'" !J:B(!.k3&!20B0#okg!BnD_PXf\b.XfSV(V2&M@((CNP!rDtL!.k3&!.k4.!<*"s!.k3&!.k3&!;lg% #p)!&Bn;PHri#gr$E0hqKO[+\%g`@?ZN,RWJcLB&JcLB&JcLB&JcNUe%Lb(+[bg!&jQ,(9[%0/]d/\au JcLB&K`M)QrW.]QJcLB&JcMJE#7;A%6t(eC[/R`J^V@Ip]=F\k?oKDL$j6A,JcLB&JcLB&huNWTW;qMM JcLB&JcP]K#6tqf2,A.MV#IJ*Y-"e-XK%D%:+I:s#QqC5JcLB&JcMbMqZ5UTJcLB&JcLB&`;g_['I5S6 Di:<fVl6PoW2ceoO)RoH*YSh^f)UC&JcLB&JcLB&JcLB&JcM;@%2DF,gYL`GjP8>,\Ps@;!.k3&!.k3& !9!qS!N?'N!.k3&!.k4K!#PkM)^e!mQE\$8]tV7q]tM(]Q?Q1e-5-Ng!.k3&!.k3N!<3*!!ri;Z!.k3& !.k3&!6"pC":Gqa1gP[)poOdkJRUns*"E,'!.k3&!.k3*!<3*"!WiE(!JLN*!.k3&!20B0":>kb2I:p( WiDtqX/MqrWgSBI6S9Dj"T&1N!.k3&!.k3&!.k3&!.k3&!;?I'">5S_gYLiNiSE8>G:j-'!.k3&!.k3N !<*!!!r`5Y!.k3&!.k3&!6"pG!sK#@-<c8.]Y(qlr4`KDUPs+f1E-ML!.k3&!.k3*!<3*"!WiE)!JLN* !.k3&!20Au!sAi8*(Y1@Y5,1)UlT\&5:@6LqZ)3JJcLB&JcOa0rrN'"!!0&!JcLB&JcLB&qu@*,":#5S 8T^?"Wi2lqWsPf+ToF2!5q!HNZN,RWJcLB&JcLB&JcLB&JcNOc"WDF)f%]0_josi,TM?F.df=t"JcLB& M?!k_!sJl;',r.u*>/\]L&cf*JcLB&T`>H%"9o/Q89^Q-[(3mJ^C@]RRttiM-k$1[!<E0#JcLB&JcLB& jT#Yi!sA`4%M]ou%0m!8!.k3&!.k3&!;lg)!X&W1(-,i[T;8Kgr2g@,R>>lc3$&>-!s/M4!.k3&!.k3R !"/i1"9]#A'c[u"#Qs#cJcLB&JcLB&`;g8I"9\rF4(<r6Tr"deWsbejL2g<V*si&P!Wh$UJcLB&JcLB& JcLB&JcLB&RfETs3eF-Bg\g1:Zu.o@!r)bI!.k3&!.k45!"8l1"pte[/O*&t.MW,e!.k3&!.k3&!;lg) !<WH/'fo`VSuT-0r4`WNZ`0OJ>rE<#"Tne7!.k3&!.k3S!"8l1":#5K,;DD<+:n\7!.k3&!.k3&!6"pG !WrQ.&1pXqM4(0Br2g@-UR-gS9.CAS"9S_[!.k3&!.k3/!!iT.":,;L,;MOe1a!A5L&cf*JcLB&T`>H% !sA`=/l6JAQ(b5UWstu"Q%s0M.h;dd!s/H&JcLB&JcLB&JcLB&JcLB&JcPHD";O.6REPNj"NHX957k%! JcLB&JcMtS$ipM>&/HlhAU\>_,RE?/JcLB&JcLB&`;g8H!WrN7.S4E0S#s7!^C.]b[',g972cR?"TmEY JcLB&JcL]/#QY&6$P=UD;J?552B)jT!.k3&!.k3E!"/f/!s8lQ3`p<VS#Z@f%'$.qJmC8K#R1D5!!%TN JcLB&JcOp5$ipJ:$kXaH<,#Dn*!WDCJcLB&JcLB&qu@**!WrQ4+?WbFL7"k9Wsbr)TpgL<2\ZQ&"9Q%4 JcLB&JcM_L!Wic3h>i--JcLB&JcNLb"9K?"EkVD5"kLAXHnY`S!.k3&!.k3/!!iT1%Mp9TB8E8aN+"IL L&cf*JcLB&T)]/u!=9c&9PTK][f!o>]aDBMK2Np+$jHe6!.k3&!.k3&!9O7i!X/oC(c534Nd"8H#c[lV !.k3&!.k4I!!rZ,"r8UL<csM%qQ1(,Xd*ci)\!&U"1J8^!.k3&!3ZA2!X/oC))P?5N-A,I#iPc8!.k3& !.k3g!!rZ,#8S^O=*0Lur2U4(WiE%]DF>HR#m:@b!.k3&!.k3)!!33<8cTla!.k3&!.k3=!!<9A;QBZW "lA"_a^,VU!.k3&!.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!.k4G!!`]B,rSVGRBZ\(!kuFark/Q? PA<<.)%?_X!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3&!5SX@":lG%5\#J=XSo7$Y5YO.Spa]o *#&\^gAlg*JcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3&!1a*.":lM(6=b\;Wi2hoX/MtpWg\<;0HLo7 "98FR!.k3&!.k4/!!EBH?ml)T!.k3&!.k3&!:p1##W7:hgYLiNiniMGHm]!$!.k3&!.k3S!"8l6&/c]^ DN:ZZBJp:X!.k3&!.k3&!5SXP":Q+m3b4/H\@TAe^V@Lr]sF>_?:-7\#29-0!.k3&!/gg_!X9#H)`LoG Q32S8.L:b/JcLB&JcM>A%0QtM)_Fp0PcCdeXf\c*XU1e]D+lc1&d/17JcLB&JcLB&jo>ek"q21c3a-fm Hr_a(WW7VNJcLB&JcPQG$j6kM*%k03P,>.WVlTfq#cF>PCecl5'*PcEJcLB&JcMbM"9TcS-j&9+JcLB& JcLB&])W9Z>dVN"h<*_UhVFJa&Cpi5!.k3&!/gg_!=05S,=ZR2Vur5s2@P<?JcLB&JcM>A$NgVB&gU7u S[,]7^&GbS^:h%UQ[`F1,ROMOJcLB&JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&JcPQG(]spJ%3%KB LnU`HXKAV-Xf\OgJn\";)[EhPJcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcLB&JcLB&_#OoH"UP\Z5\>bB USk,mWrAq%V3QRF;)B6tgAlg*JcLB&K`D/V+CG3u!e^Q*!.k3&!1*Zq#s43J`7sG8io/atA2"Ji!.k3& !.k3&!9O7i!=05S,=ZR2W0:mQ%&s;Z!.k3&!.k4G!"/f/!sK8tBTT:"\@qgT#J.4=RXS?l%(?4g!.k3& !3ZA2!X9#H)`LoGQ@;d_#iPc8!.k3&!.k3e!"/f/!sB&b<-t"*WNQ0$#HOP_KkX"%$/5H3!.k3&!/gg_ !X9&I*'.8KP6625.g^q1JcLB&JcM>A$NU;3":ZtaHBk%uWrB%,WiDtgP(RI=,maPOJcLB&JcLB&huEl^ +CHT!VuVDLJcLB&JcP?A"Tfr`N3Uk2jp'o-`fF@_%($"d!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3& !.k3a!!`f\;gb(4Z+9eI$ba'SW01s^(^:-G!T*m/!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&JcM2= #6l;<B82YDWr/t*Y,IqXI986;"9\`-!e^Q*!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k3&!.k4C!!rlS 7;%::SYiEeri6F,V43Zq=>CNm"9S_;!.k3&!.k3M!!EBH?ml*6!.k3&!.k3&!4i.7$TD=L_rTnXjos5; KO?,.f`6U(JcLB&MZ="`#S7ju7W+6b"-[CV%#+b6!.k3&!1<fl"sH3<I[6q?r4`QO\[AZ4I8_U0%06_: KE-T(JcLB&jo>ek"q)+a2d(HmIT.d&WW7VNJcLB&JcPEC#m;)"9kf-DVQR*#XU;)*T8I;L+:eb_"1nPb !.k3&!3ZA2!X9&I*'.8KPC-C]$/kl9!.k3&!.k3a!#PhV1/;P5PG5"SWiE,"VkT];BLO$S#mLLh!.k3& !.k3)!!36F?i_YWKE-T(JcLB&PlM:&/7>F9ioK1_gVg%J5n*\lJcLB&JcLB&jo>ej#S7ju7W+6bP@ui_ WW7VNJcLB&JcPEC#mD%o6<o&3ZG"!O^C.`f]""c"BKd[Y%0a?DJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5 JcLB&JcLB&]`8BB&0Nf%CPeaeXfhW)$*1(oGZ6@9&d\]u!.k3&!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf* JcLB&R/dHp&L'&+CPSM\W!fW+VlHYlQ$?=a*"r>Z"G?c,!.k3&!8mh["!Cu"!iQ*N!.k3&!.k4>!"KN' O5AjTjQ>:L`jBA#!k&)\!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!.k3a!"&f:(a_4TO0-+/^AbnH ]a(m5H;QLE'F3LqJcLB&JcL]/#Qb2<'H8u6HBnY^<%80.!.k3&!.k3=!!`T4&f`H%H(=f7$*LD3XeU\` 5q3fS%g@UdJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcLB&oDf*u#nn@3<Hsr2Vu`p!rhp+&TS@&G .3&j%])[E_JcLB&W;m&'+CHT!hZ/6.JcLB&JcN:\%K[hshVR5Pk2P7QgQOZ*g&Q^)JcLB&MZ="`#S7ju 7W+6b"-[CV%#+b6!.k3&!1<fp!XB,J,#Ecb]"G_ir4`EFVN#Cc1]\[+rW.cSJcLB&JcOp5$j$V@'H8u6 HBs"Z.L<$SJcLB&JcLB&oDf4""UP\W5A?4[Y,qN&#HEu4=?J&K#lXk=!.k3&!.k3S!"8o5$ks[B>'Z<Z <\"L8!.k3&!.k3&!5/@@!X/l@)*qttVlHbqWr8t'VN?"(4t.9RrW2!YJcLB&JcLK)!WsQQ!@S#&!.k3& !.k37!!Wm1`mEJsjSe3E[TX^R!!%TNJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&JcLB&oDf7""UY\U 6#VsiZad^H^C.WUSVCrS/J8-f!<Kq8JcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcLB&]`8HB":#5G 10T-uUoLT#rN-I.Sr%Dg4<k:;!s/M`!.k3&!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcLB&R/dWs":#5H 1g>?rTr+igrMp+"RYPia4p</?!s8T*L]E#,JcLB&huEl^+CHT!VuVDLJcLB&JcP3="p69!RC:T(rT47& Gs2uF\,_*\JcLB&Y5et3#S7ju7W+6bP@ui_i;eH0JcLB&JcNIa$ipG6#S/XnJ"<RE\\A$W$bWjISVUi? (^1!D!TO03!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/JcLB&JcM2=$NU>4"q)eLBo/1MWr/t&Y,%GBE`*&o &d/:=!f-i.!.k3&!9O7i!X9&I*'.8KPC-C]$*!uW!.k3&!.k4C!"8l1"9o2\8SNsESu/IbWsbr$Q&'EZ 0G=Ql!s64;JcLB&JcMbM"9TcS-j&9+JcLB&JcLB&[K$I?5%9SjiVhmBd%G)=(BWCmJcLB&JcL]/#QY2B )'_UgNi3&DBJp9R!.k3&!.k3=!"8l/!s8fS7;.FFX1,e@^BM<]['60K"\g-E"Tnd]!.k3&!.k45!"8o5 $PXO==aHB_<%80R!.k3&!.k3&!;$7!!<N?*"rfI"E/0gYqlL4*Un3KU4W";)!s64;JcLB&JcMtS$j$VA 'HB/;H'<VV.gb/7JcLB&JcLB&]`8HA!WrQ0*&go;KU&@3rMp=)VkKT:Aj7.9"9S_c!.k3&!.k3)!!36F ?i_YWKE-T(JcLB&OoPXe(-$$1hYlR?gVg"C64/;EJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcLB&JcLB& n,N^r(c"p*M4q5grP&`R]tCnYNF+7I$3gUI!.k3&!.k3S!"8o5$PXO==aHB_<%814!.k3&!.k3&!4`(9 !tltG=`fXuXKMK'$*L:uGYKCi#6Y.h!.k3&!.k3/!!iW1$ks[B>'Z;6Hr_a(L&cf*JcLB&PlMF!'.?.M FGlciW2ckuW2ckpR<Jg0,74\Z",Hr/!.k3&!8mh["!Cu"!iQ*N!.k3&!.k4;!"K)L8<M]ejQ,I[gWm]\ *k;9&!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!.k3&!.k3]!!iZ>,re\CPH)7o]aVZi]tM(aR<D+L*"`D8 !.k3&!.k3/!!iW1$PXO==aHA9IT.d&L&cf*JcLB&PlM$k%3$i^@"+O@XTY`,Y+pXR?o];D%0VIeJcLB& JcOp5$j$VA'HB/;H'<VV.g`3UJcLB&JcLB&n,O:-%37#c@=4B?Wi)eqW2Q_rT7UN6+;G=g^AricJcLB& W;m&'+CHT!hZ/6.JcLB&JcN.X%L+=takPY.jPenJcB0sgh>i--JcLB&MZ="`#S7ju7W+6b"-[CV%#+b6 !.k3&!0mNn!Xohi0jK@*\@fJf^VBc]!Oea,Lh9(0*=R`(JcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcLB& JcLB&n,O:,#SA"'8oB]hY-"e.Y-"e,ViYpt2C'%D^AricJcLB&Y5et4"q21c3a-fmHr_a(i;eH0JcLB& JcN=]$3CMG*%+HuNM`_Ur29n$UQ0=n2^T:HirFZ2JcLB&K`D/V+CG3u!e^Q*!.k3&!07*g&l#XSf%f9E hV?kc:]V@6KE-T(JcLB&jo>ej#S7ju7W+6bP@ui_WW7VNJcLB&JcP9?$NUD=&JmiURBsH9^&GbQ^:h(Y R=Jg;.1j5oJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcLB&JcLB&\H!HI":,GK2-ts3Wi`D+Xfee.Wg\TV ;)TL(irFZ2JcLB&MZ="a"q21c3a-fm"+4-"$&/G3!.k3&!0mNn!<`Z;&N4!JTVnchW2fiq!N)1eJnn:E +:O&+JcLB&JcO^/"9TcS-j$=IJcLB&JcLB&l2V:u23tepgZ%;RiSMIk2%R;!JcLB&JcMtS$ipVF)'_Ug NMr%S2@SOEJcLB&JcLB&\,Zm;!s8ZX?B)(o\\5`U^B_EXVO)d;2\l;mjoBu5JcLB&MZ="a"q)+a2Hb9i "+=,u#_i>2!.k3&!0dHj!WrN-,><?PUoLTpXT5.#PCdL@.hM[\MZA>/JcLB&jo>ek"q21c3*LQiHr_a( WW7VNJcLB&JcP6>$N^D4"=$ZcRA$LXW;Wb%Wh>H(Bh^,jrW0k9JcLB&JcMbM"9T`P-N`0*JcLB&JcLB& Z2b%LFecY!iVhmAes9Jn%H%5<!.k3&!/gg_!=',O,"$%#UB?Kc1CJp;JcLB&JcM#8$NU;2"!gQ`Q_q!s ^&>\H]snBPUQ][h,RFYX",m53!.k3&!9O7i!X/rD))P<7OEaSM#c[lV!.k3&!.k4>!"&`.!s9K)@"OT6 Wr&n*W1K-#>rio/"9\hE!.k3&!.k3S!"8o4$5".6<cj@H;CDh0!.k3&!.k3&!4W":!<N?+*'Rh_OIN,F rMp=+V4*Hm?9B24"9\hi!.k3&!.k3)!!33?:]MSi!.k3&!.k32!!NQ]>(j??rT4.8Y60/O-j>>*JcLB& JcOp5$ipSC(*GkQKq4',0aao\JcLB&JcLB&mf3^r!<N?B3*U]mUpIc5^C.`d['6<Z>r!$$#mA-GJcLB& JcMtS$ipM=&Jd-!Di/R/-3rK0JcLB&JcLB&\,Zj:!WiH=/4jE$OehlV$EKtoODdc>%1*4Ak5^)6JcLB& MZ="`"UYhX1/i+I"*.-`#_i>2!.k3&!0dHk!<N<)'eN'jI#ju$rN#sr$)*iKDbVVj#mUTl!.k3&!.k4. !!3d!(oI@c!.k3&!.k47!!EWV=..hAjosS\Vh@kZ]`<WaJcLB&Y5et3"q;:h4^NW,K3Ku9i;eH0JcLB& JcN:\r;d-9-pLj[R'++#^C.ch]=G/3E'kZ]$jPkpJcLB&JcL]/#QY&7&/HomBnZY,8L+Oq!.k3&!.k38 !<*!(!Y$2*7qI=EqlKk"$*C5"J6XoG&.&Ju!.k3&!.k45!"8l2#n[t-:2,>u9-jkD!.k3&!.k3&!:Kpe !=/`9+#6E"Jsr_<Wsbl+WMc89>rEK1#mA-GJcLB&JcM_L!Y%%#h>i--JcLB&JcN"T!sp`.f)=_8iS2Jb LF`Sf!.k3&!.k3/!!iT0$ks^C>BuG8I8qg*L&cf*JcLB&O8oLm(+(kDLo@u`^BqZh\YF[P.39*-Mu\G0 JcLB&jo>ej":5SS/P0N'BLF$LWW7VNJcLB&JcP*:#6th\.SFfIY5>=-Y-"^cCI'$W%0j]MJcLB&JcMtS $ipJ;%i-cjAq"D^,7!0-JcLB&JcLB&ZiC=:&KWAqEK[@"WsYl*W2GYk6Qd0S#3Pu<!.k3&!/(=Q#q>o` K)gK'JcLB&MZ<ep?I&K2!9=:BiP\P'LB)o+JcLB&jo>ej"UYbT.RRH`?U#\=WW7VNJcLB&JcP*:$O74] ,t`BNZb*oa^AYeQ]W.-68i._%!<L.>JcLB&JcMtS$ipJ9$P4F;8RP7I(^8juJcLB&JcLB&ZiCC9$PXOA @Y^b\Y5>=-Y*j]C4";*T!<MEbJcLB&JcL]/#QY&6$4n=<947ot1)U7M!.k3&!.k34!"B)?'HK;GKV>?E W2Qbtri-6iHX/`_)%$BFNW=Y2JcLB&h>dN[V>u2JJcLB&JcOp5%L4t]a4&f%k2tacc>4g1^AricJcLB& Y5et3!sT)A)_*pC4t%-Li;eH0JcLB&JcN.X$O$nM(HQ,dWO'+I^&>\N]s+2eE)88)r;l3aJcLB&JcL]/ #QY#1#72+f/j'4i*tSR0!.k3&!.k34!"&i7%1t0iGF,,)Y5YO1Xf\[sN-&8g-P6FZ!K[;5!.k3&!9O7i !<`N2#o+R94u"/k"KDHR!.k3&!.k4:!"B&:%1t3lGEebtWi2u!ri-3nMKE)h-P6FZ!QP1l!.k3&!.k3& !.k3&!.k3S!"T,O@[=:BhWEt]jP#J\)?]%#JcLB&JcLZ.#6Fu2"q;:f,m,5'$3Q"_JcLB&JcLl4%0Hb? $n5&!S#N[']t_;h^V@IjXe1Sh6luL0!K[;5!.k3&!9F1g!WrQ.#nRjk((UWPWW7VNJcLB&JcP*:$3LD8 #Tl<CL6nR5qlL(#Ru;Mn2&?/m!!1+?JcLB&JcMqR!!<-GqW*>]4l"5s63!.k3&!.k3X!"/l3#72M> AqZG?Vl9Qp#H4DbM0N,\(]FI9!UB`;!.k3&!.k3&!.k3&!.k3.!!`fhA;n(Rk2lp2k1cnV73;Sg!.k3& !.k44!;up'!s8Z0"9S]+WW7VNJcLB&JcP*:$NU80!ZF:8M4U`S^&>\R]t:_WVLqnt!s/K(`rL\kJcLB& XoSJ&rrW3&rWE9)!Wh6[JcLB&JcLB&ZiC(,rW3<=0iN1NRA?q]XU1ntPAWf1!s/N)lMuM:JcLB&M?*YW rrW3&rr`E,!s/LX!.k3&!.k34!!!'!!XTPr<-3n]TrP/o%BHP.WM>uFDFYcN!WiCa!.k3&!.k3&!.k3& !.k3&!9F1a!ZF:>VqV+3"l@A$LKY>,!.k3&!.k3&!.k3&!.k3&!3cG/&hd%"M4^u`^AbkU^:_"bY`if` &I\pJ!UKf<!.k3&!.k3&!.k3&!.k30!!s)[5$W2fSuf&srN-F,Vk8B</e&'j"9FVbJcLB&JcLB&JcLB& JcLB&k5Y\s,sYaXM4=LC%]ZP-WhuP\Hrhs1#mLM5a8gelJcLB&JcLB&JcLB&JcMnQ%g3e;J&gO-jQ,:N _lA;9!p0K7!.k3&!.k3&!.k3&!.k30!!s&X2c+LTVmsFR%_f]m]tCn_SpXEb*YSk]OT9t5JcLB&JcLB& JcLB&JcOs6#RMA!5@&Q!WiZ3%%'H_8WhbJa5p$gO#6MsHJcLB&JcLB&JcLB&JcLB&YQ+n7)(\'[G`ns' W"#c*W2c_gLM'!t(Cp`Pli;V;JcLB&JcLB&JcLB&JcLT,"U$#S[+sLDiT0"QcGQ;>%#Y+;!.k3&!.k3& !.k3&!.k46!#Q"V,;E)DT!Z/D]t_=q]tCnSNGM$<+:\Io!.k3&!.k3&!.k3&!.k3&!3cG."qMRu6"c%M riH1'rN-@*Q$?Ch-5Hpili;V;JcLB&JcLB&JcLB&JcL`0#mUtZ-:DL%TrP%$W2Q_pWiDnYGZZmO(CC5+ !.k3&!.k3&!.k3&!.k3&!9*tg$pUE9gYUrNhV6Vs?696d!.k3&!.k3&!.k3&!.k3&!3cG2":>YS2JA;Y ]Y(qlrkAcR]s*uW?q)[^"7-#>!.k3&!.k3&!.k3&!.k30!!rc5$P4deI\3dF!3H1%$EgM4Sqq2X2Bi\7 OT9t5JcLB&JcLB&JcLB&JcOs6(^('N&M$n0S>rTfW2lqsW2c>ACf!)9&-KuRJcLB&JcLB&JcLB&JcLB& WrNV2.#Q4!gu7DVio/XF3Y:HSJcLB&JcLB&JcLB&JcLB&MuX.d"U>A]<J.*S\,j7UrP&`R[&91:>s9A8 !s/Lf!.k3&!.k3&!.k3&!.k3&!9X=h!sAc4*(4Y+V5g]qXU:kgJ7hM/('F^@!m:Rq!.k3&!.k3&!.k3& !.k3T!"/l3"UH/<DNCKgWi,fr$`Kb^IV2A0(BagA!q-,@!.k3&!.k3&!.k3&!.k3*!!<g7S[8F@h>QI= hP4=+%#k7=!.k3&!.k3&!.k3&!.k46!"/i1"U6#9Dig`t\%M[S%)'0TUm?4%/.;^c!s-UGJcLB&JcLB& JcLB&JcLB&YQ,"3!sA`A2-P?hSu;If$`]h\JRUkg#Qt84!Up)@!.k3&!.k3&!.k3&!.k30!!r]/"9]N! >C)@!!MlaoWskr(Ru`)/66cd>"9S[i!.k3&!.k3&!.k3&!.k3&!9!n]"!ginXk*I5"l?\>;D&3n!.k3& !.k3&!.k3&!.k3&!3cG2!<N?+'f/j6OJ8tkr4`WP[]l`iAi^P4#6Y(s!.k3&!.k3&!.k3&!.k3&!/pma !WiH,&1BqUH]J0!r2gC1Y,@nYG>g(&#R(>4PlQC9JcLB&JcLB&JcLB&JcOs6$N^A3":utM@sX-)WVrk+ W2cV_Q$61[%gW=A!mCXr!.k3&!.k3&!.k3&!.k3M!!ENP9o$jhjp'hgWeY+*!pTc;!.k3&!.k3&!.k3& !.k30!;up%%4",@GE`-.\bs2M]tCncSU!^D%giI@PlQC9JcLB&JcLB&JcLB&JcOs6$NU80!XTf"87I(: Wr/t,XKJS&MISU[$O6e9bQ*4pJcLB&JcLB&JcLB&JcN"T$NU80!XTi$8Rm47V>[G'Wi2qqVMJbD'FG*K !q62A!.k3&!.k3&!.k3&!.k3(!!*<S!GB4Hjp'o%d)<1T#`et;!.k3&!.k3&!.k3&!.k42!"'#L.R.3k TsVMH^AbnH]a(Qo>V-s/$3SKPJcLB&JcLB&JcLB&JcLB&X8iJ0&g/o%D2b:gXUD;6XK@n28g>)\#6XGq JcLB&JcLB&JcLB&JcLB&L]@S`'-K&)D?bulVl6PoX8]%'Wg.U!,8Ldq"-ik<!.k3&!.k3&!.k3&!.k4- !"BN0UYXecjQ>IYgtQHY`W1SjJcLB&JcLB&JcLB&JcMkP(^:Qn.n4NCY.;3Y]t_=r]tLV9G>C.D&d7\( JcLB&JcLB&JcLB&JcLB&L]@S]%2C!E>nVXWWiiG*Xfee.XIb#Q4t@Q]"I/t=!.k3&!.k3&!.k3&!.k42 !"8u>(EtnHI[R(5Wi2usW!AfC@mDRc%g:)VJcLB&JcLB&JcLB&JcLB&VZ720.X/eUgYV)PiSN@>0aI"E JcLB&JcLB&JcLB&JcLB&L]@S\$5".1>QohW[(*`]rkAcR]sOPoE`G%=#*f1?!.k3&!.k3&!.k3&!.k42 !!r`4%2:-]DigfqrN-F0Xf\F]G[<cg('Mh]JcLB&JcLB&JcLB&JcLB&X8i\4#RqIp9lH)dVQ$MpWrAq% ToOA)74]2Wn,S%?JcLB&JcLB&JcLB&JcLB&%MD[1[)q(bjPo.TSPUC4OT9t5JcLB&JcLB&JcLB&JcOg2 $N^G8$6;TYRBEm,^&5VM\?;NeED._bbQ*4pJcLB&JcLB&JcLB&JcMkP$N^G6#8T7+KUej<XSo7,Y,\(Q HX/`R"n2MD!.k3&!.k3&!.k3&!.k3,!!NE,":#]'&n-B[Tr+ijX/`1uVOEEh?9TD6PlQC9JcLB&JcLB& JcLB&JcOU,%gFn8RD%>:k2bU_[WtCh"j$ar!.k3&!.k3&!.k3&!.k3L!!`uj@#:V[[(Q=O$bWjLUPWA7 $j-P3!V?AD!.k3&!.k3&!.k3&!.k3(!!*EV"\s*!S#!4bXUD;-Srn%g-j]tW!We\hJcLB&JcLB&JcLB& JcLB&hZ*lg.8Y&ER%^PXWsbr$RZDJc-j]tW!WgXJJcLB&JcLB&JcLB&JcLB&V#UW89ld#Sr8n.*Vg25Y m/V_<JcLB&JcLB&JcLB&JcLH(!=U@[8T0HWXh"AE$bX$VY*X0!*tAV^!gs%?!.k3&!.k3&!.k3&!.k4. !!roQ3a-W^S>r`prN-F,Un30E3#2i+"9QpMJcLB&JcLB&JcLB&JcLB&VuRY@+?WkMLRG'=W2co!Wi)PZ J6t>R$4$b9oDjICJcLB&JcLB&JcLB&JcLB&&-)eN5BXNrioK7af"%2o0F!^@JcLB&JcLB&JcLB&JcLB& hZ*rg*A^H,MkdYm^AbkT]tCn`UOuf+*Y\taciAXtJcLB&JcLB&JcLB&JcM_L$3h7o5$2rhUogc%riHO1 Whthp8L>/_#Qs]!JcLB&JcLB&JcLB&JcLB&KE)#W('Q*O=EKRsrhp:+X/N%rU5a%`-5R0u"IT7A!.k3& !.k3&!.k3&!.k4*!"K&L:oE1/ioK7VbIOQH'$:3+!.k3&!.k3&!.k3&!.k3L!"9#C+>69.R'F?<^;%G^ ]a29QPAiuC*t\\K!.k3&!.k3&!.k3&!.k3&!/(=Q":YMM,WT7bT_khuXK8RpIU"cU((CD7!.k3&!.k3& !.k3&!.k3&!8db]":Z.n4(3`3rhp:+X/MtsWgS6?3$T4K"OI.#!.k3&!.k3&!.k3&!.k3G!"K2gN8EFM jQ>=Sg<Ogh"Rc>B!.k3&!/:LP!WE+R!.k3&!.k3(!!*0-"V)7s>`>c`^&,PL[%W(V5V!WTR/hg=JcLB& i;i]TW;qMMJcLB&JcO[.$NgS?&0OSgR]NTmY5GC,Ul9._1*@/3ciAXtJcLB&WW;krhuJ?/JcLB&JcM_L #Qk8<&KjejQ`C%`r2U'rMJQ!B+qXtM!.k3&!.k3&!.k3&!.k3&!.k4L!!O<\gYCZFr8n'U7M(daJcLB& JcOm4rW*9+!sJo9#6b21WW7VNJcLB&JcO[.$N^M?%j=VkS[5i;^&5VQ\>bdA?9okG!s/K(e,Y(#JcLB& XoJG&rW3<,"9eu5"9S\`!.k3&!.k3&!2ol)!X&c:(d);bUSt6jXUD.qJ7hP2)[HNI!Wi&rJcLB&JcLZ. !!3'#!sA`1#6P,4!s+,VJcLB&JcLH(!<NB1#RVG5AVZqTVlKZq$`92=B219(#m151!M'4B!.k3&!.k3& !.k3&!.k4(!!NZmPHW!\r8n*gA1S,4!.k3&!.k3R!"/f/!s8`8%MB9Z"TdQ^JcLB&JcLB&VuR2+"9o2K 4_BVJY-bk>^C.WWUR$:01(j]l!Wi&rJcLB&JcLZ.#6Fr/!sAl:%0HtC"9O;XJcLB&JcLH(!<NB1":#Ml ;g"1lUosWt$`fn^J7h>!%0Qb7!M'4B!.k3&!9F1g!WiH,":,>F$4$b9WW7VNJcLB&JcO[.$N^G6#SAai FH;i`Wr/n*VjrftB1F?Z"9S]+e,Y(#JcLB&JcLB&JcLB&JcMMF"TfW@GGE@Zjoi\]<%JFI!.k3&!.k3. !!`Q-"9f/F(ENYq&.&Gn!.k3&!.k3(!!**%#m1>@/PpSOTs)$)^C.]aZ)X%,65Tn1!s+qmJcLB&JcOm4 $N^D5":,GK'bUlY"0)?Q!.k3&!.k4.!"/f/!sArU5@AhtSuV[i$E9\dIp+ZA"9\f.e,Y(#JcLB&XoJh2 !sA`4%1sBi$jQmn!.k3&!.k3&!2ol*!<NB,$6qiFHAe5hr2U4*VOa!$>;Qur"9S`#!.k3&!.k3&!.k3& !.k3&!.k4K!!EKO8:8,Kjos>@N+XUBQN2U;JcLB&jT#Yi!sJo>(*P+O'at2E!.k3&!.k3&!8@JY"s5s3 Ga#&6r4`WQ]t:hRJl!Nq"p4qV!.k3&!.k3R!"/i1"9f,E(`sV,#Qs#cJcLB&JcLB&U]:W&(+r0gI?^Z, XU;/3Wg.Ec('XmD!r)bI!.k3&!/^a]!X&W0$5"-u!u_aX",6f-!.k3&!.k1W!!!-<0M>u)P,%rU$`L)) Vikj^(C('G!hB=C!.k3&!.k3&!.k3&!.k4&!!<NT>cR_a"l@tT\R#im!.k3&!.k3S!"8l1"ptbW.6:$_ -kljD!.k3&!.k3&!2KT""VrXV?%8?Jrk/?H^](nP]<76/3$/kD"o&(L!.k3&!/gg_!<WH0#o"I53WguU %g7UeJcLB&JcLB&$NL/0&L'&)Bo&@_XSf1,Y-"4@<%Jdr#R$[uJcLB&JcOp5$ipG5#72(e/j(g0%g8m4 JcLB&JcLB&gAhK^&L02.Bni+Wrhp7+W2Q_qR<_gb(D$lUe,Y(#JcLB&JcLB&JcLB&JcMDC%LkIPgYCZE k2+kAa`ep1o)O@BJcLB&MZ="`"UPVO-U(OJ"'Rc.#)3,0!.k3&!.k1h!!!*3*@sKkNN'M%]tM1p]tM(a SUFU$-l*)Z!.k3&!.k45!"8l2"pkbZ0LT&7/f"Si!.k3&!.k3&!8@J\!t,kg10/XdX0/Q$XTtVWBLXQp &I-_bJcLB&JcMtS$ipJ9#nJ(379W89(Bi[sJcLB&JcLB&U];57$5OjC=*Tt-WiE"tW2HYqT8%#L/ftZ0 p],mGJcLB&K)blRJcLB&JcLB&JcPWI%K[_]`mEJsjPeqLer`$&QiM^<JcLB&jo>ej"q2+_1fA=PG#'Lm WW7VNJcLB&JcOO*(]jsR(FE"-Tt%YG]t_=r]tLnPOEFYf,7N'%JcLB&JcMtS$ipJ:%2:9X?$9U>*sU[( JcLB&JcLB&U]:`'"q)"_5\Q+TWil6$#H*c4?q)ad#l"CO!.k3&!/gg_!<`]>'IcFVFTZ)<+:!W$JcLB& JcLB&)?9a="ptq`6>27QVQ-SpWi2koUl]n27kbhfSH+6AJcLB&hZ*]])[<2?JcLB&JcLB&eGp'f7^'_T gZ7GShVG;;,R2TqJcLB&JcMtS$ipSD(Eu4\M5-)A1CN.AJcLB&JcLB&U]:c'!sAf;3c(+g\%03M^B_?S ToO1k/e@^WJcLB&JcL]/#Qb/;&K*E*FH?TN;()^)!.k3&!.k3&!"Ao.!<WH-#q]81USk,nr2g4)T8e/' 5U-Z-!.k3&!.k45!"8o4$5".6=*0IJ;^_pO!.k3&!.k3&!8@J_!<WH-#qf>1TVSKcWiQ-!#H+&LH!`l` $If'-!.k3&!3#r#!ZFlXh>i--JcLB&JcMAB#6HNAXi/rSk5OEE`e$`(#5%tJ!.k3&!/gg_!=05S,=ZR2 Vur5s2@P<?RK3<f#6G#4#RL\<!qZJE!.k3&!<)s+!<N?//6RS"XL,RQrP&`Q[&TaTAj71<"9S[u!.k3& !.k45!"8o5$PXO==aHB_<%80R!.k4D!"&`-!WiK-"pP25!gs%?!.k4)!"&c/!sTr>D3(-^X8K(-Y,%JD FAjn."9\f.fDpL'JcLB&Y5et4"q21c3a-fmHr_a(i;eH0^&SK@!<N<*"9o)6"9QpMJcLB&UAtZ'!WrWO 8SjBQTr4jfWsbr$QAK]_1)'io!s8B#JcLB&JcLK)!WsQQ!@S#&!.k3&!.k3&!;HNt&5I28`o6mY"jioY 65fop!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k4E!"Ar0!WrT5%i#ik$3^G2RfJ$?JcOL)$NU80"sZNL LmtER^&>\R]t(JNRs@jZ%grRDfDpL'JcLB&Y5et4"q)+a2d(HmIT.d&i;eH0^An]D!WiH,#7D(T$O6e8 !R^t"!.k3G!"&`.!X'Au<-!b^Vu3Y)XK&%aLLi^m$O?k;quD<KJcLB&MZ="a"q21c3a-fm"+4-"$&/GL !"Ar1!WrQ1$4mdX#Qt//p&K[EJcLB&rW!<,!WiKC2HFgNQDCJXWsbr*TU1=D66HU@"9Y=tJcLB&JcO^/ "9TcS-j$=IJcLB&JcLB&e,TXR(H?65hYlR?gUWMe3!n"5JcLB&JcMtS$ipVF)'_UgNi8.T2@SOEJcNOc $NU;2!s]AT,UaWE#Q=bQ!.k3&!2BPn!=/fE0M5u3T<c0/^C.`f\[ADqA2bD>$O-G.JcLB&JcL]/#Qb2< 'H8u6HBnY^<%80.!1Nrr!<N?*"Uc"`*Yf+frW2`nJcLB&JcPcM$3://";)n@<,[\iqlL4.Whu,,;(E=i #R$h$JcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcPKE$NU;2"9f2J*$5n)"o\Om!.k3&!87D\!<E6)&LKV? E/C3crMp=(WhlGTG>g%,%1!*h!.k3&!.k3M!!EBH?ml*6!.k3&!.k3&!1X#l!Z"4ehYlR?h9`s9A0(@D JcLB&JcL]/#QY2B)'_UgNi3&DBJp9R!1Nrr!<WE-$Pt*F3%,UOrW2`nJcLB&JcPZJ#QkPY00sK>Y.abJ rk/QDRs%7I)@m%G!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k4E!"K#3!sAlA)^m6Y&dSO>!Ls.A!.k4& !!iZ6(*kY<I@RD;XUD;6XKA:R?oK#=$O#)^JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcNOc%KQY7":,S[ -nQMS#Qb#-df=t"JcMGD#QkDM,rAeQRAg(brhp+&TnHl9*>Ah`quD<KJcLB&K`D/V+CG3u!e^Q*!.k3& !.k4E!!<<NGMN/Z#3+LpgRpM1S,e-@JcLB&jo>ej#S7ju7W+6bP@ui_WW7VNp&Gd-!WrT7*A9fT4tn2t '+YKX"p>#/U&]cFJcOC&$NUSJ+"CBFUq+.O^&5VO\YP$h4t@NZ!<LmSJcLB&JcMtS$j$V@'H8u6HBs"Z .L=u5JcNOc'EJ7;":,bg2*EW=)\EPf#R1D7!s.'TJcLB&TE#6!#7_Ll7W"6eq5jt'O`F2N+;>(^!WE(N !.k3&!/gg_!X9&I*'.8KP6625.g^q1RfF-'!X&W4(*tk'0d[kP%giUJ"9\f-r;_ELJcLB&qZ%N9#7hUn 7rFBaWi2krX/i8#V2oUm0d7;;!<JqqJcLB&JcO^/"9TcS-j$=IJcLB&JcLB&d/XUf;S^l<hW3h]jQ+*X (XiA9!.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!5ALL!<E9)$mIZ/@pE#/7QW7K)%m>^!W`>V!.k3&!2'<# !<rrH*Cb%7YdV*T^AYeO]<.KM?plFUrW3$!JcLB&JcL]/#Qb2<'H8u6HBnY^<%80.!1Ns*!<N?*#T50Z :e=&=2D-6o'Fb<N!W`<%!.k3&!.k4J!"&c1#nIe0?%AQFWqrh(S:kTO2'38/!<JtrJcLB&JcOp5$j$VA 'HB/;H'<VV.g`3UJcPKE('+I=!sohs6rHZH5WCDC*#&ni"9JT)U]>uHJcOC&$j$P<%i.-2J"*41Wi5ot $`^1oJn\%>+:SAQ!S[U+!.k3&!3#r$"!Cu"!oF!0!.k3&!.k3>!!WTXJuZ`>iVqsBjN2O%%/9gS!.k3& !/gg_!=05S,=ZR2Vur5s2@P<?RfNEg&HW@f6Xt=cG^4RI;EufX'at3D!<<+O!.k3&!;ca)!<`W9&2[[H UTUu7^&>\O]sFW'JR1;P!r`4s!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k4E!#GY:!WiWI1f.Xk@qB.L 5r'Z&&-r@>!<K"sJcLB&f)Q0Z"9f&=.SF]@S><1_XTu#)P_*^F/.qj_!!1jTJcLB&JcMtS$j$VA'HB/; H'<VV.gb/7JcNOc(BFO<!XTo+;Ia6KAn4n01*[YK#m150!Sd[,!.k3D!"8l2"UPSd9lH#ZTr4jfWs>Yt P(@FE/J7s`!<E1P!.k3&!/1CS"!CtP-j#&%P5kak#RLeC!qlVG!.k3&!;$6p&l*YD`8:IT"OiZA0bBoV JcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcPHDrW*Q=.Sau?OI)Q2NH\Yq0d.)1rW/hqJcLB&ec6'Y!s8]P 8TBrhYIM:E^C.`cZDsC<8KS$9!<LsUJcLB&JcMtS$j$V@'H8u6HBs"Z.L=u5JcNLbrW*Z<+?j(QH\.*4 G[a<&-5[*m!WiDX!.k3&!1s6!!WrN-)`h8RO.N>Pr2g@,UR?pI3Yhf!!W`:Q!.k3&!/gg_!X9&I*'.8K P6625.g^q1RK3<f'F>mI??CLELP^4b9f==9$j6V5!<@]OJcLB&q>^m)!sA`H4C3DpR\m%^Wsbl'T9b4A 4;S)$!Wf+tJcLB&JcO^/"9TcS-j$=IJcP6>#6c"k0gA)J#FkdG!.k3t!!NNS:40>%rT4:<]od+l#M&m, !.k3&!3ZA2!=05S,=ZR2W0:mQ%,h2<!4r4J$ReVdM3js<Z(mD,@8/^/'b:][#6b54!T=$1!.k3?!!a?" >C;X1Zb?=P%)'<a[&]$h/IMgf!s!oQJcLB&MZ="a"q)+a2d(Hm"+F3!#_i>G!#,\\4'Q`WO.)`'HY#u9 /0#3/#mUV9"9\f.L&cf*JcPKE#SJXZB7>u=XKMN($EgD)QuktG#R1D6V#Z)IJcLB&jo>ek"q21c3a-fm Hr_a(WW7VNnc0L4+?WnLJ;ondNd>;75:mof$4-tA"9\f.WW7VNJcO4!(DA>mB7,c5Wi2qtX/N%rTp9^o ,7"JV"5Em.!.k3&!3#r$"!Cu"!oF!0!4W"7!uN^dE/[U=$If'-!.k3<!"KDc=-hS"jQ,I[d(,oc)YsGc !.k3&!/gg_!=05S,=ZR2Vur5s2@P<?QN.^++#m8?M4LcVXeM,8H"^5I3%lQs!u)1M"9&=X!.k3&!;6C/ &h$(PI$^qH]tM.p^:h.hYa08t+r:^nV#Z)IJcLB&jo>ek"q)+a2d(HmIT.d&WW7VNnc0L2(+_jZEep3^ S<&2=@oPlT/0l/L%g`FBrW0,$JcLB&dJsL]+#HW'Jsre=XU;/3Wh4iJ2Am)6"Pa!/!.k3&!3ZA2!X9&I *'.8KPC-C]$/kl9!4r4J#8\s\??1dfU7%!jE+E!>2_?<r'b:TT"9&>^!.k3&!1Ns*%3RK%B7ZDJVl6Po W2chpS:Fp))%d2Y!.k3&!.k3)!!36F?i_YWKE.29$3V2-Ei=+T//AKmqZ)3JJcLB&nc0..0lY1hhVmPS gW@!]/d7mJJcLB&JcOp5$ipVF)'_UgNi8.T2@QScJcP?A(^:^'4&pNlXgtgCWhZ&FKm7<475?/,%L)h4 XT3qQJcO4!#7MM#4CNu?\Gj/M^V@Iq]X=Gc?90MQ%,:i7!.k3&!3ZA2!X9#H)`LoGQ@;d_#iPc8!4r4M ":uV,6t:h=Whc5SOG8+#@oYrU-Q<a,"9JW*j8ac3JcM8?(^Lfu/l-GJWiW;(Xfeb,Y,71r9J%>##QTGV JcLB&MZ="a"q21c3a-fm"+4-"$&/GH!#,PI+"p&oJ=37-S!B"eH#I7q7lMh#*>Ah`!WiCZ!.k3&!;6C/ #o"L9;/hSnWi2krW2Q_rU5Nna/g(i7V#Z)IJcLB&huEl^+CHT!VuVDLm/RP$0Qk1+KP++?+qb1`UB#lG JcO$q%2MjMgYCZHinW85W(7QQ!.k3&!.k3S!"8l6&/c]^DN:ZZBJp:X!.k3_!#YnJ(F(nQOKQ7/\[f5U Y,J%WI:c24-PZmgrW2*\JcLB&RfF90$l'gPFdobN]tM1q^:h4kX-@g.4XCX>JcLB&JcL]/#Qb2<'H8u6 HBnY^<%80.!1*["":5YZ/6$tdXfe\(W2#lJNI>J=4U3JW&-`1;!<J&XJcLB&p&GI'#nRh0@#(P\XKAZ( XTtnoIptf!)[iJBJcLB&JcOp5$j$VA'HB/;H'<VV.g`3UJcP?A*!?Q[*%b3:RB!9bVkp#RP)F[#<'MoT &I&:<!<K>'JcLB&dJt'd#nRn3@>(>SWi)eqW2QVlQ%!120HCSW!.k3&!.k3M!!EBH?ml*6!.k3Z!"K&S GLjsU\Z_->?:ZCO!o*d-!.k3:!"K2mUX%WMioK(Th8X.Y#Q+RR!.k3&!/gg_!=05S,=ZR2Vur5s2@P<? QN.6m"q2+i<edXR]a;Ef]tCn_WgSKS$W0#7'atES"Tni.!KI/3!.k4E!"/l4#7<+mNj#t)]tOBZ#JIF; N,_]M(]=B6!.k3&!.k45!"8o5$PXO==aHB_<%80R!.k4A!!iZ0#Rq_AE1*g*XV.e:UmZmQ<^A>Z&-rLE "9S`-!jVfX!.k4!!"&f2"U?;KHCh.<XSf1.XJ(Yt>sThM!WiB'huJ?/JcLB&Y5et4"q21c3a-fmHr_a( i;eH0])WrU":5MW7rXcoW2HSpW2cbhQ%EmT6SKSn#mUV:"9S],kl?;8JcM8?$NgM8#UN>nR\m$`W;Wb& Wh,/l?:-+Q!WiE(!JLN*!.k3)!!36F?i_YWKE.,7%Mim7gYLiNgWR.*B/L8&JcLB&JcP9?"X&3"a4fDK jojG"8fIo-!.k3&!.k45!"8l6&/c]^DN:ZZBJp:!!.k4A!$D=H#n.eFGb)4O]=ktm]Xt_YVOEEgBi[Y\ /L;AN%LNC=!OVoZ!.k4!!"/i1"U?>LH(Ct@\\7sV$b`sKSr7AR,6e;R!oO'1!.k3&!3ZA2!X9#H)`LoG Q@;d_#iPc8!4r4;!X&]5'foi^UoO?p'We=,PD+-j<CJer,9%@.$3p\8!<MNeJcLB&RfEcs!sAcH5%TP< UT43n#H!oGF]^O@"9J].!egW+!.k3/!!iW1$ks[B>'Z;6Hr_a(L&dP?'ESCB#o,R6LnU]FW2lhrW2H/I K6.T8=%>2#,97L0$3p\8!<J;_JcLB&p&GI%"9\lK5\>b:T;JRcWsbl#QA9Qa3#i&(!s5G%JcLB&JcO^/ "9TcS-j$=IJcP-;&.(Xq[`R:dh:BWWMHVnW#m.%*JcLB&bQ%eQ4)C%mg\p7<gSf!S)Zn^nJcLB&JcMtS $ipVF)'_UgNi8.T2@SOEJcNC_+TVZK#S]F9OK,Op]YD.n]Y(b[WhZ&FKm.667Q)Y8&d\X=!UTl=!.k3? !"/f0!sKZ.@=t#I[(Q@P#eddTXIk#G0+7ph"p4m\!.k3&!/gg_!X9#H)`LoGQ32S8.L:b/QN.Bp!sAf= 03*@eT;\pkXTYf+Tp^uML3miJ<C\tu*u5:irW3'#OoU(6JcPKE$3C;3";NUdDM=CQqlL7+Umd3W7jJ?E "9S\)!.k3&!.k45!"8o5$ks[B>'Z<Z<\"KV!.k4A!$D=F"9oAj=*^($V5gSpW2ckpSsGCiH#I1o8NJCF ((UZL!WW80!.k3&!7CiT!WrQ.'erR'K9N"/rMp@*VP'94CIofY#6Y,0i;eH0JcLB&W;m&'+CHT!hZ/6. [/^jA,%le:d,s3>f#t=ZCf!&7&dJKt!.k3&!0dHd&iO-gf)=_7hSYXu71]@tJcLB&JcL]/#QY2B)'_Ug Ni3&DBJp9R!1*Zp!<N?*$nth6SZ&j)^VB`\!kPnL&$i=7T9OnC;a2fQ$j-P3!KmG7!.k4E!"/f.!Ws)e 88!REYIshK%)0Ec\?M364VA/0"9GM&JcLB&JcOp5$j$V@'H8u6HBs"Z.L<$SJcP?A,QRrK!sp5CBo&(M Wi`G+XfS\+WhuJZPDap,=@4ee'aXsD!Wf_0JcLB&dJsXU!WiH6+urV>Ln:dIXUD51W1SQA0+A3l"9IH] JcLB&JcMtS$j$VA'HB/;H'<VV.gb/7JcNC_$ipD3":6DHBnhhDVlTcp'<7t-U7Ra6M108C75?)&#m151 !UTl=!.k3?!"/f/!WrrX4&p0QR]?=e#cOc$V4<!:0Fn6l#6Y'^!.k3&!/1CS"!CtP-j#&%O8o_!4(+2h k2P7Sgsa9OW!8<'>"'nP!f6o/!.k4>!!E?83df-Ljp'eu`34qG!i,gJ!2'>P!La&R!p0Oo!t#Y[,tDm6 W0:pS%0?U4"-3QV"RZBt$n>"mOJ/hfpqIBR]XbPVT8[bl5q3TS"pG)1rW0S1JcLB&c2\(X*\g-!NMsDc ^C.ch]t:%f9H=iW#6WocJcLB&kQ&?uh#ab]%KcqF'cT,9HBiqZ.gZ7Yiral8f)st7#7)G9?@.X&WqNP( Wi;VKG$RQm+:n\Z"9\W)!!2TiJcLB&QN.9s'dkq@Ga5;3qlL%'XcR3Y('>*S"U!]bV>u2J_uROQMZO.d #RqLh3a6lm"ajB&#m(0a"82hg":#5U5[SeoR]#q]&#cM+VONEb?:Qgp&Hr:?"9&?%!L<_;!.k4A!"9/M -TY=QP,>1XWiN0!W!KA_BKd1C#mCFi!m1Lp!.k3&!8mh["!Cnu!iQ*N!:'Uf"sQN^\bP:lhU]WMJjgU^ XoO%RJcNpn%K[\X_rBb<k2bLXgrWA$gAlg*L&h/QpAt'kli[+fnceXiq$6^$q[)g#q[<*+pC-j,q%!94 q@NH7oFgs5q@rc@%2L$500!'XOJJ+]8L,)K(\npE)>Y9N)uLZO*;^cP*r6uU+Sd2V,4m,U,l8na-M]%] ./>=g.fV$s/,Cgm/c.0r0D[Bo1&<[&1]'!65$E)fT;o6.pqIKU]tCn_X.G;uCKX(^.jQ)K%LNC=!V?AD !.k3;!#,_S,;N/ES$Tc@]tV7r]tM(YOD[Gg1aj:Qi=)R`JcOa0q>p-gliZ,Jq$$Ksr<Dftlj31hq$Qa% lj`b#q@EE6#S@gl,V2DoH]\D[?90&%&c!(2'_3"9(AS^;(ASg>)=&7:*;^`P*qLKF+Sm;R,P!,W-LrP] ./PJ!0M#SqMj^??poP=6Xfe\"R#-'#=@Y7t+<)%+$3p\8!<JSgJcLB&nc0L2&/uu_B8E=cXK8P+Y-"h/ R<r'o.NT<3i<dX,JcNIaq>p-goE4=\mf`Fiq$-Hro*FC`o*Y=&o*t^1m19(*%1s0g*[NC.@X4#`?T]>) &c!+3'_3"9(@2k-)>kEC*;^cI*r6uF+Sm;Q,Prb^-1iP[-hJha.0hS!@<[QnTVqdhql:L2WiDtjQ%sTs =@kG"+rh=.$4$b9!<Kk6JcLB&c2\7X&0*)dB83(ZWi2ksrhp+&Q?l^m.3B93i<b)9JcLB&W;m&+,$-5u hZ/6.[/^@7*C=D&`;\ipjpBo!cGZAi59C:8k5^)6JcLr6%gtF^bM(b1k2P7Sctjs0!.k3&!9+"T!WE/n "8rB""o/B##Q>#.$2Fr,$hb#.%K-e8&,[";&cWLB')`LB'_rLD(B#'J)#P9N)Z1QR*<$uW*rR2Z+T3J` ,5EJ^,lK%f-N5Cg./bUn.fCms/H.4./hSe85"87YI?UE.Q?le!rA"7+rA4C/qDS=3rAaa:rB's?rB:-D rBL6GrB^BKr^6ZQrC-NOrC?iXrCQr[rCm/arD*>fr_WGg!)`\mrDW\qr`8r!rE9)&rEK/(rE]A.rEoM2 rF,_9r+,b;rFZ"@rb2:FrG):HrG;FMs)7^P$#t0CQD1Fc\@fQO^D+Gr]tCn^Xe_GJKm.678NJ@E'ak-C !La"?!.k4A!"/r='d,\SNiTV!]Y4<Z$,4*XTo!\k755nC*6J85!58I3!W)rk"7HBj"oAN"#65&'#l=r, $MY#'%K-e8&,?e6&cE@<'_rLC(B#!D(B#*I)>+sF)uq&Z*r-oR+T<S_,7PnK0K)'mBRPqlAP+U&qBu4i q'u7lr@In!q(DV!r\4:*q(he'r\aL0rAX[7r]0p<rB's?rB:!@r]g?Hq*FsHr^?`Sr'pWTrCHfWrC[#] rCm/arD*;es%rVjrDNSmqGdGorDrl!rE0#$s'#A*rEK\8@W-dWRA$R^XfhN&(TsmAY,\:eOGA1$@T>r[ /Kbf?#Qk,/!PSPc!.k3r!"&i8&/Hs"HC1V1Y5YO1Y-"duN-&5o2C93u'nQF@!;uou!rN,q"7$*f"o\`& #PeYs$2Fr+%/UM,&,d(6&cEC?'`SmC(&f!A(],*K)YkBO*VpiU+8$cT,5WSq,U=Ze0fVBsBRGehAkas+ r[7Lir@.[qq^h[ts"==(r@dt#r\=4(q)%t,rAX[7q)\L:q)nU>rBL-Dr^$KLrBpNOqF13Mq+:HVs%WAb q+glbrDESmr)<DjrDihtqH*JprEB5*rET;,$smC^IuK\bV5gJmWiGut(T=73WhuGVO+_ds@ol5a/g;)C #Qk,/!VHGE!.k3;!#,PB&Jm0'H'P/$Wi2tuW2Q_eMKE&)8N.t4i>&3iJcLB&L&_;W$n"dN/..%1^]<Br pB1<r$O7Fu8oB]ncJddDjS\-Kin`A9]p<\:3$Jt?!fm>5!.k4<!"T,RBr\tqhWEnYiS0;\)?Zi:JcNOc quQcuq?-a#qZZm%rs/Q0rX&K0rX8Q2rser;rXT&A&/"pSq\&lArtPDHrYGMMrYYVPrYkbT!ZW4$rZ;%\ ruh:arZ_7bs!7Ujr[.Ulr$_Onr[Rpus"+1%r\"4(r\44(r\=O21Gntes#9p:r]:$?#!>"24[)%os$-KJ s$?WNr^6ZQr^HfUr^RVm84cWY>[qo1PbFCqE)o_0:Jamb;?'Pn;uTes<rZ;%=oMV(>Pqb*?2e10?iOO6 @K0j:AH-6?B)ZHBB`DfHCB&)KD#S>PDu4MREW:%YErL.ZFoHR^GQ)meGlN'hHMi0iIK+cqJ,XuuJcC?" KDC6#LAm#.M>iG2N;JV6NrG+<OT1LAPQ$gGQ2?mHQi<BORJrZTS,8]RSc>;\Sc,/eU8Y3"[CNo_]tX<W '>D/n]XkV[YcFRlQA'<`755tu"9&>8!.k3&!6tQP!sT)B.8t_iYdCsSrP&WO\?;NgHt5c%i@BK[L]IDT rW<*$q?-?mrrr<)r!3!&rX&Q2r!W9/rXSr=r=Jl=rY#)Br>#>JrY>>HrYYMMq]#DPruV+\ru_.]s!%@c r$;7gq^;Clr@7^qr[e%#r%A"&s"OF,r%e.+r\aU3!&sm:%QQO15=J1@?uLORJSn[\r]^?Hr]pBIr^6ZQ s$crWs%!&ZrCHu\r_!/_r_3;cs%`Sis%r\ls&/hpqc*Sqs&T&"r`T8)r`fA,rE]>-qdB>2qd]S9r+H"B r+Z.Gs(qXNrbhOMrc%dU!d&R-!-S9as*+?brd+QhrHnHjs*jrsqgeZsrdt-%re19)s+^N.r.t<.regZ4 $BCCATr+ilXKAV-poP73XfJItT:(h"JT"gc2CB@O!s/N)o`0RDJcM,;$3LD9$6MWLN1QiFrN-7+Xf.bL I04+Z3@*Q+V>u2JirK&ZquZg!nHAjqrs&?*r!<'(q[3?3q[N?3rt,#=rY,/Cr=o;J!#GAHq\fAOr>bhX q]>bZp`TS\r?M:es!@Ohr[7Ul!%Imtr%.h!r\"1'r@n7+q_J(+q_nF4s#Bs<$9L=35t=XI@;gUP"+Y8o 8,bdR62j4M6iTRO7K#aS8c26Y:&@]c;#aDm;Z9Vm<;ons<rH+t=T2M(>Q.n,?2\+-?iFL3@fBm:AH$0= B)H<@B`)TDC]/)IDZ"GME;jkWErC+ZFo6I_GlE!fGlN'hHN/?iI/ABlJ,FfsJbt&uKD^E#LAco,M#E/8 N09U#U8Oujrhogsr2TgtrhpL1Vl$/XQB-lQDdH'q-Q*?r!WiCk!.k3&!:g+,!sAl:+@U"%S"ZaYX/`1u Vkof>HY68=-K-/k!.k3&!.k40!!WW?.Rl$'"3LW2!r2rr"9AW/p'1F"rWrE.rsJc6q$d63rX\r=rt5,@ rtYDHrYGVQ(`N8jruM([rZD+^r$).ds!I^ms![jrr[[t!r[n7+0JWP^r\a[5s#9p:r]:'@s$$HIr^$NM $q3cpFcWK3akGV1ioL%"%clU*gt'KPTSdVg67rlS[/bdYJcNjl%h2!]Vo7?PjQ,=VYBNMa$f1l8!/LXR !WN6!!rrK&"oJT)#QG)0$2t;3$i:A4%K?q<&-!4@&cNCE',))X'c7]%(Ddo*)&X>2)]Kb:*??1C+!;[L +X/-/,QB%h-2o4k-iPOo.K:mt/,q1#/cRI&0E3a+1&j$/1]K<12ZG`83"J&24$,Pe4Zttn5X7V$6:1Z= s$ZlUrC.#^7n?3D8k_qX:&dug:]F8i;$Biq;cQgur`K2's'#G,rELFM?!^iE?XR8M@q0%[AS#IhE,p/R N0^'%N.,b_DJsIlE;aeVErU4\FoQXaG6iJ>G^+LZH?su<I/eWpIf=g"J:N3%K)UE"L&Zo,M#E21MuJ\7 NW5%=O8P+>P5URGPa.O5QMd*LR/`TSRerTRSc>;]Sc,2ZU&C_aUC*flUSO]^V5C,fVu<RmW<K<%X/`2# !irE(rN6%$r3,t$!3uL.qm6+*"LYYG\$u1CpUL:8rO`!?!PQ/B^%/oK]tM%f[&&t4?UcXa"Te]*o`0RD JcM&9#lt&A6#W'gYdhCE^B;-YZE+.rJ71e'4f/42!94(Z!W<)t"8;ru"oSZ)#Q+l*$3(A2$iCG8%Ls$I &H*4@')`OC'`o-d(&\pJ)#Y?L)uU`V*rR2Z+TEYa,Q&ee-N5Cm./bXo/,h+"/c@:(0/#"6rA+:-s#'a5 #rae&3&s#]4$5Y)4oISE5Q="I5m'JB6q.)Es%!)[rCIl!8kVfN9MJ5V:/=\_;,L4h;cm71@Vg4<M$noY BjFhD>$>-7>[755rEfG1raPh9rFPq?s(M=Es(hXNrbVXQqeuLRr,N!`FEM_LGBa%2s*F]jr-SBj!e,TJ rdb$"r.=s$s+LE+s+^Q/rJ:H0s,-c5!/q&>NK&sYrK$r>rK7,Cs-*JIs-<VMrKdSRR@*r@s-itWrLE_U s.B=_rgs7bTqVF[rM9Fhr1s@irhodps/GUi"KSW*Xf_K'"Kec,XfVN(!3Z4$poP%-XK&+[IUu53,7t%[ !We_iJcLB&n,Naq!>%"iJ<un.XSo7,Y-+b!RY5HP1uU+1!.k3c!<3)u!r`;p"TJZ*#5nf+#l+f*$NCP5 %K-h:&H*4@&cWOC'`AdH(Ao!I)?1WR*<.&X*WR;Z+TEYa,QB%g-2o4k-iGIn.K:ps/H.7$0)mU'0E<j, 1As'-2ZG`93;kl<48qAB55meF5lX.M6N9FQ7/fXT8,l*X8c;<\:&Rfk:f("e;H$Nn<"iA=?XdhoItrPs BjOnF>?b?;?![D8rEoS5rF,n>A7T7_rFZ"@s(M=Es(hUMrbh[QrG_aUs)S'[!-S9bs*4Qhs*4Ngs*F]l rd4]nrdFisrIFlurIY'%rIk-(reLN0rJCQ3s,6o9rJgi;r/^f<rK@2Es-3GHrKdJMs-WbQrL3SPrgX+^ St;RHrLinY#,7ieUnji`qkj@j"K&&mV5F6is/>sspSn7mVuEUpWq`XnWXl&.W2?8MHtH,5,S:.\!Wg"8 JcLB&bQ%qM!>..mJ!?J#Wr8t(W2c_eQ\'!M1uU-?!.k3&!3lP&!Xf)7#7qh*5;4#b"9SK'r<3-(q$-g' rs8Q0!X]8B!"8Z4rXJl<rXf)ArY#5Gr>,AKrttbSrYl%^*?H:E+<^S+%jWDI-7:/h-n6_t/1rP/0`Edg 1,:^E2E!KQ3&ir[4$,Vj5=%S%6:F=47S$'B8ki#T:/Fbb<)cq#=BJa1>[1TA?smGQA7T=cBl%U'$uU$' EcQ;FGB\=XI!kpC&V>UfKSPGBN/s$^OctupQC40?SIqNfUSF`cW2cu%YHP49['[9Mrj`u]]thG$`5K[9 a2uHHbKeD[e(37-gYCWAhW!Vkk5F?GhV-#YSQI9Im/V_<JcLo5"Tp;bMR;.:joj\hZ&ru+2%SREr"SZ9 p_N]Bp_`cDqAT,Jq&K2Nr>tkXqB,JTp`]JXn0@]Rpa,b`pa>S[paQ"gq^_[spal@qo.L"qs"O@*s"aU1 r\XO2r\sg9!]iA(r]L3Dr]^<Gs$6QLr^$ZR6q%#Cr'pZUr^d&\r_!/`!_lEbr_NPjqbdAkr_rhss&T/% r`T5(s',A*s'>Y2s'Pe6raGe9rac%?rau.Bs(MFHs(_RLrbVROs)7dRrGhjXrcA*^rc\3`rd"Ngs*=Wj r-\KlrdOirs+(*"s+:3%re1T5MiEd`SYN+cUn*d0re^Z5r/CQ5rf6u=rfI,Br0.,Erg!DIr0IDNrgEbS q4%;Q!hPsRqk*e[qkF(brhTRhrhTOis/,dnr2BRnri6"!s/H(!ri?(#r2oq#r3,gus0;O.q6Te%s0_m8 s0q^3p::16r4Dd;!58BEn\+e6q7dHS]t1_ZUQ0M#5q*NO!W`=j!.k3&!:Bgl&M[=4Q(tRqr4`KM\[Sl@ Q@j#4B`&D2&FgA-')31;'^uk5(AJX7(AJa9)<`%0*<%#V*q:?B+S[/L,Q&hd-N,=l./PLl/,h+"/c@=% 0E*[)1&Ng*2#fH12?Gfr3<(u;3WD/>48q>B4o@MD5Q3qG62j7O7/o^U7fGpW8Gl'Y9)hQa9`Iie:B"&g ;#X>l;Z9Vm<<#tu<r?)!=oV\)>Q.n+?2S%,@/OL3A,U!:BDuTAC&_uJD#J5NDZ4PeEclVPJVfGROGSL3 EccDGF`qs-GPl^bHN&3hHi&6kIf=ipJGt,tJcLH&K`6]*LAlu+M#E21MYi>2N;nn:NrP1?O8P+;OoCOD PQ$gGQ2d0KQi<EQR/<<ORf8fTSGJiVTDkG[TDtSaU&:\`V#I4dV#R=jVuEXoWU["fX8]1#XT5KuY5YR$ XSo:$XSf1#Y4A\)XK/=qO*Y2(1*7&1!WiD:!.k3&!6P9I%4=SUJ<?J*Y5YO/Y,nY$UQU1F=Q*6W&,Hk$ &bm%0'^uk5(?cS*)#tQK)Y"gB*Ut3G+6apD,4m,O,lT+g-3>MA-iGIm.K1jq/H.4&/hSgT0`Eg)1A`p- 2Z>Z73;bi:48_5?4odhF5lX.L6N0@P7/TLP8,GmU9DhN_:B+/i;>sJm;uTbr<;ont<rH+t=T2M(>Q.n, ?2\+-?iOR3@fKs;AH-6>B)H<@B_uNDC]&#IDZ4P_EHHDLJ;9,JO,&1.ErC+[Fo-C_GlE!fGQN/9HN&9h I/ABmJ,=crJc13"KD^E#LAco-M#3&.MZ8V6N;\b9Nqnb6OSb4@PQ-mDQ2?mIQi<BNRJ`NLS,AcZSXl@D T)bM\T_+rXUAq"gV#I4dVZ*LnVZ3LmVYm@kW;ijbWr8mrVu<OoWq<>&W2cbmT8e,*8MhP$"9JW*o`0RD JcLu7&.L!WAq#f2W2Q_rX/N%rUn7aNJ8SKJ<i,kK!.k4/!:Bpa"8i<%"nr6!#Q>#-$3(A3$i(51%K?t: &H<@@&dT3g)]g1U5#,Ji;EcTO(`F=k)u^lW*rd>]+T*D`,lT.i-iYUo.fLsu/H.:$0ENs`1B'012ZG`8 3;tu=48qDF5=%U76N0FQ7fQ$Y9)_Nd:/Fdd;ZB_q=8l>%>5he+?N4F5@fL!<BE)]GC]J;NDZ=\TErU:^ GQ2sfI/e]qK)UH&L]<83N;nt=OoCRDQN*BPSc5;^U].1kW;imtXo>O'Z2_31[f3i;^&PnJ_uI[S`r=$Y ao9K_c2uA>e,IqtgABY)h#H40h>uWsr9!h;#N=CVZ&qd(#*Jt<!.k4:!"]Jf</S`UjQ,I_g;L+U==t3D !rObK1&Wm+1]0*+2Z5T53;bi948_2@4o[\D55d_D5lF"I6N0@N7/TLL7fGpV8Gl'X9)MB]:&[od:]4,b ;>sJl;uBYo<rH/"=oDP%>P_S)>l7n,?N"70@/XO3A,^$;Ac66=BDlNCB``$bC]/)BDZ+MOE;4GPErC(Y FoHR[GPugcGlN'gHMW!hI/SKlIf4cqJGt,uK)(&oL&Hc)M"uo-Mtr>-NW"n:O8G%;P51=@Pl?sDQMHmI R/WKRRf8cKS,8cTT)P8gTq\<XW2m,-YH+Rqrh91_q4mqbrhKIgrMBFhrhoRjql0OorN#msri?%"qQ9Rr !3c=(nZ_tsr3H"%o<eJ(rO2^7o=48"rOVg:pq6R=rk&6Dk.Lc/o"PUI]t(MSSVV2[3[GC@rW0_5JcLB& aoD_V,X5OZQ)V:-^AbkP]tCncYc++UiK*m^r?h@gr@%FjqCDLqr%7[rr\+4(rA"(&qDA..pbr(0r]'j: r&Xd<r&jp@rBC3ErBL3FqEb'Ir'^KPrC6cVrCH]TrCZu\r_38brD*;er)!AirDNSmpf.5m!*8u!oi_5s r`fD-pg*`&qdB5/q.'>6q.KY>q.]hDrbVCIrGMCKrG_RQrH/'^rHA-`qfr-crHeHgqg8-erI4`qqLJNq q1AX!re16(rJ(9+q2"p)re_)BNfT9eR@^+DR?Wd3NW+t6O8=t8Oo:FCPPp^EPl6mGQM[$IRJiNLRJrZS S,&TKT)G;[T)##WT`:_^U\U_aV>$eaVY[4iW;igsWTU;[X8T-uXn8dpXno-rXo,9pXT5NpXU_M6Un<Nb >!=MW%0HY4!VHGE!.k37!"]DT0hGr,Q`@0iY-"h-Y,\H'T9Y7]iHb2Fr[7Lir$hRpqCMRsr%@q$q(Vb% pbMY%qDS71!''s;qE"R:pcSI<rBL-DrB^?JrBpQPpdP!KqFUHTpeCT[rD<Gir)3MmqG[Gor)N\rrE&ku oih;ur`oJ/pg3f(raGY4rF>e:rFPn=q.KY>q.]hDqJ>tFr,2RRqJcCQrGqdWrH7p[rHS9drcnHgrHeEh q0`'grI=WnrIOlurIap!q1ed%reLf:N/`m]QC=BIS!K4srepc7q2P?5plG33qNCf@s-32AqNh,Irg<ML qO7,Iq4.DSs.94^qk3t^n"K]SrM0@frh]=crMTUkrMBOkq5=1irMeqZq5F=kpo"1mr2]Xo&#cM)TppjX ><je]%g2q7!La"?!.k4=!!`fM1.u5.Q)=PZ$*(#(Wi)_aP)"DCGfg#<!9=.B!q$0e"T8Mr#5JN&#l=r- $N1A3%/:80%K6n7&H*4;')iXB(B#'J)#YBM)uUfU*rR2Z+T*G^,lK(g-iGIm.fLss/H%4"0`<a+1B'-2 2Z>W52uP`73rM/?55d_F5mp.S:/YD9I#ibp>YY2gr_!,`rD*;fr_i_pr`B&#r*'))rEfG1s'kq;rFc(C rG;INrc%jWrH8'_rHSBjs*XfqrIY!$rJ1?/rJ^c;rfR/CrKdDMrLNq\rhKFirM][priQ1'riuF/rO2[8 rOr0Fs24fRrPnfVrQ5&^s3CSirR:bs!7q,&ptP`%s5!P.!o`/"o]?D;e%hl55o0X3!.k3&!6,!M#qKPp iSieWjP8,#Z%lXL-K-0K:B"&g;#O8j;Z9Vo<W6&!=T)D&>5qh)>lJ%.?N+=2@/aU7A,g*=AcHBABDuTD C&VlIC]A5MDZ4SOE;OYTErU4\FoHR]GQ)meGlE!gHMr3kI/\QnIf=isJGt-"K)C8rL&Qi+M#E20Mu8P2 NW+t;O8Y1>P5CIBPl?sHQMd*KR/WNQRerQUSXlAOSa`9NTC\cLU@Y/WV#$k_V#."cVY[4_W:R"dWqrdn WW9'qX8B!iXnAjhYNN.gYlM*/ZNmkH\@K,Y['T_:m^)\qn$Mu"q6p41kIBE[qmuF3p:U15qRud=c+Wtf !kl:]o"P[J]XY;MRY#*?1*I22!<MfmJcLB&P5kmp(FV@LJY0<_^&GeG]`>\I\[8TCiN)l?r]gEJr'C<L r^?`Ss$lrWs%*)[r_!/_r_3;cr_EGgs%r_mr_ibpqc*Ppr`8u"r`T5(r`fA,qd'/,r*]D2qd]P8r+H"B qe?(GrbVOMrbhLLrc%dUs)e6_rc\<cqfr*drd"HhqgJHmrdXfq!.k'"s+:<(re19)reCH.s+p]3reg*$ qMb91qi:<0oT8[,qi^i?qNUiAs-EVLo9]BCqO$lBqjRANopkE@qk*\Uoq22U!MQ:fU]RHoWWK2uV"LMU V#$qTV#.%]Vu!@gWS+<KWr&joXST']Y5>?nXS&^kXQ6J`Y5>?rXUVG5Umm'T;Dom>$NgD1R/hg=JcP3= $3h(a/kKl;Uogc%rN-7)Y,\:iS)Ke55lO(L6N9FP7/KFN8,GmV9D_H\:B")h;#jJq;H$Nl<;ons<r5ts =T2M'>Q.n,?2It,?iOR3@fBm:AH$0<B)H<@B_uNDC]&#HDYnALE;jkWEr:%YFo6I_GlE!fGlN'hHN&9g I/ABlJ,XutJbt&uKD^E&LB!&.M!^&qMY`8.N:`,+NqJJ/O7eV+P5CI>PjXh.QM[$FR.Zm=Re`HGS+W<M SI;$^TV8'TVPU/cTqM@Vo:Y'9qkEn]r1s1cp87Y_qPX1eqka.doV_SbqPh]=oVhValDO]_oW&J#WhuGV K5=LH-lEEq!<Kk6JcLB&aoDYN&Ki`"Cl+kbW!TK(W2Q_rVkKWJiKhLaliQqaqZQm%p]gU#rWrB-rsJc6 rs\`4rXJl<r"/l?q\&lCq\K/IrttbSq]#PUrZ;%\rZM+_s!7Rjr[7[nr[Rmtr[\+'0JNJ\r\FI1r\ja7 "ZSJ&4$Gn.61RAB7K,aP7f#[Q9)D?Z:ARfa;YjAh=8Q+s>5DM#?Me.,@esX5BDQ?>C]J;JDYnDLEr'qV GPZU]I/AEjK)()rL]!&.N!k]1QC4MM[(s,PUQbY=qNLcAr0dDPs.K:_qP3qcql'=jr2oh!qQ]q)qmQ@3 qRudAqSW0Jqo8NRqT8TWrQbGgqU#)fqptYumb@QmqVCi$qV_S6hVmJTo]?D8cErmX2@orW!.k3&!0.$e &4NMRhW!VWhV6c0"1b1aEo:j8DuFYRE<^H)F*2VKG5QRaH2i-hH2i3iI/eWpIfFosJH(3#K)L?!K`[!b M#<,0MuAV4N<5-$O8b7@P5LODPlI$IQN!6NR/`TRRerTPSc>;]Sc58\U&:Y`U].%mUSFW]V5F6irM][o s/Q(!"KJK&XK;E'r3$"%pose'rj)F-pp:13[C3QRr4)a9pUL=9]D]D*^"g9M]n3qL^&Pe$^9bQU^:h8W ^\PVQ]t:bXWKhd74Y.Q^!g`n=!.k4=!"&i;'HT5LQEn3;^AP_G^>6I,=^#!5>?kG3?2e1/@/OL4A,U!< BE)ZDC&VoJD#J5NDZ+JTDf9UnErL1\FoQXbGPl[eH?jf8Hi/<lIfForJH(3"K)^K'K`6]*LB!&-M#<,0 MZ/M8N/`hrNr>%:OT(@DP*2%.PlI$KQMm0MRJrTQR0&hGS,AfRT)PA^T)G8_TV/"WU]%"gV>@"fVZ*Ln W;ijgWWB0&j0%1>poM32`NA^5nZ;PgoW5L'[]S;eo<%5Y!3Z='!3Yjo$E'M_J7V>++r(Cc])[E_JcNpn #QtDD'eEI;Tre-n!3Z='!3G+\#$P58>[1Q?rEfJ1s'bk8raYt=s(2.@rb)7ErFu7HrG;FMr,;USs)J'Z r,hs]rHJ6c#C1Q=H$Xd`Hi/9iIfForJ,k0!K)UE$K`-Z'L]<20M#iKl!/pi8rJgi;qiC`<r0%)Ds-3AF rg!VPQ^I]=rL3SPrL="]SXuIGrLikX#,7ieUnji`qkj@j#c=JqV5C,fVlB$_Ju[e0bGbH=r29UnoVh/T n>DJKfVmW+!ir?$r29UqoW&D!WMH&KIV);.,8CLdnc47AJcLu7#6Y>D(G/a=T)PYlWiN/"W2KcrVl8OR qucm#rrr6'r!36-r<WN4$4H_>rser<r=Ju@r"B#ErtbVNrtt_Rr>YbWruV.]!$M7bs!7Ukr[7^os!eF- .kE5(/het61,:^Er\jd8s#C$>s#^3D#sUX?5se"/7S$)L9)hWc:B+/i;?^$!='/R.r`oJ0s'Yk9s().B rb2URCi432EclO(GQ2sgI/e]qJeWlkLPLbEN/Wg[OctupQC4/3SY2YTUC3utW2Q_uXfnq5Z*XS>[^Q1G %)'?i^r+(.`lZELd*Ut)gt(35qqIIln_F0#rn[_5hVIhZgtfHrs5)PigZ%&M#j14/io/bQioL%"q;qn< afUG0.ghC=JcLB&kl;1p/<ATCiT0.^jPo.Th;$rCrJCN3rJ^]7s,R)>r/go@rKI8Gs-<MJr0RDMs-`kT !1WqVr13hYrgitZrLs1ar1j7es.fRh"JqrlVPj<ir2K^rri?(!ri?(#rN6"#r3,q#riuC,q6Tn(s0_j7 s0qp9qmc@1s18-?qn2sBrk.d7!5@s;pqG+gi4\oup:]P"m(<#'o=<\ffspabppTn(mBl8fjKn0Xpp&MV qQKh#o<&A&ZF%-Q]Y2"mpqQgA&A5Wc[^3'2Ru_i&7P5l"$3@a=JcLB&aoDeO#7M4p=bW`^\\,WN^](q- ]E!!OFT-F_G5ldbGlN*hH2N$eIK+crJ,OosJc(-!KE$W(L&Zo-L]*&,M>iD1MuSb9NW5%:O8P+;OT^i1 PEV71Q2[*IQiEKQR/E?TR[T_9SGo&ST)YG^T)PA]T`:_`U\gkeV>I(gVYm@kW;`ddWrK.!XT,EuY5YR$ XS]."XSo:#Y5YQsY5YQYXnJj`XmN4bXlHSYY4f!lXS8d,WqWLjW;W[^VtR"KV"UYPV!XrNT`Cb]T^ABF T(nr?SdD0fWiN;(XKAY.p8nk,Wi)V\OGA*m:,aC8&-i:-!.k3&!0[Bi!sJr>+@g@6VlHosXo#4#XQ6Ma Er0tYFo?OaGlN'gGlE!gHN&9iI/SNoJ,=crJc(-!KDgK%LAZi+M#<,0MZ8V7N;S\8NrG+;O8Y1=P5^[F PkgUBQ3*D>R/EBLReiNQSGo)ZT)PA[T_>)ZUAgqfV#I4dV?EfpVPU-gVYm@kW;ijiWqranVuWamW;`gM W:m.VW8FW(WqNFdW9gGXVY-e\VY@"JVYI"]V"g_YU<oV1T_+oNTD"lOSaDs-S+2pOS"HCOVlHcqVuWjq Wt_S4Vl6VoVk]oOO+_ai:c]j>&-r?(!.k3&!:Bgp!sJuA+A$L5Uo(/iqlB^rs/=tX!#Y\Rr#>YVruV1^ ruh1_s!7Rjs!Rgps!n%!s"+.%r\4@,r\FL2r\aa8"#i2!3rV5@55meG62s:N7K5jW8H2<^:&[of;#XAm <;or%=BJa1>lJ(/@/j^8AH-<AC&`#KD?=crErL4]GQ)meI/e]rK)UE)LPLcdN;nt<OoLXEQN!9TSXlFH U].1kW;`gsXo>O(Yl_2;[/RK:\[fDh_#D7N`;djVa8a9\b66,9d*pJCf)FD!gBHBfh;7#Iro3q<p>Yl+ mG@Qmp>#N!leD-ept#/fpsA`[priBQpW*$Jp;HsJr583Cpq?F4ppTk&pTaLsp9"+ip8Ibap7qDUp7:uH p6PK;p6#'0pl+p(pkSQrpk&?lrdXrqo6C^nOf,S+cJ%(4io9%sjpgD.h:pN$\Z1j4;E,j,ZiG[XJcN^h "Vk4C_pI6:k5OEEhV6c2cK<=LTDG8ZUA:S`V#@(gV#I4hVZ!FhW;ERnWrB'tWr9!tXS]-rY55?oYl:p' ZM:a+[.La)[JmW6\+@-!\c02:]D0&;^&>V,^%oD7^$<<1]_oJ6]_]8<]'Hoq\GWi6[f*W)[/RH*ZhLd( Z1"plYPG?qXo>F"X8K!rX8K!nWV<@hVuERlV#[=iV#7"cV#$k\UA:MXTDY8XT)"rKS,SlSRJ`HIQhcsF Q2HmCP5pgFP4t(9O8b17NVAD2Mti/-L]E2#Ka3I"T;f'%\\7dQ'Y_8o]=>,GURI3pF_+E8/ftf;"p+8p JcLB&P5ksl"UPS[7raipZ+.IE^](tM^:h.hrj:jprepc7rJgi;qN(K7qiUl@rKI2Erg!GJqj7;Mrg<ML rgNeTr1*PRs.91]s.9(Zrh04`qP3q`rh]=arhfRjri#dpl)O``rN-"#oWJ.pr2fdt!3Q4$iN<'[poX=m riPRjriQ.#r2\eV!3-!tr2B@frMK4_r2'4bpnRb\rLitYr1<hYoUbiJr1!\SpR1uIr0dAIr0I8Gr072E rK?o;q2kB4r/U`8rJ^N0r/19+q2"s(r.b3)r.P'%s+C)urdjfor."WnqL/*br-A9fpiu^\r-&'^r,haT !-%LI#',6PQ_1(RriZ+"'WnL?XJhe[O+hms?rB9G,8Lgs"9OniJcLB&mJmRq"9o,I3*h'&TW.di#d1>4 XKALuV5<@Nre^W3rJU]7qMkH6plG95qNCf@rKI;IqN^lBrg3SNr0dDMpRD#Lrgj"ZrL`t[n=fiUrhKIg rh]=crhoamrh]RjqkjFlrM]^pkc4HWr28hYrMTIigoC@QrM]aoq5=.frh]OirMT:br2'=er1j4blCn'I r1EnYrLNbSnsfWIr0mDKr0[JMpQkK;r07,CpQGB7nrNd1pl531rJUW3pkep)s+gH+q1eWsre'rsr.4]p r."Hiq0`-fr-J9dr-83drHS'\r,qgWrGhmXrc.sWo5>"WIYj;ZTr+igW2clqWt_M2Wi2bbQApNBCgg:1 1*dYJ#m:=A!.k3&!6P9L!X&`7(HPlPQ(=ePr2TgtrhomuWMf]gkb.oDr^QiWs%<8brD*;fr_i\os&]2% rEB/)ra,P2rF5e;rb)4ErG;FMrc%gVs)n<brH\BirI=cts+LB,rJLT5rK$o>rfd>Irg<bWs.0+]rhKFi ri#grriQ1'rNZ=.rjMg:rk8<HrPSTPrl4oWrlP2`rQbDhrR:_rrn@/%rS7>,r8.8.pYPo*!8[V/p=oGt rmq"rr6YAer6,)]rQ"iUr5ANNrkSHFrOMj7r3ZI.r3-%#r2T^orMTUhr1O(\rgitTrg*MHr/po<rJ^]4 rJ1<(r.=irrI"QhrHJ0^r,VdUr,2FKrFu1Brabq9r*]G/r*95)rE'&$rE&nrr)3MjrD*8br(?oYrC6`S r'L<Ir'1-DrB's=r&FU5r\j[3r%e1)r@n4'r%.arr$qUms!Idor?hFfpEKSZr?(qYr#PSPr#5MNr>,MN ()?HS$Q(B\@Y^_le)KBJjS\-KiS2i%YDd9m2BWP8!pTc;!.k31!!NNWB8j+Hr8n@Iio8qOagn=?SXJ]- qlp"'os4+ol*U>qqmQF3p:0e*jLP0!p:Kh,qn;m>ftI6qs1\BDs1[d3rk/6Dqn2a:rjq[2pUL43rO2^5 pU'\$r3H=,!3l4%qlfk!rN6(#ri?$uri?$ur2KUmrMTXlrh]Uis.fUiqkO"^qk<t\rgj%[qORJPrgNhS rg<SLqj.8Irfm;Drf[/?rf@)>qi1K3rep]2s+pZ/pP&Nts+:6$rdautrdOipqL&<hs*=Tgrd"Bbrc\9` s)\0[r,D^Vqf)OQs).jQrbMIIrb;@Frb)4Bral+?s'u%:ra>\3ra,S0rET>+r`];(r`K,"s&K(tr_iVj r_N_n:JOSUrCH]R#>f,aPbY@f]D0,T]tLtcYb[V?G@jiC1b0ae&.AdH!LEe<!.k4=!"/f0"U5]">_&6? ZFg"K$,4*d]XY;MWiN/`WV`=cT_kGUU\CS\V>-k^V#.%_Vu*FiWS+<KX8B!rXm3(dXo5?sXS/dmXPL#X XS]-tXT#?sXoPU&X9,N*XT#9eWrK'uW;`^nVuERhV#R:gV#$kdU&L__TDkG]TD5#TSH#)XRerNPR/WNO Qi<<NQ2QsHPQ$aCOo1=;O8b1=NW+n9MZA\7MYi8,M#N/0LAlo+K`6W$K)U?!JGt&tIf"QjHiA<jHM_sd GQ)dbFoHL]ErL%PDuOYQD>nANC\qiFB`;ZCBDlE=A,Ba4@/O@.?2e+.>Q.h+=o;D#<rQ+r<;ohq;ZBVo ;#X8i:Amod9`@]b9)M9[8H)-Y7f>dU7/oXO62j.L56*qI4omc-rAjX4#<u4&Iug(pXS8h1Y,\ClOb.O] ;a`Jm+;ke"#R(>3])[E_JcNpn$N^D5";!(UCP7qGXSAn%Y,S1dR@'E+Qi!<NSbo#UTD"r=U&1S]U\pqb V=:AZVu*@gV>R1jVtR%cW;NXDWq<7gVrXfUVu*FkWq!(hWVrasWMlcnVu<LlV>d@kVtm4iV>d:hU]."[ U&(G]TDtM^Sc##QS,8ZORK&ZRQi!*DQ2d*JPP^O?OSY%;Nr"b7N;eb7MZ&D2M#2u(LAcf)KDU9"Jbsus J,FcmI/\KlHN&3hGlN'gGlN!dGQ)a^FT6C]EVj_ODu=MND#S5IC&VfBBDlHAAc?6>A,Ba7@JjL0?N+70 >lIt->5VM!=8l8"<Vobq;u]bp;>sDg:Adia9D_<W8,YmU7/fRQ6N0:M5QO&2rB'd8#=2F*IZ9_gW;`go Wt_M4VPK`CJT,'t75cS=)&!Db"U"ks!.k3&!0[Bj!WrQ.&M-XlJs)_(r2Tgtrhot"VP'?Crfu`4qhk<1 qiCW:qigrDr0dDPqk3k^qks=iql9Rrqlfq&!3uF.r3lL5qn;mBr58EMqo8NRr5niZqTf&dqpYGnqqCPo qV;&*qqh2+s5Ek3s5Ek3rn[S/ptPi&rmq(trm1bmcHF?.`raB'a8X*Y`;RUQ_#D%H\c0&:[/[E2YPt[& WrAsrVuEIkT`:S^RJrNNPQ$^EO8b(<M?&P5L]2u+K)U9!I/\EiGQ2gcErL%WDZ4JOC&VcEAH--<@/jR3 >lIq+=T2D%<<#kq;#X5g:&[ca8H)*Y7K5^R62j+J55dSB3rV)=2uY`72?#B11&`m+0)dF%/,h$t./kUn -N5:f,6&eb+9!>\*W$fT)ZLZS(],!I(&ARC&c<4>&,m%4%/pY7$N(50#l=l##6"f+"T8K!"6flq!!WK6 .Sb#Wa8Y/sjpBnn_l\\q0bsuqMu\G0JcOs6":m@pO2q1\$fp:'hTiBiF_kc)AEdS%]["3N^%K,6^>$F% ^@8i9]`,VB]`#JA](`c2\Gs&;[f<c1[/@90ZN%61Z1tR&YPkX%XoGL&X8f4!WrT1!WVi^oVuNXoV>m@j U]7.hU]$qcU&:P_Sc55[SbnoVRf8`TR/E<MQN*6MPl6gGP5LFAO8b1<N<"q;N;nh6M>rD3LAHW'KE$Q' JcC9"J,autIJeHsH?jd\G^4T4GQ2jdFoQO^ErC"WE;skVDZ4JPC]A/KBaSNeB4kgfARo=]A,]p:@/jU6 ?N+70>lS%.>5qb*=T2A$<W?"s;Z0Gu:f'q_:/+GV9`@Za8cM?\8,Ym]779O26UF-=62s4M5Q3hR4Ztnh 4$#D^3&`eo2ZGW61]K6.0a9<c0.nk//cI=$/,q+!.JtRu-RU5e,pXc6,QAtf+o`\a*s`o.*?6%<)]BXo )?1NX(Ddi%'+toV&GQb@(cGKAPG57kpqIKU]=>/FQ@EF;3%,RO$3p_:!s/M7!.k3&!6P<@!=/`8-q7j% S#j0t^BqWf]t(JNUS"*Kkah[SfW<],m&]WW^oct+o<&"ppoXRtr2oq!s/l=(ql]t$s/c4#o;_his/>jn s/,Xgs/#^jrM0@cs.K=_rgs.^r1<kWrgWqVrL*YP!1EhQrg*SLrfmGHs-!;BrK.#>s,R,=s,?o7!fMqn r/(E/s+gW/s+UH*s+C6$s+10"s*t&trI+Tjs*=TirHJNjG'8"NFEIG$s)@gQ!,haPs(q^Nr+Z1Er+H"? rF>b7rF#P0rETS3>?b97=TDV&=T;G$<W,l$;c6Lj;,C*g:]F2i:&dod9E.W`8cM?]8,l'X7K5dU6i97M 5lX(J56!eG4T7GB3r_5>3<(r:2ZGZ52#K-/1&`m,0E*U(/cRC#/,Ums./YFo-71#<,lJte,5iY^+9*D] *;^]Q)?1QO('53d(B#!G'`SgF&H`RS%1Vt<#8/OV@ssE0Wq`\0XK8@qQ@WaI4"MEb#R:M9!s8T+nGn.@ JcLu7$NU80!XKi+<,RGZWr/t+Y-"h-Whc)EMi*ATLqftRW:6bPVlcoqWq`UgW;idoW:6heWW/pqVZN`l VYd:gVZ3LmV#I.hU@t;[T`:Y`T)YA[SGSfSRf/ZRR/`NOQMd!KQ'D93r0%#?qN(Z:rf-r:s,6o7r/(H0 r.k9+rIk3'r.=s"r."csrI4]ms*O`ks*=Whrd"NgrceBbrH/$Zs)J!Vr,;RPrG;LLr+Z1Er+H"@s(24@ s'tt9s'bh4rE]\6>[1K;>$Ci+r)`o!s&K%ts&8qqr_`\lrD*8br_*2]r($]Sr^?cRs$H`Or]pKJs$$?C s#^->!]W.urAOU2!&XX0r\=C+s"FC)s"41#r[\!tr@%Xmr?_Rl,UE:4s!%:^ru_4]ruM%XrYk_Qq\T8J r>#5ErtGAD!tYtP%K6e2$3q4q7q@",S#5t]'<%k+T9Fe>;`lWR&IA[G"9\f.!gWh<!.k4=!"/f.!WiZM 3`U'NQ`'b^rMTpuTpLaqLkk2KrRU>hj4iPIm+gs`f\Z;[pYkJuoAoo1ro*h4s5!_1qV2&(s471u#gglB bKJ#La2e2!"2r*m^&,A?[f<`7Z2_$-Xo>@#W;idqU]-nmSXl1:QBRMpOcTO's,?u8s+gT,$A*kZI!g3b GB\1Prc8$Xs).jQrb2IIA7T0K@/jR4>lS"-=T;J%<")Z&:f'n]9hJ#K84H)J7K5^S62j(U5!D%h3]K)X 2`<Sn2?,H31&`j8/hS\*.k3"s-mpAh-N5:h,5r\f+!2OF*W6rW)ZCTR(]>-K(&ejG&cE:@&,m%7$j$eE $N1;2#lFr+l+"T&;j!o*d-!:'Uf#U`>r^%g^ogrHU\?nMnj!.k3&!5ed>!YRG2\btRsio/bL`0kR> 6:!j"43kC^\Fm?([K*`-[Ec/8Zi%-/Z2(X%YPbR'XTYc.XK8K%WrK.!WrK'uW;`^pW;idqVZ3LmV#I.h V#7"cUA^eaTDtJ]T)G5VS,\rWRK&ZPQi*0LQ2d*IPQ-gDOT(=@Nr4n8N;nh7M>rD2LAuu*L&HZ(K)^E% JGt&uIf=cnHj4nBH$FRZH2MmcG5l^aF8p:ZEW'kVDuOYSD#S5MCB&#IBEVs[An>QQAH-0=@K0a7?iOI4 ?2e+.>Q7n+=oVV(<rQ,!;uT\o;?'Jm:]=,h:&[id9)_B`84Z8L7fGjV7/fRR6N07R5X7Ou55m_F4T@MB 3r_2=2uPZ61]fHg1Aim,0`Ea*0)mO&/-IIR.OchE./kUo-N5=k,lJqf,5rbc+T<J_*rd8[*<-uW)ZLZX (`*u((AnpH'`SjE&d/dY&.]<N%f["6%0$_6$NCG4#lb/-#6"c-"9S`)!Vud*!<E60.oCSXUTh;D^V9]\ %_T?_['-F#P'g\-0Hq2:kl?;8JcLi3$j[k0:2>]\[(X/e^V:,h]tCn]WL]'*Kn\`C[Arkus/>Xil)4-M gSFJ<m%jNRoqVP\s.K=_s.97_qO[VTs-s%WrL*\Qrg<kTQ^3p9PlI$KPlHsIP5LI?OSk1>NrP+=N;\\7 MYr>/M#W81LAuu-K`?]&K)U?"JH(-!If4]mHiA<jHMi$fGQ2jdFoQR^ErL%SDuOYRD?"GPC]%oGB`)NB Ac6-:@f0X3?N"10>lS%.>5h\&=T;G%<W,ns;u]bp;?'Jl:BF9d9a4<d9MA)P9)M9\8H)-Z7fPpV7/oXQ 62s4M5Q!_F4oRSD48q8D3B9&X2uGT62>f</1'00b0`Ea(0)dI&/Gq$r.KCmq-iPIj,lJte,5r__*s*K) *;plR)u^`S)#P0L(&o'I(&SaG')`F?&H34?%f-Y6$iUM2$2Or+#Q4l,"o&3$!s8H&q>^p)!WiWM6">J. T;o#rriH:(Y,\K0Un3j0I:l>7,T.*sNW=Y2JcP'9#6kql5$2ofV#IJ*Y-"h-Y,\7`LjF)[Df4fVoqqAX oVV8YrMJJLoVM5VoqV,Qf:hN(lCe-Ks.97]rLEbSr0mPOs-WhQrKd>G!L/fDP5UL=O8b1;NW4t;MuS\5 M>rD0L\uo*K`?]'K)U?!JH(,tIf4ZoHiA?kH2`'gH2`'eGQ2gaFT6C]EVseRDuFSPD#\;KC&VfDBDuNC AcH<?A,Kg9@JjL2?3"76?!LW=>Q.h(=T)>#<WH.u<;ohr;Z9Pn;#F)f:&IZ^8c;0W7K,[X6UF+*62X"J 5Q3kE4T@MB3r_2=2uGT32#T001&Na*0E*U(/c71"/,h!s./t[m-N5=k,lAne,5WM_+8d2Z*W6uX)Z:QM (]P9K(&SaG'D`=@&GZk8%0-h7$MOl*#lP#.#6+l)"T8H(!s8H&q>^m(!WiWO6Y(_.S>E:cW">l,Wi)bg RZ`MSB2L]:)%QqW!.k3&!6,!E"r8UP=EKOrVuEV&X/N%uVOs*-H#[eAk\g(2oYC+4oXXY'oX+7qoWRqi or8"joVhG\o:tuOoUYWBq3LT8rfR5As,?u8s+gW-s+:9#rd=`krceBb"EJO%E,PYks(VIF"(YkK?N+40 ?N4:1>5q_)=8l2!;Z9Mm:B!uf9)hH^7fPpW6N9@N5Q<qI48q;@3<(r;2ZGZ71B'$.0`E^)/H77#.fUps -iYOm,lAkd+T<J_*rd8Z)ugiV)#kEM(B,'H&c`OB&H<:?%JgM4$NLP4$3(;/#PSH%"o\Z$"7QB?!.k3X !##Vj</89Oio/bMg<RXITR:'7-4Ai6JcLB&MZ="a)GQm\hVmJV$f9U\_i\Ci+;Ye+''U#+Wr/prWqWLd W;`^lVYm:gV#@(dV"USZUA1G^U%b2XSc#)RSar9JRf/ZPR.lsAQMm*GPk^I?P4t(9NrY4:NVSS1N;eb4 M>i>1LA6K"KDgB(JUr?$rdOirs*jrqqgA?grd"Herd"Ecrc\6_rcA$Yr,MUQrGV[QrbVRLs(_LHrb2:D rFZ%?rFGq<s'bk6ra5V1ra#G,r`fA*rE9,%rDrnts&8npqGI5grD3Dfr_<Ddr_!,\r^d#YqaUTSrC$WP rBgNM!($TLr]gEHrB:-Br]C'>rAad8r&4O2r\OL.q_A+)r\+4&r[n("r[\!ur[I[lr[7[lr?_Fgr$21b r?;._r?)"[ruM(YrYtkUru1kSrYYVNrYGAGrY5;Eq@`f?rXf&>rXSl9p^I01q?m0-rWrK.r!*!$rWN0% rW2iq$ipG4"V<S%M57;]]YFHZ"M;1LXecDrPD+9s<^JG_((CG-!.k3&!9sP#"qr7?:Nr,-]Y(qk^V.1b Yb[S;DId0_kZn%Rr0[GNpQtcCr0@8Gqigr@qiUl?pQ5-1rJpf8qi(9-rJL<*q2"s(qhG$&rIk*$pO`9n q1/?l!.OlqpjMm`r-89gnp(+Wrc\9`s)e*Xrc%XNrbhRL!c2[gphB_@qe,b:qIBG4s'Yb4qHj)*r`oG, rEB2'qcNl!rDi_orDW\nrDESks%iSgr_<>br_*5_r(6lYrC?iVrC-]Rs$QZLrBU?HqEFmAs#g9BrAsp< r]'j8rAOU3qDA()r\=F,r@e%#r@Rt!r%%Xor[@Ujr[.OgqBPq_r#kkYr>thUrYt\Qr#,GMqA0&FrtbJH q@roAq[r]:rX\r;p^R*.rX/K.q$?g%q?Hp&o)o$rr<!*&!<N#s$NU>3":H_VFHN/jY5YO8Y-"[uS!&VV De2s<1aEnM#m@O6JcLB&`W-8I%N?l]@Y(,RrN-I/Whc8LJ8JFd:JFIG8c4nGQ2HmDPPLC8ORnP2Nq\P3 N;SV2MYDu+M"ZW"L&co$K`$JtK)C2nJGjulIe\<gHi/3fH2MmgH$FT'GQ)a_FT$7ZEVaYSDuO\PDYn5M C\VWCB_uH=B)Q<?AH-0:@f9a3?i470?2e+->Q.h'=Sl2!<rQ+q<;fbq;ZBVm;#F)g:A[c`9DV6V8,PgT 7/fRP6N0:I5lO"J55ID@48M#<3<(r62Yo9-1B0**0`Ea(0)[C"/H..".K:jn./kUl-N5=i,l/bb,5EA[ +8[,X*W$iV)Yt?G(]P9J(&AXD'DN1=&GH_4%K6e5$M4Z%#l4f*#6"eq"9\f/!W`>u!$D:E"9],a;KRtg TrP/lW2choT9t^qHuN\!7l2M0&IAU)!.k3&!07*g":lJ&5[o84WiE"rWsbr(Tq%0nDH]t9:/0tGr+u:F rFc%=r*oP2r*KA-qc`o"r)`hrr)3GhqbI)arCZuYrC6fVr'gNMrB^?Gq`as?rAsj9q`"F2rAFL.r%\+' q_%gur@@apr$_Lkr$M=epEBY]+!:D%q&]JTq]#PRr>>MMqA0&Fr"Au@q[`c=%K6e8%J^G3$iLG/$2t5. #P/0""oAGs"8`/f!gNb;!0@0i)HV3^bN@[9e&ekWE``H.-Pd!iLB)o+JcOm4%gO_4cIUb,k1[VKLK?#= "6BO[QMm*KPl$[DP5C@>O8b1;NVe\5Mu/A2M#N/'L&6N&K)U?#JGjusIf=clI/eNmH2W!eH2;aaG5l^b F8^.VEVaYSDuOYRD#S5LCAhlGB`;ZDB)cHAAH$*;@K'[6?iFC3?2@h*>Q.h*=Thi-<E2uj;YO&d;#F,d :Adib9`%H]8bu!U8+oFL7K#XP6NBIO6Mj(H5lEqE55[SA4T%;=3r:o72to6.2#B*-1A3I#0`3U&0)I6u /Ggsr.KCss.J>1f-i>=h-2St_,Pr\_+o<D\+8d2W*W-oT)uU]P)>b9L(]5'B(&epH'`A^=')W@>&H*.: %f6_,%/UG,$N(5.#l=l%#5/5u"SDlr!rrE%!Vl^<!<WN4(.3,2YdM$T^V.:j\?McsMgB2D838LO)A3G` "0qoY!.k3j!#PeH'd,;?M5Rkp]tM1m['$0gI:Pf03]8eY1B)k$JH(-!IenKiHi86hHMi$eGQ)daFoHL\ ErL%PDuOYPD>nANC\hcEB_lB?Abop5@f0X5?N+:.?2\%->Q7n+=o2>#<rH%q<;ohr;Z9Pm;#O2h:B!ue 9`Icb9);-Y8H)*^7R]^56gm>>5l<k?56!eF4oIM?48q;;3W(l72t]*-2>8s$1Ars)0`3Tu0)R<u/GC[h .KCmp./51e-MJe[,Q&bZ+SQuU*qpZE)tt6J)#"gD(&Jd@(&&F>')3(4&Gm":%e1#'$i:;*$1S;s#QG&' #5\Sf"S)Zp!ri;s!$D=F"9oGp?A5#KWiW>(Y,\ImOb@jg=@kM*,T@F,#R(=p!.k3&!07*g!sfGR-r+fI WiN;(XUD8,S<8;7;)^*Z.k'X0rdautqgSEird4Wjrd"Herd"Ngqfi$^qK2^Ws)IpTqJZ7Kr+u@JqJ#qB qIfb=rFPt=raYe6s'be3qd05,r`oJ-r`]2$qH*Ysr`/kqr_reorDEPjqbI&`qFg]Ws%!&WrC$HLqa:<K r'C$Ar'1-DpcSC7pH&12q`":.p,)P"q_@h!!&+:(r%@jupFQ4mr$h@gr$V1br$D:ep*9GYnf[iPpE'5Q r#GSRr>PAIne_0=pD*E:q\/Q5q[i</p'pp.q$R-/m0WFkp]p^$qZZ!_pB1EsrrMoq'ESC?#8&k$K:J[5 WiN(uVl#rEJohB4=A(_/-63d0#mCHl!.k3&!9sP#":5VU-r=rIVPgGmWi;\[O+(b@3\W0;kU?E_r[e!u s!n$sr?qRkrZq=arZM4_rZ;%ZqA]DPrYYYOq\K,Fq\&l?r"/i<r=/K0rX8`5q[*6-q?Q]urWW-$q#fj_ pAfdFJcLB&JcP-;&-b%MW5IBPgsF!EKNC#M$3I.+JcLB&^]4c[>dhZ$guQSPG>p%#irK+*rd"Ngs*=Qe !-\?as)\0[rGhaSrbi!YCi!m&C23`^s(MFFrau1As().>s'bq8s'Pe4ra#G,#[:M:>$4s0<`]3"s&8np rDEPjs%iYis%WMes%<;_r^d&Zr'go[779O26UF*=62s4M5Q3kH4oRPJ4$,J_3&`eo2ZGW51]K6.1&is- 0E3[)/cRC%/,h$u.JtRu-RU5e,pXc6,QAte+o`\a*sWi-)]BS3(`;WVneV6?k8!M$oFp6to+CL(oah'5 o+(=#eI;!VisPVhq[)j"nH\.[is##WmK;YTnH/+ZpAc<;"UPSY:P#CS]Y2"n]t1_[Vj;gF:d-EL&e,3S "U"o.kl?;8JcLi3$j$S<$lhf_S[>o=]tXrcYbRP6?pQ"S'bV)B%fBo:A,Tm8@/O@0?2e+/>Q.e+=oDJ& <rQ+t<;ohr;ZBVo;#a>k:B+&g9`@]b9)M6b84Z6?7R]cF7/oXQ5ls>;5lO"H56!eG4T@MC3rV/>3<(r8 2ZGZ62#K-/1&`m,0DmF(/M&IN/,^ss./YIm-N,4g,QAtc+T3D]*r[/U)uUZR)#P-N'c%P`'ESm[&`42^ &Fg;'%c%Ti%H@if$KDHC#QP+j#Nc6\"j-u;"P!V8!rE#m!!r]0"pl#.Cm1p&rN-:)W2#T-BiGI)0Hq5@ #m^_<"9S^c!.k3&!9sP$!X&]5'ffc]UoLMuXf@tTJn[t8)\N\k$gA#rB)cHBAH-0=@fBg6?i==1?2n1/ >6%k*=Su8#<rZ1t<<#ns;ZBVo;#O/e:&IZ`8c;0W7K,^T6iTLP62a(K5Q<qG4T7G@3rV,=2uPZ52#T3/ 1&N^.0/"q0/c71"/,q'r./kUm-N>Cl,lJtf,5`S`+T<J^*rd8Y*<-rT)>b3N()?f_rtE`ko+9snndjdj nI4Ldg'R-QjTslOo*4^gmKC0*jTFQF!!2uupAc<;":#5L5\uO[WiE"uWi)\dP(.1G5qsT!%1*:E"9\f. Z2fIVJcNdj(]jgE#o,O5LnU]EWiDnbO+:q@1`R/?%h.\0rsJZ1rs8Q.p]ga%qulm!mfKruJcLB&JcLB& [/^[J>/nqDhWES4YEN3B%0G>cJcLB&M#[_d6(kU*gZ/LQKN'W6iW/m]#[:M:>$5!1=B>E$s&8qqr)*Gi $;XGm:/+GV9M.lJr^d&Zr'p]Tr^6iU6:+!;5lX(J56!eG4T7DF3]]5Z2uPZ61^#Tj1,:T_1&is,0*j0_ /M&G'.k3%J.K([o-NkbC,pai8,Q8ne+o`\a*ss&1*??+>)]BV4)?(KQ(]P9K(&o!I'E/XE&cWFB&,m(= %JgM5$iUM5$2t51#Q+f)"U"r2!s8W'!<<+O!.k3&!1*["!soMT/7"49]tM(k]=+rDUm$197KkLj&dA@; L]E#,JcP'9(]aX=!t@/#O/]:f[CNK8PCI+4.1ZUd!s.Wds%<2\#"V9T7n,s:r^?cRr'C?Jr]g?F#!G+3 4?GSbr]1!<r\sd6r\a[3rA+C-r\4@*r%8%&/M-iNr$q^pr$VLkr$;7ds!%Car#bq[r#GVRr#,MOr"f;I rtbSKr=o5Dr=Sr=rt#)=r!iT4rX/T1q?['*r!*0)p&tBtrrW0#V#Z)IJcLB&nc/pt"q)"e96Qc*riQa4 Vk9B=IV2J8-Q*?r!<K8%JcLB&`W-hV!WiH1.oU_[StW$]Sr\;6;)TL("9\f.klC`Xr(Hu[r^ZlTs$ZiR s$H]NrBUBIs$$EEr]C$=s#C$;rAOX3r%e7+r@n4(!\Q)Wr@It!r[Idor[7Xkr[%RirZhFeqB5e[r#YkY rYtnV!#kbQqA9/IrY>AGrY,,?rt,#;rXJl9r!N3*r<WB-rW`B+o`P<u!Wr?%g]2p+JcLB&])W'<#7M1h 9m)g$WXbu&S<f4`B2U]:)%QiN!TO03!.k33!"8l0!Wr`[<-X[sSt`(iRuMf0;`Gm,"9\f.NW=Y2JcLB& JcLo5%NBB@e'?.WWetUj-k$(UJcLB&JcOj3$3DD^H&no;In_:"i;ijBr]gBGs#p?Dr]C*?r]'m9qDS@1 r\OR0qD%t'r\+:(!\Q&Vr[e%!r[Rmrq^DFks!I^kr?V7brZ_=brZM4_rZ;%ZrZ(kUrYkeSrtt_OrYG>F rY5>Fr"Au@rXf&>rXSo:q$d61q?m3.rWrN/qZcp$rWN*#!!<*"U]>uHJcLB&nc0O2&K`SnE0@<5[^*'7 T9bFbDHT@],8L[j!NQ3P!.k3i!#GY:!XgJRFcVfVSt_I%EEkpd*")oP!s.Wdr\FI-r\4@*q_%k"r[dmr r$q[oq^;@iq]u(arZ_4^qB,_Yr#GGMq\fAMr"f8HrYG>Fr"T/Drt52Aq@NW:rXS`5q[<B1q?d!(q?Qm% rrqrrqZHj"rW1aRJcLB&JcNC_)$CBa,;rbSR]<9\S<f(aG%k)L2'a%O#m::g!.k3&!0.$e!<N<.+?j1Y J;&i@$\*#!8N%h/#Qt53!U0U]1B'$+0`Ea)0)dI!/H.1".JtUm-i57i-2o1f,Q8n]+TEP]*r[2V*<$lR )>P*J(A\dD'`SjA&cE::&,Qh8%/UD*$2Y#)#Q=r-"n)Tn"9/H%!WN.O!.k3&!1*["":Z.l2dC]rVk]lP PDOg4Bj+(d-3P5!#m:9a!.k3&!9jJ"!<N<.+@'@[IY3E8IVrIb2^T7F"9\f-Z2fIVJcLB&JcLB&m/ROs -?-o'O`t2%/fP3$UB#lGJcNOc#R2J'2Esnc&Hq"lr?_@eq'5e]r#tt\r?(tZr#P\Tr#>SQr>GMMq\T2H p_E]@r"Jl=r"8i<r"&`9rXAi:ndPI)pBpg)r!<9,pBLBrr<2ZnrW<$!g&Q^)JcLB&])WZQ)(n?bI[@+E YG@YIIrJ^h5Va`-'+>*Ji;eH0JcLf2rW*90*]I#8EHc\W$ZB6>2CKOV"p4r.!U0UW)tt6J)#+mF(&SjA (&8RA')*"5&H*+>&,Zq0%JL8/$MXr!#knSu#6"ek"S)Zn!r`6"!.k3&!.k3;!#,SN,;r81JsiO.ObS*p >YI=:-QX!)%LE:@L&cf*JcP$8(BFO<"ViOT=^>KJBj+(f.NT<4"9S`-!U0U_*Vg]Q)YY-A(]5'C(&8RA 'Cuh6&FpA-%K$Y0$LS5r#keN$#6"f!"RuWh"8r<#!M]XH!.k3&!:g+,"V`4@:2,9FUmd?tGA1>X5Va`0 'b:TS"0)?Q!.k3i!#GY:!X0Ak79X#,AnbIB3\)9e$j6Y7!WhNcJcLB&JcLB&JcN4Z#n/P+XaF2/*Xr8( !.k3&!/COW!sJo9$igCd!9FX`$gJ)l$24`$#Q4nm#3uHe"Ps7T!q-0f!.k3&!.k3;!#,bb5@&PnSZ9#l Q%3RK68'Aq&e,0M#6b21L&cf*JcP!7&ci":&gK5&7nQNQ5VOAr%13:ArW23_q[)3en-AgqlN["caopZ* rWDEequNJkJcLB&JcP?A(^Cp594N1&RA5mpCK3bZ,S^n##mUV:!s5J&JcLB&_uLMQ!<`iN.Q07J5!LeJ )%R#Y"9S],!U'OF$0hf^#PSGq"lTU?"R?0T!rN)O!.k3&!.k3_!#PqZ1/2;'LR+ToIVW"R1aNqM%g`LF "9S_a!.k3&!0$sc!<E<6*%<j.4?u1>1+!kL#m^Y9!WiC^!.k3&!.k3&!0[Bg#TZ*FP?07F!r2hJ!.k3& !.k3&!.k3&!.k3&!:g+&$ReM\K92RtW0VjA755qr!s&Fu!.k3&!5\^E!t#\_-R^Dn.j,K4!T=$1!.k3& !.k3&!4r4D#Tbs-DL7,"Q@NXF2CB=L!s&GW!.k3&!/gg_!s];N*$67F+9NAh#6KV[JcLB&JcLB&QN.^* +$*MAH%_3AIqV_=-Q*6n!<E0#JcLB&JcOp5"9So?(EWPu"<nWm#6Ln*JcLB&JcLB&JcP6>#6GM^2c*m5 %%I<L!.k39!.k3&!.k3&!.k3b!<*!2$6qfBFa/@fKlL?e0I%>@!Wh!TJcLB&MZ="a#7VCe*$$(B!u27L !JUT+!.k3&!.k3>!<*!2#9,El?t3nfDd>pm,T@=$!Wi9#JcLB&JcOp5$j$S=&/>oq'c%>e"9PS'JcLB& JcLB&JcPHDrW*T:*&:8tASH%#?;!7)*"`GX!M]XH!.k3f!"8o4#nRgd()Ic!#m:=g!.k3&!.k3&!.k3[ !!NQ5$kX*TdK"k!JcLB&JcLB&JcLB&JcM5>rW*Q;+#Zu+?X-c575cS8'b(?Jr;_ELJcLB&jo>ej"UPSK &J5Wg$jd%;WW7VNJcLB&JcLB&o`,X+!<NKA.mQp*8k;<-.j#N<#m:=(!.k3&!5\^=!X&]6$iLM:#mLM5 i;eH0JcLB&JcLB&^&SfI!<NKB/4*609h@c4/0G]>#m:=_!.k3&!/gg[!X&`7%/p\9%g*+C"9F5WJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&p&P'm&HW7W01A]*3%Z?q((gr]"p4n#!.k3&!5\^=!<WE-#5nc. "Tnha!.k3&!.k3&!.k3c!#,G7!WiQ?,W7kE/0c)L&If!M"9S\X!.k3&!/gg[!<WE,"T8K*"9S^Z!.k3& !.k3&!1Ns&!<E6'#8AIC5rL;>*#9+q#mUS8!W<"M!.k3&!9O7^!<`<(r<36*"9PP&JcLB&JcLB&JcLB& JcLB&PlQC9JcLB&JcLB&^AnWB!<N?/'dkq(//o#s!Rh%#!.k3&!.k3&!.k3&!.k3?!"K#2!WrW<*%N]e 'aOjA!VZSG!.k3&!.k3&!.k3&!.k3&!;6C&!<N<)"q_n-0d@D>!W`=l!.k3&!0mP9!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3?!<*!)!X92U-nHJS#lXl!!.k3&!.k3&!.k3&!.k3&!.k4E!"/f.!WiK4'cnP7 %L2n5S,e-@JcM&9JcLB&JcLB&JcNOc$NU80!X&oH+!VR4#6"YP!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!;-?k!=8l9&JuK$$j?Y4RfJ$?JcM&9JcLB&JcLB&JcNLb$ipA1":#AK'b1KP!<LUK JcLB&JcLB&JcLB&JcLB&RK*`s!<NB0%20He#m:80p&K[EJcLB&JcLB&JcLB&JcLB&JcLB&JcM&9JcLB& JcLB&JcNIa#lt&."UGMF#mCFX!.k3&!.k3&!.k3&!.k3&!1<fn!<E6)"pbJ="9\8rJcLB&JcLB&JcLB& JcLB&JcPEC#lt&."9o/=#6Y-s!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k39!;urh!.k3& !.k3&!.k3&!.k3&!.k4?!;uqb!.k3&!0mP9!.k3&!.k3&!4`+.!R:[s!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0mP9!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0mQ(!"/f0"U>>>"pG)2!Wg^LrW*!#rWE0'rWE<*!WiCZ!.k3g!<*!)!WrQ0#7:eE $N:D=$47(F"pG/4!S@D3!"/f0!sAc3#RUe?!s.!R#QXr.!sAc3#RL;6"pbG;"9JT)m/V_<JcLB&JcMVI $3://!X&Z3#R1A5r;l9cjo>Sd!WiH+"9\W+"Tnf.!WiD)!.k3C!!<6'!sJT,"9o)9#RC>7"UPG<"9Sc* !rN&4!"/i2"U5/7"U"r1!s.!R"Te`-"9\l;"pbM@#RLb@"U"r1!s4PaJcLB&JcLB&$ipD3"9\l2"U5&3 !s-^J!WiE*rWE6*"T8E(!W`>K!.k3&!;Z["!WrQ."U#&.#R1VB#RCY="T8E'!Wfk4#6=o0"pbD8"8r9$ !VHHQ!!E?*"9eu.#Q+c1"U"o/!s8S2!.k3&!.k39!.k3&!.k3&!.k3&!.k3&!.k3F!"8l5$4mpa%grXI "9JVl!9O7e!<N?*"9eu8$2t24"pG)0XT3qQT)]9#!WiH.#n7I['G_N'rYPkV'G:ob#mCG/!5ALB!<WK0 #n.:U'bLiY!nRDU!<WH0#n-hG')iRN'bqDr'+kZZ"o\Od!.k3&!.k3&!"8i.!WiK/$4mgZ#Qt5.!R^rY !WrQ/"U5/9"U,#3!s/N)d/\auJcPWI#Qb,4#71_G%M8UOr=T>I%1*7B!s8V9!"8l2"q(nN$k!FK"U"o" !94%m!X&Z3$4I@U&eYik&ePNZ#mUP6ZiG[XJcLB&PlSr,$N^G7#RUtJ$k*CF"TAGL!!iW/"U>;<#6kG5 "8r9$!Jpf.!5ed@!sAf6$4IFD')iUQ'+bW^#mUS9!s8VW!94%f!<ic>'FkES!s/Q+!S7;b!sJu?%1`s\ %hK6^%1<FG"9\f/lMuM:JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcPcM%06M:&K;r8(_R8a"p4nT!!`N, !sJl8$OltC!t,>;!mq""!.k4I!"/f/"9f)B'cS;?,U`R>#U^uB*>fJ$#mIm?$ipG7$4[^d*[;X<$3Kl# irBAf":#5C',_l8,5rel+WhdF'Fb6JrW0M/JcLB&JcM&9aoDqQ!WiH-$PF=!((LNL!W`>M!!iW/"pbMB #mpqB#R:J7"9JX]!.k3g!!iZ1#Rh1U'c7kg*<$ub*ul%-$3gY9"5!V6!"8l4$PF9m'b_2i#Qt4\!##G< #R_+U(`OJ;+!;UB((q)`"U"&jJcLB&JcLB&V>p]""UP\<&d8s_%LE7?rW2Bdjo>no"UPVH$O[7H"pG,3 !WiD)!.k3C!#GbB$P!a`)&s\?+sS<S*#K>"$O?n=!sAH$^AnZD#7_Om(_I,Z"9S],f)PsX#nIdf(]bHm rYc%[(D72b"pG,3O8sk4JcLB&JcLB&JcLB&JcLB&JcLB&JcM&9a8c\N!<WcJ,r$hl)A3Jb"9HsO#Qb)3 "pk\L&ek6W!tYhE!f6o/!5edF!WrT1%2Bp3/2&e<3W:uC2(pC%*#&hdfDsq3$ipM<%i$$-.53+f%0P2^ (BXmK%20^+.k`P00ek=5.jc8L#m(//!Ug#?!.k3&!.k3J!"T)3!sAf=)C$jV'*nU>!WhZgjo>Jc"UGP9 %1!IR$4-qA!s8V,!.k3C!"/o7$kX0l*[2pZ.4Y<J#V@MK(CpcU!sAH$^AnZD#8%gu+WVL>&e#!If)PsW #7D(Y*"=&<.P!)'/0uAV'Fb<MO8sk4JcLB&JcH;_#7V=`)B0_='at9J!W`>M!"&i6%1j-a&.f9W"o\T) !Wg[KJcLB&q>_<7#S%Lc*[<'a/hf+;/LVe`((prZ"U"q=!"8o9'-AeM(_?oV!s8Vt!94%m"Uu4f+X86Z -RL,b+W;"(#m^Y9ZiG[XJcLB&PlQC9JcLB&JcLB&JcLB&JcLB&V>q/."UGPO,W84t8j+gO)A!/TmJuAL %g<4L'cn_V3'9/Y1+XI[#-@lW!7:cS!<E9)"9Sc0"Tnf,hZ+/f!X&Z9(EtFh5"JIL='Ar/?OU7B:eO29 0I7\R&.&F?!WiDA!"o;5!X'&U/O)Wq:f]t;)@$<E!TF+X!=8o9%MKa*/2]RZ'hhS.=BSg2=B8?q6p!(N +;G@j"9S^m!.k3&!.k3&!"8r7%i6B?2agD",S1+X!WW8M!"T;J*\&`o0/+k!(_@&\"U!-PJcMnQ!WiH+ qud*(!s/M_!"o83!<`Q4$ks^.0K(sV77^!C9`@`r:/"#90IS(]&e#$M!s&G@!"]/4"9f)F,;MVM3ArW> (^gH=!:'V0!WiH,#7D(W*$Zmf2`sGu92&&V9h.H11b'Ua&.8^F!W`?']E!N`JcLB&PlT&/&ci%8"qr19 5!M:u5:d]_!s8T*ec6*Z!<N<1(*YIh1GUX5"s4Kd"Tni.M#`,-pAbBu!<N?+"9n`+!<N;Z!$M@H#n@Xg ,:k]55XnCA;,^Lq:.dr?3AN-3*>K%i"U"o/h#QU<&-;t=$4e.-4]"9m*"</X"9[Q^%fl_7"U>MQ*$d$g 3']l#8,c'j84Gs02D?U')A*>`"U"i,nGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcH>a$kj[56Wn;] F^I]u.2r]tdf9m`&KN>^8m?+PCh@$L3$JdY!.k3Q!"/i1"U52<$4@1F"9IK^-NF,I!sJr<+Z2u)D/siL J:iN1Ll$tGMM?b5H#6qe75ZD.$3^M5!QP0S!<E9)#Tu00DL$hiMeYd3%0HY5!Vl`]!$hRG!WroM,r._\ ?"n;%I"?m%KS5&7KnY/-FDG8U2B`V>"p4n>!.k3&!.k39!6P9Q";2q;7T!H+FB:FA"p4r/!n.,T%ja>= >?tQB<X(rJ+r(Rn",R#0!;-="!sJl8#m^_=!sA]-huF/d"qMLm/j2p6@qTLmrbiKiEcQ5CF)>Pt>"_"1 +VtRl!WW3$huMp?&-<"@%MU<S<GH/V?WTH=&d.%l+9;QI"UG__/3$!k<F0-ICN+96F*2PDD/!K[83/=E '++X>!!2ZkJcLB&JcLB&WW3\5!X&Z;-9kdYGB@b79.q+a"9S_m!9sOt!<N?+'e;^`BkLsa;*63?$3p\9 XT3qQe,TsZ!<NB-#7:_A!s8T+!s.<[+T`#g,VqYX=Cc&\DfKi?G'S7ODJEfo?X-Su1*[GB#m:A1!Q>$N !XKAV,r\P.G?dH`&I\sL!s.?\%KZe>%21$H94;CFCi+*/rbrKgDJa-"@pW2+3[u0b%0ck8!<JPfJcLB& JcLB&qu?j#":PkC`rH2C!sJbK!.k3&!;?I*":#8C&JPut)&X8-'b_#`"p;44!s&l:!q--J!"T/9$4IIZ 'bqK"'FtW["Tbn/JcLB&JcM&9aoDtV&gB+r<bmJhS:tQH2^K+>df9X^)_F*B>]l7,#,RlMF]'t.M#`,- o`,@%"U>DD%M06a$O-[j!$qXL#n@\+<,mtdS"67IUSFW_W2Q_rWMuhoTpLOW>!FAG#mLJ4i;i$@'EJ:= "Um.eGa,>E`Q"6T3YVc$!Wh<],QRrK"VrRN9jMRaPFA#6TqnK]VPg>kX0Aq9Y+p;E2]<><"p+>rJcLB& JcLB&V>q/3*][5:G(GO9G#9e!"p=u/mJuAL%i732K8YYFMgoJ?3$K+G"g%cV!7:cS":#;G%h&dO#6Y,1 huFo%$lC?M8mZOoN/j!]OcklkPa.Q$R$3\mLj<T14t.<T!WN2>!"]2:%i?NR=`fakR$<P:3>hqW!"K#4 "pb\]2+h4hE.!G"N>@V>Pa7T%QBd]!O+_^k=?Il@!s&H)!LWq>!.k3&!/:IU!WrT3&/I99Q+XQ-SVLfH +9_iL!WgmQ'*87>"s??PUT:/WNHJ;`*=`D^"47+#!3lM7!<E6'"UPPJ%LECC!sA]-iW(;*!!3c]5$2TH L5h:VP*;/rQC!l"OGesPKnY"h:cT[:&.&F?!<L1?&d&Xb/Nm0SLmW*W0bOp(#Qt//pAjO[,Q\2](EbnJ KW_GTTpCq,PEM#gO,]-VLP1"e<C/Aa(((*D!Wfq6JcLB&JcM&9`W-2K(bJ0R(BMYY"UGkh1-[5h%0;+^ JcNXf('GI87nZ][>$PBA?X@#A=&;LW3>r,'fDsk1"TocC2&QVI!!iiC+YlJZ:K1Kq=pJ20:J3hr&-_A" JcLB&JcLB&V>q/5)_jNJ>&B&._lJJt7P>V]mJuAL%hL'I5"\sqS_)`G^7B..)6Emj!7:cS!sT,D&JQ!! ((UZQhuF/d#7_Ii6tV%M\@8oWrjr'@%DKQi]tVG6cG6N4=Z.&u%1!+<`rHeS!sT#D6Yq^fmf*7c`e$c# #R(;2j8]Yj!<WH0+ZiG'Bm5K;\$uFKqn!BP]t_k[p%.=NHqbh)&I8E*!.k3&!.k3&!"]Ge:N`"tVlHe` Ccr@;"p4nT!"U5JJ%!>7\ur*'H;udD%gC>\JcMnQ$O$kK(Dd_r%1*7B"6':l!!!'3,WSP2I?^Y1WiN8& X8K."Y7.P7YH!k8?pGtI!!*,>!"]5?(*PD0EKR6Igt9l/9d0`5!:0[s!X/f<(,&<nK8u=iVQ-buXo,C6 YHP(6]!eZ'?oT#+!s&H(]`<WaJcLB&PlT)0'ESFD$6N$#dJs7EdA(tf.L-(Y!s.!R$j$S:#VBGVr;Z]K Z&Js%7jScX#m6"aJcPTH%fl_5!s]5H()%,a#6Y,1!oO%g!ua4)K:K*RYc"M%WN<3!WXu)+VP^2]IUl#% +VtRi!s&G\!9X=q";NCM=*U+6Xa!u0'+GEX"9JT)irBVm$5F[;>)gN$s8M)aWi2ttr29Ok$^lBQ9K4[I %g)k6!V6;C!.k3&!.k3G!!`lW7WG?B8IXe_j8]Gj+[K\(^5"WUVuVDLT)]*"-XjC%`lQ9ub6Z85aN)90 AhOVk!58F<!?5IfK0L"Mec5sV%P1.eQbg\^!Q`C\ap?)0a0]qT*XMk1!.k3&!.k3*!!<6("U>SN.R?g/ @s=3Sd'o'I9/7Cgdf9mj.QK^d>^*7/oAe#lF[d=t!.k3U!<*!1!Xf_d/i#:D4#%ut$j?_7!Tj@h!!!$( &/ZW`B7m_a^C7p=jkS(TGZ$7?(CUDd!!r]5&f`E$FcX<+rr35SN_^W$"p4o%!:0[o!<WK1%k^FXB6/]m \FmTI`U*X)rmIKY6S]i!"Te`+^]8rdJcLB&PlT)0'ESCA#oYs9MQaCp['$$C6P9b3"9HsO#U<9(_:$]O Y.=hAMdSUj&I"!kJcPTH%fuh9":Z1n1,1@2-m'-1"9&>]!!iW?-U:aRMP.'@XUMAFZ(H\S4!"V/!WrM_ !9sOt!<N<,(+2+<D2=mfe)fN=PYrb/huF/e#7hUp5$`H&U8FokorSY+`R<#DL0HYY'+>$FoDjICJcLB& JcMeN'EegY+#dl1o)JaW_5Dlh0F.da!s.fil2V"i"U>>iC:=-A$.uACCe?#e%LE9?!.k4%!"o;8"ptkV +=Jrs,odX0$3gS5!TF(b"!9gDS$^5`Wq!+qVi,V"5rU/,#6P)3!s-RF(BFU@"UlS:=Eg(7]rHQc6m3'Q $j?\5!TO.f";)h58Tq/us8VN.ri>do%&Abu>Y7(0(^:-G!s+eiJcLB&JcLB&$31&0,"HOBbhZ_Ab5_hV .SkN"gpB]e!R1Ur!.k4I!!<]mLtqO_"lGqS-jp'f!!`rrPN8iO,R!W;jo>Si,uJfU`o?[R"l6D'66?KA !.k3&!.k39!6tQY!sT,F,!]+5A9!<s_9fWN@nAEn"4I5U&h,k+93c\Ais+u0`Lq0;)2S?F!;QU.!<N?, (beNkCN"36@7N!k%grRCj8]Gd#8%k#8n`gcn\5LJgZdnX]q'CN5qNoWi;i$@#m1hf3_<h+O1t/`rs-u2 :)aHB!s.H_$ipM=%iIK0Bm,&iTY'm3&B*B$s8V?&T6XO%,Rjq]!Wi&rJcLB&JcLB&WW3_9$l'j?<-4J7 [^NHDT6!:2$O-_7mJuAL%jFi#[`Q_3Y.Cfo?TKDE#-@lW!7h,]!<`T6$m%)k>@1]A>=^Fc#5nS`!!iW? .RI<\N1m<AXTu>IZD2bL3#Vl0#mCCR!#,G9"U5J`5[AVnS>r[<inVh99-=>p!"K,@(aV"9D2+d^W3*/' XnSq.YJ&90b,gP?;`Z*3!<<*#S,e-@JcLB&L&_;\(F_NZ>DTias7OmNVh//-#Qt;4!S7;U!X/f81MjW$ rs@G^P&!T6&.JjHd/\auZ2bO=#8%k#1I4lF<Cf2'+VkFf!WiDa!!rW*"!9pLTtAOsn>ctrR"0'[:HKd1 #mUS7b5`=["UYeZ1fAI`XLl9KIU#;_',1lZ!W`>s!:0[n"W0!gC6?-us7+XPoW&J!Q@!LY:-'X.#mLP9 !<Kq8JcLB&JcM&9aT)VK(.*)-\_#YH'?^@[#pr;kZ.u\f8eD)X!.k4A!!33(!S%/P&3c!-n`C&8\pmR0 %ftDbirB>n/n;!EW`gPIf)Q$V'L$i2\'sC1jp'\[R;YV=$17eF!.k3&!.k3N!#,PD'-/i(@r6UMRBXNR [>\Nc0Gsu\!9O7l<S'9O2nEj6YI6RVP/*XT3qQeGp6a"9f&[9PocYUo^kjDbDZ#&dng&!!iT2&fi>l B7RJ]^BhX"i9'7R]q^8`@R;=Fa8cPJ#9Z0+=ClZB^@D4&#LA<&)@$EJ!TX4j!XB2O,Xl*`Mj'd9]YD5U ^C\6+ht$aDlI<M(>;[0)#6Y'u!.k3&!.k3*!!<B=,rZB1C4r=h['Hd9ST@(.$3gS5df9n$97!_U_nW@d XGU@G,SLC0!.k3V!"f58$P=1.9P&j9PFA%k:FQSMrW2-]$31&-'e;[XG)i;tnZ<5&[_',[R!D^f+qt=d b5`4X"U>AM2d:p3Ydh*Cce[$dI751[o`4=Y$Nq(e1Ikr$PGkI\Wq3>%ZbOQ.d`8_dBKR16!!0h7JcLB& JcM&9c2\Oe,sc!pW65"ud(ZZ\KNp5="U"o.f)Q!V"U>>jDS,oJ!oL2E#&HgS%giREM#`,-q>_32%3-ra ;J:E4G@XT<2'`nA!!*-%j8]Df+\-[S^sUg(Wsku"P(e6o8h^qf#mCCh!:'V#":>b\.nFK?\\l=qWdnDF *Z5\%"T\Y`!"/uT6th^ec1'W9^p3O4&#c.bKlp`j.Llmq#6P#.!VZSG!.k3&!.k3I!!s&iD5b.oh;)KQ kQ'ZD#RDVDFKXE)8e7j#JcO*s"q<=B-5mBsf`2-U'1%T5n`C,;dB\dM0an$^_#OfC&isHa`T=("*X('p #mVkbXhW3:jQ>V!jp9ts^SlfU*<uV1!.k3&!.k3*!!<B9*@h[c>&K%iY-bdVca/O:7kY_^df9mi-9"1a ?[Aa3kLI,,Aj.$Y!.k3V!#,G9"pk\t@YUi%iq30$SnUA7)\<28!"&]+!=0>[.84?(\+.3A^r!t2e*Q#; Z\Vg?$c`5]#qSeS=D!#S^[_@(r6:*n)$U6H!Vl`^!"8o8'H\o%B76b`[CO$E^BMEj`lZj3rr35=I7PCl $O-[K!.k3&!.k39!6tQY$6M3'BRlDIYH+_+Y+9St%g`CA!Rh#S*_1:G[_98S]*>?n>ra,C#)N>3!;Z[0 !=',Q,!odmU:]"@n\991%KQP1!TX4d!uER[@!Id.X7<=kXpMJE[[VVC2BWJ3i;i0D'ESFF%j";fX5M^V \#mj(aL-(Q)[#!u$O%:s6X+YjTrP)lXRiP&Y-5+Elgs]<V->5H!VHGE!.k3&!.k3N!#,r!?&lD;hVPZE XK&1O>qu]i"Tnen!9sOg!X/f820$>/rs@\iP&*W3$jd.@XT3qQec6Bc'.H1LFd&W#MfN3'5Va>e!s&H( j8]Df+\I$daO]2:WsG`&V4sK)=Z70"%grUEb5`:\%iQfW?\YlJfu'nlJmq4n*>o@l!<M0[%L4LbL:PUj mC0@%X/`5$p8\\$US4)g;El34%LN=@!WeekJcLB&JcLB&$3hbXU=e8Yj5",Wb5_eP*^O_DgTj<[bQ*4p X8iM96CjTk<BD$!huNWS"9B3)O59?g#Nagse&Z2L"i(*F$Trp2^=MGG<ZVD6!9aCg!>RnWf\GBDjn7aB jPSbFabin<"p):8JcLB&JcM&9!!1OKrW*9+$QLib:1SU;r4`K_Z\i'Y0,Of?!!j,_3'^5HH)fj.jjCGr @ltN`!.k4I!#,G9"q(r-C5]XEiqWQP[sLUr*tee=!"8l6&fi>kB8*e2_7dP]\f&#d['?d8XKAh8\%95e o_@b'VJSF-!s/K(jT+TH(]a^B#o5^*>]>@XWk\*(s81#s9c4-<!Wh?^.09no+tui.Lq^[?a3MiI_SEdl ['6^8XKJh9\\,f<rr<#[Rp@Wf'FP!;!.k3&!.k3&!3Q;0!WrQ/&hQaiJWZ_-rN-@.ST$b'#mCD3mJuAL %in&VS?fZ8Xh1Zi>W<rA#-@lW!7h,a!XKJ].SauGWjgC>o]hE*&HVq5!TX5(!Yd+N>]PO`W3*/$X/W.u W2HVkVl6c'Y-G47Y-#aXTmd)@0,=]i!R:ZZ":c:p3G"Gphp0$EXi]&2YAZQB"5j.h"WB-gApoo>XKJ\/ Yck5;WN)qrWMZPlXKAQ&XU25Ynb2Y%F#!gtrW/PiJcLB&JcLZ.#6G#4#TZBYYQNP?l,EV%#cE>^1C=9h !s.!R"p+r5#rZe;rr3;cZ'&lm+:SY_"47+#!3uS=!uNafCQ>L3XIFrP9h7/e$N^A1!TjA0!!!-G89Cf@ _nrFJTVJ9YUSXfdWNWM2YH=b#W2ZetJm^_\'bCZRcN!qGrW3iA(F_IFHCr@,\u_d0KORFq*uPRn!<Mop li8F>04'shiU5X)Vl-DeTqJ0UVQ-Z"Z*Ud>XK&;$V2/&=3?&kJ"p>&1^]8rdJcLB&PlSu-"9fc7I`MEL !o78tb5__N*'\8<gTgiM&;1%8!;-<u!?lC9fXd]'-jSH+#ltMnDRdNq\?`F>Y7IkF]>;J3f\GHGjQ5Nh 5S)WMjo>bj,A=6sdG<r`<#l+o!$24_:nQk+gsa?`^Upq_\@]Mnc.1P)i8WhV]T$5X"RuJD!.k3&!.k4, !!!&K!"/f0"U>bs93GeHKV\O\#LB`6?:HRb"7?0O!"TVf3'^5HH)flcdBnsE4;P%!JcO@%'EJ=A$P>a@ M7Lafq#C<&Hq>k3'*dLt+TVfY(F)4RKX%qhVP0NJR$Nu"P)t]^KnY\\XL>n4rr)6i\U?se$3gS5cN"da $PX[;:0h:^Nh*Jjnc/Xec&#+3"p=u.j8]Yk$Pag=:htm$ajntmaLiFrVkKTIPECi\KoMFt[_^M`s8VGd F%%i-&d+[)JcLB&JcLZ.#6Y8?&gK\LHNTJ'W2ffu#d0_;4q@r'!s-jN%in&VS?fZ8Xh1Zi>W<rA#13F& !3uS9!Xfbg02cnUX1-L?o]hE,&cDam!%7gI!YQe@:18*kQBm\lKS"c*It30*M3+C:`P8piYcZ1!`N4&G +9_iG!R^uI!>Ge\2,A%HWmAr,\?`6[e]Y@B5T9k!!:0\7"W/sdA:0Q9XKo16VOWj1LkUP<LQ7^sZadKJ Xfo\#o_-^^4q.Yt!<L":JcLB&JcM&9dJsXY%2C!F?B)_^l.ifIWsGVV?8Dol"TneW!!WK.#73;.^Ae-6 jKXjPCI]KV$3pZi!.k4I!#,MO1Jr.UYJdK2L1!_H2^/\6!s/Ma!!r`I4CO57Q]d#RrdYi8J:N3(NgHE= Z+7QLW2?JnK4RIr*>](crW2'[mf47-"9o,E-9td^R'Y,LY,J1tJmh+k*#K1i!<M0[%1"UkPKDVIhQ*H< NIlc]JJa*"P+&5Tb1=SEZ)X^gDb`b^/KG0&"9S]"!.k3&!.k3&!2ol$"<^0NT[E`#!o78tkQ'ZD#R285 CoH*o7hDU!JcO0u#m)>kgXs*0I4,?R!#u+V0MtY:4uG&K/hSn>6;1X4Tu#11hW![p;B5l?!Q4sH!>IkS _p@#ok,D<#"P<\]!uk(/jjL>iBNn7H763Io6V(:%QF"TZg>V)6We=jr!g`n=!.k3&!4`(0!n.,S!X/f; ,"5mY"*fQcZM_HBca/L87P>S\df9mi-9+7c@!Sd3jjCGr@ltOS!.k3V!#,G:#7V>6Bo':@iqWQP\9pq$ +VP(B!$D7A!<iiE)`Uf=R[8t_Ebf;u?t!VZCN"?8B7Gc+YeT?"rs-f-;C3"b"p3-O)$'pU-8e(e>]#au XLGt7s8W)DMG+ll"9JW"!:0\7!X]Vb/l-8;^<tKW_m,hnI!'IICiFQ>E--_tYJJE;m/$.]N*o(-)?mqW JcLB&JcM&9!!1OK$O.(W+Z<>@O//YQXSo7,Y+9Mq%g`CA!Rh#S*COh9ZFIHI]*>?l>W<rA#)N>3!;Z[, !Xonn2-+pdWjgC>o]hK.&cDak!$q[W+#-)W=_;o!BO=e<:ej\\<aK<VN2k:S`k&IXd,s?@QWGU>r;l![ mJn%(!W`cb=+R3Va4.f4['6[Wg<RBU66$-d!%A'h0M,f%Of#4cWg\ciD.?^N>?tZSJ!R7P]XY&H\]`am c\>+3%1!+=p],mGJcLB&JcMqR$OIXu3`^U%bNdm*Y5PC,VhAA4$3^S8!U]sQ!!WK.#73;.^Ae-=jKXk` 7j&6J#6V(.JcO@%'E]41<-4M6`2oG_?qj0M,7ObX!Wh?^%0IG%:igc!Ch$gV=Ar,s;%Qf@E.<qC[*?Cl W26PMAPk>i,p!U$!WiDN!#bnC#nJ(;=b3N\aN^`_VPpPH?UYtR((LKK!TF(h#VB8@_q4),X.+rkB450d >Zb6ADg7)8`pr3=^9+?'OEXu05UR$I"U"mt!.k3&!.k3)!!30<9*9^;_qY.P!o78tb5_eP*'\8<gTj<\ bQ*4pXT/Y/-Zn+q\t=C!#N,UX!#u(J((glW!W`<%!!*3-$lV0>R_6epi9%Fb2@ou0!"B#G3bbJ@g>:lP WDjl?nGqbQ*s*BVT&mV59ILek#Qt55#RM5$=Fm9\ce[[5_QTCa$G-:i!.k3&!0mNa!n.,W!sT/H/lcnH R\R1!r4`K_Z\i'Y0,Of?!!j,_3'^5HH)fj.jjCGr@ltN`!.k4I!#,G:#n7S8Bo':@iqWQP\U@.(+VY.A !%@pP#S%Ou6X4nT>Y@(4/Li(o/M]=U>$tNFI#Fi9f`(pNigX=0)\NJ[jT+ZJ%fl\;+#Z>O:LAd\[(*`_ nc&Onc\bC6"p=u.j8^V1$5=R6:i(p$e^D77PB^J+5<_1k7Ta,-ATNX(^r+4:eE=lJHs8cX#5A1M!.k3& !.k4,!!!&K!"&rG,;Df(KV,<IX8K(*Y+9Mq%g`CA!U]sM!"U)<Dk+,C\ZNKFLKle`'*bQ=JcO@%&-<:[ .QUdZQ)_=@kk+,#8JD%'j8^>)$lLEO4@;\=8j"dQ*Zc7=+"/p-:N`;WlINn^Xi0Vun-?^H1C!m\!WgaM rW*`8'L[8UjQGRGZE^U9Xj,\N_L4io"Q07i"W/pb@<dm0XKnLPB2qA=2CKt*1,hd:KVuT"]!&9A[CX5m NE[nN%gW9.!.k3&!.k3.!!`uY4^!'![`\ci[]c_0WsGVV?8Dol"TneW!!WK.#73;.^Ae-=jKXk`7j&6J #6W?RJcN(V'E]43=*pIHaK1kc?qj3P+q=bY!WhE`.KBGM'.?.M<DH(L3%ud*+W_^K-T4M!E/gmIi5;ar X-I-k74ol$"p+i,dJt0g#nRn$96dZ-o&RH[VPpJpJR(Y_(DI;^!<Mopli8I?/QdqGdc92bP'US/5WLMI /N?*nBTTh!s6@k8Whc2SQY]VW%g`IC!l4kg!.k3&!0mQ/!!WlnMoa?$i;Md>h-gr>!!WWI5A[:QZ2mH, KE-T(o`,:#.<jP!\t=C##g!&U!>.>4U:SV)k/NKj3""LBkl;1p)a@nu`8KV7jQ<F@*!=gn#ltr=S`QVG +pJ)D!"KAe=+[0^g#_/HeB;&7!V6;C!.k3&!.k4,!!!,N!!iT/%N$EVA:UBK^B`)kMI&b*(^'1+jo>o' -9+7c@!Sd3jjCGr@ltO/!.k4%!#,G;#S%P7Aq[86oD\dVXE?u`*tee=!$M@F"pte\0L8]22^]CP$O-_; #nRjs5Z1N[@t'o]dd[;:#P+d+3$B%G"4I5X!<N?-&M?F=9NZM+r4`7%rr35MMG+ll"9JVb!"K&:'-8`$ Cl?Nb^o30.;]7_B)]0A,+ZrM">%VuD]">Vh^YmJHP&!T9#b:sI!.k3&!4`(0!S7;Z!<E6'%37/m@!\!7 q5jq*ST$b'#mCD3df9n!6uSU$\@J`RXG:%?,81:/!.k3V!"]2?)(@RIFHEH<jnJN#K0p7L!Tj@m!!!', 'HSbU/MJq.*"`DZrW<u?$ksd>?]W.qkL$iB_;FnYh1%Hj!!!$#df9aW!sJoO=.%hAo\$kSXU!2/eAZr- *sD6:li8I<(beNiGDVcoV2K(W1F!YC$4dgh/5C/KZam]YYHG%1Xg+"#3@#=H"Mk(i!.k3&!0mQ8!"/f/ "9]Jq<-aq=`Ou#I#cE>^1C=9h!s.!R"p+r5#rZe;rr3&\Z'#<,7j&6J#6Te_JcPWI'E]40;g+J/]X!`C ?;a0L+q+SV!Wh?^,m"T!0LRuY.No`E%0m">"9o5N.QUFKS&t]j_Q0](Db`_Y.2`Bi!WW8_!:^$u!<EB: *%='`QfA&>a/T!;$%Q8K)\j%q"T\Y`!%A.(<JJ')cc2`8BhpE-)\`\l)(%"-Ei%[ns5LYiWN)u!KO6eR #mUS7p],mGJcLB&JcMeN!sBo\_tiErh-gr[!9=+c"rojDW8"UJ&?#S\!7:cQ![(ph^R'%F*sK^c$N_2> J=s[.jisfW?i^lA`rH8S4D0Y]f)4Y4WDso?fDl-W(.*c"D_)1n!;QU(%5Ct5VpFGbjlPWP-Nf_9JcLB& JcN=]!!CgQrW*9+%jX52@<[U,pqI'[Z\i'Y0,Of?!"TVf3'^5HH)flcdBnsE4;Q<EJcN(V'EJ:?$4\dl GEf/>a3_/G=Z.B<%0bko.f]PM!sAf7'd,+k1FF.R$O6h;!s]/E(c"QT:0;=n^=)NNs73($3$B%G"4I5X !s];O-:(F(=D`hgr4`7%rr35MMG+ll"9JW"!:0\7!X]S_/5'fEd(,]t@SJp6)A3Yo%i6]Z92oA:H_7=D \A.+S\sRG0.1*fjJcLB&JcM&9!!1[O$N^J8#8f*c@sEp%WVNY%Y+9Mq%g`CA!Rh#S*COh9ZFIHI]*>?l >W<rA#)N>3!;Z[0!XKG\.77BbP+Se^]Tc\U$NU5.!TX4h!<s#L*ZlLH,9.@*#Q4`A":,JP,trESbgF\L Xhioep>(3Z#64`)!Ta=M!"/o<'d,SQT%rttb-q5M#LD8V`ILE""Q08/"W9'gASuaGRt>6E/g2#A#6tSF &Kj)4DMFU`_76kXYH>3sC-3dY$3U&'JcLB&JcLB&Z2b78#S%Lt8T'j!^W<n[WsGVV?8Dol"Tnen!9sOg !X/f82K?J1rs@bkP&!Q1%13=BXT3qQec66_'.5qEDM47GKPaj^3@l$UrW<-%j8^>)$5Fa;-mBWI&If!L "9\l2#8%q(3a@EGm-WQ;WgI^"70>Cr)$g-B!!1[O!!3'#$On@B<,e&1me>5=Vu3S%J6YJ]'bh&[!<M0[ %L4F\J[)AQOaCb?4!5@R)@Zu[&fDiL<dgsig#:>VVPU5lKO?hS$O6e9SH+6AJcLB&LB%G^+\RX<q;qb7 @1p``#R285CoH*o7hElEJcMkP#6uMX=@=e^#i>XG!"9&Y:3<2RjisfW?kNO^!!WTT>`Gf)g\g19WDso? nGqbQ"p,5Z5#EU3o`,F%$RJ>g[+a?oj5th?"2"Vc!.k3&!0mNa"4mM\!<E6((cto=I#")opqI'[Z\i'Y 0,Of?!!j,_3'^5HH)fj.jjCGr@ltN`!.k4H!##D:"plM??[7<_P*UT'59psS#Qs)e-isJR"q;4c,9Rg8 $3gY9!WiN0#S81;5t>'mMS@O.s8VYfBK..N$j5Skmf3_"&/uuX:g74LLR,1B^B!g'rs-o.9Gn$;!Wh?^ .09hj+=p#pN4#$t=["G_)%[/`$4.1[-8S"mAnd*cUU._rg;'8&:+HYG!.k3&!.k3&!8RVT!S7;Z"9o8G ,sl$hO.)lGq5jq*ST$b'#mCD3mJuAL%in&VS?fZ8Xh1Zi>W<rA#-@lW!7h,a!<ioG)(n?^Ed)bSH=&fW #QXr-!os>)!<`Z;'+tok'G(WW!s8T,!WrT4%2h02J#'6V\#dF'o_&OGIl[f7!!*,L!"/uH.6L^ZV:=2@ ]X%I;#LD8V`ILE""Q07i"WK9nAnP[hE*GX[)A3Jt#R1G:#RV4k2b[Y0TZ+pb[]usBR;YD@)%6V<!.k3& !.k32!"/uB)^[dZLT\M8`39!;#cE>^1C=9h!s.!R"p+r5#rZe;rr3;cZ'&lm+:SY_"47+#!3uS<!Y$(u 4%imuIW&F_3\)0_#6P&/jT$Y.!!*64'-%i'&.JsP"Tni0!s8]7&/Z`bE1YG1gW-@^Db`_Y.2`Bi!WW8Q !"T)3!sKN%?AP`%f^6_eWhoWo$%Q8K)\j%q"T\Yu!:0\7#:E8pW0MgE<^o"o'FkHU"pYMH'-]J>GaY_P e?Z-QVQ5AV3>2c+"TlL?JcLB&JcM&9ci=4T/m!S-g%jb3h-gr>!!WWI5A[:QZ2mH,KE-T(o)Jps(`3bh "2k0I$RJMs^#dM=Jm]2mhZ2sB#6G]1K=/bMi;D^>WDso?fDl'V"q2"Q"7cF""WpO)b1#,(k(,#co)O@B JcLB&JcOU,!!CgQ$NU;3"XR#gMNjd9](j#Fca/L87P>S\mJuAL%hL'I5Yb^4WoE-f[#\]Z(9IRg!7_&_ !<N?+'dl+A=Bo3A;*63@$3gV7irC2&!<N?-#mq1O$3gY9!WiB'!WrQ1'-Jqi<,.3&dd[;:#P+d+3$B%G "4I5X#8S[F86]bMR%pmqr4`7%rr35MMG+ll"9JVb!"K&<'H\km>BZ'H;)K=,%iPf["U,#2"ptkU-:qNO H&%]g^ZXFkV0Yuj$(V'J!.k3&!4`(0!S7;Z"UbkY0iiLaUo12nq5jq*ST$b'#mCD3df9n!6uSU$\@J`R XG:%?,81:/!.k3V!"f57"UGMT.m?a+9LqN/,814^rW2-]rW!!$":"i1"UPG?"9Sc*!Z;"?!sAc:-:D<n PGG=^_;FnYh1%Hj!!!$#df9a`,<f:QN2OV+[^*+7XU!2/eAZr-*sD6:li7M!)`CW/?;jE]0Hq2<#6t/0 (BajE#ne7,4D0hpfZLk5XgjjB7kGYf"2Oth!.k3&!0mQ8!"0/P.61LXT"N%V[&Nl%#cE>^1C=9h!s.!R "p+r5#rZe;rr3&\Z'#<,7j&6J#6Te_JcPWI'*/:K(a(Cm9O1I\0dIVK#m:;1!TO.d!<WN3$OR.E"pOu. r;mZ8"U>AK1g>gKak+e<Qu>_g2(9CJrW3'#jT+lP%fuh:#9Zcp`:3a*h5R<KW;N\&J6YJ]'bh&[!<M0[ .0h.kGFs7h6Rs>t&.&OD"9Sc1"UPbd3)=:KWm&JjWhlbJ?TJi.#6k8)!.k3&!.k3&!3H5*![i,n_:7B< joX@I''K>V!!icK5A[:QZ:>J)!.k3r!!!&8!!rZ4.q#C=c)QA'!>5IV!!iW=1M<i@gYh,ijo_S_*!=gn !W`?'q#L*g$3`#&\&[%Vk(,&dQiM^<JcLB&\GuU3f)Q$V!sJl]@>:i]^\GPKca/L87P>S\df9mi-9+7c @!Sd3jjCGr@ltOS!.k3R!"]/:'-A_Y1,_3K+r(@b!W`>a!9sOu!XK>T-VS3,^XDWOs73($3$B%G"4I5T $6M&h:18@8pqHh!rr35MMG+ll"9JW"!:0[o!Xf_c.m6U6CJZl-"8;d.!<ETb<*Em^N2=;Si5hmI<%\No !.k3&!.k39!!!&O!!`Z:(*>_OLo9pJ#d0_;4q@r'!s-jN#TZ<OS?fZ8Xh+e=LKle`'*a9nJcPTH%fl_5 !t5tk1,(1'*uGLo"3UZY"W9$c@saB:Xhioep>(3Z#64`)!Ta=M!!a#d;07kkW2o]q#LD8V`ILE""Q07g "WTL%C0!PN)%[,Y!Vl^0!X/l?*_qF+l.!VZXgt*K9J7@q"8DkJ!.k3&!.k3V!!`uV2GJ%QZF0A+#cE>^ 1C=9h!s.fil2V"i"U>>lEPDGP$08@SCI]KV$3p[8!.k4%!"]/6"pk_T,;;5:-6!O*#6Y.P!"9&W8p7)F cI&YZDb`_'2(9CJrW3'#f)Q!V"9o,[A$#\0!WL%4WsO;]6lQjT$j?Y4iW'Gm,=lj@BL3jM#6b21!!)lr 'Eo*l0Lp#J`SSG6VlPGU3"u`+"Tk4pJcLB&JcLW-!Y/,IrT<q<!o78tb5_eP*'\8<gTj<\bQ*4pJcOp5 $3:l4RcM_nJm]2maoDPR-VoTApuV[X<?),2!9aF_!UKdm(0RHFcJ7Q8/HrceJcLB&JcM&9J,~> %%EndBinary grestore np 564.807 -0.24006 mo 564.807 284.711 li 777.24 284.711 li 777.24 -0.24006 li cp gsave << /CSA /1 get_csa_by_name /Intent /RelativeColorimetric >> csacrd /1 /CSA get_res setcolorspace clp [1 0 0 -1 0 320 ]ct [212.433 0 0 284.951 564.807 35.2888 ]ct snap_to_device Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf << /T 1 /W 885 /H 1187 /M[885 0 0 -1187 0 1187 ] /BC 8 /D[0 1 0 1 0 1 0 1 ] /DS [ [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx ] /O 3 >> %%BeginBinary: 1 img JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&Nr].[pAfdFJcLB&JcLB&JcLu7rW2TjJcLB&JcLB&JcLB&QN7!cmf7q>JcLB&JcLB&JcLB&JcLB& JcLr6JcLB&O9#1Zp],mGJcLB&JcLB&JcM#8quQEiJcLB&JcLB&JcLB&QiR$bn,S%?JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&O9#7\$3^bH'GD#d$3p_:!!.]PJcLB&JcLB&JcM#8rW*B0#7:tO$OI%A"9S`)!.k3& !.k3&!.k3&!13cc!=K#8$4dXU#mUV:!s8<!JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLl4rW*?5(*tak -m9E?$jH\6K)gK'JcLB&JcLB&PQ:[`$O77_-mg#Q&e,*L"9&:P!.k3&!.k3&!.k3<!<*!,#SA(*-6O0> %1*.>q>c*IJcLB&JcLB&JcLB&JcLB&JcLr6JcLB&OT>=\$5"UK=A_IE-ls'1!!@iRJcLB&JcLB&JcM&9 rW*E/%3.&k5rC,6'b:QPrW%NMJcLB&JcLB&JcM2=rW*E/%3@5o6T-G;(CpcSq>c*IJcLB&JcLB&JcLB& JcLB&JcLr6JcLB&OT>=\$5YU'G]R7e3[u-]!!RuTJcLB&JcLB&JcM&9rW*E/&Lp:\?;<X8+;P=frW%NM JcLB&JcLB&JcM2=rW*E/&M$Fa?Vis>+;P@gq>c*IJcLB&JcLB&JcM):!=8u!!.k3&!.k36!.k3&!0I9[ !=BW$>'YC5AmA%n/I3F5&I]!N"Tnd`!.k3&!.k3&!.k39!<*!0!YHqRAS#.G8Ne^O((^o]":#&4!s45X JcLB&JcLB&JcM2=rW*Z6&M-LcAmSG05;4;u&.JpN"9\f,!eUK)!.k3&!.k3&!1!Te#mg_9nGn.@JcLB& OoU(6JcLl4rW*??0268+G^Y-gCg76>4u"B'&e#$JMZA>/JcLB&JcLB&PQ:[`%M'gJ=C>WPCh6^?4>8*% ";M@O"p9V\JcLB&JcLB&JcM/<rW*WB,sPL@AS>ml=A(h4-6<m2#mLA4K)gK'JcLB&JcLB&Q2h*j"pk\L #m0`!JcLB&JcLr6JcLB&NrTRh!>-_H>]G@YT:V:'#^U8e67s>p$jDOhJcLB&JcLB&JcLu7&-2e@*]-Jp D1.>!Ir]+&75P,l((^cTLB)o+JcLB&JcLB&QN.^#!=^,-9jVX_M2-P"AlqP[,Sq!u!!IoSJcLB&JcLB& JcM&9#Qt\c69cq9$3Kr%JcLB&JcLr6JcLB&N;s:p+uW/5Mk[SeYc%i"P'UJ'/0GQ2MZA>/JcLB&JcLB& OT5jt)(IdPFcWAsT9bC`APE:b+r1UlLB)o+JcLB&JcLB&PlMF')(RpTFH)uhS!/\UAkk6/(CpKMK)gK' JcLB&JcLB&PlM*m)blm'Jm_"o$MXUQ!.k3&!0R>6!.k31!"')O.6M!mUq+.KZk0I<P^R(74"D<_$jm4C "9S^h!.k3&!.k3&!.k35!"K8K+"g<-OfGO`Un<g"BFIa"/g(o;#mUV:"9S^d!.k3&!.k3&!.k39!"oPO +>?W2O/8kRTpq-mBN%#H+p\qm#m^\;"9S^`!.k3&!.k3&!.k38!!sEB^t-2lJljK2q#H!HJcLB&OoU(6 JcLc1$3q1a.8>&X[(<fW&[\d;Q\]p$>"C\-,o[I*#Qt0m!.k3&!.k3&!.k35!"K/A(*>\LM572PVkfrI Jdla1<Cf,%,T@I-#R1D4O8sk4JcLB&JcLB&PlMF#%2L'NAVZtWVkg#UO+D:]=%N][/gVMQ%1*4A!K7#1 !.k3&!.k3&!0dHl#sP-(\ZMNV<�p!rN%M!.k3&!0R>6!.k31!"&l:&JmNDPH_R,\IlB^Z)aXjP(e0r <^\Yc((LQMPQ6:8JcLB&JcLB&OT5Uh#7V7t<dp\>WWK,lR15:7I;`Ur75ZD/&IJ[CO8sk4JcLB&JcLB& PlMF"#RqA!=+$L7VPg;fSX,=kHZ'4$=%>.q)%d2Z!fR,2!.k3&!.k3&!0dHq![rZ/[^j)TN,DTV-5?df !!%TNJcLB&OoU(6JcLc1$3C>7#q9&6WjK:I&\Ylj\[]#MVOj!"AP"R#'ak)-!.k3&!.k3&!.k35!"K&5 "9or=Eg``'X0/P,WXYu(Ss,"ZBMpl:)%[&TO8sk4JcLB&JcLB&PlM-m"9\rP8TC#hVPjEn"K&&iRZIi2 HtZJA-5mI%!fR,2!.k3&!.k3&!0[Bo(MBYQ`m`Yb_mH1d>!FAC!eLE(!.k36!.k3&!/ppW!<sQ:H(V:I \H'>A^D+Dp\$2m"JnR_8.2iU$#6b54!s&Fm!.k3&!.k3&!.k34!"&`-!Z!k/Mk6`EXT#=:Xf\b(T:(=K <&uQP'F=sI"9\f/!WeYgJcLB&JcLB&JcM#8$3://(-H2cS"ZaYrMp!uWh^5sQ%EgQ4=qZi#mUV:"9S`- !L*S9!.k3&!.k3&!0[Bd#t9?=`8(=R#3!b-MJ"[U!!7cQJcLB&OoU(6JcL`0rW*3>4_K_IXL/&Ar4`oX \[A]>R>H-#=@P2",8q1'#mCC#!.k3&!.k3&!.k34!<*!(&MI+-N1-WFriHp;Y-"_$TTb%L@T5fU.j>oH %1!.@!git>!.k3&!.k3&!0dK_!='2j<Hj=eU8n0m!iW,r&YbhXJoY=#7li1G*#&hg#6Y*m!.k3&!.k3& !.k37!!NEE7W><[rT4=Df#+GF=u??u#6KSZJcLB&OoU(6JcL]/#QXr=0MutQU9FX1r4`oY]XbPXX.u/G K6M!06o#u'&./N0!.k3&!.k3&!.k33!!rZ,%4"5IHB+W#riHp;Y-"k,WM,`ALO3oJ<(/Yl)\EG_".0(? !.k3&!.k3&!0[Bh!<E]X6Xb8!S>uOg!iW&t&Z;LtQB$WDDIQX:2CKOW$jQm!!.k3&!.k3&!.k36!!EKK 8r(Ugjp'i"d)<2MD?Wir+qb+^L]E#,JcLr6JcLB&M#[_h,X,@VQ)Xhpr4`oZ]tM(j\[JiHURREqBMLB1 (_$Y=!.k3&!.k3&!.k31!!`fL0LoW'RB$7gqlLC1Wi)Y_ObeF"<'DcN&d\].!.k3&!.k3&!.k35!!`fM 0hGo)QDa\^!ii2s&ZVk0Vk]rRO+r!q<^8)S'+"f+!.k3&!.k3&!.k35!!<KWCrH;7#3=b!gXaEU#HF27 <&u?7!f?u0!.k36!.k6'!Jpg]$5tH\@"tHW\FdNI]XY8KSV:iR2CKCN"U"o0!r`4r!.k3&!/:LP!J1?( !K@*b#8A@;:2l;priPmr&uq^qLi6BY.io</"9\f/!WiB'TE'QDJcLZ.q#Q'JJcUu7#7)"g1/MqNVZ*Uo X8Aq2WhuDTL2^6Z/0>N3"9\f/!WiB'S,e-@JcLB&JcLB&O8o=t;RZScq;qtFk16o%E'"g:MZA>/JcLr6 JcpZ.M$+"k(F:h6I%:8Erk8'@'>:udZDj=OG@acC1ajLb&e#'M"/GpK!.k3*!<!%P"G-c9":>DH)^dpa M5@;TXT5NuXV.\4UR-aY@T#TP.N]KA%1!.@"/#XG!.k3.!;QbL"G-c=":,;G*@O9fLS:aIW;`jpWtVM2 Un<m)FCS9=2^oje'Fb?R"9Y.oJcLB&JcLB&JcLl4"q*VcgYCZFqW8.Ik1dnXO^^9h#6KkbJcLB&OoU(> Jd@2="q24g-q/-A!O038^%f>U]tM"eZE'agNIc.^;a`Df(_I,ZU]>uHJcLN*r<@iXJd.2=$4.7Z*]@;S T<,2tp8nt1X/_q_O+_ao?;a-J-lWd.#R$e#JcLB&M?*GVJd-f2OTl1"&/QEI?@SHCWi2lqX8Aq2VlHYl T9bIgG\g_d75cP7'+G3MS,e-@JcLB&JcLB&O8oIf/:tpkgYVeh%Hcg/e&JbWDGE&2&-`2t!.k3&!0R>6 %"\nE$jI1T(E>>DN<H;l]"G`O^Au"I]aq]a['?[,RZDr5;*$$C&-ep1JcLB&L&h/XJd?r6N<fju%M9F+ ;0\J-X0)&s&Zi.9WMH2TOG.so<^85V'ak/;!.k3&!/^dP$%`J8$'>N%$4d^`/5pbXVPgGmri>ps'<%h/ Wi)_fSX,:gG\L5G/fk`9"IoID!.k3&!.k3&!07*`*bhn!f&$8c&*E$5h:pDuZ(R%n:c9L,!g3P8!.k36 !.kf7&Vq%u&csObK*7sV\@fNE^C7fdZ`TpZE)8A<((()=!.k3&!/:LP%>#%@%>bMu+@^72V5gZuXRE8! Whc/EF^.-\*"`DVT`BZEJcLZ.q$hobJdm_L#S/%JDNCKgWi5oto;`:uV4j<8FBq0]*YAYYSH+6AJcLB& JcLB&NrT=r<1UJ@h"p1-jp'SUR<;%>"Hrh;!.k36!.mUj7#45777B[MI$b&>\@T>dn@o[N]=>2ISW%c& ;*lu_*Yo=q#R(;2XT3qQJcLN*rAB0aJi/KEr\asPB7l_SX0(ck&uhXoM0EE*5r9r.'bLl\"p>#/W;qMM JcLZ.q)3g_Ji8]K$9'n'94rjEVPgGmri>Xk'W7q-TU(@W@o>ZN-QEp7%1!.@!s,4uJcLB&JcLB&JcLl4 "q382[)U\RqW@P7#MmM,PAEE'#F#4?!.k36!.oTMI"cqLM4:IF[(H=Nn@o[N]t1_[X.ku?IrSmo6Sg&+ &e"sFXT3qQJcLN*rF^^pJnKpQ#',HbUo^`$m]@/(X/_t`O+VXj>u*aC-l`j/#Qt4.!.k3&!/^dPB7acJ B8pO/EeK^OW2cepri>Xk'WA%0VP'67Jp1p8;+!5i*YSth"9PD"JcLB&NWA_[Jd[/<Op_O((cPuua4&f" qW@P7$JsLV[$GT(1*$f,QN2U;JcLr6Ju"!oL84pJWj&l2]DfM3^D";o]XbPYYcFLbNIP_B4t%Ea$3I=0 JcLB&L&h17JrtYIMNJ"(R@gAUX8o@&Y4/P-Y-"e.Wi2_cR#ZcCBim_V*u5:j!iZ0O!.k3.!;V\-O+NFQ Ns1W1S>)s^ri#gso;`S(VlHbpV4a<CN.H1e=@Fqe((UWOV#Z)IJcLf2oiH`HJle+:#Zt_pW5mZJhW"Co pZ;qEh:p;pYEjcS8hh@r!h'+@!.k36!.qn9]n3r\^Au"H]aMBWX.tYs<]DKG$j3U3JcLB&L&h1SJusX, M6-l]Xf\c*XmE.iY5PI2XK&%`O*G&$/0>Q4"/u9P!.k3.!;WRFW.Lt,VuilqW;`gqX7E=kWr8k*VlHYf QAp,t7kGht#m7"(JcLB&NWAb,K%kn3OkTunh;7/jjS@s3jpgD4io/bNh:oK(DGD8XRfJ$?JcLr6K"loP K"p?\&AGfeZ`]p[G@!cp+:SS[!s,Y,JcLB&L&h1SJusX,K!"1;&$Dq.S;VW$9K4C8#mLM7!j)HS!.k3. !;W[IX+IC,X8]+!X6ZetW2c_gR>H,t:-'d>#mLM7!iZ0O!.k32!;5K+k(;`Qk5OH>k3qF;iR#$$G=!>U S,e-@JcLr6K"loPK"p<[&&#Tb[&]mbKl9gH*to%f!jM`W!.k3*!<'$OXb*[,XT>Q,l)bN"XKALuR>l]7 >!XYS%LE:?XT3qQJcLZ.q5]+JJua^.ri-$uWiGBc&?)V.VP0<6IW&FX//Jg'"TkY'JcLB&NWAb7K'%[I N9:-#!oi;%rT<S2$0'^][\.M/.MW&W!.k3&!0R>6^Oj4P^Z*!=]tM(i[BQ[+NH%fM+r(LgYlK@UJcLN* rN1[RJus[-!3Z=(kcG>rY,eFkR?)Su5UI?[#Qq1/JcLB&M?*IQJuaL(LoUNUrMT^r!35Cd&?;Y.Wi)S\ Q&U#p67*Q^#m7.,JcLB&NWAb7K'%[IN91-$rSmk<roW\3$KU$td)N#;B20NPT)aHCJcLr6K"loPK"q9! rk@R1%DKNh]XbPLNGCs9+:n[\!.k3&!/:LPXb*[,Xb3_UY5YO'Y3E%uY-"h-Y,\IbGZZjL((18I!.k3& !/^dPX+IC(X,*eVWr/dqWp?\cWrAq)WiDqnOEXec,o6smW;qMMJcLf2p#^kgK'&$S!T`8>i;qs!roWY2 $KU4*hV65kZ!&1MTE'QDJcLr6K"ZcLK"_2trP%O2&AGij]XbPYYcX@D?TfhX%Kis9JcLB&L&h1RJulqm qlRf<M6-QU!j/T-l`C/iriHX4Wi2_cS:tZO0-:o9"0DQT!.k3.!;WRFW6)"8Vnf6jW;idkVuWgtWpd"g WrAq,WiDqmTq%O'Bhg?)'ab)C!.k3&!0.'Pgk+>+h##p?gl^Clh>Z:0i<&$"jSn<4jpgD4io/YCbJUNO LNPKaT)aHCJcLr6K"Jq4pq4_\KtI>sr4VC1'#)&m]!eoHUn*a,F'CpY*"iS\YlK@UJcLN*rN1[Ra0#-> `N>!!#-P,2XKAS+!j/W.mB$AkriH^3VkKTBM19VR8MVA&%0m!;!.k3&!/^dPWIh+mWVEL0WK!nUWr&^p WpctgWr8k,Vk]iNO,&1+?V<3u'b:QPW;qMMJcLf2ouVg-ccQ10"jYE?cHaVHacX[PbL"hpgYCZBio9%t k4@^EjPo.TgW$7SE`YFS)?uc5JcLB&OoU*D^ps?Ra1-f4!P,cA]`#P0^Au"I]aqQTUmd6iC0!b[,o.!u "Tkq/JcLB&L&h1OJuQhjpSu33M5^]ZWiN;*XK:Wf&Zi.5Srn_NB3%GZ.N8s-#6Y+1!.k3&!/^dPVLk\d V?<`nVPh2+N2?WPVuE^rW;`gcWrT1!W">u(RZE)FB3.S^.30!-#Qt4.!.k3&!0.'PZ%B7-Z2V*7[^j)b \[JlYZ&u9r[_To+e(`[7roF%?oB$GAiSNA=WdIl+*=Dq=!.k3&!0R>6Zbj'IZiIN5[)oY.ZN@MB\,j.P rk7X4rk/lTYbRM9CJd&9)A3G_"9S]+YlK@UJcLN*rM5%@`hWU2rhKXnUnjj+UktlOV5L>nXfeejXo>C4 T94Y@=@"JU'Fb<N"9S]+XT3qQJcLZ.q4N>4bb4j,!2BId_4Zd\#GIoiV5^JnW;`jdWt_S4W2cedO+1tJ 6S02j%g`@A!s/M&!.k3&!0.'PQ@bFLQ3itISY2aUW2H;Z]p=eH#G%m%^rb'[hYQC+jpC,*gtTl,<%JR^ RK.p>JcLr6Jtp8Z$)OQ!X0/\4YH+VDUP5HEW3*?.\@T>d^$rf9]b.oh\[AcHToaY69Jdh!#6b21XT3qQ JcLN*rJuPkac?glP*D<$S=ZFGR?`lRO,K&)OH>`tUSt5rXmiG-Y-"e,Y,nY#Un3NlB2^oB('k'H!s,A$ JcLB&M?*I3JrS$7$]gC4Pa7`,Ssu%/Nl$d:N<tW*P*qr=VlHbqri>ans/Q's&uqt1VkTiQMKri64t.9R "U"o.V#Z)IJcLf2ohL*6d7t'K=Bo<QGD)$,DI-/R:6SEZ:f(J@OfudOgYVehqW8=LjPo%OgX+!OW0V]u +q"I?!.k3&!0R>6I)UI@Jqf5IR\?[_Umm?nb'\tl"FY`WS#HOt]"G_io"PsS]tLtbZE:!rQAg3,=[k1m 'aFmE!WfD'JcLB&L&h0bJnN2<$Z0j,I>*ZGS<8PNBuXeDB*`0bFblB[X0/SqXV\.BXfSP#Tq%=)JTka/ 7lDb7&-W1=!Wf8#JcLB&M?*HbJnN>@$Z'd+H\76>R?*#GBu4MDB*i6cFG?'SVlHbqri>do!36$s'WS(+ Ssb[sJ9PX.8N8+<&-W1>!Wf+tJcLB&NWA_[Jd^!7$k*[_*@<[8??]I0*t>plPRII!#9,^7TZ5@5hYQC3 jppJ3iSN;,WfM:+67s8d!g`n=!.k36!.m_\7gr!i?YOS6P+JY@K549*7u9_?8P2]QAVH`ZZF[]^^%9#< ]bA#bXe_DEHu*"]5r0o1'FY-I!s,J'JcLB&L&h03JiLn4$p-jO<F0NjM3im5=?a_aNAq8+4$>c*Di:<i Y-%;t!3Z=''<J""OG.mk=@kY2-ls*6#Qt53!iQ*N!.k3.!;S[-3mKbp4@N"H?Z(4GP_*dT5f,RE3X\&4 5<r1dM4UWFWi5otpT#+/W2HSmTp^soG@t#N5;Xc1(CpfT!s8V#!.k3&!.k3&!7(WN!X95`5@QJ_!keSr !!`Q<6BB.5gYVehqrS:GhVHr,TQO-j*=N"6!.k3&!0R>6(WI7")^dF-:hbECUPrnS+NbLW(Bt`s*[!OZ P6%l!rk7p<rk/lQYG.51C/Hr<+;ke#$3gV7rW0)#JcLB&L&h/aJe?-;$l'a11-\cQI?/PO1`"(CN=cL3 'bqK:<dgR@Y-%;t(TsmBXK%kPI;)_I/0#E>%1*7B"9JW*!N6!M!.k3.!;R4Y&^Css'cnb[6!%cJNHJ;\ (W$cH&IT9f(De`+I%.(7W2T]rpT+:l'WS%!N-o>@67j5p'FtKU"9\c-!<JtrJcLB&JcLB&bl@nK%4=mi !k\Mp!!WKPJ&g$mhYQC3jpC&(gY0)`8gb&LOoU(6JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qM#[_^"UPSc >`Alh]Y(qlpqHgCrk/iT\[]&NToXJ-7kY\d"p>"'!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCG$!"&f2 "pc;CGb2(?Xn8_,XKJS'VOi`lAPY92&dJOB!h]OF!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!0I6h!sAi8 +AI'KWiE"rri?%!ri5sr&?;b.VP9N:G\0f6,ngLd"9P(nJcLB&JcLB&bQ%_K)aY+J!07*`*dPr[gYr%l !9=UMjPetMgX*mIW-h&Y$'5.=!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!/U[["Ul+h5B)njZFmlaq7dZY ]tCnaZ`^7#RZ2`3=[b%h&I&C@!i,gJ!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0$s`":5VV0jB4&riH1' qlKk$riHg5Vk]cINJ2Uj=@Y7s)%?]O!s5+qJcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o\u$NpbJ))>HI SuSfgW;`h!X/i9"W"Z2.US+$<Mh?7f=@kG!)%?]O!s4tmJcLB&JcLB&bQ%_K)aY+J!0@0b""oYcgYLle joOQ&%,p'o_lAoE?:Zsr$j)IiJcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI7u"pbqi2HG:!!4;a=qS3$C '=kHNUm[0iDdH:.1ajCY$3UG4!Mf^I!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0$s`"qV_'7;7[UriH1' r2ft%riHj6UmdBuGA(/R5Vsr4'b1HO!s/Os!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt/$!"/uC*@jWo M4plGW2T]r)69g:W2HSjTU1^kGA(2U68g88(CpcS!s/Oo!.k3&!.k3&!6bEF"WKc>])[om"q3hrgYL`G r8n%>h?i#m^m8q;2'!)-Mu\G0JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qM#[_g+>ur4NMcif^:sHY!5AHG &@JU3OF:e>3\2Ns'b:]Y"9SQ'U]>uHJcLB&JcNpn$j-eM+"TfcFc1')+9][aN;s:k(+MINGa,51XfhH$ &?MatMgK,:5V40!((^iZ"pFo,!!/_mJcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o\u#721s5?iAqVZ*Lo WrB%6X/i1sW2cSYM0Wc867sK&((gl["pFo,!!/SiJcLB&JcLB&bQ%_K)aY+J!0I6d"!:dViSieWr8n%= h$;]gW,P0L$j):dJcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI;!#6>>a7V7:BXoQ*2^Au"I]ah]d\ZVQa G?mQb&d\aE!Ls.A!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0.$b!=Ku.;f.;[XT#='Xf\c*XUhM9X/_bL G[a<&*t8DW!s4hiJcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o`!#QY8T3`L!MRAg+cs/Q*t&ZDV-Wi)b` M0NN)2BWM8"9\dj!.k3&!.k3&!6bEF"WKc>])[uo"9K/pGK9^F#NXt*iSNDFc3;4uGsre[L]E#,JcLr6 JcNdj$j-nV-ob4HMk>Q$.L+#qN<&qY#6GVu>^_p7ZN.Z;^D4Jr]t(VYYGn:fO+(nG6SBJh"pG)0S,e-@ JcLB&JcNpn$j-eM+"TfcFc1')+9][aOT5@^rW3E<.nOE*P,#1^Xf`D@Xfe\%Un3p7M0Wf;75Q8)#m:A5 !git>!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!0mNa!WE-1&M-RgJ<6G(X/`+sVlHU+UnO9CNe_jn=@Y7q (C:3I!s4\eJcLB&JcLB&bQ%_K)aY+J!0R<m$nbYGd,sEKiSDu#XdOZL"Ah9+$j)1aJcLB&OoU(6`W-DL $lUNR<H3qhJQ=6)aoID$$3:21!us^JPGGCl!kl@`rk/uTZE'ahNIZ"Y;FNJl*>/V\!s/Ln!.k3&!.k3& !6P9M!soY`/4<cdMekg)"NCG(!"K#2!s98q>CM^+W3!,(XVIt>WhYuDKm7B=:dHuh*u5:i"9S]+QiM^< JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]PlMEt!WrQ?2I(WjS#*-bW2QVoVOnHdNe;Rl?;a0M.j,T:"p>#0 !L*S9!.k3&!.k3p!!<BD64ga/P5l-r-s(o%gZ7ANh:f<"DGW55!=o?e!.k3&!0R>6!6,!I!t6(r3)ssV T7L#m#0Hq*!"&`/!sKoHJ>BK[])fU[rk/oVZ`9RVHtZA=0dn.\&e#$K!r`4j!.k3&!.k3&!6P9M!soY` /4<cdMekg)"NCG(!"&c0!sBQ.CQP6fXSo75XfeIfM0`f65V=B*((gu]"pFo,!!/GeJcLB&JcLB&c2\7T #o"L67:((mCe#TN_>oi$&cr.<"<9aDO.N/GVlH\nWiDbX%>T4A<^JGd+;YV!#mLP3!WW7c!.k3&!.k3& !6bEF"WKc>])\#p&._["XiK8YhVHr0R:e]+$Nbn[JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoID$$3C;5 #:X#AZ+IZ^!PZ>J]aVHSSW%\p4X1@@"Tndi!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCG(!!`Q-"9flA H_C>>!j8Z-%Bc_&MKWAu0,k0$"9S[d!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt/(!!r]0"9foCH(Cq7 rhp!uWiDnaL^A348MD+j"p>#/Mu\G0JcLB&JcO!p!sKW1&A%q+!"^?5ak#5*in`A<^j/3b"onXT!.k3& !0R>6!6,!I!t6(r3)ssVT7L#m#0Hq*!"&l<&fNuRQa=65\.Q3WYcFXnOFCtF5V*cZ"p>#/PQ6:8JcLB& JcNpn$j-eM+"TfcFc1')+9][aOT5Uh#RqJ&>CrXLWWT/pT:$.PMgK/?6o#r#"p>&2!K[;5!.k3&!.k3r !"8r9'Hetr??D$?7j%rO!0mNs":5SQ10fC'Vl$>eTq%F1M0WeA=@Fti'F+aD!s+>\JcLB&JcLB&bQ%_K )aY+J!0dHn"#6"X]sOo7LMg9^+q+PP!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!0$sc#o+[>;gk4D \[8RQWhZ#CJot[*7Q)Y7&-`7>!WeMcJcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W2,$%L*I^-:;I(UoL5^ R?3,K%;fKO6oHM:'ak-I!s/Lb!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt/(!"oMJ)C@mdLnU]>S!K(e H#-ng70tq(+;G:f"9S]+Mu\G0JcLB&JcO!p!sKW1&A%q,!"99%TY7"OCf!#4&-`46!.k3&!.k36!.k3j !"8r<)CRRFEJpH?<[n<r!0$sc$m7>sCQ#!s\?MhARuM`-;*[#j,8h.'#Qk/1!L!M8!.k3&!.k3n!"8r9 'H\ko?$2'A73D`Q!0I6k#o4pL=ET_'Wh,E0G\'h_5r'o6)&*Pe"p4r/!KR54!.k3&!.k3r!"8r9'Hetr ??D$?7j%rO!0mNs#o>!O=EKV!VON[#G@jlC1+ORT)AE\g"p4r/!K-r0!.k3&!.k3p!!<BD64ga/PlM-m )cE]CKN^>V$3L#'JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qN;s:u.RmosQ`@R)X.'QSEE,(F&.AjK !s8T*!K[;5!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0I6k%3RQ*BnDbQVjN6[>sp:O)%-]S"9S`-!We5[ JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>oi$&e,sC;JCZHVPKK1EF)'e)@QoW"U"o0!WiCY!.k3&!.k3& !6bEF"WKc>])\)r#RiD"[&n%%(BjI4JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qNW9Ff&h?F^H&7l_ T9+I,C/R2C'aOsF!fI&1!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0R<m!=^/1;.FWuOGeI!<^AA[":tb? !s45XJcLB&JcLB&c2\7T#o"L67:((mCe#TN_>ol%'*/Uf3`BR0J<#J3BNISU*tSVZ"98LU!.k3&!.k3& !6bEF"WKc>])\)r#7)/#:dlQ:!qlVG!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hq-!<*!+&h6@ZDKC&O H"^:c7Q)Y5%0Zk:!K-r0!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0dK_!=fP]2G[I^@qfFP7Q)_;'Ee^F "9S^\!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt/+!<*!3%j3i/>$kiTA6)2[.j#H3"9\f,!eUK)!.k3& !.k3p!!<BD64ga/PlLsi"pk\D!qZJE!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hq.!;up*&h6:V@9ZZ* 763(-,odU-#6P&/!K-r0!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!0mNs!<E6'%3RN&:J!o;2D$0n'b:TR "Tni.!J^Z,!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!1<g&!<E6'%j3c*;+j>C2_HBs'b:TS!s8T)!J:B( !.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoIP(rW*B.&h-1R<C/A]'bLiW #R(>5!r`4X!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCG,!!!'!!Y,Y]1eU4n,Sgq##R1D7!rrE%!JUT+ !.k3&!.k3r!"8r9'Hetr??D$?7j%rO!1<fe!WE-2%j3c)75Q>-&.JpM"9\f.rW.TNJcLB&JcLB&bQ%_K )aY+J!.k3&!.k3&!0R>6!6,!I!t6"n1f.t?R!DLV#0Hq.!<*!,!Y6J38jY0P%L3.>!!.]PJcLB&JcLB& aoDhP#SJ+,5?McTANq4=`W28(%fl\4!Xfkq4#A2t$3^P7!r`1O!.k3&!.k3&!6tQQ!soV^.7%'RJn@:j "Mt/,!"T)2!Wi]H.6KF5(CC<K!s8<!JcLB&JcLB&JcO!p!s0&i$+g1h!.k3&!.k36!.k3j!"8r;'dGA$ @!R`N7jA2[!0I9[!=B/K,V^el'FG!G!rr@S!.k3&!.k3&!6P9M!sfGU,WAJ.G[!-H"NCG,!<*!-!XB8U -Qj08#6Y,2!WE(N!.k3&!.k3&!6tQQ!sfJW,s"k5G?d0K"Mt/,!<*!-!XKAX-R'?;#6Y/3!VueJ!.k3& !.k3&!6Y?D#Ta)[!.k3&!.k3&!0R>6!6,!I!X]S^.R-pLIq(_d"j-h,!<*!+"q2.a(D.#Y!s8Q(!J:B( !.k3&!.k3n!"8o6%M^*@6s+/"1):#4!0dK_!=K#9%M]Qb#Qt53!Wi9#JcLB&JcLB&JcO'r$j$\F(EbJ% =D:Yg(BhSTQiR*d$NpbH'bLl\"9S`-!VueJ!.k3&!.k3&!6Y?C!Y)^@JcLB&JcLB&OoU(6`W-DK#n\(% 2G.:q<]:s#aoID$#6Fu2#6k>6!r`4P!.k3&!.k3&!6P9M!X9)J)_4!D>t$7Y"NCG(!"&c0"9eo2!s/N) !W<"M!.k3&!.k3&!6tQQ!XB/K*@s<J?:QO]"Mt/(!!<9*"9nc-rrW3$q#H!HJcLB&JcLB&aoDDF\c@<^ JcLB&JcLr6JcNdj$j$VB'ceed8mFe9'a)SYJcLB&JcLB&JcLB&aoDhO":5VT+>,`I2Bi\7`W1SjJcLB& JcLB&JcO'r$j$P<&/HHC4A.UX&HorNJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipM=%29j31-[E5 %KjiRJcLB&JcLB&JcLB&aoDhO":#5D'd"eX,S^Xg`W1SjJcLB&JcLB&JcO'r$j$P:#nIgp-o*(b$3S-F JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipG6#Rh:\*@)O8#m/6LJcLB&JcLB&JcLB&aoDhN!sAf6 %1s?p'Fb6J`W1SjJcLB&JcLB&JcO'r$ipG5"pk_N(*""t#6MaBJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcNai$NU>3"9o,=$jd+?!QkCo!.k3&!.k3&!.k3m!"/i1!sA`2#7(M:!s-CAJcLB&JcLB&JcLB&blA+Q !s8Z/"pYG>"9S\A!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k36!!33'"8i5u!RCc+!T*m/!.k3&!.k3&!/:IU!WiH*quZm!blHc)gAlg*JcLB&JcLB&M?*GRrrL@E irR^2JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoPt#%1WjW%1EUN"p>#0!<LUK!W`?)rWMKi!X&Q*huJ?/ JcLB&JcLB&L&h2[!!ri9#RCV:!s8H&dJs=L!X%]jqZ?g"g]2p+JcLB&JcLB&M?*V^":#/9"U"l/!s6jM "p"`+!WrQ/l3.(g!<N;S!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R<l)]]t@*?,n5&e50N!s/MP!!WH* "9f#9$180"$Ng_@"TmT^JcLB&JcLB&JcLN*rYGPL"r%[\$jZt<rW1FI!s&K,"mcI!#R:S="U"o/g]2p+ JcLB&JcLB&M?*Vi";21P#mUS:"9SZ*e,T[R!<N<*"paK#!s]&7"TAK'!n[L)!.k3&!.k3&!.k3&!.k3& !.k3&!.k36!"LM20.ne+-mTfJ%L3.>!n.,S!<WK2$4@7OlOO%)"pEiaJcLB&JcLB&JcLN*"!]';+poD2 (_[>`!W`<%!Rh#R!<`Q3$4@4KmgB=,#mptD"9[EZJcLB&JcLB&JcLZ.rZD=a(_[De!XJr3rW1OL#6=l- !sJr;%/pY($3UY@#6Y2/"5!U*!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!"V1V69mat3%u^$'FP0M!WgdN #6=r5$P*g^'^le8('>'T"TdQ^JcLB&JcLB&JcLN*"#D_j1(#T\,97C("9AQ)!Rh#N!X&`:rXnQ0"qM4S $jd(>g]2p+JcLB&JcLB&M?!l6/M/Fr*#9(h$3p\8!<LaO#6=l-!sAl;&*jf3%1<FG"9SbY!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!0R<pBl%^*ChdWm=A;1F0-hGJ$O6dc!!`T7)(.4#5""d0$;!cY75?#!!s/K( j8ac3JcLB&JcLB&L&_<Y>$>&=<DZ@Z4Z+i<)A3A[!s8VY!"&`-!X'&V00VQ_47G693&NHE.NK*+!Sma- !.k3&!.k3&!/^dU<<Q2n7R&j>/gVDL%LNCB!s/PY!!iW/#71nY,;)"U3q,3:2_,sa$O?n<!SII)!.k3& !.k3&!0.'X!ri;u!.k3&!.k3&!.k3&!0R<`OHPn-PRN_8M1TnV82MM.&I/?j!!rZ,"W/j^>@MAin9tap K8"r,><F&5!s/Ma!.k3&!.k3&!.k3*!!@Y!J:.oTH?OFOChHp=//SZt"9[?X$3://"s5p1F`_S>mqE#< ?s?Gc+:A5+!.k3&!.k3&!.k3.!!ddoGBInBC1%6E7QE%B'at!C!!:mT$N^PB'-&Pg=))G`B^f^B@SJa( &.AgK!Wh!TJcLB&JcLB&JcLf2$R@#F,TdsB&IJUA!6bEF#7(YEn-f@*"9HgKJcLB&JcLB&JcLr6'<SIA Yd(RC\A5u%]pE_82^fOP!SRM[!<NQP6sXDHJs>c%%'74bb.rg8/d_dc!WhB_JcLB&JcLB&JcLN*rgj+^ &"T;^TrP<&V0,E[%LNCB!SdY_!<N<)$8,G7Y,S1cn<4-CSXl.'<%npch#N$,JcLB&JcLB&M?*XB"I,(0 NI_FR>YI:8+VFt_!s@9X$Ng\K)_+3cJ=;aeP44P?KjmIu%1WaM!s&GW!.k3&!.k3&!.k32!"3pmG'%\= Am7YX*Y&/OcN"+L'LPMj<q'8p:bECaciAXtJcLB&JcLB&OoYHork8f]jSf,YetR.W2^8n8gAhQ]!<NQ] ;dNgLKUqVG%*eeOs8KTQ4q7i%!s.K`JcLB&JcLB&JcLN*rN-U5Y,o(^meHObE]Y$H#m::a!"/f/!s9&u G-^JjbIR,E#eT3[h9CC9)?JXoJcLB&JcLB&JcLZ.rMKapVPp-pL1X@]4=qHX"p>%_!"/o>(aM(HLpZBk \ZG;!$Ckm12@^0*#R(81gAlg*JcLB&JcLB&NWB%6rnIY,[?P_r!>5F[!!Ng)RBOQYnCn)lI6J8Ed/\au JcLB&JcLB&OoY?n&AurYp]'QpQuZ.e+q"VZ!Wh0Y$NU80#r#7[@!.="^@Ar=a8Z)<#JtdO%L<4?!Ta<5 !.k3&!.k3&!/:LPXo>F5Z,+uQpX,7:4"2!S!WiB(hZ+#b!WrQ96[ZQ8g;^VkXU)5kkMk!D7N)<`!.k3& !.k3&!.k3.!;`_rU^`]B@T6)h0cq,>"p4l,h>dre%N-QR@?&"cag.hEnZ*"iC/[/,%Li^J!Wh$UJcLB& JcLB&JcLf2qW7q=c*sBc!\4`]d/X@^:n+i7g?%ke"P]59)$/+bJcLB&JcLB&JcLr6qS*TYak,VOo[gdN H<)pB&dnjDhZ+#b!<NQ[:K:P8L7c3M^B)CSrr35?H9VlF"Tnee!.k3&!.k3&!.k3*!<'&!XUq_G`ma;1 [ZGE#/JA0d!W`>[!"/f/!sB-%I_YO6bII&D#dWFPim`TM)?JXoJcLB&JcLB&JcLZ.qPsUm%\&c;Amn\2 3@c$X!s/N)hZ+&f%N-QR@#`"pd^H'RnZ*"iC/[/,%Li^J!Wh$UJcLB&JcLB&JcLf2qW7q>fZ1Lg"&UT^ "4@/R%ni(f`nKPEjojG)9GmlY!.k3&!.k3&!.k36!;aGA_8OICht?L"d@t\T.30'/!oEtc!<E6-/5/rB BS;khn\5+Frr2p&_KnEV#R(;2jT'l4JcLB&JcLB&L&h1SriHa8ZF@Tnin)5SG"3VU!W`?'huF,c!WrQ: 7"E/IkK^X-XU)5kkMk!D7N)<`!.k3&!.k3&!.k3.!;`_rW",MjR#>ut>"h+1'*J@;!oEtd":c:q3adrb qqSc]Wq!+sTP@Cd'+PHX"Te_Z!.k3&!.k3&!.k32!;bg\jPJP8]`a3t3ZeOS!!Wm%LS_l?jmhI9gQkMN !RUn!!.k3&!.k3&!0R?X^CS/s_Sk$ns8U6-@Q,_T%KbMf$NU80#V&A?;dt<F^@Ar=a8Z)<#JtdO%L<4? !Ta<5!.k3&!.k3&!/:LPXo5@4YHP19`SL+VVIM.[!WiB'huF,c!WrQ:7=iGPmF&W9XU)5kkMk!D7N)<` !.k3&!.k3&!.k3.!;WZ*W2HJcQ@*4L9fO$o!s/P]!"8u?)'q=ONlM+\^8\.&WsYM7;`YR%%1*1>!S[U+ !.k3&!.k3&!0.'Tjoa])iS=[XWek(&!Rq)R$UK34^=ME9jojG)9GmlY!.k3&!.k3&!.k36!!KO.XJr#p Tb"04]"uJ<jSR`4G>'tC'*I+l('+F;#Ur8;;IP'B^;/"@e^)1GZEg^=r3?aEgZRhUSRaPb"pG&/jT*7" $NU;2!sJl6#mLP8!QkCo!.k3&!.k3*!!AjdT:ZdlVPpPtWi`J5`7+"^F#aU4!s/P^!#GY;!sB0(J]@HP e%;`aZ)k%,UnaTVTV24X#H>5H\>!Oo(#/f2!"/i0!s8Z/"U5)4!s-CAJcLB&JcLB&M?!mSUo1<#[_00^ Z`C('S<nn>=[=58!s8T*huFPr%N-QR@#i;-kJ4'sVk]lNQ(4D=StVkUT*gTk81"]R$jQk8!S[V!!"/i0 !s8Z/"U>/5!s-7=JcLB&JcLB&NW9HHOcl67[_U&9gu.2rfu^al0a?,-&IUgLS@mG7gs!C,SXPh*O-#J$ OT^8-*X)Sl!.k3&!.k3&!.k36!#LTOLkpqCJqK#Q[DBi-fBM;*NFPR8)?\js(BFO<#Ur8;;IP'B^<kK\ beL?TOc>?]O8Y.KPF7u4PA*E2#6b22!Ta=$!"8l1"9o,?&/?&q$jHaT!.k3&!.k3&!/:IUF`hqW'8MX9 Tr4rmYHtm]fXlT()%[)X!T3qm!<N?+&4M/ip[6MBXfnaqObSC6GBj+4r-JZnF`1_T-4L"3!6P9M!<WH- "pbSJ'Fb<N!lb4l!.k3&!.k3.!!dn%KTD_.`6St9]r\0*R[/G481+ZI!s8S^!##JF)'q=ONlV1_^o=?. PD"($GBj+5!I/qhGmSLl4<b4B#R(81g&TCu$ipG5"9o/@&/5W]"9QF?JcLB&JcLB&NW9G.+X8X,=Ds(s `nTPXh9s?J5n)6C&.:^KS@mG7a-1$u1bU7#+<gV+!ZhjTcN&OsJcLB&JcLB&OoQ;!<E*47CMRp=N2sb3 `lZfnaJF>i4s'sc!#>S9!XL5F9N#;KR(h%u`Nl%kF'_pN>P_S2>$+`f.2;sf!Wh?^`W-DJ!sT)A'c\JM +r(IeaoI"nJcLB&JcLN*"%#FI<"ie`Kp/(*WiiV6\&5e7==G1##6Nf`'*/.:";""Q`qSoM]</0*K4nFf :&[W^8c;6d8OPj+2C'"Dg]5Is$ipG5#71qV)^6.2#Qi!GJcLB&JcLB&M?!lU;d!gaRC('Hc,m>mUn4'A D,2bm#6k83huFSs%N-QR@#i;-kJ4'sRt5BT:esh[92&#PrCmPg1a<_A"U"l.f`9:t$ipJ6#RM%W*$Z=4 #QhjCJcLB&JcLB&MZ="b$lh'#GcK9T"lS1ga&Ef'!"B<#HCVY!jfDc=$3^J3_Z58gJcLB&JcLB&OoQ:= *#g1^7o<Q3K;-,s_8=4Ve[q2e8L4Pt!#GY:!XL5F9N#;KR(h1pY`Np/5q!fu,:*46#UCZ>+WhO3#Qju+ j8d1"$ipM=%MU!61dE`:%g0rSJcLB&JcLB&L&_;h(E4b95ZhoUPG+qWYHP19]9[1o-Pm*khuFPo!WrQ: 7=iJQmaJeMW/G1K.jQ)O()Rqd)[@5u(DRJf"9I<YaoDhO":#8E(*>"],Sgai`W1SjJcLB&JcLZ.#9G-? 4^<E/]FW-1]W8!/V4`$51(FWr"9RK]'a,!a,s#Foa8b><WN))$;_TRE+<;L%*;pl_)\WYc"9S],fDs1s $j$P:$4dpq.5E4d$3S-FJcLB&JcLB&M#[_]%OY,2alWfgj5J[++9L'n#n&tDS@mG7O#@<Z!.k3&!.k3& !.k36!<*-9$lgf[:M4p0YdCpQ_WfmqVKkoc"lB:r!<E6-.7['0@=OZYe\\&->s]nL#7:eGr!`N2!X8c/ huLas$ipP@',r>Y7TMf('EcJXJcLB&JcLB&L&_;X"U>_T.6^dLKq5TVZ*1=5\"%J./K5'"huFPo!WrQ: 7=iJQmaJeMVLVYk'FkER"U55/#QP21#Qb/4"5En!!"8o3#S%Rk.lTmP*tJIn!.k3&!.k3&!/^a]$5""" 6=GSE&%KWtV5C2kVL;Q'%grXH!oO%n":c:q3adugs6%1sWfCd])\<Mf#mg>5!=&c*!n[Lu!"8o3#nIan /369X+:eUl!.k3&!.k3&!/COW%5DS*i!/0#jkb)*"4[AX$U8s-][l1o-3Cp^JcLB&JcLB&JcLr6(BjpD #ne=16!S2BN0pQP_WfmqVKkoc"lB:q!<E6-.7['0@=OZYe%VAn<BVT9"U52-#R(G;"pG)1huLas$j$\G (aCk->AmCr)?e1_JcLB&JcLB&L&_;X"9o;K*%O'LG+$7c]="lG\"%J./K5'"huFGl!WrQ:7=iJQmaJeM VLMGc&e#!KrWN'%"U,#4"9S_\!6P9M!X9#F)_*g=>!XVP"NCFn!.k3&!.k3.!!``:%NI5sB8$ki\BD%S VPg;>=>UNr#R(:f!#5VH)'q=ONlV1_^o=>kAj@(?$jd.Bq$-g#rW3'#fDs1s$j$VA'-&G^93Xe5'El8Q JcLB&JcLB&LB%GX(eU4A#1hVihK1%GeGom`5C/j4f&_6%!P\WW!!!,4!.k3&!.k3&!0R<u!s8T.$kX@0 :1.CML6\pYl.s=UGtodlhZ+Al!<NNU7ncfhJ!dt!]U3J13$AV2"8N-""9JZ,!T3st!"8o9'H\hk=E&n) 66QNT!.k3&!.k3&!/:IU!s8Z3'+c$+3bXf&gs!I<Y.'pA7P,Pe"5j.m!<N?+&4M/ip[6MBXepPA*=iJ] rWDis!WrK*g]5Is$j$YE(*GA%>A[:q(^.hYJcLB&JcLB&M?!ka"pbkf2bR`nMQ51K\>lC&I98<:$O?n; huFAm%N-QR@#i;-kJ4'sMIS^[#RC>3rrr6%rr`6%!!1^Pc2\7S#S.^q1e1eg<&>Hq_>o/fJcLB&JcLN* !s^Q*ZNe@thqiH$"4[AX$U8s-][l1h*Wa"Ub5_SG&H]QEJcLB&JcLB&OoYI^'ESFC#oPj(;d+0tUVc9O `MRoU.0\T/'`e=:#Ur8;;IP'B^<sHQ@S&<q#6=l!!r`5Y!6,!I!t5tl1/2G4Q?Q(O"j-gs!.k3&!.k3* !!<6'!X'/?#n/%[O4!RUaL87\S8q(N)[cc+!#,G8!sB0(J]@HPe%;`WHV54c#6Y/#!ri;V!6P9M!sfJX -TtFEJ7:\^"NCFn!.k3&!.k3.!!`Q-":5nl1J87!S^[/TZ_s[K=>UNr#R(:f!#,PG)'q=ONlV1_^o=>j @5\Ms"9Sc!!r`5P!6tQQ!soP[-pLaJIq(_b"Mt.j!.k3&!.k3*!!<6A>E]8qakPZo,m2Zt#R`kCS@mG7 F;qpobQ%_H%kIst!.k3&!.k3&!0R?\!##A6!Y$hV9iPYUS\j^L`hn&X.0eZ0'*/+8#Ur8;;IP'B^<j?K ?Uc^f#1*@i!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.t7O!>>J8!YnCdde<"Q\?<<2E^hW!$No;e'EJ7; ";""Q`qSoM]<.rU8/M[<"9QdIaoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLQ+"9f8Q,s)WJPL]]l];VTT =>UNr#R(:f!#,PG)'q=ONlV1_^o=>h?o&)k!s/ME!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3)!!3^) J-M^`g"pfs"4[AW$U8s-][l1b)86*p!!<BD64ga/JcLB&JcLB&OoYF\'*/+8%5:FL<+LWP_X$.#WdIYn #2]Co!<E6-.7['0@=OZYd'ns@7PG_bciD&c$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&K)blP'*/.9'hjM5 p?U&7Y.'m@7P#Gc"5j.n!<N?+&4M/ip[6MBXe^54('t0J!mCYe!"8r9'H\ko?$2'A73D`Q!.k3&!.k3& !/COW"V)Cr3tGkcec4U?W2=uG2%L*$"TmT^'Eem`,s#Foa8b><WN(e]1'dsa!Wg@Bc2\7T#o"L67:((m Ce#TN_>o/fJcLB&JcLK)!YA"T#,/ldhK1(HeGoj_5C/j4f&^lg^&Z@W!sKW1&A%po!.k3&!.k36!;um2 !<E620M>,>A:pGim,H0hIo@j%hZ+;j!<NNU7ncfhJ!dss[u=W_0H(/B!6,!I!t6(r3)ssVT7L#m#0Hpt !.k3&!.k3'!!!$5!<N<;9T%9lld*)D\!qD,//\fthuFGl!WrQ:7=iJQmaJeMUj,<C#R(>4bQ,cc$j-eM +"TfcFc1')+9][aJcLB&JcLB&LB%G\%N-QS%qLmSs5CSgVL;T)&.AjK!oO%m":c:q3adugs6%1sWek+> #m182!QY8d!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!/1CS&5.NXTu#F=F=%+?!!irsHCVY!j`)-O!6bEF "WKc>])[E_JcLB&JcLr6r;[K3!<N]a92/ArK:TmHj3+TV<%J72!##A6!XL5F9N#;KR(gtWN*\t-)[=Xh `W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLE'!!*`6!Wj*1MUM4aca^-eRrLhH)%$K(!#,G8!sB0(J]@HP e%;`YGsi;N"TnhM!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3+!!EH8)'q?TA<YRDiOc%cIT\N?%1*1> huFGo%N-QR@#i;-kJ4'sLL)_A!s8T*a8jKc$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&K`D/c97R5?_:d[e -3Mcu#R`kCS@mG7D\p+fbQ%_K)aY+J!.k3&!.k3&!0R?\!>>M;"VWah:/tt]T>L!TbH6:o/-au3'*/+8 #Ur8;;IP'B^<sKSAP=s($iL2-!r`5R!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3*!<3*"!YYY="W:*o e+MnK\?<</D*]Wg$3T2d'`e@<";""Q`qSoM]<.iR8f%j?"9Sf+"9/H&!Rq+l!"8r9'H\ko?$2'A73D`Q !.k3&!.k3&!/^a]!<N<-&frMg%r.K^r7ni\VLD],&e,-M!oO%j":c:q3adugs6%1sWek.A$j?G0rW3'# cN)5j$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&K`D/h:PK(M_qNsh-Nhm!#R`kCS@mG7F;qpobQ%_K)aY+J !.k3&!.k3&!0R<u!WrN0$kaF.93YM3Iu^PGkLdM?F%n"chZ+Vs!<NNU7ncfhJ!dt)c*3.H<]qZE()7Jo $j["<rW1dS`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*!s8Z0#nmgc*]@PodHAuq['$]qA2YVG#m0#b *!$*C";""Q`qSoM]</,m@PoDQ)ANkr$jm7E!s6sPaoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLZ.#6b>> &g]G-@Ln3mfA+0EVP\fH2%^3%"9RK])$CEe,s#Foa8b><WN(qk80Sof'G:ob$3gY4"4.%n!"8r9'Hetr ??D$?7j%rO!.k3&!.k3&!/:IU"Y=Pf#/&:<hJaY?eGom`5C/j4f&_Z>"ht&]!!<BD64ga/JcLB&JcLB& OoQ:$"U>JR,VMPjAn?XUS[6/kcEN=A6mMrn!$;4B!XL5F9N#;KR(hS;cF03i?9p>".jcAU&.&F?!Wh'V `W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*!sAi9&ec?>4B6Wsb0Il6Z*16a>:^^)#6Nf`*!$*C";""Q `qSoM]</E0Hrrp%1Fsmq)ANej#6NBTaoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLZ.#7D%T+ZE85M%?Am e[ho^VP\oK2%C!""9RK]*<Zii,s#Foa8b><WN(u"<]Mid.jlJY'Fb?R!sAYP!6tQQ!soYa/O`ufM/5[) "Mt.j!.k3&!.k3+!!E?@8s$moce7:5D&rc/!"')uHCVY!jdJ[T!l+f[!!<BD64ga/JcLB&JcLB&OoQ:& #7;.l2ap_YEdaLWZFIa(`M@oe4s1$d!$;4B!XL5F9N#;KR(h_Rle]OTJmhJI69I"L)@coQ!Wh'V`W-DL $lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*!s]2F*"t%r>]P^s^ppeXYHFdQ;^<+f"TmT^*!$*C";""Q`qSoM ]</ZKS:GE^;+Ec+/L),E#6NBTaoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLZ.#8%^l0MQJOZk(($bc%D8 W2G2P1^s`q!s7B\*Wurj,s#Foa8b><WN)),@7s'Z6p<IW*u5=n#6Y&.dK%Pm$j-eM+>$#gFGXg(+9]O] JcLB&JcLB&L]@S]'fp6<f`g3ij5"Afe,Tpc5C/j4f&a,H0G+Qm!Q+o]!!<BD64ga/JcLB&JcLB&OoQ:( $kOI97oEW0J>'`m^qde9]U*G22&c\U!$D:C!XL5F9N#;KR(hAQrr23)V1ESu>Z+$I,8:Cf"9JV[!6,!I !t6(r3)ssVT7L#m#0Hpt!.k3&!.k3*!!<T?(+9h`@!e'-VlHl$Y-"h$H:f.i$3^Lh!$D:D!sB3)J]@HP e%;`l_7d+>JT,.$90Y-X)%?]L!!!&P!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3.!!a;_.7%O-^uGsj ik)7lWiN%K>;?Qj"Tne`!#u+O)'q=ONlV1_^o=?$Ir/@j=BSZt4"VQi%LE=<!n..p!"8r9'Hetr??D$? 7j%rO!.k3&!.k3&!/U[["<'=1Qd=dtk2k[ZA/E_q%gtUKS@mG7_MD2E+rLmp!Q>&_!!<BD64ga/JcLB& JcLB&OoQ:H1dFiAAS,b'Ml=J8hXUHmX*mi,-kujA!$_LF!XL8I:K1hTRD.,Arr2Q@\!rA7Kmn,S<(&Vp +;>1g"TmT^`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*"#)Yt:_RA_Mk$ZFY-"q;^VGq?3>2c*"9RK] +9;NG";+(R`qJcI\uiBX_n<%:M19Vb@p;bt3%cBl%gW%7g]5Is$j-eM+"TfcFc1')+9][aJcLB&JcLB& M?!lK92]ATVTn?9l-lu;UR7!hBM9i\#6Y,0huFo'%N-QR@#`,)j1_IlT8.Z,Bl%[)B3eJ-4>%cl%13:A "9&>R!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3.!!`fP4^EcEf&?kb^oE#A#1NVc$poK:^=VJmV0Gj) 3A)Eg$j?^R!6bEF"WKc>])[E_JcLB&JcLr6(JJ+RH@:0dG_h`o`8^[or6:[A3%5dU!oEu&!<E6-.n``> AqQMcakl^gp#!clVl$8bSsPIjE`bOT(D.#YhuLas$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&L&_<^@qp&u JrH.rWN</'\&#e]G>0Fm"p>#0huG#'!sAc?7=iDNl-HrCYd_Kd\#GpaOH#!GI!BUD=[",D!s&H)g]5Is $j-eM+"TfcFc1')+9][aJcLB&JcLB&M?!m.I=@*I\^ojQf#4\fQ@Eg]:c][&"9\c,huG#*%2gEO?]Du% hRf_dU6p[`I=Qp(K6_QU@8K*;)\NP`!WiH)fDs1s$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&NW9Fh#S8(8 :i;8ma4oGR]SKcN&CUUp%7PrG_:Rf$^nQL'BO=Y+2_63k$NgFR!6bEF"WKc>])[E_JcLB&JcLr6(L;'B S!]J&PFo"g`qKE2n%aWP*u5=j!T*l&!<E6./5/rBBn`%j`66cljkS%l\@K8a_T^?P^5c\g,oR@#!T=$u !"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!/:IUM2dU^':Y\nXK8P+YJ@cOO'=LZ"9\c-!T3r'!<WH.&k7Dh p#aN0Xfeq=]"55MVPp;dU8G<0];T[7*WlNG"5En!!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!/^a]]<eE5 ZG4Q*%_T$GUP<Ye5WC/+"9S],hZ+f&%2gEN?B)hug:=/^VP9QFP*D<'R$EbmI:Gr/+r_1$"9&AS!6tQQ !soYa/O`ufM/5[)"Mt.j!.k3&!.k32!"1>E>Ao7bY/8K<i7nI+=""O[df:0o7u=.]f]CuAah4p]V4<^) HuiXX+q=_"!6bEF"WKc>])[E_JcLB&JcLr6"C6/E]Y"0S%_TKhaSu/.hQLr["p4o-h>drb!<NQZ:/tD5 L7Q&orkSoV^q[Rs]tV5(p&=src&Gj],o@!ji;gjt$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&L&_=h]<JF: X:255Y,nhGZBArd*Xi,L!T*kc!<WK0'1d\ko]"*)Xo>I;Xf\b/Xfee/Xh*Tgp[k\"/-Q+X!o*du!"8r9 'H\ko?$2'A73D`Q!.k3&!.k3&!/^a]s6$beW2Zes%'$>.UNg!)+X%U/!Wq0X,QnPn,<0"g_=uHhW2cks WMlbnVl6MlVl6));FWYh(CL?J!X%'Tc2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLf2$Z;]fh;7&IiSrnZ g&lXU$N\ZU%1Z!kX2N]Qjl>C\inrYmh?Vlmd@tYV*!=IdbQ%_K)aY+J!.k3&!.k3&!0R<`>^3@G^C83^ s7kZ\F#s[3!s/M\!"o;5!XL;M<`NRJOMAB8Z*(:=])9;R`SL=hs6$Y:=@"JT"p4o-j8d1"$j-nV-ob4H Mk>Q$.L+#qJcLB&JcLB&L&_=t_lg-<XU)/Q]V9dF,n:"3!#,G9"9fE'GdR#%e%MlbX/rA%XKAZ(XUMP[ kk4\qN)M8K&-`0k!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3.!!<2TYPbI#WsYSF>;mNA'FFmB!T!ej ":Z1m2-GR9o\.$ZTVJBaY-G+-W;Wb+TT*>Q7l)G,#6k>6!Wh!Tc2\7T#o"L67:((mCe#TN_>o/fJcLB& JcLf2!d_*+q;q\2"+N-9!R^rX#s<[%WO]RR_o0R?g"bTcjp'YWT6Wp;!m^kj!!<BD64ga/JcLB&JcLB& OoPPgGcUYT%*/AIs6mIC5S"/*!s.9Z'*/+8#U`/E<+C6A\[/<1R@U1Z]D]JU_p[]As81?ON+GF,%LE=A !Ta=$!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!/:IUbf6ffqQ1",dEB+g=t^Qf!T*kj!<N?+%m+a.hTia7 T:hdJT;8Hfr2gL7_:@]Ck-p7Y6RE9D!!!&X!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3.!!<2RXo,7! WsYVD><!K?'ak*F!T!ej":Z.k1K8Xod^Gj8O-Q<4YI1^@WVrk-UmQ^B;Fr\f$jm7D!s/MX!6tQQ!soYa /O`ufM/5[)"Mt.j!.k3&!.k32!!7PRh"g(4gB33o%ft)Y%KnD"G'\@OGCYI.UV5+5rT4@Cc*sBe.LZ@) !6bEF"WKc>])[E_JcLB&JcLr6!aKrMq7cpMrr39$^OATd%LE:>h>e/h!XL)@=BT?fQ)URLPDP?iW4W#C &AcE7h"(LDl->K$3#3#3"Td]b`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*"45,lXno.)Z.R^S[;.f= r;kdU'EJ7;!t7%uRE;q9R#?o^Od)B3XK;B&%^3:TbM`$WdBRUS(]XO:hZ1e!$j-eM+"TfcFc1')+9][a JcLB&JcLB&M?!_XfWG(Pri6F$Ea(aG*#/h`!WiD[!#,PE'd58+EK[Z#NeDb3O-uiFYct))Wt2,!R#l>n 6RN9Q$jZt<!Wh'Vc2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLf2!e.K2q;q\3"Hl:k!WgaM%KdhR<),hA 5Y=sZG+HP,rT4@FgX!a6=!@mr!6bEF"WKc>])[E_JcLB&JcLr6!aBlNq7csMqu6U#`Igf&&e"sFh>e/h !XKu9<aKWjMO0E^K6r<7TtC9<"i.sk_oqlTrs-Sq8fnfY"p*fc`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB& JcLN*"4PGrXno.*Z.e6pc[S>#!<*#V!#,G8!Wrc_>`6%eP_=1'I"6p5SZ/^hXUD;8Yd(b'p\"-X=s2T# aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLZ.!rpiQr2]gt$__QC6m<Td$j-P4!T*kk!t#ba/k9K,SrA&9 Ao`6URA6mjWVrk.Wi2biRq>DY-4^Up"p>#/g]5V"$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&NW9-2[G:T? !8I^I<$DGGdf9jY'gFW.*u5h?.l1"KZ.o6>#j(.+i7+9+1_%h4bQ%_K)aY+J!.k3&!.k3&!0R<j=`9S, X/iG0[^s,imJd+jd["5q,Spgir;cft!!<-%mfb9G!s/K'!!**))Db&k@qoq)Ec5`-FbQ$PUnOEPU91f6 `8^drs5'/N1F*eF!p'F%!"8r<(*bP+AUK\_9I0kb!.k3&!.k3&!/:IU\?i-4'<JOGZEUO8Yg_dsgQPYb "9S],!W<!"!<NAk"T/?P!W`9%!<NKO7W+<<F(ABX?tF+tKTMXrUSb&oWiN8-dIHr(`,%%,!WW6%i;h"# $j-bI)^d^FB74)K)[+.\JcLB&JcLB&M?!nHft=MnX/Dd(Vl?\kIpPr8/Kti4"Tnl)!!30&"7?<j""OER !!<N>)'h.9ApJ6&>#/:0Cj(JoT;]!,`5&sjXK&%M;arkn*>/Y_!s@<Yc2\7T#n\.)4B,s@?ToJ5_>o/f JcLB&JcLf2$X/1b_Tg`gi8WhZh?:$%5SsXP!#l"S%LE:?"9o/@*&UfLU9h_[e_B!Ahn"eU3!I_1bQ%_H $mu7k!.k3&!.k3&!0R<u?#baeOGSm_UTh>IhYmKSh5kou4=CmGr;[''!WrT1#RUt3$jR4N$k3RK"TeT& -345]+YuPW8P;fQ9M.oWATE9RKRnT,Oe9%ueaNM;jJm>p2C&n;jT*:#$j$bK*@O'JBRF,L*sKdeJcLB& JcLB&L&_=9OHGkCW4KmY[^**?`STe;ULuLs$3gS6r;['("9o,=$4.(3$2t26#6Y/3!W`3#,m>,=87,=i 69%"j6q:*\Bm,#`Q):[bY,\_EhX^B]G<-'8!s/P_!6P9M!XB/M+"ooZB1sro"NCFn!.k3&!.k3.!!fU, W3!53Z`+J5V5^>TD-g422'*)1"9S]'!!WK-"UGD@$M+QY#R1J9"9JZ+!X9#E)'q%):e<r71cdom:0_OZ Kq#I&pYa?0XehA);+`u)*!uoR!s.3Xc2\7S#7hRm0LJlR:,!Ie_>o/fJcLB&JcLf2$S"DDFHj2Vf%]-D hZ^ibCd]!>dJs7Jq#D$."qMe7<-",&^XD#uafLD/(';qbb5_PE$b?=i!.k3&!.k36!#JOCG(>!^EefgQ [_^2Fo)ImfQuGq^*!H3?#6=o1#7:nP'_3"C'bq;h"p4`',m"Ac)^H^V-n6Yo-RUQ-6V^m!Bkq^;OfQ=? fBE+o\;Xif0c:)T!6,!I!XB2M+"fcS@7`*g"3LUq!.k3&!.k3*!!?tSFb^X%]%5$=[]lpB`n'.PH:o@p $jHe3!!<<-$4m+Ko+;6>%L`^N"p=u-rW+;I%2^HK/LVea*[)^R/N,jd>&Jq\WN3,$YIDO'lbn<E)%HoU !T=%$!"8o4$4mst0gAGp,S:-u!.k3&!.k3&!/^a]Jr,PVW4C0\&$2\,W1K)sBj=+W%LNFC!rW*$!sAo= rXeZ5"V2"I"Tnl+![n0U#n7Oe+t4f]*ZH.C-7:T6:0i+;cN!q2cEsL=Q@E@E67**I"U"k^!6tQQ!X/oC (F1b%;*6-:"Mt.j!.k3&!.k32!"0#D+?3YbZH(DJio:3l^Slc?$cN)U"W01$I%J+,j4MD[Qno&t!.k3& !.k3&!.k36!#I[h>%__d@!.6lZG=>raO]Y)[ZbMt,R+,H#6G&6#n@Uc*qLQ[+<V^C&IJX=!$qXJ"U>>@ $4@1K$OR4L&/5p/5u:cpEJC4'_SjLAji=6I>Ws55jT*:#$ipM=%i$9?3^tqN&Hg/UJcLB&JcLB&L&_<G :g%`NOL3s"b.Fs^Y->4G[#ABK+VP+_r;Zp%#S%[M)Y4gO()7Gm$O?k;r;[$'"9o/@$4?_;)@6]Z&fDcG ;/M2cWN<8*Yd1[N\VO<9)%QrRi;h"#$j$P:$P41#/N5-s%0OTMJcLB&JcLB&M?!lbAorct[GT(:[Ag"& Vk]oPF&Y"1%1*1>r;['*#RqIa(`=7a))2j:$O6h;!s/H(!WrQ/#7(VB#RCY@#RLkN)^R18KtdQds5LVi V4jHJE)\P$$3pY7h#P_#$j$P;$5".#/ikF"%0OHIJcLB&JcLB&MuX.e'/X6b[)^bUjTaZ!fu[G;!lY-K !>$tbI&b`YiSN>6=W#TfJcLB&JcLB&JcLr6(FV():gR[<>A/JQZaRBV_<p:,Y^oh,#Q=`0!!<K9'HAGP 3:oH@5<_1j0d7;9rW2TjrW*`8%OF82>%i,B[(!WZ_;W_GO(^p+"m#a(!"8l2#7D%X+=Jrj(CUAf!.k3& !.k3&!/:IU/N,dn'6fk[f[\6YZ*:F7Y.C-I9/%7l"8r3)"V;_*0etL?oJ-Y).OH>X&IAU0!#Pb@#Rqe6 <H="gW3`b5YHG(5NFF^g'+"a!!6P9M!X&Z4$P=-r-6!O&!lb4l!.k3&!.k3.!!bYY<GI,V^=j.I_QB]5 W2cbE>r`W3$jHb5rW*3-&0*,R0f/DV#:^i3%1*1?!q61,":Gh]2J&N;s8W#9VPpJoVLMf.%LNIE!o3k% !"8o3"UGGI(Eb%F&IANU!.k3&!.k3&!/gg_!>.%kJtTj-i<J<%jkk84"iLBM!Y[:iN5ji:jQ53:+9L$m JcLB&JcLB&JcLr6,8qaU2b-bJ?"RksP+A\`_Xm9Ra-L0k$NgG2!<irN-8\+iAb:!NF)u>>>X'SI!s/N) o)Saj'FG^.4AB7$GaYD4\AI4Q\<Ul#,mEB1`W-DJ!sJo;&/?-.)%[&TaoI"nJcLB&JcLN*"!8d=4;1b4 Ln:idcbHusYcbgHNFtO&%g)\0"pl;+9Ntb-o3MZ*;bTV<,7t(J!#Pb@"UGek5#lERU;+:JZELF9OC^I! (((-%!6P9M!<WH.#R_1Y)&*G_!lb4l!.k3&!.k3.!!ar,3(RD%P,B8+_9&dWVPpDA>WNZ9%gW:=!WiH6 +?*50@q&j<?O0Fh-Pd*r"Tneq!#PeC%2('`GGi[=k1HW1V5U8@>;Zp!#6Y+a!6tQQ!<WH.#Rh7Z)&*J` !l=qh!.k3&!.k3-!!WWF1foC=dK\C]j55GD$M+6!!<NDr"on_a!"8o?1M*]?gu.5LEZtS7!.k3&!.k3& !.k36!$`!f(a(7_4A/pi@Y'E+ZGQD8o%p<`4:hZ!!W`K?-8e+jCP;>L$`'l-Xc6^L(BjpC!V6<j!>G\J )(%FGAS6g^TsVYtf=dYn9-si(!6,!I!<N?,"ptbL'+P?Q!QkCo!.k3&!.k3*!!<iK(a9VL6WS&_Xjke< \[&B]_5W/g0,"Ec!!`ub:3),EKn],R#).VP=Z@B*n,O:,!sAc:)(.=<EgXnh^ULJNZ^#8g-Q!3ni;h"# $ipD3"9\r8$P!LK"9QRCJcLB&JcLB&M?!ks)BULp;JCb&S[?q]Yc+CrHsSiO(_R2Z!WrQ/'f/sITph.% oRmNb9f![t$jQk8!V-4-!X/f:)`CZ=Qa4T`[&g1&Vghi+%grXG!o3k%!"8l0!sA`3#mq1M#6Y+F!.k3& !.k3&!/LUY!<scHOM1tDf\kYG4:VDc!!E?4(a^s/3!(E<"QKIi!>S+eaO8f$hf9qDe,Y(#JcLB&JcLB& OoQ^1#71_I&/6H\=]]3`NiKtns8Vc(Hp\SQ"Tnc3*AT`G<G.3][0t[Vo^B_P:*9fG!s7um'`e@?#nA+J ?!VT-Q*.segqf_.:+-;-!6"pG!<E6(!sAc3"Tnf,aoI"nJcLB&JcLN*!sJl6$kj?r-U2C:eEPK"['%j+ `2dT4(BOI7#80+3R^oo6WV!%m]#i")M,5Q)n,O:+!<N<+$PF@4?B<4^bIt6b\!_/%.iA]si;gt""9AQ* !sAK)!WrK)`W1SjJcLB&JcLZ.#7(VC'-].u>8r0jf\XHIVPe`H58Y7R%0Qb9"pZ/>J&D!Ce$ntD$@H#; (CUc\"Te]*o)KU.!X&W:+Z<&.MltRO[]61%I9AE;$O?k:h#P\"!s&H)"8`3%!Wg.<JcLB&JcLB&L&_;Z .r;!d]?f<kQq.qmpAb?u'/!%"Q1V!WF#jp8irBDh.s85=eDK/*,m2WsJcLB&JcLB&JcLr6qu@**!=^eY ;-7OcTu-U(rt!2(8/;L:"Tf&U2a0]0CR4V-!9=(Y#NhR^-40q[!q-+&!<N953)s'mI?(>Dl/'CVGtodm jT'l4JcLB&JcLB&K)blQ'*SXN,?0TDnDha$Y1)7T_KS6`!W<!''h!ATf\+W^oW8AAlK6p)@4_fP!#,J; "pl>KM9G/5_R-JTS8q(N)[cc,!.k3&!.k3&!.k3+!!EH:*%=/mC7EoQgqB\bH!E`V)\rkc"9f#9,?C61 s8V8koW&=W>":%L%L`RD!<MWh'F#6q1ei%_cecL@VPeiE1_0s""TmK[JcLB&JcLB&JcLK)!YnRh#H5Sp i1Npe"8;d!"<g3QUXJes"1r>%$K;$l)e5\Uce[K#,m2WsJcLB&JcLB&JcLr6qZ$s($nFb@;I4O9_YF-1 &'0Ao'aP!H!=L)15"8IdQLqolj8T&`k+,a($3gV7mf4"%!<Nfj;cR4JMP\/RhSl@;:+6D/!.k3&!.k3& !.k3'!!!'6"9o,O8q+8/h9i^7e)&NiG<m,Jr;[';7!c5mg!I;%XU!&7k2!.J/ICbD'ES@?"rpHsc0sB* [][*0E^hW"$No>fJcLB&JcLB&JcLQ+"9],J+#Y'JRcaYEe$,`q>XKDJ((CBL"U>;X<gimcs6$l`WsXbg 7k+iU$jQh7!Ug"&"qr+488k!Fl,g0-VgVZ(%grXH!o3j.!.k3&!.k3&!/1CS$p/;2PIT3%TMZU/pAb@" +[p@Fde)Z(]5'&,iW'9%>FW"Dgu!3""4R=&!.k3&!.k3&!0R?Y!!rrY5"A:NE0\<:rr3MKK1?U\"U"i6 +u_\T;eq]k^B!<nrs.\W>UBd^"9S#l'*/+8%l@*\=`B1l_<KgqVKkoc#3>i:!.k3&!.k3&!.t7O!>>P< "VsCCVU<`4\usT?d_^2o)?Kd:#8KXQ[+O'Y\b*!/bNe6GX^Ndfli7_#!sAcF:5dEihoW=0\"%J./K5'" i;eH0JcLB&JcLB&LB%G[#7_J!)dJfps8V,iVfu?3(`*kp"9Sf4#U<B<r;Zf[\+H^.McrV#$4[IL!W`>j !#,VL*\9ZoR*kWS[&9gM=>UNr#R(:c!.k3&!.k3&!.k3)!!3<P;[7ZJdGUQk)$9O4"U#u;E21kRjo`52 0+-\=#o6R'Y/oATF<q%=!.k3&!.k3&!.k36!;ca'!=0f,5tP0qOM^knrt!,$7M>t0!s&cR2a0]0CR4V- !9=(Y#NhR^-40q[!q-+&!<N<50hkGEBni=tl/'CVGtodmjT'l4JcLB&JcLB&K)blPrW3WA2e/)b_8!O` e_einG<m,Jr;[';7!c5mg!I;%XU!&7k2!.J/ICbD'EJ7;!u=XgdIlYG\$!31E^hW"$No>fJcLB&JcLB& JcLQ+"9J`3%3c`jQKnMMo>.>K>!Wl<'+>!G"U>;X<gimcs6$l`WsXbg7k+iU$jQh7!Ug"&"V;V"5A$81 qqAQXVgVZ(%grXH!o3j.!.k3&!.k3&!/1CS!Z=**A<tEsSP9q%pAb@"+[p@Fde)Z(]5'&,iW'8u:PYjd g>?uu"4R=&!.k3&!.k3&!0R?Y!!riL1-J*-CQ?:.rr3MKJjg=W"Tnc5+Z2DO;eM']]`@R$rs.8C=!S+W "TnZ(nc0=)!sB/j9i"c&KqH3GhSl@<:FQM0!.k3&!.k3&!.k3&!##>4!=^eiMQsb)[BA'9e&$5n)Zfm; #8KOGX38f/\+Ha,dGs*7T3EfOrW)s"rrM]k'EJ7;";jpmdIl\I\?<<2E^hW!$No>fJcLB&JcLB&JcLQ+ "9JZ/#94[ZQ0SDLr5Y^Z><`f:&deaD"U>;V;3Bl<s7F;&WX=8`7Ni0N$jQk9!rW/k!#,SJ)^mp`QI>]d \Yl?R=>UNr#R(:c!.k3&!.k3&!.k3)!!3050F([;`Sd:\(BO71"To`-A!4b%g&n!K+U$d)#np*hV8M$E F<q%=!.k3&!.k3&!.k36!;ca:!=0f.6:k3nO2Cbns8Bof72#k/!s&WC.QBdrD2Rt\&%'-l_k:d2)[H]S #6k>6!V?@+!<`Q3)F.A+BRc&B_<^%"WI.Pm#3>i:!.k3&!.k3&!.t7O!>>J8!Y7>+SAiXk]WTc=cFe0^ )$0[9"qNCgI?TnZo8sBHQ^!D@4rsn.!X&E)!<WDq!#,P?$kk'mNm-\8_R-JTRrUtL)@HZ+!.k3&!.k3& !.k3+!!E?.$4nL&=-r7Qs6d\#G[*HK(D@/Z!sAc3(cc2r\$)QooT';u;`5F%%LNCC"T8H&!qZI,"r8OF ;L"n\gq^(iVgV]*%h&^I!o3j.!.k3&!.k3&!/1CS"!']5Bq3E*SP0h#p&G4"(FM48oMboR*!cT*!"&`N BViAfh;<<$"4R=&!.k3&!.k3&!0R?[!$2.A$7.l+93?(s_YaB5r5=.T'*\RA!<iuR.6'n'D=i2dIt<-! B1XWe"pkYG%13:AoDfR,"Ubkf9OhXfNh*Mmm,?'eIo7d$jT'l4JcLB&JcLB&K)blP'*87='LHrGgtC&c Y0tqF[V\,D!W<!'$6V<,@q9+^oOe\E?<C)h-PHXa!sAo;#Qt8%!#,SH(F)"ROi>S^\?W3GRrUqK)%-Q* !.k3&!.k3&!.k3+!!EE2&K*8A?(0sVs5CJcH<icR)ANV_!WrN-&0sMIEH#c0oOeJ35UdEX$OR+C"o\W+ !s/Pr!#,\Y1.l/9X3J2XW2?J@=Z$a!#mCCd!.k3&!.k3&!.k3)!!3BT<X=,RdGUNf(BOX2!!<6("UO`. !<iP`!"&obK#>pfiSS`("4R=&!.k3&!.k3&!0R?\!<*!=%4Xb;:Khk._YaB5qSRkQ'*\R@!<WT<'d"hZ 5P%>S77BU*-l<6o#Rq@[%LE:1!#,M@&/[*#D0VVMZFIa<j3+TU<%J78!.k3&!.k3&!.k3'!!!$5!sAcE 8qFkGlINMKd*ot:BK6k0r;[$+&frV^2E14c%l>sk-63a+!s&N0$kNaM"S;[."r/FB:2lE,\@&WGY.'m? 6n9,^"5s63!.k3&!.k3&!/COW"Uu:m3=f\hjT##&YGZ_S5o^m]$j?M1!s]J_0`F*(3!1`V(Cg<L#7(P> "pG,3"7uR-$R.];I@R^bW2?DiVg_c+&If$M!o3j.!.k3&!.k3&!/1CS$p/51Og`fuS4a\#!Q+mE&4E,C h;I>NF=%+>!.k3&!.k3&!.k36!;lj=!X&ug8ki8rKV--Ys8Vi1J41+U"9JT)!sJl8$kF!?'akW_"p4r7 &/ZB$%0lG*#6bPQ,!'"TR/Oc*_=$@-Y_#n-#3>i:!.k3&!.k3&!/:LQ!<<07"9o)P;ioN&lHZoBcHj8& AN(A*r;['("U>DE%Ls$A&.f<[$4-q@!s/Q0%2BZk$3UG'!=&rP1J)&(Q)OY`#d1Y)DaPuj$3T5eJcLB& JcLB&JcLZ.rW*-+&g/bq)Jkqts5:JdVgVr?*Zl4."T\W(!!<B2$k<aXo+2EC$4$e<"pYGA$4-tC"pG,% !=/`:.S=ZFYJ7mOWsGVP=uHs%$3gRf!.k3&!.k3&!.k3)!!3j/JI&!eg>JGm(]sfW!!<9F>.+=k"5e2J "4R=&!.k3&!.k3&!0R=,%hB*\'cS>P9NY;*HAnf=q#9mCX)U95"9S]+!<WE-"pkVFndcoU&.JpL!sTD` 1I+&_2DQa*)%[8e$jmCQ&JQ9=5>,1!K;/=Z#f>ZO\!Co',mEB1JcLB&JcLB&JcLN*!t#>A&/-!11e`%f g$@8-[B7NdVh7ht&d&"3!s/T0#lP,&$NpbA#R:P4!t>GL-9=OR.NK06%1<IKrWil=%MBO&3DX:6NLm0K XU))6MdJ1\&I8Hs!.k3&!.k3&!.k3.!!`lA&K3,]:hgQ!XPVpSY,8.H?TfAK'ak-FrW!*'"9o/?$h=WM #R:P9":5ML(EOhP/gh_Z'bLl^#RC_C$4dad*\^6'NNB_.\c&Q7VLMf-%grXG!o3j.!.k3&!.k3&!/:IU $8ZOm#Ir(8i/Ki1!Q4s@"rp!Y`Vnp$hJaS=e,Y(#JcLB&JcLB&OoQ@F+W_j]4%)qO@:FeGS$Kp&mbYsK @5J>o!rW-'!s8Z0#79l,+:&/S!sfu.;J'Z^E,SuQ2C0Id)&=,6-7qAY?Yab7P,\Dp#f534U3^!++9gj, JcLB&JcLB&JcLN*!uD^h,SN16App)Wg=!pMZED$FMe#'u%KcS/#6Fu1"U,)7#kS?9"pG,3"9Sc0$mnAS H"Bl=0.7t_(&emU&JuW@1dbD^J<-.pXSo7,Y,?bG+;G7f!oX-2!.k3&!.k3&!/^a]*?c^a7pgM'&#d1m ^9=K3Vg_r8)&<bh"T8<'!WrQ0#k/'D"9S`/$kaF(1IYDQ:II/q-Qa0=',;9!+Y>ZA=`]S$]Z%grrMp4% JQt&@#R:G5h#N$,JcLB&JcLB&L]@S\&27FV^';j7i89,B$J5=\!=&Z,nc/jr&M$RuV:>J+!o7N-df=t" JcLB&JcLB&OoQF\1bh!_<**40App&AYdhO7hT)XE;_/1U!<E3"!<`H*!sAbq"WmjK!Y$VR@rm[)YHjC7 <]i2k-mL2u5=\gkH%V$AVmuZ>#LBc9@7`-j"6BN7!.k3&!.k3&!/:IU-71*#'3]aQ[_g;8]=,#KY.'mB 8hV+j"8r3%!<N?*mf`Rk*s;]M'00TcXd+?M<(8l$,9\-N*@Ea6<Fg9/RAHj]XSo7,Y+Kf('FY6M!T=$1 !.k3&!.k3&!/^a]/i>dfBS3%l&&ul2WMcSkVghu4((UcW!rW*#!<NB&"98Vr"TAKG"qDLp1JVY:MfW<* 7mAgZ*Zu[R-T+J&FGZKg]>VLnWr8t(Vh//.$3gS7!Sma-!.k3&!.k3&!/^a]!=^GICQlNa#2A(rhfpUR f`23X*^VCr$Np)&#QY5Q5])mpbM<'Y!o78udf=t"JcLB&JcLB&OoQ:n8OZE\>uOpELSVPp^:qGBca&RE 6mDm1!:0_-!W`?62cj6nS(d>tbGBP`8O5?l4%W=QAp/s)]">WP^B_`SGY0n?'*I=rJcLB&JcLB&JcLN* "#r1u;A4DUhsfOF[]Zd8Xfnsg@Po>C#m0r'lN%t,!sJlI9nU7F_m>qhCfWq\0eFq+3)*b"Js2k-poOdg CGuP'!s&J^!.k3&!.k3&!.k3.!!bhb=Dj%tiq<K%[\p,(WX,JO>;d!"#Qt5+!:'Y/!!NrT.mds5_Usii A5c8o3\2j;1cJ-BLT/#.c+9mRWiH#u#cNG^/Hu:Z!Wh*WJcLB&JcLB&JcL]/#QYT$Clba>gZ8@q"5Ro= !ndPZ(0d;i>;I-*"8Mp'"r/dnNQ^5;ioL(#!o7)kdf=t"JcLB&JcLB&OoQ;?DeO!,B3fJ1Q*A*DcIhIA ^RB(=2]Mt\!#kq>!Y@@n=_WlHp\Nd]RsT0i@pEJWCi+6DPHk)$%)Bp9io7Y8@Q5bT%Kb_lJcLB&JcLB& JcLN*"'J`-CD2]8j58+pZECF@_9K*09Hk2["p3ic*!-3G"rg9laQ:[Z[%N1rAQVr1:eb)+FbPsKVQB]t $aR1NZ%c@1"p4r/!oX-2!.k3&!.k3&!/^a]@Vp:DT!m_,&%S^:WM?#NL2'I9$OR+?!os>$"VMk.6uA=8 f:.>2ARo.M:/=kl>A]%c]?JUAYPkL0W2#iDLhoa0"9S],g]2p+JcLB&JcLB&NW9Fj"U5YuA!*q3eDT?j h9s?I71\#N()g_\XFjS6-Pm'i!<N9&":lV6<IV.)rT4=Df>4JA.g+6#JcLB&JcLB&JcLr6(RC,>M1g%m L6/+;_UIiNs4si-<'DcI"60A#!<E653EK?tJAL^Pl-Hf0QB@&XKSG)-JrH;2rP&cXgumeQX*[Mf)\NGY jT'l4JcLB&JcLB&L&_=%H$4lTS%7.o^pgPO][>ZuV/&('$3^P6j8^/$!sJlJ9o$gOd_iT%Sre\SH$4=P H%M!>SY`<erN-L2[^E6,CI0-H!s&H(i;eH0JcLB&JcLB&M?!m4M3OU4]$.SnXJ_tnRY#6^;a2Q9#R(;2 j8^/'&frVmD4&Q"X,;OSH?aLMEd)kXMOgrjd*'2(rMp='Q\9Ej;E#Eq!W`AX!.k3&!.k3&!.k32!"15* /O3j.ZGt;Gio('cZ&iNA"P<\i)J#_SVM/S[689Z,*uu=K4&BO@UrD-fjosVOJQ=K4dK"k!JcLB&JcLB& OoPooW1oiLOHQ$.ZF\!7rr35QS7al5*"E&1!#kq>!Y@@n=_W;Wf'hhT`jW+SW1orSR$!c/Xh+JG%)M)f fYs+e3Yi23"Td]bJcLB&JcLB&JcLN*".5C<RhMa2^UgkZYHZ10k22P0.0TbT!WqE_)Zg*F"rg9laQ:mh ]!noBTq%R<QBd`)SYW0`XSf1/Y-t?nF\j\*!s/N)!T=$1!.k3&!.k3&!/^a]R\HdcZa[3<&#Z8'V2Jqg 9KXsI#mUV9!TX5#"VMk.6uA=8g:X&CO,f9_NfoZoR\m6ua2GZsWVrk*VMT:q68Tks!s/N)g]2p+JcLB& JcLB&NW9H-F`rS:^!G<ci8ibu]80ZF%+bIp)J#bY`42\0LO!TJBP(grK9W7AaO]8IjojJ':*Bqk!.k3& !.k3&!.k36!!BsI\\%jO"h;.V^;]aDrs-Z$:*CA`"p*`a'`e=:&33fpBn)5K`PTF-_S<n"\@K-K\H0:R r4`WYkhF+VH;5jl!s/Ma!.k3&!.k3&!.k3*!!B7%WN6`6Y-+t3Y-"q[k2Y'K7iMF.!<M3\)$0mD"rg9l aQCpeZ`UC4Ycb13Y,n_*X/`8tXUDA@QubtW*=DoM!<M*YJcLB&JcLB&JcLZ.#HY#0X/W"rW",f,WhXfC 9/.\5&dJRD!oj7f"VMk.6uA=8ftX]hV@'9!W2Q_rXfSY*X8]'uWr8t(UjZQ4*uGLn!ndR*!.k3&!.k3& !0.$ef[nd1gtgrLjQ5LZ"JoQ^%0G,]()g_]^<bNggtUK3eC2mrf@ep6h;@/OrT447E%)"<!.k3&!.k3& !.k36!;XA?^s(0\nF>i!T5$J&%1!(;irBPi!<N`d;I*L=H',8:[_)=L&Ac<*c-k7ncd'YASq('.*!,!u `W-DJ!<WE-#7:kM$jQn9aoI"nJcLB&JcLN*rN6($$a-Y<Zb",o[@:PZ&`3R!!WrQ/(.<;Hg==BZX/`5% poP+1YHY@E\@&E9PB9YU+;+q\h#PRt$ipD3!sAc4#R^nA"9HLBJcLB&JcLB&M?*LR!2g=)URR3Y;)TC5 'Fb3J!Wh<]%L!@^-TkalZJF3Z]!/<<pT"k)VPBfRR[9A#CecSo%1*+;f`9:t$ipD3"9\l6#mptB"9H@> JcLB&JcLB&NWAq<"QA+Z^7GF1.LcI1!!s'$Jt9?pgtpuLpuVqDhV6T*_6p+h2%7e2JcLB&JcLB&JcLr6 qS*TWd+6Xj`O`+7CIfrc#mCD3irBPi!<NWW7p952DgdkAW3uE8&AufMmeGqo_Qf_iDc]+O'*7%l`W-DJ !sT)@'H88I+Vb=caoI"nJcLB&JcLN*rN6%#$F?t;T9FnG=ZRZ4hZ+/f!WrQ;2-u-AYd:^>Xf\VuXUqYC ^WF[-Um$CF:Ga%*$3^Id!6P9M!<WH0#nIai+;bXp!lb4l!.k3&!.k3.!;`_rV[],TJTP0d0GtQ6#Qt20 iW'Jm%2Bs>:NVr5aP5Xo^9k!:Wt;2$P_OU7H$4"(4<Y+="p=t[!6tQQ!<`N1#nIaj+rLpt!l=qh!.k3& !.k32!;bg\gqK"h8HL.G!n@8W"!1$GL8i2>g#)Se$K'=KXc[X,5pm!?cN&OsJcLB&JcLB&OoY?n&B!&F `jVLpD,rnQ)$^<I!Wh9\%KQS9*]?_qASZ@>NLI#aq7dK\h"C^Hi52@NE`tjb,8LXfi;gjt$ipM>&/HKD 4\@XY&d-8VJcLB&JcLB&L&h1SriHR3Z)*\6BN%&E*=rD3!"T)3!WrfX8SX$CSZ/frYcIQ$&?rsqfZU.I DHK4X*=`D\!s.3XaoDhO":,AI)^I'u.iSp"`W1SjJcLB&JcLZ.qPsUn%?GmO<_"ti%grXF!W`>]!"]8= &/Q]Z?%/<OeaqeH^Taa6Wt1qhIr/q1>Z=6P,8(4b!s@0Uc2\7S":,DJ*$m:$/0#*$_>o/fJcLB&JcLf2 qW7q5RU.`a!!UdN#mDA0=b*NdcJ7OWjp9b[UOH<)*Xi+p!.k3&!.k3&!.k36!;aG@b1+J<R!)Om,T7=& !WiB'huF2e#8JRF8m5eBFFfRN^A5MSamB$,rR7ct?:Qam%1*4@huLas$j$\F(EtV'=_pqk)$J(^JcLB& JcLB&L&h1SriHR6Y*F6:5q<]V"Tnh_!<*!,"r]6j@s<]tXfnk0poOq/ak#"XNFk[3*u#(]!rrDX!6P9M !X9#E)(.=4=?n8K"NCFn!.k3&!.k3.!;`_rUC)Wi;E??K%g<(=!oEth!X8uC*AL/sKVZcarT283Wqi\+ TndPq<D5Y1*u5=l!s8T+fDs1s$j$V?&K)uU8Q\;-'El8QJcLB&JcLB&NWAq<"OD9M%ft#W#Qtr&?&GPr f]Dqk#2$/1<\G0jb5fZb!!9_3JcLB&JcLB&OoYHe%^`UO]XF]!E`G+C$j["=gAhWb%N6`S9Nl"DFbH!a q6UOOgu[bMXFsqG0,tDU!6,!I!X]P\-pCRFIpkSb"j-gs!.k3&!.k3*!<&c%Vkg2aOEF_h-Pm$d!S[S_ ";2n786g%`P*VH)V>6npXfnn+O(_$4'b1KOfDs%o$j$YC(*>4t=D:Pd('MVWJcLB&JcLB&M?*UL".u9Y OpQ884sh3Z#Qb#-h>e&f"U>AK,W8>+JYU3OhpK(2TaQm,AlV;^.iA^#"U*<Tc2\7S#7hRm0h#2Y;)/pj _>o/fJcLB&JcLf2rMTt!Vkn`#&ci!Y!!`T>02Q5,P,A&Q"cHkU-P6I'!6Y?C!Y)^@JcLB&JcLB&OoYHE %[<6EP(e!d9fa[=#R1D5gAhWa#n\(%2+CPQC3G5lqi_JRPa@l1Sre"r5V4)l#i#F"!"8r;'d5.s>]km= 7O&)Z!.k3&!.k3&!/:IUJ:N3$%Y0(ZG%4<.-Q3L!!<E0$gAhZb$lC3C5>>?qCiO]MJ,Fa)It)ffE+`9= //o'+"U*HXaoDhP#S7gt2+h7s=>h$"`W1SjJcLB&JcLZ.#C_,OIXQNdD$F'-.Mrd+"TAGY!"f87"U>JR ,r%_dCO_S0MM-D+qKrZj@T#WT.if3-"p>%X!6tQQ!sfGU,;r8)E`b:>"Mt.j!.k3&!.k32!!k)*/1W1u -5d$e!6tQL!<`oK*$Qg\r$Vau.3K<3"9HUEb5_SJ(]q;LJcLB&JcLB&OoY>c$X6=m2_6*g%0Zh8!S[S^ !X8uA'cn_W4%2hAr*0b<?!^lF?!:<+5r'`)&dnlu!6,!I!t5qi0hQ#)PB0DD"j-gs!.k3&!.k3*!!?"n ;G[fu9hRl5.N]B7#Qb#,!SRM`!s]8K)C$dh4?u>-:/+I]9+=Qh8OGTu/g;,B#6k83fDs%o$j-bI)^[XE B74)K)[+.\JcLB&JcLB&M?!lX:f1"_8OkuN0-_8D#mLM5!Sm_b!<N?,#7_Ff,V;&H:f%!a%S]Yk9M7uH 4>J<,(CpfUrWCXMc2\7T#n\.(4B,s@?ToJ5_>o/fJcLB&JcLB&JcO!p!s/lY#.jke!.k3&!.k36!<4AF ,lT(q,9@^9%grUG!r`5T!"/f/!sJl8$kF!f)BSi$&0iDF,UF]Z+!)@9&If!M"9R?Y`W-DL$lC?M;/V)W Hr29raoI"nJcLB&JcLN*"!&I++:B51)AWtr$3p\9!WgpR&-;q:"pkYH&/#]p)BBh<)]AVo$lg0%'+bT[ #6Y/3!Wq!SaoDhP#SJ+,5Zr#[B0dUB`W1SjJcLB&JcLZ.#9Fs0*Z>k0&I&[O"p>&2"53_a!<N<)"U>>A %M9En)&iGn!#tkT$lKfn%h&aM"U"l/!WgdNc2\7T#nn@16<\;\B1!dE_>o/fJcLB&JcLB&JcO!p!s98s $bHCj!.k3&!.k36!;Qg#"9S\I!!30&"8i9,"U,)7"U"o.e,[Jg$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB& L&_;[#71V>"U"r1!s/MG!!*-(rWW'"!<WAL!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3.!!`]4#6b22 !<<*#a8c5B"8N)u!s&H(bQ,og$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3& !0R?Y"Tnl0!WgFD!W`?(qZ@$*"9eo1!WgdN`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLN*r<<3(rW<0& !QkBE!WrQ/p]LX#!WgXJaoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLZ.qud'&!Wg=A!WiH+rWN'"!WiE( bQ,og$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R?X!s/N)!QkEB!W)rr !s/N)!Rq+h!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!/:LP"9nu2!s/N)!QkBC!<Vrs!WiE(ciD2g$j-eM +"TfcFc1')+9][aJcLB&JcLB&M?!k`"9\f/!W`;A!!**%qZH]s!!17Cc2\7T#o"L67:((mCe#TN_>o/f JcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!;?N8!:p6?!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3* !;uuu!r`5B!<3)n!ri;I!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3.!;lm"!<<,?!<3)o!r`5D!6tQQ !soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6) aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/f JcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M !soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc> ])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1Sj JcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I !t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa /O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"n JcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB& JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY` /4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_ JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB& JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r 3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`uf M/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB& JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB& JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cd Mekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB& JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB& JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssV T7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[) "Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB& JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p !sKW1&A%po!.k3&!.k36!.k3j!"8r;'d>;#??_?H7O&)Z!.k3&!.k3&!.k3&!6P9M!sfGU,WAD+G$6gD "NCFn!.k3&!.k3&!.k3r!"8r8&K)lU:1A?M3ZJ:>!.k3&!.k3&!.k3&!6Y?D#9*cW!.k3&!.k3&!0R>6 !6,!I!XK;Q+u)JdBhpK%"Ng^r!.k3&!.k3&!.k3n!"8o5$P=7(2+:M/-PQ^'!.k3&!.k3&!.k3&!6tQQ !X8uD)(.=4=$S/J"Mt.j!.k3&!.k3&!.k3n!!!)3!.k3&!.k3&!0R>6!6,!I!<if?'d+ta689Sn"3LUq !.k3&!.k3&!.k3n!"8o3#7;"X+=]2p((15a!.k3&!.k3&!.k3&!6tQQ!X&`8&/QH>1aX"G"2Y%i!.k3& !.k3&!.k3&!.k3&!.k3&!0R>6!6,!I!<WK0$4RXc*Yf.i!QkCo!.k3&!.k3&!.k3n!"8l1"9\r9%MBKf $3^LN!.k3&!.k3&!.k3&!6tQQ!<WH-#71nS(D-uX!l=qh!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6,!I !<E9)"9o/?$jm1@!QkCo!.k3&!.k3&!.k3n!"8l0!s8Z/"pbM?"9S\E!.k3&!.k3&!.k3&!6tQG!<NB& "9o):#m^Y:!Q"hg!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6"pG!<N?*"U52<"pG)0aoI"nJcLB&JcLB& JcNmm$N^A3!sA`1"p>&2!QG+k!.k3&!.k3&!.k3q!"/i0!s8Z/"U>/5!s-7=JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcNairW*9+!s8Z0"9S]+aoI"nJcLB&JcLB&JcNmm!!3'#rr`6'!WrK)`W1SjJcLB&JcLB& JcO$q!!3'#!!E0&!WrK)_>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6_uT]9rW<*#aT-nmJcLB&JcLB& JcNjlrW2lt!!1%=JcLB&JcLB&JcLB&bQ.VCqZ6`u_#T&eJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ!WrT2$Om^` &.8XBaoI"nJcLB&JcLB&JcNpn$ipD3"9f&;%1imQ"9QRCJcLB&JcLB&JcLB&c2\7R!X&W0#RLqP$jZt; _>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ"UY\P*[id-/fkK)aoI"nJcLB&JcLB&JcNpn$j$P: #n@[k-SQb[$3S9JJcLB&JcLB&JcLB&c2\7S":#5D(EY%[,Spdi_>o/fJcLB&JcLB&JcLB&JcLB&JcLB& OoU(6`W-DK#S.^q1.>;\:brslaoI"nJcLB&JcLB&JcNpn$j$V@&K)rS7T_l''ElDUJcLB&JcLB&JcLB& c2\7S"ptq[-oXXu5q!EM_>o/fJcLB&JcLB&JcNpn!!9_3JcLB&JcLB&OoU(6`W-DL$l1'B8S!41E_7V] aoI"nJcLB&JcLB&JcNpn$j-bI)^[UCB7!rH)[+.\JcLB&JcLB&JcLB&c2\7T#n\.(4B#m=?T]>3_>o/f JcLB&JcLB&JcNso!Xg7X])[E_JcLB&JcLr6JcNdj$j-nV-oY(EM4];u.L+#qJcLB&JcLB&JcLB&aoDhP #o"F26X=elCIB9J`W1SjJcLB&JcLB&JcO'r$j-eM+"TieFGXd%+9]O]JcLB&JcLB&JcLB&bQ%_J)F=tH !.k3&!.k3&!0R>6!6,!I!t6(r2cF^ST7Brl#0Hpt!.k3&!.k3&!.k3n!"8r9'HSbl?$2'@73D`Q!.k3& !.k3&!.k3&!6tQQ!soY`/4EleM/,U("Mt.j!.k3&!.k3&!.k3p!!<BD64^[.JcLB&JcLB&OoU(6`W-DL $lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L6 7:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3& !.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3& !.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I4 6sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3& !.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3& !.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR <H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((m Ce#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3& !.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3& !6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqn CdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3& !0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3& !6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qh JQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN _>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3& !6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF "WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL `W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6 !6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ !soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6) aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/f JcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M !soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc> ])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1Sj JcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I !t6%p2GnFJRse0`#0Hpt!.k3&!.k3&!.k3n!"8r9'HAVh>B#C35p$6L!.k3&!.k3&!.k3&!6tQQ!soY_ /43Z]L1ist"Mt.j!.k3&!.k3&!.k3p!!<<=3XiV#JcLB&JcLB&OoU(6`W-DL$lC<J:MYTMGu,mnaoI"n JcLB&JcLB&JcNpn$j-bJ*%F-SD1cCa*X'I_JcLB&JcLB&JcLB&c2\7T#nn@/5ZhoUAjILA_>o/fJcLB& JcLB&JcO!p!s0&i$+g1h!.k3&!.k36!.k3j!"8r<(F1_/B7H1i9dU%d!.k3&!.k3&!.k3&!6P9M!sfJX -Tk@BJ7(M["NCFn!.k3&!.k3&!.k3r!"8r9&KE/^<G?nk599sE!.k3&!.k3&!.k3&!6bEF!Y$Xa])[E_ JcLB&JcLr6JcNdj$j-nQ,;;YuHB<,<,mDEkJcLB&JcLB&JcLB&aoDhP#S7k!3Da:6>rio-`W1SjJcLB& JcLB&JcO'r$j-eJ)C@ODApI]F*<a4ZJcLB&JcLB&JcLB&b5_SN+pGRYJcLB&JcLB&OoU(6`W-DK#ne1( 3_j1/><<i.aoI"nJcLB&JcLB&JcNpn$j$VB'c\eh:h!!K('MVWJcLB&JcLB&JcLB&c2\7S#7VCh/jN<E 9.q%`_>o/fJcLB&JcLB&JcNpn!!g(8JcLB&JcLB&OoU(6`W-DJ"q2+^-8Rtc4XUmFaoI"nJcLB&JcLB& JcNpn$j$P;%29d11dE]6%Kj]NJcLB&JcLB&JcLB&c2\7S":5MO*[ij30HL`,_>o/fJcLB&JcLB&JcLB& JcLB&JcLB&OoU(6`W-DJ!sT)A'HA>J+Vb=caoI"nJcLB&JcLB&JcNpn$ipG5#71nU)^#t/#6MmFJcLB& JcLB&JcLB&c2\7R"9\u:%i$'.)%[&T_>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`;g8H!WrN.#71bD "TneJ!.k3&!.k3&!.k3&!6G3K!WiH+"9eu8"p>#/`W1SjJcLB&JcLB&JcO$q$N^A3"9\l5#R1D6!Q"hg !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!6"pG!<E6(!sAc3"Tnf,aoI"nJcLB&JcLB&JcNmm"9AQ*!sAK)!WrK)`W1Sj JcLB&JcLB&JcO$q"9AQ*!sAK)!WrK)_>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ!<WE-"pkYG $3gS5aoI"nJcLB&JcLB&JcNpn$ipD3!sA`2#RL_=!s-CAJcLB&JcLB&JcLB&c2[nH!X&E)"pYD?#Qt82 _>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ!WrT2$Om^`&.8XBaoI"nJcLB&JcLB&JcNpn$ipD3 "9f&;%1imQ"9QRCJcLB&JcLB&JcLB&c2\7R!X&W0#RLqP$jZt;_>o/fJcLB&JcLB&JcLB&JcLB&JcLB& OoU(6`W-DJ!sJo:%MTd'(CpcPaoI"nJcLB&JcLB&JcNpn$ipG5"U>AF'G_8g"p2dEJcLB&JcLB&JcLB& c2\7R!sAc5$4dge&IJ^D_>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ"UPSM)^I$q.N8g!aoI"n JcLB&JcLB&JcNpn$j$P9#n7Ug,:jrP#m80IJcLB&JcLB&JcLB&c2\7S":#5B'c\JN+;G1b_>o/fJcLB& JcLB&JcLB&JcLB&JcLB&OoU(6`W-DJ"q21c.QU.)6RrlRaoI"nJcLB&JcLB&JcNpn$j$P<%i$3=3_2(M &-KoPJcLB&JcLB&JcLB&c2\7S":5SR+>,cJ2Bi\8_>o/fJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6`W-DK $5+=,4Af^9>s'/3aoI"nJcLB&JcLB&JcNpn$j$YC'cntm;e8TS'a2MVJcLB&JcLB&JcLB&c2\7S#7hOk 0LA`N9e[@d_>o/fJcLB&JcLB&JcNso!<NS=!.k3&!.k3&!0R>6!6,!I!t5tl1JMP5Q?Q(O"j-gs!.k3& !.k3&!.k3n!"8r8&K<,]<,7"n4ra^F!.k3&!.k3&!.k3&!6tQQ!soP[-pLaJIq(_b"Mt.j!.k3&!.k3& !.k3p!!<95/-iceJcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"Tfc Fc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3& !.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3& !.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4H Mk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg( +9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3& !.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p !!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1') +9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36 !.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r !"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$ .L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O] JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n !"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD 64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][a JcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j !"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9 'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#q JcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB& JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9 'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/ JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB& JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r< )CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr ??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB& JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB& JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko ?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB& JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB& JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<(F1b1 BRl@l:+$4f!.k3&!.k3&!.k3&!6P9M!sfJX-TtFEJ7:\^"NCFn!.k3&!.k3&!.k3r!"8r9&KE2`<bm.n 5TU'F!.k3&!.k3&!.k3&!6bEF!Y6dd])[E_JcLB&JcLr6JcNdj$j-kP+Y?)eEenI!,6c3iJcLB&JcLB& JcLB&aoDhP#S7gt2+_+p<]1fu`W1SjJcLB&JcLB&JcO'r$j-bH)'_%4?ZB.+)?dnWJcLB&JcLB&JcLB& b5_SJ(BV2KJcLB&JcLB&OoU(6`W-DK$5+=+4&BL5>Wa&1aoI"nJcLB&JcLB&JcNpn$j$YC'c\hj;I`<O 'a2MVJcLB&JcLB&JcLB&c2\7S#7VCh00rQK9e[@d_>o/fJcLB&JcLB&JcNso!<NS=!.k3&!.k3&!0R>6 !6,!I!XK;Q+u)JdBhpK%"3LUq!.k3&!.k3&!.k3n!"8o5$P=7(2+:M/-PQ[&!.k3&!.k3&!.k3&!6tQQ !X8uD)(.=4=$S/J"Mt.j!.k3&!.k3&!.k3n!!!)3!.k3&!.k3&!0R>6!6,!I!<rrF(a_"):cp*<"3LUq !.k3&!.k3&!.k3n!"8o3#RqCd-T"%?*"<"i!.k3&!.k3&!.k3&!6tQQ!X&f='-8PY5qj>j"2Y%i!.k3& !.k3&!.k3&!.k3&!.k3&!0R>6!6,!I!<`Z:&/c]C1aj4M"3LUq!.k3&!.k3&!.k3n!"8o3"pbSN)'CCM 'F4f\!.k3&!.k3&!.k3&!6tQQ!X&]6$ksU(.3B61"2Y%i!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6,!I !<WH/#n.F^*#/ne!QkCo!.k3&!.k3&!.k3n!"8l1"9\o8%1s<d#m:=L!.k3&!.k3&!.k3&!6tQQ!<WH- #71hO'bCZS!l=qh!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6"pG!<E6(!sJl5"Tnf,aoI"nJcLB&JcLB& JcNmm"9AQ*!sAK)!WrK)`W1SjJcLB&JcLB&JcO$q!s&H)"8`3%!Wg.<JcLB&JcLB&JcLB&JcLB&JcLB& JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNai $NU>3"U58@$jm1@!QkCo!.k3&!.k3&!.k3m!"/i1!sA`2#RL_=!s-CAJcLB&JcLB&JcLB&bl@bG"9&E- #7(VA"9\bB!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l1"U>AE'H�%gN-X!.k3&!.k3&!.k3& !6P9M!<WH.#7:tU((goX!lb4l!.k3&!.k3&!.k3r!"8l1"9f&<%hofl$3^LJ!.k3&!.k3&!.k3&!.k3& !.k3&!.k36!.k3j!"8l2#Rh7]+t>Ar(^pMh!.k3&!.k3&!.k3&!6P9M!X&]5$PF="-l`j*"3(=m!.k3& !.k3&!.k3r!"8o3"pk\O)'C=K'+"cX!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l4$P4'u00Dfa ,8(+$!.k3&!.k3&!.k3&!6P9M!X&c:&K;uJ3\)-Y"3(=m!.k3&!.k3&!.k3r!"8o3#Rh:b,qqG4*"<"e !.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8o6%2Bs:5#5NU/f"Q3!.k3&!.k3&!.k3&!6P9M!X/lA (*bLs9fO@0"3(=m!.k3&!.k3&!.k3r!"8o4#n[su0gJJp,S:0r!.k3&!.k3&!.k3&!.k3&!.k3&!.k36 !.k3j!"8o8&fW/W9jr3K3ZJ:F!.k3&!.k3&!.k3&!6P9M!X9)K*%X6K?q;ja"NCFn!.k3&!.k3&!.k3r !"8o6%2Bp95>bl]/enN+!.k3&!.k3&!.k3&!6P9A#.aed!.k3&!.k36!.k3j!"8r;'d5.t>]Ya;73_uY !.k3&!.k3&!.k3&!6P9M!sfGT,;r/#E`b4;"NCFn!.k3&!.k3&!.k3r!"8r8&/c]O9j_pC2];h9!.k3& !.k3&!.k3&!6Y?D"rIER!.k3&!.k3&!0R>6!6,!I!t6"n2Ge4DR<h^Y#0Hpt!.k3&!.k3&!.k3n!"8r8 &f`Ac=Drk(5TU'J!.k3&!.k3&!.k3&!6tQQ!soV^.m[9UJn@=k"Mt.j!.k3&!.k3&!.k3p!!<982%$qq JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB& JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r< )CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr ??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB& JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB& JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko ?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB& JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB& JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRF EJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$? 7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB& JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB& bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A 73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB& OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB& c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH? <[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO !.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB& aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K )aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q !.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6 `W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T #o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r !.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3& !.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP #o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J !.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3& !.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL $lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L6 7:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r;'d>;#?[7WM7jA2[!.k3& !.k3&!.k3&!6P9M!sfGU,WAG-G[!-H"NCFn!.k3&!.k3&!.k3r!"8r8&K)lU:1SQR3ZJ:>!.k3&!.k3& !.k3&!6Y?D#Ta)[!.k3&!.k3&!0R>6!6,!I!XTGW,r\M*F]g[D"Ng^r!.k3&!.k3&!.k3n!"8o5%29a3 4AK9S//8<-!.k3&!.k3&!.k3&!6tQQ!XB/K*@sBN@7`$c"Mt.j!.k3&!.k3&!.k3n!!!57!.k3&!.k3& !0R>6!6,!I!<rrG*%<j;=[FSQ"3LUq!.k3&!.k3&!.k3n!"8o3#n@[l/3$-V+:nXp!.k3&!.k3&!.k3& !6tQQ!X&f?'d,(h8MhP$"Mt.j!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6,!I!<ic<&f`5P4=hK^"3LUq !.k3&!.k3&!.k3n!"8o3"pk_R*$d-\('t)_!.k3&!.k3&!.k3&!6tQQ!X&`7%i$-40I%>>"2Y%i!.k3& !.k3&!.k3&!.k3&!.k3&!0R>6!6,!I!<WN5$kjO(.3B62!m1Lp!.k3&!.k3&!.k3n!"8l1":#5C'H%u. %gN0U!.k3&!.k3&!.k3&!6tQQ!<`N1#nI^g+;YOo!l=qh!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6,!I !<WH/#n.F^)\`\b!QkCo!.k3&!.k3&!.k3n!"8l1"9\o8%1s<c#m:=L!.k3&!.k3&!.k3&!6tQQ!<WH- #71hO'b:TR!l=qh!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!6,!I!<E9)"U>AC%LWLE!QkCo!.k3&!.k3& !.k3n!"8l0!s8Z0#7(YB"U"kG!.k3&!.k3&!.k3&!6tQQ!<N?+"9f#:$4$e<!Q"hg!.k3&!.k3&!.k3& !.k3&!.k3&!0R>6!6"s:!<<3"!s&H(aT-nmJcLB&JcLB&JcNmmrrN*#r<*'$`;kJiJcLB&JcLB&JcO$q rrN*#"Tni0!s/P?!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l0!sJo:%2'Be$3^IQ!.k3&!.k3&!.k3&!6P9M !<N?+"U>>C&.8^G!lb4l!.k3&!.k3&!.k3r!"8l0"9\l6#n7IT#Qt4G!.k3&!.k3&!.k3&!.k3&!.k3& !.k36!.k3j!"8l2#Rh7]+t>Ar(^pMh!.k3&!.k3&!.k3&!6P9M!X&]5$PF="-l`j*"3(=m!.k3&!.k3& !.k3r!"8o3"pk\O)'C=K'+"cX!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l4$kjR.2F^\3-kld+ !.k3&!.k3&!.k3&!6P9M!X&c='d"qa6o#hp"3(=m!.k3&!.k3&!.k3r!"8o3#nIan/3$'R+:eRk!.k3& !.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8o8&fW/W9k/BN3ZS@G!.k3&!.k3&!.k3&!6P9M!X9)K*%X6L @Rr'd"NCFn!.k3&!.k3&!.k3r!"8o6%2Bp95>kr^/f"T,!.k3&!.k3&!.k3&!6P9A#J'ne!.k3&!.k36 !.k3j!"8r:'Henm=`B(-6QlWU!.k3&!.k3&!.k3&!6P9M!s]>P+>cSnDcAP1"NCFn!.k3&!.k3&!.k3r !"8r8%i6EH8R6772AlY7!.k3&!.k3&!.k3&!6Y?D";1dJ!.k3&!.k3&!0R>6!6,!I!t,hg01TDqNGqB4 "j-gs!.k3&!.k3&!.k3n!"8r8&/c`Q:1JNQ3#`"?!.k3&!.k3&!.k3&!6tQQ!sfJW,s"k5G?d0K"Mt.j !.k3&!.k3&!.k3o!!3EI"1nPb!.k3&!.k36!.k3j!"8r<(F:h2BRlCm:+$4f!.k3&!.k3&!.k3&!6P9M !sfJX-TtFEJ7:\^"NCFn!.k3&!.k3&!.k3r!"8r9&KN8a<bm1o5TU'F!.k3&!.k3&!.k3&!6bEF!Y6ge ])[E_JcLB&JcLr6JcNdj$j-nU-oOtBLn/un.0dopJcLB&JcLB&JcLB&aoDhP#o"F26!JAcBgWsF`W1Sj JcLB&JcLB&JcO'r$j-eM+"TfbEJA0r+9]O]JcLB&JcLB&JcLB&bQ%_I(HW&;!.k3&!.k3&!0R>6!6,!I !t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa /O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"n JcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB& JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY` /4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_ JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB& JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r 3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`uf M/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB& JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB& JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cd Mekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB& JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB& JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssV T7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[) "Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB& JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p !sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg) "NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6 JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r $j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m #0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j !.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn $j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1 &A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn !.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj $j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM +>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt !.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3& !.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DK$5=R46!8/ZAjRXEaoI"nJcLB&JcLB&JcNpn$j$YE (*GA&>Ad@r(^.hYJcLB&JcLB&JcLB&c2\7S#S.^q1eCqi<&>Hq_>o/fJcLB&JcLB&JcNso!Ws&:])[E_ JcLB&JcLr6JcNdj$j$YC'cnnh9jU:@'a)SYJcLB&JcLB&JcLB&aoDhO"UP_T+tl)Q2^8k9`W1SjJcLB& JcLB&JcO'r$j$S=&/QQF5>F6a&HorNJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipJ:$kO:$/2emp $j4WPJcLB&JcLB&JcLB&aoDhO"9o,>'H&)E*u#"``W1SjJcLB&JcLB&JcO'r$j$P9#n.Ld,:alN#m8$E JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipD3"9f)?%h]<Y"TcaGJcLB&JcLB&JcLB&aoDhN!WrQ. "pbSG#mUS7`W1SjJcLB&JcLB&JcO'r$ipD3"9\r9$4dFJ"9QF?JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcNai$NU80!sAc4$3gY9!QkCo!.k3&!.k3&!.k3m!"/f/!WrQ."U>/5!s-CAJcLB&JcLB&JcLB&blA+P !WiH,"9f#5"9S\A!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3i!<*!)!WrQ/"pG)1!QkCo!.k3&!.k3& !.k3m!!!'!!WW?$"9JZ,!QG+k!.k3&!.k3&!.k3q!!!'!!WW?#"9AQ)_>o/fJcLB&JcLB&JcLB&JcLB& JcLB&OoU(6`;oi;!!<*$!<N;D!.k3&!.k3&!.k3&!6G6?!WN6""9/GA!.k3&!.k3&!.k3&!6kNC!=&Z- !s8Z.!Wp1<JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNXfq#SS;JcLB&JcLB&JcLB&`W5r<!!<-#`;kJi JcLB&JcLB&JcNpnr;cm"rW0h8JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLr6JcNOcrW1%>JcLB&JcLB&JcLB&_Z9Z:_Z58gJcLB&JcLB&JcNgkrW0b6JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcNRdqZ4e=JcLB&JcLB&JcLB&_uKi>!<W6$`;kJiJcLB&JcLB&JcNjl!W`<'rW0h8JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcNUeq>n\<JcLB&JcLB&JcLB&`;oo=rW<*#`;kJiJcLB&JcLB&JcNmm rrN*#rrKq9JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNUerW*!#rW1+@JcLB&JcLB&JcLB&`;fl=quQj! `;kJiJcLB&JcLB&JcNmm!!3!!!!0n9JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipG6#7:qT)Bfq. #Q`'JJcLB&JcLB&JcLB&aoDhN!sAc4$4dgf&dnmF`W1SjJcLB&JcLB&JcO'r$ipG5"UGGG'H%Pk"p2XA JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNdj$ipM>&/HKD4@qFU&d-8VJcLB&JcLB&JcLB&aoDhO":,AI )^I$s.iSp"`W1SjJcLB&JcLB&JcO'r$j$P;$kXI*0K^m+%0OHIJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcNdj$j$_I)^[O=@<Pg6*!FCaJcLB&JcLB&JcLB&aoDhO"q;:e/3Qd:81YJY`W1SjJcLB&JcLB&JcO'r $j$YC'cnqk;.<*K'a2ARJcLB&JcLB&JcLB&aoDDG\c@<^JcLB&JcLr6JcNdj$j-nT-8\P7K:.!^-jIfo JcLB&JcLB&JcLB&aoDhP#SJ+,5?MfVAO%:>`W1SjJcLB&JcLB&JcO'r$j-eL*[sBWDLuIe*sBF\JcLB& JcLB&JcLB&bQ%_H&iC!-!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9 'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/ JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB& JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r< )CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr ??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB& JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB& JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko ?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB& JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB& JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRF EJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$? 7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB& JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB& bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A 73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB& OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB& c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH? <[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO !.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB& aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K )aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q !.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6 `W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T #o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r !.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3& !.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP #o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J !.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7Bok#0Hpt!.k3&!.k3&!.k3n!"8r9'H\ko?$2'@6m)WP!.k3& !.k3&!.k3&!6tQQ!soYa/O`ufM/,O&"Mt.j!.k3&!.k3&!.k3p!!<BD64^[.JcLB&JcLB&OoU(6`W-DL $lC?M;/V)WHr29raoI"nJcLB&JcLB&JcNpn$j-bJ*%F3VDh_mj*sBR`JcLB&JcLB&JcLB&c2\7T#nn@1 6<\;\B1!dE_>o/fJcLB&JcLB&JcO!p!s98s$bHCj!.k3&!.k36!.k3j!"8r<(F:h2BRlCm:+$4f!.k3& !.k3&!.k3&!6P9M!sfJX-TtFEJ7:\^"NCFn!.k3&!.k3&!.k3r!"8r9&KN8a<bm1o5TU'F!.k3&!.k3& !.k3&!6bEF!Y6ge])[E_JcLB&JcLr6JcNdj$j-nR,;D`!HB<,<,mDEkJcLB&JcLB&JcLB&aoDhP#S@q$ 3Da:6>rio-`W1SjJcLB&JcLB&JcO'r$j-eJ)C@ODApI]F*<a4ZJcLB&JcLB&JcLB&b5_SN+pGRYJcLB& JcLB&OoU(6`W-DL$Pag;79t(pDFPiSaoI"nJcLB&JcLB&JcNpn$j-bH(aCq3@!,U2)[+.\JcLB&JcLB& JcLB&c2\7T#S7k!2bdb'=umW+_>o/fJcLB&JcLB&JcNso!X9SG])[E_JcLB&JcLr6JcNdj$j$\F(F(\( =_ghi)$J(^JcLB&JcLB&JcLB&aoDhO"q)"\-T4Is5:@3K`W1SjJcLB&JcLB&JcO'r$j$V?&K3&V8Q\8, 'El8QJcLB&JcLB&JcLB&aoDDC\c@<^JcLB&JcLr6JcNdj$ipM=%i$6=3(>\J&-L&TJcLB&JcLB&JcLB& aoDhO":#;G(a:Lh-lEBp`W1SjJcLB&JcLB&JcO'r$j$P;$5".#/N>-r$j4?HJcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcNdj$ipG6#R_1Y*$Z=4#Q`'JJcLB&JcLB&JcLB&aoDhN!sAf6$P4$j'FP*H`W1SjJcLB& JcLB&JcO'r$ipG5"pbVL'cIbp"p2XAJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcNairW*6*!s8Z0!s8SG !.k3&!.k3&!.k3&!6G3@!WE-)!s8Z/!s8VD!.k3&!.k3&!.k3&!6kKD!WE-#"8r?'!s6:=JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcNXfq>nY;JcLB&JcLB&JcLB&`W5i9_uPAhJcLB&JcLB&JcNpnq>nA3JcLB& JcLB&JcLB&JcLB&JcLB&JcLr6JcNai$NU;2!sAc3#R1D6!QkCo!.k3&!.k3&!.k3m!!<6'!sAN*"9nu3 !s-CAJcLB&JcLB&JcLB&bl@hH!WrQ("9\o3"9S\A!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l0 !sAf6$Om[V#m::O!.k3&!.k3&!.k3&!6P9M!<N?+"9o,<%1*4A!QG+k!.k3&!.k3&!.k3r!"8l0!sA`2 #RLqH#6Y(E!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l1"9o/@&eu?"$jHaT!.k3&!.k3&!.k3& !6P9M!<WH-"pk_M'b:TR!lb4l!.k3&!.k3&!.k3r!"8l1"9\r9%1s<c#m:=H!.k3&!.k3&!.k3&!.k3& !.k3&!.k36!.k3j!"8l1"pk\N(`t(E&de]_!.k3&!.k3&!.k3&!6P9M!<WH/#RqC^*#/nf!lb4l!.k3& !.k3&!.k3r!"8l1":#5B',M])%0lsO!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8l3$4djp.lKdM +V4au!.k3&!.k3&!.k3&!6P9M!X&`9&/ZN?2('4K"3(=m!.k3&!.k3&!.k3r!"8o3#RV+\+tPW")%6Va !.k3&!.k3&!.k3&!.k3&!.k3&!.k36!.k3j!"8o6%Mg0@5uD/b0Gai6!.k3&!.k3&!.k3&!6P9M!X/oC (*kY$;*-$8"3(=m!.k3&!.k3&!.k3r!"8o4$5"($1db2(-4pBt!.k3&!.k3&!.k3&!.k3&!.k3&!.k36 !.k3j!"8o9'-A\h=Dre&5p6ES!.k3&!.k3&!.k3&!6P9M!XB2N+>QDiD,N,+"NCFn!.k3&!.k3&!.k3r !"8o7%i6?D7pBe/1`6G5!.k3&!.k3&!.k3&!6Y?D!tYOG!.k3&!.k3&!0R>6!6,!I!t6%p2Gn@GRs\'] #0Hpt!.k3&!.k3&!.k3n!"8r8'HASf=`9%-5p$6L!.k3&!.k3&!.k3&!6tQQ!soY_.mdEXKP*Xp"Mt.j !.k3&!.k3&!.k3p!!<<<2[d4tJcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&JcLB&JcNpn $j-eM+"TfcFc1')+9][aJcLB&JcLB&JcLB&c2\7T#o"L67:((mCe#TN_>o/fJcLB&JcLB&JcO!p!sKW1 &A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k3&!.k3&!6P9M!soY`/4<cdMekg)"NCFn !.k3&!.k3&!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k3&!.k3&!6bEF"WKc>])[E_JcLB&JcLr6JcNdj $j-nV-ob4HMk>Q$.L+#qJcLB&JcLB&JcLB&aoDhP#o"I46sXqnCdfHL`W1SjJcLB&JcLB&JcO'r$j-eM +>$#gFGXg(+9]O]JcLB&JcLB&JcLB&bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt !.k3&!.k3&!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k3&!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3& !.k3&!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&ec6'Y!sT&=$4-tC "Tnh:!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!87D\!WrQ0#6tG;"U"o/[/bdYJcO'r$j-eM+>$#g FGXg(+9]O]JcLB&JcOX-$N^G6#7(P>"pG,4!jM`W!.k3p!!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR <H3qhJQ=6)aoI"nJcLB&ec6'[$5+:#*?,h1%giHM!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!87D\ !s]8M()@Vt&.8^G[/bdYJcO'r$j-eM+>$#gFGXg(+9]O]JcLB&JcOX-$Np_G'c.W#'+bKU"L.rY!.k3p !!<BD64ga/JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&ec6*_&g8nd1+t.))\<5T\c@<^ JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcOL)$j7"V,V(5f+<2+("Tc%3JcLB&c2\7T#o"L67:((mCe#TN _>o/fJcLB&h>dre%2gHC-m^&Y'at6HZ2fIVJcO!p!sKW1&A%po!.k3&!.k36!.k3j!"8r<)CRRFEJpH? <[n<r!.k3&!.k4%!"B2P01Jf47R/m\(^g?F])[E_JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcOL)%0dLl 2F'A_1+OCY#QXt8!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!8[\b"r&@C69[@a/0>N2!<KM,JcLB& bQ%_K)aY+J!.k3&!.k3&!0R>6!6,!I!t6(r3)ssVT7L#m#0Hpt!.k3&!7h,a#otcp>?b97<C/>\%h&dN "U"o/!Q"hg!.k3n!"8r9'H\ko?$2'A73D`Q!.k3&!.k4)!#,VQ-Tjsl84Z-*,Sgao#6k;6!s/M;!.k3& !6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!8[\i#8S^O91qiJ75Q;,$4-tB"9\f.!P/8_!.k3p!!<BD64ga/ JcLB&JcLB&OoU(6`W-DL$lUNR<H3qhJQ=6)aoI"nJcLB&ec6Bh(+;:>>\\J1Dd?(#0dn+Y%giI@_>o/f JcNpn$j-eM+"TfcFc1')+9][aJcLB&JcOL)'Eo'j/j2d,@V8k;4YJ0(((^iY"9Q:;JcLB&c2\7T#o"L6 7:((mCe#TN_>o/fJcLB&h>e5n&Kibl935V9>>7=9-Qa-9$4$b9\c@<^JcO!p!sKW1&A%po!.k3&!8IPV !XB,9WrS:_JcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcO@%'a50j/4!QdOI_VmHuN=^2^]RX$3L=H!.k3& !6P9M!soY`/4<cdMekg)"NCFn!.k3&!87Df":Z(i1.u,(M19PY>Y7%-*#/nf!s-.:JcLB&c2\7T#o"L6 7:((mCe#TN_>o/fJcLB&h>e8n%2U6G9kAX+IWB(,9fssJ'b:NO!P8>`!.k3p!!<BD64ga/JcLB&JcOR+ "plP=.MrQsXoOUbJcNdj$j-nV-ob4HMk>Q$.L+#qJcLB&JcO@%('G$[*]%,VUpI8'U7$^R;`cHJ%0HV3 _uPAhJcNpn$j-eM+"TfcFc1')+9][aJcLB&JcOL)('FmR'duaoOeeS7NeD=S6S9Jr#m12/^]8rdJcO'r $j-eM+>$#gFGXg(+9]O]JcLB&JcOX-('FpS(FW$tO.i#+N.PtP75#bu#m12/]E!N`JcO!p!sKW1&A%po !.k3&!8IP[(0?oO?qN9k"0_cg!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k4%!#u(G$kasnN39h(\?rK4 N,hoa/fb?,"pG,3!s&GF!.k3&!6P9M!soY`/4<cdMekg)"NCFn!.k3&!87Df!sJr>+%gaIXfA@sSr7bu 6o#u&#mUA3!s8W,!QG+k!.k3r!"8r9'Hetr??D$?7j%rO!.k3&!.k4-!#5S>#nJ.QGF>J/VP0K9F^IQo ,Sg[krWE<*!s/M?!.k3&!6bEF"WKc>])[E_JcLB&g].X$GLj^;SV0EN#-e/k!.k3j!"8r<)CRRFEJpH? <[n<r!.k3&!.k4%!!`Q/#n.tQIA6YH&#u1]I;`@_3\Da"'b1QT"3LUq!.k3n!"8r9'H\ko?$2'A73D`Q !.k3&!.k4)!!`Q."pl,1BTN(e&"/<#BNe"i/L)5N&./XF"3(=m!.k3r!"8r9'Hetr??D$?7j%rO!.k3& !.k4-!!`Q.#7285BT;q`&!i#rBNn1n/gMJR&./[G"2Y%i!.k3p!!<BD64ga/JcLB&JcOR+$Ofb)USk#b CdB6R"1%uj!.k3j!"8r<)CRRFEJpH?<[n<r!.k3&!.k4%!$)(B"UGo2E0[H-ZadQQY,.\QL3[T?8N8.> '+>!Eb5d+oJcNpn$j-eM+"TfcFc1')+9][aJcLB&JcOL)*<H<G"q`[rJ=3%*W2c\aP)4X,AQVMb/0>W; #Qt1K!.k3&!6tQQ!soYa/O`ufM/5[)"Mt.j!.k3&!8[\r!X&W1&N!aAQCFPDVP0E>LO=&Q=A(b.+;PIo "9HC?JcLB&bQ%_K)aY+J!.k3&!.k4+!"K)]Ck@tV_ju!R4t%0Q!k&)l!.k3j!"8r<)CRRFEJpH?<[n<r !.k3&!.k4%!$2.B!s9)k?%niKZ+.K[\[SoJVk9<0EEPOX*t\\X!R(Oq!.k3n!"8r9'H\ko?$2'A73D`Q !.k3&!.k4)!$2.B!s8o\95f]STW5)rWi)YaP`(-3>t6Xo((CBI!QY7m!.k3r!"8r9'Hetr??D$?7j%rO !.k3&!.k4-!$2.B!sB#]9lGiPSYiEeVPKoSP)4^.?:cms(C^KJ!Q4ti!.k3p!!<BD64ga/JcLB&JcOO* %h_0;N4.Ka]rd]J>X^=^"LnGp!.k6k!=T&?*%<pLEJpB=<\"Et!J1?(!J1@#!=&u^:NMVlYIXSG&&#N] Z)!G)=[=VZ$j6Y7!rW/J!/:LP!eLKr!Xo/<'d#"r?$2$@73DcR!eLK*!eLL)!XAuR5$iSrSuV^j%]l\- TTFG.7ku;(#Qt53rW<*#c2`_%q#Z-Lc2nCW$5F[97p^:nCe#ZQ_?,;jJc^N*g&_Kb+@':ZN16[AWt)/- U7I?i@S&C$'aY!G"9&B%!QkCo!.k3p!!<BD5nLX.JcLB&JcOO*"9p&BJ&)!E#2@(pN)Ci)\H%cmJdfX- $kO@*1I>;cL73Qq1_\"?Jdd5>Jdg'9#8T$hCk\@Z\GX)T]tCn`XeCi*Cg0Fg.O,lH%13:AdK#"%r<\&^ apAIa'c\VY8R6:hBh9ca`X.5'JdI#8ed2Qn-9bOML7,(>XV7e=Whu;FHYHSR3@c3i'b:TU"9ZpLM?*GY JdK^/$k*jl-o=S'E._jt.1a9%JdI#8JdL-;#n\LL=DrkYVQ-ZqWtVG3VP9K9H>-JS4"MKm'b:TV"9ZdH JcLB&bQ%_K(,cT5!.k3&!.k4*!!WK>2f?"`jSn9Igs3U3F[dVb!kSGq!.l31*"3o;1-S99EeBU(?9faX *.f/^*.f0Y*![`J9k/I4W4)W='YV2m\[8N9SW\\NBj+%g.NT<5"p*0QL&h/eJecEC$l0p40KMm6DLZ:m 1)\(HJe`kPJeciO#9,0V:h>*@Vu*S0XKJS!Ss"nXDdl^;3@u?g&.&I?cN&h&q%\Jrc4pa(+=Js,:1%mf B213#_A.Y;Je`kPg(ai4/3d$EI$19(WYVY9W2ckpTph'tHZ*Cq8NSOI(D$lU!QtIp!.k3p!!<E<.L`oh JcLB&JcOL)!spA^WrD&gk2tOTcGQE&=?@iE#6MU>OoU(a`[_HM2F'c0@rd-[H=TT%at&&oJh)F'dOPPW 5>5:!N2*cW^](nY]=>5RXe_MPKlL<a0-V):!<L[ML&h/pJfr2Y$mR8X3'gAICj9Mg3[VihJfoXfJfrVe #pqAh8Qg4uUopm"XVJ"@XfSY)UnO9?M19GL8Mh\1%gE%8ciAq'q'(D7c6<ZB/2B7R;I=6bAlCf=_BORU Jg,djg*-qP1-S?7FcN/oW2ckurhpI0WMZA\R#d#OE*c0q,oI3u!<LCEJcLB&bQ%_L&0D7k!.k3&!.k4) !#>YU:o!%0jQ,I_hV6c+[\o1,=$A)L"i(,$!.mAR4UaPE9N#)-Ed`agBN%4>4b>hK4b>iF4U=;B8l8rJ T<l9)^C@lf[]ucqH<ifh*"2iKe,Y4'r@`aUatF/X2EX8s<*j6Y@oPfN`\2osJhM^/eh7=b2EO/uD2Y3l Y4o%.Y-"b&TTt"<9/7_,#QXtQ!/^dP0S2"(0FT]r5"&%D?YFFj<^ej^0S2!10S2"40FKWq4@2e\M4gfG WiGutri-I,W2HD]P(%";1aEeB!<LCEJcLB&bl@nK"q2:S!k\Mb!.k3&!8.>V&OMfBioK1uk5OEHinMJQ N*[t@_#TVuJnW/;$u0a&H$k=)PadbgG\kN9JnTaLJnWSG$YjX$GCPmSZb3ub^A,GV]tLtbYbRD3CKX+` ,odR,"Tni-g&Qj-rD\AJb#AdM>@(fPDg-\cHZ*Cr``.OhJlI>$el2lT>@(cQJ<H`"XV.e:Vk/ruBimka .N9*4#Qt53!nI@/!;TZI<mF_S='T*CB5`!CKR.QJ=Me*j<e=A(<n^R^='T*ABmu/:WiDtqpo>(,WhuP\ NI5GB8NJ:@'b:TR"9S_R!0.'P!eLL$!X]#6#Rh=d.Q8Uf$,$Cl!eLK*!o3nb!sSu>.p/+ggYLi`jp9hm _lAAb-k-6q!0R>6O2d4hOHYusS"6:NWhZ2RONNW9O+NFEO4''sOHYrrS"m*l\\#PgpqINW]tCn`YGI_M K6Cj,5qX,c#R(;2gAls.rHX!?b'=DBI=Qp(MN<shOc+j=`d*/]JpDrnep.ULI=Qp)Odi/HXfV2t'!A73 Ss"nVD.$:11*[M>"p>#/f)U[.q07L9c?KbCI"-^#LlIL]O,8I7_K^ZWJp;llg3=!NI"$U!O-lW;WN)lk Wt_M4WhuMZOG8$u@T5cQ,S^Ui"9S\R!0.'P,(_#d+q#bL0fMBm>%^f$1*jRXJg,djJg0"p$7@>X3)jpd ^rb<dpuVtCgWm^8HrrER&I&<V!0R>6X2_1KXKAY/Yd(OA[Bm-AXid\rX+IC(X4"$VXKAY/YctF>[(3i_ pV6^@&A,HZYcFOgOG.C@/J8Ht"9I6WL&h1?JsjcL!LfPXSd1p`Uo'r\St!`fJsh4YJsk2X$C[KTStDXM Unk#npT5.4Xf\\,Whl>UOGA1$<BDE7#R1D5f)U[.q3HVucB\m*R@9V7SY2[NTq.[?_Noe>JsM"Sg6N/6 R@0M5S=cLKVlH\qq5aLn&ZVh-Tq%F/KR.Q<4<k@C"p>"V!0.'PDLucSD@CK,H%1L+PG"kBN.5l^DLubX DLuc_D@CK,GC5""OdW,XbM2+Rjpg>,gY0cVSVM)Z3$]+<a8hA'K"ZcLK"ZcLK"]FB#.qCPYdCsSoY1C? rk/`Q\[8Q=N+kNr&e"sFgAls.rN1[R`NB0AriH1%`3"WnJusX,d]EbUXJr%gUoLNhXT5O%XUD/)Ss=M" 1)16("9R0TM?*IPJu[%pr29arW2HSm_5`*eJuXF&f;].UWi2egS=ug[Wq`XpWrAq,Vl6VmTpq3h=#(L" #m:=Y!0.'PgOe2)gBHBfh;6uC]\A%mK%kn3g"QbPZ(6cM_qO2HjpgD4io/bMgXa'2IpO,saT.J(K"Q]J K"Q]JK"TCA#J7OU['I0O^%8uL]tM(j['$9qIp=oI%LN@?gAls.rN:aTK!'^.K!'^.d]NhWWi)\gVlHif XUM;,Ss+tE8h1G[#6Y+[!/^dPWe.7&We.7&We.8%WX,T$UnOEVVlHciWt;;0W2ceiRZN8<9e6k`#6Y+W !0.'PbC[ohbC[ohbC[pkb6Z5'XdtTV`7sAGjpC,*gXaE?H!36<a8hA'K!U'8K!U'8K!W_.rNlX9]=mjO &AGih\?i0+O+(S--k6Rg!s.-VL&h1JJu"!oJu"!oJu$ei"JqrjUoNse&$2h2UmHp`Bi$]/$3p\9!S7=/ !;W:>TRrhgTRrhgT\,q6T`_0kWiG`m&?)V,VP'30G\L&7*sr8V"9HsONWAa<JsM"SJsM"SJsP2Xrg="^ SY2adakPnLjp9r"`j(h?59^NV!0R>6WIh+$WIh+$WR%OLWiE8.[(*Z[^%B&N]t:bXWLJ]`>!jkZ#R(;3 !S[U/!<&79Q\(QUQ\(QUQd_9,R@0Y?UoLGtXR`J'Vk9<1Ea;3m,8:=b!s/MT!/^dPP_,-OP_,-OP_,.R Pl6jPQC=D=VPgGmoW&P%WMH&LKQ1<i2Brn?"9\c,df>C.ojWM^Jms=@Jms=@hI?Ip#\Rt$O/')#e(jTX #N!S)MI\X^"i^P*!.pbnSV!DaSV!EXSHkdcYI(jQ]tO'Q%)'3WWLeoa:bsF8$j6J0g&Qj-rJ6&]Jr##7 Jr##7e;+BeM2RXjUoLT!o;rP)WhGc9E`t[U*"iMZ!WiDR!/^dPL4Y/3L4Y/3L4Y04L'`WjM3=@%VlHbq oW&M$VOj'.EEb^W*YSh^!WiDN!0.'P4+]PG4+]PG4+]QL3se)77:(J=`6R,oo]?A5]oQ\g(B_VVOoU)d JqJZ-JqJZ-dXqgZLl@C[U91f8rk83Drk/lU]",>WX.bc3DG`;8((LNLf)UO*rG@.'Jo-*VJo-*Venk_3 Ecu_YNgliIXST%5Y-"e,Y,eS$UR7!iDco=U(_I)X!Rh%+!;UMaDLubXDLubXDVAt9DfKoEIZ0YfWiE"r r2]gq&ZVk/VPTrNMLKJI67`ud$3UCU!0.'P&V:UH&V:UH&V:VO&IT3f)^6e)Ei74:gYVkj%H?7"gX*sR YENZi.M;j%!0R>6>_644>_644>gcj^?u'q7Mjp`Rrk/<Gr4`rZ]XbPYY,@nYMgTGK8N%k0%giI@f)UO* rCMT4Jk:PcJk:Pcek$-B=C>icLmb'?pT5(.WMH&KMh6(a>"^n,)\<A^"9HsOM?*HFJkL\gJkL\gJkOfj #Z+W4Blo)pTrS*jr2UO1Wi)_eR?EDWFD"fP4=hKb$4$b8cN&OsJcLB&JcLB&JcOU,$3CD?)`hW0g=tKC r8nCDf#4hZG?dQj)[lhc!0R>614h9514h951=@ob3_<RoI[6q>]tM/W^D";k['6L"NI>_O:dHlc*u#+i "U!<UL&h0"JgZ-tJgZ-tJg]+s$S=D2=_WDOUo^]#Y5>=6Whc8QLj3T:9Kt9\*u5@m"p>%V!/^dP."Wk! ."Wk!."Wl$-jM@e93Q%ZP+hiQr2UL2VkKWEL3RB9:-g]b+;YOp#6Y.S!.k3&!.k3&!.k3&!8@JZ!t6_e Vqg.fir%pEgVg"F?ooG="2=i!!.k]4%Y>1B%Y>2=%L3b!6!82fUU9g2'>1iZW1&EX;*6KV(Cgi["p>#0 !S.7*!<!7V$A&V:$A&V:$J#Oj&Kii!?$_X/Y-.T&&u_CfKl:*Z/gMAJ$4$h="9S],dK#.)q$M]\JdR): JdR):g'S3"+>cYrH&nYtW2clqWtVM0S!/JC>!anh*"`Ma#6Y/3!WpXIJcLB&JcLB&JcLB&g&M?]+B58u ioK1ujp'D?KO?\Q"2+\t!.k3&!.k3&!.k4"!"&`4+?N_MP,Ge(^\thU]Xt_\X.bi2Bh^<('at8k!.k3& !.k3&!.k3&!7q2X!<s;l7q-n2Vld-$XUhM9XK&(aNIYkG4XLpU#R&9MJcLB&JcLB&JcLB&gAi5p"rApa @XF96X/MtpW2ckrV4j35Ir&1N-5R4""NCFn!.k3&!.k3&!.k4)!"oM`>cm/JhVHr?cH!_gDFc;i!k\Mr !.k3&!.k3&!.k4$!<*!=$RneiNM!Aa^V.=k\?iB<U7$shE*Z!k,8C[p"3pmu!.k3&!.k3&!.k4(!$;4C !XKl2?$M:!Wi`A*WiDkdQ]HfDBj=:k.N&d)"p<!JJcLB&JcLB&JcLB&h#JMt!WiWM5@/SkR\m*`Wi)_f RZre`GA1>W4"2'Z$3p^R!.k3&!.k3&!.k3&!8@Jc"<U'X^#[tt`3bq[@SJ^#$j=-AOoU(6JcLB&JcLB& ec6fn!<N?51L>d/X0fOS]XbDRVjiZpEFD^42CT^]$jd(>c2`FrJcLB&JcLB&JcOL)+9;NF!t$GMDiL0\ Y-"h+Un3g+G\LGZ5rC,6((LTS"9ZdHJcLB&JcLB&JcLB&h>dl`!WiH2-r+`>QD+;X&uD:kP(\'o?;X'J .j,W=#mUS8`W1SjJcLB&JcLB&JcOO*%MhTQTZcEI^nZQf3$/P3[fDQkJcLB&JcLB&JcO@%+9;KF!tmh< RBX'/]t_4eYGRY<CJ[8O-5mL,$O6h;!s-[IJcLB&JcLB&JcLB&g&N5r!WrN60jTI(UoLMuY,%YQJo+US 1++%U%13@E"9S`-aoI"nJcLB&JcLB&JcOX-$3:21!t@"lJt&I2ri-U)RZN&9=@"\j*Y]+l#R(>6!s6IB JcLB&JcLB&JcLB&g].cd22%mFgZ6PUHs/38!jr#k!.k3&!.k3&!.k4%!#P_="U>o:I&"0\\\#M]XeM,2 AO\0j'++i]!.k3&!.k3&!.k3&!87Di!WrQ/'KTlfVlHbuY,%PJJSA"@+;PFl"2Y%i!.k3&!.k3&!.k4- !#Pb>"9fK%B8r^aVPpMgR#QW1<&u3=%gW9O!.k3&!.k3&!.k3&!8IP_$r3q5_oKrnE_S.q!jhrj!.k3& !.k3&!.k4%!#PeF&/QluJ"NsJX/Vk`Ndu+S7PPqu$jQmS!.k3&!.k3&!.k3&!87Di!s]2G,"64(T:VI; ObS0t>tR%''b:TS"2Y%i!.k3&!.k3&!.k4-!#PeC$kX^SBo/@KQB[G`H#$_\3[Y^S#mCFF!.k3&!.k3& !.k3&!8IP]%7Q%tDIQR(+:eX]!0R>6!.k3&!.k3&!7h,e"V;\(6">M9WM,Z<JTGC&7Q2e<&e#$L!QG+k !.k3&!.k3&!.k4)!#PhH(*GA/D2=O;Jp;*<;FEDn+;G=k"p>"E!.k3&!.k3&!.k3&!8[\m":Q%g1fA.E P_t$9CgU.13%Q0g%1*4A!knYd!.k3&!.k3&!.k4+!!j,s@R`'n&-`3?!0R>6!.k3&!.k3&!7h,e#8\jS <H*YYToaY8;+!5i*>T4q#6b23!QG+k!.k3&!.k3&!.k4)!#PkO+>H8gDh<ppB2h,Q.N]E<%1!+?!s8S@ !.k3&!.k3&!.k3&!8[\m"VDk479jb^MKri868g>:((gu^"U"r1!PSPc!.k3&!.k3&!.k4,!!WN<0h*>q !j)Hc!.k3&!.k3&!.k4%!"]JY2G[n,K92=F?9okV&I8EO!.k3&!.k3&!.k3&!87Da#8J^P;IFBhIqMG1 )\ied!P/8_!.k3&!.k3&!.k4-!"]AO.mR'BDL-bE:,Et+%0cjA!.k3&!.k3&!.k3&!8[\Z!X98_.LW9W OoU(6JcLB&JcLB&ec66d(FhUE>%MYm>=:(^'+>'G^&W`bJcLB&JcLB&JcOL)&-WXg0Kr$*>?sfX,8:Un "9H(6JcLB&JcLB&JcLB&h>e)j&Kien8Q8r$9/\%0%g`@>[K(mZJcLB&JcLB&JcOR+!WiH,WW81^JcLB& JcLB&JcO@%%gEXh/iZ$^7n,Hf*=rVa"2+\d!.k3&!.k3&!.k4)!"T2A(*b@a1cREF+;P=j"Tu:8JcLB& JcLB&JcLB&h>e&h%2U9A0fD'R/Kbf;#mCI>!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k4%!"T2@'d"_I ,9n?L&e#!K!s6.9JcLB&JcLB&JcLB&g&M3X#S7dN)[I;u'Fb?P"9S_9!.k3&!.k3&!.k3&!8[\d":5VU *?6%;)&*Sf"U"r0[/bdYJcLB&JcLB&JcLB&OoU(6JcLB&JcLB&ec5pW"q2(V$j["7!P&2^!.k3&!.k3& !.k4)!!iZ0#Rq4L"p>#,!OVoZ!.k3&!.k3&!.k4-!!iZ0#n7=M"p>#,!O2WV!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!7h,T!X/i<$jd(>[/bdYJcLB&JcLB&JcOL)#6G#4#RCV;"0hiX!.k3&!.k3&!.k4-!!`Q. "pkS@"9Yb+JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcO@%#6=o1#RCV:!jr#[!.k3&!.k3&!.k4)!!`Q- "9o&5!s5_-JcLB&JcLB&JcLB&h>dc^"9\o5"9\e.!.k3&!.k3&!.k3&!.k36!.k3&!.k3&!.k4%!!`N+ !sA`/!Wf\/JcLB&JcLB&JcLB&g&M?Y!WrQ.!s/M.!.k3&!.k3&!.k3&!8[\\!<N?+"9S]+XT3qQJcLB& JcLB&JcLB&OoU(6JcLB&JcLB&eH#IIZiG[XJcLB&JcLB&JcOI(qZ3o$JcLB&JcLB&JcLB&h#R<QX8mhP JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6g&Moi!s8]2"pkSC$4@7N$4@4J"pG)1 !W`>M!!**%qucZro`P<u!WgRH"Tec0"pYD4#R:YB$4-n?!s8H&fDpL'JcLB&JcLB&i;iiX"p+o1"U,)8 rWic9#R:V?"p>#1rW1@G!WiE*mf`Fh!WrK*d/XIR!<N?,"UPG>#5n]."pG)2!mgq!!.k3&!.k3&!9O7] !WE-*"9\l5#7(S?r!3?."U+f,!!:OJrW*$$"6p$f!s/N*!R^rT!<N?+"9eu7#6kG4"pG,3!sA]-bQ*4p JcLB&JcLB&JcLB&JcLB&JcLr6JcOL)(BXgG$4RLY'G_N')B'J0(DIDh#6b22!Rh#R!<N?,"pP;<pBgL! !X8c/c2\L["q(nP&J>]i'GM;s%grUE!WiDT!.k3&!.k3&!.k41!#bk=!WiK/#R_(O&JGln'bqAo%h8pP "9SZ)!R^rQ!<WH."U5/9o*5*s"U,&4!sA\R!##A7!WrW6%20?c%13FN%1WdP"9QpMJcLB&JcLB&JcOp5 $N^A3"9f)?%hK<c'E/UO&J,BZ#R1D7!W`>O!!WH)!WiK-#6"i-#4Dct"U+c+!!:RK#Qb,3"pbSG%M/OM #7h4M#mUV:"3^as!.k3&!.k3&!.k3&!.k3&!.k36!.k4*!#P_?#Rh:[)'1"K-RgPq.4-;_)A<M`"TnhT !!`N,"UGDB$Olb=pC.68%LWIDc2\L]$P=3o)]^"C+<_pO)%m8[!s/MU!.k3&!.k3&!.k41!"/f/!WrT5 %MKTq*$5&$$QgB-((puZ!s&E&!Rh#R!<`Q3$4.%Ho*P:#":,8;!s?sO'*84;"UP\U+!):8&ebro(DRDb "4.%"!.k3&!.k3&!9X>!!<NB-"UbeS)&aJ8+!)FB*?#\*%LNIF"9&>O!!rZ-!WrT2#mq%ImKit#"pG// "4@/a!sJl9%MBKn)AsD3(_mYn$O?n<!<LIGJcLB&JcLB&JcLB&JcLB&JcLB&OoU(6gAi&k"q)%\*[E3h 1cIBV4?5;U/L28J$3gV7df9XS!s]/B%hK<dp_<E9!tu.N"O6u\"qMRp,pt&i/1iM0/g;,C"pG)0fDpL' JcLB&JcLB&iW'er!WiK1%MTg(,Uk<!0/,.6.3p#S&I8F>rW1IJ!s/T1$N:P+&,m(E%LijU$4$b;dJsp^ !sJi;'d5(V,Tn!C*?QIH'+"`e!.k3&!.k3&!.k46!#P_="9o)B'cePI-n-\t/1W1s*uYb%$3p_5!S%/T !<N<*"UPSLrXeN/"q1eC"U"o0df:-a"9o2D'Gql9,pjo`,97X9&.AgJ!<LIGJcLB&JcLB&JcLB&JcLB& JcLB&OoUOC$ipA1!sAc2"9S],!<M'X+9;WQ%i-9<2F9r/;d!@3@:WnW?X6]*69-\F*>Ang"U!?V#6P>K +=]$#2toK24UO;74?=u4%KZ\4!SIJP!?24O&fDuM5"\UI;,U=m='ATr5rL8<(CgTN!Wh'VJcLB&JcLB& PlM3n!<N<)"9\l2"9JT)qZ,aYrW+,E$PXX1/i#@J5t4IA:f("f:eO;G4>SK4)AEVc!s8T+g&V*Q#6PDR -8[M60_6sr0*a'X-R0H=#6EEV)Zg'D"Ul+f.5<hM9hRrA4Zkqp6U!:P)%[/[!rW/P!.k3&!.k3&!1<fk !WiH+"9Sf+!rrDq!:'V1!<NB-#7hRi-8%2>7nH<G9hnDW91M902D6?r'b1QU"9S],!S[S[!<`T4$ks^0 0C:Fn/dE[@&d\dH!s.$S*WZ?H"ptt\,:kW35t=I:7n5s34?,#A*"r_d"Tnc+dK"k!JcLB&JcLB&JcLB& JcLB&JcLr6OT>=\$3USA%1<LJ"Tnf,!!2$Y+oqcU)_*m><b-8qI"$a'M2I7ON/NUMJpVTQ;ElcT(Cp]N f`29Y"ViIN;HmUFpN-.O$?gT7Dc&A3"Tnf,g&N2q!WiH7+##uV>\SD0I=Qm#KSPA>JpM?E8MhLu#mLLe !.k3&!.k3&!0mNo!WiH,"U>;?#Qt82!!*-!!9O8+!<N<,)_jurAnG[fBl7p2F`qqPG&qY@C1UaT:,jO6 #R(;4g&MH\!WiNE1f%h!ARb7;rE]_4<),t<*")f"!$D:E"U5;R0hGheCiFK:DJX!"C27a&?;O!G,81:_ !W`>S!.k3&!.k3&!1Els!<NB-"pY><"pG)2!<MoplMr13"U>JN+YcAe?=dnmEcH)?EH#o:ChR?d=\V+9 ,o[L)!sA]-gAhH["ptq\-94g"?N=F%?N=787PZ"q$4$e:!SIGp!X9&G)(%=7?"7M_DfBT4E,99$@Tc8` .3'$1"Te]*df=t"JcLB&JcLB&jo?"q!s]2D&JZ*!(`=2.'G1f]"9HXF!s8Z/"n2]s"TeT&b5_tQ"UbnT &J5Qb%h9'U"3(=m!.k3&!0R>E!<*!,!s]2G(DIAg#R(>4!!2'Z,67fL(bS0N>]#(\S=cIMVPpJpWiW>) YdCjIXGU[a1F*bE!SRM[!<EEK5[%c@JWKPtqO\1kZ+%6II8ML$"Tnf,gAi>s!WrTF2+q"]FG6*RTV80X W2Qc&[^`Z=GZ-@5&./RAh#N$,JcLB&JcM):$ipD3"9f&=%MB3V"9SQ'r;c!\,ln&K!spMXJ#K*4QB%#f P*VB"QC4,+Q^*o-T:h?\6R<0J"p4n]!"/f/!Wrc[;L>.-Q]grureh&@O,f'B9e6hVfDm#p"9o2F0N*.g T:VI;P`h,fNf]EgP`CB@AO7[P!!*-%fDpL'JcLB&JcM5>%KQY9#n.4L$k!=E"9JT)p]0U[#Qb5A'd5M6 Efp?a(mU>LQ'.;lOH5E[L4t"h=\1\.+:nb\!s@9X$3LPG)(%RPG`[oBmth$o$!otF&.]*P!s&GV!$D=M 'HSbj>BQ$kOckiiOcbfgNJiR=A5PK?+;>.`!W`>O!.k3&!.k3&!.k47!!rcI-oXLh;c[(-ra#q>?!1-( 7PZ2'#Q`3N":R"E4[AL'"?Rb9!W^IF#mMP,4\8[V=&i2u;?Tia-PH^*!.k3&!.k36!0I6k!<E6(#n\%! *>]:q#R(;1!TF(h!<EEL5>"OI@t:kn\[oBM]FV`l^s)'?s8Bs(C.:!&&-:Mc$3://#qf%]>@r/FpUU.2 %*J>Es7NU73Xl;t!s.0W$ipA2"UHJG<)Qq:Lp-fg!5&3C%+FeGrTUJ-73<9T"p*N[JcLB&JcLB&Q2h<o !X&Z3$P=-m'+5!GrW2rtk5Z"n!WrQ95BaL*lJ0@[X0&H"Xq._=Y.<6Sp[+km3"lc-"9I9X$NU;2!t@>1 VrZLQ](;s$WX-&agXNrZ4r==Q!"8o4$4n%AF/e<_e\\QiXUqM6XKSh:b07o*BfQh,!!*,Q!.k3&!.k3& !1Elk!X&c<&J>!R"UbS=!s&Gt!:'Uq!t#_`02Qtqr9)G:X/i5$ql1.(VP]]+B3Ike.i8Nr"9[BY$NpnT +uEANW7f5#Xmi4gQ3hD'/dW!u#Qt//g&MK_%NR)`?%T$;fu12pW=Z,/W2?GVF^@Nl.NJp!!<N;O!.k3& !.k3&!.k48!!iZS=*Bn<aN2L"b6c>4aLddX:b)qTci=4T4c#W2^$rrC[:_'!!6tQK"tjbKUUnPGaU6,0 a2l?.F$guT!QkCo!.k3&!0R>F!"T)5"q(t]-oOFU1bL*q'FOmBirBGf!<NNT7SHZaHBu;<^C\?5l2(GE \r^W#2&ur+!s/M\!"/f.!XUPZ>%)W3UV?N<qS*'Nrr2p&_L"NY#R(;2g].``"q21f5ZLonFbua%q7csN mJd+mcC&9./ftW,!W`>[!.k3&!.k3&!1!To!XB5N*?lse2_,jZ"pFo,rW)*]$NU;2";++Ta8,8W]_&<7 ZGP8Zps"e%0d7;<!r`5X!"/f/!sB-#Hb8_!`jYK@riHI2iTT:OK16a[gAh`b!WiN8)^dRSNl(5<aLJGL XUMJ\io&1C="=^d"Te_X!.k3&!.k3&!1a)o!<N<*%N-Pk/dX'Z+;PFk"U"o.q>fg]$j7"U,;i_``rGMG WiG`m%\oA=>uO?X//]$,"Te]*h>dre%N-QQ@#_n`a0MVCnZ)Y`$#3@!&e5BX"Te_]!"]/4"9f&L/4!He T>g*;Z_seuWsbYRA6;A^.Mi<m!s@$QJcLB&JcLB&JcP$8"q!M8QFPK,p#ZJ9bHmXO,mr!!"qXY%[E@7c n`Bu0Q:r.scN"1O*`e]9akGhOjosMBGY0(aaoI"nJcLB&OoUXF%g!(O*@EmC@Wla'>>RL5(B=X!!"/f. !XL8J:K1kVRD/@/&AlWEl2L>&[$Pc.0bt<-"TdK\$NU80#qf"S>&]7h^A,J>^B)@Rrr35?HU&)I"Tne\ !"8r@+#-&^?sn26Q)_Il^C\?=qZ$TU]p*D42]i8.!s/M^!.k3&!.k3&!1!Tr!tZY57SHcc@o,36'+>*K !r`2_!"/f/"9fE-JA_*HdCStP&?r^ef^RY!L1EY#&ci%8!<M*Y$NU;2":meI^@U7)\FZj%XU)2jki1-F 7N)<_!"]/4!sAlM2,@tAV9.B4]sOs<XUMDMfAbJbI9&0K'*eQk!.k3&!.k3&!1j0)!<NB-$Q_)tARf.S =[k.g%giLD!r;o_!"8u?)'h1JNQ(qV]r7t(Wt2%rP'p_D;+*5f(CL<H!Wh0Y$j7%X,ro=l_=Gs\VlK9f !20^6;E>F#%LE:?!T!ef!X/i=(Fqp`JXWmi`jMhDWVNS(Um-"3>tI""%13=C!WgjPJcLB&JcLB&QN.'g "Te&lkl:nr6\1rGfB)\f#iX@QZ].L$$j"cV"qOCkY/f8Xn`Bu0Q:r.sci==R(d`VZa4/r+q;qn;_jtsB *!XRdJcLB&JcLr6OoQ!p&Kibi:h>-IURdEo@6u7?#ibmm!<E6./P]8ID2+UqotM'S`QZimpZpPSRVbM? )\E>WhZ+#b!<NNX9N"o*Kq#gO^\Y\G`r>u;#JtgQ%gW=@!SdY`"WK<j;dEmMNgZiQ]_T;R_Tgs,rqPEm X*[_t%1!+>!T=$1!.k3&!.k3:!"]8P2H4U<I"RB%?pl@Z%L3+8!9X=i!<WH.&k.8do]"*)oW8\.Zb"$& jj:W4Cd8sB!W`?'huF,c!WrQ:6@coFk0:I.Xo>F.Z/Op+eUp=0!SdYd!<WH/%kgk.T<Q)W_Rd.[Y5,1- Y-c*mgrQOOAjRdPfDpL'JcLB&JcMAB'EJ=@#SSplIAs!3OF_":0Gk9,"U"T$lMq=s%N6]U@?8A$e@;HW orAV%TUM4$DIcg?3[YOC!WiD[!"8u?)'q:MNPkVH\YuOuWrSh"C/R)*%LrdK!Wh-X&-E.K(aM@SKrV]% bHIkAVQ0Hm%]>q^JSna].h`IY)/f)UC&JcLB&JcM5>"pPY]/j(!Tn,V\Q"qF:eX2N]Qp#ZSAh:0WW H;H71"4I5S%7c8Q_q=)@jojJ*9GmlY!!rr\8p$oUfA5EIq;qq?e\S><58FCG!.k3&!.k36!0R<m"W&aQ 6rdiL[FWdEYD6@<!"@lf$NU80#r#7Z@<IF%^@f5P^qmq,aPZgkqSA5!2's4N!oEtc!<E6-.S3E8@tC&^ pqQ[?!QP-<rs-Df5S",(!s.9Z%flY3#U`,A;-\!rYdCpP^A5MT^r+.5g].<Pl`4qf'+>*K!T=$1!.k3& !.k3:!"];^:3E5*W26MhLh/k"(CL?E!9X=i!<WK0'1I;_mb5[hoW8S*YHbC@cK=QYS6RKG!r`5Y!"/f/ !sB0&J].9Kd^o%PriHI2iTT:OK16a[g].id!sT#F5]Wj`iRu/TZ*1>)XUD>:ZGYSQbcY\@'EQkeJcLB& JcLB&ScBH+"UGPV7<uBBpZfr!HX&fX'FkBNq>fg]$j@.\-p;+&^urhFVlKEj&#uP'Tq.-_B3\(f)$C$C !oEtd":c:q3F@cbs5UhlWq!+iTa>I33YDo4#mCA2h>e)i%2^6F<dq+7j3P-0VPpJopo=n%US*fc;DJn# &dnjF!<LgQJcLB&JcLB&RfE^"+[9FpZ!/=SnGqeR"qXY%[*%.bp#ZVCj5AeH]U!P1('2nb"q3hKT>&q= n`Bu0Q:r.sdJsUX/o-?Gb2D7=jQ64"#isn!fY__d%0=]RJcLB&JcLr6P5l-p"roHb7T=#V]^Y@E`0k6u !"S#h%06J2#qf(]>\JJQ^VIV`\ehf^ZECC5W3!G<]tqhCkks57F@S/3&d."k'EJ49#Ur8;;IFp?^;.V0 d*0MF]!qgO\@2@G%*7f2q<Y+s3"-#q!s.<[*WZ<F"V3Ig=($0-Tt\=[bLFeV^pp_RX/;i$\@]`Prr35I MGPN6&-i6p!.k3&!.k3&!1!Tr#;BMI`5os4Xgt0R;)0.#!r`2_!"/f0"U,K&FKXl^agqDN)QB[6Vl6Mj Vl6Z!XK8S.\&[+e\T'M6"U"i-huF,c!WrQ:6\38On'nuKXTYi3Xf/8uW<&osri-7.b1"PBD*&O7g]/Z& "q2.i;i&E]g;^V(Y-5+:YcFe$Uo12kY,n\,YhA7%g5ScH!<E*"h#N$,JcLB&JcMAB'ESIG&Kjr/g&M*J aK(&+6R!?Y#m:#(lMq:r%N6]U?%f<9a0V`DU].)+WMuu'Y-PF>XJr.rS!8D2=$Rr4"9S]+huFGo%N-QQ ?]N2,l+s@!W2HJaStr-Xrh][prMBRZ$#<0_#S.@M"9AP[!%8!a,;i,6RE4X7ZDX_#V5'TPTqeTjYHtaF Y,\IrG?RQl+<1ps"U"kY!.k3&!.k3&!1X#q!>RV&Oi6=@2[f-Ukl;_26]RhC\@AuQZELI9ZF%6]ajJ\n h;[JI`jM$`"k3M^$U8s,]@Q*#g<@CE\@/^BYlM*.Zim./-O9_#!#ueSS$^>ljke_;_nN[iYdVBhd+6t. in^G@0b"30!.k3&!.k36!0[Bo!<sQ&5XeR]L:m!Ag;91f2ujEJ!<*!F#U`5PATrs"Xf/(gR[BG)Ocb`b LPV4h\A?22g?mh+M-WS'(^&Xq'EJ49#Ur8;;IFp?^<G-XdDNDkR[4)BQ^Rf@%%O5sXJL&4.1$.[!Wh3Z *WZEO%imu>??q<kXM2m2hV-/aW10!5M1C)9S[HDrrr35SSnU>>*=i51!.k3&!.k3&!1<id!>#MoBVF/6 e]"Z$U4#oq*Xr2M!9X>2!<N?,%Q.^X^p9f)N/<4?IsuluJqf8LS>E0_XKT"FakXLU72?:;"9IE\)$'d@ ";!qO`qSrO]</B>UmR7%Kn=l.K7nsXKa<EdK7.]0.1ZI7!%A$[)(.LVO2BPl]sOoHZa$?rOG/+6Lm+C. WiE,(b2_[DSQmZL!s8T+h#N$,JcLB&JcMAB'ESLK'-g>3ec5[>`2eW'6Qm6W#Qso'lMr@:%2U0C9l5c\ P)FsCJ:E#tK8,5AQ_^q)bf.8qW1KE?H='2j#R1A5!T3qp":c:q3F@fes67A!WhYl:I=-NsKS+r2K)L<% GR7S=,7G"f"p4l,h>eu0*Ap]4OKd*O[Ap+(UQ^@VG^Y4!O/'/0h9Ng:V2Jqg9fjsH#mLM7!SII)!.k3& !.k3@!!r]G6"ub-jGl/,nGqeR*<I<`;c$"L4#SfF0/5:A6<%`ORBk&ljP8,#X?I$A!"oZ(HCMOtjijHB ;+<i41bpjC2>oE9/f4fo!7Log""8#qa4/u-c`):q911fr3DX::Qa+]hhn+eP1C_V0JcLB&JcLr6PQ29r !X9Z)5X\L[M7i6Af>!MY2?43G!%.dJ#9Z03Bl\NNLOXMdAn5C\@V9LtEclqpXMDcpbhD3uTQXF!*sCI$ 'EJ49#Ur8;;IFp?^=C`T\YYL=CLmNYBDZBMC1q3f7kY_`!s/M\!%@sT&K32n?tkReV6mthgssHLQ[`^\ CMdg%G`&K;dcg]1hm%c85q<]Qi;eH0JcLB&JcM2=rW*Q;4*.dqki'I_\Y=OO1`m/.rW)*].00JP":H\T GFa_BDdcjM;+s\\;H-q=HARu\Vl[&,[CXGmL/]H9%L*!m!#Ye=!sB0&J]@HQe@VieTo=#'?!(!&;c?[r r`'5':J4/A.iAWog]/c,(+;:EFI'VX]=+uH[&fdOEF`0G<+U60S#!*dYI`$<jf32[&IJ^F!Sma-!.k3& !.k3B!#,J?%i$BdMUMP)las0OA3qFT%gW:6!:'V6!soS[.6U^KHuN_*=B8C":K1G'@r[6o\'*(<Z`9dk RZ_A\/dhmg!s7B\'*Jd_,ro=ma8bD?WN)A@E*ZRL=T2A%<r?#!;?oB8(^^NQ!s76X.1%=lE1!uRfrh<P VQ-#9CKOV==]f<iU;u9QdBf^>L2(0r5U?dD"9S\X!.k3&!.k3&!1X#q"!L9VT$-5U2[]'TkPuS.,T7=( "U"l-!<<-$!XBDe5@&oEe`G]CeAP/se,Tpc5C/g2f&a/O2&$E&"SVur!7Loh&O)#rf%f6G\8XPK%g`@> ":l_>>(E^(iQnotCaB82!.k3&!.k36!0dHq!<EBI3C-)3ArF=gl.*G.?o7omiW(>,!<sDp8R>\+=]J'[ 2Cp:*-RUW8:fh+IKqZ8t_SjR\e$bBS7O//p!#,G7!XL5F9N#8HR(h+p[[MVS9/7su.kWLQ0F'6`/1MbW $Ng;.hZ,).%2gKO;J1<WZF@H\gt9TIMJ>g=/NcU#=_`>T^r4@Dj5\"IFB(@C"Q9?4!.k3&!.k3=!##A6 !Xq>D_true_lgSGIT/0I%Kl\1k5Zq3!WiH/+['+VB2h5Q.O,uP)BL"H1ItkoL6\L3Xfnt7[_%`83$]4F !oO%r!<N?+&4;#gp[?VDXfIM"7PueF+WqmP,UE=6#9k64*"r\`!SdZ(#9Gj%CPA@f['Hp=Xg+OL>t-[u )'qLNF,QH_WiiS4]Z[I+9ck#V"TmK[JcLB&JcLB&ScBH+#S7h$;2*6os5C>bKk!Fl'b:NOq>fg].09_b (*G4n;-m'd2C^+#+WV^R/Mfn,K;QH-cFp9WV5'W(<&"gg#6P%c!#PhK)'q:MNlV1a_5XGuG??jX/Li.o -71,=-3,:q)A*;Z"9J\[!%A=3?^Aackh;o1W2ZhZE)\_K/Li//?AGo=iS_MOUS"!5D,;hn#mUP6f`6U( JcLB&JcM;@#m;SOGGNIEN].=8!9aCa!<rVt!"B&F0NjI\k2bLYen,s)eGom`5C/g2f&`2^&+9MJ!"9&V =/4X1j5f?m7MPt$!"8rB/QIhRjkeY7\4dL\!.k3&!.k36!0dHq!<E?F3'g#0?\#`EfZ(%H=>0^_i;b2* "VW+=83o<q1++(U#mU\>"V)S+5>c'>PIJ'6^;9'j`MRoV.0eZ0'EJ49#Ur8;;IFp?^=L5uI9o;j&.&:C q@!N8$47"A!o!]*"VW+95?;NW^VRk-al1IHLh9+($OR[t2Fq1pMR9k(]YWUT[ZYGt,mFANirFZ2JcLB& JcM2='*/+8$p]3Up[m[oZ*0I8:,![t"9&;_!%7jL!X0Ak6s2o6,81Ij"Te`-"pl"q6X4VfSZf9$Y-"k; S8q(N)@HZ*!#Ye=!sB0&J]@HQe@Vi^JQ=*5%LE=C"pYD>r!3H4#m^\;"5El+!=:,EBSi4WYH=q0Y->'g A3(qL#m(DX5$N/fTsM#.YHG%4NF=Uc&I8Ho!.k3&!.k3&!1j0)!XK>S-;/Wls7tZaW.AA@*>/bc"8W#` !%@sR$5"*u/N,mK,o@*u#R(>8$P=1(7:qL]^<+3iW2ZepI98<:$O?n;huFPr%N-QQ?]N2,l+s@!N+k^# '+kZ\#mq%:#m(>8"8r;X!%\-P!YIP8[.4"je#TFEUnWEK5T(.G$k"%=B:?Zag<6@lWN)kG>;m'##Qt4^ !.k3&!.k3&!1X#q![:3PPe>Lf/-k\Ff)Q3\&iajDj5]4^hf^:JeGom`5C/g2f&_B/!q-->!"8rC3,lFj iniJCE[:ka!"8o?2/Tn_j5f=ZE$,5/!.k3&!.k36!0[Bo!<a,f4[W1^L9.hcS:tNB,le80!$q^U)'psg .OQG\'Fb9N"U"r8'I#.t?Z'qJSZK<:l/'CVGu#jnhZ+>k!<NNU7ncfgI@.au^RfOK4s^XA!<rf*#mCS> "pG)1gAif0))"*B=DNr4c/e^#j1:=`8i%Lp#SA(*4]c61MO(*G_<p:,Y_#q1$3C80!Ta<5!.k3&!.k3= !##A7!=CMcNP2d(W1Ale;_oR2$3U8-jo>hk!WiK9+"f]2,8^jr#6"Z?"9\l=+##u`H()O`\?rKC\X[\0 /K,!!huFVq!WrQ:6\38On'ntOUju>e'+G3N"9\l4#5\T-"U,#3!o<o.!<N<30irq(Z+.3DZFn0"ST.:L ((CEK"W/aT>C2p[`OrXaYIgKT:bj"!!o3j.!.k3&!.k3B!#,J=$5"7:=bElSS<K%Q;`,@$$3^M-!:'V6 !X/f;&JuN8.j5`A#RCS;!sJo<&03W)D2Y7&afMG<W2G&G1_0s""TmT^(Bb3c,ro=ma8bD?WN(qj5o1"> #m^b@#5\W,"Tnl+!WW8Y!%e6T"pc/9HbK@Wou=&+PCdph:bi^o$OR+S0MleTY/A_mWi)_kIp=uK%grUD f`6U(JcLB&JcM8?#6uD/86KOY%.F8J!"/iK;4u@jhW*L:,m2Zt#n&tDS%I85I3J^\!7_&W%4P/0_rT@Z RX-k$pAbR&)GHLAe_K-@H7K3H!.k3&!.k36!0R<m!tH;%4&04/P)Y$2?V*!l!!_?]$j$YD(*+>3(DRMj #R().'F#!]*AUK%@=!ctYefS\`MRoV.0eZ0'EJ49#Ur8;;IFp?^=0`_D,E>;$O$/,!sA]-!Sm`/!<EHK 4%2bDC6??ir;ZcKVfP9\+VP%`$P=4+8m5A6Jrm(Mo^q1fRV"Mi"Tnf,jT'l4JcLB&JcM2='*/+8"s6'9 IXcfrIV;S;+VY=h"9&;_!%7jK!Wr`B*$cL=%L<7A!s&H*"9]&F*%4$dQ-%Y!]<\TMS8q(N)@HZ*!#5M9 !sB0&J]@HQe@Vi[I8:pr$O6b9r<2lu!<WD\!%e3Q!Ws#qBq*5fah4dfaht`D=>L^##Qt23%2pTYC7<T2 dD3,k`j_=U7jnoMh#N$,JcLB&JcMAB'ESCB#neLH=a"n-EGnrD-4^Cf!s8<!lMr@7!sJo:%M0?m'+P?Q "9\f.!sJl8'dl(?D2kXF`3ZG>VgVZ(%grXH!oO%o":c:q3F@fes67A!Wet@M&dSaH"9eu*"98T(!s/N* !T*l0!s]8J,u965s8;5qWKqgF=\V")%1!1B"V2h;;/M>sh:B9@VPnrJ3Z&SB#m14^!.k3&!.k3&!1Ell !soJS*XDf9!7_&V#W7+Aak#D-FsR7@!!s#tHCMOtj`hjJmf:o=$j.M;D4Sr3^5#cF&cq\+$3r8)WkZs< i.j2uciAXtJcLB&OoUXF%g!"I(EkS(=DVGG7m/II&HDsl!!E<)"pk_;$3UY>"Tni)!>GV>#n7qA<`NOM MP\/RhSl@;:FQM*!#,G7!XL5F9N#8HR(h"ZP%@6B*XDfI!r)ls!ri;W!&"?R$7J879j)J'_=[d,p<&J! -l3F#!s/W3$5km":/tn[T>LI)r9L\55naG+!s.K`JcLB&JcLB&QN.Tu";2k77S6HU>":@k%LE:@!r`2\ !"/f/":#8C$OHt=!s8H&rW3c:#7M.k=c^qug;UM'\X[\0/K,!!huFMn!WrQ:6\38On'ntOV0krV%LE:A !Wr?'q?-]u!!1sW/HGnT";O@O\a&;0\uiri[@_%q+://P!s/Q-#nJ=cPh#Klc+'q&cFTKQ2&-/J!.k3& !.k3&!1j0)!<N?,#T"dG8kViN90"=6#m:>3!r;o_!%@pM!WrT0#7(VA"p=u0!s/K)!s8Z6)CRUCGG!=J afq\@I98<:$O?n;huFDn%N-QQ?]N2,l+s@!M./FQ"U"u&!rrH&!ri;X!&"H^&fWN-Mp24ud]f[)Cf<8J -5Qmj"9S]2'dYY0Eh1q_hRTP^HsSlO(_[8Z!<LpTJcLB&JcLB&Q2gmcmJtc;$3;5XS$^Dphf^:JeGoj_ 5C/g2f&_&pmJtf<$OJY#M6k^kV->;T!qZI")Gu0`_qO%564s=H!.k3&!.k36!8RY@!TsIQ!VQL(!<WK2 $lUHK6p*1Q+W(ar!!:FG'*/+8%51=J<+LWP_<KgqVKu#e#2]Cp!<E6-.7['0@""EVd'o$B7PG_b!7(Wk !<E620M>,?Aqckoqu?BN[sLFP!s/N)!!!$$$R\2.8lg"u_=mm.#K_]n)%$QM!Ta<5!.k3&!.k42!:'[J !<*#n!r`5n!"]29%20['-SRJ.*=i8T!WrN'!7Ci]!<E6''MOD3p?U&7Y.:'C7P,Md"5j.n!<N?+&4;#g p[?VDXepG:(^gQO!rN&J!#,G9"9fZ>N7.Fac+'pq]:X@?,n:"P!"TW3M:2:ngUs]<h:0Ah66"\[JcLB& JcLB&k5aiLjoGA]pB(<poDfC($5=R1.4HVl*>/\^!W`>t!7h,a"V)Cr4(=E&s5CSgVgVZ(%grXH!oO%m ":c:q3F@fes67A!WeXq<#m(21!VcZI!#5YI)'h:RPgTHd\Yl?R?T]8J'at3GrW!`;$54@5=H(c0qTGq< H<iu`*#B%f!W`>W!.k3&!.k3&!.k4#!!s30J>'g4hf^:JeGoj_5C/g2f&^oimJtf<$56-eUr1pEN&hFL o)K+(1h)<JeDm9&*X'jjJcLB&JcLr6i;`u]!<N<)rWN3(q?6a#"p>&2!WiB'li7_#!s8]3#mgtJ$jm=L $3pb=!s/K(q#Cp+!X/c9'H\e^0..k\'+G-G!mUcZ!<E6201nr<A:pGhleog_Hr2?thZ+>k!<NNU7ncfg I@.aq[uOfb0H(,qcN#6m!Ws&q<`is]NiKqioARl^B/g;%!W`<%!!**++#lPU;e;!*mJd+jdZ%*H&.8XC jT'l4JcLB&JcOm4!W`?)mfWjt"9S`-!W`>g!!NB*"9f#8rWi]5#m^b>"9eZ)p](^("UYhW)B^=V+;YFh rW3'#rW(@H'EJ49!Ye=cdIunP\?<B3E^hSu$No;e'EJ7;";!qO`qSrO]<.rU8/;O:"9SK$e,U0a"U5>W ;i/Z]f#"er]VU*Z1`Zu+q#D!95'*j`hqGoLdH0<=OA6l!!T!g.!.k3&!.k48!!NB)!sA`1nc\po!WiB' mJmh"!<N<*"U,/<#m^hD#R:P;"TAK)!W`>s!"T,:&/ZQ5+WhgD%gN1<!Wi)sec6Bf%N-QS@[#:@iOc%d I9AE<$j["<huFGo%N-QQ?]N2,l+s@!LL;nD!WrK)p]/qH'F#3n01TrLcJHIAVPo&P4;o"I#mC2,(BXpQ 'IQV)^An#k\#=j`9JI\1&-`4<!Sd[,!.k3&!.k3&!7UuT&5.PI_:d^h-3Mcu#R`kCS%I85EZ+9Fec6!q @ALK\h;Ef;#k@s'!Zj^HT?ZE"Aha_rdK"k!JcLB&OoXG@$NU;2"9eu7#mq"G$2b&:#mgqG#m^_>"Tnf, li7_#":,AF&JGlr(Ddi&&e>EX"pG&/q#Cp+!X/c6%i6?9,9@[9%giI?!mUcZ!<E6201nr<A:pGhm,?'e Io@j%hZ+>k!<NNU7ncfgI@.aq[uF`a0H(,qci=j_!WrQ>6""8VN1I8jlJTa`J6"9/!W`?"!!rlJ00;R$ AW4Ifrr35UPZT:K%gN0t!.k3&!.k3&!9F1b!<WK/#R:V6#lY&.#Q4o7#6tG:"9S`-!WhWf'ESCB$P!^Z &J>Ze&.]*R#6Y,1!Wi)s$j$S<%20En)BTe,#mC5/!!3'!dJss^!<N<:9T%6kld*)D\XRV.//\fthuFGl !WrQ:6\38On'ntOUj5HF#mCG5quG4H'E\OJ&LUY7^X'g-ZECNtBg!^T#m0o&&IU@#N4$C;\us?DlK4mH -3=2H!T=$1!.k3&!.k48!!33("TAW,"pau/qZd</!s/Q+!<MWh'*/.:"9o2B&/#Wi&ebcc$jm7D"TAH& !VcWs!X/uFr>,\V&dnmG!WiDu!7h,a"V)Cr4(=E&s5CSgVgV]*&.AjK!oO%m":c:q3F@fes67A!Wek%; #m182!VcZI!#,VR-p(CTTuFXHW26DB?9/i6%0m"6!#G\?#Rqe@EinWnkJF0Q>>@=.*tnh\!Wh'VJcLB& JcLB&JcO:##nTa[Tu#F>Fs[=A!!irsHCMOtj`).*!7q2X!@<!,cIq.5FsmL`!"'/b;M`<P[s:Le"O[:% !.k3&!0R?@!"&`/"U55>$OmUV%JgJ?%1WjW$k!@G"Tnel!#,J>$ka<o+=&<],pXZU)&!Mg"p=u&!"T)3 !sJl:&/6$!'+k]]"p4i+c2\LY!<N]`8ki8qK:TjGj3+TU<%J72!#,G7!XL5F9N#8HR(gqVNF#%,)?p2g !#,G7!sKQ6CO2JHZFIa.bcQ\36R2m8!W2p3"VW(75#l?V_;>1ks59AR0-(`7"6BN7!.k3&!.k44!!r]0 "pk\G$OR7Kr<WQ5$OdIC$O7"E"p>&2!s7fh'E\OJ&fDQ*)]Th9(`*hq#R(;4!Wi)s$NUA8$P*d\',1ub #Q=i*!WE)I!#,G7!Wj'0MUD.`ca^-fRrLhH)%$K(!#,G8!sB0&J]@HQe@ViYGXW>Q"p>#*!7Uu_":5VW 03Ek3\[JfIY,R(S-5[0r!r2g1#q&;]Nh<AWYK?,$n@E9_!WW3$!T=$1!.k3&!.k48!"&c1"pt_F#m^bA #lP&8$47(F#R:P;"9&B%!Up(+!<WK0#nIai*ZcCF*?#\,%h&^I"9S],!Vl]u!X&c;&,m+F&e,*M!s/N) q#JtG'Ensa,s,S"e,SC=W2G)I2%^9("TmT^'Eem`,ro=ma8bD?WN(e_1C4-b!Wi&rfDlTk)DOWiLoJ4h Vkp>iJm1,D$3p\8r;[W7!X&ZA3+ec.h;lhZNa5@G/0kr8!s8V[!.k3&!.k3&!.k4#!!s30J>'g4hf^=K eGoj_5C/g2f&^lgmJti=$3MrAf\GEFheX;6nGimt'0'p?jM6jd4:0F9JcLB&JcLr6i;a8e!s],@%1j-d 'GD)lr=KDM',2,o&J#<X"p>"o!#,PC&JuT:.k`_81,:O4+WD++$3^J+!"T)3!WrT2#n%1N$OR.D"9JQ( c2\LY!<N]`8ki8qK:TjIjit&_<\4O5!#,G7!XL5F9N#8HR(gqVNF#(.)[6;h!!iT-"9fcAGF6,D^Bh[) \WLJt1E$Dl!#,MD(aLt<DMu?_oDejSU1Q>0(_$T/!.k3&!.k3&!9F2#!X/i<&.]<`&J,H_%1NgZ&J5Qc &If*S"U"r1!pfn$!sfGU+sSB].OQMd+W;"b54!r2g!!<WK2$iUJ=#m^b="9S`-!WE)I!#,G7!Wj'0 MUD.`ca^-fRrLhG(^^B'!#,G8!sB0&J]@HQe@ViYGsi;N"Tni(!7UuR"Ul1j2Ht^)rN-@.U3/g;$jQn9 q#D*6*B$Z-JX37<`o?Xac?(fD!!!$#i;eH0JcLB&JcP$8#m(8;%1s*]%1E[E%0-n;%gNRR$k*II!sAN( !!2Qh(]jgE#RqLf,V(Ap.k)_c)\itn#Qk/1!Wi)s"p"f0#6tM?rWrT0"9&?%!Vl`H!#,SH)'q@RPLKQj ];VWV=Z$d$$3gRi!#,PG)'q:MNlV1a_5XGk?8;cg!s/Mu!8%8W$6M6+DjI]EWrB%)Vgqu)#6b54!Vl^/ $SP_E][,Q`W0V0m6o-8.#6P#/g]2p+JcLB&JcLB&e,Tdd97W_Pg#$s""4[AW$U8s,]@Q(`([_:T!!<Ec T&ot6!o7<"mf3[t,$:o,a/48g%ft,ZJcLB&JcLr6i;a2f%2gHG2*4)n7R[)?&k#/W6pj1&3\r?6+;tn& "pG)1q>_Q;!<`]@(a:Om78[#e?=RDO?sd&7911iq-QX'8#Qt#*%flhA&/ZQ?1d=&Z0J"Ca$igC[!<*!8 !WrN.$4dju7TWW"H&JW;khEqIG"sIjhZ+>k!<NNU7ncfgI@.b%a/Xf*:Gj1,#8%LX%13:A!r`5T!#,J: "pc>LGaZ@ca3<5hZ%Q7H/JeNb!#,MB'-8i,Di;EWk5#&@W,FpP*Y8J9!.k3&!.k3&!9aCl!<E6*'-T(o 4$#A]2`L^n(,n343B9&Y2_m*>-m0EC&.8aG!s/K)qu@i?!WiH0&fW2O2EX>t92&,X:/";P6Td1Y,o[F' "U"r0r;[B2$l1$>/hf"7-lj$1#R(;3rW(RN)?Bj?!sA`3$kaC0?^&n)fYk2#Z]eu],SULdhuFVq!WrQ: 6\38On'ntOXG:%6*uYh)%1<IJ#6Fu0!S7;c"V2Is4(!Q1Y-PIHaKBSH$jQq<!Vl^-"rJs[>]u1)Y.iHN p!%\="p4c)i;eH0JcLB&JcP0<$3C>6#7VFm/iGXGrA4R52)bCl&N2O(0eOq(,9.F/#mUV:!W`?!!&Xf\ #7(eT+"B$-6VLBV;,L4d845['1bU:#'b(?M!s/K'!<N<*%N-WN1G^jD-Q<R$!sA],q>f@P*!$'A!X&W1 #7qt36<\o:f&aoTVPeoI2A$<'"TmT^*<Zii,ro=ma8bD?WN(ki72usR%hB'T#R1D7!s/JT!#,eb4'6`t [`#2@SXP^X:FHJO"9JW"!#,bk;1>L]d*Se\JR2#=2]i;-!s/MZ!.k3&!.k3&!.k4$!"&fSAtHKVh;<5t !n@8W$U8s,]@Q(r.Kf,>f)Q*_4JLrpgXO/6%.=0'!?"\0jj:K-HQN@=!.k3&!.k36!9*tf!='Mr7p'27 FFAOaH@#R9!dK$;rd53%H$FFG?rT]W.NB!-#6Xi'rW*E6(+2+5<b$3#Jq])@rJ_2BL4Oeo@8K3E,81:[ !"T/='d>:r;IaolC0jk*/JeBkec>[M(]jdC"q24h.mR3J@Xj6&ZGGMH[#o,n,mE0+'EJ49#Ur8;;IFp? ^>I\cXc[X(3@tRf-6aHG%gN1<!Wh$U'ESFE%4"r"QbgbnjS@T2G=sk@'*J%1'ESON(+N4%Nki`fkk*u= GY0b9'F!RuJcLB&JcLB&kl;=s!<N<1,!TCUE,TK)B4kdeAnLpR$Y<jY?s-/f1FF.U$2t#,!W2p?!WrT0 &h$"MCi+*0EH62EGBJ(OEc>i,@8]6;(CUQQ"8r32";NCO='Am;@T#EB)A*;\!r`2Q!#kq>!WrT1#nS%( 2,81]bgXSCZEC<d>qd92#6Nf`)$'d@";!qO`qSrO]</9*GZ$db/LVe_(_[A\#R(=^!#,PI*%=-_K:f?U `7*t[E&@k'!s&K!!#,SN-9+e;Ln_&\`n07kH9DW<!s&G]!.k3&!.k3&!:9b3!XB,H*%jNZB4kde@q9+] AS,OeB4badA7K"Q>Z4!F,8^t!"o\Q'!W2p,":#DN+"or]A86++H$TC5,]ms?C1Uj]>tHdl$jHe9!W`?( ":6,-;fQ\lBOsmr*t8J[!sAB"h>eMr!WrQ0#n7Ie1.l&,S[R+bZDaUtJQt,D$O6b8huFc#%N-QQ?]N2, l+s@!O)RrR.k2hh*#B4r#6tA6!8%8c$R7oCI\=6kW193-Am.PI"U"r0!Vl^0#pr5^Qa=`VWgoB)BNIMG #Qt52!Sma-!.k3&!.k49!!<6+#7:>9"UPJB$4@:@$NpbA"pG(m!"f89$5"'k)B9b:)&F#!%1*4>nGi[m !X8o2mf:o=$NUo-L:k[\i88Jq!n@8X$U8s,]@Q)15nO.e!7q2W$UUZMfu^ao0a@%G#n]Usjk7\^Uc&J, !.k3&!.k36!94%d!<NWW87#qNK9W83V#@%eUCj;uV5C)cTpUa_>XL(^'+>$Fr;[r@!<N?5,sP1-B6]E0 USXohXKA\/Y,eP$VNuaE:,X1$r;[?1&0`kl:h>-LWM5T+@R;=?#hK(U!>tq@"U>>H+u)D^AT)aWTrtl@ grH=D?U#\;hZ+>k!<NNU7ncfgI@.b1mcE!2S9e@1$:@!9/g;)?"Tnf,gAhoh"q)"l<dC"IdH:9)gnJRK /KYN*q#D*1"q;1j;0A)<`5p?Ygp2N24=M$LjT'l4JcLB&JcP$8$ipD3!tR4qN2rkKQ]qE3!0I/Arf[nX PEM&iML0/B6nf\o"9\f.qu@i@"9o/Q6>DgeW1fZFQC+&-R[KY6QB[SpIUkho(CgZPr;[B4+?s=dL5:bK IV)2)*>&P[rW(XP*!$'A!X&]8%N6oa<,75_`4`XdYck!X<[JXm"p3]_)$'d@";!qO`qSrO]</NDQ?ZqA 90bKk-Qj3,%gN0f!"];H+"p&qKqbcce`lh@D(l(j!Vl^0":uV+6"5A7Y-PLNa1?R`&Hr:=!oX-2!.k3& !.k4<!"8u;&fWAlAqZM7OH5>!NVnk:N=_#+MM[1<APkQ<*"`DX!<N?#!&Xoi(EkP,C5ACKS!oe6Q^F)& PE(Z^MM[1-;)&^i#6P#.!X&Z;03O1G[]6!^D,2es$O?k:q>f@P*!-3F"pkhU)_=NmMl=;2cDme=W2>/O 2%9ls!s7B\*<Zii,ro=ma8bD?WN)/*?UdCK4utAF*"rbf"p=r,!SIGd$mn>OL8V]&VjN$A:e*A_#6Y/2 p](j3,=#^lUqY!OUR[^9Cf)\grW<-$h#N$,JcLB&JcP*:"p,Z,7SHZYr_ieprDW\q#ZO\u9M.8`#Qa>n 'EJn#4\T'kAnPjpBOtX\>?=Wq,6mc?#6>8Q/O3)U#Oh`F!"/i<0P%04g>CrHC)te($k#:GS%I85X^!=_ "9S,of)Q*e8#bOp\".X^!q$$p#s=O8hq?>q;@h4VJcLB&JcLr6j8]Sh!Wiok<aB$LJt'Nir4W*A!kl@` rk/cUb1b:^XFstG,T@=#!W<!+!<E9)'/W?V;I4O6q7R3N^;%Fre]Y4YCeH;hr;[?3(bRm:;Ik<gi7l;T KNU#0$eG@u!<E6("U>AD))"?R>\eVP]">Vh_:?8iE)S_:"Q'1n!<E6-.7['0@""EVh>@0Ij2%:5BF8*I 9gCBU'*\UB!o!\h!s];N03NRc_qOb_s4`rK1*d\E!r2g1!<i]:*DUaA^VI\%_U>lO>sp=`#3>i:!.k3& !.k48!"Ar1!sB?0J%P%&b.FgZq5jRuri?O2Z*9gTBhBuo"p=u0qu@*,"UGPe?'Wq3m+8lEXUD55XK8Oc B0@FS$3U5,&-XRcKs\D%[]HZrDal5p$j6J/g&N)n!WiH,#n@Xq5?W&aRAd?nY-+n0VL2,['+4sFhuFVq !WrQ:6\38On'ntO[_T;KNHo5C;FWZ",6ASf!nRD_"qr4;8ns-UZ,u%up:Y/irW)s!q#D*3$l:-G=aQR= Y-5%5WHq)O$3gV7i;eH0JcLB&JcP0<%0[7\,s5[r\EVAOXJi)nWrAsrWXPhrHt,`)-Q*6n!s/Q%!"/uE +YQ?'RaqE&`io3<'WJ+2WiCkb5o9t7"9SZ,"UGf0I`_Th$/;P4?9B#5$3gV/!8[\q!X&]4%M]s04(*oR f]1l(WMuntVh//0$3pb<!oO%i":c:q3F@fes67A!WgS6M<rQ&);FWVp*>Aqg"T\T(f`2Zo-qJ07Xhi&R P%[QZ1aj+D"9AT!!#,Y[3E:0fZGW`CW2HJE>r)ch!s/MZ!.k3&!.k3&!:'Ug&lk@'`7"M9rnI>("k^>! 1(XNU!!O-2GaGqgpY5]$!duO$o`,7,.8>)jf5rDDnGq2A$j%%r=H:PbjQ5LZBGf5!%gtUJS%I85^j\s) )\NGZ!VHHE!!j00Xl.-nI8^XC!!rcaO65Qbj5Fkldf=t"JcLB&OoXPC$3:20&N3Zk@sX*4n@p]sjQ,%8 VhShW3@YpT#R(;2!X/i<+[T+*@X=!7^V7Fu`4`[iZaRBU^Z!n^T6X?h&,cJ="W/pU6;hBL]^+_,[#&!C !"@HZ*!6BQ&/QN@1dk8K@VBn?VSU:&jR_!-K31Di('EFo'EJ49#V&A?;dt<F^=2cRrpnOFQA5s%I<B4* 7l`+E)%[&W!s7?['E\UP(c#6>QG_MPs8Ui>>V708$Ng,(#6=r4$5uZ_P5N'"dC50F7kkndjT'l4JcLB& JcP$8$NU;2";X^dam@Ws[IC:,YeIK>MJ?$M-Q3O%"9&?3!!EZE*^+A7iU,77[&pJ/X:DA9Z*:F7XgOU; 6REZZ"T8<3"YNr6\\Z+oXgk!K9J7=o"9&;S!#u.N&fVuA/i?+'Eeg-\WN<8*[^j,<BKR"<#R(7e!#Ye= !sB3)J]7BNd^uWg_8Ej]Ob7msAmA2%$99aa)A3D^!s/K)hZ+>p(+)"=DMb*mbNAKk^M#%s!!!$#q#CX& $l0s?=*g>5XTtVH8Jhg?"9RN^JcLB&JcLB&m/RLt&0!#_BU-a#`3-!,WskeYEEu:.3\;Eg%L*"5!=fM[ 1.l/;Z0^SjY,84tW;`e4W2HMjW2ZhVB0mRH#mLJ4!sJrG7YoXprs?uOKjd%Y%13=Bq>fLT+9;KE!XTM\ .5EnL7p^Y=am/-A[Ag!nP_a3S.gZC^!s.<[*<Zii,ro=m`rG/7WN)PEF_GB$BPCpU8jG0Z*"`P^"p>#0 !<M$W'+ZTgF.'DWa/"f+911H\'*\O?!r)a#"s#X$E0INAr2U'Z@5SAn!s/MZ!.k3&!.k3&!:'Ug(LE`D cJA!P#2#2C/JA<hnc0F/.rClfcJIX=gXa^)gYLiJj5f?h2$`gT#ltSi<JS?MM(o8*!8.>]";WgnI&b]V gWI*t3XO:9&IUmRT"`e;bb&fF4#/'!%L*%0!7q2V'i2!j_P)0K$gdoq">Go7joKQCdf=t"JcLB&OoXPC $3:20&2[9b>]P[tn@p]og?%AJ^oN`NAP4cu'b(?J":,PT0hbhYI#48t^V7S'_R?J:SZ&j'^>n(iW.7u+ &cD\?"W/mS6W.NO]^"S'Z%lL<!"7BY*!Qok,VqhfAT2j;Fa/P(YJ]/lrVk08C-F0i%g(Vg'EJ49#V/MD <+U]M^<>U5rq5*bX.g)sT:D4+JokKq2^K1L#mB,c'EedW)`:fBQc%VQs8Ui=>:gs5$Ng,(#6=o3#oZN] PPi0#dC53G82;(fjT'l4JcLB&JcP$8$NU;2";agibjjN/[d^C-YI_9NUlKe:=?e/H"TAHG!=0Gd1fAUp f[e'RZ*(1.VP'uq\@ArPYcY@)F[mo"%0ZV0&-XUdKseY/\ZNB6Gtfq2%0QS0g&N*$*A9cT;d!OFH&7l` WiE/'[D]keISq^*#6b/1huFVq!X&Z>7=`;LlHd&DZ+7il[AB:SMhQ\+EXHSm>"gdt%Kcb6!T*kk#8\pU =EBLtZ-2;&p:k8i!<<*#!Vl^#":Gqd0ir[gr2g4!Gt8bZ"p>"d!.k3&!.k3&!:9ao"V;V$5\QG,n'&)8 n>cqmP_*sh@pW553@#49""F?R&M$FeMl=VV_m65<W2chnTr+ikW2?DiWf:XX*"<2Z!s&K-#Somcf`(mW c`;b.3Yi,2#6Xf&iW()%!WrQ?.7.<SDK0cMS$UZ1g<-UsRXoTo<BqW2"9\c,huFc#%N-NO?B)o&i4Gqf U6L4PH$k'kI<979>"CS!(BtBV"Tnf-!T*kj%kgn2V7t<uUl]%Y6nfr$"p4o.p](O'*B-l7P-Dh$Ws=Ji 2[]]j!s.3XJcLB&JcLB&lMq)(=I-57h!jG3gpVl>4=:pP!qZI.&OVGeb1GV3gW6^t[`?qOh;I>TRPtQH !!rZ9/5q59jG>SqnGqAF&HMt>'.?7WJ>'m7hnkXo6l#gQ!#5o1K;-36jk%)2G%b/Y6oZ_@(CpWLqZ,7K #m)&GYi*BlG>8P5!!39WNVqo>F;r[/JcLB&JcLr6j8]Mf!Wilf:Jk52L8"+O0u;)ij585$\?(j49eRY* $N^MC)'q@EA8dX%Y.23a`kT-gSW/YsV6dhtj34]`>rE;n!"T5L00;O!B84(_j34][=>9d`f)Qcu)(IU9 >B,ObPDtEZRAIF4oDed^`/.D=)A!/ThZ+>k!<NNX92\f(KU]]ocJ7aOhTWU>&%9$Z]Y;.nXFXP;+;k^p !T3ql":Q%g3*LKk_qb"ds4W`A/0>T6!r2g$!<WN3),,1:r4`K`\<15l1)^AY!.k3&!.k3&!9jIk!<N?+ (J]k6o]"''n?"FJ[_0;^WLf</Aj[XD!s/N)$m%9!B8*5+^UUVRXfS=gQDCk)_Rm7]Y.:3N9e74n"T8<3 "Y<Z*Z+@TXXgk!L9e[Os"9&;S!#uY,:MkB-K85JOS><3cYH4nA^p9>;3ueG-!s8S^!#Ye>"9fH-J\q*C cFL'ZZaIKWYcO^sTq7dG$Dj\uP[cco"9S],hZ+>r)_XTbGEJc-bNAKk^M#(t!!!'$q#CX&$PXX8<Hso/ XTtSG8/DU;"9RN^JcLB&JcLB&m/RLt&0!#_B9gj<e@):EX#[)MPDOpEJq85P4<+J+!sA]B3F\,WaP,=K W26GkWMH,RTW#3#WMcVnMe59q%LNFC!<WK2(.X57rr3;OX+atC'atER"8W#W!$;7E"U6/=DPOA9VOjKa _UR#QZ`0dXE*Ggq.hr0h!s7?[*<Zfh,WB%h_tr0"W2c_gRZEJjP*;,kM1p.\8MhUm)%d/R!WW8Y!##o! >Dfc.fZBqN@S9*C-5$Ia!Wi&r#6l/+:i;E!_YgG>MdeUS"U+u0h#N$,JcLB&JcP*:"VajoX2`l_jpBqm [[Mbb>Y@!_p&Gm4,?q1rg#(iKbcd%LPHW!Pf%f6GRQ(WH!!j#`:kQFAM(o5)!8dbh"V2\/79FJ`TX;bi hVFu90bac>!#H)6M5A)Ajk\D&Z)!nQLja;U>Y-Oc#m1&*fDl3Z+Bl,0_P)0K$gdoq"##Z3joKTDdf=t" JcLB&OoXPC$3:20%kpXN<+^fUn%UQl_84.4ai)--Q>/]>+:nV['-](t>]5Y2\@]Jh_SNjjW0;^`Mj^`\ lfcg,O^^<`r;[?3(G7a9;eLitki'[bJQ=H)$eG@u&0s2!9jMb/Za$dA[CEf]aSc&2j0Nqo$jHk:!T*kk !<E6-/PT2HCkeLp_8=.0_nj1(^BDBh_q"P]rs-5j;_K:0$3B&b'Ens`,s,=QQG_MPs8Uf;=XtO-$3L#' #6=o1#oH<WPl/9$d^bNP8MV7ijT'l4JcLB&JcP$8$NU;2";amnde;qN\F6R!XpMD>Yck-e?SD]frW42Q .S"#tPGkpoYHG"0Vk0*/S?^/\`4E:X\u'jP0cgi/r;[B5.oUqu\%0#N\=e.D0c^`+rW(XP)]_=aSZ]6& W2lo"XfJP*Y-5^LR;tbB%g)k6!oEtl!<WK0'LmVio]+0*Xfee/Y-"h/XT#C(Z,@"6pA+9P>:9XX!s7?[ 'F>d:94WI8VQn>,p%H.6.KKML!Wi)s#6YDK*A1?9RJa/lU3T9G$3gS6i;eH0JcLB&JcP0<$O%(\-pVF2 eGe=9Vsp`IWi)_jUSO`^TR0We"U,#3"!1!]]&3&L_l'H4Wi2eeQB%<,\%AiBV5fJb6QHUC"p4l."UGl7 MVA(0$.,`,@6,)1#mLM.!9*u#!X/c6/n:aUs8V>uY-P:6XJr2!UO?N9-RBZ@!s/K(hZ+>n%2^<K?&c\p f!qZYWMl\jV5C,irhp!sODS)k/H[+3$O$G1hZ+<$2IVocd,<-DOCCjN0I@D9!WiDt!!`]J1f%nJY.sn8 #E*%O%L*(=!o3j.!.k3&!.k4:!!O$1K;?B<nE()=hqd&=d`fe>4U1Z](]k:2GK/Y&jQ576PA*g3Q*nKR fAG\[3XYN[#Ri(UJ@ss"0a@.JhuFAn)E1r[]?AURg>1WDj4]/H&-C8[(_0,sWl3TPj5AeMgtUQ:eC)[d \:[a6$j-D.fDl3],[\%=_P)0K$gdoq""oQ1joKTDdf=t"JcLB&OoXPC'*/.9%PULL<+LWP^VA%>e'#V@ Zi738YcOn*Uo(9(]DTDlc*WF:7kkqf$Q:EM7p^>/_8F:9f@.I8S=#ChDg-\mU;b<kXb^:A&cD\?"Vr[N 6;qNP]]\7qWe"2)!"7BY#8/IH5YPI.XSKU>aSu23ij!Pd#6Y,1!T*kk!<E6-.niuD@!.[H^:^kY[(Er` ^](tY`Sp[ns5U,':-'a;"Tnf,irBbs%2gHR>B?+Jh"UjKg6>\h*Y\q_q#CX#!sT&K96??p^B`2sP%@6@ *!YL)JcLB&JcLB&kl;Cu!WrQB:lWosld*)CXg,+5WMQDarh9XmUS4KYVl$QnXXUEIGtAtf#m:8?/PU,= S#EElZ*_']\=8"eJ!6eE]!ec:Sr7M[0-(N*r;[B5.T:es[^``I\=e.D0c^`+rW(XP#9cfiZGaf$Y5,1, YK=DHF@@A_!<</W!#,G9"9fE(HFWV2e\JAiY-"e+XK8T'XT5[8d-C?!b(<2-((:?IhuFGt*]6Z)J!Hn9 bNAKk^M#(t!!!'$q#CX&$54F3<Hjo0XTtSF8/DU;!s7E]JcLB&JcLB&m/Rk)&0!#_B9q*JiOc%gVk]cH R%0bBUAgnmVlm;8\@/H;rMqZNK3U/<#6tD9+Adm:oCqgiW2-#SPD4d>G(GXBXfnt6\;Fc\*=W>\!s&K- #Sosgg]%3ZdAqt03YVr."p=]%iW'/a"U>>jDRf]G!SagRWsPPF=Z@BB'FOpBh#J,l%2^<I>(sE`iP_mr WN*))YGnJ#rMp'oLg<V@#;.57"pG)2!T3qk&2n!`^X1uaUl]%Y6nfr#"Te`+p](O'*AgQ.O067qWs=Pn 3Xu>t!s79YJcLB&JcLB&lMqh997W_Pg#Uo1\>,[eR?a&)R%'hMZ+.Wqg>Dkk!o7B'p])-7)F]>(jP\hE `K4@_*%jWcGD;BWYA>Qjo`,7*-;8m$jG>SqnGqJI"UQJIH*H*"jojCd1(433!"K?$Jt0*`aN;WNdb*=2 j8J*Gh7T1r5mm\n!8%8X"X[Zei5213:(-Fh!Wt'5r8n$&*7Fn>!.k3&!0R?C!$;4C!Y-nV9iPYUS\WS$ cc3JpSWJejNfT6]N/3FWU:'s7.DX``Z&NEf.1Hh1/iQC1FIp@nh!>!r[$,WSEc5`6G^tO7TV%Np;D8X[ !"T5K/NQ3sB8=._iQ8*N<\OL]f)Q$g.QTgf>^*7E^C8-\s8D>oGWuZD"Tne_!#,G7!XL2G=B&^RQFXE+ VOX?\Z+RjN^C\?5lh^YUc)-"s5:$^C"Tned!#,SG(aV4HFI0o#p](9IPZTCV'FFp;!!`N,"pl,>FHZR: #L^,FAP+]t#3>i:!.k3&!.k48!$D:D!sBH;NRIOdca^*]WLT!'J:2]gH@(!gJr#;IS><7bXXUE[QYo2A )@6ES/PgDFS>r`r]$&h!`/\G$=(HB(KntP?Hu)nM.iJm#r;[B5.T:es[^``I\=e.D0c^`+rW(XP#9lrq \BE+8Y5,1)YKt7sOB!hDr;kdU'EJ7;":mV6W8uFCZ([kdTq\EbXfhW)!4!!Lg?\OmY'j;2+UeD0!#,_\ 2GIk8QDUq1k4SG_BIX#_!!32s!!`W6'-/Z)GFJH3#GQH6(CC?K!oX-2!.k3&!.k4<!$DFV)^msaQIZ#o ];V^"O+;1jFE`%YI=Qs+QD:^r^:UQHX"gN%>W<6'$jm7b;2E?ap@,_kRZMi*B4Y@J>@hYqJrZ:sKO$\X %1*4@!<WK2(.a>;rr3;PX+atC'FP3O"8W#W!!WK.#732&[f6:-gTC:P$D_iL3>rnQ$NgD1h>e5m%2U3E <-tCo]V_'\Q_(+Y['6a4rMp'rQ[2k4#t-Kg$jd+A!s&G^!##o$?]r"EgrZ@R@S9*C-5$I`!Wi&r#6l2* :Mc)p^\k,;Me"jY"pG)1h#N$,JcLB&JcP*:)A5\nTu#FB^4ocK0e=[r,:"Ta0K_p.D3MK_rT44=FX@4d !#Pn^8Vk^OeAAJJ:+-GM!sfAQ+Y>`G/IqmT!!irZ9RaY8M(o5)!8mh\#q/MqZ/#0;"P\\n%ft)Y%KnJ' I>*H,L5qLfXi/iLrT4CCbH[FJ,7+ANfDl3]-"+4?_P)0K$gdoq""oN0joKTEdf=t"JcLB&OoXPC*ruEE %PULL<+LWP^spZBV3?II>?>!3>[_5ZCNP;pXSom__<pUB^lMk_',DlN4A9.*TZ#LRs8U]EED&km6U=@E ?"7_rI!oWu.1Q4U%g<_#3^QbXLV2g/af9nm0E;L4!!a)c3^?>BGH:PS!6>*=#l2/^72-.9"9I?Z'*/.? ,t:s<Bn)GOW1K?8PF\ee^](tZ_9(6eq>^$?^PH)O'b1NR!TX4p"Ul1m3EgKh_qb"ds4W]>.NT92!r2g$ !<WN4(e\t6r4`Kb\<:Dq1)pM[!.k3&!.k3&!9jJ+!<N?+(f64?p?U&7Y,dt<?s$8u7Rp!B9iPG2DgRG4 Vu<_HYK+8HGtfh$!=UPVFcW/pXKon*oCg"I8L#]@4\&@P?tWeD75u\4%0QP/&-aU_I]Koe[B6s3H;?79 %Kl\1g&M@&;MDj4ccE9bXTu,`e]P(03#2AmhZ+>k!WrQ72J/K+]WI`cOckrqSYW9erN-('$Fdt$l13ZG Sn0nshZ+>s*]?c,J=!4>bNAKk^M#(t!!!'$q#CX&$54F3<Hjo0XTtSF8/DU;!s7E]JcLB&JcLB&m/S74 &0!#_B9q*JiOc%dP^?q692%rM9i4eh@<70nX15mOrMqZMI9JTC'GCub-;oZ@n+5tZTp0Ci:J+/@0/P[Q 6;qH?MfDQK(CLNQ!s&K-#Sosgg]%3ZdAqt03YVr."p=]%iW'/a"U>>iC:4'@!SFOMWsbYC>Ws#F'at0G !<M'X'Eeg[+>?T3QFioTLk1>DSYr^"Yc.N$"K.`UL1Ucq59pUG$O?k;!Wh<]'+Zm'NO?m]b+t,.911H\ &d8=<!VcX""s#NrClba6r2U'\A3(2)"Tnh^!.k3&!.k3&!:'Uo&kdbK_:d_69caK?!<N)u#6G,@)_bEV bl-Z+hhEurq#Cd/,>O3EhSuLM<ZqeG!!E?.%gW4.!!irZ9RaY8M(o5)!8mh\$Rnl"ZeYB="P\u+'EZ\_ %Kdt[>?=Wi93#8.J"t!=rT4CGfZC^p8fS!8fDl3],[\"<_P)0K$gdoq""oN0joKTEdf=t"JcLB&OoXPC *ruEE%PULL<+LWP^s]ulHt?#1+s/!Q,:bT77Ta_iVZ"7Y_>+'1pptfC*$$Oj5>G[2TuQ<qs8UB":*h#& (D7Z3/N?*m=_1\t+q+>L%g<_#3^QbXLV2g/af9nm0E;L4!!a,e3Bp,?GH:PS!QP$9rs-Jp8fA9L"TdH[ '*/.?,=5I;D17M6QB-fMLQnOF^](tO^r"%1e,K@H#J5:O*>Aqe!TX4p"Ul1k2d(3e_qb"ds4W]>.NT92 !r2g$!<WN4(e\t6r4`Kb\<:Dq1)pM[!.k3&!.k3&!9jJ+!<N?+(f64?p?U&7Y,-_R0.%e\()@c-*@<X1 ;.=m6V>[MFY1MLY^NDdX!"1>UH'=u)XgH^Np@kt).Kft`%hfs42+0\j2)$<m%0QP/&-aU_I]Koe[B6s3 H;?79%Kl\1g&M@'<K"fHeB4ujXU)2binMV&65fk'!T*kk!<N<)$SYkG];h9UH@16qM3FO0X8T.#XpVD= [DDD,p$\GN+Q!/5#p)!#Bn;VMZ-2;&p:k8j!<<*$!Vl^#":>e_/QI"`r2g3uGXrVX"p4qc!.k3&!.k3& !:9b/"V;V$5\HD5s5CSgVho(X+<DLA)'0nG-T4Y.I[R:L])AZaVg2Q1',_Z&%k1G6`pN<]\=S1I76E(L *"`es',2`Q:hX#s-km!o"9SZ,"UGl7MVJ.1$.5f-@6,)1#mLM.!9*t_!X/f812=/prrLcRq5XaoF':sT *>T%^!WW8Y!#,MB'co#"B8E@EJ95RLJW?4sYd:A.Ws#H!Tq.PX@8B!(%h8mL"9S\b!##ks=GX3#e&\>H @S9*C-5$I`!Wi&r#6l2*:Mc)p^\k,;Me"jY"pG)1h#N$,JcLB&JcP*:#nfm]Tu#F=Fs[=a!!E?205A3! jojV28ehC(!"/f9-rZ5TgpN&J/dLP>#R_tQI_=`u0a@.JhuEoh.oCc%h"g(9gm_1^!s-jN%KR>44YnE* +t>B1<eIg7rT4CIiSN>4N)1W"!!1aQ#m;M[[G\oqG>8P5!!36TMu;]<FWAj1JcLB&JcLr6j8^J,!Wiic 8ki8qK:Td'[uk5r2BE,-#7(VH(*P+l@XXB8Xgl!ZnG`Fse;dEN+YGf?9k/C>a6<O&'@;Y8.N]H9"UP\R )^[=+:.-`S#lO`6"Vr[N6;qNP]]\7qWe"2)!=Jo,!<<2k!rrK'"9/H&!V?@(&10A#93H,!['R0K[^`r` `UNm,#LAN8/0>Q5!rN&t!<<2k!rrK'!uV.A!<E0#!<EBE2G[UkDg-YWG&hDEMO:<B#cjo'Y-b[M`9.(! #MkYL/Kbc9!rW-!!UKn(!WiN7(Ek_?F-OStp](9IPZTCV'FFp;!!`N,"pl,>FHZR:#L^,FAP+]t#3>i: !.k3&!.k48!'UDb!sBH;NRIOdca^-MG"*5X$3p\:"U>AG*%<g>BS2bPXK&D*f';DTQVnn+$7eqqOe8\W [Fb$Dp9eBY!W<'-#ne=0.4?Mh*YJh`r;[K8.T:es[^``I\=e.D0c^`+!<N?$!rrJn"9/H&!V?@3+A@3i _o'*gX0&S0Yck43YghjsfoJuT!WiB(!W<!"!<N?$!rrJn"!%FE!<E0$!<NKR9m3"aHu3.uB5;I7N0p<: VPgPr%'$A0ZISR?oYbGn!<E*"#64`)!<N<)"S2`p";h4C!W`WM3)F=?RB*U9k4SG_BIX#_!!32s!!`W6 '-/Z)GFJH3#GQH6(CC?K!oX-2!.k3&!.k4<!*077)^msaQIZ#o];VW\>r<#r#mUS>$4RLc0Lf>nQ)hX0 ZE1%(H<<Zg)]fh--rPf<lL=#JSUXF(4=26f$jm4D":ub78jY0O%gW@A!W`B,#Sosgg]%3]dAqt03YVr. "p4l-!rW3$"7lZq"9/H&!VZR9!X/c6/75"Cs8:liYHFh$Vl6SpUO6?A2^][Z"U"o/qu?d!!Wr9%o)p<@ !s/N)!<<3.&fN,Z<,I80BjObEBQScbR\['i[CNZLXfSRu%=q;C2]WbJ#R(;3!!*-"!r`;n"T8E<!Wi?4 0Na+7`R;c%OCCjN0I@D9!WiDt!!`]K1f%qKY.sn8#E*+R%L*(=!o3j.!.k3&!.k4:!!j31J>'g4h.7Am !"9E&Ls4H)hrCbJ0+7mY!"')[;30)Y[>8-A"m5jk$RSPr]]=o(#4V]O!##P[5\64sd+R12ioB+]h5Y-I &d-P^)?q6!&.&IE#n@Xs7W+p6aO&SohVdGO[t\$?!!CmS#m;M\[c##rG>8P5!!36TMu;]<FWAj1JcLB& JcLr6j8^J,!Wiic8ki8qK:Td([?"fj1`Zc'"U,,;%i--:9kSa&Mj^`alMgf/g65Sb,V:r:94<%:`7jh_ s5U;8>Y$^s&eGZh',i)I2D?9f#5nN4"Vr[N6;qNP]]\7qWe"2)#R^Y7!s8`4#R^24r<i]6"p=u!!"fV\ 0fhp3EK6HNOHc<7Zb"'5rr35XVfYKg,SC4X!!`N+!s8`4#R^24#7CkH$OI"?!WE'3!<j,_3D<4H;ccsu ;Gph<H\dUoMhQhCQ(tb)f^o.Cjem&c1*I53r;Zs%"9o/?nI-6B#R1G<&/c`R=`]eEh"UjKg6>\h*Y\q_ q#CX#!sT&K96??p^B`2sP%@6@*!YL)JcLB&JcLB&kl=HZ!WrQB:lWosld*)DST[@8%1!+>"9\l4$POI* 2H+FHQ_:=[Y0u_'kGMK.!=:/HD2+FUXKot-oCp4R80&EU#mCSG'c\54)&X+s#6Xo)'*]pbI]Koe[B6s3 H;?79%Kcb7"T\i7n-B4'"pG)3!s8)p"<'=.Lm7n)'V)26]stJTYHQ%*k2DtC1^s]o!Wr<#"9JZ/#79i) *sMlN"9S]*!<N9*)Db0)?W9T]5t4LC>A/)-Ll\%'X;\4EWj0V(o_6FM2[BNg!<N9&!WiH,"pkVC$1eE> #6Y/2$6V<)COqnRZ-2;&p:k8j!<<*$!Vl^#":>e_/QI"`r2g3uGXrVX"p4qc!.k3&!.k3&!:9be"V;V$ 5\HD5s5CSgVhA;0#m^_="9o,<$POX85ZDfeY/n]!Z)E:W8N7h8(_.ifK>H[>m_#6VC/7Pk4>%`n%g`@H (aUpf+;G4f"9S]+!sJrG8;c1$rt*SYKjd"V$OI">!X&Z3#RLb:#kSE.#R1D6!WrN*p])E<"9f#T89CoE \[8KB[(!9<VP^>iNbM]o5;F2b"p>#/r;['("9f#9#m^h/#pfi\"9S]-!s&H.$kaL/3D!=M8O>L)7o3<! F+B:D\_-6"a1/4H'9m6+7lMt;$3gV7!<N?+"U52;#Q>#'#oa-U#6tG8!s/rf>E#r2fZ9kM@S9*C-5$I` !Wi&r#6l2*:Mc)p^\k,;Me"jY"pG)1h#N$,JcLB&JcP*:#SKd\Tu#F<A/+S7$iq&+Eg+#aj0Nhn*!?'< $O7_DL<eYoVM8"g#3Z$m$RSPr]]=o(#4V]N!##_\1eh\<U:nq,h;RGP]oZ\`&-:2ZrrMus&HMtA)DF`o K:fQkfAGN+VLVbL&HUSc#mDV^\)>,sG>8P5!!36TMu;]<FWAj1JcLB&JcLr6j8^J,!Wiic8ki8qK:Td' [>\Nc1)gB!!sA`3#n7Fc1J:qcG_`$0ir8s'hO.Y$-S@567ppP4_T^g%s7OgJR<;Rk*uPe)$kF$i+<2%& "8r31"Vr[N6;qNP]]\7qWe"2)#R^Y8"U58A%heLL!#5DG!tYhE!qZI4$5Fd@6WIcGKn4MoM3XpG_9h?A s5^eSBMLB&"T8<*!<WK0#n.=WoG%TF'GD,k$O-\2!!r`8'd,"X/h\t7r\"C66Vprt'5_Z,Fb5gY_9Ca( rTCSD>sp7]"8r3%!sT/GrY4r=(_R>f#n.Ie,WT"JQ,DDOs8Uf;==P@+$3L#'#6=o2#oH<WP5N'"d^YHO 8hq@jjT'l4JcLB&JcP$8'`e@<";jspde<"Q\?;HF65'b4"9J])">pAj&/??K<,@/KT;f$=mdT\S@jqEa ,Xc3nP,#%]]$&k"d[P)C2'Nb@#n%1S&J#B]$O6e9r;[K8.T:es[^``I\=e.D0c^`+!X/l4%M'*\o+2-: $jm:H"U"o!!#uS#6XabMG'o.>\C/C1[]lpEc.q<[F[mGa$O$V1!!WK.#n@IW%eC5;%L`[N#R(>4!<*!6 ":lP+4#J]?+seTd/Mo[`;dsj'S>mL0XfJY:bhhm/IROt\#Qt//!WiH-#n.@Y&eX^H(^pZR!X^&1;JUoR W3OP.p%H.6.KKML!Wi)s#6YAI*A(98Rf'8mU3K3F$3gS6i;eH0JcLB&JcP0<&d8gc-pVF2ec4U?W2G5P 0F.jdr<,=h#7D1a,W8VER_$DX]VgWh9KadK((29[J%Xb2o=h&iOEXr6:dm2h)@coW%hp$$&I\mI!s8T* !sJrG8;c1$rt*SYKjd"V$OI">!sJu=%M''M&+gD8%LE@DrW<-%p])E<!sAcF1/W.HN00<qXLZEXWi)bn S;;,q=@+AE$3pY7r;Zs&"UPPHrX\W4!tGVB"o\TF!WiN2$4dsr-nm2",U"B[/MK=[=D*/\d/X+,ag.fT RZ2>i;*Q<7#R(;2!X/f8rX8i<%M/7E)\3Dg%137@!Y7(mOL`QfaJ=o,911H\&d8=<!VcX""s#NrClba6 r2U'\A3(2)"Tnh^!.k3&!.k3&!:'Uj&kdbK_:dXQ'Cc&1!YI(dMoF_hM,l;7qZ%$-'gR5liRG`JL-Q^` kl:ts-;8m$jG>SqnGqDG&d/X].RRp7\B<=VioAFqS9$4e`W-GL$R7uKLSi#Ej4(lGMZG=6g&ME`-=XLC _P)0K$gdoq""oN0joKTEdf=t"JcLB&OoXPC'*/.9%PULL<+LWP^X0<F?Uldg"o\N\!WrN."q):t2b@S. QGM;Ps8V2P@P]Md0JPt&G+HIfa3<B;p#ji)HVuI>)%HiS#71bG"p=u*!"T5K/NQ3sB8=._iQ8*N<\Ode !X&]6%2'HsoH4A\*ZZ4:&.&I2!#u1Q(EbCt;IOH`CL_[IRBs]IajT/4c`W1<6R)d5!!`Q."pk_O(EE&i #9P!-*#B.m"8r3(!<`W8%M'-K&Hr^[(`aeV'1l84ATWa'^r4:=g?$;HG??pK"oSE'":>_Zn/rPe(D72g (*4e`=`K_Eh"UjKg6>\h*Y\q_q#CX#!sT&K96??p^B`2sP%@6@*!YL)JcLB&JcLB&kl;@t!WrQB:lWos ld*)DSo[+-$3gY2!]:&_"U>S`4&]jDQ):b*kk+McD(Pbn,!T=UMP7&RZF.9dd^blp=?7T7$4$k@"U,#4 !sA]-r;[K8.T:es[^``I\=e.D0c^`+!s];:'c?odoG.ZH&eGN\#Qk2$!#u=a.69mn='p$4\)5fY]!8EB Zb"5aLg)JP&I8I:!!EB/%M]i[(\AIJ'b_,g$O?h:rW!]7!X/oB'G:re$O[CQ%MBX&-p(IKNMRSmXfnn5 [CjSnLK,Z<%L)t8!WrQ2$kjKu)AsCc()du*'+>*I#pD?-CkJ.SZ-2;&p:k8j!<<*$!Vl^#":>e_/QI"` r2g3uGXrVX"p4qc!.k3&!.k3&!:9be"V;V$5\HD5s5CSgVh&#("p>&2!s/N+!sAi9%2h*,IAF9i_PiW+ 9L:BZ(C;-SHahbuo"h9"SXPR[@oG]Q,SL@c"pbPB"p>#1!WiB'!sJrG8;c1$rt*SYKjd"V$OI">":#>I 'c%Sc)"\UL'bC`X"Tni.p])E;!WrQ;+>QJf@W$LLT!d4hZ`'b$US"$9Dc/A($jZq:r;['*#7D+Y()Ih[ (F9e-$O6h;!s/K)!sAc5$4RLT%L`[Q%1a!e+tblXMS];ls4t2b(8IFhP&!iG%LE@C!WrW5%hTHg'GV>u pD4ba'bh;l$3^J@1gcK]cJQg@OCCjN0I@D9!WiDt!!`]K1f%qKY.sn8#E*+R%L*(=!o3j.!.k3&!.k4: !!j31J>'g4h-^i`!!ru_@^5"4Rr(\(qZ%*,%ledUjPS_A^N`'e#m'>l#R_tQI_=`u0a@.Jg].oe#8fU> S%-SliT8qKcb33m!lY-I!uO%(K!3efhqQSt!E'Wc!!riXA%:I6Tm'6>m/R1i/rTYi!HfC2!.k3&!.k36 !9=+n!<N<40M5&=A:pGfca/L87P>S\q#DrI#S@q*;fRc0eFNY>l(VfM/hAM%5$W,g['mQY`9dO(rmIN[ 6o?;.$O-b:rW2lr%g<_#3^QbXLV2g/af9nm0F/$f"q(tY+!rZ51^>fm0eb!r&I&.7pAcTE#RqCe.5jRn @:WPJDMFss]">\mleojcIo7g%!<E0#!X9#D(EXtWoJ?e/1GLR3*"`AR!V69o!<E6'%icu_:0VIYQb'fA ^;8dSZ&NBa,6\&I!<EB;+"];=1`.hm*uGb5+XT3PF-XYsp](9IPZ]OZ'ab$<!!`N,"pc&=Fd)a<#LKuC A4\Nr#3>i:!.k3&!.k48!#,G8!sBH;NRIOdca^*JEBXm>"Tnf$!#YqU-Tk@INM`r!iq<#jFYX()*]?i0 JsiaBriHa7_p60+J64`N'FkEP"9JW*q#D'4.T:es[^``I\=e.D0c^`+"Uu7N,:P)j.J,(p-QsNM'Fb9L oDfj7%Mg091-.j/J"t<NgrQq-YHG"1\!_5+//\csr;['+%2U6<.OZb<.L.=E*ZGe'#6XGq#Qk59%3@W8 HBT;AXK\n2Y-"k2NF=Xe'+"^A"9f#>'d"nZ/hJUG.Ms6D%0R"\3DjREQ`.12k4SG^BIa)`!!32s!!`W7 'HSo.GaSE2#GQE4'aY$G!oX-2!.k3&!.k4<!#,SJ)^msaQIZ#o];VZZ=Y0g["9JW"!%eL$6Y;:V]uHt: D,*MX.MrC06?&jEhX&[kWiE+rMfE3$6T-/"$O?n=!s8T*r;[''!sJrG8;c1$rt*SYKjd"V$OI">"Uu1i -7C8B/+b7q+rV%"#6k84p])iG!WiH3'-/JX5u(X'MP\P]dCH3SWMunqIpG,O%LWIB!!!$#"Uu1i-7C8m oI1"h)A*8\"Tnkr!"9#>'cf;MWUTrfp;<jFWN)trIp4iA$O?k:":5YV*$6CO-7:28.2sW],pXHD#QkVo ?]htFhTM^X@SB3F-5-L`!Wi&r#6l/*:i)8t_YgG>MdndY"pG)1h#N$,JcLB&JcP*:#SKd\Tu#F<>nQK) #nf^uj2n3N?kEG:!"K5`B"QsZj5f%#E^LrW!UKdl$RSPr]]=o(#4V]I!"T/K5Al[g`nBD5jQ59D.KmZi $3V8-?^/[njQ5L\!cT7`gAhN`-=OFB`1_HP%.+#r"##Z3joKTDdf=t"JcLB&OoXPC'*/.9%PULL<+LWP ^Ws0C?:HRb"8MpL!XB,H,>N'(X30c,s6-@t5;Oi;+#Hl.FGQ0W[_pnurr;#lRW`.:5;+6!%g<%6!W<!/ "Vr[N6;qNP]]\7qWe"5*#R^eE(*P:o9O.1%$>*gW;)fa0!s/K(p])]E"pk\P*@<I(9itY,Ao)p`UTh8F na5&IO^BmP!WiB'"Ul1j/j;s6o4JDBA78=p+q=\V!<MfmrW*$$$6(!>5Ytp-I%RFF]#!@Q\!1]!,R"2L !s/uY5$.8e)/*8J4YJ31-6tHOFd0ero`+sFQ<Z$c((13>!!`N,#7)2AG*;d<#LBi<?Ucah#3>i:!.k3& !.k48!#,G8!sBH;NRIOdca^*HEBXm>"Tnf$!%e?c+>H;uM6+,'i:?TeGW,d2(+D=EEK.'0\$3!;]?8@6 S:"g>4"VNg%1!(<q#D'4.T:es[^``I\=e.D0cUZ*#T>>t78d(T<!Q2j69QtC&-MP)*!HWZ'cS>F00rlf PcD73bIb3gYHGR@M-rIk%KcS/"UH#!78d(T<!Q2j69QtC&-MD%#Qb/6#SnsY>]LdAUV=7FZ*1=8OCgL! ('t$E"UPYU.6:1,=BAMp<#@tU)@6cn1Itl!P,PY+j7N&\C+B;c!!*,r!!`W8(*PJ9H^al7#GQE2&dJOA !oX-2!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ\>;$0_"9JW"!%eEt3`gTpZbiN)G?%0t0H1951f\mq^"W)' ^pC&=Q[Nd_>ujW^0Hq;A#6b53r;[''!sJrG8;c1$rt*SYKjd"V$OR+A$QUrn<``<%<qKAs7PuD'$O?k< p])H<!<N<,%M^!0/2]XhAq?DT]Z7mgVkp>iIp4rN'+P6M!WE-*$QUuo<``=&oMl,c2'W_A#Qt;"!"8u9 %MUEkJ$[eknCOQSVP^>jIp+Z=$O6e9"qVb%1-.fu;H$OopJi,1;G]S,'aG4&=+mTid`A5KBMCuS-kldc !<W#r#6l/+;/_Z%_#15<MdnaX"p>#/h#N$,JcLB&JcP*:#SKd\Tu#F<?P2]+#miSPh9E']CDd3N!"T,G 6A`J%f\t`*Q"rl?'a<t)#R_tQI_=`u0a@:N!!3'#pAt<qj8]Yk%4+>QOhTE$i8`^H0a[@M!!2]n!!2'Z #m;#)DmS0RiT/ktEZkMV!:^*j!Vl^%!ZtRNi5VR@<=eHs!X(6=r8n$$)Ue\<!.k3&!0R?C!##A7!Y-nV 9iPYUS\NIVMI&b*(^'R60`_@]$Q;NJFI0Gnq>]`]F@J/>+r)Fo>@_PsOflOGjS8]@d(6$:Jo+XX0,t<$ !W`?#!"T5K/NQ3sB8=._iQ8*N="jmf"qr4:5Z;<FoTKZNT:qj-=>Ucs!s/Mu!%7mN"UGJK(*+\S3^Z_O AS$RUS[60,qWun2CHE%1!s/K-'-f7t;eLUPP7*eNTq6g;1_p5s!WhlmrW*!()\F)?5ZhW5MNt$F_;s.Z RW(kG"T\Z,"Vs+(Ie8gDPa%GuMKN2n3A;p,10Aac_UnAYs4`rK1*d\F!r2g$!<`W8)GP@<r4`K\[#&$T /f=lT!.k3&!.k3&!9jIt!<N?+(f64?p?U&7Xda;o%g`CA!Vl^I":c7p3+.KC]Y`Fjp!7tG#mLnZ-U2$k VnB[NXf\tCb/puYMgB&74Xh?_#Qjf%'*]pbI]Koe[B6s3H;?78%Kd.h7f[9&IK4fgIKt:GFDF`/)@#g6 *!6BP%1s9j)^maA@<[p@eBPk?Z)u-_Tmoli&d&"3#7W+PBmbAYIIqsnI<]jL;)0$on,N^q!sJi;*%a<S )L%Xg`P&^bY-F4,4sq-S!sJr@(+)1IEe8glpO<'j(hlVn&J#m85#u``Up.kto_-%8/-#\N!<Mur#6YJQ ,WAnRS,BAnT6*C2"U"o/i;eH0JcLB&JcP0<'Eo$e-pVF2ec4U?W2P>Q0F%^`!Wi)s/d<4L95'6__l/rR ?VEpH*siN*4]QZub5_7n`NH/4PCRk"F`1tp6S'&c$O$V5rW!0(!sJrG8;c1$rt*SYKjd"V$k*FG'/*70 P)P.rJ+S*pAP=is%LWID!<N#srW+GL"UPSL'cJ2@0h#;eMP@Q,\ZVm.W.%u5)&X"n"9JZ-"VWOcHBX;C J+S*pAkXrt%LWID!<M`k$j-Y=$m%H6J>9Zufru6lVl$AB=u6`s#6Y)6(ah@9>\nP/H[GL7)gZgUH"',e $P+dbG+5k[a/,)=:.R>o'EeL=!r)a##95[%EL!iGr2U']@lOo%"Te_\!.k3&!.k3&!:'Uj&kdbK_:dXO &afW*">,5Uca9-f+TqQ@&HsLeOfld\imYK1IpY`#*=)]8!!irZ9RaY8M(o51!!E<.&/c\k./,+k)%$H+ !"8o</R4[\ce7:8N&hIA!!E<.&/c\a-it:o!oj7d!ZOh#bgbG,hZ@mE"82]q!uCMW"=GQD-4K_N$3:r? YMmO#KNSlfmJm:l1Q_Os!HT+,!.k3&!.k36!9=+n!<N<40M5&=A:pGfcEiC77P>S\q#E,M!X&]>5@A;a U!<0-lEGS/3@Z!Y(cP)e>A8V^_8OOGhW*52_S<FMLLs%+&-W.;!W<!/"Vr[N6;qNP]]\7qWe"5*#R^qX 0KMU&C5__g$dIMeiO=/**sVrO!VcXC!<N?*"U>>A%hfd#025VQCk@bM_YaB4n@*[0'*\UB!=9]!3^d"` MtF4]bh_:;[sUag#6b21nc/^l!<X8G%21'[?XS2:R'=Ejg;'A(9dg2H!sJrR:3;fnYl:pFZ_)eS8j"[I /6I+^_U\,Ss4j)Q2(':O!r2g$!<i`;*DU^>r4`K\YD-+C//SQP!.k3&!.k3&!9jIt!<N?+(f64?p?U&7 Xda8n%g`CA!Vl^I!soPW/QRG/aMZKjn]cJG%0d+K'.Qe#TtS.NZ*(78\\#JYX.to,@7)Uc$Ng,('*]pb I]Koe[B6s3H;?78%Kd>'@fqjpWi#B[#HtSCX*mSc#P8!9!WrQ0"pbPC&K<#N8TUQTj3bZLY0t\3U1?1u !W<!&&NF6^XK&/hT*ML,[&\UI,REl>#QXu.!sT5O+ZC9KOiQ(p]<\TKQu52>)%-NM$l0m@<,n%pU@k/X Tbrc'5T(.R.5jh6MPIDohX^EVCFoPf!!*,r!!`W:)CRUOI@C)9#GH0&%Klk8!oX-2!.k3&!.k4<!#,SJ )^msaQIZ#o];VZ\>VZQf"Tnf$!'(3!.6gm_U;4()MJ?'a4<Y">)(.=AKY.0^r7A?UV4jEFP*1rhG$7-V (D-rV!<E0#!<WK2(.a>;rr3PWX+atC'FkQ[#T?'Q[,'*E!3Pm`#Bs9/(C^f["TAGt!%J!M!sAc4#n%.P (ah:8@tpr5f"J/^Vg2W5(`="s!s8Z0#9-!P[,'*EXn8+gH!!!A%1NUIrW2Tj$j$M6"VE(D<H=>2f>JE1 WMQM@=u?ft#Qt2:*]6Z&I[$FmRe<3MRMU?T1Ck$G7qdg[^;Qk7E`#Fi.hi*f!!;oq#6u>1<HX_8`VcbA Me"gW"U"o.h#N$,JcLB&JcP*:#SKd\Tu#F<?P;c,#lu5jaj%JnN@>)-!"ff(ArO1Mj5&>3^p9YqI6\SN nGih&-;8m$jG>Sqq#CO--UD'aregH-"(!Vk!TO.f#VpJ$^X:orPXQ8fp&G4*-:(s`oSN`Y0+S*D!!`]^ HFV)Ji84TX-3NuB"9KWKMi77creLS>$i0i0&PB.`afLD.&cqD#!X:QFr8n$"(XiA9!.k3&!0R?C!##A7 !Y-nV9iPYUS\NFUMI&b*(^'L4*<?0J3*U!GOMC&Vkd,e;4Xh0O%4+)+:LA++]"5TP^C0&Yc*`L>4rXk8 "TnW&%g<_#3^QbXLV2g/af9nn0F/'p+ZDSS;eq]k^B!<nrs.\W>UBd^"9Ruk$NU8<1JUeMD24n'pAY(& aG!2%#mUV8$R%Gm7T4)goY1Cdrr35dSQmKK"p>"r!#kq?!>%7k=D32EWkmrV`MRoV.0]eT#7)_[I\?2F (tZWsF'1sd*@=d4RDRJ?r;YWGAiV=\%KcG+#lt2:%NeJfOh\^2_$A5fJPnNW('We"JcLB&JcLB&kl;Cu !WrQB:lWosld*)CRW(G$#mCD3q#DK<"q)"c:4Te$`m*N/bCMtl"pP56(d2GnZ*q0KXKAZ&XTuD9Lh/t& '*J16r;[K8.T:es[^``I\=e.D0cUZ)(.<EN[+X-Z\b*!/bNe6GX^Njhli7\#"UPYa<K>Aqi6&I1dG<3e G<ZuC!!a6,H*l8Xd(/eN#KuDph616?$1%Wp!X&]6*Z%\1aQM$h['$s/E^hW!$NgPD)C@^\L8+1>'rlsf +VYnA/jj-%TWl;fmJ"D6/cu1S!Vl^%"V2V)5@T28XfhZ,#GZ?'$NgG2!T=$1!.k3&!.k4<!#,SJ)^msa QIZ#o];VZ^>VZTh"Tnf$!$DFY+uDu6R_ZV3O`t)159pOB%20^?BVtD$s74%+WMlipWtUD-:G<t2%g<%; !WW6'"UGl7MVJ.1&CIP4@6,)4%h/mj<grjas5sBkoW&=W>":%L&.8^E!<MWh+9iE!.n"6Deb@P%W2FuJ 73*<a%Kut=#7)MSRed!`kI:)a$B&(Y.L?Xo#6Fo,mf3Uu'I,G0Fe6t8'>UcJVgV`*%grXH!Y-PA>^W3U ^@80>O(UZj&h$(QIA"*fV3cC.9g10G"9SZ*p])!5+$*SNS$p58Wi2koL1)nI"U"o.h#N$,JcLB&JcP*: #SKd\Tu#F<?kVi,#T@<hb/16K1'dUT#m;;6B:-cti8Whqjo_&@'a!q+#R_tQI_=`u0a@IS"U#u:E21k\ k4e!?]5'&,iW'<%<KO?'gYef(*<Z$9"U#u:E21kRjo`520acn?"rh*L][,Ek!d5pnpAb7)9=F?P!fSK- qZ$p26DrecYEWc;!U]po#W\14jlGL_CDPA!JcLB&JcLr6j8]ho!Wiic8ki8qK:Td%Z\i'Y0,Ofc!$21C $TM@&JWn">rT^Y8:,jX:"UQ)"4\K$pI?9kn\GX)LguI,5Y)I*h3%#LJrW*Q1"Vr[N6;qNP]]\7qWe"5* #Rh(a2a0]0CR4V-!9=(Y#NhR^-40q[!posp!XpVN:/bMDS&4t"rt!2(8/;I8"9JrS2a0]0CR4V-!9=(Y #NqX_-40q[!q-+.!<E652H*UaGD`?8l/'CVGu#jn!<WQ4-s1qkn@ogl_OkmP6nTB'<-jqJbh_aeh5>6^ 1Ed>4q#D*1#S._$<-+/:`66ZdfrB9g1*RA8jT'l4JcLB&JcP$8'EJ7;";jspde<"Q\?23=4q@r'!s/2t +9D`T&Kjhu[aN4Dk4$TD5Rmu#"9]8e8n`^2PanMFX/c*"$b<R8LhB4-'*naD!rW*4"tEQ#X1#OGXgk$M :GEh!!Z"1L"LQk8d(/eN#KuDph5t*=$1%X+!X&`7*DM$pk2FduY1)7T_KS6`!W<!''h!>Sg"F`_oW8AA lK6p+@4qrR!!E?*"U?"`:l<Ncfu:A%\XRV//K,!!"V;S!5\5\En?!P-K2`s+(a(7j@=k/U]$0%&^2c+: "9SZ+q#D*4&gTA.C58IbZFRir[raV9!<W?'i;eH0JcLB&JcP0<'Eo$e-pVF2ec4U?W2PDT1'n*f!s/2t +9`H)2GS=`^qHJ%DcBLp+UA;]%MU9^EhgOpc-+)C\#fM.'9dcS:I-`Z&IJ^G!s&K-#Sosgg]%3adAqt0 3YW&7%1=@\Red!`k5`!`WsXbg7k+iW$O6_6!Ug"2"Uu7k3+SN=s7=R@Vg2N8)]BJ$"9\l5#U3<<q>^KX \+H^.McrY$#nRIL!W`>j!!icB+YZK+S'gC4a0;G=I9JH<$O?n;%OODFI%\'bn>d@dBL!4C-9bUWR^U)2 RZ2>h:HBL!!s/Mu!#,\a7;.da^rraOS!T+L;(N(X!s/MZ!.k3&!.k3&!:'Uj&kdbK_:dXP'(#Z))J6_* ^8?rB#P\9)"Vr^bFe#h]g\g1:Zt_H5"S2U!$RSPr]]=o(#5S<'"<g0PUXK/(pZ;RiCG-%S!"'3#F-aDg i1Npe"8;d!"<g0PUXJes"1r>'$K;$i(gWZ>bh_.XFsdCd!!3X'[d`D\N$eZ'!!rrrUuTt?XGA2+mJmP) 6_!2of#tj&%+>3.!.k3&!0R?C!##A7!Y-nV9iPYUS\NFUMI&b*(^'O5*ruEF$oqR*JX4FMs6Hk59/Rt/ "pGSY.Q^C3CNkGpVu4:OdGj3BbI*mnAOn<_!WiB'"Vr[N6;qNP]]\7qWe"5*#Rh(a2a0]0CR4V-!9=(Y #NhR^-40q[!pfmn#pqo/9jD\'_YF-1&'0An'aFmF!=L&05"8IdQLqolj8T&`kFGj)$3gV7mf4:-!<Ncg :f:J:LnhfNhSl@;:FQJK!s])[=FQq4^DPS>T6"+%//B@,HCD[idG46HY's84.M`-^!#,MB'HT#1EfIlV h!P"!W,FpP*Y8G8!.k3&!.k3&!9jIt!<N?+(f64?p?U&7XdX2m%g`CA!Vl^-!X9#D+&.3ld`U2.oZqnK %0ZY4$O[n+5u_B9K9;UuWVik+[CNQ<LhTC/(_-cPr;[K8.T:es[^``I\=e.D0cUZ)(.<EN[+X-Z\b*!/ bNe6GX^Njhli7_$!sAfE6?B*TdEK2)e)&NiG<m,Jr;[';7!Z/mg!I;%XU!&7k2!4L0+$tF"9JZ."W8+O M9YYKagS@_RrUtM)@HWN&/ll\AVQrKXVe'h;B6;a*@<gRJY0-Q^WYNDG!$6>"Tni%!"]>N/3m?[NMEYc bM;I)FuBR'!T=$1!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ^>VZTh"Tnf$!$DFZ,re_DSAMt4L1O.Q3ZeV3 "pk\V01]W&OJ9"o`Pf7`WtV+_HYltX1EI/<#Qk)0"UGl7MVJ.1&CIP4@6,)4%h/mj<grjas5sBkoW&=W >":%L&.8^E!<MWh+9Vr](bT'\k5YJ=\Yj^W6PpXS%0Qb:#7)MSRed!`kI:)a$B&(Y.L?Xo#6Fo,mf3Us &KWMlCRNT@'@*t_VgV`*%grXH!Y-PA>^W3U^@80;O(glp<\@EgO)JW1KB<F^@H["TAK'!Vl^0#qA\p UV"atWgf)m=].L1$3UG4!Sma-!.k3&!.k4:!!j31J>'g4h-^l_!!jNV^;dXRL*d)t!!WZF1/`@nd/<#0 ad6X.*XD<;#R_tQI_=`u0a@IS"U#u:E21k\k4e!?]5'&,iW';i/6RM)dGUZn)?TX5"U#u:E21kRjo`52 0acn?"r::(YfPSV!d5pnpAb7)9=F?P!fSK-qZ$p.4JCikcbcV@#O_X"!>nS,jk.GPQ7`Bj!.k3&!.k36 !9=+n!<N<40M5&=A:pGfc*N:67P>S\p])B:!Wrlm>\AVUbk_;)X`[,i+qk+^"q2+d0gnoIEeL%^^E:>A i8WnTcFfNZ58OD(!W`H?/NQ3sB8=._iQ8*N="jmg$R%Gm7T4)goY1Cdrr35cSQmKK"p>"p!"&`4+ZVn^ =Da/:qYpL*a+Hkr"pG,1$R%Gm7T4)goY1Cdrr35dSQmKK"p>"r!#kq?!Y7%\:KD4bTu$!M`MRoV.0]eT #7)_[I\?2F(tZWsF&t[X'H^5!R_Zh\ak#1RMdJt-(^'R6'Eema-951JNPX'1rr;,UAi:nO%0P\lJcLB& JcLB&kl;Cu!WrQB:lWosld*)CRW(G$#mCD3q#DN="ptn`9n'LubM2O[c[7h_!WrH*"Ul(c.R$gFI#OPp r2g@0[(EfIN,2-=)@HZG!##Pd;gtdU\@&HKTR'Bg*"E#c7!SpBg"F`_oW8AAlK6p)@4qrR!#,G8!Ws#p As^<P_RZi"hpTDd5oKe&!!a6,H*l8Xd(/eN#KuDph616?$1%Wp!<N?*()K`&d.QME\$!92E^hW!$NgPD )C@^\L8+1>(oi-a*"NZ#+Z3JRT<>H+\&5Ir6kg(9"9J;u'EoI59kSp?Vm!qlo(L=O1^!gZ!<M-ZJcLB& JcLB&m/Rh(&0!#_B9q*JiOc%eKj6A>"U+u/q#DN@'dl"=GFl[aSq16B7Pl.j"pG28$l:-C6X+c"Y.V]c r2UL-SrehN>XBeV'+>$F!sT#H8;c1$rt*SYKjd"V%M'!V,$(0.s8V6^\+H^.McrV#$4mRM!W`>j!$D=H #nA4]Qg+PMnA2#H>!a#A'+>!G"U>;W<grjas6$l`WsXbg81FoW$O6_6!Ug!o"V;V$5\HG3q@hMkVl+rH 1_0s""Tf/\5?rT/]"[[7(lrAs((qoS;J_N"^oF3%S!Ikd-jB_T!Wi)s'+?KqMRUd`bc$nO;+Nl')@-KJ "5Em.!.k3&!.k4:!!j31J>'g4h-^l_!!jQW^;[FGHQ`La!!NB1+\7!rr8n4<a0:h-+p[c@#R_tQI_=`u 0a@IS"U#u:E21k\k4e!?]5'&,iW';f*'n8-bM\pc)$9O4"U#u:E21kRjo`520acn?"qsgiW5REI!d5pn pAb7)9=F?P!fSK-qZ$p,3M5Ekgt9YA%dsB)"<q!MjNXfbC)6p"!.k3&!.k36!9=+n!<N<40M5&=A:pGf c*N:67P>S\p](s.!Wron?"\_Xd/<q0X)UK[+;"bT!!`]@+YQ,iHBn?A*PfJ[rqPWrOB!D+!s/K,(+hR6 ;eLlukMaO_JQFN2$k"4;5"8IdQLqolj8T&`k+,a($3gV7li7=r)DF9B<bm`4qYpL*`e$Yn"pG)0$R%Gm 7T4)goY1Cdrr35dSQmKK"p>"r!#kq>!Y$eT9iPYUS\aRI`MRoV.0]eT#7)_[I\?2F$eE1dF&kRU'-0tr Sc-;/_:H8dD,E22"Si$3"V;_.4]u`a_;+nes6,tY/fYN3!p'E6!.k3&!.k48!#,G8!sBH;NRIOdca^*G E'=d="Tnf$!$D=I$4n:RI^RVJht?`iH8u94!W`<%!!**))`(3"I?^T)XU2/4_7H7a9dp\Wr;[K8.T:es [^``I\=e.D0cUZ)(.<EN[+X-Z\b*!/bNe6GX^NjhkPu/&0j9:4[^rlLe_einG<m,Jr;[';7!Z/mg!I;% XU!&7k2!4L0+$tF"9AN)!YcGEMUD.`ca^-gRrUtM)@HWN&/ll\AVQrKXUD%V:E']R(E>,2I\$G>#d1%Q 9-"WQ"TnK"&I0F@=`fIjWisV3p@cmU0EM7R!T=$1!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ^>VZTh"Tnf$ !$DF[-ot=PT>J73I9B0.1)pK#!s/K)"9o/J0i<%\YeS'OWtDA4MJ5X1*>oCl!WrW4(.a>;rr3PWX+atC 'FkW_$R/W?q>^KX!4VU$$B&(X.LH^p#6Fo,mf4I2!X&ZE:mC5Es8C';G?R9H'b^uY!sJo8,$(0.s8V8k oW&=W>"C+L&.8^E!<MWh#R(\U,WfP#e,L*?];VWU=u6`t#R(8>-9ka_TXql,Wsb&)65L:\3)44LXhOb7 #cE2T/dDL]!Wi)s'+?[+S'KjRdAW.283S=A'*eU@!o*d-!.k3&!.k4:!!j31J>'g4h-^l_!!jQW^;R49 EZ5,P!!<BM>HRba"m+gF9G[g)!!irZ9RaY8M(o52!!NKK6u\pLroWt;"1r>%$K;$m!=p_\M8\>C9c*p* !!NKK6u\pLo]?7fCG?1U!!X!-J>'g4hZ@sK"8;cs%SO8"joUJg!W)iu"ZDqMjoX@L(@V;2!=CDhZ/ich C./BU!.k3&!.k36!9=+n!<N<40M5&=A:pGfcE`:475#J[q#D-1":,AS7:L(kXks$VlD\Yd/0>K.!r`3O ":Q(j1Jr"ESsu16PFeea^$#FqpXP[;.16Fc!X0>k3^QbXLV2g/af9nn0F/$l)D!p;<c!]dWtW:qeC1RC 73)U:!s&E)!sJl4"9S5r*<?Eg2F'f6CQH@/s8W);JjpCX"Tnc2)D!p;<bmWcWt3"meC1RC732a@"pP56 !s/#o!!+#@"pc#.<E<RSMl=JXhoD[C;(;bO!sAfM8T9m`Wu\:@Q?ZP"1*7#D88EC6Trtl@iR"rnBh'NX !s/K(r;[-.)DFEL?Z;%Ajo58bgQYbe((UWOjT'l4JcLB&JcP$8'EJ7;";jspde<"Q\?26?4q7i%!s/2t 8H]G9*\^cO[)L)Gp@cdX3!THc!<WE*!W`E;,WJG(FG6$MTV\`jXfS\@c+Tlj590q/!<<*(.T:es[^``I \=e.D0cUZ*&2RSpLS:<0Re3!SU8b#[F%%5V!!*!"qZ?g"pAbj-!W`ciAs^?S`4N2%gX*ZV58XG"!!a&k ?&,&DSXT2=&#-&#S9%+B"onZ+!sA`/!qZHq!sT&B,o9UBcL'9&[B@'0E^hSu$NgP@'HJo(CP_MK)4H.a 3"cK(&JcitK!E"uZ`pU>Q"rQ3(^^?C!#5M9!Wro`:2l8dXKeqTn*]MH?ml'VrW1sXJcLB&JcLB&m/Rh( &0!#_B9q*JiOc%eK3U&9"U+u/q#EDZ)_t-%MlOb!R!;Y'4tmiZ"9\c.!sAc4&0j24CO_J<VQ[MKbJ(<_ WfLpl/gMGM#6P)6#Sosgg]%3adAqt03YVu3$O@V6Co>@jZ2gWkQ3qe72])u5#m:;3"9&E'"oSN'!r)a< !X/i>,?C)os8VZ,Vg)H2()I\p"9Sc1"rTU@Vocc]U@a`WG#UC;%M&mN"T/?&!Whon#R1th2GJ=ad,bq\ YGS4G=u6`u#R(8;*&'lfFbuITQ5Pp5<\b6t*\Tc^JYg2_Vkp>iIT\H8#R:J7r;[W8":#2M5B*UXkj-Ej L/pr-+<1ss!s/MY!.k3&!.k3&!:'Uj&kdbK_:dXO'(,`+""8E<afC>:)$9@/%g<n;EJ9mc_T^Tej0iAC #PJ-'$RSPr]]=o(#5J6%#p2$!A,^B?D?EQZ$j#>f$3D,/Asga!SP9n$p&G4%+#Q`%oPOb)-4Bq8!!`NF @@jsQh;89W-Nj)C!Wa$+nSSDF1'dXU$3D`9eCrg?hf9nBnGin$,"[7"j0sD/,QlHpJcLB&JcLr6j8]ho !Wiic8ki8qK:Td&Y_QFN/f4]d!%J$T%2C3bBlocXli7"LVJA@G*YS_[!WiB)#S.Xn3)=(0I=HZjKor7F hZ!Nkj.^*>'b1NQ"Vr[N6;qNP]]\7qWe"5*#R^hL+"]TN@!2*q'8qp4NH@rM'EnUA!<E</$kE^N"SMg: !<ENQ4[r%GD3Mj6s8W#8JjpCX"Tnc0&g&\f:LJ>;Kb'*&O,\6X0baiu$47.H"U"As!!4)C#S&%M?t+VB RBjZqiQ8-L;C_qP!WrQ>1K8JfL&QfHHY?;@0Hq5='L#f1GDDKg_!^F7[tn6E&-`7=!W<!)#pMQ-;dja5 _=.C'#L\Q-*tSe`!p'E6!.k3&!.k48!#,G8!sBH;NRIOdca^*HD`eF6"9S]#!&=]h+"ouoMmBt7jnSPr G;]U*!WrQ/"9SZ-$l1'B5>bd,I#4,bW3!)&_V<\eQ<,L?!<*!4"tEQ#X1#OGXgk$M:GEh!!t6D=!F0O4 D\I#&A6_VV('O[=!X&Z1"pbM>!sA;u'EJ7;!u!n?Wn5eH]WT]6bI2=P(BOI7":HG=>]0(M%rQ)l>Xp=[ "T\]-#RL\<"7uQr":Q%f2A]kba4&&>ZECa,E^_Ms$NgM:%20mB9Om[4rbr][5U-[@#7:td<JSHEb.P$_ `3>>96739Fr;[Q5!sAfB3FRiM[^icJdH'38ND:Ps!T!g.!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ\>VHHf "Te`#!"oM[4C!B.\B(S6E_o7e//e]q"TAKJ"9\l7(*kY&;e0s$QE8*jg<R++P%doX-mBE5"9eu8(.a>; rr3PWX+atC'FY?U"VE4UBn(PU!-RpQ%pVRV'b(HR"9Sc2#7(S>#5nZ!!$DCM%i6d$RHOVMjgq@9>sK8G ((CBJ!s8]>.S4?(I<]o,E!KZ</f,!*#mgM6"9Sc.!s8)p#RDA%7U_%MbeOmtW26D?>;Zs##mCA8'Hf(o :L7l/E&VZPD-/qF$k!jt1ei+`a2bTfV5J]D2%U6*#6Ou-!!!-,%i$KgJ%"k=iOl+>>tZjm)@luR!Wh'V JcLB&JcLB&lMq2'97W_Pg"g!ImJmP#3/Z;0W.egu!q61"#8es\AVQqneDe;g3Y;Jg!!irZ9RaY8M(o50 !!<<.$k`ISpD*f="9IH]$O%nTH)AsHS4j_#!VQKq!s]5HoG.K:"9IK^#6ZZ+]ZSjahZ@sL"82]q!=JE6 !u2Ob"o/-*!?c<ga49,*IkM#s!"/iH6u/=9j/ccD$3AQTJcLB&JcLr6j8]ho!Wiic8ki8qK:Td$YD-4J /JeNb!#5SD'-B#/D18_8n,NFOUhMk<*>8\^r<"PR#RV+^-T+:k@;'@rJsa.#rr<#iXDL$>'b(<M(+hR6 ;eLlukMaO_JQFN2$NpbJ)C.%#8b>jd;Gg7d68';d!Wr?%#6tYN)A3G^!VcZo!?;Ir6:agSEgX`@s8Vu7 JjpCX"9JT,#n\($0g/,#;%HQ%:esD2*=E#V$kO$\#Qs]!!!=/F%i-`qC3#W6Y.)77j3+TU<%J4S!<N?3 *AL"P;&i.i0I7\Q%0dA#:fCM7Lnhf]rq#*JE'P0G"p4o*!#5PD/PB)EA:'rbq>^Kl`e6u&$3gS5jT'l4 JcLB&JcP$8'EJ7;";jspde<"Q\?23:3t)>t!s/2t8Hoq\5?N)kY-c70p@cgV1Bdd]"UG>:"9JW.$5"'t .lKatD1\1NWN<5:ip,[BDDhh%!!**).T:es[^``I\=e.D0cUZ*"Vi<c2*O5ho0F$R3&E<8(C^HI!X&Z2 #RLhI#mLM,!#,G8!sKH1I_G%.f=A'2eAne.3u.kq!!WTA,rIkN5P%/O4ubAQ,o-mk!<`Z:%LNCCoDf!u '-]/'(N5JM]XP5OY.0p@74T5_!s/W1$PFO33Uf<N1a3S;!sAf6*)_dCo\mp#Y1(h3Rpn;kqu@H5"9o/O 7<><Qcc3Dqd+$.AD*/X9!T!g.!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ]>qcNe"9JW"!#5eg8TC3)a3LHG Dbih].Mr?n"9\c.rWF>J$P=7"/NQF*FdK]$leKFXQtTMj/12>D!sJl7(.a>;rr3PWX+atC'FP6Q":>nk 3CQA)!(?HH'/q?Z%L<:B!s/W3%1WgR#R:J7"8Dj1"Uu7j3+JE<s81<OVgD`9)]]b*"T8B,$5OsK77BU4 oKrd@.2ra($N:>1"p5#3!X&&p#RV\8=*Kt:a/TfNV5U;@>;Zs$#mCA5$ks^./N#`a6T@@t5X$kF'*\[R *[s?eQ-T*O[&9gJ=Z-m+&./OA!<E0(%2g?K?B)ermEi)9Hs]8_*Z#:h!W`>W!.k3&!.k3&!:'Uj&kdbK _:dXO&ao],!>S.phT;^K@1`P.!"B#E03!+ea5G('>;6Hcp](R--;8m$jG>SqnGq&=$OSk*MmV!lS4j_# !Q+mB%6p30g>CrJ!d5sof`2?o<KO?(gYe/V%fu8%$OSh1PIT3'T2$:,!R^t"!.k3&!0R?C!##A7!Y-nV 9iPYUS\NFRKig\o(BaI570F)>-otILMS@[5s8V;WAiD%V'++mH"9S]-!WiH-"pk_a4\o0mG*0;[mf3=d [<=na)\E;Y(+hR6;eLlukMaO_JQ=H1$N^D7#n%=[)t4mO)%m;Z!WE')!XTJZ,T74!!VcX:!<E6201ei8 @Xt#dqu?]l_h(>k"p=u.!<WN4$P=*mn/_rT&dngE$4dmj°7!!!-8$PXU?>BZ%<]=bkon)V`tK2sQ. r;Zp&$P=9I*YTP7)ANko$3pb;$n=Y7:0Dk0_=dg-+NfF4*=`AZ!WW3$!=q+g=^u]7W5AH3qWYYA6kBM( !WhB_JcLB&JcLB&kl;Cu!WrQB:lWosld*)CS8L@r"p=u.q#Etk*B-i2JXELB`oHacc?(fD!<WN5$O-_8 !<N<)":#>J))P3-MOC<AX1R-Xp#h3"%0-A/!<t#PI]Koe[B6s3H;?79%Kce;$j.+W'Gg9T'GM/j%LNFC !W`B,#7(\G%h]<W"9J;u'ES@?"rg?sdIlkR\$"*)_5_--'`n75"p5&;&eu)ro+_cM&e>HY#6P#0"UYkW %LE:1!!EQG/k'(^H'GG7Y-+n0\=.D*.MrKp!<N?+"UP\1(&\mL&I\pD!YPS;(/KtBqt/OQY1Mdne;6a: !W<!4!X/l>,#X36lINk[Y/eAXKi'?4!o3j.!.k3&!.k4<!#,SJ)^msaQIZ#o];VZ[>;$3b"Tnf$!'(E= <f+9,fZU1YC/%)R.2N3m"9\l3!s8T*!WrQ/%Mp6?:jJtolKccrRs%Uu3@c*Y"U,,:(.a>;rr3PWX+atC 'FP3O!sAl<&f)6!!#Y>E',1o_#6Y,2!WiQ7&JYoh$jd.@!r)a<"VDb*6>;qCs5q+sVgDf<*Zl:2"9AN' !!EQ:&Jc,u)"\UT'FkES"pYD>#mghB"pG)2oDf.*-V/!5WkZBL'</"3Vg_i-&Io-P!WiK/$P!^](%`;$ ()7Mt%g`CA"Uc"c0jB^js7F=1W-MQ7*u#D!"p=u.!!X&Y0M-5Pc/csPVl+rN4W>CW$j6S3gAlg*JcLB& JcP*:#SKd\Tu#F<>nQN*$3he]XQ.?uI9[<am/ROq%5(M-\)5W9K3T,np](R--;8m$jG>SqnGq&=$PGsV T"it:S4jb$!Q4sD!?5"BjQ,FahZ@sL"5*Y]$pAEi\(9T8=<Re<!"'QJT"*#"i/g/7!RUn!!.k3&!0R?C !+>m0!Y-nV9iPYUS\NIWNaYO8)[?EG!<E6("pPV_2F^SVH'cA(rr<#VRU7`m*uc"5*[2sZ*Yo4j"pP57 (bS-M@WdU=cKkK0rjR)?-QE^("Vr[N6;qNP]]\7qWe"2)#R^Y8!sJl8$P2b=3Y;l0"TeZ)!<NE?-Tb!f 2(Kdf((q)c$k!CN&JQ*47o`MqFbus3q>U-NY]N)@"Tnf,!<WE-"pkYJnIQTN%giLC"VDh.2D[!:-Qj9? $jm@K#71bH%i5Er1db5YJXubS#f5ZT]p`t8-O0ML!s8]5%Iao@%L`[K"U"r0#pMGt7oO)a_<1as+Q&o. 4XqQg$4%%O'IHCY@![WrYeg,/kgH5C3t28n!<M9^JcLB&JcLB&kl;@t!WrQB:lWosld*)DSod@8$jQq5 !_ib##7D>%94rd:TW>9<lLF>OALRW^$lLHB*u5=m#6k;5"UGGF-q%HkNh*,L]\;rMmZ'^H!!!$#"tEQ# X1#OGXgk$M:GEk"!s/T0!XT5And@/Z#mU\=!s8T+"U>DI)'LLd.3TTA%h&dN#6tM?%29m55Ad"Dn(Pdi Y0+Y_McDAB!rW*&!X&]6$OZG4":>G?#6t/0$3_"a0KCa0(_$iZrWil:"pP>?%1sX:8mcZAM41OEXUqY> O(1$j'*nX?!<N<*"U>A'$S_qm!s/K(!Wis$ID"n1hS65<kiUj"@5/,m!sA`5&fiAbC6m#oah+j\^T*&r 3?JY2h#N$,JcLB&JcP0<'Eo$e-pVF2ec4U?W2G;S1(+<j"9\W)4p(rp%1j[NDP,##h8cIS>u!^<-l<6r &/ZW9*#&ql#R1D7#S7ao6>2e2g>LG[RX.h$4=qQ^"U,,:(.a>;rr3GTX+atC'FP3O!s/T1$N:G)$onY# "p4u0!s&N4'HJJH-RgJg)AEYh$3pb@#mq+V,rJ2$K;m\mag.hBI:,8[*>Jtc!<E0#!X&`8rX8<+'ab3N !sAo<%hoj%+se9I'+bNY#R1M4#Rh%N',Dr_@u7+n`O`,LWt;1Z=u?fu#6P#/!sAf5#mq%3$oJD#$4-q@ !s/Q1%i$HfK>mlihQj)9?;Ws>-l`d,$OR1Q,s"k<NN^dK[&Kn#J6kDY)&!>Zf`6U(JcLB&JcP*:#SKd\ Tu#F<@heD4$3qVAHGAOVOC1'TlMq:q)*Mf:hU8ZeAJt^H!!irZ9RaY8M(o5)!7_&W"Y+)O[*%1^P!BW] _uKoB'013OrT4+;!cfFcf`2B`-;J`]d,VT[7NVm.!"&rdHaq/Ji8B;F$IAd)!.k3&!0R?C!$qXI!Y-nV 9iPYUS\`adR;Z%c+USAV!s8]4$ka^F;djEbKqZ?Jrr4t/P#j"R+X\cs5u(]h7l2A&%giOF'du+4??1n4 cKkK0rjR)?-QE^("Vr[N6;qNP]]\7qWe"2)#R^Y7!s8]3#mp53!"/]5!X],7rW+GL!t$>AA:\o<>YdaJ 0I7h`*?$"K1HeB7?s\,7QE\3so&@i]AMsr!!r`3)!WrN.#71_/$NLP5$Q09V"9SlJ1/)%_@UihD5VO<# )&3f#*$H[e#"_s.DLIPCrP&WRgrQFF?U#\;r;Zp#"9o5($iUJh#R1G8!s/N/)_jKD;eCs(f(]4EmCSEi :-'d='ceYV6<If5M3XpE_X6C.Z%cC8$3C80j8ac3JcLB&JcP$8'`e@<";jspde<"Q\?;WU:*:;]#6P&, "!@aU'-&Mm@sjK2VlHoGkN(Kd<$DAK*B-ho6oHG7'b:]O#:Tod+Zi\CK9`76]\;rMmZ'^H!!!$#"tEQ# X1#OGXgk$M:GEk"!s/Q-rs&K.nd#@'"p>#1rW4JP$kaL04],]i8N\XS+W;%/',)*&1.>AeOg<]nah4p] ^p&u;6R<6Fr;[$'!sAf4#7'f*+9r)R!s8Z/$R.`<DHfXj-mBZK&eYcf&/?33/Nm!EHA_ilUoF<p&?_s_ <$W4f"p+c*!WiH,":+K'1C4?l"9S]+!WiB43+\Jqb/q<!^Y7o7[s:Uj'bUua'.,\5A:gSu`kAgcY-aL4 6RW]U!o3j.!.k3&!.k4<!#,SJ)^msaQIZ#o];VW\?TAW)#Qt8/"?m"u'd,(pA;RVCf[RL2KO.J:-mTT9 '-oY?<C/Jh*>T+i"UGPL)*)#]]$&dXWLA-17m&@D$j?e>#Sosgg]%3^dAqt03YVr."p4o0":+o3o*@)V "p>&1!s8Q,%im2^6VLN`90Y*U+<)(1'cA#9/jWNVLS201`jDbBW.A;=)]0.o!s/B$!s/T.#Oi!F#6k;6 "UbnZ+YGlN<(B#)-QsHE&.fHf'c\MR3_sIEU:A+[\#]M/&#Y"a2%9ir!s/K)"9\l3#Or'U#6tD7!s&K. #nA%GFgCZ4ke=$`F'Vd;5VO2r(Ddf24BZrsYf5+tWi)_lJR:PX'Fb9Lf`6U(JcLB&JcP*:#SKd\Tu#F< C)c[C$O.nNEhLb=ZZ//G"R?$q!=UMaT\\&$Me*e0p](R--;8m$jG>SqnGqbQ!W`K+o)K1"#:39+\&d+X i.j3!f)PdQn,NXn#p;HFS'_,r!8[`k*7t6"!>7+kOiQM(TlX$O#kn<,"<^U0b1,5*hfpUSciAXtJcLB& OoXPC,ln&K%PULL<+LWP_:QQ!I9o5f%gWCD":#GR+>Zr2H%:g@ZGQ54s#A2Z:ELQ(1HJ-=Jt/0L<&Ys; &IJ[S+Yc&\DhkgIli-q`[s(7g*"`G[(+hR6;eLlukMaO_JQ=H)$iU/0!WrN-"n2^N"Tnf,!<NB-%lRdK WMZ8PM0*0$4uY8O/2Tdk<ENX?G*&2n\&%Fjc*;k$0*q[\!<E*""9JZ-"9n9!)$L0G!XgDI@<76jU83T\ :H'sX,p=Th3C6UJAp&QWOJ'&\^Bh[(\<:K!1E-Jq!!<6("9n9!"9eo2!Wr?%.0UD52*b/ULqq-cmJce- Z]fN64sV=-5=\OXC3uSQZb"!2c`rOG7OA?=!TX64!.k3&!.k48!##A7!sBH;NRIOdca^-XKj65R'+4X> +p\f(01&uiOJAbSXKKh&d_g>s)?C:$<doR8>"Uk,*>/_drWX_g0hGl#O.r\fg@Ft*N^XHY!!**).T:es [^``I\=e.D0c^`+!<NAl"T/?Q!WiB)#S7k"5$<#iK6:g/838LN,9e?X2,eFSW40jq^q$hVYIU<P:c'.$ !rW*#!<NAl"T/?A"9\l?1gPm3MfW<#5;Xf3*??(;,;DDW?>tL[T)tjiXSo7-Y+Tr-((CNP!<E*"!<NAk "9S`/!Wr<$.1@_'GabS;[]ZsRe)A-+Aj@so)A=2R<cX(hZbs;[Z*1=1Kioc@%L*!j!.k3&!.k3&!:9be "V;V$5\HD5s5CSgVh8A>'FtTV"9\l5#nnXF9kK*Q_:d)OY,?eY8gbo.(CM6GA<`-m;a2lZ)%?fV$4RV$ <.(d^bg`\^H;R0p/KG6'"U>;K8;c1$rs[;UKjd"V$OI">!<NB%"98Vr">9iZ!WiB'"VrLJ:h4]uJSngj 4uY)B+=&Ek2b.;(RBXEIbcIb?W2>,O3YrA;#6Oi(!W`?)r<**(ncU0>!sK/O+>?>qH%9^::-puo,o[jH +XJj/<+p]CV7OO^\u_t3Wt2+[>VZWj"9SZ*!WiH+"9nB"r<"bW!s8Q*!sJrG4)(JBion[fT9Xn@AQ1uG -RL,c2ctR0bLk\!Vl$>jVh/58&e,-N!ndR*!.k3&!.k4:!!s92J>'g4h/FM<o)K1&,#sZ(a4oOL=sO:R qZ$a'%1*.<o`,=%*DMgTd]n^A)?fg8#R_tQI_=`u0a@.Jkl:nk*^h@h"Te>t%1!q5>D9K4f\PTFHn>QU !!WK=0cgl1!VHEt";N[rKquZ@rT4+9!Fuqs!"8uI6$L')fYt%[8KA!2!"Ar;,=d'hg>1`KhesS<ciAXt JcLB&OoXPC@0$E2%PULL<+LWP^tHi4MJ>a9&do!M"UYtg/OX&qOfl1(]YaXIs7='Z8/E*n4$HA_Z.@6u G>0Y4(_$WZ)'q"8DMGXGli-q`[s(7g*"`G[(+hR6;eLlukMaO_JQ=H+$NL2(!Up0i!A"3O!sJoF7W4L- daZOZW/bn$:J!r>93GM"<b-TH[^`o]_;WhOQ#9,=#6=l(!;cfd!WW9#!Yl5&<F91(bMhHrRr_:l4Z+lP 6r6ln#'>QfY-tpTr4`KWWI.K'-kuj^!<*#g!rE!L!!!-3)CROED2l<H`5]mfkh*eHH;u^T78Qf\@W[pG ]"Gbme%1fZ:Gj*q!TF*2!.k3&!.k48!#,G8!sBH;NRIOdca^-[O(^[+)\3/O"&0.B018ucMkR5PXKAYQ bds?O1_]p*6[,Z;Oa_C\7P5Vl$O6e:'.H+EDMOg`]\;rMmZ'^H!!!$#"tEQ#X1#OGXgk$M:GEk"!rr?& l2iL;!<<61'Ho,-F-<Z.V3ZgQ>=gb01,C[ZFIpbBjO(QCYHP+3Z&`NX,S^XfquH`tl2hq-"U5f6HF2G< Ul]k3:d6Wc.k)i&7p0YTMjpWH!j&H*rN-@.RVY"n"p=u/r;ciuliR1fr;\8P+$<\KMk$cKY->1:^8Hcu 9/n@@/Q-Y[\%TSgYHP+2Xe0`)'at<L!Sma-!.k3&!.k4<!*077)^msaQIZ#o];VW\@mCtJ%LE7A#RV"] 2,\FVW4^3VX/W+sH!`cU+WV=.-ruPmi1"RZ4#.um#R:VA$788]S$^2_X."?37m&@D$j?e>#Sosgg]%3] dAqt03YVr."p4i+!W<)h!r`3N!!!3C1eh\?U9:5KF^e-=69-\U4\&C_K;-Z[iPV^oW2ZepIp=lD%1!(= quH`tliJ@3"VD_&5@]PS_2*,>;,'D9-n6l(1e1r%S?TWC^Tjl>W2oou$E&P^0*VO]!s&B%rW2?e0ED1S !!*-&%Ph:R_pdPjX/MkgTS$oR2)I6L2+r(jkPtSC\YuL-Wi1SW1CFHk"9I0UJcLB&JcLB&lMq5(97W_P g"pp%"S;[&!ZY%.f\G?Ci0HeG!rDs%"WfN`,n:%M!!s9&M;6OaMe*e0p](R--;8m$jG>SqnGqhS#m);b _1YZ:'*n[9!"KGk>CW<Ze`,WMjkk)'"5*Y[%o%t(8gtAX!Vl^%!tHVKHFDDYhW"Lr!8RZ_&D$mk!=1/_ YNFm>@NK'a":5%07%p;L#(dj5f=`hIRJK!.k3&!.k36!9=,M!<N<40M5&=A:pGggX<m7Lh]X?/1N"n /3$$l>'#Im^r"%1cMm_,eYR1I&/HcX5YQ.0mHVW[E)/h\/gW,.5XSn&Mn.1&rr3bBF[7;l&I/IU/iuF" BSX7`iQ8*N<\OL]j8^V0!sJrH96??4gZ[hY`N5;OEbf8qAo)$_C4_VO^r4=?hVuJHG??pJ"QKJ!!<N<6 3ETI!Nna='gpr\jB4"e>=^boUDutKKXo6!C^qn=LhnPIi4Y.Q`!oO&-!t#\^0MlG-TW,9.^Z=qNhS5P' <)[+2>$YruVSL'nf]1)NGu-UO'a*CpJcLB&JcLB&kl>2o!WrQB:lWosld*)DZ^cJL8N81>)&X>3,reP( E.sXWY->4>]@49SCdK?T!Z=RZ]#CD(PD<dI4"M^%)Ajtf;.Os2U9))co_.^76k97t!<EBS;gk[R\$`?J TR'Bg*=`2N!9X>2":H"h1L#3pXh)0QV2fh5=&Mpm:h>HhjlOn)Z`^O<\]:n';C34j"p3ic*<H<H"rg9k `oYLZY+:,^?;F3d7RU*_EIj1>VQ?p!XUMA8[^3H%?7c?`!s/P^!%A*g/4!E]OK5^lY-"h;[%W=n=@YDD Bo0.:`kAUZYI1mMP%-BX"p>#0h#N$,JcLB&JcP0<<Ws$R-pVF2ec4U?W2GJj;D^$U,97dJ,q(cQE0@B< a1SFKTq.Zm<Atd9)&*K0@]05*\qFKc7m/LM+s8!P5$WW8\]E$qR;u%j2C9=M"9f#9(.a>;rr3;PX+atC 'FP3O"8W#`!%A-n2H4X[Z,<Q-J8en$=]A'l>%V](S$hG3]r\'1V4a?>Dc/8!#mUP6j8^/'&g&YmD3rDs Q[Ng^?Wg5q84u`WAUU#XbL+J<rMopt$DsGaO)n,E"9S`-hZ,)3.8=uZ]$K6>Y,SG%P'CA+8P`5_C6?:2 s6\(9WMH2UOE48L#m:A5!SII)!.k3&!.k4:!"'?3J>'g4hi0l7!VQL%"W'@I_r]k6gX'sl$2OW-#pr)I 9Iph^!Vl^'!<s]ER,$&iJm&ijp](R.-V]*'jG>SqnGqhS*Wn-Xj1L%E1EdA9!<E6(!XpYaLoA):hrWbK d(W?jfDl9sA>Z;O;(s+("T\Z'!!`N2)(nR)X4I73"QS:_^S(Ze"kEYq!>Iq_f\><Ck-ASR&.&L@!!*Tb =*pLQg#Ll8_5BC$cN&OsJcLB&OoXPC7f`Ym%PULL<+LWP^Y%5e`2o8UCh7*a?Y!hfDKLGmWPQU%h!Y+! `M\,`0+8LC4$QANVsX62\sn:sEFrNfB4kguKUKC!o`"k+ZZ&&M((LNP(G@m><G@<&kMaO_JQ=H)$fh:: !<WK2(JAk5^sM**kg[GOSWo1kKS"YnD1de>[)()LqZ#KZKj-nq(B`[t(]a[>&33irBn=:qqWH&+QB$`P I"$QoH@>pPS%&@2%)LZ[khiRp;Cih&$3K,c.09__'-fqPBQf&pXhNEUna+`5RXTO/EbTB?OfuURlgErJ NaXt!*"E&/!.k3&!.k3&!9jIu!<N?+(f64?p?U&7Y-k="KQLj1:egp_8lK/8H%hHSW3<SCbM:[CDaGif #QYf5HaU_iQ_^C7G\LDb;bfqeA8lsVRAI"$j7`38O@0QY!!**(.T:_o['m?D\=e.D0c^`+rW)*].0L"p +Z!>LR]a05]=4T"Km@f^Ec6Gr\D#9H\?W3IbM)$VDa+pE#6Y(g!$)+C"U5o?L;r?'^q-Y;N.,qhDJX'- I#!iQUoLGsriHU3\%&`<F%RSY!s&H(huG2/%j!>iA:pi&_munO\%Ar@Nd>MOCkA%`a2#?hYIM<ZXF!_k #6P&0!o3j.!.k3&!.k4<!*077)^msaQIZ#o];VWkJ8/+c<DlOe;H6k2HBP>Da3(liSsYU`?Uugd'bh2e .q>RYs4WrdAn,1L;Gg:f;JC]R]>i(5WL.?k5V!ii#m:G;#Sosgg]%3Zd&Vk/3YVr."p=]%lMr@=*B$l9 Pd/-*SW85@EH,l3EdE@tRA[XD]<8'/W18`cAQV>I$j[%>!TX5""VMn.6uA:5fVaRTG'%_?BPVL,GD;Hb _pQfFr2Tgq$CQZpCfie>"9S`-hZ,)1+#m;GR_7_7ageIQRtYroASuO4Lo8Afm*r_NVOE9bCf`kD"p>#1 !SII)!.k3&!.k4:!$W%KJ>'g4iN?oU(_-fS!<E0#!<WWE-pVL:d,a!._Q-3D!r;m:#:)`LD,`PD(^^BI !<E0'$lUThHaMYSUiT09!VcX#$n+l$^#Y#)#4V]Y!$24sO5nH^Ip5K).ifTN+<`RDKW;l6g>V)=\Xmmm #M9"l).]VOSp4F02^K7T'GD*!/jicaR_[_WjojSVO_-lZ&C^\$"t4)h_p[?%`/IkX/0c#D))kcNT=N;( hnbRn7hl'N!.k3&!.k36!9=,M!<N<40M5&=A:pGgd+[4*a1/.?R?s2%OcYNXLQeI@_9V$2s7=:$FB:OJ #7r7C5Y>F@htQ6[]W7m$RZrqoKn"oCUq>1Rrr3b=CH!1G$j?eO0Kqs,C5KUdiQ8*N<\OL]j8^V0!sJrH 96??4`7<f.g<RIAY,S7gR#ZrZQ(P4h_r(Ins43iZ5VF2j!oj7t!<N<63ETI!H`#`om+B7]X/;S^R[0+p NWP]K\c'8O_WL":b+!*/)%d5[!T3r,!<`W8(-#,n?#"n]^<#4!o&.WrTU(UlJVTGd[_h7rk1?JQ8g>2b #Q`laJcLB&JcLB&kl;Cu!WrQB:lWosld*)DZa6m6R?<8TrdILgItruGR\?UZYIr6Ap!AXq+VY=e!Z=IP Y/7WAVm`OnOc+pEJ:)s*O-cE5W3+#'p@[m871K:u!<<9P;L>@K[C!'GTR'Bg*=`2N!9X>2":H"h1L#3p Xfo:I]WnK/R?`npNg6NS`4`[eYHPt'kM_q;/-c:[!WqE_*<H<H"rg9k`obgh]st8BRZrttNfK3eR\H[Z X/rH&XUMACY*sf?1`$5p!WiD\!%A$X&K3,rH)/g3`O2hR\@T5MRZE8aR&@F-]!/<?]XFYr?of2.!s/N) h#N$,JcLB&JcP0<3X$'6-pVF2ec4U?W2ZJPK6DNdI!gBnJqf>UX1QHp^94B&Lh]j_3[G7F$k*InAZPk2 r4nJGJ:2fjrd>W7OeK)'c,[AoQX**C*u,=m"9f#:(.a>;rr3;OX+atC'FP3O"8W#`!%A-n2H4X[Z,<W= RZ`J`Ll.%LPb"VOZa[<AVkp>hODA&t5r0Ph"pG&/j8^/'&g&YmD3rDu]pk%=M27"EMiEm`T;oHDb/:Wd rMopq$B'"4904I5!s&K)hZ,&.'dl%AIB)9+lHQZ8UR$abJ;0)NUpeM"b.Y'[V2TM'8j+U;!s8T+fDpL' JcLB&JcP*:%MDEbTu#FBae<oZ90kNhr[\R32F^b^J>'j6j3kT;Jg^s$!#u1e6u%dDH"U)E3&NBA.QU1* Cl5C@i5qF"56M#^!!j#_:P$4?M(o5)!9sP*"#5ktg;^FbLj<fB>[:`HFd9>VeCrg?hnP=c3Y;DF!#?G_ VRaLFQ\9Hl<`N'r:gJ$lQE.gNhYlR>gmV=q%fcXZ!#uYAJtg$3jk%#-F_G5e:0Mq0Zbk)BiS:/70bXW6 !.k3&!.k36!9=,M!<N<40M5&=A:pGg_8O[JccO):\[JrQZ*(.,Vm3eE_Un;Ws5g5$8Mqb,"V2n=5tYC+ Z-q.JbJV'-\[8ZDVP9un\\Heprr3b9Aht26$3^SN0gA00CQ#jgiQ8*N<\OL]j8^5%!sJrH96??3_84"0 bKIoB]t(SWZ*(@<Za[NY`:3d+#L/6.-Q<X'!oj7f!<N<63ETI!I?Cr:bmMP.]t(VZZE^U6Y6)8G^AYeT `96%#YCKS(#R(;3!T3r,!<N?+$R\55:0_^u]YVJ-e'cCS[BZj6Wire>]Ys4$f>!;N1CaZo!s.?\JcLB& JcLB&kl>2o!WrQB:lWosld*)DY-51;Z`^@*VPg5bVP^8iVlZo#Yf>Slp;_D>$O-\6!?"=JWPQBZWO&h5 XfeY%VPL)eVl6VsXKBP2p@Rd66k'+s!<<9P;L>=I['QmETR'Bg*=`2N!9X=o":H"h1L#3pXf\b/Za@$C Xf;;t&ZMq:YHb=8Y-6@<jOoGb*<?0>!TX5$!WrT1)bl(,jjV&PZ*:C7XfJJ#WMZVoWi`;&Xf_T)#d:V+ H<3$K%Kl\2hZ,&+"9f&F5&?h>d*05+Xfo(>Z)jn$VPpW#XK8P+Ye@#oB1+*Y!WiB(g]2p+JcLB&JcP0< '*Spd-pVF2ec4U?W2cbmTq%RBTDkT'V5^N!ZF7<JX/Vq]Dbiqc.i/?l"pkSeA?Gk2,3Z8(TUh[FU7n?Y XK]4I[]c[1PZC10&e#-R"9o);(.aA<rr3;NX+atC'FP3O"8W#`!%8'm2H4X[Z,<W@VPU#\US=K[WN32+ YH"LtW2ZemHsKK-.O#T5"U"ne!#u.T+"TfsQce$tXJV_eV4jTXV5UArYd(R=X/W,tWrSt&J7:nn*tnn] !<V*X-j0qp+Z3Yqg&M*4]rS*-U7S$QV6$l,ZELC2WiMnF@7)Fc'FP!E!<LgQJcLB&JcLB&lMr(@97W_P g#_&BbJ(NpYH+_(WN*/3_8jmRgu./3WeOdm!Vl^7"X$3MTZYKt^9t/IXK/>*]"uG7g"k`/O]jI@pAbI. .oCo4jG>SqnGqhS*<S$Wk2>(Me^2IZ_8F41`QH`ahVmMUjkZqO3>;VJ!#?G_VnC@.e^)@V^V7Lu^;J%; eC`R6j8J*Cg3>=Z!7Cid"tEf*WQsS_gssQf`PB1'bLP;%hr<_NIl@f;blE=qJcLB&OoXPC$3:20%PULL <+LWPn@osY_8=:Hp\t3m^P,W<+VkFe%3[Sl8m6(s\@K5bpqHsI_SX@crr3elQ<5XL$jQn=(bn6F=)3Z* kMXF\J5n9'$fh9q!<WK1(.N/"YID'SoY1sQ^r+=Lq#1*VY&HWA%g`C?irBPi!<Nfh<*`^DI[RRO\\.^P !5T2_`5]jBccj_`_Q&N(599m[!"K#1"r]9`85s,JVR!_C^A5MS^qn%9gYU8dRVt_A!s/K(huJ?/JcLB& JcP$8$NU;2";jspde<"Q\F?U0Y-4t4^>SPRn"<o5!Wr?%$Pu!?Q*7[-Z)k%/Y4o%?YHY=kp%@n!G<636 !!**(.8Y>fYdCd>\=n+?0,tE'rW)*]$3U_O+"pT9PH1ddnuW8%Yd1sjd`Je03"t0L%KZ_9"W'[U[,p)f \Z;d4pT4S$Y-5(7$b!CHXdXW>2'`kB!o!\c!<E6-/m*e7]=YSSX/rG)poOq,ZF%'@Me>C-(^^;s!.k3& !.k3&!:9ao"V;V$5\HD5s5CSgn>dP.VP^/TF^\02.io0%!sAf6-sN5/s8Vi0Wi;ttpo>(,V50l2=%"A= #R:M9"U55J8;u=&rs@&QKjQnW$O?q=q>fg]$O.S+9kfNc^9Xi>WV!5%WMZMePAaG[)]KS&"p=u.irBMl &0!&_@u\"ag;C7uXS/\#WMcPdU7\-NP6Z,+0bOp&"TdBY%futF'-]to\blF$hR0PeWVEM&WMZJbO`42S 'bLfX!n@:&!.k3&!.k4:!!O!.J>'g4nE(&;h:pJsP$pHl"o&'(!Z!UuOiZ>7i8aUp#ia[pf:ZJ&$N]u% #Rr7[K"^6%0*^qHl2V"i-$7_lh;Iqf#ijancaIXI&-LJ`#nTgkW5-m>i8Whmjp^;.h;$Z1ahaN:&c_pZ !!s5m;gb[rgYLfLq;qqBgt0`K:)F&V!.k3&!.k36!9=+e!<N<40M5&=A:pHB^Dt,<iSrnRd`&VL?ToPI %gW1C)([^:>AJbZV6RW,^E:>Bip6'tgrc:+66?RA"TeiD00Md+CP]Xcgr-(;;_A%Xj8]Sh!X&]>4(3Su QDLt&oY1p]e^Msl`OMag;(iIf"p4nd!"K#1!XpPN>$YZVJsi@7[eRT;_[jrBjn.cf`ji"4G[Eom'`ltf %06SF,W.hcA9*?bR]a=!^C7p,g"=cgVMT+a1Dp;o!T3s0!.k3&!.k48!"/f/!sBH;NRIOdca`JH)m6TZ ['R-CUm,=N)Zp'@!W`oh;g+1iV6$i#YP5.AYdqKebfdc)JPR^#!!*'""=[,jTrkW,XgagB81b_h"9&;` !"8r8&/lrfBnrCZW3*/oXUD;;Z)smqO+(\,,RiQ1%fl_6"VNh+Og_g3[B?[5X8&e"YHtmZaU>YYRuMJj 4!>=J"p*HY%KQV3"X-$9I>O2[Uo:>qpoOt-Za?s3KP!\&)\3,Rf`6U(JcLB&JcP0<$O%(\-pVF2ec4U? W:6i-VOrs*HtH8A/0bl9!WiK-"Wp9^\CKBjdCZigWVEM-UmmHuCJHJl"pY;7!sAi7(J0S@rr3;QX+XkC 'ak?Q"8W#`!"/rH.R-sXQa4WJ\ZPM)&#Z(`LNm,s0cCi=#m:;1!TO.j"Uu4i1fJXj^Wb?`_n*.Tpo=[t TUCglJq8Dn#?sJ>%1<CC!SdYd!X/f<(c5<FXhDs6j42&QWqi\(VO``tF'V-\&.AgG!S%1%!.k3&!.k4: !!O!.J>'g4nE(#5afUS>6m`KKp&G@'*'Ir-`R3ArpuVe8aKh(8.15_J#R`"RI_4Zq0*UkGkl:o"7[UI$ g?&"i#Mm@mI9A08"P!JY"!q#iPd/B]gYhkh%,][Y\=S@g;`>9h!!(@G#RhnDBpl<Kg#Dhi#2R+aF%[JV b5d+oJcLB&OoXPC$3:20%PULL<+LWPn@os[hr`qK^8Hs1<]qiE%1!+<"qr+36!%fIM3XgGpqIoqkNqTi _Pi?*8M:e_"Tnf0(+hX;=)3Z*jkR_IGu?3o$fh9q!<E9*$nkIoHA7T[oY1sSe'Z:LW0;R<8MV=n"U"l- iW'Gh!=9o1:g@RLFGH!LYeKqJ!6#K%nG`CHa0(_VA5,'6)@QZ!!"8o9'Hets=ClGtMk.ES^C8'6fZq+" HX/ol+:nVR!T3s0!.k3&!.k48!"/f/!sBH;NRIOdca`JH*3QcXW0i<]?q`F$%06J2!<EZV5?`#VOJ&SS X/u)u+Lf2)^93cM@Rr'e"TSN'!!OcFG+Yh>Z)tC&EC;8o$NpA.k5Ykk"q;4f4C!)oS#*+VXUD;;W1&K^ >t?aq'*d=o%fl_5!t6YREKHQ]X08Y/Wq`\!YJ/-/bR:J4G[X9(+qY1f!s.-VrW*B0'.,b8@<70kU8=mb XUMG@XI=ZL74Ju\#Qt1]!.k3&!.k3&!:9ao"V;V$5\HD5s5CSgn>dP*P(7R^;aN/X'at9I!WiH,(cP]V VRF=\`PB!`po>("MgK>D67<6G"U"r0"9o,J8WDO)rs@/TL1!+Z$jd+>q>fg]$j@7e1.Gc,V8:-h[]9#$ %]5D>Dd?'t,SCRo"Tnc+iW'Mm#n\"&6t:kF]%6<)be:6\q5XdsQ\BHtBk:OG#!F@N#mLJ6gAhcc!sJr? +urS?N2t%fn_Cs\q5Xn"Nd,,768'8c#R(=[!.k3&!.k3&!:'Ug&kdbK_:e>?#MZG,:bNOf!VHEu!=0c7 F.g(ih"^"9dAVFq/IqpU!!ioV8UJ&0L+NT!!9jIf"=.9&W6ODrjp'P7BKdIE!Rh#T#q&)LMQjqEgu\@o #i3P%MIT"''F+L9cN"1Q(,oWQVomuojosD+>r!,saoI"nJcLB&OoXPC$3:20%PULL<+LWPn@os_jl4k. T6j^(/g(f3"Tnf,"Ul+e2,@_&I#45spqIp'm-NfPTm9[&//elt!W`<*'eML8=)3Z*jOq>?G>Bai$f_6d !=/oT6!7oILS)9Q^CSE9age!o@RVpo(C^HJ!Wh3Z%06YK.QpR5B5VmHPGc.j^Au=bkl1V\eussE;*$$< %g`Bj!"8l2#7D.o6rdT2H]ko7^CAB>c+0Ei<&Yd3%0ln7h>i--JcLB&JcP$8$NU;2";jspde<"Q\F?U= Z+$ZqH!N`d(_@#X!W`?'!!sPo5?)?HQD:GQXUMeZ]s!E08Lthn#m15-!"];\966T#YHY.9Q>Jo8(CL?E !9X=j!X/l?(c"g"K9;_(Y4\n)ZEK^IA4eX!%LNCBh>mNU$jdt5;JUZ=T<58uXfV?#"L6#!fYIo[Dbi5; )@crS!s@0U%06M9%i6BM<GmY[TrG*gXUDD:R<r4(-PHXd!s7*TJcLB&JcLB&m/RLt&0!#_B9q*JiOc&X Wsb_XEa20t.MrKs"9\T'$j$tf6=G8*W4Kpd]rh(1':=5b=@b:i#m1;2!W`B,#T$'mh>[E\eZ4F64VeG4 "U"T$lMq=r%2gHN;fe52^W!jcorALsLi6<[1*I;9"p4r.huF8h#7V7d2,.hBVp+u4iQ8P'WsGDVEFi?O 7lVjt*>/_Y!rrDW!"]/4!WrW=+"]ZbM6uI8n'S02Wsb\SB1k$.)@clQ!s@$QJcLB&JcLB&lMq)$97W_P g$n,-f8`ZS$j#ku"plSPI%J1.puVasL/]`9!qZHu#TuT^\E&As"RuKU!!Nfc<//*Hp#ZD*J3F\Md/XIR #TZ*?OK6=Pjn\$CfsHQB3#`/#!6tQK!YdLoKt?1;joj"Q1CO<+!.k3&!.k36!9=+m!<N<40M5&=A:pGf ^q[k5a25Oh\H9:Q]DfJPbL"ABU3fp")\`\a!W<!+!sf>L-:(aKG(YsTrOVp?$dmSTaejDa1a*\F"T8<2 ";E4B5uqZMZd$CiNG:s2!"%Q`#R)"t7TOAWQFHh(r4)a;$c9ccRX87&,Rk%a"5<ea":lJ#4&90pCj:W# \G<]9dL,@7q;o2KAOS?q%FG._!<E9;/436DFG[0r\dQNs[$l5@3#_u&!Wh'VJcLB&JcLB&kl;@t!WrQB :lWosld*)CY-"h2YH=o*WWTB)XKDK%$D<B"=#hB2!!*-%qu@*/%icuZ<,7#IR\?YXX8Jt*ZEBj^C.0KZ "Tnf,r;[B4+[]k!Q(OhMT7gQ1+Vb=drW)*]$j$S:#nSCG<c3DJSZ)Lfr2ft%ri66kIpbSo)$g*@gAhTa '.#S2@WdKtTq\CYWs#`C_7cNHF&"8&%giEf!"8l0!sAfL3EC0POdi6DWs>VlI9JZY'F3+fJcLB&JcLB& m/Re'&0!#_B9q*JiOc%hVl-JgV5L9kWrAq(VPpG]I:>f*-5R'g!W2p*$5tH]=E'.kYd:X=rMTRl'8gg8 7Q;_."T\W*!<E9+#8BRUa8Z)Fk,X)>3u/51"9SE"lMq=q#ne.)6!J`*Vm!G+rMTRl%Afu#Q[2t(-l`g* !WiDZ!"T,7#R_@o4&B[NYLigMj2C_j#aKdO<_5G,)[lcT"pEBT$j$YD'H]SQQH.D$b-1W=$(#d62&Qu7 "T\YP!.k3&!.k3&!:'Uo&kdbK_:du-gXXHgaN+;"rPo)]`hZ`b$h"'"!=UALBSrtf`WV6".hDgS!!i]B 1gH3_@3#I?!9aCd!Y?k[LrB83r5\fV".r4)"3plN"roa6HBkf2`W`Jj;DAskq>eb?"TfAl<ee?a`WM`" '*6/SJcLB&JcLr6j8^P.!Wiic8ki8qK:Tg'dEftLZ)3tWS"-"@T:hmOS!&DC<BVZC%LE:9!"Au6#n@k+ 6rmo@JruRnrgj%\%%s;aQ&Tca4XCsX#m:,+%g*=^.5st1HC:+XG[jE')up3$!"8r@+YlGhCkA%CR[frJ S.M-ZS=Z@COah.I5V!]Y"p>"^!"K,>'-/M`9j)%HI#FG`SGSiWUC+$'Y+U>U7kl8($.&YZ!<NcR0L8ZP I[-H$SIM0^SWSD:;a)TC!s/N)g]2p+JcLB&JcP$8&ci%9";jspde<"Q\?3!5TotLrre_>EMMm:ILkgP$ ?qr[-'aOg@!Wi3!$O$qP*%<m@?>FS.KD^Q:LkpnDJ9Pa56nK8_!s&H)r;[B3(GJHiC2eKSEEYLM((LQO rW)*]&-2k:#7MM$4AK0rG__'1M2D4h&;uF(MMZq%=?nDX&-W(8!!1gS%Km4Y-T+:kA8ud>K8PMBreUQ1 "GMDSFCPMI1*$l4#6WBS$N^A3";N:H;daBcL\lo7LPUIr<BDNF%0b5]JcLB&JcLB&m/SO<&0!#_B9q*J iOc%fU6pjgJ:iQ2M2@"DLP:G8H"9W/,oR:!!<N9&qu@*/'-Jni9jV[^It<=MLC&ZgEEu6u.2r]trW*`6 !<NB-%PUt<ZEC$hKP!e*&.&RD!r;o_!"K&7%2'X25?)?<H\7'.M#<#=Lkg\:Jp(Hk/fYN5"9JT)h>e&f "9f&@)^mX8?ZqF*SsPN;L]3&-Ka<!==@t\.+;+q]#6P(W!"8o4#nIb'7q@@3NJr\kLC/`iKQgZe,nUOk "OI.#!.k3&!.k4:!#ZDBJ>'g4j2[^1:ImrA4[)%o5sIOr4>%9Lli74l$l1'C4[&^,"[,!q&d8=+!!WN5 )(7EX!q63P!!`W;+ZVVH4[/j0#=1R<4?=o$!R(NI!Xfqk.lI;hr]C*B">V,7#m0o&bQ%eI"qr:B4oIPJ 4ZkeT$j"BKJcLB&JcLr6j8]ts!Wiic8ki8qK:Td+beL6LMKroLC2S"hE=6Vo=AD1=,o@!q"U"Z&+9;TL #S7q&2*t#=@r#jrCi400E,fW%>#@[D,o7(!"TnW&%g!"J(aCe'<+T?47m8UL&HDsl!"/i8'HJS\7TF#5 Bl!K]$YN[;5r0l-&-W1=!S[S_!XB)E)'^ap7Sd&nCA_iLCi"!+$>X?g?;*I3*Yf+fcN"=S#SJ+)2+CSY CM[hbD@:/_9g:E[(^gBH!<LsUJcLB&JcLB&kl<+4!WrQB:lWosld*)CX-eHO@U<;A=^#!5>?P*0:d[,k *u,1f!<N9&qu@0/#7M1^+Y5T=853)f>5DA,:e!Q&-5d9sr;uot&-E@^/36$d9N4>5+VG1g"9SQ&k5Ytm !WrQ0&/c]F2aU,:<`]3&!*]A,%9m";;*Zl](_I&W!<</S!"K):%i6<91-7rt:fU\%=o;A*>#e?g5W&`o *"`J^!s?sO$ipD2!t?(l0fqct='GT+$X-Y7=&D18+r(Rn"4R=&!.k3&!.k4<!%.p])^msaQIZ#o];VZo K5Ogo>$5$4>?tK=>$+g$4te&p%LE7>!<N&t$O$nO)^?pl5"A@G<r?,/=BJX,8j"aN(_6lSrW*`6!<N<) #TPTnARSnJ<'VuQ$O-\8!r;o_!$VII#7M4`,qqGK8lJkr>$+s3>?kE:=B/<l3[u'[$O?k9!Sm_e!<NB- #nRst.Q0[m?=$oA>5VM%<sVSi3\Vg!'+5$H!sA\S!"8l2"UGPU.QL1!<E<9$=pnG7<`VmS-Pd$o"9[!N JcLB&JcLB&lMqA,97W_Pg#8Z/.gu^g"Sr3%!WiDb!!!&t"8r9$!UB^d!<VZhirK#ZqZHg!!!1(>!W`<( q#UNso`3)6!<E9#"8r9$!Q>%j!.k3&!0R?C!#GY;!Y-nV9iPYUS\WUfV1WSb67j]?0JiYc$Ss@^+rh=/ $3^M5!W2p*!<N<*"q(qV)B^:Tr\"j;0etOA2DHa1+WD.,#mLM6!W<!/!<`W7%MTg)-mg&X)&!G`!!;'Y $NUD9$kF'l+t+ro0D[C41,1C0+WD.-$O-Y6!<LpT$NU>5"pk_O(*"GB.f:n%0/,+80+'<`.O?/R&e#'M !m^iT!<`T7%i-34/2&Y10`<a30.7t`'b:WTrW1aRJcLB&JcLB&kl;t0!WrQB:lWosld*)DV1Mu10.SFt -7:2k.4-;a*>oP$$O?q=r;lfr%0?V8"UPVM'cA#7,q(2@-iPG$,p4-D'+P<R!s/K)!W<!0!X/rD(E"25 *uGV!"pG)2!r`2^!$M@E!X&Z6%MBNp*[2jT,pjuf.4Zns-6sZO'+P<R!s8Q)f`2lk"9f)?&/#cu*[)dV -RC#`,palb,T[mA'F#$S#6Y,2!n%)J!=8f1$4[^c*$HXWr[/(#,UF]X)%mAa#6P%W!.k3&!.k3&!:9b" "V;V$5\HD5s5CSgVi5Xo/hAM%r[8:+.4?Sj,U"$=$jd+@!s&H!!"/l4#7M(T'H%l3+s["5%43>F,TR^8 $j[%>!W`?$!##A6!X&oH*@E-Y+s7[5$3LD5!Wi,tlMr%.!X&Z2$P!db)BC"K,pt&e-R^Al-R9lY)AE\g "p>&2gAhW_!<N<*"UY\M'cJ,=r[%RkrZqsu,9e<S)]'.u$3p\:!WrK*dJsUU!sJi:&/Q</+sd%5$7-rB *Yo7l"9S]-ciAXtJcLB&JcP*:#nfm]Tu#F=I4ki"!.k3&!.k3&!.k36!9=+r!<N<40M5&=A:pGfbd*.6 7PGV\!X&]6r<i]7#6Y+p!"]/4!s8]1"pP;<#mq%G"Tnee!7h,P!WrT1q$.!+"TneJ!!30&"8W3#"p+o0 !Q"gA!<WE,"U,)7r<EE/"TneT!.k3&!.k3&!9jIr!<N?+(f64?p?U&7XdO)j%LEC>"pG/7#R:M8rW<*# li7(f!sJT-r<<0'!s8W,!T=%8!!<6'!X&B($O-hA#m^_<"9S],!QkBC!X/H*q#ga$!W^+<%fuh9"U5/7 "U"r1"9S],!RLgu!.k3&!.k4<!$DFV)^msaQIZ#o];VZ`?T&?$#mLS=#RCY@"p>&1!s/Mi!!<6("9eW+ "p4u1"9S`-g]6=6!WiH,r<3N2"pP;;"p4o-!!1.@!<NB!"T8E'!Wi3!`rH2C!sAc*"U>/4"9S]-!WgLF JcLB&JcLB&lMq2'97W_Pg"g*NT`BZEJcLB&JcLB&OoXPC(BFR=%PULL<+LWP^Wj'B?:HUb!s&K-#5e]- "Tnel!!iT+!WrN-"9eu."p>/8"Te_d!7h,O!<NDu"Tec-!QkBD!<N?"!rrK'"Tec-!Q"g?!<N<)!sJH( !WrK)e,Y(#JcLB&JcP$8'EJ7;";jspde<"Q\?23<4V%i'"pFl.rri?(rW3'#li7.h!WrQ/r<3!"!<N;\ !8[\U!WE-#"8r?,"U,)6"U"r,!WW8D!!<9)"9nc-rr`3&!s8T*!5ed>!WrQ."o\Z'"9&?%!RLgu!.k3& !.k4<!"oGH)^msaQIZ#o];VZ^?T&<!#lXr/"U"u3r<!*&!<MNe!W`?)p]UQu!!:pUiW'#]!X&E)!!W<( "pG,3!s/K(a8c5B"8W/u!s&H(quFb;!WiH+q?6d"!WiB'bQ*4pJcLB&JcP*:#SKd\Tu#F<?k]46JcLB& JcLB&JcLr6j8]qr!Wiic8ki8qK:Td%Z\i'Y0,Ocl!X&?(!sA]-!UBac!WE0!!sJf2"U"l-j8da2!<E8q !s/N)!QkEB!WN5r!s/N)!Q"j:!WE0!!sSl2!s8T*!Rq+$!.k3&!.k48!#,G8!sBH;NRIOdca^*GE'=d= #6Y/,"TJT&!WW8f!!<6'!X&B(!WrQ.rWE0%huMU6rW3$#r<)p""9JZ,!WgFD!s/N+"Sr3("9S`-!<C"; !W`?)r<*B."9S`-!s/N)ciAXtJcLB&JcP0<'Eo$e-pVF2ec4U?W2PDV2%'Zo"9n]+rW<3'!<MKd!W`?( quZp%quZs$!Sd\7!!30&!rW5u"9JZ,!QG->!qufr!WW9!!65'?!<W0$!!N9'rrW3$b5d+oJcLB&JcP*: #SKd\Tu#F<?kT.5JcLB&JcLB&JcLr6j8]qr!Wiic8ki8qK:Td%Z\i'Y0,Ofm!<W6&r<!!"lN$e_q?$Zt j8da2rW2`prW1.ApAt6prrKn8quQWqrW1LKJcLB&JcLB&kl;Cu!WrQB:lWosld*)CRW(G$#mLM7rW<*% r<!!"l2UeboE#!nhuMR5r;lftrWE*#rrL4ArrMco!W`9$_Z9];p&b6pcN&OsJcLB&JcP0<('P6g-pVF2 ec4U?W2PDV1C=Bk!s8T+rWE0%rW26`!!2`orrLmTiW/rYq?$Wu!WiE(`W6#>p&b6pqZ+Y:rrMlrrW1.A JcLB&JcLB&lMq2'97W_Pg"g$KT`BZEJcLB&JcLB&OoXPC'*/.9%PULL<+LWP^Wj*B?:HRb"1%uZ!.k3& !.k3&!.k48!#,G8!sBH;NRIOdca^*GE'=d="Tne/!.k3&!.k3&!.k3&!:9b#"V;V$5\HD5s5CSgW.eJ3 #mCJ7!NQ3P!.k3&!.k3&!.k4:!!j31J>'g4h-^kh!.k3&!.k3&!.k36!9=+n!<N<40M5&=A:pGfc*N:6 7P>S\ZN,RWJcLB&JcLB&JcP$8'EJ7;";jspde<"Q\?23=4q@r'!s,S*JcLB&JcLB&JcLB&m/Rh(&0!#_ B9q*JiOc%eKj6A>"U+u/WrR_OJcLB&JcLB&JcP*:#SKd\Tu#F<?kT.5JcLB&JcLB&JcLr6j8]ho!Wiic 8ki8qK:Td%Z\i'Y0,Oet!.k3&!.k3&!.k3&!9jIt!<N?+(f64?p?U&7XdX2m%g`CA!NuKT!.k3&!.k3& !.k4<!#,SJ)^msaQIZ#o];VZ^>VZTh"Tne+!.k3&!.k3&!.k3&!:'Uj&kdbK_:dXP&to;W!.k3&!.k3& !0R?C!##A7!Y-nV9iPYUS\NFUMI&b*(^%)EJcLB&JcLB&JcLB&kl;Cu!WrQB:lWosld*)CRW(G$#mCD3 Y5j.SJcLB&JcLB&JcP0<'Eo$e-pVF2ec4U?W2PDT1'n*f!s,G&JcLB&JcLB&JcLB&lMq2'97W_Pg"g$K T`BZEJcLB&JcLB&OoXPC'*/.9%PULL<+LWP^Wj*B?:HRb"1%uZ!.k3&!.k3&!.k48!#,G8!sBH;NRIOd ca^*GE'=d="Tne/!.k3&!.k3&!.k3&!:9b#"V;V$5\HD5s5CSgW.eJ3#mCJ7!NQ3P!.k3&!.k3&!.k4: !!j31J>'g4h-^kh!.k3&!.k3&!.k36!9=+n!<E630hY5@Aqcklc*N:67P>S\ZN,RWJcLB&JcLB&JcP$8 'EJ7<"W:*pde;qM\?23=4q@r'!s,S*JcLB&JcLB&JcLB&m/Rh(&/uu]B9q'GhRTP_Kj6A>"U+u/WrR_O JcLB&JcLB&JcP*:#STpcUr1pB?kT.5JcLB&JcLB&JcLr6j8]ho!<N`d9i"f)L7uB,Z\i'Y0,Oet!.k3& !.k3&!.k3&!9jIt!WrQ/)GlC@p#XE,XdX2m%g`CA!NuKT!.k3&!.k3&!.k4<!#,SI)^dg]Q.#N]\>Q9Z >VZTh"Tne+!.k3&!.k3&!.k3&!:'Uj'2XOa`7j$T&to;W!.k3&!.k3&!0R?C!##A6!Y7%^;-7[jTtejY MI&b*(^%)EJcLB&JcLB&JcLB&kl;D!!sJiH:Q*Wmil\a4RW(G$#mCD3Y5j.SJcLB&JcLB&JcP0<'Eo!c -U).,d.c%tVl5;S1'n*f!s,G&JcLB&JcLB&JcLB&lMq2);iRiug>--LT`BZEJcLB&JcLB&OoXPC'*/+8 %l7$\=`B1l^Wj*B?:HRb"1%uZ!.k3&!.k3&!.k48!#,J:"U5oBMpV+RagS=?E'=d="Tne/!.k3&!.k3& !.k3&!:9b#"V2Lu5%^&)o['tCW.eJ3#mCJ7!NQ3P!.k3&!.k3&!.k4:!!j<>P-2m\h-^kh!.k3&!.k3& !.k36!9=+n!<E631/:_LBn`D)d^"[76n]AZZN,RWJcLB&JcLB&JcP$8'ES@?"WC-ja7/-4\?r#O4q@r' !s,S*JcLB&JcLB&JcLB&m/Rh(%iHZVAsh*FgUEoMH<;d+"pG)0WrR_OJcLB&JcLB&JcP*:#SU!jW5[HA <Y1r)JcLB&JcLB&JcLr6j8]ho!<N]_8l&DpIB;2UZ%Z=J/JeMq!.k3&!.k3&!.k3&!9jIt!<WH.(J'"f kiL7,af]\L%gW=@!NuKT!.k3&!.k3&!.k4<!#,SH)'_4TS)=82^7C@%:acPP"9JV)!.k3&!.k3&!.k3& !:'Uj%n(`7^!XYg%A<cR!.k3&!.k3&!0R?C!##A6!XpSL:/YAB^@'g]JQ>#e('ClCJcLB&JcLB&JcLB& kl;Cu!WrN=6[#]ji76'+\9:%G#R1A4Y5j.SJcLB&JcLB&JcP0<'Ens_,!'>,jo>+eOEt;(,mFJT!Wf>% JcLB&JcLB&JcLB&lMq2!3c'k`_Q5j+T`BZEJcLB&JcLB&OoXPC'*/+8$n+J::Kqqar8Fi/;a)ZH"1%uZ !.k3&!.k3&!.k48!#,G7!Ws'!Dl2%8dbjE*G<HEA"Tnh0!.k3&!.k3&!.k3&!:9b#"Uu7k3G+uMs8'-S @9#N6"U"r1!NQ3P!.k3&!.k3&!.k4:!!if_?%]2[PV*06!.k3&!.k3&!.k36!94%l!<NTP4@r=TJ%>!` Q>9#K,8(*b!.k3&!.k3&!.k3&!9jL_!>,AC1gQ!BZ*_^3SRaPb#6Y)0Y5j.SJcLB&JcLB&JcP0<&-N@S *&1NO_"#C/EEl-o)$Bj>!!0,#JcLB&JcLB&JcLB&lMq1l(ct]/@n@I;T`BZEJcLB&JcLB&OoXMB&ci"< (FhO>>B#ChJn.J/-5d3nZN,RWJcLB&JcLB&JcP!7rW*Q;,X>a]H@CU)@R)%@"9S`-Y5j.SJcLB&JcLB& JcP0<'*ALL'-TJ@I$/tr>>71*&d&4;!ic6P!.k3&!.k3&!.k49!!WK4%h]Nc!h]OF!.k3&!.k3&!0R?@ !"]8B(aC^q78R/Y3@c0e%gE'@!.k3&!.k3&!.k3&!9aF^!>#DJ,WA.]84c</,8(+]!WiD+!.k3&!.k3& !.k3&!:9b"!X/i;'-].u:I[N+/g(i8!s/N)WW7VNJcLB&JcLB&JcLB&JcLB&JcLB&JcLr6i;aDi"UGJH 'GhZ/)&!Mg#6b21ZN,RWJcLB&JcLB&JcOp5&-2k;$kjEm(Dmu$$3pY8!WoM)JcLB&JcLB&JcLB&m/Re# !WrT1$kO0k(D@Dk$O6b8!W`>%!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6 !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!0R>6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!0R<h$k!FM#6b53!W`>b!!`N,!sAf6#n-P;#Rq.L$4$h>!s8H&n,N[o!<N?+"UGG3 $k!LR$k!FM#R1G9!s8H&nGn.@JcLB&JcLB&L&_;]#R:M:"9S],!<M?`#QXu/"U,)9#n$J7#7(S?"U"r0 !pfml!<N?,"U55<q[*3,!XAl3rW<-%rW2?cJcLB&JcLB&JcLZ.!XAo5rW<0%!9X=g!<E6("U,,:#mg>5 ":,8<"U+f,!!2He#lt)0"9eu7#RLk8#mgkC#6k;5"9S`,jT'l4JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 $7-l=*#0"m"pG)0kPttk!sT#=&/?--,:"W6-OV4E+<242%1!%<!Whcj*!$-F#7:tW*$QUQ-7:/f,pjfX )]08#$O6h;!WhfkJcLB&JcLB&JcLN*!uMae&-`IH!s/K)!U'Lk!X/f:%hfd"+!)IDr#>q\((q,c#Qk.p !#Pb@#7D"S'cA#3*??+=*#]Y/'+bW[#Qt8.!UTl=!.k3&!.k3&!/^a]'bUo]"p4r.!!2<a$NU;1"9o8E 'GhT**W-rd*?,q8'+P?S"9\f-n,WFg#m:D>%2'Bn*$6:%*Xs)-)&F#"$OI"?"9JT)k5^)6JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6$9pU2/gMDM$O?n;kPu%m"UPVO*%!="4[28$7/fO]5s."Y.3K?7"pG)0n,OF/ "UGML)^[7$5!_M'6UF((4#AT?+r_1(#6b21nGn.@JcLB&JcLB&L&_<--mK]9'FFsE!W`>c!"/i4$ksX) .5<hB2`CRk#;@SN)\WVb!pfml!s]8K)BgI[r\P*B2)?s?/LVha(_R5^!s8H&m/V_<JcLB&JcLB&M?!l. *Yo7m"p4o+!UB^n!<N<)"Ul(a,:4rqr\a[5$oKdo.j>lD%1!+?!<M]j)Z^!A":GeZ+XScs3&``S2D['? /0l8Q&ISjI!r`5a!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R<h>ZOZi2(0@T$O-^s!"/f3%29g42b$bK >@7;<$XZq07m/FI'+"jG!q610!X9&G)C[X9<`r[7@prbP?<9ii4>A0&&dnpJ!q?8B!.k3&!.k3&!/:IU 6Td1S!uqjU!WE/a!"B#;&f`;T5"SdS;c6Fgr_Wnn4u=]0'*nX*!#u(J'-&AR3CQY;:/Fb\8Ol*/1Fj^i '++jD!W`>h!.k3&!.k3&!.k3.!!bP:+r:aq!s/E&lMr"-!WrT1&KE/S3^H>6:f1(f:esbW5r'c*&e,-O !W`>n!#u"?!WiQ:)'gmr6VLHX;c6Lg8jks(/0c#F$3p\4!U'N8!.k3&!.k3&!.k3&!.k3&!.k3&!.k36 !"OC%F(\H@1asO^$j?b8!Up(#!<`W6%Mp?A3_<@^Dfg2MIf=m0Jq&#bB3Rtk/KkuE$NpP5!VcX+!<WK1 $l'p:2b6t\EccPRJGt$0I<TU@>YmdJ/gD;K$jHk;!VHGE!.k3&!.k3&!/:IU?s6Gr$8s4L&I\mH!<E6& o)L-=!<N?,#R_4`-T+.a=_)GhDJa0)Ci!s">>[gL/0>N5#R1A3!<N;s!"8o4#7;%^-Sn"[<*j5:BG>5p AR]"L:I[N).N]H<$O6b8!<N;l!.k3&!.k3&!.k3.!!cIn4"_Zm$jHh=!s8Q)nc01$!WrQ0$P=3u.5aIg ='oP:CCt8mA7Je;5VXT,'Fb6L"9SZ*q#DW?!WiK2&/Q?91I"Q6?tjRtD/=!"@UE>;7m<+<)")$3gY4 !UKf<!.k3&!.k3&!0.$["9J5sirB/^"q1t?%L!@Q%1NODhuF/d"q(hK%1`jR#6b/0gAlg*JcLB&JcLB& OoPu]R@'.lH#$SP1*I;@#QsSs'*/4D(*P4k9j;:OH\76;P*MH(Rf8cdR?WklIWApt5qa8j$O-_.!$h[T &fN)U8QobIH\@B>PEqW)R[]e5P)b?KGAh"n75H2*&./R5!.k3&!.k3&!.k3*!!@^tGAmn"=\V%/(^U3E !Whon,QRrK!s]G[.QBdk>\J&"J;T/<L4k56L5(;,F_t_q;+N_r)@QNG!!2ip,QnPo,r.YY>%MMlH%CR! K7nl.IslWaD.d3X:e3Vq(CC6G!WhfkJcLB&JcLB&JcLZ.#B4<^;FEDi)?pi_"Te`+!qZI'!X/c:'-f;& <F'3TFEi7br.5T4IXHKaCLgUC4tRcc$jQn:!W`?"!$hRH"9f>Z1e:YRB5Va7IY3E1KnP&-I!KpSBOP+G :J+#7-Pd$f!WW8g!.k3&!.k3&!.k32!!FJa&d\[:!9O7p":>_[,r.841c7*G1,10t'FP'Gk5Z1u#nS"$ 0ekI?2)$U2,p!d2#mCA2huJ?/JcLB&JcLB&OoPutZaI3IZ)a43;E#a:%gMM',mG)44%WRkI#jGWSY;mX WiW;(Xfek3ZE^^@Y,Rb,:,3b&$j?\-!$ha^+YQ,\B75f(R%C(LW2cr$Xg#(6Xf\V$Tq.R2FB:US*"iML !.k3&!.k3&!.k3*!!&PgQj9"BO*FGP&-Mn5oDg9@!sAf=+u`8+Cj(>dO-H$'SXc1<R[]e:S!]G'Od)&i HrDa7!s/Q+p])QE)D=KZ@W6aQNKTKnR$jG4R$j>.Q'7AkM1gD)CJHMs"9\`,nGn.@JcLB&JcLB&M?!m< KmduK:I$Z>,Sg^i!s/Mq!"T/:%MU-M>'u^,S!oS-Q^IZ:&sSWDNe`77Dc]1R(D7)[!WiB'quA,H"9o/P 3a76.Tq7^:QC484S!fV0QB[SpMhcn5H[0aVAP"Ec"9S],m/V_<JcLB&JcLB&NW9;j<D5J%(((-A!9jIj "qVh06VUZmDJsImE!gN%D.ZmE6S]Yi!pfn*!Xfku5tb9fD/F31E,KE&@TcMu5;t5D+qF_7!.k3&!.k3& !.k36!"Q]Z`m`u9p=cBf9emq/$1S!-!=0i093,SFLod_^Z*LaD\%2IL&A>rs`7"#Iqrk)%81,Ai#Qac% ,ln;l0L/BBFH!9&Yd1RA[(!TV]=kql^V7Ir]XtbaU466*.iJfg!.k3&!.k3&!.k3*!!B:*Ye(7hh<)S& 7iMO3!!;cm'ESCA#Sf*mEK$-NSu/EdWi`A(X/c-"&$)h6X1d6PmFI1k+ThfI"8DjA$RS8OH\IQNUo1/h Wi;trWiE/$W2cl!WMcYkVO)?r*sMlN!q?8B!.k3&!.k3&!/^a]URdj2EaV^0"uRP7"9\f.oDfF*$PXX< >)C#^lJ0I\XK&7urMTUiejS:tQL1Dpr<"p+l-!W2p*!X8r@-rc/Io^h7erN$"!ri$U0VPBo`USFHQ S=H(<MeGEr"9\f/m/V_<JcLB&JcLB&NW9?s[BZ-B;)K3orW)6a$3:\i7qR^\Yd_?arP\ZP$,3mRX--[A &d/7(!!riJ2Hkp;YdV6_rPT/__7mUmZEL:*TUD$N(ukUJ!.k3&!.k3&!0R?]^C/'8nG`I9SSLbQ+V=SQ p]([&!sJoD1.bJNCO_fN^BVKi_8=%)_#1qJa6EU'(YkNl4t[og!s/K(!!**%!tZnH9iu.ZSa=)rc+f]_ 7l):uo`0RDJcLB&JcLB&L&h4T!43*ThspB?ALe)m"9S5r$ipJ<&/ZljClkm,ZF'J1riGsu%COj\p@Q:E 3Y;`)!s&H%!"/f/!s92o>()m:WiYNg#)lh9#R(;3nGn.@JcLB&JcLB&M?*XV"J1cp;c<lb/f+`r"9S>u %fl\4!XKJ`01pMqq#CBR^&+i5WMuhqWV`_(SUF7$3?B"G"9S`-qu?p)#n\%7DR'3@!V+"mWs>8A:E]lF !s@ojJcLB&JcLB&JcLf2roOLA`2\eb&cht4lMq(r03Wh)dJW,2jQ#7WioB+tjosMGKN]l.n,NUp)a.c$ cKsZp\2slT!.k3&!.k3&!.k36!<0_D`6mQ7s5^hXE)JS5"U"o.p]([*%2L-F9Nbh?G`8Nt^B_Tn`m)WE _nc5c*5pY)s8VW(P\X)S+:AAW!W`<("pZ#,;IF6`N2>mU#KjiRDb;o3&+opS!.k3&!.k3&!/:LQXT5X6 ^X1s1^P#H7*"E/H!"K#2!X]o$79t"lTsM,2Y5GC+XK/D"WN3,uXW+Rhj7N*$SnUMB)@?KG!!*'D+k 7VRdVW2o3c#)un:#mLM6nGn.@JcLB&JcLB&M?*XV"J_??D-dKB3?f"B#m:80q>_$-"U55G,rnhAQc8e# lcum8Ws5Q%W2chqW;N\9To`q^8iS:>$j[%?!W`<%!!X)Z/l%#/s8W)O\Ep7$Sp4$S"pG)2m/V_<JcLB& JcLB&NWB(@#iEt@W+R@[!!)?c"q)nZJ=jU0r8n7Dh:pB/gu%2kjp'\ZUju;V"n;Qr%ln-VZe4X,!kLMu j8ac3JcLB&JcLB&OoYKr&&QE9h#@$'_OtsC.16@a!r2g)!=9Sp5"esbD1IP6ZM_HB_o^Ecg!@XRrP'>i cJS-krT2)!H;ZI3%LE7=!sJu@-;%`dI#=Aum(WeL_kD-H3@#1/!.k3&!.k3&!.k3*!<0)#YR7hTbNdNT Ip"ZM#l"B1!<N<)&i!=2PFnk\['[*<r2g1)WMH2\VQ9Ws*3m0%htHH\W.S)*'EA.7!!!03(EthAGF#82 X/P?d#*3(?$3gS6nGn.@JcLB&JcLB&M?*XV"JqWUOD>/,6Rilb%1!%:!W)j-!s]5G+?<PLS%$uAi6B!< r2U($WMlbnWMlfpWuRq(Mf2Wo4XLgS$O6b8!W`9/*ABrqQ,<Llg;L2]Ws>5?:EfuG"9RrjJcLB&JcLB& JcLf2roOLFg!.Br5SXA$mJmLp(,AsDXM<-=r8n7@f#bSDceRRZjp0hm^8c`F(BsC1"p6,XQEnZhm,eA\ 4pC!IJcLB&JcLB&JcLr6rkAu[_o9^WrVc<:R:A,e$jQn2!"Ar0%4=>29ibhUSuAs)r4`KUe)K]Vfu_)/ ^BDBkajK)HrtOq(EC:i_%0ch8#S%S(<cNe^Up.Aq^B`!&Uj#^"-4ohMJcLB&JcLB&JcLN*riH1($F-qG cem0_OB*n?p](g*!WrQD7s_Jhe'5Y4XfAK#XTto'TUD@EWN?'#*3ZZW^X2]Hn(W^n*<6'?!<<B?,Vr,/ LS1`NWiYNg#**(B$O-_8nGn.@JcLB&JcLB&M?*XV"K8,hS;@Sd:+dG''+>!G!<N)u%L!1O)(e[2WR]tb cF^Hcql9t#WMu_lVl?ZoWuJ"2S!]%>;E,L/&IARB!W`92-UV?rW5e#<]!1M$#G--8,6n>S!pou>!.k3& !.k3&!0.'Yjp:&+h:];M.LH4F!!rcQ95Kg(e(NU;r8n7>bI=7N`Ra&IjpC,*f[%0R4;J#"o`,1,6Bo[D gu@\_!kLQ"j8ac3JcLB&JcLB&OoPd!]"G\i^;%nkrr358GX<2X$O$S/!$q[J!u!L`92fATUVFU\_Sa7, ^V8+Rkj.Nnf>G85]",A_]Y;>Hrr3M_P#s1T'FFmF$P=:;?@/@D^B_Qj_o0O2^qTf]&\GZg]Y1th]=Y_u `hdu^4t%$9!.k3&!.k3&!.k3*!!B=)Y-.c+#IWIOiQQL/&GQ5J!WrT0-!d##pZp)4Xf\b/YHG%1XJMPR M3"'tWN</%XT#=:XKpCJp@Q49-ij;J!<ENH/jW`eP,J8\#-P)2Y-"k0rN-%!qlC++Y-!an/IMge!V$/A !.k3&!.k3&!/^aXW2ZcqWWB/l$>W[0+WqU2"U"o.qu@63&/liZBq+AeiOPkeX/MrqV?s0#W2$,YTVSWi ri,stri-^6UOc3/3$&qI"p>#0!"gn^H(;=a^AY):Wi2hlVP^9iWY)>6X/`2!Wi2nrSp4!R#6b53m/V_< JcLB&JcLB&NW9.;i8agu"m4=";Bl;E!Up(7(f5[T_qX>7j5AhOgtUT&XH7UXTXrV,gYCZDiSrtV[tn3C "82]s![(merT4@HinrSIgtUT]gATb1gtpuL\j$D[!.k3&!.k3&!.k36!!nmYV6I>:]ZKpIrs-Ai80/NV "p+Z&3<B<f$Qqc8;Ib$5XMMs*hsTg_`jiLd['?d6Un*j:O,B$fW49ato`+sOV/AXU+V4\X$P=:;?@/@D ^Dt,=l1k,AdCH!ET:VXESXYt6R%:"W]qK[O4t%$9!.k3&!.k3&!.k3*!!B+(['C1HYHG7glKHlS6ko\% !<N)u3<T[$(H,lshsAt3['$[E`QlH,T9>"YF)#N7Iu08OSYiEfY,ehJj7N&bF>X:+!s/N2)_OE]G`o!' XW4LO]"GPRS!/bhMi<UUOHl-&Vm*S9P@?*P#R(8!!.k3&!.k3&!.k3.!!g$CXJMemWh'E7=@k:q*=r,O !!2ut3=6]V5[8rAki9UaVQ$;[OFr1?Lkpb8I<^3pO-l`N_:-oP[&TpdBMCuT.N/Ts"Te]9/l6_Z[)KcX WuS%0ObJ45K8,8CO-5csT;Jj"\@/K2G"s.a"9\en!.k3&!.k3&!.k32!"5F9f\k`Kjk-;>2\#fhnGjm< .;kcfced^:cbHWJIVMkO2^ogp0gAEAGE8Q/aO]8,`h\,c&-;M*!s0QP_>WL4i6S`nG%k>_7Rp'F:g%7E G`A`Bf=3sJj8ac3JcLB&JcLB&OoPc;J;KhsZb+9Err35EKhj$7&I/@8!'(,d%2:Ei?XSJDS[?8_li7"O bc[.eJpVNXE,]Z6GB\.PK9NLTcJS3mkI$%M6nK2W":Ge[3F@0-rP'>jlhp_Vh7/\hDJsH4FEi+ZJqer7 S$JQ-<^%oDo`0RDJcLB&JcLB&L&_=?YJn!]['?d?f'_qeP>3"r!!*,u!'(5q*\'WuS^l-+\?W3Kc.q0g R=&RM;bB>G:KLq>H%qW\WN<2)][#L/`I1)f$jQn9$6(T`>^;O3r2gpM]<IlZF(JQ\>[C`JCNF`VR]jZB Q=MTV#R(8!!.k3&!.k3&!.k3.!!fgA[]$(#WLjNG=%tq3+:eSV!Wi3!3=dH%?%&9Vh7^"jVPfo;DImHm ARJeF<)?P#B5rNo\(pT6bcdq5MeuBg4X:FA"p4l;/PU;PYen'OWuS"!HYQbk?=-rEA7o\"J;T\hYIh?> F\<bZ"9\en!.k3&!.k3&!.k32!"2qmb1YV0jP-nc:`KH=nGj.05`EJ&g#:l6Z&WWn1*$c-"9&<5!X/iD .7.EjT>K=Bd_;Z4-jTJH!s0QO_#<C3h6D,m-m064!sAc4#RhCg.RIj:a0[r4j8ac3JcLB&JcLB&OoQ/1 E-IA4XLcC2rVuoANE%MQ'ab!?!"B)?'HK5:CNu8DZF\!5rr4D+[#/<l8Nnpc1G^jR;HmRBFG?U-`66Zk kJa->=Z[].":>_Z3F@0-rP'>lq>L!K`0Fgf0f([G5=\RQATDs;L8^J\<B_fCo`0RDJcLB&JcLB&L&_=- VU3-d\[8QGcg(,iTN337!<<3!!'(?(.m@*^S&;hGZELLPh;I"bG#L.I-6O0H,UtN8=DibXU8b<!ZFRj# ^5#Z5((CHL$61Za?$VX4rN.'B]s3iF=$\Sg-RgPt2F:,?Di:X?a-gKl$j[";nGn.@JcLB&JcLB&M?!mS \]V%QVQ$6rLg<bJ1aNY7!W`?"!'(ZI=+-gRcHW;cV5^;OCgU+78O5-b.4$/b0KV[-J#1K\p=m$STpqC& AkXfe$O6e9%kLCnPchm9rMpp7K4n%@4>ni>.kihB86KYPN2*f#V/f-I"9S`-m/V_<JcLB&JcLB&NW9G9 A[Kh:hW3M(PA2lR$1\',!ZY7CfA,<Fhn=qT3#r>,pAbX*'JE4)Vpj_`f#tNq'))A.!?PU`rT4:<NC4Zh !r)a$!<a&qDm-3$"loZ8!.k3&!.k3&!0R<q:M"*lOJB;'f^Sq@c]_Ti-5d0lr;['+&KE2c@="LC^B)=D rr3YYQ=2Tr(^pHH!WiH6,WSFtBmH9J^C\6Ae%(f_80nHC$5".9?[SRG^DtGpqWH5&D)D@q!sAc9'd5(q ?>=%pT9=4o4sps8!.k3&!.k3&!.k3*!!@,0fZXi@[]m'Xht-NC?R5[R!!2ut#7_t>;JUoRVu<_7YgMFb dYh$P"pG,3!WiN0$6(j%EJ^*\Wr9%2Y-F$u2^B(D!X]o"6="l#W;Wh<YdpBL9.:P[!WiK-"V)G!2H"go dE\4m/e&'i!V$/A!.k3&!.k3&!/^a]NNq'EXJ`"j$C#I):-C'=!<N6&qu?s<5A[+7f]0pKWu.U\@8]0@ -Q*9r"Tnc.$l'd@>Dp;\n*.[eWt;1Y>W36(#Qt5?.nOZAXM;FHWu.UW<\tU0&-r:>#7V@i0go)aOfm*8 ECUuI!rrDi!.k3&!.k3&!.k32!"0-"SA`h0j5.eULeId[nc/b!05nr1josS@BfQh1oDf$q%P(M<b5LH) hf9qCp](Bs*ac_]joa4P,6d]>"p#H2QCg&<j8ac3JcLB&JcLB&OoQ.`>$YZ\O0caOiq38tRUnW5*=W&J !#GqY.Q9q,Fe6Fe`lm07p#aYrEChJr'++U<*<HQc.QgF8EIaaaZb"!=j34c[<A"O\$kjR@?[AFE^DtAp rp\aKG!?EB"pG/:&/H?C9OVjdH"^,B0,tDn!.k3&!.k3&!.k3*!!?P`\'5E*^94`UdGso#@jhE[!Wi9# 3ro?p0i2qMS>rcrZ*_'_fu0kD>;mK*"9JW*!X/`4'.?"DCPAFn\$WEDY.UHU;)B='!t#u#6="l#W;Wh< Yf3i/Bg3aM!WrN-":>b]-9PFTQ^D\\+9r&Q"7ZAC!.k3&!.k3&!/^a]HDT?_f=IrW8XP6G=\:Of"9S], !!39,#9cZb[FaI#\u;ErRuhMk6SBf.&dJRC!s&N1%MU<]CQu3Ee'"YdVQ$JB>W<E.$3gPD/P^GUZ,F<R WuRjY><*`F'ak*H"UY_U,;;8XB75kp>;d,t!s8Vl!.k3&!.k3&!.k32!"/iP@Zmt>hVc_kUhBcK!V?@$ "s-?kcfF$>f"l>d'Emt,$iphmB<g1IiT/mB.gGbK!s0TR_#<BtfQo4Yo)Jmo&2Q*KirFZ2JcLB&JcLB& OoQ.Q9ibP8JZZc0eD^DTTPd4U+:nSQ!#bkI+uhk_??;dUaO8uBo$k.:F&On5&dnmE!<*!="q_e'5?V]7 M3F^A_Y!HZb*QQo$O@4W*'.GSTDcME`r,l6laq[?)\WYc"9o2D'Hf+u<a8Ef2_?*c#k\1L!.k3&!.k3& !/:IU9lli0&@]6RYI;<pm&=PI"9\f.!<E*"3>k%rQa=9:[BI$TcKW]HE_J>5&-N%:!W`?)"U,;Q-oOh@ Qc7%[[^!!S\!M&(-kQOe)_XTeHBY?,XW4Oe`2ner0GOZl!WrQ1$kX='3)*mm74])T!s/Sp!.k3&!.k3& !.k3.!!d2(cLC,HY,<M7Q\]BX4rje0!s/H)#7D%n</AQ]nD1CJS=#4N?VNO))\WVY"<mpK!sJu?*&C<) MPRo3Z`C"$VgV`.'+t`Z!tm:bHC_Ia]`"l:Uj6<4,:"3<"TAQ5#S.[k-Sdt`?WoT:%K6G0!UTl=!.k3& !.k3&!0$sc$oD7E[G'ZobIiT2.0K5C%0@>+AtIT6g!.7"7iDO"!"/fB8!M-EgYq%D1CEmW!s0ZU_u8^# gPJ-."7cHl!oa33!.k3&!.k3&!0R=Z,s+UsApU5g`5g0ic_bk\4!kR@!!!$#&M-4;:0Vn>_p@<4s5LGD @nem*$j[%>!<<*#!<WT;'dua_?#k[`Y/0u6q<"f!4:_c2(EPYEH_12N*6.pVs8']m<@Jq&$NgJ7#71nW +=Sff+WV@1$3^#%JcLB&JcLB&JcLN*"$BqARLQ-tYck@?][``h0F.gaquJh[*`.L)g=acXZ+eTDpV2/K *u,4i!s8T+!!*-&!sT,H)_k`_bMCCVZ`_a"\!(#P'`nX[0192pPc=V`(pME9`iX)C*X)ZK!WrQ/#R_7a ,qgno'F4U=!!2TiJcLB&JcLB&JcLZ.#??Psk3V$5W$A(.RY,9F,6\2P!WWB3&f<H4PhQ-2e#]@5Li$6k 5:@0T$3pJ3+oqZF"9\o@+uDi!LT/bH\>uI(H!E6@'bLcU'J`a>UUnX`rMp0tH=BGs-lrru"V:eA$P*jd *[WKj*>&MY!<N;h!.k3&!.k3&!.k31!"&`@1gZX$jPS_?WW>-bo`,C,0j'+7g#15iW,a9lmJmRs/9S59 e)0)B4:V&c!s9`W_u8^$gmM%^#6N<RJcLB&JcLB&JcLr6//BKd7UUD2^VIY$cHE;?=[=PP!<<-$!YmUa 8Q'&OWl3NXrr:E4@6#hX%KcV1qu@];!WrQ<2cNa_FGZj2qu?]q_gb&f$kaC!4C<K-rP&BPnc&Ond$J/u -Q3Eqr;d!%!s8])"Tnl0!WhroJcLB&JcLB&JcLN*""[&XJe"'BX0&P-YI'[11^aQl!r`34!Ws`VU$D=9 bd4UphXU9A@3taNqu@`<!WrQ.(J]e1nD)$lY1MFT^2uRW!='Ms7::M,WVrq9Yg;7]cA5:E#6Y/2!W`<' !WrQ/"pP24!r`5i!.k3&!.k3&!.k3.!!bo9[+4:(^8iNZWi2V;<[e:X"9SW/%i?KVCn^\)j1;.^Q?#o" 5V3`T"Tni-quH]s*!Qup.6qR5cgAl\Vl+ZB4qeYE$Nq2&>D9#idD,X\)5D^j;*$<S'F"[B!s/K)!WrQ. "pbJ<"Tnej!.k3&!.k3&!.k30!!r`C5_%#?jlPRH!DEjn!"0]?HCr.3hT)^W;\SKt$5Qg4Zc_(]RS+Cs q#CL",\4gkjosS?B/U>)dK"k!JcLB&JcLB&OoP\!+=oldG+JTH+j.s0Jm(Mm'`e:8!Ws5u91r9!Ks&;A kP5)/UiK-m0Hq2+&e,Kg'GVlc?X%>uOK?=mrr3ALKh*$k',DKH@""^H^B):5rr3\jZ\Vs_4"D9b&./RC !W`<%!<E6'rW2ZlJcLB&JcLB&JcLN*""H`KH302&Wr9%CYE`cZ$j["=!<E6(""7WSn+G_^Wi<YZjn>om 0aS-n$P)tArXTkX,ZT`Dj3bZLYL_dle;6d>!X0;e3`U9`Vu<_.YfPb\g8&a_.j,]A$O6k<q?$Ztm/V_< JcLB&JcLB&M?!lHE2q1;jhRqrX!+<g<[n@Y"9SW0&K2raDkd4/gqL%oRY,*N9Kjg:&eGN_q%"GZ+YGcN G+?b,]r\*.G?I6R'+tWT'/<@-RBslHrMpd3N+lQo7m]-^+;YOp"p=u/!<N?+"9S]+kl?;8JcLB&JcLB& MuWt]&35$YrT4+*!Da-t!"ArM=G3WngYU2`TP#AMmJmUr,]0QrdGEiW=!%P?!!<9C>e^1!#2d%J=Y^cu df=t"JcLB&JcLB&OoP[u*@aB^G+8HF+Nhj/Jm(Mm'`e:8!Wj3#9he]*M7(7Cg#`7i[?#-0:-eS.%50Ch 0gK)aC5%\=Zbc53rsR>79cXi['GN?0J>3"W'uJMjs8VK/Y*"*F;Eur^(_$ZQ!s&E!!V?AD!.k3&!.k3& !/:IU-UD$]!fWeRrN.3GQ"W&a#R(;2!WrN-.:T+?oA7?PQ)DFFn?dC/*$$.Gp`ph*,pt'$A<4[R_RQkR g?e%_TN3<?!tQD)88=!WrN-X6][,Kl\s.DF:HU-J'FY3KquZm!li;V;JcLB&JcLB&M?!lDCSJeuiP;Mn Wun0e<[n@Y"9SW/&K<&dEMNC+g;CY;X-\NP@9#NA.4=j:*%a0>;J1c]`jr7NVPn]=6RNHX$O%+l7V7FR ^:sQH(oNgRC1C^]?WT`U-5?sq!s/K)!WrN+!WhNcJcLB&JcLB&JcL`0"9AriFNXRE!6tU@%/'Z1![;!1 XN8f:e]51X3tL`Z$O]"Q_p@#pj/HK>$hs]''N;UAjpBthXG::O.M`3hec::%JcLB&JcLB&OoP[s)CIdU GF\WH+j.s0Jm(Mm'`e:8!<O-%:et86PJ5&VajK;.`2\fHDdZH<:^p2q:/+o4J:Er]YdhO9rr3A\O]!>< 'G1g,>_AgM^D=Z,e`?;gg;pb%Q@NXG4=CsR#R(80!;lli!.k3&!.k3&!.k3*!!=N4=E=P$SZ;Xj+Kq&D 2@Kip!s&H*"U-AbU$M4!Xc/."Vn:K`Jlsrj3Bd.%*'cbU6W%fc\@]2TYHHLKna*Yn.K]_Z'd,SHKVA@H 'X"aSb0e23S;qr,9JRh/$j6V6!Wr?%li;V;JcLB&JcLB&M?!lAAX^9WfYOWfX!+<g<[n@Y"9SW/&f`;j FJ\['fu_L_^8m`WG%aoD6:*t)q*>ul<+'NmR]jN+Vkp>jHr**[%M/pM%jX5:FdTPMrMpR1TULafIXm$# CK3PE)%QrS!<N-#!!29`JcLB&JcLB&JcL]/!t$c'ao1?%c2g]Lp&GR(-"iFH`5'47e^(O,-3ir>%0IYP Vq0V\j5[@^4Vn.p!!3R"\,GFrj4VVdV20+q7NVof!.k3&!.k3&!.k36!!WrN,X,OYSGg2Gb0$i<>!jhU !<<-$!ZF=&;."O?`luH>_9(H[_69PqJo^[,%<$&tB5iQgU:7_G^;9%4rsRkQ==>(%%LFFcK;JO]'YqQ& `5]a8ai2NBYEs?13$&Y>"p4/lJcLB&JcLB&JcLN*"!]m,DZYW^Wr9%CYE`cZ$j["=!<N?,"tX8Xl0?E^ KnG8LWO&CUC/.Z,=BtZ-!*oM-(hJ/[WN`S/Xfp=Ip%$7D0EM7X%2CNuJ"Q\A&[&:?YHY7:YH=U[Dbi88 &d8=8!pK]:!.k3&!.k3&!/^a]3FJ#XaOe5.ri7$8IT@p("U"o-#88./8Tgp"m+B_Ahor[4U6:%Cr`fG/ pg+qNE-mA-WOB@9WMunqIni9`$kE[J%NdGqA;mV$rMpO1W2?AbUSO`aM/?*H,8U^i!;ur\!.k3&!.k3& !.k3/!!<KYD9)V;!6tU@%/'Z2![hlSZb3KD_:.8kLIE0]"oni%";(eB#RV>1G/3/!jQ5F0HqGaeq#CI# 5I(1L$g$F+h;$`9cH()_%+kQ3!.k3&!.k3&!0R<d%Mp?R??_q<^ELbBXb'_D//80c!<E6?5Z:KeG+?Lm _nWq$f\+Zj\#PsXq2>Q8Kn+T'P+SrV^B)11rr3YpRT_6^'Fb6d96?>iV5:H*\@]EO^CSrIagIR_><abd )%[&X!s7umJcLB&JcLB&JcLN*"!]m+C]]<\Wr9%CYE`cZ$j["=!<N?,"tX8XlKcZgLk^hUVlZVVIVN\: Ecq2$#Bb*.EdES/W;Wh8YL2t8o[.b8!WW<-%O=Y`OJ8_XYHY45Y5GC4Ybd7s=@4hd((^cT!s/K(m/V_< JcLB&JcLB&M?!l?@$%b8eA/-aWuRsb<[n@Y"9SW/'-8YqFf+]qf?Dk"ageLPSreI$E<10)q/lphKoqq* [CW^CWu.ah:II)U'b(<S(a_+9Eg<i?[^)m1W2ZfpWt(GA@n]$<*=rM]"9S],!U'N8!.k3&!.k3&!/ggZ #:jZ3rT4+*!Da-t!"K&XCn%fI[^=!)inUGF48p6#*;CHX*?ZRS2ID`orT4:D\qjKG!r2g'!?>^S^s^us j5f>"joh_h-OKn.!.k3&!.k3&!.k36!!WoL,<fFXSGg2Fb0$i<>!jhU!<<-%!Z=1!:L%n']#2:r^;/7P g!e$SYP=drSsbk)P+8J[rP'2ch>@6PkF>j3*Yo1h'K0*9KSbVKUTCi6r4`ckf[S'TUQ0S,8i@t5&IJX1 !.k3&!.k3&!.k3*!!=H-;euMhS>uOi+Kq&D2@Kip!s&H*"U6JfU?h7"Z&aj/Tr>)mT94b\Ll(nc#E+Fn L5V=gWr9%:YKZA,p!7b8!WW6(#T5L!Dhj^\]=,)OYPbL5Z`Tj\J9,7%6SBDe"9JZ+m/V_<JcLB&JcLB& M?!l?@$%b8eA/-aX!"6f<[n@Y"9SW/'-A_sFf4m%e]5_O]X"]=U6pspKnbHZM?f31UTCf5]!)(5(oWEs 83S:?&I&OR)C.:CG*]27]""Z8VQ'Ko&"SW'Am%bi.NT93"p4o.!U0T9!.k3&!.k3&!/ggZ#:jZ3rT4+* !Da-t!"o>ZBU6!Fa2ZTbj5.J2@n&sY8GGXZ852oY@u%ABrT4:E^m8Y%#5A0)"!:*QS&a:?iT0q!#/Q!j /f4lrg]2p+JcLB&JcLB&OoP[r(F)+MGF\WH+Nhj/Jm(Mm'`e:8!Wj3%:JP&3MR1%1^:qA'f%Jd'`k2#M #Hk&&TV8?i]D]J]_:\J]s6-(`1*@AB":QD3:1A6hG`nW!\,<uOaOT"reB>b=SU+F$.NK**nGn.@JcLB& JcLB&L&_<#4&]qsKq,1AXWXg4BJp8)"Tnc,!sJiX@\W5[gVTSPUSb&nXeqb\S"6/GT*LpVR[BS;VQB`u (pD!Ap%H^Q0EV:T!X'#Y3)F:ATu+RS['9J1&$iIFW2QVgS:+?k'a4^A!pou>!.k3&!.k3&!/^a]2dh`S `mhf)ri70<IT@p("U"o-#881196R6-p!^[e\$<-=W2QSbR$j>0pm_S\VldG?]<eL8Wu.e"AP>HG-5Hdi $4R[q4]uukUUS7EW2?NkWt2"oN.Z.Z;F*/e(CC9I!s7]eJcLB&JcLB&JcL]/!s^>na8P-#c2g]Lp&GU) ,\3(BbLP;'iT/tG\XnQKLBiZoNf]jBbM<'Y#3<e!GuY:Sp](R$&2Imudb3L;r8n:8[?,9$1`d,.h>i-- JcLB&JcLB&OoP[r(F)+MGF\WH+Nhj/Jm(Mm'`e:8!Wj3#:/+i/M6FY-^V@S#_8OI:`5;;^#J7UV[(!ZZ ^&>\__:%`Ms5otb2'NhF!sK,L+?*>8BnqeD[/@ZL^qe%<j7WENiN7T03[u!RnGn.@JcLB&JcLB&L&_<# 4&]qsKq,1AXWXg4BJp8)"Tnc,!sAcWA#&G_hSu[rWiN5'Y,nb,XK/GtXp;&0Wi<#!X02E'(pCd2o(L:L 0EV:T!<WQ?+=p!!Pf:e\\$>h4%^*+DalDj\bCrV4$3^P6m/V_<JcLB&JcLB&M?!l?@$%b8eA/-aWu@g` <[n@Y"9SW/'-AbuG,Y93d^Q9[XfSV)Vu<RfWX#W,YHb:3WMocr(oWgE;+Nf%)@$BJ"U,G_4&g3^Y0+/R Vl'Bm&#cA$Tnm\t;aE2_%Kln:!pK]:!.k3&!.k3&!/ggZ#:jZ3rT4+*!Da-t!"o>X@#_>3h;dSXjlG=S f[/!mdJ2&ndaHUof\>9BrT4=Fc)ln;('=10"q<_Ua3iW"r8n=CgssNKJm:DV"5a*1!.k3&!.k3&!0R<d %Mp?R??_q<^EC\AXb'_D//80c!<N<>4&/LPE/Ca5_SjL;cHXAC^:_&D\/`'.l1k7qMch_U((13F"9o2O 5[7u:F+opZZ+.CC^CSB?nG`I8UN]a'.MW-k!s8,qJcLB&JcLB&JcLN*"!]m+C]]<\Wr9%>YE`cZ$j["= !<N?+"Y!oUmI];UZ`^O<[CO#\ZMpihW#MbUh<ad2?RZ!U!!**'$5+4/<ILdha2#*cXK26#$an18naNVs 3uo"C"o\Q'!V$/A!.k3&!.k3&!/^a]2dh`S`mhf)ri7$8IT@p("U"o-#881196R91pX$4BWhlD[S=5q: rhA_T*27t">>@=7)$g<G!WWHA-TY.GP-;gA^Ug_QWiGut%\8]";cZ@J,Sgjr"9JT)li;V;JcLB&JcLB& MZ<ha.rE?*joE[-:CQps&HX1bNNUF]jl,(NeBPn@Y-+nmY6M+iD+uku!VQL#!>eUqVRjt'gYUoejp'SW Wf9:\"5j02!.k3&!.k3&!0R<d%Mp?R??_q<^EC\AXb'_D//80c!<N<>4\ngUEf7*;bLl%Qma&A=U7n.D RN/$!XK[Oi5U$sS#6Fo."U5Sk8R6+OGC5+,T!?$.^CS<2iUHj(]qBse7P#Dh$O-2'JcLB&JcLB&JcLN* "!]m+C]]<\Wr9%AYE`cZ$j["=!<N?+"Y!lSm.B,PZ`q!\fB1hrQ@XU=l\,Y"NKfm(DF,<E!<*!0!sT/H +ZikRPFJ5@WN3)$r2gL9^X1m-^lW2$1*-l,!<N>m!.k3&!.k3&!.k3.!!bGjOL3$W^oRI8*Mn3c.L61\ !rrQ>+"U'/Vt]i-YGJ(bP^dLhFaS]<JaA"0JSe[f5;FAp"Te`+!!NoQ-ob%<K9rOHce6XYXfD?#&"o;G De!-V:I-NN$NgG4!UTl=!.k3&!.k3&!/ggZ#:jZ3rT4+*!Da-t!"K&UA<O4Bhr3/+[@_\O8GtF42?brg +VkLfoDf4!&McphKqu9'gZACr#Mm_=Wbt!@#N5Z7!.k3&!.k3&!0R<d%Mp?R??_q<^EC\AXb'_D//80c !<N<?5#G-]Fc<QCfC/_=larI/GB7`hD#J2f<'D]G%LE:>!<N?+$5k<W:L.[PE-mP=^AYeW_oU6ZnDqs4 WetCU/0>N1o`0RDJcLB&JcLB&L&_<#4&]qsKq,1AXWXg4BJp8)"Tnc,!sAcV@A2uVg;C5%`np7\fpm%[ ;H6c`=9hu4>?jHB&HMe2&HDk8"pu"i3DO%(JWZY(XKAT&XUh\F^WG<SWfhR,1D^2t!X%rmJcLB&JcLB& JcLZ.#<-%P[)UV2X8].BV1)Gp#R(>5!!a/Z/5(2boC'f(V4j2q;bp=o>#n[*=mT61=%kk</0>Q6"9JW* !!<N=(EkP&>&]@s`9l[7[f!0:Un!g8I<TmVAkaon"U"o/m/V_<JcLB&JcLB&MZ<ha.rE?*joE[-:CQps %K[qkQF+rqhT)^WA2PM>k5tYamf3Uq&Lg:hO0d9rrT4FEg!@U5H<E9J!oj94!.k3&!.k3&!0R<d%Mp?R ??_q<^EC\AXb'_D//80c!<N<@5Z:NfH&f,Kk5G>[h4SRQ69R?l1^GKN'FG$I!W`<#!=T);&/HHN:Kh1F I[RqK^CS/t`5]pIdE]b5M-`@t*"2E>JcLB&JcLB&JcLN*"!]m+C]]<\Wr9%BYE`cZ$j["=!<N?+"XmcN l0m9AZF&0Np@cOT7N`m#-Klos.j#E0!W`9%!!*-'":#MW,Vi#(I?U>&WiZ0$&$N4C[(!ZWXdjT0+peDT "7ZAC!.k3&!.k3&!/^a]2dh`S`mhf)ri7*:IT@p("U"o-#881196[9&l,Km&Sq0j25Vk8N-7A%,)^6=@ 'FtKS!s&E&!!36+#7_Rr1.>i9\**#6`VcbIW262ZSskq2MJ5L""pG,3m/V_<JcLB&JcLB&MZ<ha.rE?* joE[-:CQps%0@npS%$`%gp`>U2\#r:!!WWM6t_h+jo+<KjPetNeB#+tBcR68!.k3&!.k3&!.k36!!WoL ,<fFXSGg2<b0$i<>!jhU!<<-%!ZF=&;.+^2YfQ52rs-r0;(3_2)&)3H"qM(G!s/K(qZ%91!<NKG2+U_Z G`/f/[C<WT]"GcU^B`**VgDE--kZ+PJcLB&JcLB&JcLN*"!]m+C]]<\Wr9%CYE`cZ$j["=!<N?+"XmcN l0m6?ZF8Q]p@Yq-/-Z=d$OlA2r=/o:#6P#&!##D;"q24u87[4.QD1:[Y-"q3YHIf*#I'A"0b=]s!q?8B !.k3&!.k3&!/^a]2dh`S`mhf)ri70<IT@p("U"o-#881196[9&l,9^#S97Ll1`RJL$k3USlOO4/$4$h= !s8T"!#,M@&K)ugDOJAad)iSsWi2hoWN)usWs>2>;C2\T"9\#kJcLB&JcLB&JcL]/!s^>na8P-#c2g]L p&GL&-Z5E`d,<TZHVbmgc2\:X*^+&"ajo,$iT'"\jo+<C]Klha!.k3&!.k3&!.k36!!WoL,<fFXSGg2< b0$i<>!jhU!<<-$!Z=4#:gS:'YfH)/rs-u3<%K=:'b0C9":Y\C"TnZ(qZ-Tr&-W^m2FgqfI?'>ELQ\.* [(Q@P#M%JBSp4<r)?'[3!.k3&!.k3&!.k3*!!=H-;euMhS>uOi+g7/E2@Kip!s&H*"9g5^T^)%#_m6]( o_.sdA1Icc"U>=t#m:S@"9S]#!#,J;"UGS\1It_`Fb,L>X1lB[[BZn5XTu&%F[dJg$3]l!JcLB&JcLB& JcLZ.#<-%P[)UV2X8].AV1)Gp#R(>5!!a/Y.S=o]oBjZ&V4Dp-6ocG3'*npPl3ROu#6kA2!rrAt!#,J= $kXI78S3R7RA$Ua\%SuDVP^BlWs>8>;(E+a#R'MpJcLB&JcLB&JcL]/!s^>na8P-#c2g]Lp&GL&->JpT cJ[H^KNT`,blA.S$m%<-G*okff\PNJrT40t9Fp1aJcLB&JcLB&JcLr6"qDFo5$iH'rP'Mub,p8!6S&rQ !!**%)*Lel>&oP*`p!F%s3m$10-qPM$0VWr"pG,-!W)lr!>#>@(*P1k:0q^XFDQ)UQ)M:m^B`BTfYF(u 7j7g3q#H!HJcLB&JcLB&L&_<#4&]qsKq,1AXWam5BJp8)"Tnc,!sAcV@A3#Yh8HV+fCJY/[ULWd!sAf3 kQV+l!s8T"!#,G8"9f&D*\''8;I4'iTYT1$]sY'BXTu55Lg;k]&I.b*JcLB&JcLB&JcLZ.#<-%P[)UV2 X8].?V1)Gp#R(>5!!a,W.7eTXp@?G2V4N067Q_t=&I/4<!!hip#6b23!WrN+!Vl^0!X&`8&038^8m,kR Mk$ldaL%tEWVrk&S9@a^'+P<Nm/V_<JcLB&JcLB&MZ<ha.rE?*joE[-:CQps$j%_ePHiBjgpN&K0*TN! $3:>E03=%>aOK&,rT44"<u1o!!.k3&!.k3&!.k36!!WoL,<fFXSGg2Gb0$i<>!jhU!<<-$!Z4$q9iu@l Y/]Q#s8UN0=tq<A%Ktqs!!<-#pAbd+!<i`;&K<&O4]>`o??M'n\,F&If)5*q_N%bI!r`5r!.k3&!.k3& !.k3*!!=H-;euMhS>uOi+Kq&D2@Kip!s&H*"9g5_U[@^2`Nur#mIp4\@OD3Y!s7cjr<*0(!Wr)r'*/.9 ":#;G'H\ha6th[qm+TRlYl1[/\%AA[:b`dmnGn.@JcLB&JcLB&M?!l?@$%b8eA/-aX!"6f<[n@Y"9SW/ &fiAjF//R*d'0@<KNLc3.3/m$"9Sbl"T8E(!WiDt!#,G8"9\o;%i$*95>bsCT>Kp9[&Br%Ws>/9:G*Cq $jQ)!JcLB&JcLB&JcL]/!s^>na8P-#c2g]Lp&GL&,@Z_:bhq3cP\N#Za8cGM.UJIKaOoPOjo`\4*WtL( JcLB&JcLB&JcLr6"qDFo5$iH'rP'Mub,p8!6S&rQ!!*-&(HP5a<bdDk`S^Lks4<WI4"MB^!r`5l!<*!# !WrQ("T\],quI')!s8Z.!WiB'rW!?-"UPYP0hYME?$27:rP&`jrr2NDUh27^!W`>t!.k3&!.k3&!.k3* !!=H-;euMhS>uOi*Nt`A2@Kip!s&H*!sC&[T]kt,ag8>!l1ObYAgmi]!ri;k!!NB)!WrN-r<!0(!!*-& qucp"!!3#u$ipSD)C/"(YNkN,_6Ns@#J&!fRr:M7$Ln+J!.k3&!.k3&!/^a]2dh`S`mhf)ri70<IT@p( "U"o-#7qh#7<5:'r7e]YTSm,L7kc2#"Tni.nGiao!<N?*"9e]+#Qb&.!!*-'"9e]+!WiE(qu@-,%3@/h @u7J]mE)Q/rMp0nDbqns'b:Q:!.k3&!.k3&!.k3/!!<HVD9)V;!6tU@%.sT.+BjQ!aPPaeSTd@,`rH;O 2fP(kcf"ca"3YC)"m#`9!.k3&!.k3&!0R<d%Mp?R??_q<^Eq%FXb'_D//80c!<E681Ik&8@!\fjeEcu2 kI6C]9K!t!"p=u.o`,j1!sT#>'-&;O,T.'o!sJl5$4djk*#&he!rW--!sT&@,!/Iq>\J\qrP&`hs8VoR Ve@dg!s/N!!.k3&!.k3&!.k3*!!=H-;euMhS>uOi,d3JH2@Kip!s&E(!s9cJN6:)5c`sdmg?\LOJOggr $j?\6!<Mlo)?Bj?"UPSK&JGlq&IJ[B!sK&D&Io<\$O6b8r;[6,"q2+^3F%-:]"c%`rN-=8dDW&48L+`7 !.k3&!.k3&!.k3.!!bGjOL3$W^oRI8,Gfii.L61\!rrN7'HB8SX8i4lc)d\,H<X992Bi\?#Qt20!VZR6 !<N<)":5SR)ANem$3gY:!<iiD)As1t#R1A6"8r3.!XTSb/kKf<[`6M,WVrk(S8M.P',;&`!<MWhJcLB& JcLB&JcL]/!s^>na8P-#c2g]Lo`,C76>`%&gY^2ZQsq'>`rH8Q0irt8g\p7;c#"m5!TjB6!.k3&!.k3& !0R<d%Mp?R??_q<^Eq%FXb'_D//80c!!**4.mQU#@!JKabLl%YpXZg?E_eA&$jZt:o`-EA"q(tZ-ok"0 8MM.i"UGJG'd5(d2^fRQ!s/N)!!39-#SeUB6!%rVXo6!Bdf9@GkGrAS"pG)1q#H!HJcLB&JcLB&L&_<# 4&]qsKq,1AXX109BJp8)"Tnc+!WiHE8U.DYa2>0d\]<=kd[Y,A//eot!WiB'p])66!<NB2&K2i?.PEV( (((*G$l1!2+<;F=&-rC:!"8l2#7M(f4]ul`R]3LhXTu>dbdWO..1G_HJcLB&JcLB&JcLZ.#<-%P[)UV2 X8].1V1)Gp#R(>5!!EN:&iFI.rr3SbZDF%TIpuML1*%/@#6Fu.!VcX8!<NB-#S\C22D$-n'+P?R!so_h 2Dlp&&.8^G!s/B$$ipPA'cf)*ClbL'^9@L9$(Yj/.hNO.#lt(q!.k3&!.k3&!.k3/!!<HVD9)V;!6tU@ %.sT0$S>>-YhA!d`jLae'EZ;T":$)GOkBWp"4)$?#NYr;!.k3&!.k3&!0R<d%Mp?R??_q<^Bi!)Xb'_D //83a!#Q1l3C?SNGbMslaNifCp#=2bCI&pS$jHb*!%@sU&K<&]>^DiY9IgJW$ka="1.5,A4t%*K!s/K' !<N?+#n\!t7;@UYrP&?\rr35iY&$!&"p>#'!.k3&!.k3&!.k3*!!=H-;euMhS>uOi-*NSI2@Kip!s&B& !<O-&BU#U+[^!$A[_0u<\sRP3.hVpb!WiDt!#kq?!X&uP.5j:U:0Tq/&-<"K,;V;90J4^j$j6D-$N^G7 #88::6XP2,Wr9%)\D#EMRp%ERnGn.@JcLB&JcLB&M?!l?@$%b8eA/-aWt2%U<[n@Y"9SW*"UGDfBsRa< &aQp)UR[d/CfW_J+VtOh!WrJu!%e3S"U>MZ0LSu63\)-b%L<1H,<Jn)5V*ic$jQq:!<<*#!sT&?+#Qi/ M5@YfrMp9rC/QYr((^cR!<MZiJcLB&JcLB&JcL]/!s^>na8P-#c2g]Lo`,I))a%f,fAtiBd^Wj@%KaZN !sBreci)u/cZq8P!TjB6!.k3&!.k3&!0R<d%Mp?R??_q<^Bi!)Xb'_D//83a!!`oR0g/6=GFncJ%*&2E s89lo<$rUt#m0c#*!6Wf,rJbQX4<kW3=lT3(`k>"??gTm2B)o*!s8H&rW!-(!WslWL9(9f!7:`F#P,0= 2[]io!r2hJ!.k3&!.k3&!/:IU,<Jh?!em/ErN-@/Q"W&a#R(;2r;[$81KSmcU9"3o%'\+/bI2CV*!69D !Wr,t)Zg'D"r8RH92f8@Na+FW!XBVs7nlQC6olS,"o\N$!WE'("Ubq\2IM9;rN-=6hq?>U@l"Yc!.k3& !.k3&!.k3.!!bGjOL3$W^oRI8&#F_U.L61\!rr?'!Wsi^ZMsk)qS)p/$_huW9J7n<&-N(:!r)d=!X/f: 'IlO[HtH,5*ubk$";<IdG^!CW-5R7%"Tnf-!W2p&%NmT"CQbs1rMp9rBN$Yt'G(QQ!<MZiJcLB&JcLB& JcL]/!s^>na8P-#c2g]Lo`,-r%4G,8d/E)1gmhCk#Qj5j!s&N,!TO.]$r"Y=joa"\3=P!LJcLB&JcLB& JcLr6"qDFo5$iH'rP&W\b,p8!6S&rQr;['.'dPP*@<eCB^B)::rr5.8XasPD3@u<k)&O,)'c%Q%*$?OY 3_*%OHCr.7Wbss3%2'R&1f/(SSUb<G3%lR!'b_)e$4RR])*hkjXSom6d/O%Mo!30m$O6h:q#H!HJcLB& JcLB&L&_<#4&]qsKq,1AXU)+qBJp8)"Tnf(!!`u_7Ug\(TrS'n6EeA\e&ISb8h;80((h&f%Ls!\&ec$$ ,UkK6:L%RLFbcAo2\uK#*&:)b=BoHK;*?QW*#9%m#mgkB&/liK:2l8lrN-=6hq?>U@l"Yc!.k3&!.k3& !.k3.!!bGjOL3$W^oRI8'W$7Z.L61\!rr?&!WjKBNR.CuqS3!06DTNU?VX-\3\2Ns(_RAl&J,Qg'c@u8 .53h]C4hjo<]D$:'+4pW2-GNgG$dj'1+41Y&e>?V#m^kG*A^B$LS_SirMp9rBN$Yt'G(QQ!<MZiJcLB& JcLB&JcL]/!s^>na8P-#c2g]LoDf!r'L$ogrT4=?[!>:l'F!k("p"i:&Io$Iq#CNu!sA`.nGiXl*+I.j joa"\3=P!LJcLB&JcLB&JcLr6"qDFo5$iH'rP&W\b,p8!6S&rQr;['+%N-QX@!\@A^I#fhp&G'VaJk,F B2h2[3&NHG0JP:?5Y=sZASlI7T#0=O[!"\J%hfm,2cb7']r[ZZFC@p00Ie:g(EXqT1K&4LXSom6d/O%M o!30m$O6h:q#H!HJcLB&JcLB&L&_<#4&]qsKq,1AXU)+qBJp8)"Tnf(!!`oS1eM;,Q)FS_6E[uHf@7!c G%"9:2CTpt,U+H\.P<SF;-dmSGCG*sOe8Oc3Z%l&*&UDqAoE9\J9>O082hn6(_m\q*@s6C@==B=rN-=6 hq?>U@l"Yc!.k3&!.k3&!.k3.!!bGjOL3$W^oRI8#c2uN.L61\!s&<$#Qbl/D4\SoiPkbr"/hQ:D>n*. @pMr!2CTsu,UFfh0fD6g;daHjNM*>!=?%*5'FP!Z3*qW8PC[OU;Fil%-m0EC'c%W'01fc0U:8+LrMp9r BN$Yt'G(QQ!<MZiJcLB&JcLB&JcL]/!s^>na8P-#c2g]Lo)Jjr.;Hp%jpBtfUO--..i/Hlo)K'u"qMY( 3\_Za!Vl^#!Xfhk+VG%^oDet"13_1Fjoa"\3=P!LJcLB&JcLB&JcLr6"qDFo5$iH'rP&W\b,p8!6S&rQ r;[')#7VA(?%8UI^I#cXe`HJkf>P"lPCI=T>?=Zt:Jakf@;9b&G_1a<b3J`s]R3*^&/H613a-s7e^Vpf ]UXL_9g^op-8@SM8mZ[uYl2<:d/O%Mo!30m$O6h:q#H!HJcLB&JcLB&L&_<#4&]qsKq,1AXU)+qBJp8) "Tnf(!!`cF,Vr/3Ml$BS6E[T)_p,rsS</5;=[YJ;4#oAg7S?iuIZgFuT:VIJ[CWbb4W"2)*]?f)FG#pe \@8fAJmUnt-mTlR/3d!BGDi&nrN-=6hq?>U@l"Yc!.k3&!.k3&!.k3.!!bGjOL3$W^oRI8$)N)O.L61\ !rr?#!='2i:N;Q%`P)5N6E-ZJNdu_:LP^=k=@GJ>4Zu)';d<sXJW?1qX0oHa=>gm1'+4pZ4CskaZ)Eh3 C0OCu4>eZ6,U=`d6",GF^<=j-rMp9rBN$Yt'G(QQ!<MZiJcLB&JcLB&JcL]/!s^>na8P-#c2g]Lo)Jjn (g"ELjpU5&bIF:*H"Ko,'En43%06M:))"K\B6f8=0Fe0[!"&iH4C`)!1E[86!Vl^!!=0lEO4X?m"4;TY %-7J@!.k3&!.k3&!0R<d%Mp?R??_q<^Bi!)Xb'_D//83a!!`N+"9p/TJYW.X*PfM-_ns4)^;@CXP)"O4 EGo]0Bl.j/Bm#)nWkSH2ruf=68/DjS*[EpUGb<(<rVuoU[?#03:dR'-:fgh5GDid*^AuX[rs/,#D`8%/ "TnK"JcLB&JcLB&JcLN*"!]m+C]]<\Wr9%*YE`cZ$j["=!W<!'"Ul(c3+.E5qlN,dXfnn1Xf\C^Ht-A_ <)H\#@;'kIXNfD?]s=clg!RZZ5T0V-*]Hu4JsW@AeF!&*bEHO(3\r?84B#p?NLQiIrN-=6hq?>U@l"Yc !.k3&!.k3&!.k3.!!bGjOL3$W^oRI8#GllM.L61\"8i-($lq)qBTB1+ql9asW;`YUVl-#?F'DaK<``O? Fb5aMZ,OeqYc=UE><W`9&e"p]5A["2e(VX2L1O:\84,Kp1c73P=*gOai9&RmrMp9rBN$Yt'G(QQ!<MZi JcLB&JcLB&JcL]/!s^>na8P-#c2g]Lnc/^s6aZdR+QVSBhqm2EgR2%g#mCG5!WrW5%idZAPI8?Ug"VZ[ ('442$OA7q][sTWF%@Ja!rDs%!Y$A@E2hUjjoa"\3=P!LJcLB&JcLB&JcLr6"qDFo5$iH'rP&W\b,p8! 6S&rQr;cft#Ql&<DhjRJWO_f='u[ntWM#`FNJ`LCIsl`gG`%c_[)2\=ruf@88/;^O*@*gSGFQLuk4eoH bGp_XGA:JsCi*m,J!IMA^C/HgrUSL,?n_ij"9SB!JcLB&JcLB&JcLN*"!]m+C]]9ZWr9%*YE`cZ$j["= !W<!+":,JO.Sk&HUoC>ppoQQUTT=JDF)Gf3FE`+iT=*"a]sb2Ke_einG<d&I#Tu0,Ck\@XZ,+uQpYDm& @pN/58m?(XNglfDX8T.*]@4a$Jk[X$nGn.@JcLB&JcLB&M?!lAA!OOEf>+HdWs>JM<[n@Y"9\Q%$O@Ln 2,8:^]>_LmWVEM1Um-OQDf0N5Fb#C:Up%JOYc=UuVfu</rY-C^"<'REVTIWV`2&cO@T?T7<)HUq>$H-3 ZJ4U*bcLcD$Cbs0.M<F*#Qb#-n,S%?JcLB&JcLB&MZ<ha.rE?*joE[-:CQdo"p#cXY//QBpuWF-IS(q- )Aj2++"&[,@Z@e>eD0$@SP9n$q#D6;/oA\fc*sBm6n8rU"9JW*"r8d[Ars^^rT44,D(,\N!.k3&!.k3& !.k36!!WoM,<fFXS,L)-b0$i<>!jhU!W2p)!<N<91feI<Kp&S5^D4]+^q-qXWhc>YQ]R2`L5D:mYdhRH rr4+]K1?Xd'ceSa>]uURak,VHo@LaZU6q$tLk^G+IZL/3rP&`ioB4K*Io%Kr"9S]#!.k3&!.k3&!.k3* !!=H,;euMgS#Q@g#d9M,2@Kip!s/?#$NgP<%3I`=H]XYlXSAnXYGe+XNf8mQLl.4SR&7=1]=,#KY1;FY _fnBb!=9o2<c3Y^WN`kOe)fGtSVDW?F`D_[NgllDWiQ*##IqUJJQXoO$1S"I!.k3&!.k3&!/^a]3bFem bhBt8ri6:#IT@p("U"r*!"/r?(EkeDK<)u6`j5B?3N&@/L4k88L5hLjW3*SB\#H:%W2FiC584eF$j7J8 EiRFCl,9EfQ@s-nDfKZ7GC+b#VSV3Od_;a[WsP88:+Htg$3gM3mf7q>JcLB&JcLB&MZ<ha/8`K,joE[- :CQan"U->VI]_2rjqu@=G>h+(6pX79<aK[(YKGGNi8`ad9c!j+!#PtpDognia1.ga=?nAa,Tn'Y6X+Vo Yg))(jo`\4*s:U)JcLB&JcLB&JcLr6"qDIp5$iH&rP&W\b,p8!6S&rQquH]s#7D\79O;anUA)D:`5]d2 ]XYDTXeqe`S=cRXZF@H_qYpL;`e$Yo%M^!14^3&u_8OICfAkN-_R["RVP'BCNg?ED])BAOf&=r[N+G3q !s/N)q#H!HJcLB&JcLB&L&_<#3`BhrKU\t>XU)+qBJp8)"Tnf(!"/i2"U>_m87Hh$S#H+a1p!aXV4s]W St2OIU8G&u[C!6DY--=4e&-Aq)?C-f4'-EXS>`Ws\%fr0^TaE%R?j&&R\0SX!3H+##IUXi?o]JH#OqeG !.k3&!.k3&!/^a]4_UG'e(hjAri6:#IT@p("U"r*!"/o6%1smTCR2EIah7DL$`U"qR$jA2S=cUXYPtmY X/;_lWMarD584eF$j7P=FKX'PmDZ#tS!]FrLl.+QP*_W8[`?b?]s"I7Ws>/9:FZk`#QsGoJcLB&JcLB& JcL]/!s^DpaSk6$c2g]Ln,NRr+@q+)puWFJa0:hiNJr[OOdViB^<P9di8`nVSP9n$q#D6=0Q>+ohUp/o Z(-SiE,92uG)Dfl^WtQlrT44"<>>Pr!.k3&!.k3&!.k36!!WoM,<fFXS,L)-b0$i<>!jhU!Vl^#"V2Is 5$rT(pV-aB^\keJ]tM(jrji<G]=bej_YX93+NB"&'+GWq,X#@RR_ZbU_SX.)^r+%)]t:hb\@8uY]Y=?Z #L_)2PAO&M(B+@0!.k3&!.k3&!.k3*!!=H,;elGfS#Q@g#d9M,2@Kip!s/<"$3:20$61fk@!\!6poOP! r2ot"#-Fu-XK8S.riQs;Y1;FY_fnBb!=C&6=E9:jX0/Y0ricm9YHb74Y,n_*WiN2&XfVK'#I9k?6QQmJ "n;SE!.k3&!.k3&!/^a]5&6n3f]9uOri6:#IT@p("U"r*!"/f/!sB;l;gY1Ha2.POs/>sqs/Gpr"fnW$ Vl?ZpWZe9a>!E]8'+>!`7<l/hkju]lW2HJgUSOfbW2cl!XKAS)ri5ms#Fos5,mjn^"76)?!.k3&!.k3& !/ggZ#VBo7rT4+*!Da-m!!<<I?FT^l!oi(lptGr,hV[>RroF:@SP9n$q#D6=0QG1qjQ#4Wh;$`9e^N!q f@ep7hVdDTrT40q8IXY[JcLB&JcLB&JcLr6"qDIp5$iH&rP&W\b,g.s67`iPq#Cp-"q;7q:iMAiVPU)f Ydh::^EC>/`Q69MdEg/)mcW<!CH;t6&JlNL=)a(sVm!J9\@]EK^CS/u`lZHUe'?.FQuPta,nT_LJcLB& JcLB&JcLN*"!]g'CBB-WWVrq)YE`fY$O6e:!Vl^*"r&:=87Ht1U84cgXKASoXWF[MZF-sCYe@H@N`e+P !XTo*8n3.,TrP9"YHY45Y5#+0YHbID]>M7cU46;u&e#!InGn.@JcLB&JcLB&M?!lEBqE/jiPV_qWs>JM <@J1W"9\E!%gsRE>BuC/Z*LdG\$N6:WUm/4W2-/^T:_O:Dc/A*'FtNR(HZ2p\&Q_<['Hd3Vl6Sppo=q( Un4'GP`q>fB1!aF"p>%q!.k3&!.k3&!.k3/!!<EVCrlS;!6tU@$LRm$#:jDa[)1);g>1]ZjpU8.h:gE& _mZCG-jo_L$NqMGQH.G,h;[JUjnRsFjP\hGd)EDkC`rl@!.k3&!.k3&!.k36!!WlL,!K=XSc-;/b0-i9 =@"GO!Vl^,!X/i=*B[PKLPh"HMjL3H^@f5`_8t0cn*8TL^qR7WRW1tM$O7(P(,&EsIuK;HQD:Og](j#N `66cnqWlbOYEEm&3%5aRo`0RDJcLB&JcLB&L&_;u2bdodJ=*;6XU)+sBJ^)%"Te`#!"T2A(EtS)??Cm^ QCk+VWN>]n+0`;g_mue=QAU!$;DfO)!XBJf3)4%1Nh3>\]XG2PYP>41ZFS!(lI*&0IpY>[$jHk;nGn.@ JcLB&JcLB&M?!lAAXC!Pg;9oiWs>JK<[\1V"9\E!&-s(#4]#a=Nh38Y`m)Q7XK(ro+K2$)P_t0JJ9bHk /JA[&"p5Ji9l>l[XgYaO]<S92VQ'?kV[KQ(sPEG&'%('OgC"76)?!.k3&!.k3&!/ggZ"tOH.rT4+* !DNpg!"&oO5Z_rcX2!!8jn7aDinDSgWJkk'7j/3?pAbO+,u]Ae]@#BiiT0dr$/a=S\=%GA5Tg3i!.k3& !.k3&!.k36!!WiI+['.XSc-;/b0$c7<Br#J!Vl^,!<WK1&0s;5@;U.4H@h?[^@f5`_p[`Gr92M<Um6RN >t-Ic"pG8@%j=/=DL$SSJ!-A(\+m]K`n0SRs6.G#Mec'E+;YLko`0RDJcLB&JcLB&L&_;t1eM?]I[-l1 XU)+pAhsbu"9JW"!"]5;%20^55#Pp5Jrub)X/rDqXWXdU^<4EqQ\9Bf:-'dA&-`1>%2pQQ:1\^2T!l\S \?rL8XUheYg["LVS9%^n-4g=`!WqllJcLB&JcLB&JcLZ.#<-%QZcLb8X8].)V0l8k"U,#2p](g-%2L'< 5ZVTIPGl:OfZCJlX!"=3OF;=pD.QsC1EQu2"p4o8+#H]$G`AAu\&-.dW2?NgWt1efG?\9Q<)5n9*=N#P !Wq`hJcLB&JcLB&JcL]/!sL&c`r5$"c2gTGli7=m#okg'I%.^sjn7aBhp8`rF]LOJ&HhY*#mqtKCQuN\ g"tcajp9b_YF&`W*t/51!.k3&!.k3&!.k36!!WiI+$<nWTDcM1b0$`4<'MiH!Vl^,!<E6'"V)@o1.kb` D0Uf-^@f5``8:@ir8GJcK5"4H.NfK7!WiK/#8A[U<b6)aD244H[.qBHbN/O"s4OK*@7Dme#R1A4o`0RD JcLB&JcLB&L&_;s1ItsVI$CQ-XU)+pB/0bs"9JW"!"]/5"9f,H+Y>lXD1S%HW2ZlkXWXdXaND2cI:Q&3 -Pd!l"9S].#S%Ro2GI_.Q*A]Z^pgTDXUhtklh9t^I7u45&I/C>!<VckJcLB&JcLB&JcLZ.#;oeDXMNB& X8].)V0l5i"U"r1p](g+"9o,C+"ouaG*KAbgsNk.WskhjJ9,F4<D#;&*=`5O!tYJ<&g/el<c3_aY//Dk XJ_rjWt1\Q>=qUO1aj=W$j6V5!<MQfJcLB&JcLB&JcL]/!sL#_`;Sfuc2gTFl2V%j&1pn+U<DZkjp9eY RrV4T'a4X/!!iiO6>r^@dG!RSjp'DHQub(s"5j02!.k3&!.k3&!0R<d$5"18=a?J7Zj=1EP%mQH+qOeJ !"]28#n7Y&6rmi>K9rmN['mC>[Ni8j_:@K)gUs)*?V*+"&I\mI!<E6(":ZA(5Z2!)D/=NWTsF[*!4Vp; $dIo1s5:,7?UHId$h44K!.k3&!.k3&!/:IU)(RgJ!c*@SrM0^lJ6"''"U"l-o`,C&#ne.'4B$!DLm"7% rhfamqkk[;V5L8hTTaP)75,l!#QXr-!<<0(#7M@q3)*k/QEeHE['$;*V#[FlW=-Jom.AM]=YCR%#QsGo JcLB&JcLB&JcLZ.#:rMeNh<DRU&L_jQZ,P@"U"o/oDf:&&0!,^=*'M,Za?s7rhBIkqkG@.U6pXWAm/&! 1a*\G#6Fr-!<<61'-&G_;J1B;SZT<%WhfTk!2TRe$\N1p6o-;7&dejH"6ff;!.k3&!.k3&!/ggZ!>%8: rMKXI!@S$6!!WH4-9YUaWW&mtXS]"'WMl2);`Z-6"7H3q"W'(*MNsd2X8]1#Xo5=)OCpm*%KbMfJcLB& JcLB&JcLr6"pYPK,t)3mrK7GHHX]Q&-5d0lo`,L'"9o2D+"ooX?uUXZP*;.0Q2[-`Q^3o(S=H.;J8/%K 1*dYD#R(>0!>,A8#o"L44%i^gE-["mPE_>tr0Ie\TVJBJFBCg_+;4tL!.k3&!.k3&!.k3*!!<cQ.Q@K' ??#jk#Ba*,)?g3F!qZI$!X/uE)CRU<>%;DkIf=otJgc/"JUi<%IWo^B>td=2*u,4h!WiB(!!39,#7_Y! 1IG5XHARH3KRn^NJd[?mO-4fi3?AY;"U",lJcLB&JcLB&JcLZ.#9G]p>A/)'HiA?sEDnY."9S]-oDfC( $POO/3D3_"GC4mkJV&LOJ0o_pI=66P?;X6V/gD2F#m:;1!<<*%#7V=e-oOLm?u:.<It<-%K)C-.IXZ-; 8N&%A'at?P"9[lgJcLB&JcLB&JcLW-!<sA=-3+n`!p0If!s]DX.kNA+r\+[3/hJY+.O>rD#QsAm#6ke` ,Ub2r0)RC-0/"Uh%gE'k!.k3&!.k3&!.k36!!WT3#o+gK:&S3#;ar_s*Yo4i!VHF@!<WH.#S7q#0KDU# ?!^rK@q9.^An>L_?sd5F>#\$T0-qYS%L*(=!rW-2!X/rE(a1@d5Y4aN>%(lMAc?9NB4kaa?X-Dn1+!tS $O#u"JcLB&JcLB&JcLN*!soMT+9F&N5lF1U5qa2f"9&Ao!$q[L#7:tX+=T*-5XnLF:f::m;Gg7d:eshZ 6p<O`-m0<<$jQk9rW*]5!WrQ.#S%Uj-87MN:/Feb;GpFkr)3u$:JFJH/fkT1"Tnko!.k3&!.k3&!.k3. !!a)V.l01M77mJM#=C*`$j6Y6!V?@#!X/rC(Ek7c5!qn;;u9N+;c?Rj:/+;F2_ZX')A<Se"pFo+-3+#I "U>AH(EOkT2*=6"9i"_g<`N.!<)ZXk7QN(E)A3G_!sA]-kl?;8JcLB&JcLB&JcO[.r;cm"rW1gTrW2s! rrLdQJcLB&JcLB&JcLr6"p+l0"q2+^r>c+_(D@;e#6b2#!%@pL!WrZ6$kF$i+!W'Y-RgMq/1iD&.46De +<MR?'FtW[#6b/1!<E0#rW*N2!s])>%M9Em*$?IQ-RgSD/IO$V,Tn*D&e53P"9S)nJcLB&JcLB&JcLN* !sAc5$N^bL(&\mQ'FkBP!WiB(oDg-;!X&W0#7:nO&f;N-+!;aQ,9e6P*Zc=B*#KA%%L`XL"Tnl/rW*`6 !!**%!X&Z2#n%4V()\)4+<_pP,5`Yn+<2:8'+P<P!s8T+m/V_<JcLB&JcLB&M?!kc$4RO[',;;^('YKa #m:>2!V6::!<WH/#7:nP',DK.+sS9V+sJ6V+X%mI)Aj2%&.JsO"U"r1"8i-0!<NB,"UGGD%hTNm)]^(G r?Mq!+sJ0P)ANek#R:J8!s8T*kl?;8JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6fDl3Y!s8Z1#7(VC$iUP= $OI%B"9S\g!!`N+!sSr8#n-Y>":>D<!s8H&m/V_<JcLB&JcLB&JcOR+'*8:?"U>;>$4."D#6kA9"U"r1 !pBUi!<WK0#mgkD#lP&3#Qt52jT'l4JcLB&JcLB&JcO^/!WrQ0rWri9#RLeC#R:M9rW<0&!UB^j!<N<* "U>>@r<W]7#R:P;!s8S_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!0R?7!##A7!s8Z0"pP;<#RLbA"pG,3 !WhKb#6=l.!sJl5#lFu2#6b84rW2?cJcLB&JcLB&JcLB&g].BW!sJQ+!s]&8"o\W.!sA`/!WhKb"T\]. "U5/,"p5#2!s.K`JcLB&JcLB&JcLB&huEo^"9er5#Q4i0"U5)3"TAK(!WhTe"T\Z+!sAf(#6kA9"Tnl0 !T=$1!.k3&!.k3&!.k3&!.k3&!.k3&!.k36!8%;O!WN6#!rrK$"U,#2!s/K(k5YM`!r`9%"Sr9&"9SN& li;V;JcLB&JcLB&JcOR+!s&H*"8`6"!sJf1!s/N)kPtYb!X&0"!s8W,!Ta<5!.k3&!.k3&!.k4/!!*-' p&t?srrW3$lN$nb!<NAs"9S`.!Wh6[JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoX)6quQcur<*$#rW2-] r;lp"qZHj"rW29aJcLB&JcLB&JcLB&g]7?Tr;um!q>pWtjo>A^rW;lt!WiE(j8ac3JcLB&JcLB&JcO^/ !!3$"qZH`trW23_rrN*#q#gTt!!2!XJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& OoU(6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU(6JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&OoU"~> %%EndBinary grestore np -0.240037 213.173 mo -0.240037 320.24 li 565.287 320.24 li 565.287 213.173 li cp gsave << /CSA /1 get_csa_by_name /Intent /RelativeColorimetric >> csacrd /1 /CSA get_res setcolorspace clp [1 0 0 -1 0 320 ]ct [565.527 0 0 107.067 -0.240037 -0.240112 ]ct snap_to_device Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf << /T 1 /W 2356 /H 446 /M[2356 0 0 -446 0 446 ] /BC 8 /D[0 1 0 1 0 1 0 1 ] /DS [ [AGMIMG_fl 2356 string /rs cvx /pop cvx] cvx [AGMIMG_fl 2356 string /rs cvx /pop cvx] cvx [AGMIMG_fl 2356 string /rs cvx /pop cvx] cvx [AGMIMG_fl 2356 string /rs cvx /pop cvx] cvx ] /O 3 >> %%BeginBinary: 1 img JcLB&JcLB&ScB9'%2L0@0f(aM/05?*!W`>p!8.>c!<E961/(DAAqcqqlJ'1MG"a4be,TaT&gfS*<bd5j q7cpQrr2um#.8G1#6b22irB;f%2U6O?$Vq<^Bh]pV0#9f,7t"U!!`T3%M^d&GFJKF#fFrlL0I"r('<"d JcNC_&-2k:#RhRt2+Bbc.NoZ@#m/c[o)KI,#n\+-;/;$)earh@kb)B@+;P=ef)Q$V"9eu]?\YWS^BhX# Z\i*[0,XlY!9aCn&1'8#9j`.Fi8rCqO^gNiWrR_Oe,U$\#SS:10JYOJ0d@D=!WiB'cN"FV#7qb#95'!l dd[;:o;Dh,3$B%G"4I5T$Q_)g:18C7pqHh!rr35MMbP&n"9JVb!"8o:'Hekf9O;I12&cYr!;ca/!<EQa <*Em]N2=;Si5hpK<%eTJ!.k3&!.k3_!.k3&!.k3&!20B'!<N<,&0!&T/1Dec'+>*Hnc7AD'EJ49!Z4aq f_4RS\$*9.DaQ#n$NefX#QYi)?@nH<WiGls"LHq=c`mOb2%ndH#7;J-87Ht2W;Wh(Ya9#\#mLJ4!W<!' #oPB_>Bl=0rN-@/S8ge,%0m";eGt1$])W9A"q;4b+X\s(.i]*'"9&AT!:p1)"rf?kAq$)GYJfGmp<[t> "98E&!S7;V"Ul.g4_9GIoW8@gEBas?"Tnel!9aCn*(4\8ZFRQJ\?(Nn3?o1AWrR_Of)Q<^!WiH4(F1ai .O6)R%gW9\!"K,K0M#]$P,>Cuht6X"Ig%n>!!!$#df9R^/l?\MT;M@b#LD8V`ILE""Q07g"WTI$C0*YP )%m8[!W<#s!#,J<#RqeKK>Qm(_mZ\XT6X-b*"E+@!.k3&!.k3_!.k3&!.k3&!29H)!X/f9&/urP4YIrp %13:A!qH?F!#,SI)C7RZR+hPr\Yl6M<\Y$k#Qt4]!!`N+"U>E!IEMQh!U-c`Ws#)3<&P9h'bLcO!TF(a &iF$W[)gk<rMp1#Io[ou!s8T%!!a&f:j/;7a2._T"K$WK.0]\Q!!1UMJcNC_"Tf#F+=\i>.L$q-$3L>1 !n[ME!"]Gc:OT7Zcd/PVC/%)Q.2E0f!nI>V%O!`)D3V94orA@sL0cVA"U+u/li?AP"p+r5#rQ\8rr3;d ZBT,o+:JS^"02ER!7q2]"9o/A(*P@o1aX.R$O6e:b5`"U,tiEY^!>*,Qu>_g2(J\E#lXl*!S7;U!X&]5 .:T=VrrN,<po=^O>t#\I'FY*F!TF(f"sZWXQYJl3$3gY9!W<#s!#,SL+>?<&RDn%#Y,A=Q?TAf-#R(:! !.k3&!.k3_!.k3&!.k3&!.k4#!!sB:K;?E=ghn8:bQ%eK'fBKrh"g(8f7lBt!S@AS"XRZmrT416:^Zdo !s0ED\GbOkfN&O/!.k3&!:Kmp!Z=k4jN49I>RpkZ!!3X+`V&?phI@5]!9O7e"WT^AVqSLJ&#K>Y!0$sc !>S.mj3=TW?kNO`!!E]V:Pd-fjo_Sa*<XporrMfnpAbL7=erXSgua8B#*o7@!.k3&!4r5_!.k3&!.k4: !:0aI!:^*`!"T/@(*Y=`1,_*A*=r>T!<Minf`2Zd!<Wlg9MJJuKqZBKgV]e09I9km!"&`-!Yd(G7TaJ\ Ykc$6bPqMApBJ$F3!TTh!oj7p"Uu:p5$rT*^VRb'c,ZMu82VS'!rW*5!s];M10Jac]Y(tn_p>TD>t$=[ !n@:+!;lle!TX7O!VcX+!<WK2$lUHK6p37R+W(ar!ndSF!#,MA&K<8uCPfmXoDejSTOTc#((15r!!`Q. #7*%mL8sp]#f+`lMI/k,)$B4*kPu,),r\(`?[/U/jjLT"@m(U.!29J[!VQN^!:U$`!"]/:&frJT0JkaB +r(@b!W`>J!"K&9&/cigBS=(InGiO[W!-lq+VtRjec6$X!<NZP2F:8OGaeEB!:g'g#LJB')$U3F!TX4h !X]S^.QU1*Akk-$"8r5s!"o;5$St[_@s<g*^ZsauWdn&%$C_$I!.k3&!4r5_!.k3&!.k4;!:'[I!<*#n !r`5q!"T)3!X0)Q-o*A%,9@R/"p+8pg&Mff!<N<>:ls?'l-6]@\!V)$.iJcsf)Q0Z!WiHD4^j#2UT(9h XTYudgX!,+BJgF[!!irR2+qM/Q)Cb`XpDM&B/0\r"9AQ%!#,_X/O*B_P,b[fXf\e!F$LEK#R(:[!/LXP !V-9Q!;urm!r`5p!"]29%20X&-SRJ0*"N/S!WrMW!:p1)"roEmAq65IYJfGmp<[t="98E&!S@AX!<s)R -:DR+WV!:tS8gb(#mCD3li?5L%iduTS[,f;XLP?g?9'5D#-.`u!:0a[!:Kpf!VZZo!Vl^+!<N<)$Pjs@ /h&%f(_6iRb5`"T(beKjI$1A0_;FnYhgYek#QOi*!S7;Z!<E6'&MR++OJ&PQpoOeIhUKMp7NVck!"9#N 2,S$d4Xq<\$3UD.!;um3!X/i=*)2%#lIX"_Xgt'L9e[Os"IfCC!.k3&!4r5_!.k3&!.k4<!:0aI!<*#o !rW/p!"]28#7;%^,r%G5+VtOm"p>"u!87De"V2Lt5%^29rnb2`UjH,s%1<FE!n[JX!<`T5%mkfjrr3#\ Ykb=&TPRRc&-<RY$2stb!#$&*@?\4EfuU4nW2H86;^MSK!Wi3!#7rF]FI9DR_Z$PAX/:8G.KoqW!WggO M#dAQo)[nPrW2cqquQNl%g!%O+"8Wg-RTrK$3L>1!S@DD!"]Gd:O]=Zcd/PVC/%)Q.2E0f!ndP\!<E66 ,<AY@Qa*miWsGYY?8;fj"Tnel!:0[i!X/f82/p8.rs@emP\W`2$jm4AWrSpqlN-YYn,WIhpB(<ppAb^, "pk_S+Y5]2,T77%#6b4Q!"K5[96dALcI8e\Db`_Y.fgImrW3'#f)Q!V"U>JfAZYn2!W9n2WsO;^72lsU $j6S3iW'Aj+[g.-AO%CG#6Y/1r;ccr'Eo*k/k'TDalUULW2kPX3>;f+"Tk.nJcLB&JcNC_JcLB&JcLB& JcO:##o-9hUr1pADBT)*!!NNB3G,/Dq;qh3L-,qHfDl6^-Y:'Tj5](C9*t1i!s'<@\,PIkk1E]FcN&Os JcP6>$3D)BVW>jrI9[9`bQ%\V;o\Lm!o@E#joFND#R)23CT#mn7h;HsJcLc1$3:l4R,cGkKO>Dob5_\H %k:M:b4t*$WE1)BfDkmPo`4^d#o$F4\'3UhKJ!Ip!.k3&!.k3_!.k3&!.k3&!:9af!<NB%"o8B""U"r2 !s8W(!U9Y!!<WH.#RLeF$k*IM$OI%B"Tnf,!Vl^+!t#Y\,UOrj/g;)@!s/K(o`3YF'*/+9&2HpR<+^iX _X$$sV0Pf`"5!S^!<NE0$RJ):>A/8A[/%H:bPqMApBJ$F3!TTh!oj7p"qi%16XFl%_TUa$qobC<2_#aU !W<!4!sT)C.T1).T;o6/_UH,_D,<&-!n@:.!!<6'!X&E)!!WB+q?6a#"p>&2!WiB'lMq+i!<N<*"pt8: #n.4M$4-tB"Tni*!W2p/!<NE/$PX[32(p=")\`_c!ndSF!#,MA&f`K#Cl-!YoDejSTO]l&((:;s!!``? )^n9lKW=^[#f+`lMI/k,)$B4*kPu,),r\(`?[/U/jjLT"@m(U.!2BMq!<WH'"o8B!"Tnl1!s8E%qZ-*c #m(55#71\D$k*OC$3gb?"Tni.!VcX*#7q^r-7:;p-6*U%!WiB'cN"FV#SA"(9P8sjdd[;:o;Mn.3[,@L "P3V]!X&Z4))Y&j@<%!qpqHh!rr35MMbP&n"9JVb!"8o4%2L!61I+Sn-5-IZ!;lg1!<<0,.nW`@A9jZY lJTa`J5e0/RfJ$?JcLB&])[E_JcLB&JcP9?"9AN)!X%fm!WrK)kPtbf!sAf5#Q=u6#71Y@"U"r1rW;rs %fl_5":Q"f-mB`P(D-uW!V-6E!#,G7!Wj38OP'9kc*smcQu55?)%$Gt!"8l3#n@Y(;fItpVlZrpXTYud gX!,+BJgF[!#,kg5[/AhT;o'#_9:/e>:9XW!s/N%!#,VN+u)`/Pe"<2Z*1=*GtT1m%0Zg`!/ggY!<NB# "S2cr"9/H&!UKdn!<N?+"U,)9#mgn:#6kA9"9S`-!Vl^(!X/oC()e8?.j,W:"T8DT!:p1)"roHoBRlDI YJfGmp<[t="98E&!S[S^!<N<*'.#_;CPJ=[oW8@gEBas?"Tnel!9aCn*(4\8ZFRQJ\?(Nn3?o1AWrT$t rrN-$rr_Zl!WrK*p]0d`"9Sc1#7()2!sSl1"9&?%!W2p.!<N<)#n\(%,p40H'FY0Jb5`"T))4`oI?^Y4 _;FnYhgYej#64`)!S7;Z!s]8I-Uq^$T;JWkpoOeIhUKMp7NVck!"8uF-Tb!`/05?1"p>#+!;um3!WrW5 (.<>Ki8)eiXgt'L9e[Os"IfCC!.k3&!4r5_!.k3&!.k4@!!`N+!WrN-"9n?!rW<3'!WhWf&HMn6!X&Z1 #RLeC#mgkB"pG//!s/N)!W2p/!X&]5%2Bp2/0c&F$O6h<!qH?F!#,SI)C7RZR+hPr\Yl6M<\Y'm#Qt4] !"8o8'H\o2Q.H!8rR.eCWs#)3<&P9h'bLcO!Tj@^!WE-6)+&>DdGaE4VkB9/G@Eu_!s8T+qu@E@-:)'k TY&@EVP^>iHr_g("Tni-eGtL-"T\Z,"9\o-"SDos!s/N)!U9Xk!<WH."U>;<#mpP9!<iW*!s&H(q#Cp, #S7dq+<_jM(_6iS!s/MU!:p1%$7o53[E7(NW0_6n6o6>/#Q=eY!"/l4#7DP2;/q\r\?be.#cNJa1'n*f !s.`gli74k"U>>kE4u8N$0AIWCITET$3p[6!2feu!<NAk"TAK)!WiDt!;$7%!<N<)"9o);#m^hD#RCV< r<!*&!<N&t%g)t?#ne.$/12DN$j[(@"3UZS#:E;rZGtMKWgI^"75ZRr)%$9D!!1[O"pPVX-:iNrrr3#[ ](i<4J6bS_'bh&Z!<M0[$j@G$9OUFB(C(-I!Wi6"r;[N7%N-KM@[GRDm*2c7K3pVQ$4$e:RfJ$?JcLB& ])[E_JcLB&JcLB&e,Tdi:kPR]g>$Qh!mL]L!Ymb%MRq^@joj:j4:VDF!"/f;206apf>FhC.0K,@#nKM$ g>1`Kg0GE=!.k3&!:Kmp!ZY(7jN49I>Rpk[!!<K[FO9^C!o@E#joFND#R)23CT#mn7h;HsJcLc1$3:o7 S)_bnKO>Dob5_\Q.o1AeebJ8/WE1)Bb5h8:#n&tFS\<V9KJ!Ip!.k3&!.k3_!.k3&!.k3&!:9ak!<WK2 $47(Gr!<</rX/W2!s\u4!r`5d!#,J;#R_.T',;?#(D[c!%h&aK"Te`#!"T,9%Mg$*+!;aH&dndC!<Min f`2Zd!<Wlg9MJJuKqZBMhoD[B:FH@u!"8l3#n@\-;Ij]kM4D'N^AuIVrrDct[;e/2"Tnhd!#,\S-T":u F.'u'rr<#>N`@MM'F=g=!#,G:"plJH@qUU\UU7qn`MJ#f4WX[T!/gg_!<N?+"U52<$3CP@$2b&:#mgqG #m^_>"Tnf,li7k'!<N?,#n7L^()Ic((DIGm%13:A!WiB'r;[B0!X/c6%i6<8,9@^:%giIAf`:UD'E\^V *\L6(LV_O4s8V>WAMkYJ$j5)]#7_h35ZDHHXnBF7^s99D?Ulae"7-$O!"TVe2aC)EGcK]`d^G9J4Vk'u UAtK#"U>AA#mpM8rsAW2"UPJ@"p>#+!W2rf!!`N-#7:nO&et6[#8@^Y$O6h;!VcX*"q2.a*ZlII*Yf.i !WiB'cN"FV#SJ++9PB'ldd[;:or/+14!PRP"P3V]!s]5I.7mi]Fb5gYpqHh!rr35MMbP&n"9JVb!"8l3 #n7Lb+=T#k(^pKE!;QU+#:2Z0:L.t&^?XXtWdn&%$C_$I!.k3&!4r5_!.k3&!.k4@!!WH*!WrQ."o\c% #6"l,"p4u2!s7Zd#Qb,6$k<g[&JG'S#S.7J"p>#0!Wi3!%fl_5":>_W*?#_/'Fb<M!V-6E!#,G7!Wj38 OP'9kc*smcQYo,>(^^>s!"8o8'-8VpAV$MRXK/DtXTYudgX!,+BJgF[!#,no9PfKPW3*8?f%\Q,:E]c@ !<N<#!#,SG(a;+TPK1e[[^!$7K2sHA&-i9e!/ggZ!<WK/rWiH/!!rQ.rs/K.#mU\>"U"r1!WiDh!#,G: "U58@%1j0c&J,H_$k!@H"9S]#!"8o4#RqF])&jY7&-rF<!WW8S!:p1)"roKqBRlDJYJfGmp<[q<"98E& !S[S^!WrQ0*Bmh^Q_h!moW8@gEBas?"Tnel!9aCn*(4\8ZFRQJ\?(Nn3?o1AWrT$t#QXu.!sAc3#7(#. rW`W5"pP55"9S>unGi^n"9o2C&H!+H%hB'T#6P)2!Wr9"%fl_5!sfAO*#]\2'b:WT!m:QR"W9'fApoo@ Y/0#fp>:?'3X5Wb!<LdP$O.+\-9GFSQ):R_X8&e%ced0jJ4:U`huF/f%2gNJ-6*U(#6Y,1r;ccr'EJ:= "q`q4T$bj,]rei;Gtft4%Kr7$JcLB&JcNC_JcLB&JcLB&nGidp!sAc3"U>81#Q+f(#64u+!rrAg!!`N+ !sAf8%1rLP#SI^\%L`[M"U"`*!!2ut&-;t<#7:tV*$?+3$jQt=!s8#ng&Mfj%iQ`XAsh<OhRTP[HWMs4 $j["<fDl<^&L9>3Gc9HuqqT&iq5XXkCfE;(!Yl:RrW2-](BFR>"WpEk`prlu_PE?;Am7nc(^'pB!rN$4 $Qh9&D32$M[&g1&V0uAs#mLP8!S%1.!!iW.":#2;"pYA0#5\W+"U"`*rrMEc#Qb,5$4RIV&JP*T!tGYC "TAK'!r2fu!X/rEr>,\V'+>*K!WiDT!:p1%$SGVD^!YcfW0_6n6o6>/#Q=eZ!"8l3#nRn*9Q-6"]YLZB WsGYY?8;fj"Tnel!:0[i!X/f82/p8.rs@emP\W`2$jm4AWrT'u"p"c."9er5r!3-(r!*3+quZp#p]0pd "p+i/"UGMIr"B;H%LidN"p5#-!WW9!!"T,6"pYVO)'Bn6%L<7B"9ZgI%L4F_L:bdhgo?`[:.7#j"W7UK !WiDS!"0,S/k'E;`rH)&bHgoD$%Q;M)\j%q"9AP_!"8u?*A9K))\3&S!s8T&!;um3!sfJV.p.tfs8V&j We4Y='FG*L!h01A!.k3&!4r5_!.k3&!.k3&!7UuT'i9OY_qNm`+p-!h"q3;%Nj-acq;qh3L-,qHf`2?^ )+/koh8,Fo4qdAc#mN;IaO8i%g0kfD!.k3&!:Kmp!Zb1:jN49I>Rpk\!!ETV<gMD2joXCL'BT;W!!i`J 5&7(MZptY(!.k31!"&cE9:OtdWe=am!mCWK"!LQnUVbd\jo_Sa*<XIbpAbL'.pIS)cfKg4#*o7@!.k3& !4r5_!.k3&!.k4<!!WK.#n.:R%JgJ8%1WmYrXAu;#R(;3rW2?c'E\RK&f2H/,UXob,U+9H'+YHT!s/2t %flnC&/>oq(Dmep#6P#.!VHHG!##A6!t[4]9iP_YTu-6VafBkf.0S9'$ipPB(*Q(RFGZ9SY.OME!6bBA !;?]*EB"1,!s7K_#mhP'3D!OsR`G%!rs-Ak8/i3N"TeQ%'EJ7<"r]g4>B5I`Yf#MJZ]Jfe+Tp6pMZ="` !sAf6$4@7Q!=fS8$jmFR%LigS#mUV9!UKe'!<N?+"q;:e,:"Q^-R9cS)&*Sh"Tnf,!W<!0!<N?,"q(qU )Aa&!%LWIC!SIJE!#,MC'H\u)CPfmXoDejTU1Q;.(_$T"!!iW@0h+i8@XbQS^BhX#Z\i*[0,XlY!9aCn &1'8#9j`.Fi8rCqO^gNiWrSpq#6=o3$P!XU%JpP6%K-b@%1N^Q"pG)-!W2rf!#,G;$4mpi*[2pX,pX]W )AE_k#R(;)!"T5>%MKNk()I\r$3^J4!<LLH%KZqM*\'itK>#_&s8Vbl"`-=I)%Hf$!"/r<'-&r3D17S9 VmcB8!:g'g#LJB')$U3F!TX4h!<NB.#RV(T(D.#Y!W<#p!"f59*]QS\=DWr1lJTa`J5e0/RfJ$?JcLB& ])[E_JcLB&JcP<@#lt)0"9eu8#mq%7#ltA@r<`W4"Tnhi!#,M?%20Tt)B0V8)Aj8'%L<4?!s/N$!!`N+ !X/f:&/5$T":kkF"9J&ng&Mff!<N<>:ls?'l-6]@\!Ltu.2W?mfDl<^&0<Ml@!Ig4Wi`;&q5je+h:p8\ !baG(hZ+3#1Kf3sVm3J2ce[6lGX<5IrW2os'EeXM'J<aUd+upZZELHi@PoAD#m/WWMZ<k]"9f)?r<iT4 r<WQ5$O[CB$O7"F"p>&2!s7fh'ESCA$4[^b)]g"=)]9G,&eGEV!s/2t$NUA8$P*a[',1uc#Q=f+!WgsS o)KI/*&^Q+JsWF>`8^F_cuh,I!!!$#gAhT_":#5`=,4B2c,QsZXTtA957\&(!s.`gkPu,56uJR$\[nlP XGL7D,819^!2ff&!WiK."pbMB$MXr)$3LS=!s85tnGj7("UYeW(`F;4*#fb4'+YET!sAZ,qu@6.!WiH- $4RU]&J5Q_#Qk.O!"K/M1.u5-PGYM!ht6X"IK_b:!!!$#f)Q0b(b.UHDht'eXKAPuXU!2/eAZr-*sCL% $j$VA'H%Pm#6Y,2!Wi6"r;[N4!WiH41gl?W_SEab\Y".A0H:Q*RfJ$?JcLB&])[E_JcLB&JcP<@"Tef1 "pbP6$MXo2$47(E"U4l-!!;Ke(]jdC"ptkT)BKn@+!):8'+YHV"Tni.!Wi6"&-2k9"pPGF&etrd#6b54 !s.rmg&Mfj%iQ`XAsh<OhRTP[HWMs5%1!+=fDl9^))P67RC_A9b.b.UWs#)3<&P9h'bLcO!Tj@u!WrT1 ,Z^8ls8Vu2U46ZP4Yn>r!s8T*qu@E:)CdpRJZ./D\>lC%H<)[+#R1>2eGtL-#Qb,6#n..I#RCA8r<W`: $4-tD#6k>6rW<*#li7:m"UYbS()\&4rZ)7a((gr["Tnl/q#Cp,":#>G&J#Ec%1!+>!s/MU!:p1($Sl(S `nBS+W0_6n6o6A0#6P#/gAhW_#7qas5@okje^DC8orA@sL0cVA"U+u/li?AP"p+r5#rQ\8rr3;dZBT,o +:JS^"02F#!!rZ."9o,<$4@4Kp^-p,!s]#6"TAMu!;-<s!<NB-#RqC`r#Z:d(_[Jj#mCD5!WrK$!"T,6 "U5;C&JPfe$3gV8!s6XG%L4OfOMf]5hl<&^:.7#j"W7XL!WiDS!"0;d7q[^\cL]B"[]K8)$%Q;M)\j%q "9AP_!!iW2%29Zn$O6e5!rN&s!#,J<#nJ+RNnj[7ou*k_?TAf-#R(:!!.k3&!.k3_!.k3&!.k3&!.k4# !!sB:K;?E=ghn;;c2\(Q,?h+bd+dUVjoj:j4:VDG!"/f8-;f`HgSSXE'Emq+$3DZ!Z,G/Mg1;6)ciAXt JcP6>$3M>LW8u'tI9[9`cN"+W1KoOBh"Be2hI@5]!9O7e"WT^AVqSLJ&#K>Y!0$sc!ZFe&j3=TW?kNOc !!`N<6&<7uf\lPe"0#?B"3U]=!!rZD5\?;%jb,5jQ2lL:JcLB&])[E_JcLB&JcP0<"p5&<&eu)oq@X8O 'GV;q&ePW]#6Y)0!<MNe'EeaT)'C7U0/PI?1,(+")\W_h"TeE!!s&N1$iUS@%LrgO"Tnf,!VHHG!##A6 !t[4]9iP_YTu-9XbH?@n.KnB($3:GH+=p<(K=JY0pV-^Orr2um#.8G1#6b22irB>m+#H,Q>&p(Trr39" [W=M<#R(;2qu@B2!<Noo;,U_BMQ"DUgqf\+9-j\j!/gg_!<WQ5$k3a\'E]$_&eb-T$PF*e'GD&h%13:B !pfn(!<NE/$5+=+0JP==2DHa1+rh=.#Qt52!W<!0!<N<)"U>>A%1EUO#R1D5!SIJE!#,MC'Hf),CPfmX oDejTU1ZG2(_$T#!!r]-*Bm1m=E0;+otLdJcEiC87kY_^li?5L%hL$G5YYU1Wo3!e[ZP&_(97G2!!WH- #nI^a'DW7M',2,o'+tib#mCA3!<N)unGj7(#7VFi,Uk?%1c$j?/0c/M&.8[Dp](g,"pk\I%1WjV$3gS6 !W`>J!"K&;'H\i"BS*qGnGiO]WWd6'-5mBtf)Q*]&/ll^@="Q[^@o;Anc&Ond#1U9"p=u.h>mKTq>g<k &-Wk&3^ZhZLq`04aJsbi0++0KJcLB&JcNC_JcLB&JcLB&nGims!X&Z2#n%1R%hAFF$4[RX%hB-Z$O?h8 kPu;!#n\(!,:4cf-R9lZ)%m>_"Tnf,qu?m$!WiK.#Q>#6$47.H"9S\q!87De!<E6'(f6=Hp?Bi2YI9d7 5U[ET!n[JZ";WLT>BZ""X/u#s"LHq=c`mOb2%ndH%hq':P-DL,['SK?d'74@&bl>?!WrT1+B=NTnD)!j Y-s[76Rs#^!n@:/!!iW0#Rh7T&.fEe&.]6[%1a!^&J,Kc%1<II"9\f.li7_$"UPYP)':.U.46Gf+<;@9 &IJ[Cq#CNu!sJr<rX&o;#mUS9!s8T*f`:UD'*]F7:MYQKVm"%uo_-XS1'7LV!SRM]!sT&@3,u4qoA7Bi oW8@gEBas?"Tnel!9aCn*(4\8ZFRQJ\?(Nn3?o1AWrT'u$3:21"U55>$kNpZq$d<6r=9#@$jd%=p]0ga 'EJCJ(EanJ-RpMj,U+3C%LE=A!s8B#%fl_5!sJi6$4.%H$OHt>!QtHQ"W9-iB76&CY/0#fp>:<&3X,Qa !<LdP#Rr"=;/:iRWN>cp#LD8V`ILE""Q'1a!<N?+!s/K(q#L3j&-jacJ?-/h[]R*4Gtft4%Kr7$JcLB& JcNC_JcLB&JcLB&nGigr"9o2A%1Wp\rX\o9rXT8G%1<FG"9S`-li7k("9o,@(*"VN.k3%u,Tn$@&IJaF !WiH)r;[3+!X&W0"pbMA#6k>0!WW8l!87De"V2Lt5%^29rnb2`UjH/u&.T!M!n[J["X-?TUq4b#WiN/o Ws#)3<&P9h'bLcO!Tj@d!X&]5.UoFWrs\G2TPmpo)B9J#!s/N#!#,YO+>-3)T\AeUYbn7C<A4gg#6Y(X !/gg_!X/l=&J#B]$ig_8%0-n;%gNRR$k!CI!sAN(!!2Ed'a"^O(*"DA-7UDl-R^)T&IJ^G"9S]$!"/f0 "9o):#RLeC"p=i+!!1^Po)KI52.`B,jRCm%QYK5_1b'=I!s/N)g].``$Pt!@<.D1Mp<Kh<orA@sL0cVA "U+u/li?AP"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!!iT."UGJF$kEpK&,Qh8%gNRQ#R1G8!sA;uo`,g0 !sJo:&fMrD/1W.u-6aKI&e,*L!s8T*qu@6/!sAc2#71\B#6Y,2!WrMI!"K5e?C&mrnDUC7Db`_Y.g6dt "9JW*f)Q*l2dh`Q`m_`(WqNJ"J6bS_'bh&Z!<M-ZrrW0%!<N;s!;um&!<NB-&k@i7rr3;NWe4Y='FG*L !h01A!.k3&!4r5_!.k3&!.k3&!7UuT'i9OY_qNm`+p-'j"p#E*OP]*\pZ;V1L-,qHg&MH^'f99cdFX7C &d%M%#om<>Zcq7[C`if+!.k3&!:Kmp"!CUCjN49I>Rpk^!!WNTBTKCCiUu=7hI@5]!9O7e"WT^AVqSLJ &#K>Y!0$sc!ZOn*j3=TW?kNOc!!NZ]Do^u$p>uIV<uhCd!;6Bu%4G#'^#ao"#*o7@!.k3&!4r5_!.k3& !.k4@!"/f0"9o;S.m$3i77@&@!CTBU7LhgS6U3an1bL'q(D.&\"TAGt!%.dJ"UYhZ+tboG;,pb*@prbQ ?Wg6!6p!(M*>T.k!WW6%!X05\0gP\%#;@A>$j["=!VQNO!<*!8!WrN/$4dk"8Qf&(HAnl@kh*V@F%dk^ gAi&k!WrTC/OE3CGE08McI14_[A/qMTWPcJrr2um#.8G1#6b22irB`%,WJ(`>]Q=WrVucTV._[k"p>#) !##A6!YI4^:f_+VU;QNbd^Fg0/-Z"RfDpg0#QtPQ,VV);5t1lE7/B7`6q'O46U*aq1G'pr)A<Pa"Tni$ !&4KV"U5AO,;;5K:0(\.?t!PQ>ZXit76WX^+;P=g!s/K("UYeW+Y#<54#ScD+r1Rhf`:mLrW*l<!sAf5 %37&^7U0kj_;"kes5fh\1*75="5El"!<if@(,\if<c!Mmf\kDtXehhiXKo:E]YMh!MI/k,)$B4*kPu,) ,r\(`?[/U/jjLT"@m(U.!2ol+!<NB-#Sn^C7Rfg77/]Ie6q'O67RTX369R=d0e"7a&e56Q!r`5s!$;4B !XB2L+"9*7:K(A#@:<PP?s?T)7mAdZ+;b_!"T\N&"Tf/R/3H2s56j(q*"iP^"9R-SrW*W5!sSr<*%X*; >&9)/fD5IHn>-;%2^&qF"5<en!<E9)&1'A1>]5=o^rXpPcb6EKO.*#W^[_='#LJB')$U3F!Rh&E!"];P 1He*&AVn.eileHU<\OoN!.k3&!.k3_!.k3&!.k3&!:^$o":#AM)^-[dr\aa6r%nC2rAG-E2`3?C.jlGX °G"9S>u.00JO":,V[-SIA@6V'gC:Jae[91V?11bU*l&IAXE"9JW-"U>MP*[rlD1B]NZ'aXs@!VHHN !#bk=!WrQ/#Rh=_11Q[&lds%]Y-F$s2Bie@!o*br!<`Q2%jaJEFbcB]XKA_/Vk]iWX/rD*Xg?j<c`mOb 2%njJ&HMnJ5&$Fo]tLe[e]YF`<\=pX!#,J:"9fc>K>Zg0c*X^iVLDN'*=Dr!!0.$e!<E6)&g8qm4$#A] s#9p7(,n343B9&Y2_m*>.3TWF&.8aH!s/K)p]*#N"ptkT*[ia(5Xe=D:ej\W8OYp.3&3'5*u#%a!<<-# !Xfbf/hSh40dn(X%1!.?!ndSN!#u"@!WrQ.#7)"s9PK3GV6@)Cl1FSbCb5\g!!*,U!$M@L'Ho)/K=::1 cc48WaK_;'U9Ci-Yck43S8gb(#mCD3li?5L%iduTS[,f;XLP?g?9'5D#-.a&!!`Q/$kX<u-SGBVs#'a3 !&a^5%lZF)1bUF/,9%=,#R(;3!Vl^O!<N<)"V)@p/i5US7nQHM;,9nZ8OP^#0dn(W$jHk;!WW<+"q)%_ ,VLo/1GgR#%KZY3eGoRMrW3]8"U58F.n=3(PG>4]`9$X_cZB:I"TSN'g&Mcg"U5;Q2,J(=P+\hXXKAJ" Tq\IaXpM23ced0jJ4:U`hZ*WWquQj!p]1*i&-jmqOi#5[]WJ`:Gt]n3%0N("JcLB&JcNC_JcLB&JcLB& nGin"%iHWD0etXH3&g[l&iVd02_m$;.3]`I&If'P"9\f.p]*)O":#2C(Eb.^4$lV=;c-Ci:.Rc<3AW<; *Yf%d"9S]+!s]8K)B^@Y0e":d'b:WT!s&Gp!9*tu!<E6'"9\o5&g9"t?%T$1iP_mrVL2K%%Li[G!o*br !X/oA))to[]?&FEWi)S\Panbcai_/tWh=0-2@op)&IJF;jo>Sf"UGPiAZYn2%.(QuE`P"6)%m8X!<N&t 'Eo!c,sZ:?kPsedXJC,B2%gH."p3<TNrTRi!sJo>(EkCh2`3EK">hqm2)bCl&N2O(0eOq(+r_4+#m^\: !W`>t!$;4B":,MR*[`X(6qC!I;,C(b:Imc51+41W$3p\9!s/B&$j7(Y-8[M71c$Ku%gW(9!!:gRr;[i= !<N<)!sAo=%j4DfYiG<Gd\r@;9gUHZ'aFgC!o<o&!WiK/(G%pXH_87RdB8jtM2R\#[CENDV5L8lW.nV6 #mCJ7!UKgQ!!WK.#738,^&J$<jg(+d7N`*H#6V",VuR/,$Pad60/>CE3&g[l'/qj02`*6A.jQ,Q'G(TV !sAZ-!Vl^9!X&Z3$ks[-0K;<h;c-Fi;GKbN69I+Y.jPuD#6Xr,'*/7D&JuN6.PNG#*Z,M!#6Y)/!S@DP !WE-6!sAl;%idrWW8I(:f;k3K:.$Z^"W%II!WiDW!$VON%M:3dGcAU+e@2?ST9YV6YeeZ#[&U0W>t#\I 'FY*F!T="Y!W3!!!VcZn!#,J;#72;@MqS.1qoPjj?TJo0#R(:!!.k3&!.k3_!.k3&!.k3&!.k4$!"&iX Cn\Aah:u`e!mgo_!Y[J)X5MdRY*56O[(=3&g>LS;4:VDG!"&iJ5&$\>eU01^!q-*q'2!bI_:dR_-Nqcr JcLB&n,Ndu(d<#PjM[F"7LIHA'bj/nWPQ`n]!89(R^1#ei8WeYhI@5]!9O7e"WT^AVqSLJ&#K>Y!0.$e ";Eh3YiNisDb1B=c2\Rd-;oiNhU&g)OJ/ke^!#!_k,DE&"3U]=!!rZ>1g>sWjb,5jQ2lL:JcLB&])[E_ JcLB&JcP<@$N^J=%NI?&Bmb;SHMi$gHMi0iHOb=EF(eK=1F4"R#Qb&.!W)j-!<E6.(FV=9=(HE&Jqo5B rJ_qVL4O_l?V`m@+VP"[!<N?3,sl!bH@1-h?UQI`&.8XBp&O%OrW*i<!sJi:(*P4q>%D&mMOUrhim4li B1!jFg]/2m!X&Z7-qIZZG_Vd$bgXq[];L^8FbQ-hbPqMApBJ$F3!TTh!os=q!=pP?7SR33T$7'+kKK/r /d2@[!Vud2!<E]^7SQ`fGb2hJo]45^@58&h!WgpRMuX.b#8f'_=C>iaIK+]pHMr-hHN&:&H?jaWCLC.7 4"D<_$jQk8q#E,O"q)"_1.u%rG^b:%MN!OUN/EIHKn=_r@7Dje$O?n;!X]Yd/jN<DG&qD)<'`)Q#2'"R !"f54!s8`6%2'X97o35rFdBl'rr35\R9V<^&IANo!$M@N(*YG'=^>csYi5N[hQiN0P)bWpW3WqKcEiC8 7kY_^li?5L%hL$G5YYU1Wo3!e[ZP&_(97G6!"8l3#Rh=s7UUOiI!U,;H2i3hHk(ILH[0jYE*Psp.3K?6 !s/N)!W)lr!=K&D+YlG_?uC@CKSf\e,)qS?LP()#B2qAZ-Q!0j!<N?+*&gf9H$asfC/-W0'+G0Kf)QQe !<WE-#Rh:_0LS]9@r[UEh>[HSkb//h0cL`4"5<en!<WK/*'726EIX+U^sUWU_698XEd`tE^@D4&#LJB' )$U3F!Rh&F!"f5:*B$/O;IkQslf?<oKNKo9RfJ$?JcLB&])[E_JcLB&JcP<@#mLnX,r.\[?"[gGAc-0M AnGUb@U;tt/K,**"p=W#0`hF\"VW=O?#4@rE,fo?Fa&"PF`MA7A787q-Pd-t"Te`/$kXC,4B#d&BPM<S /.qs^!VHHO!#kq>!WrQ0$5"7,2,SLgdaH+FZ*(0^=tCU(#Q`]\*<HES'-0&4Ef??YW3*5$RZ3,]OIiJQ XfJeagX!,+BJgF^!<*!0(I;r3^;7Ul[E#hHECM8ap])!/!WrQA7<brbdE/f!`3PP?66m$BeGtX1$ipA1 !XU&7?$(()CM<`\s(24Bqe-@KA7K"O:-g]a*"iVX!rrAs!#u+N(*Y@n9O)7IE--ALG'.nIEGfZ0C1^mL 1E-Ps!>#AK.R.!<?!q/?5:mfd$O-^d!;ca6!<N?+"ptkT,=?!pU91c+YKZG'mBg:N!<E*"g]/K!&1'J< F-XDrcHbM@pX,XdJ!$Y@\@&WGXdjAq%g`CA!UKgM!"U&;DOn)D\u`ECM-`1e'*bK;VuR&)$5F^:3_<EP BDH-;B+AKbB4YR]>X^Cj&I\mH!Vl^M!<NB-$m@W/Ci+'0E,fr@GB\1OF)Yr.@TYrM*=`A[!s&Q2%2:$E 8mZ(AC26g-*!Q9Af)QQe!WrQ/$4ddn5@8r8WjB"4a6N0^^2*j'"T\N&gAi?"$4n%+94ig@T;\loXJ1l7 MN*t$XKA\.ced0jJ4:U`hZ3ZWrW<*#p]1*i&.(70UtOGO`N?\BGtTe0%0N("JcLB&JcNC_JcLB&JcLB& nGib")_XZ[>[m\Fq.BV=%qT9\?W]rd1asI]%LE@C"8Dj*":,MQ+YZ8aA8?1-H$TC5,B@^<BP(^\>Y-Xj $3^J5!X&uN-8Rn^>@CN'4"h`m$NgG3!VHHP!#u"@!sAf8%1jR;9kAsL\D"[$W2?D==YgKp#6P"^!$).L (*YJ2H(`C2e&&)\P_aR8QaY`8h8QIgCfE;(!Yl:RrW2-]"p5)<&2@e!rr3Ae[\.eC1Dgl<#QXu&!#,SF 'HK2HU%86]f<_9"=Z7*2&-r?f!07*g!XB,G*%XBXBP1mf@i&ZdAS#IcB4kggA7T1X?!UDs1F*eL$O-M2 !!2rs*WZ9C#8A@<6Vh$&EcZ;DG'8"OF`1u+@T#B>((:HQr<!W7#TYg%EGfW,APP-+$j["=!ndSQ!$2.A !WiH,":5YY,rf7k^\.<a^o3,o:-U-M'aOmC!oEu(!<WK2$mnDUO/TkGfWUN^=Bo`rR&7-u\YuC%W2PGW 1'n*f!s.`gli74k"U>>kE4u8N$0AIWCITET$3p[6!2ol&";E4F;-@:=rb)%=rauaP@piJ;6T?YB)\NJ_ "U"o&!&O`^$kaL/4&9=!DKC,MG^+FREG]K(A78hC4!Y@A"9S],$5Oa:4@iL^=\V.<-Q<R#!WiDU!#Ye< !WiH,":5VX,;iYZ\b,O[a/b>/:I-BR";V7G!Wq'U+pS]#.7Ip4]$T!KY,IeIIs@$RbOXW?[&SX^72lsU $j6S3i;ilYrW<*#p]16m'ESFE%j+N%f)Pd?_5`,p3Y`&0"Tk.nJcLB&JcNC_JcLB&JcLB&l2Uqj$O[:K r!<];$O[@N$4-tB!WhHa&HW.E&Jl9&*$#q8(DIDh#R1>$!!E<-"9JVk!7h,X!>S+`^<G6ggLV?*d/Xsa 'glSs`8Jb&ANiI_C3GH4`nf7$4:VDG!!riS891WZdrHrEmJmP%2J%fSfA(^+#g`R,!!EN3#RUq=$NCG4 $Mt26#m^_=!p0Ie!t5_T)'0gt)[.&l&.JgFnc/dn!X/i1dK&e;$NqG5AX:Eu]80H>#1*>c$nl:n_SN47 F(\`H7;A4/g"kTHhI@5]!9O7e"WT^AVqSLJ&#K?#!!!-#$i^S4$3(A3$O$kD#R:G4pAj^`&HN"?%i6'$ *$#t9(`!_n$3pY'!!<E/!s-=?$j7D.@#r7f_N.nX#6<'M(()]qJ?[_]XE@2t:LnKnS@d>5WE1)Bb5h8: #m))5CRN<+KJ!Ip!.k3&!.k3_!.k3&!.k3&!:^$o!sfGR/59l:rM0:dr1an#V5:6!\@er'D,NJH*=`/Q !Wi3!2$!^Z!tQ_E:g%IWO.i>HW2cr$YHG%/WMu\YI:Z,0*XDcJ"9fDu@"bA[\A6(LC.0Ed&-r@2!9+"X !>tq@"U>AJ,;V\cAoMs[Ts2&Cg;]t;>Wj/2g]/2m!sT#D3a?i^Nh!5be'H"=Um$1<ATEX,bPqMApBJ$F 3!TTh!p'Cs!<E`\5Y+[XG+d+Mkg["l;'uGI!Wi,t('+FE-U1-s?#u@NqYp-FW,+F#"9S]+f`7!3$3:29 -:V9RFG#gTrM9CdrM'q"V5C)dTpUgb>sp:a'FY-Gq#Cg+$54@29kf<NT;&0[ri73FY,ne,\&$/,VK,6V '+G3L!tZV24ATL:TW"TKJ7:kl$/#=U!"f56!sJr@'cehq=C,9KJYL!Err35WP?0(G%L3'j!"&c>,;h_` ?YP:oir8rket7>2It2g)RAdR0cEiC87kY_^li?5L%hL$G5YYU1Wo3!e[ZP&_(97G6!!`N0%29jL@"/'L r1s7c&#?&!WN`kD\X@bL68B\t"p4r/!<N)u1][UY#9Gfs<+0j&Tq\B_WN<5)Ycb(-Wi2DBDH8qJ&-)_5 "U?PUGFPY@]YgXo;_T1*$O#&]&HMq8":#DN*%=6V?!M)kSA*q\rrM,L"^NYp%gW6k!#YhA#7;qXDh!V0 UU\CobIX[AKl1:7I@7h>rr35MMbP&n"9JVQ!;ca/!<EHL4$lD8ArOIjk0L>g=tpDS!.k3&!.k3_!.k3& !.k3&!:^$o#8\^H93uRirK7#>r/hJPPEM?,VlQ,$9J%(m#Qjc$1'.U`#p2QOR'!9\R['2+R$jD2S!oY- PE:3%6R<KY#6Y/8&/cf[?$DI'Vm*XU7iVR1rW2]miW'r!!<N<*#7D"\/j`TVM58/(\$E3>VghPg((CHL g]/>s$5=O59593SV5gW"Y*t)[BQAQ_TW,#qZeaB^Yl\Sr'&ruk!>#;M7<>EI`l,0j]qp9_3$&G%!<*!2 !Y[\2SAN4\\$!liVL_Pn&H^J_NrTRh!WrN711#j=Vk9<>rfR8CrK7&B&!E*<OG\F$>"(.g&-N+<!r)a( "VrFD8mZLhOHPrsRf8Z_Q^=)*Q_CXl[Z+??$iL);"<Kd9JVAr=O+1b8/fbQ2"5*\O!#Pb>"9f,E)'Uq? HD/<q^9k&ilfmQ.=X*t"!$MC^3*CQhW4p<fiqiEGac'e=I@\3k]!\cES8gb(#mCD3li?5L%iduTS[,f; XLP?g?9'5D#-.a&!!i]=+>Q>dBmc!@Oo1==OUmV=Pa7o9Wi1>J3#rY?"TeE!2$*ma#8/n"LTRSOSX#J+ R@0G3R[KP/PE:T::bWau$3^G7%2KsA;Jh8YUoh"a==a^X!!*,P!#>V<"U,2D)'L_7GFQOh^pgGflg!W: @0%k\f)Qot&/liY?@8*7WN*#&V2fY/D0Ui+Uo^]"ced0jJ4:U`h>mHSpAk!h&.(FA\*iM=_QCA?GY0S, %0N("JcLB&JcNC_JcLB&JcLB&nGie(-V.p(O-Z(&Nt75.ML9,?7m&OQ)%R&Z"9J;u1^4F,+Yul0MOU$$ R[TY2R$Nr"NfK'UM2?(F/eJ?n!s/ZB-ot.7H&7E"@8K6I,8(.]!WhroiW'r"!sAf8&/?0;950Ed]?AL" Vkp>hIT\B5$3gS5g]/>t&gTD1E07KVcG6`cS;;/iAV-o2nF>,9TPRRc&-<RY$2stf!##J@%MUa6XSi+u hmB&#<&,7'%0lS-'a+gR(,99oq#CBV];9gY3>reL$3L=[!07*g":5\[.n4'$Q]mMlMuJ_6O8OtFMM[1< Al:`=*"W>WrW;ut&-2e5!Y$;5<,R/CPaIi'Q^7T8+HheEM/Q9N)\<Gb"9Sc0"q<1dLqU6tTTF"e0G=g! "9R6V+TMKC!<N<*"U,/B*%X6PGb<+OlHlf8Kj%23+W_:%"9S\^!$qXL#RqG*@$Ajml0#[HG>Uh);egcB UU.h?W2?JkL0cVA"U+u/li?AP"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!!i`K3a7#jPEq@'Nt75.M1TYP :-^`f*"`Vb"9SB!$3U_N*\0WdI@ZgrrgG("Q'R\tOH,9XM2HL\4<+Y4"9JW8+#6>jF+fL"B3.P`.N&Ql !WW8U!#bk=!WiK."U>MV.QUCHRDnmfe?c07>Y[C+*s<8`"9S_Z!$Vmn0100%V8q'(\>lEfHY$K,RDJFf iPMXG>t#\I'FY*F!T3tU!VZTm!#,J?%M^<fLsc8&jL2(@?TJr2#mCC"!.k3&!.k3_!.k3&!.k3&!:0[e "WBH#<;]Yl<!ZE#:dm8h(CC30!#,JL0Kr69AS,UjChRBh?s?]/9d']5!!`]S9g16T'E[_'f)Q0[&N"7+ e_8sAgL;&I!#H/0NMs_Fj0NAP%M9pD6W\`=f[kj?%KY8`#mi+[IBD,KBdEoM!"&oW:3WP_h1dlu!RUn( !!WK?5=S=D<;oer;Z0Pm<<lH!9M.;b#m'>l#6P`!=C#<GC]8#RBObFS=$S#?!qlU!!=]r!5YiX2dfAq= $j%55FI9\lj0a"r)["Lg(]b'q<K5)HX+XqB0..AF2/92<fA5HC@h[u)jo>Yj*'S/9g9a?\V?!@k!s/ua ;uTbo;Z'K";c6Fb3\26^"8W#g!#,ej3Cm1\AS,XlC1_!a?!1*$1(43W!!`N@6U`m\)$e1^%07,+E0I`[ jh6+6+Tqel!#GefCn8&]hU-sC)[m]=5=oa_alTL'*<XIbpAbL&-W,,ac/jU2#*o7@!.k3&!4r5_!.k3& !.k4@!!`Z8'd5S=FHZ:0!5JNH&(L1Ms8L67F&P4L'EeL>!W2p*!<E9*'fScZ;I=X:qRumB+2>S(f#b+S Bh0Z\!<WK2),#(:_W(Rps3d-<1*ID@!qlWR!#u"?!WrT2$4Rq.78R9+I%%XY]Y;22]9mG42&ZSP!#Ye? #7MG@Di2'8]"Gf,ag7:eG[s`RBR?Dqrr2um#.8G1#6b22jT#qp!>-nO92T,CU<`&W_4Yg=+9;N;!#5MA +ZMh`>]H%Jrr<#h\9L4I"Tnf,f`7$4$NU80%Q.6l?>Y7_^Au%H^&GVF]t_>\]aW'9dD`8B@6c+X&I8F5 !!rf=)CIXOG*9JLq7QmE^;&k1rttI.Ai:P?$j?bM/iuBs@t(lGgrQXP=u$Q?!;ca.!<WK1$PXX24'$!* FbQ0c_<q7%#Ln`2+V5"b!o3ha!<a2n5tG$gJ$@Atrr3YNLK[MgF)-JiS[6,WZ\i*[0,XlY!9aCn&1'8# 9j`.Fi8rCqO^gNiWrT'u#Qb8E*@X]sL:Quj!5JNH!QO:$rs.DaKO.)#)[QTK!WiE#!"/f/!t-SJ9i"o/ MS&_u+hk\(^VA1C\smqE2&?5o":#5nAVmYBo`+s\X)L?O)\<2)!"f56":#;J*%*[EARfb6Pchd`rr3#U QN^J<&.8[DgAi)n"pti!@"=r]]">`&cb6$/I;N.^?u_.>nc&Ond#1U9"p=u.dfB7F&ci%?,<eOg<Gdi3 mcW!)MH_hDRfJ$?JcLB&])[E_JcLB&JcP<@#7;P29kAa8U@bMeY5YL1`8p[gn>gUt,o6smp]([("UPSg ?^]U>lIEK@XWX^JXK8F\AN:qK$3LG>(EkV;Ga>VanbMsgAh!f]!!*,o!9*tu!<N<)"UY_R-UCs[MOLQN YHG%1Y+g/3)\NJ]!o*br":lM'4^WW*X/rD)Xf7=r6q(-jIZ^8&XL$a;c`mOb2%npL'*/.9!ujgVYKb5/ ZEpp$C-jBd$1n3/%l@UNXgY^GYL1V-SR!u`!S%12!"8l0!sB<,I(AV#be("XY5,0uY5PF1Ycs^UC.g2s "p>#1!Vl^&#otltB7,o=WiW;tXWFRHf_P=6jbQ87!!**#"Y3T*ZF[ZVXg+.27k5Gc"5*\O!#Pb?"UGSU ,VVc+PJPkm]!JQgkiCNa:`f_j!$MCg9QmAB\\##^lhC)G[W=o'BTg9X_RQkQS8gb(#mCD3li?5L%iduT S[,f;XLP?g?9'5D#-.a&!!`WC/4*T^Ln++=!3Z=&%(=g[p\2^`<%At$#6O]$$j$S;$lVci_"R9S`2ra9 +0;WHYaTZ+-Q*Bt!=0;Z-q\<6W5n&qq:gKd%0-A/!S7;e!X&Z3%2^<D6thXng<.(6Xj-%jgn.XK,m)Zu #RV@o1f/4RW3$!#'X4$O<'F)eFcDiiYH6(,eAZr-*sBmiq#Cs56%R2Vo\dNe\=Rq;/fG-#RfJ$?JcLB& ])[E_JcLB&JcP<@#8&n&PI\cban2S5W;`e+Q$?V68j5!S'FtHQ!<N#s$O7@h0M-8Sg]$BTYPP7BWMunr WiCb^58FS2"9SoM2,S7OWOo$`C0++o0cC9!!Wr#piW'r""9o)@(*+_d@uRtNj5.DIWN)trITeE3#6b21 g]/?!)DY'(O/p*tWN)u!Q$Q[t8Sa[9mdfMNTPRRc&-<RY$2stf!##MB&JmBAXS`%sfWq2n<&#*u$3g2) ('4[H%k(bYq>^Kd_5)9]4rk[]$j6S3f)Uj3$j@.Z,s,Rn[d)8QXJc,tq5XFmrMg6qIV)2/-Q*9o!s/Q% !!!'!!X]Jk;LG1G^r!1QX88h/WN)nM=@Y4[%h&[F"U>;H6%-fQrs@PaJmUVW%13:Af`3/q!!*-&!sAc6 $5FsR=E9P,cc`r'VPnuK8hh>)&-rC@!T*k^!X8uD)b5Frrr3ngWg@!]4#8oo@W[^4`OW.MVPo5U1'n*f !s.`gli74k"U>>kE4u8N$0AIWCITET$3p[6!2ol'"Xd/tZGk5=XS&RnW;`e*U4d/\:d?rg(D$rY!rrAu !"8u@)_!pXMn]2_dBfnMWZe@@Wi2q_E(qVe#mLM6'eDj`JY0?RPBL5/75lG#"9JW*gAi,m!WiH,"pbPL -9P4ENiL:K]W\97Lg<\3*?51p#6Y,0g&M?i.77KoTt%c7W>DS/KkEt>?%fTKnab,/J6bS_'bh&Z!<LRJ r;[N6#ne.-;MN?orR7pLK3p\U%1*4?RfJ$?JcLB&])[E_JcLB&JcP0<"U#uLVq]u$gAfq+g'5TlJ7L5D !posk),GOH\^U<-rn7Et-3X&C#m2]-f=$f^<tbW(!8%8[!u*OsPKi1LjlP6(("!!u">##XhVdDUSjEtg !!X)W0j9ggf7lBt!SRM[$oM=G[+NW1*Wka0$3D#'@@,3oO[Bfbd/]"'"qa_!Y/8W@qqD&(qUu(aD)Dn, m/R7l+B+lcp=fc)Z$&_e!VZR"$n+eoX4MMD"OmGB!"9;rI(%&EhW(eP1(=94!#Q+s;1>t0bF)m('+Y<J !>7h^_p@#phI@5]!9O7e"WT^AVqSLJ&#K?&!!NB:5D@_DpY#W%rRqJ)Z&NWp)$Tm;o)Jq$3,XbZbP'Zn g=iAg%/'Z,(Kn\qT7(/m"ipZQ#r6V/`R<T)[r42;!W^RI(Dp5hh;@/Oa']qj!!<]L,>!6njf)<%"3U]= !!ri`?\GQ/jb5;kQ2lL:JcLB&])[E_JcLB&JcP<@#6bPQ,!&nLQLMX"`RjGPs5^e\HXoo7/0GZ7rW+qX !!3<0$m\2=;e(38Y.q]b_8<ms\$NNQ]YEIY^RTID0+@pa"UH&BFI'bmmJd.DSROB!(CUB=!9*tu"9o5F (EtCf79*])Bm,?4_8t0go@'dj<BhoI!o3hp!<`iL-95:SOh\l^hX0::RW<"J<_-"rFe6eUrrD]rZuJ&1 "Tnhf!"f55&hujL;I=dId,rroRr1V9oDfR3+>uPZ>B#hGrr<#m]R)mQ"U"l-f`7$4$NU;1%l@9g@sO!2 ^[]&h_rB_2af'u.9KO^C$j["=!<<*#!X]r'6rduMS\W+\`lZ07]<SiV]>)ehrr3eBD`f'V%0cqP/j)Es AV@\]k0LGn>VloC!$VCC!<E6&#SJ4/1d4E+>A\G!M3XjC_"[g&kHK%q)@HcQ!T3qe!<WK3%OskD<+'a+ ^Ztgu'\]*o6p4jrE/BjT[(stnMHr\*)$B4*kPu,),r\(`?[/U/jjLT"@m(U.!2ol'!XTM\/5L&7]^``F _9_-7s7XR4KksgX0`r[=%Kub3$ig;2"pu,+:K(J;LnF[\-G[L2]=>5V\@]K,hoMgN?99#)!X&c84D0JZ bN/O"rO$i:-Q<U#g&Muk!W`N=*@Wd-7S[-%Ec6euTsMN&r;#TcH3Hk]$j["<h#JAp!=9G`02?A<Xi&?8 kO6WnJnAIr:.JN*M8&NZrs-l.9c4-<!WgaMqu@B3!sB#a92/>oJXO7<iQ%sK<\OoN!.k3&!.k3_!.k3& !.k3&!:^$o$Qh?(C4_eQn?!5-`nK_NaHC1+1*I56"9S`'!"B)?'d#YYV<.'p_R$AHrN%'BYHb=8Y-#." DF#Tc$NgP@(a1e@I@RLXh!t*UD(Y_errMfniW'r%%20[)-n[AJ?#tgkV6$l&YI;*TO_$Nc$O-_8huFo$ !WrQ3)_jfgG`S`(Y-kjWUjQ2q1JMJ3QD:UcZeO-VX9)oh'&rs*!<N<)*DM'rf@7sK[BG[(5:76QoDfF4 1L,^9['m<EeBu15A2Y,&eGtX1$ipD3";OO]a6_Hs[B8u$%'R4LUPiqf4!kmY#Qt&-2?3aZ!Wro\7V$t/ T<,2tXfek0XK&D(XKAV@kk=]>P=Q8c!!**(.p%M;_8<mf\Y+7C/fP6%f`3#m!!36*"Ubq^,qh;K:LesK a2Yg$Z)uI&_Ph33(Y\p9!X&`9'/j0P\%]PeZJ"j?m)4W^2`P6']Z.XnZ)sO:4q@o%!s.`gkPu,56uJR$ \[nlPXGL7D,819^!2ol&";`^]?[7d1n?!,&^<u'8hkkQl3[bdL!sJf/!W<!-":>b]/mOFZo%qKuXf_T( ,d"2OZ*:F7XgY*V<%T+$"p"uC*[sd&OK,k?lLjJ&6Oj(r!<LpT)?L!D"UYh[,VD#C:LAL?_8s@"Z)u=# `2dlD!?2-q!$hUI!sK>c5#Z<QS?/lu]"YP0@m);->]l4$XK\ePh9s/g732TX!;um3!<WH-'1deup[-D? Xgjg<6RWcZ".K:B!.k3&!4r5_!.k3&!.k4@!!a/sA=:6]ilU\j&"o57?!1*!68U&0&.&OE"9&93!<EWO 1eMGA[I*"lY,/.sW;`e=W2HMjW2cnRAO%(?#R(;9*]R/?QEnE+QZZ4t4tmiZrW;`mjo?M)!<N<0'HS_Y 3C-5DJYgTTldW2<URdR&CeZ;`"p>#/huFo%"9f&D.n=?6V7FCBV4X'4H=TZ"4Cji,r;5urTP[[e'*8s_ $2stf!##ME'H9/NWVZYkd]T3d;_Jan#mL)(('4XF$RT,Pp](9g_k_E\58kOY$j6S3f)Uj3$j@1]-pD7, `oG(BVQ96f3MhXT?VEpN/0>W;#6Ou-!!!'(#RqkABUHBPcb6?WVPU)dWiWG+Wi<"c?q<F+((giT"U55H 7YT@krs@#OKjd+]%13=Bf`3/q!!EK6&/?00.5sq/G`SZ2bHe.GVPnoN58tLU%Kuq8!T3r)!<`iO.6;%0 f)Pd:_4lHa7j/[)7p'VfWl;9DVl$DI>r)cj"Tnel!:0[i!X/f82/p8.rs@emP\W`2$jm4AWrT'u#R;hW K"&tYgoBnF%&]MJAPuN'7QE"A'akc]"U"l,!!**)(b@sWJ>CZacEsLLW2TZp,,_<9W2ZedF&++k#mUP6 (+i-iLoA.mRtP'?7PuD""9JW*gAi,p"q(qW)^6^g8mc\!U9i"KX/DhqK4@=n)\iJc"p4o-h>el)"U5;W 4Bm<+Zb`oEU7%*pDH8\J;hDRTqY/L?J6kY`(DI8\!<LRJr;[N8%N6WS@#`;.jh@[nK3p_U%1*1?RfJ$? JcLB&])[E_JcLB&JcP0<!sL&`^$t.hh8cdh?S<&pmf4+,05mJocemg?gXad+gYLiJj5oEc0a@@P#mE5Q j3+QaCDR$@!8.>]";s+!J$%A_g<-pf2@%Y1)$(UMT]Y(X^opo_!rr<%$Q(EqOjDX64:VDG!!s3"BofjZ b?c+hmJmRq'Jj$Wak`(J'EQS]M#[_o>G&CLh<+7i#25MM0GF]ln,Nau)ao+mjl"tLf`'S3f@o$;jNX<3 6O*Ye!!j,f<//-JN%t[g!;$7#!XgMaT?>[<iSp4r(BW"b)$M6^G+Zh1Y@8j_!X&N(!":rKb1,2)hI@5] !9O7e"WT^AVqSLJ&#K?&!!E<=8t+c0jp:"o\tad<*=)]E!:p1***/?/aP,b7gtL0,gYLfIj5f=<:D3@$ #T[^6f!q/m,R2Bk%flq_<LCnWg>V1k:`KQ;!7:cR$oNF`hq,oWHSPs-!"&rE+%1@`jf)9$"3U]=!!s*& I\+:*jaercQ2lL:JcLB&])[E_JcLB&JcP<@#6bMP,!&nLQLMX]`6?s"s6@n<Um6XS?UcX`!WiB'!!ET> (Gnlk?%%U"[(jDn`4ra]TqA9h\A%%[`2%i^0b+3d"UH&BFdBkonGiOHRp[up((13;!9*tu#7qe#2+CVZ Ed)_LGD2?i`8LLkr6(OA4"M?]!oEtt!<E6,*&9u`Bmc;_e+E\?hl_K,852`F9j_t2bPqMAo*2RA3!TTh !p0Iq!<E691It/;@=5!"k1@>:DF>T=!!ilQ2*a`:E0S?@rs8G6HU&#D"9JVW!0.$e!<N<41/V"TEJ^I* n\6Tkh;dPK_5rrRB1t*&((LNL!!*-&&M?geD0_#:_8X^RjkS"cTVej&^<cBLrti(`4s:^Q#6Yhq4$lhW KtH[4c*E.01C`";+ohTD!<WH=.R[W\E-$/JJ:N9<Trtl?k24=cJlslB#6b21huG&(#7VCi5?2-'EIjq3 qtK'jUNfWk10SaFQD(Ij^s00A>t$C`"7-$O!"TVe2aC)EGcK]`d^G9J4Vk'uVuR))#nn=1:MYWrn\5LK aOTACp=I*ZS;VW)4\n!Z#m(,.!!3B7'dQ4N?$1mcXM2Hf_ns!fT:_m][_(2Pca/[C58sS(":,>sB8F%? k552W[<4e_)\<2-!#bk=!sB2`6!S5EEclYWIt3fVY.)1-im+oe?3N;(#R(;2h>eo(!<No`5Ybd2M6t@e r;Z?(P%$mQ9h.ZSCPfdqs8W&CMbP&n"9JVQ!;um3!<NB-&NEfrBRPi9^Z=%^S9.LV$(CpH!.k3&!4r5_ !.k3&!.k4@!!`lR3)=:@Q`KVX&$idgf^[@jMJlW_.2EBu"T/6W#Sn^C<-tS"eA\u'XfSM!TrYN/\@&WG XgX^>74B&^!sK&K+Z3GMS?KlgoCg.@/cbqP!<MloiW'r-*AKrV<*E^HH\n2fWN</'\&6%dGY][p#6b/0 huFo%"9euB.nXK-PG,([\&HM.O^pZs.7e'*T<#9&Ze3gKV#k'\&`Wj)!<N?*+&Rj9j5&"d[BG^*5:76Q oDfF41L5g<[C3EFf%%mGB/^P+eGtX1$ipD3";OO_bOXN2[]T)%%'I7S[AK%5C03_M'*S:92?<j^"U5`! =*TjuV5g]#Za7'BV4s]]WN3/8iUup7P"$#`!!**(.p%D3]tV([\Y+7D0,tE'f`3&n!!<B1$lLNW;-mdK EIO(L_S!@aYckd@N+G@'%ftGc,m+Mi+>?W2PIeKB]ts!i^R]UQ5V4g"KsSG$Z`pR&E'=d;"Tnel!9aCn *(4\8ZFRQJ\?(Nn3?o1AWrT'u#6Yhr7ppV)V=:SqYI;Buio.G6G[a6"*!6]Y"9SN%2$FO501K`B`nJVM [&pF2VP0um\@8oQYcbC6K3'`J&-`.@&fi>mDih!0ea3"rNC46V!!*,T!#bqC#7MFt3DNmkCN+T]VSTsU Z`pRIYE3Ng.01%_gAiK$"U>;V4Bm)jS>iZp^;n3kF\XD+3a-crVQ[8+c.U@RG=!;QcN*nD'ESFD%NSB! ^us4b[]QfuB/q.M$3QatJcLB&JcNC_JcLB&JcLB&nGie+2IVi_c.pG1X%&kQP'ptWAn,"82BihF#mC;/ !<E68/P9i<X2aA>Yc+FtWi2bfVlQkrVPU5kM.Aji$jm1@#Tbs(E0[]GVjD<t7li7=#6"\s!9O8(!WiH- (+_g\Bl7p3Kq5^'m+KI^VO)jSAlUr8#6Y,1!T3r$!s]>Q,X>amX1?*\X.=ufBjX[s+>[JriW&rO]:a(C 2\cB3'+4^>jo?&!%Mp9RDQ3I3n]Iu+G>^"(%1*14!#>V>#RVk^T_JKdpqrnL>WrrC((16G!S7=4!"9#B )^mm^PKNF@Z_skoX#[&@JobU9?Wp;f,nU4]!W`9($POF4;gbOccd'#!VP0NFSYrd-]<nT<R;GVa0d7G@ "9f#9'M!o.rr3;OWeFkD(_$cV"5*Ys!!!37)C7($93GhKL6ndD]>:MFV5U8A?p5ME%g`==!T=%X!@7md 01f]5[,_2Rc_d+G;`#1)/j`NRNiU*uVkp>jKO-A>"p=u.li?AP"p+r5#rQ\8rr3;dZBT,o+:JS^"02F# !!i`W;1Gpmf\3@qWskqsQ\96lB4G7D4=V12&dnjF!!**%#pVZ@J"XF.agS7IWi2noU8=fiWMcSjWLIm& .1HXi!Wj,h87[LT^93rV=\;%:+UeJT!Wh$U)?gTg,;2/N=ClW,PbkRq_Q'N1W2kP]666jP!t#25!T!f( !<ilE)`1N<T!Z5NX.tc'DIQX6-mMH=`;fl9e#S%-7NEB_%0Zb5d/a+F'Eo-n1.Z;M`SA;4VlPMZ4;8// "9P%mJcLB&JcNC_JcLB&JcLB&m/R4l-Y0p[jpBqp`3Y>,4sUX?nc0I,'Ln+pbh1n5g;^It\]NFVh;I>T P;3C;!!rfcQK-)eLh7;$n,V8E&HMt>'e;^`Ju$B?hS,1d5SF1I!"/oL6?]p%c)#Y`-j]bO$3qA"=d.._ L-#nHg&MEn7WY!5g<3e@!q$$q!Y[=oOicFA72,dM!/U[['31=%akPtJjp9bNLKcnj)%-Q<!#PbY8TCHO j4r,%\%0)^[`$VKj3X`M;%<[&!!j&a;1lRCN%tXf!;HO*!<ilH+>[,U]@GWmj5>\N$do"^!>IeIT"E@o KJsG=!!rojPL\CEj5+2WjoFND#R)23CT#mn7h;HsU]:Mu(J:.Un`C/=fu^b$C.Tul#6"Vp!#GnoEO<a7 hW<M9\u;pReC`O5ioIpQ'*7h-#T[[5f!grb+9p*k&-2qB'HSo+J[O"]hrEj^4V.Mldf9dW&MRO_g=iul @5ef"rW!9-&KjMf\`Kek*WsRcpAbL9>G\sWgua&7"-rq=!.k3&!4r5_!.k3&!.k4@!!`Z9(EtnDFI2L3 9#8Kidba$9ai231XdO-",Qe)L!<<96)'qIJAoj0.Y.26a_nN^bSVrMqV6mu#ileKY>;Qik!sJrL:N_u> fCJtAiL4+.+VkFep&O(P*"*]:2b@:pN0TQcM3"+(\An:CrpdaW:E^Se#6E]^+9;NF$S"_P@;UL`^ubRq rR79I1+P=K5Y>:$REPU0s6p6!EB"1,!s7Tb&ci%8'/`EV<+CKYd-'#pRVkM8oDf.'*]-)Q=DsAArr39$ ^3`*S"U"l-f`7$4$NU;1%P^^V=)<Vb^[]'._9CZoiR#NQXHIQu0Hh5?!W`<'!uF77I"REO[DC&An+Yqe XHT'IYJ&0Grr<#-G![Gm&-i=S/NQ3rAq[e]j34`]=u$N>!$VCC!WrT1+@^('R?s5'P*;-!Wj9(F^t$;t I9f#^$NpP5!T3r(!Xfbg0hl.sI>aiFiV_H?PAsP^+=C*1L8qPf]>2[qLKd/!(^'+)kPu,),r\(`?[/U/ jjLT"@m(U.!2ol'!XTM[/5L&7]^``F^r4=?f]V&9_oKKtUHO-/1CjQh!<E91'd,8,@;1djW3j=U`PT?r UQLM!T<PoXkLI/0CI9*B!X&`84D9S]bio!)rj?f5,T70sgAi,m!sAcG6"Pe<R?a##Q'Ic;YdV-Xf>ab@ ?pY#E%Klk8!T*l*!<E6'*'I>1C3G]Kdej(Dkd#J&-o4%O6<%TP^@D7'r6:*n)$U3F!Rh&I!#,G9"UGi0 @VpsbTsMMkd'JaI81+\4!.k3&!.k3_!.k3&!.k3&!:^$o$Qh?(C4_hRn?!5)Zamotc+0d<IqD;+)@ZlJ !&Y3/2b[q?W6;obZ`gL3V43gI[)9bm[]usGSp*aX)@ZcP$Pjj@>'ldC`o6R``bmC0!!!$#p&O+Q*<?p2 :iL]1KSPVRSY`EgY,ebD]W[N+3>r#'!WrJ]!$MCI#7MM5@Yq1l[Bm$KahP$'9e-bs6=u1RZF.$Fe^D@- !a[MkirB_n!WrNK<ftu"jik'=Z&rZ`-l30]!"]Vr?&5Sj\$WBlg!-sA3Y_\G!07*g!<N?+'ha;+p#F6) XmrM&YI;$U[],pbMJ,@#"U+c*1^+*l*^XOuU8Y)mXg#.A\Yu'eS"Q[[Xh*6Wp?n)6%fcS1!<jrPJ?ZVs \ZE?7HVQ77%0P8`*WQ0D#S.\#6sk=uN/s$bUTh>:ZEUL7XGUFD+qt:`g]/W'&L9A2BRl\c]"Z55k.$4L 5Vsu<0jB1.['Hp=XdsAm$jQq<!UKgM!"U&;DOn)D\u`ECM-`1e'*bK;VuR&*(GA9dH'+rmXUMA<[_B`1 _loVfDcJb!+qk1_r;\\Z(bS3^I%8!g]!\fFXJVVUSuocF^::JP[B,*d1a*J9!=0;Y-;&09X1HpNp?[f- %fcS1!S[Sm":#DP-:(p^MMmLUPG#%f['Hp>Xfmgu4!bXC#m/l^,ln/S$4eafGbVCM[]R$Y`O(V12]<8a =aZsH[C**Ze]P:A5TBpQ!;um3!s]>R.TV/-aM53hXfdUj0cU`1".K:B!.k3&!4r5_!.k3&!.k4@!!a)m ?B;S<fuEN^7]2oKR#HWLJU1cu1`dJE#64c*!Wj6%AWsIBg"3:&V5U>lUn*pHWO&b,Vl$JLA3_(B#mUP< *B-l7Pd/-(Q>KAc3%GaKrW;`mjo?J)!sJoT89:]4X/;G_YJAZ7_m?A=KQ(-b4Xq-J!s/P]!$MIT)'q4C IA4[#`jVn1FC7^.3$].e?_Hrhs7X*uEEG1;!ZMg\rW2-]'*f*f,XZRMqZ#`qWLn<2/.W-q"S_s4!X/f8 ,[-l8s8Vo5UN0O$'GqMl"9APT!07*g"V;V$5%Tu&psumOX7<5!VOs02KS+f)HsSuW"o\TQ!!a,X.7.a2 \'W40Xf8(bOG9!nYJJ,gZDj:=;+<Yu*=N&S#7)#6LXuJ)$.5f-@6>>7#mURc!$;1@$Q:HU:1SR&NgQTF \\5MWVPU2iVhAJ@'+G6O"9IE\-ijAN#:)fWR'k9-gr-(SL1O%2%hU-N:hu,p^S[j*WMkJU0F7mc!WhWf li74k"U>>kE4u8N$0AIWCITET$3p[6!2ol'"Xm,mY/Jf?Wq!+uWhZ)PP_4L<Jne7J-9W:\$NpG1!Wiia <.M!be(h((VP^DoVP'?IUp.,)VkpA_EDJ%p$3pY7(+_sbL8VhhRX\@/5VF2f!s&H(gAi,u(aq@<@<I9_ R%^Xj]">;GV5L;nM.Jsj%LE1@!s.3X(]k!X+Y?<'PInoY]VqEMBN.A_/K,O"L!9Pr$du)-@RhO\(_-]M !RUoG!#,VR.mI-bTu"(:Vl$ML@65/2#6P$s!.k3&!.k3_!.k3&!.k3&!:9ag"X[cmnE(,=h:Bi`T7^iJ *sVi=!#Ghd?E_i3hrES8Y)IRgZ,k8Bgu7@Y1^NgU#m<)Nj2\*M?kEG/!8dbh"VDk57TsegU:/.ohqO]- /eS98!"/lQ<I:Xijg]Cs*=D]E$3V(t>*R@bKf]eHg&MEr:48ePgriq@!q$$q!Y[:lONH=A7M>gM!/U[[ &Q"Fd`nKSFjpBqm\=.td>YI-coDf^?9oQ0ogZ-o&WKNU9Q]S,]f&>,`MdmV-p](R/-r5E+j,>_ue,]:E &I9jS:KqFWRCUf&i8WhTFX$t9!"'/hB!B2!a15P#"8`')"u_e'i8WhS@1q]&jo>Yj*'S/9g9a?\V?!Cl "9B<2Rc<l"%-?C"d)N)FF':+*!W_ln(]bFCO3lM7iTA_#R!4=`^s1?^i8hdQ'ERq.#TRR3e?tES*X0ji &I0RJ9ittMQ+#)ri8Wh[Jh%!'!7UuW!>7_6Pec,$N_q5:"8r3,!=g8DHFr:<<ZVCe!;HO$!@)a/db<[B HmJl\!.k3&!.k3_!.k3&!.k3&!:^$o":Q(j3EgQln@qT2_8=+-_T'aSoC(\aRq+;X!s/K'#S\L;79jbq [^`r`^;@[sZDWn8KT)D)^?Xn/[?"ZQ&-2k:#THQ_R).GIs8V)H>q[97$Ng#%iW'r0,r\%a??;aFZ*CUD \@TAurVcBHYAuZ1"p=u.huFo$!<N?63ETj,H]YAFq#C9[`.gl"&gT:q7p0\rbPqPAmKTt:3!TTh!p0Iq !<N<;3)!"GBniY7kLdJ:DF>T=!!ilP1Hn?2DN`!<rs8S;HU&#D"9JVW!0.$e!<N<301nu=AV6Pgn@qE- _8=45ai)-.Qto#C+:nVU!WrNG;L4\5\%0/fdd-]+kfBTVNgQiZal<0srjR/A-Q<X'";WOL6;qKN]BJ4q Xb'Y0%+tV%!!!'&"pcbbJ>9W_Za-jD\[f;`]Y;2&WI@Z+.2E*d!T*l'!Y?M05$)TOX1Zg>oD-@jAkP'- %i\;ePe+K>^;/!tL0?qr(Ba"(kPu,),r\(`?[/U/jjLT"@m(U.!2ol'!XTM[/5L&8]^WZD_84",_o0X< nakqq4gB9$'a"O>!<j#T.lpXEK=&,!]YDD%^:188K78ZBW4:IHgVTS%7NVU3"UGGtBSs=Dli-q`[;nJV )%Qo*!#bk@"UQMUI@dsVZa-jD\@B,^]Y;/'YCoq?/--RlrW1jU-ijAN"=R&U@rd<s\_d>bo[ogF.L[=O 3C$GRL;*3Xs81#t9c4-<!WgaMr;[N4"9o/O96#`n[^`ubg;p4D?U5nARfJ$?JcLB&])[E_JcLB&JcP<@ #7DV5:MYQLX735%Y-5(7Yd(O?ZE0=7;D/jkquASd.nF6$Q)h9rYHG"0Vk'!/S[$>__n!(T]:sXJ/fY?( "Uc"c10JslYK,\qp;_,*!<<*#!VQNR!#u"^891H,ZEU=/XKAS)X0&P1_m,MF66cp@!W`A[!$MFL$kag[ H`l,M^Tsu]_Q/]"1DpB64_Bk\\%K,Se'Pgs!a.)dirB_o!WrQN>FX[EjiXp;Z&rZ`-l30]!"]Vr?&>\m \?rKng<mQO4Vn.L!07*g!<N?+'hjG1p?Ku6XmiIlY!TG"Yck-e?n_ih!s/N+"q(th;0JA0WiW>)ZFIBN TTkP%R\?U\\'aL6mZ0gJ!!!$#"Y!;tXL>^LXLY$O:GEk""5*Yq!!!03(*GYEJ"3L=X/`2%Xfek1Y-"jt Da"^="p4n]!$qde1f.t<Pc(Xh_U[])Puo=I'cA#E=+$[EY-+n/RVt:s"p>#/li?5L%iduTS[,f;XLP?g ?9'5D#-.a&!!`WC01TDqOeqNK$a6b<ZE^[BYd0pR?NWA3%0HJ.2$Y9e>'Gt"Z*CO:Y-"duQAUs+_9p?; [BHs@N*eRi&dJFB&K<#fDNCj0g@=n(O$jKY!!*,T!#c"L(*,;:HC1\1X/`2%XKJb0Y-"h"G=<2Q"T\], g]/W$"UP_S4DC22f#P8']#V7LDF,QV$8,A0X1#UKXNAr0YAZQC"O@)H!#,PF(F1nDJ>9BRYHG".L05rB %L3**!.k3&!.k3_!.k3&!.k3&!:^$o&2ROJZGtJ4n>cYkW26<gUBm30=$.`M((:6C!\sj!97O\7n++8l W2ZeqVOj'5R&%:(Y,J1sLh&ah%13=B#TYg#DNh<AVj(jh6o-2*#6"\s!9X=e!<NE/#r6.mrr3_q]WSKC Y,nY&WhOfH5:7]o%0?S3!T*kn"VW+;9Q6?0gW-Y"X+FqT.465P#UEZNrr32p]V0@J3?&#@((1$Ajo?&" '-/PmF//O.gUO/RF\jRt$O?n1!#>V="pcGUT(i9bqS].K=Zd<4'+4pD!S7=4!"9#B)^mm]PgKEf];Ve# X#[2XVPU&`V50c5<\"=V!s&B-(b%LII\OKYX/W+tTTb+YMjg]_`P]3bRtb3A7l;J#"U,,:'M!u2rr3;Q X+atE((1EQ"5*Yq!!!QT4&g0[W3<2$Y-G:6W2Q\pWiDtN?o&,o"Tne_!%7jL!XUPgRF:*akHUeKKkaaW -3jht2,7qKYJR9<WiE"O>V??d"Te_k!:0[i!X/f82/p8.rs@emP\W`2$jm4AWrT'u#R)MIG,`:&e#Mo< $`Ku"US=QYV1E,H.m5*p&-W+9!WirpC8TYJo%U%?WN*"uTp^q*T<Q,;Whu_bED7nn$jZq:(+_p`Kr)Jb RX.n&4Y.T\!s&H(gAi-#+?*/5MkmYXXfeq7XK&4uWN)u!Me+p[#6Y&0!o*bm!Y$2'5[fJNf$Cn-W0VC& 2('Ud$kYm^f)G[Wd]8%280T,n%g;t7d/a+F'F,U79PTTg^o"$.WiLn_3tVf)!s4qlJcLB&JcNC_JcLB& JcLB&m/R4k-=a^XjpU;3iS`SIf?^[(+p[c@(]kC8HHG1,jQ542O_7L1R'jfVf\kkV2@0$W#m<&Kj2RmC =q1T&!8mhi"WTR2OM/icfA#-=i8`@92%B]9!"0QEVRt..jIT!_!s/<"$3Lqq>F!ReKf]hIg&MF"=GE`o h90%@!U]pp!YR1iO3-4@7MGmN!/U[[&5%SL_:du@jpL2,h:pQ0bfI=]#ke69!\KJcgtq&McEW@IFa/%G M6+tZfXdMq-3s;G#R_tQJ%Oa"1'c;/q>_*53L7Y*bKeVkgu.8SjlP?/'%-ae#UWK:g=sf[VF(mj!!rcb R,m>ijkaAWjoFND#R)23CT#mn7h;HsU]:Mu(.jqRnE(,>j5JnNf[J&g1CaHZ!#YeD/7>R<j5f=abb]M\ @Yq/!ajf/,_c%9NpAbI=B\Cn?NFj+4ci=X]0o*`gbKeVkgu%2RjlPWE)Z9Zc!"0&mOKupZikT7X$3C#( #n%qKICnU><ZVCe!;HO$">PqqioB._Gp39T!.k3&!.k3_!.k3&!.k3&!:^&!":Q(i3EgQl_8OIEgtpMt \[SuQZ`p[:XK&(gTVS`u]?0pKpZAo06P9h7"T\oH-o4D%FJ6Oh`lm&]^8d]iO+;.mJWcbIbJ:05>;Hcj !sJrL:Ni,Af_5@FiL*t)*u,.bp&O(P#88UK5tt^6Z2)-Bc2R_7hlL`T"U"o.hZ+Z!#7D+g94MUjPGG_- qt]L+VJeR*%3RGh86BeubPqMAp]e0L4U_T""9&>c!"o;5!YmXe93#\]WmKq]]p`h,+7oO=#TY]b7osSk `W#lCrkEeF%0Zk9!SII5!"/f/!Y$bR9iGPRS%o9Ebg4\[_S!5SYm@S9XK&(nX0oS<^C\3+[>eWd1)gE" "9\lQ=G*IK^F@%Zo_7n-\sn2(O.)uYeaWLoUMW:D)\E>Y(+_L5;J(TokhsO`JQFN6f`2<Y!!3</#V]Y> WqF+4^r<-o8i@q."5j/!!<E9)#TY`k;Iag/][#gAs7!FG:cU!E%3&)fRJjl+^s99E?Uldg"o\Pk!9aCn &1'8#9j`.Fi8rCqO^gNiWrT'u,m"Ad*%Xm$KtP=Dd+R4,beCQoZa6p@Y-"b%TV/'[Zamj>rqu1Ib*#gO %giLB"VN"65$2T[^V[t3cJ$7DTUM(#G&r(jR_$b^[$GJo*<6-E#RW\.MR^strr;u)E^(cd%gC\f#6=o2 #V'&/U%H)'aJjVa3%"_A"l')!!<`]>'g5c6GDqus_!M!hh7SG;*sNN63C-MSKtd'Urs-o2:`TlI"9SQ' ec>XK'E\UN'e*((OheiQaj8n\R;Ph[*X8)6JcLB&JcNC_JcLB&JcLB&nGm&,+#m)4K:&^BYHkaU]X+T2 U8+N[USFQXUo:8sYH=k,YJ7E4GY0@p!<E6&!"pq]EJg6cXfo%;\]D1IIrKq&W5-!PXeqVHD+ZB!%KlnA 'HSu3H^V(Xjn8>gE%_4l!!*,o!94%b!@(Hl\&HA'X8/k)ZH'MDEC(iW!!!&X!$_LF"V;b-6u.q#ahP?m ZH0;1@m2+K";a:<R^^#E[^4]?c)h%[2&-#j!<</a!##D9"9^#XTBc.4b-\R]P%R!-(C9X5&.UO&M6=@u ['86=d_9]a(]i.eNrTRh!WrQ?9Sq0km*WAH#Hb26XJr%lV#I(oUS+?WUSk#kX8T.3Y+g28*>&V^!WrW: 'J3C8T_to?[^E'(MLp2%KoVCiZHh_1d!\+g!!!$#"Y!8rWO9:HXLY$O:b`t#"5*Y\!!!36)'hR^Lo0jI #d0P22[KWi!<V0Z*!$0F"q<"OAV-)>X0&nZjQaO)58"/0'co,7I\-M?$a-(B5nFA-"9JW*!Ug$P!"U&; DOn)D\u`ECM-`1e'*bK;VuS+H(GA9dH'+r*YHYLN^:1/>U8+N[V5'cYUnt)mYcXt.XhVKELcnou(BjjA !<EKQ6tCn5V6-l(Za[TaV2B8=NM*bn\$)d'PBg4f+qk.]#8%n#8SsNh]\;rMmZ9gI!!!$#gAhH^%i?KQ @YUZMXTb>:4q.\u!<N;Y!%.dJ!Y$"p2I(j9f#,,.ZcBbMFA"/$#RW4fL9eJ*\ua02dD:<&*sMQCe,]FI 'Eo0s3DaUNUTUi-\%]D):EL,T"Tk.nJcLB&JcNC_JcLB&JcLB&nGj.410TO=`7)T&UnF3APa7c1TDkJt USOfgZ+.KW[B?R2UOd&P3&2Wh"8r?W,>jBEo(V^cW2#rRObe[=G(PaDXKSk5[YJ9S)@d)Y!sfr+;/VT% _P`W09LLW`'F+O<o`4.T#6=l0#7<G4^]+66fW=nL$)2QD2'!YM$3:1d!#kq?!sK,W2,%\@WlVQIU7n9, >s9DP(_?s!?)R]%#4]<uDc]"<"r\6c"9S],k5Z/#&fiGkEME4+g9mfMF\aFq$O?n1!#>V="pcDTT(W-` qS].K=Zd92'++jC!S7=4!"9#B)^mm]PgTNk]r7q:VkooMR%0b@UAgnmWN3;7\@/Q?rMpL-L0cYD"pG)1 $QLff@Y^torMpp9Q\K]uFF]=;TV\ZgO*5)97QD\'"U,,:'M!u2rr3;RX+atE((1BP"5*Y\!!!TY6=#&5 ]"%F6#cEJd0aS!e!Wh3Z*!-9N&045bZLmtheuG9nAQ__h+9i,m2,S7TZ,6I?$E&P_1C46g!s/K(mJuSR "p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!"fA\8p-uEcI8ejURda:Q'n,6rh'grUo(/n[_9;^Z)jt+N,Vl_ ">hPE#6Xr.2%r2r[-RVhe>oF=S!o.eJ9H<qPG>@bZF--?9ILAY#6P#C/4O'%VS0+#H;R0o.NJiu!<N;V !!`uZ4]m$%[D):6"cHqO%0Zk8!s.9Z)Zg*E#8f!Z>CE-VaK;;3U53MU/KbrG$PGmagA_*\d&Vb,8L#/k %g<%;!n%&c!!*-&$me8OL8DK#WhlAXR;u@d&-rIC!h01A!.k3&!4r5_!.k3&!.k4<!"B&WA%^jXfZh=D YG7>Hrg".cSYN*f^<=sWgu%/EMaSEe!VZR2"WU'hdH'3?f#*GL1*&#;@!@?kUTe>U"SVm&">c;&`hRl` %0>quhuEog-r,2thYH::eTNPO!Rh#V#;^qPdb3I4J2@Z8qZ$s*(,]Nge(9CA&H^Yd#p!*#VoRW:>SmM0 !"&c?03F:Wh3(5A!RUn(!!Ws)I\4C-jV-Fn\>>ggR?j,*R%'eKZ+.Wqg#)bj!oI`0p&G-t408DC'&U6Q =ue]+2(_$oF-Dc6?V)CDp](R-,tiZtj,>_ue,]=F!YJGPp#Z>4?P(Zd$O7kEG.-DYZ]AfG"o83#"ZN"N joXCL'BT;W!!i`J5&7(MZptY(!2KT(!>\7pinrM<a1\jYR?[]:&=K)]UoV)Id+@%/io[=H-jfqTpAc'4 &2nC7k2G.Kd\1D@+"'0MDh*q@X,/kH!VZR")edpQZ&<02"4.#L%8+/&joK<7r;b@J$NV8T\B`[\hQ0Eg !rDs*!=^DPK"^9I=s4%MbQ.D<#nTOtjl,%Jcs7HQ!.k3&!.k3_!.k3&!.k3&!:^&!":Q(i3EgQl_UIlO s6Rq5Q^!\rNfT3]O,SjDH%D!L[DhV5rq40f<[f(($3:MQ/2g+.GG<"!h!G'pZ&s0NEc5`7H%1U:TUqEl :bE1X!sJrL:Ni,Af_5@FiL*t)*u,.bp&O(P#88XL5YPL2Z2)-CbPqP?l*5:k$O6h;!T=##!<j#T/3[-I DNgd#`mjbBa/aeo0b"X>2a9l:ELY)Lrr3>?H9i2S$3^J4!<MHc&ci"7'K&HS;e:]^d-'&pRVkM8oDf.& *A]lL=)O2?rr39'^O&3T"U"l-f`7$4$NU;1%5(4H;e(EK^D"l@cGmDpSrenkNfT6]N/<IVU9sj5&)>F9 NbV-8%1!.B#:!B%U]%qV_WpONfY!c)@VBe/KTDV)_68Mr3?oCQ#6Yen3^Q_VKY-I+aK0qo0FZV7#ljr, "U>;f@"YKP^BhWrX+F;7.M`-E!#u"A"UPhr93c(LKUTR-rr<#WWH(<W,8q1=<-al0^C.j*\Wgc&2')r( !Wh`ikPu,),r\(`?[/U/jjLT"@m(U.!2ol2!XTM[/5L&8]Z]@3s7k3VTpCq*rJqDINer@7I>XDp^>Abc rB8f-C,mIT%0ZnK,W%hjD2c9Oe`QMk^n#jpF)Yr7GC>1-StVU,?99#)!X/i:4DB\_cKkK0rj6]1,8h!q gAhHZ!sT#[>C`F>^BMfcLKQhm!>l!q!$21L(a_%7@VU[eY/&<Xld</)BL!I@*A]fG;e:d!li-nigQbhb &.8^F!r`5P!;um3":c@u3EU<^^rY-io]NW9=?nGT"e,LD!.k3&!4r5_!.k3&!.k4@!+QBY3)FCCR&dC$ bM1a_S;;?4G^=acIt*$*PG#4j[BZd8]tLeAB0I:="9S]+'/EI.NLm,QZ+A-5o>6Dr8Q]PFKSG8;M0j#> 5UmW\!sArF*\gfERBOZmp%HIG0*)%Q!<MloirB>c,Z9B1bfn#,q5jn-cH!5K;^r=V!TO/+!<E6'$mIf: FcWTD^:Cbd_9&3c67<`\"WBaITt\I\[BniRholCU72c1-!W`?'!U9Xu!WrQ.-=EM4pZfu1[BYm-5:@<R oDfF41gPs@\@AoMg"b#iEBP->eGtX1$ipD3";OUedJ*"T\ZHOJWh#-(J:2]gH@(!gJr#>HS#!+_XUhe, E();q$3:27&/d9-JYE"D.'oh7G\^_k='oT[GD2Eb_PCg$$NL/-!<joKIAsWb\?*67HVcF;%KkAa#ljr0 &/li^B8EGXXU))!EBb$A"Tne`!#u(G%i$6N>^2L*V5gZ3daQF)>:p<g%iQcU?@\aJXUD;)G"3>Y$3^P7 !WqfjkPu,56uJR$\[nlPXGL7D,819^!2olD";`^]@!Rm2Xg?$sh8lLUI!9d\I!pHpJ:ioOWjfFEXf](H [](9l9IL;P!s/K0,t2I#R&@-j[`$_Vf:[.Z;IF?hK`6cIJob<k0cpu3!='2U,Y;j6X1[0Wp?n#1%fcS1 !S[SZ"V2Ir5%KDCoW8:iG"*2R"p"f-hZ,/-!WiND1/;V<T=i4V\[oQ,Y(0G+*teee11#sP_ns$fdHKQB S67<H!<N?$!S.8L!#,\[3E:'SR]N[#`ms+iJ4(%W"Tngq!.k3&!.k3_!.k3&!.k3&!:^%r&2IFGYf,#- VjiEZBlJ0<H?a[[H@U^,O.a#6le'7eX/1i$AQ;8W)?g9K"pH;OMp1\`n$f*]OEY2HAR/8?AT)dFNh!"u ><3T1$3gS<*]?l5PH_p%P\!NV1+*b?rW;`mk5Y_f!X/f92fl_4rrC[GWsYPB=Z79>'ab!C!TF(u!X/f< ))4m'Ni'G0WhQ&PQZ#th*ul(1%kM4irr32g\Y!V94W"A='+>'K!s7Wc'*f*h-pqpJq>]B_VOr!,.1HXj "S_s4!X&]5,$:H0s8Vr6UN'F!&JYrd"9APT!07*g"V;V$5%Tu+s5UekWY;%dJ9#^QGC"XbJ:iZDUT_;D ]<M77&?(1d3=uZ,"p58U1Iu,;XLnG3*2emC@8Bp/@:jG&J;\ho?rBEN*t8AW#7)#6LtDY+$.Gr/@6>;5 #R1Ca!!rW*&L]tOJ"jTcorA@rLL;nF#R(;2huF`"%N?iZ@Z\G#rTM2#Q?6V65VjDd%3do9Gac(WrMp1$ KjZbI#R1D1!WW8i!:0[i!X/f82/p8.rs@emP\W`2$jm4AWrT'u,m>SeFeugte#K($G\Cr7Fa/1VH$Xmj L5q\(aQVR,]rnB&J8SNn9fsX/"o\]`(-lrIm.pP-WgoE,BP1mc='B$IFaf16U60(X,Rt1e!Wj,g7U_"J ]rd`L;+E\t*=;lL!Wh$U#7`%D>C)mN^@\H0N+G$\#6Y&0!oO%u!<i]8<kNK:T9a\YYjcR<N(1//fB? &K4?%h#@<_bGp.t7jo&d&-rFB!s6pO(]a[@"VNOkK<E&;`i>PpJS84U.LcXd!s4qlJcLB&JcNC_JcLB& JcLB&m/S=5-"FUGc*34F=[t7l,9nBX-S-u18S*LG[DgbTh5kN\+U@`A(^;-XNRQh8_QSVc-40bU#S.ar /ilTT%0?2'#m<&Kj2Rj@=UbE$!8mh\$n>)&[GL`A"P8/_$j"iX$O%bTT@;HHeB;AK"Sr**"WTaAT[_VX 9,drd!!sTBI\Od:b?PkbmJmRq&hd@Jak`+L'EQS]M#[_j8:I2Gf]3^]M-Dnn/12Vd,UOon4@rRiOLWsA joaRf-j98E!X:ikrT4aKS67BR%LWIC#7_Y!/heq/'*7k.#R_qOICeHt1'c;/q>^R0<Q=^o!o@H$e,Tm[ +\ZjEaQ1<s<\4g_q>^R&4e_i:!o@Q,joFND#R)23CT#mn7h;HsU];P=(.jqRf=RT!?;<R1+X80V-7U]+ 5?iAsXME3<jhQUK/HH=^p])-5'K^<Gjk7bbUg,\h!WiQ7'HJV[6TQ"cp&G@;B\Ch=Me*b.ci=+V9"=NU !HT1X!7h,Y!YdkKaO]%sd#0mo!W)j)!>7(fM8A;Y@k.fcbQ.G=$3_b_YiXQY\"ktjPlQC9JcLB&])[E_ JcLB&JcP<@#m:YQ+ZW_KQc/%cs&S!_MI^1'>Zk9<@Uj.jC1V1+Nip:Onb`4.SnpYG*tSJ^*ABQK@X+Wd g@P@Ee=CJM8OZ!49N>D0D0UGVAORsS!<WK2)c(XE_:\J]s5BAO0-:o:!qlWR!!a/g3^?AEHa3C]!6P6? #kbZP57n;/"9IK^+9;KL*&9cP=_3&Z[`6n\m`2)N?9onH&h,q08m?;*aSc&;$H@Tc)A<Pc!s/N)l2VFt !<Noj7n?NeKVd&YfY*_k6m)%$#RDG,5"A[lP/[G##l_Sc5Rdl"!WgsSNW9Ff!Wif`8PN,nJt'Ohe'5P& P_!aX='Ad3@:j4iF+f^UrP&oZmd/ZDOC:-a$OR1H-!5YjrP'f!lK$@(S9e6r4[_qA?Yk(JKP!e2+;PFk ";WOL6;hEK]BJ1oXFXG,%+tUe!!!'(#73+lK<"UZ#f+]iMI/e*(^&[r*!-9N&0+#CE-mD+WP7WrrqFj3 A2YPN)&Ff*I$srJ%)CB-S8qXm+pnDS!WhcjkPu,),r\(`?[/U/jjLT"@m(U.!2ol(!XTM[/5L&8]\3;a )"GP3EaiB]>?Y?A@V0InBP)@@T>&S6q><D6Y^]G,-5Hgj'IYn.>&K>9dHg`1n$%@A8k26885`W#C34fN F&Fb.!!3<0$9W$[\BaF>s8KBG59h$V"ks"^!<WQ4.9_1ooY1RT[uk/k0``3th>eZ!!<No_4[i=WDjmoG d,4WKZAWHk0bt*=2aBi3B8O@err3AfRp7BX&./RC!W`>R!;um3"r8UG6We,__:%ZIs66S)6nohs".K:B !.k3&!4r5_!.k3&!.k4@!+QBY3)FCCR&dF2gYL8NG[!I%7S$0J;,pb2HB5/;\[AK@[Cs;\IoIp*"p=u/ '/EO3OeJk[ZcV4upUbZ>,:bW77o3;qB3eA&2CB=L!sArF*\gfERBOZmp%HIG0*)%Q!<MloirB>c-<5o@ dE]b5q5jn,g==9D@l+o!!TF)*!<N<)&N*mOXgu?k[^a&ne]3SL-5[:##9HH\WlE-![C#&am,8;;;Bc/C !WrH)!<MKd'*87="=IWPm.ftn[^EB'B0Rd\#kS*.%Q%IJY.2!KYh@g[^2Z:Q!S%12!"8l0!sB?4M:)(a dCH@mXI+EE=].p^7n?9J<*a*RH]4Dkr2gLO]UsIE/J8'c#SJ.;?@npMXXUEWR!)Cu4>ecK4@MnGCjqY$ ;_&+R!!**(.8YGl[CNfK\Y4@H0c^`+f`2<Y!!WuR-:;I(VY.%sY+Bf+(C^WQ!T3qt":c7o2cFUNUo12p XM2Z^SngS7#6ke_/4*m"T`(u$Y,$GA*u,4j!sA]-!Up*Q!"U&;DOn)D\u`ECM-`1e'*bK;VuS+H(GA9d H'+r*^Y%>p[YSKf6UjU=:/Fnj??1gn\[T&SXg5LO]KMBe3Y_o(!s/fW88=$NWNWM?g?nUhO&meZ0KMTs <aB<H<_,A**=rGV#8%n#8SsNh]\;rMmZ9gI!!!$#gAhH^&/ccYA;6lOXTbJH9HFZL!<iP^!%7mM!sU,J Gbqd`ah"pl_p7)5C,d.H$jR8$A<XsQ`kAM&nF#MOC,64o!WW8P!;um3$S"nnQD:^kYJJr\p<@nE#m(// !Lj(@!.k3&!4r5_!.k3&!.k4@!"TVr>)BK%e&%o=CgBk6;Gd?b9M8&X>@M?"VU>DBjN"L&SVqr;?:?+F #R:P=-<,oIn+>qTTTX%c:J+/?0/GRO6rdlGN,MHH((CQR!sfr+;/VT%_P`W09LLW`'F+O<o`4.T#6=l0 #7<A0^&J$3eG-'PTl4'r)&s=t!WiB'irCA.#S.Xs7;7mm_99coSXG^nAPkE)(D[c$1MNris8V/gSn1\[ *sW>i%L31@!WhKb'*]!d,sc@Aq>]QfVk8*-.1HXj"S_s4!X&]5,$:H0s8Vr6UN'F!&JYrd"9APT!07*g "V;V$5%Tu+s5UekW=tJDAP>]h9MA/X;H7+FKpo*P^pa3B&?("^3#*#8$3^n_2GS(NYe0k7*2SC':,=df 2E*ln<*s!9<_u.:)[Z]P#7)#6LtDY+$.Gr/@6>;5#R1Ca!!rW*&h-.SJ>BfeorA@rL0lkK#mCG5huF`$ )(e6_KW!)cile[/O)J,`2(BIN&1BnRJ>'QlrMp@)KjcqQ$jd%=!s/N)n,VeT"p+r5#rQ\8rr3;dZBT,o +:JS^"02F#!$qdp8p-uEcI8e[F(80E:f9tY8kVfP=C,W_RD8@nn'\_GU6:.R"(k=_&cDql(I3&HlhC/# W0hm58kMZ@1,CgO5u(g/KRR)e+:JM[!s05h7U_"J]rd`L;+E\t*=;lL!Wh$U#7i(E>C<'R^@\H0Me,$a #R(52!oO&1!X9)I*B.)OYeJ3#X.YoJMeuQ`,o.72'HpA9hZ*WOa/X_j6RrTZ&./UF!s-jN(]jgE#ol3I W7^7qbc$nT<_>\7*t&;V!WebjJcLB&JcNC_JcLB&JcLB&m/RLs-"FUD[t.F0*Y/AM!"f55!tH_MBSWP* gu$2MJQEinp]([.,uTlSh8H1F:ETr>!!E?.%gW40!!rcaPiKcYHW^dYn,VAH"V!"\J[aM3joj=m5S=+J !"92_:4Tk/g="!M9c!j,!"&rV7rtTYfpc%j#20%`),5CJ_VE=>(]j%)$3Chn=HCS[P"$,dd/]"'"qO7R T>0%=#+e[6"p+f+qu?s'#7h_+<fbB$joaV!2[oE\!XM)rrT47;IPqZ:q>^["!X9#E"nr!&$RJGo]&S`) #LibM!!3g7`qAHqhI[PR!"8lD7uO4]f]BJO/e8'[!!3QsVu>`ZhJ4(m!9O7e"WT^AVqSLJ&#K?&!"8lD 8X\SYQ!ucu'F+[:!"T)3!sfo/>^`-Sf&bGiODP"Q#l"B.";jCI]]@DDP]8/a!W)j"!<il>!qcO!)edpQ Z&<02"4.#L%SXD)joTZH!WE)N!"8rL5&?tDgt9faE$tnd!"/iF3FIugjg8qc&cp2Vq>^m,)+&VajNXrl E?#(G!.k3&!.k3_!.k3&!.k3&!:^$q":Q(i3EgQla85f8.`mfW/Li+n+<r6a00`64<a0?jUqt!kdcT#] Jlb5h('>!f1HnWFGb`@Err4CfKM*U6)\s&*,VM/G:Kh@23Zn_0!sJrL:Ni,Af_5@FiL*t)*u,.bp&O(P #88XL5>,7-Z2)-8aSu2=#JY^W(D.#Y!TO/'!<E61-p^Et=)=&2_q!oAi3%K)4Y.N\(,%pA9O)Y3aS5]6 $daW%+;ke""Tnf,!UB^u!<E681.4W/?\5-$kLdJ:DF>T=!!iiN1Hn<1DN`!<rs8V=HU&#D"9JVW!0.$e !<N<3/kJc9@tL2b'@FUjI:c55,9J'Q,:PH57TX\gUA_h<_>"!0pq2#H*"WPe#UWW'T`)VS`TGa`S9Ipf &eYlp)^dX@@UMhh.if?6"p>\m3^Q_VKY-I+aK0qo0FZV7#ljr,"U58f?\>BO^BhX&\<L`'1`HSU!#u%F %MpNhCk8=][CF!Erq5?jOBO"H()e2J>C2b9^C7s0_PDTd5pd!D!s/Mm!9aCn&1'8#9j`.Fi8rCqO^gNi WrT'u#m(DH*%Xm$KtQRIrts[lD*9Bt,p=EX.5!MN;cZq0Ga#kZ`m31!hn>7e8i.Rr"rAdO7pKqk_;+ne s6#q\0HhGR',VoD2*af8@UV\U&c_t:#RW\.MR^strr;u)E^(cd%gC\f#6=o3#Urr+U%H)'dCbre:cACr #2T>&!<E<C3_2h?@=kbucJJ$a^li+o1EmG@,s"Fb<G.3'jSo/en"aAG)\ied!s8T*f)YdM'`eR\2*ON0 Bo^$bqZ$TXSmX;s((156!.k3&!.k3_!.k3&!.k3&!:^&!$Qh?)CP/"TZ..UZ_LGB5%h]Wq*?ZUV/OElp Tt%VAYHG"2[C;B63YDi+"9K8p=F?=,Xg#7doChj\?mc'^$4ddk.Q9a\3&N?7(CUEL$5=O9=aQR?a6!!f aD`d5!!!$#p&O+Q#QZ;TNQKc$afP<?#dW7Efu/"u('+=7irCA+!WrQD8V+YAkhX%Z\&[(\_0\N^$4-tC ,#3KicHaP;[H-uNmg?=/.K]bR!s/K)!UB_!!WrQ.-Xih<q<u_>[BYm-5:@<RoDfF41gPs@\@AoMg"b#i EBP->eGtX1$ipD3";OUedJ*"T\ZHOCKO$8Y*ubq1)&sYD1I=lHG`\a"XUqYfhpfJe65fk*#o+XI@tUKR XXUKRKj$)P)A<Mk'cA)F6W\5<5p?L5!!**(.8YGl[CNfK\Y4@H0c^`+f`2<Y!!X#U-U_[+VY.%sY+p>> *u#+e!oO%u"VW.>94iaEX0&A&XhM0,E(DDj"9fMc1.l;:U&D)%Y,?kQ-Q<[+#6Y/3!Up*Q!"U&;DOn)D \u`ECM-`1e'*bK;VuS+H(GA9dH'+r*a5,@mQ=2cl&JQ'$*[2p]2H=a[[^`iTXKJ_4[6:C5:*C&P"Tf#[ 95T]ZX0AeNlLsr#H92H<#n@Ob,r%SN4>eiB*"W;T#8%n#8SsNh]\;rMmZ9gI!!!$#gAhH^&/ll\Aqm)Q XTbVR;^<(d!<rYa!&4KU!sAlfC8L.Yj34g9^sClqPZT.<$4$kM4)(2.ccj2,de*2%eU9Xl!s8T+!<N<' f)YaL'Fcs1Q+k8W]W]NEp@caO0EV:T!<JYiJcLB&JcNC_JcLB&JcLB&nGj.410TO=`7)StG[<uo/hA7e )ZCZj,V1i=@?8A,s8LZYWMZG_P]g%Y$4?b=0dftYbO+ob[@DY@76N1J)A*Sq'GW#Y;JK;t-5-am"TerN 2Gn@UYem<&AP>KI-PQda!qcQV!"/f/"U>AmEP)8NrmUYC#G>s:667'\$iU2-!TO/+"Uu1g1g5^LrU8:@ VOWs'BO"+]'+tur*B@r=rVuoT[%1i%3@"k;%LrjN"p4l,kl;A$%i?KSC7tA%lb03gF\aFq$O?n1!#>V= "pcDTT(W-`qS].K=Zd92'++jC!S7=4!"9#B)^mm]PgTNk]r7kCMJ>[,*ZZ1<*?ZUT2+qG-R&mp3rMpL/ H<i]K()%,]%jO,5E0[`CrMpp6ITeZH'b_/i(*4k[3BTZ!4t%6T!sJl7'M!u2rr3;RX+atE((1BP"5*Y\ !!!W[6XYPC]=@O7#cEDb3=lQ'!s7B\*!d`S@Ygnrd(6QcX/h%j9._M6(CV!18SO'[]>OTJ#H*8b4VeM8 #6"]*!Whcjli74k"U>>kE4u8N$0AIWCITET$3p[6!2olD"XQc`V7t7(Wf(If3%cg3*?#e6)]pIa5#6U0 nGiOQ_5jK1Tq*$O?p,53#mgqU6$0Eso^pG,OBkCA/1M_UrXp@h+>c]"@Rr0k%1*1?!Z!=V@>1SlXdXQ5 7lr1@$3L;1!S[SZ%jjMGI%Rs`oW&.QA3Ue9#QY#/huGA2#SJ((8p$s)o&IE[TU:XX@So3-&/5m!-s)Yg s8VZ,WeF57/-c[r$j[%?!WgdN(BOaH%O+Z(c2[h9^8I&s83\LH'F+dE!h'+@!.k3&!4r5_!.k3&!.k4< !!rcSA%^Qe<[A%So`,F*+$O(f[FjNqf[$ii$i'c1!=UGXQ.=QoL0c23kl;"m1R-q>UO-,Q!Up*I!!Nib <.h^;q;qh5PYE)!ec6*`03Nk,d,Na!\"l"kq#Ca1/5gktf@cm.1_/4>#o?-RRD7P#>SmM0!"&c?03F:W h3(5A!RUn(!!Ws)I\4C-i<"?T"8)Ws!X^Ml])Caoj./jZ!VcWr$:M/tjoa7I*Wl!7!<N;r!!irY97=D3 N%tXf!;ZZs'3<-GjoXCT)q=or$T3@Zf\GEIT1B_"p](@.9<A*S"5e&?!TsIF!!i`J5&7(MZptY(!2KT$ !>\7pijWh`&-he-$N^ts<-Y.\jknhAa9#rm!Vl^'#96-W^Z32"CIeg6kl:u.B\Ch=Me*b.ci=+W9Xs`W !dc'krW(RN%07JCE1=`%h9Wg:<>bi6!"&fL6YVt1jg]S)+3OZ]!"/iD2IMclj2.1!8-b@ZJcLB&JcNC_ JcLB&JcLB&nGigt$l:'I>'61Qrr4ME]QumX%h&dL#n.=X+Z)MY<+0^&Y-YUL^s]cZCJQf,!t-2+5#>a6 Ur_m$s!c0H:FRA$$j?qJ'cSMV6;L!%)@$9F"UH&CG*p+upAb0OR9_Hf'ak'CrW*!#qZHQp!!N9'rrW3$ oDfI9-ojIa>&U";ZaR<O\@]Jqo`"jqb)94J*YSh\r;ciuliSL7!WrT2#T5Zs9iYk]UVY%'k4[Z5I8E6g /0Z]9:JOhsI&4jMrr3>`S7=Q3,8h%#"pFo+l2qP11dsr4@"Y<&kLdJ:DF>T=!!iiN1Hn<1DN`!<rs8V= HU&&F"9JVW!0.$e!<N<3/kJc9@tL2c):?!XB21B-#mCP>#n@^n.6_-eOJT(h]><t8s#JYl<$N(h%1+:[ G`T5@]"H#De@_;o:bN:b#6k;@*A0ZE1b'Xc&.8XE(+_L5;J(TokhsO`JQFN6r;Zm"!<VWjrrW0#q#D!, !!36,#V9/.T!P],YI(jO]`#SS^t-H%JRC_f#m150!<E*"!!;Zm!!N3%#m(,2&0NSj??hS0^CTu8oAdr] B/Ltc0fMX:JXubS%)CT@Z^#Z84X1dT$3U5-!!;fqr<!$&rWE0%rrM`l%hL$G5YYU1Wo3!e[ZP&_(97G6 !!r]5'-&Q!CPBFhrr3hbPZK+A%1<CG$4[Xb/3c^$>\\_fZF7?Y51[]KHWiWZ$O.@r3_*FmO29WJs8V>V @l,AI&-iIM',_uH4@r4(+V+PS"UGGtBo9FGli-q`ZuSAU)%QlNr;cm"nH/aorW<3'!<Mrq%flb:#UNGr S@,],YHbXK^&5VKfZ:+J@mgJJ$j-P3!W2ou!<VTi1]d^\"pb\i85<#hHBYqZdGaQg^5ubm4>A315"n^H >]5b=h>RBRr3^fA1FO7X%1*4@!Wqop!!N6&!WiB'n,Nmu!<N?6.7$O">B,tGkl1SedYgpI((LQNRfJ$? JcLB&])[E_JcLB&JcP<@@1+/::ht]NX0L@0cEV+F'`e@<"UPMG&JZ`bAVQhZ\A#;SYcb+#GY&ed$3UDE 1KJa_TrkK+g@P%2Y?iLV!WrK*$54I1.OQPh*>/\^":>ha0j/jkYK,btp;h2+!<<-!!WN6"!rrK'"7lTr !WiDp!$qXk;1c<r_n<(PYH>%5YHG"5fB;5GLeJom!W`?'!!!$#!WiH,o)nsp.0BYR!<WN6&1_+Vh=]sT []d-Ze`Of#9-"fc(`G8=Lq;!\`Ncf*p%J"ab^2Vj%giLB!sAK'!<WJr"8W-2-Xrn<q<uY<[BYg)4t%3Q oDfF41gPs@\@AoMg"b#iEBP->eGtX1$ipD3";OUedJ*"T\ZT&/G=WP]$O6b:"U>>F*%3^;Aq?GMXK&D* f'2>SRo1C2!=0D`4_';JZ*:F7Yc3Ca1EdJA"U,)8$5FpN;+iY_"TSQ(!!OfJIAsWb\?*67HVcF;%Kc\2 rW*!#nH8anrr`9&rrMlp#ljr0&/c`X@=k'LW<93'WiZ-#&$E$oA2ttQ$N^>0!!!$$!rW3$"RQ9s":?/+ 8n*+/V#7>*]WR<48hqM((ah:5>BZ%%rN-U5X,^p\0ddqT%LE7=!<N?$!rrK!"8N&u!WW8n!"U&;DOn)D \u`ECM-`1e'*bK;VuS+H(GA9dH'+r*bM1L`JP%*i!WiK0#n.@Y+$3\OR]!L)Za-g=XVn3u>:L?r"p,,[ 88O-OWiiPKlh:&%HTDE7rW4AM%iHZD-mp;a(^pTL#8%n#8SsNh]\;rMmZ9gI!!!$#!!*-'"RuQo"T8E( !WiDt!"T5D(a;(KI[R7;WiN5$XKMK'"gF,'4t%6K$NpA/rW)ou!!;ZmrWN6'rW4YT#n@eEK#%0Mf=nGp ^X1itR:%W`(`4,:9m3G_d*02*bjY8tm$^s#&.8^F!pB^f!WiDl!#,J:"9fT/FKF$Abdjq.p@Rm^@4))B !.k3&!.k3_!.k3&!.k3&!:^%<&2IFGYf,#-TlF7!(`aG)#6k>:#7M:e-:;aKiVrlO_PO-.WMb>P1(=-h 1'].)M9+rOkI-n,:II>n,8L[o"pG,@,<&7\/fbH/"U"l4*]?l5PH_p%P\!NV1+*b?rW30%!<N?#"9&Gs "98Q'!ri;r!$_LG"U>>fA#0#%qqnuhXJi"pW2ZeiG[!ft-Q`j&!s/Q)!<N0$rWD`pqu\;J!soel2G\Om jS[fCVl6,OJS&4b4!,Xn.kshL\,ZL)e$,Ed90b08)Bg7E'b(BH!WiH*!r`;n"TAK:#S@t"5AHkcs67.n T63s[%LWOFp])'2"9o,U=J#3cs8'[/EEPC9'b^oW!<LdPNrTRl&0!#]AX(UBj1VCh8VUV2%LEFH#71_H &0!5i?$MR6]t(GMWMt;K7kPVq%gNUh2c+CTYe[-7WN)bE>rif:%L3+B%29a*-S@;2*tee\"U>>J7u5dr rsR;VKjd(Z$O?q=!!3'#rWD`pr<!*&!Whup&HDeB-9bOTQ)_0mZ*L[;X/W,tWsGVU@QtY>$O-\2!!30& !rN/l":bM9!WrQ/"qiXmJucZ4b5A:NMJZ3G0J4ao-p_0fS?TlHrMpI,Mebs7*Yo4i"9JZ,!<N?#"8E#s "TJT(!ri;q!!WK.#738,^&J$<jg(+d7N`*H#6V",VuRA4,t`<V^<Y3-KORLu*?,Uur<<f>',i)O?'35- s8:NIV5L;m5`]VI)@Ho[#oGsLYibNLc_lk/83\OK)\32["U,8R01/2c,8:Fh"9S]@/4O'%VS0+#H;R0o .NJiu!<N9%!Wr<&o)o*s"9\W)rrMlp%h0aE<,n"u[]6L9ZEL=.W;N\"M.K$n&./FA"8i-!!WE0""7lZm "#'c[&g/krAs(%3lboj'TU:OU@ol)J+!W3f5AQnMs8V,lWf9tG2]Wq`*Z,Fp"9JZ&"7cTp"9&?%!Ug") ":5\\116[?s8UucVL_`;1)CZ8#6Y,0RK.p>JcLB&])[E_JcLB&JcP0<#m;Pa]\/94'*84,!"9&O3a\&i hr3VVggV&p!"/f8-rcDZfs-9:-3`W6#m<&Kj2Rj@=UbE$!8mhj#U2WNR)IG+gu%/PjQ5-mAMXi!f)Q4" ;hh-egZ7&.\"Z(uq>^m*)aS.t\_>i@G=s1^!s.0W#oH9VS&*n'>T!S1!"&c?03F:Wh3(5A!RUn(!!Ws) I\4C-hZ7I0nc0(/4+ti/gY_%nAha\pq#Ca.6*0&*jQ5$.+9Ld-#R_qOICeHt1'c;/q>^j14IO76dFR%, hr=Us"5e;L"4mMT"X@3Or8n*T9,Rj-!!<?L?+'Xn"5eVa#j23M!!i`J5&7(MZptY(!2KT#!>\7piiZK1 "nM^$!YR(\IC%bfioK2&Ot6_2!"/rL6?p3(_O,(.#m'8j#TII1d]n^A)$A4c$3rDF`llc\g"bHDr8n'8 /d;4SfDl?h5'NF)e)]?2]W>6X!r;m*%l.::WR'\AO'FOF!R1WA!"0&a=b*U%iNmSm*<DB)JcLB&JcNC_ JcLB&JcLB&nGigt$l:'I>'61Rrr6@"\TpCM$jm4C#7(\G(*tb#9Nkk<LQ\F>^tQ]#H<NBO":?)!3)!h, UW)$\s8UuXJ6PN#+V51t&ec30/N,7)&d8:<"UH&CG*p+upAb0OR9_Hf'ak'D!WrQ0#71b:%/12/$NgY= "9J,p&Iom<4%rt%OdM;oPb"h\]#<Y.rs./NE(2Z.&H_n2"9J]1$4HA4.16Cc"UGSQ*AC/f<b[,HXMDg# f]M81TRq<%@U!8S@pEG_LonVOq>^I+o"1'%>"CS"*"rY\!X&`8$h4W=$4-qB)*(>^;e:]^d-'#nR;PD7 oDf.&*A]lL=)O2?rr39'^jJEY"pG&/f`7$4$NU;1%5(4H;e(EK^_tM/O_%3D*X;fO"U>>E()netAp8c_ R]XEhrr5"7Q!#LQ'FkEk:Mk6>TrtoBjPeP$Qu>VI+;PIm$l'p:/0l8Q&.AdH";WOL6;hEK]BJ1oXFXG, %/g//!<WN4$h4W1$4-n?"9S]+q>_*-!!*0*#9uiWNglE$PEhc>\bs2UhqH)OIoeE?$3gS5!<N?*"pYD@ oF)6<$4@4K#R1G@,X#%5EeBq\^CTE&r:SsZPA=H3@:*\rNMZQf'A(gV\"SXs=[F_[$3LG7"9o):$MY&. $jR.I$O[7F"9J,p%hL$G5YYU1Wo3!e[ZP&_(97G6!$q[Q'-&Q!CPBFhs8W)HO]<P6$O?q?#71bN+"]QB <aT<fN16u_7G?"jLh0%*$j@:k2*tMcNks00r;ZQ-OCh6L-l*C,&el-*.5Eb-(CC-D"UGGtBo9FGli-q` ZuSAU)%QlO!<N?,#7(Y-$jI%H$OR(@!r)a+!WrQ0*_'k$S!]J'Oe&A[r4`EmgW-LN>6Qr&$3gV6r;Zs$ !sT&>nI-cP#mUY=$kjL(5u^lnFbua&_opQeo?=@tH#R>$>\7VU?#"n]^=)NMrsmAKHX]c7/KkuD#mCP> $M4`3$OR7L#mLP7n,O:+"U58M4&T-bC4`4tpAY'^Y]W;P%giI@RfJ$?JcLB&])[E_JcLB&JcP<@BF>nA :ht]NX0UC/afB#3'EJ7;!sJo:$P+4387-M'Z-pe0[^!!6J5[^1%L)qI0McVCR]!6nbN&6f^Nr<i'b1NR #S7dm*?#h6&e,'J":>ha0j/jkYK,btp;h2+!<<*#!<NB-#7:85p':j-"pG,3!Whro-ik8N@uHV<Q^45E \\5M[Z*1CSiTAsd?nVln"Te`+!<N<*"U>>@#mp2/.0ftX!XB>\0MHP_gZHr"['$aJa48A%E_].s84[$3 RDI7n_QL2gl1XiVi14XO1*@/3r<!6,"U>>@#mp/.&dJUF-t8t;pZfu1[BY^%4=1gLoDfF41gPs@\@AoM g"b#iEBG'=eGtX1$ipD3";OUedJ*"T\ZS5kG=E>W#R(;5"9eu;&fW/T;J_&STr4uqd-^2`Wa-qQ!!NlN 2.2?T]sk>OY-FRNA4na&&e#*P"q;J!3&;]h"T8??"Y!8rWO9:HXLY$O:b`t#!rr?'!X&Z2#RUkEnd#F& !s/K)!<N#s&HDe7$ksa=:MY`LQ(">=VQ$ZqXV%_JY*!Nl///-e!<<*$!sJo9mg'@,"U,,;$Pb6cA:'<* W;Nb.['lrtF^S*97oWf/G)2QbrN-[7Y+^\i?r9<N.2r]u!<WH/$2"T$#R(D9!sA]-oDfCA6uJR$\[nlP XGL7D,819^!2olD";`^]@!Rm2Xi];B^3iEn"T\Z,":#2?%2:6T<c!Pfa3MT5Z`ZBnO^g9i&I8IF,XZ'n PG>4__:n>Nhih.j)%d5\"q2.`*?#e5(D$lU!='2U,Y;j6X1[0Wp?n#1%fcV/!<N?,#4Mm##7(P<rWE3& p](g.$PXU795&p@Q^XM?Vl?]oXTcGAPB'DO!Ytn?rW*?+!<N<)"9f&<#mp/.1Bdj^!t?1t4(XPnm+TOj Y-GOScJYdS>Y7OX8PsAaYL(P5[B7:&o_.mcIoA?U('k$H#42[""pG)3!s7rl('FjO'.He,Yg^q;ZEN*J i6?gD*WZ6AR/hg=JcLB&])[E_JcLB&JcP<@?P"trM6OqI_OtjN4W5=X%L*(?"9]#?'H/W$G+cXsi8M)F Vl$>@=u$Ko$4$k^:klpNnEIHUOD%B`6TZk@(D$lU$lLBJ/0GW6"p>#0#Tbm$DNh<AVj(ad6o$,(#6"Z0 !!36+#7(VA#lY/)#mU_?"9S]-!s//s-NXDS#UW5jZ+7?LX0&e=Yc+FrWM>Ab>>IF9)[HTL!s&H*"9o&8 #Q4r&$3(;1#:Kc["qrOV@Y(2elIrtRVQ-;XP_!df?;=9p>$c?@`V]Mg_5s>i?:mZk5tF^D2^8t7"9\l4 "pYD3#knWA#RCY?%Mg-76>W:is5:DaT64!]%h&^Hp])'2"9o,U=J#3cs8'[/EEPC9'b^oW!<LdPNrTRl &0!#]AX(UBj1VCh8VLJ.$O6k="9o,<$POX85>uQ`YK4f$ZD`FX8iRn2&I/de0LT<)X2V*:V5U8KEEPUd -l30t%hKBk*$?IJ'at6J"U55H7u5drrsmMYKjd(Z$O?q=!<WH.#6"l,#knZ)#R(G;"9S]+pAbd*!"9l% 7pL.mQ_CLj`Qc3,WVrk'VhAVN,odR*"TAE-!!39,#7(VA#kSE6#R(>5"q)"[-q\EI^WY'Br2U?pI:cAS ;c-7iCP&(^^W!b^Wt_IrHt?)<0HLZ0"p=u0"9f#9#m^h3$2k/8#R(>5!WrN*p](L""U>>kE4u8N$0AIW CITET$3p[6!2olD"XQc`V7t7(WeOtS,Tdp;#mLP9":#>J)'qX_O1NHfjLhXoV5chABg`jJ$4-kO4`@F[ n+Y;0R!Me)76WOR)A3D]#o"L60dR\H#6b22!Z!=V@>1SlXdXQ57lr1@$3L;1!<E9*#Q4r##m:M<"Tnl+ !r)a*$QLcd=`T=bSuK3:c,$peWs+;n8gt_o!=Au/!<iH(!X&Z2rWiE.pBgg)rWb@c"puM7=*0Y3eE=r[ Vl?J]Q]#m#@oQ)u<aBHtZfqGSc*OF;Db`_k78$?>.iAWr"9f#9#m^h/#m(A:"T8E&!Up(*"qr7;9mNf* roqS0VKlH1'c.Ji"9S]+RK.p>JcLB&])[E_JcLB&JcP0<#QuG`]\&*.'*@_)$Nh)#A>.&lgYppu)>F1> #9ZZudbVd9KMEEhl2V+n1R-q>UO-,Q!Up*H!##e_2G\(BV8(F2h;RGO]8^2T%KY5_%Lk@>VnUR8jk\A) [qIT2quI30+%:"+XifGU^n#O@"!83]!T!e_*)h<\`8/UA)$0.*$3Chn=HCS[P"$,dd/]"'"qO7RT>0%9 !G<8?!"8lA4E?Uof&X8`6QH7(!"/rgRFKsJj4oVa)[,F+#R_qOICeHt1'c;/q>^j''L?>RLR+sTdbXla "6#8'&D-sc#pr>r_>NF+\TBtR&IAL>!!<K>,Y`s4rT4:BUKJrP!pK^I!!i`J5&7(MZptY(!2KT$!>\7p iiQB."Te2p#ltAZ:kup5f\bclPVE@;!"8rB3H)Fgc*<CL,Ra_=!!jNWg![-`AJkTr!!s2u@WR3fW4^L4 r8n0O6kfY%!8.>_"=.3A[)q%_i7?)cJk$gar;dH2'/a'IU;,=Ac)QA'-Q*9mcN*hB$5ZBeU;GU@RnOV" P5p17JcLB&])[E_JcLB&JcP<@CBP%^+ZW_KQc]7,s7EgE57Ir*"Tni1#6t\Q*[a!F=B9*bO0$1Tbcck5 66QI<(+(h/@<\B^cJ@mfn^+Y/FAt7@)&*Vi%i$!*)\WS]!<WK2)c(XE_:\J]s5BAO0-:o:!W`B,"pk\K ')iX?'`\sI'*AaQ"p4Ds*"!H,1.5,VIYNDtH&@od\&-SWrVtidNFkg=)$9a:!s8c:&cNL9'e'b+%13Xb ,r%_d?tG(STsVVQa3<&lc+C!NS<AbdK6_H`MOq5mcf4Tr&,=PYSr7Si5;+,k!s8c:&cNL9'b_2k%1F=C :JFl+LoShbf=[Mh6m)%$#RDG,5"A[lP/[G##l_Ve64aA*!s.'TNW9Ff!Wif`8PN,nJt'OndC50G8MV7i !s8Z/"pk_M)_suhB6T-)_;P=m3T6E5/fb]:#9$*B@tT`2[)(V]in:`'D+Zc9)%6ob'H.l(&If'P"TefB /36*qAq[e[i5i!N="k']!!<9-$P<7NoG%TD%h/jM"Tnf%!"f22!<N?,))bN8J:W9%K8cA+rP'&^kORih UMiI@&ISdE!<WK0#n.=WoG%lN'GD,k%1<FT2d('FL6S\8^CSc^r;?*7\!rG;LOb#:S?Mn+'Yr,Mf$MLM XIFB00+nKo#R:YE%heXPr=oPO'GD,k$O-\)!"TVe2aC)EGcK]`d^G9J4Vk'uVuS+F#nn:0:MYZsnGiOe d#V*I$OI"?!sAf5$5"1&01f2G@!.<u]1(W-\sRJ5/e/$t+>>u]E/q`TfBDr-h7fV7@6u@]'bUrb&f;Z3 ((LKJ!X/i:4DB\_cKkK0rj6]1,8h!q!<WH/#R_(RoG%TF'GD,l$jQq1!"T)3!sKDq;Jpu9Jq8H1R]lY( "m#7>g8]9!8L"iV"p4`'!s/Z6&H*=8'fcp=%LNU[+Y>]M?"&;BRBF3=`Q?NfeAJMeSs>=nLja>eKU&[S aP-%YrnkJdP'g\/2C][W#n.:UoG%TF'GD,l$O-_&!#PbA$P4UV@:s_9QEe<on(bpF?T&N&"Tndp!.k3& !.k3_!.k3&!.k3&!:^&($Qh?)CP/"TZ.7=AV-u1n!<N<)"9er5#S7t*2cG%#h<38'['$Kd>q[94#QbVi 8S<O:V6$r7bhVm:Qto/H+qb.f$Om[[%h9$W#6P&2$5=O9=aQR?a6!!faD`d5!!!$#!sT&A&J#BM&GH_@ %h&dO#6Y,1o`-B@'.cU^CiOWHN2!u7`OrU_Y.Dp6hl1W`)A*;[!W`?(!sT#>&JGcho+2cJ#6Y)8+?388 MQG=N^pgSOZ*h0Zbc[4[HN&'rK9N1K`k]!aYeJNFo+L5sP''tl*s`#P"9\o7$kX-c&b?PI%1<II.:Ak5 p#F0$[B>Ku3[GIGoDfF41gPs@\@AoMg"b#iEBG$<eGtX1$ipD3";OUedJ*"T\ZQ.2F[HiO#6k)/=9Ja2 $4mpq3E0gIOe8SUbO4oh\n3Go!!EWA/mXO]cbm8tY-tL-P&sbe+W(ar!X9&L*uu"$!W`<%!<joKIAsWb \?*67HVcF;%Kc_5!WrQ1$P3sa&J=XH#7UqB!s/K)!Vud.!!!0/&/Q]V;JC?*M2mjoVl]fu#L1]9Y]W>U "8r6)!X/l?%hK6B&.]6Z$4."J&/?BS?[S$,UT+0n&$idXYFg`'Fa&:cL5q[qX8K(4Z*'mhO+hdk8hCb[ !<WT:%hK6F&H*.F%L`[N#R(>4oDfCA6uJR$\[nlPXGL7D,819^!2olD";`^]@!Rm2Xio8<\T^C]"9AQ* !sAc3#RhOr1.5oC`pML$\?86*R;P57'ak*L+[0.UN1HuO[`6q\jK!W*3[bjR#R_(P&.f?^%1!+>!='2U ,Y;j6X1[0Wp?n#1%fcS1!<NB/$kNp[o+2-;%1<IJ"p4r%!"T5=%i-BL:hFp#LQ.XkVQ9Ws"j,65Z@#7F +U.cE$3C82"UGJG'+tlhoFNtk#R(;4(GA6cI\"F)`4E:XYHt^Qd(#X#H$OXXH]4Q(aMYTkXgZ@,m.8Dm J7qP*&-`CJ%1a!\o+2-:$jm:G"p>"s!#GeK(aM1OKs/Y:\ZE!Y`N+ku1DKoj!!/MgJcLB&JcNC_JcLB& JcLB&nGj(210TO=`7)SsE`kIB*Z#:`">p>h$k=:79k]<W^['[jXeqtE=YpNp#mUSU9S't<n*ml`RZ2Gp >#7UC-5m<q#nIdl(_I/\rW<`6#Tbm$DNh<AVj(ad6o$,(#6"Z-!!<?1$kE7IrXef8#7UtE"Tnl0!VcXE !WrT1)`:Q=Ko;+YSu]NCYc=S!VjiEZAlM#@$jm1A!<NE0#n%.N%1WpB&1nD&%LigR$O\%@B9p-Ph;l#G Vl$JiSXPmrJphccItNQDYKH+Z_R$8=R>,BU&S,WtG$@*O#R(G>$4@7O%1WpB&/Pie%Lj*l,:l<)U%S95 [&0I=;(N7f#mC#'('4UC#U3BBp&G'g`1q<T4:r;A$NpJ2f)Uj3$j@1]-pD4,dJr7?W2E4>>qlWi"Tni0 "U5,<&fMrO;KS;9_8a-dN*&b;-6X$.$lUNU<I^gg]<8*0Vj<*^B3%AK'+YT_%1Wp^'G1`Y!s/T0#S]db fDbd`e#S124;J;1"p4o0#7(\H%1WjYp(.N@%h9$U#6Y)/!VcX,!!!9@,W%qkC3bT&Wkm'/_6<g<&ZC=p 9J.V2%g<"9!<<3*#n%7B&+gDD%LNFE#S\C45\,\Sd*]tEr2U@$NI>ecFE`"\OJ9,"`ko%[WtD>'Ndu.S 6S&o\$3gV8"UPPHrX\c8r=B&@$3pb6!rrDt!!WK.#738,^&J$<jg(+d7N`*H#6V",VuRA4,t`<V^<Y3- KOdUu*uY^rqudN8$4[h&6XP2,[+FQaZ_scjNFtTs$O[1C&isj+gZnC[WgoB)ARJG.3\)9b#R:eP)B0>! #Qt22!Wj,g7U_"J]rd`L;+E\t*=;lL!W`?*#RV"P%eC56%LWOGr<)fp%gWmp1."rQG_VQa^<k9GZi$j- MJH$D-QEX."9JW*!!39-#R_(L%Ls$C&-NLS%LijG$T/SP=+d`qe`OTLW26MlTUV=)Jq&)iI"@$6VSD'E agnOSS<A"t@:sM&AOe3]"pbMC%M'$[oFM6;$4$e;!s/Pn!#>k^1e_YH\EM\h\#Z?Q=ZI*-%LE4=!LWq> !.k3&!4r5_!.k3&!.k4<!!i]RA%^HO5S4(e!"'?%FeuathV;cb!r2g)!uXLYd,<?fXaiPR#3u6q">c;& `hRl`%0>quh>e/k%N?ofCm_fXe_T9DcaB3W-3i0(+UKMuS&Wk0iT9"PeB=A$81Q&9-R_#[J=sBnfAPW7 \tk/c?VWU+"lK@f![1j+WlX#>>T!S1!"&c?03F:Wh3(5A!RUn(!!Ws)I\4C-hZ7:'nGipt&2."=_rSOg =Y^3W!"B#^Ku)'fiSV(m;DA[`li7;!,tiZtj,>_ue,]:E#ltP\1e1blQb;#Mjosb@=!\+QgAhB^/RjF: der5<cDGhc76E7L,r%PT@#)#<rT4@F_iS=l+:A8:!9O7e"WT^AVqSLJ&#K?&!!iT@8X\S==s4%<!!`cZ @%4OFg>i=%1^EgV%06kkB=-dRa0h[<-4Bq@!!jNWg![-`AJkTr!!rZ8+Yc>dEKdl^r8n0d?7H9_!87E" !uOCT^WkBfjl>1Lc`r"$2('e#-SJ27Q*A0Rgud;.Xd3a%5q<Jm!;lg("=e>p_p[DuLc>j,!.k3&!.k3_ !.k3&!.k3&!:^%&":Q(i3EgQlao;>?n[<O$$3gY9rW6%$!sJo;%j*o-9N5PUT>K[=\sRD,,R"Dd+Y?/k GFu^ia3<K=o]FQ!Gu-%8(_$ZQ#7:hG"p=r-!sJrL:Ni,Af_5@FiL*t)*u,.b!X&]6%MBQtrZLqX#9P!- *#B+k!qZI4"qMLn0g\cIDK9N(I#4?"_8OIDkNC'kM.8go"8r3%"Ubq^n/s/!(D@8p-T41_>A8_gYdV0Y _8=.0aiqlE^U^\PVk0HJTrYT5_8OF@edpZf`OiOKH<3Eb(^1'N&f^<_'-%f&%jXSC:KhdrXO-.^]U<Y* +7oO=#TY]b7osSk`W#lCrkNqL&-rFA!SII5!"/f/!Y$bR9iGPRS%o9V[>\Nc0cL;q!D<Ir!sJl:(ah74 A9sKUgACpMkFc?B+rLpr'gGc%C4_VO^r+UVim+imDGrSA%giXO$4-qA"Tni.!<a/h3^Q_VKY-I+aK0qo 0F[m[!s8i@)"8XQ*#K>"$O6e9q>_*-!!**&!tcb;:0_=FD0(5iWVsR4_;G7l&'Bi2.iK!+!WiK/#n7L` )tY6`*Zc=A(_mVl*D17,SYE<ur4`c\c._CFgWI%0WhuD]W3Nu5^D+K!c-t;6o^CnHG!d/T$OR4M&f2M^ +T3Df*Zc=A(D$lToDfC5,r\(`?[/U/jjLT"@m(U.!2ol5!XTM[/5L&8]^Yt$qp(-r*!c`O!s&K&!t,>@ %M^`i9i,&<P.3s@hSl@B="t6h%N?iW=)O#4_oBmIqtKI5\;O`T,o[I'"U55?$O?n;!!3<0$9W$[\BaF> s8KBG59h$V"T\]0#n.@[)Y>-W+!)FB)A3D]p](g*!<WE5+Z2ksA8,n#Iu^<%^BN<is8UQ3"^E`#&dea> !!<9.%i=^X3?8qM&/$*>4@E4\FePnC\A#bp_o0L>bJh<0Z`^:'SXZ4KZamig`lurdf?M(BVhekW3[b^O &Jc>X+9ru0*?5n-$3]hu(]t$T(bo$-I@d@C\\[F\_4c!H.L?1Y!<JYiJcLB&JcNC_JcLB&JcLB&nGj(- +#m)4K:&^EeBu+'?8)uj!WN6#"&B%'$P*t*@\)BLld!#CZB8f_,o-gh&1KtQGDr8tYHkRIbKmVaGZHdG $OR.D"pG/5"Tnl0!X&iE*\gfERBOZmp%HIG0*)%Q!<E9-%Mo!ZrYG5D#8Ij_%LWOF!qZI@$lUTY7Sm2p GF#buf#G8*Y->7Db-6P%/0,9,!W`?*":#AM)B9Y5)"n^q(Dd_l"p#5e;KRto[)'/UYcb+3Yd1UE['$0u Tq@sOW33Y:Y-"h0ZF7Kd'@+CrTRpK+$jHk<":#AM)&sP4)"n^[(Ddbr$je=jT',_$`O*%UMd\Rj'*n.0 &.UO&M6=@u['86=d_9]`(BN%dNrTRh!WrQ?9Sq0km*WAH#,$')'++sHquTn$"9f#@,<A\9IZpS1a6<3g aDW^6!<E?2-<cV^jjCiLXfeq8Z'fo?2^K1F!WiH/$4-n=!WW6%!!OfJIAsWb\?*67HVcF;%Kc_5!sAf9 &fD].)&W&_#o=Bl%L3(;!W`>u!"f22"9o5F)^m^==_2T$MO1!8rN-C/cLLMqW*h+X!<*!%!s];N)#b?C ((Luh%M'6k*\^H3OJSnVXS]+0Z*UpHWhlD^TqJ'TVQ?lsXUqY?ZEM9h^oqrO*s;WK$PXHW(\edD('YE` %LWOE"7uR(*(4\8ZFRQJ\?(Nn3?o1AWrT'u&-Ne&7ppV)V6.khaK]bM*<c?B&HW"9!sAc5%20^VKuEcW ftX^5[\7t@/fP9(#Tc!*DhXXZXg,7D^Xp8sL1<Ou'+5*O#5n]G"9\f.!='2U,Y;j6X1[0Wp?n#1%fcS1 !<NH5&fLZco+hND&J#6T"U"N"%g*"C%iHcR7os2>H\do[VYmP"a6rNfZY0q)"onZ*!<E6("9o5G(EFD3 )"n_,(Dder#6P,R6tV4DXhM6NZ*1:4YHbC=[]l^+TV%gJV6$u1Z)k(0Z*_*ZbJU`cODI<(#Rh7Z(`4&* o+hND&J#6T"9\,n'aGL#2c"=OXgPF:Xfo:-Gu6F?$j$Hs!.k3&!.k3_!.k3&!.k3&!:^%"&2IFGYf,#- TlXC!*?>n(rW>(\!WrQ/"qM\)4B6a(jo=;NVl"oF1(4Nr"9TZ;I_=M+o":orSXPLY@o>TM,SL=c"pkVC "p>&-!YGG=*]?l5PH_p%P\!NV1+*b?rW3?*":,DJ'c%T&rYP;F#8IaV#6b22!r)aA!WiH-&gB2)<ap#o MkIQ5_m65<WM?)TM/6!B&.JpK!WrZ8%h\dS!YlFcpD5Cs'bh;n&eGU'=HV#2rqXa7V5L;nW268^TU_I? SY)aVXgbpOZ)t%+W1f`LQ4f.:Q(3(u/IMmo$kO!a',2/r(AAU]()7Ms)BpUa8p$cso$">8T6=*a&Io-N p])'2"9o,U=J#3cs8'[/EEPC9'b^rX!WgmQNrTRl&0!#]AX(UBj1VCh4+^`l#Qt84!s/N+!sAc7%2h$( IA=3h`N#)09L:?X(C1?`,;;]1T@_`/XJMnnTU:^\=?RZ>&.8^J"o\`6!sA]-!sT#F7u5drrtNq_Kjd(Z $O?q=!X/i>&eblk'GVDX(C(]j'GCua"p=i*q#D!,!!WrN,;))M=)*5S[)p\@[f*6>WJk=e6S9Ss"T\Z+ !!<H6&/>uO(Cq2k$O7+^0LAuoTtSCWZ`3l'&#Q(kPEV?%T;8Hn^:q+]W;N\.VPBTGE)JG(%Li^I"UGJJ 'c-KZr>,\Q&.8^H!s8W"!!WK.#738,^&J$<jg(+d7N`*H#6V",VuRA4,t`<V^<Y3-Kk*_"+<(jqrW<`6 !s8Z0$5Y$I8SaR2s7+.2W$7455T:+<#6YPsBVO#>n^ab:Ssu*kC04"g//ej!#6tPB#Q=fG!WiB((+_p` Kr2PcRX.h$4";6X!s&H(!X/rC'c-?V";VRY#R:81p](g.%2^9A3_3:bI[74YcHa*#Ws+Yu=%=ni&/>EO !W`9&"UGPL&eYlm'c-N[3u/PF'+toi&/dl\\GQ4(j/JoQW2ckqUnOKRS!fb<V5LE']"#)LX/`4rSsl", O-5la@QYG5$P!da(@i7H'bC`X"Tec.n,O.3-q7p0X2W\sY,SFtI9JN@%1*1?QN2U;JcLB&])[E_JcLB& JcP0<#QuG`]\&!(&HhM&$3D5FJ>'j6ghn59q#Cj)&NbBcjPS_A]Q?F[$1%Wu">c;&`hRl`%0>qug].of #TH!HT=W1tiT&eIca-:Z!Sm`#!=U2EID=UrioK7_iSWJ?_5rufPa.N0\B!(Ngu.8ShV$8r"hV%5N\^mu !"&fTAs9LDhTK.A!U]pp!YR.gO3-4@7MGmN!/U[[%nM/A^Y%EEA/+J4$4&%eY3!TkDFt9;q>_!+,]9Qq dbj*=a0V%"'ERS$#R_qOICeHt1'c;/pAbF#$l^llEMCn[joseXIS(dig].N[+_\F.e_U/c&)GdS[Aosj P*DQ7YI_m.hYlRBjP7tjV.2+e!UKgK!!i`J5&7(MZptY(!2KT#!>\7pii?0'"n)Eq%R"lu[F4(:RQ(TJ !"B/^?a&VMgt'f3;CE(Yli7;1B\Ch=Me*b.bl@tN$5kB`CRiZIjorYV:aQJKgAiW*(HH-*g>:fKjlPO\ hUolTTp:k-Q(5+qcI^e,io]1SeB>Y9WL-Kpd/a(E$5#^qf@o-Ah0(1LOoU(6JcLB&])[E_JcLB&JcP<@ '*J^[+ZW_KQc]7,s7!C:3<o]i!r;mL!WicZ5Xe:HEgX`1iQ%sG:alPP&/liZ?$2::\%95kn,NFdc_#)A 1aNqG"pG,.!?M4@!<WK2)c(XE_:\J]s5BAO0-:o:!WrW8&/QE80E*g&1^>fm0easp%gDq5pAc0:#n7Rj .lTmt@V&_MDi(@$]">\nle]X[HVc*or;d$,'-Jn`nMCV+-Qj9N2+'o2@!A1%^](tW^sflYBMLH,"pbkb /i3#S'/(^U)D+Tb;Hn4#Y0cCa]UEb-+7oO=#p(lc86B_l`W#lCr4dYI&-rFA!SII5!"/f/!Y$bR9iGPR S%o9U[>SB^0Gt#h!#u%F&/ZlqE/M<Vo)JaUV.ht<*"`Af2,I4PBSED_^CSi8ZBTB/3?].M$O$V6!<N-! )$C^+3^Q_VKY-I+aK0qo0FRp]!<E?8*%Ec71^>]_+;b_##6Xf&.KBGL!<N?1'd5+h85`Z(G(l<f\%0/e eF3G;kbD`I,8^jl!sT,E(*=kVoJ?q31GLR6,9%=D<I:1l^B!U!rsRSE;BH;W%h]X"-85-NrA4a81GLR3 *"`AR!VZR)&1'8#9j`.Fi8rCqO^gNiWrT'u'ESRS*%Xm$KtQpTs81'!:)aB?!Wi/u$3:23*B?MX;J(cp -KjR?[Z+ZS&d/UZ+u</6KX8+t]>*5#s8M#_JPnKX*=iAY!s/K(rW!l="UGGtBo9FGli-q`ZuSAU)%QlO "UP\S*$d*,1^5`k0.e:\$2su&!#bk=!WiW@+"K<?;H[RSKp/dL\[oQ'm/I%VWt&r.,T.'p!!!$#":cA! 1\!:10e+@e)_XKH8m,tg^>Qa6eAe;0>"CFk'ceSPo/$Y-0eb'u&I/48o)KI/&0<;e@=+KZ_8O@@hoM^G >s9>5QN2U;JcLB&])[E_JcLB&JcP<@%gsI=:ht]NX0L1#^RJF\&bl>F!<N9'(J]q<qXWCPY.1!D8M:ti !Y-G:;JUoRri?a7XffRc`3=Yj2&m;?#Qk/1!Wi6"*!?T_*\gfERBOZmp%HIG0*)%Q!<E?6)'p^]-n5-F pF6Cq+W_O9%0m"-!%8![(a1=`4@W\0V:"DZ`jDqQY-"n8Q>T&?(^gBH"9f#=(*G(\/hAOF.LR:3$Nh)+ B9TR/\[1=urN-U&F$U?D#6kDA(*G(\/hAOF.MEsC&IKpnR,7;d`3QeRMIAFg'*n.0&.UR)MQXD!['86< d(!sS('2qcNrTRh!WrQ?9Sq0km*WAH#G#p%&.&LB!Vl^8"Vi@H;/_>fYJ]Amp="4C"TSQ("<^U"b4+H5 [/I*7Y-=7:;E?-?#6b23rW3'#qu@]?.8YGl[CNfK\Y4@H0c^`+!WrT2$PFI-0eP%.oI9tf(_$ZMrW;or .KBGM"U5;G)'gjt9Nl+RLmY$?X/rG+_VXnXcuq;O!<<-%":Z.k.4QbqoI:4r+W_RA+!rHu@"Fs-XUikE jk?>/-j0SW'HnnT-n4p@r@/%"+W_R:%L3+.!"U&;DOn)D\u`ECM-`1e'*bK;VuRA3(GA9dH'+r*aj\85 EBY<Dp]([&!<NEaFL_/>k/OV:];^Hc3$Jn;"WK-d@<ms3X8T.2]ue=-NatF%(D-uZ"9S],r;[f<#8%n# 8SsNh]\;rMmZ9gI!!!$#!t#bb.4QbqoI:(n,9@gA%g`@5!#bnB"pkeX+tblJ=D)`1QD:R_XKAV>g[Y!m JHJ"@!<E*"$3LG9$5+=*0eP%/oI:7p)%HcS/QRD([(3TGi2m?dLK,H+'H88H.Ojs=#:CZ9)]&tj"S;]o !WN38$m.?#A:0W?Y-+t4]<-`f.iT$)!g`n=!.k3&!4r5_!.k3&!.k4@!"TVr>)BK%e&%f"=umWE'b('B qZ&;R$l'g??'="Cqp)7>HWW*6$OR%=)FJPEbMMU1X/i8$V292!9g^f`&.8aI"9S`-qu@96*]?l5PH_p% P\!NV1+*b?rW3?+"Uu4j-7C8mr[IRj#9k&u$3p_:!r)aG!<N<)$l'g51dXrCEf6mCjj:H8W2ZbrUjZE* &e59Q!X/lA(`XYB,UOlepF-Fs-7'o[*#]VNCTma;!U@5UX8].1WJFq?%1Ea^)&sbC,pjufpF-n+-7'ob .ki\NG,4X!cEa@?G#L%+%LE:5!#>V="pcGUT_JKdq8B%J=?@-2'+>!F!S7=4!"9#B)^mm]PgTNk]r7h6 KNp,6!sAZ+q#DB>+[TauW4g9NQYfJd2CfUL$5"4(5%Tr%qqAW[rMpd5Mf)?D,8q+""U"r0!<E0#!<WK2 'M!u2rr3\]X+atE((1BP!s8c=(*"D=,:+]bpF-Fs-7'oX'++gB!Wi)s.0'>N$5"'q-SRPSA:9rO]uS'p X/W,!QZ>kl3\;3R!s/Q*":Z(g-7C;6.17=<&IB(!5Zi,oZbbP"%Y@hO+q+ti"pGJO+=8KbpF6%i#9k&u #mUV9"8Dj#!X/f82/p8.rs@emP\W`2$jm4AWrT'u&d9RRFeugte#J+380]5q&Hr19qZ%$+#ne1)9mjPP s5:>a&;t*b*=W;Z!t?tmPf),=i2lpX$`fP<B2_;^.2<6t#Q=f+!Wi6"*!-m,7U_"J]rd`L;+E\t*=;lL !s/Q3'-&AJ.4Fg;#::K,$j[%>!r)a6":,PT*@3C"8RZt3YI_cqY,eP%X-e*0838I:)[ZZK!W`B-%M]s) +<r0[-Re^<%ONJI,9IgA,#a]`s8W#@hl@-NDb1rY&f2Z;-R^D8.0h+;'++sK!X&&p!s&H*";DS->DTDt dDDo^VP9Q(<\Y!h#6P$o!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfS;[&!q-*q$8u=KZe!oN,m3oB%LFb% _;F53jP?qV5T^=6mJmOr1R-q>UO-,Q!Up*C!"T2N6#r9raP,\8jQ509,m2s'"U6)8CSB;=k5OKEj(T=g !"&fWBpH$Lhof7C!U]pp!Y[7kONH=A6kTOJ!/U[[%nM/A^Y%EEA/"A2#n]Rmj3+?P?kNM9!!O*8LSi)G rT44@M)c%4!!irY97=D3N%tXf!;-='":cYHGI#rYhW!Y?XGCF&!Sm_W#sP'?jo_ks-jK#<jo>Yj*'S/9 g9a?\V?!Cl#QY]4RGt8J*X(p3"p6/MGbiLB!h;@[p](d+*D`9`iSrq\_1tl<&HhD##TII1d]n^A)$A%^ &-E@`6?'$Zh;7,Qc``=A(B`Fm"p,Mq=c1&Wi8t*60E]`'r;[0/-Y0jNj5/S9>8WJ&JcLB&JcNC_JcLB& JcLB&nGj4*$l:'I>'61Rrr<#h[<">5"Tni&!)N[t$6hMt86'Af_t36H^5Q;N#R:eQ)E1T-G)2B[[`%)$ rr1ifQZQY35;",s%Kun7!<<-&"UH&CG*p+upAb0OR9_Hf'ak*I%2U0@5>>G_BD,sFAn5=G2BWD1!W`>s !#u(F#n7Uj-S[h]=Bf*ECk%kJYdhUBm+B(4>;-?]!s9,_5[*\j$trj<4YJcf;G^>'HD9H7rkAlWdCGEQ :,a7$<kJnRiPL>"_"44AoB\=(d/bd-B<#TQ!@CoDf.'+#Q>V=`9MCrr38t]R2sT"pG&/f`7$4$NU;1 %5(4H;e(EK^^&5oMdJt.)$Ka8*!-<Q&Ksh`IB(ETrVu5aDa>rs&d8ao6VpclG+ANG&AZ`B`3YteCK*VU ,o.!u"TnW&(^(U*3^Q_VKY-I+aK0qo0FRs_!WrfR3E#B[#\[R?5VOE$&-_n1rrE$!,m"8](EY%\4@W:_ Fa\h"S$KiRiUm-5WGt6U*tSSZ$l1!=4\T,PB*r6]@95fP,VE8IRbtj[li-nlg6#8S%MTj+/j2m5ph0M; $>*gW;*#m2!s/K(p](g9,r\(`?[/U/jjLT"@m(U.!2ol3!XTM[/5L&8]^Yt$r6L<s)[6EH!W)j(!<E9> 1-n?)?\#USm.'#TT5?e.":>_X-q[reKTDb1^XDcSs6n+,Jn\4R1aa:V#Qb&.!<<0)#RW\.MR^strr;u) E^(cd%gE(A'-/M^7oo7p$YX0`@p2)G'E\C<!W2rs!>beA%2L!40KV^$A93*JMj^`^akcOeo!&XJ7kZ"u "TSQ)!sfr+;"/*+?r00H0LAZ7:0hh"^>Qa6eAS,+>u3d@/3?I-o4JDBA7JS%,nL.[!<MoprW*]B,<Sb/ F,$F*c/8-lhQr)I7kbb^QN2U;JcLB&])[E_JcLB&JcP<@%gsI=:ht]NX0L:*_kCEl')2J*!A+sPGdZGc f"J9$VLhl-*t88X(b.XKF-*N6\$)p:]ZJ=2R<i:63\2?c$jZt:r;[`=$5=O9=aQR?a6!!faD`d5!!!$# #okWi;H*KmpJ_An8O>Qm*Y&;E!%8!X&Jc?2.54+rH'YPA`m)*'ZELIIWJ4_?+q4SU"UY_X.m-U2=BAMp <!tuE(^D!MEi$Xh^p2q%rN-U&F@$NH$4@=_.m$U3=BAMp<"hSN*=O<!NQpP?ag/=[O_-a)(('U5&.^X+ N3Tt)[BJ32`Md6%'*6V`NrTRh!WrQ?9Sq0km*WAH#G#p%&.&LB!Vl^8";)_07;%CU[DLkmp<n:I#QXu/ ";a=?T>/:^\GWH>Z)*V/B3%M].30!)!WrK*r;[f@.8YGl[CNfK\Y4@H0c^`+!X/i='dYe3>$+j+oMc&d 1*-i,!s/Q#!%7gI!X&Z2$kX=!.Ps@_>&AhTV5gMrY.E!?o#uA?#QXu.!='Mr78d(T<!5ug69R@.2ZlK] KV./(%FO:qes98]"ToMk6rHtW<;fc$:J!l90-:],oDfCA6uJR$\[nlPXGL7D,819^!2ol/";`^]@!Rm2 Xi]2;[<=hU"8Dlq!=/i_A=VB4h92uI^Tii4673EM";2q;94rmP\@8fFXgc?pa/F`.;F*#_(_6oW"8r3> !='2U,Y;j6X1[0Wp?n#1%fcS1!<a,c5#P9W;tO#o;G0GB2C&tAp])36"9eu<&JuT;1d4K4Ck%SBW2m#% \'3h$fRsl&%KQV3!<NE1%2:'F7p9(u<E8]k$VE6!%1P1'O2/WK]AK^rWeXRt&0Wes;Z9Ve<!Q8m6p<@K &dIt.!s/T/#8@n+8nEC0SZ&]u`6[&0Da>6P#mCBs!.k3&!.k3_!.k3&!.k3&!:^%"&2IFGYf,#-TlF3q )&j7trW2lr0a%am(+`IEd/X.*[AA4P1_LB/#6PYs=+6jVg@W\+Z`9meI;`Y%<D#A,+r1Lk"U"o*!#u7c 2Gn@UYem<&AP>KI-PQae"9\f9*\p;f=&rB$<VKJu6o-#!$O?n<p])iG!<N<-%Mg'1/2][kC4Vt^]u@dc Vkp>gHW`9C'+P9M#8/%+1H\*$;H$OopJh]%;G]e@/Km/lXo/5!gU-"Ari6U0LL<"L%Mp391-A$%;H$Oo pJhu-;G]qM2_RX?VYU8R_lKDP;D&Oj#m9r&('4XF$7&iJp](9d_5)*S3>*,B$NpJ2f)Uj3$j@1]-pD4, dJr7?W2BlR>VHBb"9JW"!#u4b3ELEm[)Af-G?%4!0H:B)%20X5:j]1dd`8QiWsu%mHt?/C2_#a[$jQk9 r;d*)"UGf4LtDY+("94;@6>;5#R1A6%N$KH3^QJ;;cH`j<=2Z&:dZfP#Qb&.!VudG!!!**$P=*m+t,68 <bHiGXMrl;_lg#.LhKXZ4!=n6"Tnl9*AC#b=&rAo<=;;S,8(nO:MYfc]Z/j0%t\%U,7tS"#7V_186/em <qo\n<<l#O,8(@h"U+T#"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!"oG]8p-uEcI8eI@7MI](_?iO!W)j* !XB/K+%14Vs8Vc0W$I746QHaJ#QtJ^8oBs%d.Gf+\?)a&KQLj6=AV@@-5m@""p>&,!#PbQ/4O'%VS0+# H;R0o.NJiu!X&T/(+VZL<rc:n<<l2Y-l3=!"U"N")?^6O&/?---S[qeAUBT>_V*2PZ)X:QD,X1l&gRhg !s/K+$l:0B3'p;:;H$Oopf.i';Gp+M0IJ;NP2$$:m)#d\WsG#29-Fok0Lo1C=7fJt8N.q1$j["=oDesr "q;.Y-V8<O^Wb0>W1T0$E*l*a$j[">!LEe<!.k3&!4r5_!.k3&!.k4<!!i]RA%^HM57dnb!!rcR96I)X h0(7Op](g+(IsP$c.V(4^6<8#.MDsR!!rcaPiKcYHW^dYoDejlrW;fq!!2-\%K[+g7VJ('fA#6Dh0:IU oDnC_!!2ut"p#>p=bF!2j6$@'!omu2pAj^b!!2ut$3MSWJY^6>b?Z"fmJmOp(,]E_bMA.C&C:E6!!Ws) I\4C-hZ77$mJmP!2N-D;Xc709!r2g""=$`gWRUn/#32Xg/e/!bn,N_%,tiZtj,>_uoDnC_!!2Wjo)K7' (,fZdXiT8Ye@_T8-O',B!!2]n!!2lq!Y7i#hrY'H?mZ$XpAb0op]CBq!!2Bc#R)23CT#mn7h;HsU]:Z$ (.jqRX&^8Emf3Om'g-#i_r(Wk64a1m!"TGlDn=!?hWE.\GYp79#m'Jp#TII1d]n^A)$BL2!!2]n!!20] %KdA">E5c&f]Cc$W/WG7o)S7]qZ$g*.8+ZQb2qRD!h_7Mq#CBqoE#!nklC\_$OS1TLWST,^SZB4#a#+= !.k3&!4r5_!.k3&!.k4@!!i]9(EkeBFdL5Lrs/5*F#aI/!s88u0EDG"1d=N3BTU..pZBhmAi9u$$4RRq 7pKP?I$(YMd,k-&lHm)9PC[LN67s2a!s8H&)Zp6L)c(XE_:\J]s5BAO0-:o:!sTGb1I4uSJc:l-P7*eO Tq6^61DBup!Wi&r,Q\)Q#Rh=^*@3C$6rRK)Aqc;<[);_8ldqeB2[flo"pPu.@"S$7&!W<DQ%j?c7o!E# <`j!dVrPPk^C7p*\<(8r2]rJH5%'!7P8BIJQ'I)F>t.On>u=R1IAP<Wgr,t080IO)'FH!C6VCX%Pf<V$ rpRCC5Rdo#!WgsSNW9Ff!Wif`8PN,nJt'O\d'S^<7kbe`q#DB8":#;P7V6e/Z/>BWmB1S%1EmM:#ok]e ;.Op@rP&oZcdgFc^Ts]&H<``d*#&b_r;[Z;(+_L5;J(TokhsO`JQFN6!<N?,&i3U5oTKZIPa.MnH=9B' -Pm*c!<)ut!@.gS%20R",Ut`H>@hPnLS2H&dGO<MYC0/)-5?[g'-f7t;J1LOP7*eNTq@6W9JSP3H^Wd+ !:0Xa$eUP=*Y98=1dFrOJ,#6+P7*eNTq6j<2AQGu!Wi&r%hL$G5YYU1Wo3!e[ZP&_(97G6!#,J@'-&Q! CPBFjs8W&EN(t;r"9JW#!!rZ.'J2F5;.+j]7dU!>fs5rq)?g?S&0*l6@:s_>U;"_(o)/+6_Q9/^F'hNt +qOhY!W`9&"UGGtBo9FGli-q`ZuSAU)%QoR%j!>a9ji1.oofcMStMa;A3V.>"9S]%!<*!7":,DJ(EOeL 1eLq_C3G3!^;\FSlfkedK2al\(Bsm@!sK,d;KVPp&<rEEQ&U0':I\Gr>#SgPQ+l1k$duqeG@"<E69S1V Hh<L0R%L(FLL*"["U"l-pAb6q!WiZB2HamAKpAgZhu<W\e=gbI0d.)0QN2U;JcLB&])[E_JcLB&JcP<@ %gsI=:ht]NX0LC0af8f,'))D*!A+gAA<smG`k/@lZB&T_,7O\W%iQf\@Y:_p]=4lE[_Bi*ZC-SrB2^l? )A!,Tr;[Z;$5=O9=aQR?a6!!faD`d5!!!$#%kC4grd=cordOTj#CLf<CJHT$"S;[A!sJu?&/6!%-p(46 H'Pehc,$opYfaYQHqZ%%!<NK:(FVOPFFo$npO<'j$Y;jX%jP#'[aWR@Z/_tbXU^tF64jV9&f<#]>BGII JG4NkIhQBa/.j4/K=oa`aKi:]Q>Ar=(CKd7&.^X-O0lO2\$+-%\s?DO&HUD^NrTRh!WrQ?9Sq0km*WAH #G#m$&.&LB!Vl^8":Z1o2dV-=]YW@jp!\=O$N^D3!tm7cG*/JuZMgm:Y-bL3R[&kbG[!<U$j?b9!W<!; "Y!8rWO9:HXLY$O:b`t#!s8c;'d>V9D1[@ipO<'j#B*Hp'a=gD!r;mH!!!'&"9eu;%h]^$,V1rSC4;D= VQ-f+^WtTNHTqoA!W`<1-q7ouI=-G7ILCRKFD>,\9LVcqM4rh/&'s7jdZ70K":$2ABRG5UIJA9iIKt:G FDF]/)$]^5%iduTS[,f;XLP?g?9'5D#-.a&!"]8L01TDqOeo2'g!.-S6llI*!<*!)"=R0!\A?+tXsCfq Sp*p\'a4[I'd>M9GF?1X\Zr9@]>_q(Ulg1G>=:.e'+4p@!#u"E&K;ueD3(a1g@Ft*O@0TZ!!**(+$O%\ I=$D7IKt7IF`1MH+Un,G)?BmB"U>AE&f2Q6/2p@:I?C%tWiWP@bhC?p&4R98!W`?)"q;7g2,J"=Jq3TE rI52o<&GO,5]*+AdE/uWXTteZ<$;u09PEpE#CLf>CfE>6#P7uu!sJr>'HfVIIZp7sXfo[qh:7Zl0+/!f !s4ehJcLB&JcNC_JcLB&JcLB&nGj(210TO=`7)SsDcet6)&!DW!W)jP!X8uB,>Np3rVuK&VL)H)'GM&` !tZ_@=*^Oas7b?dY,@kRJ9Q-XDJ3$8.M`U&"p4o*!#u7c2Gn@UYem<&AP>KI-PQae"9erD0iNI_N/)o^ I.r!pA4\Hk%LNFD!<N#srW+DK"UPVM(E+AA1e1hpNMO)3\ZMd,Uj?3'(Dm\i":H+t3_NapG'\L^pO!Kt H?jdM<^JE*Dl<C1n'%rpX8].1WJ=k>$kj[54%ijqG^=^`pO!d'H?jdK<^83%E2`[6p!Bk4F\s_%%1*14 !#>V>#Rr.dTD&<bo"_&E=uI'6'+>!E!S7=4!"9#B)^mm]PgTNk]r7h6KO$;<"9\f-q#DB=)DFcqMQ4Ll R=S^>7Q2Fq#7(_M+@'CpXh2HZrMp@+SVho:?rB<G,SpmnrW3?+!<WK2'M!u2rr3\]X+atE((1BP!sTMd 2+Lb]FF&7[pO!?pH?jdI8LY/P!s/Q#!%IsK!X&]7%1a*g*[ig-:Ml3#e_ATeWh,T9G@3uk$jHk>"qiRc Ga")BJb4<tAkXru+[KLcT!l_\hl@9@?:Q4T(D7)i0N!(YN/2uYI/SF!AkXrt%LWOF!<N#s"p+r5#rQ\8 rr3;dZBT,o+:JS^"02F#!"oG]8p-uEcI8eH?q)4W((LKK!W)j*!<i`='g-B8qu?NAW?mI86m<EZ$Np\R 1JV\K]C>j`bdFIFQ\Kd1FE),&8M_A!$jQn9rW!o>(+_p`Kr2PcRX.h$4";6X"9Sf2$RA2WP`CWQoR$s` ;`Z!2%1!+<!Vud7!X&]5$kF!f*@EO%950?ge_&NjX.Yl?H=9MZ0+S3i!s&Q<+u;YgB68HGHhVn!H?sj^ E*c-o10fmfs8:Q\Wo0ocQuc"I))+g-PDtBLoR$sZ:Gj+&$O?k9!VQKq"V)=n'K]ZXZI%+CZ)3V'@ol/Z *si,R!s+_gJcLB&JcNC_JcLB&JcLB&m/RCp-"FU?Ld)FOmf3Xq'K'3]bM@S"$24E3#:X)FYKG\ZdC>Zn >t-Ie#QaJr#m<&Kj2Rj@=UbE,!!E<.&/lbl./,+k)$pB*!"8r?0O^Nid+[I7Ji*u1!!*3>oI'kj-RL/L !WE''"!^]eS&!b<k5OKEj(T>*!!*3?oI'kj-RL/L!WE'+"!L<TPe>_o?Q9.8!"&cF3b4W&h2+3&!RUn( !!Ws)I\4C-hZ77$mJmOq.X]dn[$lCd"S_s"#9c]m`r5$*j27$j5q!KS!qH<s$RJGo]&S`)#PJ,u!>+lO "XbZE-4g4M!:g+!!=pYSF.pk?gs<^<5n!Gf"9Ac>)'SW#!ZDCIqu?g"(f@Kojohqr,m48G!!E<.&/c\e ./bOq)@?Q5!!i`J5&7(MZptY(!2KT#!>\7pii?*$"7?-m$7APs\DICf8J;."!"f8M8r'4YfB(`(Vho.a 3$\t8nGih6B\Ch=Me*b.pAb:"%Mg/Y-itJ#"6KRm!=L2FDk"l1h9`sB9+^ar!<E]&-j:tG-70N3r;[$7 5\Q(]dH0<K!hqFQr;Zs%#7hXooI'b\$j,_p%KHJ6/ma17f&"0)A3(A)OT9t5JcLB&])[E_JcLB&JcP<@ #QtPP+ZW_KQc]7,#PYZK3<o]i!r)aj"rJmO79ODe_tsE)i3%&_%0m.D#T>Zr<Es9jVSU3oe(s$:bJ:lt Sq^cE-k6C_!W`<("UH&CG*p+upAb0OR9_Hf'at0O*AKWE<c!irYkP@0ced^?ZZnnY#6b21p])Q?!WrN/ #RLnN',VcF9j:_:K9ECTr;ZcaZZJDB#mgkC,uJlVo<A5"$`f\E?tFG#>$c-)YN*Cs^C7p*[uY#n2^/\X ;0SQ%Yl:pAY*sfG?"@8=;.4aEcgK`3W-:lWo`,^-$R7]%9jMe*`Voi6l*bh$$j?_7!SII5!"/f/!Y$bR 9iGPRS%o9T[#89]0Gt#h!#u"@"9oB#?u1[ic1(`"Z$];*-5?^g&03;f@=+IA^C\2rcdUD$k31p>NFG($ *YASS!#PhS/36*qAq[e[i5i!N="k$`!sAiH7Vn1XYl:p5[A/Id8MhOuq>gHo-34,K!sJr:$k<jd.Qg7# ApK`X_SsXCg9uiB67s,\#obQ[6rdrYoWS_Ih;[D2OCLO=?@%sq^B!U!rsRD>;&p8m1d+6,Bo;\irNH[R h;[D'Hq>Cb"Tnf#!"TVe2aC)EGcK]`d^G9J4Vk'uVuR,*#nn:0:MYZsnG`Fmd>Ug>"p=u.q#C[%&L97u ;Ik9c7dg9Qke`-P*sW#V#7rFU;H@=QQG18Xd+[L5cc3f2ViYmq1Dg8u!W`9&"UGGtBo9FGli-q`ZuSAU )%[#U'Ic"+:h"mVornh@g>_)7N`dn="p>#(!#P_;!WrT3#n.:U(+2.5;.Xs6^V[t2cJQ2BO'k@1)@-?F ":#W+BT2Perius;UP`kmE-5VmBRl_hi4fZH_4c!Y?<9W`;eLjWYRAS.io.\+:*^)K!s85trW*!$#ouZX Lm=R4\]+1>rs-Z)<@Ak##m$@mJcLB&JcNC_JcLB&JcLB&nGj(-+#m)4K:&^FgtBuWB/UFs!&"?R%5(M' S#EWuY/e8MHV5^s!<NE5'.d"(U:e4OYHG%6\%B/VWhbi)?U?7^$Ng8,*!?T_*\gfERBOZmp%HIG0*)%Q !<EipAsBEuVP4!]pR_\o\?r5[7j/'.!%%aL"9o)9#n%=b-SeA<UY4YQ^U()mcb,lX1D9ck#o"F><cjM! U@k/XTaQTa4r>kUNQgG9_m&1'rN-O$F@$QL&fMlN=*0\$U@k/XTbE2j4V]>AHE5-,_QgMXRrV+R)@Q0; &.UX0Og_m6[B@`jX+aA!%ft2\NrTRh!WrQ?9Sq0km*WAH#Fog#&.&LB!Vl^8!sfJV.o_))aMQEho$MtR %Kun9!Xg,1:ht]OWr/t0Y-YL@_TpZ[TkHM'"pG&0r;[`>.8YGl[CNfK\Y4@H0c^`+"Uc"b0265?U8%=Q rh0R\E(V8]#6P))!!3-#!WE-G"9eu8#n.:U*&UN+JWQP*Xg#.@^9i2S&dAF>!YIA#OK>L\T_+iaXgka= O`Oo0>',e#hlRF6hq?2.9d0]K1glBGX/DWcTDbAeXgPO:HqG[ioDfCA6uJR$\[nlPXGL7D,819^!2ol/ ";`^]@!Rm2Xj,\M_L=rr"82^$!<XH3Bp,9qZ`GFj`N4o"1D^/p":5V\6>;Rq]t:\RY->@H]!\W;R>#?L 1a*D5r;[f<#8%n#8SsNh]\;rMmZ9gI!!!$##:`](XK/:ooUcAf['m3#="Y$Y!!!'!!Ytk@"U>>A%1sI4 9P/a7SuSosZaRN[Je(Hi#6Y/2":Gk^.nXN2U8%=Qrh0^_E(hSs8pdi(h9<=bXUD(\<$</CA;mXkVkNaT #HYDBXb0G!$M4<#":,JO'J!"#PGG1XX09k*fZ8J3*WcBD!WeVfJcLB&JcNC_JcLB&JcLB&nGj(210TO= `7)SrDH8\/((goQ!W)jD!X&Z4)b,7jr;-*-V0cB*(E!ko":>tn2HGRIrr;iEZ`0dpSX,N>O=53R59^pU #Qt//!!!9G2Gn@UYem<&AP>KI-PQaf"U52P7XDT"cb6CYSG/N[F]C=7%h8mK!<Mrq-ij>N"9f#:$OdL^ -ot%6M6#F]]<%j*G$I*E)AEP^%O*l-Aq6,:R[Wo>rgF4OE)enhDOg"bf=@j?X8].0WJ=k=$l(*M:M,0D S=5o>SGnrjJn@P&4D_%qs8Uf[T6*m^&I\sKp])'2"ptki>bLlls6m_!G[!*B)\`\`!<LdPNrTRl&0!#] AX(UBj1VCh#DQM?$3^S8!Vl^,"VrLM<d^RVZCZqj;bfG!$N1/6'eW0uP,Pq&r2UX3TpCdb@no*;,81:a !WiB'!sJrE7u5drrtEk^Kjd(Z$O?q=#TGEe@![m'R[Wo>rgF(E?oer'"9S`%!$2+?!WiK-"U>;>$P*jd -;&<Najo(aX/2JYR<2Lc%fHV;)FJSPh9`s>oUH;7=?.3B8T'g!`n&8hWt0nl8L,5p((D6OFL0fM^odC% rL=+<=ZI<0%LNC=!W)j$!X/f82/p8.rs@emP\W`2$jm4AWrT'u&d9RRFeugte#J"+73*3[%Kuk6qZ%$* !sJo=1hNTTqYfBQ7>Y\H,8h1)"U5S^0Lp/^kl:\C^T49,SsY_(P)k-'8h:kn$j?Y4!!!'9/4O'%VS0+# H;R0o.NJj!"9o)B2.W<9e]+ugS-k!\66QaH$O-Y5!W)j8!<NB,"U>;>$P*me,"6=;a4&edWhlAYRWhsH 3>)N!!s/ZE/OWlfNLZH+opl#M%$Q$G6on\2_>NB5Y,^E\$^c*7-QkcpX5;:AYk4FmI9SfR%LrgM!W`>r !!<KB,W-63GFcIg^U1#:Iq)A90dIJ<"9J[k!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSDd'!U]po#p;fi _qg&)$N]u%&JRB@Nk*j'h:KoeZC[))4;@qh!!rcaPiKcYHW^dYq#CR!%k0kRI/]#tM?@$5%0>Jh$O\k; X236Ah2OZ4!VcWt"!V03MtMu,L^QT`!<<**20"kdbhhCBroO:BBbpOF"9]oWMi77creLS=%fQG8"!0U. K<a%R@3#F;!!r`J5\QY4h1ms!ciAn&"qO7RT>0%9!G)r4!!rZKDTU2:V2[#2pAb:!-=F=]jpC,'ag.FX :+[4co)K%(,tiZtj,>_upAb<s(/0XEonra)!DX:"!:Tsr#TlN^]]S2/f[*n<p](F+-9tj^oSO#a0G"6d "pP,2+^22/johqq,R"5G!!EcY5[A[1MZ&D7?n`,mmJmLr*'S/9g9a?\V?!Cl#QY]4RGt;K*<Y^0"ToK! Br^"lXA0Q6pAbd2/6[P%cK3s;dD`PkQ@`$Z#P%j#)edpQZ&<02"8Dj!#9Pp)EV,+jEBY0AjT#Ym)aJJP jPeqJdVBco!!<m&Mi77creLti+p7lG!?YO%V8CmHi8t*81^*dX"U,Vc4^*(%M?@EI&cq>!%0-GPCp1b+ hVG&>1_9eO!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;Fq6tH+#6b22p])B?'-oA$>AoS@r;Z]\ \9^FO"pG,2%442-;.+L3]">ZQ^F8*ubd<783uJD2"Te]-"UH&CG*p+upAb0OR9_Hf'at0R,<.kV<c"6( ^\>JCk5PAciL!^l$3gV7mJmk#!>.1b;-@gnV8W92s8Kod6k]J-":?_cJu8%P$d,uKG'Sgo@:aV>W:7M# ]DfAH]=bkm^qmn*&&Q,s^<!L6?:d%"&2%7>V=;57cFo]gCMR9Q;.+U?cgg,AY'`qf!<Mop'`e^h5"SOV FI:)Hrq59VF?Ks5!W`>T!0.$e!<N<3/kJc9@tL2c#LBc9?Uldf"SVmL!<EKb>%W>I^$#7Z["D=@.Mi6j #7V=r<dC%D]"5Ga]=bkmcgC`3rkF4i4=V3TrW*l:";WOL6;hEK]BJ1oXFXG,$ipG6#TllfR..iqeB"P7 =?n8Fq>g*e#6YPV.6:RMNVpO%dC>?O9/IUn$6_>l7T=)eoY1Cbrr35t[<+r+?[7n)]`l'\]"5MeqnEf[ ^qmh\s8W&AM+ns'-p'X_<,%Wm^\tnIiVri^kal'-$3gV7p](g9,r\(`?[/U/jjLT"@m(U.!2ol(!XTM[ /5L&8]^Yq##L\Q+)[6EH!Vl^$!=g/)3)aOA[MS90s74L#=!@kQ"9SiJ2FL2@C59@3]tO?Y.G<_/^70%3 -4L7b!s&H,#RW\.MR^strr;u)E^(cd&-i@W0g%ct@>);d^AuUZrs/J/DDhk-"Tn/n#QbDQ-T4tBLV<Z$ !R\RiR;5MT+:/&N"UGr<FHZ..$cg,_KlD[#EF3X9S++*2]Xtbc\\#Mg^VI\%_SX.(^<='TDdHgS7mp6e NV'scg&D!Vn>KhL$O6h:p](Bs!sJl7-Wu%s^VIY$bPqMIoX8m,&.8[E!LEe<!.k3&!4r5_!.k3&!.k4@ !"TGZ3)FCCR&dOLgX3ED3#(ub%gjRM@XjN8XKKacYDZ:0&H2\=!sKT.BU,g2\$N0<Y5>=+\#+pi5q!<I r;dl@$5=O9=aQR?a6!!faD`d5!!!$#(e9"ag"+NZriPps#L;Sqgo"C-#ODF1!X/l?-<cY`o%qHqYL_IT ^Mu@P!<NZI-:;F%V=:SpRs.UN1Ll]tkL[\[n>uhpXKAY.r2g%'YHJJ>Y-"doDa+dE(*=qlBSiVUXV7CS 9cGHSE1OJN]X,,]U3ffq*";K?&HNG&A<a[?]X=r`\X[h3,7O_)!07*g!<N?+'hjJ3p[$;<Xp:J;5S+5* !s/2t+T_iU&Ka\p[*lt>ip4pC6kT\,!s/Z?+u2]'KqGHIXf\]'XXLp=o(MC;<[8.]"Tnc+!!!0O:jo=N \[\`OTmKTj*=`/T%2gEN?\"d;XTjhm.Llah!r;og!!``K2c=ICR&BkaGA('t-H!Z".JZe<sX](E*4 am%sDac^OJ?ZqI&nZ;hpXo>C%X8&e0Y-+nRe]k^R732OB6$KWff?q2)Xo5@,am%sDY@B3loDfCA6uJR$ \[nlPXGL7D,819^!2ol/";`^]@!Rm2Xj,_R`I^W'"SDa#!ua*uGD_ojWu&[r\!gkg)$L!@!sB&f=b<c` \[/B>XfhT(#ILUsE)//+#5eKA#8%n#8SsNh]\;rMmZ9gI!!!$##;p.ff%JQmY4\n%\``/6aEKc\li7:p )`19(J<d"7rN-*uJ.59n$3gS6"Ul4l2HkKsn?!(qLL2h\:kH4Dh9EP#Xo>C%Y5GF$Xq7e>Y-"e"IS_1. 8pR\nf[IY.XTu`-kMNgc2%B0X!sK,M+V-YEL81lRY-54ef#k%)1_GlNJcLB&JcNC_JcLB&JcLB&nGj(2 10TO=`7)SrCfWJ+'G1]O!W)jB!<N<)'gQuPmJHn2V0Q<+(`X8!"9o;K)EDQ4qZ$Ta^T"32Wr/nGMJGp= ,8Ugo!s/N(#Tbm$DNh<AVj(ad6o$,("p>,8#UN]Hr;ZfX[/R-#WsXVc7OAHQ$O$S4!Ug".#8/+189(9Z p!U7HVKH-1)&jA#";<7P?\"oa]C;j/T7g`A9PBC%hT)t&n>HbpW2ZbrWiN/#X/Mnm&#Q5%We=Y7$lCNc @"=u`]C;j7Q#]VH3,>Vps8V/iSo[a\&.JpKp])$2#7V:s?D7)ms6I@nH!E<I*>8e_!S.73!"9#B)^mm] PgTNk]r7h6L0c\E"U+u/q#DB;&gB,(EL=GQUQKb+<'M]:"9\c,#p2**F-Ni=ri$F.X/`5#X-n*-7m&:B $O-_4!X8`1#S]dbfDbd^e#S124;J;1"p52T3`gHl[D_R8#FB@!)?p<H!r;og!!`i^<f"6.fZa8o"H6hO %g`.@#9d'7p](9X\Fcg0NE\q'+A$^M]?A^Gn#-;eWN,rs!35st!3,sq%t.kT+s%gC%jY2Cq>^KZ\G3-' WsXhj81FoV$jHb6!W)j$!X/f82/p8.rs@emP\W`2$jm4AWrT'u&d9RRFeugte#J"*73*-X%0Zb5q>^m( !WiQY@@lNRq<4jmN+Y^-)Aitg":>\W.9;P\s8W&Hri#mtr2V98GZm0T*"iP\!s/K)(+_p`Kr2PcRX.h$ 4";6X"9\r8(INf(s8Vi4WqED"S7,2M$k<^P!s&Gk!!icV;1c3rf@6i!Wr\>t%6kO2"U"l3*]I#:QEnL! WsbhdEDSo,I&,uO]<1S$%&p2)W2ckuWiN/!W2BQl%&fM7;'mSeNp$HBm_&1m$C+mh/d`*s#6Ou-q>gKq !t65,8/#WrXgtL4Wi2P.=Z[H=((:?K!<JJdJcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPmJmOq'0'pB h2FE*!VZR#"Wp$FS'0^IioL%""-l1d!V??u">c;&`hRl`%0?8)"U6/BFJm[gk4e!?[qI;tiW'<(>*?&1 gtnMp)$9R5!YJ>FnE(+@1^3p[%6f?;[`[7lgC2lnhr3VVjQ5Obj5Jl!hVHr@>S?l5!YJAInE(7;-isAK !uWdaFJm^9A0;!B!"&iQ88t9Lgjq<k!RUn(!!Ws)I\4C-hZ7:&m/RD/@_U"$XI:pNp&G[54dOm[hr3VV jQ5ONXc$a."S;["$RJGo]&S`)#PS3"#Wn[JjoVJ="8)Z_!!<EO>cdkc!I,U[!!NKK6uSgIo]?OpD(uA# &eP9N,?^r4gBHBfhV[;Qr8n:Fhqd(Y:`TZ>qu?m),"-CEdJ2l&jo`;60ad=K#R)23CT#mn7h;HsU]:Z$ (.jqRXB-DEm/R7q-Wlqq"0toI"SVm&!>IFpLUu=!iT'ju"2%n`"S2U!)edpQZ&<02"8Mp$!Z!e)PK)_W joj%a5na:\!!EEI<2&@NjoL8`!!2fo!X(9@nE(+s;%ip0"=@cLYJScWgCi?"i8WhYjlY[bj5JnOgtRlB "9&9(&h?1\SB^]g"3#FB%.!s&!"29+k2k^ceqZI&!KR54!.k3&!4r5_!.k3&!.k4@!!i]9(EkeBFdL5L rs/A/F?'R0!s85t+9iK)1.#2_O2UqqpZA`&4q.Yu!s/fK00W'8CjhD6Uq6K=.,Et=bH-S78iJ(4#6G&5 #THQ_R).GKs8V&G>q[97$j-q`3'Kf4Cmt@<pV-^jrr35^QrkR?"p>"p!"f5A01eo<@!\NbrVuos_gb&d rX/i9/R3n)n@o@T\t!k\G'7_;H%q^]U].&$V5']USsb^pK8>no\A?;<k4B2MeA&/XKOdP3.3&gM?%JjA ^DG50RrW7X>YS"%GFd"Qo&%?B="=CU!Wi,t'`e@H/P&`=A:'odr;#U*T4g+f!s/MU!0.$e!<N<3/kJc9 @tL2c#LBc9?Uldf"SVmi!Wi]e>%W>L_<q0fZ@>\2-l)sf"UPY\6tLq6P)kTdSufB7aku^irme*'@nAEp %13:A";WOL6;hEK]BJ1oXFXG,$ipG6#TllfR..iqeB"P7=?n8Fq>g*e#6P>J+>[)?Nr6X&dC>?O9/IUn $6_>l7T=)eoY1Cbrr35qZZ8Dl;f@TdUC3lnV50fTQ]@,pVRZQ='?enXe_&?l]TQba'+lQP5"8LcQ2&,m ^B!6lrs.bZ>pfs`"9S>u%hL$G5YYU1Wo3!e[ZP&_(97G6!!r]5'-&Q!CPBFjrr35ON(t;r"9JW"!!iT8 *\THMBRmN.li6qO`emY:"pG)1";<.C794#DMj9s?]`#SodH'03\X7J=4tIZ^!X&Z5$9W$[\BaF>s8KBG 59h$W#6c##4@2eOKY6um!71ZE#Q1rH2@B`n!q60q!XTM]/lHYG^&>\HdCg!WCJ?]0#lt,3#T-3VP463p bJgH6CijoBAo`HbUA:S`U`lS1US+6KQAU9KPG>M"`R<Z4p"dWpV2fOm85N,N6rIWVoY1CZrr35mW+.Ff #6b2(!!<B4'H@fM@!n`c`5g0br:/RYNEn:I#6b/0QN2U;JcLB&])[E_JcLB&JcP<@%gsI=:ht]NX0UU: dC!^K'_DAJ$7/,PJs3%4Y04VYKMX-0!<<-&!tm1YC4M2,SYN*_X8K(J\?_`\A47pY#6b22!t#_`0j/jk YK,btp;h2+!<<*#!>n=T\CoH[\,NN(XU!/9jkQb=.gPD@*!-6J$6W2u_<'Y'[BJ6;dD0`b(BFUI)(%^` Lo'UC$_M]>*@OU#Q`-[LPk^C?OqEn=O,f0_T<,]B\?N*<ZbOc8&&tlENGqWA$4IRh-pq[)VXU]$TQs3L ,Y;g<ZFIHO\B)%DDFGi[p])!/!WrN>5]*17`PAj`_lS]'3Zne3eGtX1$ipD3";OUedJ*"T\ZQ1-E^10B "Tnf$!&=T[$P=ISIBq;Adc^)IJO'hN!s/N,%MpBJ:2,9BS#!7!['$O5\'F")n@!gD2Brk>!WE-;"Y!8r WO9:HXLY$O:b`t#!sK,O,WK.]TC8ldNEmqA#R(;+!:p0q"rAjY>BPq#r2gL)H:SeX"TnfA6[5rjf?q2% XUE88k2!n0?q<^hCObu=$]pI4OcY`hPF/#?Wr/t4Z*:=)T9P"J:+d7`&OCWIg"4W_poXLs#Kc5mh61<A $1n3.*(4\8ZFRQJ\?(Nn3?o1AWrT'u&-Ne&7ppV)V6/#!f#<53+9_?;#Ql#*=F,stWiHrS`j:k:3#Mi! !<N?1,=#R]KoqgsV5p]qXXUZcViPmr1DpK'"9SZ/&/lfcD3(a1g@Ft*O@0TZ!!***2.rW6g!n$EorSJ0 kNCdEG<HW+!!i]B.R7'UMP73OXT>>M%8RoM"p4o1$lC0H>'ue.XUD(`?83?^@Yh%]T9o>8rfSFgOH5E\ O-uoU`4WCXXg#CVe'Y_$P'^Ck()TMbYh.OV_"=`6_Wg7@\SF&3pAk0n!t?D49b1rjS?9!#[Cjo=]9I/" ,n,q:JcLB&JcNC_JcLB&JcLB&nGj(210TO=`7)SrCfWJ+'G1]O!W)jB!<N<)'gQrOmJ?b/V0ZE-(`F%q "9f&?'.Zb"Vo6a$bf.?+Wr/nGP'LP4680Mo$3gY9#p)$&DNh<AVj(ad6o$,("p>,8#UN]Hr;ZfX[/R-# WsXVc7OAHQ$O$S4!Ug"."V)@m4(k5Ns7"77VK6!.(`F.u";<7P?\"oa]C;j/RXA9r3DaIGQ]mPnplGE6 &W;d8Q^an^bKn#6Y,\FmR#$)"ItEN8Bh0NV(+_m]J>0Zfn>cbYE_I`;CTd[:$L50nFAje*&I\jEq#D*4 $5+77A>Jnus4OiVH<WBI(_I)VeGtX1$j@1]-pD4,dJr7?W2BlT?8N#n"Tnf$!'(/q,W&29R_QP1NGhim 4X:=:!s8Q/(+D=CDMF^c]?8I7[]c^2Ru;#W<'rYo)A3G\!sJl6'M!u2rr3SZX+atE((1BP!t$/3=*9q= `:0f4QZ,J7"p>&1q>g*e#72ePG+lFfc2=UFN+4mZ#lY,8+]Om(s8V>noW&@Z>=^4^4BZ`YNg,e!NsUf) PF\ef`l#EirMpX4UR@*pC/I#:)]9:u,?:--s8V>npoF@o$B87\.L?Uo"p+f+qZ$g%"U>>kE4u8N$0AIW CITET$3p[6!2ol1"XQc`V7t7(We+MF*>T=u"T\Z#!"/f/!X:8bT&]P?kc5PYBLa9d((CEM#7M1b5%Kno aiquM_RctOrMqB>KPX^W3%,ON#R(>5(+_p`Kr2PcRX.h$4";6X"9\r8(INf(s8Vi4WqED"S7,2M$k<^P !s&Gk!!i`Q7rP!-aO.$dWr\>t%6kO2"U"l3*]I#:QEnL!Wsb_ZBLOXG??qs(P*#I"rf&(ZO-,]qTs)>[ `k&CSX.u/GIscg&MKrGj+!X^Ek5YJL]_&63Q!I!7$4dLL!s&H"!!`Q."U>hq88&WkUUIS/URdj.AkXlp ((U]S!<JGcJcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPmJmLp'01$Dh2"*$o`,7%(GJX.S@6\sr8n-c AMOo%o`,:$1R-q>UO-,Q!Vl^!"sQW\Vq(e/pZ;ReBIjDJ!"'<+G+$%rhO$tR!r)`s&Q6C5jpR2&"98E& %P0k99i:[br_jD,;cHduBnrRub1#,)j4MJ_UBQR"A5<sAq>^R/;o.tc%tuA4!!!'9.7.jEe^84^#4;Ht $8c4JZe!oW0*oo)M#[_j8:I2Gf\Z^@'^Yl+(hCA&]r$oC#PA'/%lS3YU:ee&gu7AI^8?]L)$T[5#R_qO ICeHt1'dOR!XLl[nE'eN2$<LOmf3Fk(f$h'joK]Hq#CR$+[g7CdIcQ/]koJ2!sf&1!!O2toMc2r;Gg1i @;C%BVo7?gjp:%oYDR'W)[?E@!!NNL6u\mJpu_P;"2/P+$LRm""WT^AVqSLJ&#K?&!!iT@8X\S><uhD2 !!NB0-s<+s"0YWB"82^$!>-VFAWs77fAcbk"Nc-]*XD<;#TII1d]n^A)$B[7"p,Q#@?\^mp#ZD(KL$7P jT#Da'1J8JrT4-:,QIl>!!39YOmqK7^J#.:!!WWK4[i"?;u'Dl;\r>0;cQh(I$q=[d+R@>h9Wj<P(.:M .L,hO"UuhDBq3H?jo`SG2[o$Q$NhVb`T5q2d^E:&#*&\8!.k3&!4r5_!.k3&!.k4@!!i]9(EkeBFdL5L rs/A/F?'R0!s85t+9iK(1-o)\NPkVln_^<_3XZ&m!WiQ<*@a0I?u:1CP,\Ao.+R>;ho`<rJR_/!%Kck> #THQ_R).GKs8V&G>q[97$j-q`3'Kf4Cmt@<pV-^jrr35^QrkR?"p>"o!#Q+m5tOgWF.1&Gs8W)8I7"PQ $4@1m>_8jB^C/B#Rr`.M>ut-:Bl`unr-8frFE;VLD.@:,Og2jYp&G%&lGB6JDcoCZ,odU-/mX%)n@odd ]pj"TAQh`%??Vj]rqu?>S745Z"p>#)!<*!4&N!?e>\o(i_t36J^Q2VR"p+f+fDpp3$NU;1%5(4H;e(EK ^^&2mN*f(/)$K^79`Y:t$TD:%JX".Es6d+;9f412"T\`0#88[Z?u^F8F*NG+XM2[$hsLF-c*W[O9.q4u $j?bL/36*qAq[e[i5i!N="k$`!sJrP:jAAs^B`9/VL)E1-kH.So)K!s#7hRu;fe&u^CS`%P%I?D*!Zfo 2a0]1BpJ>*!9*qW#P"p73[d*hB_6NWH$=LWG'%hGG(l6]rP'&^f%83`YFgbu>sBVE%ja5"7T=)epqQdB !9*qW#O%ab-OL%\!r)a+&1'8#9j`.Fi8rCqO^gNiWrT'u#m(DH*%Xm$KtQpSrs-u2:)aB?!Wi)s#QYDV 0/c[?J$p3[rqPWiK2!?h!s/K*%2U<H86BPHJ;g26rP'f$hW*PB]qpX*;)B*l"U58?4DB\_cKkK0rj6]1 ,8h$t"WB*X6;CsB]_0#>ci3qLr3U?"$O6h:n,N^p#7_Im:2u6,rP&B\]a^BF9f=+#!<WK2(e\t6n@oCV `i=Z(@piJ>?=e&!q0;g_+*VjLFEhe:A9E[(^<c-Fs8(-GOEb5.3&<ik6:=^`NV'scg&D!Vn>KhL$O6h: q#CNu#o=pE'1cGOT>J_"iVrAoZ&E9_,mFMT!gWh<!.k3&!4r5_!.k3&!.k4@!"TGZ3)FCCR&dOLgX3ED 3#(ub+:BMcAqcPKY-,gYTR9E]&-;h5!WriM01&ZMF+]UEV5aBp.(6UgUkWMO-Pm3q!Wr`C*\gfERBOZm p%HIG0*)%Q!<F$-ICRt]d's"VpT4\Gl/g]u>Up'G!#u%B"U5o9G-9?CbdO_-gX3fV4W"2%%2gK[B8EDR XUCeI9cP0094_sUBk@'LrF?IL@UWY`LSD]5aM"[Z_:[o0&&"3N>Xg:]"pkq`-UVR(VXU]$U3K<J,=Z=. XL5F@Zdm4(N)V>=p])!0!sJlI8Tq2^bep]g\Y"1D0cLE#eGtX1$ipD3";OUedJ*"T\ZQ1-E^10B"Tnf$ !)<S"$P4@QIBq;Bf'DtWJ3XSI!s&E*#S7ap1eM%mJs<@O]=4rFZbOf@n'A%kAO.UN!s&H("Y!8rWO9:H XLY$O:b`t#!sK,O,WK.]TC8ldMd.S;#6Y,)!:p0q"VW+<9596Tr2gL)H:SeX"TnfA6[5rjf?q2%XUE88 k2!_!;)0X]7oo4k$=[LSAnu=-J<$+tr2gX:VNQ@E?V`m;)[c][6?oiif?q2)Xo5@,am%sDY@B3loDfCA 6uJR$\[nlPXGL7D,819^!2ol/";`^]@!Rm2Xj,_R`I^W'"SDa#!uj7(I#jo$Wu&[kXbp@A)$L!@!WiQ@ -p(12DLIJ1U8\!l.C-OlWfqL%1E-o3"9A]<)C.mkO/oqIo(ML56k97t!<EE_B;*o0eAeZaXTuE"kMXF* 4VR/^#6YS^1e2/0SG]JiVgo4P)[ZcO!X/uL+uWVPRddEfWek%8'IuIQDf'3$AGKa6A0>Al@:3\rQFG;b `3HGTdGsE8UOQlN2]`>@7!5W`f[IY.XTu`-kMNgc2%B<\r;d!82HtbDS#N`uYd_Krn&q,45U[BQOoU(6 JcLB&])[E_JcLB&JcP<@%hLL"M6OqI_Ot^G2\6Z8$N:)'!$hRH!Ws0%G.-f7qp;0e>WEZ?'+4mE"pk\W 0M5r,Oe]4s_o0"]X!jKqH>?\S1)po9#6Y>S2c4IVYem<&AP>KI-PQaf"pYD[>Ftcms5^QdX7rY%LK[.o $4dLJ!W`>j!#u+J&K*92TCMs\gpX#"><`i>'FY*X.77HmUV+5.WsG&7;(<qN7p9NtAJAZa@UN_]Dfpl5 anY/L\uVZnF^\Pd?X[JR7kPV^&h?@XJ>0Zfn>cbVECqB3C9RX:%.:d%E`=b.((^cR!<N&t'Ens`+[0\; li61jYbZ\O3#<8=#6NEUNrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!Vl^U";<%=:3<#@]qL6q:J*Vi#Qt53 !<irN,Vr&%H]kDLl/9k$YH"7_MfiQ8:I@#e('k$H"pbo5LtDY+&_!e7@6>;5#R1A<+?ESHRC1!&Ws=u2 8K7s="9SE"o)K"$,"#q"VnL4MWs"Ak3Y)Mq#mVVQRJ6a]l+$Ad$]S@].MFC!92\o"A+X=?A7K"SBRGo> \A?4orMpX3R>#`j;*QTM'G1f`,?:--s8V>npoF@o$B87\.L?Uo"p+f+qZ$g%"U>>kE4u8N$0AIWCITET $3p[6!2ol1"XQc`V7t7(We+MF*>T=u"T\Z#!"/f/!X:8aS`9><k,T>WBh'He'Fb0I"U>AJ-pUs\M4CWY `5]HhrMqBBOFV:Y:HKj9%g`@@(+i!aKr2PcRX.h$4";6X"9\r8(INf(s8Vi4WqED"S7,2M$k<^P!s&Gk !!icN5@B5B]>prMWr\>t%6kO2"U"l3*]I#:QEnL!Ws>>N@5oGb5>qGk!+bn:,\1Fp?t*bcF+'FckO[HF Yc=4FAmA_PAR\Y(.i9I-O6HWDm_&1m$C+mh/d`*s#6Ou-qZ$j'#7:qc5\#ccX1Q6VV43g-Am%GM&e56Q !<JDbJcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPmJmOq'KU6Hh1dis!V??r#8o<sHDo9ijorbiAO.=@ p&GC%1R-q>UO-,Q!Vl^!"sQW\Vq(e/pZ;ReBIjDJ!"'#d>Cs'.h3^eN!VcWr&Q6C5joUDi!rW*%!<iW2 #knZ(#S.4K$5tp3K:od$hVZ;IHWUA6.2N3`!!3a2_=6RtK-^R!!!*]V3b=i0eT`bTmJmP,8qEbTg>$g" #1*@,!!Ws)I\4C-hZ7:&m/RD0AA6-qT84ftoDfL.)`V)VX2!$:jk\7sX`-NJ$j$)&#R_qOICeHt1'dOR !XLl[nE'eN1^!CNmJm:t6(.Z5!I,U[!!NKK6uSgIo]?=jD(u@u!rN#u"S<!.#R:S=#ne1)3b+K$rT4=E YAQND$Ng,("U-&;E2(bTk5FEE]koJ2mJmLr*'S/9g9a?\V?!Cl#QY]4RGt;L*<Y^0"T\rZ=e=FOY>?)= oDf+!&L^4dQ,DMXjp'G;G"sLr!VQL!)edpQZ&<02"8Mp$!Z!e)PK)_Wjoj%a5na:[!!<TgNoU*#!Ji!$ !VZQq">Z,/joW4e%/g//!<`Q1#PJH?#RCY@$47@q:j/21akGk'Z&<6a0cg`)qu?m,,X6"5c1L-#`HF0K m/R+h$Q;NkdG`a$]T>/c!KI/3!.k3&!4r5_!.k3&!.k4@!!i]9(EkeBFdL5Lrs/A/F?'R0!s85t+9iH' 1-o&ZNPkSelIMS?2$sEe!<E9-%2'a<78mW9Kq\FZ.)FHij6,4B\s?tl('OmJ#THQ_R).GKs8V&G>q[97 $j-q`3'Kf4Cmt@<pV-^jrr35^QrkR?"p>"p!"o;>+ur(a>&TVCrVuos_L4`^$2t86/R3n)n@o@Z^791K :I-Zc0K)&c57Ke=4??&6=&N.4J#C9Orr3M]VKYa!0I.JJ&Io1$?%JjA^DP>3S8i1O=@l4nFIUGPs8VPi DE/16"p4o'!"o;5'KfN(B6]K>_s?4#WdR_n"TAGS!0.$e!<N<3/kJc9@tL2c#LBc9?Uldf"S_sk!<N?3 3*U!GQHAn$mB1Y)1*RA8!<N?+$5OmC79<u/ATNU!]Y_\3dd$PokJEO!6Rs5l#6Yen3^Q_VKY-I+aK0qo 0FRsa"UH2HGaS!8#LpekHW`T^&,H:t!!`N.#n7qNF-HO:&(.nMAkOs##7;V55"8LcQ1VfkiVri^mAOYO )'UUjo03RG4Zbkq7nHa$Lnaj_'Yr>G\t=^n;`u]T&dAah3'Kf2BpJJ.rP&?krr35eSm<]N"p>#&!"TVe 2aC)EGcK]`d^G9J4Vk'uVuR,*#nn:0:MYZsnG`FmdYpp?"p=u.q#C[$%NR2\:hG0b)!q.jhR%]%)?U'C !<EB4&/Zl\:0;@_Oh1M+.Da<`iTK7N_P_ZS,Qn;V#mre/MR^strr;u)E^(cd&-i@W0g%ct@>);d^AuUZ rs/J/DDhk-"Tn/n#QY)7%2VTSNkYJ,!R\RiR;5MT+:/&N"UGr<FHZ..$dZnpJmhVJ2(C783V,HD4Zkel ;-6dq@!7gLh#@<an@=B\75l\;*\]cC6rIWVoY1CZrr35mW+.Ff#6b2*!!NB(%O3nr'1l5BUVkL?o`*jS K3Ues(]sg@!L<_;!.k3&!4r5_!.k3&!.k4@!"TGZ3)FCCR&dOLgX3ED3#(ub+:BSgBS`%TY-,gSRrq7M %fu_3!<NE5'HJ_h<GHoBSZ)Ff-apOnW/GF^//elu!soV^0j/jkYK,btp;h2+!<<*#!>n=T\CoH[\,NN( XU!/9jkQb=.gPD@*!$*B!u*n5S&*%[]!'c@d_Kic(]a^J)(%^`Lo'UC$_hu@)&!u90/YRB1@d.00JH(7 P/,Poa0DkrkN1J0Tl3IM*"rV[#8%q'6YM=Rn?!@uGtAep6Xu"NY-bI?gtU/WB/L=s!#,J<#72PLJ[jI^ ^TalJP\WQ4(C:,m!07*g!<N?+'hjJ3p[$;<Xp:J;5S+5*!s/2t:'(V,&0=MnZI6nLnb(@\4q%Jp!<E6) "ptn].5sk2JYL#s]<\QC[(4$-jOh_KBK6\,!W`?+.8YGl[CNfK\Y4@H0c^`+"Uu=p3+%3.n#ZeP=sOCY "9SE"o)K!u%N-]V?%/:@XUh1Q8/;L8!s06*GdH)TdCStP$d%Yqh6h;h*YB86.e>A%0J>(85=ngaH]Y*& XV@q=PB0Mb0dRbO$j?\H6?oiif?q2)Xo5@,am%sDY@B3loDfCA6uJR$\[nlPXGL7D,819^!2ol/";`^] @!Rm2Xj,_R`I^W'"SDa#!usC,J!-M.Wu/ahW.\8/(^0m?!<NB2&K)iQ9k/@&R&-k^XXUE]\$rZ0G?-XE %g;q:&/lfcD3(a1g@Ft*O@0TZ!!***2.rW6g!n$EorSJ0kNCdEG<HW+!!`T7(ah4EHC=]5!N1GW:E'WF !s/W7(a:kAI%'N+$B&7B%2^6>2Dm?InhD1>00*BlY1:qA\uim.k2a1*=>V08$Nq&,F0+!Ge%kUX#K#`g hmmM[%JTo.!<N9'*_h3s&(9%U[B[Kqj7U-66lQaG"Hib:!.k3&!4r5_!.k3&!.k4@!"TVr>)BK%e&%bo <]:R(&ISL<qZ%lB!WiH=5'==$q>/I7HX&TK)%[,W!WrT0%2gHI6sb/(YIqccr2V6CS<A_M>!ODQ&dngK +#d&7PH_p%P\!NV1+*b?"9o):-!Qu=s8V/eri>do$AVeS-417k"Te]*mf4=0"ptkg>+YEes6[LqF'CgB (D@/Z&h-1TJ>9chn>cnZDFkib*[E<m0erDX'JV<q/i#CO7Uh=is8VQ3Y+pSU<(@Ha5<:JC((:<X.n!]o U:\&,Ws4`)800R&Z2Xb3o=gl:=#_$8'+4pE!W)j2"qht-7WP9\k0LQ;V0lH*'G1`X!n@:3!"9#B)^mm] PgTNk]r7h6L0c\E"U+u/q#EDX'IGh:G+?=\TS$TG7Q):n"9SZ*!sK&D)Cn$PDNhQps6%\9X/2DWR"0*d =%kY"%L*+B#S]dbfDbd^e#S124;J;1"p52T3`gHl[D_R8#FBF&*=)fO"8W#h!!``M3)t*hZGHI>"H6hO %g`.@#9d'7p](9X\Fcg/NE\q'%j*,G.P!1D1(,fi/hB"[CPegn`4c,M'W7"6=?J2](^pcZ$O\.YR/6j_ l+$MhrMp9b>=^4M%h&XD!<N&t"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!"oG]8p-uEcI8eF>t#bL'Fb3H !Vud(!<N<,/RFt,p%[XL(lE#s,T.:)"9AT-"UGeb/3HmMMQ42&`2W^9.Arf)NI,,-0,kW9"ToPm7U_"J ]rd`L;+E\t*=;oP#7),5K%0i#pVj0*WsYA*:G`Ii%1!%:!Ug!o"WK9rE0INCWr8t!O_P=i'F"^D!XBc* ;fJ&.`UKo5T7'co'c\AGr\=+%,;Ci(0fD0^;gYM+s8:Q[Wg%4#90Y[*1+FFc&KX`1kPtSM]_&63Q!I!7 $4dLL!s&H"!!`Z6&/HosJ\)KNim=d&R"T-T8iIdu#R1A3P5p17JcLB&])[E_JcLB&JcP0<#QuG`]\&'+ %fu(u#Qkc&EkL4[2@T-V"T\uU8q=hWjp'S[YEMd)#58*(">c;&`hRl`%0?8)"U6/BFJm[gk4e!?[qI;t iW';f+%0q:d+t']('411!YJ>FnE'e),m!-.$O\I_G+?A%h6D/s,68A[p&G.+;o.tc&;)5/!!!$0*A^uf d+="9&-D;##omHM]?f<fDBoA3!/U[[%nM/A^Y%EEAJFM3#T70e`jD(\+U%?9&IU'gL82N8jPenFc)uIq 2])Vk!!irY97=D3N%tY4!!3EfTCCtEW&+VL!:Bgg"uVM?joK]Hq#CR$+[g7CdIcQ(]koJ2!TsFd!<NZ` CVB]/"Q,8*&cq_,"U-&;E2(bTk5FEE]koJ2mJmLr*'S/9g9a?\V?!Cl#QY]4RGt;L*<Y^0"T\r[>+aUQ X%sQ6nc/gs(HQ<2hYlRAh9NO#C+ftrpAbI<B\Ch=Me*b.q#CU#(-,fe`oZmU"OMff'*7.o!s:-+j8J*@ La2s$pAb6t16M(g!kUf+jo>ko*^aV!ZI.dOOBXLV#Qac%"U-#5Bq3H?jo`SG2[o*S!<aDM6#NROi6Sp/ CEWk@!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;Fq6tH+#6b22p](s3&gK+r=DNl4p%.1dQXDNQ !W`?#!!iT0&g8qs@XOR>^F$b3o)ACF`/@J4"U>;=)c(XE_:\J]s5BAO0-:o;!t?J75"8RhRf:(r^B!Eq rs.MM=<e.W"9Roi(^M*:4@`IiOi78!s8Ki^5n=5-$48@iJu8%P$e<"^DcAnI%L37G$hau>$O[:J#R;%r 5!qqFEh:ANrr3MHJOgaq%g`=@"pkVh?%JjA^CAT)S8i.M<^obhFdgGOrr35;H9i2S#Qt2*!"o;5'LQA@ KT;\2_W9+QP%mB/"4[C3!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt#g!##A7!t@4pAq?AqqZ#o`F@@i+&dA46 $ipG6#7rO[;cmUUQb<:3,fS9qpA;U^=?.fK$3V+q3^Q_VKY-I+aK0qo0FRsa"UH2HGaS!8#LpekHW`T^ &,H:t!!`N+"9oN1Fd;m>&(.nMAkOs##7;V55"8LcQ1VfkiVriZl(;6/n-f[4$47(H%hfd5>C2e:^D+K7 _4c-Y5:$[@!s/K2+ZDSS<,%Wm^\tnIiVri^kal'-$3gV7p](g9,r\(`?[/U/jjLT"@m(U.!2ol(!XTM[ /5L&8]^Yq##L\Q+)[6EH!Vl^$!=g,'2,Ik5[L;Bol-ubU6P]_)!<N-!#QbGS.6(FMMR`Pu-c!OLrr)36 U1Z.`#7(VC4DB\_cKkK0rj6]1,8h$t"WB*X6;CsB]_0#>ci3qLr3U?"$O6h:n,N^p!X&];6Z8(#rP&B\ ]a^BF9f=+#!<WK2(e\t6n@o@Yb,Tts75#J^#71b2%/pVC#mghF,<8%Y;e:`ukl1SmhO@k'(_R5^$R%Dk 6rIWVoY1CZrr35mW+.Ff#6b2+!!WH)!YR1P6P)spJZ-N>o)Ja9P$Bgj)%-J/!.k3&!.k3_!.k3&!.k3& !:^%"$Qh?)CP/"TZJO?`[;%Z8oDfF1-q\95S#iit`3bbH7OJ`LqZ$p'!='W&:1o$?V>@;@Y-#ILS9@IO &H`(@'-8l2H^V(Xjn8>gE%_4l!!**;7t%o#f$Lo*XnSq&cKXHGVd(_WkPuG/1gQ$B\@K&Og>(,lE]k9@ ":Z4q6YD4On>utnHqG1]#6kA;o*>s8#m^eA"sHcm\^o9R[BeTMi6`'e7N;I1!<N6)&/lo`BSiVUXV7CQ 8JW=1?\G#NYHY@ijl"C/4r!bl'E\OH%jtG:`Ql?1Z)t0d?o&r>#QiNVNrTRh!WrQ?9Sq0km*WAH#Fog" &.&LB!Vl^0!X8uC*DCgcd`^P@pX=OP#m(//!W<!+!s];O,=l^=_83mqr2g72_U[f3P#*)"rW3o?.8YGl [CNfK\Y4@H0c^`+"Uu=p3+%3.n>uqqLfkr."Tni&!:p0q!soPX.T(AVr2gL)H:SeX"TnfA6[5rjf?q2% XUE88k2!:S1(40b"UFQ'#R1YQ,;;PuKVA@H#HjhN:`pM_#Q4]0!>RtIZe<sX](iE+XTuu4k2!4N0+%7N %iduTS[,f;XLP?g?9'5D#-.a&!"]8L01TDqOeo2)hU]Yt80A'.!!iZH4C3W(UTUX&_S)[l<oqZ$s( !<X#d6X=koTWJ$m-a'SZ^8Qcj1)L5r"V2Ls8SsNh]\;rMmZ9gI!!!$##;p.ff%JQmY4\n%\``/6aEKc\ li77l#S7k#9lcHqXT>>M%8RoM"p4o1$lC0H>'ue-XTshl.LHFd"pa`*rWs8D#6kc'CnT;-dDW04kMt<j >V$-\rW*664`RRTf[IY.XTu`-kMNgc2%B<\#6=i,""@i_ndkZid^?C$iUccI@OVE^!WnMbJcLB&JcNC_ JcLB&JcLB&nGj(210TO=`7)SrCfWJ+'G1]O!W)j2!<N<)'g?`Im.gA%V0uQ0(DRGe!rW*,!X&`7(c#$6 S?T`EqPtsCX,1IZ-QX-9"UZ>1;/VT%_P`W09LLW`'F"[E#7)V[T)AWgjL"oepT"XV>"0hG%grOB!<MWh *!$*D"W^O1oDeje`M@KW4VAMD$3Utj6XPA=]Y![6"cd1Z'F>0G$MFc?#R:P;#nRjl4)D%ss8Ur^TPmn" ,7be4&-i@B!s&u^6sbD<]=[R5#*Ngm*&;96rr3H&^Ro@E6R*Wh%0Qe8!W2p3"r/C?:O/VU\uqs.VL;T) &.AjI!S%12!"9#B)^mm]PgTNk]r7h6L0c\E"U+u/q#D*4'IPq>Gb2dcSpad85r0Me!s8T*r;[3/&g/o$ Ei8%!s51QgWt1kiJS&+X0bFTo#7)#6LtDY+&_!e7@6>;5#R1A<+?ESHRC1!&Ws>&69-+BC"9\K#o)K"" )DFZkLoJ)cWs"Ak3Y)Mq#mVVQRJ6a]l+$Ad#E;qY.LQh"$N:>&#n%"C"To8a7V.@P]YscL'W6^p4;853 "p>&5#7)MRR/6j_l+$MhrMp9b>=^4M%h&XD!<N&t"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!"oG]8p-uE cI8eF>t#bL'Fb3H!Vud(!<N<,/RFt+o_@OK#E*4b,o@7&"8r3.!<WK2%4=SXOfH%2Wr&hEWiM\4<&,F6 '*n^W/Oj0&VS0+#H;R0o.NJj!":#2K6\<hfs7aL4orAFi@8A]g%Li[G!<MWh#Qtqq6sbMB]W1q2!Kh++ 584;*"9JfL2cF[]ZGl=6$(lH=,7+_a#n%+6#oEpQ"pP;@',iB&PM6':n\V;\?;*-p)\`\Z#RCbX:64N: s6dPlWsY+t8hLG]$O6b7!W)j%"qDCh4_gem%0,q5VP05k:Ja,%&Hi"6OoU(6JcLB&])[E_JcLB&JcP0< #QuG`]\&'+%fu(u#Qkf(F2$I^1CN[P!sL&[ZMN\ejlE4.'a".1#m<&Kj2Rj@=UbE-!!NQN8T^l\roWt; "1Mqp#N>^j!>-teNl^%B8/21#!!3a1^[U@eIindR!"',b;1,LtfpYnd"TSSr!!3a2_=6S!JKk0q!!*KF /6@tZfU,V_"9J#m$3;Q*_U$rpgLhQ/ciAn&"qO7RT>0%9!G)u4!!jHQ^;[7:F;tDQ!!Wcb@u%56jSe3E h93:%8JCk!#R_qOICeHt1'dOR!XLl[nE'eN1^!CNmJm:i.Ydl`!I,U[!!NKK6uSgIo]?7hD(uCX!!3[% WVtr]hJF86p&G7!+[g:DdJ2l&jo`;60ad=K#R)23CT#mn7h;HsU]:Z$(.jqRXB-DEmJmCk$S#AQh#j]N ('="+"9B</OPK`q"m+gdB-[]U!!jNWg![-`AJkUG!!WK?3FS,kjn7a=d"F[u!TX4_!?uaJrT4-:,QIl> !!39YOmqK7\NU5Z!"/lM6>;h/jgAn^%g)M+"Toc0Bq3H?jo`SG2[o*S!>Rj+BTg*chSuLM9+Qs]JcLB& JcNC_JcLB&JcLB&nGigt$l:'I>'61Rrr35s[W4A4"Tni$!"]DU0g8-3D3;^,n(bmE>qcN]!r`3X"Uu7m 2,eFMSt)46Q(P%c^?bh!p<f..,n(4k$6)caR).GKs8V&G>q[97$j-eT002O'D3+[spT"tEd+$LCE'bHI "Tnc+!sAc3"U"o"!!rZ5+ZVk\=Da8?rr30#^jJEY#Q=u2,>E6GnuE5$XJhA*<^A>X$NpV;#P892#6tD9 &h,q08m-,'ao;;>&&*EZ(D$uZ!WrT0#U<)cRI[BhXK8=`FB2148O#dRFIL5:rr35FMGklB&dSO:!#,G: "puPLBPi]qW4'Ut`hn8k4WX[T!0.$e!<N<3/kJc9@tL2c#LB`6?:HRc"Si$m!<`Z9(dh_JM5f;/s6Qe* 67a2i"T\W*!WrQ/"UcJ79ikkFJWuLiTWboGf]`4SSS_%Z+UeJh/36*qAq[e[i5i!N="k$`!sAiE6>;GL Wsl)2Rsn^51EHo(!<NB&"9\i0!s/Mu!!`N-#7MMFFHZR:&(7tNAkFj!#6u+u3^ct`MtF%V_9g]\YBEAV #mp/.!!iH,"q(nS.Th(erP'&^e\7Mk<')6/!s8Q)#8o*S6rn)]poF@o$c13>e#mj_*X;iN!VcX*&1'8# 9j`.Fi8rCqO^gNiWrT'u#m(DH*%Xm$KtQsTrs-o09c=0<!Wi)s#QbYf3^QeWJ@>dLoAn2nE'P3:!r`3< !X]S^.7n'"R@Kb4QCF\W]$gWYr8k&"3">iq)%&K?MR^strr;u)E^(cd%gN4N-T=4cA:LTOWscG]eC;6f ;^r%X"pOr."9S`-!<Mur#QY&5$5H'MOM:\.!R\RiR;5MT+:/&M":#Q&AVorX%'6S&Jmh2-,7t"]"pX]* %0m+B"UZA15XeR_Lq`0Rrt!hM=sjsm#mCSP/NH-rBnc2[$baj8e$XQr+pS8R!rN$'!sT&@-::I$%p*Y, [at9QqVeAn7OB)f#a,1>!.k3&!4r5_!.k3&!.k4@!"TGZ3)FCCR&dOKfZ^L02&#`b;?6h#!tR1jJY]NY ['%0GMdemr%KZY4!WrN+!W`H<,rn\-F,6-MTV\ZiY,n_BbIjQd4WFV,#SJ.4=aQR?a6!!faD`d5!!!$# &iX-STV%dBrgEMK$)FMqRVtJ6"TSQ%!W`B+rWE0%pAc-5!W`oqBq)rY_n*&(g<[?K4;\)$#nn=8:i2'[ R0K+KJ6k&C#5SMq"qUq@"U#i<HEPK;aL/>/iRu-OG<cuFrW*9)":Ptb1K&+KnsL5]RX\Nu%i@-%FH)fi Xg-@;jP#Gb*W?'>!rN$4"Uu7j4(XMk_n3=\Y,?bK-5[3s!n@:3!"8l0!sB?4M:)(adCHCbS9$n+#R(;2 q#D-4$PXX8=Fmcta5Qade9j:_!<N<'!WE-X!sK&D)DtB/M3!piS>NKqZ*h6ff]&?+-jp4^!X1#LIAsWb \?*67HVcF;%KckA&fW>mAq]]B&"8>e5SsY-!s/K*"9eu4"98N%!VcX"":Z1n2d1Wur2gL+H:SeY"p4o; 1L,^-T:MGCR1#ghVOV`u,maVT!sJ6#!!W?)#7;.e.m[WsT)Gc*Y+p><*>/\_!s/N)!"^qkLS(0/ReW<L R0TOdVOV]q+p[`?%iduTS[,f;XLP?g?9'5D#-.a&!"]8L01TDqOeo2+h9j&g7NVd.!"/f/!X0iBEh0;< \#i-9\!_5///8?i!WiH+!WiB(%NdDm=`&YOR@U(PXKJV+\'DmoK2*d&!<`lM,tVs7X1[0Wp?n#1%fcS1 !<jlHH(gk#S!s#<':u,#TS$&l%KHM2"9nu3!s&H(!VcX"!t5qj1KJaer2g!tJ.59o$3gS6!soPX-q.Tp nX0fSNb_*)"pP58"U,#4o*,j3"9f8oB:-ifb.t.(inW"G;^_kL!=/Z5/QI@pTUhSER0TIbVO`$*-OTVK #6bJI)*rDLnIP?Pa10(NkMa@,7i_[6!<SDaJcLB&JcNC_JcLB&JcLB&nGj(210TO=`7)SrCfWG*((goQ !W)jp!X/f:+%gsqqYKa!VLD`0'b_#]!s&H)!s8Z0#7r.A;f%#JSu/g+`QGj!WiM(m9e.D.&HrI_3)ORW Yem<&AP>KI-PQaf"U52N6ZT9L^p0X5QM6[PE`+b1%LrdJ!X&W("T8E&!VcX7!X8r@-Wuu1s8VN%UiT^& ',VDk":ZJ087-V"Qh$FJPa$>i0FnBn#6"l$"r%4C!s/Z8&f<N@X8W(ujL(Xu=[F5@*>o=k"U"l,$m.5r ??_@uQ5PpOGZcm=-sE%ss8W)8TmpEK6Sp,("p>#/qu@E<*]-Q*Nj-X.WMZSjIT\E8$3pY6eGtX1$j@1] -pD4,dJr7?W2BlT>r2ik"Tnf$!#,VU1.u5:WlD<3H<*U$0,k0""9Sc*!ZD(B%2U6F;K\MI`l,a+]"#&E TUCsmB2UW(#Q>#3'M!u2rr3SZX+atE((1BP!s]\p6<A,\Pjt%MP^m%#(^C6J!s/Q-"9eo1!<WAq!!`]J 2cF[\Yf$C>%uFdV%L34C#8o[@Vocc]U@a`VF]C@;%hB'RrWVlt$O$Y8!t?VF@"G#_`r2qPVhAD9%giRF !s8Z0#8o^BVocc]UA1&QQ3h\62]*#7#m:80q>^^$"U>>kE4u8N$0AIWCITET$3p[6!2ol1"XQc`V7t7( WdnDE)AEko"9AQ#!"8l2#7;)'Br1CpptD]9MeGO(((glV!!*-&!sAc3#TPQjAU03'U9(fAahbEfWh"05 3$BC\$3V.s7q%+K]rd`L;+E\t*=;oP"pY\q?Br^O\Z#.d&;+=T+V"ti"p4r1"9eo1!s8,q#R)/(:Ml/q _5dI7!Kh%)58+5)"9JcE.6^^KK9Phk"dFXJ4rXb+"p,&8#PSEJ"U+u1"UP_S,ufu]s8Vf4WeOkS/fboE #mLS=#SfC5T$"sXV"BrXHW`EM%LiaLrW2rt#lt&9*\BWaLpd*jpWfh1Q>g;.3A;N`!s/K(OoU(6JcLB& ])[E_JcLB&JcP0<#6Z>_]\%s%%da6%%4Y;5`nc%s$1@j*"WTjKLRYKbcIgt7Z<JLW!Vl^%">c;&`hRl` %0?5(":HA2:1O9@pML%(,7EH1$3M85BUmB(Pt2Sip](?s(ejL<")Vm,"loXj#:<&bW7BOb:)a<-!!33> 9_*''D/Cg.r;[3-$m%rmb1s1C8/_^&!!rigP0VY7in@iZcN&e%"qO7RT>0%9!G)r4!!r]SFNV_-Mej74 n,O"--Tb7HO/]qDgtgJu[9jpTq#C[.,tiZtj,>_up&G+(47R1iD*8:!!:Bgg"Yu/:joKWFp](F'+#HZ$ oPOb)-O^%9!!3QsV>]NXhJ*u$!!ETM2,%NTDZ+GT9IC5LmJmLr*'S/9g9a?\V?!Cl#QY]4RGt2H*<PX/ "U5u6Ej4F'W(@X'n,O"$&i*pGPc;7:e(`j-GVop3p](R=B\Ch=Me*b.p](F"(bJ0\oPOb70bOTK!!<<Q J)gLi!Jhs#!VQKo$T7Hl!c:C;j8]Ph)*28k`oXO=/d_XR!!EQI1.bjFD?Ecd%0Gtu!X1/c$&kt-g;f1T 0+nAG!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;FoX8d""pG)1q>_00!=C&77o!<-Q,E1Zf=d)H 0*_RW!u(e<!<`]?'d>Y7Ap8]SI<^I0W4q6irug6l?nN3.&I]USG*p+upAb0OR9_Hf'ak*J&g/ej:LSGG L%g97MiWpYE(qtu"U"o.!<i`;&.8[Fp&GF#!=U>=7S?m'QGie&%/[ee5n=2+"U5c$<d4.hre:c,APkWD +VY+_"9e9!$NpV9&LBG'8Qg&'ao;;?q[^;`5S4G2"Te`-!sKK!<d4.hre;88APkTM3&rlc??DURg@tXI d%"]0/K50#r;[N6#S%S&<,6]IV6[\Le%:r`:c00neGtU0$NU;1%5(4H;e(EK^^&/kM-WP')$Ka8)$1$P 'I6@cFI9])rr;AbD*BEi&-W(:"9f#/"Yg5s,r\=o@W-RCJV9;a\&m4oe#e:26n8iP(+_L5;J(TokhsO` JQFN6!<E9)%kUOoo7d0u%Y&:p68Bc##QY#2"pbM@"UG>;"9JW"!!`Q1$kjm_FHHF8&(8"OAP+`u#6b\\ /Ncd9FnC@oMiWpYF\je,"pXQ##m:A7#7M(g<I:,3^D+K3\s-l'2BE&(!<E0(&K`Se:LJ>?L&H]5MiWpY FAO\+"Tnf,p](g9,r\(`?[/U/jjLT"@m(U.!2ol3!XTM[/5L&8]^c%%rQ^9p)$L*D!W)j(!<E9?1dsu9 AVISum-rrSTPZn.rW<$#&cr+>%20X68R?IcIsu`pNh<i+rr4/9\9C1R'G1c]4DB\_cKkK0rj6]1,8h!r !tH8!2b7.jK_:$5M2mXWJ6G#S"pYA=#mgkC#6k;4!Vl^$!<roD*D:@1^AYeId_-*XCJ?]/#lt&/":ZhQ C%I&XL'iHL=[Oqk)%6TM"S)^)"9eo6*A]lI;eCm#m/I"qeWNrW%grUE"qVe+3_Wk$oS![1NfT0E<&>Bp !s/N$!!`];'HK53=]u>ULSN/dp#+&rJ64WH&dnl+!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZ.mmP W+%Rrp]+(j!WrTA4_pM%`Pf?k]r-E_3$/V3!WrQ/"U"o.":Q+m1-e`GE.*S.V5^MuXi/uFb`YmP"p"r@ *\gfERBOZmp%HIG0*)%Q!<EWU5[SF+Dte/`D/*Qa74K#T!!*-("U,)9#R1A5p])97!WrN?6[#ZceBPP- f@J*OC,m%1!X/uG,<&D0o5FVI"Bdl3#mC50m0!k#)b"hF_oK^'ZJ40^[K:8+(&\.=!!EN9'I,P4B(Ks? E#;b@+pel57q?t-U8kH6g?7C\>:KdZ"9JW&!#,YQ,W&8:Q+XZ9ZELF)F[[,Y#m:=[!07*g!<N?+'hjJ3 p[$;<Xp:P<57[u&!s/2t&d/ae01'<-Ye.m7p\3-_3!THbqZ8VW"U>AG+YuYmAoDsIP,5_&\@B>pg7`4> (CpcR"Y!8rWO9:HXLY$O:b`t#!s8`8&fi\t?Lr+7E"6;G.1ZO`!WiB*#7M(M#6=o.rW2co#6YS\0LTK( T_to%V0b`K$3gS6$R7l@DJsFaD[UGsA6_YW(^C'C!X%op#6tk]-p;!jT`(u+Y+U&3)%HrV!s/K(!"1#9 >]+ItpM^"K#B"6d>Xp=\"nVd**(4\8ZFRQJ\?(Nn3?o1AWrT'u&-Ne&7ppV)V6/"rcFeEk*<c0<$ipD3 ":-V_L:kLF]rj]:Y`WQd-PHXa!sAc2"9S],#SJ403D*LiG_M9PW2m##[+a3[Y\,m,!!EcL,tVs7X1[0W p?n#1%fcS1!<a?";f2MP!-%RK%r,``:Ga$t!!3<2%grUF!r`5q!!`W;*\TceJ=HJ=!NCSY:E0]G!s/N. $P==17:#M'rbr*R8LkGW!X&Vl":tqt@?A:E`4W4qh:K`&9d9l@!=&lO4'6?;E,P;d#B"9f>tZgg#5A0' $5Y$I=bF$E&)PRG`8TIcTm]im'ES::!KmG7!.k3&!4r5_!.k3&!.k4@!"fbt>)BK%e&%eq<AY7%&IAI= q>_65#S7b%</JWnq<>GdI9AHC&IepH!r`<$"?$Dk(F:n*<Fp6(Q`eEog!-k'OD%TQ-R'62$6V<+DNh<A Vj(ad6o$,("p4u2"VWFZD16nXFT-7RE"H5A//8R"#6P&2"pYD>"pP50"8Dj9":5VU0OLC?s8V#dUi]j* 'cRns":5hg1-eZCD"DTSDJj;m3Ze_5"9eo2"nMj%!sJuA'/F4'rr32d[\.PB5917U)%?`P!s/H.'dGJ" :g\&1E#NV3D-/qF%j4Ms^#\k^`heuB?s?5\)?g6G"8i-5%OX\WLo%l2W2HJkVL;T$$O?n=!S%12!"9#B )^mm]PgTNk]r7h6KO-D?"p>#/q#D!3+$<eVT")n@QZZ1s4"_BU"oSQK!s8T,#S7aq1J(u"Koqt+Zb*oS U7@U:EEPLF$4@1J'M!u2rr3SZX+atE((1BP!sK8X/Nc[2C@cBVDJj;t5pd*G"9\f.":#2>#6Y#/rW2`n #7)M;?@nl_`Vcb=M.&CRr<3E<.S"3&I<fu-E!fl@/f+s)#mCG7"n;^%!s8uY5$N?([_i!D'W6Xj1^aQm "9JW,"9fAe7qmI$H$/n$rGW'K7P5Jd#mUS6!Vud#!X/f82/p8.rs@emP\W`2$jm4AWrT'u&d9RRFeugt e#It+6l?aQ$NpJ2qZ%$+#7V@h7!,U-rq"72$&WCa+;,.j"9AT'"#pDd"U5S^00N*;DLIVC^"M>l]W.TD >t$1i)[llc/Oj0&VS0+#H;R0o.NJj!!sJf7,!K=`IX-,/E"?JS2'!/8#mLM9"pbP@"U"`)pAbI&*][DQ S[ZS<rMos[BFR-<"9\f.":lM(4%`[ho5G+UDJ`cM.M2jg"U"u4nH9O3%1j[ZOPTs:r5ksn@S/'k)\E8Y rWNN;-UVKrI<]o,E!]lC0c1<+#6Ou-rW)ou#Qb_m8S<jU`:XYaYa^r'APtW@+Vb7a!<N:b!.k3&!.k3_ !.k3&!.k3&!:9ak"=7QjfS2ErmJmOq+%U=CceWgr#4;I%!=0Mp88!aS^XhGYF#X^5q#C^(1R-q>UO-,Q !VZQr!s]5IrYG5D!=K"f!"&r\<.(aph3CMF!VZQp!=JE6!u2Ob"60@g"X$0MUXe"W8/D@.!V??m!=JE6 !u2Ob"8`'+";<h>a5=k0GtA_Onc/t/8Yk"oi8iTt'[Hc9!!Ws)I\4C-hZ74#mJmP"1ksT*Web=(!q-+" !XKJd3`q!;db3=#a*B$8q#C[.,tiZtj,>_uo`+sso+hEC'bgoE!:Bgg$9XXPjoKWEpAb9t"q)%8('4mI !TF(\$:(EcjoXCP)"R_0!s]2Gp_NfD!Xo24m/RCq*'S/9g9a?\V?!Cl#QY]4RGt2F*!5O."VNk'NPFBR U-oOnmJmb#&LBVEH^V7dhUR]]*<lQ?!!jNWg![-`AJkUE!!<9+$4uhF!Y5J9iW'&c1l12jjoL2]!!2`m !!Vs0!u2Ob#ibmm!>I@pNPjk^?mc0[p&G0s"q)%8('4sK!Ug!j!>\7a#dD4obG/2j%0DFfJcLB&JcNC_ JcLB&JcLB&nGj4*$l:'I>'61Rrr<#hZuJ#."9S`&!#P_:!=^SM:/P;ASAXj[e$k*7/Hl1W!sJl,"#L2e $4n1+2FUVSBk_^BS%@8Os8VMdC,d:Q'+PsWG*p+upAb0OR9_Hf'ak*I$5+:(0g85/;>3p$;Gg7d5qX)` !s/K(!XK2K)%m;\pAk0n#Rr:P8PWK3S&G=+%/IYc5n=2("To/T1.^n3#tI'1,T@C)"Tebp!t#)2%O3nt 8m-/'bPqMAp'.sI4q.f&"9&<)!WifQ1.^n3(e6Y?,U+N`/3[BaR)-nskkru1Gu$OM'*A+4'Eej\+ZW\D Ks%bl]Yi!uL0R+u('<"dNW9Ff!Wif`8PN,nJt'O\cE`726n]A[q#F.k$54I8;f$labjYT3mA=V\-Q<R! !<`Q3#mLP9":5\Z,;DGY=D;bqJs;t=`U2HpRrqXc'Ef1&3^Q_VKY-I+aK0qo0FRp^!<NNE/OJr(%SAr@ -lj$2"T\]1$4RFQ"UtnJ"p4o%!!`Q3&K*,uF,p15&(8"OAP+`u#6Y>F)'^gt8G#aa;Gg7d6SBJglN7=p #RV_RGaSHE#f+iqNF5=5)[63A#QOu6&K)fJ4@o6ErD<r#;,C%T0-(E%!W`>s!"TVe2aC)EGcK]`d^G9J 4Vk'uVuRM5#nn:0:MYZsoDejgc&,13"Tnf,qZ$s(!<aK09hnf,MRaqtmG#LGBg!+1!s8Z0"9S`-"9o2A (F1_":gI^JEI3hRaRoK3+2NJ!+<2+-$9W$[\BaF>s8KBG59h$V"p,#?(Ek@j7J'Fk;Gg7e8MhV'!sJr; %1N^T%13:A!Vl^$!XB5Q-;\W=^AYeId_60YCJ?]/#lju,!XBMk5k%VW90b9]*>T+h!<V`m*WcEK)_jHB ;e:`unGiOfd#M!F$O?n;!soMU+tl#KoMGuo;,C(X0cpl-!W`?"!!`fD+YH8hATSHEVomrrji+!E>sBMA #mCEo!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZ.ILEU0fYgp]+.m!sJlJ8UIc"gs3F5\tO@C0cLK% !X&]5#6b22!sAuD(a1Fg6s=M]R\QmaXhj)_k.GFa#QY,B*AL]DRBOZmp%HIG0*)%Q!<EB>,rRqO5Q*nB 5ncC@1bU*j$j-M3"9eu7#n%+I"p=W#*!$*D"WC'e_X$:5\?FH3`3!Z1'`e@<"q)+e/332c"Yq55"Tnhk !t5u2CnA5S^9t<"eB+ZkA2Fqu!=8`+!sJo<'-Jhdn3ImH+V=kd,<Ab>K:/aBZbarBTP-1m#mCD4r;[N= *A^8tJ"*pRZ*1=6RVk1t$3^M5eGtX1$ipD3";OUedJ*"T\ZQ1/E'=a:"Tnf$!#,SP.R-sTO05k/j7`2p GVoX*!!*0#"#^8a!sAc5&K)cD4%WI`I@7Rg^:C_^c_u"X-5[-o"Y!8rWO9:HXLY$O:b`t#!s/W1$P=@- 2=NmA2C9.E!W`?'!X9#G)%d2Y"T\Z*!VcX""ViCH;K.Jer2gI*HUnnZ"p4o1'I>P"5="g+#<k+(0I.ME "9&Aj!s]#@)'h4KJYE%E'<\!O72?=;"9JT)!!!0;,rInO5kdSC5mKS51b^3l$j6,%%iduTS[,f;XLP?g ?9'5D#-.a&!"]8L01TDqOeo2)f$(RE66$.(!"8l1"U>GpB:[i5eAJFX^9!2u4!G4>!WrT2#R(>4!<`]= 'HSYY5#Q$@OJ&PRX0^OFkh1_]('"FG)'qjkO/oqIo(ML56k97t!<E95*\T]@5X=s-&O8B80Ie%Q"p"l7 &K)2h"T\](!Vl^#";<(A9l,NUr2g"!JIPBp$3gS6!X/c7%iQfQn3I=?-Pm'k!WiH*m/n:70Ns:A^;7C^ bM(4TH:/eX!<E0#";2k55!V@(5mKS71b^6o%KuP,#7i+D<H4&'e-j+,a4'IrQYAlB)[lTGOoU(6JcLB& ])[E_JcLB&JcP<@&J-^$M6OqI_P(mJ1_:E7#lt)'!#5YI(a1nKP0a.'c`X*l=>^^%$3gP5r<*$%1'J(! )'U[p8QpA*]^"n<_5`i5<^ePd(CCKl3)XXXYem<&AP>KI-PQae"9S`6(aqI7r^?`QpHo*B-Q3I##6"]0 "pbYK%1*7DrWDoq*!Hff+Za8.mJm%2Y,$5H5StLX$j6bD'HJJP2aI"&$UI'D4tn&j"9S`/"RuR!!X&]7 %5)4nrr32i\Y*nF4WFtR(CUEK!Wi?*$ks^//iQ&f6QABX5X$kE&dB.8C7N,gho;UeQ\KNe73Vm<!s/N% !#,u!=G3Wfd)`&\W2c_E=tL!a"9S\T!07*g"V;V$5%Tu+s5UekV[%l]0aS!d!Wi)s3=.!&E1+#Pc)$_E :I[8n)@$EK"U5,5!s/Q-#R_1],;)#P@X*m+Z,+,QU7Ig'@7)+F$OdCW7u5drrt3_\Kjd(Z$O?q=":>b[ +tGH3o0X*U5X71P'aOpE"9Sc3$4d^X#6=r0rW2co#7)VGCmD3Abl"LLM.&=O"9eo1$5Y$LrC$9F#ra:P %LNFF"9JYo!so#1$R.Z6G+,eSrMp1$Jm9u8"U"r*!XB&J-9+C^6q$f;rBgfK.2raY/(!!WK.#738, ^&J$<jg(+d7N`*H#6V",VuRG6,t`<V^<Y3-J7(__()%)Z!<N&t$j$_L*@k!;[Jp0^\Z#soB0mXO%LE7= !sA`*">U&^#nIdm.5aLlCl5@Elf66nT64=23%5jY"W&d]@>1SlXdXQ57lr1@$3L>4!sTD_1]Bf66P)@3 +;5%e"p>#4$4[XW#6Y/.!VcX#"sH<HO/p.?Wr8t!O(Jh`&H`.<!Wr`@)C$^e47bfD5sR[n,o$aP!sSr8 $lr'%h>[Ehc)ZM-8gPT!&Hr:>"9SoE,WA(Y77Hi9#<F=U&IA[F"8i-!!WE-**Bn,%Zc:YD%]Gh^L1aUU //Sp)"Te`+OT9t5JcLB&])[E_JcLB&JcP0<#QuG`]\%fq%0>nt#n&b.O1*TpF=7=Y!"8rE10&Rmb2LC% =Y:$V!!rcaPiKcYHW^dYn,Ur<$4T(2NjmTqPXcGh`;g5J)E_Z)eCTRE'*?ed$4&1t_rKCi[>-@<o)K+# +^MJ4iT'%P<=dCUM#[_j8:I2Gf\Z^>'(5f-!>J"ih92aL@hSq1!"8o9,Ys65e(EF.Pr8sE!!irY97=D3 N%tXf!:Bgg&kAMjjoKWE_uKiE4JD`9!o@H%joFND#R)23CT#mn7h;HsU]:Z$(.jqRVG\95mf3Oo,[,_s bM`Mp5RcrY%06nb88=:"gY&H>4V@km!!jNWg![-`AJkTg!!<]qOlQE&!JVcu!Q4sG!>$k`LVW#P>9a:P ci=.W0l"'#d*g%HIlIu?M?&5.JcLB&])[E_JcLB&JcP<@'*J^[+ZW_KQc]7,s7!@72['9b!Vud1!<Eci :Jk52LS_oVjNOiZ<@\4S"8rB^"9S]-!WiH-"pkee5>YHrGEKJanGiOfY];uV+;bV.:Ni,Af_5@FiL*t) *u,.b!X&]6$P=-nrZ:YP";qdY!s/B$#6P;G*$Z=4#58*:!<N<50hG&;A:gMnrr<#l^3i3W#6b21"Ubq] nfA,Y*>oS(%1*4@!<DQh%KHJ;+>c8S>&g"Srr<#e#IAD0#R1D5!WE'%!<iiD)Y+pf*??"4&If0_(EGJ@ GalLb_8FUL[uY&m1)L)k!#,VM+"]`_F-XDP^;%P(Uj#Kl,n^:0!0.$e!<N<3/kJc9@tL2c#L0N/>!jnZ "Si$e":cA!3`g6W^!uWQs6HIo3$fFO"9J`3$Od=F!s&E)!sK,M,:uSsB5WQkW4_-Nca&O>4Vn5:/36*q Aq[e[i5i!N="k']!!<<0&/apY%ilT)&e56Q"Te]/$4dga&d8m\%1!+<q#CX%$PagA<cO,s^CSc'P%@6A )[6<F"pkYL'cZW`!u_d["R?'m"9f#M:j8<*^BhX"Z%lLM/JnWh!!`N,"pkYL'cZohq&T\X&dndB!VQL( &1'8#9j`.Fi8rCqO^gNiWrT'u'ESRS*%Xm$KtR$Ws81#s9,@^5!Wi3!$NU5/"XZc<<FgTF\dIchf"7/X 3thVr"TAQ*"9\Q'0E_Rc$6:ur<b$-'WQ+#ts8U<";(<e0'+-j9MR^strr;u)E^(cd%g;t9"UGGG'cHK^ #TONf"T\c5%MSdR!tGV@!Vl^$!X]V`02c\C^&>\Hd_5mQC/$T.$2ji+!XK;QnK&#X*#B4u$O6h:!!)Hg *<66[002I!B8F:ls8Vu?MG4un"Tnc+!sT&>&/?)P*X*Gp$O$P3q>^a.*%j3G@WnCQ^<Y[+s44/q<^.uF !r`4`!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZ.@@>S6IZZp]++l"U>>W<K>Gri5rC0\!_2&.i8Tp !sJr>$O-_8!<N<)":#AK)E(N5N1$NDXhNW_p#Lci$NUGC*AL]DRBOZmp%HIG0*)%Q!<E9,$ka9hr"\r@ ',2&i%13=B!W`B,#7(YG&/#?V"8Dj9!WrT1*`S9Pp$0i2YLCh5Vd_Lt!<<-&"U5;E'_E.=('5'U#6"\h !=TZ(AsBR3]!Scld(PhK=Y:9`!!`N+!sJl9%i"XNr>#bQ$O-Y=)_XTbGE]!)XpM;AU3/j@%gW=?r;[*4 -:2$aNM<SYriHI/P[uQQ"9SZ*eGtX1$ipD3";OUedJ*"T\ZQ1-EBXg:"Tnf$!##MU2Ge.?R&R:-iq<#n G;B@%!!2lt1'.LZ"9erA+u;W!MQu!Y]sY,ZXG:"<+qXt^.8YGl[CNfK\Y4@H0c^`+!<N?+"UY\Oo+h6? !YYtIrW3?+!<NN=)C-.1":"r.!Wi&r#6l)#7pgP'V#7>)V0b`K$3gV7!sT,F'bhGT'aYQe%h8pO!s/H& mK!Or$l:'F>C`CFXU))%F@$TJ#6P#*!!WN0$P=*f(AARB'aGEc%h8pO!s8)p%iduTS[,f;XLP?g?9'5D #-.a&!"]8L01TDqOeo2)e]4n759'h%!"8l1"pkl-GI@&,d^u\M\u1'X1EI&1!X&]8%1!(=!!*-'!sK&C 'e2ddJWuh,YHu[Dp%,%]*<60N(aVajO/oqIo(ML56k97t!<E6*$4djcnJ)]M&Io3S"9JT/%iQ]4&-i4: !W`>t!!i]C/OWlfNhroWXT>DP%8\#O"p4o-!WrQ/#n7O=(&esR'+P9M!WiB(li@Y%.oh,%\%9#Laj\85 Da#*Cr;Zp$"q)%B'`]$@'a>9]%LWOF"8Dj$(,T!4Mk7&Y$ad^si:=-l4W4n>"TAFa!.k3&!.k3_!.k3& !.k3&!:^%$&2IFGYf,#-Tl3pe&f;/d!<N#s7KsJI/P'iOfD!e'W2=rE1Ct!&"9JW,!sJi1!s/K)!sAc; )'L\4IB)5hm*2MtF&5=a.if$++?*29PH_p%P\!NV1+*b?rW3?*":,GL()@]'rYP;F',(i^"p>#0!WrW8 &JYlg$OI"?"8Dj9"qi"/7W"dXs5L_kUj$03)^#t,"9\l5$4RO[(%`:J()7Mt%LE:@!pp!m!X/f8.UoIX rs&#,TlO9s*=j8.$N^>0!!!''"pteN',C-U*#98''FkEQ!t[.cIA+9q_Q'T6VOi!1-j0\U!Wi6"#8KC< VT[cV`r;tDX/LSO.L$%Z!n742!"9#B)^mm]PgTNk]r7h6L0QA;"9\c,q#ED_.oh>3a4JV9QYfGb1b'=H "U,,9"pG,3!WiH*!sAf5$Qh9(DN(I0d'K^JVN>R`+V"tk$ku3ffDbd^e#S124;J;1"p4o0"pk_K&JamR &Jc)q%grOC!WiH+":5SP)%d5Z"Te`+!VcX"#q/SqVnUC#r2TpV?oADl!ser2#RqC^()Ih[(C:cc#mUS8 "9SW(n,Wgq!"'f-;fJ&._#:;>Vh/)("Tec-!WE')!<`Z;&f)6!)#+pG(C(Wa#mUS8!s85t"p+r5#rQ\8 rr3;dZBT,o+:JS^"02F#!"fA\8p-uEcI8eD?pbeH'+>!Eq>^p+%N?fV?]2Ssikhaq6&]A@*=iM_!s/Q, "9eo2!s&H*!sB#I*[sNoREF[Zfs.0'>"V49+qOtr/k09'VS0+#H;R0o.NJiu!<N9'"q)%B(%W4D'bC`X r<3Q3#n.Ib&dnjE!W`>s!!i`S8T^`>c-NEgWr\8n%6G(&"9S],"9o/@%h]TJ(C(]j'FtTV"9Rrk#6G#4 #T$*lhZ!Nic`;_/80]5q&-W(8!!*0,$kX6i()HNY#8@[U#6b/3"8i-,!<N<),u]]EjR;B>$_WlCDdQ'l ('OgB!fd84!.k3&!4r5_!.k3&!.k4<!!i]RA%^HE2[]ZT!!sHCO0-LYgi+M@l2V4n&27(8]\q,:JQ`]g q>^g)1R-q>UO-,Q!Up*=!"'K8I\FX4h3:DF!lY-H!u<b%RF0W?4V7bJ!"&cK?+]4Yj580[%eK`(!=^o, `r>'%k1EK<cN&e%"qO7RT>0%9!Flc2!"&lS=fUQ)W./%`!U9Xl"t=,eajf,*Z:>H$!!irY97=D3N%tXf !:Kmi!ZP"6r8n$')oM^X#!&:RjoXCJ''92V!!i`J5&7(MZptY(!2KT#!>\7pihfNi!q-*n#s<a3^=D9G S2q#A!"0#T7;o!SgpiP]0F.CR#TII1d]n^A)$@hX"9B90RcFA/!JVcu!Q+mD%4G#(^#c1n*X'gi":$/J OOaWlcb-8a*<V,uJcLB&JcNC_JcLB&JcLB&nGm>-$l:'I>'61Rrr<#k[s("F$3pY6!<N<)"UP_T.7m]F Ck@bO_WTL_RrM(I"To&?'cA#9-RKlL%0m+A"9obu6r7E;N4I:$s8W)(F$_<!(_7Q]G*p+upAb0OR9_Hf 'ak'D!s8`3#n%:C&G-Ml&Io*N!WW6%!XBJi4A.pr.N]QE&e5<Y$OR:S'cAPo<`<CMMlO\js7YQTE'"I3 !s/K*#7:q0&-iXQ#mLP8!WhWf$k".64\AmuR`k^1s6g/tEB"1,!s8B#!s8c8%e(#a%1EOI#n.C\033%E Wj9(F_:m#5M.fF3&If*S#S\XJ86'ANTu"dthY#$]BK[pg%ft2\NW9Ff!Wif`8PN,nJt'PVd'o*H9/@Ol !WiB'!WrW2%jEo#;It->_;5+js5KSX0cq/?"U5V_/i"mu((UfZ"U#,B(EYkD?=82=T=<_Ae@:`U58aS> /36*qAq[e[i5i!N="k']!!<6*$4QD8%LrmS#6b23!<NQ>)C$X_.Pj(=-Qa*:&.K$T$OdIY,;___ApTfY _oL'QhR/,A5qNrY!<WE-"pkYJnIPg8%giIAli77k!sAfK:jAB+^BhX"Z%lLM/JeNf!!`N,!sJl8$P3"D q@EcA%giIAoDfC5,r\(`?[/U/jjLT"@m(U.!2olD!XTM[/5L&8]^Yt$rR$[)*t&>X!W`<'!sAl>'HB>< >%;l9Tt<bUho;UH=u6fm"q2(\*$HUW+W(ar"pP55&h#t<>]#"f`Sp[ns3HX&.jQ)J$9W$[\BaF>s8KBG 59h$V"T\Z,"U58?%IjuX&J,<S!s&W;(a:=Z1H@3=+;YY$%1EUP$k*am1."WEGEBMU`lurm]*44%6SKGa r;Zp#"UPV,&-i^S$O6h<!WhWf*!I-23^ZkZLq`EZs81#t9c4-<!W`<'!sJl8$P)\<";).P"p4]&$NU>3 "W/p]:L.gjZO=^qg?JO^UifU$/fj]q#n7=P$k!:C!W`=q!.k3&!.k3_!.k3&!.k3&!:^&%$Qh?)CP/"T Z.ILGVdhY$!<N<'!<N?+":5\[,X6(6f&P/nZ`^Kk?S`f;#Qb5D*@WEZ'b1NT"p4u3#R_1m7q-t.S>r^* g[k.(M*MFL"qVe0=aQR?a6!!faD`d5!!!$#!X&]6q@!$*(CCHR#6b23!WiN2$P=7#/Mnq"(_R;d$2t/G #RCnT+"9TuUu(Rn`3c\i_5N&d/.hp`rW30)"UGJ)$Ng\?!s8H&lMq>-3bFPZ\[]#Pe'Pn"!a@8gqu?]t rW30)"UGJ)$P!IJ!s/ZA,;`/7P-hU%Yl:dIOD$j2*"N5W#71eY3`gE]R]!0gZ+7cqP$B@:!<N<'eGtX1 $ipD3";OUedJ*"T\ZQ11G"*5V#R(>/!`B+(#7D4u8nWX9T;o*8l1+5RBIs;d!<WN7&JcB.(D-uZ"U"l/ $Q(0I>(j3EeA\r%\ZL]p3?o+>"Y!8rWO9:HXLY$O:b`t#!s&E(!X&Z3$1J<)$4$_9r;d*)%j<Yq3\`$2 *uPb'$4$nA"pYGC%2^]e??V-nVld53]YqC.6P9S+!s/N,"pkYEnd>[0#mU\>!s8Vk!!`Z9(EkY?I\?V@ #G#p$&IJ^E!W<!%!X&]6$OZS8r<ii;#mU\>!s8Vs!"U&;DOn)D\u`ECM-`1e'*bK;VuRJ6(GA9dH'+r* bLk%LHUT(_!WiE%!Y,;8"Uu7k/m=(Flds+bXuj%]EC;,i$j6\B)'pgX)%[)["pP25#71e]3`gE\RAR'l d-LE!X]c_F!t6"m8SsNh]\;rMmZ9gI!!*!!"p5#6$47.JoEuEA#m^b@"9S`-%NR8k4>SE/)&*Sh#mgM7 &IAgS(+M[UF+p$[Y-G@F_SCd59,7^7!s/H'!WiK.#79l-#7:_>!s&E(!UKdt"tNZ&WjTCGXNT/6Z#MrH "T8<(!X&]5$OZG4#7:_B#6k84!rW*-!<WH0$7/2SLmk6FWsc5Eak5sZDEAaN&.SC@#7(P?#R(>6!hTIE !.k3&!4r5_!.k3&!.k4@!"]\s>)BK%e&%eu=?.3<((19E"%rXr"9f#D,WSY8N3M-h]r\'-IT\N>$jd+? #S.h"+rV1,$O?n=!soMS,=HC<ce7='WgS',7Q;q=$O\+;;Jq]&_P`W09LLW`'F+O<!rrB*#Q5&/%/1/a #m^\:"9JZ+":Q"e-7:5l.3TQB%1ERL#71\F%2U?M87RCUjQX^gVPSZH4W>@U$iU53"U52<$4HJ7#n%+J #mUV9!W`>i!!WK-"pc\fWrE#&n\(W:=?%3#*>Jq\!=8`+!WrT1#71_FoF*Pa$OR1F"Tnf9-q@m+W4p<L V5L;hJ6kAT&e56O#RUtO.8ki1h<O+6W1ofFJ8%Y%"U"o/e,YO0$j@1]-pD4,dJr7?W2BiR?8N&q"U"]) 4p(rp%1j[ND4\kugrZLW?VWs>-56Xg$4mpi)B9b<((U]S"9Sf2(+MXTI@S"6_6Bi9P\`o8%LrpU'M!u2 rr3SZX+atE((1BP!s&K,"U58?$hFc=$OR1F"p=u.!s8Z1'-Akl1++Ch'+bW^$O@"E#mq+Q'd>tYQ+G)d a/c#,R[7ni/d_^a!W`?*#7CG<o*bj2#R1A5!WrJi!!`iQ3)ad^ZbZO?#cND\/d2=Z!Wi6"!s/T1$N:G- %/gS>$4$h<!s/Q*p](L""U>>kE4u8N$0AIWCITET$3p[6!2olD"XQc`V7t7(We=hO+WD7."p>#0!<N?, "UuJ+7U1M=aQ(4CVl<"AB1![L$O6e<%2Bs2*>K1r#mLM6#7V@d2dD6Of&>GnTSQfD75#hs#8]!^@>1Sl XdXQ57lr1@$3L;1!<NB.$4QnAoF(j1#R:J7rWFGL&KWMf1aj@[&J#9W#m^hD$4RO\+$X7p\]<.>Whc5T QZ6(91CaNj!s&E("9eu8$4?A5#R^tG#6k;5!<MTg#6=o1#Sp'lh#@<cc`;Y,80K#l%g;t7!!!''"q(>; o*b^.#R1G2!rrE$!"8l3$5"%8C8'V\qqS=^URI?oB2h#;%1N[Qr!E</#71V=!s8T+!M9@D!.k3&!4r5_ !.k3&!.k4<!!i]RA%^HM57mtd!"&rcF/m"&hqW#i!pK[m"WBUDY2I[1Lgq/$q>^g)1R-q>UO-,Q!Up*> !"0#aBq)NTh;*rL&-9`M$3M#"?^]<nKf]eHf)Q-k9WR"-ioJj4,Qm]>$P"[eO3ck@cbYu'"O@()!!Ws) I\4C-hZ7@*n,Ne"*CP.`jMI'g3sk-O$3;&CS@d#!j0hMiq#C[.,tiZtj,>_ue,\t<$Nh)'DmnfdgX=2D &]=YN"ur4QjoXCJ''92V!!i`J5&7(MZptY(!2KT#!>\7pii?0'"RlBr!?G:7\BN[f!gkkOkl;(m&MRFT dbVR'D`7st!!jNWg![-`AJkTi!"/i?1hWuOi7ui*@i)u^#n/1UJA('D<ZVCk!!NQN6uf9^#2dqKZYUrk M#`,-JcLB&])[E_JcLB&JcP<@#QtPP+ZW_KQcT1+#Pu/a7i)gI#6"^("U5AP-8S.r@q:7QT<lAjaf0r% 5Tp77&0*)U6Vh#k75?#"%LNFE(+D@9@!%=<cg:]3rj$T3.3TN=)c(XE_:\J]s5BAO0-:o:!W`?(!sJo9 $2t>,$NLP5$N^V="9&<S!Wrl[7V70nBNn5!3%lO"*uu7B.5X4_>@1``M3tTdp$pt^Q=2QV!s8Q)!X&]7 ndGF("pY>9!s/K(li7;!+#H,Q>&p(Trr2ug#.&;/#6b22qu?g#"9o5($iUJe#6k>9#R_+i:1nF&R&IL0 iS2SaNb:a-+<;=8-pq'EC3PT:`7jnas2gC,/g;&=!S%11!"/f/!Y$bR9iGPRS%ook]piq?4!G%9"Tni1 #RqCi4&TL%G(lU*kl1TBfp#Vg(_R5]&1BnPC0*h[-63j3#7D"S(,f#l=)EVV[bpB%\sI+r)$C^+3^Q_V KY-I+aK0qo0F[m[!s&N/$1\H8$47.H"pG)2!W`B3)C[U7;^u9uAQ;/W/gqn`)]^%G/ONQIBm>E+^rb6p q<"i*9/Rq."T\Z,!sJl8$1nT*$N:D8$3gV6li77k"9euN;0\K,^BhX"ZA;aR/JnTg!!`N+!s8]2#mpA7 r<iT4rX/f8"p=u!!"TVe2aC)EGcK]`d^G9J4Vk'uVuR,*#nn:0:MYZslMgf#f9fel'FkEQ!s8]1#S\I7 5#c!%I#45l]LC`,[utT&/Ihml(F1_!8m,Rt3[YXS$jd(J+uM_gCk/;"iVNTSc\tdQ,TII)4DB\_cKkK0 rj6]1,8h!q!!*0("9o,<mgCHI"Tnc6(aq70;IOTY<^o&%.3]cN*?ZOV5Z;*)Fb?3ua4KPLn$N=L:H0[: #5nN(!<WK2nI#U0$O?q@!s8T*li7\&(G7a9<+h$$nc/XfcAPC7"p>#,!<iQ-"U55=oEtX+rX/f8"pG), !"8l1"U>D_7U'A>I$1oG_T1!To#[SM=%PP,pEKkc+<VU9$O-M1U&]cFJcLB&])[E_JcLB&JcP<@3=?og :ht]NX0L=/c*_IS*!66D!s/Q."pu(k2b@J2VU<]+\?W37JQ!g1$j?YA,!&Y#6T$85((UcO#;$2j,!8qI KU/F8^>&8QlA7b6!<s)U0j/jkYK,btp;h2+!<<*#!<N?,"pP;;r<W*&3!TTi!s8T*!sT/H)_=3P@TQ)^ 0.7t^'bh;p'd5A'>BH+;hUfi\ZEM*INFtO&%0?M1!WiH,"UFT(":5A="9\T'lMq>-3bFPZ\[]#Qf[Ig5 !am_pqZ$g$!WiH,"UFT(1C4?l"9SZ-%N6ZZBTg3L]="lG]<7EB<&l'/$kaC!1JhqDS#36gYJAQCe;7!G !<N6%!S%12!"8l0!sB?4M:)(adCHCcVLMGf((LTP!r`:"":Gh].RmlnP+AJMY0Q1khO7Ij!WW<.%iQfT 8PVB!*>&_d"To&E*@Oa7[.3/$]WerKLgE%b&Hr=e:jo=N\[\`OTmKTj*=`/O!<E6("9\r"#S7:K#6Y,1 !<N9%"<'-pChI0*>?43P.i]EB&eGZm+!`U6@X*iuUo1B)a4fe!H9DW<!W`<'!sAf4#7'f*!XAo4rW<-% li77o$PjmC>CN7CXTtD<5S4>,!s/?#"p+l0"pP;;pB^[&!XAo4rW<-%oDfCA6uJR$\[nlPXGL7D,819^ !2ol0";`^]@!Rm2Xi]>G`J75<$3U5.%g3%B%j*Jl<d0qHeAf,-XqS(&AMkD<#6G&I0hGJ=3@l<j&e+[C +rN.0BRZ&9WO't;p@bUl*<60M(aVajO/oqIo(ML56k97trW*0)"9eu6#P/3O#6tG:!s8T+!u<UcCM.*\ <_,5&*uGe-&/#d#,VM\pFGZ?XX/r_KfB1S8%7Ca0!W`?&!<E6'"9f&##R:Y@"Tnf,!WhTe&-aXaJ#]oe []I[(bdhm_*!H3?!W`B+rW_lu"pY>9!sA]-r;[6,"q;:d3*CHoVl[&&$a@%Qa5Eb466dTo*V^KW(DRVs %1*.=T)aHCJcLB&])[E_JcLB&JcP<@?P"trM6OqI_P)!U66IKk%gE.>!s/T3%2'jH=F$==`7_`)Vl$>@ =u-No$3gYG,s>7,689c,'b1KQ#Rq@a3adu]bh:IER<MFr3%Q$W$R%K-DNh<AVj(ad6o$,(#6"Z,!!39+ #Pn`##WN%m"9\c.!W`H:*\BHA9ib@h4>8$%)\iu#)'0tS6WeAdUV,L&Z`0dtI9ScM(D$lT!<WH-"U,,# #R1M="Tni-!UTjk!X&]5.UoFWrs&#,TPmmj(BPKg$N:&3!!!$$"9\l3#4VsS#6tD7!s&fS3E:-cZcoSO VPpAFBhgH7+;P@t)C$b&CmiE1kgQi7Q@*@S;*,["!s/PR!07*g"V;V$5%Tu+s5UekV[%o`3Y;])"U"`, 4pDE1+Y5ogLp>I_f=\);?;Na3+;+ka&fiDW4@N"<3@>RN#mUS9'-oS4Dj%d/e@MZXP\`o8%hB-X'M!u2 rr3PYX+atE((1BP!s&H*"9eu7nH]7k84rW3?-"UZ>3<c_bK-pojE-R'NJ(`!i)+tY]DB8<M1eBu%2 S!85*<^J,?"U"l-!X&W2#RBo+#6tG9"9JZ-!UKdk$6M6+E0diGrMp4&KNg&7!sAZ+r;[!&"9\r8#PJH% #R:S="9\c.!s//s"p+r5#rQ\8rr3;dZBT,o+:JS^"02F#!$qdp8p-uEcI8eLA5+Tu*tnn`!sA]."Ukq\ 1JVbHVnCEpZDj_$6&TDD)@HlX"UlD,93XqG.NTE<#QtA@&/?coHE5-9ft!c3>=h7:+qY%r/k09'VS0+# H;R0o.NJiu!<N9&!sAi-#QP,$#V$#]!sA`1"U5r(;KQGL6oZkL+WMC:()7]1.l9\)Ju?f?f"e>WQ@E@G 6k(RR"U"o.!<N?+"U,)8nH].##6"])!UTjl!<WK2(/'VArr3SVX+FbL*ZGn*"T\W(!!36*#4Mm'#6k;5 !WiH)r;[6-$Pt*F=+mgDqru;($`0D^P]UM61*%AT*;g]_*#ot?(_[;_"Tef/T)aHCJcLB&])[E_JcLB& JcP0<#m;Pa]\/H@)$C!2!"&lR;O,,Fg>Ugt)X%//!=^\iV;KY'Lgq/$q>^g)1R-q>UO-,Q!Up*Q!!33* !V6:"!=C5VOLWE`i8&f8$H)oO!u3Y"RF0W@3tDDE!"0)pQ-Rt:j5#_`(BaF4%06tq=b3a.hSl:<9GRZT !/U[[%nM/A^Y%EFDB&]J!"/uT96$QJj0`qn)$KX5!!2]l#n]U^X2<EH[Rh#*!!irY97=D3N%tXi!!30& !V$-u#9Q3CQceFB`j)'k#K-TD"ur4QjoXCJ''92V!!i`J5&7(MZptY(!2KT$!>\7pij*#C#m'Ss#Qb]( Hb7GOhW4g%0a-\?$3q\GLsOniQu=nhq#C[>B\Ch=Me*b.g&V*QnGit$*'I_l`T>jp[@o\j_>jlN-V]-) jf)9%"4@/R!ZOdPR)@bbiS2`!LH#Zu!.k3&!.k3_!.k3&!.k3&!:^$q":Q(i3EgQla85f8?GqUr+rV(% "U##6$5G!Q9NP_>HC1J3\A6V+QYfPW)ZpEc/3-C8K:J3I;DfU7&./US+u)2_EJ_6Pm/R+bZ?&>]+W(_/ :Ni,Af_5@FiL*t)*u,.b!<E6'!s8Z0rW_ru2$F'`!<E6)"qs%+LT.,@P_X9d9g(Ej0.]"M:fU\-ApBK0 XLH(4iQA<Q;_&%R!<E0$!sAes"pP56"9JW*!UB^k$Qh2g8m68(bPqMAoEM[B3!TTh!rN$#!<WH.n-13C "9\c."U>>T7UBDIM3tTbj7)HnZAE!S2)$L+4BcTIJ<$21`pj!-#K)6h*u>Fl!S%11!"/f/!Y$bR9iGPR S%fim_k_`g6R`QP#6b58%Mp6C;/1?+Mjpufnc&PKc&5FA&Io-R)F.klRu),b5VODu$k*RT&1gCM;."X2 [,C9&]pWY&)?^g,3^Q_VKY-I+aK0qo0F[m[!s&H*"n2^+"U,#2!WiB'!tlk;5#Q2@NjG=4EEZ('3%Z[9 2EFB9EI34nS$0WUm/I%NVe\FE)\3&M!<`H+!sAes"p5#2!WhWf#6=r2#9QfhRf0u,^sB<C>t$@_"8r6! !<`H+!sAfJH*"Tnf,oDfC5,r\(`?[/U/jjLT"@m(U.!2ol(!XTM[/5L&8]]T4n(uClr1*%)>#6Y59 #S&%:7T*W.Efuup[_>2^`he&e5U?dA'.#M&>^)C*IpYDb)\WVa%3-iX:MG?Q`Sp[ns3HX&.jQ)J$9W$[ \BaF>s8KBG59h$V"TSQ(!WrN-"n2^D"U+u0!Y6J34A]^KY+pnr>Y[[I/hA\63CR1jH[ps@X1lpEr;ZDl "`cpZ*=rDQ!!<6'!sS/u#6b86!s/N)!UKe+"W&dP6W@]S^@D7'rm-Ks)$U3F!<<-$!WrN-"n2]u"U"l- r;[6,":,GK2ct!BL6ACD$c0d$bML%*H!=-;623JG3&``O.io9,r;iYnJcLB&JcNC_JcLB&JcLB&nGlu* +#m)4K:&^EeD8ZjH:K.a"U"l.":#>H+Z`VAL7GWk]=,#KXe9f)'b1HO!YmRqJ:MB<8ieCA&do!N"pc2* 9OrL3UTD2aoChI+5RRSs&03K.H^V(Xjn8>gE%_4l!<*!"!X&6$pB:Br'*849":5YX-U:p[NIu=a<C],( ,lT#(,W8YDOfH"8d_E<!YckO+G"s_1$N^>-!<E6(mK<[q"9JW*!U9Xn'KTihYdq9NZeO*TWWHZc&c2S- !<E6(mK>3G"9JW-#nRq/@$8geaLea]`mDf9KNL#F(a1@b94rgDW2m&%Yg;.\bC2o"!!!$#e,YO0$ipD3 ";OUedJ*"T\ZH+9LL)YW'F=p@"%rk4+>,ueG*&JtWi`GKgX<ue6lZ70"qMP"6<eV_AkXs$((UZR#n@[i 8:%]9n(5@[\?(Kl2^/e:"Y!8rWO9:HXLY$O:b`t#!s&<$!WiH+mK<Rn!s8H@oQ88soZOW]pWJ7M;0 /12P\+=f<6:M+s6TVe`kY//l_p<\%D"p"`'!<E6(mf`Oj!WiE(li77n$PjmB>CN4BXTtD;5S+5*!s/?# !W`?)o*#!pqu[!%!Whon%iduTS[,f;XLP?g?9'5D#-.a&!$qaa01TDqOeo2#h:U#<=YC9h"Te`-":>YW 0M?#,Pc;L5\?rKB6`Z#F-P-Rf!X^AKEJJRB:dHcZ'atES"p>Sh6<eJdS#E[?lh:%S=rdSF$lC9^D3(a1 g@Ft*O@0TZ!!**#!WrN-"nDfn"!n!L"!C!IQ'@GqR=o6L3%ZL$*?HUa4\T=/NLlrFXf]=ime5Li!Bpkh !<iH'!<E6(m0!Im!s8H&lMqJ#.o_"u[CN`Ic.pX[HUJkWr;Zm"!X%loqu[!%!Wi6"$j$eO+tcQ(LSq8W YH829ZF%0aST77O/1iFJ/I*aP+WhO3#Qp\!JcLB&JcNC_JcLB&JcLB&nGlo-10TO=`7)StG[<um.3B3- "9eo1"V)7g2-,1,b1>IrWMcSkVgho*#m^hB"rf^;QAo`Z5;",q%0m.F%21KsI]gN5e#AaZ:I[;p*"*,t 3)XXXYem<&AP>KI-PQda!WrE'!X&B(!!W?)o`R/T!s/N)!!X8h5#Gm6JUhTD:-CKe-QaT`1,qj8I%.@T aN1H]VPp;=><*E2$O-Y5!WiH+"9nB"r<!-)!s8Sj!!WK-"pc\fWrE#&n\(T4<]:Zn(_[8U!=/Z*!<N<) !sAf!"T8EV"9S`,#okTd?\YT1`3ZG>VMfG"8O,-Z'cnnf94s*]dGWHcWhP&U<^\hm&d8@>!Rq+1!"9#B )^mm]PgTNk]r7l$L1<F`&.8aH"9f#:'-oM1AqQemg!.F;WI\MO-mKZB"UZ.t4\oR/IWf$c.237!"p>GY 0L9-)\,P^3XJV4u8L"`V%La%ALtDY+$Ic&0@6>;5#R1A3rW3-("9n?!rW<W5!s8Q)!sAf=/Q@D4R=6Gl ;G0D>0e4\#,:koM??;+&^!tBGYH!t6;b0&*)[QZM!s&E("8r?&"nDfr"9&?%!UKdk$6M6,E0diGrMp4& KO$8<"9\f-r;Zm"!X&B(!!W-#qZQp$rW3'#p](L""U>>kE4u8N$0AIWCITET$3p[6!2ol/"XQc`V7t7( Wf(Ie3%-$i%/pAA!sK&F)Ce?sS&Ne0f<)!KVlE"CBL3LB$3pbI0NNjuH!<co-Q<U%#RLkL-:_pB]#rL8 TSQfD75#hs#8]!^@>1SlXdXQ57lr1@$3L;1!<E6(m0*Cj-3OJV$Ref"[[r%_;bKPB0e=b#,UtfH>]5Io ]%#*DZDs=@<_5M1$6KWZ!s/K'!<N<)n-&^m!sA].!UKdk!<WK2(/'VArr3PUX+=VI*#KD""T\W(!!*-' m0!Rp!s/Q+!W<!,!YHbB<-XqIlJ'LhWX5W!SstIY@n/4+qCW.00etR8*u54h"Tedu!.k3&!.k3_!.k3& !.k3&!:9am"=7QjgRV@j#6OMt$ipeb9RXG%gYh,I?PN88"9o;@"9J/q$3_PLRblDpLgq/$q>^g)1R-q> UO-,Q!Up*R!!WTM5pd0I!VZR'#Tc'6M7D!ehW*C5-j7Hg$3M#"?^]<nL-,qHf)Q6_/UY(Mf&5GhE'GBM !Vud)$86+][*@F^XDpNF"jR+)!!Ws)I\4C-i<"*H!qQC#"<^X'X2WcPWEUYR!r)`t"s><$o`,:*3HU\! dG_N+&,?22$RJGo]&S`)#M9"Y!YZLr"!8Eh"8;d*!=^JVKquN:jisugC)@#j!!3?aTDdmRhI.)[!9O7e "WT^AVqSLJ&#K?&!!rZA8X\SID`/./o)K($)a%i.db3L:jT:Jm!r2g!!XoG?!qcO#!YRSAbh]q!D`7st !!jNWg![-`AJkU)!!`Q:)^-=B$j62'%14CVJY0X,jj:>rD]8hr!!s&]9n9q=WE(&BdJsI^4bp,Ve_p_n hqZe\8ed*^JcLB&JcNC_JcLB&JcLB&nGiju$l:'I>'61Op&=tnbE6!],8^pq"pkVG+$34u?"\MQ\%92c ^WWd3=$\AQ!tHS84\g@3fZ^+58h;,%$jR=^,r&>;Lq1jus8W)(F$_<!(_7Q]G*p+upAb0OR9_Hf'ak'C !;cfr!qQKm!A"3O!sJoI8og37e'uUYVi,Lq:.[i=9Nk\#=(QoQ[^`r^_;WbKO_I6."9AQ&!<*#g!rE#` !!irS1d+H7Egk2NrrD`s[;e/2"Tni'!<*#g!rE!?!s96"<)mFSN2j\?lMpn:Wd\#C76NP(C4VbV\%05p rr39%\p$@M$O6b7eGtU0$NU;1%5(4H;e(EK^K0(2YDd6i0,+d#"pPDK+Y?&jHB>;;\@TNQs8V].KM!'h $47%`;gb.NZ^Z;F75>tt%L`[N,="mq<c3f#i9]15S8L\4";WOL6;hEK]BJ1oXFXG,%/^,)!Up0f!=/Z* ";WXP5u2)<W;YYeSq:lg:dRE;9Meo4Js3=E\\#]5qu?]\SmO,k'FP!C!;cfd!r`5d!!`N-"UH2JHCFfI #f+`lMI&b*)$Ba9qZ6Hnq#^Nro)K:4,r\(`?[/U/jjLT"@m(U.!2ol(!XTM[/5L&8]]&ki)!%T54sq?a #mLYA$kt?b;cmOMN3p++]Y?\Y\s-eu1`cu.)_jHDAY79&Z\DX<,o[C#$l'p:7qR7F`Sp[ns3HX&.jQ)J $9W$[\BaF>s8KBG59h$V"TSQ"!Up0h!@%X[/3,pi@\!)N_4lX'@8TEW7S?Q[DLn"QZam]_f_PRIoVMe( 2'*J?"8i/u!Up0f!U9Xk"W&dP6W@]S^@D4&$.+T))$U3F!<<,s!Up0i!W2p+!<ilF)FS1eT!Po:^'h`l _84'sR!;k?=B52q$<'l$:JFJF.iJ]qrW/boJcLB&JcNC_JcLB&JcLB&nGm//+#m)4K:&^De)/p'Ki'9* "pP/2":>_X02Q_XZFRQVYck43Xd<f_$3p\9!ZagXZ*9:;F^@He)\<A]"ToGh5Z_r]T<,c]oChI+5RRSs &03K.H^V(Xjn8>gE%_4l!!**#!<Muto)eml*rlHP(*YP6Fd0)5VO)pP>=UP,1,C^^G+d7Ij3G0=YPt[0 YDcmK,ngRdr;ciuliR1fkPu#*3bFPZ\[]#Qh:g/Y!bO;&p]1<pliJa>!!3</$RJl9e*P](['%-rn+*u8 9-5H54\K41PGkR`Xf\nahUK,Q3YMMo!Rh%0!"8l0!sB?4M:)(adCHCbYE<N`.NAs&r<!93*%sW]Ef6Ui X?Whibfm\k@5JZ!!Xfbe3EpctViPah/g;#="pYMG&O(BFp@[C`ZFHul>rNo<"U->OIAsWb\?*67HVcF; %KlY0rrMHfrrN&u"pZefOi>A[-.)5)QZ5kg3A;p:5>><sI?:5*X/rG,bO"rqdr[8F!!!$#!!*,c!ri;e !!`W7(*GG;I\6P?#Fog!&.&LB!W2rt!V6Bf!ri;m!"U&;DOn)D\u`ECM-`1e'*bK;VuS+H(GA9dH'+r* `o5b)Tjfno#R(>4!s];N,=H1$YI;$SYck75XZiY39H+6?!s/rlAt-H$K6V-*2'N_D#mLJA+uiA2J=!4@ d-LE!X]c_F!t6"m8SsNh]\;rMmZ9gI!!!$#!<*#b![[pK!!=ZPMo3TTcL&lIG#^mk1Fk%>8m#bSO.`YX XKAVFl1Xi/IKVV7!!!&s!!!&d!ri;b!"]>b<.CpU\[JTch:0Am7NM^1!<*#b!ri<!!"8o>*\frgI@%"8 XKAQ3Y-+t3Ya'6)2`X#dpd#-K2_lp0((15:!.k3&!.k3_!.k3&!.k3&!:^%r&2IFGYf,#-U3g9C2D6Bm #mg_;!soY_/4k#bkl:Y>[]$1)Wi(JR0*_af#RDk_QgEOpD,!,H+VG(d#RChf8oUB/aO$oSG>C[f/0#$* +ZNA;PH_p%P\!NV1+*b?rW<*"rrMoso`G'm/H>bV*ApW-MPIAHLiZru8O5?i1He<.BS<2.mbbaXVl6Sp VL2N(%LNIE!WW6"!UKmf!UB^i!X&]5.UoFWrs&#,TPRRc&HW^[$2su(!<*#c!\XQT!!a2_1ei.eg>g,S VPoo5AR&,(2'+;6<c3hl\\bPOWiD_0=[3uK((16I!<L[MNrTRl&0!#]AX(UBj1VCh8VUbB*#&kh"9\u; %3.3%Digp1ag%qHWi1AT5TCa[%Km7e3`L$YV6624>s'/E%L3+G)(.7AJ[GCPd]fR4Ce5i_&.]0`7u5dr rsR;VKjd(Z$O?q=!!*!!liIUs!<<-&"U>Z&Ek;;9YU+R)>$+Qi5Wh%a5?Mo_V6n%XZE:+*W/t.Q4X2$^ #6Y/2!!!$#liR.el2V%r+#m5=QF"C*WsGYY>qu]i"Tnf'!<3)k!r;ut!VQKt!X/f82/p8.rs@emP\W`2 $jm4AWrT'u,m>SeFeugte#JF><^JGh*=`>Y"U##?)^dXUQ-B:,m_l$%WN*!aO_I)q#mgkD)+B%npoepE 5;af)$4$nB#TZ$8Mlab?]V('b8OY9V&I0+)7U_"J]rd`L;+E\t*=;lL!W`9%!UKk9!<N?,#7WS-YlF1$ Iq2ed;+Eo73&Wp!D2G!n^rN^^WMuq_?:d@-*sWMd"9\c,!!)rum/m:glMq.j!sJrG98q[*rsR/RJ6kY` ()./[!<N0"rrMHfrW2lr$j.D*=*pCCb.XsXWiHB)Wi2hgO*Fk-6i]UP6jlLU8kV?#*t\hc"Tt@sJcLB& JcNC_JcLB&JcLB&m/RFq-"FUCUgl.j"S;[&&2d[CXOH4jjQ5,u%f$)/"<TQa,n:%N!"&`?7$$0NYD?[' !r;m'">c;&`hRl`%0>qul2V+l-??eM:+?k]!rDs.!=pqmJt^!3ioB+]gh@f2_uL,H'f99cdFX+8%KY/] %07S_T=E2&j3=cbAgn)a!"B)Y@(+eFi8`IM8/VL1c2`\$"qO7RT>0%;!dcF$oDf:$)blaQgYUoLRn+:r p](I%08#WW&G?)1">"#=Xj#_38e:^t#R_qOICeHt1'cG3!tQtXD?Y5k4<Fn2qZ%--"VNS#Vq0VYi8hb@ BL;s@!!3?aTDdmRhI@5]!9O7e"WT^AVqSLJ&#K?&!!rZA8X\SOH:&SUoDf4&,YiBM`o5t=jlQW#,6@W@ #6>Jl4t[TT!VQL"#VL#8h7T+n2[K3Z#TII1d]n^A)$AUn#n/7SC3jDU,7O\N!"]/6%kV%Uf%Ss<k/Ns/ 7gB(3!!s&]9n9q=WE(#Adf9UV-u@,^hr3Z%jlPR`_I"AdM?&5.JcLB&])[E_JcLB&JcP<@#m:YQ+ZW_K Qc/+es&RgPH;?pi0IA+p/2':h?XIAeN3'h3cIh$jRVY>I+V=be-TOCdFi!P1_jYI<6T?YE/iQ$`@!@XA dI@29ripE+-6O*7)c(XE_:\J]s5KJR0H_,=!qlW_!%@pO"UH#AFd9bul0%!BX-.gMCLpmcCL^RbK9NUW `5p<ehnbk)<B(s#b5_eU+>c8S>B61Urr2un#ISP2#R1D5!TO/2!<E650MGAD@=+`baOTAClb]6>E+`HT @X3s6^r"%/h>dKGf:6>,#mLM6!S%11!"/f/!Y$bR9iGPRS%r(Zd__r>CJH`<.OQPn2ag>BEJC1&_SjI= rql'5VJn^2#6tPA-<P\fai:]WIqhqL0J=q)-U1L-;-\=+Zf10!\X$qp)$C^+4$uqZL:c[-aK0qo0FZk> "pGl!4[MqO&YJRge[hE8JT>:1AS,LiI#Y!$^B)17rr35IL/0'0%L3']!!`N-"UH5KHCFfI#f+`lMI/k, )$B4*kPu,*-9+:d@!Sd1jjLT"@m(U.!2olD!XTM[/5L&8]\3;as6dLX?:d=:.4-Dm/iQU3?=7Z'S\Dq] eDNL6Wd[f)-l3*o*AflI?_HEMd].gs7m&LR.Ps:U<c3Sc`oR*us3?Ht-mBQB$9W$[\BaF>s8KEI5U.-W "loY#!Z!FO5YYLIn,(bNUlp@PAmo7_AnlXMUAVb+ir8rYeW'f6.M`O#!m:QM"W&gR6r[iU^@D4&#LJB' )?p?I!TO1Z!=/c<*A'?UF,IL+^\tnO^pBbmF`hg%Et*/1FEDM>=[",B!s/K(UB#lGJcLB&])[E_JcLB& JcP<@@gaA<:ht]NX09_,i7=H774'0!)AaA=/2Kq6Lp+\2\ur0<Za@&q>:Tj[!s/KF:4p<uTTPLkAPY?= -6O3E/3m*DH&n]$^Ye\Wl\[q9!<j#U0j/jkYK,btp;h/)!<<*#!VQN^!"fAC(a:nCJ"EgR^9aVmG\0rR r_XABN48!1cb?]fYd1dYWdRVe((CHLb5_qb3b=JY\@AoPh:p8\!baG(hZ,&+!sJiI97FG2hU&^7[`$YT d$A?/6V^fqGDr)nY->4<a5+qAKhs9/ciB+,$ipD3";OUedJ*"T\ZJo;Spt-@3@Z$e)&aD=2G%4oK9iI= Yd1XIe@Ci^6R30C!t?+o5@TABYG?th:-UN`*ZlUP-;oK,p@6hPZ+-cb<\ba,"U->OI&XK_\#d-6HVcF; %KkVh"pHbnS'fmA&_c4+[Z>93=&;F^=ClN&Nh*-IXU))]p%7aS?RGou!!`W7(*GG;I\6P?#Focu%g`CA !UKgM!"U&;D4RrA\ZE<BM-`1e'*bK;VuS+H(GA9dH'+r*^Y@]&[!bk-,9IjA)'LF_5$r`2_8*XhXfeq8 \-/4;4q\%u!]:EKDlCj^P*;)K=$ePh+rhFG2bRFsLRG$He*m#(Y?DtI!t6"m8SsNh]\;rMm>jXG!!!$# j8^#!/7+Ocf@nj9lar="?s$8s93>\BI#XSor2g.Mp@RmaB)sUerVup!b5`(X.o_"t[CEZHced0jJ4:U` huF/d!WrQ0))"EaFc2onrN6%##HF/@@o?9.>l%b5?!UZ59LUf^&HeX*JcLB&JcNC_JcLB&JcLB&nGlo- 10TO=`7)T!Lh0a_6U!7M+W_XC,;;8OBT^13s5_5(WMQ;WNcIrE"pY>:$7o_hs8TW[?;=$R/KuA]+!NpU JuH<&bc-tJ9gg``)%$`p3)ORWYem<&AP>KI-klmb!qcQ^!%A3r3*(*f[)Jr/IrAXu=Aqgh?"S)1S$q\7 ];qd-US+-:DGVnn$3gP4cN".N"9o,]@]KG-#4]C"CfE;("VhUU!W`>]!%S3`)C7RVNkt5F`i>u-Q\9-b >>74O?$).&[(s#JV5']GB2'lh'b1KN!<LXLNrTRl&0!#]AX(UBj1VCi8W.Od2)$L**??:L.6(4EOfc=< ]W.g%Sss\#3#`bJ$Nq"f5?rQ.\\FtuEE#%V.NfTT0g&$ANO]#Wa/u5'D+Pua%h8s]7u5drrs@,SKjd(Z $O?q=j8]Mf!sJrE6@dG_s4\-FE+ron?<^N3<*j[+W5-O!\c&Q:WIe5C/f,64"p>#/c2\(V+#m5=QF"C* WsGYY?8;fj"Tnel!:0[i!X/f82/p8.rs@blP\W`2$jm4AWrT'u,m>SeFeugte#JaQ?Vj*S3@Q*o*#g"L 2agc"YNZ#Ud^Z<SUn3f6IpFrE"pP;=*);RTs43<J:.[`-,U"9P*\pW7R^BuW]UjdU7mSRG%gEk'7q%+K ]rd`L;+E`!*=DrM!WhKb*!$-F#S9+B_uKbsPB1GOA7&MB=&W@EMl"//be3kS"c->U1D^`.%L3+=!mUcN !<WK2(/'VArr3APX+4JE)\j%q"9AP_!"/f1"UGVh96$K._oqtYrMp1)Sr%Jq@:3L@?OL@SAnY72.MiR# "pCOuJcLB&JcNC_JcLB&JcLB&m/RIr-"FUD[<tdu&d7n.%1FmqL8W#Gj4hhnRPP-C!!ilY86nh:&dJI5 !"/f3,ZL>kc`2Cr&-D\.#m<&Kj2Rj@=UbE$!9sP*"u_h*\:7C0*t\_Y!<N?*%PV4JWkm0Bj5/J:[7V%K !"&fD2.2j"f7lBt!S.5l%6efu]@c2tage3E,6e,J!<i`K8r;'ZiSWJ-AL@`,!/U[[%nM/A^Y%NJP!]oa p&GL)(-HcUjl,(OdWI/LpAbF,8@6Z_0*q[T!"&`>5B<'td,D?%&,?22$meSr]Ani*#MB([!>RP"N"N7m BgsE[#6Y).!<s&S10fmarT4:DZ>29.!Q+m="ur7RjoXCL'BT;W!!i`K5A[:PZptY(!2KT&!>\7pil@6i 2Ac]#pAbR(+%ppK]%,oue]"lr<"Sj*#Qbo,=B@Eu$Ng)'$3M&.J'HcYO(L'Mq#C[>B\Ch=Me*b/gAhs# 1g#O9W,P?Y&dJO@!<E?6)_P-I`Vej%\9'eH!W^(;#n/1VJ\C0E<uhCm!!E?@8sJ01k5FEHc$DA]!s8]& #6"i-!git>!.k3&!4r5_!.k3&!.k4@!+Q-?(EkeBFdL#"pAb0V_P)R-EG8ce@UiqaEcGu?L6o6`g?%GO YC]b-+r:Ug&10D&9PLQso[gU@JpD<I?Y*k_AT`Zp]%$KSs8B-;3[,OY%NA2eR).GKs8V)I?SN]>$Ng#% mf4d;"9f&L:3Di;dGsHSdD)`PP`CQOJUMNTKT;\5_U@TDs4XZ-=@"GQ!m:QL$m7Dm93ZJ+bPqMAp]n6J 3=,lm!Wh9\.KKPW,!8Ot@WRsQ`QZrnld*&6QAU-3G_h`o_8adQq>&pdV05N["pG)1e,YL/$NU;1%5(4H ;e(EK^fK(?d_r;TJo,(/?smMYCi=BGP,H.9dG4-eiPh^D<A4gb"pkS_=FHdVahb<YQ%jNuB4PIYBl.<d FblNri8`(dMIJ[b";`XO6rdoT]BJ1oXFXG,%,_*i"W9'Y6Vq/&NSs?^aL8(@Q&:?MJUN!(RBQS(%)DE. mbOXS5TC7?"TcpL#6=r2#U!#kRf0u,^s99D?Ulae"7-$O!"TYh3C6MMH`H#cd^G9J4Vk'uVuS+F#nn:0 :MYZscKkN1ps?1(Hus17?X[DRB5qs0E.<tL^<Yd#j<DC(ANV=[&-W=\1d+<4N8"0h`2/39Eb\umB4tps IupkSli-o#bCiM5*Z#Cq4DB\_cKkK0rj?l7,oR<uj8^"u(,%d::0rV0o&%U!WhGc<LP:;,I"dibr4`F% q=<FCEWniQ%giIAb5_hP(be*A<b[B(nc&Ond#:^=#6b21irBGf!s8cM3Dj.'JsX(I^\khN\ZhfoQBda2 P73VASY)C"<\b?m!s/Lu!.k3&!.k3_!.k3&!.k3&!:^&!$Qh?)CP/"TYJA]IhQr5^=&`!k8P`;g?#P=_ ZbO,]XKAt>Y+0E$+9VcJ!Wa?9J@NFoQ_g@4G@k)];+sYdATE6ZRAR(&k4\N7MEqUN"VDb0=aQR?a6!!f aDW[3!!!$#p&OO].0U+s+u`_USuoN6]XFMsKR%]]Ec?Su\_PKI\?N0Jc.q3NCH<(:#6Y+O!"9Q&AWa1+ \$WKtgX!,+B/L=Z!%7jL!sB?"@ZIY#]<n`I]#N.HX,(J*E-?\gQ_^ae[(OH@d%u%d1)gPH!07*g!<N?+ 'hjJ3p[$;<XpDJ<RtYut>>S&n9M/5lD0L_tT;Sm"^WYB_UN&XN(C1'F%N-QW@YUY\WgeceCL^IC;,U=l Eg=E)g<$n0[A/.G//es#"Y!8qW3`tBXLY$O:b`t#"5j.`"YjDMbL"`Nb0f%\U5=>EEboZ<ItiuOTr\-o #d2b7c*qmc*<OCa#6YDM+>d8NTDYerS8gb(#mCD3li?5L%iduSS?TK4XLP?g?9'5D#-.a&!$qaa01TDq Oeo1gc/7I!SU+^D;GKkY;H@"5H]Y8D]Xb/HZaR*<4b6]f$j$M4!=_)*UW9d2S>q^!D-pFE:J+SoCjCc# TrYTTo_.p[=WRPF$lC9^D3(a1g@Ft)O$jKY!!*,]!#Peg>*$_Od`g(p_PW<BG][e?G(,.*R%^MWXTd/0 d^jit"!RjJ!Qb<Q"tEQ#W3`tAXO#bQ`ILE""5j.f!<`T7&1KtRH&7o`XSo:"XTtr#OahCpG^K@;rd>'" H?O:A9edLhT)aHCJcLB&])[E_JcLB&JcP<@?P"trM6OqI_PWWDAR8_K=]8-m:/+_qBQT'.bkC)B];qit Lja/D3ueD-#6tPeAZc"4esLSm@U<,6;,U7hC4i.ka3DQ&QXWNO-6<j-$QqE,DNh<AVj(ad6o$/*#6"\s !:Kn:#p2--F-s>RW1AosEcZ5;C3"]SNLQu]e%2][Vl#r>E+`6=,mjn\"9HgK"p+o3#V';`rr32l]qB1@ 2@p$,&IJR?!TF)/"UYk\/kpMaa3`#=Wh>fHL37HL@;L=QV7!tMXf%bZP]9ts.1m*u"p"bQ!07*g"V;V$ 5%Tu+s5UekWC`>)Cfse=;,9tc<EWmZOK-"6agn@AR#lQ$8hh+p%0ltH-9ka^TXhh9Q%F!`>?=Wp<FBN^ MPJ#OagA"FQ>K,9%1WjU'M+&3rr3;QX+atE((1BP"69Fh!<`T5(.<f&s8VL!Ukj5=G]n4OFEN"mU:JIk a0Y`F$`JGY4;APA$3^M5!R:ZM$6M6,E0diGrMp4&L0cVA"U+u/li?AP"p+r5#rQ_:rr3;bZBT,o+:JS^ "02F#!$qdp8p-uEcI8ebKkk((?!C<+;,0h]>%DQ#S%S.Tf"nVkToXeG'4FBY%0Qk?#TQX&jo=tUJn\b( >Q.MI:etMEPd/6Obd3jd:.$u`(^pTb/k9?(VS0+#H;R0p.if!"!<N;c!#u"A"pbf*HH-!bp8j0tG^"=Q G'.nSNM!Z"c-*QnWs+)`58t@N":>86!WgRH#6=o1#Sp'lh#@<]c`;S%72lsU$j?Y4iW'Ag#S@n!6"Q"_ _TBitrN#mt#HFSfM0s]!IJeI%IXZg!C/?])&.AdH!<JkoJcLB&JcNC_JcLB&JcLB&m/ROt-"FUF`M.ZY 3$Ae6rW*W3!!36-'f0'KW5$d;hRnt`5nE_j*!mo]B5LO--5[$l!W`<%":Z;#:Ofk3bFriG#m'l&#m<&K j2Rj@=UbE$!9sP*"u_h-b+s>d8N81=*$-4G2Hu!>_U$rqiQo!'CaTD(!"&fE2e&6'f7lBt!S.5l!Z!q2 S'U3PeAo.I9dpVf*%!7.FK4'TgsX33659RG!/U[[%nM/A^Y%QcY\ZE?&-rC>!<<*#!so_j5\HM2jP8(u Y=f`8pAc*?8@7*;=Y:Es"Te]+!WrQ@4)LFnaOoO[6k/ql#Ri(UJ%Oa"1'cJ4"9B5q?&]H/]Td>22Cg!l (E+_]87$qPec"V5j-rUU!Q"g<"ur7RjoXCL'BT;W!!icM5]*LSZptY(!2KT<!>\7pimY/hAO7j^"Te]* !!!$%"UlbNFe?.dgZ?\SG#88]!r2g9!Z=%(E*bd^*=`2R!W`9&#o4gPC8'24Z%?%%"8Mp&)edpQZ&<02 "PWnk&MdFC\@nAQ<B2QT*Z,eB2+C_uWm^h-"f5$6!WW5;!!s)`:P-:AWE1)BeGoaV+[gFVhu2^9jp0V4 A2thX,q&U="t:uN.iSitRK.p>JcLB&])[E_JcLB&JcP<@@g!2V+ZW_KQbgl#mJcM&^8n-(S!K;%O,f3W L4kMRWjfk*j4_PABg3ON$jQeD-94=a@ZKLCjNkE;Un4!=OGnsDLm=jMfD>OIr2aNg*#K=u)c(XE_:\J] s5KMU1EdMA!qlW_!$2.D"UH#AFd9b]e`,]Dbe^]iW2,uMO,&UXTs2,Hj8T&`d[b&7/fkN)b5_eV+Z;V\ ?$2[\rr2un#I\\7$3p_9!T=#-!='Ag3_Ek)Qb^MYbL#1tahG'XQ\pcgVn'^jh<k7+_4,OG3#i#&!WgdN NW9Ff!Wif`8PN,nJt'MUcJ%%)aLS=AR?s2&OcYNXM34L=_9V$2rq4='F]^aL#6Y29#UWZ%T"i:e`P&[\ Umm^6O,JpKGCkdAXLd6D`MA#f3#2W500Md)Bns=ai5i!N="k'@!!WTE1I"9*@M+@=h:Tum^:(5CU7R[4 P+&5XrP&cVk2+7_ITA08#6b21cN"1N"9f&R;L4f1^BhX#Z\i*[0,XlY!9aCn&L]\-:h"dOi8rCqO^gNi WrT'u,m"Ad*%Xm$KtPFUk4nZ+`j;V<SX>\,OcPK]L5(SNUpRnnkMO`4Wd@Mj(CpfT#9>Wa7TjuRqX)kN Y,@q]QBI;cJqK,V\]F:>rtih-7NNH_%gkF5MR^strr;u+G![Mp&-_+p(]kL,4[W%RJBHX"dDio0YGn:h QB@2pUpg39"lnOaY_60`2AQN$!s-RF#mD2$5"A[hM8&NZrs-o0:E'QC!s.H_$ipD4"q<7bD1%,%V7Z]@ rP&TO]=5)LXfSW%Wt251WN!PRcci;)5oU"3!s,.sJcLB&JcNC_JcLB&JcLB&nGll'+#m)4K:&^B[)1/C `2o8ZJq/B"IXm$*O-ZWM]!nfCY-t9pHW)[7!s&H)!?FdZZGO#AX0eanOGSaDJ:3'+O-ZB5WNF2+p@[d0 5R[Yt&KNT/H^V(Xjn8>gD_D"hrrMfnmf4d?$lC0I>CW6IYdV-TZ_sI`PECibQ`.R8]sk;NYfbqeh3M4n "p>#0!QtHO'KTcdXgYXCZeaB^Yl\Pq&`3R:!<N<)%Ot"_K9iC<Y-G@E^<3mZO,o<bQCOeNXKfF^h"/@: ;CWUr"jd71!"8l0!sB?4M:)(adCH@a['[*7S<8Y[rdILfJ;&uGR%pU^YIr6Ao@&\!,8L^l!X&uO-9kso UTL`"U6h('L4Ol)I=@9U_9Km/['-m2G=X%s$j6__:OB"F[^E3ITmKTj*=`20!!WTZ?&uqHb7VY+beUHW R?itqO-5]pSti6arN-I2`3knO9J$qZ!!!&F!!`W7(*GG;I\6P?#Focu%g`CA!UKgM!"U#9Cn%W:\?*3A M-`1e'*bK;VuS+H(GA9dH'+r*Ye8-/c*Nt"K7SQ%IXm!&M3Xd;\[\lFXgYL+L]h0N+:&#I!]:EHB:QoP W1gf'TTb=iKReH#L5_:bUoLH'htHd9Y?;kG!t6"m8SsNh]\;rMm>jXF!!!$#j8^#!.9DABaiqc=b/CW] S!]G$Nf]HmSYW0br2g.?\!_A80E`0o!!!&B!"]>a;gkRL[^E3_hUKMp7NV`j!"/i4%2'U?=E]msU8\!l rN-:*Vk06:Pa2-5$^[3GQCanEQ#&`.#+kmI!.k3&!4r5_!.k3&!.k4@!"]\s>)BK%e&&&UP_*t$H@(#< HqSm>Lln"!\^&gF]!8<4NH\f*5:@-H"9f#:/nV<es80HiJ:DuqH[C0hJs)n:c-OG?Wg6jY3ZAeF#R_b6 ;Jq]&_P`W09LLWa'aO^>o`4F\.1%(U<caY8`MoW&ObedMLkq.YT;8Tr\$`66V5^5JBNn;!1*$Z*"TneO !!WK-"pc\fWrE#&n%><0<&P9k'bLcS!<M0[.09YZ%N[Z;L9/&*]W.d!S!f+gKn>5OVRO=S\#H0lNHJQ( 3?\b;#6P"S!07*g"V;V$5%Tu+s5UekW_&nHKQq`gH[:-kJqf8TWOp3i]WJ*#Lh]m`4<tCD#Qt2>,sPX] TXhh8TTk=bIsuflJr5b\V6[hJY,J4sQ#0&8$k3UQ'M+&3rr3;PX+atE((1BP"69Fh!X&`7(e9A1s8Vs- ^7((?NJigYP*)3/[DU5,\brK8VLDc1'+YET!s&GI!!`iQ3)jj_ZbZO?#cNJa1'n*f!s.`gli74k"U>>k EPDGP$0/=UCITET$3p[6!2ol/"XQc`V7t7(WhPr>G^4U`IJnO)J;0)KT!-)_b.b3_X-S3K<'<Z()[HQM "pc2FP3;lFeX_5?I=6HhI=?[(S?9]Pb.XjGDbE>J()%&Z(bS<eKr2PcRX.h$4=_E["9JW*kPuS'"9o/F 6$p]Qs8Bp*O,8aSO,f?bR&%%&cc!Gsr2U!S?p,A=%0Hk=!<LFF#6=o1#Sp'lh#@<^cDuJ$72lsU%0Ze6 !TO.g":lJ&4^ET6a3;`;WVrmrWro<"VP!jSqiqVXR$sIf=#_'/%LN:=!MKLF!.k3&!4r5_!.k3&!.k4< !$VOlA%^jQ_lf5J@7iF60.\P'1-%U!FdBGUe(`j9RTM*P!VcX6#U;fTOGnBp<(&]&0J+e:93c:lYL):L Qt&5]q#C^(1R-q>UO-,Q!Up*S!$)8%QfH`<Ya'rfC0OqM@:FGJ\'!4Si8ib,NFF^T_>joF(cZ&qdas49 %KY)[*!-j:FMHqqgt'fTMJ5^\?"\,2WlX#Sd_Mu,-jRoqM#[_j8:I2Gf]3:\UNos769$Xt/.X<j794,P T>91@d_)H6.gktM)@T0DgqT(k;+Ef-/28q=3`^[*_p6ljjKV&[q#C[0-r,<*j,>_uf`2-U'/a$R&\uc, ViPq7@pN,?Bm>E#Zcq5'joaOr2%%/"!X:WVrT41<@h[u)jo>Yk+$jeDg9a?\V?!Cl+TW?MRH!#F\"J=e ;a*#l/L`2(2EaZFMQ+J=f\bi"DEA^9"S_s:!Z3n%KTpt&>"Lb41G((679*uNU;Yj?Wc^lO!Vl^$)edpQ Z&<02"PWnk&2@4@][4HoOa:hS?!1BFGCu0baP-RS!gPkWrW'e8#nAF]K>-HH<uhCo!!WQN@Y:Z(i;Mg: jp0\[Sp4[SAnV$U#&7mgCIocZRK.p>JcLB&])[E_JcLB&JcP<@@g!2V+ZW_KQb^JWaN`)XaMYg,]!o,S Ycat(Vl[/2\\-&Hh8laK;C_tV"9JQ7,re._??ip,eBc7S^:Uq_ZDsdtWO07NgA_-Pql+'Z(_dSk)c(XE _:\J]s5TYY1EmVD!qlW_!$2.D"UH#AFd9bX_8OF<bJqE4\[JfKY-G=?\%95mo`"jqa+mJ9)A!/Tb5_eV +uhn`??Md]rr2un#I\\8$O6h;!T3qe":Gnb2Hk9h^VRb'`5DSq'>V)_X/iP;]u8Ohr;Y?BE(`,8&H)XZ !0.$e!<N<3/kJc9@tL2b<l)`#e^)@T]=GAYZa$[6VPgT-]>E+fs8V8`F\+J;'EeI?#7)YYI@e3g`Q-!< _S3UjZ`pO0W2H`&[^s3,fY*\p;_o*j(be-D<bdE%khsO`JQFN6huErb)DaTH<+HSq^V[q0a2Gg-]X>)L X0&h@^&>\R^t?],JmUbf#Qb&.c2\(M"9f&R;L4f1^BhX#Z\i*[0,XlY!9aCn&Lfe0;Ib-Ti8rCqO^gNi WrT'u,m"Ad*%Xm$KtP7?a32fWb/V92]=5/TZ*:=0W2m,/\%BE:imPF_OCC3a#6b22#9>Wb7942jdF?Xf `50-t\$<!5Unk0(]ufpGrti_&65^OO%1543MR^strr;u+G!dVr&-h1q(]tR.5"&7XJ\/e9`lH$6]tCh^ Z)t.8\\%dS"kq,$LLW^U-OTtW!<L@D#mD2%5=ejkM8&NZrs-o1:`KcG!s.H_$NU>5#nfL:L7kHL\bs5? ^B;0a]Y!sMrj`F#rVuiBN)1Z("p4q%!.k3&!.k3_!.k3&!.k3&!:^%'$Qh?)CP/"TY-,"7[^`]IX/`+r V>dA^VQ$SuY,eV*Xg>@$GZ6UD$j$J2!<=*1Gcefr\#Zj>Ycb%+W2?AfVPg>kXfJPFnb2V?MEhRM"q_n2 =aQR?a6!!faDW[0!<3)n!:Kmm"Ul4l2d:d'riQI0Za@$?Xf;;t'</.;Yd(F9Y-Q[Bj48oS)?9a<!QkBN 'KKZaXgPRBZeaB^Yl\Pq&`*Ne!@.sj01K8oPGPCbYHY=;ZEUC-W2chsXfS\2`nTnQY\Gj##Qt4U!07*g !<N?+'hjJ3p[$;<XY?o^ZaI-BX/2\kUnafaVl?SrWi`MDht-QaGruN?!s/K,%iQcZ@YUY\Xg#"3YH4`& V]qq3W3*D4ZEUO7[@D5'+VY7c"Xm/mVQmP:XLY$O:b`t#"5j.`"YEl7^;@eq^9OoIZ`gF2WMucoVZNiu XSf1+Y-=%$4=D!R"3UZL":Gtf1g5@#r2g3oEBas?"Tnel!9aCn)aeG1Y-k^>\?(Nn3?o1AWrT'u*!@'2 7ppV)V6-o(Z*_'LZ)st'V59uaVPU2iX0;N("g+o8UkE/>5pm<L!W`?'%5qa`_83^aZa6m@X/i1rV5C/f Vl6`!Xgd?ap%#4f*WQ<P)'qjkO/oqIo(MI36k01s!<M6]&HaF\KY#+>^9FlHZEL=1WMuipW<'-%qlL%- QY\r;)$(-J`rHYT.T:_lZF.*Aced0jJ41L]huF,d#SA"(95KQbWN<3!Xo5@+Y,n_*Wi;uoX8]+(akGCk P>`n9T)aHCJcLB&])[E_JcLB&JcP<@0G$!CM6OqI_Q'N/TUq^FStDXKTVA3ZXKSk8Z`gI2WiMkE@n&!m 'aasD"U>>eB<_C8/*3q,TUhXGU7n?YXL#FK[]QO0P#F_)%L`^M$QqE,DNh<AVj(ad6o$/*#Q=et!:Kn9 #p2--F-s>RWi)_hU7n?XU8FojY->+1VP^;kWh=TA9f4@C'*eXC!mUcM!X&]5.UoFWrs%r)TPRRc&-Wd\ $3L;0iW(A-!X&Z<.S4H;WkH9MW2HJeU84NWVQ$Z'['$F-TpBn)<C/>S"p>&1ciB+,$j@1]-pD4,dJr7? W2g-#V4j?HSY,nV32NUTYHkUIZ)ak#QZ#Yk3\)!M"9S`-%jaDEH_@paW2HMgT:V^MTVSKgZ*LX9Vkp;j Wg%Bk*=;]Q!u+:_fDbdVdAqt04;J;1"p<od$3CA:$5lEke,TIH!6P28%&KhtVPU>sZa[<EWN#is#cE2Y 3"H<$"9QaH#7;P4<,e/0_#:;>W.nV6#mCJ7!UKgQ!!WK.#738-^Ae-=ij+ea7N`*H#6V",VuS+I,t`<V ^<Y3-W2-/[SXuCDU7n?VV5LAtYd:^@XfJM&X,V$q1d*0(%0Qb:"pc2GPNi,Iq8AquT:DRHTqe?_YI2$R Z)XdmBLk33$4I4E(G80cKr2PcRX.h$4=_E["9JW*kPuS'":#8J6\!8Ys8LBAU84T]VPU/dW3!51[&pC. r2U!V?p,23#QY&1b5_bJ!sJrG98q[*rs[2RJ6bS_'bq/]!W`>^!"8uF-pC[WS$p&?YGnQ#X8T('W2Q_t Vl?ZlVuE\'IU,2V$kE[K!W`=r!.k3&!.k3_!.k3&!.k3&!:9b0"=7Qjjl"tJe',_@YH4h*W2d#*[D9r7 g>:`HjOJE-$N]u%)[@NTDkkP#`P/a`Y,n\'Z+Iindb<R>`/RhO!Vl^%">c;&`hRl`%0>qul2Vh/2OEO_ h:gE+b/V98`5T^<e_/g<j5f=VV.V[s"2Y$F";j.1S'ooC4:VDA!#kqX;m#3Cj5JnLd`8o3`5]mEg"bTD a01_*'`lJXM#[_j8:I2Gf]F+.fZV%?[BHX3Wi<#%\A?53f%f3Baf:/*'a"(/)@T0DinMr']stGPWi`G. Z,"W:gu.2Qjf^lTq#C[0.SkW.j,>_uf`2-U'/WmN&]*A[f[@m^`P]L/a32l[g>1`djoaL^,6G[]!X:WV rT41<@h[u)jo>Yk+@C+Jg9a?\V?!Cl+TW?MRH!8_gXa]k]sFlCX/N#!YHtg[dFm@5iT0-i7hl+"!#ktT 2I;H]cH!c2ZEL@1W3<_F`Qm&iiRjr@4VIMi#TII1d]n^A)$J[o'b;uuKtH3sg==<c`P]L.`lcWWg>1]b joU/b"TAD<!!s/d;1u[FWE1)Bec5mj=M`A;h;nOsrT4=Dgt'Ze`PqSk"-#hg!h01A!.k3&!4r5_!.k3& !.k4@!!`W8(EkeBFdMU4&&?'#`Q$$Hbgb(WWJG"I*W,mF%3dYn93Z;#\[f>cpqHsI_8=7drr3hhO]<eC &.]-e:Nr2Bg@tXIj.0U7+r:Ugp&OO]$NU>5#8p*PNN]e$]C`iL^qdk3hY@'GkGW5\'+P<O!QtHK$mR`! :LA:8bPqMAoEVdF3su8s!Wh3Z%fuqB%jFegMl<\\\%'#]^AP_V_8F74f_>CFoX03H0d7A?ciB(+$NU;1 %5(4H;e(EK^[]&Y^r!t0fCf.Cs2'Ol/g1u<!W`B,#:!,kQ*7^/^%f>b^qmn*_oBsGe&A5;@7;^Z";idU 7TXA]]BJ1pWe"2)%,_*i"W/mV79*n&J?ZJl]>"*U&AZ0$a3)ZSc-+&*L1*S+(^/"^#6=o1#TlrjRf0u, ^s96B>t$C`"7-$O!"TYj4%3(YI]D>fdC#'G4Vk'uVuR))#nn:0:MYZsn\5LJ_8F42aN_uPf#Y.`")pp_ $2ji3"rT'U79*uS\@K5apqHsI_8=1Nrr3K'XD0^.&e>EY4)'S^cL(W2#.8VA-Q<U#j8]Sj'eDL9<+:3R [^`r`q7dET_SjI8c-jhX`ib839/6Me#0-]X"W9'[86B\d^@D7'rm-O!*!lfO!TX4d!='#H+A[$=^%oG0 ^B!?ors.PP=sXL["9P=uJcLB&JcNC_JcLB&JcLB&nGie%+#m)4K:&_/XUhS=ZEppI\Zr<*H<)gF'F4O9 $Q20ERBa94Z)k%/Y4o%:YHG1io_%goE]4=+"q_k1=*p@=al`9iaDW[0!<3)n!:Kmp"Ul.i1KJdfY,n_p XU22=^XCKLWb+.#`W-D\3+7cFZEpjCh:KiM!b*nrgAh]e&K`Sl@""<=Wj&V/YHIc)&$E+?YeoDio\PR' *<H<C!mgq.!"8l0!sB?4M:)(adCHCLXo>I>Z+Jrao^\_^.0BVP!W`H6(a:tGI@@4<p8oI?YHY::Za@$; MI8:Z%gW:A-r5)aYHtR:\Y4=D0HCW*huErb-r>;k[($7IWiN5&pT4t/YHbFB[BQd!DFY`]$3gRT!!`W7 (*5;8I\6P?#Fog!&-rFA!UKgM!"U#8C6u$.[&gd=LKle`'*bK;VuR&*(GA9dH'+rmXUMA9Z*L^C]!\c= LL`UO-Q!0mr;[*30jBC7[CEWGorT@>Y-5(ToCqn>O%UAl":Z1n8SsNh]\N,Pm>aRD!!!$#j8]Pi,><9Y Ydq9GX/rDtXU_M:YHY:@[BZm&G"X%p$ipP7`rHYT.8Y>dY-YI9c.p[\HUJkVhuF#c%j*Mn@tL5Rq5s"c #Ku;hfV)M"#G2!J!.k3&!4r5_!.k3&!.k4@!!a&j>)BK%e&(UT+KD95TV%jISrn(m1D^W2"TST,"pcbe T_AEcotIH*WN,`o+/l$4UN]a*,R"G["UcD2:i;H!_P`Q+91(?Y'F+^A!qcQ^!"0&P2,J%IWkbj?WN#Nj &#lJ(ToX(i2&mSO%0Qe8!R:ZL!X&]5.V#LXrs%u*TPIRd&d9$`$NgD1h>e&l*]6i6O/KOs[&g4)WMuoq Wt22,USF,t@TGiR,7XeX!Wp^KNrTRl&0!#]AX(UBj1VClnZ*Y/VPU)UG%+B6/0GB(!<<-#$m7N.Dj.?; ZE'q'po>(.W26;bU7n69AO7=A$4."Q8;Pmsrs@,SKjd%Z$jd+?j8]Dd":#8N7")rOrrq/]XK/D%po=q' UnXNSSt2<p<A"X`"9S_K!!`iP2c4LYYe^4<#cNJ`1("3h!s.`gli74k"U>>kEkhVR$0/=UCI]NW$3p[6 !2ol'"XQc`V7t7(Wq!+uWi)YdT:haHS:"[/*YT4s#6P#0"U>r;K?jMsrme$IWN,`o+K;97UPiGO0a@pi "pGbp7::eF]rd`G:I[;n*"2rO!WhKb#6=r4#nfFD])M^5iNoVdX/bur%]ZG(U7n3NSt1411_0fprrU@D #6=o1#Sp$mh>[E_c`;V'6lQmU%Kun7!Tj@i!<N<.+#d/@Q*.m%q5`k_$Ar(Y-4CCn"p+f+U&]cFJcLB& ])[E_JcLB&JcP0<!sBo[]^Y%jjl,+Qg!e*]RR7_\!!r]D2d_imgtpuLpuVh@h:pPQ>:L!T!!i]_PiK]U G>en<!9sOg""J`Ng>1]Zjp:#&fZg^71(OH&!"&fF3+A?)f7Q0p!7LoT"Y=f8ce7.7jQ,G#jpC)*h:ou? Db;/WaoI7u"qO7RT>0%@n`C/<hV6T!Q")rs"n_j""uVOmg>(Z^jpL52iS`PDc,G#W"Si$'%4P&&]Ani* #M9"Y$n+ks"gQk@ioB.rjpL2-h:pQ/a1eWC%DVrF"ur7RjoXCL'BT;W!!icN6>rjWZpt\)!2KSt!>\7p ipl.>jl>:Ugt0lk]3c]a!;6Bu%Ot5&\(ofsiqVX@j58YE\TBhHpAbI<B\Ch9L1(i"gAhNd,Y3'Xg#1lM jn\$Gjl#"Nf[7aU[8%>4!5\^B%4Y2,^?)=n*!4^l!sgcAj8%j(joi5-.gH*F!.k3&!.k3_!.k3&!.k3& !:^$o":Q(i3EgQln@oLNaO8l3mG#k!XH\!:6nB#L!"0/R/NH@+CkJ7SZb-"I+Mu[glL*olaIHs/*XiGb $6)`bR)7YTs8V,J?SN]>$Ng#%mf3^r!X&]@5%8u%R&%4`^C\6,e^Dmk`O;I]:+Qh]"p4nL!"98Z2FC8J GFQeTs8VKlZZ.u3"p=u.huF8g":#8N4'Zr_M2RRoY-be<^CS9.hX(.3im>#e?9BAK&-gJ]NW9Ff!Wif` 8PN,nJt'OF^Dt)9hr<\Pd`&VO?p>bM%gN+9!X&]I7V[U?SuK?s^ECA2aNi]'gX![2K4%,'*t&2f/NlO' C5BLahSl@@<%n^<!!WN>-TOLlA-I.@Su]93q7dKXak>nPmFfRiTRpW@1*I53b5_bJ!sJrO;1"f2^BhX! YCp%F/JeNU!9aCn&L]_0;It<Wi8r@oOCLEhWrT'u#Qb;G*%Xm$KtQrj%)Kp.f];YbdDN>_KP:Na1`Q_u !"/rE,r@kcApB`<Xh"5A(;eDTkO.`sdBS$o.Lcdp$OAh-N4@4'rr320F$V&i&-_+p$j.(e2aC8NFH<&m [(Q4L%`-6<k4\8uagn.#AOnX'!>G[W!#,SR0Kr$2D2Q(!s8Vr=Mbb8s"Tned!!`T8)_!^HDMe/'m(WP_ rr35YR9:dA"p4q%!.k3&!.k3_!.k3&!.k3&!:^$o$Qh?)CP/"Tn?!5*[_^/CfY+)AF]UUH'ak3C!!s;p <-XFmV6$i#p8oI?]YVJ0c+pH09I9uG#8%q0<dC+;bNefpb&/g4!!!$#p&OO]$3UYI)(S?qMkd,Jo;rD' Z*UR/T9">05U$NS!"9Ju?%euTZ*CUccb>bJ=Y:3=!"T2@'d#&#A:0N2X15UEZ*4)-&$NCYbLb"RY)ZaE 'a"I<!mgq.!"8l0!sB?4M:)(adCHCLXW4LP\$WTNYGRXt4;n;%!<N9*$P=4-:2Pr]UT1EjXWXgQ[_0o( [%`Im7O/HL"TeiS:3N>6Za-[@STIIT)[uo-!!WTM6>)4EU]dg&Z)ao"XUqY@^WFp>Xe(Mj:G3@i#Qt4P !!`W7'HT)8I@gA=#FfTo%0m%=!UKgM!"Tu5BToC"Z`L[<Kj-J[&I,99VuR&*(GA9dH'+rmXUMD>]Z8LZ aK1bX@RVXH)A!/Vr;[34-:hp/Q_CF^XKS`#XWXdV^Ve1>`jM"91_Kfl%2^?]D2kU1ht6X1O$aBW!!*,] !"/lL5%9;6U8tK#XfM6!%^*(Ma3hl1T941n1DUH+!<`JE!"];^9luo(YHk7QeAeY/4rOO`!<*!("s#^* F,?KhpoWnb#KkuXb`PaL#+kmI!.k3&!4r5_!.k3&!.k4@!!a&j>)BK%e&(UT+JkTqOF27sH#["T-4pXl "98K*"U-)CJ%F4fgWmF>Xf;)r+/PBbKkO+0%1!1B!sfu,:2>rp_PN?"8O+^J'*\O?!qcQ^!"&oJ/3mBa RC'oL\auj3VOrs*G@!cn)AWeh!s/MJ!!WK-"UHPeXT&5(o=go:=#:Wq)AEP\!<M$W%gEap2bn(?TX;;F \u2C%WVie)VOs$+FCnN@1aj1KrW3'#ciB+,$j@1]-pD4,dJr7?W2oHh*2fElLO*Q15V+,p#m1/.!<<HF /O3H`QE@^0[&Ni$$`B\gRZ)rPIV_n;(&eIA#o#sff`(mWe>n@54r4V6"p<od$3:54#ST..S(Hor"SBaH [&j&'&>u1fM0sc"H$*=V+:&,Q!s-RF#72D.:25lo^AY)<W.\M4$3^P7!UKgQ!!WK.#73;/^]+6>jg(+d 80SNO#6V",VuR),,t`<V^<Y3-nZ*(sTUM+!G'A7V@nSKl'+G6N!s&H+"Va%4UXIoTe[r>pWVEM:VOj!, FB:I?"pbG:";NLV?@elaXdO*%6Sfu+$NgG3!U'Lo!<WK2%PhCVeE6Apbe1<apo=LqTp^i<Hj=q??UH(G "Tnc-!m:QK!<WK1(/'\Err3ARX+FbJ*?#\'"T\Yd!"8l1"UG\j8T'lq]YgcFX6ckoMI/q!&/#EV!W`=r !.k3&!.k3_!.k3&!.k3&!:9ag"=7QjnE():g!.C6M/QEQ&H_S)#RDJ9C88bqg>D\f#2@/%Puo@>pAbI$ 16gb7RVbV%mf;SP"Va\"ZH:hmjp0\ZSpOHf&-K]J$3Co!?'ipiJ2dr<dJsR[/RO")a5#S2jS\-GhUB<F KMjH="j$b$!!Ws)I\4C-k4.R>hoi3`Cd]T]"S;Zu!Z+^qXiK2kjpC))g![L$H!W-1p](R--;/ctj,>Ys fDl!U'f0"sO2fZ&hrOUq$K0RW[@MeY:,idc^]4E?2k9j/!o@;tjoFND#R)55Co?!o7hDNtU]:Mu(.jqR n`C8@h9s<QP]pM,*<cECp&G@#'JW^K^s(HepuVh<ca]Td2\H2d!!jKTg!HaI<tPMg!!r]>/ld\Cdb3O= q;r%Efu^^rJS@qD&cqq2_>joN-;8m$jeboo!WgsS"9]lKUZD75m,eDZ@3buF!.k3&!.k3_!.k3&!.k3& !:^$o":Q(i3EgQln@oLPeE6K)nB\M5K4dn<.2`Nk!"0#F+YQ2bCO1o)UU^*6+OB6;m+K7RM.K40'*ngK #oZQ_QbqYXs8V,I>qR36$Ng#%mf3^r!<WH81/r1=L6S\0^CS<5d`T.uOa1A*0H:<$!s6UF$k+:;6;M$5 SB_'5r9+?hE&\(+!s7?[&-2k9"qN%F=(cT"G`nVt[_D^T&'*T&s8CigSU+O+-l!7!"OI./!"/f/!Y$bR 9iGPRS%nL.&&I,ain(rCNcJ2b.233s"TAE.!s95r=E/qNS$2V%+N2COh>$*Y]V9sa5V!oi#6Yho4[iCd LV)X%_kMKU0+6\<"p5AX0K`6B"`K$SR]O-s^C\?:nc/XRb,phL=[4GX'++fa!!`N,"U?)GHCOlJ#f+Ta JQ4la('En'kPu,*-TX[pAUg`<jjCJt@m(U.!2ol'!XTM[/5L&8]^``F_9Ca)rVYEaViG^t56EP\&Hr%4 $j7(\.QC:9FbPsMZ+g%K(<#.rn)DKpPB9_]*!ciV#m`S+N4%()rr320E]tZa%L(nn$iphY/NQ[8D1@P6 X1J,A%`6cas8VQ4Z'BW@67j8o!=K"M!#,SQ00Vp1DN)='s8V]2Le\fl"9JVc!!rZ0'e272<G.*$q7l:2 $g@WjrR[?:,7"GT!M]XH!.k3&!4r5_!.k3&!.k4@!!`lR3)FCCR&f_Y&$j(&jn@<+KP""<+qY.d"8i-, %jjPGEIj:IW338(poP[K`590eQ$Zq///JHl#ne41<dL7>cL(>ubASs5!!!$#p&OO]$NgSB'I#bIHBaqq W:[2"ZEL6pKQ16c0d./6`W-DZ1g#6rW33>1d)N;F!`19SgAh`d"q;4c0hPepMk\#%\?rL<XUh\Te(r<M MJH!F*t&)M!WgXJNrTRh!WrQ?9Sq0km*WAGnZ<e7\[AH*LN?m!2'EG1!<N9&"9o8G+[0.WNgc`DpoP[E \&-AM_kD`q8hC_^"Tnf0,ti<MX0Jq2[[_A,//\m!huEra)DtE1JWU,0Y-,"0XSJt0YJ8E>fsR&g?q;sk $3p_:!m:QK"Uc"b10T-ur2g3nDESF6"9S\k!9aCn)a@trV67))\>b0b2'EM8WrT'u#6Yhr7ppV)V=:Sq YI_s8n)h6FDc]1R'a"mN"TnW&$O7\2:hk?8S#EEiY5#+AYeS)n[@N%f;)TI&!<irM,"?C.XM<cgp@"&0 %KHJ0!TX4g!u<UeCOV;:XKJb-poP%/]Z]*a\s[nU9/@Us#6b,1!lk9P"XZi[QD:L_XNJbtT4Bkr"60C\ !=/u^<.M$W]tLNCXmE.pa4ekOIn(XcT)aHCJcLB&])[E_JcLB&JcP<@#7rXoM6OqI_XOTKTpL=A>?tH9 :d$9E$3pY8!!*-'";s1,N2O,#`l5[!WVEM9Sqq`2=[4>C"p>#1#TY`rC5f:/V2JGG4<bdW"p4r/o`4F\ $O%1g1.c,7W5?Qm\+H^/Ulg+C?;!4%&If!KrW17D"p+l1#:X/brr32s^S#UL2&cT;'FOg?h>e)i$l'm< 87d@EY.DQQW2?JmrMp=#OEkMK;aiJe(_-cL!WW8J!07*g"V;V$5%Tu+s5UekX7<5!Um$@L@oG`K)\`\b !r`3/!!X)Z0h,T%S?KE5ZM:I6URRU0Ec,St:c]d1"9f#9'M459rr3;UX+k(I(^p]T"69Fh!<NB.%P(;" W5.$gqr>u:ZM:I3VO)gKB4>1K9faO5"9S`-!QtHJ#otfpB8in*rMp4&KO-;;"9\f-li?AP"p+r5#rZk> rr3;eZBT/r,S(7g"02F#!!i`S8p-uEcI8f`WsknpNGhp->Zt/t0cgc<#R(>4!<N<)%kLM&Ts28N`kf9h Wqi\#UQU.I@7i6hrWO#=!u*:R>_&Q]Y*`rs5qO2p#m151!U'Lp!<NB-#q/DeV7kCMl-[ATWqi\*Vj`9V An#%I:-C!?"p4r.!WgIE#6=l0"r'[ihu<W`e#S%06m!Ec%L)q7jo>bj"UPYX3F@`Ya329nX6ckoMIT-u 'bq2_!W`=r!.k3&!.k3_!.k3&!.k3&!:9ag"=7QjnE(&6bI=6h7kPS_!V69s!=0i<GbM^qh>$+:c_Yqh /.M^T!!iZ]PMs6?AjHUh!9jIe"Y!c/X3gM$#1oGW3unV.^AnTB&hdCNcddJ%$j"`U#mMD7DPtq9h;[Pp jp0YUTQs0W%Ka]OM#[_j8:I2Gf]M_d#McV2;(rai!V-3o"X[,mVUYD'#iF:X^lVk`*XMK?#RVbHHFMpn 0F$,/!X9T."`C<ScJ.CTjp9haWInPA-4p?o!!3<]SGhROhI$uY!9O7e"WKU=VV8CI&>fH'!!E<<8X\T. jpC(t^oEGp2]rP2rW)Tk#Qto$A!jOAg#`%l#26MD@lkJ/p&G@9B%bM-F\W;Fg&MB](cl<(]Zf*iq;qt@ bH?Y45q!ENqZ+J5#mheHHFi449c4#c!!NQJ7=2Z.q<%&+"128S".K:B!.k3&!4r5_!.k3&!.k4@!!`W8 (EkeBFdMU4&'*T%s8V2lQ#]qj-PR't"T/6-"Uu4i2c4.-I#49"pqIs*mHirQT6F3s.iJ`s"9o)J9m;r@ ir8uXj-X%&*"rY\p&OL\rW*62,skdMH&80c^CST<aL7Xf?UQLi(CUBI!WgFD$k"175u;$7S'D!5pu2L[ D`7h&!s7?[&-2e5!sT>[00iZSC57nCZG-:P&'aYEs8'g+Ce?Z6'F"^C!mgq-!"/f/!Y$bR9iGPRS%nL. *6$stf#+/.>!4M]'*e[C!W`9%!<Wi[6<\5UP,\5k+N;acmJPhTTmp?3,8(Ci"9TDi3^Zq`LV)X#^n5jK /IUJ:"p,/J,;Mqu"_i(0OJ08]^B)=9rr3A\Z&)m]2'EM="p4nL!!`N+!s]fDH^juK#enE\I8E$S'a*e& kPu,*-TXXoAq$f=jj:Ds@m(U.!2ol'!XTM[/5L&8]^``F_U\,Ss80p5I:>]#)?UQZ"p4`'$j-hM*%OQd DKpesW4r)B(<Yk/kg?Jd@7)dm&-E%=#7*A(Mm_"-rr32/D`o6[%0bem$ip\M+tlMlBle`_TXXa3!Q<sr rs@VlNb2!F,SCIi!<`GD!#,SQ/NlU.E/_O*s8;9'LJ/Kf!s/Mc!"&`-"s#]k7T*`R^A5P1^C0B-s7k$- =!7bO!s,.sJcLB&JcNC_JcLB&JcLB&nGie%+#m)4K:&_/XUhhbk4J>gNF"[s)\3)T!s8B#$O[k(5?2KM Q)(C_XSAn<]#D@cMJ#C.*"`GY":>b]/ld1dYgN"7ou_/'!<E*"p&OO]$N^J=%N.'!CP.hBWV!;#[&f[C @Rr6p%LE:@`W-DY0i`L_UT:N&bIsWq!_=ODgAh`c!sAf:*%X<SG*ftd^pp]JXUMS_hVGu&>W3]<$O$V2 !RLh-!"8l0!sB?4M:)(adCHCLXW4RRWg%d76Rrub$O$S4!W`9&":#2J0M5r)NLZsBXUDJMcJ7WlLgWS$ )@??D&-aCPELNi/Z)kC$DaGih$No;e"p>Sf4]?*G"I?*lY-@]'&?j./gs;L19e[e.$NpP6!WgIE#6bML *&:WETDYerR;P(p"U+r/li?5L%iRT@N1m;UX15-\=>M$1#-.a&!!`WC01TDqOeqQL%'[\,nb;%;E()K) '*n[D!s8W'!"9#F,reS.H&eSsXfec$XWOsh_6]SP;`,X3$j?\9%N$?YCQGR5k4\N:N^O<V!!2*[$j%"d 3Da@9P,YXgYcRZ&%^3h)gsr0B;)0C6%0Zh9!<N;B!"];Z7r+-VVld&A_l\o#0GFTK!"&`-!Xq/1XQ8R& `;$J$XTuhk_5M?=*!Mr7JcLB&JcNC_JcLB&JcLB&nGie*10TO=`7)TmWummj@SKWd4>eN,'F=mE!s/H& !<E66.7@ZnPGl.6`OtrG+.%@i=@Y.e#6Fu/!XB]$8nO$`^86Q_76)A+&-`4<!qcQ^!"/o>)C@FCFIBYQ `k:rE$_`;l<'N&Y&I8RD"3LTJ!WrT1-tKL[rs&>9TljKt+9Wf'$ipCb!"]28#7;1r7::\9ZH'ASVkpEl WsbPMB3S(q0,kB."pFo+cN'"+$j@1]-pD4,dJr7?W2oHh%A\i#>tR4/)%-]R"9AQ&!"/r>(*PJ,BS`=b \[M:6';1_NF_+cP4t[rj#6P,6#S]mhg&D!XeuOO74rFe9"p<od$3:21":6/3>'usX"n2EOc+0kMWt2"a D.$:65;=2p%L3(<!WgFD#7)8&87ROW]D\c9W.nV3#6b54!UKgQ!!WK.#73>1_#F??kHpIi8L4oV#Qq+- VuR),,t`<V^<Y3-nZ*(pQZ?"t7R/m`+VtRj'*JC=!<<-$!XTr/<cs=o[Dp;(ZhUR-Tn[Po:-9g4"9\W) ',2l\>(**TY*`Zi5:7B`$3L>2!U'Lo!<N<*#9>a'GalG2s6%_?po=n%ODeT.8jP6V(_6iS!Wi?'aoDYI !X&Z@8s&!1rsRAXJn7@r+W1do!<M<_$j$\E'dZ@kXn_JH[]9/(m&LGNAk*s](CpZM!MKLF!.k3&!4r5_ !.k3&!.k4<!!<?MA%_<n#MZtdJ4L[f!Ug!m$7Jf$TYfFXjorMN:b<1Yp&G@#0U(J,NF"[Lmf;SP"T],h =,FiejoikQ3th_0!"&c<.o_SSeTrtZ!mgoQ!>IkTa3iW!jo+<FeZ!ae,R_TlM#[_j8:I2Gf]M_d"k]#9 -O^(F!!EWV:PHjajp0_g^9(p%'*@k-#RDM@GIQUg0*To,!=:+W;2M3dfAl\h#2QbC=>:Tq]Dr!:24XX- !o@;sjoFND#Qu#,B;F7g7hDNtU]:Mu(.jqRn`C)8afLJ6,S1(U!;$6r"<0RGPI8s&q;qk0Rp\2n"SDa# (hMCFTl!:*!SIGX"sQ]jUqY@;q;qn<]o$,S)$fs;_>jlJ*CG"Zje,3^"53_Z!?=OFSBBshk3V44Z</+K RfJ$?JcLB&])[E_JcLB&JcP<@%g3:W+ZW_KQb^JV`lQ9C_u@@H]*m0]s8Vr8QYoSY,7aJK$Np_F'.6+L Cj(MqWVsF+]bT&Ke&\;0;_fI3%0HV4"9oT2EgFT3rr35HLJ]B9&-r@2!:0[k!<sGr7p'\^RJaYo\Gj&I `PJdGGZd-P%1*1?`W-DS*&'QO@<I^^nF,Mf#+]6Z"9S]+gAhW`"Ubq`6!J#9GDMm$rONBinb`7?WHCca *tnn'!0.$e!<N<3/kJc9@tL2b#/J$nbK%K5rj`*?]=\'U%*I#@]VKpW3#`P@"p+T$#lt&4)D+<YEJgIf ])B,]biA?okJ<g<>sKbJ!WiB'!u*(@5uhTKZ-U@kO)%<8$K(mg!XB8S,X594@r$7=Og4krrOiWbm/$\K ^5cYd0-1T(`rH>F!X&]F96H^%\d5pXRVt\Q,8(+F!9aCn&0j)";e:9Gcd9G(K3U>MWrT'u'*8IR*%Xm$ KtP7>`Q6-BahYU']_oAM`U!L&s4F<"=[=PQ"8Mp*!X9#E*B6o-Ee'+A\Ga#;]cbSNe]kFW@6PtU&-`+8 !sJlb@Yq;IrVuo]Tk$)%'FP')!"8l4%i6EQ;djE^J<$`0])B;PaQiQuou!#,5VF2k!WW5>!#,PM-ojb$ D2#F`o'5)=H:/GL!s/Mc!"&`-#9Z,t85WcE\G<`&\dR]pnE%B<:EB]C!s,.sJcLB&JcNC_JcLB&JcLB& nGj(-+#m)4K:&^BY-5(8Za-b5Wr&k*`om'lkbVuU*>8b_p]([*&KE5^<G[8NR\H_YX8Jt<ZE0^YAjRdP "9S]+":,PV.8FiFZfUrVp9A'T!W`3#p&OO]$N^J:#nn[N=DiVJSG]GcXT5O'Ws4r=?U-(W#Q4\C!"9Ah 959'>S>!'eRt4oJ3#r:V!"8r>)C@INJudPJ_7$ECXp_k[a249U3>D]#!WpRGNrTRh!WrQ?9Sq0km*WAG #-P)4YHP(0ri-I1XK8P(WiMhSFBCRI$ip8-qu@**!WrT8+ZE2/HB"QpX8T..^X_N=c^/9.-5[*mr;[B4 +[]guQ(F_LTnHi6+r(FehuEr`%N?o\<GMbgS"QOPWVrmrXUMVTai:K.:G!.d#6P"I!!`W5&K32tFd2j* #cWho1CFBi!<VTfkPu,/3*L]jR\?LUPAs2E)\*%P!2ol2";`^]@!Rm2Xfek3Z*LdAX/`2!r2^=7g[k46 ]mi^#((LQOq#Cd*%2U9H94E4/R@g;QX8T%?YHF^cG#0k,"9\c-!<ruK+$O1hUXSl2pXXdU$NL/-irBJh %2pZU;J1KGTV83\rN#n!%^Epl`OC:q0,"d""9JQ'`;gGQ+?j+[MO:!8Z(m:r7O8QHirBDe!<N]pHbB%? i5bVnm&LB!ZCZ\N0GXe`!.k3&!.k3_!.k3&!.k3&!:^%"&2IFGYf,#-Wi)_gTVA6[po"RZDd6$r/L;2C #mLP-!"02S/jrl`MkR>ZZ`j>*r2:]oE*Gdk,nU7\!<N9+)(e3]I@@4-E`kjc)&*J_!WiDq!:Kmq":>b] .RIHkS>WX!r29Ik%Afu#P^$Ft-QE^'!WiDE!"]25"9g#QSa6=Urm@'T=#qQ/*u#"^!SIG]"W&aZ?@J<H aLe^XVu<G"N-8T%3\MK^"9S],bQ*\($j@1]-pD4,dJr7?W2g-#Vl$;eVl9Tprhp=(W2Q,4@n\a-(^^9E !Wi3!$Np_F'I#M5CPJ.OXo,*qW"Y>CDdug>2^&nG#Qt/1"U>]-IDl-b$0\IB?p#24#mCCj!!rZ-!X9Di 5?E0+"j6fAk/se(Vu<J#Q[<:>4Z"Gu"p>#1`W-5K)(RpSHC1`2V[0/K="FOZ!s/Mi!:0[i!X/c6123li rsAA7NbM$1%grUFWrT'u%g=7OFeugte#K@DUS4EVV>dCnWr/e(S9\UC75621&.AdG!r2g("r/LG:hYEK Xg#1<r29Ll+I%4`:H^6G#Qb&.!<NiY3`0jYVlbGW:HB:-&IAOA!WhHa%fl_5"V`=H<HatPp\sI%YPkBt V@K,EBMq&O-5Hdg!s8Q(!6G3G!<N?,&k%8krr3>iWISJH.3]W>"Td]b$NgYG(aht$Y5dq>[eQceV[8#d 6mNZd%Kle5T`BZEJcLB&])[E_JcLB&JcP0<$Nqbc]]J).gt:0*b5TEX`s&`"><<Q)m/R=k%4Y%dNO&?! "G]f&%Kc;'#Qc&]^kPfC(BNt)kPt_e&M7"@r5SZTrl,&,8/D?>!!rrP5AmEu=<n.PcN".N)cNB3\\e9a "f$!',7FUm!/U[[%nM/A^Y%ZQhV?`,aiMO%`r3p^`l=o].1?7E!!<NQ;3:^qrPo,OS:YH6'E[q-#Qtht >*-[4+9U0p!<E]70O&[_Xi11XrPo)LHqc('"M4X8![D[_`WE_=#j)-L!!iW<.o1Z&L,016!2KT'!>\7p ioAqPg"4]sa8X*V`s0>DBh'QZ!rDuh!!NNH6!\r6pr3H3AN(G1oDf++8?JLp4WjjY!!Wi^<-!u!_YqLQ `s').;_Aafp]//2#m:nr=cgUE2@orD!!NHN:iDN(pr;[?"+`WL!h01A!.k3&!4r5_!.k3&!.k4@!$h[U (EkeBFdKtjj7`K>dCH'HTUqUBSXlCLXKo72L1j:@-l<<d!"Au6#n@n-79O5EK9Daprgj%\+eYKtQ&KZ] 4!b^T#m12/!sB,j=acg:YI1lp>WNf:$O-Y*!:'Un";)h67Ts\_R@9S7Sc5,jR[fn>T:CskBiI;I(^UBL !lb3K#8A@:5uqfVT;elhRKd\#,6IuK!S[S^!<i`;'JE*eEdNP&r1".jX08atF]((=((CGk!0.$e!<N<3 /kJc9@tL2b*6cgUahP*XS=#e9S=cFHTqIj;KQ1'W-km-t"9J?!%06YG+YH)bEep0RR[frJS.(jZVlHto LMg0Z/fP/r!>#>B)C[R<@<n6-N-Jl-1`ZeY!!WH-$P=7.6O$M!D0h#*SGeuhSt;RLXKSe(Jmq/#+Vb=b `rH>F!<N?92-kb2Rg>I<Celi6)%6T5!9aCn$5Y'J86g1qS<S_J>s]nLWrT'u,m"Ad*%Xm$KtPL\nGi== _Q0K+T:VLBSXuRUZ*gm#E`bOY*Y8DK!"Ar4#R_=p4AfR,I>jVbrgj%\+eYL"Q]HK#6nK;k$O$M3!WrQN 9Q$&gXL#F)CITZc%L<0t!"K#5$P+%'5>kp,G__QSSGo&kSt;RKWiiS+LhB73+r:Ug!!'t<'E\gb.QC14 H^gn6WhY)G1(FBf!<M9^#QY)F/3lg2CkMMPm$eBZXK/4R?8r]'!s/Lu!.k3&!.k3_!.k3&!.k3&!:^%& $Qh?)CP/"TY-uF#ftjGGK7nr6r/1rGR\$=7AO@gY%1!(2!"/r='-&J_9jVUWHA)3Q%#B^rLk'V^>!aeX #6Xo+%L*=R*B$f4LQ\4(W,=j>r;lQkmf3n"!sJo=*%O0J?#+\@LPUeDre_8FMMm@KJ8A4L.iT$'!<E0$ `W-DT+#Q_tB5r<KF(%g&![A<^f)Q3]#ne4+6=,&,P`Uo^reh2EM1^1u?U#hH"9S],bQ*\($ipD3";OUe dJ*"T\ZHgRWh5N;N/EIJLl.+HM26q<EF;L$-5Hjf!<N<"!"]/4!s8oJ-9"J!C3bSiLl$ufM@>E(PaItm @RMU]%g`@:!"]8L01]PeE-[.X>!F5I%L*$n!!WK3'-8Sa9a+jBFaAUor.trAMMm=GIWoL#1`Zu1"TneG !!`T1$kaUA<H.nk"G12P+U@uK!!;KekPu,)-pLgGD0:AT@nJ?m&decB!2ol3";`^]@!Rm2Xg,[fgWm!j LP(>;M>iDBMN*pmURu[+0c(?-"TnK"$j6kK)C../=_Vi#J;X;^+c(r2LkL(l@8&L!%Klh8!W`H2%i$Wc A:T`/U8WZ?-jThP!TX4h!XKAX-ojt*CialPLAZl?MMd=LL4=Ga:Gs=)#R(;3!!'t<&-Nb"6s=,;GD:<U <C&)P#m0,e$3:2/#qK&/X.u,FpkJ-i#CLGs9f4()".oRF!.k3&!4r5_!.k3&!.k4@!$i+2>)BK%e&&#S N-]GeIY3E3Ll$qDL5(A'?VW[8,odIP&&!"0#G+YGoQ?Z1:?K805X+bbVg>Y6t))%6TJ!<N6)&K`Vk <bd#4@S/?l'FtKQ!WiDq!:Kmt!sT5K*%jNVC34fULPL]`LC]2rKnFu!>t-Cb'FP$F!<L:B&-2h7"<'L> S?o>kOF(A+0cpH5%L1Mb$j7+`0L8]RI#3]9LPPk_%"rb4;*Zl^'F+^A!WgLFNrTRl&0!#]AX(UBj1VCk )l8gZJ:N9+LPgqDLkg\<KR.6+3[G^U#QXu-!W2p-!sT&A(ah:7>\\D5LPUcaLEVJ"Cg^453[YaS$3gS5 !X&Z9/ldS1Y,.J=B1aZd#mUP6irBAd!WiK9*%O-MC^#TgTU:k!r.bc9KnOhc<^ehn)@ZfO!s6IB#6b\[ .m-aEHi8U'Jm^b`"9S],!UKgQ!##D9"U62CFJuFCS;V>c2]<)1"9Y\)VuRP9,t`<V^<Y3-TpC7KFF8Uo LPCS>M#N,;IVDeJ0e"1Y$jQt>!Vl^'":cA!3(R.bH$t3sqM-5JKm%!(5:mog"p+i,!<N]K-ok"3G(XU1 4!GLR$j?_7!Tj@m!<N<*%id#Z:hkZTTUD"%r.bl<KnOqh=@Y;!*"E,R"9JT(!6G3T!<N<*$nk_<[BQQr KPF@G,T7:&"QTOi!X8uD*&C?.Nf&ScK^=?tD,`S@(D$oW!MBFE!.k3&!4r5_!.k3&!.k4<!#YncA%^aK ]:t!t?q`XE4[24u5X7Ol-5[*ml2V"k%2U9G4[&^,"[,!n&Hi.+!!WH>2C0%B!q$'O!!iT/&0a1t4?Yn- 56jJ=5!1kR$j!m=#QtYZ/hIb@!!(:E"p,>j1cRT\r]UKM0cgo3!Q>%q!!Ws)I\4C-j:]P*F&5Cs69RIq 5=%Lt4ZkA3"R5sl!tHS<4$5Yir]^TQ3%lQs$3B_u"p55M-T2\Adf9RV(a1@b4?`R*"[=pj'F4cN!!*0= rAOa5$KV9L!!WK1'dGIU#GhEr!"f5I8X\Sk`N5/EAlM,Z4?btqr]gWJ/KGB,!Vufe!!WK3&frVf4o@JI 4ZtA5#m0Yt"Ucq5)[cbu!!`WA+=T',4[&^,"[>!o(((0<!5SX?!X]bl2]N,)fDl$W(a:Idpc%Ou![.sR RK.p>JcLB&])[E_JcLB&JcP<@#m:YQ+ZW_KQc.q`rtjb-Q#gtbDf0E0Df9T5Chd?P5;4<!&-hn0-isMU #S7t(2FC5A@r#jrCi400E,fW%=\qI@,Sgmt"TeZ)!<WWL2Ga<b$"daB2BreA"p4o"!:'Um!t,hb.QBq! AnYmophgIO>"_+9-5mBu"9JVD!"9#>'HJYa8m>n?An50O6nB&S!W`>V!"8l1"U>GT/O33:?Y4-QD@:;t C2$mA1E[AA#Qr9NNW9Ff!Wif`8PN,nJt'O`d*9>-S;MW-BPM@&rG`3^A6D\q1aX(J#R(>*!"/o;&f`;Y 86BM<C2<cc$uKftCi!KT68U)1&I/48&HDh;&Ju]I6W7Q%;+Nl)+;+h8!!WH,"q(q[-jqn"9iYP6CM[g) DK#Mn$Z0Wl@8&a4*#&hd!QP3>!<`H2+?39tAdDsG5qa>s&-i7&!9aCn#7hUo0L/E@@9?;o3[kmPWrT'u ,m"Ad*%Xm$KtPt2s8Vc7UO[B)E,TT2Df9T5D/3c`6o682&d\X8!%@pN"U5>N,V_MT;dX9TCi"!,DfBZ3 A6i/+3%5gY$O-\5!<E6)(+_p_rauLK<B_oM$j["<j8]en!sT&A(a_(+9iGA2CM[g)DK#Mn%<$#q@Sf6> *>K%g!<<,=!##D>&K)iM6W@Z1An>FH2BN2+!<M3\#6PDR-oXIf>52^rAd`6aAReV!+q4VU!<JqqJcLB& JcNC_JcLB&JcLB&nGj72+#m)4K:&^CaP>\(X+FnX;-$e(rETe8>$4m!3%#FJ#R(>*!"B#8$kX=#/NH*e :K:S%qH4%u76<7N)%?cK!Y>A6"U5>H+#$#[<E<1&4X:R;!V?B\!"K#2"9\r@)'ppq6;(<[=T2G'>5hb9 >?G!'5;=B"&-r@=!!1%=$j@7d/ic0c:/4)4-li@$#mJo\#6G);&/ZcT9E&3/>?P*4>[1B.83\mS'*nX@ !s-UGNrTRh!WrQ?9Sq0km*WAG)lf<XBjtCQ=BSg2>?b65<_l(?.3B95"T\Z*!W2p?!<E6'"Uu7j.Q0Re <``C+=^#!6?!CH8=@kFu(_$cT"8r32!t?5#4$Z;1;F<2_'FY6N!oO%_!X/uE)'^^;3CQP9<*3?&=UnV> >?Ois6T?P9&I/IA"3(<G!X/c9&g8ttrDNu!3[GCA!s/N)li?5L%ga%!2*FB":eE\q)%HrW"02F#!#,PP 01TDqOeo1me)/rpO`=H"<**9%>mstC=BAHc/K>0*"p4r&!"Au5$4djn.5X4W9N,%sr`K5)r`L@B8O#*` *>/VZ!s/N)"9f&>)CdgD<)lt#7kYY^!<E0$j8]Vi"UbqZ+tPZ?8PW2e>5_S9>$G37;bKJ>/05E/"Tni- !!'t<&-E=[.5a1T8lJ5@/Kkl="p<lcrW*6.)_t-"@9cq0;s[Ef8NejX*"`JYT)aHCJcLB&])[E_JcLB& JcP<@%hLL"M6OqI_PE--?rg?5>lIn=>[1K9=]eHc1asF]%giLC"9\E!$O$qQ)^I!o5=eOH=Su>1=BJX, 8j"^M(_-cQrW*]5":>e_,r%SU;*cr]&e,-O!s/K(o`4F\+p%lP$kaL+0K_cs;Hm:,=B\m4>[1H7<`;RM -lEOY&.a8c2@rW3K>,sPRE@U3)24Y7`g!Y5S?f)Q'Y#o"C-1-S?6r`K/'%9Zh.5r:&5'b(<K!WiDH !07*g"V;V$5%Tu+s5UekW<nuGDH^.G=^#!5r`fn9=B86`0I%AD#m:;1!W)jS!X/c6%i?E=2*OT0>$5!1 >$G39>Z43Z3%Q6h%1!.@!s&H)!s]f#94_O<=]I^;)@H`P!s7K_rW*3+$4n.$0g5b8?!^c@>PhS5=]nWk 3%H*f%gN.<!s6IB#6YAH)C.%$9Dqfm;`c6:"TAJg!:0\!!<N?+'e2RX@piMB7ku8##R1A4WrT'u,m>Se Feugte#Jj^A6Do9?!LQ:>?tH;=]eWm3\;Km'+>*L!s8T"!"/l8&/cW>1-J*":f[Es$WpM4=%tq8,o[I( "9&<8!!*98)'LRk7T2i;-Q!CY)/!TjC]!=T#8&/ZTD4\T*f?!UV1=p\>7<(Ao#+rLpurW<-%rW("> '*/.9"roEoB4G:P<'rJf((UcW"69Fi!X&`8&KWMf:Jk"gpf-TZ#=UHp((LZU"J5[G!.k3&!4r5_!.k3& !.k4<!"/oUA%^X0MdAFo)@QNGqZ?j#!TO.[!W3&u!WW8h!!!&b!94(X!rE*!!WW8.!<3)u!6bHB!<<3! !rrA<!/U[[%nM/A^Y%QNW*Ck_#mLP/!s/N*!Ta=[!rW3'"9JT)m/R.f!mq#I!<3)p!s&H(ZiL%+!!2-\ i;`iYUB%(i%KR>:RGuD_DalB&&Hr4;qZ?j#!VQN]!!!&t"8r9$!UTje!RC`I!<E8t!s&H(oDlT*!<E8M !<3)p!pfuT!.k3&!.k3_!.k3&!.k3&!:^$q":Q(i3EgQl`qKE3(XJO_3B/lP0ekF>1c$g=/LDPX'FtNT "8Dj(!<N<*"q)"X)B^:Ur\"m<0etOA2)$R.+WD.,#mLM6!<E*"!sB#I+T<bq-RTuO%L*%<!WhuplMq:n "UGMJ(*+SJ.kWLO0b#lm/gqh]'bC`X!WiB'`W-DK"U>DI(EOhN.OZ_n!Z_mZrW1^Q$NU80!sK&F)'C4S /c7=20J>%1-Qa'5#6b22bQ*Y'$NU;1%5(4H;e(EK^C/B(VM&eg6S9lA0JiYc$SsC_+WM4.$3^M5!VcX& !X/f:%i--0.P*/*r%S1*r\#6?+WM70$O-\6!<<*#":#8D'H/,B-6O?I'+G-IhuEr^!WrT1$P40j)]p:R /MAb20JP==1c$j=.jcAU&dnsK!lY0=!<WK7(*WT(#9Xou%1*4@!UKgM!"T/9#n.Ia+!r?[+<;71$3R=/ VuR,*#nn:0:MYZsj8T&qjfWo&3B&cM0etOA1bg[:.3fiK&.8^G!Vl^>!<E9)"UPYQ(`stN/h\k30JP== 1bpX2+rqI3$O-b:!<<-!!<WW@*%(Y5#U^f6&IJ[D!Wh<]+p%iM"UP\R)BL+O/2&Y10JP==1c-m=.jlGW &e#$L!s&B%`;g/E":#8D'cS>Fr@%gk((:<E!TO.b!<if?'H%r9paGJWr@%gm(_6fL!MTRG!.k3&!4r5_ !.k3&!.k4@!#5k`3)FCCR&dI?hq6#,=Z.-;+snfkr[S@),pOQR((LTR!s8W"!"8o2"U,5B&Jc9*+XJQ8 -iGA6*Z>h-%LE=A!W`?'!<NB-#7M4^+!;[L+VtUn!WW6%o`4C[+TVWG"9o2C&f)B,+s\E[-7:2j.k)kn ,T[g:%1!1@!W`>?!"8r7$ka9l)]]n7&e53L"pG+\!!`N,"U5;F(E`Q%%jrbS.juP\(D.&\!s8T*!R(P) !"8l0!sB?4M:)(adCH@qUkN290InS"-7:2k.4-;b*uYk*$j[%>r;lcqrW*u@"UGMK'cS2=,:+T_-n-Yt -mg/_*#/ti"p4r/r;[B1"UbnY)&sY=(_R5^"Tni.huEr^!sJl8%1rd[)'0qH-n,!@%4E\R+s%U9%giLC "9JYE!!`N+"9f#=',g`j"!/3f#Q4_i!9aCn":5PQ(`=;6)\`bf"p>#0WrT'u'a,=+7ppV)V6.bogXDm2 6R*Nl,q(>D.h!mS+s7sC&./UD"9JW"!"Ar2"9o,?%h]a!+=&<_r?qRk#9k3,'bC]W"9&?9!<<0'"U,5F (*+J>+<_[9#m1/-!TF(f!sJl9%2'Bo*Zu^T./YG(-n6Vj*Z>b)$3pY9!WiB&!6"pL!X/oB'c.`-*uPb' $4$h<!T="a!<`cE*[rH^+o!/G*sW]#&Io-P!s5(pJcLB&JcNC_JcLB&JcLB&nGjgG10TO=`7)StH=0H) 2)m9;.46Mm.46Gg+rV.+$O?q>"9JZ,p]([("U>GG&f)<'+<`'0-R'la,U4NT(_[>a"p4o-!<<*$":#>G 'Ghc2(_R8_"p>#/!V6<[!$D:D"9eu;%MKWu+!N'Y-RU5g-n$Ml,U+?L'FkHS"9\hG!"T)2!X9,P,:=f_ +W_F4$jQh;"9[6U)Zg-I$P*pg*[W0[-R^>i-7'`Q'bUl["Tnf,!QtJ(!"9#B)^mm]PgTNk]r7kIO)e/P .k<%r-n$Mn-n$Ad+;kh##R1D6!<N#s$NU;2"U5;C&el0(,Q9#:-RU;j.4QVb)AE_l#R1D7!s/H'!<NB3 'HJPI,U+?K&./LB!s/M^!!`N+":#;E',Lfm+seN^-Mo.s-7'lU((q&^#6Xr,!!1(>#6G#4$P!je*;pub *u,7i!s/K(lN$8O'*/+8!XTGX,UOc]+W;%P&0!il="!$qdp8p-uEcI8eRAlV#M2`*$5.4?Sn-RL,` *Z,M!$3p_:!s/N(q#Cg)":#5C&/,ft*Zu[Sr?id9,U=TW)&*Sf#6Y,0!<<*#"9o2B&Jc<,)\iki#6b22 !<M3\$ipA3"pteP(*"MD,prI9%43AG*>]=s#mUP7!WiE%!6>0>!>#AA'd"kO,U+?L'FtKT"9S_d!"/f/ !sJl;&JuN0+!:8#llZNP'FkBQ!sA[t!.k3&!.k3_!.k3&!.k3&!:9an"=7QjgnJ+,%0lp-!.k3&!/U[[ %nM/A^Y%KHJM@C`!.k3&!2KT%!>\7pik'=s('t*.!.k3&!.k3&!.k3&!4r5_!.k3&!.k4@!!i]9(EkeB FdL5LrtP:?GX)cL$OI%D#RLhE"pG)1!W`>g!"]/4!sAc2"pP;<#mq%G"TneY!9*t\!WrT1q$.!+"9S\0 !6Y?E!WrT1rW`]5"pG,3!WiB'a8h5#$NU;1%5(4H;e(EK^^JGpN*o.0(^'mC"pt59!t#89!pBUd!<N?, r!*H2"pG/4!s/M=!"/c,!<WE,"U,)7#71;9!X8c/PQ6:8VuR,*#nn:0:MYZsnG`G$du[NP%L`[M#6tMA $O?q?!WiB'quH3d"9AQ+"U4l0#7(VC$OI"?!PSOE!<N?+"U,)7#7(VC$3gV7p&K[EJcLB&JcLB&])[E_ JcLB&JcP<@*"*iJ:ht]NX0UU:dC!^I&HDh5":5>?#m^_<!s7Zd"T\]."U520"o\W+!s8VW!9O7p!<N<) "9\l2"pYD?#R1D7!s8T*YlN)M%fl_5!sA`1"9o);$3p_;!lP)"!"8l0!sB?4M:)(adCHCiRW1S'$3pe> "pG2:#6b5/!ri;e!"o;6!WrQ."U,)8#RL_="9JT*!P\U>!!!'&"U,)7rWN9+rWiQ."9OefJcM_L'Ef4* 7ppV)V6/#!f#<52*WlED!sef3":,58!s//sn,NRm"9er5r<<0'rr`9&^&S<<!sJi4#6"c1"pP>="9\f" !.k3&!.k3&!.k3_!.k3&!.k3&!:^%%&2IFGYf,#-TPRXf&/Guj#6tJ4#6G)5"TAK'!U'Lc!<WH-r<3E. !sA]/!s8VW!9O7_!WrT)"UbG9"pP;;"p4o-!!08'cN""J!sJT,"9\o4"9eZ*!!1"<NrTRl&0!#]AX(UB j1VCh'8U'V%LNLG"pYD>#7(M:"9JZ,!UKdg!<N?+rWNW3"U5/9#6b23!<Kk6"TSN(!sAc'"TS])!rrCe !.k3L!"];[8p-uEcI8eF>t#bL(D$lM#6G)6"T8Gt!:Tsj!WrQ.r<39*"9Sf+!rrA9!!<9)"9eQ)!!N9' !!;ioJcLB&JcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPT)aHCJcLW-"qO7RT>0%9!G<1$!.k3&!2KT# !>\7piiH3%"6]`:!.k3&!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;Pq71]6%1<II"U,)7#6k>7 !Wr?%li@%drWE0'rrrB+":#)5!WgsSiW'#\!X/6$!WrK)YlMrI!W`?*qZ[!%rrW3$`rM,"$NU;1%5(4H ;e(EK^^JGpN*o.0(^'jA"U=l0!X/Z,kPtYb!X&9&"p>&2!s/K(^]4T>!!*-&!s8]*"U5/8#6k>6!L*S9 !2ol(!XTM[/5L&8]^Yq#&CZ\<+:JV_"pG28#6tD8!s8H&quH3d"T\Z+!sAc+"U5/8#6k>6!PSO;!<N<) !sJT,"pP8:"pG)1p&K[EJcLB&JcLB&])[E_JcLB&JcP<@'al*C:ht]NX0UU:dC!^J&c_q6!sSu/"Tnl0 !s7Zd"9AQ+"9n`,qZ?g"fDt%6!!3'#!!E0&"pG/7"U,#2rW3'#YlN)M!!3'#!!E0&"pG/7"U"o._uPhu $ipD3";OUedJ*"T\ZQ1+EBk$A#6k>0"oe`*"9&?%!UB^c!WE-#"9&H&"Tnr4"9e]*!!0h7"onW)!sA`1 qZI$*"9\f.PQ6:8VuRP8(GA9dH'+r*c/.$jJk$mb!!36*#6"f*"98Mu!:Tsj!WrQ/quls#!WiE(^&S9; !sAc2qZHm&rWE3&p&K[EJcLB&JcLB&])[E_JcLB&JcP<@&J-^$M6OqI_Ot^G2\6`>$jHq7"oAB%!U'Lb !<NAu"TAK'!n[M8!!33'"9&E'"oSQ+"U"o/rW02&cN*tHr<*0*"9eW)!<N;?!07*g"V;V$5%Tu+s5Uek VZhla2[p&urWEQ3"9eo1"9S`-!<MNe!W`?(r<**(r<*6,"9\f-]Dr'7!!36)qZQcu!!8AbJcM_L'a5mU Feugte#J"*73*-Z%gN7B"9\o*!rrDt!:Tsh!X&3#rW<0&!PSO8!WrQ%"T&9$!qlVG!.k3&!.k3&!4r5_ !.k3&!.k4<!!i]RA%^HN5S!mf!.k3&!/U[[%nM/A^Y%EEB,-("JcLB&U]:Z$(.jqRXB-DEkQ$27JcLB& JcLB&JcNC_JcLB&JcLB&nGigt$l:'I>'61Rrr3Q*\9:%D$3p_:!sAc2"9\c-rW29arrN-$r<!6,"9er3 !WgpRiW&u[!r2p%"9S`-!<KG*b5_PD!r2ou!rW/?!0.$e!<N<3/kJc9@tL2c$dQ,<?q2mg"9AQ+"T8K+ "9S]+k5YM`!r)lt!ri;9!<3'!!WE0!!sSl2"U"o/!L*S9!2ol(!XTM[/5L&8]^Yq#&(6J8*XW/X"9Sc0 "U+u1!rW/t!:U!g!WE0!!sSl2"U+u0!PSO:!<E6(!rW3*"9\l3!s8St!.k3&!.k3&!.k3_!.k3&!.k3& !:^%&$Qh?)CP/"TZJO?`[;%W5!!*-&qZHs&!WhKb!s&H*"8r?*!sA`/"9&AS!9O:]!WE0!"8i9%"8r9$ !O2XN!<3*!!rW6""9JZ,!Q4u!!"8l0!sB?4M:)(adCHCaRW1S'#mUY2"9nr1!WiB(!UBac!WE0!"8rB& "9/H&!P\U;!!!$$"8rB&"8r?(!s8Uh!.k3L!##JO01TDqOeo2)hU]Yt7iqj6!<W*#!<WDu!:Tsi!WiK& "98Q'"TAK(!Wg"8!s&H*"9&H'"8i9&!s8/rJcLB&JcLB&JcNC_JcLB&JcLB&nGj+310TO=`7)SrCfWJ+ 'b^uZq?6d"!<N;c!!**%qZ?g$quZs$!S@D7!!30&!rW5u"9JZ-!Nc@J!!30&!rW6$"T8E(!WiD@!07*g "V;V$5%Tu+s5UekVZhla2%9fqq?6d"!WiB'l2Ukd!Wr<&qud*(!s/M9!!<3$!<W0$rri6%!<N:d!.k3L !"oG]8p-uEcI8eF>t#bL'b1EO"8i<$!s&H(p]0d`rrW*#!!N3%!WiB'^&S07!rN0#"T/?&!WhupJcLB& JcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPT)aHCJcLW-"qO7RT>0%9!G<.#!.k3&!2KT#!>\7piiH3% "6]`:!.k3&!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;Fq7(Q/#mUV:rW<*%rrW-"klCS]q?$Zt fDsn2rW2`prrK>(b5hMBqZ?Zr`W2#!$NU;1%5(4H;e(EK^^ADpN*o.0)$L$A!r`<#!ri;a!<*#r!rE#5 !<)ur!W<*!!s/N)!L*S9!2ol(!XTM[/5L&8]^Yq#$.=f/*!c`P!s/Q'!rrE$!Vufc!;cfm!ri;7!;llr !r`9'!W`>q!.k3&!.k3&!.k3_!.k3&!.k3&!:^%&$Qh?)CP/"TZJO?`[;%W6!!!$#qZ?m$!WhHa!!2]n !!1^PjT,5[quZj"r<!!"YQ2rKr;lft"9S`-!Wg1=NrTRh!WrQ?9Sq0km*WAH#Fog"%giLD"9&B%"8r<$ !U0U`!W3#u"9&B$!PSR6!<3)q!r`9'!WiCe!.k3L!##JO01TDqOeo2)hU]Yt7j%p7!<N'"!WiE(p]0d` rrMco!!0b5rrMosrW<3'!WhupJcLB&JcLB&JcNC_JcLB&JcLB&nGj(210TO=`7)SrCfWJ+'G:fM"8r9$ !Tj@^!VQTo!S@D7!<*#q!X&T-!WiD(!7(ZF!VHKo!Q+nu!"9#B)^mm]PgTNk]r7h8L0c_G#6b54!Wr?' rrW0#klC_aq?$Wu!WiE(])_j2rrMcorrJ>aJcM_L&-X@PFeugte#J"*73*-Y%0cV2r<!!"p]0d`rrMfp rrKe5rrMcorrMfnJcLB&JcLB&JcNC_JcLB&JcLB&m/RCp-"FU?M*MRPT)aHCJcLW-"qO7RT>0%9!G)su !.k3&!2KT#!>\7piiH3%"6]`:!.k3&!.k3&!.k3_!.k3&!.k3&!:^$p":Q(i3EgQlao;;Gq6tH,#6b22 !N,pL!.k32!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt"N!.k3&!2ol(!XTM[/5L&8]^Yq##L\Q+)[6EI!Up)@ !.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZJO?`[;%Z7U&]cFJcLi3$ipD3";OUedJ*"T\ZQ1- E^10B"Tnd_!.k3&!2ol/";`^]@!Rm2Xj,_R`I^W'"RH,?!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"&2IFG Yf,#-TPRXf&/5]`rW/hqJcLB&NrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!K$l/!.k3L!"oG]8p-uEcI8eF >t#bL'Fb3H!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSMj(!M9@D!.k3-!!Ws)I\4C-hZ7:& KE-T(JcMSH#QY]4RGt;L*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#QtPP+ZW_KQc]7,#PkiN3<o]i !i>sL!.k32!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt"N!.k3&!2ol(!XTM[/5L&8]^Yq##L\Q+)[6EH!Up)@ !.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZJO?`[;%Z8U&]cFJcLi3$ipD3";OUedJ*"T\ZQ1- E^10B"Tnd_!.k3&!2ol/";`^]@!Rm2Xj,_R`I^W'"RH,?!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"&2IFG Yf,#-TPRXf&/5]`rW/hqJcLB&NrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!K$l/!.k3L!"oG]8p-uEcI8eF >t#bL'Fb3H!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSMj(!M9@D!.k3-!!Ws)I\4C-hZ7:& KE-T(JcMSH#QY]4RGt;L*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#QtPP+ZW_KQc]7,#PkiN3<o]i !i>sL!.k32!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt"N!.k3&!2ol(!XTM[/5L&8]^Yq##L\Q+)[6EH!Up)@ !.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZJO?`[;%Z8U&]cFJcLi3$ipD3";OUedJ*"T\ZQ1- E^10B"Tnd_!.k3&!2ol/";`^]@!Rm2Xj,_R`I^W'"RH,?!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"&2IFG Yf,#-TPRXf&/5]`rW/hqJcLB&NrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!K$l/!.k3L!"oG]8p-uEcI8eF >t#bL'Fb3H!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSMj(!M9@D!.k3-!!Ws)I\4C-hZ7:& KE-T(JcMSH#QY]4RGt;L*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#QtPP+ZW_KQc]7,#PkiN3<o]i !i>sL!.k32!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt"N!.k3&!2ol(!XTM[/5L&8]^Yq##L\Q+)[6EH!Up)@ !.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZJO?`[;%Z8U&]cFJcLi3$ipD3";OUedJ*"T\ZQ1- E^10B"Tnd_!.k3&!2ol/";`^]@!Rm2Xj,_R`I^W'"RH,?!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"&2IFG Yf,#-TPRXf&/5]`rW/hqJcLB&NrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!K$l/!.k3L!"oG]8p-uEcI8eF >t#bL'Fb3H!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSMj(!M9@D!.k3-!!Ws)I\4C-hZ7:& KE-T(JcMSH#QY]4RGt;L*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#QtPP+ZW_KQc]7,#PkiN3<o]i !i>sL!.k32!"/f/!Y$bR9iGPRS%o9T[#A?^0Gt"N!.k3&!2ol(!XTM[/5L&8]^Yq##L\Q+)[6EH!Up)@ !.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh?)CP/"TZJO?`[;%Z8U&]cFJcLi3$ipD3";OUedJ*"T\ZQ1- E^10B"Tnd_!.k3&!2ol/";`^]@!Rm2Xj,_R`I^W'"RH,?!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"&2IFG Yf,#-TPRXf&/5]`rW/hqJcLB&NrTRl&0!#]AX(UBj1VCh#DQPA$O$\9!K$l/!.k3L!"oG]8p-uEcI8eF >t#bL'Fb3H!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"=7QjfSMj(!M9@D!.k3-!!Ws)I\4C-hZ7:& KE-T(JcMSH#QY]4RGt;L*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#QtPP,!&nMQc]7,#l1uP3X>om !Wf2!JcLB&NW9Ff!Wifa928GtKUom`ca8X<7kbe`M?&5.JcM_L#m(DH*%Xm$KtQpSrs-u3:E'KA!s.lk JcLB&JcLB&JcLB&])[E_JcLB&JcP<@%gsI=:MPKKX0UU:dC!^K';>JY!.k33!"8l0!sKH7MU;(^cFC"^ S8pk+#mCD3M?&5.JcM_L&-Ne&7ppV)V6/#!f#<52+9_$2JcLB&JcLB&JcLB&])[E_JcLB&JcP<@&eHj) NjHgX`h7-K2\6Z8$3C5/V#Z)IJcLi3$j@1]-Tu"(d/Mt7W2BlT?8N#n"Tnd_!.k3&!2ol1"XZogWl!-3 We+MF*>TA!"T\Yl!.k3&!.k3&!.k3&!4r5_!.k3&!.k4<!!i`TA%^HN5S!mf!.k3&!/U[[&5%SL_V*fI AJBdtJcLB&U]:Z$(J:+TXB-DEkQ$27JcLB&JcLB&JcNC_JcLB&JcLB&nGigu$l:*K>'-+Qrr39"\90k> "p=u.VZ;;KJcLf2$NU80%5:IP<b[8[^^&2mN*f(/)$GfsJcLB&VuR,*#nn=1:MYWrnG`FmdZ%$B#6b21 n,S%?JcLB&JcLB&JcNC_JcLB&JcLB&nGj(-+#m&2JsWODhV6GcC,Zg#!.k3&!07*g!<WH.(/9Y3p#aN/ Xp:J;5S+5*!s+8ZJcLB&VuRA3(GA9dH'+r*c/.$jJk$pdli;V;JcLB&JcLB&JcNC_JcLB&JcLB&nGj16 2IDWWbM:+1CfWJ+'G1ZR!<K"sJcLB&NrTRl%iZlZA<Y=9g:=,Z#DQPA$O$\9!K$l/!.k3L!"oG`:OKCc e^gaP>t#bL'b(<I!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al"X[cmfSMj(!M9@D!.k3-!!X$0LSr&D hZ7:&KE-T(JcMSH#QY`6Rc:DM*<YL*JcLB&JcLB&JcLB&])[E_JcLB&JcP<@#R(VQ,!&nLQHB.+#l1uR 4:;At!Wf2!JcLB&NW9Ff!<N`c:/Y/0L7uBfca8X<7kbe`M?&5.JcM_L#m(DH*@t!%KY6gRrs-u4:`TfF !s.lkJcLB&JcLB&JcLB&])[E_JcLB&JcP<@%gsI=:MPKJX0UU:dC!^J';>JY!.k33!"8o2"U,`<M9Y_R bI=VZS8pk+#mCD3M?&5.JcM_L&-Ne&7ppV)V6/#!f#<52*sCp1JcLB&JcLB&JcLB&])[E_JcLB&JcP<@ &eR'3QbC`&ae3HN2\6Z9$NgD1V#Z)IJcLi3$j@.[-Tu"(bkTbtVl'cS?8N#n"Tnd_!.k3&!2ol2#:WN$ [`[7VWe+MF*>TA!"Te]*mf7q>JcLB&JcLB&JcNC_JcLB&JcLB&m/RCq-Y:!DM*MRPT)aHCJcLW-"qjak WlEcM!G)su!.k3&!2KT#!>e@siiH3%"6]`:!.k3&!.k3&!.k3_!.k3&!.k3&!:^$p"Uu:n3a-Wkao;;G q71Z3$O?n<!N,pL!.k32!"/f.!Y$n];d"!nTtgoZ[#A?^0Gt"N!.k3&!2ol(!XTM\/5Bu6]^Yq##L\W0 *XN#Q!Up)@!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"$Qh<'C4_eQZJO?`[;%W5U&]cFJcLi3$j$M7"rU3m bk0l:\#ot+E^10B"Tnd_!.k3&!2ol/";`^]?[.^0Xj,_R`I^T%"RH,?!.k3&!.k3&!.k3_!.k3&!.k3& !:^%%'0'Qn_URSeTPRXf&/>fc!s/M"!.k3&!07*g"V2Lu4CjVup<p@HV[%r_1^aHj!s+8ZJcLB&VuRJ9 .TD)4cJI?VJmCec()78^!W`>j!.k3&!.k3&!.k3&!4r5_!.k3&!.k4<!!i`UA\H`Q5S!mf!.k3&!/U[[ '2t!pa4fDOAJBdtJcLB&U]:Z$(J:.UXB-DEkQ$27JcLB&JcLB&JcNC_JcLB&JcLB&nGigu$PjmG>'-.Q rr38qZZ8,8#6b21VZ;;KJcLf2$NU80%5:LS=(m8]`Wsr!MHr\))$GfsJcLB&VuRM5#SS4.:MYZsnc/Xg c&,7:#mLJ4n,S%?JcLB&JcLB&JcNC_JcLB&JcLB&nGj(,+#Zl,J<m1?gtBoQAi13q!.k3&!07*g!WrT0 (efY'nDqg'Zj3@K5nF>+!s+8ZJcLB&VuRA3(G/![GE&B"dG<6dIRP:[li;V;JcLB&JcLB&JcNC_JcLB& JcLB&nGj162dqr^cJHX8DH8Y.'bUiU!<K"sJcLB&NrTRl%N-QSA<YF=gpj2Q#CKZ.$3^S8!K$l/!.k3L !##M`;1GpnfA*BV?UYnM'FY-H!<MWhJcLB&JcLB&JcLB&])[E_JcLB&JcP0<#QuG_]@_g"%KW1%JcLB& M#[_l9o,^cf\$:1&VL.9!.k3H!!iT?8=AJ9<?))(!.k3&!.k3&!.k3&!4r5_!.k3&!.k4@!#,SE'HT2: FdgDLs8M;aCcDb,"Te_&!.k3&!0.'Y!=0&b8l/JqI&bd'fs?H<6S92YM?&5.JcM_L'ESOO)C\EtLV3-V s7aB^8fJ$>!s.lkJcLB&JcLB&JcLB&])[E_JcLB&JcP<@%ga748n<=7VQnb&_kCHo&Y]8W!.k33!"8l0 "9fN0Har;#e%Wd+Z$&AD#mCD3M?&5.JcM_L&-Nb!6!&/eU92_mbHuCZ*<YX.JcLB&JcLB&JcLB&])[E_ JcLB&JcP<@&eHg%Lp"YF`h@ET2&-o?$3C5/V#Z)IJcLi3$j@+X,!'5#g]-WTSX'Ls;(DnT"9S[^!.k3& !2ol2"scf`Uq=n$We+\I)]0;!"Te]*mf7q>JcLB&JcLB&JcNC_JcLB&JcLB&m/RCo,$qh4K/jDBT)aHC JcLW-"q<kDS%R.h!DO&W!.k3&!2BN!&k/)FVc"H9kQ$27JcLB&JcLB&JcNC_JcLB&JcLB&nGj7+$POI; >'H@Sr;HEJTk6+f"p=u.VZ;;KJcLf2$NU80$S"S>;-\:Qkm-+PKNLMl(B]NpJcLB&VuRM5#7q[u:2G]u nG`=O\U6mc#6b21n,S%?JcLB&JcLB&JcNC_JcLB&JcLB&nGj(,)_a]gHBY>6e]k^k=t^J^!.k3&!07*g !<N?+'1$`Dhr*)0fE]!45S+5*!s+8ZJcLB&VuRA3'IQ(CDi(3jb1"5+Da,3Eli;V;JcLB&JcLB&JcNC_ JcLB&JcLB&nGj14/lR.j\BDa_FBC@9(_[2W!<K"sJcLB&NrTRl%2U0JA=DKWq7i,B#@U.M#Qt83!K$l/ !.k3L!"oJ[6u/'m`QY?8@m_:S((:?I!U]r>!.k3&!.k3&!.k3_!.k3&!.k3&!:9al!ZtXVfRGjh!M9@D !.k3-!!W`fCQ>^<YlR&rKE-T(JcMPG#S97aihfKi!WhNcJcLB&JcLB&JcLB&])[E_JcLB&JcP<@'Ee^S )Dt`ER`>1!mF7M20aIsd!Wf2!JcLB&NW9Ff!<NWW5tb!YEQIq\ij"#65:[KOM?&5.JcM_L'EJCJ(*cRl MnJQWo&?ip65Kh0!s.lkJcLB&JcLB&JcLB&])[E_JcLB&JcP<@%ga1,6!SVqVm4RgYDQ=5&>B/V!.k33 !!`N*!WrrqCo%'[!T<2I^j86W#R1A3M?&5.JcM_L&-N[n3_sUJSup2\\t!Cq)?]=+JcLB&JcLB&JcLB& ])[E_JcLB&JcP<@&e6EaE0RNC^S5pS2]<PH$3C5/V#Z)IJcLi3$j@(V+?<u)kPtCfJRSjc59L.4"9JU] !.k3&!2ol1"Wom9LS_W(We4hL+WM7,"p"bm!.k3&!.k3&!.k3&!4r5_!.k3&!.k4<!!iTE<jpY22@T\Z !.k3&!/U[[#;'23WND]l1'`I4JcLB&UAtN.4HJKs9c=,t!.k3&!.k3&!.k3&!4r5_!.k3&!.k4@!##G> %M^TrG*p.rd)E8=;(;bR!s5>"JcLB&N;s:d!XKr285<K=\+'^?Qu,DP,SL9;!.k3&!2ol3!<iiD*Cjh$ Zd7+C]THV^'EnU@!Up)@!.k3&!.k3&!.k3_!.k3&!.k3&!:^%"#8\[F:1f'DX/_bHCIBHYU&]cFJcLi3 rW*<,%5V4DYctOViWl,g2@Tlo!Wn5ZJcLB&VuRA3&Kiep??_I*XJ1l';D8jgli;V;JcLB&JcLB&JcNC_ JcLB&JcLB&nGj(-+['"QOeAY:E)\\6(D$iN!ModJ!.k33!"8u;',rT)LV<?#QuZI;9K!gn!WrK)M?&5. JcM_L&d9..:MklWVke]I5pI6]$3^G2mJqh=JcLB&JcLB&JcNC_JcLB&JcLB&li74s0l`@N+:"J<JcLB& M#[_\(HPK-@nct@!e^Q*!.k3G!!`WJ<2a:[%KYbnJcLB&JcLB&JcLB&])[E_JcLB&JcP<@'*8=D%NdoB I[$(XKm-KU*!HEG!N#jK!.k31!"&`-"r8[N8m6.hSd0m[9/@n4%0DCeJcLB&VuRM4"U>GL1/i1UPE:WM @6u=O"9S]+n,S%?JcLB&JcLB&JcNC_JcLB&JcLB&nGj('&/uoQ8R-1[E+;g5/Jneg!.k3&!0.'Y!=/rT 5@8V]It`dc@mD1C"U"l.M?&5.JcM_L&-E:V+>,oZBRFl7>"UUo%g)(tJcLB&JcLB&JcLB&])[E_JcLB& JcP<@&I91%4\fC&GB6qT.MWI$"p"b#!.k3&!07*g!sf>L+ZWSLP(.=R9a<a,&d&4;!We/YJcLB&VuRD4 &Ks#&=D;l*AP=p"&e,'J!UTl=!.k3&!.k3&!.k3_!.k3&!.k3&!:'Uf";N$g!hB=C!.k3,!!NB2%h]Nd !!7cQJcLB&U&Y>t%42bm!TsH7!.k3&!.k3&!.k3_!.k3&!.k3&!:^%&!<`Q2&gTG1>#eBk6ST\q!s/N) V>u2JJcL]/#QkJN+tu#F:g4/q3\2?g%gN,m!.k3&!2ol3!<WK0$QUoh>?=Zr82qt4#6Fr-!Up)@!.k3& !.k3&!.k3_!.k3&!.k3&!:^%"":5VU*[rp37m/[[,8^mpU&]cFJcLf2rW*9/'I,J(7Rp$A#<!h?"9S]- !K$l/!.k3L!"]29%29a-0KVik2_ZX"&dSU+!.k3&!.k3&!.k3&!4r5_!.k3&!.k4@!"T5C(Ek=e4[hgs -5d7""pCY#JcLB&NrTRi"UGJK+#-,Y7R&gb"!A<d"TAIZ!.k3&!2ol/!t#__-o!bL904[E%giOE"7-#> !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k4@!"T)2 !WrW8&fVo5)]BP*$O6P1V>u2JJcL]/#QY)7$P*pe)BK,$'FtQV"Tnd_!.k3&!2ff-!<N?,#nRmp*ZQ(: 'FkBNrW2HfJcLB&JcLB&JcLB&])[E_JcLB&JcP<@%fuk;#7:nP'G_Ao%LWOG"/5dI!.k30!!rZ."q2.] ()If)"qh:K!s8T+M#`,-JcM_L&-2k9"pbVK',D8o%gr[J"9RoiJcLB&JcLB&JcLB&])[E_JcLB&JcP<@ %fun?$P*g`()@Gh#6b/2"/5dI!.k33!"8l0!sJl:&/H*!'G:o\$3pY8!W`=Y!.k3&!2ol/!<`W7%M09h (DI>c"p>#0!UKf<!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!4r5_!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cP!<E6'!sT&=%.4K/$4@.G"pP55!r`5S!7q2V !WrT1#RLhG%/pV;$3gY8!PJJb!8RVY!<E9+"pt89mgBI0$OR4H#6k>8"9SN&ciAXtgAh`c!sJr9#mq%K $4@4J"pG(u!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!WK,"9eu5#OVj$#6tM="U+f,!<N;R!7q2P !sAi-#mgkC#6tG:!sA]-]E!N`hZ*o_!<N<*"U>;>m0Eq%#6kA9"9Sc*!WW8G!.k4+!"]/5"9o,<#RC_A #R1G7"9S_q!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!<9*"U=B#rsAZ1#R:P:!sA].!WgmQgAh3S rW33*"U>;=rWrW3#6k&.!!0_4JcO[.#Qb)2"9o&8#RTf&":#,5!sJT*!<N;H!.k4.!!iT,!WrQ/"pkS7 #mU_?"9S],!s.olJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XLS!sJl9&/QB3+X-:s#TXg"'G1`Z"9SQ'gAoh*#R(MD',DK,+X6n.!ur!`"o\P; !.k4-!"&`-!X9&H)]]tA+7LB]*ZZ4=(_m\r%13:A!r`5J!.k4*!"T2=%MT]t*[)[K*uu74$O-&#JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u$3LJ=%M9?h()[r+o+h]K'GV;q%L`UJ"TneW!7q2]"Ubt_*#]Y0 'GD&h$jQq;]E!N`hZ+#c!sAc6%M]p%)&X7Z(((ci&J#9V#6Y,2!R1Ur!8[\g!<E6*$5+0p*#TV0'bUub #R(>#!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!<?0%M\jX!#G2C%N--&)Aj5)&.JsO"9S`-f)XP* "p+l1"q(nSrYZ"\)Aa%s#R:M8"2"Vc!8mh_!<`Q4%1a*e)#bEA(CLum&ePQ\#R1G7!s6^IJcO[.'*8:@ #7D%T(`=20)&<el#6b/2!q?8B!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3u!"&c1"ptq_-o3kC2t]*+2[_Do-mBZH%L3(;!<LpTf)Q<d%i6B;/i,IJ 3&`]J+Vb:]!Pe\e!8deU!=/`8(*YCe1GguY2@hW"0J4h$+<;71$O$V6!<LRJJcOR+&-3"H)'UO`1H7BQ 1bpX*'*n%-JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#m:SI(`aeI.kWCF/,h"*.4->`)]'(q#Qt4\ !7q2]#o"R;0eOt*-6aKM'b(BN]E!N`hZ*ub"U,)@)'gjg/hQNB$Rd>G*Z>b*$jQq;!R1Ur!8dbi!<E6& #SS:30J>%1.jZ;V((LTQnGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XLW%2^<<-n-Sp.kC?F%kTFg 0J4h',Tdj9$O?n="4mP-!##G<#RV1_+Y59#0et:')%d5]"TuC;JcO^/$ipM=&/ZB1-7g`".kC*?$R[2B *>oP$$3pb=!mL^s!8db]!sT#?',i&Er@\C)*u,1h"Tnhr!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!4r5_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cS!X8uB)CdgA;c6IioM>Nbr_Ntq6T[%P *u#(c!s/MX!8%8`!=BPd1-7fp;H-Ok:IHoY$j-D/^]8rdhZ+#b!<NB8+YlJY9MSCQ:_-8l7moKu0I\+^ &-r@?!Wg[KJcOU,&HMn>'dY\#6q^BV:eaMG/fY8h!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!"/r? (aCOc3']hs5sY',$U$U42_lg)(_I/\!nRG(!"TJ[0h4c'69dLf/h%nX$Nn$AJcO^/$ipG6"pl(l2Fg;, 69t$)$Tp@)0.7nZ&.AaG!mL^s!8dbV!WE-2$lgic8Ol3;5W:>E+;G:gnGn.@JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&d/XLZ'dPXt4?Ynn5X>'0&48iV8Obp*2D-6o&dnsL"9I-Tg]/#h":,AH*%*R/7Rp!@5r'c) &.8^G]E!N`huF)c"qMRp-nmYJ6ppB.$p-C&/0u;O&.&RF!s-[IJcO[.#6b>B'-/DU62j:Y7QrFI'++sJ "7ZAC!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k3u!"&i7%20sI:hXrlEqaPNDuO\dCL^OE7QW7K)\rtm"pG)1hZ2=0'`e@G+>ZPd>\7tuF`MD.67ENL !WiD<!.k4.!"/f/"9]Pq8Rc@JD/\o_'5hSuA6i527m/UW+;tq)$3gV8!S%1%!8RVe!<EWP1J(PPAoDa2 DJ36>-kcIZo`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XOZ'-Jnf6Vgln?s[+4>Q.e;=]\X'9gh#t .No]C%1*:C"9&AZ!87GP!=oho7q6.??!1-%7mJgR&I,lJJcO^/$ipM9$4e::8ml.9?X3))'3A+.90tZo -mBTH&If!N!s8T+!S%1%!8dbi!<N?*&h$+RAn>I[>Z40W1*R>9nGn.@JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&d/XO^*&'l[<``C*=^#&)>SCIP@UieM<`2LP1asLa&e#!L!sJT)!!1sWg]/#h"UYhX-9"M&@q9._ =@P"f'b1KP]E!N`huF,d$5F[83CZnQ?<pk*>Rjh49Lh9(/LDMU'+5*N"9&B%!S%1%!8dbi"UYhY-8nG$ @U`bS<^A;U%1!.?nGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&b5_PD!rW8r"9&E+!s8T+!RLhr!!NE* !sAc/[/bdYfDkpT"o\Yo!s/N)!Q4ti!8%8T!<WH."p=,jJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u $3^bJ)(nNlJs2=YooBiJNfT<cPE:]WJU29I>YdR<,8Uq""lB=6!#>S9!Yd4V>@qo*N0g'+RtFs*)$L*D !Pe\e!8dba!<WH/,=>pkM2I7On;e6CN/NUKJphobC117=4Y@im&.&Ki!.k4-!<*!4&h6@TBQAT\Q("/- KNpPV!s/N)o`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XL[(b%L<=CuZ(I!bO3rcf&uF`_S<AR8J; 8jtfm*t\\\!s7?[gAhlf!<N?B4CO#&KRS2gEGK&Y0c:2.!.k4/!"8l3$4n"*7pp[oIXHJ2GnYCEE,TH$ >usot83o0_)@QcO!s7!QJcO[.'*84;"W97(Iu/o3IsZ<S@SSa#$Ln+J!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!7:cR%OF>FDKU2IF`r!'GS>CLI"$HgF`D,*>uaN]0d@MJ$O?Y5!!;$Xg]/)j#7_Li1J22+IXQWn D,WJ?((U`S!<Kn7JcO^/$N^bX/3Q^8DgHbVH1,tkG&_D7A6r>88NnjV*Y]"d!s8T+eGt1$hZ+>o%M]s; 7q-^lI!^3V<&l'4%1!(;nc47AJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bQ%_H$5b&[+poP?+Wh^C'Fk?N !Rq,"!!iW=)]g1K)%-PU!.k4(!!<HJ,U;_$#Taj!&e#$L!WgFDJcOF'#7_[o+se3;"7-#>!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cR"Ul(d2cXp`X/i5oW#)A0VP^8iWiN5%W2QPiUnNun<^%rQ&d[@pg&Mlh !Wj9$<afcjNM<r%b/p`.7j&!>!s-1;JcO[.$3:54#VB&"R%U4Nn#-o!VQ$PnV50i[TqJ!9D,E>A*"iJ+ !.k4-!<*!4(,f*#CO1r3[D^5.Z$K%g"p>#/o`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XL]*ABrc C3ki,R?mT4(R1/JPED&lP*(f`LkghFML/Gd+:JP\"Q'46!##D9!sBlDHE"'ES<T>.Q]H)R,72!_JcO^/ $N^MA(*5J;Fd8D^Qg^1QPEM&iN/E@BKS>)4EDJ;+#R1A5eGt1$hZ+;k!sAcM89:N.W1]THSXGO\8LOu: !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!"'>l:j.hbR?`hoOS=nSQ'I]&QBI8eLkL;)E*Z*t.j,Q8 "Tec-hZ2F3('4aS*%!mXJ"3.#R$W5+4s:LM$O$P3^&W`bhuF#a&L05/@sO&urfcf6'98'0M2-Y3HYm(b 68Tu*$3L>3!n@:&!8dbk#7h[r3`pZpT:2+1J6bA`%h8mM!<MclJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcO$q"T]#Z8ml'#?4^IN?sm>H>#nEg4uOo1%gE'e!7_&U%67*]>@0oK%Ka-?JcOL)"ToiJ?sd=1?4:"; :eaAA2_ZQs&-r?_!.k4(!!rre9N55(:+6VSm/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%i?QT >BlV9](W]6[hQB`]=knn]tVYHmIK>BK3LGh*";r,!87Dg!<E6F7U0,+Ef7'Tq>L0>P?B:?"p>"C!.k4. !!r]1#7*7tKWDGcm^X"C]"Pbi]Xkbsf]VYOV0Z'#.2WEB!.k4-!#>S9!ZOI1>[_T+Vq:V>q;%NI/dV^b !qcPF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%3df0B75i5riGgnrhpL1Wi<&"Wi2r,cJ@X3P$KdU $O?mm!8@Je!WrT104:'nf?:b,^!b?LRTV3L]E!N`huF)c#SA"&7qdaTXK:ii'</(6WiN%oVmXRrhnXk? -4L4b"4[C'!8dbi!WrT1.9MPMf[%@;]?o$JU1#hgnGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd 2dqfO]"bTNU\:VbWY;;.VPBoYSXP=P>"1>!+;"h^!X%<[g]/,l$5Od;:Ni5MbIk'ZKO@+f%1imP!W`>: !.k4/!!iZA.mmTgQ`@.RVZ<UnUCWrhSt(UX?r0-G,7k%^!s7!QJcO[.('bHl-U_d5^Wa<nW/>.T,7=tj #6Fo,oDjICJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hL,#X^*]Crf7]+)<][^EEBWM>Mf6miNJf`9S' $3MVnNhN_hO\-Pp\,_*\g&M6g8ZTM:m^We8[Bd$<WhlAGC/$K$"O@("!87D\!?G^1TWl%s;BQ,DmJqh= JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCU%iQf]??`")^CS<>p](9RXaO89//SQo!s7K_g&MK]!WjZA >?Q!%RCClKrs/"j@P%ok"9Q@=JcO[.#6G#5#sN$\]&^U:`nL"_s4!fc;*?9?"9S]+f`6U(h>doa!<O?5 >?GcsQF,*>rs/A)CbuM)"Tn>sJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`%F=E97hW9C>oZcqS) p;qt^,oR=#!s/N)irIg6'*8:?#;g4on(l-tYeoYeh7%)T%D2[m!8mh_!XTP_.Sk)IX5pAj[)q:tos/U% *>AharW3'#f`6U(hZ+;k"9eu]A>&)Dc+L<mkN:U;E&nU$!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u !!a?(C7rJpi5+WX%%rSh9M%5u+qtIm!s8H&irIj7(BP!_,r8VTZ1cDLW2Pte8hUM_$jQh7!P\Vd!8mh_ !uN[aB8W_)WoU2iSs!qf<'iGc&.JjI!<LdPJcO[.('kQq/51>ckgI#AVOM!g1CFa'#6Ou-oDjICJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&bl@hR131M#jp'YWTm93B"53b+!"&omNj6XVj2H1"%(H:h!8@JU!?Z77 jQ6[%`2JS_(';h_JcOL)$Ni)6Xi&]Jc[n:l!U]r>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V2Lu 6!ec,ke@\IeEH`.n&;&UB1t-'((LNLj8dm6$NU;1,Y2!;C4qn^h#@<YmA=>D#mLM6^]8rdhZ*l_":,;t BoBR`^CS91iq!*.^7B[Z5q*NZ#mAo]JcOX-$NU80*CNt/BRuARdf07Oori-e$3gV7o`0RDJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&d/XC^,sGCLM4LU/XUqeTfBN%^Tlj6p-56Ud!WrJa!8@Je!X&Z21i98_jj(NC _rg%5Z",Qs]E!N`huF#a#nn@.:2uDsjK/ru^X;$2`KFn+1EI#/!WiDU!.k4.!##D9"U6MhU?Ujh^9P61 iRYDM1_9*VJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8TF8SA3J,_!%g0UR-I:<)ldf5V*la"9S], irIj7(BP!^,VrMQZMW:cWi2.g9.^M`%0lq8!P\Vd!8mh_!uEU_AVmA$WoU2gTpURO?s?Q%3[bjPrW3'# f`6U(hZ+Dt'H\l#H)Bua^8n-$@o+um'G(QP!<MfmJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sp]& alqjmhoiEuE&\jE!Sd\+!"&lhKrDl=j25po$b-1g!8@JU!?Q16jQ6^(cap&n3u\@N!.k4)!"/l]H)87( iQlp5%KYttJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#6bST,X>[[SER^!_TC?fp$pYNXc[U#2CTRS !os@8!"/f/![:'3;e1BA[bUl^#OA0o.gQ=]!l+ef!8db]!X&c95&#qdjM)5BaO8o;kL$u>Kjm7o)A*5- !.k4-!"/f/!ZXL*;IOm4ZIAgQ#Oeg21C46g!qcPF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=2< Dhjg^kcGE#\&?\Uh79#*@6l+G"p>#0j8dp7'*87="uU8"o]su?YeoGYe>Zh/$bQIk!8mh_!XKG[-V\TD X5pAnYdVBljNjrkFB17:"pG&1f`6U(hZ+;k!sJi[A>AMZf>4c)hqHAQ@5/8^!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!a9#AXC!QfYQdP&>bk_L2LmGChHO#)$L-F!Wh?^g]/,l$5XsB<e@XWiP;LlP[R6: $ka!R!W`>:!.k4/!!iZC/P0N0W4f4lWskhpR#Q91E,8uT.hVs`!ndR*!8dbl#S\C59mN].kJXL!RqP\U ',M5e!W`>o!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<K\E67>+$/sOY\tO+B3?SI\!7h,W"Z1S" ][PlXE\Rm1!.k4*!!<6CDVO77$/sR^^n>aF1DU#?!.k4)!"&cWE1FGbi6?X/%IF.I!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!7:cO"V2Fq5@/T)ke@\F_oBmIgt0ik[[;)34"(dFj8dm6$NU;1+@8k$??qX@h#@<Y kbDN8#6b22^]8rdhZ*l_":,>uC5fab^CS/u`Q6?WeBc%1K3:/`)@P3uJcOX-$NU;1*'[:r>',_/e,K@P l`=hV#R(;3o`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],<SqDL7>4,XUq\@[(3ro^9XMe?SrE( "p>"g!8@Je!WrQ/1iBPknCYO\_Vs:sTj0/V]E!N`huF#a#SJ+(95ounjK/rrZ*UmP_7Qk>G>T[o"p>%] !.k4.!##D9"9g>fV=*s1_m6l+d_hJS/Ih4MJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8T@0Pd\]a _<@p2W2-#SR?*>gNb_<9"p>#1!TX79!#,JA(*bM5J[>CD`iQ)&@neHa'FtHJ!P\Vd!8mh_!u<IZ@Ygts WoU2kW2-)VRZrhoL1W^j!WrN+f`6U(hZ+Dt'Heu%H)UH-b-%S1CfE2.*#&_]!<MfmJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO$q!sgPualqjojP\hEc+U6IH79!R!7h,X">Fk`\'a3QD_D@s\H%3]gAh<V*GsQl jpL2-h:^,fWKUd0!Rq+$!87D\![qcHZd.LRGr6!2mJqh=JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT %Mp?R??r.@^B_Qh^qd_"^:sHW!5/9Bs1JBGr4`TSd^ti]:Gj*p!<M<_g&MK]!WjH.9i"o6NjRU@rs.\\ ?mu9`!s-1;JcO[.#6G&7$9i3`])BAJ^qmk(_nj.c^APYE]`,JD]=u#T^B_luUifBl,n\f1JcOX-('+I< )E^bh=E'/%e,TIIl)SMQ#6b22o`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7AXoGR& Xo,7%XfSZ(X95W-Y-.T&#GZZ@+;>4f!os@9!##D9!sLQ"YkReF_Qgr7fZT[b/.0#iJcO^/#Qb8D)^S*q OK/8]#-P/5Yd(F8orS:sX/u#s#I0S/2\?E%!ndR*!8dbi!WrQ//7kaKo\[Wn\^Sd7O&@G9nGn.@JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_["X8SpsW2]`q$*1)+W2ZbpVl?ZpWr/n'Vh%u)#R(>5 !TX79!#>VC(*YD1J$T+Hb-%V+A5+Nc'b1EK!PSPc!8mh_!u<IZ@YUboXSo1)Wi2hlUnafbr2KXp!iW&t ri,ptq5XaqGu,^g!s8VX!.k4.!##VP+>$<5WVZA9Ybdh-<\tj>'FFa>oDjICJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&bl@hO/T/Z.joa]'hV@eY"Phhii8agur8n(9A/F)&ec6'[/8UKUcf)cY/I)<e!.k4*!!<6B D;5$O#3Fq+iSWJHp"KZ*hV[8Ojn\$?a@Q]f!.k4)!"/iS@u[Y8i6?O)$Nf_rJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#6bSR,<fFZT)HD3^sLW]d)*5kStDXKrh'RfR[fn>VQdG;]`#SR_;E\LP\`l>$O$V6 !U'O;!"/f/!ZsX$:K_e"[+tZ\#Nhag.0]qX!Pe\e!8db]!X/i:5&-%frP'2ebh2(Nl-HrEX/`+oUnXNS T:MF<SYra)q7d0Ze@h>k;`5Qm!Sma-!8[\`!<N<@4AJUQE/LmKrr35gX(a9n"Tni!!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi(p:'FVk06;Nf9!YOH>WjQ^FGHZF$pBYHIi+#d:h5H;ZXE %0GSjgAhlg!s8]aDQrm-gqp>4hq6,?==afl!.k4/!!iW3&K<#gE0.*uXUVPHa49;(\Y"qEOcbijrf[MP R%'Y?Vt[:uZ(ubC-lNU"f`6U(hZ+;k!sAcYAZ,%iho2n3f[.I"<@\OK!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3u!!a5t?]_V6e%Yd](oO*mMh-Y@O-5ZjPEq]2Vl[,/[&^%#W2ffs$Dr2Q1CFNo"Tnc+joF0: ('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMp1!RZrADGCYJIN=:i/PEqT.WO':P \?Mt.Ws>DE;^r(Z"p<NYJcO[.'*o9p/PUMiqY/@@V42:$1E%8I$2stt!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3q!!<KYDTMe=(uE<.I:->_;b^(f<a&mFF*j"N`n95.j5p7%"5S)H"Q'41!"/l[Cm)-NiPTLa #6D@8JcOO*!s'EZg\p7>i7,cUTo"&+r`0J.='/[5?Yk%FQ`e6Xi;)L:bZ,;*!.k4)!"/iS@u[Y8i6?O) $N]YqJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#6bSR,<fFZT)HD@^t$lR\##:>DfTrDG^OphItWQ0 M4:HL])BAP_=$dI`/e4_'++pG!U'O;!"/f/!ZsX$:K_e"[+tZ\#Nhag.0]qX!Pe\e!8db]!X/i:5&-%f rP'2ih=UaIkeE[GLP(,*I!^3dIY!*%M3asKq7d<^kh!S?ECh>U!W`>X!.k4-!"/f/!ZF0r9iu@lYg`UO #OJO+0a@ja!qcPF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\r2gd:TSmr1Bk(IW@V'.g EcuhfS[$,D[Bd"7XU22[c*NU?3#;SrjT+$8'*87<"Z:2%p[m7XZ,,>MbF)H`$G6@j!8mh_!XKAW,t`-< Wr9%:[ER\'pXZ*cA7T:aC2.O#DKL8ZMj0g3X8/k&[^DB;6n9&[f`6U(hZ+;k!sAcYAZ,%iho2n4g=4-3 =Y1*Q!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t?]_V6e%Yd](oNRID-^RZ@qTIjD/a`MMj:!: [^N-3V5aEo$`82M0aeBt"p+i,!TsI<!#>VC(*YD1J$T+Hb-%V+A5+Nc'b1EK!PSPc!8mh_!u<IZ@YUbo XSo1:SW.;X;HI+6An>OaASH"$Fb>jOZad`ZWVNS"T6=0e&I\sLf`6U(hZ+;q'Heu%H)^Z7d'0@9C/cr) )A3AU!V?AD!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT4sPSmO/d&e53Q#RLhI',i)I7W"^= f\PKHrT44>LGoUu!7h,X""\8OZd7UJD(Ptn\H%3]gAh<V*GsR0jqujgUk2`2.i/X'$k!FO%M06n.m-UF QGDAQjoa">*WjjlJcOL)$N_VaNNUL`c$;/S!U]r>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n 5$iN+rP'2ee&JSSH=BN)3'BPq92SbqBQeTCNgZoVrP&cWpAb0k[Wk1Z&./RAkQ'<:$NU;1+$WIq=`f\2 h#@<Yk+Z64"pG)0^]8rdhZ*l_"UGH!C5fb&^B)XLrr3YaTlX:5:.e#H84c?N?"7PmM42$O^C/6[p#O2W >V-$[!Wh*WJcOX-$NU;1)E^bh=E'/%e,K@Pm]:+W#6b22o`0RDJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XC],Wo%CL7>7BXVe7<Me>OC2D?X71,V$W93#;>O0-^E]!S^?XU;8jnE]%r;'H&A!TjC:!##D9!sLQ" YkReF_Qgr7fZT[b/.0#iJcO^/#Qb8D)^S*qOK/8](qec!p@lFT:Gapf2`Ni]5!_qKBQJikU9"*l#IDCV P\NK0%G:`5!8dbi!WrQ//7kaKo\[Wn]%tu\Tj05\nGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd 2d_ZQ`m_[#Wu.^jCJQcE1c.'L4?l5/>\SG?TX)V@W2?NlWsbeK=Zd9+%1!(=!WhHag]/)k$5Og=;h)+Q oZF>6P[mK<&JYc[!<Kn7JcO^/#Qkho87I=N^9%:6(n,A:6Tm4d4ZGAX2)[Q^7S@-1LnV)`]rLn/#blK@ 0G5!-#6ENYJcO[.'*o9p/PUMiqY/@@V42-s0bbH:#lXks!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q !!<KYDTMe="5%cM$24E,!<EB?4E@^QfA5KcjojY7:Da,j!7h,X""\8OZd7UJD(Ptn\H%3]gAh<V*GsR0 jp'86HW)1!"nr!%!<iuT4_ptMq;qe0E$tq@!.k4)!"/iS@u[Y8i6?O)$3BPpJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#6bSR,<fFZT)HD@bL*\XBMC9$!sT)A&f;c@1.bkhAVH2;[/I`?_<1as#NCqG,S^do !pBX<!"/f/!ZsX$:K_e"[+tZ\#Nhag.0]qX!Pe\e!8db]!X/i:5&-%frP&B_r;Q^%^Nr<p+WVC7'`JgP +u2DVAUT]Hq7d<\rr<#dZ>hc+!s/MZ!.k4-!"/f/!ZF0r9iu@lYg`UO#Oed/0a@ja!qcPF!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-p>RrL_1&ISdG#71hN(aLas=b!9uc,$oprN-@/eb&S- c>Y?:j8dp7'*87<"Z:2%p[m7XZ,,>MbF)H`$G6@j!8mh_!XKAW,t`-<Wr9%9_X7'hnY]V=#n%1Q&/,cq )C[[>>]GRipoOe-f$M7%>V?`C!.k4.!##D9"9g>fVss?9`Nm)4g<QR&0b<dSJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#8K1)OL)sU^AY)LV0uH"%L`aR$P*md)^[F3=)sD'cFL'TVZ!P'Vh%Q.0b"[%"p>#/ k5a9;('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMpd%=@=t`$P=!^%LigU&Jc?1 3)OOMTsMG8q5XgpDcSY+((giR!S[U+!8dbi#S\C59mN`7pX$.@RqGSP&Jbo_rW2WkJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO$q!sgJraSk6&c;YAH!!`NC:7K/Jg>W"m"lm(B:+?;'!7h,X""\8OZd7UJD(Ptn \H%3]gAh<V*GsR0jorqm=t^$[o)Jmr)b>tAq;qh3J2[i:ec::%g&MH]-"Dq;bi$`l2@AgOJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO0u#6bSR,<fFZT)HDQb0I>PA4eTo!sJo:%2'Es+uW8*AnZ.6R'O01]YWS+ s8V2J=tCU*#m0;jg&MK]!WjH.9i"o6NjRU@rs.\\?mu9`!s-1;JcO[.#6G&7$9i3`])BADf)G[SrjHl3 *uc"/r=9;J)'^^n;egc;Oe/P`rP&?Srr38s[W=J7"U"l-h>i--h>doa!Wj9&:/+i0MQkS/rs/"pBe]hr !s8,qJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.IYF9Do'b:QR"9f#:$PF=$.R@Kn TX_\O]<\ZEY-64Bp@ZaP0ED1Q!U'O<!##D9!sLQ"YkReF_Qgr7fZT[b/.0#iJcO^/#Qb8D)^S*qOK/8] *5_18mbs4#*sMrU$4@:Q&.op32+(JbLRP$;XK;B&#I<+9af8f,&_R/9!8dbi!WrQ//7kaKo\[Wn]&25e VI)%gnGn.@JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#X!jfm<\4Xc#m^eE%M'6n-8@Y] E/gs8`58aTVl6VnLf6`%)Aitg!s8Vf!8IPi!X]\e02mA+s7FI:VNbUc.M3C*"p"b=!.k4/!!iZB/P'?* VS9/1WuRL/7l(bg'+YKZ$4$kF%i#m03)!_*P,c@=^U1!=Ws>;7=#^j1&e"[>g]2p+hZ+;q'Heu%H)^Z7 d'0@9B2L>p((^`M!V?AD!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41,;@`6t&-Ee=Dj%NV i8WeYj1L@X3!8+>ec6'[/8UKUcf)cY/I)<e!.k4*!!<6BD;5$O"NcKq,6IB8#6Pi0IAX^-hu2[?fS2O# !S.7&!87D[![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL.Ep)B LL<V+(BO[B#71bJ&euTK8QB28Ee0d[ZF[m-qZ$TYT4'N!((16.!87D\!<N<E5>=pVFH3``rr35cU0oDS "Tne@!.k4.!!`Q/#RWb1N4Su&!87AO#PP?;2\m&<%/^G?&/?313`9I+G_MNnrP&?Srr39$\9:"C#R(;2 h>i--h>doa!Wj9&:/+i0MQkS/rs/"pBe]hr!s8,qJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A <,IAZX8T.LZC,Sl'+G3N!sAc2#7D+Y)_+6]G)W'!`434\YHQ.7p@cgU1B[^Y!<MBagAhlg!s8]aDQrm- gqp>4hq6,?==afl!.k4/!!iW3&K<#gE0.*uXU;r2l/]j.58FD+#Q=u=#mgtO)BpUo<c*JPS#*1aXTu/d gX3KG3"jmEJcO[.'*87="Y=5_nFYVWZF\rIcDFr'&+KXO!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO 'fTK]Zc:J.rMp$qHW;No#9a6S#7(YF&f2W:2c4OQV6dtTW2?DjViY1T5:7Qd"p=u/k5a9;('4gY+tllE ZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMp6i>Y?mb'GLu]#Q=o<#R_(P)'^aq<caD/_o]j" rMp9uDcf+<)&3M]!Wh'VJcO[.'*o9p/PUMiqY/@@V42*p0G,'3#Q=br!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k3q!!<KYDTMe=!mFFLnGj($%Ot8,]@l#ujQ"+GCIe]h!7h,X""\8OZd7UJD(Ptn\H%3]gAh<V *GsR0joiYP58=4g!!WK<1g,F9gAU.:fT&?6!nI@'!87D[![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL.Ep)?Kj@(t('+I=!sAc4#mq7b-Sn8"Ci,3#W4'Ooo`+sTUhDe: )\)u6!87D\!<N<E5>=pVFH3``rr35cU0oDS"Tne@!.k4.!!`Q/#RWb1N4Su&!8RSR#O87"0FnR!#5eW4 #7:nP+#-)W@!7C+rP&BSrr2p&]m)aP$O-\6h>i--h>doa!Wj9&:/+i0MQkS/rs/"pBe]hr!s8,qJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.LZC,Gd%grRE!WrN-"9f&<$l:<Q9k8mOb/1`t Ycl(,o_-RS2?j3_!<VHbgAhlg!s8]aDQrm-gqp>4hq6,?==afl!.k4/!!iW3&K<#gE0.*uXUW/-h:&91 1(OEf!s8Z/rWNZ8$P3st4&]mBNh<EOXTu/eiRu.k3tp9IJcO[.'*87="Y=5_nFYVWZF\rIcDFr'&+KXO !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMq?AHW2Bt"p>&2"9eo3#n%4V+Z<)0LS;,t Y,J4qW0V*k6o-2*"Tni.k5a9;('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMp6h @S\`o)A<G]"oJK4"pbVM'cSu-Fe,nTagD#I$_VB>5oUaZ%0Qb6!Sma-!8dbi#S\C59mN`7pX$.@RqGSP &Jbo_rW2WkJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY8N7!"K,T<M.Uhh;[M9UjZDW !TF+1!"/l[Cm)-NiPTLa#6D@8JcOO*!s'EZg\p7;_fRaE!Ug!l!=C)JNn"$i"PK#6)?\OjJcOL)$3DM` NNUL`c$D8Tm/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Br--Xb'\C//80cq>hE8 "pk\^8mu7aNh<Yodd6o3kbrDc/KYN+kQ'<:$NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0^]8rdhZ*l_"UGH! C5fb&^C/ous8LrL?mu?c"9SE##m(/5&K<#`AU^HR^B)CRrr35=HpSGT#Qt1b!.k4-!"/f/!ZF0r9iu@l Yg`UO#Oed/0a@ja!qcPF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-C0Q"`)b#R1A3 !;urt!Z2+Q)^R^^PfM%c\?W6Rg[=d\GW,m/!WiDd!8@Je!WrN.2/]Ymo\@<g_;EngR92!I]E!N`huF#a #SA"%8oTllrN-=>f$(^[:*p8G!;cd)!WiH+%jEr+BRlMMrN-=0gu[J?HU&:u!.k4.!##D9"9g>fVss?9 `Nm)4g<QR&0b<dSJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0c&b!s8Z.quQcu )$:6f0hGr6WQ_oUVl$D[G?.:!0c:/u!s/Me!8IPi!X]\e02mA+s7FI:VNbUc.M3C*"p"b=!.k4/!!iZB /P'?*VS9/1WsY)+;(`k0'*n[A!rW0!!X]#3";`psJ"O-f\c&Q:U2O.$,97U2"9S]+h#N$,hZ+;q'Heu% H)^Z7d'0@9B2L>p((^`M!V?AD!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9F:+e%0\M> _p@&qjNXljD]&W9!7h,X""\8OZd7UJD(Ptn\H%3]gAh<V*GsR0joiM:/I;LG!!<BTD9;b="l#JG,6S&! !.k4)!"&cR@u[Y8i6?R+$LIhF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH6=u 67`fOq#D64!sJlH6X3uEM3tN`bhr!jkH&hu1EmJ8kQ'<:$NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0^]8rd hZ*l_"UGH!C5fb&^C/ous8LoK?RZ0_!s//s#6Y>E(HZ)UUA_h-a85f8#Jts[((^iW!T!g.!8[\`!<N<@ 4AJUQE/LmKrr35lX_BKp"Tni!!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsD, 2%0]n!r)a4"UG\X0jp'_f>tS0YI`$<n]H/>$NpP4!U'O<!##D9!sLQ"YkReF_Qgr7fZT[b/.0#iJcO^/ #Qb8D)^S*qOK/8]#J\j7\qNg($1n3&$5k?X=a#t.rN-=0g?%8?IR+_%!.k4.!##D9"9g>fVss?9`Nm)4 g<QR&0b<dSJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0c,e"9\f/p])-9(aqOL J#1K0Z`0e"RYu#]9fa@$!s8Q)kQ'B<('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\d rMp6hC/?H%*"iMX!VQKu&1pOnP-)L0rMp=#E`kj\+WCpp!s8S[!.k4.!##VP+>$<5WVZA9Ybdh%;(rRt &-r18oDjICJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb#$17d&![r9&ak#D2e@ql@-jAT1 ec6'[/8UKUcf)cY/I)<e!.k4*!!<6BD;5$O"Mnn)#Qa;m!s'HN`Vnp&gR_Oq#6NKWJcOL)$3DM`NNUL` c$D8Tm/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XasVA///-\!#P_<"9oT* >$Gs!P-2U@dc'TQZ%#V4-l*!M!87D\!<N<E5>=pVFH3``rr35cU0oDS"Tne@!.k4.!!`Q/#RWb1N4Su& !8d_T#N;=_.0]qX!VcX"!s]5I2.(s2rP&BRq#:9u_gtAt'+>'Gh>i--h>doa!Wj9&:/+i0MQkS/rs/"p Be]hr!s8,qJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.*YE`fZ$jQq;p])-5"q)"l =cLS]cG-]g[DC5F_gF]\"p>#0kQ'?;'*87<"Z:2%p[m7XZ,,>MbF)H`$G6@j!8mh_!XKAW,t`-<Wr9%) _Um/MMGGQ*oDf+%'dGG,DN(OmXU;>cjPS=76P]Y&!Sd[,!8dbi!WrQ//7kaKo\[Wn]&25eVI)%gnGn.@ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Ws>JJ;^DSM"9\E!(^:^"1e`(bcHs/(V5g)R Lilrk,mOPT!s.Tcg]/)k$5Og=;h)+QoZF>6P[mK<&JYc[!<Kn7JcO^/#Qkho87I=N^9%:6$'Jst.iK<< #QXu"!!a#_6t1hE\[_U=$_hcK8M;>.%g)k7!Sma-!8dbi#S\C59mN`7pX$.@RqGSP&Jbo_rW2WkJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY/?2!"ArQDQ^k)hrWV;]WF=(iW.O0$NhqrP-`Kn _egt1!P&2^!8@JU!?H%3rT47!Cb#blli7)'=2=ds"l#_W/-uC0!.k4)!"&cR@u[Y8i6?R+$LIhF!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH-7t67`fOq#D64!WiH<4',NqI?(>C`5g0R hR&#>5V3fVkQ'<:$NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0^]8rdhZ*l_"UGH!C5fb&^B!-irs.SX?RQ*^ !s//s#6G&7$SPh>VZ"71`qKE3#KDEk*Yo4i!T!g.!8[\`!<N<@4AJUQE/LmKrr35lX_BKp"Tni!!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsD+2%0]m!r)a4!X/c8+B+3BlI<\XY-PIJ `4CCe'FG!G!pBX=!##D9!sLQ"YkReF_Qgr7fZT[b/.0#iJcO^/#Qb8D)^S*qOK/8]#K#6F`K4"I$1n3& "qVXu6"PkKrN-I3f&PW6J4(7T!!*,V!.k4.!##D9"9g>fVss?9`Nm)4g<QR&0b<dSJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0c/h#6Y/3p])-8&KWJjCREE*_60Z8URdj?CeuYh!sAZ+ kQ'B<('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMp6fAkjfl(D$fP!VQKu%jO2< G+5kMrMp0tG?mlu-lrou!WW8W!.k4.!##VP+>$<5WVZA9Ybdh%;(rRt&-r18oDjICJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&bl@hO/T/Z.joWb#$LIg%*+YeUce[^?gX=2A&E3]@!"/l[Cm)-NiPTLa#6D@8JcOO* !s'EZg\p7;_/(V,!UKdf%o9n;josP8@PJ8nf)UC&g&MH]-"Dq;bi$`l2@AgOJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#6bSR,<fFZT)HD0bfd)=>!abS!VcX2!<N?72H3[_FGZj/^qmn*e@1KI822"dkQ'<: $NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0^]8rdhZ*l_"UGH!C5fb&^B!-irs.VY?RQ*^!s//s#6=o0"t3]/ V>\.0`q030#KDNp+rLps!T!g.!8[\`!<N<@4AJUQE/LmKrr35lX_BKp"Tni!!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsA*2%'Wl!r)a4!<N?*(eok3nD)$lXfek3Z)W1E)%6cS!pBX= !##D9!sLQ"YkReF_Qgr7fZT[b/.0#iJcO^/#Qb8D)^S*qOK/8]#K,BMb*?!W$M4<'"UYk[2-tp2rN-I3 e)K30Imt=V!!*,V!.k4.!##D9"9g>fVss?9`Nm)4g<QR&0b<dSJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcO0u#8K1)OL)sU^AY);V0uAm#R(>5p])-7%N$BNA!5.)b-IqGWi)\hJQso9!s/N)kQ'B<('4gY+tllE ZN'R>Y,7Fo9e$_i%L)q7^&W`bhuF#b(+i'dL8M\drMp6fAPFTe'b:NM!VQKu%3RH"BooO.rMp=#Hsf`0 /KYN*!<N;X!.k4.!##VP+>$<5WVZA9Ybdh%;(rRt&-r18oDjICJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& bl@hO/T/Z.joWb$$LIg%(0d04b1u.@j5Jp2(ZGGG!"/l[Cm)-NiPTLa#6D@8JcOO*!s'EZg\p7;_/1\- !UKdf$:_Z+josP<B/L2%f)UC&g&MH]-"Dq;bi$`l2@AgOJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u #6bSR,<fFZT)HD0bfd)=>!abS!VcX%!<E652,mR^FGZjl^B`,qOCCd:)@#L-rW*3)!sJo9#n-S<$4RFQ $OI"@"9S]+o)K.!!WjH.9i"o6NjRU@rs.\\?mu9`!s/#o#QXu/!sJl7$4HV;"q(eG#6b84rW2Hf"T\W* !s8]-#RUJ=!=]P<%K6bA$O[7G"Tni.!UKdk!<N?,#7(VDq$[N:$OR+C"U"l-lMq1k!WrN.#RLhGp^@?6 $OI"@!s8H&p]01O#6G&7$9i3`])BADhZ!N[je6'2#6b22p](O#!sAfV>_JsP^B)@Irr35CKMEU*%gE(2 !!E<'!sAf*#6"c6!s/N)!!*-'"9o/>rX9)B$k!FL"pP23!VcX!!<WH.#RLn6$jd@N$OI%B"Te]*n,WFg !s8W/#5nc/"pG/4rW39)!WrT3$4He@$4RFQ$O[7G"U+r.kPtnh!<N?*"U>>A$hk&9$4@.F"pG)1!<N)u $NU;1)E^bh=E'/%e,K@TmAt"V#RCY>#7(VDr!WW9$k%XeJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC] ,Wo%CL7>7BXTu%oBJ^)%"9S>u$NU80!u4LccLBW/[f!64VL2#U%0m%<li@%drrN?+"9f#9#l+c2#RC_A "9Sc*!qQC*!WrN.2/]Ymo\@<g_;EngR92!In,N^q!sAc2#7(VCq$@93#6k;5!s/Mi!!NB)!sAc3!!rN0 r!<</rW`W1!s8Q*!Wh`i#QXr-!WrQ/#RL23"pbJ>"U"o0rW;Bc#Qb)2"pP>>$4?S8!XK&8rW<-$oDmeL #Qb8D)^S*qOK/8]#K,BNbEl6Z$1n3&"Ubt_2d_35rN-I3e`5N5J4:FW!!*,t!!NB)!WrQ.qum]9"9S`, !W`<%!WrT0#6tM?#mpS:!X8`0rW3'#qZ-Tr#Qb,3"pbMA$4Hh?r<W`8#R1D7!s8T*n,NLj!X&E)!<iW) "UbG8!s/K)!X&W0"pk)4rWiN0#5nW)!WhKb#lt)0"9er6#mgt6#mCP>"p>&2rW3'#qu@W:!sAcYAZ,%i ho2n4gXaK==tU9b!WrQ1#RL;6rWn)UJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Ws>JL <[e:X"9\E!$O%"W,!'1qbjEQYVu3S#LL)bD!s8T*li7+g!WrT*"oel'#mLY?"pP55"9&?%!V?@-!X]\e 02mA+s7FI:VNbUc.M3C*"p"bt!<*!'!X&Z1#R:Y1#m^eB"p>#2!s8Sj!!NE+"9f#9!XT/?q$@-/#R1J3 "9/Dh!!WH*!s8]1#lY,1$N18>#RCY?"pG,3!s/Q+!U]se!<iQ."9o):p^%33#R:M9"9S`-oDmeL#Qkho 87I=N^9%:6#EiXl.2!@+#Q=bu!!`rU2GItMZ+0b5$_hoP9J\(;%KZY4!W2p!!<NB$"T8E*"9\f/!WE'% !<NB-#lY,3$4-tE#R:S<"9S`-!<N)u$ipD2!sAc4#RUkF#n$V;rWi`6"pG)1!s8Vn!!E?*"9eu."Sr37 !W`?)"9o)9#mgqG#mgkC#6tG9"TAK(!WhNc!!*?+!sA`1#7(VCq?[?3#R:V>"U+f,!WiE(qu@T?'Heu% H)^Z7d'0@9Bi-Mr(D7#W"9o);$Mau/#R5k\JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$ $LIfs'j6p1b1upW!HK+<!7h,X""\8OZd7UJD(Ptn\H%3]gAh<V*GsR0joiM;.gH+A!!3Ks]D^jqgneI7 $j5)]JcOL)$N_VaNNUL`c$(oM!U]r>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^ bH-7u67`fOp](X%!<Wrm<E<OPMl?Qg#LU#A@7W*k"mc6g!<<0+"UPYQ(`X\Eq^2^t,paWO'FtQU"9J)o $NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0oDf7#!sT&?&f2T5,:+]7-OV4D*ZGn,$O$V6!Whcj"T\]/"ptkV 'c\>@-7LGp.4?Pi,9S*I'bC]V"Tneo!<*!("UPVO(*"JDr$Mju,9\*H((h#`"p4nm!"&f3#71kS)'C+K -2]+u-6jTQ)AE\g"9S]+p]01O#6G&7$9i3`])BADhZ!N[je6'3#R1A4p](O#":#5b?%]$Q^B)COrr35@ JOpan$jHb1!<*!$!s]/Dr=T_T%h/mQ"p=u.!sJo:%i-02-RK-H-6jQL'G(WV"8Dj$!sT,E'cA)=r[.Li #9k3,'bLfX!r`5l!!`N*!WrW5%MJ^S*"ibi#6b54"9]#@(*4PA,UXrd,pj`T)&3\j"p3ug$NU>5"pbYP )'C(I-2]+u-6scX*>fJ&%1*4@rW2uu$NU;1)E^bh=E'/%ec,RWl)SMQ#n%1Q&f)E0-N,:n-7'jf!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y,'!"/f.!s9<4LWo2>`3oNF#Glc? )@QlT!pfmh!WrQ/"pYMJ'c@r0qA]h])Aj.u#R(;4!Whon'*87<"Z:2%p[m7XZ,,>MbF)H`$Le$'!sT&@ &eu9)+!)FCr#>qZ'bUu^#6Fqm!!NH."pthQ#8\@$*?6%<)u^fb)Aj2%%L<7@!s/N)n,N[p!X&Z3$kaBU )uCT_)]9D*&.8aI!s8T*li7@q"ptkS()e59*Zb.u#9=Zq&.JmK!qZKN!!iW3&K<#gE0.*uXTuc"fuo^_ .1,VH#6bVU,<f[oV>[M%Z.e<sd==V&!<*#s!!`N+!sJl7$4ZnE!Xf59r;m3(":#>I',MSd*!mQ$((pu[ "Tni.qu@6.!<N<*#n7I^)&s_A+<M[(*!mQ'()%2d#6b22n,N[p"9f#:$OdRE&0),b"Tnc-"U>AE',DN, *$$"<*#]Y/&If!N"9S_h!!iW/"UPVN'H%tk*W-lb*?#b0'+YET"9S`-qu@]<!sAcYAZ,%iho2n5f[.Et <[nLX!XK8O(E"/4r#>_T'nQF;!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t?]_V6e%Yd]#GliL.0p([ "8Dj("V2It5%g/*kJsd'r2U'X?S_ui!s/Mi!!<9*"pkJC&JZ0'*$+nt$QBos&e,-N"9S`-!VHF.!X]\e 02mA+s7FI:VNbUc.M3C*"p"bu!"8l/!WiN2$kX3i)B9dq*X`u-)\itp#6k86!s.ch"Tnr:%hfZ[)BBn@ q]?(b)ANem$3gS6rW2Hf)Zg-H#7M.Z)B0_<+!)FC)]BJ+&Io-R"U"l/!q-*h!WE-+"pteP'Gq].*W7#e *??(9'FtQW"U"r/o`3nM#Qkho87I=N^9%:6$Beso.2!@+#6Fo,pAbF/,<JqJR'XC&Ws>A>>":%b(_-HG !!2ut#6G#3#71bG%/gV<$jHk;!<*!+!X/o@'c7f-*ZZ.*(`!_o#mCD5!Wr9"$3C>6#7:qT(E=G;r?)Cg *ZH"7'bLl\"o\T(!Up'k!sT&>rX9DK$k*LO#mLM7!X/i;%hfZr*Zb5$$QL$"'bCcZ"Tnl0!p]jc!=8i4 $4RR\(`XV>r>lFh)]KV0'bUua#R(>4!s8B#)[I-#/PUMiqY/@@V4)0s/JK*;$jI(M'H8#3*W-r[*#0*< !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9a^7f"W(L8[E[P*joKB<iW.O0$NhqrP-`Kn _egt1!P&2^!8@JU!?H%3rT47!D(>hlli7(s9YLDe"l#VQ.0p",!.k4)!"/iS@u[Y8i6-6r#m'GoJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#6bSR,<fFZT)HD0bfd)=>!abS!VcX%!<N<73*'-lI#P*'^B`)o NaP@2)?oI-rrN-%#6teX+Y,9+5Q!nW6U<t%2(Kjg&e"sGo)K.!!WjH.9i"o6NjRU@rs.\\?mu9`!s/#o $j-\@&/HB;1-7Zb6:Cc>$U-R,/g_PO$3^P6!Up'm!X/c8&fVT50f_Hb7nQ<B7RKI)3ArE5)A3Ga"9Iul r;d0.%i6B<0K26brBgrW4?58N,p*p9$O$Rt!"8u8$PF@%/N5dV5sn'=6OGq70e=Le&-`:?!r)cQ!!`Q/ #RWb1N4Su&!8d_T#N_[f.gZC_!r)a#!sJu?0j]F.rP&BSrr2p&_0n]c%g`C?quH]s!sK&F)Z1]i)]'/! $O6b7!sf>L)^dC)6ph8H5WpkP+W:t$#5A0'"Uc"a,qUu<r^6TO#X^^1/0l5L$NpA/o)K!r!X&W4&Ju\i ,9.dC'+G6Q#6b>C)C@3s4$Q,#69mas1+OUh'+5!-!"8l1"pkbV+tPZ65!_U86OQ4E4?,,I,97L1$O6P1 *<6'?!Wj9&:/+i0MQkY2s8D&YBe]r*',Vc<0K;Gu6io\>4G!Qb!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u !!`uZ4B-0PS#cLi#HsA*1^aNk!r)a'!<N?*(JKV,ldit\r2g4#GtAk^#Qt4q!!<9*"U>8A'-/GO/ho0[ 2%)2p/hS@c%gN:@!s8)p'*87<"Z:2%p[m7XZ,,>MbF)H`$Le$'":5VT*[N?p3B&iSr&"^3-6O3=$3^Lt !!NK1%2'L$&L]=j1Gq!F1GgpG0.S=l)%d2S!s&H(n,Ngt"9eu>'d"nX0/GH_2%)/k.3fiJ%g`FC!s.`g $3U_M)BgL^2E3WRr&"^8/L)8P%L*",!8mh_!XKAW,t`-<Wr9%)_qj"hQW>OAoDf+#&g&YqC5\qeXU;Al k2Fd=6l5n)!W)j%!WrT1#n@Udr>ZFg'Fk?L!s8Q("Ul+f,q(B$1bo@l/L__W%0m(>!rN$<!<N?+#7hUn -n[884?>G\2)I*D0dn1_&e,*L!Up'o"9f)@&JGotr>Q4^&-i7<!s]8H(a1:_1,Jne$8F4e-63j3$O6e: kPtqk"q)%[*@39p2)b=h$Sj@b-Qj<?%1!.?!rN$<!WrQ//7kaKo\[Wn]%"m0L/0-(!<`lM-7LN$2#T95 1+ao+!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I9%d&"U"r&!"/uC*%=-eR*O[. Y,;,t#DZV@#QY#0!UKdg!sT,F"r84*/Mf1?q_eg8.jZ5R&IJXD!s8Ss!#>VC(*YD1J$T+Hb-%V+A5+Nc 'b1EK!VQL$!<N?+#7_Lj,Ub6!r\Y3E2Dm9G0IS"Y%LWOG!s&Gj!!NK5',i#@!A65*2[D<!/ghbX&dnpC !WW8i!#u(F$4djl,VCi/1c70K1GUU4,omj:%L<4?"9S\o!"/f/!sAuC(a(.S0Ji\c$oU"$1GUO.*>8kg #R12.pAj+O#Qkho87I=N^9%:6$Beso.2!C,#6Fo,pAbF0-U1mcT=;H2WsbS9<^IlH'ab$F!Wi3!#6P,8 %1j-c'`AaZ'Fk?M!!**%!XTDU,Uk<"2)Huj.juPW%gW%8qu@]<"U5>H)C$ae1cRKW3B9&W1G11+*u>Lp "pG,2n,NUq#nI^c(]G0l'bh>o$O6b9#7V=b+!rQs2)[<M1G1.&*u5@m"Tnl0lMpte!WiZ2#nIak,:YB+ 2uY]C2)@!A/LVng)\`bfr<)rt*!d6$/PUMiqY/@@V42="/JfBC%LEad,qgu/2)kIl!\c#EJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY8H3!!O3JTt8P*r8n#u(ubPH!"/l[Cm)-NiPTLa#6D@8 JcOO*!s'EZg\p7;_/1\-!UKdf&lZRDjosG*;BZ,Cf)UC&g&MK^-"Dq;bi$Zc/I2CF!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ERt/$3:20&NX#sBRc)Cr4`K_[Z"Q_0Gt&\ !!<6'!sJo;(F1b#8Q/ml@gc^Q?X6>j0I.SM#m0\u$NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0oDf7%#nRmr /j2m/=^>G5@gcO?911Wc)\32X!s.lk"Tnr:%iHc23(QtN?tX:jB4YRZ>#e<`1*mhO$O-\%!"/f.!Wi]E +u)2M;I062$t3IF;bTM9/0PlB#Qa8l$O$nN)(%.*;--q-@Js[E@9QJu5;=B!$3gY8!Vl`Q!!`Q/#RWb1 N4Su&!8d_T#N_[g/.)Ra!r)a#!sT/G1gbg.rP&BSrr2p&^Ni$R$3gS5r;cft"9Jc=)CGD8&hPLT*#B1p "p"l8'-&G]8QoV3$".(A8j+mT)\E>O!!rZ+"q_k*2FC8EpgXY390b9]*"W8T!<Mcl#6Fu2#7h[s0E![; /gMDM$k*FJ#o4mJ8l/Mlra?+??<'Q\1FO1R"m>po!<ri?(*bS#;,g\(r*q<e>ZXco5;FW0((^]P!W`<% !!*-&)E^bh=E'/%ec5[GiM^HH$5+7%/3$*u@/XR:?sH`a!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO %O=/9D2+O\rN-=.P\;l]#6Y,'!"/f/!sBE6L!&T-_6j-B#Gl]9((1?N!pfmh!sJr<#88113'fu):&Ifq 9hRrC1aEnF"pG)1oDfO+!s8]aDQrm-gqp>4hq6,?==agK!"B&>(*P1f6;:HZ;Gg7er_Wni3\Vm!&-`1% !!NN5&K)fH"?T.M:/:d_%Sfeq83f0j,T$so!WrK)n,Nk!"U58I+>#]D7nZTRr_X)#84,O!.j,T9#mUS6 li7G!&/urM4@N.J<)QRir_Wnq68gD>((:<;!8mh_!XKAW,t`-<Wr9%)_qj"hQW>O@oDf+&(F:t9E/gjq XTu/kkMaj>6PoLt#6G&5#S%Oh,lK5+.NK01!s&K*!='8[/N,^[9M\=g84>]q+VY:h"U+`'*!$*C"Ul+i 002Ho<EiR+;c$7a9hIQ'-63a.#6OAp#6Y;A',MW3-iGJ6+r1Rh!WrcB)'^gs8P2]Q;,0bS6TQhE(CplY "6]^o!sfJU+tPZ?:Jjnb:f.-g$Va)U4#A9(&dnpJ"8i-=!WrQ//7kaKo\[Wn]$\ErHq,@e!=0Jg3'BZ# :]4)k9LM$q!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I9%d&"U"r&!"/uD*\9ct REOC$Xeu#s#DZV@#Qb)0!UKdg":5VU#9YNV6qg?O;>jB$:e3f//g2&B#6Y/3!VHF.!X]\e02mA+s7FI: VNbUc.M3C*"p"bu!"8l0"9f2K+=f?578-PW;%HQ$9h\,?/KklA$O-b9!<MWh"U,GV-SRU_7Srt\#uXYu 7QE%F)%[)Q!WW8i!#u+K&/QE=2b$G6:f1+d9hIo>2Cp*n'Fk?N!s/Mm!$21D"9f;R,;2#@7SQ]V;,U:f 9hIf3.NK35#mLG3!VZTP!!iZB/P'?*VS9/1WsY#$9IUSi&-r=<!VZR!&1L([LSherrMp=!BN$u-&J,6O !W`?"!!`W3%20Qr*$>,%&g%eq"98H(!s/lJ,rRtV8P`)N#sgU+,T$pm!s8W&!#u+H$kO=(1."T.;H?k" <)Z[f7R0'g,8U^o"p4ts!!<E7(*3;r+!;XF(_I)Y":>b\-87GJ:Jjnb;G9JB3%Q3g$jQq<"7#pg!<N<B "V):j.5X7\<)QXm;G^._8jba#0IRqT%0m"="8i-<#S\C59mN`7pX$.@Rr2(T)BTh/%2gNO84lTPr)*Se 4>)3cJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$$LIfs).]SVd,"W^!H/h7!7h,X""\8O Zd7UJD(Ptn\H)O-quM`VgAh<V*GsR0joiM;.gH+A!!4!>_YrU"foo)J!nIA7!;lkk!87D\![V?9Y0>hI D(5bkmJqh=JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXJ?.hi$[!#P_>"pl5: ?!VQ,Q*.m<`5]mKZ\DRJ/JnZ\!!`N+!X&`<'c[H*2*t/FA8ZYjJ.R9]J:N,g?r''F-l`g,#6b2'!"/f/ !ZsX$:K_e"[+tZ\#Nhag.0]qX!VcX?!X/f9&fW/Q5>>?qEclVSJ:W9'Jp_]XA5u&U.3B<:#6Y,1!VcX$ !WrT1%M^'82F\TcA8ZO;Ko(P<Jq&5rG&h"f6T$>9'at9M!s//sr;d91$kjO*1I+`>@r?SkJJ3WdI<fsS @oc2d1b'Xc&e"sG!<Mop&-2k;#RhFi.Q'Ul?u0n-H@>dD&V>OYF)#)Z5VXN''Fb3J!W`?#!8db]!X/i: 5&-%frP&?hrr35bU1#S["p>#*!"/f.!s8i@)C%R[J>N4Z!6P6?#lD)P3=5ro!Wi6"#6=i,!t#qu5lFCi 8j>-_+;tn%#7hb&3(R+`GCP,sIt)c\>Y[O>-5d7""pG)4#Rq@b.5sdt?tsk5It*!"JqJ`1H>R%f7Q2h> ((^fU!r`5q!!`T0#R_It3_]KN+A>*\0./%j+s]!6<b?/gG^b0mJ:;`Y?;a3L-Q*I'"p=>p!s&K.#7M%V *[`^/:g\$WFF&E8JM)P(I!9[J?Vs<T0-hGJ$jQk7!!*-&)E^bh=E'/%df0:Fl*Yt3,:bW;8lfJ@If4cu IXHEm!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;i]#6Y,'!#PeA$4eIbMT=Mr ]sFiEZF%'CGsi;O"Tnhq!!`Q-"U,8G(EWl22FLJL?tF$LCCb&iA7AD#0-M/E$jHe:!s85t'*87<"Z:2% p[m7XZ,,>MbF)H`$MONJ!<N<*"UY\Q+=oK@;I+!UDf'<+Ci!s*@ouAi1+!qO$3gV8!<N9&p](U&"U>AH )^[4#8K(Z?C1q9nBPD0qC1LRM:HpTZ(_I/]!s8T+!VcX?!WrQ/#nRjn.6'k#?XdV]CM[g(C1UdW<(Ar$ ,9%=*#6b23!r)aC!<E6'"U>AD(aUn#8QB28E,KN/CM[g(BO=\/4>%fp$jm1?!W`?'quGXT#Qb8D)^S*q OK/8]#K,BNbEl6Y#l"B-!WrQ/&L080AUp/JrN-=2iT/_1F?LE7!!`Q/#n7Um/NWi!&je;q&Hr=B#RV7k 1dk/B?Y=%b$"RLL90=dK(D$lO"!RjN#7V7^+YGlK<*j0SF)c/:CM@KqAm7tq2(0FV#R(;3!V??s"q;:f ,qUu=rB_Vg/g1uA(`t+[4%WLaAnPdmBOt[^=%GD*+rLpt"9S`-o)Saj!s8]4$U,+>,VV8J;I4'OC2%I! Ci!s%@pN/25rL59(D$iR!s8Q(!WrQ//7kaKo\[Wn\'E!tMcr([%3@/f;d!C:CAhoLAmnkp!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I8hX#"U"r*!#u"?!WiZH.m@!^UsI2nWhlboURn!# <\=[\!s/Mm!!`T0"ptkY,;'-[7T3c/CAVcTBjk+@8N\^T)\`eg"TAK'!Vl^2!X]\e02mA+s7FI:VNbUc .M3C*"p"c$!"T)3!sAi='H/2K3_*+O?tT=P&85Zc@9#i[/gD8H$3p\9!Wi)s!!3'##mCVD&/ccM6;1Ma @;Be!r+lp[BO4V.4Y\<)'+P<Q!s/N)pAcH@"9o)B(a:Ii79*f2BkhBsBOkUZ=&)7L2(Kpj'FkEO"9S]+ p](g+!X&W4&/H641HnK4?"7XJCCt8oA7JnB6oHJ;((UWQ"9SZ*q>fFR#Qkho87I=N^9%:6$Beso.2!C- #Qb#-rW)ou$NgM8"WB6tGF5VN\,E?7T5%7]$P!XP!W`?!!!`W8'ceVO0fJtk&iV*P#m(58%29s=5>k`q AnYgc$!UD&4"hcp&ISgB"<n!S%29g/0gJK?BkqU*E,TW1Bk:US<Cf8+,T@C,#mCG7"7uRA#o4aB2``u_ 4$#>Y0dn.\(*4n]5>5-eCMI[$CLpjU;F`c#,T7=)#6"])!qZHt!<N?+"UYeT4rYe$3CQeMB5hd+Chm`s A78bF;+j88/0YoD$O$V7!W`9,'Heu%H)^Z7d'0@<F'CjZ0eOgt0L8WKB523rrG)ID<CqcBJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$$LRm'!@;fn`73],j58YF?PDE!rW!'%!sT#>r!rl:#6Y.l !"/l[Cm)-NiPTLa#6Euf$j$VB%1WjY%LrpV"TdN]"p"o:$k3^YrXT)>#6P"a!"/l5#Rh4R%1NXK!s.6Y !s&N3%K6hA%h9$X#m14s!8@JU!?H%3rT47!D(>hlm/R4l.;R$'joa7m57uTL"9J`8$jm%@"Tn&k%06S< &/>fj&.]0V#R1=X!"&`2#RUtM$O?q>!T=%U!"K#3$4I=P%M'$Y$jd(>!Ug!s![V?9Y0>hMIQA)E!Vucu !X/l>r=8r:"Ta2TJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi$*XFO>;.hi$[!#PeF &fE?#AS6aZTsVVTdG=-GY'Wo&,o$RP!!`Q0#R_P$4])GjASu^@KoD5nR1GaVSt;4*JTbR%5r']'%gDq5 q>^m(!WjH.9i"o6NjRU@rs.\\?mu9`!s//s,R+eu,r7kc?u'n6L5h=ZQC421S"#k6PE:NFCgKdq-l3@" "TnH!#mC_M)CRU=>A%poH\@9=QCX_@SXQ":R$a5"Jp(p375H2,&dea9!$hRH!sB8b4&K9oCiarVMj0Wu R[]b7R@'4tKm[uW@TcJj.MrEi!VcX@!=BJ\.5se!ASuaCM2m^`Q^O;2S"#h3P)Y'9BNmn]+qk@i"9JH$ hZ*l_"UGH!C5fb&^B!-irs.Y[?n2Nf"9SK$$N^J9#o4dD5uh`OVZ"7;b5VG?l)AAR"pG)1qu?s&!WrQ; /4jIPH4kI9;aE)e+rh=D3`'=*H\R]PRPUJ(RZ`PYFC@p-/Ku#B"qVh,4A/deE-QkfO-GrsR@0P8T:hX: N.cLo@9#]M*tAGV!Wi&r#6Y;B'.?.NFoHh5Isc?TA7/\J>$>KVH\@39PF7i-S=H"2Mh?1_;aW>f((1$A o)Jjp$54FD-oXXsA8QO@Ll7=XR@9S6S!ob4QB@&UH#I%c5r9l)$NL/-!Wj9&:/+i0MQk4ss8VrBV0lKV Bl.g7K8l5qR/reGJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.*YE``V$jQq;qZ-Tr (^:Nk-p_R2`QQ'+Z*(IKbhBjW4U_Gq!<MZi#6bDE'd,%g8dA@'BleQHJ:[WO!/:E($[-5h:dHf['FY6N !r)a/!WrN.2/]Ymo\@<g_;EngR92!Ip])Q?!WrQ6(*YCo85ru3EdNIrLPCM9KS>/8J9c0M@ouGn2'Wb= r;uirrW*<1%iQZH4A/ddC`7GFJq8K*JV&N-KR\AnF(nu\8i\::$3^M6!r2gB!<`T6%N?iV8lf;7G'n^h JqSf2L51A1I<TR?>>djH-5dC%"TnH!-isGQ"V2P"1I+W9ASlO:L5:V>KnP,5L5(2$DeNKW90k0O%Kce7 !<N-!huF#a#SA"%8oTllrN-=Bh:]u<<[e@M!"&i5$4\7A<cNk]VYmP$ZeO'KT3jAfp](O%#RqIi0h,FH C(b/R1)^B*&fW&O6WRi>G'njnK-#PnHZ3S$:H^0G%1<UR%N$NN7o`f)CijuRLlI:JL&?T3HZEh/;ElcV '+>$FoDf+&'I#1l8QTI%Bd%5%>>dpV7nlreA8QI=JUrH,K7\Z(H#RA$:-:$G%g`FBoDf*s!WiH/&K<,( 1I+T6@;9h.KD^BVKnb>8JUD]_C1::>3[kmS#R(;1!WrQ//7kaKo\[WnYfb50XFXkV5>>6lEcubYKDgH) K780!!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"H;l3p"U"r*!#u%B"U>\i5[/H" [aDObVl$JcR#QE!81"WG!s8Sn!!`Z<(a1Io8m2I3Dg-_cKS+sUJe*-KDJ!9[;bT;')@ZoS"9\H"('4gY +tllEZN'R>Y,7Fo9e$_i%L)q7q>_$."pbVU-ojq&?ts\*H[UGBJeET_I!]mH?WK]W-5@!s"Tnf-!W)j+ !X&Z3&frP`7oWl4FF"jUL51M;JqJ]-Jq/,dBjk1E9L:HX&dJL@!Wi)s%06YC'c\Y^86TPBGCbGHK+rof IXHB]DIm<_=A_^P.NT-/#6Y/)!"]/6#71n]/O36=A8H:1H[gVEJe*B\I!0C>>uO'F+;,+g"9SQ'quGXT #Qkho87I=N^9%:6%?b9r.2!C,#6Fo,!!!'!!Xf2?&JlukDO.Q@`3fKD#G>s5/I`=%#lXl%!!`]@*\9?A ;dTE4&mn'X(Bb6i/j;s6C3P)UJ:rH!(Nj\3@TcPr1*dP>$kF$h,;DGY?"e>1L&HcAKnP)1I!B^MBOFq= 6Sg#*&.8^H!<Mlo/.a*i<F0-FA7AqS?X$Q+84QEW@;Bk-It`T0K7\StF)P`"=AVC@+VP.e!sA/q#6G&6 #nnL=76XXS@;0V%H\.$,KnP&.IXHKdEc5](?WU)m0d%#3"9\f,#S\C59mN`7pX$.@U4I,a9iG(k;-n$` KnY/3K`-K(H?*\N!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9*t"d%1>7T`mNN!jkS1t Ys&KR!!`T2%2g<8.l$rZ#;.DM*YJb^!UB^n""\8OZd7UJD(PtnlMqS!"q;7f.5Nb:1c7*G1,1$l&-rC# !!36.&J6!20JP@@2E!EM1asOb&d\[Ak5Z1t#7_Up-7go01c$m>-6O3@$jHh8jo?%r#S7gs0/GC@1c7*G 1+XO`%0lt*!8@JU!?H%3rT47!D(>hlmJm@o+A7XArT446IPV;t!!!-"$NLJ,!!`N2'-&8N1+i_Y,97@% "7lL+!XKDX,:k]73B/lR0J+b%)\EAZjo>D`#lP)3#6P#+!"o;5!s]AV-nI#+2)$O.+rLms"QTR^!#5P? %Mg3A0JYFA1c$mA/1)GW'+4sFo)KR.-"Dq;bi%-HAN1bH#lt#,"Ul4g,V(\L2$,BT)hJ'A!.k3&!.k3& !.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#g:DjI8rK]'*7n/(^:Tp.m[BUG*\o-\A?JMp]'<QDaH'! &-MD%#6bGG'eN'jIg:jkP*MH*U8\!k&$N:G\$<'5UQpLK<C&2T$2su%!"/f/!ZsX$:K_e"[+tZ\#Nhag .0]qX!VcX?$QLfc:g\3qO-Q-)USXohXK8P,Y-G7<Yd1O8VMAYK.2`^)"8Mp(!=BPc/k&r^JrYs3Q^a\F Wj&h7Ycb(2Yd(O;W2#rCF&kLV*tebP!%7mN"U?>CA:f\uOHGj!U8Y/pXfen4Z*LU8WMQ;aTULmY9.C;N !W`>t!#5SJ,;hniAU')oQCFMAVl6\uXf\b/rilm8Z`gF)H<<6P((UWOr;b^T#6G&7$9i3`])BADhZ!N[ je6'3#R1A4qu@*-#7D(e4%rUYCOiMb^C/6`rUJI/@P@oe!Wi3!#6=o0"rKO6L&IPTS<%ep5WLVP-9P7E KTMLlW3*3YZ*UgBXf/"XI:Q):/K>3?2c*t$GCtm>R%C+NW2Zi!Y->7?ZE^O3X/MYUG?-U?#mLJ5p])iK $kjU?<H=@tTqS3ST:;13OH,0QN00HsTr"ZgY-5.<Z*:C2UmHdU><s\Nr;lTl"T\W.'I5M!6WIcGNKKNp StW!ZXK8P+Y-,"4Y-4k&US!d%D-0%P'*&"5!Wj9&:/+i0MQk(Tq#C<O_PN?VP*(fiS>*%^X9,N/Z@W(. !.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsA'1("3g!rN$<!<E6'$QC`f?$r-U]XG,L YIr9FoZ227#6=l-!Up'o#8%q(3)3k(#(VDcOHYrsqO.naSXu.-Lk'AE4XV'X#Qsi%'*87<"Z:2%p[m7X Z,,>MbF)H`$MXTL!X&Z3'e2FKASudGN0'<oSt2C@R[T_9S=Pt1OHbulMJGX.$j-M3!W2p,!<E6&%3.#e ;.4BmLPuM$QC42/R@'D1rgF=`QBdMeJpV'#//&<o!s88u,ln/Y',iMn?ZpsSN09KnR$jD3S"-+@R[KM) N/3%)?qWC%'F4g:!$qXI"9f)O1.Y_bEdNV%P*VW0S=H%:S"#q=R[05#Q'@Ad>rj#1rW3'#r;baU#Qb8D )^S*qOK/8]#K,BNbEl6Y$2=K."Ubt^1fnjhXg>RBrN-=2cbcN+9ILDG!!`W6&fN5e?[D[2&rUKq-3t>1 0gJZKFbc'BQC+/2+.JdgPE(HIAP=fs(`+#,/4F#oLP^qLOHZ'%TUq^DRf8fcSsbk+MgT8>5:RHU!V??s %37&c;.=R$rf&(]N/)n.Fa&4^K85DJR@0G1R[K\7S!K7uLjN]-0cq)9"S;[!!<N?+$m.8r5$MW<H\dTC Pae)0S=5n9S"-%=R?`trM2$=d8hV%n#mC;1!sAcYAZ,%iho2n)]?8C8V2TeCH%:^4P*D?'rL*eUS!ej. JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Ws>JI;^DMK"9SK$*!-9K$6;*/I@mpgcDme= W2Q/>@STNU*sVoO!Whcj#7MJ#4]#X2KEmL"QCOM9R?mc;&!Dm-K7SJsG%+&t(CUQQ"8Mp4!X]\e02mA+ s7FI:VNbUc.M3C*"p"c$!"K/=&JlrfAr<"GS=#V-R/3-^P`h2eL4FV^:,sI4&-rC>!<N<#!"K#3"pbY] 3)XXBLQ7RaQNWeKS!f]AQOf4;L4Oc!G&pqT,RaeY!s88u,m"Gi,r8%tEeKF8Q^jS7R@0D.P`h&cM1pM2 I!KjA7kbnr%L3+3!"]2:$kaO:;/qtnS=5b2Q^=*;QO]7EP)tNRI<Spd0H(W6#Q=c)!W2rU!!iZB/P'?* VS9/1WuR:69IUSh%gN.:!<<*#!WrQ6'HS\jA;RY6bJ^R^WsGD?;_Jdt%L3%1!!`cH.6UL<G(KUG&qOIY ,RPSN;f[POQ^aG3R[B>&16.6GJphi_=?n/C(E=YO4]?'ELldslTUqXBR[KS2Q]dGiLkUA+G@XT8-ls*5 "p+f+pAc`[1f\p[O-#0OK7e`)H[Bs\I"R?=Pa@l/R@9P1P`Uo^L4ObtB2^i8&.8aHoDf*u#7V=l4^3CC R@K_3Od;?(S"#iFQS4SfP)tW[LkL>-G\p>;)[H]P!rrT@+>$<5WVZA9Ybe.^J9#OJG^Y'sOd;W2S=0;A !gJXtJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bXr31!"K)R<i+@$i8`nH\tOd%"QTO` #Ta4)4%<1T@qffXE!^;j?Wp,f1b'%;m/RLr/8UKUcf)cY/I)=E!"&c6'dYe.;-RXNDuFV^Df'?!<(T>) 'aFd+!!NB/(b\-H"B]5ODK#Gm$#jN_<(oP8/0kPf!#Pq`0KVg+?=[bgE,]`4C1LRL:..-!.M;mM!"&l= )CdsD<*j<XDuO\`Df9K->Z!sN+qOkXo`3_H!s'EZg\p7;_/1\-!Ug!l$7S_qXk<U7"4_KE#OVQm#:077 !BCVb!!ilO4]#9jCi="mAmeY34Ye5fp])05'-o7p9j(k<Ed2bLEH#c0An+k65;aDe!UB_0!=0Z)6:!n& 4#/91+!W0d1HnE5AnYstE,B5t?W9QZ1E6Y^!"&f:)(Ia<;dX<VDZ4S`Df9K-@9Z`*69$V?#5%s3![V?9 Y0>h[_k)$T:-C3P/3$'s>%).CDusc]<e:='!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL #gLJiHW30W'*7q0)$(!\.m-O8F,RB5]"Gl2o`+sRTk681)%?];!!`]<(Ec(TJXlhAXT#='Z*^t<\IlHc ]t_M'^V7FtZ^lPQ67*-CrW2lr$NU;1+$WIq=`f\2h#@<Yk+Z64"pG)0q#D!-&Lg"@>AJSNXfek4ZF%*M \c',N]Y_S'h=CF>d$/!$,8h!qq>^m(!=p;/5uqcOR]EP/Yd(L@\%0,_\[f>c^V[n)^:q7hT7'm.//\]g !"f56"U>Al?\>/SWi`>(Z*_'PrOW`V^VI\$]tV27hq-&FD*8L6!WiDu!"f;M1Ik;MDh=abYHkF?[(!NT rOWTT_SXIXp\Od!JQ"3D((13B!8db]!X/i:5&-%frP&?hrr35bTjT;S"Tni(!"/r<&K!;u>$#$KMR38r #gE,9iPq!a.g#\Nqu?s'!sJrP9lud$[M$-UQZ>ko6p<J$@sOHBYHbOJ])o[\_Z%=d_S*(6E`tg['J*!j CiXo`U8tN([(*XF\J)Tg^VRe)_84mdhU8WU:*U2S"TnH!#6teY,XPmdU\qYI\@T5ZZ`pF+X0&V0ZF%'L \\#Pl_SO%'bK7>lLL<4_!WiB'p&G6s!!s]'6juq%F,?p!Yd1I<[(!UD].CV0^q[Rr]YqgsSq($,)ZTj= !Wj9&:/+i0MQjq:cJ%=9d(lumYH=n.YdCn<\H9CV_L_c>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ 4B-0PS#cLi#I0P+0aS$e!W2p;!<E6'%OabRHB+c.Z*:F7YK#Vpp<7P4!s&B&!Up'o$Q:KU;J_#T#GIli WMunsX8T%0XK8J)YHFk&V3ld@4X_-U!r)a/!WrN.2/]Ymo\@<g_;EngR92!Ip])!0"U>AX5$`SsQC=PG W2m&&XK/D%rN$O4YHG"Li9]jAE]b$<!s/Q%!!!'!!XTPk6sjn`O.W5G"fSH$WMl`nWXu/1XfS\)WhuVR CdfBT#mCG,!"f8<&fi>hAUp8DUo12kWi<"urN$O1Xf\e,W2Z_iPBpOt+:\GJ!#5M;"U>Me8SX-EQ^snM X/`;'XK/D%rN$F0XKAhYjm;?*?S)NcrW<#uhuF#a#SA"%8oTllrN-=Bh:]u<<[nFN!"0#D*%4BtS&sC5 _ls$@#IVCLLgN4c$hs],"Ul1j2-+j`rMgL-LL)_E*A^8oEIs@IWN3&"WN7)?Xf\b+WMPVn9I_D9,UG]f M6ae(Z)ae$WiW8%ri-L.X0&S-Y,nV%RY>NL-kHIP!!a#[4&T^;Nh60J!MuUkT`CbbU_]l,WN)quX/`8% XKS\)WMGSo:bj+)"nVd"!WrT1&hQak%"aG&S"us\WiN/!W2fcs/?Z+WXK/7sUlTFf.N8m&!!36*"Y=5_ nFYVWZE:=;]=tYPU7n6SUo(,iWMocq!j&H)JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU ^AY)7UO#c_rW<-$qu@Z<#7M1k8T^fMe`"WIVl?\pQ=ru\1FX+F"Teep!!a&_6!eerTW&0qX/i>(WMucn V\#Z!US+3LSt):%@RD=Q%0m%3!#>VC(*YD1J$T+Hb-%V+A5+Nc'b1EK!Vud-#7hXo5\lq>mH<$4X/r=u W;WXmU^s,hSXFb/6n&rd$j?\5!Wi6"%KQ_<%MLTtI]^?$_R$>F!j&B$ri,jo&>l4qTUh[CS==t42\?;u !s88u&HWLf2+qV:SZ8ZjX0&M'WMZTmU_0AsTV.mKSXGmj>!=)J&dngCq>_$-#SJ++:4'23mGuKsXJr5s VuEJ#US+9NP&=5\*Yo:n"9&B"!8mh_!u<IZ@YUboXSo1)P%@<9&eto^rW*T2!!36*"VMk/5$WT2dH/ic Vu<Y$TQa?i().5_p](O,*]6`,Kq5.?Tb<i?=>:==<.D0iaND#oWi;kmUD]i"TUhR?P]g+f(*G+d6<ni% XgG@;Yck.-qkk((US49PSXc-uAPG!1*tnn^!Wi#q#9Q?SV7OOZXo4q!SY)LGT;&3\Wr9"4WMubmVPBoZ SY)C>M.fR8((grXoDf+!$POL8>E$H(nF,AWXK/H%WWK0!Vu<CkU]$i6St)=1C.]f]#R1>1#S\C59mN`7 pX$.@W2$#QP*VN-U8FijYcY"+WVr^rUSFK6!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41( 8dOnd%g3Y1FM?_njQ5ICUjZDW!Tj@a!>7JB#GJ-"[_0>j_u7L]_nj("\?Dp-R8b..mJmUs/8UKUcf)cY /I)=F!"&fH2c=adY-bdT_u7OP_[*o_YGm"E,74M?!!WTC2-lBGYQD8I_tq:Y_nN[gYH"@fPXQ)L!"0/n LS:ZL[_0>j_o2Pl$c0Qf\$E*7Tpeq*#OMKt#pqlBJYoZZ]>FKarkf&Y\[8K3CciU>!VQNJ!!<6BD;5$O "Mnq*#6F;o"pZScMQ=qWrT442D'oPV!!36KC&P(6Q8T!H!"/f/&2.@YZa[Zd_ncVm]XP)DTntf?q>^p, ,[c:hU9M/@_8O@5rko2^_8![mYH+F11D0fV!!<KQ<L<Zc)lTL#P`h<#T;&Bj[_T_q_o0I/^:CYTWM+;b $g@Wl!=B,W4^Ef@Y-bgY_u@UQ_[=5m\[SiFVP&2g$2+?7![V?9Y0>h`gsa6QZ)F.US>NEr\\5iW_udce [t4U3!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL(sL7-KO%&%)[6KO#7(VD%1aF46;1Kp H_:8O!Q!dprs.>E=tL^-$3Ki"$NU80!Xotr2cXpWYP>j:^:_(h]=blU^C/]E_PVig3?&;0"9SH#$NU;1 +$WIq=`f\2h#@<Yk+Z64"pG)0qu@*+"9o,R4\o-eEJU^o^BVKi_8=%)_#1qJde<\?%)[ct2^fOO!WiB' !!*!"#o,'\:h"O([(jBD^C/Q/U3Kg),RjeV!<N-!#QY)8%hqHKLq;rf$i9o#lbS6H('F^@!W<!,!<WK0 %4O\C=Cuf@\c';C_#2"K_#;"Z_Vb:ks7*437PZ2'"p+f+!8db]!X/i:5&-%frP&?drr480X(jL,&Io3U $47.L'HJMS8mPk3H&8$!_8=+0j6b^FXF*egp](O"!sT#U<I:56^C7p"ZB/^0>u=$lC4NSd^\bbW_;!2= OE=Ma+$3Y=Cl+FU\F@6@jo58Ret?V4)A3D[p](O)'-AYoA:1EL^C%ck^qd[r]"#>`]_oMPf'MA?Y'j(n #R1D5p](O""9f#F01A_?>&&JSm(X7Zl.<S:DFPcL!!*-&)E^bh=E'/%pqI-N_84"(^:h1l^&5Ws!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=1QY\\p$jd1<"UtY?#RLhH*^*_SPG5(YrN-C0 cgpc$^Lo%t!<*#k!"/i1"9]Dd4AfpIS#c:c"Kno2Y-.Z($aQIW>X'VP"p+i,!W2p2!WrN.2/]Ymo\@<g _;EngR92!Iq>^s*!<ioH)`CfDT<ki0XST'uXST%-_<(CanY9>;%g`CA!W<!-!WrQ/*'.5IMOLEBXf_#n $*TG$2BNV?!s&H"!!iW9*\BQaJ!mA(XTuqbWeaS)'*J(2$ipG8%i6EVA;77mZa9J0s/c(!%C".Fp@[0r 8/MdA"9JW'!8mh_!XKAW,t`-<Wr9%J^u3tnUgc1q"9eu7#RC_D$Pt!@4^a)Rkh*teYcb+2Ye$orBL4*_ $2=K*"V2Is4CNl8rN-L0QuYb;1.bo#N1HuLqlTat&?`$i@lQ>%1cJKbWS,A+[BK)%$G=?eSnpS1"98H' pAbF2.mmQbMkR6EXT>T,rN6:-YHP+3r2g74Z'TN.1)gN$rW2fp#QY&5%Mg?[AqpJbX0&VmXVA+HNFFjm '*nR>!sAcYAZ,%iho2nrXU;57YHY45XfSV+Y5PJS!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK] Zc:J.rMpd1HrML"#6k>6"U52;$kjR&4(48jmIB>OrMp=(M-!81,97C%!s/Pq!"/i2"pc51>(E0K^TmR7 s/Q'ts/Q!t$^5X11a*YE"Te`+!W<!6!X]\e02mA+s7FI:VNbUc.M3C*"p"c(!!!'!!XfDS-8SkdaoDD; d]iVL"KAB!WN#cq$^bKt5qa/i#m:>3"8r30!<ruI*'nG9htd**YH+_lWs=Vt6Q-:;"9\Q%$NU;1";igb BSiY"WpHblJ7:eb*#9"e!W<!/!<N<+&KN>aC8'Vds6[h+qlBXor2U7&Mc`J3+;k^p!s/Q*r;baU#Qkho 87I=N^9%:6$'o1$2B<kX%giXB#TF0]&/-3B7Tt&%[Hbc<W2HVmUna)o<&>F+%0uY.#7Mh?=Ep=E_u6VE W/PO_,"6LLiVNH8YktKuWt;.]@R1tb4&'%0S[m7VWhu`aWsb)2=[+bp)[liO"9S>u#9clq^=_fA[.LC+ WMl_lVl6MlWMuoqWsYDC><XAS&dJI=!rDrt!WE-*#SS:28pe&I"98De^[/!8Tlj3_$jm4A!!j8]/PUMi qY/@@V>.(rWi2hlVPg>krhogsri:VNJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb&%.O<$ !YmOtPg96i"lm7O=#:'A!!<]jJ(FDWs5j7@s5j1@"/SR(!Ug!r""\8OZd7UJD(Ptnn,NXo(I)Pm]A*8G #3=h(hr<\Wr8n1-UN9*<!q60p!ua:9VVC7qmcFS40*L_D!sC)ug[+&)RmRhjmf3Oq,Z&QQa5['[#NXt+ io9"YjSe3FiP(Of5m7;`!8@JU!?H%3rT47%GW?69nGj(%*`J?5ak5V5hqZkk<#Yo-!!3HmWr;&ggh@c0 !!!'-&h[CZg\^.1joaCZ,m=)F"rUC>ajf/,nE'k`BeU&"mJm@j&O(iuo]?M@iSNDIi8N_WjQ6=%"3+q# #3l0h#UKREDkPDBjo`t8)$0I3"p-)\NNUL`puVbAjQ#4WhYu=4hW!Vqk(3Sb!.k3&!.k3&!.k3&!.k3& !.k3&!.k3u!!`Z;(F)+MH(OuL(s14>SU"[;1`mha,UP'!4[i7TA7K:pLoC9e!Q"4'rs-Dm9d18\"p4Ds $N^J9#otir>]>7Z\,!cD^::PQWj&qCr4`Whg<md4ITei])\<2M!"/f/!ZsX$:K_e"[+tZ\#Nhag.0]qX !W2p*#8%n%5>b]tE.4"WrP&TQ_o9aBaMbsn^E1S\qu?]PYC^1P0,Os!"9JQ(!WrNI5ZhW=J!@IX^[AiE gXX*6Hri0C#mLM6r;[*)$Pjs@:ht]om(Wr(s8VT-L.iBe"9JW&!"8r;'HShp=(#]`Kq,dR^B_Tm`QQHD _nl;d&Aclbrr;uBTljF$-P6Re!s.9Z#6G&7$9i3`])BAld/3kCqSA1u5WUeW/h\t;3($D@?>FRtEJTgT \AHk`oBt,>SUF[%)Ya:;!<WN3,?9,\r4`Wa_5riZI;E2&GDs!-^\bbW_;EYORY#*D1ItheH]t/-](!HB fDGUIj0F562's(Dp](O)&KN5h@sk<K^C.ircHjA5Un+9`[_2RR$d7i#ho;$s59:RM#5A0'"V)=n2+gqX ")<"9U[5`0c0<lnRVkS<!!!$$!ZF0r9iu@lYkc$A^r"(3cHXJCZ*LgNrP*paJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&d/XC],Wo%CL7>7BXVe@9GY]_4*ul1=*?H=L.l'%V@!.F$WNE?%XU22alfm>j;'H&ArW2Zl $ipM<%i$NY=Di_SUTF6m#-Y;<['Hp>r2g@4Y*acM6n/cR"Tni(!##D9!sLQ"YkReF_Qgr7fZT[b/.2:T %fl\4!Y?S9:1\g7X0T.=X8K((XK/=uWiN6!XWG%'m.U+jMc`"e'*\I<!!**'"pk_g8ns3MU8Y/qXmW:r \uh!,7P#A[r;d<,!!**'(c5',L750Em&^N:b.*gG1DKuh!"T)3!X9Gj5Z_cSRBa-*ZE3u+"g"c'W2m#t XUD>LhX^C,YB`es*Y&&K!!(pW#Qb8D)^S*qOK/8].(@gbg:`&>1a41k-Rg])3Bfr1>%)cE\_G6?[]cjC ^:US.BgsEe%L)V-#6bPR,W]=aT_to"Ul'%a>%r5@S><6dqlTat&?`'nB0/@I9iZ.mY0anlZENc"$b43n [tn-A&dAF?!r)a"&h64RFGupaXo>O0ZaR<O[^33@rN-@3\>tg7:+[+]rW;ut$NU80!Xfu$6<S8\RKKUn YcmDq'XP*+A32+Q#lk#/"9g>fVss?9`No<A%'Hh@[_08`XJ2MhX02H(JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcO0u#8K1)OL)sU^AY)LUk3#=*$$"9)&s_B-8%8E9k8pVeFE"[[/I$5VLMrF.j#W<"Tni-oDf:$ #S7q$4^39&YIhQNq5Xb#W2?DgV5L<jWs>,ECK!SS*=VoL!!<*!('4gY+tllEZN'R>Y,7Fo9e$_i%L)q7 rW!H2"U>>O/OEWiWRh+IiPhnrWro<!WN,rrr2U3pJQYT;1*dP@#R(>0!=o/3$Pjm<;gtq8q!ZV1X/kZh (lW3#,8(Lm!s/K(!!*0*#7MkD@Z$th^T$S#)h2<]*#]P$"T\W(!!39,#7hq68S*jhm/Q\/]_nf8WMl_o WMc\orMpL-QZ>qo4t[oe$3p\8!<E0#huF#b(+i'dL8M\drMq?;FCJ*55s@+U.4?Pk/2B1K:0qddP,H"< [&^+'VONQsF'V6c'FkEPp](O,,!/nOR^U-4WskqlIq25eMn8NUp"$8BX8Aq/VM/PI+>uu0LnhQ+`iH#6 WUQqrRsf*U9Kjg9"pG,2p](OA8pe"ni9IZAWsl#+VPB]VVl6SmV5L?lWsbYUDH]Oj,7jt[!s8B#$N^J: #o4jK:N)]Cqucune[XtH'VTYH.gu^h!WWK?+>$<5WVZA9Ybh/r%'$.sS=5q;UTq,0X/Q#uJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6'dUF-roDf*s#p)05K!3c(jos_D@O_Zck5YYe'/F!ggA0k9 jl>=Wh;I;Rr8n-pD`JO8n,Ngu/8UKUcf)cY/I)=H!!`Q?3G",LaPQmX#NXdtf$`:.hu)U@f!grd0+A!R !!iT;4_'G_h<*kfjoV5E&F]Z&!>e=lh<a8+Sk'Osn,N[t+%LOA[aO47jp0r'gsjj/hW+Rs#33n.MeF(9 pAiqJ!s'EZg\p7=d@4T'(^^<:!"]2;+%CU_aOAr)h8ZCI<[.h:!!3HlWr;&gh2Oc:!XTbr3)tO;h>?@3 jq-<k.KoeP!<E0.0PnAMg>M&]jorke=YLKjmf3Ik&Nk]sp#Z\Dgt0W[a4/_ogY_#PrT473M+]'$li7(o ,Y/#UP.9-1jo`t9)?KR4"p-)\NNUL`q;r+IiSE28ccEr.^WkNmroSe4JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&d/XCT%Mp?R??r.@^DOoAbI*gkC/I&W5t=OI@rHaIK78#iLmbUJ^C8!RrV,KVEBtBL#6Y)#!"8l2 #Rh;!:M5!-OJBD_^B_EYWh#EKY.+>D$d7;YeA%],?:6Lg$i9o3!<N<E5>=pVFH3``rr35cU0oDS"Tnf) !"Ar0%NdMm:L%IOKTW%<rP&TR`Qd#leB,W+^E1DEk4\iMft<Vc74&QR"p4i+!sAfY;/:K/Oe]J%^[AiE ipGaPVK5?V&e"sHrW!6*!YH_;4]5g?\a7'=p](9faG3J-"pG)0rW!B."VW7E7T3Z-I#+)g]`#SM_T(!W g<mpWrP&o[akH+Ws6\1>LKut]%giIAhZ*l_"UGH!C5fb&^F7.]rVuiFX,1h2@pN5D@:NkdFF/[pKRSfG UU%MOm.Bl+]9[D43[GF6!!`N,"pcGSI%:,L$d[#6\#YmKEd3G2\bj/=^C\6@f>45DF'(S"?u1[rY-u"4 ^C/6Jqu6!%ST.Og,7O>I#6th\-:_TnWqF+8^r+OKf>+5?Ll\+0]D]JP_rL%Kg9-$.2('7Lq>^g&!=9Ys 5>,'eD$,0BR]u.n'[>mp]piq0+TMKC!Wj9&:/+i0MQlok%)Bg)eD90-[\]t.[_;[TJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.;YG?td76imm1c@?W5tY-aC3,#gSuSopXSo7+YLV(>WbO[7 rW2Tj$j$_J*@F*UE/BjPVQKZr#Hk>=\@oAXYl(U2Z*UU,Kjm:i%g`CAqu@B3!s8]aDQrm-gqp>4hq6,? ==agW!"K#2!WsH,@>C5FXL5C?YktO,X/D\bUoCHnXUDMQe`HMd^moC7,msPN$3^bK(H#??R&-[YriPUj #KP3.W-Lu\#lOc(!<*!)"=?fdV6RYEY3`7qcI0S/C-!16r;[?/!WiH2-qJ3:S#3KuZa-\1XTtr.VP'TZ X/u9%%'R.^gZe=\Z]8ES*!?-?huF#a#SA"%8oTllrN.KQ`n9+lRW_h*9288\?"Ru!I"6d$PGZ"2]=,#J Ye7NLPANoA&e#!Ip](O&%2U3K?\+pKXU;/#O*lG2Nh<5KXST'qXUhRrCI(Wp@rmHu\&>_]YcdJt$aI@a `M.EH,SCIh"8Dj#'.?.NF,H^aXUMA9Yd(=;]>ht/\?i@:XUD;D[&oR,6QH@6!sAH$$NU;1!u!CgGESJk X95Z1YH$rk'XP*-ANV=U#lk#/"9g>fVss?9`No<A$a-eG_T^TCVj*RCW;WiM!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!7:cO'fTK]Zc:J.rMpd4MJc<M2Dm9G3'Tf(<b$)pN24)?lI`tTrMp='HXK)Z)\rb`!W`>o !"8o?+>cZ!J"![T^q6Q@Ws>Z%VPpMmV5X<m$_rf6F'qQm'+"jF"8r3K!X]\e02mA+s7FI:VNbUc.M3C* "p"`)!!*6/%MC3XA;@"rjRq6I\#TD-#H=Z%Vl6PnW;N\;SsP">=\(=h&eGET!WiB&!Y-8(6"Z+clKHm5 WiN2gWu-e08h(bo%0Ze7!<<0)#RqM';h23iaMOqCWuHLp5T(CR%Kuk6!!!'($4e%1:2lE!bjjiD_m93@ #H4T#VP^>kW;Wb.W1/ro?<9HE((q#]"9JW*!8mh_!u<IZ@YUboXSo1JU5j;+@UihL;c6Ih:KV%?EdNP( SZ/m+[Ag(#WM>DsAlhJZ*Y/S^"S_s%$R.Z6G+#eSrMp@*T9=_EM5A5cnD:s\qlBUp&>t1l6mG!+MR^ma iOPk_VlK6e$_ic3Eaqm$('t3J"8Dj$*Cb1Qa4B+RorAM#VOs-5Pb5.dXf/(qrMp=&P([sh:c90o"9Sc( !"/o7%ML*L>'udJg%ba8e\\QWWt_7M:b3"^#6Or3'Heu%H)^Z7d'0ABWsG`!S!T+hNgm-LYlLa%X+C>' !.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe="5%cN$24E,!XTMb4BHTbXNB8rjojS,8J_Hk!!WND 7;J+$h"g(;jl,%KeCrg?r8n1/So71C#4V[$""\8OZd7UJD(Ptnnc/q%+?sG&ZGtMTrT4@FgsX3Tak#>H jp0\b\"dL_%Kc5%#QuVoQF+urk2u*o"0u,S#4_`t!Z!h7Y28O-"//C'!V-3s!>$\RFf)dng>r4p#N+:\ _SXRPhu2[CjOhDSSOjk-!Vl`M!!<6BD;5$O$/<.\EChi""T\Z'!#5M;#S%Xo/36j]WQNfHi8iObC-WjH m/R1o5cO_E%,S=88LQ\uAT3U0bM`9[qrSIFGV'+"!<`]8+%_71gu%,QnE'o+[Z5&Y%dsB#!=q8Cf(J/6 j4M2HN2OA2aO&VtjSe3EgTlB40ad@L"9TDn;gJP>\BNapjo`t9)$0I3"p-)\NNUL`q;r+IhU]lcZ)*Y4 P-W?hroSe4JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^DOfEfZL[sM/la+@q]\)LR+^3 T:2(6Up7K/^C8!Kn__HS@5SJt!s/Mr!"8l3$kjLF@="*0VmX56^B_BTSWAVkTsO[3$c's:g==';KO[J% &GlG8!<N<E5>=pVFH3``rr3;eU0oDS"Tnc*!<*!,'ei'J:g.[pTrbW5rP&TRaOfV@imYmE^E183bgQ+_ s8LQ7?Sr]6$NpG2"9o,g?@7j,W40FS^[AiRg&:sNe<O>r)\WS^!!!$#";rs^6r.0@\a7'Np&G'jb_f.7 #R(;2!!!$##9Gos8lK)>S#*?t^AYeO_p.$$khXM$rP&KN`5g0Rrr39$^4K-0(D$iRhZ*l_"UGH!C5fb& ^F7"Ae`$#L_lfYuNJ)_0I<]aWK92XtTV&6g[(*iso^V"cT5[:J*"rSP!!`Q-"pcJTI%:/M%)Ba'bfmf% SWK57[ClCOqnE]YkM=1]Spk!7;.4O;[^`r`n@o@LbLbhFf!pua:,!=U!!``@)C7j_IB3%U%)C*:f@.I( HZXq%V7QW?$c0m7j5IhEE(r;;&GlJ,!=',`5Y4^PAUafNV6IJr^D+rWf=d\m7Nha3!<N<@4AJUQE/Lmq ^C7oueD]l`bH78-Wj9;:^OcH;!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cIh(93UH@U)u6 ;-$n-@r?XLPaS/<X0&P+r2g@0_mYqS8h(GT!!!&l!"8o=*%a<TE/UEdWN<5tXTu#7\A?8#\$>h4$F."G UOcT))%[&Uqu@B3!s8]aDQrm-gqp>4hq6,?==agW!"T,4!sC)VNlTVtb.4aWX/u9%#HXr"SX?(HX8K(= YdD!Xiq2g.]Q#qA!!**#!X9/P+[]gqVl6c!riPUj#fuK(mC6si$NU/,$ig;/!X1>kTAJScbc^<7#LM2L \o^4W"8r32!<N?*%Q\?te'l[`Z*(+-XSo7+XJ_b\R\?X\rN-O3ZF.?`o(MY;TN`lK!<*#W!!iW3&K<#g E0.*uXXLBY]Z/!iOF(ndFa/@mQ_q-oX/;PeY-bO@Z*1::]<.689.Ub\"9J]#!!`Z:(EkbDJt`+E$EgG- US4<TXK/J&qQ9Ur%^2+87p'>KQDUt#[]ls<n#Zu#Z+.?ROCgU!'ak-=!!X&`6<\GgT_#8nZE^L-Z+eZ? cG?rmr2g=2[C<>m=Xsga"9SK$$NU;2"<0p[[*[4E]E>C@WiYQh'Xk<0B0Rd[#lk#/"9g>fVss?9`No<A %'I"Td,*`pRtm#mUoaQtJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY)LVN?+5:Jak` :KUt<FFT:;TrbW;ahkKgWr8t*VLMl6)&<ej!s&Go!"8rI1/W%NV7+.N[]ZV*Ws>W#W3*D,Vl'Bm$`Bbf OaLJ#*"3)V"8r3J!X]\e02mA+s7FI:VNbUc.M3C*"p"`)!!*96'HB,>MS\$*ho!"1XSf+(WMl_mV5^Gl r2U4%Ssl$g>=g@]'b1NK!Y5;5'IQ(GH(Mds^pL2CX/kZh#E`Rs3$9.P#lXl7!<NK8'-9AQSaQ+/^o?\$ )gu$Z(`!ep"p+f+!!<K;(FDRfSC-0Pg:k#"XSf+(W2cblV5L>lrMpL0URdj?AQD&<'bh&[!s/K'huF#b (+i'dL8M\drMq?DTULmoKn4VrG'8"NIuK_kW2d#*['d-;V5C2kTR^TJ3A2Ng"U"o/p](O-+?ESHR'a[- Wsku+U77C@ZGFr,\#l\-X8Aq/VhJYN,tW0Zo)/ORZ)=P"Wpm%sVP9QEH!NTQ#mUV9p](O=6Z&U4dFkhu Wsku&Q&:'JQaFiFXf&/sWsbl$S<JS<80S9B"9SK$$O$tS*ApiGXjuFheH3LoYj8>(T64$^$jm7B!!j8] /PUMiqY/@@V>7/#Wh#K4Ed!"sT;f$"W;`iL!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT4sO O%^T#"Tnc*!<NH3(G/0oLn(W]aj]#'rT44=LH#_*!!`QB8sd-4g#;bh#NXgrd)jbjiV_gBgs<R,>oa"; !"/l[Cm)-NiPTLa#6FDr#n/UjH(i:1gY_&ijp0o"`iu,FbM<$X#iXRgc(nbu$Nfr##S9V2bLYM/k2u*o "N,OM'a4+."VWq*OM]uCjo_DV)$0=/$3:r0@>D&5f\GEHrT4@Ad_Df^^XD!;jpC/,gX=3%9HF?<q>f7M !s'EZg\p7Xhq6,cST7FX*ZQ+;)_!jD@rQpVR]XHVgYh&Njj&9<('Nt(!XV,krT4OKfYF;?S#`s0a4/o( qr[e<&DVRd#lk&<*Zd:PT%Du^jQ5mn#2[tR\nWMomf3G"3e,`Rjp^:oW.JK/TsM,Cd+m^\jp'bq_ln;3 "7Z?p"XQiYOgbG<f\GKQjoa":)?KR4"p-)\NNUL`q;r+IgWR72Oah.DC6ZKhroSe4JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^C\9?j5&(oUPs>@I"6j0S#O$q^])"T_TD-#a/j_f.L,DC#QY2E *%4KrKt.)r&&5lp^q[Ut^U9PdH#A%hUAhb']F)Be^YmthWe=V:(B+@6!"/f/!ZsX$:K_e"[+tZ\0BT!: .0]qX!<<-%!WsN/92&E+MmU:9_8=(*^qRhAjQZ!nhTrgH]=GG_]=kr(oD\b)^Nr?p)A!)Q!X&`74_]e` ^qmk(_SH5frOr9HrOiQN]"5G`]=bkmdIR;:'=2^E,oR9t!!!$#"Woiq85s>^\Ga/B_#D(X^qd^u]t:tk ]Y(he\b,n$-d[fJ*!lfO!<<0&!t$PJ8l8oBQG:5O_8F.*^V7qKk3M?pgWI.?])K5M]Y)#5qu?]fVIqh2 ((:<&!!`Q/#RWb1N4Sf!&'<#8^U0o.ObS.&Jr5u!]_T;MfCnO`\qa<;#R1D5p](O#"9o/W<d^J5^BhWk _Sa7+^V7G]]`GaV'Y1``]=u,#lJ9L`Tn?W@;.G*Z^VBc`"2DRa^](nO]=kkg\[oDer4`R"kL-c"@ltM- !Vud$#7qb!7UpkIr4a&`_83q'^q[h6cH=,4O_nB:H]kVD]=blV^B`'3ZAN-`0,FEb$3:21'K/TW<+Uf\ r4aYq^V@S!^:q@s]tM%k]tD%i]=PPqjO_,:DatoM!!*-&)E^bh=E'/%rP/?I&Al?7l2L_H]qLCKTW5B2 ]"<OoJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7BXUqY=Toa\FF)Pl9G'JLpQ_LPVXUMA7 Y-,+>QuPYL)@HW:!!iZ?-9Y:GLnCdIXV.b<Y-"k/Xfek=a4&kk_mZVJXo>L&XTu;.H;#e,%L)b1'*87< "Z:2%p[m7XZ,,>MbF)H`$N0r5!<NB-#<-Y2qXraaZ2:^'XX'X2OGK'fU9(GsXK/G*Y-#@rp@e*L9bdX. !<E6.'H\f"EK[@!XoPX(XT>N+qlBdurN.!>XhWifp?[i.%flY2!<<-$!XCi7_#<re`39'?!j&N,rN$"! r2^4*Xj5_N`IC>u"8r3.!<WK/(.sG/q=)tJXo>I3YHP+3Xf/"]NK'9rWW&t!X8K(-amA`ohg[Wj!!!$" huF#a#SA"%8oTllq5k40V4Ej0OHc-)YJSf:`O`CYq5jn2\=S"F1)U>h!!`Z9(*GSBJY)V<rN?.%rN$%# XT#:6Y-5%6[$5Dr?>ke.^;.C_Xf\c)XT>N+rN$"$rN,jt#J@$g=#;!1"o&'%&h$%KF,HXfXV7k@YHG(3 Y->%+S<BSRc0F?;^TRR<!3H.$#I0\53YDf*"8i-,!X&Z1-X`P0p?Kl1qlTn$rN-(&r2^j>XKAS+Y-5@B PA!30(CC-D!sAcYAZ,%iho2o"XV7k>Y-,"Ff^JUhXGqCRNh*/MX0.$SJcLB&JcLB&JcLB&JcLB&JcLB& JcLB&d/XCd2d_ZQ`m_[#Wt;.oKl^g<BP2""IuBVfYI1D+Wsl#-Vl$27=udE3$O-_*!"/f.!X'Z8D4J#U dAm/G'<8"/Vl$AkW2m)1_p6$'XfA>!W;W_%X-.<k,Rt1d"T8=$!X]\e02mA+s7FI:VNbUc.M3C*"p"`) !!3H?*[sg1YQ+FFYGS>!W2HPjVl-JlU7e$NVlHetWi<"uWN)teC.giI)\rhc!WrH*(GAEnMQ4InWi;rr V[TH#WMunrWiE,#Wi;usWrB%9Qu,Ma0Hh5="9AQ)!XKAU-;Ap&s8UcWW;WasWVrdoW\UZUX/`/!WN(JT 6Q-XQ%0Ze6!<<63(EkY@N6D7g_lBc;WMl\jVP^>lV50]SUoUJqWVib*X/hCd7m%k3'*n^C!Wh3Z#Qkho 87I=N^9%.2"K82kRZm`6#aM'e_nE:QV5j?l$Cc0?3$K7R#m12/pAbF,+Zi\FQaOa*Ws>W%Vl$AiWN,ot !3-L-X/i4uVP8NL7OV)dc2R_FfWD0PrMK^rWi5iqr2B[rr2U'`BgWpL$3p_/!!aH-BUZBOe[#+R!36$s rMC'nNIZ"tOg!s$`3QGDWN,ls#GZWF.L?@`"T/6-#8&".7;nmjs5:Dbr2Tgsr20RpW;<M3W2Z\mW1S30 .gudj!rrT@+>$<5WVZA9Ybh<!'<8%0VPBK0B3JtlK9)M#Y-G"+W.G#$!.k3&!.k3&!.k3&!.k3&!.k3& !.k3q!!<KYDTMe=&DX7#4s:p`&IT6l-8JDGZJ53;#Nb"'hUQEh"Qoae%m>a(rT44CiSNAhgC2fgd`8r& ^Wb<agu%)hjTFYI6O`Mc$NhqrP-`Kn_egt1!V?@-""Ii=Y0Gqej5](Th;$c5]:jt$NiU.ugC)ipi8WeY d\_.\&-DP*#lu)bgZ@JUi8<>jh#6"-gATb8gtpuLjQ,Fbc_u1h%Kc;'"p?D\J>g`QrT44BhV?l_gATb1 gtpt`;&]T.!$i"<FI9Yik2kX`hqm2DgWHggI!h9eb1k\+hVdAPjQ=CHAjHUs!8@JU!?H%3q;r7D_3oIR ?<gZ=HC1nNbh(b6q;qe!A0hHG!!3HkW;,KYjQ#1UhV@t^!8IV3i;V^KiS&B+#QP#J1,2RR[GBp&hV?oc gAot)gB?<fhr*PmjoVPK%.=/u%6&dfr8ngWjQ,@Yh:pP_Ip"g3FcDW_][5Eki8WksjoW\"%.O<$)cM9] `8(:Q"68:ph#?(.gA9P/gtprJd9ddnpAbC!-"Dq;bi&H^'BS93hV?5WP^-_<5:]!3S'B^Ei.:r\!.k3& !.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL&Am,\j4q_`ToG.qOcc$*Y.XSF%)C$BkNLI/T7:-1 *sD*6#QbP\1-J]TKXguq1;M;fe]u%?X.bf7I<BjfMNX0iS#Wd&]"[+ih8c4/7N_p>!s/H&!<N<E5>=pV FH3``rr5OOU0oDS"Tnc*!sT#=/PK2GC4qn^_opZmn`/$5\$r`MYcXk!R?j"qN0Bm;]?'(0s8U9(?9BbX $NL52#RNY.Mn$^KfAZ)S/'u,BYcOasT:VI;Q&q&iSZ9*3bN/O"rjdGN0-M#6!!!$#"<T`p85s5[\Ga/I ^rXI.\$<!/rglKJSX>S%O3IG"s3Q[!)[HTL!<E<,#Sf?t<aKg'TteRlh!":abe1Bm['Hm:VOs6AOc,6c UUS"cmJd.][X:k.,o$XA!!`Q/#RWb1N4Si"&AH3.b/V&uV4!HuJr>qiZbH7M$e=tAi5Lmg1_C-$"8Dj$ !X&]6,?B2_pqI9WcJ7[Ogrd44WMH)OOsc6KOe'2<n`n8rKn=5E7SmQBYJAH4f?hLKZ)adtTV%aAQ&V-) Z+g1O$g.'>b+s&G)Zg'A!W2pqb!7UpkIrP'2c`5p6UiRZ5g[Af[XLOO;UC2eBKO.*,[rP&T^ftj;+ =?.?"!=]#/!X/f<,"5L1A:0H@rP'esaOA_iaM"mZVkg)\T:_[CQB$]TPK_=bT5mIG!!!$$!ZF0r9iu@l Yl2<M_91Qrkhjq4^o*9BD0:DeNfoWpJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8K(1 Y,e1WN/ECFLP^tMQ(Y"UpoOq2\\#;;FAOM/&I/C0!"/f/!X'N)>'c.!WN?'#,-A,QXe_JOOH5NiR[p%> R$+)A[Bm0CYH>RPTR9cs)[HHFrW!T5!s8]aDQrm-gqp>4hq6,?==agX!'gPh$POFLHF!,'cFgBb[(a], ];qH]K6_BKEdE=rPaS2BX/rD*[aXR9o;,Y9"Tni.!XKG\-r+cDWj&hC`5]D>X.YiGOcPQ`NfT?kUoh/6 XfJP6e*?VlO%C#d!W`?&!WiH03d%q+nD_?grN-p<WM#N:Nf8jSNK93bQ^seJY/\W&ImtI]r;\PS#7_Is =H1Jmh8m(-YdVElb-e+4Mh#tdCNP#\Ng6'-WN3,$XhWZ^p>Lis&d8@=!oO%a!XKAW,t`-<Wq`\+X/);R S"?@OZGOc&]XG*?XUDMETm^!#*!u]J!Wi&r#6bMO+?3YXT(oDsYI(pW]W@fnPEM#hPFEnnXg5@Jb2:$k ="-[MKW_u%]<&-@Z)smsRZrnqNfT0_Q^OMAWiZ-##Jdm;E(MPr#5A0&&h$%KF,HXgXV7nD[_0W%\#>XP Ir]+BJs)k+W2fiqqlL+.Tm'*O'at9D!"/o:&K!NCT]>@h_6a'A#dUkEXJDALNfF%!*0?>JQ^t7ma2tiV BKmj[#lk#/"9g>fVss?9`NoHE'<\aS^V7=hY,@8)B38S^IZ0YiZ%;t-!.k3&!.k3&!.k3&!.k3&!.k3& !.k3u!!a5t?]_V6e%Yd]&>u+\Jp;TgI=6m5RAI!gZ)IK!%&fndMgo>50bP!'"Tn>s$ipG6#7iCbJ[NMF d&HuE+K(irMM?nCMM[4JNffa(X1>dP[ATk!WN)+t9IU\g$3gD0=o\U2(*YD1J$T+Hb-%V+A5+Nc'b1EK !<<*$&0Wi#Bp-1,fXe)]VOs96JqSi4M1pG+G^kO3SYs!Be]th2WLSWG8k:]_&dJRC!s9>m8nEjX^9"0( R?35Z.u9"<M2R:OPa\;F[`6S-\?W*8RtP'@7PuA!"Tni-!XKAU-;T30s8V#bWVrkmWh5T8L5(SHO->p! SuoTMeVms&)AEko"Te]*!!O)b3E(0pc0``]VlQSaP_apFLPU_;IsQHnN0L'<^=1ZT\?)`uF\tXi/fkH+ "U"nb!!iZB/P'?*VS9/-Ws#B#VP'IYRg>R]Ye%$<Vl$KiWsbJE>!48V'ab$F!Wr,s#7Mb;<HFM7_t^8A UnF'7MMmCKMNF3tX1JhfeAeebP'1D94sNjVao;;UgT@BHQ&UZXMMR.KOH>]tW4'X\\Zi+4Ws=Vt6m)sJ #m9r ,m@R^U>gZMgg@W1f`MP_Y!IKR.QK>%M`+QDLt*eBc.?Wr8t'UO#on%LWLDqu@*4*&'chLp64( _l]d6WsG]#Q]$NNLl.,iN?++ER%L1TYdV$;F&4@r$jQk7#S\C59mN`7pX$.@rMpU0TpCOaFD,#\=^GWO G(uEb[(<\t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT4[J]Sp>h5<C\R2*af9Fe-G+q;qn@ e$tok1CWFH":?S^U>Gk2*8JH,Jo,%#:.I]<5<_\@Ap9HDbM;%8jQ3gL)?TL1$NhqrP-`Kn_egt1!V?@< %7#WG_U[](f#bIuNd"o,5VaZ-.5jRnBn)GM^WtQmfsmDh.gbkK#Tdg:hq,u`W08'HC0an>9heSi?>+n^ \BNLXhrWG!RX$1ao`,0u-s1qqbiAZa"59u4?2dJ+8P2cZ>@Mf8T<O/@(BX1.,o]sRZ,t_^h:'9LRtbib 8ieRJ+Y>cJ>B,IjZGk8Jk0L/fAetUI!8@JU!?H%3q;r7Fbd3UeJ:DutR^0lVe_B'Eq;qh$C+0Dhli7(n 5H+A>%GfLN[$l\g>?>$7?u1T;Tsr%jd)2bR(]aU;%jii$HEl;]a/b/DCgg@>r_Ees@<$j_Xi8oPrT40c 8eURm!t@2=f)=_JjPJS<`iG,==$%`D#ne7-1e;#%R]sf_i;Md>bZ,;H!!WQXE1skihu2[Sj3k?#F_YAe :/+JY:KCb4DLe7eaMqO(!qu[!![V?9Y0>i&jqH\%\t=O`8i7e2&deaM*]I5JS%jOTJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bh[$h;[A@_6Ka6TELm_WjBA6^C8!:lKI-<Rs%gs.MW'V!!rZ. (GJ6M>%r]#rP(,2f$VXNVNcXQCLgaS@VKb'I=d!4T<,E4g%k@+_MD5D&.8[E!!!$$!ZsX$:K_e"[+tZ\ +QfD+.0]qX!<E?0&/@9.@;:O[V7O\%p&G$L^n[!HJ9_'5,]@OBGBS(SM4D)oeEHZ,e"q1c4XL^?!X&c9 4_fnca5$:dqqWd=Vj36pH?F=OF)uYQFEW;#Wk?@$k4JG_MHDqi)$g3B!<NBF4%2\>B8O.s^J;bbZ_*;4 Hus7GF*2bTI!Kn2g\UrsMbP)p"Tnc,"q2+g79s;KM3tH\c/ej'q:2pCN.l\%EH,r8EHQMKF+B@L^WG3s qY7snB1k'&#i>Ue!X/i:5&-%fq7dKV^rOX=^p^ABS=5e6V6IGCq7d<eq=WprT5-V/&dnm<!!`Q."plMT I%C&I%F+#4s7+OFR>ciKGB\?\GB7t\^A7fj["r+">u=$e@=5<#f$hmXXdkB%I!KgSG'\FWK9)b=rP&a% r:AdUJkdEl!s/N$!!``?)'qa^IB3=](rFDFiq_lb[\/Y/CKX\;;G^P-CMn?KR'ut.#L)2SZ]\uh+oMEM !!ET=(,A`q@=jH1[/I`g^sgfZ_QoeqJ9uQcFED_PH[U*TAT"ck\tX:=+ohTD!Wj9&:/+i0MQm&o'>`Si l/BXaQ@<[X;++,]@qp1:J:[cQ!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cIh"L,)0V4RUS "IbmTVQ9Hn$b<dQT6XEn'b1NR!qZI"!WrN/-r>)^YIM.@XWXmOTTObJCLULR?X[JZD/j`UT!uJE['?dO e]bIX;_&4R!>GM8!s8]aDQrm-gqp>4hq6,?==agX!'gSm(*YD5J["(V^UC>M_UIGnY)RO2=AVLR85`W# DgdS7V5gYuZGP5UnZ$1T%giIA!XKDZ-VSK@X0BFdgWcl?P^ROeAmo"TAnZ+5P,Z4/\ui*A_U[])O%gGn rW3K/!WiH02f>Y\k2+%ZrN-4&SV:i`r`Tk;?t<tiH%_6KQ`n0?ImtI^r;\PT%N6]WAWXd[aLed\[*%([ ae=B'>uaQd6qgQbB6AihUSb&mXgcF-leIV$+:\Y\"5j.b!XKAW,t`-<Wq`\+XJr%jUo15p[(Er\[^*.4 XUDPHTRpE0+:SDR!s85t#6bMO+?3YXT(oDsZG+K+Z'TrWBP2!mEI]C"VmO+bo(U%L65)4[IB'fi]<&<A UmHjaEbSuk@:3P[G(GO:U8n-n#JnKcN+"^d#P\9'&h$%KF,HXgXVe:O`6mhtWJ51r;b0#>;-RRMI#!rX VQ$QnXTu24Kj$2R&dJ76$O7:d/PC2Yf[7UHZ2LdRY-k@(OFVIg?X@)K@V0CpG(cL"hVc&6Bg3p[#lk#/ "9g>fVss?9`NoHE'<]!\\#YaEDdH@54u>K!>\JJIWIb,%!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t ?]_V6e%Yd]&?)@nObo'YOHQ!(Vld20Yc7H!%&]>BEFMd/,Rt.c"9J/q$j$S?&K3]?Q-It7aK#3>I\W$U D.[9c?!LQ=>[D;tOJB%k^p0f7VQ,hs:G!M%%0ck8!<<0.(*YD1J$T+Hb-%V+A5+Nc'b1EK!<<*%(,&<o M5eMI\?)U-U6L"=BP1pe?X$T/:K_+AG)W?:kj-p:WhGc/@TuA\)@?`Q!s9>k8S!XU^8n#nIr0(=.qiI& @:3JOCNY,dVSVHUdD)reSsP"A>Y$L["p>#0!XKDW-rPf>s8V2mWVrkmV2ot7>?kKBA8?.,I?UhVnsO&R )&*bn"T\W(!!jZ+<-+;2e&/MkV5p5GEb/iqAn#+N<DZOsA8lp^Yg)b$e?u?HP''u.5q3KR"p>"c!!iZB /P'?*VS9/-Wt;50WMcPfUSFZcY-"Y#V5UEiWs>5C?pZOq)%HQI!!;oq#7Mb;<HFM7_t^8ATojbDEc,W& AScI:O/rf9q!GkQB2VMm1*&r:aSu2Th6*Q9KQCmBAmetS@qBG(O/'>'_RZZEWsOi"73E-Q$NpJ2q>^a> 5A6Loajm]qWu.\&Q\KBpBk:XP:.%!-9NbqSQ*SiugrZYrWs>>D<A>*s#mC/+$P4[Q@"Fr`h7]thVZ!PE VjE0^A7]7Z?XR>PAo)U>LmFpKft_]*.Lcdl!rrT@+>$<5WVZA9Ybh<!';gtDE+*!K8N].!5!D_OG)`2u ]Rg-8!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=&E(d<P':tcB45RuIYsl3dbjl_#2Ze><&+sb kPtbl.8G?%hu2[Xc^%ut+VtUn"9S`-":#JV-qJHYd+[@8jhkg`#m'Yu$NhqrP-`Kn_egt1!VHF*!?>4@ `7!H%gr#q=>XBnU#R(;/!>,D<$5tZoC5T+9hqlPaTi)a0p&G@=Ctm^^VM8SP(bcpB%1*4C#n.Fb2->I/ ][#9mgrm1&7hPCo"p6/OHDJaErT44"F#Xg1"UbSD%i-TY=`\:@'a""-&dBt1]#iO\k1.#0G#:7E&-i:= rW*Q5#S&%?=*Bk<eE5E%XdD$VqZ,@N!s'EZg\KtChqH/ZXK/A#Wk?C#f\GEFjn\$Ab&/mA!UKdf#sYB` jpfkNQ#p"e,S:Ir&/$$E#[;\I[',[7-jfkQ)[73/89_8nd[k2>.j#K7#7(P>#SS@<8o0j5i;Md?[8IkD n,NP"2h0EWjpL)"ah"!R5pQsF!rW**!<NTJ2,eRa^tenN"41<k!V69q&4D\rcJ%7Ujp0eOHV>k1'b1-H %0m+F&/QED<-t4:>8RG9!!WKN@u[Y8i;MdDh6qu<2^8n<!W2p$!<s2g</Z>.JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&d/XCT%Mp?R??r.@^CS,sb1,4oah4paYHG(8[(H+J%)M/khTDR:;(s42$Nfo"$3:/1+[8au =DNf*rP(,7d`8Y^I:>f.1+k%(1-J0)A8lO>OIrbhdJj1GkFuNH(_I)X!!!$$!ZsX$:K_e"[+tZ\8EQXS .0]qX!<EE9(a2=UDi(*d[(OTOs8W)FUj?9A7QN7Y1,LjY<aB*KH'#MPa3N<3g:38]:,!C_!X&c94_fnc cLCl6q9LRgJnS@`6977n5t5!fAS#k6S\)bYcIM0pP\!<?*=DiI!<E<F4%DnDBSX+r^J;hYRWDY-6oZq\ 4@)M<?Y*f*_<q6JMG+ll"Tnc-$5+70:M4[7UTV)@fDGUJn\CH-=\M+>0etOB4&&jb@rQse^Vn7Ag@ERk K4.+o$f:ph!X/i:5&-%fq7dHU^;.\,_7[7bYHY@;[(![B^C/NdqX)n8G=Nhp&-hn0#6G#4#pWJuSbTr/ g&(gLkJ!3u>>n3b9j/oS@V'Mjs8UlGBK\dW8OH<_I'D#Kb.=@+EEYq%5Wh"q;-@.DK9s1J^C0!"s7O^$ ==+7V!s8B##6teX,t;BmX8TdM`7!`?s5^bVF'hU$-mg5b,;M\d>%Vr7XSom>bO"--W-V2b!r`3/!!WoL ,!K1HHCLk=])BAm_:6fEW/l(-84#R)3Bfl*;-@:3;d#Ht\>=@A+ohTD!Wj9&:/+i0MQm&o'>inri6A6R ?pHY'-6=?\1-/9GEIn1B!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cFg%^E7BXKAM%WN2no W2m#&q5jq*]<IcR=ZIH+rW<-$o`,C$!WrT51h2m$f$M::rN/)aV2fP!904dQ-7C;n2Esf5Efm]Q^pp\Q ^$P.O_f\$O!!**#!!36)"Z:2%p[m7XZ,,>MbF)H`$N0ri!Y-;-6tV1O`431ZY-cO6i67F"7kZ;:*Z-"H .l'b+G)i&fX/iJ4]Z/p0F$Ui]$3UD9&f`5kDNLp,c/7?nPUg`R696nR.PWkG7q@.@^VILhXg#1F`6F0; *<lWL!W`?)":6qtT%r&L`NK0A"/q)f48pN<,Ub9&4@WIgH]NrMZG1lY*sDNB0a8==3)FUW\%B)TYcYXm i8;(r>rsSb+WDCF-n[PZBRQ,;VlQr*\%g&2Q=2Hb%gW9q!!iW3&K<#gE0.*oXUVA4X0&P.Yd1L;ZE^X: poOq0\>+ad59g^C"9J]#!!`Z9(*GSBJY)Y=%D'a,_jbdO4uPA^5"oT9I[mdXhu38`DD;8?:NiP@]"4uJ WKVX=<CSo#/hJ\06;qB9L6\P3XTubn`iaVY,7+&E"qi=M=`]Inr2ggA_:.N?aGjUi1FXF`*$?RX5#c6F O.</OrN-=2Z'9,p.2WBh!"0/S/j`onT>e@KZEO5/.Bg"LL1sa\3%HL1/hf4K8Ps,[[HI+tRV=r4('ssB !sAcYAZ,%iho2o"XV7kQ[\esu:cTdC*#]P5.Q'RuI\VJpJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd 2d_ZQ`m_[#Wt;8.UnF3KSti*\WirS0YGnJrWskk]E*>Xh-Pm$l"Tneu!"8o7&K)ofFf+`sgUO6]X!"$g C/[G\1Fjh"-7CB/<G[D[Z,")TVkpA]BN75=*>8bY!a5U+$5Og=;h)+QoZF>6P[mK<&JYc[!<E0#"!0X: O0$1I\#6+#Wh4iR>#%[Y4"r35,9\Nn5=fFG[,^ZCd]B:9R[.u!66ZgF"U"oC/4a6*WP5F*JnSIk;(G:( 2Dd*?00Dj-BT'.Ws6J(BWhl;UQZH@l'a=gD!s/`@)_+jGb5_M+_5[C6:7m)F4"2U//MT7O8l^#%^$__3 58Y(K$j?Y4!!!?U8o^6*aOR8fV5UG_F(86E8OGBh.O?;b/2omoFIBu8o&[fjURRX6D,iS4$j["=huF#b (+i'dL8M\dq5XRrW2]Zo#-4`$V5C2jpo=dqI:>c+/fkN*!s/Q!!!`oU4&p?g[DVd?%@MW]?s-E!3B'5r <,@d._tsDSG?%'i0dRT&I)l6d(>l9eL2g?h76E@X0JPFG<H!ep\AZ4_rMp0bBLs<['+G3G!W)j%)aA#) [`R(*rMpd1R"T$Q<_l"=.O?)O*[WEo:j&8Hgu?hgrMp0tGuld<&e"sA!"0Mt=+I$VccrDcV5aEo.Ai)J >spq=2(gL80f2'd=D)rC[-?Rn:+?_^#Qk&4'Heu%H)^Z7d'0AFWtV=aE*#Il1aa.Z)AsD@4AfgFT='7N JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.jq-S.d`&]'Z`pO:\%]c&f\GK^josP*;^VqRkPteg +BNodbMiE^"Mnk-%0H8(%KQYK6\<2&g>M&:L.E3coDf7$/8UKUcf)cY/I)=L!"K5eF3<4miT8XlH;H%* #5/$+#Tc'4Lq2@#gX=,r0F.:O#T[a9e#[pt1)^0"!VcX)$7A`'TY/h9iS;l'E#o&R!!WNL;0JYTj8J*A X[ETl!!`T<-ppQ_'E[n,%MD*mf%]*Bk/j*.6QlsBpAb[(%OOV[QcS=Hf[%KF*Wl6>gAh<V*GsR,jq$M/ gXOQpcHXVcg"bNEj5g!t"O)$H&H_;!!XV)ipuVe$R:ei5&-Db0!<EW8.8FrKMIf?j!r`0.!YHYFF0499 F?:3A!r2g#!=B],CouUnjo`8%+9V*5!t@2=f)=_9hp&[+D_r.0pAbBu$mS,XVV(k0"4Lj*"7uQu"!LpU f\PKHrT4:>QV8G(!VZR"!=0lAFGa*8!qu[!![V?9Y0>i&josM+<[S@[p&G-s,@#g#JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XCT%Mp?R??r.'^C8*HiQnl`=>:3i"Tnet!"T)2!X1#F<EEmfRC^/J^q^l<caK3] ;D]6q"Tnc+#7q^r6saJDLQe[JbjYQ2'YJZW+VtUl!!!$$!ZsX$:K_e"[+tZ\&E]]p.0]qX!<ENA+Y-9$ K=Llp(t8Kas7a-V:G!_(#QOl+!X'5g5YGF%L9gcm&_Q$aXbU:H(]a[A#RW_0N4IR>rrMT!&qsCI.NT-, $4IFY0M5;FATj6JrP'&o_OkgE3[+t4!!**(*]lnc=D<Z'rP'VuWdI>f*YJ\Y"UP\T-p:1#FK+0scA5+1 "p=u.":Z1o3*1-^r4`6lrr3\kVf"aK*"W5Q!<E6-*Ag2^A9<pIrP&Ttg;'D.;_S^=!!`Q/#RWb1N4Rr^ $e"qLn_^a,;(Nh)$2=K*!X&]6,?B2_pqHgirr3;XUi/LK,8q472((so=_>/Bs3ZKl)_*g45u1p9YLCk2 Tn$Q?.i8m.#mM%d00WZcNOf#&!8d_T#N_[g/.2[c!rN$'#7qb!7UpkIrP&`Zg@P@EfV*1Q2'EP0!!iT6 *\flXC4<#X^D+lambGU9==XFS!<E0)'-Aer@samI^](tt^qeF9W.\bS0,G31$O@+Q(a1V&91hs0XgP'O 9d9W<!<N<@4AJUQE/Lmu^D"ZQj3Y5f=Y^Kq"p4l,!sJrT9k8hUJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XC],Wo%CL7>7)XTu)>U4HN0*sh?9&-2k:"qEnC\Feq/]!&6<Y-'dhRW_FY*Y8JV!<N9'$Pk$D>(Nj4 b.b9e]&*)Qo:/Ge!!!$#!!36)"Z:2%p[m7XZ,,>MbF)H`$N0r1!u*7P>'5arX8T.;]A)8t\oU4X"p>#1 !<`Q3$RA#FI#aetX8T.9[&/@Q/fbK-!XB;V,t`'8WkI-@euj3/:+I.o$3p\?&/HH[Bop-F^UX3D'<6df +pnMW!s&H*":?nlP0M7p^\k2NUj,6;!<<-$!XB/K+#Zo-IXHpI^OJ]p"T8<*#9,HlA:0T=r2g:HiSN4Z @5JK!"TAH0"U58I/PBf2PbbAXXTu;(EC2)j$j5Df#Qb8D)^S*qOK.6@$aR=>M.f:+'aY$H"8Dj$"Ul.h 3*h*,poP"<bf.#?;_Jam%hf^,8LJ85Y.3?foXA0N!#S(@TWu#;XK\7E=Zn8R%L*.B"pl2%79jqlTWJ*o #K,BNbEl6Y#l"B(&h$%KF,HXgXUDJWiq)lQD`879#6Xl(#8&LZBRc2>X8T.*Zb3,d=u[T2qu?s4-9kUQ L7P@CXo,:LX,q$_0,tK*"9eu9%i?KA7s;#rprAh<4=(^K!!36*"Y=5_nFYVWZMgm1ZG*>tBL=*UrW*9) !!NfG*^",'JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^>u=%Ujlc;,p!d/"9JVq!"]5@ (EtY;Kt-s4\u;U/X/`0hR<M^g)\WS]!<E6'"W/j`@tUMjd']pOWL@j%6T-,*$j-P4!<NTD+tllEZN'R> Y,7Fo9e$_i%L)q7!!!-K:4Tk"h;YO7Wu.=E>tZq*+qk:e"Te]/%i6<TCnK;GnCt/FWtq.F:FQb]#Qk/F /P'?(VnK1"EFD[,2A.DS%1*:D#88466>`CMs8V,pWr8t4Q#B/3"p>&2!XTJZ.T_YWs8VK)Wr8tDQuPJ- "9\l4#S7js/l@"sii$ZZ(DIJh"T\W(!"LemPeY]-chsg\N+H'X0e44Q#6b22":5YY.T(Z!jRD`gWr8t' M.K!n%1*4@huF#b(+i'dL8M\di2[6YIqMP>1F!G6!s8W"!!`oU4&p?g[DVd?%?kmB9L(H[&.TO$/Ok$q Zi0pFD+ZW+*Z,DLGf'I[(?)HbHsAi_*>8b`#71bM/4jWAW4U!IrMp9gAP=Nc((^`R!<N&t#9,m@R^U>g ZMgg@TTX%d:HgEO$OHq<!!<E3%P(A*[F*gi\G`H5U3Tfs(_mMbqu?s?5]<L=f&==@X8T(JVhJYL*uPXu "U,/=$PXa<5?N?1mIYa#.1Zjn"98]A+>$<5WVZA9Ybh<!';Kq]5U@Hb$N^A1!<<KI0LK9+XF^G(!.k3& !.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTLo$"P@rR$3B;i$49(VVo%'Hk2tde!j>0-o)K4#+'u.ke(s*7 XF4(`!qcO$""\8OZd7UJD(Ptnp&G3r'L\#<rT4:.P?07B!qZHr!uO%1Utbk1"2@VE!VZR"*,F<NOBO:M "SDa!#qoY;W6F<#joV,-"82^!!Zk'VT#]jhjoLYioDf%$+>,,V!VHEp"<q'Qr8n-oH:8eZo)Jq","Hsi jo+<CP;<IA!8@JU!?H%3i8t0fI68;Lli7(n5H+A>"M/hF*t%cC#7E"WF([T`"8i-*#p2ENWnajW)$9I2 "9KK6Phl<#"Mnq*#6F>p!t@2=f)=_8h8H1F8JD3t!!ENL98_-qjoa.O-jK>E"9AukGKp*KroO@Egik1N o)Jt!,Y_uH('4.0"p-)\NNUL`rT446G;B[!!!*<aJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#6bSR ,<fFZT&dWpaP=tDOD.03#mLM6!VHF(!<NB.%5UshBn)):]>E.^m5!A+QuQ%e-5-Ob!W`<*$P=46;.!XA Ga#YYiVENR_1PN7+VY1^!!*-&+$WIq=`f\2h#@=Ek+Z64"pG)1!Y?G.3DjIA\A?,)bjtZ$hnP4^4WtXQ #64c+!<NfT0gJcRFc3*![_12WgV]\(7NMU6"pkVuBpmrLkhXRgL_=/^.3K?5"pYD@%jjJ5;.":$\Ga/V dDDMq:c]d/!!!$#"Wolu935h`\Ga0;aKph04Y7T\!sJo:&03;`7q$n@^6W7g'*SI>!<s2_1dYA`OMJ`P aj9k[le/Ik<A>O0$NgA0!<NH>-9"G#DKh_QZFIX4l.!5)@5nl$!W`>]!!`Q/#RWb1N4Rr^&Bj_DqsM\+ ITf5u,8:Uo"TeQ%#6G#4#pWJuSc-;9^r4@Bf_kC$c`)=k0H_8I%ML6A4%WCeOhT>2@5nrG1Hn'!@Y)#* Xd"!67PZ)!%LNCD%N$HD;J^W=Trb]8hZ!N[j.]s4$3gV7qu?s,&/cc`@stEV^C/*RrVP]\IoS?Q)%6?B +:/c.1J;;(O0Z4*]ZU-GkKT<"0E_L\!WWTK0K`*?GG>&N7DR1!g"!d0J6tl+,7t=k#6kGB&f2`L786`u IY)uO3>qkt!<N<@4AJUQE/Lm:ak,VKil7pM@R;CL#6b21!<WH.*'m_Z!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!7:cO%O=/9D2+O\jK/ZmWf(FO-PQdS!"]28$5"4KI'i"a_mZ_O\A5iaVh&,5+;G7fr;dT6#S7n# 7W":$a2GTm[a=:3nsiPqrW-1(!!36)"Z:2%p[m7XZ,,>MbF)H`$31&,!<X<'?@e<7XK8V2[^t/?]Uj7? /J80h!Wi?("U55N01K5iNiBh&Z`pU?Z]f5p.i&Bl"qV\!6tM.c_mH.sD,([!*>&\c"9Sl;&/dH3I&*mN ZM^g=WeOOu$3gV8!<N?+$8uOfgY(&nY5PItVLVJ`#6b21!X/l?'dkt6?!h&VFAjk/!WW3$!=L8GBSW"R YHG+9\%^\AZ'&]b,7+JT!s&H+"U5G[2bdk3QaF90ZELCDXGC.D,S:4<!!iW3&K<#gE0.*XXUq_FZD!%h <^\Yf(_$TL!s/N%!!`Z9(*GSBJY)hB'!AOL^W5$?R!;Uk+Un\`$kF=61JVY2LRl&pHUASM)F\S=WM#TH O`jqm.3'!-"U,#3"qr196=P\I_7-eUY/8rEa-'@L#l"B(&h$%KF,HXgXUDPhj5@h-;()eX"U"Z&+:KGS ;JUuX[Bd$?Y-Z-TP\ic5%0-A/!<Num<-XLsXg%c+$a$\>Xe^kj9._5!$N:,W"U5>I)':Y8H_ds-BgsHf %g;q7!sAcYAZ,%iho2n(Z+\-"Xb^OU//\`l!=&T-#7hS(=Fu,)JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XCd2d_ZQ`m_Z_WsYYP?9K>F&.&F>!V6:&";2n88T'g.g;'khWMH#CKEu^,6m`QW#Qt2-!ceDV+YlQ" M65Rkd'osDLgE_I2'i_9!s/K)$5Og=;h)+QoZF>6P[mK<&JYc[!X&W1$SP_EbhM:4WMcG[RXAdG3\2Km %L!"<!s&Q5&/R-%H)%soe@DKRVlH8-:FZqc$3UGI/kBGsN08j;A5bfR.M<a5#m^\;"V)=n0j0=Irr;c= Wr8t4Q#B/3"p>&2!XTM\.ohPPs8V;uWVrkmR;ke<#m^b?#7M1]+Z`\IRW_^j)&!Me"9S`0#8fR<UXS2b bc7M4S!e>+8MV_;'ak-J"9JZ0$kjaI?\ko&d*ehhV5UDNA3q:K%1!'o!!iZB/P'?*VS9.iWt1taG%=WO 7l`(@'+"aC!Wr9"#7Mb;<HFM7_u6VKWhZ&NP]:/15W1&-$O[Oa+Ym+WJ$$PI?8rcA(_[?:CU*p<jggS$ @S/6n'b1HP":#5C,<AhFPH;O+Vl$AlP%IE<()RVg!W`?!!!aH-BUZBOe[#.S0qWi*:c^?X'aY'I!rrB+ #72P>AWa45cblTWWN)Y9<](^0&-r:="9o)U97=7tinq-AX$rt^QApK1;)B%#%0m"="U55A(a:Rr=`][f @QttD#mLJ3#S\C59mN`7pX$.@VkKN<HtQ;8*Z#:l!W`<%!!j;`0MHY_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcO$q!sgJraQ2IceS$-/jo>`%;l@:RgZ7/0Y)rca*!>a3$j\M$OKm*gft<l"/dh7O$NhqrP-`Kn _egt1!VZR(!=CA`UYb%fg!lg$-k$1J!"8rI6@d56hr<b8=;_27!!j-(Nbq$)$j-M&!!WK>3*_BUi;Md> ShC3>!!WNM;gG.\j8J*ARk+X5!!<B/"Tn>s%KdD+FM6eph:U)/7i_g8nc0%&,ugGhh;I>TRQM#V!8@JU !?H%3i8t6qS6n,n%0Q"u!XV)irT4CIhq68pH9iPWpAbBt$6(95%g)V.#RDG.:hO]7(^'@0$j\S4cJ%.7 jhYa`#6F>p!t@2=f)=_7et$2('*Rk+$Oeh2`Sfb:jjeH(#k\0##p`?0e,AD5hor3]Ah+2X!!EHC-kQOS !"K&V@u[Y8i8E80\Vrii!qQBm!??[kJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.'^C/-/ \!1`,2]W)*!s8)p&-2k;$55R-BRu,3Y.W-KnE_pSU3BEl-Q*<p!WiB'":#;G-9k=-?uLn0`73rCrl1"( 3@PjS!!!$$!ZsX$:K_e"[+tZ\8EQXS.0]qY!Wj&c4@)nUJ%3G?fAcblb,pM67k,8c#m:5/!<N9/'d5,# ?tjV=R&[[Jp[6bFK2Els"pYGA2e\iHho)OVE`j#?.2rs2#6b88#7;D'5"8alLUd;t'[adiEDS\?$ig8. !<jW17nQfsMR`W":<pPBE)/J>&-N.A#7;(`-8@b`Ap@ZK,mseW!WiWI1-\<3Bp$3Nce@UZgq]Y5>Wj2D %0ck6!<E6)%N-QM;eBd!O.EMfme5hkW,P$<!s8T*!TO.b!X/i:5&-%fi4fiBjS8]KhnuCOFBLjY*u,+` r;['("9o/W<d^J:^CnB)g?e\5ft*Yt=ZdiA&.AjR)([*k6;hEDLg`Us%NR2b5>5XCW1\lZ:-1$N'FP3O "To#A(EZ(RBl]#pWk.'drs.MV?n)He!s8B##6teX,t;BmX8Td@c0=9;[u4][,8^srqu@iD%Mp9S??1Le WjB=Zrr2NDTk6+c"U"o.&LKY0;.4[HrP(e:f@S<`SpX^)0-V,=#6k>7"pbSH'd51l7S?NV;`uH?!!!$$ !ZF0r9iu@lYf5Jrs8LQKJ6>2k)$U6H!WW6&!sB;n97d.q!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ 4B-0PS#bVP#HsbE9Ht;]"RlC&!X]S].oh,(cbm<"Y.)6\Ym61u6R39Q"p=i*('"@<$4mt0<d1%5Za?g> _U[c8S5p[5rW64&!WrN.2/]Ymo\@<g_;EngR92!I!!!$$"=?ojWjTLOY-PUXdH\?(@mVad$3L>2!<<0( "U,JZ/3R6gWR\r!['.'YXbgCG*XVoO&/li[?%'5`MJZ3Q/.ip9$3p_:!sAi9&1pLgM3t0Dr2g[5L/oK* "p>#/!WrQ43,Y_[jP7YUrN-U0Lg;PE$O-Y5!sJr?)'^j74U+/=0cgc+!<*!R%Q%IKYIVBUY-bpbfA*HX =$%`C#6P#0!W`?*"UGhf1.>i8[`cLsZED3]T6aBg('WUr#Qb8D)^S*qOK.6@&?`CL[%r_3Eb%cs*!lfP !s/?##6bMO+?3YXT)Gc(YIDX.lJAF[8MMD'#6kD=$5+L#0geiCA8lWb.hD\#7<5/pNIH(`:cTj>&ISgB !u1qB$l'j6;LPV"ah>'b_V*ASN):r.p](L2-p_!WMP0mL$bFBiU4HE*)@$HK"8i-A$5k9S=*g@P\?rND Zd6LeJ57X)!!!'%!usXGS$T`>ZMgm5Y-FmgI:Gi&)\NPar<"n[#7D%U+Z<,0EE>@Q(Cg`S!!36*"Y=5_ nFYVWZEM-ng<,^r6m`c^"T\W(!<<3*#Rr%MDh7t@!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t?]_V6 e%XnD$)W/V2A6W/"9APo!"]8L/Oj0%V8U'MW26MbKl^].<CJSZ%0m"<rW.'A!t5qf/51#N`n8tbWM,Z0 AR.h^'*JF?!Wi]E+tllEZN'R>Y,7Fo9e$_i%L)t=#RhG.AtJ)NmF8)0S!JeC>"11f(_?uW!s8T*"9o5E ,<].OQ*/*TYGnCtRW(tL'+bNU";ia^@W$:.AQ_eq1FF1U&dejI"9Sf7&/HEXEMhjfp=H>CWt^h;7iMX8 "9S]3'HSf*M95etiOZ#eX%o%):F-P\#R(A;$P*st2+UtE2C9+J#mLJ6#71k_7sM?(mc;0`SsbakAPt]= *>K%g"9\c,!X&`:(+r'bJY'<o[]QL)WeP(O+;57m"Q07c!u<IZ@YUboXPg,eUmHg\E,B<!=[O\SrWE6' !W<!'$m@]4F-j;PrMpR0S!%u$>Y[O:,8h!t#71nT+ZVGZDL,_[//8j4%gt+#T'Y"-Kkaa\1*.&<#R(>7 "9o,M/O<KcS\!(QWhubYB20rp)A!,T!<N&t#9,m@R^U>gZMggYSTe=(.NoQ9"Tni.!!36+"rT3nEKI38 `i#]2WM+E81`@5E#lt27%1t0oMoP#Jf!#%Q3MqsjE*c7!+V"kc"U"o1"9f,B(*"\[86]Ce-l*'n!s8N/ 'Heu%H)^Z7d'0@BP'UhO;aDlJ%g`@;!=/Z*"Uu4h3FS&%!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG #VBr8jQ6Nk>8H?$$NV;\_9U]jjij!#3rp9(nGisu%l.4=[b]f`\"ce7o`,@%/8UKUcf)cY/I)=N!"B/W 7s_W$hq#iZF>XU1n,Nh"-"4"%f%oB,@35UG!!NTQ74f2WrW)Qj"U,c,DlqpqjoV,-"82^!"=IE(W6F<# joV87"loXl%k^qCaQ;4(`3iYm#k%a$$oWIPd+R@=UIGjsr;bRP!s'EZgYh3"gprDU82he/#Oh]p#sYBe jp0u"`35Uu*XDB=rrE$!q#CX(*%ETj*!u`;!"8lK?*_Q$h;lCg.gQ1G!!<ZhJ(FS\"OD9N&HhP'$N_AQ [G'HqjO\Z4$MFH'"<BdHVV(k0"l,kb3Z81i!!!)m!"AuU@u[Y8i8)5>F\*SWnGiOpJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO0u#6bSR,<fFZT&dWobJU-":-9p>!s/K(oDfF'"UYbZ7:gS.V6IGChs]g`#e#Fi 0cC]6"p4c)-3+)M"U>el3^d%cJ?cu3ce.j/RV>5I*t82M!<N<E5>=pVFH3``rr42)U0oDS"pG)3)E(#S ;.>3h`ms;Irm@Ti>XU4_$O6h:!!*!!+pA;c(,f0#?@%Ht[ab<Uo?rt2.g?7b#mrS%S_qM]GZ6m]"X4Zj $3gY3!sf&A+"fHLC4Wnn^D,)4T5d[g+q+GO!<NEJ5=nIJClZ%(^Bi3-X+k+S/enTh"UbVF&euK;1-I?8 '*eF;1'%b.4[i"FC6cWYh!Ot0_jG=?4X^sM#6Ou,!!**%#7M7d6X*o7Jrcb@m/R"L^4Alq!sJc.!TO.b !X/i:5&-%fi4fi@c/.p\kLIMYSqCH<0d%#/r;['("9o/W<d^J:^CnB4mJd.Y^l`5(3@,7E#6k>:$o\e: +tPW=8iS+3#SnmO5>G^4LNcuj.ifB:$3^S9!s/W3$kY9o>?Z'&S%.>Ts8LrL?n)Bb!s8B##6teX,t;Bm X8Td@eD/3MN+YU/&e#!Iqu@iA#7V7u<GZT7S#j-@rVuo_X_p*)#R1D5'J`-M;."^OrP&f]fZ^gpH<<-K (D.#Z"T8ER"9o&;%hos+,:G&n+;>+^!!*-&)E^bh=E'/%amoE2r5F\"1FF%M!s/N)!<*!$!Y$>5JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX5pAfYEENU%LE:?n,O"&%3-fX?\58g[^*->]=b/* #AQd['F=sG!r`4A!!*0)#R_kB?$hX(WiiS6^;nrp>9sIV!s/H(!s8]aDQrm-gqp>4hq6,?==adZ!!**( 0O^F%gXjHJ[)CSYlD85S)\EA[!s8T+!!*-'":#GQ*^aqCin)2\Ye8E&X+!_i$ipJA)C7FBF/Fh)5U7-W &e#$L!sAZ,!sAc6+?EMALR>$ArN-d6L/oK*"p>#/!WrQ54*7k&n(tm`rN-p>P\WN.'aXsB!WrQ0$P4*o *$$(C)%HlQrW*f:'0gWBgY:8kYIVj3ldV"t-Q!@"!s/Q'!>be=!sAuD(a`.4\DkoP[][]t]q/t%*<k@$ #Qb8D)^S*qOK.6@&?`:D\?r<3S!%eh/Ii*l!s8E$#6bMO+?3YXT)Gc(YJT)bp=bU,,8C[o"9Sc0"UGVV (EY%U0fhBG(^L*_7s1VmH!sB,.NK*.#RC>2('4R?"UPYO6$09uh9*:3^Xg`DL/'$#p](L2-p_!WMP0mL #I^k"Ce6B'%fQP1!W2p?"qMV!6Z&13_7?qVZ.@45R9;-R!!!$%"=-s%_V*VdZ2Ld6ZE'(+;*$-D$jd+? !Wr?'1^!se$4[q"0f(7!'++sJ!rrB)"9g>fVss?9`Nlemg"!``9dpMX"p+c*!<<*$"9euI3Eq(8JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_Z_Ws>JO=tL'f"9e2o&-X+9>'ujMb,VA9W2c))>XElt .2r[""9\f,!!**%"UbkV100"5aOJY?V4F$=F'LgD"9\f.!X]\e02mA+s7FI:VNbUc.M3C*"p5,?'H]\^ Wr)Y^_5X#mIpu\U2]iV?#Qk/1!W`9&"9euH-p(7DPd]bnZDa[iDb_\n&e,$J(bS?g@prG.4uOl0'Fk0O "U+c+$O$bB&i3gP`73f#WVrk3Q#B/3"p>&2!X]V`/6.MFs8CTWWVrkmQZZ1U((^iX"9\o7$5".".O,cA #mUV9!sAo@(+W:9_Z0>eZ`'@TF^%j60Gb6.#R(;4!W`<("9f/Q/j`]fT>T0lXf&1TA3q=O&dnjB!TF(b !u<IZ@YUboXPg,jVkTWAMMd7FJRq4m#6Y,2!W<!'$m@]4F-j;PrMp=(QZZ4t68g8/&If$F"9Sl9&KW_[ 4$b\L((1KZ$O\LbMTMiH><sqh)%HoV!s/Q,"9Sf?+Yc8nN48E&[A^$gC/6B#)\NGU!W)j%)aA#)[`R(* rMqZCG#^:5'+>'J!s/N(!<N<*&gf\>EgF&RXf/+qTlF3n(`O.r!XK8L)`hPsh>?`bWr8t+Uk`ea2Com^ #6b55r<"MP":#;E',i,I/ft`6"9S`-!!j8]/PUMiqY/@@V4`ES=[tV.)@QlS!s/?#"p>,;%k(5*JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraQ2IbbYJZ0!"/r]He.!1j5md`0b46dmJmV)/R+^tiS2`! IO,$g!"/l[Cm)-NiPTLa#6FQ!$l2*@Qc.k<agIg9)?]C-$4]Ie\B<I`bA/F.pAb<t%2K<Pr;cEh"9p&K S_j>-!hM%Ip&G:"/7O=7cK"lc!inQnjT#\k,u&Q[dH&lqXdD$WmJmUq*F>e]d+m`a:`'94!8@JU!?H%3 i8tC(e\J/KJ8o$h'`mk*!XV)irT4=EbH6b>*shN>oDf$t)]fRp!Ug!r%RlMba4TFgCb#blnGiY#2h0EW jo`M**!5R/$OoP!d+I48fRZ$m!VZQt%m+9]]%d2G"4qfU%Gh'n![V?9Y0>hVWGXsA#O_YE!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+jM(u>\W9uO-5[*knGj+%#7hRq9l5Ws]Y;+pl0R3D#F]<g 'a"L<!W)lr!?h^^*\'ZiI&ars_84aDV05d#,nL%V!<N<E5>=pVFH3``rr3u#U0oDT"pG)4+[8Ok<c=#. al3!or4IVY1aNqErW2lr$ipD4"X$37<+LKAZd\pR'()`40aJ'l$48OrQdDm[8g=rX!XSr1rW*!!r;d-. %i?H[Aq7Di^D,)4T5d[g+q+GO!<NHL5Y4[OEK@^0^C/ZA]:O:K2Auc'!s8H&+p%iL"pbSC"p=r,!!*-2 /4E**>C)dTdHUQ.k,<2c0-Lr3rW2lr$j$M6#q\kP=`&n_]BK7o"4iZ8+9MfN!s.E^#6G&7$9i3`]&:=) ^qmkd_@")n`Q"s2>!jhV!rW*(!X&]6,?B2_rP&cWh>70OkbDcO-lW^#qZ.Q:!sJuA()mnq"p#8]3^HSH ?=$Ad+UeGS!rW-;!!!$$!sKo::f(D@OLF$Gs8CfH?RZ0_!s8B##6teX,t;BmX8Td=e'PCYAkF]k!r`5u !"8l/!s9Q9AS-[YUUJ8Crt,"7FZg*>#6b2I4&&CLCP].l^C&69^704F3#i#%!rN'!!;lj7!WrN-"U55= "p=u-!!*-&)E^bh=E'/%d/O%Oo<N?s&.8^F!<N#s!X9;_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u #7`"A<,IAZX5g;dMHM,'!<</i!!rc@,;r/.KV,HNriH:;[$,;27Oo8[!WiB'quB4f!<N<9.R[NcNM<PW Y-5%=O^BRF"p=u-!WrN.2/]Ymo\@<g_;EngR92!I!!!$$#!$k;qt&[]YIDm@o]_H/'*&(6!W`?!!$_LG !sA`V@\;lMe%`0!h:TlF?8)ii":c:q2FqA:B0@4:!<E6'!<W6$!!*!!#Qtnm6<\MjTr\-o'WQmg+pnMW !s&H*":ID@_#*c\_6<g>#IBtI;_fF*"TAB&!<N?%!sf#4"U5)4!s&H%!YQ8DNR[dne[Vftf^/:QFu9F( !rW/t!#5M8!WrQ54E\1+ilns9b2(OaLJ9#uhuF#a#SA"%8oTlli3!$^qQ1!jE'kEP#mCD/!!`Z9(*GSB JY)hB$a7e?p@cgW2?j3b!rN*!!Z;(B":#8E&ISgG!$FgVVN#4S*tSb`!s8T+r;clurW*T4!\eJqp[QqP YeS]0[Xh's#l"B(&h$%KF,HXgXU;A'Da#0S$3^J3!W)j>":#>J0OU$ebJ:QjZ.mpUZ"Gp,!!*-'"=muV lgs,WZMgm7Z(Q85+r:^o!s/N)!<E#urW4/D"9eo2!sA].!Wi?'!sAcYAZ,%iho2n1f[e9G@l"\q!Vufq !<Nc]7Y1Vl!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t?]_V6e%XnD#H*&N,6S,M!q60q"slfXR^C8f WW&n#X,:LV+9iMi#Qk,/!W)jd!<N<)*C4J4\]WC-X/`+rO`*c1!sA],!X]\e02mA+s7FI:VNbUc.M3C* "p>;H*%=[5\c;QTYc+%I@STNT,nC.^!WiE#!<*!C#o+X;:4&r.iP;OlRqP\Q&/>]]";ia^@TZ;d-6O6? #R(A4!s8H&$ig8.!WiNM8p.)Ie(X`#'U<T,)[6EJ!s/fE+>?cJ^]4)TXf;9"#aTU51E@/="TeQ'rr`6' rW=/B!WrH,$l0pB?BEh>n\hE*R!i+16o>tj"U"l-!W<#t!>GYH)'q4HM7WE1\>ZB`@7VOT'+G*E!TF(b !u<IZ@YUboXPg,]Wi;qqr20dK=YC'd"9S]'!!`oU4&p?g[DVsD$`Atg83\IC&Hr:>!r`3&!WiK0)[m>o %LE=B"U>;>-VATaJljfD%134?!WiB'!<*!7!X]V`.oC]!s6n"0Vj(so/fu)I#lt)'!!aH-BUZBOe[#.S $(>j+*sVuP!s&H"!$M@N)(@XLJYpc%XJ_tiDcf+<)ANV^#ne4)7WYC&qU`-QrMp=$Hrr*6$O?h9!W`?$ !<*#u!XAf2"pkYB"9\W()#sXB'Heu%H)^Z7d'0@;E*PaY-6*Ku!s/Q%!!WH)!Wj-%EIn1B!.k3&!.k3& !.k3&!.k3&!.k3&!.k3q!!<KYDTLo$!m!Y1jo>Jm4HAG#jTO_?6P':c!"/f<4+PlDjlGI)2[&gS$Nhqr P-`Kn_egt1!VcX'""[r;Y0Z.\]V0p.#jhU"""\Vh][Gc`Gr,j/pAb3q"8`)h!!<crMV\6n!hM%Ip&G:$ 0kcNMd,b/f!j>61jT#\u5];q!f]:AbQ?O>Om/RJ$7$+Iff]9GH+U%`DgAh<V*GsQhjpL51io&_NgtU"L &+T]%#sYBejose\Qto1soDnL`!s0;M"76'r">=b\[F+!MCF]\lnGiY#2h0EWjoW"Y$17d$">Z+ZdG*[6 MF/!Xp](L"+^Bl(al!'Z!mF^[h#Ifa-"Dq;bi$m+8/VU!!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u !!`Z;(F)+MH(OrK&'*#GeB#;/W2-5_T;8Nq^%oDNai('';EcQH"Tnf,oDf-u#S.b!:2Ga"rP&I!p?:$/ Xa<bgpCdH=#95'E2GI_.XSomKe'+kE>XL"S!!!$$!ZsX$:K_e"[+tZ\*9Nu'.0g%[!sKl892A]3Oh/Qc mJHh"O^^d?.inBt$kj9g'f&]s>BGUe[*\gP')JnN2%0j"#mhtNDju5Y2&6K&!<WB#!"/f/!sK,M,:lT' J[kZn'[aaeDb`88$ig8.!<aH*6q:0fLq*Du'%#:R[[heQ6S9Z)&dnpJ!WW6&rW=)@!<E0$!<N`b84uii I\=I#i:R$4Z%5k@1F<t7&e,Kg'GVQN>$bfgMkdoFrr3)ZRp%*?$O-_8irB;c"UGH!C5fb&^C.s$e`#fQ c+L<cY-.](rMp=+WMcYfT:;:?W3a)6^D+K6_khlj5U6^@!s/K)"9o/W<d^J:^B)19rr35MNE.MJ&d\X: !#>P7!X/i<%grUF!"9i!4@;J(6ocY2#5eK"!=T&7#R`1V<)R1RPIKEJrs.MU?n)Bb!s8B##6teX,t;Bm X8Td<e'5"I?:6:Vp&GF$!?+C6?@%HrZcN.G'_o.\4UVQ#"ToZ,:JY,5Mm1%<ce8Wte#\+(67N]=!<3)u !u_4A!!!$$!ZF0r9iu@lYgWONs6d"+1^XHk!r)`s"VDf-!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO %O=/9D2+O\r2gI4Yc=\!T:MOCS"?:JVQBQp$Ep"A7NW<Q"T\T(o)K%!'IPt>DMXsgrN-1@_lJ\!@mVX[ $k2h=#:)K;GDr)oYPkR[ZB\rU&ISaD!!36)"Z:2%p[m7XZ,,>MbF)H`$31).!sh#7^A@ES^8.pLg?dsd ;]Z2O$MOuR%hB3_2JSoHgrm=7\E)`*^MZ%E!<WZA*%*O3?:61Q!<<,s!"8l0!sAiJ1.Yi"O//lUXV@dh =!J%W"9SW*!s8ihDQE*eho2bsXV\4>O)nDi/KGB2#mUP8!s/H(!WrQ-!s8H&('=XV;3BQ*ld<&9Zch=t aa?>`#mq%Mq$e#K%M'*e8UIo1f#5#"bNIg8T3<`MhuF#a#SA"%8oTllrN-C0ZFn2s]<.ZmRJN?^R@BY9 S=5t<SY2p`Z`^A,XV@q@OD7$2)@?NH!!*''$l0sF?%JUGXUMDcoC;4K?7Q*X!<N<!!#>P7!WrT3#mUS8 !#[b!Iqq\.&I/IA!rN$7!<N<*"9f#:3HDJ"mF8kS_V*8NN):u/p](L2-p_!WMP0mL#I9Y.2\cf-"8DjA !sJu?.peIjf>tP.Z.djTY@f^)!!*-'"YF>`n+>JTZECLD_$A;VB/^J3#6XDp)Z^!A!<N<'!!36*"Y=5_ nFYVWZFJN9a.HTh%J0W%%4+;l!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMpL.VOa$6 P*_Z1VlmD>]="f@q5XguHr_[#"U"o.!V-3r#:3#cUV+t)Wr8t#MJ#C(!u`'m'))q9%L4L\H*,$6e?AhO 24APY*X)WJ!Wi]E+tllEZN'R>Y,7Fo9e$_i%L*%D'HJ`'K"M'UcF:'TQ$HP88N.\(&.]9G%jDl;0g/`o XQI[6WMZ1r;)]($&.&IQ,WA=^2_,mb&IS^C!<N9%!<*!-!WrT0$nG8*Yf5/IWVrk3Q#9#."p>#1!XK>T -W#K:s8V8oWVrk+T7LTK4>A*!&I\pJ"9&?&!!3!!)?BgA%Mp<L@?T:CkJad1TT!Yb;*uoN&eGQ`q%"/P *\''9C66!__lou;MHre'&J>NW!WrH(irB>e(+i'dL8M\drMp1#TULmuMiX2!QOfOPS!fe@USk?0`PK*k XK)6"'W-Ih3tr55"p4l,!!!EN4&p?g[DVsD#c<,T9/[e,$O$G0qu?a!";V1I#m^V8!WrQ1#TP^$G@!EV %L3+>!rW*9!<N<)"V2P#1g,L;s5h(tW01di//fB;#lXl%!!aH-BUZBOe[#.S#FTO&)[-<F!r)a@#8JI> ;1#%h`3ZD>Tl4$q)&a4u!soY`.8"f^q"E":V5U&WQ3VeK8L=cL"9\8r#QXu/"9el/!<N-!('kTs/PUMi qY/@@V4DO,4X20g$N^>0pAb7.4)0?IJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.jq-M#]V("5 K7A6&OIW2Xb1YbLjoWh,%d!`n&4)Q@rT43_:)F'"!!EHG9p"$+joW"U#5/$)""\8OZd7UJD(Ptnp](a- 1iJPad,3TtY*MBg!U]pq#<[mM`n'+rK0KtLmf;qZ"9B9.Okouu!hM"Gp&G:!,ZAr^alE?^"Mnb($N]Dj $kZ$VT"iq8e\7l>/ICeE$Pc^<]$9!j\S*Q$!WE)R!!<6BD;5$O#N+1W]rmlcI/S'_E"?r.FEMhWJr,ns ^<5!ZhW+Rs"5IrC"7lKo#sYBejos_JE'G6BoDnI_!<WAh!"0#kH(MXsj2#O_#QjMr!t@2=f)=_4ZoeQ\ !"/l[K"/qSiRs)U&d%h.$3DPdOKd!fj4hr"!g#2Bh#Ifa-"Dq;bi$g!58+.e!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL&AZcEbe^NVO+N%<LPCeUVRuZ=%*.#@X+k(M-Og@c!s/&p#Qb8D )(A<sLqWc%"6'4Un-@(&Bg41%0/*)S#<5(?6;_6>Y5Q*Me'PCXAP+Qh!!!$$!ZsX$:K_e"[+tZ\*9Nu' .0g%[!sU#>:JkG@RD$Sbh<Xm]VgrA]8NQMu$8G4eE,:;nV7=hMrr3S?EB4[B$O6hP01TML3[>4?"9AQ) r;[6,!sJl8(F1du<c*N"rP&T`^RAt42B`J-!!rZ/(c4KG;.G6grP&uggXaT]ViuL?;*HHJ'+>$E!<N-# )?Bg<!<E631.t>@AUg\qa4'&8lG/j0@8]KNq(Me%r\+X:<bu]*MO:QZi;W`YlCV?3!tYhE!oj7c!X/i: 5&-%frP&`\iVWZRgq0)6LkUHXJI[9_JV/W0L5(D3H@h3M[/I`R_;EtfYC]q9(Cg`T!<NB.#pWJuSc-;3 _Y!m.q6kT>*>/_a!rDs5!!!$%"UGJ@"Tn`1&f`>N.kNA$)\3)L!"]/3!WrZ9&f3N->$,WqR((rOrs.YZ ?n)Ed!s8B##6teX,t;BmX8Td<e&n\>>='eOpAk0n#T#g1=)<MQYfZnE'_SqW4:2>u"To].;,CJ=N3^CS nG`amc(&K80cpno!!!&u!ZD(?!!!$$!ZF0r9iu@lYgWONs6Qk'1C46g!r)`s"qV`*!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!7:cO%O=/9D2+O\r2gL5V3Za^G]n%MI=[*6RA[.^XTu5GU4-3+,7OMOoDf."'e)@I EJgHmrN-1Ag<[D9O(_!8+sS?1,RbnA+sA'm>^N$D[CWR?XYmDNCcWCE#Qt,/!s8]aDQrm-gqp>4hq6,? ==adZ!<WH34aF^8mFAJ)R^'lchje14*?QCKp`q%0-RU<7FJ.:/^:(5Tk3V6\J3t(Q!<rrF(a1Fh.MrKo !!)lr$j$P8#nJ:D<Gd>PVQ9Zt'<6de,74VW!rr?'!sUGcOj)1s_YgMjZ*C-gIVW(V2CTRX#mLM7!!*-& !s8T*!!*-'"<14!fCe7KU6;4\c.p?o<$ND++X?e.'I>%Q-SAMRZI6_(Z`_F:lK#Ee1'n$`!!!&\!!iW3 &K<#gE0.*uXU;>Qf%nTMNHJrMC\qoYD/=',E--8IJ;fnu['I!<rN-@/_6fST:bNL_rW*9)"Ul.h3*h*, rN-@/g#Uu6JOq!fr;lcq('"=8!s8]2"9S]*&0s>875#Se"9S]+r;[Z8!X&W1$P*ph8U@c6im#*>_r'.i R91pFp](L2-p_!WMP0mL#I9S(0bFcs!r)a@!X/c7.9r4oj3PHFZIm[JWF@Xr!!*-("YF;^mdf/NZEV0p iWn/#>:Km`"9S#lrrN*#('+F9!WrQ//7kaKo\[Wn\CT*GRTV0MoDeq$,X6k\JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&d/XCd2d_ZQ`m_[#Wt;1rLNdHMEd)neQ)1h!_RQQ?WsYSE;_AIc"pG&0!V69s#:E;pX2EK? Wr8t#O(h??#:D&S-n-Pl-iG@l-2f(o6"c:sf\XoTrMqcDFA*h_"p4r/$5Og=;h)+QoZF>6P[mK<&JYc[ ":Q"e02mM6s6n@N^p]u"HYHbZ2(9n#pEh(=5"\gqPHiTEX/Dne@o#-#&e>6N$lC9F.jQ)L%grUF!<N0" %fl_5":#>G(cbo\^<YQgWr8t4Q#/r+"9\f.!XB,G*D2(1s8Vr=Wr8t2UPjG6>Z!pJ-ls*0"9\f.!!*-" !ZM.@!!NlM,<BD#g&C!Q^V@"CMKNK47P6,;-7/I7'Il"-:0`7=]Y:VLV5fMX82(Pe$jHb8!Wh<]#Qkho 87I=N^9%:6$)3H&B4u!qDf'@eC^t?%EHQY\M4Cs)oA.R"XSo16VL`5F,97I*!s/N)!":#4<HFM7_u6VD VL)W:*?#Rt!s&H(qu?`u!X&Z2#6b80!tGG;"VMt78inC8#R(>4!W<!;!<WH.#o4a?6=c"^pXHaQW01[d /JJs3#6Fo,qZ$j?5A6Loajm]qWs>&48K7m9!s85t,R5#,02-P_hq#E?V4_d24;f+T$j$bN+Y?B5W:oc( Y,.n[HtWao;*#^("U"o!!!`N+!WrN+!Wi3!('kTs/PUMiqY/@@V4DO,3[#U^$j$G1pAb7.3+RU@JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.jq-=ME^_?%+W_LH0Kr3IPePuLjoa.J+Tgg,!u"+hj8J*B \RR&p!<WAm!!WH2)`qi6g\p79\jHet!"/l[Cm)-NiPTLa#6FT"%0nk:R((AeeC27=@jqWN!"8lF<2[dc guHhD9HF6'!:p0n#:!3<hYlR<SLjp:!!WH=4(+,cir/!Dc]VKg)$pB/!"BT:K;6<1ce$FSX\B]8mf3b! .<*#Ff&,T&F#jp7rW([Q!s'EZg\p7@gV'(t<^JGZ&J=gM%M9<e(*"GC3ELEjYJ\rKrT47=M`q^RoDeq! 5H+PC"Q,eK)[#[3g].]m7Z4=bf&OSb0*q[L!!<ZhJ(FS\!jk&omJmUq-ZlB)e)8l964s=o!"&cUC6c-N i82MSMZQ]m!Sm_`![V?9Y0>hMJ3+>EmJqh=JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@ ^C\93b."%$FC.^??"7PoMO_6Q^C8'Po&IfP?T/`2#mCA&!!iW3&f`AsCk]S$^B<-fs8N>eZ\;^X9MJ=X :^:--;b9hoJ@#3h("CaDQ#BJR'`\47!WjH.9i"o6NjRU@ruC0q?mu<a"9JcT7o3/oH_eU"a3E'#e[hB/ H"pRY;#X2s9k8O#L7>-J]?L3Prt2qg58Fk?#6PAO,Vgkl&dSR@rrN&u$j$S;$4n=75Y,1#M7NT"#LU5P Bh:-($iL&2!u*4G5uM6E[f*rP^s^rhe]u+EVhAPJ/0GW5!;Z^6!!!$#!Y@._:fh@dZcL/,cIM.&ZBg,a A6/M&%8Tbp:/PhUJ!HY-[_CVtrr_kg@P7fu%L<0s!!`Q/#RWb1N4Su&$debMs80j)Cem_s8,PdS71;[[ :fCM,C27L#I#kH/^D+NLp[dLGF%7Dj%gN.;"9o/W<d^J:^C8!QqWun-BK?b4"p4o'!#>P7!<N?,"U"o. !!NZ='GV?!(_mMc!rW*2!<E6(":Gna-:V6I@=!g'\D7)`#O/!k.gZC_!rN$'#7qb!7UpkIrP&Tdb,BYh 5:I0<!$_LF!Ymjt;IFd/Y0$\Cs7<[@3sc,r"9TT/;,L\ENj?als8N?'`/%>D+;>.N!;Z^*!!!$$!ZF0r 9iu@lYgWON#O8C*1'e'e!r)`s"V)E%!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-X6 Wf_C):eO2B9ith=H]=Srq5jq.hqZ>NBfm44rW2Wk#Qtqp6<eSkUTXQt"2sHgjTi\bB1P'G4?i[-$U$U4 3*CU!aOJYVY5PI[ZCGr&*u#+e!!36)"Z:2%p[m7XZ,,>MbF)H`$31)/":RG=]_:O0S;N8nZ+eSWE_//K 4$E@',!\C[6=,,4_n!1[Y.3Zcn)]d-)#s[="UGPK'cI_o"p+c)qZ%$+"UYeW/kBDrMk$`IrN-a4L/fE) #6P&.!<E6*-Vo&g[(3[DXV.eBZ)aUdMKi])1EI&7#6Or,!WE->!<E0%!sAcH;NK?!hn"u-Nh<_t_2`(h 2`Wuaq*,QY5X@_,BSik)\?rKBameifd!%GV!!*!!j8]Ge#SA"%8oTllrN-I:e_SilLgre,1,Ccb2%MW) 3BKGo8kr]6M5IScZ`F&,$*_n7f#<)/*WlEA!=&c:(*GSBJY)hB$a.h"[$4iT(]ja>!Vud3!!!$$!s8Z/ !s/H-'-8YK(_6fQ!WrN&!#P_>"U>AI)Bpb8Ksp9u`ON+gjl"Xd?S2]\!!X&a6!88dT_tnsY`WBI%giIA p])Q@!sJlU>aXL=fYb&#f@%O0?SE&l!<NB./S:jHn(GR`ZI.js#LnK&*<H9C!q$'d!>PS7!WrQ//7kaK o\[Wn\(/g=PZB7CoDeq$,!:GWJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Wt;.eF'1k# 84u]bFGQNj]"kECWsbVA;(W4d$O-\7!Whon#R;bUJ?m8KgoC=R"-dJ#5R0),6UjL46pgf;$U?p>4^*3/ j7_ZYWVrkRRr_:K#mLP8!X]\e02mA+s7FI:VNbUc.M3C*"p>AN+YZrM])V!BajA/=U7$@K@o#EYp-Bls =_)K-Tsh_7VP^>_@nSm*&.]'L#7M7a'bLo^#R1A5!<<`4!!*-&"9o8K)C7pkR`sFDe#E;H&!_!#(BajC !W`E/$5H!_dJj.HfW+nN&Z2([LO*`>9g:?T&I/IA!rr?!!?(q<"V2Ls4_9o/qVTQAd_`;^Q[!CR7moX0 5l!\[6r@6'G`o&<Wi)_lWfC(L1Cb$,"p+l.!TO.c!u<IZ@YUboXSo1-STeUE7nH9<3B/rVr&,'F3^#\s :KV+RU!E];k/ae*Wt_C^AkO^(*"N/R!W`90+Zi\FQaOa0WsGSK><!?5%L<.8!W2ou!<N<("9e]+!!<*$ $ORI`+rh7(!sAZ,!W<!;!X&]5%NI&a:NMc2k/=L%W0C[`/IiF("p+f+qZ$j?5A6Loajm]qWs>&58K.d7 "9S>u,R4u(.n=WRl063jV4hm43uf4U$j$eP+tcZ;WqG\uY,.eC?rmS(3\(pM"U"r!!!!&u!ri<!!#>hS +>$<5WVZA9Ybdn/=#_<F((10E!VZQq&N4$K!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT4[F JijYI!W`9$!<`cI1h304q;qe4Il%Ps!!E<;8"&E9jo`SR8/q[@#m9c!#6>8\5$s8]hYlR<]LE>'!"/l[ Cm)-NiPTLa#6FT"%L>1IT"2hR`REA^O@C&hnGj"!$8HP<f\PNIe='Sn#4DQa!!NK<1M*NArT40M/HYSF "UcPGHF;`1jp9bVS9\0p*=`5<!"BZAMQ+D/]?AaRa`00In,Nmu'h")3g>:iN^k,0%!WE)R!!<6BD;5$O #18uR3ZSb7n,N^p#Tc6AKVl`DrT4:@V->AU!VHEo#sYBejojP!4:_Ja!8RV_!?5+1\BN[e_f.=:n,NP" 2h0EWjoVeL"mu?u!?u3H\'Em`Ld2RSp](X&.;kQ]cf!K]ISp1j#i#Cf![V?9Y0>hMIQ.i>mJqh=JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^C\K7]:3nH6n8rm.l]t*I?_&5^B)=Grr35AIRkLp %L)t,!!iW4&fiN!CPKP$^B;jSs8N?(c_#MtCi41hEW'n_F)"fQ<bmT"rP'*!g;0G/=#Lip!!*-&+$WIq =`f\2h#@<nk+Z64#6k>6"Xlr@<b@#ibK@c>_V3\e];hB[Hh_RiDJNotH&S,k\@T>ebP2#9&]T5e*#/nf !<WK1$4$h<!W`<%!W2p+!<rlB(FhUA;.Od/\c'8Jcb,NT7ku(mr;[*)&L0%n;ItHfrP&lY_8+(GoD8@L \rC,^/K>5u!!!&t!#GY:!Y@7e;H[n$^<Oa:_8G*[`jMY/L3NH5'Q7i'B52pXS[Z2B]YE2!s8W%uB/B]/ &IJX#!!`Q/#RWb1N4Su&!87AO#OJR23>rYG&GlkG%M'*b)'1%\93#,$DM4ha^D+N?rr<#JP?]da((10F "9o/W<d^J:^C.pIldrh,=Y9p\!<N#srW)cq"TSQ)!sAc+"Tnl0!Wi6"&HMn7!sT;U-T"_4B5`NfV7PI] rs.tg@4V`i"9SK$#6teX,t;BmX8Td<e&S>1<'DZ@pAcE=!<Nur:JOu.M5n\ss8VSqF#jR3"p>#J5uUZj HB5AUrr<!'rj[)8'b:TRli7"dqu@**!Wj9&:/+i0MQkS/rs.ehC,#qs!s85t!X&oJJcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.3ZClJ<-6X<F'dGCr9OrU;Wqib)ZfCiSnu#Y8!!!$#oDf.# (GA3aGEJ](rN-18iUujKn[jWf<EE=-r*9\6=&i.?S&Y$iiP`#"XYmM]Gt]V(%Kuh6!s8]aDQrm-gqp>4 hq6,?==adZ!WrT95'a[2iOFu"L5_\*[$uMO:fC@spg"_A>[(BLKq,EOYHG";jRr07VGnN8!!*-'qud-) !W`9$qZ%!*#7_Ik3E'dMPbP2UXTtk[<?V\R"9SN%#Ql/8AVutVY,hK&%^)t?\\uJ%VK>Te(CpfTr;Zfu r;[Z9!sJlL;3')qeu4IVM34[?X,qC&;,gV#q-=\>>[(E=G`AE$YHG%1aR8`mjb5o.!WW6%irB>d#SA"% 8oTllrN-IBgt9oH@Q"r("U550#S.7M%1Npe*[<aLGFGeCZ`j>0'X#XJq";%*.KKML!<E?4(*GSBJY)hB $Eh7JN+G:&&-Dq6q#LBo&ci"7!W`<%!!39-#6b54!W`?'qu@Q8"9o5E)CI:)AW4+TbeLTi_s$7<Zt;'# p](L2-p_!WMP0mL#I':s.h)af!r)a@!WrQ/,@$\up#='"Z-gn4Rp.NW!!*0)"tjP`m-WE@ZF/QNi<IGK 4qdns!Tj@q!WrQ//7kaKo\[Wn\^ep:O&@G9oDeq#+?>#RJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd 2d_ZQ`m_[#Wt;(V?9&lB*?H@\9P9!KZG*U>WsbP=:d--7%L<.<!Whon#R;k[L:Y[egoC=R".=(*7gDOW =(,QG?sih<$X?n==E0;0r;5'PVZ!PQRW;.M$4$h=!X]\e02mA+s7FI:VNbUc.M3C*"p>AO+u3;U]DL[< eE#<%[&BCNH"C5b?![53,%u(JNM!DaY,J>"WgmZn4=:UK#Qk25"9eo2!s8T,!W`9$&c_n4!X&Z4&K<#P <ICaujm1<orMpHoD+#0B"9S`,!WrT65_@G`rrD-XWt22-VPKQ.Cfs@p/K"j""9\E!(^1Hh-9Z%.eFhVD f]:JrXe_28F'`'S>[7)2'Obd%KTi4<]r7p0WiM:_75b_h%0uk6!!2-\#Qkho87I=N^9%:6$C>I,4!Z*o 'FY?Vq[!c?%1a$g,:tiVM8B5lrn=dYWt_Lm@SfKI-56[e!Wi?1+Zi\FQaOa0WsGSL=>UU#$O$V+!;6Eu !sA`3"p>#1rW2os)Zg0L$kssG9437@]?n'hVl>nd8hC>\%0lq8!W)j%)aA#)[`R(*rMp0kECh,Q!s8W" !$ha\*%+*kTC)F'Z_jF<>!!]F'at-O(*kY5IB2u$`3#l-D-043-mT`A"U"l.nGrRiq#D'6'Heu%H)^Z7 d'0@9D,rJ8+;G4^!VZQq&2IIA!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT410?PrP<"9B&p JCaPY"l,k]1'n!H!!E<=8t4l>jo`r+GZ"Vl+Vb:]"8i90!s8T+&MHsnL8rGTrT40o8e1Op$NhqrP-`Kn _egt1!VcX-#sX3@]""ZFaOoF^CGZS,"pG2*":tbB#n%tRP1\gUjlP'fBflpp!;-<r!=L,BG-U!(joUu& !qcNs!td>!W8IR9$00jsf=ZrC2&Z_d!"g&NP-2L+Vn:71i1<pp#R1J:p]M04"pbPH0P%9FjQ,Fb`/[qS !WE)R!!<6BD;5$O"iksP&Hi.%!!WND4CNuMf_sq9j1gX`4ppr_!XV)irT44<H7]Bm!8RV_"Y+/f`7!H% _fIXBn,NP"2h0EWjoVeJ"ml9s*F+Q(akbU)57mtl!"&cYEh9efi7+,q-ijPRg].]`-"Dq;bi$`k2%0QS !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL'[+h0NFbg?)[-Wc+tZK(KpJF5[(H:O %`IH-s8V,RC-O?n&-Dq6pAbI##nn@2:Mb]trP&HXiq`TZs4suBK8#,>qhtlANK/j=?<:`jQ+$Y+("hEc X+jqC)#sX;!WjH.9i"o6NjRU@ruC0q?mu<b"TnoV8Q/Z%K!!/8_7mY.gXaTaZ_`u_N!G,kJ:39@VRufA !Qjj1rs$Po7j&TY#5\E"!<E9+&dSdP%hog",:YH29NY\2DgRb\rP&Tb]Tm,#1*-i%!"8l;)C[I:@s4'1 Xgc%C^B)@7rr3AXY(g@Z3@G[V$jHe4!>tk;!<E642Gd7RD3)9O`PB1%f%\]r]<7fhq2>Q9LP(&*O.<<L ^B`Bes8W&#C,c;9'FP'(!!`Q/#RWb1N4Su&!8RSR#N_[g/.)Ra!rN$H!<E6'"UPVM+#?>]=_;`0UoUl6 _:%]Ks5g.r5qX5j!s/T0#pWJuSc-;/_X-7&XF*el"SVoa!#Ye=!sAi8$kEsf*$H^d5YP-iEc6JgS$'BY rr35jV-tk]"p>#*!!``?)'qa^IB3=]#Lg\hG>paQ&GH/I!<N<92bZqHC58b0rr<#gZu\54#6k>6*^Wk+ A:KcKdJj.Nm\skU$O?n;jo>bi!Wj9&:/+i0MQkS/rs.ehBe]hr!s85t!X&oJJcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#7`"A<,IAZX8T.6Y*s8n((^o]#ne:/2,@q=RA6X[r2g:2e+35+aE06C"TAJq!!i`E 01K>pOJ]2ZXTQ,]l1G;Vd%G`&DfU!uFpiA1D/5'3eFVqP]s.I;2703/;Crn!"on],!sLQ"YkReF_Qgr7 fZT[b/.)@Y!sK/uH+<P,]p48-NM!5OSr7c-D/XIiFpE,0EcHShSZ;Xj$b,$ep@YLh*<6'?!W2p$!<N<* "9fAB$4IIY(EFbO1H\WNI?gD&Wr/t(WJ+=r$3p\9r;[3-(GSTtI#XbuX0&H#XUq_Sf@\03E)AG?)\E>[ "9S]'!#Pb>"U5uENmdLOY)S*lPGG=[R=oEmD/aUmFpE/2EcH2SPGS2Z#KH*'p$@W(%0?M0!TO.c!XKAW ,t`-<Wr9%)_;!P]P>it:p])]D!WrQ0$4dar6!ehuT<#E*Y-"k1_;"GPaE9?D!<E6&"Ul.h3*h*,rN-@. \Xn">0c^Z)pAjU]+9DWK"UGGE%hfd#,V(iB:Kr+1\Bi%&Z`_4.jP$eI0FRXU"qi=M=`]InqlL'_?RcEg "9S>u,Q\&M"=%3Ajn7`X[B\6/_4=ga&HDk7"UHhpV!I?q^Tk?-h9uJ/AMXhV!##D9"9g>fVss?9`Nm&) cG,K?.LbqL!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY)HV0uDt$OmRW&Ks#( ?[J!8]=YJTWVrk+TnH933ZoFV#mLP8!VHEu#:if.\B`sbWr8t#Rtb6C#?4rBGC4^]G5QIjFE2A?JsjIM hS#qerMqfEE_\"l#mUP6$5Og=;h)+QoZF>6P[mK<&JYc[":Z4n1KfIEqr?,Oh9s3IXf%SDGAqPCFSKt` J;]\dXgl$FrMp<qDbE>K'b^oV!WiE#!!NE+"9er8&do*['c7r8/3$$qE07Wkki9gbrMpd#D+#-@!s8T) !<N<,1MWu]s8MrA]!8<9rMpL(O)ei;;FWVk)\WV`"9\f-r;[Z<&/uu]BU73Ah9OL*c+U?^U6C1MEH6/C q/lpfKT2CrZFdLAWs=qp7lq\*&-r19!!2-\#Qkho87I=N^9%:6$C#1#0,kiD#m(,.qZ&#G!sAf9',r2\ Bq!HIqtAFCXfAD!R!2M$5Va8`"U"l-$m@]4F-j;PrMp4$Hrr6:%1*4?pAj^`-34,K!sJl8$OdU\(*"PI 0g\iQI$:SD^94E2WK^^^/IW7%"p+f+qZ$j?5A6Loajm]qWs>,88f\$:!s85t,R+f!-:2O@n,(bFVP/'7 3ZB(S$ip_R-T+nRXmtAcXJVM'<At+!)\WP\!WhE`'*o9p/PUMiqY/@@V42=&1E@MN$2su"!!3]e>(Qa+ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mX[SpAbF"'g[YaaOoDKjosVOMdSIIl2Uqf(eU=Y rT445\t+0P;aNAd(`=7h)[dQ$(DJW*G`/B4eDgGh!l%JBp&GI&/8UKUcf)cY/I)=O!"oT&LSVPqYIi!5 jNEN_/K>`N*;CHX+!N!Z6ZT3]rT4:9Wc^lN!Up*_!!`N6,=#b$_r1LU!h(YAoDf.")*`8Yd+[@:rT4=> ]8^;_*=2$4%Mr61XM;?M_9q3'\9C@brZ(tYq&9PZ+<i-a;hMj_jp/qoAN^.s!!(aR!s'EZg\p7;_f7C< !UB^s"W0*uL:c-oi8`kBYE*T?!qlTq#sYBejoaCY-3Wl>hZ+)d"<0j`_9^ckjMQ$p$h+,u%6&dfrT40d 3<\^L$630'W5m`HLHc=Op](X'/U!i#dc&N%4:hJogAhT_-"Dq;bi$`k2%'HQ!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL'[4n/Lg`k1)$C3U(*5A2BR5DqTXas8&&[#gs8V`.Qu>k_*X)TG !VcX#!XTM]/5L)8^&>\J`ms;I#QEf!UmdgFTDP;hU84TQKkkOVN1mc[^D5Jbd^G?Q5oTe(!<N<E5>=pV FH3``rr3u#U0oDT"pG)4-V.*6@saod_8![u`7`nsd)3>mpn7q_QB[GsTWPj)^B)FArr32FJk@7+&-i%4 "T\W*!s]8J'c\MP3'p>=?"IhmF`_VLMkRc]^B`0"Qtf5N+:J,J$ipVH)^[mRC3P5hU:L6;/]?9/s8D#t WfVU@;a2r['F"X@!<E0$!<Nfh:/G&.LTeY3^:qA-g=k-#^9a[3Ta.6ZQ'.5tUp'^2#L`>Gs8K6>3s-T@ %0bbl#6G&7$9i3`])BADh#@<Yih9a1#mLM6quHZr,Qe5W$PamA5>>HuDLID6Zbai?mJ?(QJlOub(BjjC "plMTI%C5N#f>cV^RfI<,m<rBmJn++"UGMK)C$gm6;:NiBPhd5IXup-S#E[+h#@<YkbDN8#mLM6qu?s, &/cc`@stEV^B`6-V0>m&-4onO,67iI'K8][<bdDgao;>?oX/a##7(M;"<g37<G6uJZdf!Ro`s'8?7cBc !s7Tb$NU;1)E^bh=E'/%e,K@Pl`=eT#6b22p](?u$l=KqJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC] ,Wo%CL7>7BXVA(.D*&FA#mUVB',r2U;.k<:RA$_\XUMJSht-QjLeAWu#m:;%!!i`E01KAqOJ]2ZXTPrK fB*>3f<13hL5CfcN!kQ#LPD;(dG`Nk\$,b427KW?=#(j/"on],!sLQ"YkReF_Qgr7fZT[b/.)@X!sB&s H+N_4bG'rTRA?mcVjWKsLPUi_N!G5rLP:bVV6'Wt$b"d]p@YLh*<6'?!W2p$!X&Z2$P3pe*[`[)8Q&Yq ?Y"2-O.`ANWil<&#HWY\+U\JV"8r3-!Y6G17pg@oTW"rmr2gO6]ZJdOXc[m=;*6?I&IJXAr;[Z9!sJiJ ;NK?!hnGD7Oe&DPWhPc6KnkMBpl#E7LP:MHS>c@f#JoNqp?[`(%K?G.!TX4d!XKAW,t`-<Wr9%)^tI/Q N`%51p])]C!WiK.#7:kW/O*3KJ=3d^^pL2H\]`doaa?;_"p4o-"Ul.h3*h*,rN-@.[$5Al.MrNppAjU] +9MiW&f;]</N#[\:g%1?EI!P<]u%=fZ*(t(h9r!%/IM7Q"qi=M=`]InqlL'_?7H<f"9S>u,Q\&M"=%3A jn7`X[B\?5`MHuu&c_t9#RrV)U[%$i^9P?&bd@P/;^r7:!##D9"9g>fVss?9`Nm&,d__>P/Ih=P!X^#/ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY)7UO?/nr<`o@(*bLt<cF"oZb*sLWskei Dbitg0I%2>#m:>&!!ifZ;Lu0qf\!5&Wrnr[IprXlD0q2'O,](qM@58sLPM+g^XBj!Vl9Qp248GZ.1Zdl !s/fF+tllEZN'R>Y,7Fo9e$_i%L*%G)'h"@L:mQJd)F2H\?N'5SX,.dKSYK[M?f?7V6@A?[&Er($_2N< 6ocA-$j6V5!W2p$!sJr=&K)3(-ndPF8Q8r+DL7JE_s-@5];bb0(m8`)(BXdB!WW6%!X0i@F/$1giqDH_ \uP_0&Z1tNEc5]&>>[X;*=`G_"Te`(!#PkN)^msbQIkoeb/VW>[B?R.RurGZL51]_M?f-+TW59-^9da< #FK'p5q3rl#m182!Wh?^#Qkho87I=N^9%:6$C#7%/fYiD#6Fo,qZ&#G!WrQ2%1sF-8SaQr`o$C;_R6GC Ruhbs;*Q?7"9\f-$m@]4F-j;PrMp4$Hs&35$4$b9pAjaa-NO8M!sT2J)'C@_3^ZJ:=C>ulLm=jC]WnE4 VQ,kh9e6kk%gE(9!W)j%)aA#)[`R(*rMp0mF%dVY"9S`#!$ha\*%40lTC;[0[AKX;=?.09'FOpN*%O$Q K<Ok$]rS$!DG`"g(D[PfrW2-]'*o9p/PUMiqY/@@V42:#1)V#D$2su"!!3]e>(Qa+!.k3&!.k3&!.k3& !.k3&!.k3&!.k3q!!<KYDTMe=!mFLOp&G9t&MdI=Z.f0=#2mP%LgLu&lMq%g(eU=YrT44;agIfHJSedh 6:40<7LMXO5X/P*T<,cPg>i.o"2@YG!VZR%""\8OZd7UJD(Ptnp](p54b99=ahu9Qi8rUnI9&g,84WGE #>.`f;fA#>h>QI>fs-36,6RE8q>^m(!sT/R1f%qIY0Z,+joV#(!qQBs"WTgQS%-i'rT4CBafUP874JrS mf3h5<K4#qahuHZio\@QD+smuq*kTZ92AGgI&>0djp0/+F%coA!!(aR!s'EZg\p7;_eq+6!pTar!Y$VX MR^dZhW38)XdC[Fp&G.#5H+PC"5Ic<!qH?O!"o;6#7h\!7rtQQf\PNJ_f.=9!V$-l%6&dfrT40d3<\^L $630'W5m`HLd)FOp](X(0mfb3e)AJh/-sr0$N_VaNNUL`c$;/S!U]r>!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!7:cO"V)=n5$iN+rP'&jc``%/7P>P["UPSK+#$)^Bn)>KrP&lZak5kTs51bjH;Z=$!WiDt!!iW4 '-8]#CkTM#^B;BqeD1Alh8Q_$Xfnr+YR@bD['ccsM2RRkYe0kK("qs._k;!=*WQ0@!WjH.9i"o6NjRU@ ruC0q?mu<b"TnrU7Sm#lGaH(W]tV7scIgk%be^d`YQq5+Un=H`[(Q@P$c_9*s8U5p9d^kl#Q+Q*!<N?, $Pj@#0gSWBBQ89JMNO$[M1q(^YeC"M#LU>VD+ur4$iL&6!<ic?'ei0^A8ls\\,F&n_TCEio'"TA[Ao[K DGrS>$O$V6!<<-$!Y@.^:KD1]VSBjY^;%S6f\=lr^U3g@#Hk)'TqJ<e])9;JcgCc4ripE+"!SQl"lfRf !X/i:5&-%frP&?hrr35]TO98U"Tni'!<*!E!WrT2$PFF*2bmUa@rmO*^r=OLioe+DCJQf."Tef2#pWJu Sc-;/_;WeKO_I3-"8;f`!"8r8%i$3>5##9rG(l%VOpI86R%pah\A$i!rs.VY?mu?b!s8B##6teX,t;Bm X8Td<e&J5.<'DW?pAbR%!Wj&p9MJQ<&>ortP18F#aI2#6k>U7orc.KU&prqX`\O_1tr9"9S]+jo>bi !Wj9&:/+i0MQkS/rs.qmBe]hr!s85t!X&oJJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZ X8T.7ZC,Jg&.8aI"9o2D'-T2)>]GOfWVrq-YIDR)ldhS>3?o4C!qcO!"W&g]@="$4Y5PI)Z+%To#M7;1 URRdESc#,ZSHtac\&QD$\$E18XYdDdMI&4b&I&4:!s8]aDQrm-gqp>4hq6,?==adZ!<NB45'jj8ldN>3 SYW3cXK&.hS=?&CT*CjUR?sG>WVik+[+"F9or;(6!!!$#qu?m&"UGMM*X4#L6rn)QN;\V=OHuN<X0&M, rN-=)L0#Q,"p>&,!"8o6&K<)_>BGpsV5gTpXUqY?]Yhk(XIG8r@nJO#&dJI9!#Pb>"9f`AOOa!`af1]# V5^T!VP9WPS=Q8IT*LpWR[KS8UoXEq#JT!cp?IQ%%0$>-!TX4d!XKAW,t`-<Wr9%)^Xp`ELef?'p])]C !<N<)"9eu=)'^e(BSj";a1nj]Zb"0(_LbDu%L<1="Ul.h3*h*,rN-@/YDlsI+qk7apAjU]+9W)e+"B-8 :g@UPHA7<;O-?3=\[JlMYH>[tf>s.U.L>eL"qi=M=`]InqlL'^?7H<f"9S>u,Q\&M"=%3Ajn7`X[BeN; b,f,2'*&(:$5#75V<R$c]s58o[?Ui/5p?Zr!##D9"9g>fVss?9`Nm)/e]44a/e7LR!X^#/JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY)8UO,ui#Q=o9"Ul%_+Z2u/LS(f^[/I$6Vjip!?s#fM )AEYe"8)X""t<>qYJeuDWr8t#Umm^1#D7\jS"lXJT)>,WRg5[f[BZd1V5aEo24JY].2!'q!s/fF+tllE ZN'R>Y,7Fo9e$_i%L*%G)'h%AL;!WPc+CNoYcb(+VkKWIR$sH<S-PafYe%QXZ)R]&$_E#R84+pO%g2q8 !W2p$":,JO*[q^]7os5?H\@9;Q(+b_c.UFXY,_H$(R8i+(Bt!E!rr<%!<a/g6sb86_t!QicMX^oVkKN> KReT%G@=-")A3Ja!s&E&!!NoR-p_O6g%sLB]=>2OXfJ@rSsYk3ReWBWStrKq]=PBHWs>&8:.7)j)[c`M !WiD`!!iZB/P'?*VS9/1WsY)+;Crq0'*nX?!W)jF!<N<)"U>AD)D+<[H(DkKqVT5qWh>fHL1Eq0%0m%= !Xp56<HFM7_u6VAUjQ9!$4-q>!qu]c!%.gL"9f/K+Y,QE=_W).K8,5GR&-ji[^<!1VPpMXAksrn(_HuS !<N&t#9,m@R^U>gZMgg/Rrh=G"p>&1p])QE&KN;hE1cUrfX7TLDcet5(_R/V%3@)a?&,`Tf".lYQu>_L ";DIX"p*cb'*o9p/PUMiqY/@@V423u0btW>#lXl!!!3]e>(Qa+!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q !!<KYDTMe=!mF@IoDf!t*(GV-rT4@FfZ(7a3th\^!!E<=8t=r?joaPobJ4@hVk&g"KS>-XLC8fgK7KDs _p$T`i8jk!"2RqN!VZR%""\8OZd7UJD(Ptnp](p44FNa2dam12j5o(<Z'0otLPGSZ#DnG$P,?"Dhu2[@ gpiS`1'[4JrW!H0#8SX=2F'oCGE/K0bM)"TjoV,+!qH<q"<9dAOMBZNjpL&!ah+@%C/[/1"n;R''iKme `7<JpiT'(S_P`<Gp4im0MN3aaYK,Dqjp088KO>Jq!!(aR!s'EZg\p7;_/:k3!pBUn$7oMDXN0&Vh:0KV 8.bIp!XV)irT44;Bc[<G!9X=t!<ioL-9":e>A/ek`nK;.j5n*q/dMLJ!!<ZhJ(FS\!jOchm/RJ5=GNiq h:RNJ%fuG*$3`89Wl!9Ea($=sg&MK^-"Dq;bi$`k2$sBP!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u !!`Z;(F)+MH(OuL'[4b'K3CVo'`e=;!sAoC*%"*hLoC9e&AZ0$a3jn_lID_J3Xc)l!<Mur#Qb;G*@t!& Kt[H""2Vjm`<F5t_7dFkpq-pJ^UUe[Z*UpO^AYe]g%47JXF!V`!!!$$!ZsX$:K_e"[+tZ\*9Nu'.0g%\ "9p/@:/YGFPe"NB^V@S#_8aU;`4u)[#.qCR[(*`[r4`WYh=gmKb)0%F*YShW!!NB*"U>S_$T(CWAT)F% HA\8rY5YI([(*]]rP&Tb_4>RA3?en0!"/f0"U5l!6Vh*0LpR&p,/D(6`lQ<Kair8W\>"4G0G"Hm!s&B& !Wilg92/DuK;6/prkA]R^r+77a25Ud]EZ!V['[EV]_oMLbi\g&rN^K1"""ru"lfRf!X/i:5&-%frP&`s s8W&TTO95S"Tni$!$hRG!WiH.#R_M.92\c!HChmf_o0RUbGp/%5pHR8"9o/W<d^J:^Bh[4af0o#59U.' !:Bh4"Ul+f/jiWLEdj">['6a<Y-,(>\@T;b^Y]"jrnsGW.0g"Y!rN$'#7qb!7UpkIrP&Tb`h[fX4sgj8 !"/f/!YdRe9ic"aW6,&='_o.Z3<ofq"pZAE=]fWtQF,?;jN[k0GtT:Y!Tj@i!<N<@4AJUQE/LmKrr35l X_BKp"Tni$!!393(P2X=!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi'XF*?2@^#s!s/Q- "9f;U.QLLLNi2iX%'Hh?[D((pN++ml$j-)%#R)"t7q$_*VQTm""0\r7ZN[_@Z*(..poXn)Xfeh2ZE^X: r2hibY`NBX,SLC_!WrN.2/]Ymo\@<g_;EngR92!I!!*-($U&aIq!Q\FWMunuXf\b-XfSY*Xn]%$XJr5! ri>t!$a\(=o_,1a)uos>!W2p$":#>H*%MR_9O`C7[E?:sYbnD"Wi`>&qlL+'LK5T,"p>&,!"8l2"U58Y 6!o)%SuA^fXUhS<YctL@ZEC'aE)AG4$3C)*(]a[?"WC:$f(S=P[&Bt)XKAY,Xf\\,XKD9##-=i(WN3)& r2g48ea3"oM*_XN!<3)\!!iW3&K<#gE0.*uXTuVlb.*'t,ma2ErrN*#+ThiO$4\7RFfEX0`jDkOZ*LaG Lfc#@%0cn<$l0sF?%JUGXU))0Ki]Z@%gE(/!:Bh0"VMn05#>X+I#4&ZW2Q\oWNE>*Yck44XhWH4]S90- $2=K)&h$%KF,HXgXTtnd?7H<f"9S>u,Q\&M"=%3Ajn7`X[BeT@c`q.A'EA4=%21d?V!-^[]Wo&\S9>!1 0cCAY!##D9"9g>fVss?9`Nm)4fZ^-s0b3gU!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1) OL)sU^AY)HUO#f`"9Sc/!sAc4#oPBgA;$Yb[Jd-8WhlD[RVu4e*?#Ru"9J2r#R2\NH)eX+e>iJJ"/r&k TEUs_V5gVuor84pVkp8hWN,ot.%50O.hW@!!s/fF+tllEZN'R>Y,7Fo9e$_i%L*%G)'h%ALVEfS`NfEE "0AQ&Vu<RfWW]E,YHb5/Wr8t+TT*MW9K+C5"Te`+qu?m($PXX54pP&&J<?P0\[ML@"L,5>ZE=,+rMp0g DabNJ"9\i*!"8o7&f`5jFf=9qqq\FQWr],qrh:U1SsO\-5pRE`$NpJ2!!!38*%4*dR+qSs^9+Q?XK8J# W2KWnp8S=uYHb@5Wi5ir#F^3H8jP6U%0H_8!Wh?^#Qkho87I=N^9%:6#F&t$/fkuF#lXl$!<*!E!WrN- $5Og=8p7<0s81BTX/DbeSp4Bq&.&OC!Xp56<HFM7_u6VAVL;Q#$4$e;!VZTb!$hUK"UG__00iHPKqGZZ [BQX4XKSk4XJi(sWN*"`C/HQ&)\NGU!W)j%)aA#)[`R(*rMp0qFA3k_"9\f$!$hd^*\'X!U$qm2[AKU7 <]:U*&IJOK+##uiMR)`u\>lEoDGDY`&J#0NirB_u'Heu%H)^Z7d'0@9B2UGs(D$lO!VZQq&2IF@!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9FC@k!s'HM_u8^&jl,(Nc"nj9li7.h(J:4XrT44C iSWGpgY1</cd2C5$-piLg>(TEj5f>#jo`G"(BO71$NhqrP-`Kn_egt1!VcX,#<@'t]$fQtjQ5Oah:pK, d*_U7#L_)MeCiU6jSe3Eh8#e65Rd,^&c_q:)a.nsSuT65`m*#cgYUoNrT40Q0*:YD"U5r1CT-"djpU8. hV?c4ahXrY+pRT<&JS#oUr1mGj5oCbhqZr6d*U27cj%qIeCWI2i;D^Be@1``*s;QDgAh<V*GsR0joiM: /I;I@!"BK%BoTOOk2YCVgh.W.pAb7$5H+PC!o.<)nGqeR(]ajY0MH8EZFRchaO8btiT0(]k.tjb#QaGq !t@2=f)=_4ZT89W!"']JLT&8LfSDd'!VcX%"uq=>`7<h`<uV4p!"/iS@u[Y8i6?R+$3BPpJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO0u#6bSR,<fFZT)HD0bfd,>=[FYR!W<!+!sJr>.p%"XUoV#;rP&cYqYpH^ _1bQ%%1*1=q#C[%#nn=1:Mbd!rP&HN_p-X6dE08:[^PJ2(!>.O\=IM**WQ0@!WjH.9i"o6NjRU@ru:*p ?mu<b"U##U78?`fI$;.X`5]pBdE0>@^:NX?(<#"tqsCM081#8f#64c+!s8f>'d#"m&lN.TEc>rPO.Ei. `P&RWYdh9YrP&Tb_OkgE3[,"-!"TP]0gAWOI$^h4Za[HU]Y=?Z,f/^-g;fb)9e.4u$NgG3!s/uh92/Du KqZ8u`5g'HdDj#:]XmF=#L)9$r7%0I3s-ZD%L(km#6G&7$9i3`])BAOhZ*WShk4=*"pG)0nc/ss!=L2< 853?/Q2JB-i6o#rCIffX!X&]6,?B2_rP&WRfYX;+=?7K*pAjaa-isPW$5+I43_N[kEI!5(\&QJ/`P&jd YcY4>]"[&$s8CiI?RZ0_!s/<"#6teX,t;BmX8Td<dDhu+<B_`@pAbR%!Wj&p9MJQ<&>ortP:<F?'R3 #R:S]8mGPALRGU(oAn."X*I;Z!<M6]$NU;1)E^bh=E'/%e,K@Pn#^:Y#6b22p](?u$l=KqJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7BXTu%pBf-;("TnT%$3^nV,Wf@^SYrNgr2gC1aMG!?=>L]p !<N9&q#C[((GA9eHB>#,rN-1)Y-G27YcFb%WN#0]1Sp@^<APa0"on],!sLQ"YkReF_Qgr7fZT[b/.)@X !WrcmGeEh?f"S>kZF%*P^pL2BWTpDt[Edk&h24fA!!!$#!!36*"q2.d-8\.(<b?T?YL1M0]!o#JW2HDh WiW<#XTtk\<[%kT"9\E!%MLEcAp9&uUSk5rY-5%3r2h*E]<%3<;)0!m!s&H(!<N?+)GlRIp?Bi2Xg#+= \\,PZri,1]#JJdSo"K-'$NC,+!TX4d!XKAW,t`-<Wr9%)^XgT<KhNd!n,WFg#QbT#C7`Je`4GlK&$V(% 1EI,6!sK)K+?3YXT)GbsY,-PA*u#+e!VZTf!"o;5!WiK/$4Rgu2Fgn`GD;9PVuF%9[]la6ZE^aAYck1D f#tRU9-jo>!!X&a6!88dT_tnsX,UF8$3p\8p])Q@!s8ZN?(9sKjiY!:hV6GcC,cn-!s]>P4DgnVgrd44 \%%fE"%b$[#ibmu!WrQ//7kaKo\[Wn]&25eVI)%goDeq"+#niPJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XCd2d_ZQ`m_[#Ws>JJ;'Z5H!sAH$$Oe%187mUR]XtMOWVrk*Vgi;L.k2PN"Tni-p](R(-;/N[^!>$* rMp$uVPBabS=u_@V)+0I8gtD_#m159(*YD1J$T+Hb-%V+A5+Nc'b1EN%N-NL=bj`klbfd&W2#rRSXH"@ U8$qL(6WrT<^etp&d/7;!<<3*#72"_.5aV#&T`l&YJ/8iYc=LmVlmA<[&g8)Ws=o.7iMX8"9\T&'EJ:? #Rr@bJ[W\KeA8SuX/MtrWiH#u,H$?7;E-9P'F=sH"9Jc>*%=0fR+qSr\YlL)Tq.[BR[p4JU?\Q[M/Zj# 5r0Pj!s8T+!TX4d!u<IZ@YUboXSo1+P\O#H*?5[t!<M`k$NpbJ(c#NnoDejQ]DS]?KO-YN$3pY7$m@]4 F-j;PrMp4$ITJ0-#6b21pAjme.KKSQ":,MS*\'6F??D.'_:HiCVOjHTV5C8nW2?DhWN)1t:b<_/&dSL= q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bFVP%a+2\6Z8$3:Y[1Ibu9ZgPuDW2H)&9e$5W %LN@!!##VP+>$<5WVZA9Ybdh%;(rRt&-r18pAb7+10T80JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO /T/Z.joWb#$1\'##;V1XeD&mZjosY08f@g5mJm@j(.k"UrT44>g<@A7\[Sp.Y6'85%/'Z/""\8OZd7UJ D(Ptnp](j13I.%(e)]TIgt:&u^pL8IlE:AcK4%%k#4MU*!Y$AFG,WI,eBl=\bg+M`gY_,kjoV,-"7Q:! "rf^CXi],IhrEeZjo+<Ehj$eR"S2U)'MjCX_qO83hV6W-`kAUZXm3(pR<DRm(BOR:gAh<V*GsR0joiM: .gZ7>!!NQR:O&_`r8n',,Qd]?!XV)irT41:@2AA5l2V\'$mIrHL9AeUf@.jZbLbJ(i8WhZ_/(V.!V$-l %6&dfrT40f3X+mN$630'W5m`HM*MRPp](X+3f12`fAaVI(]i=j$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XasVA///-`!"/i2"pc8;@<[9]S[&..%)M3-rr:<5 @Pf8F$j6;*#Qb;G*@t!&L;!Q#"3B0Nfa#a7X.>QCR@3E1'qLkZKlKsG'`\47!WjH.9i"o6NjRU@ruC0q ?mu<b"U##V7o3,nI?hC^ce[scil83uU7RnARMMEgWNN%C<&>O.$j?V5"U>DQ.m?j?C_Cl<JUr3"OIa&3 f>OkbOI2cF]`#SMdDDMq:c]d/p](g3'd>;#>]G=OMN=4+YdV1B^Ep\Tl/pd5SU4[41*$])"9S`;1JLYG C5/Fta40,<p=?pUUnO?Lm$\0OV5pecCe-)Z)%d2XirB;c"UGH!C5fb&^B!-irs.JT?RZ0_!s.ol#QY5T 3(-ABDj(%5&*29PQu>YI#Qb,5#pWJuSc-;/^t$)bD,N82"8;fd!$)4R(aCb&;ds]iIY!6>[bg-2dD3#` PCnUMS$'B[rr35]TO0,P"Tnf'!!``?)'qa^IB3=]#LUPeG?$gR&GH/4!<N<:2bZqHC58b0rr3].[raV8 #7(P>-VRiPHAS3$f_P!i"M07`,6IiFjo>bi!Wj9&:/+i0MQkS/rs/"pBe]hr!s85t!X&oJJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.*YE`fZ$jQq;qu@*-$5"(*8S<aDSu/UeXUDkb^ThoR -4'eW!s88u#R)"t7q$_*VQTm""0\r1TE^^EMM6_:KBn4JHY6,4+qtCg!!36)"Z:2%p[m7XZ,,>MbF)H` $31).!t%28](bUA]s"`UbhMU2WJuL\K'S++LldpmO'FFP!!!$#!!ET<'-Stm:L7`IFFK1?[)p/"]!A<* P`UurTVq^i#HEMZ+pnMW"8Dj,%3@8o>%r>AR&.4$['Hp=rN.BK]=+`*F&b.=&IARA!<N?+)GcIFp#XB+ Y-l-ohrheIKn=o/K^=BtMisHuHqYjl!WW6%irB>d#SA"%8oTllrN-=>f?_0e:F6D:!"&`.!>%5$Oh&3> \GWH>Y`iZY,8:Fe"Ul.h3*h*,r2g3uGt/_`#mCD)!;6C@!WiH,%2U6E5##6qFb#@5SYs'Me^qL1NM*Mq bJLfrY.rT7^5,Q3$2=K)&h$%KF,HXgXTtnd?7H9e"9S>u,Q\&M"=%3Ajn7`X[BeZDdC!^K'EA4?&/[NI U>skF\?NNXUO3/C1E$S[!##D9"9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcO0u#8K1)OL)sU^AY)7V0c,erWE3'qu@*1'd>>'CQG[<`kS_UWskqfFCIs30cL?"!s/N!!!icU 96R5HcI&ZjWro5bLjT;MI"@"NK^47JF]LRH$jd1B!X]\e02mA+s7FI:VNbUc.M3C*"p>DR,W/b\^&R31 Wi;\[NH],XG^b-nK7WBA(3sLo83&4?$NgG3!<<?8)'^e!:LJ*k&rrWf[_KV\Vj!!mQ_q@=begcfrMp0g Dat`N"9\i)!##D;"pc;2=*BOmVm*VC]!/'.VlBWq,c?fRBidnd,ng[n"9Sl@*%=0fR+_>g[\p-rQ\KEr FaAOeJV*3?#BF9O6T6A/$2su+!TX4d!u<IZ@YUboXSo1+P\<iC)]B:o!<M`k$NgV@&L^nUoDej\_#15D KjHbP#m^Y8$m@]4F-j;PrMp4%IT\</"p>#/pAjme.K]hZ$Pt6S:L7g]K9;n8b0RM_LOsu-MjBp3[^WE< V5]\m:FdA&&I8C<q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bFVP%a+2\6Z8$3:VZ1IYo9 [-5H6W2H&%9e6A\&dnm'!##VP+>$<5WVZA9Ybdh%;(rRt&-r18pAb7+10T80JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&bl@hO/T/Z.joWb#$1S!!%m4`m\_6rD"lcn266?O%!!E<<8Xnc=joa)5ITZbG6pE[02=*4& ,maVG!"/l[Cm)-NiPTLa#6FT"&dUUJT"EM5hU''AN,Vla2)R9Llo"u$-QNg)nc/^l":l+d1/2bW^sC$& N-'DrIsd]oe)L>g!hM%Imf3^t&1UFrPe#9!i8Whrjp'_KE^CoW!VHF&'iKme`nKP/bIX^'Bhp\e2=!.' /gM;G"9&;T!!<6BD;5$O"Mnn)#Qa)g"To],AXUd?joToX"8;cs#sYBejoX=F(%D:j!#l"L*AL3%LS;&_ [\&J"?@8EV`m<;pjM>X_#QaGq!t@2=f)=_4ZT89W!"']JLT&8LfSMj(!VcX%#X+<[b1Ydm>TEq#!"&cR @u[Y8i6?R+$LIhF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH-7t67`fOr;[3+ !sAc?.n!KQHAn^!^C7s-o)8UBX*IDu-5?[Z!!iW4'-/W"CkfY%^B<$AeAhg#S;2,tBPM>LC_^\q>ujQU +V"JP!<N<E5>=pVFH3``rr3u#U0oDT"pG,6-V.*6A:^&Xal3!os4=?2H$+.GlYQQ;&nO]o+qY4g!rrH1 %MLBdAUoYu&s/9>OHQ!)]?SdJ[@iG)Lm4dKrP&Tb_OkgE3[,"-!"T5@&fWDi<Fg,rH%M?WYe'eJ-,@sj lKR!@YF'B-0G"Hm"To;m:/G&0LSM]5l21MXaJ"-/FE)3aD#S8R>XL.`!tYhE!oj7c!X/i:5&-%frP&?h rr35_TO0)O"Tnep!!`cM1-A'/D34\1&*DQ[Sp!jZ#Qb,5#pWJuSc-;/^sTTOAP4cq"8;fd!$)Cb.m6R4 E.En-O-#^:htd6CbcdCtJS8V?M4M05rr35_TO0)O"Tnf'!!``?)'qa^IB3=]#LUPeG?$gR&GH/4!<N<: 2bZqHC58b0rr3].[raV8#7(P>-r",XJW-51f_tU.#K`-3-NaDN!Tj@i!<N<@4AJUQE/LmKrr35lX_BKp "Tni$!!393(P2X=!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsD+2%0]n!rN$+!sT)B *B$c0IZL"trN-L2\&6>+O'ss]$3gV7q#C[((GA9eHB>#,rN-1-X-\;@DeEH\='&L,lrZ,B5:mri$jQh6 !WrN.2/]Ymo\@<g_;EngR92!I!!*-'$9WOCp?U/>YIDm@o_6.Z@o?3)=6irm>$>-.2]rJ,!=Jl-#7h_! 2GRb+K8L;&PFeb]]=5>RU5t"VH[:I4UTFEr#HEMZ+pnMW"8Dj,#8%q(3D!ImJs`a_]XG,Lr2h3Q]"5/6 H!<BX('jsA!<NBB:QEoril\^5^Y%oHl)oJ:;H6c`=9hu4>?a]P(Bsa<j8]Ge#SA"%8oTllrN-=Ag!mp" ;CDk?!<*!(%5V7FX0fCDr2gL=Qu##8(^gHM$l0sF?%JUFXTtG>5nXS2"9S;tp&HKB"9f#G/4*KQEdik- Q(=VI]A)Z@iNJ)ULo/G]fZ:S+_V*GVN`%83p](L2-p_!WMP0mL#HNhj.LHC`!r)a@!WrN-,@-f#p#X?( ZJO?`[;%Z8!!<K=)*Ml3i6oNQYdq`SMZ[<H*=:a+'*87="Y=5_nFYVWZF\rIcDFr'&+fi'$6M6Z!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"HW2?t"9\i)!"/r<'HAf&EgsJQa1;/L%&oeR GALJO,ma_W!s/2t#R2VKG,N%!dAm/G".Y$b>ln)0=oMS)=mK0H:-'[7#mUP7!X]\e02mA+s7FI:VNbUc .M3C*"p>DR,W/b\^&I!)Wi;JD@STp&=BAL'=6is(;Fiu,-lW^'!WiB'!"9i!5Z;<@M3FGBVm3\B]<8-! LN[TeQ)qjHcG6IYWs=o.7iMX8"9\Q%'*87="VMt66WRuQQDV%)_5aE0WVrkDWLf-#F^Ig"*#/tj":,V\ .7%[7fD!e&Vl5u2=\D^n=BAO)='=ll#>[]I0-_;C"9JW+!TO.c!u<IZ@YUboXSo1+P%RN>(`3eh!<M`k $N^J:#pNKBnc/Xe`r)kJJmLDL$4$b9$m@]4F-j;PrMp4%Ion<-"p=u.pAjme.Kp(g'.QF`Nh</EUo1K1 beTQpC0G7gG^GC@^#-i9W2Pkl:+@(t&-i4:q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bF VP%a+2\6Z8$3:\]1e25?Zf8^%Vl6&':FcM`'b1H.!##VP+>$<5WVZA9Ybdh%;(rRt&-r18pAb7+10T80 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb#$Ln*"!=gY\Nm.Ia#33t+IpF6$mf3Ik(.k"U rT43rF[-lJ%g`CAkQ1_boDf7$/8UKUcf)cY/I)=O!"K8tK;$$0jOh,=Jk@X6#Nl0g!V$-l#pVH%&mTC3 UV>1.Y^92)4[21o@#_nYrT40Q0*CSA#m;"u=H1/IgYh/kjp0qhUjQDu%0H5'%Mi*)X2iuUca/p[4=1[C k5kVaqZ,@N!s'EZg\p7;_/(V,!TsFd!>-naMoP\W!dlF!pAb7$5H+PC!o-ulnGr"X*WcWa.mmKYKq>WY VONQR:,O(TA;d.jak>^jCb#_knGiY#2h0EWjoVkM"ml9s**@upa5,C)5S!nj!"'&tQbLc!j2YRO"PNh_ ![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ES.4 rW*9+#SeR=88!IErP&cV`6Honhn51e9f*jpq#C[%#nn=1:Mbd!rP&HefYsosO)e8`/h\q8lnfG50.\S! )A!)Q!!*-&+$WIq=`f\2h#@<dk+Z64#6k>7"t3)B<bR,Q]$^$Hrs$H$>XUk?39W130I.PJ#6b22!!WlH *C+(aS#`S&WiW5#Z*q9kd`K(pMKN?PLmu!S^B`0'T5d[g+q45H%fun>#S\I;5>u00DMjaY\,F&f^qn.A h"C0td\_"N(^UEN";!If;-@jpV8:s`s8VYnHVHmm3]?1Y""bW2%0He<!s.E^#6G&7$9i3`])BADhZ!N[ jIop/"pG)0n,N[t(+V:0<c!fo^CTPa`27lY/-u@\"plMTI%C5N#f+]iLKm8#(BX=2o)Kg4&10P2<b6K: VQ$Ss[,(KVs7!agG'S(3<*ss5[bh#`#NVRc-jBhW!W2pqb!7UpkIrP&Tb`h[fY4sgj8!"/f/!YdRe 9ic"aW6,&='`#4[3<ocp#7)_Q@q::SUUSkRrUC-DSR<uO!s/Mc!"/f/!ZF0r9iu@lYg`UO#Oed/0a@ja !r)`s":Q)u!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;o^#6Y,+!"/i1"9f;[ 2bdn3PGe>\$a-eF\taI@*YAea!r2g%"W&g^@="$4Y5PI)Yb$2F#=LR+.OZ\o.-rE@,odX0#6b54!!36) "Z:2%p[m7XZ,,>MbF)H`$31).!t%/6\+Sq1]<B!,o_.mWBJgnV,pqk+"Y1o<%L)t4!!s#M-T=k:KU\[3 &uDP+Xfen2ZD!1tBk1[_G)MllrN-=)L/oK*"p>&'!"T/8#n7e&4\oaJX4,&#[BTS2,d+J_\%JSsCIBKZ !<<-%"<($pde)G<[]dm>p@dC+<@8n6-7S1/"=kW1$3C80!!2*[#Qb8D)^S*qOK/8]#K,BMaHKUR$1.]u !=^\]I%@@DZ2C^7\=@Y2/K,$""Ul.h3*h*,rN-@.S8LCt#R(;3pAjme-isPW$6h`CK9Vk!V5:/jW3Xh7 p%R=7DG"o<c1^VX^p(`4fZ97V.LGkM"qi=M=`]Inr2g4)NF"(A#6Y,'!$hUJ!sBiSS)s>)b-eP3gX3ED 3"u>p#SJ"=D4fV._7$SYaLR`ADEo?NirB_o!sAcYAZ,%iho2n4hqHAQ?SN)`!!3KL3._-^!.k3&!.k3& !.k3&!.k3&!.k3&!.k3u!!a5t?]_V6e%Yd]#GliJ-jTtZ"8i-,!X&]6)E(]GT=)SNr2U4%Tpq<h<A+ab "9S`$!!icU96R5HcI&ZjWrnW2><E-F0.e_).k3%8.0Ut8&dSRArW4VX(*YD1J$T+Hb-%V+A5+Nc'b1EN %N-NL>)0cfgq0PbQu>\d4>\lF-7C;mlmW/d+WM70%0m%8!=Jl-&h-1TI$1>,YHAMDZEpg:VPfE!@o[8o R^0cPbc1QA#F03t)[6EJ"8i-4!<E6'"q;1_.R70\O/BS:Yc=S!r2V*?U7@Tl>!*rH'+G'M&fiDeC7!KC d'KXJOBkFC1Gpp9-RgJmlmW/b*uYk*$O6e6!TF(b!u<IZ@YUboXSo1+P%@?:'c%;b!<M`k#6=l-"<(.+ nG`Ffbl"LPJmCAL$4$b9$m@]4F-j;PrMp4%J6FK."9\c,pAjme.L$=r*Be&+f(/1__mZkW[Af(";+ski ?=%`9]`7<9XJ_4m9dpem%gN+9q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bFVP%a+2\6Z8 $3:\^2+VGC[G/6oVl6)(:b;ee(_?rRj8]i!'Heu%H)^Z7d'0@9B2L>p((^`M!VZQq&2IF@!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9a^=h!sU2d]`$ssjPAA.]MB1/!!E<<8Xnc=jo_PV)$8@h $NhqrP-`Kn_egt1!VcX(#X=*@_:I\nWdRqf$3A]X"T]2uJu>db\\lV@g"kDL;^W+k()@T@Au=JajoV,- "7#pl$8#bebgkP0rT4CHh:9TXA1IufpAbU<=H]i/guH8?DbCZHh>l:1!s'EZg\p7;_/1\-!Tj@b#p;cg _>NEsIk(Zr!!3HkW;Yi[gK>'W!:Tt1!uNglG+lLabL4tRSqCQ2,7Xbg3FR<'\C'<PD(>hlnGiY#2h0EW joVkM"ml9s**@upa5,C)5S!nj!"''"S\rh/j2ks]#20%a![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ES"0$NgVB'.[%'MQX=q]DTDOgrupWA47jR!WiB' r;[*)#nn:0:Mbd!rP&Hje%D.TGZZsF%1a$_lk1$H&J,H]#R(80!!*-&+$WIq=`f\2h#@<dk+Z64#6k>7 "t3,D<bR,Q]%$NSrs#lO5:7To(?cAD&If$M!WiB'!"'Mh1fSLRYJA!f`5Ta;b/_]L_69>]Dd,hGJX<qG ^B`0'T5d[g+q4)D%g<@V+#m21BPi-VTX22?]_oMeo`+s`b)B7B%LWLE&N3Ka>&fCq_W(Rps6-"]0I7h[ ($H84&.8^G!!<-#irB;c"UGH!C5fb&^B!-irs.YZ?ml6`!s7rl#6bhi1I+rUNr6X&khsO\Io@s+!X&]6 ,?B2_rP&WRbcZS"67`lRpAjme+T_]I"WKBl;d4'jXMDZfa4U(as8UE<GuS0[;bL)'M6l(<rs.YZ?RQ*^ !s/<"#6teX,t;BmX8Td<dDhu+<B_`@pAbR%!Wj&p9MJQ<&>ortP:<F?'R2#R1M^:LdphO/'27s8W!% j/H`I#6b22jo>bi!Wj9&:/+i0MQkS/rs/"pBe]hr!s85t!X&oJJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcO0u#7`"A<,IAZX8T.*YEW]W$O6e9p]([+'dY_2CPSU`WiN6!XU21nAiCnI#m12/qZ$m*(GA9dHB>#, rN-1+Q#/eh.3B<:k7'6S#R(;5!Wi?'!s8]aDQrm-gqp>4hq6,?==adZ!<N?14Ee4,kKgcD_W^^dnX*&i "pbPElOEh'"Uk\?!rrB$!XTG`2b[k8Q`I6kricp?ZEL7!Li$-h:/=W!JXEM:XTtk\<[%kT"9\8r%L<do 1Ji(W^!b';Z)jt,qlM!]b.=0V3#2Pr!<N?@:6!]nhT3.0dIR#(e9j=c#7(\Glj`n'!t,A;!T3q`!XKAW ,t`-<Wr9%)_qj"hQW>RCli78"/Q$_ZVm*E'XUhq6G"OD-%0HbB(*GSBJY)hB#d0P13!]]l!s82sp&HKE #nRk-=*g[P\[\`CY-,(Fiq*!=\U@=*>Dg8koAmoq_qj"hQW>RCp](L2-p_!WMP0mL#HNhj.LHC`!r)a@ !WrN-,@-f#p#X?(ZJO?`[;%Z8!!<K=(d2]-gs*[DYe&6&Y60DO-4Jo7'*87="Y=5_nFYVWZF\rIcDFr' &+fi'$6M6Z!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I9%d&"U"r&!"',[6",DB ^=BKjXS]%'L0lqP#R1A4q#C[)-;/N[^!>$*rMp$]D+c/W(D[YqrXSu=ljj1-#R(A1!\OKT$5Og=;h)+Q oZF>6P[mK<&JYc[":c:o2-PdIqV8]^WL%!`4sqBi&I]'W%dOW?$jm7E"9S`+!WrQ/*'.8UT=)SBX/?Q+ US=HWUmusL;a45sKV,QgbP\CGQ#B/3"p>&2p](s.!WiH9,Wo(HNhsG0_7HtUX/W,sWum",9.D5.&dAUS *\'HjQdkTOZ_sXS;+*Aa*>]1o%1_\7#7V%I#6b54!oO%a!u<IZ@YUboXSo1)P%@<9&eto^rW2Qi"p"`+ (/UFhrr2uCr2U?[>rWK*#mLG>+Zi\FQaOa0WsGVS=Y0d[!s8Su!;HOF!<EQF,ViJ\aoDD=eZc$NVkfW$ ?rBBW77KRNL:mQdh6j/DAP=Nc'b:NM!Vud$)aA#)[`R(*rMp0qFA3k`"U"o%!$hd^*\0a#U$qm2[AKU5 <]:R(&IJOK+YlQ$OL!WOXf&+eDcAFn*#oXurW2-]'*o9p/PUMiqY/@@V42*p0G,'3#Q=bu!!3]e>(Qa+ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mF@GmJmG%6_)ofi8aat!e)Hun,NRl(.k"UrT43N 3=5c;!"/l[Cm)-NiPTLa#6FT"$jf1UV8:aDbF`Q<#Q`HU"Um>;f&Ya%hqd#:ccE1n.LZ=Z!sA]E8s8$/ joV,-"6ojn%5`7)[DgVKgu%,hjohMZ*X)T>!"0TGPH`0aiOXqP3!A%;gAh<V*GsR0joiM;.gH+;!!EKF 6[QWHjoU)b"SVlt#sYBejoX:=%e0Ph!$D:V3adiTgZ.,Ee\[Sc6R3?P!<<0@6=5;Ab2L0R.gH+F!!<Zh J(FS\!jaokm/RJ5=GNiqh:RQL%fuG*$49(i_pI/ubB,BE!!1gS$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-\!"/i3#n8"J@W?sZS$;h*$g$9hYCg%< ('t0I!W<!(!XTJY.o0r9^&>\Ji7YuC"b9i<(^UQ7$l'3Z$OR.D!s/H&!<N<E5>=pVFH3``rr3VnU0oDT "U,#5-V739AV-5Zde<\?#.AY@.3]ZCkmR_)$jm1A!rW-+'eW![Dh4.^`6AqMlhKYi^9=8oIVN.b6oS@s P.LV,#LUD\EDS\?%.jN1":,MQ-UCdHEHce]MNsjDr4`6jrr3tgRp[ie'+4sT1f$tNDMY((hu*NSkb)EC -6O-9kmR\($O?n<r;kpY#6G&7$9i3`])BADhZ!N[je6'2#R(;3n,N[t(bRg:=)<rq^CTVfa/FGc/dVR^ "plMTI%C5N#f+]hKNUYo('=41p&H6>#S.V&8Q]A7H'#AKd+?gscH!W&Nc.fW9N+YV;IP-_hZ!N[je6$0 "pG)0qu?s,&/cc`@stEV^B`0+Uj#g&-4onO$NU;1'K8][<bdDgao;;Pq6tH+#7(P<"scoM?@7X$[a>$R #P59B3tVl+"6KRk!<N<@4AJUQE/LmKrr35lX_BKp"Tni$!!393(P2X=!.k3&!.k3&!.k3&!.k3&!.k3& !.k3u!!`uZ4B-0PS#cLi#HsA*1^aNk!r)a'"V2Fr3a-crXK8P(r2g@BZ&rcl.hr0f!<<0!!!i]D/k')j O//rWXTPnuECU*_*u5=L#rMtn"Tnl0!Wi?'!s8]aDQrm-gqp>4hq6,?==adZ!<N?14Ee:.lI!8J_<(Ca n!6]c"U,)9km8"1$3gS6!!39,#95QtC422;XK]&E_TgH?W0;sV?V34;4?l2@I$Lf3XTtk\<[%kT"9\8r %g<I],<&M9LmOU$T:r*ZWVik?]["X2I7k^e!!*-()GlICo\mp#YKlS0p!J(H#R(D;kQqA!#R(;3huF#a #SA"%8oTllrN-=Bh:]u<<[nFB!!`rd<.:RDZa0M2&%eHU8M(nk!sK)K+?3YXT)GbsY+'5f$O-_8!qu]g !%80j,W&83MQXM#[&^@6YcOe&Whl2*;DfLfGcTlfi6/=Ah:]u<<[nIO!!X&a6!88dT_tnsX,UF8$3p\8 p])Q@!s8ZN?(9sKjiY!:hV6GcC,cn-!X9&G3,5,Gf#>/'\(fQ\"/o]b&H2^m!##D9"9g>fVss?9`Nm)4 g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0uAn#R(>5p]([- )_ONfNk+WAd_W0cWsXJf58at?#6P#.!W2p'#:<,gW4pU,Wr8t#Nb_96!uDX^%K6_##m(A:"TAHU!<E6/ (*YD1J$T+Hb-%V+A5+Nc'b1EN%2U3F=GOHci4Z.iQt8lT/0PlA#mgqElNmY!#6b80!tG>8$4n"-;0JP: ^W!:NT+[BBI"$KnG\0i;/jic^Ml!u*Wr8t'Q#B/3"p>&2p](s.!<N<2)(@U@@sEiuVmaUqb.k(VWuR@F ?qWa=*!cf`*@O-cQdkcX[&9g[<_#7t*u57`#lk7t#mU_A"pG,3!s7B\#Qkho87I=N^9%:6$Beso.2!@+ #6Fo,o)K!r!WrTG;k*:UrrC4>Wt0_d3"cT)"p,2V4&p?g[DVsD#cE2U/Hu@]!s/,rq>`,K!<N<:/4X3+ Yh]9YjMn9uT9"YJA5Y]J2)R0C<J/*es6mn)P%@<9&eto^!<N#s#9,m@R^U>gZMgg/T6*dM#R(>4p])QE &frPnEM;jufX7TLCfWJ+'G1ZQ%3@,e?\u&J_m$);SS_Im#9b3+$N^A1!TsFr#S\C59mN`7pX$.@RqGSP &Jbo_rW2`n!Y@+jJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY8H4!!WNNA#-]\h#-:9 O?!a=!!E<;8Xe]<jo_&5$NS`X$NhqrP-`Kn_egt1!VcX'#X3p9^X_DiUN9'8!nRDW!=phiS_DuO#fEp5 H=9K'(Bs[9!tIAIh#6@:ShC31!!rlP4&0@:RBaoir8n-pH:8n^p](^<<KF9'gZ-#1AO$G#h>l:1!s'EZ g\p7;_/1\-!Tj@b$7&;t_u/WuIk1`s!!3HkW;Yi[gK+pU!:^%#$SG_>W5d]L_4#LH3[,.>!rW*,$nb7o R`"%!D(>hlnGiY#2h0EWjoVkM"ml9s**@upa5,C)5S!nj!"&rnP.JljimEKJ'EA6i!"&cR@u[Y8i6?R+ $LIhF!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH-7u67`fOq#Cd'!sJlE2c3sr GD`-m^C0B$m+SF[7NrEP"p4`'#Qb8D)_+X!Kt[H""6A=\XojGd3>VSu!!hfq'F+gH"Tnf,!!!$$!ZsX$ :K_e"[+tZ\''>or.0g"Z!sU)C:fChQQ+GB6rr324GXa5-(_>g9!s]#5!r`3.!WjN7A9iliTt/5$')MY- hS#J6F'qa.2_lm0:iq`0rP&Tb_OkgE3[,")!"T/9#RhLs2FphVC2\9HOJi#k+O]fZs4a>c4<tgW#7r[d :fhCdUVYd_s8V>WAN)"Y'FX+1!sSo3!r`5[!!`Q/#RWb1N4Su&!8d_T#N_[f.L?:^!q60p#TPW`8Q]kn r4`d,i5_dF;_A@X"9o/W<d^J:^BhX"YD$+H/J\E^!;6C9#8.t(5ZM?6Iu^52`R`M[\YYF8Al:rN,W/"\ 78I<>Z/5K[#N_Xd-jBhW!W2pqb!7UpkIrP&Tb`h[fY4sgj8!"/f/!YdRe9ic"aW6,&='`#4[3<ofo "U$#@>$5m#R'b*7s8N?']Qusb'FY0-!"/f/!ZF0r9iu@lYg`UO#Oed/0a@ja!r)`s":Q)u!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y,'!"/o8%MpNcBo8jgXfhT(#LCo=X`[#T "oSK#!!i]D/O`rhNhroWXTPr$Gu"Mr+VP1]"mZ?p"U"o0rW4YP!!36)"Z:2%p[m7XZ,,>MbF)H`$31)/ ":@;:](bU@]s#30p%Ig=9,.L2"Qot%"Tnl/!<`T6%k:+`L6A++XKf_WfAb;[L20dX2^odo.krqaGEf0, XTtk\<[%kT"9\8r%g31L'd57t<b-/rKohe!Wr/t@\&HS8O^0OF!WiB*)GlLEp#XB*YKZ>+p<e+E#6G#3 k6;"k!s8V_!!iW3&K<#gE0.*uXTuc"fuo^_.1,>@#7N@jKrMDfZi$p9\=I\3//o!""Ul.h3*h*,rN-@. RVY"n#6Y)0pAjme-kI[e;eq#SZFI<IXg#(*P(.Ug>u3^:*=t5BQ-7b+aKEG:fuo^_.LPqN"qi=M=`]In r2g4)NF"(A#6Y,'!$hUJ!sBiSS)s>)b-eP3gX3ED3"u>o":,GnBVFSEbIb$egu[K"c$M\j!!!$#k5Z.s !sAcYAZ,%iho2n4hqHAQ?SN)`!!3KL3._-^!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t?]_V6e%Yd] #GliL.0p(["8Dj("q_n,7sVB<s8CZ_r2U0W@mhIX'FFpD!Wi3!#R;\MGc8C(e#NAI"-74g,m+nq%1)/% !!W?(0EM7U!!3KC+tllEZN'R>Y,7Fo9e$_i%L*%F(*PD6Kt@<G^oFB$D+m;O,T7*s"U4/q!!W9&%fue= '-8YrClbp=_n2nBO:l\H@piSF:-gQ[)_X`hGF5YPWr8t'Q#B/3"p>&2pAbg,!<NK:(a:Rq9O2RkTXrM" caWhQ*hA(/BNdeO$O77`-9c+.ebRk+Vl,MY83\LF'aP!Hl37=o!s8W(!rrA[!!iZB/P'?*VS9/1WsY#$ 9IUSi%gN.:!V6:!!X&]5+B>!&s8Vu9r2U?[>rNB(#6b/;+Zi\FQaOa0WsGVS>:^!^"Tnf"!;Z[J!<N<* +[g.;][cTNgW?q)VN-":<_P\0+X/'Q+%h($s8W#DWKLgd.2!@+#6=l%!!aH-BUZBOe[#.S#G6*4+:&,R !r)a@#8/(.7rb6kqq/<RTPRXf&/5]`!=]tu3Eh';m*)o;VOha18HURk)%?KG!!26_'*o9p/PUMiqY/@@ V42*p0G,'3#Q=bu!!3]e>(Qa+!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mF@Gm/R;"3+n/T ebnP3V,&$4nGi[m'h=\PrT43P4UV8@!"/l[Cm)-NiPTLa#6FT"$jSnDT"NS6c_u+f%g1D`#8'7:P.oc, ^BU6R;)TI'!r2fu"YG)UrT40Q0*CA;#6bY`4BHs1dJW,1c`;S!+p7W@$l)]uW5dTP^mJn.#Q`c^gAh<V *GsR0joiM;.gH+<!!NE9034%Pr8n'1.g5SH!XV)irT419=V($&nc0.*,>O-$`7Nu"QWc'Y$3L&($NqG1 ?]2SS_/1\-!V$-l%6&dfrT40f3X+mN$630'W5m`HM*MRPp](X)228BUf&>,K>qH'`!o*b_![V?9Y0>hK H8Z,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ES"0$NU81":Z\A 9NG_MQMeJtj8T&`d#V<])A*;Yr;[*)#SA"):2GZurP&Htjj:F<O((*_kQ:kh!sAN(%fl\2!!*-&+$WIq =`f\2h#@<dk+Z64#6b54"sl`7;IFm;]$KjErs#uZ81Yl!$K_Ej!r`3/!WiKV>C;[,W3s=`o+M*'rl^pR ;*cr`)&Eu#&OUAm])BAKdDDMq:c]d/oDfC&!sAc6%i$'44%r[aEeL%^^ECM@h!<[qGXsP5'aP=*9MST$ L7uH;q#CBXUM)\;*>&M=!s/N*!WN2Z!!`Q/#RWb1N4Su&!8d_T#N_[g.gcI`!q60p#pD5p9NuG!r4`d, hoDUC;_A@X"9o/W<d^J:^BhX"Y_H@M/f+T`!;6C9$QCTQ8mQ@nT;o91ce$7DQZu_#.O#iI%NmVn6V_$: YMT9Y#N_Xd-jBhW!W2pqb!7UpkIrP&Tb`h[fY4sgj8!"/f/!YdRe9ic"aW6,&='`#4[3<ocn"U#o9 =&s$ePI&?us8N?(`e7&6*"`G<!"/f/!ZF0r9iu@lYg`UO#Oed/0a@ja!r)`s":Q)u!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y,'!"/i2"pYr'>'c[9X02B&$deD5m&jkO"onZ* !W<!(";WOT>BPq#Y5PI)];'jU"u[V<#6P&2kQCec/cbqP!WrN.2/]Ymo\@<g_;EngR92!I!!*0)$9`[H p[?\HYJ/lcp?n,9'EJ:;l3%"g&d&4;!<E?3&/R<1J"3=3XKAkY'&hciNaY!n*>K(m',r/I:i_`!rN-=) L/oK*"p>&#!"T,6"UGPN)^I+,=`&VKSuMXi#d:VI_kCp/%g;k6',j`0f(J4M\$*p;p@cjW2?j3a!U9dd "9S`.!Wh3Z#Qb8D)^S*qOK/8]#K,BNbEl6Y$1%Ws%5_CLYdh9Pr2gL>RrLkI)@Q]O$l0sF?%JUGXU)(u D)ht0"Tni#!;6C@(,]'5MOCHLZ`U=2Z`9(,<C8Si)\iki"Y3T'Zbs_rXM`lIbEl6Z$MXT*&h$%KF,HXg XTtnd?7H9e"9S>u,Q\&M"=%3Ajn7`X[BeZDdC!^K'EA.9"U?\lU?Lae^9P&tnaHeGPti8!!!*,`!##D9 "9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY); V0uAn#R(>5p]([)#S.Y&A#Au"s7jS2WsX\k:Gs72%g;t8!W2p'#:</jWP?j2Wr8t#MeGR*"r.[V"U"r1 l3&dC!WiB'!!!'-(*YD1J$T+Hb-%V+A5+Nc'b1EN%2L*@<J.p`l,0O#R;u%j2CBCLrWE3'lNI.g&HW"7 !Y-5(5[fGF^:q+[WLnPNA6;Dj4"_]q'+YHn2GIh?W4oA3Ws=o.7iMX8"9\>t&HMn7"UY_Q*$d1(@=kDr cdTZ,WuIk-Q]-&h0F\=#*%!g\QIl&i\>Q6f?qNa:,8C+[rr_QirWE0%rrM$X#Qkho87I=N^9%:6$Beso .2!C-#6Fo,o)K.""UGP_>+P9bs7=))Wt0eg3"ZN("Tf)U4&p?g[DVsD#cE5X/dMXa!s/,rq>_T=!X&ZY ?C]sOrVY$PZ)amuJn@Y5.j#N9%hB6a5'b$ErsRJ]P%@<9&eto^!<N#s#9,m@R^U>gZMgg/T6*dM#R(>4 p])QE&frPnEM;jufX7TLCfWJ+'G1ZQ$l:0E<.Cn9g:aPaSpF@."?e1U$j6J0k5Z/$'Heu%H)^Z7d'0@9 B2L>p((^`M!VZQq&2IF@!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9a^7f"ToW'@$8V/ joi283"lAa!!E<:7[W67jo_,;%04rZ$NhqrP-`Kn_egt1!VcX'#<I1#]%#ffXFa[k"5!SZ#W@mUb1Yb( VZ_*4+q=\K!!<6GE81?R!hM%IjT#Gd&Lp\6`Vej%h:'9I9b$mu$kuNmV8V*J`1M*J$N])agAh<V*GsR0 joiM;.gH+<!!NE?3F\>ur8n'1.g5SH!XV)irT419=V1*'o)K1&*CP1df%]*Ca_WR:p&GF0.SbAuh8*qY #6F>p!t@2=f)=_4ZT89W!"']JLT&8LfSMj(!VcX%">>/#^XM/pY'WtG)$J^p$3DM`NNUL`c$D8Tm/V_< JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-X!#PnU.QBn%DMl'=^:qA4 pAb0dXDL-K)\3)M!!iW3%i?]iCP]\&^B<]cg;4)`Bg*76!WiDn!<*$!!rN-4!WiB'!!!$$!ZsX$:K_e" [+tZ\*9Nu'.0g"Z!sTu;9i,#:P.Jm%rVul2K2OQR(CC'Anc8Xi!WiH,rWN9(rW*3)"9pi!NOf#&!Rgr[ s8VPpHV>t3'*eL<!WrN`B8a>!^B`0'SoIRf+q4AL!<E9#"9/H%!WE'.!<<<>-ot(7HB5MD]"IsU*6bX? <')NH#nAX\92f>OT>B.Ms8VAaE'l<%'*\@9o)S^i#6P&2"U,#1!T*k^!X/i:5&-%frP&?hrr35bU1#S\ "p>#"!"/f.!sB)]5Y=j\FI2p?&*_lfUO,ii#m(56#pWJuSc-;/^s0->>X^7]!qu]g!$Mjt1d+TBI'19$ _Sk6Y\!M)31`?K!!s&B6-9"1b@=,06rr35bTjK2P"Tnf'!!``?)'qa^IB3=]#LUPeG?$gR&GH/4!<N<: 2bZqHC58b0rr3].[raV8#6b53*'mP%@="!?`o6do#QN,6>rF)M%/g4t!;lls!"/f/!ZF0r9iu@lYg`UO #Oed/0a@ja!r)`s":Q)u!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y,# !!s#]7r!mMW3EG-riHRHjnAE,K0BVC!!*-!!!i]B.6ppRMkR<PXTQ58MIZfS-PQgb!WW8m!<*!\!WrQ/ "9\f.!W`<%!!36)"Z:2%p[m7XZ,,>MbF)H`$31)/":@55](YXG^9>-#n+Q.69G[g6!<N9&nc/^l!Wr?' !!N9'$3C80"qDCj7Ve$arN-+3gCi>kX_g09"9SZ+!='/R,"HO3X8T.*WeOOu$3gV8r;Zm"!X&E)!WrK* rW*K/!<N?,%O4#5Bn2ACX/u0")PhRH'*SOA!ub!qde)hN\$*g1o_-XX3XGiirW2Nh$NU;1!s8Z/!s8T+ !T3q`!XKAW,t`-<Wr9%)_qj"hQW>O@nGisu!<N?*'09Zf\\,Sar2gL=QYf#:(^gEL$l0sF?%JUGXU))" D*&.3"Tni#!;6Bt*C=D&Vm*M.riQO1\Xn+D/KG?*qu@6K88t9/\@AZYh:]r;<[nIO!!X&a6!88dT_tns X,UF8$3p\8p])Q@!s8ZN?(9sKjiY!:hV6GcC,cn-!<N?+.q5.8m+9(Z[*\+3"88m(-2moH!W`>l!;lls !##D9"9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU ^AY);V0uAn#R(>5p](O"!X&ZF;3g2@rrLQIri-C-QXrcT/0Yi9"Tnf,r;[*.-;/QZ^<tH1rMp$ZCe6#Z )A<J\!W`>n!<3*"!riB%"9S`.!Wi9#/HQ7p+tllEZN'R>Y,7Fo9e$_i%L*%E'HSf(KY@EYb-%_4I8ia% /KP9%"9JYq!!WH)!WiH+"T/?/!W`?9-pC[YT=M'%Wr\]/#@'hR-lWQt"TAH,'.?+JIA4=NWsY,17MuC5 "9SW)!WE/u!s/N)!WE'/!s]5H+[0@mZ,+o8XK/AuWuR153Y)N-)^IISQJMT&^8\#rD,*MW-l)sh!s&Gn !!WH)!WiH,"T/?&!Wh3Z#Qkho87I=N^9%:6$Beso.2!C-#Qk).p&P'm$O$eH'e`sio`+sW^AP#BJmLDK $3gY8$m@]4F-j;PrMp4%J6OZ4"pG)0pAk$i"p+o2#<-hErr3_sYc=Y"VNZ+#0bt9-"9AT,"U6f)_>aHB iNA>T9IUSh%gN+9q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bFVP%a+2\6Z8$3:JK+=p63 Wq,AnYGIhH>tYDn1*mM9"Tnhr!;urq!##VP+>$<5WVZA9Ybdh%;(rRt&-r18pAb7+10T80JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$$L@`r"rTXJ]B&tQ#3O%&F&!)Dnc/b*6^Hd2jo_>I&HUG_ $NhqrP-`Kn_egt1!VcX'"Z17`[F4-cZ]AiA"P<\U(hVP$joN_`"&:$H!VHEo)/%_&joV,-!os=e!=USi XPi'tjS\-@Ii\=b$kc0\T>B7Aa/FSt&-:VfgAh<V*GsR0joiM;.gH+<!!NNN8oUKNr8n'..0K;E!XV)i rT419=V1*'oDf:&'fKTugu[SShQf]bo`,='*^O_EgqdhX#6F>p!t@2=f)=_4ZT89W!"']JLT&8LfSMj( !VcX%!\&)Y\Bs0h]UEsD3==OA$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT %Mp?R??r.@^Bi',XFXPA///-X!#PkN*\9HSB6U&NZb!oskkkDX^l2Vf/fP&o!!iT0$kjaWDMl.+^B<B\ kL^$IKifuG&dnjA!VZR7!<E6("q)"[)]0>*&e,'J!!!$$!ZsX$:K_e"[+tZ\+QfD+.0g%[!X0]084los M7CX^o)A[>W-qo</JeWq!s8)p'EJ=@#n@^m.4cSV$3LD8#n&q2Mn&`#!S[8\oB!oR@lk_I%0Z_4!WrN` B8a>!^B`0&ST%@b+q4DM$ipPA'HS,+&Io-P!s/B$$ipMB*@a6TCj1VrS?Vq++O%0K>!FSW#Ri.K8PNE0 RDI20p]('.R;Z%e,nL7a!s/#o$NgP:#n\%!/12DL"on`(!TO.b!X/i:5&-%frP&?hrr35bU1#PY"p>#% !<*!,":,DK,!](0?Yk=er4`d&d^G<T8LOiG"9o/W<d^J:^BhX"Z%lRQ/f+T`!;?I;!>6_=6;_9BY/JcI oCg>$G>g[Q'*A:;!<<]Y2aC,HH`l6)rs.SX?RQ*^!s/<"#6teX,t;BmX8Td<dDhu+<B_`@pAbR%!Wj&p 9MJQ<&>ortP:<F?'R2"U"lE4\ngTCl5L9ea*)?s5LA>?qE*n#6b22oDfU,!<WH-!s/K'!!*-&)E^bh =E'/%e,K@Pn#^:Y#6b22p](?u$l=KqJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7BXTu%o BJ^)%"9S2q(^;$>;/CoX\@8iMYH>Ihm.TP(:`TlJ!sAK%#Qt_a1e221SZ_pn"1Yh6M?dZ[-P6Oe!s8)p 4otfh"UYn\,9n';#6Fr/!<<0'!sLQ"YkReF_Qgr7fZT[b/.)@X!WrZaBVFDCfYal#bMi!ZWbF@0&IARA rW2]m('+F="UY_O&ec#r%L<.<#SS4.:N;PtrN-+5`s0#FG>'Lu"9&?-!='/R,"HO3X8T.6WeFIs$3gV8 !!**%!soJU+rM""rWE-#%KZ_7$5k9S:hkKJXfS_+r2h*9Gt8VR"U"oC7X;K&h:&m;][Q$8gQP\b(C^TN !W`?'pAk0n$Np\C&J>cm(D@2]"5j.b!XKAW,t`-<Wr9%)_qj"hQW>OAoDejlrW3H1#nRh%:ir8A]t1NI XUh[s@l#5?#Qk5=(*GSBJY)hB#d0\73t)Au!s82sq#LBp'-9SYR&[L"X09(Pcc2,Z3unt@"T/61*_:7D ZadNI_V<Y\P#Ee9p](L2-p_!WMP0mL#HNhj.LHC`!r)a@!WrN-,@-f#p#X?(ZJO?`[;%Z8!!!$$""7HA hsB4<YHl+#ljNHuGWliQ#R(82!<MoprrN*#)?U'E!s/K'!WrQ//7kaKo\[Wn]&25eVI)%goDeq"+#niP JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Ws>JL<[e:X"9\E!*!$*C";O1DYMo*Kk,5)R WN2J;=\;%<,S14b"9SN%#R2J>ArWn/c`6rE"."1@8-_1+)[c]L!s8)p$N^J:$4dgi+s7X0"o\QX!<NTD +tllEZN'R>Y,7Fo9e$_i%L*%B&/HKcK?!rkjh7X`ODRoq5qa,c#mUP5!<Vuq(]a[>!sT/G(Dmer$j[%> !Ws5l8S*aW]r_15!LIm?=#_TM'F=mE!s&H:-pUm_U:U9''U<Q)(^:*F!s&K-#71eJ%hT3V"U"`*&-)b8 #7MA!6sb;6_X?@-^TdX:*g((t&-raZ)_bWfl2U\6Z`'=G@STKU-km*t"9JT)p&GU(!WrQ2%MK]q&Io-Q "Tnha!!iZB/P'?*VS9/1WsY#$9IUSi&-i7;!VZR)!WrQ/%2gKL:jo\Ds7b$Or2U?[?8iB#"p4o8+Zi\F QaOa0WsGVR>;$6d"Tnf"!;ca$!<WN4%Qo*Wrr3_nYb[eNIrJ[]-4pXk"9AQ+"U6f)_>aHBiNA>U9e$np &-i4:q>^a>5A6Loajm]qWs>8=9cs]F"9S>u,R4r'.n=TQn,(bFVP%a+2\6Z8$3:GH*@OL(XoA4O\>Z*f H<CJP7lV_*$O6e5!VZQq!<N?%!u_4C!WiB'!!j8]/PUMiqY/@@V42*p0G,'3#Q=bu!!3]e>(Qa+!.k3& !.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mF@GlMqD#-X!1thVmPXd^>B^+p[Z=!t%&Jj8J*B\8!f1 !!CgQ$NhqrP-`Kn_egt1!VcX("!pupUrq`N_PiGV'*6ee!s'K]g\p78_J93*$j-&$!Z>Y*rT40Q/ct&5 #6>>mD61Luh#-:8JK=Od$jnn%M6b[md^Z!&-jnf2gAh<V*GsR0joiM;.gH+=!!WH=6#VstfDOb4GU*@b !!3HkW;Yi[gK>*X!;$7""rogDWSH=U]r#<d"n_j&"s-'KWnbF,.gH+F!!<ZhJ(FS\!jaokm/RJ5=GNiq h:RQL%fuG*$3;;WMlb+ZhT<$g!aQcKh#Ic`-"Dq;bi$`l2@AgOJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcO0u#6bSR,<fFZT)HD0bfd)=>!abS!VHF0!soY]025khMO(*G^W4sip\`LAK471p$iL&2!<ic=(eJY* ^&>\Jd-L,a#Krf_9J[n/$2su"!$)(A"9f2N-8[_<0.S=e&-`+7!<N<E5>=pVFH3``rr4,'U0oDS"U"l/ )DslQ<+grq`6[9+rp%Y.Lh&k!&.8[EoDfR-#7V=f/j`K>5:I9M#7D%V6Y_FgrP&Bijq?4ZRrV4R'FkBN !!*-'"#jkN\c'8Je%hJk:,jC*rW!B.!tQD'5;Xo8)\ihe!rW*,!t#VY.7RHNCj1c/r4aB"[Z4]^0H:?* ,WnLg>&TV?a40,<rSGAbHW`<I%LE:?oDf7&$4djs1e(YE2^&V4!s/N)irB;c"UGH!C5fb&^B!-irs.Y[ ?n)Ed!s85t%fl\4!s]AT,</V4Bl\fgY5H$Fh9)aK?U5n@!X&]6,?B2_rP&WRc*<%/74oAXpAjsg,67fZ /3QI%AUq#,kl:\W^l;MW.2iTr!W`<%&LKG%:18LPhZ!N[iLjO,"pG)0qu?s,&/cc`@stEV^B`0+Uj#g& -4onO$NU;1'K8][<bdDgao;;Sq6tH+#6tG8!Z3mi9ibhXXhr96kR@L]dBSgM9.US]"p4o!!#5M9"U55: "9JQ'!<N<@4AJUQE/LmKrr35lX_BKp"Tni$!!393(P2X=!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`uZ 4B-0PS#cLi#HsA*1^aNk!qZI0"ViCG:iVc6`OrXaXgQ1#k2W+G1E6u5"8r3*":Q.s3*UcuY5PI)[C`fG #DQ\O+:\b`!qZIU!sJo;'dY_.8M_G!"9\c-!!36)"Z:2%p[m7XZ,,>MbF)H`$31&-!X1/YMSdKT^TFfU bhMNuMHr:j'F4R<pAc!1!<NE5'HJGH.kr_#&I&7D(FM(BGa5?.XT>u9&s@*(0,b/u!WrH(#7qas7rFBg rN-s=L/f?&"p4r-!<N<*&L'&'2C'"B"9JZ,!WE-."qMRr1fA1KVQ-c$r2h*<H:ShX"Tni>4DUM.a2PWm [DL>Ki2_)t1*7&0!WiB'p](g*!<N<-%i?E7-nR8*)[lf+!!iW3&K<#gE0.*uXTuc"fuo^_.1,VH%KQV5 ":>hd01KK(V7a@KqQ16^==>!q"p5#;(*GSBJY)hB#d0\73t)Au!s82sq>gHp'-Kb_T!#K/XKot(gqJ87 .1cdh"8i-0*_:7DZadNI_V*;ON):u0p](L2-p_!WMP0mL#HNhj.LHC`!r)a@!WrN-,@-f#p#X?(ZJO?` [;%Z8!!!$$![Lj-dc90*Yct[Yf*CfcOC'mk'aaj@!!2ip!s&H)"9&E@"U"r1!WW9("9g>fVss?9`Nm)4 g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0uAn#R(>5p](9p rW3oJ03*J!^sq;HWi)_pSX+b7>"17a%137@r;[*,*&puCS$^/7rMp$mM0ES;=@FeT#R1D6oDh,Z#S.Xk .m-Hq0H:E%!WiB($5Og=;h)+QoZF>6P[mK<&JYc[!s]/E)G#P*s8Vo<WhGi?G@FH7.2ij."Te`+pAc$3 !sJi;(F1[j-m9E>%0m"=)DtK9Q*SB/rMos`EY22'*#&hd!s8T*!YZtI=FHpTr2V60D+,9F!s8T+"UP_T (`X\F*"r\_"9S]+!X&Z3%iZrW;1GkAs81N_r2Up#BKZn3$P!du>+G![s674sSX5(L?V<C')%[)W!WiDs !"T,6"U5MW-oNb+*Yf.k"p4i+i;a,c(+i'dL8M\drMp9gAP=Nc((UWO!<Mop%fuk=$5Y3W<d'qKq<cbK Y5G=2JmC5C"pG)1$m@]4F-j;PrMp4%J6OZ4"pG)0pAk'j#6=u7%MM3Za8Z)RhQEN.CgpC71`?`-"Tn`+ !sJlcF2@kU$fS7OB2:#q)%[&S!Vud$)aA#)[`R(*rMp0qFA3k`"U"o%!$hd^*\0a#U$qm2[AKU5<]:R( &IJOF&K2l`Fg:uHl,0NtS!8C-@TZ,V+VtUmr;lZn"p"c-"U,#2r;m]7!!j8]/PUMiqY/@@V42*p0G,'3 #Q=bu!!3]e>(Qa+!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mF@Gl2V;,5`*_8gu7DMa0hU0 'ERe*!sC<2j8J*BbEum+!?;3o!"/l[Cm)-NiPTLa#6FQ!%2M*:Ohp&6d(lhr.LQ:3!!<9NGME)Y!Obu/ )?TL1!Z>Y*rT40O/HXo3"p,N'CQ5XJr8n$2+8GmG"<pHYU<r#VbIX]I*<k=#gAh<V*GsR0joiM;.gH+= !!WcaB:cTVh#-:9EutGW!!3HkW;Yi[gK>*X!;$7!#UDraY2.a<L0cMBoDf4&*^O_EgqdeW#QaGq!t@2= f)=_4ZT89W!"']JLT&8LfSMj(!VZR#)GkdR`80D'`jGo'2\H2K!"&cR@u[Y8i6?R+$LIhF!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH-7u67`fOo`,g0"pbYW6<dfELmG3Y_oL'Sq;fVt K3C&Br;[*(!sJuB7W=L(rP&HOeE-!%fsm8^9f=1*!r`5q!$)+D"pbni4AAdP83f*^)%$?D!<N<E5>=pV FH3``rr4,'U0oDS"U"l/(+hX;<G7&o_SsXEq>Ka:\qsZK(_I)XoDfR/$l'g:8S3[8@m;">$P4$l7r*mj rP&Bfee5T`F]LIA#R1A4!!*-'"#jkN\c'8[e%hGi9fF1&!!!$#";NLZA5koS.NfK7!rW*,!<i`:'J2XI <b6N>r4aB#\W^Sr1E?c-*]62T>&TS>_oBpKrV>[-Wd.;d((UZPoDf7'%i?KL;K7eI<\tNn"Tnf,irB;c "UGH!C5fb&^B!-irs.YZ?mu<a!s85t%fl_6":H%o2+h7rI?C)%\,<uOf"mkr<B2-*!X&]6,?B2_rP&WR c*<%/74oAXpAjsg$3:/C0LAE5BS!J<rr35oZ?/;Q((LTK!>PS7&LKG%:18LPhZ*WTi1OF+"pG)0qu?s, &/cc`@stEV^B`0+Uj#g&-4onO$NU;1'K8][<bdDgao;;Sq6tH+#6tG9!YmL\8l8uEX22`qc4&n5n(kpJ Aj$qA$O$S(!#5M:"q(kH"p4i*!<N<@4AJUQE/LmKrr35lX_BKp"Tni$!!393(P2X=!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`uZ4B-0PS#cLi#HsA*1^aNk!qZI0":Gth2d_NZf#bS2Xg,:H`n.8;:,!Xt"T8<* !XKDY.St5Or2g()[CX$VUjQ2s)%[&ToDh/Z#7M+d3`U0@;`#?s"p4o,!WrN.2/]Ymo\@<g_;EngR92!I !!!$#"=6cdV6RG9X0Aq>^YI);N+5$q$ipA1!VcX3!<E6'"qr+43'Kf1:bs+!!=Ko$6=G>0Wr9%#Z^M,= 73i]Z"Tni*!=&i@)'VRgO/r5]-`Mbu*si,S!rrB(!sKZ&<-;8)+USAU!s/H'!<NB.$4e(:>C2m<Wr&n= V0tuS#mCG6%5_:CWjB1@Y-G@F_;)r&J6+QG"TeT(p](9prW3H9(aLq!5tY3I///6F!!iW3&K<#gE0.*u XTuc"fuo^_.LG_I%fuh8":cS387?b*Wjf@:XSf12VghJ^%giF@"Ul.h3*h*,rN-@.S8C=r#R(;3pAk$i (BFR<![:3XU9qD=Wk-j=eurmP(^1$D!rN$/*_:7DZadNI^XgZ@L.im"p](L2-p_!WMP0mL#HNhj.LHC` !r)a/!WrN-,@-f#p#X?(ZJO?`[;%Z8rW!B.!?b9ra4o1gYHP7?]Ecp1WeXqG,nU"V!!2lq!s&H*"TAQB "pY;7!rrB)"9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1) OL)sU^AY);V0uAn#R(>5pAc-5!<NQM3E:'aZdZh!WhlblSXPj_=$IlC%0m"6!!i]F0M,l5WkYS4Wro/g ObO*a>sTPA#R(>&!"9#?(*PA%@!Zif.hDg]!ZMI^+tllEZN'R>Y,7Fo9e$_i%L)t;#7(o.K?sPs&_=%[ TUV<lA5"g-*YSe]!WiDt!#G\?"pbkf3)!4;1aO"Q$jHhT4'mZ<^!-DT!L%F69-XoS#6P#.!<<07-pUm_ U:U9'.$e^=(BjpD!WiT<(Eb%W2EWQ3&-`7?!s&E(!sAf:&K*'*T'ZLWq8rQ8"-7+Z'E/7S$6WB>nc/Xb `i>i+R[A&!7P#c%%Klk8!VcX+!<WK1#oP9Y<D>Y1*uGOr"oeV_!!iZB/P'?*VS9/1Ws=f!9IUSh%gW(7 pAb[+"q(td4^<Q3]$o]V\?Pk2%u":G$O-\8!Xp56<HFM7_u6VAVgqu)#R1G7!VZTk!!`N/$kjOMK$"#l ("fXXEaDEu0d@55"Tni,!WrT11ipM4rsRegP\O#G*#oRs!<N#s#9,m@R^U>gZMgg/T6*dM#R(>4p])QE &frPnEM;jufX7TLCfWJ+'G1ZQ#S7dn7!5g8s7aa=W1f`M$\`Cu5V+&n#ljr+!VcX"!X&Z2#6b23r;mZ5 #S\C59mN`7pX$.@RqGSP&Jbo_rW2`n!Y@+jJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6& bY8H0!"K,\E4X-@hr`kOd`6;V#kJ#u![`9SrT44;aKUj0;AfN!!!*9/oDf7$/8UKUcf)cY/I)=N!"K>_ 97+/+iSE/4RS=k/!SdYW"u(J\rT4-[56))^!!4$Ng\p79Rk+X5!!!&g!!NHC4CF8hr8n'5+T_E>%K[;! >*-edi7ui,H9)cChuML3!s'EZg\p7;_/1\-!U0Rh"s['5b158*r8n$!)YO.4#sYBejoX:?&Ffbm!"02e ;1H"1c&u*W%0H/%$3hP;DlVU/Cb#blnGiY#2h0EWjoVkM"ml9s**@upa5,C)5S!ni!!s?*CQlNgjPJS< "LDD`$N],b$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi', XFXPA///-V!"&`-$St^bAUB?3^AYePmIfVgW,Y'9!W<!)!<N?15];dt^:sKZ$J!D+NG2$='E\C<pAl99 "UPSW2G@+WC1UO>2'<A/!!*-&+$WIq=`f\2h#@<bk+Z64"pG)0!YQe:5?)?M[JdiJfDbgMl`kS"+;bUn o`5d/"q_n+6=l4i`/7SF#n@Xg,>2a*\Ga/Cf>e&jGZR'T%f?;3!<NB,3+n/[rP'2u^RAt42BWA-!!*-) +?s=jG$n!(.if0(r;lis#6bhj3CHtdN;UF$dCko^9f4!u#8esO7pL"qr4`6srr35TSRXGr'ak-:!=T#: 'd>;*EM(CYG"!>P"pG)0irB;c"UGH!C5fb&^B!-irs.YZ?mu<a!s85u$N^D6#8&1=6WIlMT)-26^qeC- NaYL6)?g0F"plMTI%C5N#f+]iLKm8#(BX=2q#Cd'!<O)p7nm-%L9o\7rs.Y[?ml6`!s8B#'+uZP5Ykd7 Y293YrSF/S.0]qX!rN$'#7qb!7UpkIrP&Tb`h[fY4sgj8!"/f/!YdRe9ic"aW6,&=&G`eW3<o`l!s0/i 6:O^WHDg_V%*8AHs7!aU:ELDb#6OQ!'`nRH%h]<W"98E&!Wj9&:/+i0MQkS/rs/"pBe]hr!s85t!X&oJ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.*YEW]W$O6e9oDf7#"UGPX:5$FIf#5#p XTuYMQ>fDG'a=O9#6G)<'-'GXOnc$`Ya98s,o6smoDp3@$5"(,;0A=rE_7Pa#6Y).!WrN.2/]Ymo\@<g _;EngR92!Ir;[***^=.lR\m3erN-@<f$_O,?8E2rrW;iq(]ja@!t6,#5>G9lI!n[;$NU_^3)44AS?)Uj !NUtZ<Zq_Q!s8E$#Qb5B)'_XhO/r5](o`0f*s`#Q!s&H*"UHGJG,g!j0+S<l!s8H&qu?s+,Y)U/SZ&Xf XUh@Z9cFED!s/i[9Q6#aWiZ-#$HLfE_1GE/#Qk)/pAkd+!WrN:+Z)Yc>]#40590pc!!iW3&K<#gE0.*u XTuc$fZT[b.gl7UpAkX("9\lC/kBMuNM!0GXV%_=Uio-?#mLM6"Ul.h3*h*,rN-@.S8C=r#R(;3pAk$i '*/+8"!gQaWOKCHX23WCb*Q0[$MXT3+@gFEZF[QJ^XU?3JP.6pp](L2-p_!WMP0mL#HNhj.LHC`!r)a/ !WrN-,@-f#p#X?(ZJO?`[;%Z8qu?sB9n0e(d)`KjXUDATaL@LC2])Z"!X&2u+9DWK"U5/;$4-q?!rrB) "9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1)OL)sU^AY); V0uAn#R(>5oDf:'&g/ktD3r3!`36)=rMp0\BLaBe&IJ[>!!`W@-9G.OTXt-&ql9sfF&44s%0m%.!=K,H *\BcjLp<dj4;[tu('=UF(*YD1J$T+Hb-%V+A5+Nc'b1EKrW30.4Fb`WrrM/]rMp<oDd#FX-5d0o!s8W" !>bhB#Rq_.:2G#Y7kYl#&-rF^6Yi*qa3jgc!L%:&6l,t/!s8E$#6PYg5?NB.])8TIQ>K&+"9\f.!t5ne /2omh:-L-F$O6b9!W`?#!!NB(%7H-1rr2uMr2U3cBg<@;"U,#G;O[(RrrC@BWs=Jo;`6-M'F+O=p]1p- ":#5C,<].RD,i_F*#B+hrrM*Z#Qkho87I=N^9%:6#EiUl.M3@+#Q=f!!=K#;&K!,uI]h&PjMC\n&ZVja >qlWf!s/K3+Zi\FQaOa0WsGVR>;$6d"Tnf"!;ca1!XK;R+AR^8s8W)HXH[9n0c:lA#lXi1!!!''"U?u- _>aH@iNAD\;D'%3'+"R<qZ$j?5A6Loajm]qWs>8=9cs]F"9S>u+9rN#.n=TQn,(bFVP%a+2\6Z8$3:A? 'H9;X[/^1*euntP#GQWW8hhh:%.jQ+!X&]7$O?n;!WE-7!!j8]/PUMiqY/@@V42*p0G,'3#Q=bu!!3]e >(Qa+!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<KYDTMe=!mF@Gkl:o&=JECOgu\Ls"/SO&!V69o*-1'# jnn0AX$I-X!!<NX0+7FQ$NhqrP-`Kn_egt1!VZQt";Eb+WSd[:"j)9](^:$*!!<<+!s/2t!t72Dh>QI: S1O^Bnc/_/BA<CI!h1_Bo`,$q'*@V&"9o`.Ejbi-!e_`uq#CO'*CY=ir8n-fBJBu!kl:ed!s8W'!8@JU !?H%3rT47!D(Ptnl2Uqk*Ck\&qW7nAj_>S)!!3HkW;Yi[gK>*X!;$6u&2maJ]ACGF1("'R!"&rP6?&s[ _.tV/!V$-l%6&dfrT40f3X+mN$630'W5m`HM*MRPpAb@,1L#UBgAU.;g65/N#Q`i`$3DM`NNUL`c$D8T m/V_<JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-U!!r]3-q@<=@<S$P rP'3+p$q.YLf>f8$O-\5!<N?01gYEbPb,+lrP&`dd_i2NG@!]n/0c/4'd4A2)]g:V2*OcAAnH"1F^[s& +qFYR!<N<E5>=pVFH3``rr3PlU0oDS"Tnc+%N?oU;JLlorP'r0q>^KkaIR<H68Ku.)Aj8+()7T#)'0tL 0gA90AV[D7d$.ce$4dml,YDg)\Ga/Cg!Bo/Nb_?C'`J1@!WrZ;'cfk_Lq3K!.+5r)FAtLV(CCHR#R_tL AV#D[EbJQF2^ojg'bCf_%1O"#5=nXXEKL+5&(/(XC/$Q-#R(ha00`Z\O8Qa)h#@?Rl+2mb90FsQ)]9G. ()?fa%ic]<.5aIg=)aD8gUhr-*WlWN!s.E^#6G&7$9i3`])BADe,K@PpUYuQ0J"Y!r#lRq,pk&l0f1jY ;HmL@GDE*p^D+K'dba<EYC9A2-l)pe"9o/W<d^J:^BhX"Z%lRQ/f+T`!;QU&!<E6?2b6VEBS<_Brr4S? Y&$!3%g`@>!X&]4,!A\!?#GM*h#IERiML6B&J,Ka%LNCB!!a&Q,t;BmX8Td<dDhu+<B_`@pAbR%!Wj&p 9MJQ<&>ort,"8F?'R1"Tnc9,WS.d?Zi1C^ECMas8W)KW-_?/2(BXc().>n&ebus*$?OX0K;6]/ftW' !X]#2)E^bh=E'/%e,K@Pn#^:Y#6b22p](?u$l=KqJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%C L7>7BXTu%oBJ^)%"9S2q$N^G8#o5^@S^>a*])8Z:\A,/1C-j-P!<`<&$3^\E'fofXW2cu!r2g@2UPW_^ 4tI]h'+toV&1S2$&eu9(,V:o<;f.AfTls0W$O6e9!!36)"Z:2%p[m7XZ,,>MbF)H`$N0r1!uEaiCk@qK X8T./[F!LQ[t.jK-m9ND&H31\%M'-a'H%u?/3$+!@;0Y-NJ14[%06qa4B$0RT<%pm!O7b"A2P26#Qk)/ !s8]>+"fZ^H^Cc2XXL3)=X=Oe$O[:J#R(Ja<ee>ZH<E?_-Qa-<%h&^K#mq(V2d:d-XKf#-XUh@Z9cFED !s8iQ4BZc`S>uLh,f%s[cD#>W1F=4]&e>Na%h9-_',;K1-nd_W=_;DhJsC=A*X1I%#Qb8D)^S*qOK/8] $+emJfsc0!.2Nfs(_7K'*$-:N.4mY\B6oK(UoOBq'X"^P`R1W%3=Q,p!W`H5(*GSBJY)hB#d0\73t)Au !s82sq>`,L!WrNQ<JA-,a2"dhhr*7nBf?Y*!WiB("9f,A033M%\[f,K^!k-7LJfW4!sJT,$3UG5!"p\G =`]Inr2g4)NF"(A#6Y,'!##D9!sBiSS)s>)b-eP3gX3ED3#)8j#8fU:Pc_F+ZMgm_Y/AK%Z%QRT/L2;O %h0!W$OdOX'Gqo=/M\q1.jl8H#64f-"9g>fVss?9`Nm)4g<QR&0b<mV!X^#/JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0uAn#R(>5oDf:&%2g?I=b<sIimG*4rMpa$G$RKo.2W<l!s/K+ %im5fBq3H*beC@[WsYDKB1k3:,odU4')N7Q'c@u7/2p%!C4r1jV/AX<!sAN('FGU"02mA+s7FI:VNbUc .M3C*"p+])#6lqqV!\3\mJO!mT6t<S8Ol$'.3]]GrX^(\&/,`n)'1+T1IPGhNJ_=@0,bZ>#R2JBDP+G_ eGQ?JPAh+++:JMZ!s&K,"q)\B@"b8cao&1XQ>oJ<$O[:I$5=I+/jN?CB3S+r1FaOb&e#0I#mq%N'I?hL kPtSZbP\CONbL`m#6b85'gd8\oD\d@r2V*-Eb&'>7QrIP+;kk*&.f?a',;<$+=Ag"9OiF8IU,2_)AWec rrM*Z#Qkho87I=N^9%:6+Id=T8i/F[,8qI<)&aD5*?HCN.5!>64?uqjRD7M6fsq!]#caSfP(ICB.1#nT #QY>W4&p?g[DVsD#cE2W0*hac!s/,rqZ%?4#8%gu:PQpis7X[;RVQ%p.OH&B"T8E=#7hOg8VG.as7jm@ Q>BMV,:"9C$OHq=r;m6))aA#)[`R(*rMp0qFA3k`"U"o%!$DLZ*\0a#U$qm2[AKU5<]:R(&IJOB#n@Y* ?^B==r8b0^Wsbb\EF2F36T$24)AW/[,S:Y((E4SI0/"Oe%0Zn<!rrT@+>$<5WVZA9Ybdh%;(rRt&-r18 pAb7+10T80JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$$L%Np"YF>EZ-qb4joi;11(XQ[ !!Wp*XhiB>jSe3C^18Vsli71i%4P+H(%hP7""\8OZd7UJD(Ptnp&G4",#OfcrT4=5T4^5,%Kc"t"p"r? %h&UBq#CL,4c/"njoM5;!!i)q!sL<)h#6@:TJ6QA!!EZ_(C1'4!!NH@2-Z$Vr8n'6+p%K>"9AobBX[j$ #/c=#0,Ourm/R=m$P3gS!Wi9#gAh<V*GsR0jos"k;C;kUm/R=l%O48ST@*W"#3FXd_6H64p&G.#5H+PC !o$ihnGr1]$5c0HPec/!M+erqoDf7"(dM\q^>?bH0an-R!!<ZhJ(FS\!jaokm/RJ5=GNiqh:RQL%fuD) "ToQ$B;*rUjp'YDDa5EV"Q9=f![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z; (F)+MH(OuL#gCJnJQbAk'ER_(#R2;.8l8u8O1tS-(t%mHo?a(E5:%3Z"TSQ(!X:,K@rHXNS@SU51<\7r a1/"2JSndh4u"`E0.o">4[MqKAT2pCHZb(,KP=1B,S'kT!<N<E5>=pVFH3``rr3PlU0oDS"Tnc+#SJ+) 9PT3hrP&l`iVrlVh7]G8F'q^,4#]"q0cDf&3CHVC?Y=;!LTJe_gRMY*$kX9t-VJ-)\Ga/ChV/:QVL_u6 )[6NG"U>V[.Q1=HLUmAu.+?,1HX06%,8Ck'%M:<gAT!$WOd:lMBN7Pb0-hS\*ZcUl:fUP.GaA9B&(/(X C/$Q-#QkJN+Z3ABOSlj(d-Uc3o[0t/J8ACZ4ZPDVr@nj=4\&@P@;0\)P.9*-`J.,1!sf&4!TO.b!X/i: 5&-%frP&c_lMpn_cD5hp>#\6gr^m_p:K(>!@:j=pGC"RYH%hWirP'&_e*[28gnepV0-:c.!X&]6,?B2_ rP&WRc*<%/74oAXpAk!h,QRoI*'6be=(m8ocLq5;q6tZ=,T73u!<i`<&Md3k@rHmb\(^i]']lB53Z8tY *ZYt*"onl>)'qa^IB3=]#LUPeG?$gR&GH/4!<N<:2bZqHC58b0rr3Q*[raV8"p=u-$Q:NS94N1>rP'Jn gA(^Jji+'PG[s]<3AN05-7LN#2aL&7?"\/&GZHaCr<!?-)E^bh=E'/%e,K@Pn#^:Y#6b22p](?u$l=Kq JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7BXTu%oBJ^)%"9S2q$ipG5"qWLkI\s<V[B0>/ (q.8nY_H=9&Hi4<!W`E.#7iLgH(_"4X/u9%3O,ZXNdGG?6o?YM-mg2b,9n]p4@DnF@;:"BS$&K5<$r%Y !s/H(!s8]aDQrm-gqp>4hq6,?==agX!!iW<-9G+BKq>@DXY$cne()O5Kl(*i5;=K1,U4HX-n?r37oa&8 F*`ChLmOlt<\4a]%jjJAEJgEirN-+,S.]s:.2iWt!<NB-$61`g=`T=iXSo7LX,1+5'c%T')%mA`#;BPN d(,d'D.$4-2(U!l'G;)s*%4HsPe4N=[J[-;W.%G[$3gS7"rJs[>]l+&r2h6Qa4/_OQ[EFI8ieOM,U+HW -7LK%5"o-nDK^GZK8uIuGsrhZhuF#a#SA"%8oTllrN-F4bMV1!QZ#\_4$3=#%mE9H7SQc_?YFP4NgcZ? XSo78Y.W6CkG2ZB#6Fu.!<ilI+?3YXT)GbsY+0>j$j["=!qu]k!'C;b"9gAaPLA.6a/ui'kN0a36lQ:4 !s/Q0%M^!LA;IS&\[8HPe]b^f=Ypm"#mq(L#R(;1&h$%KF,HXgXTtnd?7H9e"9S>u'*87<"=%3Ajn7`X [BeZDdC!^K'`7q9&M[+&MOUTJrN.r\\]W19U53o#;*m#_+<DLA*@*$b2FCANBOY1H9JRXs!!36*"Y=5_ nFYVWZF\rIcDFr'&+fi'$6M6Z!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I9%d& "U"r"!"/l6%i6N]DOo&%e\h<c(S6>%@T5T>%0Qb7!<NWC+"pocf)Pa,_YgH'UQ9h<>>[mN0.eY&-7:2i .53_J9NYkGIZ9l#^nu*@*!?BH!Wi]E+tllEZN'R>Y,7Fo9e$_i%L)q8!<NEO:OTOjg>Dh//>J>PCM.6i @9H8h0de=p,pXom1H7`r=_)Q)Q)9sd9e."r&IAXc8TUfEd+8,q!L.O9:F[%f#m:;6#n7Y,>(a3%fA*A( X!j9U:aZqj&eYou+t56;@<[NQDeEKW75ZD5)&3i#*@*1$DPlXts5UllWt15)5SOG+"To;m?]VeFhpMA& ,bBj6B4kdd?<0QW/LD_i,pk)p2EOE+?>"P>R]VBS5TpsZ%Kun8!<M3\#Qkho87I=N^9%:6#G?ie?rp9' 7f5@^5<qS*:0D"@D/aH7J!R=`iSM_\rMpX3RX]!V;*5s+"9S],$m@]4F-j;PrMp4%J6OZ4"pG)0pAk'j 'ESOQ*$nF5_uKc$`2]AN>u3[>,7jbV)$L0R)^dIJOim^sftXSRCfWJD/gqhZ&e#!C!XJcF5A6Loajm]q Ws>8=9cs]F"9S>u+9rN#.n=TQn,(bFVP%a+2\6Z8$3:86#n8:WH*5BCgU@']25ZdlEbK&r?s-/e0-VM^ +<`!\0fM<g<*rs$0H1B,#6Y&6'Heu%H)^Z7d'0@9B2L>p((^`M!VZQq&2IF@!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!6kKG#VBr8rT41*9a^(a"V3CmMSeKRjortoA3:\1o`,1!.;"F=bi8T`#1&H70Gb#snc/su #7r%>>CgQ3!VQL$""\8OZd7UJD(Ptno`,(*5)S1pjpBeUQ>fSX,8(.\o)K'u#nnF93\)!N!Vl]t&3l*/ rT4-_6i[_h!!E?@8<Vg-joV88"nhp%!ZY0*/KG?)!VHEr%P_+9W6Y>'!e_`up](Bt*EB0<jp9A=LLWh/ *"2r@!!rZ0$Q(6N1aEV7r;bRP!s'EZg\p7>fX$382'!#)o`,C%!X&Z5'.#_?EL+5jrT4=Ec**%=+9V<; !XV)irT419=V1*'o`,C$*`73V`o,:?C-WL:o`,@)12`>`cf)ic2%B`Y!!<ZhJ(FS\!jaokm/RJ5=GNiq h:RQL%fuA("9fc;M:):a$/WXmFAY+H'F+[1!!33)!VHF"![V?9Y0>hKH8Z,t!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ER_(#6YYb2agkgMYt4+`7XGKgTcE43[u!Q!!!'$ "<BKt=_N&A\,F&s^sLW^e'Q4NYa9cJ:JFMU8lAi#A8lpPQ(!r"OJ8b>ED\hE&-)\2!WjH.9i"o6NjRU@ rt+=e?mu9`!s&E*#nIb>C5BJ"^Fd@Jh!4Ond(cfWNHo&@>#\9o:f1(oASc=.H\@<VfCA_"VIhRl&fDlA 94rjdrP&Bkjq?4YRVbM;$4$nB#T53X8mZOs\Ga/jd`/8>AlV2P,9@^<(Go'!>&&\^[^E*(Mf`?#4"r<@ 0K;m8?XIZ(UAVb:dCko^9f4!u!X9&G-<#&Or4aMrdc']dh9*:/R>#Wi?!(!#:Jand?>"1rH%1R0]]8Y[ c](jH!so/6!oj7c!X/i:5&-%frP'Jndc'fog;'SLMhHG"FEDSFG^FplLQ7RgSX5M"Od`8[rP&BMiVrif f:-2*+r:Xi!X&]6,?B2_rP&WRc*<%/74oAXpAk!h,QRrJ*^34k=)*T!alWO%s1sLk1F3eC!<s#K*COCY IZ0_s]A!8a'^2cF6R=*0/h\@_$31;B)'qa^IB3=]#LUPeG?$gR&GH/4!<N<:2bZqHC58b0rr3Q*[raV8 "U"l,#8%n&6Y(V=rP'u$ak>qQlIEeXV3?CC>>[pT5!qk9<afc^I@@FU\q<m0"U,#2!ZF0r9iu@lYg`UO #Oed/0a@ja!r)`s":Q)u!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y,# !"/f/!X&lW6=PG,UTaTt#d:eT_4Y^6)$^'B$ipD3"UHGICQb<dX/l3$3Nf]jWh>Q-E*uaA7Qrps4$#i1 ?u0q7LQ@apWjJ[W=XXX^"9JQ)!s8]aDQrm-gqp>4hq6,?==agX!!iW8)_!aLH'><-XY$]^^rOR+VOEHi B2UuY4$,Db6:jpYEJ0aSTUq^GXgu$4>;$He&1KqNG)`2rrN-+1WtL4s4XC[D!WrT4%OXMGFbcB\X8T.K Wet1>*?ZRT-QEd+#W?CmkL7/HR#ZT4>Y7+2+WVgW/j*NmWmAo*ZM^g8W.%G[$3gS7";)_/6Y(h@r2h6J \A?;)ZD!S<F'q[,5!(ed5"/(AA9a',TqJ!JUU%MAJOgpfhuF#a#SA"%8oTllrN.3G\]3%DXH%I9@q&nT ?XI,G@:X"bE-HhiOHc3-Vl6\urN-d;aQ)CARp%0A!<<-$"Ul.h3*h*,rN-@.S8C=r#R(;3pAk$i49>Tg "uL"gjltX?YdDa>mbEn&,RF\[!sB#J+tlf6OgMR(XK9.ddD2#U4<>%G',;5l#Qt,?-p_!WMP0mL#HNhj .LHC`!r)a/!WrN-,@-f#p#X?(ZJO?`[;%Z8qu?s1,<8V:K:8k>XYm5b]"l@qWLK*$BiI5S1GCC93C?GB Ck.eET:;'s;(`F\!<WH./7kaKo\[Wn]&25eVI)%goDeq"+#niPJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XCd2d_ZQ`m_[#Ws>JL<[e:X"9\8r$j$P:$PbL%LUG(Ha/]*=';V%SJT+[J'EeO@!WiQ7&fji0f)G[M dB*;I%&TS[M1'8L;b9JK69tN:.76s?DLRD(S"lpc\@nYX8fn3>"9JW3(*YD1J$T+Hb-%V+A5+Nc'b1HH !=/fI3Egm(\BCoNX":0AP_k!FLPLM&@8K3Q5<V.t9ibV;G_hTUV6@J$D+lDm((^cV,tiNd`7<W?Wr\H) &lLJ*'Fk6J#7_Im8Tq6#qYK0NrMq?7GZHF9*#otA,q1B$:iV]4UQgXlG%=E30e4Ol+tl#L?%fBCrT22- r2U?gBg<@;"9ei6-:MO(W5-RRX!FL3ObJF@LPL:p>Y.1F5<_;&;-IIKI>XDaWjB?p@R(tN'b1BK!W`>^ !!iZB/P'?*VS9/1X!"4.Ndc+kCh$[U?XI;TCMn3EO.`b^X/)8XYJ8H1`j;ZCWt_FkAlq\c.i/En!s/H2 +Zi\FQaOa0WsGVR>;$6d"Tnf"!;ca2!XTP_.8YW/s8LldVk/ZQ<DG\,&dJ==)$^p+3_spjal:IVYcF(, =$/)m1bU3r&d\[>!XJcF5A6Loajm]qWs>8=9cs]F"9S>u+9rN#.n=TQn,(bFVP%a+2\6Z8$3:53"U5u/ ?AbbrbI[YQ25m7;Ne2t>L4s_Y9fY'g2E!Zf:g7RTJW>Ik5pHdI#mLD:'Heu%H)^Z7d'0@9B2L>p((^`M !VZQq&2IF@!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#VBr8rT41*9a^(a"Tf2jB<UCpjosMXW/3tS o`,0s&N3aF]AWYM$J`IjI9JTP%Kuq8q>^s*"UuA#5[&/bUUlL;!qlU%""\8OZd7UJD(Ptno`,'s.sThI jpU(s_m5eeEaD0Y$j$/(%06SA+ZN/"D1Hq*+UA,F!!E<96B0h"joMhc!>kn3!!NK=1M*KArT40[4:1]] $3`,+G][Y(3?/>+p](L&,ZTYt_V"eK!e_`upAb7'5b7i8$f0.BX-8!I=#V$%!Vl^(!<s5c6W%96Kkiac "8r5S!!<6BD;5$O+PkAWVgD>s(C:?P#6kD=#RM"X+=T*/85iu@Mk72neDC/d"l[.N=#(0V!!3HkW;Yi[ gK>*X!;-=#""%?-WlsAR\!(SZ$MFH/!>n_4_pR6!`HaKW"Tn5p!t@2=f)=_4ZT89W!"']JLT&8LfSMj( !VHEp#VL)=rT4LIfZ1@iL3-m#-k6=R!!`Q4)DF8u%KcA)$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-T!!iW4'-/Z$D25h'^C.im_8Fj>Rr;%]+Un;L #QbVc2F:M^L:-up1;CT>^X;ZOqXDn7Mf3EHBkM=)F`D_]R'F98]"6)&UNfd&-P-7X!<N<E5>=pVFH3`` rr3PlU0oDS"Tnc*!<WH.3GFJ`rP'Ag_84"*_8*h&^TsJjKRIu]DJX'#DfT]0HAS,ufDbdYn#^C`%20^, .SOH)\Ga/ChXM6Ae?OO$.1Qan#n&"?9N>VGNOSl$.+-,=MJus!4tnH2*Z[@F>?5?bPe5K!cbZN;Cf*Vg 6pjUTBk;UGQ`g8$&(/(XC/$Q-#QXr."r0gUQi+T=^qmk(_SO"$`4N.>M1U(qDf0?)Bl\3.E.EtB\Es4p "5/uB,QeAX"9RT`#6G&7$9i3`])BA^^qmk)b1+nb_mZV>Q^3o$PE_?"S=uaX\\,QQ])TMC^B)7Arr3MV N`.5>%gN.;"9o/W<d^J:^BhX"Z%lRQ/f+T`!;QU?!<E6D5YY!VFH3fKeEH`-ad-I(0HCQ'$54I/;fmr' ]">Vig&D!cm'V=:0/GRP5;!rd!!a&Q,t;BmX8Td<dDhu+<B_`@pAbR%!Wj&p9MJQ<&>ort,"8F?'R0 !s/H)#7V>(?\,!N^Fm::_8=+,^q[V(]rI6IF(86O?".A^Ec>]:eGfLG[;Rr.#6b53)E^bh=E'/%e,K@P n#^:Y#6b22p](?u$l=KqJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XC],Wo%CL7>7BXTu%oBJ^)%"9S)n #lt2G/k0,kO/9#UXVJ"?K2j*&"p>#.!!**&*Bd_ZOeJ_RrN-(%riR!C]=P)3JSnq#=&i3tA9!0`S>3$b XSo7?N*Rq@#6P#-!WrN.2/]Ymo\@<g_;EngR92!Ir;[*("qMRp7r=9drN6"#!3cC(,bU':>Zb*-;-719 C4D\\f[RpOY.iT@bbe`%%KR+j7Ug_+UoaNs!P#NMSpOHo)?p3E#7M;%;K.knW3*-!XXL--AiV+e0f_3@ )%-^2FLCf*e%VuoYb?qp>!t(q1H@`uEgOYnaLebUXUh@Z9cFED!s8Z4&K<<$HC=Z4!NrR(Xra^HW0i3P >Zk'*;d*O?E/::+gs3aEXNTAJ`emJ8"lK@d!XKAW,t`-<Wr9(!XrX^RZ)O:WN/34@JU`,rIXd!*Ng-$4 XK/D'XKAV+rN-d;eE,`FN_USq!!**#"Ul.h3*h*,rN-@.S8C=r#R(;3pAk$i+9DZL#<?h0p@@"UYd;0s kNnmP/e89o"U,J]0g];tR&p7g(V\GK`1:L.-Q*gB*Zl()"TT/`6!88dT_tnsX,UF8$3p\8p](s/!s8ZN ?(9sKjiY!:hV6GcC,cq*!!`cF,Vr27NMl`Ws/l7&riI`KOEF]$8k)'9;dF']Ofcm]l0dHNH9iAJ!<N?, /7kaKo\[Wn]&25eVI)%goDeq"+#niPJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCd2d_ZQ`m_[#Ws>JL <[e:X"9\5q$NU80#:2o[T=)bdWr/n1W2QSSD+,?J"9\f-!X/c<6\X%hrrM5_rMopurhi)UL2gX%=Bo*8 >[CcFEJBsh]YD.`WMc_pSp!jP#R(>4!X]\e02mA+s7FI:VNbUc.M3C*"p"`)!!3cZ3`1'h\#fP/"feQ# Vl-EkV^.LWCKX_>=&r^GHA7ca]$A4$Xf7\(;)&Xu&-rIf:49Omg>8k.Wr\Q/%95>5)\E;X$54I5>a<n> rrLQLrMq?:HsATW-7C;o/h\q:>D'0UgqTthOa:J/5s.%X0g\lSJ=Epra18=Mr2U?gBg<@:"9\c1(bJ'[ K;H6XWr]2urML[7UQ9Y0=BAR)=_2T%N1@&ccG$WdWJ4kQ+qkY#"p+i,!TO.c!u<IZ@YUboXSo1>Wi;qo Tp:F]FEi.^KSknYS[?f7s74saYGnP$WW&pqWt_FY>Y?am)\E8V!s&B1+Zi\FQaOa0WsGVR>;$6d"Tnf" !;ca[!X]Yc/5h#,s7a^@VkBB+@9cD\('k0N#7DS3:i22j^oj];X/hS*=[4c,5<UnO)%6WM!Wi?@5A6Lo ajm]qWs>8=9cs]F"9S>u'*f-k.n=TQn,(bFVP%a+2\6Z8$N'o0&M-OfMlFG&rMp+&X/MqoVZ*JEP^dCC 9MA/T<Fg-%P,#A*Y\Qrf$k<^P!=BPb/PUMiqY/@@V42*p0G,'3#Q=bu!!3]e>(Qa+!.k3&!.k3&!.k3& !.k3&!.k3&!.k3q!!<KYDTMe=!mF@Gk5YVc'M+\QrT4=Fio&[V.g#AD"ToAoA#A/^jpU8/hVHD?>W3fD &IA=;%g!(T/k9N3Zdmjfhr(h&"nhp(""\8OZd7UJD(PtnoDeq/A_[1G+Q_YDi8<AGgW4h1)?g6G!WiH/ $P=aWFecOheD&#c0ad^V"9B6,P26*!!P;V<+pRcA"p#;k<J.m@rT40_6Oi_h$k5X]UV5%/WFIXp"TeK# #6G]/K"B"Qhu)U<KH^Hk!!33RO8S,LjQ#7Xhqd)BZ"Gd&"U+f+%g3.I'eraDZ,"W9h5a[$"T8>T!!<6B D;5$O+Q_YDhp\NL;E['#2)@*L4$?AJEIjO^ak5A(hV[8Mj5p7%"lH=j0an-V!!3HkW;Yi[gK>*X!;-=$ ">4GNZd7XebI*p;(BO71%0nS7gZ.AUk/Vp8'aOs5!!<ZhJ(FS\!jaokm/RJ5=GNiqh:RQL%fu>'!s'6@ _>WL+k2bR\hqm/CgQ+iC"9AQ&!"/i3%NR]FQEbHc%KZ>)$3DM`NNUL`c$D8Tm/V_<JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-T!"8l5%20gRA9F!'W3j;;^DPVM[ZbT(1)L2u !s&E3)_*d@@;LglWjKG;^D+ZMr;Z]S_P;sCKnP)6L4Xc(O.s5a^D5/:V0Q')-P-7X!<N<F5u19\GE9,d rr3\pU0oGU"Tnf+!<E6'/6I4WRA-mspqIN^^9aW,R?<GbL4Oc%HZak!RB4!Jrr3DsY&#s(&JlE38nime rP&B_o+LQTb+a/Y3B&iQ2bdC^@;gX^\c'9/cd'5%PD+0n=@Y>$,XPdB=D`e^]@,WoeA.rBH>RA/A7ot+ EJ]mSZbOH%e`#DpM-E4s)?p0B!WilpA:fo5Uq$37'u\#%XeD;OO,AaIJ:)`iFGQ*PZG,Q%rr^uB=<dnS "p4qe!!`Q/#RWb1N4Si"'Yr#Fe^)1FY,.qgT:VUFTqeNbZb-%J(r=28f'*)0mG+IT5oU@C"T\Z-"plMT I%C5N#f+]iLKm8#(BX=2q#DK;!<O9(8kW2tLpY+Eg?AIcYD[-u7lMqU5=eUdJsX+J^DP>qs8Vi6RW2D4 >@(N!.1uUc&/cc`@stEV^B`0+Uj#g&-4onO$NU80'KAi_=)Ebnao;;Sq7(N-#R1D5!<NE0$Ro"rLmXj< ](j#PbK%8rSrnYMG'\I]I=69`N9U?A&A3-H#RCV<!ujF":0DRpYg`UO#Oed01'e$c!r)`s":Q)u!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y+t!"8uA+>QDsJtBK[YH4i(XTu5( GYBY/%g;h3$j.7t87?n3[)BJ]Z*+&-'<]!c^Tj2_I<9IIDJaZSP+JSOXSf1?YE*!?$O6e9!!36*"Z1/& p[["RZ,,>MbF)H`$N0r3!<ic@(cGWJS>E1XXX'd3M0<u\D/=38G^kgQ^s9g.['.$tg<Z^*0b+3n,Wo%E LnLgIXT>iD'!7OF>!FMY,UkB);JLl[WN</%r2i5OHWs0?<EiKe,S()>FL:Z!bdjmd]!S8nG\:#P<*<RB KV??(^:(;KYdM0cYBWGL"p4r/!XB,H+[g"#USt,kpoPO>Um6OTF)Pr6F*;q_RB=TQ^UUSOakkXjN(tT$ huF#a#SA"%8oTllpoP47YGe.dR['%tNf8mRN/j'fS"m%[XUVG;[D0u<bdX$K2AH2mrW!0,$l0sF?%JUG XU))"D*&.3"Tni#!;Z[<!WrT112!EEkhj@`ZF\00n$@LB2D?X.,r7nd@!@O&XSo7;[aWmTZ\)^[4#J`D -5mF#!"p\G=`]Inr2g4)NF"(A#6Y,'!##D9"9g&URcO/$agAA1gX3ED3"u2i$O.+Z,s5L]RAm3gXSAnK Wh>;mChR<eASlR<Mk@H*`U*!Mc$Vbn!!*-'"Y=5^n+>JTZF\rIcDFr'&+fi'$6M6Z!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!7:cO'fTK]Zc:J.rMp1"I9%d&"U"qs!"&lL2ck9o\^n[/Z2:R=PAa&;$jd+@!<WE, #W-4kl21GT\YuC&Wr8t4Ulg(CAnl7(FEMbNH&7ri^rF:%WVrk;S97RM#6Y/2!X]\e02mA+s7+.3VNbUc .M3C*#6"W4!!3QI-okRbVT6QdYGq>u,c@5oI;s1DEH$5VOIW8V_8!.OVQ$(u;)&Us&-rIa7rY36bgcQk !M+WNB2:lW1asY$3'gAgY3GudlGrh'6(`pM<(05C6U<mt2)nfo[.`"ZW2Z;?EF)^J<)6G&FG6-_]$7O] Vl$MkSsk[]=#CNm"Tnf0&K`\rBTKF@^U^H@WuS%(LN[TTDf9ZELm4U5\\tkVVkpDM@7_XV'b1EL!W`>^ !!iZB/P'?*VS9/-Wt_J(ObeUCM2mdeT;J[,hsKOU`O2fCWu.h2SsY=L;)T=2'FP$G!W`90+Zi\FQaOa0 WsGVR>;$6d"Tnf"!;ca>!XKDX,Y`a"s8V,kVk]]DIqN%]3[uR..5!tkEfQm"]Vte0(nPt`<D-=r>ua': 'F+dD!rs9)BUZBOe[#.S#G6*4+:&,R!r)a@#8/(-7rb6jpsc[JTPRXf&/5]`!W`<%!"9u,9koWe_ns*l WVEMITo=;1AS5^lEdin3Up.VSWc(fq&J,HY!X]Yc/PUPjq=`+;V42*p0G,'4#Qb#-pAb7+1L5S4JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&bl@hO/T/Z.joWb$$K_<n"tX`8eCrgArT40_64<Dc#Qu)8KZi')iT:%# #i)kC>sUM*,9$Ou#SndN<H!o$bhrB]!k(2qp&GI'/oHr^d,DlZ/I)=K!!WT_NjQjZi;)LPgSnpM*ul19 'HA;G0hcVX^sCWhjNi-1$hs](%QoR'rT4.%HNQPP#m'lGMm<-P%Vir/!A]3lrir;lcq+V.5,X2NZO aGa.Q*=rGV!<WN6'fTd!b1#,(k24b5]iYs@!!Ns/VRt..puWF<O]O1V)]0>,*[E9p=FmKndb<X@[9t6_ r;bRP!s'EZg\KtGgr#_/@q/nO>?tWHATs$"V74V%j8%gCj5&5,Zt:p#!qZHo#sYBejoX:?&Ffbn!"K)V =b*BkiSW/'[<"29!Vud"!<jZFS)4,+#LSuI1`mM@!V??o%6&dfrT40f3X+mN$6<?0X2s,LM*MRPoDf(! 0714Mf&-8b'XVgA)A<Vi#n.Ok.mdg/[`a@h'`n(0$3DPcOKd!fc$D8Tm/V_<JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&d/XCT%Mp?R??r.@^Bi',XFXPA///-T!"8l3#RqP2<b6)nN2!r_^DPbee@h5b73rHO"p4l3 &f`8c<Ej'dN1mc[^D+W<nb`4Hc*X1:St)=>R#m,bS?0@$^D5/;V0H!(-P-7X!<N<F6;^TeHB>Sjrr3\p UL>YY"p4o,!<E6&+@9IVI>aZ,q7dZY`5TI"ZEL4&TUM+*Mhd(LS#E[*df07TnZH[b$4[[a)FeIp\c'8D b3K]3n__-WLN@KSCM\'7F*)kkU:^B=6-Rd#^pL/6P_EmL3@[R/?s@T)S\)tuiSVtpXIYN6Lk:53K8#Vb Y.)0ijSf,?Xa*Mo+qk+[!<E6/.Sj]"JWQZ%^D4Q*_Rm7\X/D\_R?ESgLl%ChXL>k,rr3)SQWPF6#R1A3 irB;c"UGH!C5fb"^D+K,dFH^f^p^JLX/W"oV5C/iYI2(>^DOi9kl1VTf"%5h:,!:g"p4l-"9o/W<d^J: ^BhX"Z%lRQ/f+T`!;QWo!?;q677^<cJ[<56ce.gF`NP_iIWB(:E,foMO.s8b^DP&Trr;rL[$66"L4XVL 2AlK"&/cc`@stEV^B`0+Uj#g&-4onO$NU80'fo,d=`B4tao;;Sq7(Q/#mLM6!<E9+#9H0;F*rb1Z1u'G ai_W<[&TdbPEV,iNf&OJSb<!^&A*'H$4$h>!usO&:Kqq"ZIAgQ#Oed11C46g!r)`s"Ul3!!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!7:cO%O=/9D2+O\rN-=.P\;l]#6Y+t!"/l:'d,2-FI9eV]!;18(r3naL0cqa #lt).!<N`R0gfT4]B%DX\$,b4'<\j]_7ck=PDkBULPCkTSZ&QkY5GCAYE3'@$O6e9!!36*"uU;&p$^MJ Yef5LbF)H_$N0r5!<`W8%Ojt_Kp81,XSAnCXJM>HO,AdLM2[IVS?BTB\[A]F\_l,eW*h=i!=Ko&6t1\7 Wr9%#Zb-p`ZC6A_>uOg/?=S#-Q)C[aY,qT(6*I,KIs$*hLO2uU'*U=7ZLQhq\?<3N]X+H"L3ducH@(:1 WPQ6VZ`pR>bMMEeD`J7.!W`<'"UGJP1fJITQ_CGSXW4FATU(UsMi!7KNK99tZbX8a['6[ShUfi-:*Tu$ !!iW3&K<#gE0.*qXUD;:Z`U=-US+6LR[F&>"IYaQVl]]r%'I1dh;Q8BGZZsK%0?D-#6bMO+?3YXT)Gbs Y+0>j$j["=!qu]k!$;7D!sL5[O3?)$`icPR^;o*GSpb3Z>Zk0;C34i]R\]k`(U1m.f>O55EFN'F4te#k #65Ab6!88dT_tnsX,UF8$3p\8p](s/!sJiR>asdGho<%/hV6GcC,Zh(!"/r;&/QliBn_tKW35ot/?YqA O,AXCIY!64OI)lT`4Y?rgW+J$(B=I;!sL2cV=*p0_m6l2g<QR&0Fm^T!X^#/JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcO0u#8K1)OL)sU^AY);V0uAn#R(>5n,Nk"'Ic4IJ?.>qh8cn&rMpd!CeH&e%LE7>!WrN0 -;8NV][5s$^94B4rMpX0Ru2]?IY*92MiEaXR\mI0_n31QrMqN?F%dY["9\c-$5Og<;h)%Olbom&P[mK< &JYc[!W`<%!XKAW,t2R3]?/:5WVNRuW1oZ>KS9>[)j$D[XKo=KZ)FOsWLRTu0b>'2#R);5@>Lhqc2=UC U5T\/BOP:U>$,*CDL.hhn,Mb&])8TGV3?LLAmehD;b]\C3*_0CnBeVBWM5K)FoHA,E-HttTWPZ:^oF</ W2lMID.$L9.LlXc!W`E4'd#,,Gb;ptbe!SM*3,WsMhZtALPh4_V6729]W.m,VlGS^8Knf_%Kun8!<M3\ #Qkho87I=N^9%.2';qUoP`LuoR[g(LXg?!oe^2:HYkY79VjiEYAQD/O().5a"9JT)!":#4<HFM7_u6VA Vgqu)#R1G7!VZTk!$M@I%M]sQI_l'ap<0G3SXG^gEG8`\>$G6>EIj=OZFmfKrMpd0N-&]ED0C>N<B;-, "pP,/)aA#)[`R(*rMp0qFA3k`"U"o%!$hd^*@aR!T^;C!ZDO:2<]:R(&IJR?!<<*)(*k_2E0IfWcc*$] X"U<9MLL#)K8>PQSYr["]X=JP<B1[+&IJRH'd5/'HDpQ-b-%S1B2L>p((gfR!<Mop!YI=tJcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY8H+!!X01Pcr'XjSe3C\5aIKoDf+%.:AsccJ%=WjqQ[o WebS+>u='\6psCCC4VeV`R`uGjoVtQ#5/$)">Fqc\C'<RD(Ptno)Jq)5%Tefh>-1MhS57h9M.fB5Y+aS @="BRce.(4jNi-1$hs](#;L_`rT4.2U(V<4/fkT.!WrT2$m@iBJ=a@&j8J*Hb_f=L)Aj2%$3C)*+V@J7 Y/]/UeZaU18NSIG*[E<o6=u@me_8p@k1$r1GqTBp!!NED:3)rLpuWFIY_6:T8Oc'792f&,KVZK7g>:iN [9t6_r;bRP!s'EZg\KtGhTrd+O,]'SLPh%OOe/\a^<5!_jS@pCi6SftD)2e,o)Jgu5H+PC!o$ihnGr1] )Ab_RPel89gX*s4@lP>4#6b23#SA+/;1Q16rT4F?[Z+ik5VaDm"SMft%6&dfrT40f3X+mN$6EN8Y0,SQ M*MRPo)Jq)4Dg7kg%a\DaI-a34ukMV2aU8DE0.<Ie;$C+!VcX%![qcJZd.LRH8Z,t!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3u!!`Z;(F)+MH(OuL#gCJnJQbAk'ER_($ipG6#7N.S<`ipXP.CP+(te]]n&LGm 1Dg]2"9AZ4%i$lk:f:_LP.(>('Z.rAjR)$U_6L8KYH=h%TpqdY\\A$W("(+!GZ6jS&-)\2!<OB3;c7(P P.'0Frs@h_@Oqfi"9JQ'rW*6:.7-pFH&f9,^D+T(`P]I%[^<9=Un=0KS>`Ts\@g8hrs\G#CGQ;+%M'.= C5TV$^B)7%''\rMeAADaTUV=5P)G3VQ(Y@orP(Y6cdU:eaiMK0NbV*>:M+0FFGQR$_9^cjfZV.>YGn7c R$a>4Wj9(F^Y&Pcs5Tqi3?f:L!rr<%!<sGt86B_ZQh\<1^;S(1_7mLjZE:+#T:MUIWj&qC^?GRr"59)C +ThrQ!s.E^#6G&7$9i3`](j#R^rasJaMP[%\$`QJYH4n0ZaI<Wq7csKiVrijij=ML8M_Cp"Tnf,!X&]6 ,?B2_rP&WRc*<%/74oAXpAjsg*WZ9V/jDg&@t1c"`5]pMg=+-WZ`'RbQB[PlQD(ForP'2fd,FTkiPr+% [Bc`rC-s'C#7qb!7UpkIrP&Tb`h[fY4sgj8!"/f.!Z!jp:g.msXNCJA'`#7^4:;At!W`<'"9]>g7Ta;I Lo0s^-,@XHb/1ctXf84pTUh[GVRQO(s8KQP4:;H""To`1;GgeFNj@.5rs/"pCGZA&"TnH!!X/uKJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7`"A<,IAZX8T.*YEW]W$O6e9n,Ngt"Ubk\5A-%l^q[DWXVf%< hTqg%1_0Qe!W`?-&K<&pK=gdDf"\HfXV7k@[^j,YWhuG^St;IGUo(;qYH7Z(*3YH1.glRb!WW9)"U6l& YOq55^TbQ3fZT[b.gc+R$3CA7#9>["CO_J?pT5^DXJVefT:MRGTV8-[YICmFZ*1=@hqHDT?ni,l#8JRC <d0e.rN-+([1U0c[%itGLPCSAMijI'XK8P(qQ2KNSXude\u9R7(^)a9YO:2f\?<!C]"GJPURII5Pa%Q1 YILsFYcb+EhWO"$A1n,f!<*!+!sJl=,X5IRKpJY2XW+IFVkTlWT:VUGTVJQo\$WHFYH>q'f>rnG,6m'+ #Qb8D)^S*qOK/,Y'X"UEZEUL2W2cenV50fUTqS6ZWN>ot%'[e0j4pST8gbMe"p4`'#6bMO+?3YXT)Gbs Y+0>j$j["=!qu]k!$D:D!Ws]DH`t6$]W86A[(!riZ(I5ANJN@INfoWuUT(EpXV\1L_9:$,Ss"nXCK*AB 'F4[O-p_!WMP0mL#HNhj.LHC`!r)a/!WrT1-!ZnuoA.BmZJO?`[;%W6qu@*,":#AV3)spOQ(k8QXXpWU X/DV^S=5h8TV/-_[C!@'in(qb3u%_r!WrTVA#/M\ftt&+hqHAQ?SDu^!!3KL3._-^!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!a5t?]_V6e%Yd]#GliL.0p(["7Q:!":lG"3b=c2s8V#mWr8t8PA3f?'bUr[!<WB* ";idaAr!;1s6%;$Vu<Y1Vk]fINfoZpSXlCFTr>0']=>&EWr8tMS9%@F"Tni.!X]Yc/lI/&s5h/"Vj(^d .M3C*#6Fo,!!*3/%MLNnHDeEsbH:T@-)dc:SsPk7S=H7MXK]1BYc4IrW2cA#;)&Us&-rFX2,eO]Z,EaB Wr]&f&WMKnJV&T/Mij6pZ,tnTah4kUX$N\VP`:3:Bjt@N:dR3KKWsaa[&9n#T9G1fN/Nd_SYrj,]XY/B V5L;nQYfu(5;XGi"U"o/!X/rC*'7MaZGOf%po>C5VkBKHR@BY8VQ-i-['Zs4V5L;mM.&t"',:u\rW2$Z #Qkho87I=N^9%.2';q_'TUh^MVPgGqYHk^S]Y(YVXn\q6UQ0+q;F32_%1<CC!s&E&!":#4<HFM7_u6VA Vgqu)#R1G7!VZTk!!`N.#S.V:IDl-b(=oRcURms?LkUA/Jq\u=Q_COl]XtPLrMpd2SrnVQLm"0fAk"'S #mLJ3)aA#)[`R(*rMp0qFA3k`"U"o%!$hd^*@XHtT]u$kYbn(0<]:R(&dndB!<<*'$kjU9<ICX\cI'/s X"UEGR?El(R\-CRWj9+CZE'^<<]Up1'+4mL'd5/'HDpH$a0)8.B2L>p((gfR!<Mop!YIA#JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcO$q!sgJraSk6&bY8H+!!WWY@YLl,ir/!A`G@.4o)Jt-5^Am2dc15f']@]f \u_^!Q&LZ[Mi*k#[_pGDguJ@q!k(/pp&GI'13fD%dc//]/I)=J!!NB5/6n[uq;rOQe\A)GO,]'QNKp$- Z,G/Ghr3VWc[%JWp](Bt-?\)AjoO;Z'!$t5A5l#\5Xe7AC5/Ch`REW'rT4F@]9RAA;Fj#'%/g/L&lP.( aP,_1bI4%'Jok[;D01/^UqkL9i8Wh[a-^L)&cqV)"9TH%DmT6$(u<HGSreqkM2IC\SYNa:f%o9DjQ3dW ,R"&GgAh<V*GsR,jqQe0d`&r6]=PPb]t_>&bg=hnhVmSljp'\UO(('^"7cEn#sYBejoX:?&Ffbm!#c7t ;Ll75jPSbFa/"/l8k;?75"f!jG*KG`ir/!Hh9ip5ObS*o9cjW7!!<ZhJ(FS\!jaokm/RJ8@["(@hUmZM %fu8%"Tf>p?^B(6jqQOdW/?7ZI<g=!P+A\hcIgd+6PKRr!"&cVDOIoYi6?R+$LIhF!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!7:cO"V)=n5$iN+rP&W^bH-7u67`fOn,Ngs!WiQG2FL,;B83no^DP;os8W))E^1cb %gE"8!X&]K3^cM:AV[Si^B_Qj_SjC0^qT]Z!5/<B!kZ1\rP')raJO2]4spmA!!**%+\#I1A:KfOh#@<Y k+lH<$3gV7qu?s-'-8VsC4r_`^B)'`rP&9E!PH&D\co^X]Y;//rr3,kX_KTsr<WQhBoT\%^B)-e&];T. ai;34]=GDZZ*C[C[^`sI^FI%6^W"R[p&4KfKN:'4Ch[C'M4qPs^qmk&^qmh"]=GD\]",Gb]Y(tnjSo/a h3_@p'Fk?Lr;[')$l1$D<ca;r^B)-bqn<9J]tCti]"7mQ"2)@_kl1Sag6Pb_!sSo2!TO.b!X/i:5&-%f q7d3N^q[\"^V7Fqr4E3E]">Sf^A,GD`q'-/#L8N=0dR\H"9&<,!!39-#pWJuSc-;/^s0->>X^7]!qu]g !#uV!3'pJRI]gK%_84")_oKd9^q7+c[^39K]"GcU^DOf(`5T[4_8+C\hp&KX;'c2I&/cc`@stEV^B`0+ Uj#g&-4onO$NU80(-GMm??M1-ao;;Hq71Z3$O?n<!<E*"#721q3DF19T(fu,^;.M!^q[Us]=bcT\e_os rr<#q\TU.E$3p_:*C3\'@XO9Ce,K@Pn#^C`$O6h:p](@!%2aZsJcLB&JcLB&JcLB&JcLB&JcLB&JcLB& d/XC],Wo%CL7>7BXTu%oBJ^)%"9S&m$ipD3"9pG[KXnt9]<(t5$,5a!p$.Q.'EA.4!=Ju5#Rih?]DVEg b-LlGrN6.&qQ'_"XSJt<ZB8KE$O6e9!!39,#<-M%o]su?Yef5LbF)H_$2ac2!<E6'&L9A3BS;hUo<%tm !3Q4$(9OdCY-"h:hqHDT@58>o"V)Ft95fllrN6+&&[/FDZEUI5XK&A&WiW5#X/rE"XV.e=Xgug@o&G[+ *<S09Y3Xc\\,EH0YPt[0Xfe_(WiN2&rN6I/Xiokfh4@^q!rN$*!<N<,(FqdQEf6XdXTbl0XfSY,r2^"$ XKAW'XpM54akkXjN(tW&huF#a#SA"%8oTllp9":rs/l4#rN#t"poOt0e`Gc>MGYZ'!s8T*r;['+$l0sF ?%JUGXU))"D*&.3"Tni#!;HO%!<F60CR1s)[&^@4rNH1($EgJ4XK&>$XK8P*rN6+&riZs;Y,\S*P&<lE )%$?V-p_!WMP0mL#HNhj.LHC`!r)a/!WrT1-!m"unCkgfZJO?`[;%W5qu@**!WiH6,sPUSLRP4;XT5O' XXL?RXK&A'X/i>'Y-5.dgX3KF3"c2l!WrTVA"r>Wf"eT&hqHAQ?SDu^!!3KL2hD$]!.k3&!.k3&!.k3& !.k3&!.k3&!.k3u!!a5t?]_V6e%Yd]#GliL.0p(["7Q9u!XB/K+A[jAs8VuAr2U[&@nf'+((giS!<N9' $lL9G<Iq^\s5:;]r2U%#W2?DgVQ'Hm#-"Q"WMuntrMp$gED%>O"""'N$5F^9;LYhLiP;LlP[mK<&JYc\ !W`<%!!33)"<9R5NN9b7ZMCO)Wi2koWN#ls"fnZ'WN)orW=l52X.3g"0b>'2#Qtnp7::_D])8T0WM^9' USFW]Vl$DnXKJk4Y-"f%X!OaCVl6/CF_5,m>":Y[KWX:TZDX\$Vl$8fW2Q_rXKJ_.Wi2kqri-g9MI01@ ,Td^*"U"i+!<N?+$R\MaRBaZQpo=Cori#jrri-X4WiN+tWMleqWiE+V@7_XV'b(?H!TF(b!u<IZ@YUbo XSAgsWMocn!N;ppW!'*#X/rDrWsbVJ?;ER5+V=k]!sAH$#7Mb;<HFM7_u6VAVgqu)#R1G7!VZTk!!`N, "pbZ#HH#m`(#uNuWi2hmV5:&cV5C2iXKSk5XK&8tWu.h6VPL#bW2uV1:+-MY#Qt,H5A6Loajm]qWs>8= 9cs]F"9S>u,R4r&.7S9Kk3^9oVP%a+2\6]:$NgG2!!!''"pZ)/@Ze%8cbK7U#cFW!W2Q_rXK)9#,H7W> WM+644;SnN$j-hO+Y?H8Vt&ldXJMD!;(rRt&I8I>!VZQq'0'QT!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !6kKG#VBr8rT41*9a]t^"p#H"?]DhZrT4:0QX)EN!VHEs"!pomU;u3jjp'o+i83;Fh"f\.gtprHj5p7% !jjulp&GI(1jl"0e)J8^/I)=H!!<QbHe/#T!p&=spY-)2hVdDSjlPXNH8Z0*!!4-Tg\p78j51I)g=Ocu aN)?BbKSJhgYUlJj8A$Hj5&J?b-RRk=<n"J!#H;LT=)hqjQ#.RgtUQ8e'lgtf\,$8iT1"""m3@<4r4@m !!<9<8t5V<!or.npY-)2hr3YWjlPX4?mGmR!8@JU!?H%3q;qe?j5Jkih$2`oiT&tZjnRsAgo"gE&d7_) !XV)irT419=V1*'oDfd6)a8);gu[YYj58YEdEK_Ra2cBJdam.-hrXh!$fg1%h:pZ9d^)ad!VcWs%6&df rT40f3X+pO$NVD_R'b,pfSMj(!V-3n!>.84_t`?riSNAErn7D*gA]h4gtprJfo8B6!r)a&!\8;_]$]H\ H8Z,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F)+NH(Y&M#gCJmJ6>/g'ERS$%KdCm3'gGN Fec:P]=uJSrr38GMcVea(^^6CrW*6:.m?9n=)*j&V5C?%[^`r`oY2E^^W=aDbK%Q=Y)Hj[1*6r*!!**% +[f7,@XXEJh#@<YjJ$*8$3gV7qu@62#nRk4>^Mg6VPU/k[CEmA^C\6"`lZNTd*:G8mGu<I==FLS"ptSi ?@S?;WOTXV^\bbR^r47<e^DXTZaI?VpqIK\g%YO@[=_C79k7s@@W@:&Z+%=:^C\2raO8]3q"*^UGt/na #R(;.!"]/8$kXOMB8!+YUo1/o\%03E^CS3"`ll]WcckP>lJAmo7iDI5!s/M`!!`Q/#RN\1NOnJk*5/nm \%0/f_o0U=ccO8L`R!Q-k1HAF66-gO"p+ZG#4#U<AtSc-;/^s0*<>=:([!qu]g!"08W0KDm9F-3?( [_2@L$H'p(]sXi:WjK:LrP'&__o9^XpYs5kGt]F_#7qb!7UpnJrP&T``M7QR4=(R5!"/f.!Z!jq:g8%! XNCJA#kk`M4UVJu!s/?##6bST,sGLUNsDMXUnjrp\@_CJ)8O)*`74edrTL7t3"$#s"To`1<)I(MO0[76 rs.nlC,?8%"TnH!!X/uJJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7_t?;f%,VWVrq(YEW]W$O?k: li7b&+\$=8W4'FIZ*:C5\_?ZKo;5\6"TAH2!!33("Y<rFdbE9lY6M)0Z*1C8Y4Jb@Y-,1@Z*:=-Rs.RO #mLM6!!39-"u^A%o^1/CYe]#E`KF.J#l"B0$5b-M:i(fRUSXogYH4hsXWFXKYHYIBZ`ggNYap#0-49eU $5+7>@"P&LW2d#&Xno.,YHP=EZ)jh!Vl?cmXV7t[jm_&\9c=$_?Bs-kbIjpYX/top$a-kH\BN.3X`6TF !r2g-":lP+5?i5fUSFceX0/M*Y4Sh,Y-+t6[C!0@]=Fu+Aj%+;huF#a#8%n$8oKfkm&_,+Wi;nrXg#(9 Za[9DY,nV,\%/`2?SrMtrW2os#6bMO+ZNbYT)GbsY*s2h$O?n<!qu]g!"'K"<Ha=jWNWJ+X7iXtY-4n* rhoq$WiN<$XV7nCZaS2tQYSi7('ssR-U:dRMOsaJ#HWni.16=^!r)a/!WrT1-!m&"o%_3kZJ4$TXCO." p](O*)_OK\DM",XU8+ZeY,n_rXWXdMYd2!ue%_GZ0bFBd!WrTVA#&GZf>4c(gXX<5=tL0T!!3KL2M(p\ !.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!a5t@$.h9e%kp_#GliJ-jTtZ"7Q:>!<i`:'KpE;s8MuWXJVqq Wge<176W%:%0Zk:!W`K8'c]5?MoaW"a1MYa[&g1'W2ZfhWsbi&U7RpFR@8kA58X;$(]jaG'Heu)I]re5 _5sQ!Aka`h(D$iR!<N&t%hgNcB7l\S['[9P\?N'6Wq<>5W2?>aT:VOAL1Nk%',(i[";2k9884'a^q7(W W2luqWsbf#T:DUNW3<G.WN,cp'V^b4@9Zo45;H&WR+9R*^p^DHWiG]l%]5tjQucCn+<21-#6P#.qu@93 *&UT5N1mJY[C*KOYH+\'oW&M#V50fXSt2<r>!!`=&IJ[@!TF(b!u<FV@"Y;fXQuo*XKA\-WMQ>_TqA$O St2C2E)etG+;YCd!<N<"!!`oT3`C'cZbuaB#cE5X0*hab!s/,rq>_!,"9o,eA>8Gjs8C'HY,qE!%'$5( UnOZf[^rfJWiH#u'W@h#S;ClM-k-Oi"99B*BUZEPf<Y@U#G6*4+9r#P!r)a5#8%q'6uJ[^n]J)5TP[^g ',M8h!s&E&!!3'##7r@UCQ"abZ3R\F\@8cHWN#Nj,H@Z<UR>q!2&R>H$Ng_N+=p65W:T2jXehM$;D/\" &IAL>!VZQq&N=0N!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#V9l6rT41*9a]q]%g<h5C8T\Cj5f=Q Z%cX-"nVcu$7nhcOgGA4dFd=8j5f=ojpL##e&T/.WLdQ;!VQL$">Y4n]@,]VCb#_kn,Ne-4bToJ`R*8l hW"1i$fg+!f[7aRZ\V'i"SVm%#sY#td+dRBk549LjPJY?bK7c@]ZA[[jS@pBh8>b*6lQ1+!"&rdF,m37 db3I7jRqX@jPAA-\o9YE"7Q9u"!1=7Z+\6-g"kTHo]?P>h:pQ,`Or?k1CjNb!8@JU!?>q1m,eE2iSiYm h[SGtf?q^X]!//p="Fpcn,NLr5,eGB!o$ihnGr.\#RM\HJ]-6ti8j^r%-63oaLT4/cHt.shrF[t#NXh! fsjcl!VcWs%6&aerT40f3X+mN$6WfCZcq:YL-6"InGiXm&iXe8VmaCcf%]$=o]?G@j5Jn=G;]s5p]([' .W:ied,</m1("'M!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(F).OHCt/N#g:AkIoelc'ERS$ (]k-b.5ae*Bo&7W[(OE6o)Ja>U2`pg,7jbR#lt&9*%sEK>\nrrM2I:ZV678=oY2ficIUIh_mutDKk3b/ +r1Ib!!**%+$i_">^)7;hZ*WTiLs[2#mLM6qu@60#7D%j87[1*Mi*CRR]3ji^E1><g#qkbe&K5:ZDEFf 590k1"U"oQ8SEL,PbPb(^\bbS_9Lm0qrl>6Tr5-)^%oDW`9[-khPG6_.6C@3>\A&(NLHWK^%K,O^sCfp hUfiYV0uB#'aOsF!W<!0!<i]9'/NO(L5ChFMNj[7](NfL^rFaXm-NWU_8!RaT7']p'*A==!Wh<]#6G#5 #X)s^]'R0O\[AZBYe7m#g#Cf8bJ_'%Yck%"OD@KB'FkEP!W<!'!X&]5,?B5arP&WRc*)h)6S0&TpAjme $OILj/OWcVGDMN[\+m]G`Q,s5[%rh;O-lrYrP'&`aOK2Jn^+Ft@mD(8#7qb!7V$tKrP&Tb`1_6J3[>71 !#GY:!YdXj:0;CjWlb8?s7*O>4:28r!Wi6"#6YAF)(S3aFU*YXMM[4WU:0^/,f.F?cKG3$k0&ln0aS*i "To]/;,CSCNj@48s8D)[Befqu!s85t!X/uIJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#7Vn=;/1`O WVrq(YE`]U$jQn:li8=6(c5'+L7l/u\[A]F[*.G"o;u^[%LN@@!!*-'"!'X;N0p'&QNs(]\%B)TYcdW# ,d+J\Yc+(TLil]S('XmD!WW9("U6l'Z1d_@_6C]+c+Aa+,ma8G$jR=_-9=t8H]!uSUoOEqoW91;ZF[cc Yc!tRKQUTk/K"fo"9o8I/P^,<Q(Y+WXf_H%$F7=`afqJ%NL$3:poP47c.UXSE'4j7+A$[LVl-DfVl$Qe XUDSK]XFc&IV)"t&HV\-%g*.Q+"T][DM!h2Su/QhY4Jb+YI;$[]We)rO+1tJ4XLaDhuF#a#7qe!8oKil m&_5,V4sQUX0]O\b.k0VSsGIpIs#C*3["n3!<N<"!!`Z9(*PYDJY2nC#d0V43Xc5r!Wr)rp&GI4-9YCG JsrmKYck/(XU;55WMGoLR%1"NWr&n3YdVEqm)=rf0-1Z0!"^J@<cEkdr2g4,Md.V9"p4r%!##D9"U68Y SE9D%aL&5&d__Y`/eIdX#6b\\/3Qj@FU*V[QCt:ZXJtio+Kr)Z][PZTV1)/h%KHM2!sL2cV!da*_Qpf) c+&^0.1>bJ!X]u+JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K1+P-i9Z_#:;=V0Z,i#6b54n,Om< !sJr?/ldM4bM2*dW2?GlSrdeb;EZKD#R(;3!<i`='Ic=TJs)\&Ym7eO]<A-/VlB<h-`<JrM1U2'G@sQ! &-Dt9!WiZC+"U6:Z2a:5Xf%Ct:FR,!&I8F=!W)j-%37,j=DrhWTWYuObJCNaoW'%1Tp_!uLkC1q=$7c? %1*.>$l:-B:2uH*^r!X]X/l,u%&fkaL3nc>SYWBjY,V5t'V^;!>>%RR0df4lIAF!T`R)Q:Y,V)p&#l1^ J9G9l1`R5?#m:;1!W2p/";)k;942t"S#3R0cc3`'Wq<>&URmd0L4k/+APG$$&ISgH!!2$Y#Qkbj6<o&7 \?,%t)m$?U_RZ_@R?ED_Mi3:>HuN=\1`mPF#6Fr-!W2p&$QhB+Dj.H@rMp4%JQj]2"9el.pAk$i%KZ_8 "XHZ]V8CsYp!gpfpo=h%Vjrm,RB+6\d`AbprMpX/S<o%E<^.c9$4$_6*'e5-\'!=.rMp0mF\Nq^"9eo& !$ha[)C.XdT'c:#Z_jF9=>ps4'at-E!<<*#!<N<1*%s`bDh=,WTW>TBbK%)noW'48Tq%R)B213&(_I&U #o"L396dE.mDlB+RVPeQ'GqAf!W`>r!!3`i?\/90!.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<HWD9)V; !mF:EirBSn)b>\)f\PNJgqp"G5S*tg!!EK@.7.;FH^_Oogu%,Po]?J7_4cHp<(&MZ!VHF#"#"Y[[F!pL C+9Ghn,Ndr%4atWHC;%XeDBi[$Js=R[[i%c<&YWtp&G@!'hE;2_VXG;qrS=He\7l<L442TKr`GVq;qk7 W,4gB#lFZ/%5UXiKr2N-g>V_e#NO",JRL>K"RZ6s!u3jmBniFpb1YbHjpU8*dD2uMH=KZ!%g)Y/g&M0o CYS4<'B.d!c-tG"cblrVM03<(68'/]!Ug!i#X50bjoX:?&+KYj!!`l\<L(,9f\uYg%-#I0Jmi_RP+&Pm f&?Si#3"7Y]T"]TpAb:(2La6UjoVeK"RQ0r*F+T+akbU'3t;;\!!30.+U:54EfdB;d+n9U#isjqd^3@/ #m'f$$N__lR'k8ubB#9B!U]r>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"V)@p5@Af0rP&W]b,Keh 5:R<Im/Rt(#7hUo6<I]<MO:KV_p$j!rnb,EBhU2oqu?s+%iQ]P93Z3;Fa/+\PFo"foY2fse'lRUXdk8k >!abY'FP'E!!*-&*^<@o=`TP0hZ*WQgn8(,#R(;3qu@6/"9f&I/4*BLEHc\VLRPXC^E1DKnbi1?aKhG! HYHGB-P?I_!s/N?0hbnoJsEm]^\bbS_qb+gs6%@tMO10E^%oDWb3J6M`KF^m+=oKB:g\$_Iu'Df](NfL ^t@W#dC>d"B2(<-$j?_7!W<!0!<WK1$Qh/s?>=S*G^tdI\b3]K_9Ls5rUAITWgS]d@8&O$$i^;.!TO.b !X&]44DKkfm(XOLYGe@t\'s:.n(Z+%Z)*bCHu37g4t@Q[#6b/0r;['("9o,V<dgS<^BhX"YCp%G/J\E^ !;6C#"Ubq]2,.FjEIsL`pqI3Y`4W:KP_=1,M4D*S^D+W7k4eo>^6NS31`-2t&/libAUgcZ^B`0'T5dRb ,7aGJ(BFO<'/rTY<G@5eao;>>m'Ljr#mLM6!W<!'!X/l?(FhRE#@D:iH$P%-X7X.P_8jsYq>96qXa<ko "pY;6!uaC#:Khk!YgrdRqVe>c0Eq[_!r)`s"Ul,t!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO%3dc, BRuSNrN-=.P@ZKU"p>"o!$q[W+Z2f*O1*][]<ncH]#iUnZZe\W'FP'E!<E6'&L05/?"n;)#E5=bbJ(Km YOnqBZE^U-OFM+R8MV=r"9JZ,!!36+"ZC>+q=NL[Z+\]-YC/qb#l"B1":5SQ+u;YjBmGQ%U8k;roW91< \\lM%UlTn>>"1:l(CLBI!sAf7+?3>;JWc_-Xf_K&$a.+_bf-E<I<:()UA1i)[`6+gNE@eB!#.4gFFf:2 RA$LVXS&\(Y.D9LT7LWL2'WeB!r2g,!X/rC(FV=<?Z1CSSYrNgoW8\-ZFn9$Z^lqsAlLuH*YSh^huF#a #S7ju8T'Tim&_)%Tph@;W5I!Ce[_B7KQh3<;*m,h*"W>Q!W2p&"Ul.i3*q0.rN-@.Rqt(m#6Y)0pAjme $O[au2Gn=IWO0%<X8/k+Y,e7ZI=m64QCt.TX8T.7ZGG)Rp;;GR,8L^l!"^G=;f.5YX8T.*Y)?I1#R1A4 p](s/!sAcR?C^0Nk/t*:d`T(_<\"^U!!`W6&JlZI5u@hpEe0=IW3#Tm+Kr2fbNITdMe#'t$ig;0!sL5d VXO-3_m6l$_lJ/W,RX/D!XTl'JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K4-PI8K]_#:;=V0l8j "U,#1n,Om<!WrT3,!K7_T"34lYc4M!UmdHpA5G6+#mUS8!!<B0$5b-M9O`.$Sd2C-`5/LPV5X$e-_liT EbT#f:dHZO#m(21!<NQA+"U08YlFF@Y,7Iu:FmM*&dSO>!W)j-#7qe!1e:hiL75?hg!@L9oW&q,R>?35 E,&i]5q<`Z#R(>3"q;7c2HG-u[(aNYX8Aq+VjDpRBQAQYP+\k]W;3J.TRUQI4ZP/>*&0rnJX!%EeC_mR WqED&ViuOD=\1Ru&ISmJ"9AQ#!"]5>'-/M_:1SR-TsrJ'bIX_HWt;8(P_++#D.d6O3@,7D#6Y.e!!`T> -pLg]TXa<g)R$`meB+t]M0=#cG][_2>#.@9+;>:l!s/K(qZ$j/+#Zo4Og2\"WsGVR>:g$^"9S]!!;Z[+ !<N<)(beTtNjI[Dq;&riq5Xq%TT=VAKq?$<m+B4UrMpX-R"8^I7l;=o#R1D3*'e8/\]ia5rMp0mF\Nt` "9Sc$!#>bL)C%F\T()[3[AKX<=uR?>((10E!WE)u!=&f>)(%10=DS4mQE%jVf#P)gX!4I4R#l2l7kl## %gW1B'-AYpGGk3+b-%S1DG_u')%[&S!VQKp&MdRB!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!6kKG#:jZ3 rT41*9*sSX%L+=nZcq"WjP\P+ZYh&mnc/^n%jVBFAsL0\g>Cr_jp05+Db2T%%0Z8&$NhqoOKm-j_.P2& !U]pn!tQYC@u$u%g[sV7gVp1OBM'uu$3Ki"#6GSsA>.c?k549Lhntq%;+sD;.SG,qhYH:;du-mA$N^,) #RVM+;0S>4d,=TZ#2ck581+lKlMq1p'eE(!P-E9jp#ZVAe\%Q,><jVP"p+T$g&M0nC"r":&DksY]#N%; ]V0gh;*$*A$j5hr!XLufrT419<tFg$nc/mq%l@p[YKGbujp^.SGY0;C8QfVUVTI`ojp'_f\"RCU"nr!! $oNI`rT40d3!AUK$5us"VoRWGJiXABmJm4f#72;+<dgROf(A)0j4hnsS4OY(pAbR&->/OKcJZl_.L-"B !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Z;(aM@SH_:8O#g:;fHrN9Y'*7G"(BOaF#r#.\@=='+ \A?)$a6`!4XGC7H)>jI>!sJo:(F_LC#@;+ZDMaRR[e.<_cd^1RWK;7.7l2Db22!!!$#!ZjKs9NH%h Zek`^pXl'F.gH4[!rN$/!<E6(#SJ+)3`0:!E.*hLoY1p[l2:STe?kKd@7iF()\E>Q!=9,O.QLRPN3C"2 qnEQXli7"ah6i>^L7G?Xq7dWijk\(]I8hm8*?m!j8mH+PIYjW*otM$QhqcVlQuZ(]-5mBu!W`?!!"T)2 !X&lH+=]`[A8619Qal_'&Acohrr;<,Wf(dt6SK]$%L)h4iW'2a!sJliC6#pm^DjS\Vk^)pg[Y=4f"eGV Kl:-e3@Z$b&.&F?!Wi3!#6G#4#U<E!T)HD0^s&s6=$eGR!qu]g!"/f0"U?,5;-ILOM6?Zh%)0`pXd4rt F(K6;PIUS+'ZJo%s8V#WGuQsT&c`.J)C7mcJ?/X`#LC2VDFuc0%efu&!>H2(8kN#mKr)ois8;)dE]OI1 "9JW&!!`N+!X&`>(Ej#;86TYCG__sa^Eg_@h!>"4dBS[C66ZR:"9S]D4\eaSEJh!Prr;WGUh2:a"9JW! !!393'S6=:!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`rU2G@_4Q`9qc#HsA'0aS$d!UKe'!='2U,u8om l.!Y]YHP4:[EZ"4=#(m1#6"T/!<E<1%i-HM9OA$KPdAr^^:(9<XX(9XTo=,"75#c"$jHb7!<E0%!sAcb DmfH7iP`"4beBin5T^7+!"T,6"9f8Q-8J(tFGcQ^Wiu&s*jNN'bH[+M>X^Cj&dSXC!rr?'!X',_3`'RB RB*HlqlL:0_9L!/OE=u7Dhjjaq5k@A]r6p)66QU7#p(ru?Z(@QQ_C@YorSY*^9aA]?9]_H#mCA2q#Cs, !X&Z3&KWD\:M"p:Su/TiorSe.\])e5UkWY`4tIW^#6Y)0huF#a"qMRq88OBgm&_)"S<oA&Us.cfe?4mW AQ(oM,T74!"p4r+!W)j%"Ul.i3*q3/rN-@.QtnYf"pG)1pAjme$O$nM(c>E@TX(r3X8&e)VNlO;BQAKX Q_:@[rN-d?biSKi^iqsX%L<1;%ja;7CkS7XrN-=-M-2)/"Tni$!##D9"9g)XT',k6c*jk$_QAPg-k5qO #6Fu2"Uc%f/-e79COqkHWN,Tm+L/N$g@a'mG>L+:$NL20!sL5eVsj97`Nm+t\smS%+:.T>!X]o%JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8K4-PdST`_#:;=V0l/g"U"r0mf4a:!<NB<-U(IQR_@duYG\=t UnO?5AORjP#mUM3!<N<*$5":)2c+4B#Fr!8dBfmOVt@"tSV;)k:d[)c(_@#WrW*`6!XTM].8P>rs8(0I VNu'r0-D;K$2su&!"T/8#7;1m2b@M0T>916bHUW>*hn[?D.QsM6T$,+$NgJ4!WW9)"U6&2?\Y>b_Qp5C ql:.%NH/K,?>=S-NhW\Tq5Y4#H<rlg-6<m7+YlMnGa#>Vg"=0AorAM!Li-3S0Hh)6!WrN*q#Cs,!sJo< )_4'KD2YI?g"F<DorAY&S;)0$@TZ;h0-Co6!s8T*huEua'.5nAH(DA/Wu&+[e`b\jN,`<=B4P=G6Sg&1 'FY3L"9\E!#7DS19P]]m^\t2=Vh%u&"U,#2!VZTi!<*!,$lLEP?BWM3s7XgDq5Xq&R=]9UE/_'Tl0?Qo rMpX*NFbgW2(9:H"p4r-*C+A1\]ig7rMp0mG"a"_"U"r&!#>_J(a2"USF?L:\Yl0E><*`I(CU?G!W)j% !X/c8&g9&"#@)PB\_,Wa]_&6KUmdBk>uX3E)&!G`!=0;Z-qJKYq=i1=V4)@$0,kfA#QXu"!!3]d=+UF( !.k3&!.k3&!.k3&!.k3&!.k3&!.k3q!!<EUCWHD9!mF:Di;a<"9:`]>g>h8PhV4tp%e'Gu"U>l,DlUq. gu@tg"iGdZ+q+PC!"&fW@Yq53iP9(S#O;?o";s:/LU#M(jp0MFM.Jps%Kc,""V<_Ff&l,ljp^(OG"3u/ *YJ]&<1Me?joinJ1(43Z!!`T<.o1/Q`8:1L"l>\F+U8&3!!W`R88X[0hY$":j3+9I=Z.3)!Vl`L!!4'Q g[+&4gs!7&Zc'APIp"ub'aFd)!!3BgVu>`ZgK+mT!:^$n!Z=CAPeGlJjp^+9;'H5X+u)2aL:H(<jp'YW UO>TB!VZQr$T*7]rT40d2[&LJ$5cWhTu5[<JiF5Am/R@k!Y6k`H)8dXjp0ho_Qe\N'*@n.$N_VbO0Hjd a_N7/!U]r>!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO"Ul(d3a6lurNlj?Y)m?h2'EM3l2V+k!?aa5 ?=\,8W;X(._SrsUJ6OuLq>^["!=9Ph2$Z`ZBl.a9OJVoa!4i*;&@]-V[^NiYXIY)^<'DlU&dJ45('+I< (c=iV;.+XBeE#ZE^4oN2"p>#/p](j,"ptk_2GICiG`&3%['mENrjENO[^W`RbM2%;c`iRO<^JDY%grRD qu@$-%2C!PA:pY_[/@?C\&7"_jk[G3E`$_1S?B0)rO*WR\%onjUkWAF,RtG&)':\,>A888PcD*t[^Q.D &@T$V\%BSjX-Ra&2&[)8"p4Gt%KQ\;$kXgN;IFElO/TFmq6gpF\%9rCjQ4=XKk=+B-l*6u"TmQ]#6=r1 "uBYBXmED2V4F!;R&7a^h8Z^kNHJ]*4>%`h"pG)1p](O"!sJoN9m)m&Zj=4IP]'2S,SC1Q!:p0r!>6qN :g@dbSc#o,\$rlXZD<J%DeNQ]Ap903rO*E[iq36<[te9R/KG9#"q;=j6",;=rNlg=VM&2=/fY8m!#5M8 %kC(B:0MP"a5H(9cBr&s"pG)1p](Bs"U>AA'J)XRATWQkZa."9[h#pU\$s-!hWs:DWJbRf1E6;r'a"LP 1egbF@<e<gj5Sb.N)qD1!s/Mu!!390&V:"7!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`iM/O3?RKU;Y5 #G?NH.0g%[!pfmq!<`Z;'/sEcaN_T/WViOrOE+,N*t\_T!!!'!!WriQ0h)CUHBktY]s=a<VZ<^qV\#f* VPg5_P_![O5:[NZ#R1D/!##D9!sC5aRb6KE^T=E,Oa0t_(^BU4$j@%R*A0ccEeB@9Stu@`!3#mp&>lA( W2?MmV4NHY<'2ZN%gDq5!!<&u#n%V"3E'aKSu&@_V[fZ)Whc&<Cg'Fp=E9=nV>R5,V5:)XIqD2&(BjdA &g8qq<G$B)MjC.4V[fZ(WM#8p>X0YL"9AQ)!VHF$!XB5P+Z<&*H%h<FUA(SaW",`#S:+mA2C0.I!W`?' !T3q`!<rrI*B[_[T^8HfP_t-BJs<UobG^8:>=^Y")A!,ToDf+!$PFI6;K@s!U^3ZI=tBm_"9ASu!;6C# !sJo:,!f[jPaS&7r21((V5C)OH=0*:>@hf&MNsq7V\HVhkORJs>qZZp"Tn`6*\]ueEep=cU^*9.8K@p: !s85t'*/.:"<LBp_r9.cZ)FFaJR^ea$1n3"":,PU$7.`3C41r&S>2sXq55F8W34%bh:/ER>!"&G#QOo- !sBoPNlp,&^TOE)NH%cJ(^K[5!XBJgJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u#8/ajH^Uh:YPk." Q>]A<"U"o/li7Fq$lLEN<-O_?\?;^'rLjIUBLX6T#mLM0!!`W3%20mB9OnBTO.i__XJr#oUB%"eUCa)k U7\-=G@=0./0,<.#6Y/-!#>S?&/lcZArt0]]r[u`B2('')A!,S!VQL%#8A@97:CY9YHbC7V>d4iV#6u" TV/$@IrAds9g1-N'at3G!Wi/u#o"p[A:Kl@Vkp0dUCNr_I:lMJ:K:P%FGQB_V>R)(U8!Zd;DfL6'+P?b +tu;dEf?p%Z*1&'U]$tsUSFKTR<r=1-QNj-!r`5m!"8o;(ah1:C5JmoZa-S)UCs5mS;MW.>uO9S-5mI% !s/K(!8mh_!Y6D/7Uq(>V!Oci]$K='bbKPr>?P$*83/1>&I\sL!<Mlo#7)1u6!8DoUA^bjS9.LS"9\c- p&Odd$O.(V*^=J7hYHKh[JZd1TVA'MLN$B\<cF/*]">GNrM('cDd,dk.io6+"9S]*))kcQS>rimrLjIY CIB*G"Tnl%!##ME'HAo0J@!eDZ)!P'<B)0D'+=d?pAb:!&0<D15?W/nY-P@9WMcZkUa;e2TV.R"Eb&<F 4!tdT$O$P9&/ZTS@>VY@]<%cdBh^<&(CpcPo`,%'.7f$jJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&bl@hI 'L$sDVZM>p!oX+`![;-*OIW0GVZM#p#k%`u!u*Y+N0g39rMfk!ri-:(WMl_mE^1QK!Ug!p'16/SPG<4] ('Nn&"p5Sm88+$_ri,t#ri-@,Wi;trLh946)@6H5!!NB;6&;M?r2L7+Qt/?%%LWFA!!XTERAp+a"fSAK 4;.ej!!WH3+ZWJDS,KAcXTtl+WMu=b,7*B2"U6#+;K\Q)WX,T'UO??4.h`*\!87DS#s".7V[SoGEa`^' Bi[DH)%-N0!!33D@f<2+N\1J)!:Tsl"X#p0HCk&7&#lM*Qr"q1!!3<6(+W!rSc,PlQuG_M'*S"/!s9K5 MZ'FRBH-:<$4&ChEf6QL9HOK?m/RIn!!*KU5@&l@X/u3#$EC,*WLeoe><`u0o`,:16=kS/U4#0?"76)? !.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO!sf>M.S"!"rK7GHHX]Q&-5[*kkl:ti'e`3eCNY/drK7DI M0j#?4spp;!!E<-%i?Pu1e1Y[EdNJ#QBqH8&XJcMQ'[esKm@E:8NA:B((CHD!#5M8&0s;1=D)l9R%9h; K3^JT"9S]+p])]D"U5;K,rS7oAp/olP`q>sQ'[l*R?s5)R@Kk?O*G,.4=q]j$3gV7qu@$,$4dh'9kf<C P80@JQ^=#)R\$1FR=8^B2bdk-MNF!crKe@dP`1'/>XU.^$4RIW(*bV';djQlN09Ejqj.h\R@'A'KQL]u 2^K+G#Qt2$!"Ar2"UGJR.QgF1CO;&(rfmGJrg4@cQC!o+SXuF.E*>^h.3&m*"p4n`!!`N+!s9c:BoD>@ (Q*inGC,"'R?`SSCgTt*2(9X_$j6Y6!VcX"!<NB-'K'$?rK7GIIUu/0-lNKqpAjaa2%1K[6W.?6Lm+'g Q^F,+R$EGL@STTh84HQjG`J&SR$jJ:USXH*>!OV]'F=aC$4mq*9PK:\Op?ne=[4P\'F4=3'`e=B*]-Ac @WI-eS=Z74BLF'K!s/Mu!!<6("U@$s*\TfW@<$j]PEhK&R@'A.Q^F,,R%'Y=R"]Nc8N%e+!s8T+!=pA: :0VFWM3jd(R"f!3*!66C!VcWr!XB-c!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!7:cO#8/+14&'+&rI"ol <]1g!!s8Vk!"8l2"UGM_7:qF:LkC3UI0Xe!8222#$O-G.#6=i,!=9Ga0*spFBmtknKS+i,r.5N3Jq8K% I;rh"7lMk9&.&OC!rN$3!<N?**^OJ&QB-fOFCnWF1ER,1oDfC)#S%Oj/O*':Ao;jCJ:W@PJeETaIt<0$ HZX(7=%5%q)\NJ[!r`5u!!rlA)^dU?@s<EP!.k-$/qJV(G&(G^7lrCR4]5p=J:W9'Jq/?#G@jf>/fbK+ !<`fI+Y5TB<*s<ZIY*-%qgo?0J:`5f?VEL1)%-HH!W`>p!"o;9$4mt!1e(PTBl\TPJ:W?)K)L31JU`2p E+r]W5VOB!%gW4<rW1pW#QY)7%210X>^,O_'6J#$?Y"&"Kmd`=83/@J)%m>^!qZHt"9o8I+ZE54rI"rq =ZRN,"9S`,pAjme3<B<e#8\s[>\S,!I=Zs$JqJW)I<oL(5V4fU7Sm<#EdiUlJUrH2Nfo$"4!+b5"9SW1 'I#1p;.=_II0XUc0+n?h!<W#r'*/.9!u<e!L7+3]Jp;$89KFF4#P7uu!X9#D2&Rc$8m5_?FaejkKS>,4 K7\]+JU`6(L5:Fo:H0X<%gE"7!WrNB4CO,4Ne`.,AQ;#K*=i>G!!3<7)hJ'A!.k3&!.k3&!.k3&!.k3& !.k3&!.k3u!!`rV3)O1'FaF"5#BEa!('F^@"7-!o!XB;V,rn\1G^T@7#Ad6o)$gEK"8i-(!sT#?(F:e& #?"uLH\$]uJ,FirIfFfpHOFXn7l;\8'++sI"9\T&'`eLI&f<,e?@%'JH[BL+4X_0\$j6V(!"K2C(*G4p ;eU8uIXm$$K):&uJ,Xj(E+N0J6oQS9'FkEQrW2lr#n.h-6WIZ;I"?hIJ.@$WH?3Rq6oR.g4?ZJKErLV0 Jq/<"I=,p65:.-X$jm4M(Ek:j93uR\H[C0jJ,4['IXQNb?q<'m'at9JrW2Wk$N^SG)'h"-=`8J1J,Y!! K):'/Isl`kCg^:95VXN%&e"sGrW*!!huF#a$Pt!@6W\#Jm!BJ"MNO6\F(/$?7mT0k-l`m-#R1D4!VQKu "qht.4&9@.rHecm=#_*$!s/Pt!;6CQ":5SQ.S+66R[0%jJqAH#I!p?gG%=K7.QU71F*`=fJ:N)tHu`Of 4"MNj$3UG5!WWcZ4]c05GC'47#A[!a&d8C?!r)a1":#DM+uiP?IXQQiF'1m`)\ief!<Mlo!sAuI+#PT2 :186hIY*6*Jq&5uIt*!!IXQWeC1(%74=_<[$3gS4"q)"Z.6h$ZI=-BgD,ibI(D.&YoDeq!*AN-GJcLB& JcLB&JcLB&JcLB&JcLB&JcLB&bQ%\F#T3Le!>tsr!!NE;*$6COr?_O]"RZ6r!!!3;+seWf/h[,W$84%a /1W.t-PZjeli77u'cS8@(C1'*!!iT.$PXd9/M8^U0FBEb/M&G&*u5:i!p]gg#TbKH#q[hb0.e\#'aY!> !"Au>,qLW#0J>"-.2rNnoDf*s"qDLt/1`CM0Ej$[.O>Q,irBDe"qDP!/M/S.0JNJY#V@SW-l`g+"Te;s f`2$W*pb3T+WVEu'E\pS!s.K`!<Ec1-35.jn,VnW%g*1S+"/`o0/"q/.4?AK!rN$-!<W`J.53D,/LVPM #6OMt!W`TIr?_OX!UB^j"V_gq,970plN$k`"p5,D+"])uqCi1,/1N"i)AEP\o)K"&(E=PC)$g90!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`Q/#R_Fs4&5`W#?+)O.NT?8#3Psk$l^][6qU9WrE0A*:.7?' ,o-g^!!<?0%MU$,-oF:`;HI18A7]@bAS#C_@:3GL<_YtF1+==`&e#!Iq#C[$#o"L73C6A>r`BG,9/[t) !WiB'p])]C!X/c9'd"h[5=nj]?X[GTA7]@bARo4W?X?u?:II,m+rV(%"U"o.qu@$)"UPPT.m?j7>r,l" An>Oa@piSF<Cf/%+=oND<a/p?AS#C^?sHQ"5;X`-%gE4E#n.Lg-87JK9ikS,@:f@K%qT<_@TQ8k3@l9f $O-b9!V?@?!WrT1%Mp9>2a^AD?=75PA7]=aAn5C[?XI)B=A(n9-Qa0:#R(;3!T*k^!<E6''.5tBlrb-( :eaJR:K(=m911p$/gVSV&e#!I!W`>s!!`N*!WrfO1.hFI#ZaMW/0>Z="p+Gunc1NO&0*)T5u(Tl@q9.` A7K%T;+*Aq/1N%r1I4iDA7]=aAR]%P;aW>f)&!A]!!3?1$lUZ\;>jW&;*m&c)\WS_oDfO/&035Y5Y+dT =]\[&4t%-J!WiDt!!<6'!sL7]&K<#M4%E1T@:Nn`BkV-kAn>Oa@pr_M<_>V6.N]B5!W`?'!=0A`0KVWp <;ou'<_k\"&H_q4p](?s":'MYJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&d/XCS$5"+!.lBTj7g)(1*"E)M !p]go!X&Z3'dbq7:JFGPrC7)X1+!nN$O-_1!!WH)!X/uF)?V6=4%K9G),O1-;H$Ll;Gg=f9hS#C2_QHt ((LTS!s8W&!!!'!!Y5ni4&T!R9LqE,/0l)D#QjVu'E\LD$kX@$/2fOU8P`/\;cHXm:f.-e$r0A\4#AN7 *#/tk"p=f)qu@$,$4dmp/ilNu:D?Z(;c6Ol:.@<".O6)R(*YFq8l&:_;A`5*9LUup+rLps!WW<-$kaC" -SIA?6qgJW;Z'H';,C%^5;Xf3((LQN!W`Ap!$qXJ"pk_Q*[ia%4[_t?;,U=l;Gp=e:esh\7mK'i.NoWB %L<4?rW*!!huF#`!sJo<(F1h*lph^V5<Lkc5!hb+3%u^$)&*Pe#6P&"!!`Q/"q)%c/3Nl$"@Fja%g2e4 !!2fop&I)S!X&W8)(%4(6:jpM;c6Rm:eXJO3A2Qm*$H[\2EaQ,<)QUk:JOVW6S]_q"U"o/!!NcE)^?pn 6N'CZ4Y%?U!s&H(p](s.!<N<2*]$Gh;,'YN3\Mg#&ded6!!<9*"plI`(*G"]3'Tr/:fC=o<`N*t;,L.a 9hS&M6oHM9'b1KO!!3'#%h9a?9iFh]8O><c+VkRp"7uQp":5Tj!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !7:cO#8A:52`j;qrCI5]/fY9&!s/Mi!"8l3$P+!p.Q0X`7n?2L8I%F2*=W/T!s8B##6G#3#7V@d,RH%\ 5=eOF:f:4jrDXD,:JOVV8P)*$-ls*8$3gV9!s8E$'EJ=@#nIju1-n;t7n>iu,Spt!"p=Jt-3OP_',r/K 3']r+:fUIn<E)mr;c?Lh:/+/@1bL*r(D7)]"Tnc+q>^g+&/liJ3C?M<;_h9N;c-:`838OR+<MaM+tYfD ;cQgs<DlXh90t?W((1ER"U#)?&fDf@1He&p8l&8\;uBT);c-7^7Q;e9%h&XE!s&Go!"8l3#nIak-S[\K 852t\;ufqt<#&>0:f'nZ5rpbO,T@I.$3gV7!<E0#huF#`"q2.a,qqAMlq%j`9i+_]6om%Q.3p#V'bC]V "9\i!!!`W6&f;cA2aRC6#=^Hi%Kce7!VQNe!!iZ2#RhRu3_`TQ<ZkC@;c-Cd9M.c7/0PfP.Q'CY8PN/^ ;Gg1[4>.ru&e#!D!so#/#o4^>2a'MurCI5Y.iAZr!WrJu!##D;#7M7f/3?6g7n>s'-Q<R)#R0i#!s8`8 &N(FM.lBR\9N"tn<Dudn;c?Xp;,9qY5s-qR,8Ujq#6Y,/!sT&A(EtOu77Kd<5VOH!%giOEoDeps&0$3$ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcPNFr;ls"])_d1!!<-#hZ*cZ!WiB'nc/am!<N;a!;cit!SIJO !WN6$!UTl=!:'X^!V$0f!ODe%!<*#q!ri;I!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3u!!`N+!sAl= &fLWg#94Nm%giOF!p9Og"UPYP'c7i/r>c+_)&F##%0m"1!!<6("U6(U%1s<m+!N'^.kE5'/1W2"-mp;d +<213&Io0S"pG&/p](O$"ptkR'Gqhh*<[E%&dnmB!VZRB!<E6(":#5B&Jc9-,U=]b.P!##/Lr8!-R9lY *Z>e-%gr[J"9JW*!W2p(!<N?,#S%Rg+<r*Y.kN;&.Oc\g+<;:4%gidZ(`a_E-S-eu.46A`)AWnp#mCD0 !t5;;#n.=W(E+A>,Ub2@/Ij<^.OlYa)&!Mg#6P#/!V6:'!<E6'"UGJG&f2N2,UFfe.P(KL'.YO\-7'fX *>oS(%1<FF!s/K(!8[_T!<WQ8'HHH['-%r/(`=21*#f_2'G:ob$O?q?!r`5o!<*!$":>_Xr>c.`(_[Gg #6b/0pAjaa2$*sg$ka?t,:4fg/1`;$-m]uS'FtW_%1Egd+X\`i/1iA$,p=<H'+P9P"9JQ(!WrT3%MTo] *=!Jt&e,-O"9S2q#6P,9%1j3i)u^i\*ZPn)#5nSs!!30%![%RL#n.=Z)BU1N.4m8.0.nh-/1W5"-R9iW )AWqq$O-_4!=8`+!sT)B&eu6'rZ)+_)\WVarW2`n!W`<'JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcO0u #6G#4#RV"Q(&\mQ'FkBP!WiB(lMq7m!WiH.$kaBp(`3)c#8@[V#R1D7!r2g!!<WK0#n77Q',DH(*?H=G +sJ6UrZD^m)]BM,&J#6U#6b23!WiE"!<*!0"q2.`)]BP/'G(]\#6k83oDg*:!WrQ/#R_+T'H%i2+<`!U +s7sL*Zc=B)AWtt%LNIH"Tnl*!W)j'!X&Z2$P*sk*Zd*[+sS9S+<ML:%h/mP#6tVK'c\8:+X/$N*#]V+ %giRG!s/H("9\l6$4ICX()e8;+<_s-,7>\<*Zc48&e53Q"9eZ(o)L0?!sAc3#n.:W()\,7+<_sT+s7sK *??+?)&<hp%13@G"9S`-!<E0#hZ*l_!X&Z3$P4'>()%Dr&eP`j'c%Mr%gr[L#Qt53!Wquo#6=l."9f,A ')`RJ'b:QSr;uZmp&I)R!<N<+#Rh7Y)&sbB+sS9U*?,k2&Io-Q#RLnL&f;W5,9e6P*ZQ%6'FtKR!s8T+ !!<?.#Rh1T'`AdK'+G3G!ri;q!<*!0":>bZ*#]Y1'bUua#R1A5oDeso!WrQL"U>AD&/#ct*?QFM-7'r_ ,9e3M*#]\2()%5f#mUS9!WW6"!=o>A&K)N*(`!es%1*7C!s8)p!WiK.JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcO0u#6P/;%hTKi(&\mP'b:QQ!W`>e!!r]0"U5>C&/5ioq\BDN%g`@?!s/Q%!!`N+!WrQ0#n$kH ',MW0r?)(arZ_ms+<2:=)&<u#&.AjM"U+f,!<N<"!!`Q-"9f&=&/5$X#Sn'a$O6h<!s8)p$N^D6"UPSI &eu9(+T<T#+sJ6U+X%sK*#TM+&.]0V#6b54!s85t#m1A<%1a-i*?ZL\+X80Q*>oV*&.AmP$OR7Q(EF\F ,U4QZ*?5q3&.8^F"9S`-!sAc6$OdR['c7f.*ZuU&,7>S5)&<en#mCD6!Whcj$j$P8"pteN&f)B,+X6n1 'I"bH+X%pJ*#KD'&.JsQ#6b54!s/?#huF#`!sAf7%1a'dlkU*J(`=2-'b_&d$k*IK"pG//!rrAo!!`Q. "UGMH&JY0Z";MFS"9\W(p&Odd/-5kU":#DL)&jV?,U=TX+<MUB(DRMl$3pkH&JQ$"*[2dN*ul15&I\sN "U+f+#QXo.#7D(U&f(<["r%OQ"Te]*pAbj-!WrT0$4RR]'bqJu%h/dJ"9\i!!!<6("9o;@$Om[](`aeJ -6sfZ,5rf(+s7pG)&3ht%giRG!sA]-!!33)"U>DG'E/^P().8d#6Y/3"7uQp!sK!_!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!;um$!X&Z4$4He@ rX&l:#6k>6!W`>F!#,G8!s8]3#71_F$OdFO$4$h>!s/Me!!*-)#m^nI$OR4I"p>#&!"/l4#n.4M#mUY; !Whon#6=i,!WrW5$iCG4$Ng_?"Tm]a'*/.:"9o):#mq%K$k3RO#R1G7!qZJE!:Bgt!<WH0#71_G$k!CJ "pG)1qu@6/"9o/>$O[@N#mLJ5!W`>5!;lg*!<WE-#71eL%h9$W%/pV>#mLP8!WiB'fDpL'JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcP`L"9JZ."pb&3#mgkC"U"o/!<N;E!"&`/"9eu7#mptF#lY)/"o\W*!s.`g "T\Z-"U5/2#lP&4#R1G8!rN$*!WrQ/"pYA=#6tD2!s&H(oDepo"9e]/!=0#1#R:YA#6b55!WqB^"p+l1 "U52;rWrl9#6kA9"U"r1!qZJE!:Bgi!X&Z3#lP&6"p4r/!<N<"!"/l3"pt\D#RCV:!s,h1qu@B3"9\l5 #RLkH$4."E#6k;5!s/MQ!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!!rZ-"9er5#6tM?rWri9#6b23 !WiB'a8c;D"9]#0#m(A=$2t22#6t,/!<N;g!!NE+"9eu7":,;>"pFi*qu@60"9o2>$47(F"p4r/!W`>o !!WK,"9\l4#Q+l1#R1A5rW3'#irB/_"9f).$2t22"pFl,!!;cmJcP3=%0?Y:#mptE"pP24!W`>u!"/l3 "pbJ>"pG,3!s5n2r;[B0!sT)A$OI(C"pYA=#R:M9rW<-%e,Y(#JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&r;[N4!sJl6#7(VB#RCY?"pG,3!WiB' b5`4W!<N?*"9eu7#7(VB#R1J:"9S]+kPtVa!so,9#m^eA"pG)0p](['!sT#:#6k>7!s/Mq!<*!%!WrQ0 #lFu5#RCY>"Tnhd!<3*!!tGJ<"pYA=#mgh@"U+u1!V?AD!:Bgt!<N?+"U52;#mUY<"Tnf,qu@-+!sJl6 #RC_B"pG)1rW0S1qu?p%!WrN."pt58#mgnD#6tG:!s/Q'!S@C(!.k3&!.k3&!.k3&!.k3&!.k3&!.k3& !.k4L!!NB*"9\l3r!*0)rW<6'!WiDF!!<6'!sJT,!sSu7#5nZ.!sA`/!WhWf"T\Z,"9er/"oSW."U,#2 !rN$)!<N?+"9eo4"pFl,!<N;o!!<9)"9e]-qZ[$(rWE9)!WqB^$j$M6"9er5"pY>:"9\Q)!<WDq!.k4= !"/i1"9eu5"pY;7"9SN&qu@*+"9eu7"pG,4!s8V5!;lg1!WrQ/"U55=#m^b?"U,#2!s/K(e,Y(#JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcGlR!WiN("U5)5"U52:#5eQ(!Wg=A#6=o0"U>5:#Q+c2"9Sc/!s/N) li71j!s8Z/"o\]-!s/T(!WW9!!"T,5"U52;#6tD8"9S],!<Mfm!WiH+rWE6*#5nc."p4u,!ri;]!!`Q- "9f#8"pb)2#6b54"9S`-!V?AD!:Bgr!X&W1#6kA8"9S`-!<N#s"Tec/"pG2.!rrA1!;um&!<WH/#RCY? rW`?,quZs$!Rq+$!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3&!.k3_!.k3&!.k3&!.k3&!.k3& !.k3&!.k3&!.k3&!;um"!<N?*q$$a#"9S],!<L:B"9AN)!sAN*qum''rW<0&!TsF`!<N6(qum0*!s/Mu !!30'"TAQ."9\f.!<MclrW*'%!sA<%!sA]-!TO1Z!<<3#!rrK$"TS])!s&H(oDjICmJmCk!<N?*"T/E+ !s8T+!W2p"!<N?+qZR!&!r`52!;lg$!<E6'!sAf+#5\Q*!s/Q'!S7='!.k3&!.k3&!.k3&!.k3&!.k3& !.k3&!.k4L!!<6'!sA9#!WrK*rW1.A!s&H)"8W0!!sA`/!s/Pi!!!'!!W`B+q?-j%!Wr9"!!3'#r<*0( !sJT)rrM`l!W`?)pB:Br!<N;^!!<6'!sAB&rW<<,"9S`-!V?AD!:Bgg!<NB#"9el0!<N9&qZ$Wu"8rB$ !s&H([K-4*"p"c-!sA`1q?6d"!WiE(e,Y(#JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcH#V!<N<)!sAf( "T8E&!lb3A!<NB&"98W$"9\f/!WiDg!!NB)!s8Z/!!W?)!!E0$!!2ut#Qb)2"9eo3"9e]+!WiB'o)Jdl !r`;s"9\f.!W`>]!!30&"8;rt"9&?%!V?AD!:Bgf!<`0$!WrN+p](?s!sAK)rW<0&!O`"+!!NE+"9eo2 qucp$rW<3'!<L[MJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcP]KrrN-$qZHg!qZ4e=quQcuqucs#r;l']rrE*$r<*'$rW2co"9AN)!sAN(rW2Nh r;cm"q?-]urW2!YquQcuqucs#r;lNjJcP0<rW3!"rr`6%r;lfrrW3$#rWE0%r;jD.qZ-Qq!!;rurW;uu ec::%JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcP]K!!3'#qZHcurW1%>rrN'"r<)ltrrMBbrW3$#!!<*$ rW<*#qZ-TrrW<*%rW<'"nc/XjquZ]sr<!!"iW&rZquZg!q?$ZtoDjICmK!7frW<$#rrW0#q>^Qt!Wr<& rW<*#[K-4*rrN*#q#gQsrrLRKJcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&!!*!!quZcur<!!"`;fl= rW;s!qZ?`tl2Uebr;m$%!sAN(rW2lr!!3$"r<*'$rW2Nh!!3!!qZHj"rW1sXrrN*#qZH`trW2TjJcP3= !W`?(r<*$#rrMlp"9AQ*!sAK'rrKM-qu?d!!Wr)urW<'"df=t"JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& ])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_ JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&])[E_JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&])[E_JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcNC_J,~> %%EndBinary grestore np 564.807 284.231 mo 564.807 320.24 li 777.24 320.24 li 777.24 284.231 li cp gsave << /CSA /1 get_csa_by_name /Intent /RelativeColorimetric >> csacrd /1 /CSA get_res setcolorspace clp [1 0 0 -1 0 320 ]ct [212.433 0 0 36.009 564.807 -0.240112 ]ct snap_to_device Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf << /T 1 /W 885 /H 150 /M[885 0 0 -150 0 150 ] /BC 8 /D[0 1 0 1 0 1 0 1 ] /DS [ [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx [AGMIMG_fl 885 string /rs cvx /pop cvx] cvx ] /O 3 >> %%BeginBinary: 1 img JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6 JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLB&JcLB&JcLr6JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB&JcLB& JcLB&JcLB&JcLB&JcLr6J,~> %%EndBinary grestore np grestore grestore grestore pgrs %%PageTrailer [ [/CSA [/0 /1 ]] ] del_res Adobe_AGM_Image/pt gx Adobe_CoolType_Core/pt get exec Adobe_AGM_Core/pt gx currentdict Adobe_AGM_Utils eq {end} if showpage %%Trailer Adobe_AGM_Image/dt get exec Adobe_CoolType_Core/dt get exec Adobe_AGM_Core/dt get exec %%Pages: 1 %%DocumentNeededResources: %%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0 %%+ procset Adobe_CoolType_Utility_T42 1.0 0 %%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%+ procset Adobe_CoolType_Core 2.31 0 %%+ procset Adobe_AGM_Core 2.0 0 %%+ procset Adobe_AGM_Utils 1.0 0 %%DocumentNeededFeatures: %%DocumentSuppliedFeatures: %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentCustomColors: %%CMYKCustomColor: %%RGBCustomColor: %%EOF ���������������������������������������������������������������������������������������������������������������psi3/doc/progman/svn.fig����������������������������������������������������������������������������0000644�0001015�0000765�00000002565�10607000616�013712� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 120.00 150.00 1879 2714 9379 2714 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2179 2714 2779 3614 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2779 3614 2779 3764 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3979 3614 3979 3764 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5179 3614 5179 3764 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 120.00 150.00 2779 3614 6829 3614 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 6379 3614 6379 3764 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 120.00 150.00 6979 2714 7579 3614 9379 3614 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7579 3614 7579 3764 2 1 1 2 0 7 50 0 -1 6.000 0 0 -1 0 0 2 3975 3600 3975 2700 2 1 1 2 0 7 50 0 -1 6.000 0 0 -1 0 0 2 6375 3600 6375 2700 2 1 1 2 0 7 50 0 -1 6.000 0 0 -1 0 0 2 5182 3600 5182 2700 4 0 0 50 0 0 16 0.0000 4 165 1110 4420 2594 Main trunk\001 4 1 0 50 0 0 14 0.0000 4 150 1365 4500 4200 Release Branch\001 4 0 0 50 0 0 14 0.0000 4 195 600 2475 3000 psi-3-3\001 4 0 0 50 0 0 12 0.0000 4 180 675 2404 3914 psi-3-3-0\001 4 0 0 50 0 0 12 0.0000 4 180 675 3604 3914 psi-3-3-1\001 4 0 0 50 0 0 12 0.0000 4 180 675 4879 3914 psi-3-3-2\001 4 0 0 50 0 0 12 0.0000 4 180 675 6079 3914 psi-3-3-3\001 4 0 0 50 0 0 12 0.0000 4 180 675 7204 3914 psi-3-4-0\001 4 0 0 50 0 0 14 0.0000 4 195 600 7275 3000 psi-3-4\001 �������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/svn.tex����������������������������������������������������������������������������0000644�0001015�0000765�00000045603�11114570714�013752� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % PSI Programmer's Manual % % SVN Revision Control Section % (formerly CVS) % % TDC, February, 1996 % Modified by TDC, December 2002 % Updated from CVS to SVN, April 2007 % The subversion control system (SVN) (\htmladdnormallink{{\tt subversion.tigris.org}}{http://subversion.tigris.org/}) provides a convenient means by which programmers may obtain the latest (or any previous) version of the \PSIthree\ source from the main repository or a branch version, add new code to the source tree or modify existing \PSIthree\ modules, and then make changes and additions available to other programmers by checking the modifications back into the main repository. SVN also provides a ``safety net'' in that any erroneous modifications to the code may be easily removed once they have been identified. This section describes how to use SVN to access and modify the \PSIthree\ source code. (Note that compilation and installation instructions are given in a separate document.) The main repository for the \PSIthree\ Source code is currently maintained by the Crawford group at Virginia Tech. To check out the code, one must first obtain an SVN account by emailing \htmladdnormallink{{\tt crawdad@vt.edu}}{mailto:crawdad@vt.edu}. After you have a login-id and password, you are now ready to access the repository via a secure, SSL-based WebDAV connection, but first you must decide which version of the code you need. The PSI3 SVN repository contains three top-level directories: \begin{itemize} \item {\tt trunk}: The main development area. \item {\tt branches}: Release branches and private development branches are stored here. \item {\tt tags:} Snapshots of the repository corresponding to public releases are stored here and should {\em never} be modified. \end{itemize} If you have a PSI3 SVN account, you can peruse these directories if you like by pointing web browser to: \noindent {\tt https://sirius.chem.vt.edu/svn/psi3/} \subsection{\PSIthree\ SVN Policies: Which Branch Should I Use?} \label{section:branches} The \PSIthree\ repository is comprised of a main trunk and several release branches. The branch you should use depends on the sort of work you plan for the codes: \begin{enumerate} \item For any piece of code already in the most recent release, bug fixes (defined as anything that doesn't add functionality --- including documentation updates) should be made {\em only} on the most recent stable release branch. \item The main trunk is reserved for development of new functionality. This allows us to keep new, possibly unstable code away from public access until the code is ready. \item Code that you do not want to put into next major release of \PSIthree\ should be put onto a separate branch off the main trunk. You will be solely responsible for maintenance of the new branch, so you should read the SVN manual before attempting this. \end{enumerate} \noindent Fig.~\ref{Fig:svn} provides a schematic of the SVN revision-control structure and branch labeling. Two release branches are shown, the current stable branch, named {\tt psi-3-4}, and a planned future release, to be named {\tt psi-3-5}. The tags on the branches indicate release shapshots, where bugs have been fixed and the code has been or will be exported for public distribution. The dotted lines in the figure indicate merge points: just prior to each public release, changes made to the code on the stable release branch will be merged into the main trunk. \begin{figure}[h] \begin{center} \epsfig{file=svn.eps,height=6.5cm} \end{center} \caption{\PSIthree\ SVN branch structure with examples of branch- and release-tag labelling.} \label{Fig:svn} \end{figure} \noindent A frequently encountered problem is what to do about bug fixes that are necessary for uninterrupted code development of the code on the main trunk. As Rule 1 of the above policy states, all bug fixes of the code already in the recent stable release must go on the corresponding branch, not on the main trunk. The next step depends on the severity of the bug: \begin{enumerate} \item If the bug fix is critical and potentially affects every developer of the code on the main trunk, then \PSIthree\ administrators should be notified of the fix. If deemed necessary, appropriate steps to create a new patch release will be made. Once the next patch release is created then the bug fixes will be merged onto the main trunk. If the bug fix doesn't warrant an immediate new patch release, then you can incorporate the bug fix into your local copy of the main trunk code manually or using SVN merge features. This will allow you to continue development until next patch release is created and the bug fix is incorporated into the main trunk code in the repository. However you should {\em never} merge such changes into the main trunk yourself. \item If the bug fix is not critical (e.g. a documentation update/fix), then you should wait until next patch release when it will be merged into the main trunk automatically. \end{enumerate} \noindent The following are some of the most commonly used SVN commands for checking out and updating working copies of the \PSIthree\ source code. \noindent $\bullet$ To checkout a working copy of the head of the main trunk: {\tt svn co https://sirius.chem.vt.edu/svn/psi3/trunk/ psi3} \noindent $\bullet$ To check out a working copy of the head of a specific release branch, e.g., the branch labelled {\tt psi-3-4}: {\tt svn co https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4 psi3} \noindent Note that subsequent {\tt svn update} commands in this working copy will provide updates only on the chosen branch. Note also that after you have checked out a fresh working copy of the code you must run the {\tt autoconf} command to generate a {\tt configure} script for building the code. (See the installation manual for configuration, compilation, and testing instructions.) \noindent For each of the above commands, the working copy of your code will be placed in the directory \file{psi3}, regardless of your choice of branch. In this manual, we will refer to this directory from now on as {\tt \$PSI3}. Subsequent SVN commands are usually run within this top-level directory. \noindent $\bullet$ To update your current working copy to include the latest revisions: {\tt svn update} \noindent Notes: (a) This will update only the revisions on your current branch; (b) The old {\tt -d} and {\tt -P} flags required by CVS are not necessary with SVN. \noindent $\bullet$ To convert your working copy to the head of a specific branch: {\tt svn switch https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4} \noindent $\bullet$ To convert your working copy to the head of the main trunk: {\tt svn switch https://sirius.chem.vt.edu/svn/psi3/trunk/} \noindent $\bullet$ To find out what branch your working copy is on, run this in your top-level \PSIthree\ source directory: {\tt svn info | grep URL} \noindent This will return the SVN directory from which your working copy was taken, e.g., \noindent {\tt URL: https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4} \noindent Some words of advice: \begin{enumerate} \item Most SVN commands are reasonably safe, \item Unlike CVS, you shouldn't use {\tt svn update} to see the status of your working copy. With SVN you should use {\tt svn status} to see if you've modified any files or directories. If you want a direct comparison with the repository, you should use {\tt svn status -u}. \item Read the SVN manual. Seriously. \begin{center} \htmladdnormallink{{\tt http://svnbook.red-bean.com/}}{http://svnbook.red-bean.com/} \end{center} \item If you're about to start some significant development or bug-fixes, first update your working copy to the latest version on your branch. In addition, if you do development over a long period of time (say weeks to months) on a specific module or modules, be sure to run a {\tt svn status -u} occasionally. In can be {\em very} frustrating to try to check in lots of changes, only to find out that the \PSIthree\ has changed dramatically since your last update. \end{enumerate} \subsection{Checking in altered \PSIthree\ binaries or libraries} If you have changes to Psi binaries or libraries which already exist, one of two series of steps is necessary to check these changes in to the main repository. The first series may be followed if all changes have been made only to files which already exist in the current version. The second series should be followed if new files must be added to the code in the repository. \begin{itemize} \item No new files need to be added to the repository. We will use \library{libciomr} as an example. \begin{enumerate} \item {\tt cd \$PSI3/src/lib/libciomr} \item {\tt svn ci -m ``Put comments here.''} \end{enumerate} \item New files must be added to the repository. Again, we use \library{libciomr} as an example. Suppose the new file is named \file{great\_code.cc} . \begin{enumerate} \item {\tt cd \$PSI3/src/lib/libciomr} \item {\tt svn add great\_code.cc} \item {\tt svn ci -m ``Put comments here.''} \end{enumerate} \end{itemize} The \file{svn ci} command in both of these sequences will examine all of the code in the current \file{libciomr} directory against the current version of the code in the main repository. Any files which have been altered (and for which no conflicts with newer versions exist!) will be identified and checked in to the main repository (as well as the new file in the second situation). SVN requires that you include a comment on your changes. However, unlike CVS, SVN prefers that you put your comments on the command-line rather than editing a text file. I prefer the CVS way, but this is a minor pain compared to all the advantages of SVN, in my opinion. \subsection{Adding entirely new code to the main \PSIthree\ repository} \label{checkin_new} If the programmer is adding a new executable module or library to the \PSIthree\ repository, a number of important conventions should be followed: \begin{enumerate} \item Since such changes almost always involve additional functionality, new modules or libraries should be added only on the main SVN trunk. See section \ref{section:branches} for additional information. \item The directory containing the new code should be given a name that matches the name of the installed code (e.g. if the code will be installed as \module{newcode}, the directory containing the code should be named \file{newcode}). New executable modules must be placed in \shellvar{\$PSI3}\file{/src/bin} and libraries in \shellvar{\$PSI3}\file{/src/lib} of the user's working copy. \item The Makefile should be converted to an input file for the configure script (\file{Makefile.in} --- see any of the current \PSIthree\ binaries for an example) and should follow the conventions set up in all of the current \PSIthree\ \file{Makefiles}. This includes use of \file{MakeVars} and \file{MakeRules}. \item New binaries should be added to the list contained in \shellvar{\$PSI3}\file{/src/bin/Makefile.in} so that they will be compiled automatically when a full compilation of the \PSIthree\ distribution occurs. This step is included in the sequence below. \item A documentation page should be included with the new code (see section \ref{Documentation} for more information). As a general rule, if the code is not ready to have a documentation page, it is not ready to be installed in \PSIthree. \item The \file{configure.ac} file must be altered so that users may check out copies of the new code and so that the \file{configure} script will know to create the Makefile for the new code. These steps are included in the sequence below. \end{enumerate} Assume the new code is an executable module and is named \module{great\_code}. The directory containing the new code must contain only those files which are to be checked in to the repository! Then the following steps will check in a new piece of code to the main repository: \begin{enumerate} \item {\tt cd \$PSI3/src/bin} \item {\tt svn add great\_code} \item {\tt svn ci -m ``Put comments here.''} \item {\tt cd \$PSI3} \item Edit \file{configure.ac} and add \file{great\_code} to the list. \item {\tt svn ci configure.ac -m ``Put comments here.''} \item {\tt autoconf} \item {\tt cd \$PSI3/src/bin} \item Edit \file{Makefile.in} and add \file{great\_code} to the list. \item {\tt svn ci Makefile.in -m ``Put comments here.''} \end{enumerate} At this point, all of the code has been properly checked in, but you should also test to make sure that the code can be checked out by other programmers, and that it will compile correctly. The following steps will store your personal version of the code, check out the new code, and test-compile it: \begin{enumerate} \item {\tt cd \$PSI3/src/bin} \item {\tt mv great\_code great\_code.bak} \item {\tt cd \$PSI3/..} \item {\tt svn update} \item {\tt cd \$objdir} \item {\tt \$PSI3/configure -}{\tt -prefix=\$prefix} \item {\tt cd src/bin/great\_code} \item {\tt make install} \end{enumerate} (Note that \$prefix and \$objdir to the installation and compilation directories defined in the \PSIthree\ installation instructions.) Your original version of the code remains under \file{great\_code.bak}, but should be no longer necessary if the above steps work. Note that it is necessary to re-run \file{configure} explicitly, instead of just running \file{config.status}, because the latter contains no information about the new code. \subsection{Updating checked out code} If the code in the main repository has been altered, other users' working copies will of course not automatically be updated. In general, it is only necessary to execute the following steps in order to completely update your working copy of the code: \begin{enumerate} \item {\tt cd \$PSI3} \item {\tt svn update} \end{enumerate} This will examine each entry in your working copy and compare it to the most recent version in the main repository. When the file in the main repository is more recent, your version of the code will be updated. If you have made changes to your version, but the version in the main repository has not changed, the altered code will be identified to you with an ``M''. If you have made changes to your version of the code, and one or more newer versions have been updated in the main repository, SVN will examine the two versions and attempt to merge them -- this process often reveals conflicts, however, and is sometimes unsuccessful. You will be notified of any conflicts that arise (labelled with a ``C'') and you must resolve them manually. If new directories have been added to the repository, the update above will automatically add them to your working copy. However, you may need to re-run {\tt autoconf} and configure ({\tt \$objdir/config.status --recheck} is a convenient command) to be able to build the new code. \subsection{Removing code from the repository} If alterations of libraries or binaries under Psi involves the deletion of source code files from the code, these must be explicitly removed through SVN. The following steps will remove a source code file named \file{bad\_code.F} from a binary module named \module{great\_code}: \begin{enumerate} \item {\tt cd \$PSI3/src/bin/great\_code} \item {\tt svn remove bad\_code.F} \item {\tt svn ci -m ``Put comments here.''} \end{enumerate} \subsection{Checking out older versions of the code} It is sometimes necessary to check out older versions of a piece of code. Assume we wish to check out an old version of \PSIdetci. If this is the case, the following steps will do this: \begin{enumerate} \item {\tt cd \$PSI3/src/bin/detci} \item {\tt svn co --revision \{2002-02-17\}} \end{enumerate} This will check the main repository and provide you with the code as it stood exactly on February 17th, 2002. \subsection{Examining the revision history} It can be very useful to use cvs to see what recent changes have been made to the code. Anytime one checks in a new version of a file, SVN requires the user to provide comments on the changes with the {\tt -m} flag. These comments go into a log information that may be easily accessed through SVN. To see what changes have been made recently to the file \file{detci.cc}, one would go into the \file{detci} source directory and type \begin{verbatim} svn log detci.cc \end{verbatim} Checking the log files is a very useful way to see what recent changes might be causing new problems with the code. \subsection{The structure of the \PSIthree\ Source Tree} \label{psitree} Your working copy of the \PSIthree\ source code includes a number of important subdirectories: \begin{itemize} \item \shellvar{\$PSI3}\file{/lib} -- Source files for OS-independent ``library'' data. This includes the main basis set data file (\file{pbasis.dat}) and the \PSIthree\ program execution control file (\file{psi.dat}), among others. These files are installed in \file{\$prefix/share}. \item \shellvar{\$PSI3}\file{/include} -- Source files for OS-independent header files, including \file{physconst.h} (whose contents should be obvious from its name), \file{psifiles.h}, and \file{ccfiles.h}, among others. These files are installed in \$prefix/include. \item \shellvar{\$PSI3}\file{/src/util} -- Source code for the utility program \module{tocprint}. (Note that the \module{tmpl} module is no longer used and will eventually disappear.) \item \shellvar{\$PSI3}\file{/src/lib} -- Source code for the libraries, including \library{libpsio}, \library{libipv1}, \library{libchkpt}, etc. The include files from the library source are used directly during the compilation of PSI to avoid problems associated with incomplete installations. Some include files are architecture-dependent and go in an include subdirectory of the compilation (object) directory. \item \shellvar{\$PSI3}\file{/src/bin} -- Source code for the executable modules. \end{itemize} After compilation and installation, the \file{\$prefix} directory contains the executable codes and other necessary files. {\bf NB:} The files in this area should never be directly modified; rather, the working copy should be modified and the \PSIthree\ \file{Makefile} hierarchy should handle installation of any changes. The structure of the installation area is: \begin{itemize} \item \file{\$prefix/bin} -- The main executable directory. This directory must be in your path in order for the driver program, \module{psi3}, to find the modules. \item \file{\$prefix/lib} -- The \PSIthree\ code libraries. (NB: The description of \PSIthree\ \file{Makefiles} later in this manual will explain how to use the libraries.) \item \file{\$prefix/include} -- Header files. These are not actually used during the compilation of PSI but are useful for inclusion by external programs because they are all in the same directory. \item \file{\$prefix/share} -- OS-independent data files, including basis set information. (Do not edit this file directly; any changes you make can be overwritten by subsequent {\tt make} commands.) \item \file{\$prefix/doc} -- \PSIthree\ documentation, including installation, programmer, and user manuals. \end{itemize} �����������������������������������������������������������������������������������������������������������������������������psi3/doc/progman/testing.tex������������������������������������������������������������������������0000644�0001015�0000765�00000003647�07775210632�014633� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The \PSIthree\ test suite is designed to maximize code reuse and provide testing in \$prefix before the \PSIthree\ executables have been installed. The configure script in \$PSI3 will take all the necessary files in \$PSI3/tests with the .in stub: Makefile.in, MakeRules.in, MakeVars.in, and runtest.pl.in, replace variables with system specific parameters, and copy/create the testing files and directories in \$prefix/tests. The tests should be run in the object directory before installation. If you have just added a new module for performing, say multireference coupled cluster, and you would like to add a test case to the current test suite, here is what you should do. \begin{enumerate} \item Copy one of the existing test case directories to an appropriately named directory for the new test case. \item Create an appropriate input file for running the new module. Then, if your program produced the correct data, rename the output files to *.ref. Follow the convention of the existing test cases. \item If the test case is small, add the directory name to the list in \$PSI3/tests/Makefile.in. If the test is particularly tricky, see the psi\_start or rhf-stab test cases as an example. \item All the testing functionality is located in the perl library \file{runtest.pl.in}. If you are testing for a quantity that is not searched for currently, then add a function to the library following the format of the functions already available. If you have added functionality to the \PSIthree\ driver, make sure to update the appropriate functions in \file{runtest.pl.in}. \item Add the location of the Makefile for the new test case to the configure script in \$PSI3. \end{enumerate} Please contact one of the authors of \PSIthree\ before making any major changes or if you have a problem adding a new test case. Remember, if all else fails, read the source code. �����������������������������������������������������������������������������������������psi3/doc/reference.tex������������������������������������������������������������������������������0000644�0001015�0000765�00000000377�10747664267�013460� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T. Daniel Crawford, C. David Sherrill, Edward F. Valeev, Justin T. Fermann, Rollin A. King, Matthew L. Leininger, Shawn T. Brown, Curtis L. Janssen, Edward T. Seidl, Joseph P. Kenny, and Wesley D. Allen, {\em J. Comput. Chem.} {\bf 28}, 1610-1616 (2007). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/�����������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111702�012412� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/additional-docs.tex����������������������������������������������������������������0000644�0001015�0000765�00000001167�07775210632�016216� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Additional Documentation} \label{additional-docs} Additional information and the most recent version of this manual may be found at the \PSIthree\ website \htmladdnormallink{{\tt www.psicode.org}}{http://www.psicode.org}. More complete information on the installation of the \PSIthree\ package is available in the \htmladdnormallink{PSI3 Installation Manual}{http://www.psicode.org/users.html}. For programmers, the \htmladdnormallink{PSI3 Programmer's Manual}{http://www.psicode.org/developers.html} is available online along with complete \htmladdnormallink{library documentation}{http://www.psicode.org/doc/libs/}. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/appendix.tex�����������������������������������������������������������������������0000644�0001015�0000765�00000005606�07724471660�014776� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Sample \inputdat\ file} \begin{verbatim} default: ( %%%%%%%%%%%%%%%%%%%%%%%%%%% % Test input.dat for errors %%%%%%%%%%%%%%%%%%%%%%%%%%% % check = true check = false %%%%%%%%%%%%%%%%%%%%%%%%%%% % System parameters and job title %%%%%%%%%%%%%%%%%%%%%%%%%%% memory = (50.0 MB) label = "CH3 cc-pVTZ SCF" %%%%%%%%%%%%%%%%%%%%%%%%%%% % Choose wavefunction %%%%%%%%%%%%%%%%%%%%%%%%%%% wfn = scf % wfn = mp2 % wfn = detci % wfn = ccsd %%%%%%%%%%%%%%%%%%%%%%%%%%% % Derivative level %%%%%%%%%%%%%%%%%%%%%%%%%%% % dertype = none dertype = first %%%%%%%%%%%%%%%%%%%%%%%%%%% % Electronic structure info %%%%%%%%%%%%%%%%%%%%%%%%%%% % reference = rhf reference = rohf % reference = uhf % reference = twocon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Optimize geometry %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % opt = true opt = true nopt = 10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Finite difference %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % disp = true % ndisp = 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Scratch files % note: you must change psiuser % to your username %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% files: ( default: ( name = "ch3" volume1 = "/tmp1/psiuser/" volume2 = "/tmp2/psiuser/" volume3 = "/tmp3/psiuser/" volume4 = "/tmp4/psiuser/" ) file32: ( nvolume = 1 volume1 = "./" ) ) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Section that generate file30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% input: ( units = angstrom basis = ccpvtz zmat = ( (x) (c 1 1.0) (h 2 0.97 1 90.0) (h 2 0.97 1 90.0 3 120.0) (h 2 0.97 1 90.0 3 -120.0) ) ) \end{verbatim} \section{Sample \basisdat\ file} \begin{verbatim} basis: ( NITROGEN:t2pd = ( (S ( 13520. 0.000760) ( 1999. 0.006076) ( 440.0 0.032847) ( 120.9 0.132396) ( 38.47 0.393261) ( 13.46 0.546339)) (S ( 13.46 0.252036) ( 4.993 0.779385)) (S ( 1.569 1.000000)) (S ( 0.5800 1.000000)) (S ( 0.1923 1.000000)) (S ( 0.06742 1.000000)) (P ( 35.91 0.016916) ( 8.480 0.102200) ( 2.706 0.338134) ( 0.9921 0.669281)) (P ( 0.3727 1.000000)) (P ( 0.1346 1.000000)) (P ( 0.04959 1.000000)) (D ( 1.60 1.000000)) (D ( 0.40 1.000000)) ) HYDROGEN:t2pd = ( (S ( 33.64 0.025374) ( 5.058 0.189684) ( 1.147 0.852933)) (S ( 0.3211 1.0)) (S ( 0.1013 1.0)) (S ( 0.03016 1.0)) (P ( 1.50 1.0)) (P ( 0.375 1.0)) ) ) \end{verbatim} ��������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/bibliography.bib�������������������������������������������������������������������0000644�0001015�0000765�00000005123�10606452635�015561� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@MISC{Psi3, author = "T. D. Crawford and C. D. Sherrill and E. F. Valeev and J. T. Fermann and R. A. King and M. L. Leininger and S. Brown and C. L. Janssen and E. T. Seidl and Joseph P. Kenny and W. D. Allen", title = "{PSI 3.2}", year = 2003, } @ARTICLE {Roos:1980, author = "B. O. Roos and P. R. Taylor and P. E. M. Siegbahn", title = "A Complete Active Space {SCF} Method ({CASSCF}) Using a Density Matrix Formulated Super-{CI} Approach", journal = "Chem. Phys.", volume = "48", pages = "157", year = "1980" } @ARTICLE {Chaban:1997:88, author = "G. Chaban and M. W. Schmidt and M. S. Gordon", title = "Approximate second order method for orbital optimization of {SCF} and {MCSCF} wavefunctions", journal = "Theor. Chem. Acc.", volume = "97", pages = "88-95", year = "1997" } @ARTICLE {Pulay:1980, author = "P. Pulay", title = "Convergence Acceleration of Iterative Sequences. The Case of {SCF} Iteration", journal = "Chem. Phys. Lett.", volume = "73", pages = "393-398", year = "1980" } @ARTICLE {Malmqvist:1990:RASSCF, author = "P.-{\AA}. Malmqvist and A. Rendell and B. O. Roos", title = "The Restricted Active Space Self-Consistent-Field Method, Implemented with a Split Graph Unitary Group Approach", journal = "J. Phys. Chem.", volume = "94", pages = "5477-5482", year = "1990" } @ARTICLE {Docken:1972:4928, author = "K. K. Docken and J. Hinze", title = "{LiH} Potential Curves and Wavefunctions for {$X$ $^1\Sigma^+$}, {$A$ $^1\Sigma^+$}, {$B$ $^1\Pi$}, {$^3\Sigma^+$}, and {$^3\Pi^*$}", journal = "J. Chem. Phys.", volume = "57", number = "11", pages = "4928-4936", year = "1972" } @ARTICLE {Ruedenberg:1979:1069, author = "K. Ruedenberg and L. M. Cheung and S. T. Elbert", title = "{MCSCF} Optimization through Combined Use of Natural Orbitals and the {Brillouin-Levy-Berthier} Theorem", journal = "Int. J. Quantum Chem.", volume = "16", pages = "1069-1101", year = "1979" } @ARTICLE {Handy:1980, author = "N. C. Handy", title = "Multi-Root Configuration Interaction Calculations", journal = "Chem. Phys. Lett.", volume = "74", pages = "280", year = "1980" } @ARTICLE {Olsen:1988, author = "J. Olsen and B. O. Roos and P. J{\o}rgensen and H. J. {Aa.~Jensen}", title = "Determinant based configuration interaction algorithms for complete and restricted configuration interaction spaces", journal = "J. Chem. Phys.", volume = "89", pages = "2185", year = "1988" } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/cc.tex�����������������������������������������������������������������������������0000644�0001015�0000765�00000023560�11144156011�013527� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Coupled Cluster Methods} \label{cc} The coupled cluster approach is one of the most accurate and reliable quantum chemical techniques for including the effects of electron correlation. \PSIthree\ is capable of computing energies, analytic gradients, and linear response properties using a number of coupled cluster models. Table \ref{table:ccsummary} summarizes these capabilities. This section describes how to carry out coupled cluster calculations within \PSIthree. \begin{table}[h] \begin{center} \caption{Current coupled cluster capabilities of \PSIthree.} \label{table:ccsummary} \begin{tabular}{cccccc} \hline \hline Reference & Method & Energy & Gradient & Exc. Energies & LR Props \\ \hline RHF & CC2 & Y & N & Y & Y \\ UHF & CC2 & Y & N & Y & N \\ ROHF & CC2 & Y & N & Y & N \\ RHF & CCSD & Y & Y & Y & Y \\ RHF & CCSD(T) & Y & N & --& -- \\ ROHF & CCSD & Y & Y & Y & N \\ ROHF & CCSD(T) & N & N & --& -- \\ UHF & CCSD & Y & Y & Y & N \\ UHF & CCSD(T) & Y & Y$^*$ & --& -- \\ Brueckner & CCD & Y & N & N & N \\ Brueckner & CCD(T) & Y & N & --& -- \\ \hline \hline \end{tabular} \end{center} {\footnotesize $^*$CCSD(T) gradients implemented via an experimental code. A more efficient and robust implementation will appear in the next release.} \end{table} \subsubsection{Basic Keywords} To compute a ground-state CCSD or CCSD(T) energy at a fixed geometry, the following keywords are common: \begin{description} \item[WFN = string]\mbox{}\\ Acceptable values are {\tt ccsd}, {\tt ccsd\_t} [for CCSD(T)], {\tt bccd} (for Brueckner-orbital-based CCD), or {\tt bccd\_t} [for Brueckner-orbital-based CCSD(T)] There is no default. \item[REFERENCE = string]\mbox{}\\ Acceptable values are {\tt reference = rhf}, {\tt rohf}, or {\tt uhf}. There is no default. \item[JOBTYPE = string]\mbox{}\\ Acceptable values are {\tt sp}, {\tt opt}, {\tt freq}, {\tt oeprop}, or {\tt response}. There is no default. \item[CONVERGENCE = integer]\mbox{}\\ Sets the order of magnitude on the convergence of the CC wave function, perturbed wave function, and/or lambda parameters. The root-mean-square of the difference in amplitude vectors from consecutive iterations is used to determine the convergence. The default is 7. \item[MAXITER = integer]\mbox{}\\ The maximum number of iterations allowed for solving the CC amplitude or lambda amplitude equations. Defaults to 50. \item[MEMORY = (real MB)]\mbox{}\\ Specified the amount of core memory to be used, in MB. Defaults to 256. Other units (e.g., KB or GB) are also allowed. \item[BRUECKNER\_CONV = integer]\mbox{}\\ Specifies the order of magnitude convergence required for the Brueckner orbitals. The convergence is determined based on the largest T1 amplitude. \item[AO\_BASIS = string]\mbox{}\\ Specifies the algorithm to be used in computing the contribution of the four-virtual-index integrals ($\langle ab||cd\rangle$) to the CC amplitude equations. If {\tt AO\_BASIS=NONE}, the MO-basis integrals will be used; if {\tt AO\_BASIS=DISK}, the AO-basis integrals, stored on disk, will be used; if {\tt AO\_BASIS=DIRECT}, the AO-basis integrals will be computed on the fly as necessary. NB: The {\tt AO\_BASIS=DIRECT} option is not fully implemented and should only be used by experts. Default is {\tt NONE}. Note: The developers recommend use of this keyword only as a last resort because it significantly slows the calculation. The current algorithms for handling the MO-basis four-virtual-index integrals have been significantly improved and are preferable to the AO-based approach. \item[FREEZE\_CORE = boolean]\mbox{}\\ Specifies whether core orbitals (which are determined automatically) are to be excluded from the correlated calculations. Default is {\tt FALSE}. \item[RESTART = boolean]\mbox{}\\ Determine whether previous amplitude vectors may be used as guesses in a given CC calculation. Defaults to {\tt TRUE}. For geometry optimizations, Brueckner calculations, etc. the iterative solution of the CC amplitude equations may benefit considerably by reusing old vectors as initial guesses. Assuming that the MO phases remain the same between updates, the CC codes will, by default, re-use old vectors, unless the user sets {\tt RESTART = false}. \item[PRINT = integer]\mbox{}\\ The desired print level for detailed output. Setting this to 2 is a good idea for larger calculations so that the progress of the calculation may be easily followed. Defaults to 0. \item[CACHELEV = integer]\mbox{}\\ Sets the level of automated cacheing of four-index quantities in the CC modules. These modules are capable of keeping in core as much as possible, various four-index quantities categorized by the number of virtual/unoccupied-orbital indices they contain. Setting {\tt CACHELEV=0} will cache nothing (wise and sometimes necessary for very large CC calculations), {\tt CACHELEV=1} will keep quantities with up to one virtual index in core (e.g., integrals of the form $\langle ij||ka\rangle$), {\tt CACHELEV=2} will keep quantities with up two two virtual indices in core (e.g., integrals of the form $\langle ij||ab \rangle$ or $\hat{T}_2$ amplitudes), {\tt CACHELEV=3} will keep three-virtual-index quantities in core, and {\tt CACHELEV=4} will keep everything in core. Note that the cache behavior is tempered by the {\tt MEMORY} keyword, and items will be deleted from the cache (in an order determined based on the {\tt CACHETYEP} keyword) as additional memory is required in a given calculation. \item[CACHETYPE = string]\mbox{}\\ Specifies the type of cache to be used, either {\tt LOW} or {\tt LRU}. If {\tt CACHETYPE=LOW}, then elements are deleted from the cache based on a predefined order of priority. If {\tt CACHETYPE=LRU}, then elements are deleted from the cache based on a ``least recently used'' criterion: the least recently used item is the first to be deleted. The {\tt LOW} criterion has been developed only ccenergy codes. The default is {\tt LRU} for all CC modules except {\tt ccenergy}. \item[NUM\_AMPS = integer]\mbox{}\\ Specifies the number of wave function amplitudes to print at the end of the energy calculation. Defaults to 10. \item[PRINT\_MP2\_AMPS = boolean]\mbox{}\\ Specifies if the initial guess (MP2) amplitudes should be printed in the output file. Defaults to {\tt FALSE}. \end{description} \subsubsection{Larger Calculations} Here are a few recommendations for carrying out large-basis-set coupled cluster calculations with \PSIthree: \begin{enumerate} \item Set the {\tt MEMORY} keyword to 90\% of the available physical memory, at most. There is a small amount of overhead associated with the coupled cluster modules that is not accounted for by the internal CC memory handling routines. Thus, the user should {\em not} sepcify the entire physical memory of the system, or swapping is likely. \item Set the {\tt CACHELEV} keyword to 0. This will turn off cacheing, which, for very large calculations, can lead to heap fragmentation and memory faults, even when sufficient physical memory exists. \item Set the {\tt PRINT} keyword to 2. This will help narrow where memory bottlenecks or other errors exist in the event of a crash. \end{enumerate} \subsubsection{Excited State Coupled Cluster Calculations} The most important keywords associated with EOM-CC calculations are: \begin{description} \item[STATES\_PER\_IRREP = (integer array)]\mbox{}\\ Specifies the desired number of excited states per irreducible representation for both EOM-CC and CC-LR calculations. Note that the irreps in this keyword denote the final state symmetry, not the symmetry of the transition. \item[PRINT\_SINGLES = boolean]\mbox{}\\ Specifies whether information regarding the iterative solution to the single-excitation EOM-CC problem (normally used to obtain guesses for a ful EOM-CCSD calculation) will be printed. \item[RESIDUAL\_TOL = integer]\mbox{}\\ Specifies the order of magnitude cutoff used to determine the convergence of the Davidson algorithm residuals in the EOM-CC iterative procedure. \item[EVAL\_TOL = integer]\mbox{}\\ Specifies the order of magnitude cutoff used to determine the convergence of the final eigenvalues in the EOM-CC iterative procedure. \item[EOM\_GUESS = (mixed array)]\mbox{}\\ Specifies a set of single-excitation guess vectors for the EOM-CC procedure. This is especially useful for converging to difficult states. The {\tt EOM\_GUESS} keyword is an array, each element of which includes an occupied orbital index (in coupled cluster ordering), a virtual orbital index, a weighting factor, and a spin (0 for $\alpha$ and 1 for $\beta$). The guess vector will be normalized after it is read, so only the relative magnitudes of the weight factors are important. \item[JOBTYPE = string]\mbox{}\\ A value of {\tt oeprop} will result in the calculation of oscillator strengths, rotational strengths, and dipole moments for an RHF reference and all but the rotational strengths for an ROHF or UHF reference. \end{description} \subsubsection{Linear Response (CCLR) Calculations} The most important keywords associated with CC-LR calculations are: \begin{description} \item[JOBTYPE = string]\mbox{}\\ A value of {\tt RESPONSE} will invoke the linear-response programs. \item[PROPERTY = string]\mbox{}\\ This leyword specifies the type or response property desired. Acceptable values are {\tt POLARIZABILITY} (default) for dipole-polarizabilities and {\tt ROTATION} for specific rotations. \item[OMEGA = real or (real UNITS)]\mbox{} Specifies the desired frequency of the incident radiation field in CCLR calculations. Acceptable units are {\tt HZ}, {\tt NM}, and {\tt EV}. If given without units, atomic units (Hartrees) are assumed. \item[MU\_IRREPS = (integer array)]\mbox{}\\ Specifies the irreducible representations associated with the $x$-, $y$-, and $z$-axes. This may be determined from the standard Cotton tables. Eventually this will be determined automatically by the program, so this keyword will go away. \end{description} ������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/detcas.tex�������������������������������������������������������������������������0000644�0001015�0000765�00000016106�10604540731�014411� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Complete-Active-Space Self-Consistent-Field (CASSCF)} \label{casscf} Multi-configurational self-consistent-field (MCSCF) is a general method for obtaining qualitatively correct wavefunctions for highly strained molecules, diradicals, or bond breaking reactions. The most commonly used MCSCF procedure is the complete-active-space self-consistent-field (CASSCF) approach \cite{Roos:1980}, which includes all possible determinants (with the proper symmetry) that can be formed by distributing a set of active electrons among a set of active orbitals. The \PSIdetcasman\ module performs CASSCF optimization of molecular orbitals via a two-step procedure in which the CI wavefunction is computed using \PSIdetci\, and the orbital rotation step is computed using \PSIdetcas. The \PSIdetcas\ program is fairly simple and uses an approximate orbital Hessian \cite{Chaban:1997:88} and a Newton-Raphson update, accelerated by Pulay's DIIS procedure \cite{Pulay:1980}. We have also implemented a prototype version of the RASSCF method \cite{Malmqvist:1990:RASSCF}, which is another kind of MCSCF which is typically less complete (and less expensive) than CASSCF. However, orbital convergence for RASSCF can be difficult in our current implementation. Inactive orbitals in the MCSCF may be specified by the {\tt RESTRICTED\_DOCC} and {\tt RESTRICTED\_UOCC} keywords. These orbitals will remain doubly-occupied or doubly-unoccupied, respectively, in the MCSCF wavefunction. However, the form of these orbitals will be optimized in the MCSCF procedure. It is also possible to literally freeze inactive orbitals in their original (SCF) form using the {\tt FROZEN\_DOCC} and {\tt FROZEN\_UOCC} keywords. This is not normally what one wishes to do in an MCSCF computation (e.g., it complicates the computation of gradients), but it can make the computations faster and is helpful in some circumstances where unphysical mixing of inactive and active occupied orbitals might occur. Presently, it is not possible to mix the use of restricted and frozen orbitals in \PSIthree. The division of the molecular orbitals into various subspaces such as RAS spaces, or frozen vs active orbitals, etc, needs to be clear not only to the {\tt detci} program, but also at least to the transformation program (and in the case of MCSCF, to other programs as well). Thus, orbital subspace keywords such as {\tt RAS1}, {\tt RAS2}, {\tt RAS3}, {\tt frozen\_docc}, {\tt frozen\_uocc}, {\tt active}, etc., need to be in the {\tt psi:()} or {\tt default:()} sections of input so they may also be read by other modules. The ability to perform state-averaged \cite{Docken:1972:4928,Ruedenberg:1979:1069} CASSCF or RASSCF computations has been added. This is accomplished using the {\tt average\_states} keyword. See the {\tt casscf-sp} and {\tt casscf-sa-sp} examples in the \file{tests} directory and the example below. \subsubsection{Basic Keywords} \begin{description} \item[WFN = string]\mbox{}\\ This may be {\tt casscf} or {\tt rasscf}. \item[REFERENCE = string]\mbox{}\\ Any of the references allowed by \PSIdetci\ should work (i.e., not {\tt uhf}), but there should be no reason not to use {\tt rhf}. \item[DERTYPE = string]\mbox{}\\ At present, only energies ({\tt none}) are supported; future releases will implement gradients ({\tt first}). \item[CONVERGENCE = integer]\mbox{}\\ Convergence desired on the orbital gradient. Convergence is achieved when the RMS of the error in the orbital gradient is less than 10**(-n). The default is 4 for energy calculations and 7 for gradients. Note that this is a different convergence criterion than for the \PSIdetci\ program itself. These can be differentiated, if changed by the user, by placing the {\tt CONVERGENCE} keywords within separate sections of input, such as {\tt detcas: ( convergence = x )}. \item[ENERGY\_CONVERGENCE = integer]\mbox{}\\ Convergence desired on the total MCSCF energy. The default is 7. \item[RESTRICTED\_DOCC = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. These orbitals are optimized in the MCSCF. The Cotton ordering of the irredicible representations is used. The default is the zero vector. \item[RESTRICTED\_UOCC = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. These orbitals are optimized in the MCSCF. The default is the zero vector. \item[FROZEN\_DOCC = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. These orbitals are literally frozen and are not optimized in the MCSCF; usually one wishes to use {\tt RESTRICTED\_DOCC} instead. The current version of the program does not allow both {\tt RESTRICTED\_DOCC} and {\tt FROZEN\_DOCC}. Should be in {\tt psi:()} or {\tt default:()} sections of input. The Cotton ordering of the irredicible representations is used. The default is the zero vector. \item[FROZEN\_UOCC = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. These orbitals are literally frozen and are not optimized in the MCSCF; usually one wishes to use {\tt RESTRICTED\_UOCC} instead. The current version of the program does not allow both {\tt RESTRICTED\_UOCC} and {\tt FROZEN\_UOCC}. Should be in {\tt psi:()} or {\tt default:()} sections of input. The default is the zero vector. \item[NCASITER = integer]\mbox{}\\ Maximum number of iterations to optimize the orbitals. This option should be specified in the DEFAULT section of input, because it needs to be visible to the control program PSI. Defaults to 20. \item[AVERAGE\_STATES = (integer array)]\mbox{}\\ This gives a list of what states to average for the orbital optimization. States are numbered starting from 1. \item[PRINT = integer]\mbox{}\\ This option determines the verbosity of the output. A value of 1 or 2 specifies minimal printing, a value of 3 specifies verbose printing. Values of 4 or 5 are used for debugging. Do not use level 5 unless the test case is very small (e.g. STO H$_2$O CISD). \end{description} \subsubsection{Examples} \begin{figure}[h!] \begin{verbatim} % 6-31G** H2O Test CASSCF Energy Point psi: ( label = "6-31G** CASSCF H2O" jobtype = sp wfn = casscf reference = rhf restricted_docc = (1 0 0 0) active = (3 0 1 2) basis = "6-31G**" zmat = ( o h 1 1.00 h 1 1.00 2 103.1 ) ) \end{verbatim} \caption{Example of a CASSCF single-point calculation for H$_2$O using a valence active space 3a$_1$ 1b$_1$ 2b$_2$.} \label{ex:casscf-sp-1} \end{figure} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/detci.tex��������������������������������������������������������������������������0000644�0001015�0000765�00000023167�10740513716�014247� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Configuration Interaction} \label{detci} Configuration interaction (CI) is one of the most general ways to improve upon Hartree-Fock theory by adding a description of the correlations between electron motions. Simply put, a CI wavefunction is a linear combination of Slater determinants (or spin-adapted configuration state functions), with the linear coefficients being determined variationally via diagonalization of the Hamiltonian in the given subspace of determinants. The simplest standard CI method which improves upon Hartree-Fock is a CI which adds all singly and doubly substituted determinants (CISD). The CISD wavefunction has fallen out of favor because truncated CI wavefunctions short of full configuration interaction are not size-extensive, meaning that their quality degrades for larger molecules. MP2 offers a less expensive alternative whose quality does not degrade for larger molecules and which gives similar results to CISD for well-behaved molecules. CCSD is usually a more accurate alternative, at only slightly higher cost. For the reasons stated above, the CI code in \PSIthree\ is not optimized for CISD computations. Instead, emphasis has been placed on developing a very efficient program to handle more general CI wavefunctions which may be helpful in more challenging cases such as highly strained molecules or bond breaking reactions. The \PSIdetci\ program is a fast, determinant-based CI program based upon the string formalism of Handy \cite{Handy:1980}. It can solve for restricted active space configuration interaction (RAS CI) wavefunctions as described by Olsen, Roos, Jorgensen, and Aa. Jensen \cite{Olsen:1988}. Excitation-class selected multi-reference CI wavefunctions, such as second-order CI, can be formulated as RAS CI's. A RAS CI selects determinants for the model space as those which have no more than n holes in the lowest set of orbitals (called RAS I) and no more than m electrons in the highest set of orbitals (called RAS III). An intermediate set of orbitals, if present (RAS II), has no restrictions placed upon it. All determinants satisfying these rules are included in the CI. The \PSIdetci\ program is also very efficient at full configuration interaction wavefunctions, and is used in this capacity in the complete-active-space self-consistent-field (CASSCF) code. Use of \PSIdetci\ for CASSCF wavefunctions is described in the following section of this manual. As just mentioned, the \PSIthree\ program is designed for challenging chemical systems for which simple CISD is not suitable. Because CI wavefunctions which go beyond CISD (such as RAS CI) are fairly complex, typically the \PSIdetci\ program will be used in cases where the tradeoffs between computational expense and completeness of the model space are nontrivial. Hence, the user is advised to develop a good working knowledge of multi-reference and RAS CI methods before attempting to use the program for a production-level project. This user's manual will provide only an elementary introduction to the most important keywords. Additional information is available in the man pages for \PSIdetci. The division of the molecular orbitals into various subspaces such as RAS spaces, or frozen vs active orbitals, etc, needs to be clear not only to the {\tt detci} program, but also at least to the transformation program (and in the case of MCSCF, to other programs as well). Thus, orbital subspace keywords such as {\tt RAS1}, {\tt RAS2}, {\tt RAS3}, {\tt frozen\_docc}, {\tt frozen\_uocc}, {\tt active}, etc., need to be in the {\tt psi:()} or {\tt default:()} sections of input so they may also be read by other modules. \subsubsection{Basic Keywords} \begin{description} \item[WFN = string]\mbox{}\\ Acceptable values for determinant-based CI computations in \PSIthree\ are {\tt detci} and, for CASSCF, {\tt detcas}. \item[REFERENCE = string]\mbox{}\\ Most reference types allowed by \PSIthree\ are allowed by \PSIdetci, except that {\tt uhf} is not supported. \item[DERTYPE = string]\mbox{}\\ Only single-point calculations are allowed for {\tt wfn = detci}. For {\tt wfn = detcas}, first derivatives are also available. \item[CONVERGENCE = integer]\mbox{}\\ Convergence desired on the CI vector. Convergence is achieved when the RMS of the error in the CI vector is less than 10**(-n). The default is 4 for energies and 7 for gradients. \item[EX\_LVL = integer]\mbox{}\\ Excitation level for excitations into virtual orbitals (default 2, i.e. CISD). In a RAS CI, this is the number of electrons allowed in RAS III. \item[VAL\_EX\_LVL = integer]\mbox{}\\ In a RAS CI, this is the additional excitation level for allowing electrons out of RAS I into RAS II. The maximum number of holes in RAS I is therefore {\tt EX\_LVL + VAL\_EX\_LVL}. Defaults to zero. \item[FROZEN\_DOCC = (integer array)]\mbox{}\\ Core may be frozen by setting {\tt FREEZE\_CORE}. To manually select how many orbitals per irrep to freeze, use the {\tt FROZEN\_DOCC} keyword. Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. The Cotton ordering of the irredicible representations is used. The default is the zero vector. \item[FROZEN\_UOCC = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. The default is the zero vector. \item[RAS1 = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. The number of orbitals for each irrep making up the RAS I space, from which a maximum of {\tt EX\_LVL + VAL\_EX\_LVL} excitations are allowed. This does not include frozen core orbitals. For a normal CI truncated at an excitation level such as CISD, CISDT, etc., it is not necessary to specify this or {\tt RAS2} or {\tt RAS3}. Note: this keyword must be visible to the \PSItransqt\ program also so that orbitals are ordered correctly (placing it in {\tt default} or {\tt psi} should be adequate). \item[RAS2 = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. As above for {\tt RAS1}, but for the RAS II subspace. No restrictions are placed on the occupancy of RAS II orbitals. Typically this will correspond to the conventional idea of an ``active space'' in multi-reference CI. \item[RAS3 = (integer array)]\mbox{}\\ Should be in {\tt psi:()} or {\tt default:()} sections of input. As above for {\tt RAS3}, but for the RAS III subspace. A maximum of {\tt EX\_LVL} electrons are allowed in RAS III. \item[MAXITER = integer]\mbox{}\\ Maximum number of iterations to diagonalize the Hamiltonian. Defaults to 12. \item[NUM\_ROOTS = integer]\mbox{}\\ This value gives the number of roots which are to be obtained from the secular equations. The default is one. If more than one root is required, set {\tt DIAG\_METHOD} to {\tt SEM} (or, for very small cases, {\tt RSP} or {\tt SEMTEST}). Note that only roots of the same irrep as the reference will be computed. To compute roots of a different irrep, one can use the {\tt REF\_SYM} keyword (for full CI only). \item[OPDM = boolean]\mbox{}\\ If {\tt TRUE}, compute the one-particle density matrix for each root. By default, it will be written to disk. Except for MCSCF computations (e.g., CASSCF, RASSCF), this will also turn on computation of dipole moments by default. \item[TRANSITION\_DENSITY = boolean]\mbox{}\\ If {\tt TRUE}, compute the transition density matrix from the ground state to each other state obtained in the computation. By default, this information will be written to disk. Transition dipole moments will be evaluated in {\tt detci}. Note: only transition densities between roots of the same symmetry will be evaluated. {\tt detci} does not compute states of different irreps within the same computation; to do this, lower the symmetry using the {\tt subgroup} keyword in {\tt psi:()} or {\tt default:()} (see section \ref{symm-spec}). \item[DIPMOM = boolean]\mbox{}\\ If {\tt TRUE}, evaluate the dipole moment for each root (using the expectation value formula; orbital relaxation contributions are neglected). This is an alternative to evaluation using the {\tt oeprop} module, which has more features. \item[REF\_SYM = integer]\mbox{}\\ This option allows the user to look for CI vectors of a different irrep than the reference. This probably only makes sense for Full CI, and it is not supported for unit vector guesses. \item[MPN = boolean]\mbox{}\\ If {\tt TRUE}, compute MPn energies up to nth order, where MAXNVECT = n controls the maximum order energy computed. For open-shell systems (REF = ROHF, WFN = ZAPTN), ZAPTn energies are computed. \end{description} For larger computations, additional keywords may be required, as described in the \PSIdetci\ man pages. \subsubsection{Arbitrary Order Perturbation Theory} \PSIthree\ is capable of computing arbitrary order M{\o}ller-Plesset perturbation theory (MPn, closed-shell systems) and Z-averaged perturbation theory (ZAPTn, open-shell systems) energies, invoked with MPN = TRUE. The maximum level of perturbation theory computed is controlled by MAXNVECT. Higher order energies (2n - 1 and 2n - 2) can be computed at no additional computational cost by using WIGNER = TRUE. By default, the n{th} order energy is saved, but (2n - 1) or (2n - 2) order energies can be saved using SAVE\_MPN2 = 1 or SAVE\_MPN2 = 2, respectively. For open-shell systems, arbitary order ZAPTn energies can be computed using WFN = ZAPTN and REF = ROHF. All other options are the same as closed-shell MPn. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/html.sty���������������������������������������������������������������������������0000644�0001015�0000765�00000121676�11114561241�014136� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% % $Id: html.sty,v 1.39 2001/10/01 22:47:06 RRM Exp $ % LaTeX2HTML Version 2K.1 : html.sty % % This file contains definitions of LaTeX commands which are % processed in a special way by the translator. % For example, there are commands for embedding external hypertext links, % for cross-references between documents or for including raw HTML. % This file includes the comments.sty file v2.0 by Victor Eijkhout % In most cases these commands do nothing when processed by LaTeX. % % Place this file in a directory accessible to LaTeX (i.e., somewhere % in the TEXINPUTS path.) % % NOTE: This file works with LaTeX 2.09 or (the newer) LaTeX2e. % If you only have LaTeX 2.09, some complex LaTeX2HTML features % like support for segmented documents are not available. % Changes: % See the change log at end of file. % Exit if the style file is already loaded % (suggested by Lee Shombert <las@potomac.wash.inmet.com> \ifx \htmlstyloaded\relax \endinput\else\let\htmlstyloaded\relax\fi \makeatletter % allow for the hyperref package to be cleanly loaded % either before or after this package, % and ensure it is already loaded, when using pdf-TeX \ifx\undefined\hyperref \ifx\pdfoutput\undefined \let\pdfunknown\relax \let\html@new=\newcommand \else \ifx\pdfoutput\relax \let\pdfunknown\relax \RequirePackage{hyperref}\let\html@new=\renewcommand \else \RequirePackage{hyperref}\let\html@new=\newcommand \fi \fi \else \let\html@new=\renewcommand \fi \providecommand{\latextohtml}{\LaTeX2\texttt{HTML}} %%% LINKS TO EXTERNAL DOCUMENTS % % This can be used to provide links to arbitrary documents. % The first argumment should be the text that is going to be % highlighted and the second argument a URL. % The hyperlink will appear as a hyperlink in the HTML % document and as a footnote in the dvi or ps files. % \ifx\pdfunknown\relax \html@new{\htmladdnormallinkfoot}[2]{#1\footnote{#2}} \else \def\htmladdnormallinkfoot#1#2{\footnote{\href{#2}{#1}}} \fi % This is an alternative definition of the command above which % will ignore the URL in the dvi or ps files. \ifx\pdfunknown\relax \html@new{\htmladdnormallink}[2]{#1} \else \def\htmladdnormallink#1#2{\href{#2}{#1}} \fi % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. % \ifx\pdfunknown\relax \html@new{\htmladdimg}[1]{} \else \def\htmladdimg#1{\hyperimage{#1}} \fi %%% CROSS-REFERENCES BETWEEN (LOCAL OR REMOTE) DOCUMENTS % % This can be used to refer to symbolic labels in other Latex % documents that have already been processed by the translator. % The arguments should be: % #1 : the URL to the directory containing the external document % #2 : the path to the labels.pl file of the external document. % If the external document lives on a remote machine then labels.pl % must be copied on the local machine. % %e.g. \externallabels{http://cbl.leeds.ac.uk/nikos/WWW/doc/tex2html/latex2html} % {/usr/cblelca/nikos/tmp/labels.pl} % The arguments are ignored in the dvi and ps files. % \newcommand{\externallabels}[2]{} % This complements the \externallabels command above. The argument % should be a label defined in another latex document and will be % ignored in the dvi and ps files. % \newcommand{\externalref}[1]{} % Suggested by Uffe Engberg (http://www.brics.dk/~engberg/) % This allows the same effect for citations in external bibliographies. % An \externallabels command must be given, locating a labels.pl file % which defines the location and keys used in the external .html file. % \newcommand{\externalcite}{\nocite} % This allows a section-heading in the TOC or mini-TOC to be just % a hyperlink to an external document. % % \htmladdTOClink[<path_to_labels>]{<section-level>}{<title>}{<URL>} % where <section-level> is 'chapter' , 'section' , 'subsection' etc. % and <path_to_labels> is the path to find a labels.pl file, % so that external cross-referencing may work, as with \externallabels % %\ifx\pdfunknown\relax \newcommand{\htmladdTOClink}[4][]{} % % can do something here, using the \pdfoutline primitive %\else % \def\htmladdTOClink#1#2#3#4{\pdfoutline user {/S /URI /URI #4} % name{#2} count{#1}{#3}} %\fi %%% HTMLRULE % This command adds a horizontal rule and is valid even within % a figure caption. % Here we introduce a stub for compatibility. \newcommand{\htmlrule}{\protect\HTMLrule} \newcommand{\HTMLrule}{\@ifstar\htmlrulestar\htmlrulestar} \newcommand{\htmlrulestar}[1]{} %%% HTMLCLEAR % This command puts in a <BR> tag, with CLEAR="ALL" \newcommand{\htmlclear}{} % This command adds information within the <BODY> ... </BODY> tag % \newcommand{\bodytext}[1]{} \newcommand{\htmlbody}{} %%% HYPERREF % Suggested by Eric M. Carol <eric@ca.utoronto.utcc.enfm> % Similar to \ref but accepts conditional text. % The first argument is HTML text which will become ``hyperized'' % (underlined). % The second and third arguments are text which will appear only in the paper % version (DVI file), enclosing the fourth argument which is a reference to a label. % %e.g. \hyperref{using the tracer}{using the tracer (see Section}{)}{trace} % where there is a corresponding \label{trace} % % avoid possible confict with hyperref package \ifx\undefined\hyperref \newcommand{\hyperrefhyper}[4]{#4}% \def\next{\newcommand}% \else \let\hyperrefhyper\hyperref \def\next{\renewcommand}% \fi \next{\hyperref}{\hyperrefi[]}\let\next=\relax \def\hyperrefi[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hyperrefdef \else\def\tmp{ref}\ifx\next\tmp\aftergroup\hyperrefref \else\def\tmp{pageref}\ifx\next\tmp\aftergroup\hyperrefpageref \else\def\tmp{page}\ifx\next\tmp\aftergroup\hyperrefpage \else\def\tmp{noref}\ifx\next\tmp\aftergroup\hyperrefnoref \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperrefno \else\def\tmp{hyper}\ifx\next\tmp\aftergroup\hyperrefhyper \else\def\tmp{html}\ifx\next\tmp\aftergroup\hyperrefhtml \else\typeout{*** unknown option \next\space to hyperref ***}% \fi\fi\fi\fi\fi\fi\fi\fi}} \newcommand{\hyperrefdef}[4]{#2\ref{#4}#3} \newcommand{\hyperrefpageref}[4]{#2\pageref{#4}#3} \newcommand{\hyperrefnoref}[3]{#2} \let\hyperrefref=\hyperrefdef \let\hyperrefpage=\hyperrefpageref \let\hyperrefno=\hyperrefnoref \ifx\undefined\hyperrefhyper\newcommand{\hyperrefhyper}[4]{#4}\fi \let\hyperrefhtml=\hyperrefdef %%% HYPERCITE --- added by RRM % Suggested by Stephen Simpson <simpson@math.psu.edu> % effects the same ideas as in \hyperref, but for citations. % It does not allow an optional argument to the \cite, in LaTeX. % % \hypercite{<html-text>}{<LaTeX-text>}{<opt-text>}{<key>} % % uses the pre/post-texts in LaTeX, with a \cite{<key>} % % \hypercite[ext]{<html-text>}{<LaTeX-text>}{<key>} % \hypercite[ext]{<html-text>}{<LaTeX-text>}[<prefix>]{<key>} % % uses the pre/post-texts in LaTeX, with a \nocite{<key>} % the actual reference comes from an \externallabels file. % \newcommand{\hypercite}{\hypercitei[]} \def\hypercitei[#1]{{\def\next{#1}\def\tmp{}% \ifx\next\tmp\aftergroup\hypercitedef \else\def\tmp{int}\ifx\next\tmp\aftergroup\hyperciteint \else\def\tmp{cite}\ifx\next\tmp\aftergroup\hypercitecite \else\def\tmp{ext}\ifx\next\tmp\aftergroup\hyperciteext \else\def\tmp{nocite}\ifx\next\tmp\aftergroup\hypercitenocite \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperciteno \else\typeout{*** unknown option \next\space to hypercite ***}% \fi\fi\fi\fi\fi\fi}} \newcommand{\hypercitedef}[4]{#2{\def\tmp{#3}\def\emptyopt{}% \ifx\tmp\emptyopt\cite{#4}\else\cite[#3]{#4}\fi}} \newcommand{\hypercitenocite}[2]{#2\hypercitenocitex[]} \def\hypercitenocitex[#1]#2{\nocite{#2}} \let\hypercitecite=\hypercitedef \let\hyperciteint=\hypercitedef \let\hyperciteext=\hypercitenocite \let\hyperciteno=\hypercitenocite %%% HTMLREF % Reference in HTML version only. % Mix between \htmladdnormallink and \hyperref. % First arg is text for in both versions, second is label for use in HTML % version. \ifx\pdfunknown\relax \html@new{\htmlref}[2]{#1} \else \def\htmlref#1#2{\hyperefhyper[#2]{#1}} \fi %%% HTMLCITE % Reference in HTML version only. % Mix between \htmladdnormallink and \hypercite. % First arg is text for both versions, second is citation for use in HTML % version. \newcommand{\htmlcite}[2]{#1} %%% HTMLIMAGE % This command can be used inside any environment that is converted % into an inlined image (eg a "figure" environment) in order to change % the way the image will be translated. The argument of \htmlimage % is really a string of options separated by commas ie % [scale=<scale factor>],[external],[thumbnail=<reduction factor> % The scale option allows control over the size of the final image. % The ``external'' option will cause the image not to be inlined % (images are inlined by default). External images will be accessible % via a hypertext link. % The ``thumbnail'' option will cause a small inlined image to be % placed in the caption. The size of the thumbnail depends on the % reduction factor. The use of the ``thumbnail'' option implies % the ``external'' option. % % Example: % \htmlimage{scale=1.5,external,thumbnail=0.2} % will cause a small thumbnail image 1/5th of the original size to be % placed in the final document, pointing to an external image 1.5 % times bigger than the original. % \newcommand{\htmlimage}[1]{} % \htmlborder causes a border to be placed around an image or table % when the image is placed within a <TABLE> cell. \newcommand{\htmlborder}[1]{} % Put \begin{makeimage}, \end{makeimage} around LaTeX to ensure its % translation into an image. % This shields sensitive text from being translated. \newenvironment{makeimage}{}{} % A dummy environment that can be useful to alter the order % in which commands are processed, in LaTeX2HTML \newenvironment{tex2html_deferred}{}{} %%% HTMLADDTONAVIGATION % This command appends its argument to the buttons in the navigation % panel. It is ignored by LaTeX. % % Example: % \htmladdtonavigation{\htmladdnormallink % {\htmladdimg{http://server/path/to/gif}} % {http://server/path}} \newcommand{\htmladdtonavigation}[1]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % based upon Eijkhout's comment.sty v2.0 % with modifications to avoid conflicts with later versions % of this package, should a user be requiring it. % Ross Moore, 10 March 1999 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Comment.sty version 2.0, 19 June 1992 % selectively in/exclude pieces of text: the user can define new % comment versions, and each is controlled separately. % This style can be used with plain TeX or LaTeX, and probably % most other packages too. % % Examples of use in LaTeX and TeX follow \endinput % % Author % Victor Eijkhout % Department of Computer Science % University Tennessee at Knoxville % 104 Ayres Hall % Knoxville, TN 37996 % USA % % eijkhout@cs.utk.edu % % Usage: all text included in between % \comment ... \endcomment % or \begin{comment} ... \end{comment} % is discarded. The closing command should appear on a line % of its own. No starting spaces, nothing after it. % This environment should work with arbitrary amounts % of comment. % % Other 'comment' environments are defined by % and are selected/deselected with % \includecomment{versiona} % \excludecoment{versionb} % % These environments are used as % \versiona ... \endversiona % or \begin{versiona} ... \end{versiona} % with the closing command again on a line of its own. % % Basic approach: % to comment something out, scoop up every line in verbatim mode % as macro argument, then throw it away. % For inclusions, both the opening and closing comands % are defined as noop % % Changed \next to \html@next to prevent clashes with other sty files % (mike@emn.fr) % Changed \html@next to \htmlnext so the \makeatletter and % \makeatother commands could be removed (they were causing other % style files - changebar.sty - to crash) (nikos@cbl.leeds.ac.uk) % Changed \htmlnext back to \html@next... \def\makeinnocent#1{\catcode`#1=12 } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} \def\ThrowAwayComment#1{\begingroup \def\CurrentComment{#1}% \let\do\makeinnocent \dospecials \makeinnocent\^^L% and whatever other special cases %%RRM %% use \xhtmlComment for \xComment %% use \html@next for \next \endlinechar`\^^M \catcode`\^^M=12 \xhtmlComment} {\catcode`\^^M=12 \endlinechar=-1 % \gdef\xhtmlComment#1^^M{\def\test{#1}\edef\test{\meaning\test} \csarg\ifx{PlainEnd\CurrentComment Test}\test \let\html@next\endgroup \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \csarg\ifx{LaInnEnd\CurrentComment Test}\test \edef\html@next{\endgroup\noexpand\end{\CurrentComment}} \else \let\html@next\xhtmlComment \fi \fi \fi \html@next} } %%\def\includecomment %%RRM \def\htmlincludecomment #1{\expandafter\def\csname#1\endcsname{}% \expandafter\def\csname end#1\endcsname{}} %%\def\excludecomment %%RRM \def\htmlexcludecomment #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}% {\escapechar=-1\relax \edef\tmp{\string\\end#1}% \csarg\xdef{PlainEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end\string\{#1\string\}}% \csarg\xdef{LaLaEnd#1Test}{\meaning\tmp}% \edef\tmp{\string\\end \string\{#1\string\}}% \csarg\xdef{LaInnEnd#1Test}{\meaning\tmp}% }} %%\excludecomment{comment} %%RRM \htmlexcludecomment{comment} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end Comment.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment % % Alternative code by Robin Fairbairns, 22 September 1997 % revised to cope with % and unnested { }, by Ross Moore, 4 July 1998 % further revised to cope with & and # in tables, 10 March 1999 % \def\raw@catcodes{\catcode`\%=12 \catcode`\{=12 \catcode`\}=12 \catcode`\&=12 \catcode`\#=12 } \newcommand\@gobbleenv{\bgroup\raw@catcodes \let\reserved@a\@currenvir\@gobble@nv} \bgroup \def\expansionhead{\gdef\@gobble@nv@i##1} \def\expansiontail{{\def\reserved@b{##1}\@gobble@nv@ii}} \def\expansionheadii{\long\gdef\@gobble@nv##1\end} \def\expansiontailii{{\@gobble@nv@i}} \def\expansionmidii{##2} \raw@catcodes\relax \expandafter\expansionhead\expandafter}\expansiontail \egroup \long\gdef\@gobble@nv#1\end#2{\@gobble@nv@i} %\long\def\@gobble@nv#1\end#2{\def\reserved@b{#2}% \def\@gobble@nv@ii{% \ifx\reserved@a\reserved@b \edef\reserved@a{\egroup\noexpand\end{\reserved@a}}% \expandafter\reserved@a \else \expandafter\@gobble@nv \fi} \renewcommand{\htmlexcludecomment}[1]{% \csname newenvironment\endcsname{#1}{\@gobbleenv}{}} \newcommand{\htmlreexcludecomment}[1]{% \csname renewenvironment\endcsname{#1}{\@gobbleenv}{}} %%% RAW HTML % % Enclose raw HTML between a \begin{rawhtml} and \end{rawhtml}. % The html environment ignores its body % \htmlexcludecomment{rawhtml} %%% HTML ONLY % % Enclose LaTeX constructs which will only appear in the % HTML output and will be ignored by LaTeX with % \begin{htmlonly} and \end{htmlonly} % \htmlexcludecomment{htmlonly} % Shorter version \newcommand{\html}[1]{} % for images.tex only \htmlexcludecomment{imagesonly} %%% LaTeX ONLY % Enclose LaTeX constructs which will only appear in the % DVI output and will be ignored by latex2html with %\begin{latexonly} and \end{latexonly} % \newenvironment{latexonly}{}{} % Shorter version \newcommand{\latex}[1]{#1} %%% LaTeX or HTML % Combination of \latex and \html. % Say \latexhtml{this should be latex text}{this html text} % %\newcommand{\latexhtml}[2]{#1} \long\def\latexhtml#1#2{#1} %%% tracing the HTML conversions % This alters the tracing-level within the processing % performed by latex2html by adjusting $VERBOSITY % (see latex2html.config for the appropriate values) % \newcommand{\htmltracing}[1]{} \newcommand{\htmltracenv}[1]{} %%% \strikeout for HTML only % uses <STRIKE>...</STRIKE> tags on the argument % LaTeX just gobbles it up. \newcommand{\strikeout}[1]{} %%% \htmlurl and \url % implement \url as the simplest thing, if not already defined % let \htmlurl#1 be equivalent to it % \def\htmlurlx#1{\begin{small}\texttt{#1}\end{small}}% \expandafter\ifx\csname url\endcsname\relax \let\htmlurl=\htmlurlx \else \let\htmlurl=\url \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% JCL - stop input here if LaTeX2e is not present %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx\if@compatibility\undefined %LaTeX209 \makeatother\relax\expandafter\endinput \fi \if@compatibility %LaTeX2e in LaTeX209 compatibility mode \makeatother\relax\expandafter\endinput \fi %\let\real@TeXlogo = \TeX %\DeclareRobustCommand{\TeX}{\relax\real@TeXlogo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start providing LaTeX2e extension: % This is currently: % - additional optional argument for \htmladdimg % - support for segmented documents % \ProvidesPackage{html} [1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm)] % % Ensure that \includecomment and \excludecomment are bound % to the version defined here. % \AtBeginDocument{% \let\includecomment=\htmlincludecomment \let\excludecomment=\htmlexcludecomment \htmlreexcludecomment{comment}} %%% bind \htmlurl to \url if that is later loaded % \expandafter\ifx\csname url\endcsname\relax \AtBeginDocument{\@ifundefined{url}{}{\let\htmlurl=\url}}\fi %%%%MG % This command takes as argument a URL pointing to an image. % The image will be embedded in the HTML document but will % be ignored in the dvi and ps files. The optional argument % denotes additional HTML tags. % % Example: \htmladdimg[ALT="portrait" ALIGN=CENTER]{portrait.gif} % \ifx\pdfunknown\relax \renewcommand{\htmladdimg}[2][]{} \else \renewcommand{\htmladdimg}[2][]{\hyperimage{#2}} \fi %%% HTMLRULE for LaTeX2e % This command adds a horizontal rule and is valid even within % a figure caption. % % This command is best used with LaTeX2e and HTML 3.2 support. % It is like \hrule, but allows for options via key--value pairs % as follows: \htmlrule[key1=value1, key2=value2, ...] . % Use \htmlrule* to suppress the <BR> tag. % Eg. \htmlrule[left, 15, 5pt, "none", NOSHADE] produces % <BR CLEAR="left"><HR NOSHADE SIZE="15">. % Renew the necessary part. \renewcommand{\htmlrulestar}[1][all]{} %%% HTMLCLEAR for LaTeX2e % This command puts in a <BR> tag, with optional CLEAR="<attrib>" % \renewcommand{\htmlclear}[1][all]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % renew some definitions to allow optional arguments % % The description of the options is missing, as yet. % \renewcommand{\latextohtml}{\textup{\LaTeX2\texttt{HTML}}} \ifx\pdfunknown\relax \renewcommand{\htmladdnormallinkfoot}[3][]{#2\footnote{#3}} \renewcommand{\htmladdnormallink}[3][]{#2} \else \renewcommand{\htmladdnormallinkfoot}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlinkfoot}% \else\def\next{\htmladdnamedlinkfoot{#1}}\fi \next} \newcommand{\htmladdnonamedlinkfoot}[2]{% #1\footnote{\href{#2}{#2}}} \newcommand{\htmladdnamedlinkfoot}[3]{% \hypertarget{#1}{#2}\footnote{\href{#3}{#3}}} \renewcommand{\htmladdnormallink}[1][]{\def\next{#1}% \ifx\next\@empty\def\next{\htmladdnonamedlink}% \else\def\next{\htmladdnamedlink{#1}}\fi \next} \newcommand{\htmladdnonamedlink}[2]{\href{#2}{#1}} \newcommand{\htmladdnamedlink}[3]{% \hypertarget{#1}{\hskip2bp}\href{#3}{#2}} \fi \renewcommand{\htmlbody}[1][]{} \renewcommand{\htmlborder}[2][]{} \renewcommand{\externallabels}[3][]{} \renewcommand{\externalref}[2][]{} \renewcommand{\externalcite}[1][]{\nocite} \renewcommand{\hyperref}[1][]{\hyperrefi[#1]} \renewcommand{\hypercite}[1][]{\hypercitei[#1]} \renewcommand{\hypercitenocite}[2]{#2\hypercitenocitex} \renewcommand{\hypercitenocitex}[2][]{\nocite{#2}} \let\hyperciteno=\hypercitenocite \let\hyperciteext=\hypercitenocite \ifx\pdfunknown\relax \renewcommand{\htmlimage}[2][]{} \renewcommand{\htmlref}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlrefdef\else\aftergroup\htmlrefext\fi}} \newcommand{\htmlrefdef}[1]{} \newcommand{\htmlrefext}[2][]{} \renewcommand{\htmlcite}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[2][]{} \else \renewcommand{\htmlimage}[2][]{\hyperimage{#2}} \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@} \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}} \newcommand{\htmlrefext}[3]{% \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}} \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[1][]{\cite} \fi \newcommand{\htmlcitedef}[1]{ \nocite{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % HTML HTMLset HTMLsetenv % % These commands do nothing in LaTeX, but can be used to place % HTML tags or set Perl variables during the LaTeX2HTML processing; % They are intended for expert use only. \newcommand{\HTMLcode}[2][]{} \ifx\undefined\HTML\newcommand{\HTML}[2][]{}\else \typeout{*** Warning: \string\HTML\space had an incompatible definition ***}% \typeout{*** instead use \string\HTMLcode\space for raw HTML code ***}% \fi \newcommand{\HTMLset}[3][]{} \newcommand{\HTMLsetenv}[3][]{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % The following commands pertain to document segmentation, and % were added by Herbert Swan <dprhws@edp.Arco.com> (with help from % Michel Goossens <goossens@cern.ch>): % % % This command inputs internal latex2html tables so that large % documents can to partitioned into smaller (more manageable) % segments. % \newcommand{\internal}[2][internals]{} % % Define a dummy stub \htmlhead{}. This command causes latex2html % to define the title of the start of a new segment. It is not % normally placed in the user's document. Rather, it is passed to % latex2html via a .ptr file written by \segment. % \newcommand{\htmlhead}[3][]{} % In the LaTeX2HTML version this will eliminate the title line % generated by a \segment command, but retains the title string % for use in other places. % \newcommand{\htmlnohead}{} % In the LaTeX2HTML version this put a URL into a <BASE> tag % within the <HEAD>...</HEAD> portion of a document. % \ifx\pdfunknown\relax \newcommand{\htmlbase}[1]{} \else \let\htmlbase=\hyperbaseurl \fi % Include style information into the stylesheet; e.g. CSS % \newcommand{\htmlsetstyle}[3][]{} \newcommand{\htmladdtostyle}[3][]{} % Define a style-class for information in a particular language % \newcommand{\htmllanguagestyle}[2][]{} % % The dummy command \endpreamble is needed by latex2html to % mark the end of the preamble in document segments that do % not contain a \begin{document} % \newcommand{\startdocument}{} % \tableofchildlinks, \htmlinfo % by Ross Moore --- extensions dated 27 September 1997 % % These do nothing in LaTeX but for LaTeX2HTML they mark % where the table of child-links and info-page should be placed, % when the user wants other than the default. % \tableofchildlinks % put mini-TOC at this location % \tableofchildlinks[off] % not on current page % \tableofchildlinks[none] % not on current and subsequent pages % \tableofchildlinks[on] % selectively on current page % \tableofchildlinks[all] % on current and all subsequent pages % \htmlinfo % put info-page at this location % \htmlinfo[off] % no info-page in current document % \htmlinfo[none] % no info-page in current document % *-versions omit the preceding <BR> tag. % \newcommand{\tableofchildlinks}{% \@ifstar\tableofchildlinksstar\tableofchildlinksstar} \newcommand{\tableofchildlinksstar}[1][]{} \newcommand{\htmlinfo}{\@ifstar\htmlinfostar\htmlinfostar} \newcommand{\htmlinfostar}[1][]{} % This redefines \begin to allow for an optional argument % which is used by LaTeX2HTML to specify `style-sheet' information \let\realLaTeX@begin=\begin \renewcommand{\begin}[1][]{\realLaTeX@begin} % % Allocate a new set of section counters, which will get incremented % for "*" forms of sectioning commands, and for a few miscellaneous % commands. % \@ifundefined{c@part}{\newcounter{part}}{}% \newcounter{lpart} \newcounter{lchapter}[part] \@ifundefined{c@chapter}% {\let\Hchapter\relax \newcounter{chapter}\let\thechapter\relax \newcounter{lsection}[part]}% {\let\Hchapter=\chapter \newcounter{lsection}[chapter]} \newcounter{lsubsection}[section] \newcounter{lsubsubsection}[subsection] \newcounter{lparagraph}[subsubsection] \newcounter{lsubparagraph}[paragraph] %\newcounter{lequation} % % Redefine "*" forms of sectioning commands to increment their % respective counters. % \let\Hpart=\part %\let\Hchapter=\chapter \let\Hsection=\section \let\Hsubsection=\subsection \let\Hsubsubsection=\subsubsection \let\Hparagraph=\paragraph \let\Hsubparagraph=\subparagraph \let\Hsubsubparagraph=\subsubparagraph \ifx\c@subparagraph\undefined \newcounter{lsubsubparagraph}[lsubparagraph] \else \newcounter{lsubsubparagraph}[subparagraph] \fi % % The following definitions are specific to LaTeX2e: % (They must be commented out for LaTeX 2.09) % \expandafter\ifx\csname part\endcsname\relax\else \renewcommand{\part}{\@ifstar{\stepcounter{lpart}% \bgroup\def\tmp{*}\H@part}{\bgroup\def\tmp{}\H@part}}\fi \newcommand{\H@part}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hpart\tmp} \ifx\Hchapter\relax\else \def\chapter{\resetsections \@ifstar{\stepcounter{lchapter}% \bgroup\def\tmp{*}\H@chapter}{\bgroup\def\tmp{}\H@chapter}}\fi \newcommand{\H@chapter}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hchapter\tmp} \renewcommand{\section}{\resetsubsections \@ifstar{\stepcounter{lsection}\bgroup\def\tmp{*}% \H@section}{\bgroup\def\tmp{}\H@section}} \newcommand{\H@section}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsection\tmp} \renewcommand{\subsection}{\resetsubsubsections \@ifstar{\stepcounter{lsubsection}\bgroup\def\tmp{*}% \H@subsection}{\bgroup\def\tmp{}\H@subsection}} \newcommand{\H@subsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsection\tmp} \renewcommand{\subsubsection}{\resetparagraphs \@ifstar{\stepcounter{lsubsubsection}\bgroup\def\tmp{*}% \H@subsubsection}{\bgroup\def\tmp{}\H@subsubsection}} \newcommand{\H@subsubsection}[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubsection\tmp} \renewcommand{\paragraph}{\resetsubparagraphs \@ifstar{\stepcounter{lparagraph}\bgroup\def\tmp{*}% \H@paragraph}{\bgroup\def\tmp{}\H@paragraph}} \newcommand\H@paragraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hparagraph\tmp} \ifx\Hsubparagraph\relax\else\@ifundefined{subparagraph}{}{% \renewcommand{\subparagraph}{\resetsubsubparagraphs \@ifstar{\stepcounter{lsubparagraph}\bgroup\def\tmp{*}% \H@subparagraph}{\bgroup\def\tmp{}\H@subparagraph}}}\fi \newcommand\H@subparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubparagraph\tmp} \ifx\Hsubsubparagraph\relax\else\@ifundefined{subsubparagraph}{}{% \def\subsubparagraph{% \@ifstar{\stepcounter{lsubsubparagraph}\bgroup\def\tmp{*}% \H@subsubparagraph}{\bgroup\def\tmp{}\H@subsubparagraph}}}\fi \newcommand\H@subsubparagraph[1][]{\def\tmp@a{#1}\check@align \expandafter\egroup\expandafter\Hsubsubparagraph\tmp} \def\check@align{\def\empty{}\ifx\tmp@a\empty \else\def\tmp@b{center}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{left}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\def\tmp@b{right}\ifx\tmp@a\tmp@b\let\tmp@a\empty \else\expandafter\def\expandafter\tmp@a\expandafter{\expandafter[\tmp@a]}% \fi\fi\fi \def\empty{}\ifx\tmp\empty\let\tmp=\tmp@a \else \expandafter\def\expandafter\tmp\expandafter{\expandafter*\tmp@a}% \fi\fi} % \def\resetsections{\setcounter{section}{0}\setcounter{lsection}{0}% \reset@dependents{section}\resetsubsections } \def\resetsubsections{\setcounter{subsection}{0}\setcounter{lsubsection}{0}% \reset@dependents{subsection}\resetsubsubsections } \def\resetsubsubsections{\setcounter{subsubsection}{0}\setcounter{lsubsubsection}{0}% \reset@dependents{subsubsection}\resetparagraphs } % \def\resetparagraphs{\setcounter{lparagraph}{0}\setcounter{lparagraph}{0}% \reset@dependents{paragraph}\resetsubparagraphs } \def\resetsubparagraphs{\ifx\c@subparagraph\undefined\else \setcounter{subparagraph}{0}\fi \setcounter{lsubparagraph}{0}% \reset@dependents{subparagraph}\resetsubsubparagraphs } \def\resetsubsubparagraphs{\ifx\c@subsubparagraph\undefined\else \setcounter{subsubparagraph}{0}\fi \setcounter{lsubsubparagraph}{0}} % \def\reset@dependents#1{\begingroup\let \@elt \@stpelt \csname cl@#1\endcsname\endgroup} % ignore optional *-version of \tableofcontents \let\ltx@tableofcontents\tableofcontents \renewcommand{\tableofcontents}{% \@ifstar\ltx@tableofcontents\ltx@tableofcontents} % % % Define a helper macro to dump a single \secounter command to a file. % \newcommand{\DumpPtr}[2]{% \count255=\csname c@#1\endcsname\relax\def\dummy{dummy}\def\tmp{#2}% \ifx\tmp\dummy\def\ctr{#1}\else \def\ctr{#2}\advance\count255 by \csname c@#2\endcsname\relax\fi \immediate\write\ptrfile{% \noexpand\setcounter{\ctr}{\number\count255}}} %\expandafter\noexpand\expandafter\setcounter\expandafter{\ctr}{\number\count255}}} % % Define a helper macro to dump all counters to the file. % The value for each counter will be the sum of the l-counter % actual LaTeX section counter. % Also dump an \htmlhead{section-command}{section title} command % to the file. % \newwrite\ptrfile \def\DumpCounters#1#2#3#4{% \begingroup\let\protect=\noexpand \immediate\openout\ptrfile = #1.ptr \DumpPtr{part}{lpart}% \ifx\Hchapter\relax\else\DumpPtr{chapter}{lchapter}\fi \DumpPtr{section}{lsection}% \DumpPtr{subsection}{lsubsection}% \DumpPtr{subsubsection}{lsubsubsection}% \DumpPtr{paragraph}{lparagraph}% \DumpPtr{subparagraph}{lsubparagraph}% \DumpPtr{equation}{dummy}% \DumpPtr{footnote}{dummy}% \def\tmp{#4}\ifx\tmp\@empty \immediate\write\ptrfile{\noexpand\htmlhead{#2}{#3}}\else \immediate\write\ptrfile{\noexpand\htmlhead[#4]{#2}{#3}}\fi \dumpcitestatus \dumpcurrentcolor \immediate\closeout\ptrfile \endgroup } %% interface to natbib.sty \def\dumpcitestatus{} \def\loadcitestatus{\def\dumpcitestatus{% \ifciteindex\immediate\write\ptrfile{\noexpand\citeindextrue}% \else\immediate\write\ptrfile{\noexpand\citeindexfalse}\fi }% } \@ifpackageloaded{natbib}{\loadcitestatus}{% \AtBeginDocument{\@ifpackageloaded{natbib}{\loadcitestatus}{}}} %% interface to color.sty \def\dumpcurrentcolor{} \def\loadsegmentcolors{% \let\real@pagecolor=\pagecolor \let\pagecolor\segmentpagecolor \let\segmentcolor\color \ifx\current@page@color\undefined \def\current@page@color{{}}\fi \def\dumpcurrentcolor{\bgroup\def\@empty@{{}}% \expandafter\def\expandafter\tmp\space####1@{\def\thiscol{####1}}% \ifx\current@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@color @\fi \immediate\write\ptrfile{\noexpand\segmentcolor{\thiscol}}% \ifx\current@page@color\@empty@\def\thiscol{}\else \expandafter\tmp\current@page@color @\fi \immediate\write\ptrfile{\noexpand\segmentpagecolor{\thiscol}}% \egroup}% \global\let\loadsegmentcolors=\relax } % These macros are needed within images.tex since this inputs % the <segment>.ptr files for a segment, so that counters are % colors are synchronised. % \newcommand{\segmentpagecolor}[1][]{% \@ifpackageloaded{color}{\loadsegmentcolors\bgroup \def\tmp{#1}\ifx\@empty\tmp\def\next{[]}\else\def\next{[#1]}\fi \expandafter\segmentpagecolor@\next}% {\@gobble}} \def\segmentpagecolor@[#1]#2{\def\tmp{#1}\def\tmpB{#2}% \ifx\tmpB\@empty\let\next=\egroup \else \let\realendgroup=\endgroup \def\endgroup{\edef\next{\noexpand\realendgroup \def\noexpand\current@page@color{\current@color}}\next}% \ifx\tmp\@empty\real@pagecolor{#2}\def\model{}% \else\real@pagecolor[#1]{#2}\def\model{[#1]}% \fi \edef\next{\egroup\def\noexpand\current@page@color{\current@page@color}% \noexpand\real@pagecolor\model{#2}}% \fi\next} % \newcommand{\segmentcolor}[2][named]{\@ifpackageloaded{color}% {\loadsegmentcolors\segmentcolor[#1]{#2}}{}} \@ifpackageloaded{color}{\loadsegmentcolors}{\let\real@pagecolor=\@gobble \AtBeginDocument{\@ifpackageloaded{color}{\loadsegmentcolors}{}}} % Define the \segment[align]{file}{section-command}{section-title} command, % and its helper macros. This command does four things: % 1) Begins a new LaTeX section; % 2) Writes a list of section counters to file.ptr, each % of which represents the sum of the LaTeX section % counters, and the l-counters, defined above; % 3) Write an \htmlhead{section-title} command to file.ptr; % 4) Inputs file.tex. \newcommand{\segment}{\@ifstar{\@@htmls}{\@@html}} %\tracingall \newcommand{\@endsegment}[1][]{} \let\endsegment\@endsegment \newcommand{\@@htmls}[1][]{\@@htmlsx{#1}} \newcommand{\@@html}[1][]{\@@htmlx{#1}} \def\@@htmlsx#1#2#3#4{\csname #3\endcsname* {#4}% \DumpCounters{#2}{#3*}{#4}{#1}\input{#2}} \def\@@htmlx#1#2#3#4{\csname #3\endcsname {#4}% \DumpCounters{#2}{#3}{#4}{#1}\input{#2}} \makeatother \endinput % Modifications: % % (The listing of Initiales see Changes) % $Log: html.sty,v $ % Revision 1.39 2001/10/01 22:47:06 RRM % -- somehow revision 1.39 was not committed earlier % -- it allows a * version of \tableofcontents (used with frames) to be % treated as un-starred by LaTeX % % Revision 1.39 2000/09/10 12:23:20 RRM % -- added *-argument for \tableofcontents in frames.perl % LaTeX should just ignore it % % Revision 1.38 1999/07/19 13:23:20 RRM % -- compatibility with pdflatex and hyperref.sty % citations are not complete yet, I think % -- ensure that \thechapter remains undefined; some packages use it % as a test for the type of documentclass being used. % % Revision 1.37 1999/03/12 07:02:38 RRM % -- change macro name from \addTOCsection to \htmladdTOClink % -- it has 3 + 1 optional argument, to allow a local path to a labels.pl % file for the external document, for cross-references % % Revision 1.36 1999/03/10 05:46:00 RRM % -- extended the code for compatibilty with comment.sty % -- allow excluded environments to work within tables, % with the excluded material spanning headers and several cells % thanks Avinash Chopde for recognising the need for this. % -- added LaTeX support (ignores it) for \htmladdTOCsection % thanks to Steffen Klupsch and Uli Wortmann for this idea. % % Revision 1.35 1999/03/08 11:16:16 RRM % html.sty for LaTeX2HTML V99.1 % % -- ensure that html.sty can be loaded *after* hyperref.sty % -- support new command \htmlclear for <BR> in HTML, ignored by LaTeX % -- ensure {part} and {chapter} counters are defined, even if not used % % Revision 1.34 1998/09/19 10:37:29 RRM % -- fixed typo with \next{\hyperref}{....} % % Revision 1.33 1998/09/08 12:47:51 RRM % -- changed macro-names for the \hyperref and \hypercite options % allows easier compatibility with other packages % % Revision 1.32 1998/08/24 12:15:14 RRM % -- new command \htmllanguagestyle to associate a style class % with text declared as a particular language % % Revision 1.31 1998/07/07 14:15:41 RRM % -- new commands \htmlsetstyle and \htmladdtostyle % % Revision 1.30 1998/07/04 02:42:22 RRM % -- cope with catcodes of % { } in rawhtml/comment/htmlonly environments % % Revision 1.29 1998/06/23 13:33:23 RRM % -- use \begin{small} with the default for URLs % % Revision 1.28 1998/06/21 09:38:39 RRM % -- implement \htmlurl to agree with \url if already defined % or loaded subsequently (LaTeX-2e only) % -- get LaTeX to print the revision number when loading % % Revision 1.27 1998/06/20 15:13:10 RRM % -- \TeX is already protected in recent versions of LaTeX % so \DeclareRobust doesn't work --- causes looping % -- \part and \subparagraph need not be defined in some styles % % Revision 1.26 1998/06/01 08:36:49 latex2html % -- implement optional argument for \endsegment % -- made the counter value output from \DumpPtr more robust % % Revision 1.25 1998/05/09 05:43:35 latex2html % -- conditionals for avoiding undefined counters % % Revision 1.23 1998/02/26 10:32:24 latex2html % -- use \providecommand for \latextohtml % -- implemented \HTMLcode to do what \HTML did previously % \HTML still works, unless already defined by another package % -- fixed problems remaining with undefined \chapter % -- defined \endsegment % % Revision 1.22 1997/12/05 11:38:18 RRM % -- implemented an optional argument to \begin for style-sheet info. % -- modified use of an optional argument with sectioning-commands % % Revision 1.21 1997/11/05 10:28:56 RRM % -- replaced redefinition of \@htmlrule with \htmlrulestar % % Revision 1.20 1997/10/28 02:15:58 RRM % -- altered the way some special html-macros are defined, so that % star-variants are explicitly defined for LaTeX % -- it is possible for these to occur within images.tex % e.g. \htmlinfostar \htmlrulestar \tableofchildlinksstar % % Revision 1.19 1997/10/11 05:47:48 RRM % -- allow the dummy {tex2html_nowrap} environment in LaTeX % use it to make its contents be evaluated in environment order % % Revision 1.18 1997/10/04 06:56:50 RRM % -- uses Robin Fairbairns' code for ignored environments, % replacing the previous comment.sty stuff. % -- extensions to the \tableofchildlinks command % -- extensions to the \htmlinfo command % % Revision 1.17 1997/07/08 11:23:39 RRM % include value of footnote counter in .ptr files for segments % % Revision 1.16 1997/07/03 08:56:34 RRM % use \textup within the \latextohtml macro % % Revision 1.15 1997/06/15 10:24:58 RRM % new command \htmltracenv as environment-ordered \htmltracing % % Revision 1.14 1997/06/06 10:30:37 RRM % - new command: \htmlborder puts environment into a <TABLE> cell % with a border of specified width, + other attributes. % - new commands: \HTML for setting arbitrary HTML tags, with attributes % \HTMLset for setting Perl variables, while processing % \HTMLsetenv same as \HTMLset , but it gets processed % as if it were an environment. % - new command: \latextohtml --- to set the LaTeX2HTML name/logo % - fixed some remaining problems with \segmentcolor & \segmentpagecolor % % Revision 1.13 1997/05/19 13:55:46 RRM % alterations and extra options to \hypercite % % Revision 1.12 1997/05/09 12:28:39 RRM % - Added the optional argument to \htmlhead, also in \DumpCounters % - Implemented \HTMLset as a no-op in LaTeX. % - Fixed a bug in accessing the page@color settings. % % Revision 1.11 1997/03/26 09:32:40 RRM % - Implements LaTeX versions of \externalcite and \hypercite commands. % Thanks to Uffe Engberg and Stephen Simpson for the suggestions. % % Revision 1.10 1997/03/06 07:37:58 RRM % Added the \htmltracing command, for altering $VERBOSITY . % % Revision 1.9 1997/02/17 02:26:26 RRM % - changes to counter handling (RRM) % - shuffled around some definitions % - changed \htmlrule of 209 mode % % Revision 1.8 1997/01/26 09:04:12 RRM % RRM: added optional argument to sectioning commands % \htmlbase sets the <BASE HREF=...> tag % \htmlinfo and \htmlinfo* allow the document info to be positioned % % Revision 1.7 1997/01/03 12:15:44 L2HADMIN % % - fixes to the color and natbib interfaces % % - extended usage of \hyperref, via an optional argument. % % - extended use comment environments to allow shifting expansions % % e.g. within \multicolumn (`bug' reported by Luc De Coninck). % % - allow optional argument to: \htmlimage, \htmlhead, % % \htmladdimg, \htmladdnormallink, \htmladdnormallinkfoot % % - added new commands: \htmlbody, \htmlnohead % % - added new command: \tableofchildlinks % % Revision 1.6 1996/12/25 03:04:54 JCL % added patches to segment feature from Martin Wilck % % Revision 1.5 1996/12/23 01:48:06 JCL % o introduced the environment makeimage, which may be used to force % LaTeX2HTML to generate an image from the contents. % There's no magic, all what we have now is a defined empty environment % which LaTeX2HTML will not recognize and thus pass it to images.tex. % o provided \protect to the \htmlrule commands to allow for usage % within captions. % % Revision 1.4 1996/12/21 19:59:22 JCL % - shuffled some entries % - added \latexhtml command % % Revision 1.3 1996/12/21 12:22:59 JCL % removed duplicate \htmlrule, changed \htmlrule back not to create a \hrule % to allow occurrence in caption % % Revision 1.2 1996/12/20 04:03:41 JCL % changed occurrence of \makeatletter, \makeatother % added new \htmlrule command both for the LaTeX2.09 and LaTeX2e % sections % % % jcl 30-SEP-96 % - Stuck the commands commonly used by both LaTeX versions to the top, % added a check which stops input or reads further if the document % makes use of LaTeX2e. % - Introduced rrm's \dumpcurrentcolor and \bodytext % hws 31-JAN-96 - Added support for document segmentation % hws 10-OCT-95 - Added \htmlrule command % jz 22-APR-94 - Added support for htmlref % nd - Created ������������������������������������������������������������������psi3/doc/userman/input.tex��������������������������������������������������������������������������0000644�0001015�0000765�00000063203�10740513716�014311� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{\PSIthree\ Input Files} \label{input} \subsection{Syntax} \label{syntax} \PSIthree\ input files are case-insensitive and free-format, with a grammar designed for maximum flexibility and relative simplicity. Input values are assigned using the structure: \begin{verbatim} keyword = value \end{verbatim} where {\tt keyword} is the parameter chosen (e.g., {\tt convergence}) and {\tt value} has one of the following data types: \begin{itemize} \item string: A character sequence surrounded by double-quotes. Example: {\tt basis = "cc-pVDZ"} \item integer: Any positive or negative number (or zero) with no decimal point. Example: {\tt maxiter = 100} \item real: Any floating-point number. Example: {\tt omega = 0.077357} \item boolean: {\tt true}, {\tt false}, {\tt yes}, {\tt no}, {\tt 1}, {\tt 0}. \item array: a parenthetical list of values of the above data types. Example: {\tt docc = (3 0 1 1)}. \end{itemize} Note that the input parsing system is general enough to allow multidimensional arrays, with elements of more than one data type. A good example is the z-matrix keyword: \begin{verbatim} zmat = ( (O) (H 1 r) (H 1 r 2 a) ) \end{verbatim} For z-matrices, z-matrix variables, and Cartesian coordinates, it is also possible to discard the inner parentheses. The following is equivalent in this case: \begin{verbatim} zmat = ( O H 1 r H 1 r 2 a ) \end{verbatim} Keywords must grouped together in blocks, based on the module or modules that require them. The default block is labelled {\tt psi:}, and most users will require only a {\tt psi:} block when using \PSIthree. For example, the following is a simple input file for a single-point CCSD energy calculation on H$_2$O: \begin{verbatim} psi: ( label = "6-31G**/CCSD H2O" wfn = ccsd reference = rhf jobtype = sp basis = "6-31G**" zmat = ( O H 1 r H 1 r 2 a ) zvars = ( r 1.0 a 104.5 ) ) \end{verbatim} In this example, the {\tt psi:} identifier collects all the keywords (of varying types) together. Every \PSIthree\ module will have access to every keyword in the {\tt psi:} block by default. One may use other identifiers (e.g., {\tt ccenergy:}) to separate certain keywords to be used only by selected modules. For example, consider the keyword {\tt convergence}, which is used by several \PSIthree\ modules to determine the convergence criteria for constructing various types of wave functions. If one wanted to use a high convergence cutoff for the \PSIthree\ SCF module but a lower cutoff for the coupled cluster module, one could modify the above input: \begin{verbatim} psi: ( ... convergence = 7 ) scf:convergence = 12 \end{verbatim} Note that, since we have only one keyword associated with the {\tt scf:} block, we do not need to enclose it parentheses. Some additional aspects of the \PSIthree\ grammar to keep in mind: \begin{itemize} \item The ``\%'' character denotes a comment line, i.e. any information following the ``\%'' up to the next linebreak is ignored by the program. \item Anything in between double quotes (i.e. strings) is case-sensitive. \item Multiple spaces are treated as a single space. \end{itemize} \subsection{Specifying the Type of Computation} The most important keywords in a \PSIthree\ input file are those which tell the program what type of computation are to be performed. They \keyword{jobtype} keyword tells the \PSIdriver\ program whether this is a single-point computation, a geometry optimization, a vibrational frequency calculation, etc. The \keyword{reference} keyword specifies whether an RHF, ROHF, UHF, etc., reference is to be used for the SCF wavefunction. The \keyword{wfn} specifies what theoretical method is to be used, either SCF, determinant-based CI, coupled-cluster, etc. Also of critical importance are the charge and multiplicity of the molecule, the molecular geometry, and the basis set to be used. The latter two topics are discussed below in sections \ref{geom-spec} and \ref{basis-spec}. General keywords determining the general type of computation to be performed are described below. \begin{description} \item[LABEL = string]\mbox{}\\ This is a character string to be included in the output to help keep track of what computation has been run. It is not otherwise used by the program. There is no default. \item[JOBTYPE = string]\mbox{}\\ This tells the program whether to run a single-point energy calculation (SP), a geometry optimization (OPT), a series of calculations at different displaced geometries (DISP), a frequency calculation (FREQ), frequencies only for symmetric vibrational modes (SYMM\_FREQ), a Diagonal Born-Oppenheimer Correction (DBOC) energy computation, or certain response properties (RESPONSE). The default is SP. \item[WFN = string]\mbox{}\\ This specifies the wavefunction type. Possible values are:\\ SCF, MP2, MP2R12, CIS, DETCI, CASSCF, RASSCF, CCSD, CCSD\_T, BCCD, BCCD\_T, EOM\_CCSD, ZAPTN. \item[REFERENCE = string]\mbox{}\\ This specifies the type of SCF calculation one wants to do. It can be one of RHF (for a closed shell singlet), ROHF (for a restricted open shell calculation), UHF (for an unrestricted open shell calculation), or TWOCON (for a two configuration singlet). The default is RHF. \item[MULTP = integer]\mbox{}\\ Specifies the multiplicity of the molecule, i.e., 2S+1. Default is 1 (singlet). \item[CHARGE = integer]\mbox{}\\ Specifies the charge of the molecule. Default is 0. \item[DERTYPE = string]\mbox{}\\ This specifies the order of the derivative that is to be obtained. The default is NONE (energy only). \item[DOCC = integer vector]\mbox{}\\ This gives the number of doubly occupied orbitals in each irreducible representation. There is no default. If this is not given, \PSIcscf\ will attempt to guess at the occupations. \item[SOCC = integer vector]\mbox{} \\ This gives the number of singly occupied orbitals in each irreducible representation. There is no default. If this is not given, \PSIcscf\ will attempt to guess at the occupations. \item[FREEZE\_CORE = string]\mbox{} \\ \PSIthree\ can automatically freeze core orbitals. Core orbitals are defined as follows: \begin{verbatim} H-Be no core B-Ne 1s Na-Ar small: 1s2s large: 1s2s2p \end{verbatim} YES or TRUE will freeze the core orbitals, SMALL or LARGE are for elements Na-Ar. The default is NO or FALSE. Always check to make sure that the occupations are correct! \end{description} \subsection{Geometry Specification} \label{geom-spec} The molecular geometry may be specified using either Cartesian a Z-matrix coordinates. Cartesian coordinates are specified via the keyword \keyword{geometry}: \begin{verbatim} geometry = ( atomname1 x1 y1 z1 atomname2 x2 y2 z2 atomname3 x3 y3 z3 ... atomnameN xN yN zN ) \end{verbatim} where \keyword{atomname$i$} can take the following values: \begin{itemize} \item The element symbol: H, He, Li, Be, B, etc. \item The full element name: hydrogen, helium, lithium, etc. \item As a {\em ghost} atom with the symbol, G, or name, ghost. A ghost atom has a formal charge 0.0, and can be useful to specify the location of the off-nucleus basis functions. \item As a {\em dummy} atom with the symbol, X. Dummy atoms can be useful only to specify Z-matrix coordinates of proper symmetry or which contain linear fragments. \end{itemize} Hence the following two examples are equivalent to one another: \begin{verbatim} geometry = ( H 0.0 0.0 0.0 f 1.0 0.0 0.0 Li 3.0 0.0 0.0 BE 6.0 0.0 0.0 ) \end{verbatim} \begin{verbatim} geometry = ( hydrogen 0.0 0.0 0.0 FLUORINE 1.0 0.0 0.0 Lithium 3.0 0.0 0.0 beryllium 6.0 0.0 0.0 ) \end{verbatim} It is also possible to include an inner set of parentheses around each line containing {\tt atomname1 x1 y1 z1}. The keyword \keyword{units} specifies the units for the coordinates: \begin{itemize} \item \keyword{units = angstrom} -- angstroms (\AA), default; \item \keyword{units = bohr} -- atomic units (Bohr); \end{itemize} \noindent Z-matrix coordinates are specified using the keyword \keyword{zmat}: \begin{verbatim} zmat = ( atomname1 atomname2 ref21 bond_dist2 atomname3 ref31 bond_dist3 ref32 bond_angle3 atomname4 ref41 bond_dist4 ref42 bond_angle4 ref43 tors_angle4 atomname5 ref51 bond_dist5 ref52 bond_angle5 ref53 tors_angle5 ... atomnameN refN1 bond_distN refN2 bond_angleN refN3 tors_angleN ) \end{verbatim} where \begin{itemize} \item \keyword{bond\_dist$i$} is the distance (in units specified by keyword \keyword{units}) from nucleus number $i$ to nucleus number \keyword{ref$i$1}. The units \item \keyword{bond\_angle$i$} is the angle formed by nuclei $i$, \keyword{ref$i$1}, and \keyword{ref$i$2}; \item \keyword{tors\_angle$i$} is the torsion angle formed by nuclei $i$, \keyword{ref$i$1}, \keyword{ref$i$2}, and \keyword{ref$i$3}; \end{itemize} %% %% I'm commenting this part out, since the redundant internal coordinate %% structure implemented by RAK in 08/03 takes care of many dummy-atom %% problems. If user's really want z-matrix coords, we may have to deal %% with this again. %% -TDC, 08/31/03 %Some care has to be taken when constructing a Z-matrix for a molecule %which contains linear fragments. For example, an appropriate Z-matrix %for a linear conformation of HNCO must include dummy atoms: The first %three atoms (HNC) can be specified as is, but the fourth atom (O) %poses a problem -- the torsional angle cannot be defined with respect %to the linear HNC fragment. The solution is to add 2 dummy atoms to %the definition: %\begin{verbatim} % zmat = ( % h % n 1 1.012 % x 2 1.000 1 90.0 % c 2 1.234 3 90.0 1 180.0 % x 4 1.000 2 90.0 3 180.0 % o 4 1.114 5 90.0 2 180.0 % ) %\end{verbatim} %Alternatively, one could use, for example, only a single dummy atom above the %nitrogen and specify ``bond lengths'' relative to the latter. \subsection{Molecular Symmetry} \label{symm-spec} \PSIthree\ can determine automatically the largest Abelian point group for a valid framework of centers (including ghost atoms, but dummy atoms are ignored). It will then use the symmetry properties of the system in computing the energy, forces, and other properties. However, in certain instances it is desirable to use less than the full symmetry of the molecule. The keyword \keyword{subgroup} is used to specify a subgroup of the full molecular point group. The allowed values are \keyword{c2v}, \keyword{c2h}, \keyword{d2}, \keyword{c2}, \keyword{cs}, \keyword{ci}, and \keyword{c1}. For certain combinations of a group and its subgroup there is no unique way to determine which subgroup is implied. For example, $D_{\rm 2h}$ has 3 non-equivalent $C_{\rm 2v}$ subgroups, e.g. $C_{\rm 2v}(X)$ consists of symmetry operations $\hat{E}$, $\hat{C}_2(x)$, $\hat{\sigma}_{xy}$, and $\hat{\sigma_{xz}}$. To specify such subgroups precisely one has to use the keyword \keyword{unique\_axis}. For example, the following input will specify the $C_{\rm 2v}(X)$ subgroup of $D_{\rm 2h}$ to be the computational point group: \begin{verbatim} psi: ( ... geometry = ( ... ) units = angstrom subgroup = c2v unique_axis = x ) \end{verbatim} \begin{table}[h] %\caption{Standard Cotton Ordering in \PSIthree} \begin{center} \begin{tabular}{ll} \hline \hline Point Group & Cotton Ordering of Irreps \\ \hline C$_1$ & A \\ C$_i$ & A$_g$ A$_u$ \\ C$_2$ & A B \\ C$_s$ & A' A'' \\ C$_{2h}$ & A$_g$ B$_g$ A$_u$ B$_u$ \\ C$_{2v}$ & A$_1$ A$_2$ B$_1$ B$_2$ \\ D$_2$ & A B$_1$ B$_2$ B$_3$ \\ D$_{2h}$ & A$_g$ B$_{1g}$ B$_{2g}$ B$_{3g}$ A$_u$ B$_{1u}$ B$_{2u}$ B$_{3u}$ \\ \hline \hline \end{tabular} \end{center} \end{table} \subsection{Specifying Scratch Disk Usage in \PSIthree} \label{scratchfiles} Depending on the calculation, the \PSIthree\ package often requires substantial temporary disk storage for integrals, wave function ampltiudes, etc. By default, \PSIthree\ will write all such datafiles to {\tt /tmp} (except for the checkpoint file, which is written to {\tt ./} by default). However, to allow for various customized arrangements of scratch disks, the \PSIthree\ {\tt files:} block gives the user considerable control over how temporary files are organized, including file names, scratch directories, and the ability to ``stripe'' files over several disks (much like RAID0 systems). This section of keywords is normally placed within the {\tt psi:} section of input, but may be used for specific \PSIthree\ modules, just like other keywords. For example, if the user is working with \PSIthree\ on a computer system with only one scratch disk (mounted at, e.g., {\tt /scr}), one could identify the disk in the input file as follows: \begin{verbatim} psi: ( ... files: ( default: ( nvolume = 1 volume1 = "/scr/" ) ) ) \end{verbatim} The {\tt nvolume} keyword indicates the number of scratch directories/disks to be used to stripe files, and each of these is specified by a corresponding {\tt volumen} keyword. (NB: the trailing slash ``/'' is essential in the directoy name.) Thus, in the above example, all temporary storage files generated by the various \PSIthree\ modules would automatically be placed in the {\tt /scr} directory. By default, the scratch files are given the prefix ``{\tt psi}'', and named ``{\tt psi.nnn}'', where {\tt nnn} is a number used by the \PSIthree\ modules. The user can select a different prefix by specifying it in the input file with the {\tt name} keyword: \begin{verbatim} psi: ( ... files: ( default: ( name = "H2O" nvolume = 1 volume1 = "/scr/" ) ) ) \end{verbatim} The {\tt name} keyword allows the user to store data associated with multiple calculations in the same scratch area. Alternatively, one may specify the filename prefix on the command-line of the {\tt psi3} driver program (or any \PSIthree\ module) with the {\tt -p} argument: \begin{verbatim} psi3 -p H2O \end{verbatim} If the user has multiple scratch areas available, \PSIthree\ files may be automatically split (evenly) across them: \begin{verbatim} psi: ( ... files: ( default: ( nvolume = 3 volume1 = "/scr1/" volume2 = "/scr2/" volume3 = "/scr3/" ) ) ) \end{verbatim} In this case, each \PSIthree\ datafile will be written in chunks (65 kB each) to three separate files, e.g., {\tt /scr1/psi.72}, {\tt /scr2/psi.72}, and {\tt /scr3/psi.72}. The maximum number of volumes allowed for striping files is eight (8), though this may be easily extended in the \PSIthree\ I/O code, if necessary. The format of the {\tt files} section of input also allows the user to place selected files in alternative directories, such as the current working directory. This feature is especially important if some of the data need to be retained between calculations. For example, the following {\tt files:} section will put {\tt file32} (the \PSIthree\ checkpoint file) into the working directory, but all scratch files into the temporary areas: \begin{verbatim} psi: ( ... files: ( default: ( nvolume = 3 volume1 = "/scr1/" volume2 = "/scr2/" volume3 = "/scr3/" ) file32: ( nvolume = 1 volume1 = "./" ) ) ) \end{verbatim} \subsection{The {\tt .psirc} File} \label{psirc} Users of \PSIthree\ often find that they wish to use certain keywords or input sections in every calculation they run, especially those keywords associated with the {\tt files:} section. The {\tt .psirc} file, which is kept in the user's {\tt \$HOME} directory, helps to avoid repetition of keywords whose defaults are essentially user- or system-specific. A typical {\tt .psirc} file would look like: \begin{verbatim} psi: ( files: ( default: ( nvolume=3 volume1 = "/tmp1/mylogin/" volume2 = "/tmp2/mylogin/" volume3 = "/tmp3/mylogin/" ) file32: (nvolume=1 volume1 = "./") ) ) \end{verbatim} \subsection{Specifying Basis Sets} \label{basis-spec} \PSIthree\ uses basis sets comprised of Cartesian or spherical harmonic Gaussian functions. A basis set is identified by a string, enclosed in double quotes. Currently, there exist three ways to specify which basis sets to use for which atoms: \begin{itemize} \item \keyword{basis = string} -- all atoms use basis set type. \item \keyword{basis = (string1 string2 string3 ... stringN)} -- \keyword{string {\em i}} specifies the basis set for atom {\em i}. Thus, the number of strings in the \keyword{basis} vector has to be the same as the number of atoms (including ghost atoms but excluding dummy atoms). Another restriction is that symmetry equivalent atoms should have same basis sets, otherwise \PSIinput\ will use the string provided for the so-called unique atom out of the set of symmetry equivalent ones. \item \begin{verbatim} basis = ( (element1 string1) (element2 string2) ... (elementN stringN) ) \end{verbatim} \keyword{string {\em i}} specifies the basis set for chemical element \keyword{element {\em i}}. \end{itemize} \subsubsection{Default Basis Sets} \PSIthree\ default basis sets are located in \pbasisdat\ which may be found by default in {\tt \$psipath/share}. Tables \ref{table:poplebasis}, \ref{table:dunningbasis}, \ref{table:wachtersbasis}, and \ref{table:ccbasis} list basis sets pre-defined in \pbasisdat. The predefined basis sets use either spherical harmonics or Cartesian Gaussians, which is determined by the authors of the basis. Currently \PSIthree\ cannot handle basis sets that consist of a mix of Cartesian and spherical harmonics Gaussians. Therefore there may be combinations of basis sets that are forbidden, e.g. {\tt cc-pVTZ} and {\tt 6-31G**}. In such case one can override the predetermined choice of the type of the Gaussians by specifying the \keyword{puream} keyword. It takes two values, {\tt true} or {\tt false}, for spherical harmonics and Cartesian Gaussians, respectively. \begin{table}[p] \caption{Pople-type basis sets available in \PSIthree} \label{table:poplebasis} \begin{center} \begin{tabular}{|l|l|l|} \hline \hline Basis Set &Atoms &Aliases\\ \hline STO-3G & H-Ar &\\ 3-21G & H-Ar &\\ 6-31G & H-Ar, K, Ca, Cu &\\ 6-31G* & H-Ar, K, Ca, Cu &6-31G(d)\\ 6-31+G* & H-Ar &6-31+G(d)\\ 6-31G** & H-Ar, K, Ca, Cu &6-31G(d,p)\\ 6-311G & H-Ar &\\ 6-311G* & H-Ar &6-311G(d)\\ 6-311+G* & H-Ne &6-311+G(d)\\ 6-311G** & H-Ar &6-311G(d,p)\\ 6-311G(2df,2pd) & H-Ne &\\ 6-311++G** & H, B-Ar &6-311++G(d,p)\\ 6-311G(2d,2p) & H-Ar &\\ 6-311++G(2d,2p) & H-Ar &\\ 6-311++G(3df,3pd) & H-Ar &\\ \hline \hline \end{tabular} \end{center} \end{table} \begin{table}[tbp] \caption{Huzinaga-Dunning basis sets available in \PSIthree} \label{table:dunningbasis} \begin{center} \begin{tabular}{|l|l|} \hline \hline Basis Set &Atoms \\ \hline (4S/2S) & H \\ (9S5P/4S2P) & B-F \\ (11S7P/6S4P) & Al-Cl \\ DZ & H, Li, B-F, Al-Cl \\ DZP & H, Li, Be, B-F, Na, Al-Cl \\ DZ-DIF & H, B-F, Al-Cl \\ DZP-DIF & H, B-F, Al-Cl \\ TZ2P & H, B-F, Al-Cl \\ TZ2PD & H \\ TZ2PF & H, B-F, Al-Cl \\ TZ-DIF & H, B-F, Al-Cl \\ TZ2P-DIF & H, B-F, Al-Cl \\ TZ2PD-DIF & H \\ TZ2PF-DIF & H, B-F, Al-Cl \\ \hline \hline \end{tabular} \end{center} \end{table} \begin{table}[tbp] \caption{Wachters basis sets available in \PSIthree} \label{table:wachtersbasis} \begin{center} \begin{tabular}{|l|l|} \hline \hline Basis Set &Atoms \\ \hline WACHTERS & K, Sc-Cu \\ WACHTERS-F & Sc-Cu \\ \hline \hline \end{tabular} \end{center} \end{table} \begin{table}[tbp] \caption{Correlation-consistent basis sets available in \PSIthree} \label{table:ccbasis} \begin{center} \begin{tabular}{|l|l|l|} \hline \hline Basis Set &Atoms &Aliases\\ \textbf{ (N = D,T,Q,5,6)} & & \\ \hline cc-pVNZ & H-Ar &CC-PVNZ\\ cc-pV(N+D)Z & Al-Ar &CC-PV(N+D)Z\\ cc-pCVNZ & B-Ne &CC-PCVNZ\\ aug-cc-pVNZ & H-He, B-Ne, Al-Ar &AUG-CC-PVNZ\\ aug-cc-pV(N+D)Z & Al-Ar &AUG-CC-PCV(N+d)Z\\ aug-cc-pCVNZ & B-F (N${<}$6) &AUG-CC-PCVNZ\\ d-aug-cc-pVNZ & H &\\ pV7Z\footnote{testa} & H, C, N, O, F, S &PV7Z\\ cc-pV7Z\footnote{testb} & H, C, N, O, F, S &CC-PV7Z\\ aug-pV7Z\footnote{testc} & H, C, N, O, F, S &AUG-PV7Z\\ aug-cc-pV7Z\footnote{testd} & H, N, O, F &AUG-CC-PV7Z\\ \hline \hline \end{tabular} \end{center} \end{table} \subsubsection{Custom Basis Sets} \label{custom-basis} If the basis set you desire is not already defined in \PSIthree, a custom set may be used by specifying its exponents and contraction coefficients (either in the input file or another file named {\tt basis.dat}.) A contracted Cartesian Gaussian-type orbital \begin{equation} \phi_{\rm CGTO} = x^ly^mz^n\sum_i^N C_i \exp(-\alpha_i[x^2+y^2+z^2]) \end{equation} where \begin{equation} L = l+m+n \end{equation} is written as \begin{verbatim} basis: ( ATOM_NAME: "BASIS_SET_LABEL" = ( (L (C1 alpha1) (C2 alpha2) (C3 alpha3) ... (CN alpha4)) ) ) \end{verbatim} One must further specify whether Cartesian or spherical harmonics Gaussians are to be used. One can specify that in two ways: \begin{itemize} \item It can be done on a basis by basis case, such as \begin{verbatim} basis: ( "BASIS_SET_LABEL1":puream = true "BASIS_SET_LABEL2":puream = false "BASIS_SET_LABEL3":puream = true .... ) \end{verbatim} By default, if \keyword{puream} is not given for a basis, then Cartesian Gaussians will be used. \item The choice between Cartesian or spherical harmonics Gaussian can be made globally by specifying \keyword{puream} keyword in the standard input section, e.g. \begin{verbatim} psi: ( ... puream = true ... ) \end{verbatim} \end{itemize} Note that currently \PSIthree\ cannot handle basis sets that consist of a mix of Cartesian and spherical harmonics Gaussians. Note that the basis set must be given in a separate {\tt basis:} section of input, outside all other sections (including {\tt psi:}). For example, the \PSIthree\ DZP basis set for carbon could be specified as: \begin{verbatim} basis: ( carbon: "DZP" = ( (S ( 4232.6100 0.002029) ( 634.8820 0.015535) ( 146.0970 0.075411) ( 42.4974 0.257121) ( 14.1892 0.596555) ( 1.9666 0.242517)) (S ( 5.1477 1.0)) (S ( 0.4962 1.0)) (S ( 0.1533 1.0)) (P ( 18.1557 0.018534) ( 3.9864 0.115442) ( 1.1429 0.386206) ( 0.3594 0.640089)) (P ( 0.1146 1.0)) (D ( 0.75 1.0)) ) ) \end{verbatim} Here are a couple of additional points that may be useful when specifying customized basis sets: \begin{itemize} \item Normally the {\tt basis.dat} file is placed in the same directory as the main input file, but it may also be placed in a global location specified by the keyword {\tt basisfile}: \begin{verbatim} basisfile = "/home/users/tool/chem/h2o/mybasis.in" \end{verbatim} \item To scale a basis set, a scale factor may be added as the last item in the specification of each contracted Gaussian function. For example, to scale the S functions in a 6-31G** basis for hydrogen, one would use the following \begin{verbatim} hydrogen: "6-31G**" = ( (S ( 18.73113696 0.03349460) ( 2.82539437 0.23472695) ( 0.64012169 0.81375733) 1.2 ) (S ( 0.16127776 1.00000000) 1.2 ) (P ( 1.10000000 1.00000000)) ) \end{verbatim} In this example, both contracted S functions have their exponents scaled by a factor of (1.2)$^2$ = 1.44. The output file should show the exponents after scaling. \end{itemize} \subsubsection{Automated Conversion of Basis Sets} The \PSIthree\ package is distributed with a Perl-based utility, named {\tt g94\_2\_PSI3}, which will convert basis sets from the Gaussian ('94 or later) format to \PSIthree\ format automatically. This utility is especially useful for basis sets downloaded from the EMSL database at \htmladdnormallink{{\tt http://www.emsl.pnl.gov/forms/basisform.html}}{http://www.emsl.pnl.gov/forms/basisform.html}. To use this utility, save the desired basis set to a file (e.g., {\tt g94\_basis.dat}) in the Gaussian format. Then execute: \begin{verbatim} g94_2_PSI3 < g94_basis.dat > basis.dat \end{verbatim} You may either incorporate the results from the {\tt basis.dat} file into your input file as described above, or place the results into a global {\tt basis.dat} file. Be sure to surround the basis-set definition with the {\tt basis:()} keyword (as shown in the above examples) or input parsing errors will result. \subsection{Specification of Ghost Atoms} To specify ghost atoms, use atom symbol \keyword{G} in \keyword{zmat} or \keyword{geometry} keywords: \begin{verbatim} zmat = ( he g 1 r ) basis = "aug-cc-pVTZ" \end{verbatim} Basis sets for ghost atoms must be defined explicitly using \keyword{GHOST} as the element name: \begin{verbatim} basis:GHOST:"aug-cc-pVTZ": ( .... ) \end{verbatim} This method leads to replication of existing basis set definitions. It is usually more convenient to specify ghost atoms as regular atoms with zero charge: \begin{verbatim} zmat = ( he he 1 r ) charges = (2.0 0.0) basis = "aug-cc-pVTZ" \end{verbatim} In this example, the second helium atom is a ``ghost'' atom which carries helium's aug-cc-pVTZ basis set. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/introduction.tex�������������������������������������������������������������������0000644�0001015�0000765�00000012656�11144156011�015667� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Introduction} \label{introduction} \subsection{Overview} This manual explains how to use the \PSIthree\ suite of {\em ab initio} quantum chemical programs. In this section, we provide an overview of some of the features of \PSIthree\ along with the prerequisite steps for running calculations. Section \ref{tutorial} provides a brief tutorial to help new users get started. Section \ref{input} offers further details into the structure of \PSIthree\ input files and a discussion of some of the most important options. Later sections deal with the different types of computations which can be done using \PSIthree\ (e.g., Hartree-Fock, MP2, coupled-cluster) and general procedures such as geometry optimization and vibrational frequency analysis. The appendix will eventually include a description of the input keywords and command-line options for each module, as well as numerous examples of \PSIthree\ input and basis set files. For the latest \PSIthree\ documentation, check \htmladdnormallink{{\tt www.psicode.org}} {http://www.psicode.org/}. The \PSIthree\ package was developed to perform high-accuracy quantum mechanical computations on challenging chemical species and to provide an infrastructure for the development of new theoretical techniques. Hence, it has a very flexible input scheme which allows non-standard computations, and it is easily adapted to enable new capabilities. The following citation should be used in any publication utilizing the \PSIthree\ program package: \begin{quotation} \noindent \input{reference} \end{quotation} \subsection{Obtaining and Installing \PSIthree} \label{installation} The latest version of the \PSIthree\ program package may be obtained at \htmladdnormallink{{\tt www.psicode.org}}{http://www.psicode.org}. The source code is available as a gzipped tar archive (named, for example, {\tt psi3.X.tar.gz}), and binaries may be available for certain architectures. For detailed installation and testing instructions, please refer to the the \PSIthree\ Installation Manual, available as part of the package or at the \PSIthree\ website above. \subsection{Supported Architectures} The majority of \PSIthree\ was developed on IBM RS/6000/AIX and x86/GNU Linux workstations. The complete list of tested architectures to which \PSIthree\ has been ported is shown in Table \ref{table:ports}. \begin{table}[h] \caption{Platforms on which \PSIthree\ has been installed successfully.} \label{table:ports} \begin{center} \begin{tabular}{ll} \hline\hline Architecture & Notes \\ \hline Compaq Alpha Tru64 UNIX & 64-bit mode \\ IBM AIX 4.3.3, 5.x on PowerPC & 64-bit mode \\ Linux on Intel/AMD x86 and x86-64 & 32 and 64-bit\\ Apple OS X (Darwin) on PowerPC and Intel & \\ SGI IRIX64 ($>$6.5.15) & 64-bit \\ \hline\hline \end{tabular} \end{center} \end{table} If you don't find your system in the Table, there's a good chance that you will be able to install \PSIthree\ on your system if you have the prerequisite tools and math and utility libraries described in the installation manual. \subsection{Capabilities} \PSIthree\ can perform {\em ab initio} computations employing basis sets of up to 32768 contracted Gaussian-type functions of virtually arbitrary orbital quantum number. \PSIthree\ can recognize and exploit the largest Abelian subgroup of the point group describing the full symmetry of the molecule. Table \ref{table:methods} displays the range of theoretical methods available in \PSIthree . \begin{table} \caption{Summary of theoretical methods available in \PSIthree.} \label{table:methods} \parsep 10pt \begin{center} \begin{tabular}{lccc} \hline\hline Method & Energy & Gradient & Hessian \\ \hline RHF SCF & Y & Y & Y \\ ROHF SCF & Y & Y & N \\ UHF SCF & Y & N & N \\ HF DBOC & Y & N & N \\ CIS/RPA/TDHF & Y & N & N \\ TCSCF & Y & Y & N \\ CASSCF & Y & Y & N \\ RASSCF & Y & Y & N \\ RAS-CI & Y & N & N \\ RAS-CI DBOC & Y & N & N \\ RHF MP2 & Y & Y & N \\ UHF/ROHF MP2 & Y & N & N \\ RHF MP2-R12 & Y & N & N \\ RHF/UHF/ROHF CCSD & Y & Y & N \\ RHF/UHF/ROHF CCSD(T) & Y & Y$^*$ & N \\ RHF/UHF/ROHF EOM-CCSD & Y & Y & N \\ \hline\hline \end{tabular} \end{center} \footnotesize{$^*$ CCSD(T) gradients implemented only via an experimental code. A more efficient and robust implementation will appear in the next release.} \end{table} Geometry optimization (currently restricted to true minima on the potential energy surface) can be performed using either analytic gradients or energy points. Likewise, vibrational frequencies can be computed using analytic second derivatives, by finite differences of analytic gradients, or finite differences of energies. \PSIthree\ can also compute an extensive list of one-electron properties. \subsection{Technical Support} The \PSIthree\ package is distributed for free and without any guarantee of reliability, accuracy, suitability for any particular purpose. No obligation to provide technical support is expressed or implied. As time allows, the developers will attempt to answer inquiries directed to \htmladdnormallink{{\tt crawdad@vt.edu}}{mailto:crawdad@vt.edu}. For bug reports, specific and detailed information, with example inputs, would be appreciated. Questions or comments regarding this user's manual may be sent to \htmladdnormallink{{\tt sherrill@gatech.edu}}{mailto:sherrill@gatech.edu}. ����������������������������������������������������������������������������������psi3/doc/userman/Makefile.in������������������������������������������������������������������������0000644�0001015�0000765�00000000574�10660616672�014505� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ srcdir = @srcdir@ MAN = userman include ../MakeVars TEX = userman.tex SUBTEX = \ additional-docs.tex appendix.tex cc.tex detcas.tex detci.tex input.tex \ introduction.tex methods.tex modules.tex mp2.tex oeprop.tex opt.tex \ psi-driver.tex scf.tex tutorial.tex bibliography.bib DVI = $(TEX:%.tex=%.dvi) PS = $(DVI:%.dvi=%.ps) HTML = $(TEX:%.tex=%.html) include ../MakeRules ������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/methods.tex������������������������������������������������������������������������0000644�0001015�0000765�00000000631�10740513716�014611� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Theoretical Methods Available in \PSIthree} Several electronic structure methods are available in the \PSIthree\ package, from Hartree-Fock molecular orbital theory to coupled-cluster theory to full configuration interaction. This section introduces the methods available and some of their most common input parameters. Less commonly used keywords are described in the man pages for each module. �������������������������������������������������������������������������������������������������������psi3/doc/userman/modules.tex������������������������������������������������������������������������0000644�0001015�0000765�00000005370�07724471660�014634� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Overview of modules of \PSIthree} Below is a very brief list of some of the modules available in the \PSIthree\ program. For more information, consult the individual manual pages. \subsubsection{input} This program prepares the checkpoint file (\chkptfile). Errors will result if the \PSIpsi\ program is run before \PSIinput. This program reads the \keyword{default}, \keyword{psi}, \keyword{input}, and (if given) \keyword{basis} sections of the input file and places molecule, geometry, and basis information into the checkpoint file. The molecule may be reoriented to a standard reference frame, and the molecular point-group symmetry is identified. It is possible to tell \PSIinput\ to re-use orbitals from a previous calculation ({\tt input --chkptmos}), although presently this only works if the point group has not changed. \subsubsection{cints} This program computes one- and two-electron integrals and derivative integrals. It is multithreaded and has some advanced capabilities related to integrals-direct computations. \subsubsection{cscf} This program carries out the Hartree-Fock procedure. It can handle RHF, ROHF, UHF, and TCSCF. It can also simply re-orthogonalize previously existing MO's. \subsubsection{transqt} This module transforms one- and two-electron integrals from the symmetry-adapted atomic orbital (SO) basis to the molecular orbital (MO) basis for use in correlated computations by program such as \PSIdetci\ or \PSIccenergy. It can also back-transform one- and two-particle density matrices to the AO basis for contraction with the derivative integrals to obtain energy gradients. \subsubsection{ccsort} This module sorts the one- and two-electron integrals for use by the \PSIthree\ coupled-cluster programs. \subsubsection{ccenergy} This module computes the CCSD energy. \subsubsection{cctriples} This module computes the (T) correction to CCSD to give the CCSD(T) energy. \subsubsection{detci} This module performs many different types of CI computation, including CI's truncated according to substitution level (e.g., CISD, CISDT, CISDTQ, etc), full CI, and any CI which can be formulated as a restricted active space (RAS) CI, including second-order configuration interaction (SOCI) and other types of multi-reference CI's. It can compute one- and two-particle density matrices and can obtain CI natural orbitals. \subsubsection{detcas} This program works together with the \PSIdetci\ program to do CASSCF calculations in a two-step procedure. It obtains the orbital gradient and rotates the orbitals to optimize them. \subsubsection{detcasman} This is a driver program that controls \PSIdetci\ and \PSIdetcas\ to perform CASSCF computations. \subsubsection{clag} This forms the CI lagrangian, which is needed for CASSCF and CI gradients. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/mp2.tex����������������������������������������������������������������������������0000644�0001015�0000765�00000016153�10571402044�013643� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Second-order M\o ller-Plesset Theory: MP2 and MP2-R12 methods} \label{mp2} Second-order M\o ller-Plesset theory is one of the most basic wave function approaches which includes electron correlation directly. Due to its simplicity, the MP2 method is often the best level one can afford for a larger molecular system. At the other end of the spectrum, the MP2-R12 method of Kutzelnigg, Klopper, and co-workers is a promising approach to computing MP2 energies in the complete basis set limit for smaller systems. \PSIthree\ is one of the very few publicly available programs to feature a robust implementation of the MP2-R12 method. \PSIthree\ is capable of computing closed-shell MP2 and MP2-R12/A energies using integral-direct techniques and a multithreaded algorithm, which lends itself perfectly for execution on symmetric multiprocessor (SMP) machines. \PSIthree\ is also capable of computing RHF, UHF, and ROHF (using semicanonical orbitals) MP2 energies and one-particle density matrices, and RHF MP2 analytic gradients. Occupied and virtual orbitals can be frozen during the energy calculation, but not for the calculation of the one-particle density matrix or the analytic gradient. Table \ref{table:mp2summary} summarizes these capabilities. \begin{table}[h] \begin{center} \begin{tabular}{cccccc} \hline \hline Reference & Method & Energy (conv) & Energy (integral-direct) & Gradient \\ \hline RHF & MP2 & Y & Y & Y \\ UHF & MP2 & Y & N & N \\ ROHF & MP2 & Y & N & N \\ RHF & MP2-R12/A & N & Y & N \\ \hline \hline \end{tabular} \end{center} \caption{Current MP2 and MP2-R12 capabilities of \PSIthree.} \label{table:mp2summary} \end{table} \subsubsection{Basic Keywords} To compute a ground-state MP2 or MP2-R12 energy at a fixed geometry, the following keywords are common: \begin{description} \item[WFN = string]\mbox{}\\ Acceptable values are {\tt mp2} for MP2, {\tt mp2r12} [for MP2-R12/A] There is no default. \item[REFERENCE = string]\mbox{}\\ The only acceptable value are {\tt rhf, uhf, and rohf}. There is no default. \item[JOBTYPE = string]\mbox{}\\ Acceptable values are {\tt sp} and {\tt opt}. There is no default. \item[MEMORY = (real MB)]\mbox{}\\ Specified the amount of core memory to be used, in MB. Defaults to 256. Other units (e.g., KB or GB) are also allowed. \item[DIRECT = boolean]\mbox{}\\ Specifies whether to use the conventional ({\tt false}) or integral-direct ({\tt true}) algorithm. Default is {\tt false}. \item[NUM\_THREADS = integer]\mbox{}\\ Specified the number of threads to be used in the integral-direct computation (only valid if {\tt DIRECT} is set to {\tt true}). Default is 1. \item[FREEZE\_CORE = boolean]\mbox{}\\ Specifies whether core orbitals (which are determined automatically) are to be excluded from the correlated calculations. Default is {\tt false}. \item[PRINT = integer]\mbox{}\\ The desired print level for detailed output. Setting this to 2 is a good idea for larger calculations so that the progress of the calculation may be easily followed. Defaults to 0. \item[OPDM = boolean]\mbox{}\\ If {\tt true}, calculate the one-particle density matrix. The default is false. \item[OPDM\_WRITE = boolean]\mbox{}\\ If {\tt true}, write the one-particle density matrix to disk. \item[OPDM\_PRINT = boolean]\mbox{}\\ If {\tt true}, print the one-particle density matrix to the output file. \end{description} \subsubsection{Using the MP2-R12 method} Although this manual is not a how-to on running quantum chemistry applications, the MP2-R12 method is a rather non-standard tool, hence a few comments on its use are appropriate. \begin{enumerate} \item The version of the MP2-R12 method implemented in \PSIthree\ is a so-called single-basis MP2-R12 method in standard approximation A. This means that a basis set rather complete in Hartree-Fock (or one-particle) sense is absolutely mandatory for meaningful computations with the MP2-R12 method. The user is strongly urged to read literature on linear R12 methods before using \PSIthree\ to compute MP2-R12 energies. \item More robust, two-basis versions of the MP2-R12 method, also known as the auxiliary basis MP2-R12 method, have been implemented in a publicly available Massively Parallel Quantum Chemistry (MPQC) package (see \url{http://aros.ca.sandia.gov/~cljanss/mpqc/}). The two-basis version of the MP2-R12 method is a theoretically more sound approach, and thus should be preferred to the single-basis method. In some situations, however, it may make sense to use the single-basis method. \end{enumerate} \subsubsection{Larger Calculations} Here are a few recommendations for carrying out extended integral-direct MP2 and MP2-R12 calculations with \PSIthree: \begin{enumerate} \item While the integral-direct MP2 algorithm doesn't need any significant disk storage, the integral-direct algorithm for the MP2-R12 energy stores the transformed integrals to disk, hence very large computations will require a lot of disk space. In general the storage requirement is $16 o^2N^2$ bytes, where $o$ is the number of occupied orbitals, and $N$ is the size of the basis. \item If there is not enough memory to perform the computation in one pass, the program will do multiple passes through the entire set of integrals, hence your computation will run that many times longer. In such case, find the machine with the most memory and processors available. \item On SMP machines, set the {\tt NUM\_THREADS} to the number of processors available for the job, or, if all processors are allocated for your job, set {\tt NUM\_THREADS} to {\em twice} the number of processors you have. Modern operating systems schedulers are usually very efficient at handling multithreaded programs, so the overhead of thread context switching is not significant, but using more threads may lead to better load balancing, and lower execution times. For example, on a 32-processor IBM eServer p690 we found that the optimal number of threads was 128. For the optimal performance, do a few runs with different number of threads and see which number works best. Avoid excessively large number of threads, as this descreases the net amount of memory available to the computation and thus may increase the number of passes. \item Set the {\tt MEMORY} keyword to the 90\% of the available physical memory, at most. There is a small amount of overhead associated with the integral-direct algorithms that is not accounted for by the internal memory handling routines. \item The implementation of the integral-direct MP2-R12 (and MP2) method in \PSIthree\ can run efficiently on SMP, or shared-memory, machines, by utilizing multiple processors via multithreaded approach. However, it cannot utilize distributed memory machines, such as commodity (PC) clusters and massively parallel machines, to their full potential, since one computation can only take advantage of one node of such machine at a time. In such environments, the aformentioned MPQC implementation of the MP2-R12 method should be preferred (see \url{http://aros.ca.sandia.gov/~cljanss/mpqc/}). \end{enumerate} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/oeprop.tex�������������������������������������������������������������������������0000644�0001015�0000765�00000040607�10604540731�014455� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Evaluation of one-electron properties} \label{oeprop} \PSIthree\ is capable of computing a number of one-electron properties Table \ref{table:oepropsummary} summarizes these capabilities. This section describes details of how to have \PSIthree\ compute desired one-electron properties \begin{table}[h] \begin{center} \begin{tabular}{lcl} \hline \hline \multicolumn{1}{c}{Feature} & On by default? & \multicolumn{1}{c}{Notes} \\ \hline Electric dipole moment & Y & \\ Electric quadrupole moment & N & Set \keyword{MPMAX} to 2 or 3.\\ Electric octupole moment & N & Set \keyword{MPMAX} to 3.\\ Electrostatic potential & Y & At the nuclei; on 2-D grid set {\tt GRID=2}. \\ Electric field & Y & At the nuclei. \\ Electric field gradient & Y & At the nuclei. \\ Hyperfine coupling constant & N & Set {\tt SPIN\_PROP=true}. \\ Relativistic (MVD) corrections & N & Set \keyword{MPMAX} to 2. \\ Electron density & Y & At the nuclei; on 2-D grid set {\tt GRID=2}; \\ & & on 3-D grid set {\tt GRID=6}. \\ Spin density & N & Set {\tt SPIN\_PROP=true}; at the nuclei; \\ & & on 3-D grid set {\tt GRID=6}. \\ Electron density gradient & N & on 2-D grid set {\tt GRID=3}. \\ Spin density gradient & N & on 2-D grid set {\tt GRID=3} and {\tt SPIN\_PROP=true}. \\ Electron density Laplacian & N & on 2-D grid set {\tt GRID=4}. \\ Spin density Laplacian & N & on 2-D grid set {\tt GRID=4} and {\tt SPIN\_PROP=true}. \\ Molecular Orbitals (MO) & N & on 3-D grid set {\tt GRID=5}. \\ Natural Orbitals (NO) & N & Set \keyword{WRTNOS} to true; written to \chkptfile. \\ MO/NO spatial extents & N & Set \keyword{MPMAX} to 2 or 3; \\ & & MOs are used if {\tt WFN=SCF}, otherwise NOs. \\ \hline \hline \end{tabular} \end{center} \caption{Current one-electron property capabilities of \PSIthree.} \label{table:oepropsummary} \end{table} \subsection{Basic Keywords} To compute one-electron properties at a fixed geometry, the following keywords are common: \begin{description} \item[JOBTYPE = string]\mbox{}\\ This keyword should be set to {\tt oeprop} for \PSIthree\ to compute electron properties. There is no default. For CI wavefunctions, limited properties such as dipole and transition moments may be evaluated directly in {\tt detci} without having to specify {\tt JOBTYPE = oeprop}. \item[WFN = string]\mbox{}\\ Acceptable values are {\tt scf} for HF, {\tt mp2} for MP2, {\tt detci} for CI, {\tt detcas} for CASSCF, and {\tt ccsd} for CCSD. There is no default. \item[REFERENCE = string]\mbox{}\\ Acceptable value are {\tt rhf} and {\tt rohf}. There is no default. \item[FREEZE\_CORE = boolean]\mbox{}\\ Specifies whether core orbitals (which are determined automatically) are to be excluded from the correlated calculations. Default is {\tt false}. \item[PRINT = integer]\mbox{}\\ The desired print level for detailed output. Defaults to 1. \item[MPMAX = integer]\mbox{}\\ This integer specifies the highest-order electric multipole moment to be computed. Valid values are 1 (dipole), 2 (up to quadrupole), or 3 (up to octupole). Default is 1. \item[MP\_REF = integer]\mbox{}\\ This integer specifies the reference point for the evaluation of electric multipole moments. Valid values are 1 (center of mass), 2 (origin), 3 (center of electronic change) and 4 (center of the nuclear charge). For charge-neutral systems the choice of \keyword{MP\_REF} is irrelevant. Default is 1. \item[GRID = integer]\mbox{}\\ This integer specifies the type of one-electron property and the type of grid on which to evaluate it. The valid choices are \begin{itemize} \item {\tt 0} -- compute nothing \item {\tt 1} -- electrostatic potential on a 2-D grid \item {\tt 2} -- electron density on a 2-D grid (spin density, if {\tt SPIN\_PROP=true}) \item {\tt 3} -- projection of electron density gradient on a 2-D grid (spin density gradient, if {\tt SPIN\_PROP=true}) \item {\tt 4} -- Laplacian of electron density on a 2-D grid (Laplacian of spin density, if {\tt SPIN\_PROP=true}) \item {\tt 5} -- values of molecular orbitals on a 3-D grid \item {\tt 6} -- electron density on a 3-D grid (spin density if {\tt SPIN\_PROP=true}) \end{itemize} Default is {\tt 0}. \item[NIX = integer]\mbox{}\\ The number of grid points along the x direction. This parameter has be greater than 1. Default is 20. \item[NIY = integer]\mbox{}\\ The number of grid points along the y direction. This parameter has be greater than 1. Default is 20. \item[NIZ = integer]\mbox{}\\ The number of grid points along the z direction (if a 3-D grid is chosen). This parameter has be greater than 1. Default is 20. \item[GRID\_FORMAT = string]\mbox{}\\ This keyword specifies in which format to produce grid data. The only valid choice for 2-D grids is {\tt plotmtv} (format of plotting software program {\tt PlotMTV}). For 3-D grids, valid choices are {\tt gausscube} ({\tt Gaussian 94} cube format) and {\tt megapovplus} (format of 3D rendering software {\tt MegaPOV+}). The defaults are {\tt plotmtv} and {\tt gausscube} for 2-d and 3-d grids, respectively. \item[MO\_TO\_PLOT = vector]\mbox{}\\ Specifies indices of the molecular orbitals to be computed on the 3-d grid. Indices can be specified as: \begin{itemize} \item unsigned integer - index in Pitzer ordering (ordered accoring to irreps, not eigenvalues). Ranges from 1 to the number of MOs. \item signed integer - index with respect to Fermi level. +1 means LUMO, +2 means second lowest virtual orbital, -1 means HOMO, etc. \end{itemize} All indices have to be either unsigned or signed, you can't mix and match, or you will get unpredictable results. Default is to compute HOMO and LUMO. \item[SPIN\_PROP = boolean]\mbox{}\\ Whether to compute spin-dependent properties. Default is {\tt false}. \item[WRTNOS = boolean]\mbox{}\\ If set to {\tt true}, natural orbitals will be written to the checkpoint file. Default is {\tt false}. \end{description} \subsection{Evaluation of properties on rectalinear grids} \PSIthree\ can evaluate a number of one-electron properties on {\em rectalinear} 2-D and 3-D grids. In most cases, 3-D grids are utilized. In such cases you only need to specify the appropriate value for \keyword{GRID} and \PSIthree\ will automatically construct a rectalinear 3-D grid that covers the entire molecular system. However, there's no default way to construct a useful 2-D grid in general. Even in the 3-D case you may want to ``zoom in'' on a particular part of the molecule. Hence one needs to be able to specify general 2-D and 3-D grids. In the absence of graphical user interface, \PSIthree\ has a very flexible system for specifying arbitrary rectalinear grids. The following keywords may be used in construction of the grid: \begin{description} \item[GRID\_ORIGIN = real\_vector]\mbox{}\\ A vector of 3 real numbers, this keyword specifies the origin of the grid coordinate system. A rectangular grid box which envelops the entire molecule will be computed automatically if \keyword{GRID\_ORIGIN} is missing, however, there is no default for 2-D grids. \item[GRID\_UNIT\_X = real\_vector]\mbox{}\\ A vector of 3 real numbers, this keyword specifies the direction of the first (x) side of the grid. It doesn't have have to be of unit length. There is no default for 2-D grids. \item[GRID\_UNIT\_Y = real\_vector]\mbox{}\\ A vector of 3 real numbers, this keyword specifies the direction of the second (y) side. It doesn't have to be of unit length or even orthogonal to \keyword{GRID\_UNIT\_X}. There is no default for 2-D grids. \item[GRID\_UNIT\_XY0 = real\_vector]\mbox{}\\ A vector of 2 real numbers, this keyword specifies the coordinates of the lower left corner of a 2-D grid in the 2-D coordinate system defined by \keyword{GRID\_ORIGIN}, \keyword{GRID\_UNIT\_X}, and \keyword{GRID\_UNIT\_Y}. This keyword is only used to specify a 2-D grid. There is no default. \item[GRID\_UNIT\_XY1 = real\_vector]\mbox{}\\ A vector of 2 real numbers, this keyword specifies the coordinates of the upper right corner of a 2-D grid in the 2-D coordinate system defined by \keyword{GRID\_ORIGIN}, \keyword{GRID\_UNIT\_X}, and \keyword{GRID\_UNIT\_Y}. This keyword is only used to specify a 2-D grid. There is no default. \item[GRID\_UNIT\_XYZ0 = real\_vector]\mbox{}\\ A vector of 3 real numbers, this keyword specifies the coordinates of the far lower left corner of a 3-D grid in the 3-D coordinate system defined by \keyword{GRID\_ORIGIN}, \keyword{GRID\_UNIT\_X}, and \keyword{GRID\_UNIT\_Y}. This keyword is only used to specify a 3-D grid. There is no default. \item[GRID\_UNIT\_XYZ1 = real\_vector]\mbox{}\\ A vector of 3 real numbers, this keyword specifies the coordinates of the near upper right corner of a 3-D grid in the 3-D coordinate system defined by \keyword{GRID\_ORIGIN}, \keyword{GRID\_UNIT\_X}, and \keyword{GRID\_UNIT\_Y}. This keyword is only used to specify a 3-D grid. There is no default. \end{description} In addition, the following keywords are useful for evaluation of certain properties on 2-D grids: \begin{description} \item[GRID\_ZMIN = real]\mbox{}\\ This keyword specifies the lower limit on displayed z-values for contour plots of electron density and its Laplacian. Only useful when {\tt GRID=2} or {\tt GRID=4}. Default is 0.0 \item[GRID\_ZMAX = real]\mbox{}\\ This keyword specifies the upper limit on displayed z-values for contour plots of electron density and its Laplacian. Only useful when {\tt GRID=2} or {\tt GRID=4}. Default is 3.0 \item[EDGRAD\_LOGSCALE = integer]\mbox{}\\ This keyword controls the logarithmic scaling of the produced electron density gradient plot. Turns the scaling off if set to zero, otherwise the higher value - the stronger the gradient field will be scaled. Recommended value (default) is 5. This keyword is only useful when {\tt GRID=3}. \end{description} \subsection{Grid specification mini-tutorial} Let's look at how to set up input for spin density evaluation on a two-dimensional grid. The relevant input section of \PSIthree\ might look like this: \begin{verbatim} jobtype = oeprop grid = 2 spin_prop = true grid_origin = (0.0 -5.0 -5.0) grid_unit_x = (0.0 1.0 0.0) grid_unit_y = (0.0 0.0 1.0) grid_xy0 = (0.0 0.0) grid_xy1 = (10.0 10.0) nix = 30 niy = 30 \end{verbatim} \keyword{grid} specifies the type of a property and the type of a grid \PSIoeprop\ needs to compute. Since \keyword{spin\_prop}\ is set and {\tt grid=2}, the spin density will be evaluated on a grid. Grid specification is a little bit tricky but very flexible. \keyword{grid\_origin}\ specifies the origin of the rectangular coordinate system associated with the grid in the reference frame. \keyword{grid\_unit\_x}\ specifies a reference frame vector which designates the direction of the x-axis of the grid coordinate system. \keyword{grid\_unit\_y}\ is analogously a reference frame vector which, along with the \keyword{grid\_unit\_x}, completely specifies the grid coordinate system. \keyword{grid\_unit\_x}\ and \keyword{grid\_unit\_y}\ do not have to be normalized, neither they need to be orthogonal to either other - orthogonalization is done automatically to ensure that unit vectors of the grid coordinate system are normalized in the reference frame too. \keyword{grid\_xy0}\ is a vector in the grid coordinate system that specifies a vertex of the grid rectangle with the most negative coordinates. Similarly, \keyword{grid\_xy1}\ specifies a vertex of the the grid rectangle diagonally opposite to \keyword{grid\_xy0}. Finally, \keyword{nix}\ and \keyword{niy}\ specify the number of intervals into which the $x$ and $y$ sides of the grid rectangle are subdivided. To summarize, the above input specifies a rectangular (in fact, square) 30 by 30 grid of dimensions 10.0 by 10.0 lying in the $yz$ plane and centered at origin of molecular frame. Running \PSIthree\ on such input will create a file called \file{sdens.dat} (for file names refer to man page on \PSIoeprop), which can be fed directly to {\tt PlotMTV} to plot the 2-D data. Specification of a three-dimensional grid for plotting MOs ({\tt grid = 5}) or densities ({\tt grid = 6}) is just slightly more complicated. For example, let's look at producing data for plotting a HOMO and a LUMO. The indices of the MOs which needs to be plotted will be specified by keyword \keyword{mo\_to\_plot}. The reference frame is specified by keywords \keyword{grid\_origin}, \keyword{grid\_unit\_x}\ and \keyword{grid\_origin\_y}\ (the third axis of the grid coordinate system is specified by by the vector product of \keyword{grid\_unit\_x}\ and \keyword{grid\_unit\_y}). Since in this case we are dealing with the three-dimensional grid coordinate system, one needs to specify two diagonally opposite vertices of the grid box via \keyword{grid\_xyz0}\ and \keyword{grid\_xyz1}. The number of intervals along $z$ is specified via \keyword{niz}. The relevant section of input file may look like this: \begin{verbatim} jobtype = oeprop grid = 5 mo_to_plot = (-1 +1) grid_origin = (-5.0 -5.0 -5.0) grid_unit_x = (1.0 0.0 0.0) grid_unit_y = (0.0 1.0 0.0) grid_xyz0 = (0.0 0.0 0.0) grid_xyz1 = (10.0 10.0 10.0) nix = 30 niy = 30 niz = 30 \end{verbatim} Running \PSIthree\ on input like this will produce a {\tt Gaussian Cube} file called {\tt mo.cube}, which can be used to render images of HOMO and LUMO using an external visualization software. \subsection{Plotting grid data} 2-D grids should be plotted by an interactive visualization code {\tt PlotMTV}. {\tt PlotMTV} is a freeware code developed by Kenny Toh. It can be downloaded off many web sites in source or binary form. 3-D grids can be produced in two formats: {\tt megapovplus} and {\tt gausscube} (see \keyword{GRID\_FORMAT}). First is used to render high-quality images with a program {\tt MegaPov} (version 0.5). {\tt MegaPov} is an unofficial patch for a ray-tracing code {\tt POV-Ray}. Information on {\tt MegaPov} can be found at \htmladdnormallink{{http://nathan.kopp.com/patched.htm}}{http://nathan.kopp.com/patched.htm}. {\tt Gaussian Cube} files can be processed by a number of programs. We cannot recommend any particular program for that purpose here. \subsection{Visualizing Molecular Obitals with gOpenMol} The {\tt Gaussian Cube} files generated by oeprop can be converted and viewed with gOpenMol. gOpenMol offers good looking plots in a graphical user interface. Information on downloading gOpenMol and samples of gOpenMol output may be found at \url{http://www.csc.fi/gopenmol/}. Installation instructions are included with the gOpenMol download. Once installed, the first step to viewing molecular orbitals is to convert the \keyword{mo.cube} into a format that gOpenMol recognizes. Under the Run menu, select \keyword{gCube2plt/g94cub2pl (cube) $\dots$}, this will bring up a window with the heading \keyword{Run gCube2plt/g94cub2pl}. In the input file name field, select the \keyword{mo.cube} file you want to convert. Likewise, in the output file name field type the name of the output file you want. Click the Apply button to perform the conversion. This procedure will create a \keyword{.plt} and a \keyword{.crd} file. Once converted, click Dismiss to close the window. The {\tt Gaussian Cube} file is now converted and in a form that gOpenMol can recognize. In order to view the molecular orbital, the first step is to import the coordinate file (\keyword{.crd}). This is done under the File menu$\rightarrow$Import$\rightarrow$Coords$\dots$. Again, a window will pop up. In the Import file name field chose the \keyword{.crd} you just created from the conversion procedure. Click apply, then Dismiss to close the window. Now we have to import the \keyword{.plt} file to view the molecular orbital. Under the the Plot menu selct Contour$\dots$, this will bring up a window. In the File name field, either type the full path of the file name or use browse to select the \keyword{.plt} file you just created in the conversion, then click Import. In the Define contour levels we have to define the contour cutoffs for the positive and negative parts of the wave function seperately. I recommend trying 0.1 in the first box and -0.1 in the second. Click Apply to view the molecular orbital. You can change the colors of the positive and negative sections independently by clicking on the Colour button next to the respective cutoffs. Also, in the Details$\dots$ section, you can fine tune the properties of the molecular orbital, such as, the opacity, solid vs. mesh, smoothness, and cullface state. You can play around with various settings to get the surface to look exactly how you want it to. There is more information in the Help$\rightarrow$Tutorials menu on this subject as well as many other abilities of gOpenMol. �������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/old-running.tex��������������������������������������������������������������������0000644�0001015�0000765�00000067755�10660615716�015432� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Geometry Specification} Full molecular geometry has to be specified in form of Cartesian coordinates or a Z-matrix. Cartesian coordinates of atoms are specified via a keyword \keyword{geometry} which has to be a member of either \keyword{default} or \keyword{input} sections: \begin{verbatim} geometry = ( (atomname1 x1 y1 z1) (atomname2 x2 y2 z2) (atomname3 x3 y3 z3) .......... (atomnameN xN yN zN) ) \end{verbatim} where \keyword{atomname$i$} can take the following values: \begin{itemize} \item element symbol (H, He, Li, Be, B, etc.); \item full element name (hydrogen, helium, lithium, etc.); \item {\em ghost} atom symbol (G) or name (ghost). Ghost atom is an atom of formal charge 0.0, it can be useful to specify the location of the off-nucleus basis functions; \item {\em dummy} atom symbol (X). Dummy atoms can be useful only to specify Z-matrices of proper symmetry (not used in \PSIthree; see below) or which contain linear fragments. \end{itemize} Hence the following two examples are equivalent to one another: \begin{verbatim} geometry = ( (H 0.0 0.0 0.0) (f 1.0 0.0 0.0) (Li 3.0 0.0 0.0) (BE 6.0 0.0 0.0) ) \end{verbatim} \begin{verbatim} geometry = ( (hydrogen 0.0 0.0 0.0) (FLUORINE 1.0 0.0 0.0) (Lithium 3.0 0.0 0.0) (berillium 6.0 0.0 0.0) ) \end{verbatim} The keyword \keyword{units} specifies the units for the coordinates: \begin{itemize} \item \keyword{units = bohr} -- atomic units (Bohr), default; \item \keyword{units = angstrom} -- angstroms ($\AA$); \end{itemize} The \keyword{zmat} keyword can be used to specify a Z-matrix for the molecule. It also has to be put in either \keyword{default} or \keyword{input} sections. The format of this vector is as follows: \begin{verbatim} zmat = ( (atomname1) (atomname2 ref21 bond_dist2) (atomname3 ref31 bond_dist3 ref32 bond_angle3) (atomname4 ref41 bond_dist4 ref42 bond_angle4 ref43 tors_angle4) (atomname5 ref51 bond_dist5 ref52 bond_angle5 ref53 tors_angle5) ........................... (atomnameN refN1 bond_distN refN2 bond_angleN refN3 tors_angleN) ) \end{verbatim} where \begin{itemize} \item \keyword{bond\_dist$i$} is the distance (in units specified by keyword \keyword{units}) from nucleus number $i$ to nucleus number \keyword{ref$i$1}. The units \item \keyword{bond\_angle$i$} is the angle formed by nuclei $i$, \keyword{ref$i$1}, and \keyword{ref$i$2}; \item \keyword{tors\_angle$i$} is the torsion angle formed by nuclei $i$, \keyword{ref$i$1}, \keyword{ref$i$2}, and \keyword{ref$i$3}; \end{itemize} Some care has to be taken when constructing a Z-matrix for a molecule which contains linear fragments. For example, let's construct a Z-matrix for a linear conformation of HNCO. The first three atoms (HNC) can be specified as is, but the fourth atom (O) poses a problem -- the torsional angle cannot be defined with respect to the linear HNC fragment. The solution is to add 2 dummy atoms to the definition: \begin{verbatim} zmat = ( (h) (n 1 1.012) (x 2 1.000 1 90.0) (c 2 1.234 3 90.0 1 180.0) (x 4 1.000 2 90.0 3 180.0) (o 4 1.114 5 90.0 2 180.0) ) \end{verbatim} Of course, a choice of the method for geometry specification is solely a matter of convenience. \subsection{Molecular Symmetry} \PSIthree\ can determine automatically the largest Abelian point group for a valid framework of centers (the framework also includes ghost atoms, but it does not include dummy atoms). It will then use the symmetry properties of the system in computing energy, forces, and other properties. It is recommended that the user let the program determine the point group symmetry of the molecule automatically, although it can be specified manually via the \keyword{symmetry} keyword. In certain instances, even if the molecule has a certain symmetry, it may be desirable to only use a lower-symmetry point group for the computation of the wave function. The keyword \keyword{subgroup} is used to specify a subgroup of the full molecular point group. The allowed values are \keyword{c2v}, \keyword{c2h}, \keyword{d2}, \keyword{c2}, \keyword{cs}, \keyword{ci}, and \keyword{c1}. For certain combinations of a group and its subgroup there is no unique way to determine which subgroup is implied. For example, $D_{\rm 2h}$ has 3 non-equivalent $C_{\rm 2v}$ subgroups, e.g. $C_{\rm 2v}(X)$ consists of symmetry operations $\hat{E}$, $\hat{C}_2(x)$, $\hat{\sigma}_{xy}$, and $\hat{\sigma_{xz}}$. To specify subgroups precisely one has to use the \keyword{unique\_axis} keyword. E.g. the following input will specify the $C_{\rm 2v}(X)$ subgroup of $D_{\rm 2h}$ to be the computational point group: \begin{verbatim} input: ( geometry = ( ........ ) units = angstrom subgroup = c2v unique_axis = x ) \end{verbatim} \subsection{Basis Sets} An atomic basis set is normally identified by a string. Currently, there exist three ways to specify which basis sets to use for which atoms: \begin{itemize} \item \keyword{basis = string} -- all atoms use basis set type. If the basis string contains any ``special'' characters (e.g., parentheses, asterisks) then the string must be enclosed in quotation marks, e.g., "6-311++G(d,p)". \item \keyword{basis = (string1 string2 string3 ... stringN)} -- \keyword{string {\em i}} specifies the basis set for atom {\em i}. Thus, the number of strings in the \keyword{basis} vector has to be the same as the number of atoms (including ghost atoms but excluding dummy atoms). Another restriction is that symmetry equivalent atoms should have same basis sets, otherwise \PSIinput\ will use the string provided for the so-called unique atom out of the set of symmetry equivalent ones. \item \begin{verbatim} basis = ( (element1 string1) (element2 string2) ........... (elementN stringN) ) \end{verbatim} \keyword{string {\em i}} specifies the basis set for chemical element \keyword{element {\em i}}. \end{itemize} \subsubsection{Default Basis Sets} \PSIthree\ default basis sets are located in \pbasisdat\ which is located in {\tt \$psipath/share}. Table \ref{table:basisset} lists basis sets defined in \pbasisdat. \begin{table}[tbp] %\special{landscape} \caption{~~~Basis sets available in PSI 3.2} %\vspace{0.015in} \begin{center} \begin{tabular}{|l|l|l|} \hline \hline \hline Basis Set &Atoms &Aliases\\ \hline \hline \textbf{Huzinaga-Dunning} & &\\ \hline (4S/2S) & H &\\ (9S5P/4S2P) & B-F &\\ (11S7P/6S4P) & Al-Cl &\\ DZ & H, B-F, Al-Cl &\\ DZP & H, B-F, Al-Cl &\\ DZ-DIF & H, B-F, Al-Cl &\\ DZP-DIF & H, B-F, Al-Cl &\\ \hline \hline \textbf{Wachters} & &\\ \hline WACHTERS & K, Sc-Cu &\\ WACHTERS-F & Sc-Cu &\\ \hline \hline \textbf{Pople-type} & &\\ \hline STO-3G & H-Ar &\\ 3-21G & H-Ar &\\ 6-31G & H-Ar, K, Ca, Cu &\\ 6-31G* & H-Ar, K, Ca, Cu &6-31G(d)\\ 6-31+G* & H-Ar &6-31+G(d)\\ 6-31G** & H-Ar, K, Ca, Cu &6-31G(d,p)\\ 6-311G & H-Ar &\\ 6-311G* & H-Ar &6-311G(d)\\ 6-311+G* & H-Ne &6-311+G(d)\\ 6-311G** & H-Ar &6-311G(d,p)\\ 6-311G(2df,2pd) & H-Ne &\\ 6-311++G** & H, B-Ar &6-311++G(d,p)\\ 6-311G(2d,2p) & H-Ar &\\ 6-311++G(2d,2p) & H-Ar &\\ 6-311++G(3df,3pd) & H-Ar &\\ \hline \hline \textbf{Triple-Zeta} & &\\ \hline TZ2P & H, B-F, Al-Cl &\\ TZ2PD & H &\\ TZ2PF & H, B-F, Al-Cl &\\ TZ-DIF & H, B-F, Al-Cl &\\ TZ2P-DIF & H, B-F, Al-Cl &\\ TZ2PD-DIF & H &\\ TZ2PF-DIF & H, B-F, Al-Cl &\\ \hline \hline \textbf{Correlation Consistent} & &\\ \textbf{ (N = D,T,Q,5,6)} & & \\ \hline CC-PVNZ & H-Ar &cc-pVNZ\\ CC-PV(N+D)Z & Al-Ar &cc-pV(N+d)Z\\ CC-PCVNZ & B-Ne &cc-pCVNZ\\ AUG-CC-PVNZ & H-He, B-Ne, Al-Ar &aug-cc-pVNZ\\ AUG-CC-PV(N+D)Z & Al-Ar &aug-cc-pCV(N+d)Z\\ AUG-CC-PCVNZ (N${<}$6) & B-F &aug-cc-pCVNZ\\ D-AUG-CC-PVNZ & H &\\ PV7Z & H, C, N, O, F, S &pV7Z\\ AUG-PV7Z & H, C, N, O, F, S &aug-pV7Z\\ AUG-CC-PV7Z & H, N, O, F &aug-cc-pV7Z\\ \hline \hline \hline \end{tabular} \end{center} \end{table} \subsubsection{Custom Basis Sets} To make a custom basis set, enter the information in either of the following four files: \begin{itemize} \item \pbasisdat\ -- only if you think it should be added to \PSIthree. You also might want to check in your additions and changes so that everyone could benefit from them. Refer to the \PSIthree\ Programmer's Manual for information on how to access \PSIthree\ repository. \item An arbitrary text file. To specify the file's location use keyword \keyword{basisfile}: \begin{verbatim} input: ( % The meaning of this is pretty obvious basisfile = "/home/users/tool/chem/h2o/mybasis.in" % If the location ends with '/', "basis.dat" is automatically appended % Hence this specifies /home/users/tool/chem/basis.dat ! basisfile = "/home/users/tool/chem/" ) \end{verbatim} Use this option if you want to use the basis set file in a project which involves running more than one computation. \item File named \basisdat, which resides in the working directory along with \inputdat . Same use as the previous entry. \item \inputdat \end{itemize} The order in which \PSIinput\ program searches for basis sets is the order in which files appear in our checklist. A contracted Cartesian Gaussian-Type Orbital \begin{eqnarray} \phi_{\rm CGTO} & = & x^ly^mz^n\sum_i C_i \exp(-\alpha_i[x^2+y^2+z^2]) \end{eqnarray} where \begin{eqnarray} L & = & l+m+n \end{eqnarray} is written as \begin{verbatim} basis: ( ATOM_NAME: "BASIS_SET_LABEL" = ( (L (C1 alpha1) (C2 alpha2) (C3 alpha3) ... (Cn alpha4)) ) ) \end{verbatim} To scale a basis set, a scale factor may be added as the last item in the specification of each contracted Gaussian function. For example, to scale the S functions in a 6-31G** basis for hydrogen, one would use the following \begin{verbatim} hydrogen:"6-31G**" = ( (S ( 18.73113696 0.03349460) ( 2.82539437 0.23472695) ( 0.64012169 0.81375733) 1.2 ) (S ( 0.16127776 1.00000000) 1.2 ) (P ( 1.10000000 1.00000000)) ) \end{verbatim} In this example, both contracted S functions have their exponents scaled by a factor of (1.2)$^2$ = 1.44. The output file should show the exponents after scaling. \subsection{Electronic Structure Specification} The reference electronic configuration of a molecule is specified via a combination of keywords \keyword{reference} and \keyword{multiplicity} and occupation vectors \keyword{docc} and \keyword{socc}. However, the latter may not be necessary as \PSIcscf\ may guess occupations (\keyword{docc} and \keyword{socc} arrays) for you had \keyword{charge}, \keyword{multiplicity}, and \keyword{reference} have been specified. It is the easiest way to specify electronic configuration for your system, but remember that guessing algorithms \PSIcscf\ uses are far from perfect. Hence you should check guessed occupations every time you let \PSIcscf\ guess them for you. To determine the electronic occupations in \PSIthree\ manually, first construct symmetry orbitals using group theory and fill them according to regular valence bond arguments. To define your occupations in \PSIthree, use the \keyword{docc} and \keyword{socc} arrays. But only \keyword{docc} and \keyword{socc} may not be enough to specify precisely the spin couplings in your system. That's where \keyword{reference} and \keyword{multiplicity} keywords come in. \keyword{multiplicity} is equal 2S+1, where S is the spin quantum number of the system. \keyword{reference} can equal \begin{itemize} \item rhf (default) - spin-restricted reference for closed shell molecules. \keyword{multiplicity} may only equal to 1 in this case. \item rohf - spin-restricted reference for open shell molecules. If multiplicity=1 and socc has two singly occupied orbitals in different symmetry blocks - it's equivalent to the old opentype=singlet statement. Otherwise it's assumed to be a high-spin open-shell case (equivalent to the old opentype=highspin statement). \item uhf - spin-unrestricted reference for closed shell or high-spin (parallel spins) open shell system. \item twocon for two determinantal wavefunctions. The largest component should be specified by the docc and socc arrays. Multiplicity has to be set to 1. \end{itemize} For $^1{\rm A}_1$ methylene, the occupation is (1a1)2(2a1)2(1b2)1(3a1)2 so the docc is: \begin{verbatim} reference = rhf or uhf multiplicity = 1 docc = (3 0 0 1) \end{verbatim} For the $^3{\rm B}_1$ state of methylene, the electronic configuration is (1a1)2(2a1)2(1b2)2(3a1)1(1b1)1 so the docc and socc arrays are: \begin{verbatim} reference = rohf or uhf multiplicity = 3 docc = (2 0 0 1) socc = (1 0 1 0) \end{verbatim} For the $^1{\rm B}_1$ state of methylene however, the docc and socc arrays are also: \begin{verbatim} reference = rohf multiplicity = 1 docc = (2 0 0 1) socc = (1 0 1 0) \end{verbatim} Since most of the basis sets are highly contracted in the core regions, core electrons are routinely frozen and corresponding virtual orbitals are deleted. This is accomplished via the \keyword{frozen\_docc} and \keyword{frozen\_uocc} arrays. Simply specify the symmetry of the frozen orbital and \PSIthree\ will do the rest. To freeze the lowest $a_1$ orbital and delete the corresponding highest $b_2$ orbital, they would look like this: \begin{verbatim} frozen_docc = (1 0 0 0) frozen_uocc = (0 0 0 1) \end{verbatim} \subsection{Single-Point Energy Computation} Along with the wavefunction type, the nuclear framework, basis set, and electronic configuration are sufficient for a single-point evaluation of the electronic energy. The electronic wavefunction is specified via the \keyword{wfn} keyword. The range of allowed wavefunctions is listed in Table \ref{table:methods}. \subsection{Geometry Optimization} \PSIoptking\ is the program responsible for orchestrating the process of geometry optimization. It can do a number of tasks automatically, such as generating internal coordinates, produce empirical force constant matrix, if necessary, update it, and check if geometry optimization is over. Some or all of the following files are necessary to perform a geometry optimization with \PSIoptking: \begin{itemize} \item \FILE{11.dat} - contains the cartesian geometry and the nuclear forces, produced by \PSIcderiv ; \item \fconstdat - contains force constants; if absent - empirical force constants will be generated by \PSIoptking ; \item \intcodat - contains internal coordinates in a format readable by a human; if absent - internal coordinates are generated automatically by \PSIoptking . \end{itemize} The procedure for setting up such a calculation is as follows: \begin{itemize} \item define internal coordinates if desired (or, do nothing, and \PSIoptking\ will do it for you automatically!) \item obtain a set of force constants in an fconst.dat file (or, again, \PSIoptking\ can do this automatically for you) \item If analytic gradients are available for your chosen method, set \keyword{dertype=first}. If not, set \keyword{dertype=none} and also set \keyword{numerical\_dertype=first} in the \keyword{default} section. \item Run the optimization by setting the \keyword{opt} flag set to true and \keyword{ nopt} to the number of geometry optimization steps (say, around 5 to 10). If analytic gradients are not available, then \keyword{nopt} instead gives the number of energy points to compute. This should be the desired number of geometry optimization steps, multiplied by (2*num\_symm\_coord + 1), where num\_symm\_coord is the number of totally-symmetric internal coordinates. \end{itemize} The precision with which geometry is optimized depends on the residual forces on the nuclei. By default \PSIoptking\ will terminate the job if the residual cartesian gradients in \FILE{11.dat} are less than 1E-5 in atomic units. It is probably enough for most tasks. Going below this will most likely waste CPU time unless you are doing benchmarks. An important aspect of a geometry optimization is the accuracy of the first derivatives of energy that \PSIthree\ computes. Depending on how poorly your wavefunction has been convereged, the gradients themselves may not be sufficiently accurate for the requested convergence criterion. After computing first derivatives of the energy, \PSIcints\ runs a simple check of the quality of the energy derivative. It's a good idea to look at \PSIcints ' output to make sure that the gradients are OK. Let us take a look at each step involved in optimizing molecular geometry. \subsubsection{Internal Coordinates and Structure of \keyword{intco} Vector} This section is largely obsolete now with the addition of the \PSIoptking\ program which can generate internal coordinates automatically. At present \PSIoptking\ cannot handle molecules larger than a few atoms but it should change in the immediate future. Hence you may still specify internal coordinates manually as described here, but this ability may become obsolete someday. \PSIthree\ currently carries out all optimizations in internal coordinates. The internals are specified in either \inputdat\ or \intcodat. First, the primitive internals are defined. These are individual stretches, bends, torsion, out-of-plane deformations, and two different linear bends denoted lin1 and lin2. All of these are defined in Wilson, Decius, and Cross. An example for methane is below: \begin{verbatim} intco: ( stre = ( (1 1 2) (2 1 3) (3 1 4) (4 1 5) ) bend = ( (5 2 1 5) (6 3 1 5) (7 4 1 5) (8 2 1 4) (9 3 1 4) (10 2 1 3) ) \end{verbatim} After the primitives are defined, they are constructed into symmetrized internals with the totally symmetric placed in the SYMM vector and the rest placed in the ASYMM vector. For optimizations, only the SYMM internals need to be defined. Likewise, if during an optimization a molecule breaks symmetry, the internals have been improperly defined. Again, methane is done below: \begin{verbatim} symm = ( ("(1) stretch"(1 2 3 4)) ) asymm = ( ("(2) E bend"(10 7)) ("(3) T2 stretch"(1 2 -3 -4 )) ("(4) T2 bend"(10 -7)) ("(5) E torsion"(8 -5 -9 6)) ("(6) T2 bend" (8 -6)) ("(7) T2 bend"( 5 -9)) ("(8) T2 stretch"(1 3 -2 -4)) ("(9) T2 stretch"(1 4 -2 -3)) ) ) \end{verbatim} The SYMM and ASYMM vectors have two or three components: the first is a label enclosed by quotation marks and the second is the list of primitive internals comprising this vector. Some internals have been multiplied by -1 to reflect the appropriate symmetries. If the internals need to be weighted by some prefactor, then a third vector may be used: \begin{verbatim} symm = ( ("generic coord" (1 -2 -3) (2.0 1.0 1.0)) ) \end{verbatim} For more information in defining symmetric internals, refer to Cotton's text. \subsubsection{Force Constant Matrix and Structure of \fconstdat} The quality of the force constants, or Hessian, is critical for optimizing weakly bound structures. In order to start an optimization, one needs the \fconstdat\ file. For those of you that can speak Fortran 77, this file is written in 8F10.7 format. It is the lower triangle of the force constant matrix in internal coordinates. The order of the forces is identical to the order of the SYMM and ASYMM vectors. For the methane-water dimer, an excerpt from a real \fconstdat\ is shown below: \begin{verbatim} 5.654908 .217027 5.616085 -.006096 -.001145 6.078154 -.055291 .026921 .023732 .317485 .004063 -.155489 -.003880 -.170201 .873999 -.146900 -.285108 .001153 -.023346 .196008 .605239 .001037 -.001959 .002945 -.024597 .014432 .005302 .388622 \end{verbatim} Ideally, your diagonal elements should be the much larger than the non-diagonal elements. If you need an \fconstdat\ file, you have four options: \begin{enumerate} \item Create a diagonal matrix of 1's \item Create a diagonal matrix with 5 for stretching coordinates, 2 for bending coordinates, and 1 for all other coordinates \item Let \PSIoptking\ generate an empirical Hessian for you \item Run a second derivative to obtain a Cartesian Hessian and transform that to internals( fconst.dat) with intder. \end{enumerate} Clearly, the list starts at the most approximate and gets more accurate. \subsection{Frequency Analysis} \PSIthree\ is also capable of computing harmonic vibrational frequencies for a number of different methods using energy points or analytic energy first or second derivatives. (At present, only RHF-SCF analytic second derivatives are available.) If analytic energy second derivatives are not available, \PSIthree\ will generate displaced geometries along symmetry adapted cartesian coordinates, compute the appropriate energies or first derivatives, and use finite-difference methods to compute the Hessian. The following keywords are pertinent for vibrational frequency analyses: \begin{description} \item[JOBTYPE = string]\mbox{}\\ This keyword must be set to {\tt FREQ} for frequency analyses. \item[DERTYPE = string]\mbox{}\\ This keyword may be set to {\tt NONE} if only energies are available for the chosen method, or {\tt FIRST} if analytic gradients are available. \item[POINTS = 3 or 5]\mbox{}\\ Specifies whether a 3-point or a 5-point formula is used to compute the vibrational frequencies by finite differences. \end{description} \begin{em} Note: In some situations, vibrational frequency analysis via finite differences may fail if the full point group symmetry is specified via the {\tt symmetry} keyword. This happens because the user-given {\tt symmetry} value can become incompatible with the actual symmetry of the molecule when energies or gradients are evaluated for symmetry-lowering displacements. In such situations, the user is advised to let the program determine the symmetry automatically, rather than specifying {\tt symmetry} manually. Otherwise, an error such as the following may result: \end{em} \begin{verbatim} error: problem assigning number of operations per class *** stopping execution *** \end{verbatim} The manual pages for the \PSInormco\ and \PSIintder\ modules contain information on additional tools useful in vibrational frequency analysis and coordinate transformation. \subsection{Evaluation of one-electron properties} For now, take a look at the available documentation for \PSIoeprop . \subsection{Plotting one-electron properties} Program \PSIoeprop\ can evaluate certain one-electron properties on a grid of points and then print them out in format suitable for image rendering with external programs. Currently, electron and spin density, electron and spin density gradient, Laplacian of electron and spin density, and electrostatic potential can be evaluated on an arbitrary rectangular two-dimensional grid and output in a format suitable for feeding to a interactive visualization program {\tt PlotMTV} (version 1.3 and higher). {\tt PlotMTV} is a freeware code developed by Kenny Toh. It can be downloaded off many web sites in source or binary form. In addition, values of molecular orbitals can be evaluated on an arbitrary rectangular three-dimensional grid and output for furher rendering of high-quality images with a program {\tt MegaPov} (version 0.5). {\tt MegaPov} is an unofficial patch for a ray-tracing code {\tt POV-Ray}. Information on {\tt MegaPov} can be found at \htmladdnormallink{{http://nathan.kopp.com/patched.htm}}{http://nathan.kopp.com/patched.htm}. Let's look at how to set up input for spin density evaluation on a two-dimensional grid. An input secion of \PSIoeprop\ might look like this: \begin{verbatim} oeprop:( grid = 2 spin_prop = true grid_origin = (0.0 -5.0 -5.0) grid_unit_x = (0.0 1.0 0.0) grid_unit_y = (0.0 0.0 1.0) grid_xy0 = (0.0 0.0) grid_xy1 = (10.0 10.0) nix = 20 niy = 20 ) \end{verbatim} \keyword{grid} specifies the type of a property and the type of a grid \PSIoeprop\ needs to compute. Allowed values are 0 (default, no property evaluation on a grid), 1 (electrostatic potential on a 2D grid), 2 (electron/spin density on a 2D grid), 3 (gradient of electron/spin density on a 2D grid), 4 (Laplacian of electron/spin density on a 2D grid), 5 (molecular orbital values on a 3D grid). Since \keyword{spin\_prop}\ is set, the spin density will be evaluated on a grid. Grid specification is a little bit tricky but very flexible. \keyword{grid\_origin}\ specifies the origin of the rectangular coordinate system associated with the grid in the refernence frame. \keyword{grid\_unit\_x}\ specifies a reference frame vector which designates the direction of the x-axis of the grid coordinate system. \keyword{grid\_unit\_y}\ is analogously a reference frame vector which, along with the \keyword{grid\_unit\_x}, completely specifies the grid coordinate system. \keyword{grid\_unit\_x}\ and \keyword{grid\_unit\_y}\ do not have to be normalized, neither they need to be orthogonal to either other - orthogonalization is done automatically to ensure that unit vectors of the grid coordinate system are normalized in the reference frame too. \keyword{grid\_xy0}\ is a vector in the grid coordinate system that specifies a vertex of the grid rectangle with the most negative coordinates. Similarly, \keyword{grid\_xy1}\ specifies a vertex of the the grid rectangle diagonally opposite to \keyword{grid\_xy0}. Finally, \keyword{nix}\ and \keyword{niy}\ specify the number of intervals into which the $x$ and $y$ sides of the grid rectangle are subdivided. To summarize, the above input specifies a rectangular (in fact, square) 21 by 21 grid of dimensions 10.0 by 10.0 lying in the $yz$ plane and centered at origin. Running \PSIoeprop\ on such input will create a file called \file{sdens.dat} (for file names refer to man page on \PSIoeprop), which can be fed directly to {\tt PlotMTV} to plot the data. Specification of a three-dimensional grid for plotting MO isosurfaces ({\tt grid = 5}) is just slightly more complicated. The index of the MO which needs to be plotted is specified by keyword \keyword{mo\_to\_plot}. The index is specified in Pitzer order and not according to the orbital energies. The reference frame is specified by keywords \keyword{grid\_origin}, \keyword{grid\_unit\_x}\ and \keyword{grid\_origin\_y}\ (the third axis of the grid coordinate system is specified by by the vector product of \keyword{grid\_unit\_x}\ and \keyword{grid\_unit\_y}). Since in this case we are dealing with the three-dimensional grid coordinate system, one needs to specify two diagonally opposite vertices of the grid box via \keyword{grid\_xyz0}\ and \keyword{grid\_xyz1}. The number of intervals along $z$ is specified via \keyword{niz}. The final input may look like this: \begin{verbatim} oeprop:( grid = 5 mo_to_plot = 10 grid_origin = (-5.0 -5.0 -5.0) grid_unit_x = (1.0 0.0 0.0) grid_unit_y = (0.0 1.0 0.0) grid_xyz0 = (0.0 0.0 0.0) grid_xyz1 = (10.0 10.0 10.0) nix = 20 niy = 20 niz = 20 ) \end{verbatim} Running \PSIoeprop\ on input like this will produce two files \begin{itemize} \item \file{mo.dat} - MO values tabulated in a column in order where $x$ runs fast; \item \file{mo.pov} - the {\tt MegaPov} command file which sets a number of parameters. You might have to adjust a number of parameters manually to obtain the best looking output. \end{itemize} Rendering of an image can be done via {\tt megapovplus +Imo.pov}. Consult {\tt MegaPov} documentation for more information on how to use it. \subsection{Utilities} \subsubsection{\PSIgeom} The program \PSIgeom\ reads a set of Cartesian coordinates and determines from them the bond distances (Bohr and angstrom), bond angles, torsional angles, out-of-plane angles (optional), moments of inertia, and rotational constants. It requires either a \FILE{11.dat} or \geomdat\ and writes \geomout. �������������������psi3/doc/userman/opt.tex����������������������������������������������������������������������������0000644�0001015�0000765�00000022267�10662435715�013766� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{Geometry Optimization} \label{opt} \PSIthree\ is capable of carrying out geometry optimizations (minimization only, at present) for a variety of molecular structures using either analytic and numerical energy gradients. When present, internal coordinates provided in the INTCO: section of the input will be read and used by \PSIthree. If these are missing, \PSIthree\ will automatically generate and use redundant, simple internal coordinates for carrying out the optimization. These simple stretch, bend, torsion, and linear bend coordinates are determined by distance criteria using the input geometry. By default, optimization is performed in redundant internal coordinates regardless of how the geometry was provided in the input. Alternatively, the user may specify zmat\_simples=true, in which case the simple internal coordinates will be taken from the ZMAT given in the input file. Also, the user may specify optimization in non-redundant, delocalized internal coordinates with delocalize=true. In this case, the automatically generated simple coordinates are delocalized and redandancies are removed. Advanced users may wish to specify the simple internal coordinates in the intco.dat file, and then allow \PSIthree\ to delocalize them. Only those coordinates or combinations of coordinates that are specified by the "symm =" keyword in the INTCO: section are optimized. Coordinates can be approximately frozen by commenting them out within the "symm =" section. Geometrical constraints may be precisely imposed by the addition of a section with nearly the same format as in INTCO:. For example, to fix the distance between atoms 1 and 2, as well as the angle between atoms 2, 1 and 3 in an optimization, add the following to your input file. \\ \noindent fixed\_intco: ( \\ stre = ( \\ (1 2) \\ ) \\ bend = ( \\ (2 1 3) \\ ) \\ ) \\ The constrained simple internals must be ones present (either manually or automatically) among the simple internals in the INTCO: section. Alternatively, the z-matrix input format may be used to specify constrained optimizations. If zmat\_simples=true, then variables in the z-matrix which end in a dollar sign will be taken as simple internals to be optimized, and all other variables will be taken as simple internals to keep frozen. To aid optimizations, force constants may be computed using "jobtype = symm\_fc". The determined force constants will be saved in a binary file PSIF\_OPTKING (currently file 1). Subsequent optimizations will read and use these force constants. In general, \PSIthree\ looks for force constants in the following order: in this binary file, in the FCONST: section of the input, and in the fconst.dat file. If no force constants are found in any of these, then an empirical diagonal force constant matrix is generated. For methods for which only energies are available, \PSIthree\ will use non-redundant, symmetry-adapted delocalized internal coordinates to generate geometrical displacements for computing finite-difference gradients. The simple coordinates can be linearly combined by hand or automatically. The goal is to form 3N-6(5) symmetry-adapted internal coordinates. The automated delocalized coordinates may work for low-symmetry molecules without linear angles, but have not been extensively tested. For both analytic- and finite-difference-gradient optimization methods, Hessian updates are performed using the BFGS method. The list below shows which coordinates are used by default for different types of jobs. \\ jobtype=freq dertype=first symmetry-adapted cartesians \\ jobtype=freq dertype=none symmetry-adapted cartesians \\ jobtype=fc dertype=first delocalized internals (or user-defined SALCs) \\ jobtype=symm\_fc dertype=first delocalized internals (or user-defined SALCs) \\ jobtype=opt dertype=first redundant internals \\ jobtype=opt dertype=none delocalized internals (or user-defined SALCS) \\ \\ The following keywords are pertinent for geometry optimizations. \begin{description} \item[JOBTYPE = string]\mbox{}\\ This keyword must be set to {\tt OPT} for geometry optimizations and {\tt SYMM\_FC} to compute force constants. \item[DERTYPE = string]\mbox{}\\ This keyword must be set to {\tt NONE} if only energies are available for the chosen method and {\tt FIRST} if analytic gradients are available. \item[CONV = integer]\mbox{}\\ The maximum force criteria for optimization is $10^{-conv}$. \item[BFGS = boolean]\mbox{}\\ If true (the default), a BFGS Hessian update is performed. \item[BFGS\_USE\_LAST = integer]\mbox{}\\ This keyword is used to specify the number of gradient step for the BFGS update of the Hessian. The default is six. \item[SCALE\_CONNECTIVITY = float]\mbox{}\\ Determines how close atoms must be to be considered bonded in the automatic generation of the bonded list. The default is 1.3. \item[DELOCALIZE = integer]\mbox{}\\ Whether to delocalize simple internal coordinates to attempt to produce a symmetry-adapted, non-redundant set. \item[MIX\_TYPES = boolean]\mbox{}\\ If set to false, different types of internal coordinates are not allowed to mix in the formation of the delocalized coordinates. Although this produces cleaner coordinates, often the resulting delocalized coordinates form a redundant set. \item[ZMAT\_SIMPLES = boolean]\mbox{}\\ If set to true, the simple internal coordinates are taken from the zmat entry in the input file. The default is false. \item[POINTS = 3 or 5]\mbox{}\\ Specifies a 3-point or a 5-point formula for optimization by energy points. \item[EDISP = float]\mbox{}\\ The default displacment size (in au) for finite-difference computations. The default is 0.005. \item[FRAGMENT\_DISTANCE\_INVERSE = boolean]\mbox{}\\ For interfragment coordinates. If true, then 1/R(AB) is used, if false, then R(AB) is used. The default is true. \item[FIX\_INTRAFRAGMENT = boolean]\mbox{}\\ If true, all intrafragment coordinates are constrained. \item[FIX\_INTERFRAGMENT = boolean]\mbox{}\\ If true, all interfragment coordinates are constrained. \item[DUMMY\_AXIS\_1 = 1 or 2 or 3]\mbox{}\\ Specifies the axis for the location of a dummy atom for the definition of a linear bending coordinate. The default is 2. \item[DUMMY\_AXIS\_2 = 1 or 2 or 3]\mbox{}\\ Specifies the axis for the location of a dummy atom for the definition of a linear bending coordinate. The default is 3. \item[TEST\_B = boolean]\mbox{}\\ If set to true, a numerical test of the B-matrix is performed. \item[PRINT\_FCONST = boolean]\mbox{}\\ If set to true and jobtype=symm\_fc, then the force constants will be written to the fconst.dat file. This allows force constants to be reused even if the binary PSIF\_OPTKING file is no longer present. \item[Print options]\mbox{}\\ The following when set to true, print additional information to the output file: PRINT\_SIMPLES, PRINT\_PARAMS, PRINT\_DELOCALIZE, PRINT\_SYMMETRY, PRINT\_HESSIAN, PRINT\_CARTESIANS. \item[DISPLACEMENTS = ( (integer float ...) ...)]\mbox{}\\ A user may specify displacments along internal coordinates using this keyword. For example, displacements = ( (2 0.01 3 0.01) ) will compute a new cartesian geometry with the second and third internal coordinates increased by 0.01. \end{description} \section{Vibrational Frequency Computations} \label{freq} \PSIthree\ is also capable of computing harmonic vibrational frequencies for a number of different methods using energy points or analytic energy first or second derivatives. (At present, only RHF-SCF analytic second derivatives are available.) If analytic energy second derivatives are not available, \PSIthree\ will generate displaced geometries along symmetry adapted cartesian coordinates, compute the appropriate energies or first derivatives, and use finite-difference methods to compute the Hessian. The following keywords are pertinent for vibrational frequency analyses: \begin{description} \item[JOBTYPE = string]\mbox{}\\ This keyword must be set to {\tt FREQ} for frequency analyses. \item[DERTYPE = string]\mbox{}\\ This keyword may be set to {\tt NONE} if only energies are available for the chosen method, or {\tt FIRST} if analytic gradients are available. \item[POINTS = 3 or 5]\mbox{}\\ Specifies whether frequencies are determined by a 3-point or a 5-point formula of gradient differences. If only energy points are used, more displacements are required, but the effect of this keyword in terms of accuracy is the same. \end{description} \begin{em} Note: In some situations, vibrational frequency analysis via finite differences may fail if the full point group symmetry is specified via the {\tt symmetry} keyword. This happens because the user-given {\tt symmetry} value can become incompatible with the actual symmetry of the molecule when energies or gradients are evaluated for symmetry-lowering displacements. In such situations, the user is advised to let the program determine the symmetry automatically, rather than specifying {\tt symmetry} manually. Otherwise, an error such as the following may result: \end{em} \begin{verbatim} error: problem assigning number of operations per class *** stopping execution *** \end{verbatim} The manual pages for the \PSInormco\ and \PSIintder\ modules contain information on additional tools useful in vibrational frequency analysis and coordinate transformation. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/prsty.bst.in�����������������������������������������������������������������������0000644�0001015�0000765�00000051071�10606452635�014733� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%%% ====================================================================== %%% @BibTeX-style-file{ %%% filename = "prsty.bst", %%% version = "3.0", %%% date = "November 10, 1992", %%% ISO-date = "1992.11.10", %%% time = "15:41:54.18 EST", %%% author = "American Physical Society", %%% contact = "Christopher B. Hamlin", %%% address = "APS Publications Liaison Office %%% 500 Sunnyside Blvd. %%% Woodbury, NY 11797", %%% telephone = "(516) 576-2390", %%% FAX = "(516) 349-7817", %%% email = "mis@aps.org (Internet)", %%% supported = "yes", %%% archived = "pinet.aip.org/pub/revtex, %%% Niord.SHSU.edu:[FILESERV.REVTEX]", %%% keywords = "REVTeX, version 3.0, Physical Review BibTeX %%% style, American Physical Society", %%% codetable = "ISO/ASCII", %%% checksum = "55300 926 2632 20018", %%% docstring = "This is the Physical Review--style BibTeX style %%% file for the American Physical Society under %%% REVTeX 3.0 (release of November 10, 1992). %%% %%% %%% The checksum field above contains a CRC-16 %%% checksum as the first value, followed by the %%% equivalent of the standard UNIX wc (word %%% count) utility output of lines, words, and %%% characters. This is produced by Robert %%% Solovay's checksum utility." %%% } %%% ====================================================================== %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % begin prsty.bst % % version 3.0 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % This file is part of the APS files in the REVTeX 3.0 distribution. % % Version 3.0 of REVTeX, November 10, 1992. % % % % Copyright (c) 1992 The American Physical Society. % % % % See the REVTeX 3.0 README file for restrictions and more information. % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This is a bibtex style file to produce Physical-Review--style % % references for inclusion in LaTeX/REVTeX documents. % % Main problem: crossref handling is terrible % % Some documentation is available (e-mail below) % % Contact: C. Hamlin, mis@aps.org (Internet) % % mis@apsedoff (bitnet) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Added "newmisc" entry so that notes at the end of an entry will look %% right. Hopefully this won't break other things. %% -Daniel Crawford, Januray, 1997 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year } {} { label } INTEGERS { vol.used i.temp } STRINGS { s t } FUNCTION {output} { duplicate$ empty$ 'pop$ 'write$ if$ } % Note: nothing left on stack for future processing in bibitem. FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } FUNCTION {embolden} { duplicate$ empty$ { pop$ "" } { "{\bf " swap$ * "}" * } if$ } FUNCTION {paren} { duplicate$ empty$ { pop$ "" } { "(" swap$ * ")" * } if$ } INTEGERS { nameptr namesleft numnames } INTEGERS { etal } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames #100 > s numnames "{ll}" format.name$ "others" = numnames #1 > and or 'etal := etal { #1 #1 + 'namesleft := } { numnames 'namesleft := } if$ { namesleft #0 > } { s nameptr "{f. }{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { nameptr #2 > { "," * } 'skip$ if$ t "others" = etal or { " {\it et~al.}" * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.edited} { editor empty$ { "" } { "edited by " editor format.names * } if$ } FUNCTION {format.title} { title empty$ { "" } 'title if$ } FUNCTION {lc.first.letter} { 't := "" t #1 #1 substring$ "l" change.case$ * t #2 global.max$ substring$ * } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {first.page} { 't := "" { t empty$ not t #1 #1 substring$ "-" = not and } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } while$ } FUNCTION {format.date} { year empty$ { "" } 'year if$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pp.\ " pages n.dashify * } { "p.\ " pages * } if$ } if$ } FUNCTION {format.pages.a} { pages empty$ { "" } { "page" pages first.page tie.or.space.connect } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null embolden " " swap$ * * pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages.a } { ", " * pages first.page * } if$ } if$ } FUNCTION {if.comma} { { ", " * } 'skip$ if$ } FUNCTION {if.period} { { ". " * } 'skip$ if$ } % pushes "" if value passed is empty$ FUNCTION {push.string} { 'i.temp := duplicate$ empty$ { pop$ "" } { i.temp if.comma } if$ } % pushes "" if value passed is empty$ FUNCTION {push.string.check} { 'i.temp := duplicate$ empty$ { pop$ "Warning: " swap$ * " missing in entry " cite$ "." * * * warning$ "" } { swap$ pop$ i.temp if.comma } if$ } % adds nothing if value passed is empty$ FUNCTION {add.string} { 'i.temp := duplicate$ empty$ { pop$ } { * i.temp if.comma } if$ } % adds nothing if value passed is empty$ FUNCTION {new.add.period} { 'i.temp := duplicate$ empty$ { pop$ } { * i.temp if.period } if$ } % adds nothing if value passed is empty$ FUNCTION {add.string.check} { 'i.temp := duplicate$ empty$ { pop$ "Warning: " swap$ * " missing in entry " cite$ "." * * * warning$ } { swap$ pop$ * i.temp if.comma } if$ } FUNCTION {format.vol.page} { "volume" volume embolden #1 push.string.check " " * "pages" pages field.or.null first.page #0 add.string.check " " * } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ year empty$ note empty$ and and and and { "All relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { "Technical Report" } 'type if$ number empty$ { "t" change.case$ } { type empty$ { " No.~" * } { " " * } if$ number * } if$ } FUNCTION {format.etc} { vol.used 'skip$ { number empty$ { volume empty$ 'skip$ { "Vol.~" volume * * chapter empty$ pages empty$ note empty$ and and 'skip$ { ", " * } if$ } if$ } { "No.~" number * * chapter empty$ pages empty$ note empty$ and and 'skip$ { ", " * } if$ } if$ } if$ chapter empty$ 'skip$ { type empty$ { "Chap.~" chapter * * } { type "u" change.case$ "l" change.case$ " " chapter * * * } if$ pages empty$ note empty$ and 'skip$ { ", " * } if$ } if$ pages empty$ 'skip$ { format.pages * note empty$ 'skip$ { ", " * } if$ } if$ note empty$ 'skip$ { note lc.first.letter * } if$ } FUNCTION {format.pub.add.year.etc} { " (" publisher empty$ { "PUBLISHER" "No publisher for entry " cite$ "." * * warning$ } { publisher } if$ ", " * * address empty$ { "ADDRESS" "Missing address in entry " cite$ * "." * warning$ } { address } if$ ", " * * year empty$ { "YEAR" } 'year if$ ")" * * volume empty$ not number empty$ not or title empty$ series empty$ or and chapter empty$ not or pages empty$ not or type empty$ not or note empty$ not or { ", " * format.etc } 'skip$ if$ } FUNCTION {format.bedition} { edition empty$ { "" } { edition "l" change.case$ duplicate$ "first" = { pop$ "1st " } { duplicate$ "second" = { pop$ "2nd " } { duplicate$ "third" = { pop$ "3rd " } 'skip$ if$ } if$ } if$ " ed." * } if$ } FUNCTION {format.title.and.series.and.org} { #0 'vol.used := "" duplicate$ 's := title empty$ 'skip$ { title 's := } if$ booktitle empty$ 'skip$ { booktitle 's := } if$ s empty$ 'skip$ { type$ "inproceedings" = type$ "proceedings" = or type$ "inbook" = or { " in " * } { author empty$ not editor empty$ not and { " in " * } 'skip$ if$ } if$ s emphasize series empty$ editor empty$ edition empty$ and and not type$ "inproceedings" = organization empty$ not and type$ "proceedings" = organization empty$ not and or or add.string } if$ series empty$ 'skip$ { s empty$ 'skip$ { number empty$ { volume empty$ 'skip$ { "Vol.~" volume " of " * * * #1 'vol.used := } if$ } { "No.~" number " in " * * * #1 'vol.used := } if$ } if$ series emphasize edition empty$ not editor empty$ not type$ "inproceedings" = organization empty$ not and type$ "proceedings" = organization empty$ not and or or or add.string } if$ type$ "inproceedings" = type$ "proceedings" = or { organization empty$ 'skip$ { organization editor empty$ edition empty$ and not add.string } if$ } 'skip$ if$ } FUNCTION {article} { output.bibitem "author" format.authors #1 push.string.check "journal" journal #0 add.string.check " " * output format.vol.page #0 push.string " " * "date" format.date paren #0 add.string.check note empty$ 'skip$ { ", " * note lc.first.letter * } if$ fin.entry crossref empty$ 'skip$ { "See Ref.\ \cite{" crossref "}." * * write$ newline$ } if$ } FUNCTION {book} { output.bibitem format.authors #1 push.string "title" format.title.and.series.and.org #0 add.string.check format.bedition editor empty$ not add.string output format.edited #0 push.string format.pub.add.year.etc #0 add.string fin.entry crossref empty$ 'skip$ { "See Ref.\ \cite{" crossref "}." * * write$ newline$ } if$ } FUNCTION {booklet} { output.bibitem format.authors #1 push.string "title" format.title #0 add.string.check howpublished empty$ 'skip$ { ", " howpublished * * } if$ address empty$ 'skip$ { ", " address * * } if$ year empty$ 'skip$ { " (" year ")" * * * } if$ note empty$ 'skip$ { ", " note lc.first.letter * * } if$ fin.entry } FUNCTION {inbook} { book } FUNCTION {incollection} { book } FUNCTION {inproceedings}{ book } FUNCTION {proceedings} { book } FUNCTION {conference} { book } FUNCTION {manual} { output.bibitem "" author empty$ 'skip$ { format.authors #1 add.string } if$ format.btitle edition empty$ address empty$ organization empty$ year empty$ note empty$ and and and and not add.string edition empty$ 'skip$ { format.bedition organization empty$ address empty$ year empty$ note empty$ and and and not add.string } if$ organization empty$ 'skip$ { organization address empty$ year empty$ note empty$ and and not add.string } if$ address empty$ 'skip$ { address year empty$ note empty$ and not add.string } if$ year empty$ 'skip$ { year note empty$ not add.string } if$ note empty$ 'skip$ { note lc.first.letter #0 add.string } if$ fin.entry } FUNCTION {mastersthesis} { output.bibitem "author" format.authors #1 push.string.check title empty$ 'skip$ { "We don't use thesis titles in Phys. Rev, see \cite{" cite$ "}" * * warning$ } if$ "Master's thesis" format.thesis.type #1 add.string "school" school #1 add.string.check address #1 add.string "year" format.date note empty$ not add.string.check note empty$ 'skip$ { note lc.first.letter * } if$ fin.entry } FUNCTION {phdthesis} { output.bibitem "author" format.authors #1 push.string.check title empty$ 'skip$ { "We don't use thesis titles in Phys. Rev, see \cite{" cite$ "}" * * warning$ } if$ "Ph.D. thesis" format.thesis.type #1 add.string "school" school #1 add.string.check address #1 add.string "year" format.date note empty$ not add.string.check note empty$ 'skip$ { note lc.first.letter * } if$ fin.entry } FUNCTION {misc} { output.bibitem format.authors title empty$ howpublished empty$ year empty$ note empty$ and and and not push.string format.title howpublished empty$ year empty$ note empty$ and and not add.string howpublished year empty$ note empty$ and not add.string format.date note empty$ not add.string note empty$ 'skip$ { note author empty$ title empty$ howpublished empty$ year empty$ and and and 'skip$ 'lc.first.letter if$ #0 add.string } if$ fin.entry empty.misc.check } FUNCTION {newmisc} { output.bibitem format.authors title empty$ howpublished empty$ year empty$ note empty$ and and and not push.string format.title howpublished empty$ year empty$ note empty$ and and not add.string howpublished year empty$ note empty$ and not add.string format.date note empty$ not new.add.period note empty$ 'skip$ { note author empty$ title empty$ howpublished empty$ year empty$ and and and 'skip$ 'lc.first.letter if$ #0 add.string } if$ fin.entry empty.misc.check } FUNCTION {techreport} { output.bibitem "author" format.authors #1 push.string.check title empty$ 'skip$ { "We chuck the title of techreports in Phys. Rev.---\cite{" cite$ "}." * * warning$ } if$ format.tr.number institution empty$ address empty$ note empty$ and and not add.string "institution" institution address empty$ note empty$ and not add.string.check address #0 add.string " (unpublished)" note empty$ not add.string note empty$ 'skip$ { note lc.first.letter * } if$ fin.entry } FUNCTION {unpublished} { output.bibitem "author" format.authors note empty$ not push.string.check note empty$ 'skip$ { note lc.first.letter #0 add.string } if$ " (unpublished)" * fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} MACRO {acmcs} {"ACM Comput. Surv."} MACRO {acta} {"Acta Inf."} MACRO {applopt} {"Appl. Opt."} MACRO {cacm} {"Commun. ACM"} MACRO {ibmjrd} {"IBM J. Res. Dev."} MACRO {ibmsj} {"IBM Syst.~J."} MACRO {ieeese} {"IEEE Trans. Softw. Eng."} MACRO {ieeetc} {"IEEE Trans. Comput."} MACRO {ieeetcad} {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} MACRO {ipl} {"Inf. Process. Lett."} MACRO {jacm} {"J.~ACM"} MACRO {jcss} {"J.~Comput. Syst. Sci."} MACRO {scp} {"Sci. Comput. Programming"} MACRO {sicomp} {"SIAM J. Comput."} MACRO {tocs} {"ACM Trans. Comput. Syst."} MACRO {tods} {"ACM Trans. Database Syst."} MACRO {tog} {"ACM Trans. Gr."} MACRO {toms} {"ACM Trans. Math. Softw."} MACRO {toois} {"ACM Trans. Office Inf. Syst."} MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} MACRO {tcs} {"Theor. Comput. Sci."} MACRO {anp} {"Adv. Nucl. Phys."} MACRO {ap} {"Ann. Phys."} MACRO {arnpc} {"Annu. Rev. Nucl. Part. Sci."} MACRO {baps} {"Bull. Am. Phys. Soc."} MACRO {cp} {"Computers Phys."} MACRO {jp} {"J. Phys."} MACRO {josa} {"J. Opt. Soc. Am."} MACRO {josaa} {"J. Opt. Soc. Am. A"} MACRO {josab} {"J. Opt. Soc. Am. B"} MACRO {nim} {"Nucl. Instrum. Meth."} MACRO {np} {"Nucl. Phys."} MACRO {rmp} {"Rev. Mod. Phys."} MACRO {physica} {"Physica"} MACRO {pl} {"Phys. Lett."} MACRO {plb} {"Phys. Lett. B"} MACRO {pr} {"Phys. Rev."} MACRO {pra} {"Phys. Rev. A"} MACRO {prb} {"Phys. Rev. B"} MACRO {prc} {"Phys. Rev. C"} MACRO {prd} {"Phys. Rev. D"} MACRO {pre} {"Phys. Rev. E"} MACRO {prl} {"Phys. Rev. Lett."} MACRO {prep} {"Phys. Rep."} MACRO {ps} {"Phys. Scr."} MACRO {rpp} {"Rep. Prog. Phys."} MACRO {sjnp} {"Sov. J. Nucl. Phys."} MACRO {springmp} {"Springer Tracts in Modern Physics"} MACRO {yadfiz} {"Yad. Fiz."} MACRO {zp} {"Z. Phys."} READ STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ } EXECUTE {begin.bib} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end prsty.bst % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/psi-driver.tex���������������������������������������������������������������������0000644�0001015�0000765�00000007405�07775210632�015245� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{\PSIthree\ Driver} \label{psi-driver} The \PSIthree\ suite of programs is built around a modular design. Any module can be run independently or the driver module, {\tt psi3}, can parse the input file, recognize the calculation desired, and run all the necessary modules in the correct order. {\tt psi3} reads the file {\tt psi.dat} by default. {\tt psi.dat} contains macros for several standard calculations, however, anything in {\tt psi.dat} can be overriden by the user. \subsection{Environment Variables} \begin{description} \item[PSIDATADIR]\mbox{}\\ This flag is used to specify an alternate location for platform-independent read-only files such as {\tt psi.dat} and {\tt pbasis.dat}. By default, \PSIthree\ will look for these files under {\tt \$psipath/share}. \end{description} \subsection{Command-Line Options} \begin{description} \item[-i or -f]\mbox{}\\ This flag is used to specify the input file name, e.g. {\tt psi3 -i h2o.in} where {\tt h2o.in} is the name of the input file. By default, {\tt psi3} and the other \PSIthree\ modules look for {\tt input.dat}. \item[-o]\mbox{}\\ This flag is used to specify the output file name, e.g. {\tt psi3 -o h2o.out} where {\tt h2o.out} is the name of the output file. By default, {\tt psi3} and the other \PSIthree\ modules look for {\tt output.dat}. \item[-p]\mbox{}\\ This flag is used to specify the \PSIthree\ file prefix, e.g. {\tt psi3 -p h2o.dzp} where {\tt h2o.dzp} is the prefix that will be used for all \PSIthree\ files. By default, {\tt psi3} and the other \PSIthree\ modules use {\tt psi} for the file prefix. Hence, the checkpoint file is by default called {\tt psi.32}. \item[-n]\mbox{}\\ This flag tells {\tt psi3} not to run the {\tt input} module. This flag is useful for scripting and debugging. \item[-c]\mbox{}\\ This flag tells {\tt psi3} to check the input and print out the list of programs which would be executed to STDOUT. Equivalent to {\tt check = true} in the input file. \item[-m]\mbox{}\\ This flag tells {\tt psi3} not to run the cleanup module {\tt psiclean}. Usually, {\tt psiclean} is invoked by the {\tt \$done} macro in {\tt psi.dat}. This flag is useful for scripting and debugging. \end{description} \subsection{Input Format} The {\tt psi3} module searches through the default keyword path (first {\tt PSI} then {\tt DEFAULT}) for the following keywords: \begin{description} \item[JOBTYPE = string]\mbox{}\\ This keyword specifies what kind of calculation to run. \item[WFN = string]\mbox{}\\ This keyword specifies the type of wave function. \item[REFERENCE = string]\mbox{}\\ This keyword specifies the spin-reference. \item[DERTYPE = string]\mbox{}\\ This keyword specifies the order of the derivative to be used. The default is {\tt none}. \item[OPT = boolean]\mbox{}\\ Set equal to {\tt true} if performing a geometry optimization. The default is {\tt false}. \item[CHECK = boolean]\mbox{}\\ If {\tt true}, {\tt psi3} will parse your input file and print the sequence of programs to be executed to STDOUT. The default is {\tt false}. \item[EXEC = string vector]\mbox{}\\ The {\tt EXEC} vector contains a list of commands to be executed by {\tt psi3}. Explicit commands can be entered in double quotes, or preset variables can be entered using the convention \$variable, e.g. \begin{verbatim} psi: ( exec = ("ints") ) \end{verbatim} or \begin{verbatim} psi: ( ints = "ints" exec = ($ints) ) \end{verbatim} \end{description} \subsection{Loop Control} Loop control is handled with the {\tt repeat} and {\tt end} commands. The syntax is: \begin{verbatim} repeat n [commands to be executed] end \end{verbatim} where {\tt n} is the number of times to repeat the loop. An inspection of the {\tt psi.dat} file will show that this is how geometry optimizations and finite displacements are performed. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/scf.tex����������������������������������������������������������������������������0000644�0001015�0000765�00000007445�07724471660�013744� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\subsection{Hartree-Fock Self-Consistent-Field} \label{scf} Hartree-Fock molecular orbital theory forms the cornerstone of ab initio quantum chemistry. Until the advances in the accuracy of Kohn-Sham density functional theory in the 1990's, Hartree-Fock theory was the method of choice for obtaining results for large molecules without resorting to standard empirical or semiempirical approaches. Molecular properties obtained by Hatree-Fock theory are generally at least qualitatively correct, although they can be quantitatively poor in many instances. \PSIthree\ solves the Hatree-Fock equations in a basis of Gaussian functions using an iterative, self-consistent-field (SCF) procedure. The final molecular orbitals are those which minimize the energy, subject to the electron configuration specified by the user (or guessed by the program). The process is continued until the largest change in an element of the density matrix drops below 10$^{-n}$, where $n$ is an integer specified by the \keyword{convergence} keyword. Of course the efficiency of the iterative procedure depends on the choice of initial guess. The \PSIcscf\ module will attempt to use previously obtained orbitals as a guess if they are available. This can be particularly advantageous when diffuse functions are present; in that case, it may be easiest to run the computation with a smaller basis and project those orbitals onto the larger basis by specifying the \keyword{--chkptmos} command-line argument or the \keyword{chkpt\_mos=true} keyword in input when running the \PSIinput\ program for the larger basis. If old MO's are not available, \PSIcscf\ uses a core Hamiltonian guess by default. The convergence of the SCF procedure is accelerated by Pulay's direct inversion of the iterative subspace (DIIS) approach, and it is possible to modify the behavior of the DIIS through various keywords, although this is seldom necessary. It is important to point out that the SCF approach does not rigorously guarantee that the final orbitals actually correspond to a minimum in orbital space; at convergence, the only guarantee is that the gradient of the energy with respect to orbital rotations is zero: this could be a global minimum, a local minimum, or a saddle point in orbital rotation space. While this is not usually an issue (typically the lowest minimum consistent with the electron configuration is found), it can be a problem sometimes for radicals, diradicals, bond breaking, or unusual bonding situations. The \PSIstable\ module can be used to test for the stability of Hartree-Fock wave functions. The most commonly used keywords are found below. More specialized keywords are available in the man pages. \begin{description} \item[MAXITER = integer]\mbox{}\\ This gives the maximum number of iterations. The default is 40. \item[CONVERGENCE = integer]\mbox{}\\ This specifies how tightly the wavefunction will be converged. Convergence is determined by comparing the RMS change in the density matrix ("delta P") to the given value. The convergence criterion is 10**(-integer). The default is 7 if both DERTYPE = NONE and WFN = SCF are given and 10 otherwise. \item[LEVELSHIFT = real]\mbox{}\\ This specifies the level shift. The default is 1. \item[DIRECT = boolean]\mbox{}\\ Specifies whether to do the SCF calculation with an integral-direct technique. The default is false. \item[NUM\_THREADS = integer]\mbox{}\\ Specified the number of threads to be used in the integral-direct computation (only valid if {\tt DIRECT} is set to {\tt true}). Default is 1. \item[PRINT\_MOS = boolean]\mbox{}\\ Specifies whether to print the molecular orbitals or not. The default is false. \end{description} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/doc/userman/tutorial.tex�����������������������������������������������������������������������0000644�0001015�0000765�00000017672�10605562450�015025� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\section{A \PSIthree\ Tutorial} \label{tutorial} \subsection{Before Getting Started: A Warning about Scratch Files} Generally, electronic structure programs like \PSIthree\ make significant use of disk drives. Therefore, it is very important to ensure that PSI3 is writing its temporary files to a disk drive phsyically attached to the computer running the computation. If it is not, it will significantly slow down the program and the network. By default, PSI3 will write temporary files to \file{/tmp}, but you will want to set up a default scratch path (as described in sections \ref{scratchfiles} and \ref{psirc}) because the \file{/tmp} directory is usually not large enough except for small test cases. In any event, you want to be very careful that you are not writing scratch files to an NFS-mounted directory that is physically attached to a fileserver elsewhere on the network. \subsection{Basic Input File Structure} PSI3 reads input from a text file, which can be prepared in any standard text editor. The default input file name is \file{input.dat} and the default output file name is \file{output.dat}. So that you can give your files meaningful names, these defaults can be changed by specifying the input file name and output file name on the the command line. The syntax is: {\tt psi3 input-name output-name} PSI3 is a modular program, with each module performing specific tasks and computations. Which modules are run for a particular computation depends on the type of computation and the particular keywords specified in the input file. All keywords in PSI3 use the structure {\tt keyword = value}, where values may be strings, booleans, integers, or real numbers. If the value is a string which contains a special character (such as a space or a dash) you must enclose the string in double quotation marks. You can give keywords in the input file for specific modules; however, in the first few examples, we will place all our keywords in one section of our input file called {\tt psi}. Generally, every module you run during your computation will read the keywords in {\tt psi}, so you can place all your keywords in this section if you choose to do so. \subsection{Running a basic SCF calculation} In our first example, we will consider a Hartree-Fock SCF computation for the water molecule using a cc-pVDZ basis set. We will specify the geometry of our water molecule using a standard z-matrix. \begin{verbatim} psi:( label = "cc-pVDZ SCF H2O" jobtype = sp wfn = scf reference = rhf basis = "cc-pVDZ" zmat = ( o h 1 0.957 h 1 0.957 2 104.5 ) ) \end{verbatim} In each computation, you can specify the type of wavefunction (keyword {\tt wfn}), the reference wavefunction for post-Hartree-Fock computations (keyword {\tt reference}), and the type of computation you want to perform (keyword {\tt jobtype}). In the example above, we used a restricted Hartree-Fock (RHF) reference in an SCF computation of a single-point energy. To change the level of electron correlation, one would specify a different wavefunction type using the keyword {\tt wfn}. In the example above, to perform an MP2 computation, simply set {\tt wfn = mp2}. \subsection{Geometry Optimization and Vibrational Frequency Analysis} The above example was a simple single-point energy computation. To perform a different type of computation, change the keyword {\tt jobtype}. In the example below, we will set up a CCSD geometry optimization. To illustrate a more flexible z-matrix input, we will now define variables for the bond length and bond angle (in the {\tt zvars} section). \begin{verbatim} % 6-31G** H2O Test optimization calculation psi: ( label = "6-31G** SCF H2O" jobtype = opt wfn = ccsd reference = rhf dertype = first basis = "6-31G**" zmat = ( o h 1 roh h 1 roh 2 ahoh ) zvars = ( roh 0.96031231 ahoh 104.09437511 ) ) \end{verbatim} Once you have optimized the geometry of a molecule, you might wish to perform a frequency analysis to determine the nature of the stationary point. To do this, change the value of {\tt jobtype} to {\tt freq}. For an SCF frequeny calculation, you would also set {\tt dertype = second} to compute the second derivatives analytically. Unfortunately, analytical second derivitives are not available in \PSIthree\ for wavefunctions beyond SCF, so instead use the highest order analytical derivitives that are available for the type of wavefunction you have chosen. This information is given in Table \ref{table:methods}. For our CCSD example, the highest-order derivitives available are first, so {\tt dertype = first}. \begin{verbatim} % 6-31G** H2O Test computation of frequencies psi: ( label = "6-31G** SCF H2O" jobtype = freq wfn = ccsd reference = rhf dertype = first basis = "6-31G**" zmat = ( o h 1 roh h 1 roh 2 ahoh ) zvars = ( roh 0.96031231 ahoh 104.09437511 ) ) \end{verbatim} \subsection{More Advanced Input Options} If you wish to add comments to your input file, you can start any line with \% and the line will be a comment line. This can make the input file easier to understand because you can provide explainations about each keyword. Another way to make the input file more organized is to seperate it into sections that correspond to particular modules the calculation will use. This can be particularly helpful for more complicated computations which can utilize many of keywords. In the example below, a CCSD(T) computation for the BH molecule is performed using a cc-pVDZ basis set. The keywords are divided into sections and several new keywords are introduced, including ones to specify symmetry and orbital occupations. Orbitial occupations are specified by a list of integers enclosed in parentheses. These integers give the number of orbitials which belong to each irreducible representation in the point group. The ordering of the irreps are those given by Cotton in {\em Chemical Applications of Group Theory}. In this example, comment lines will be included to explain the new keywords used. \begin{verbatim} psi: ( wfn = ccsd_t reference = rhf ) default: ( label = "BH cc-pVDZ CCSD(T)" % Allocating memory for the calculation memory = (600.0 MB) % charge and multiplicity (2S+1) default to values of 0 and 1, respectively charge = 0 multp = 1 % The program will generally guess the symmetry of the molecule, but % it can be overridden. Here we specify C2V because only D2H and its % subgroups can be used by the program. symmetry = c2v % Number of doubly-occupied orbitals per irrep can be specified manually % if desired docc = (3 0 0 0) % Freeze the 1A1 orbital (Boron 1s-like) in the CCSD(T) computation frozen_docc = (1 0 0 0) ) % The input section contains information about the molecule and the basis % set. The geometry here is specified by cartesian coordinates. input: ( basis = "cc-pVDZ" units = angstroms geometry = ( ( b 0.0000 0.0000 0.0000) ( h 0.0000 0.0000 0.8000) ) origin = (0.0 0.0 0.0) ) % The modular input structure lets you specify convergence criteria for % each part of the computation separately scf: ( maxiter = 100 convergence = 11 ) \end{verbatim} The final example of this tutorial demonstrates an example of a complete-active-space self-consistent-field (CASSCF) computation. CAS computations require specification of several additional keywords because you must specify which orbitals you wish to be in the active space. The notation and ordering for specifying CAS orbitals is the same as for occupied orbitals. \begin{verbatim} % 6-31G** H2O Test CASSCF Energy Point psi: ( label = "6-31G** CASSCF H2O" jobtype = sp wfn = casscf reference = rhf % The restricted_docc orbitals are those which are optimized, but are not % in the active space. restricted_docc = (1 0 0 0) % The active space orbitals; here, the valence orbitals are chosen active = (3 0 1 2) basis = "6-31G**" zmat = ( o h 1 1.00 h 1 1.00 2 103.1 ) ) \end{verbatim} ����������������������������������������������������������������������psi3/doc/userman/userman.tex������������������������������������������������������������������������0000644�0001015�0000765�00000003637�10605565172�014634� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[12pt]{article} \usepackage{html} \usepackage{url} \setlength{\textheight}{9in} \setlength{\textwidth}{6.5in} \setlength{\hoffset}{0in} \setlength{\voffset}{0in} \setlength{\headheight}{0in} \setlength{\headsep}{0in} \setlength{\topmargin}{0in} \setlength{\oddsidemargin}{-0.05in} \setlength{\evensidemargin}{-0.05in} \setlength{\marginparsep}{0in} \setlength{\marginparwidth}{0in} \setlength{\parsep}{0.8ex} \setlength{\parskip}{1ex plus \fill} \baselineskip 18pt \renewcommand{\topfraction}{.8} \renewcommand{\bottomfraction}{.2} %%%%%%%%%%%%%%%%%%%%%%% % Start document %%%%%%%%%%%%%%%%%%%%%%% \setcounter{page}{1} \begin{document} %%%%%%%%%%%%%%%%%%%%%%% % Definitions %%%%%%%%%%%%%%%%%%%%%%% \include{macros} \begin{center} \ \\ \vspace{2.0in} {\bf {\Large The \PSIthree\ User's Manual}} \\ \vspace{0.5in} C.~David Sherrill,$^a$ T.~Daniel Crawford,$^b$ Edward F.~Valeev,$^b$ \\ Micah L. Abrams,$^b$ Rollin A.~King,$^c$ and Ashley Ringer$^a$ \\ \ \\ {\em $^a$Center for Computational Molecular Science and Technology, \mbox{Georgia Institute of Technology,} Atlanta, Georgia 30332-0400} \\ \vspace{0.1in} {\em $^b$Department of Chemistry, Virginia Tech, Blacksburg, Virginia 24061-0001} \\ \vspace{0.1in} {\em $^c$Department of Chemistry, Bethel College, St.\ Paul, Minnesota 55112-6999} \ \\ \vspace{0.3in} \PSIthree\ Version: \PSIversion \\ Created on: \today \\ Report bugs to: \PSIemail \\ \end{center} \thispagestyle{empty} \newpage \tableofcontents \newpage \input{introduction} \input{tutorial} \input{input} \input{methods} \input{scf} \input{mp2} \input{cc} \input{detci} \input{detcas} \input{opt} \input{oeprop} \input{psi-driver} \input{additional-docs} %\newpage \appendix \section{\PSIthree\ Reference}\label{PSI_Reference} \input{reference} %\input{appendix} %%%%%%%%%%%%%%%%%%%%%%% % References %%%%%%%%%%%%%%%%%%%%%%% \bibliographystyle{prsty} \bibliography{bibliography} \end{document} �������������������������������������������������������������������������������������������������psi3/include/���������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111650�011620� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/ccfiles.h������������������������������������������������������������������������������0000644�0001015�0000765�00000005305�10655507435�013422� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #ifndef _psi_include_ccfiles_h_ #define _psi_include_ccfiles_h_ /* The miscellaneous CC information file */ #define CC_INFO 100 /* One-electron integral files */ #define CC_OEI 101 /* Two-electron integral files */ /* pqnum rsnum */ #define CC_AINTS 102 #define CC_BINTS 103 #define CC_CINTS 104 #define CC_DINTS 105 #define CC_EINTS 106 #define CC_FINTS 107 /* Two-electron amplitudes, intermediates, and densities */ #define CC_DENOM 108 #define CC_TAMPS 109 #define CC_GAMMA 110 #define CC_MISC 111 #define CC_HBAR 112 #define CC_OEI_NEW 113 #define CC_GAMMA_NEW 114 #define CC_AINTS_NEW 115 #define CC_BINTS_NEW 116 #define CC_CINTS_NEW 117 #define CC_DINTS_NEW 118 #define CC_EINTS_NEW 119 #define CC_FINTS_NEW 120 /* ground state lambda and intermediates for excited states */ #define CC_LAMBDA 121 /* converged eigenvectors of hbar */ #define CC_RAMPS 122 #define CC_LAMPS 123 #define CC_LR 124 #define CC_DIIS_ERR 125 #define CC_DIIS_AMP 126 #define CC_TMP 127 #define CC_TMP0 128 #define CC_TMP1 129 #define CC_TMP2 130 #define CC_TMP3 131 #define CC_TMP4 132 #define CC_TMP5 133 #define CC_TMP6 134 #define CC_TMP7 135 #define CC_TMP8 135 #define CC_TMP9 137 #define CC_TMP10 138 #define CC_TMP11 139 /* temporary files for CCEOM and CCLAMBDA */ #define EOM_D 140 #define EOM_CME 141 #define EOM_Cme 142 #define EOM_CMNEF 143 #define EOM_Cmnef 144 #define EOM_CMnEf 145 #define EOM_SIA 146 #define EOM_Sia 147 #define EOM_SIJAB 148 #define EOM_Sijab 149 #define EOM_SIjAb 150 #define EOM_R 151 /* holds residual */ #define CC_GLG 152 /* left-hand psi for g.s. parts of cc-density */ #define CC_GL 153 /* left-hand psi for e.s. parts of cc-density */ #define CC_GR 154 /* right-hand eigenvector for cc-density */ #define EOM_TMP1 155 /* intermediates just for single contractions */ #define EOM_TMP0 156 /* temporary copies of density */ #define EOM_TMP_XI 157 /* intermediates for xi computation */ #define EOM_XI 158 /* xi = dE/dt amplitudes */ #define EOM_TMP 159 /* intermediates used more than once */ #define CC3_HET1 160 /* [H,e^T1] */ #define CC3_HC1 161 /* [H,C1] */ #define CC3_HC1ET1 162 /* [[H,e^T1],C1] */ #define CC3_MISC 163 /* various intermediates needed in CC3 codes */ #define CC2_HET1 164 /* [H,e^T1] */ /* Markers for the first and last file numbers */ #define CC_MIN CC_INFO #define CC_MAX CC2_HET1 #endif /* header guard */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/chkpt_params.h.in����������������������������������������������������������������������0000644�0001015�0000765�00000000570�10677071761�015074� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #ifndef _psi_include_chkptparams_h_ #define _psi_include_chkptparams_h_ #define MAXANGMOM 11 /* Up to k-functions (L=7) currently supported */ #define LINDEP_CUTOFF 1E-6 /* Threshold below which basis functions are considered linearly dependent (see canonical orthogonalization in Szabo in Ostlund) */ #endif /* header guard */ ����������������������������������������������������������������������������������������������������������������������������������������psi3/include/Makefile.in����������������������������������������������������������������������������0000644�0001015�0000765�00000001605�10764260211�013672� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .PHONY: default all install depend clean dclean targetclean default: all all: install_man: depend: clean: dclean: targetclean: top_srcdir = @top_srcdir@ prefix = @prefix@ srcdir = @srcdir@ incdir = @includedir@ VPATH = @srcdir@ top_objdir = .. MKDIRS = @MKDIRS@ INSTALL = @INSTALL@ INSTALL_INCLUDE = @INSTALL_INCLUDE@ HEADERS = psiconfig.h psitypes.h ccfiles.h masses.h physconst.h psifiles.h symmetry.h rgb.h vdw_radii.h chkpt_params.h install: install_inc install_inc: $(HEADERS) $(MKDIRS) $(DESTDIR)$(incdir) $(INSTALL_INCLUDE) $^ $(DESTDIR)$(incdir) $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=include/Makefile ./config.status ���������������������������������������������������������������������������������������������������������������������������psi3/include/masses.h�������������������������������������������������������������������������������0000644�0001015�0000765�00000217525�11112534205�013276� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** The new PSI standard header file for atomic masses. ** ** Created by Matt Leininger, July 1995 ** ** This file contains three arrays. The first is a list of atomic masses ** for a number of isotopes. The second is a list of isotope labels which ** correspond to the masses in the first array. The mass labels given ** are the same as those in W. D. Allen's INTDER95. The final array is a ** list of atomic masses for the first several elements, with the most ** common isotopomer mass given. This last array is most useful for ** converting an atomic number into an atomic mass. ** ** Please be sure that any modifications to this file are reflected in ** _all three_ arrays if necessary. ** ** Modifications: ** 10/08/99 EFV - Changed an2masses[0] to 0.0000 ** (ghost atom's weight should be 0) ** ** 08/16/02 EFV - Updated atomic_masses[] and an2masses for H-Ar using NIST database ** of Atomic Weights and Isotopic Compositions (www.nist.gov) ** ** 08/23/02 EFV - Use lithium isotope 7 as the default (most abundant) ** ** 03/03/08 MT - extended set of atoms by data from mathematica script. For an2masses ** for naturally occurring atoms, the most abundant is used, otherwise the ** atom with the longest halflife time. ** */ #ifndef _psi_include_masses_h_ #define _psi_include_masses_h_ #define LAST_ATOMIC_INDEX (118) static const char *atomic_labels[]= {"X","H","HE","LI","BE","B","C","N","O","F","NE","NA","MG","AL","SI", "P","S","CL","AR","K","CA","SC","TI","V","CR","MN","FE","CO","NI", "CU","ZN","GA","GE","AS","SE","BR","KR","RB","SR","Y","ZR","NB","MO", "TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","I","XE","CS","BA", "LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","TM","YB", "LU","HF","TA","W","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO", "AT","RN","FR","RA","AC","TH","PA","U","NP","PU","AM","CM","BK","CF", "ES","FM","MD","NO","LR","RF","DB","SG","BH","HS","MT","DS","RG", "UUB","UUT","UUQ","UUP","UUH","UUS","UUO"}; static double an2masses[]= {0.,1.00782503207,4.00260325415,7.016004548,9.012182201,11.009305406, 12,14.00307400478,15.99491461956,18.998403224,19.99244017542, 22.98976928087,23.985041699,26.981538627,27.97692653246,30.973761629, 31.972070999,34.968852682,39.96238312251,38.963706679,39.962590983, 44.955911909,47.947946281,50.943959507,51.940507472,54.938045141, 55.934937475,58.933195048,57.935342907,62.929597474,63.929142222, 68.925573587,73.921177767,74.921596478,79.916521271,78.918337087, 85.910610729,84.911789737,87.905612124,88.905848295,89.904704416, 92.906378058,97.905408169,98.906254747,101.904349312,102.905504292, 105.903485715,106.90509682,113.90335854,114.903878484,119.902194676, 120.903815686,129.906224399,126.904472681,131.904153457,132.905451932, 137.905247237,138.906353267,139.905438706,140.907652769,141.907723297, 144.912749023,151.919732425,152.921230339,157.924103912,158.925346757, 163.929174751,164.93032207,165.930293061,168.93421325,173.938862089, 174.940771819,179.946549953,180.947995763,183.950931188,186.955753109, 191.96148069,192.96292643,194.964791134,196.966568662,201.970643011, 204.974427541,207.976652071,208.980398734,208.982430435,210.987496271, 222.017577738,222.01755173,228.031070292,227.027752127,232.038055325, 231.03588399,238.050788247,237.048173444,242.058742611,243.06138108, 247.07035354,247.07030708,251.079586788,252.082978512,257.095104724, 258.098431319,255.093241131,260.105504,263.112547,255.107398,259.114500, 262.122892,263.128558,265.136151,281.162061,272.153615,283.171792,283.176451, 285.183698,287.191186,292.199786,291.206564,293.214670}; #define LAST_MASS_INDEX (3297) static const char *mass_labels[]= {"H","H1","H2","D","H3","T","H4","H5","H6","H7","HE","HE3","HE4", "HE5","HE6","HE7","HE8","HE9","HE10","LI","LI3","LI4","LI5","LI6", "LI7","LI8","LI9","LI10","LI11","LI12","BE","BE5","BE6","BE7","BE8", "BE9","BE10","BE11","BE12","BE13","BE14","BE15","BE16","B","B6","B7", "B8","B9","B10","B11","B12","B13","B14","B15","B16","B17","B18","B19", "C","C8","C9","C10","C11","C12","C13","C14","C15","C16","C17","C18", "C19","C20","C21","C22","N","N10","N11","N12","N13","N14","N15","N16", "N17","N18","N19","N20","N21","N22","N23","N24","N25","O","O12","O13", "O14","O15","O16","O17","O18","O19","O20","O21","O22","O23","O24", "O25","O26","O27","O28","F","F14","F15","F16","F17","F18","F19","F20", "F21","F22","F23","F24","F25","F26","F27","F28","F29","F30","F31", "NE","NE16","NE17","NE18","NE19","NE20","NE21","NE22","NE23","NE24", "NE25","NE26","NE27","NE28","NE29","NE30","NE31","NE32","NE33","NE34", "NA","NA18","NA19","NA20","NA21","NA22","NA23","NA24","NA25","NA26", "NA27","NA28","NA29","NA30","NA31","NA32","NA33","NA34","NA35","NA36", "NA37","MG","MG19","MG20","MG21","MG22","MG23","MG24","MG25","MG26", "MG27","MG28","MG29","MG30","MG31","MG32","MG33","MG34","MG35","MG36", "MG37","MG38","MG39","MG40","AL","AL21","AL22","AL23","AL24","AL25", "AL26","AL27","AL28","AL29","AL30","AL31","AL32","AL33","AL34","AL35", "AL36","AL37","AL38","AL39","AL40","AL41","AL42","SI","SI22","SI23", "SI24","SI25","SI26","SI27","SI28","SI29","SI30","SI31","SI32","SI33", "SI34","SI35","SI36","SI37","SI38","SI39","SI40","SI41","SI42","SI43", "SI44","P","P24","P25","P26","P27","P28","P29","P30","P31","P32", "P33","P34","P35","P36","P37","P38","P39","P40","P41","P42","P43", "P44","P45","P46","S","S26","S27","S28","S29","S30","S31","S32","S33", "S34","S35","S36","S37","S38","S39","S40","S41","S42","S43","S44", "S45","S46","S47","S48","S49","CL","CL28","CL29","CL30","CL31","CL32", "CL33","CL34","CL35","CL36","CL37","CL38","CL39","CL40","CL41","CL42", "CL43","CL44","CL45","CL46","CL47","CL48","CL49","CL50","CL51","AR", "AR30","AR31","AR32","AR33","AR34","AR35","AR36","AR37","AR38","AR39", "AR40","AR41","AR42","AR43","AR44","AR45","AR46","AR47","AR48","AR49", "AR50","AR51","AR52","AR53","K","K32","K33","K34","K35","K36","K37", "K38","K39","K40","K41","K42","K43","K44","K45","K46","K47","K48", "K49","K50","K51","K52","K53","K54","K55","CA","CA34","CA35","CA36", "CA37","CA38","CA39","CA40","CA41","CA42","CA43","CA44","CA45","CA46", "CA47","CA48","CA49","CA50","CA51","CA52","CA53","CA54","CA55","CA56", "CA57","SC","SC36","SC37","SC38","SC39","SC40","SC41","SC42","SC43", "SC44","SC45","SC46","SC47","SC48","SC49","SC50","SC51","SC52","SC53", "SC54","SC55","SC56","SC57","SC58","SC59","SC60","TI","TI38","TI39", "TI40","TI41","TI42","TI43","TI44","TI45","TI46","TI47","TI48","TI49", "TI50","TI51","TI52","TI53","TI54","TI55","TI56","TI57","TI58","TI59", "TI60","TI61","TI62","TI63","V","V40","V41","V42","V43","V44","V45", "V46","V47","V48","V49","V50","V51","V52","V53","V54","V55","V56", "V57","V58","V59","V60","V61","V62","V63","V64","V65","CR","CR42", "CR43","CR44","CR45","CR46","CR47","CR48","CR49","CR50","CR51","CR52", "CR53","CR54","CR55","CR56","CR57","CR58","CR59","CR60","CR61","CR62", "CR63","CR64","CR65","CR66","CR67","MN","MN44","MN45","MN46","MN47", "MN48","MN49","MN50","MN51","MN52","MN53","MN54","MN55","MN56","MN57", "MN58","MN59","MN60","MN61","MN62","MN63","MN64","MN65","MN66","MN67", "MN68","MN69","FE","FE45","FE46","FE47","FE48","FE49","FE50","FE51", "FE52","FE53","FE54","FE55","FE56","FE57","FE58","FE59","FE60","FE61", "FE62","FE63","FE64","FE65","FE66","FE67","FE68","FE69","FE70","FE71", "FE72","CO","CO47","CO48","CO49","CO50","CO51","CO52","CO53","CO54", "CO55","CO56","CO57","CO58","CO59","CO60","CO61","CO62","CO63","CO64", "CO65","CO66","CO67","CO68","CO69","CO70","CO71","CO72","CO73","CO74", "CO75","NI","NI48","NI49","NI50","NI51","NI52","NI53","NI54","NI55", "NI56","NI57","NI58","NI59","NI60","NI61","NI62","NI63","NI64","NI65", "NI66","NI67","NI68","NI69","NI70","NI71","NI72","NI73","NI74","NI75", "NI76","NI77","NI78","CU","CU52","CU53","CU54","CU55","CU56","CU57", "CU58","CU59","CU60","CU61","CU62","CU63","CU64","CU65","CU66","CU67", "CU68","CU69","CU70","CU71","CU72","CU73","CU74","CU75","CU76","CU77", "CU78","CU79","CU80","ZN","ZN54","ZN55","ZN56","ZN57","ZN58","ZN59", "ZN60","ZN61","ZN62","ZN63","ZN64","ZN65","ZN66","ZN67","ZN68","ZN69", "ZN70","ZN71","ZN72","ZN73","ZN74","ZN75","ZN76","ZN77","ZN78","ZN79", "ZN80","ZN81","ZN82","ZN83","GA","GA56","GA57","GA58","GA59","GA60", "GA61","GA62","GA63","GA64","GA65","GA66","GA67","GA68","GA69","GA70", "GA71","GA72","GA73","GA74","GA75","GA76","GA77","GA78","GA79","GA80", "GA81","GA82","GA83","GA84","GA85","GA86","GE","GE58","GE59","GE60", "GE61","GE62","GE63","GE64","GE65","GE66","GE67","GE68","GE69","GE70", "GE71","GE72","GE73","GE74","GE75","GE76","GE77","GE78","GE79","GE80", "GE81","GE82","GE83","GE84","GE85","GE86","GE87","GE88","GE89","AS", "AS60","AS61","AS62","AS63","AS64","AS65","AS66","AS67","AS68","AS69", "AS70","AS71","AS72","AS73","AS74","AS75","AS76","AS77","AS78","AS79", "AS80","AS81","AS82","AS83","AS84","AS85","AS86","AS87","AS88","AS89", "AS90","AS91","AS92","SE","SE65","SE66","SE67","SE68","SE69","SE70", "SE71","SE72","SE73","SE74","SE75","SE76","SE77","SE78","SE79","SE80", "SE81","SE82","SE83","SE84","SE85","SE86","SE87","SE88","SE89","SE90", "SE91","SE92","SE93","SE94","BR","BR67","BR68","BR69","BR70","BR71", "BR72","BR73","BR74","BR75","BR76","BR77","BR78","BR79","BR80","BR81", "BR82","BR83","BR84","BR85","BR86","BR87","BR88","BR89","BR90","BR91", "BR92","BR93","BR94","BR95","BR96","BR97","KR","KR69","KR70","KR71", "KR72","KR73","KR74","KR75","KR76","KR77","KR78","KR79","KR80","KR81", "KR82","KR83","KR84","KR85","KR86","KR87","KR88","KR89","KR90","KR91", "KR92","KR93","KR94","KR95","KR96","KR97","KR98","KR99","KR100","RB", "RB71","RB72","RB73","RB74","RB75","RB76","RB77","RB78","RB79","RB80", "RB81","RB82","RB83","RB84","RB85","RB86","RB87","RB88","RB89","RB90", "RB91","RB92","RB93","RB94","RB95","RB96","RB97","RB98","RB99", "RB100","RB101","RB102","SR","SR73","SR74","SR75","SR76","SR77", "SR78","SR79","SR80","SR81","SR82","SR83","SR84","SR85","SR86","SR87", "SR88","SR89","SR90","SR91","SR92","SR93","SR94","SR95","SR96","SR97", "SR98","SR99","SR100","SR101","SR102","SR103","SR104","SR105","Y", "Y76","Y77","Y78","Y79","Y80","Y81","Y82","Y83","Y84","Y85","Y86", "Y87","Y88","Y89","Y90","Y91","Y92","Y93","Y94","Y95","Y96","Y97", "Y98","Y99","Y100","Y101","Y102","Y103","Y104","Y105","Y106","Y107", "Y108","ZR","ZR78","ZR79","ZR80","ZR81","ZR82","ZR83","ZR84","ZR85", "ZR86","ZR87","ZR88","ZR89","ZR90","ZR91","ZR92","ZR93","ZR94","ZR95", "ZR96","ZR97","ZR98","ZR99","ZR100","ZR101","ZR102","ZR103","ZR104", "ZR105","ZR106","ZR107","ZR108","ZR109","ZR110","NB","NB81","NB82", "NB83","NB84","NB85","NB86","NB87","NB88","NB89","NB90","NB91","NB92", "NB93","NB94","NB95","NB96","NB97","NB98","NB99","NB100","NB101", "NB102","NB103","NB104","NB105","NB106","NB107","NB108","NB109", "NB110","NB111","NB112","NB113","MO","MO83","MO84","MO85","MO86", "MO87","MO88","MO89","MO90","MO91","MO92","MO93","MO94","MO95","MO96", "MO97","MO98","MO99","MO100","MO101","MO102","MO103","MO104","MO105", "MO106","MO107","MO108","MO109","MO110","MO111","MO112","MO113", "MO114","MO115","TC","TC85","TC86","TC87","TC88","TC89","TC90","TC91", "TC92","TC93","TC94","TC95","TC96","TC97","TC98","TC99","TC100", "TC101","TC102","TC103","TC104","TC105","TC106","TC107","TC108", "TC109","TC110","TC111","TC112","TC113","TC114","TC115","TC116", "TC117","TC118","RU","RU87","RU88","RU89","RU90","RU91","RU92","RU93", "RU94","RU95","RU96","RU97","RU98","RU99","RU100","RU101","RU102", "RU103","RU104","RU105","RU106","RU107","RU108","RU109","RU110", "RU111","RU112","RU113","RU114","RU115","RU116","RU117","RU118", "RU119","RU120","RH","RH89","RH90","RH91","RH92","RH93","RH94","RH95", "RH96","RH97","RH98","RH99","RH100","RH101","RH102","RH103","RH104", "RH105","RH106","RH107","RH108","RH109","RH110","RH111","RH112", "RH113","RH114","RH115","RH116","RH117","RH118","RH119","RH120", "RH121","RH122","PD","PD91","PD92","PD93","PD94","PD95","PD96","PD97", "PD98","PD99","PD100","PD101","PD102","PD103","PD104","PD105","PD106", "PD107","PD108","PD109","PD110","PD111","PD112","PD113","PD114", "PD115","PD116","PD117","PD118","PD119","PD120","PD121","PD122", "PD123","PD124","AG","AG93","AG94","AG95","AG96","AG97","AG98","AG99", "AG100","AG101","AG102","AG103","AG104","AG105","AG106","AG107", "AG108","AG109","AG110","AG111","AG112","AG113","AG114","AG115", "AG116","AG117","AG118","AG119","AG120","AG121","AG122","AG123", "AG124","AG125","AG126","AG127","AG128","AG129","AG130","CD","CD95", "CD96","CD97","CD98","CD99","CD100","CD101","CD102","CD103","CD104", "CD105","CD106","CD107","CD108","CD109","CD110","CD111","CD112", "CD113","CD114","CD115","CD116","CD117","CD118","CD119","CD120", "CD121","CD122","CD123","CD124","CD125","CD126","CD127","CD128", "CD129","CD130","CD131","CD132","IN","IN97","IN98","IN99","IN100", "IN101","IN102","IN103","IN104","IN105","IN106","IN107","IN108", "IN109","IN110","IN111","IN112","IN113","IN114","IN115","IN116", "IN117","IN118","IN119","IN120","IN121","IN122","IN123","IN124", "IN125","IN126","IN127","IN128","IN129","IN130","IN131","IN132", "IN133","IN134","IN135","SN","SN99","SN100","SN101","SN102","SN103", "SN104","SN105","SN106","SN107","SN108","SN109","SN110","SN111", "SN112","SN113","SN114","SN115","SN116","SN117","SN118","SN119", "SN120","SN121","SN122","SN123","SN124","SN125","SN126","SN127", "SN128","SN129","SN130","SN131","SN132","SN133","SN134","SN135", "SN136","SN137","SB","SB103","SB104","SB105","SB106","SB107","SB108", "SB109","SB110","SB111","SB112","SB113","SB114","SB115","SB116", "SB117","SB118","SB119","SB120","SB121","SB122","SB123","SB124", "SB125","SB126","SB127","SB128","SB129","SB130","SB131","SB132", "SB133","SB134","SB135","SB136","SB137","SB138","SB139","TE","TE105", "TE106","TE107","TE108","TE109","TE110","TE111","TE112","TE113", "TE114","TE115","TE116","TE117","TE118","TE119","TE120","TE121", "TE122","TE123","TE124","TE125","TE126","TE127","TE128","TE129", "TE130","TE131","TE132","TE133","TE134","TE135","TE136","TE137", "TE138","TE139","TE140","TE141","TE142","I","I108","I109","I110", "I111","I112","I113","I114","I115","I116","I117","I118","I119","I120", "I121","I122","I123","I124","I125","I126","I127","I128","I129","I130", "I131","I132","I133","I134","I135","I136","I137","I138","I139","I140", "I141","I142","I143","I144","XE","XE110","XE111","XE112","XE113", "XE114","XE115","XE116","XE117","XE118","XE119","XE120","XE121", "XE122","XE123","XE124","XE125","XE126","XE127","XE128","XE129", "XE130","XE131","XE132","XE133","XE134","XE135","XE136","XE137", "XE138","XE139","XE140","XE141","XE142","XE143","XE144","XE145", "XE146","XE147","CS","CS112","CS113","CS114","CS115","CS116","CS117", "CS118","CS119","CS120","CS121","CS122","CS123","CS124","CS125", "CS126","CS127","CS128","CS129","CS130","CS131","CS132","CS133", "CS134","CS135","CS136","CS137","CS138","CS139","CS140","CS141", "CS142","CS143","CS144","CS145","CS146","CS147","CS148","CS149", "CS150","CS151","BA","BA114","BA115","BA116","BA117","BA118","BA119", "BA120","BA121","BA122","BA123","BA124","BA125","BA126","BA127", "BA128","BA129","BA130","BA131","BA132","BA133","BA134","BA135", "BA136","BA137","BA138","BA139","BA140","BA141","BA142","BA143", "BA144","BA145","BA146","BA147","BA148","BA149","BA150","BA151", "BA152","BA153","LA","LA117","LA118","LA119","LA120","LA121","LA122", "LA123","LA124","LA125","LA126","LA127","LA128","LA129","LA130", "LA131","LA132","LA133","LA134","LA135","LA136","LA137","LA138", "LA139","LA140","LA141","LA142","LA143","LA144","LA145","LA146", "LA147","LA148","LA149","LA150","LA151","LA152","LA153","LA154", "LA155","CE","CE119","CE120","CE121","CE122","CE123","CE124","CE125", "CE126","CE127","CE128","CE129","CE130","CE131","CE132","CE133", "CE134","CE135","CE136","CE137","CE138","CE139","CE140","CE141", "CE142","CE143","CE144","CE145","CE146","CE147","CE148","CE149", "CE150","CE151","CE152","CE153","CE154","CE155","CE156","CE157","PR", "PR121","PR122","PR123","PR124","PR125","PR126","PR127","PR128", "PR129","PR130","PR131","PR132","PR133","PR134","PR135","PR136", "PR137","PR138","PR139","PR140","PR141","PR142","PR143","PR144", "PR145","PR146","PR147","PR148","PR149","PR150","PR151","PR152", "PR153","PR154","PR155","PR156","PR157","PR158","PR159","ND","ND124", "ND125","ND126","ND127","ND128","ND129","ND130","ND131","ND132", "ND133","ND134","ND135","ND136","ND137","ND138","ND139","ND140", "ND141","ND142","ND143","ND144","ND145","ND146","ND147","ND148", "ND149","ND150","ND151","ND152","ND153","ND154","ND155","ND156", "ND157","ND158","ND159","ND160","ND161","PM","PM126","PM127","PM128", "PM129","PM130","PM131","PM132","PM133","PM134","PM135","PM136", "PM137","PM138","PM139","PM140","PM141","PM142","PM143","PM144", "PM145","PM146","PM147","PM148","PM149","PM150","PM151","PM152", "PM153","PM154","PM155","PM156","PM157","PM158","PM159","PM160", "PM161","PM162","PM163","SM","SM128","SM129","SM130","SM131","SM132", "SM133","SM134","SM135","SM136","SM137","SM138","SM139","SM140", "SM141","SM142","SM143","SM144","SM145","SM146","SM147","SM148", "SM149","SM150","SM151","SM152","SM153","SM154","SM155","SM156", "SM157","SM158","SM159","SM160","SM161","SM162","SM163","SM164", "SM165","EU","EU130","EU131","EU132","EU133","EU134","EU135","EU136", "EU137","EU138","EU139","EU140","EU141","EU142","EU143","EU144", "EU145","EU146","EU147","EU148","EU149","EU150","EU151","EU152", "EU153","EU154","EU155","EU156","EU157","EU158","EU159","EU160", "EU161","EU162","EU163","EU164","EU165","EU166","EU167","GD","GD134", "GD135","GD136","GD137","GD138","GD139","GD140","GD141","GD142", "GD143","GD144","GD145","GD146","GD147","GD148","GD149","GD150", "GD151","GD152","GD153","GD154","GD155","GD156","GD157","GD158", "GD159","GD160","GD161","GD162","GD163","GD164","GD165","GD166", "GD167","GD168","GD169","TB","TB136","TB137","TB138","TB139","TB140", "TB141","TB142","TB143","TB144","TB145","TB146","TB147","TB148", "TB149","TB150","TB151","TB152","TB153","TB154","TB155","TB156", "TB157","TB158","TB159","TB160","TB161","TB162","TB163","TB164", "TB165","TB166","TB167","TB168","TB169","TB170","TB171","DY","DY138", "DY139","DY140","DY141","DY142","DY143","DY144","DY145","DY146", "DY147","DY148","DY149","DY150","DY151","DY152","DY153","DY154", "DY155","DY156","DY157","DY158","DY159","DY160","DY161","DY162", "DY163","DY164","DY165","DY166","DY167","DY168","DY169","DY170", "DY171","DY172","DY173","HO","HO140","HO141","HO142","HO143","HO144", "HO145","HO146","HO147","HO148","HO149","HO150","HO151","HO152", "HO153","HO154","HO155","HO156","HO157","HO158","HO159","HO160", "HO161","HO162","HO163","HO164","HO165","HO166","HO167","HO168", "HO169","HO170","HO171","HO172","HO173","HO174","HO175","ER","ER143", "ER144","ER145","ER146","ER147","ER148","ER149","ER150","ER151", "ER152","ER153","ER154","ER155","ER156","ER157","ER158","ER159", "ER160","ER161","ER162","ER163","ER164","ER165","ER166","ER167", "ER168","ER169","ER170","ER171","ER172","ER173","ER174","ER175", "ER176","ER177","TM","TM145","TM146","TM147","TM148","TM149","TM150", "TM151","TM152","TM153","TM154","TM155","TM156","TM157","TM158", "TM159","TM160","TM161","TM162","TM163","TM164","TM165","TM166", "TM167","TM168","TM169","TM170","TM171","TM172","TM173","TM174", "TM175","TM176","TM177","TM178","TM179","YB","YB148","YB149","YB150", "YB151","YB152","YB153","YB154","YB155","YB156","YB157","YB158", "YB159","YB160","YB161","YB162","YB163","YB164","YB165","YB166", "YB167","YB168","YB169","YB170","YB171","YB172","YB173","YB174", "YB175","YB176","YB177","YB178","YB179","YB180","YB181","LU","LU150", "LU151","LU152","LU153","LU154","LU155","LU156","LU157","LU158", "LU159","LU160","LU161","LU162","LU163","LU164","LU165","LU166", "LU167","LU168","LU169","LU170","LU171","LU172","LU173","LU174", "LU175","LU176","LU177","LU178","LU179","LU180","LU181","LU182", "LU183","LU184","HF","HF153","HF154","HF155","HF156","HF157","HF158", "HF159","HF160","HF161","HF162","HF163","HF164","HF165","HF166", "HF167","HF168","HF169","HF170","HF171","HF172","HF173","HF174", "HF175","HF176","HF177","HF178","HF179","HF180","HF181","HF182", "HF183","HF184","HF185","HF186","HF187","HF188","TA","TA155","TA156", "TA157","TA158","TA159","TA160","TA161","TA162","TA163","TA164", "TA165","TA166","TA167","TA168","TA169","TA170","TA171","TA172", "TA173","TA174","TA175","TA176","TA177","TA178","TA179","TA180", "TA181","TA182","TA183","TA184","TA185","TA186","TA187","TA188", "TA189","TA190","W","W158","W159","W160","W161","W162","W163","W164", "W165","W166","W167","W168","W169","W170","W171","W172","W173","W174", "W175","W176","W177","W178","W179","W180","W181","W182","W183","W184", "W185","W186","W187","W188","W189","W190","W191","W192","RE","RE160", "RE161","RE162","RE163","RE164","RE165","RE166","RE167","RE168", "RE169","RE170","RE171","RE172","RE173","RE174","RE175","RE176", "RE177","RE178","RE179","RE180","RE181","RE182","RE183","RE184", "RE185","RE186","RE187","RE188","RE189","RE190","RE191","RE192", "RE193","RE194","OS","OS162","OS163","OS164","OS165","OS166","OS167", "OS168","OS169","OS170","OS171","OS172","OS173","OS174","OS175", "OS176","OS177","OS178","OS179","OS180","OS181","OS182","OS183", "OS184","OS185","OS186","OS187","OS188","OS189","OS190","OS191", "OS192","OS193","OS194","OS195","OS196","IR","IR164","IR165","IR166", "IR167","IR168","IR169","IR170","IR171","IR172","IR173","IR174", "IR175","IR176","IR177","IR178","IR179","IR180","IR181","IR182", "IR183","IR184","IR185","IR186","IR187","IR188","IR189","IR190", "IR191","IR192","IR193","IR194","IR195","IR196","IR197","IR198", "IR199","PT","PT166","PT167","PT168","PT169","PT170","PT171","PT172", "PT173","PT174","PT175","PT176","PT177","PT178","PT179","PT180", "PT181","PT182","PT183","PT184","PT185","PT186","PT187","PT188", "PT189","PT190","PT191","PT192","PT193","PT194","PT195","PT196", "PT197","PT198","PT199","PT200","PT201","PT202","AU","AU169","AU170", "AU171","AU172","AU173","AU174","AU175","AU176","AU177","AU178", "AU179","AU180","AU181","AU182","AU183","AU184","AU185","AU186", "AU187","AU188","AU189","AU190","AU191","AU192","AU193","AU194", "AU195","AU196","AU197","AU198","AU199","AU200","AU201","AU202", "AU203","AU204","AU205","HG","HG171","HG172","HG173","HG174","HG175", "HG176","HG177","HG178","HG179","HG180","HG181","HG182","HG183", "HG184","HG185","HG186","HG187","HG188","HG189","HG190","HG191", "HG192","HG193","HG194","HG195","HG196","HG197","HG198","HG199", "HG200","HG201","HG202","HG203","HG204","HG205","HG206","HG207", "HG208","HG209","HG210","TL","TL176","TL177","TL178","TL179","TL180", "TL181","TL182","TL183","TL184","TL185","TL186","TL187","TL188", "TL189","TL190","TL191","TL192","TL193","TL194","TL195","TL196", "TL197","TL198","TL199","TL200","TL201","TL202","TL203","TL204", "TL205","TL206","TL207","TL208","TL209","TL210","TL211","TL212","PB", "PB178","PB179","PB180","PB181","PB182","PB183","PB184","PB185", "PB186","PB187","PB188","PB189","PB190","PB191","PB192","PB193", "PB194","PB195","PB196","PB197","PB198","PB199","PB200","PB201", "PB202","PB203","PB204","PB205","PB206","PB207","PB208","PB209", "PB210","PB211","PB212","PB213","PB214","PB215","BI","BI184","BI185", "BI186","BI187","BI188","BI189","BI190","BI191","BI192","BI193", "BI194","BI195","BI196","BI197","BI198","BI199","BI200","BI201", "BI202","BI203","BI204","BI205","BI206","BI207","BI208","BI209", "BI210","BI211","BI212","BI213","BI214","BI215","BI216","BI217", "BI218","PO","PO188","PO189","PO190","PO191","PO192","PO193","PO194", "PO195","PO196","PO197","PO198","PO199","PO200","PO201","PO202", "PO203","PO204","PO205","PO206","PO207","PO208","PO209","PO210", "PO211","PO212","PO213","PO214","PO215","PO216","PO217","PO218", "PO219","PO220","AT","AT193","AT194","AT195","AT196","AT197","AT198", "AT199","AT200","AT201","AT202","AT203","AT204","AT205","AT206", "AT207","AT208","AT209","AT210","AT211","AT212","AT213","AT214", "AT215","AT216","AT217","AT218","AT219","AT220","AT221","AT222", "AT223","RN","RN195","RN196","RN197","RN198","RN199","RN200","RN201", "RN202","RN203","RN204","RN205","RN206","RN207","RN208","RN209", "RN210","RN211","RN212","RN213","RN214","RN215","RN216","RN217", "RN218","RN219","RN220","RN221","RN222","RN223","RN224","RN225", "RN226","RN227","RN228","FR","FR199","FR200","FR201","FR202","FR203", "FR204","FR205","FR206","FR207","FR208","FR209","FR210","FR211", "FR212","FR213","FR214","FR215","FR216","FR217","FR218","FR219", "FR220","FR221","FR222","FR223","FR224","FR225","FR226","FR227", "FR228","FR229","FR230","FR231","FR232","RA","RA202","RA203","RA204", "RA205","RA206","RA207","RA208","RA209","RA210","RA211","RA212", "RA213","RA214","RA215","RA216","RA217","RA218","RA219","RA220", "RA221","RA222","RA223","RA224","RA225","RA226","RA227","RA228", "RA229","RA230","RA231","RA232","RA233","RA234","AC","AC206","AC207", "AC208","AC209","AC210","AC211","AC212","AC213","AC214","AC215", "AC216","AC217","AC218","AC219","AC220","AC221","AC222","AC223", "AC224","AC225","AC226","AC227","AC228","AC229","AC230","AC231", "AC232","AC233","AC234","AC235","AC236","TH","TH209","TH210","TH211", "TH212","TH213","TH214","TH215","TH216","TH217","TH218","TH219", "TH220","TH221","TH222","TH223","TH224","TH225","TH226","TH227", "TH228","TH229","TH230","TH231","TH232","TH233","TH234","TH235", "TH236","TH237","TH238","PA","PA212","PA213","PA214","PA215","PA216", "PA217","PA218","PA219","PA220","PA221","PA222","PA223","PA224", "PA225","PA226","PA227","PA228","PA229","PA230","PA231","PA232", "PA233","PA234","PA235","PA236","PA237","PA238","PA239","PA240","U", "U217","U218","U219","U220","U221","U222","U223","U224","U225","U226", "U227","U228","U229","U230","U231","U232","U233","U234","U235","U236", "U237","U238","U239","U240","U241","U242","NP","NP225","NP226", "NP227","NP228","NP229","NP230","NP231","NP232","NP233","NP234", "NP235","NP236","NP237","NP238","NP239","NP240","NP241","NP242", "NP243","NP244","PU","PU228","PU229","PU230","PU231","PU232","PU233", "PU234","PU235","PU236","PU237","PU238","PU239","PU240","PU241", "PU242","PU243","PU244","PU245","PU246","PU247","AM","AM231","AM232", "AM233","AM234","AM235","AM236","AM237","AM238","AM239","AM240", "AM241","AM242","AM243","AM244","AM245","AM246","AM247","AM248", "AM249","CM","CM233","CM234","CM235","CM236","CM237","CM238","CM239", "CM240","CM241","CM242","CM243","CM244","CM245","CM246","CM247", "CM248","CM249","CM250","CM251","CM252","BK","BK235","BK236","BK237", "BK238","BK239","BK240","BK241","BK242","BK243","BK244","BK245", "BK246","BK247","BK248","BK249","BK250","BK251","BK252","BK253", "BK254","CF","CF237","CF238","CF239","CF240","CF241","CF242","CF243", "CF244","CF245","CF246","CF247","CF248","CF249","CF250","CF251", "CF252","CF253","CF254","CF255","CF256","ES","ES240","ES241","ES242", "ES243","ES244","ES245","ES246","ES247","ES248","ES249","ES250", "ES251","ES252","ES253","ES254","ES255","ES256","ES257","ES258","FM", "FM242","FM243","FM244","FM245","FM246","FM247","FM248","FM249", "FM250","FM251","FM252","FM253","FM254","FM255","FM256","FM257", "FM258","FM259","FM260","MD","MD245","MD246","MD247","MD248","MD249", "MD250","MD251","MD252","MD253","MD254","MD255","MD256","MD257", "MD258","MD259","MD260","MD261","MD262","NO","NO248","NO249","NO250", "NO251","NO252","NO253","NO254","NO255","NO256","NO257","NO258", "NO259","NO260","NO261","NO262","NO263","NO264","LR","LR251","LR252", "LR253","LR254","LR255","LR256","LR257","LR258","LR259","LR260", "LR261","LR262","LR263","LR264","LR265","LR266","RF","RF253","RF254", "RF255","RF256","RF257","RF258","RF259","RF260","RF261","RF262", "RF263","RF264","RF265","RF266","RF267","RF268","DB","DB255","DB256", "DB257","DB258","DB259","DB260","DB261","DB262","DB263","DB264", "DB265","DB266","DB267","DB268","DB269","DB270","SG","SG258","SG259", "SG260","SG261","SG262","SG263","SG264","SG265","SG266","SG267", "SG268","SG269","SG270","SG271","SG272","SG273","BH","BH260","BH261", "BH262","BH263","BH264","BH265","BH266","BH267","BH268","BH269", "BH270","BH271","BH272","BH273","BH274","BH275","HS","HS263","HS264", "HS265","HS266","HS267","HS268","HS269","HS270","HS271","HS272", "HS273","HS274","HS275","HS276","HS277","MT","MT265","MT266","MT267", "MT268","MT269","MT270","MT271","MT272","MT273","MT274","MT275", "MT276","MT277","MT278","MT279","DS","DS267","DS268","DS269","DS270", "DS271","DS272","DS273","DS274","DS275","DS276","DS277","DS278", "DS279","DS280","DS281","RG","RG272","RG273","RG274","RG275","RG276", "RG277","RG278","RG279","RG280","RG281","RG282","RG283","UUB", "UUB277","UUB278","UUB279","UUB280","UUB281","UUB282","UUB283", "UUB284","UUB285","UUT","UUT283","UUT284","UUT285","UUT286","UUT287", "UUQ","UUQ285","UUQ286","UUQ287","UUQ288","UUQ289","UUP","UUP287", "UUP288","UUP289","UUP290","UUP291","UUH","UUH289","UUH290","UUH291", "UUH292","UUS","UUS291","UUS292","UUO","UUO293"}; static double atomic_masses[] = {1.00782503207, 1.00782503207, 2.01410177785, 2.01410177785, 3.01604927767, 3.01604927767, 4.027806424, 5.035311488, 6.044942594, 7.052749, 4.00260325415, 3.01602931914, 4.00260325415, 5.012223624, 6.018889124, 7.028020618, 8.033921897, 9.043950286, 10.052398837, 7.016004548, 3.030775, 4.027185558, 5.0125378, 6.015122794, 7.016004548, 8.022487362, 9.026789505, 10.035481259, 11.043797715, 12.053780, 9.012182201, 5.040790, 6.019726317, 7.016929828, 8.005305103, 9.012182201, 10.013533818, 11.021657749, 12.026920737, 13.035693007, 14.04289292, 15.053460, 16.061920, 11.009305406, 6.046810, 7.029917901, 8.024607233, 9.013328782, 10.012936992, 11.009305406, 12.014352104, 13.017780217, 14.025404009, 15.031103021, 16.039808829, 17.046989906, 18.056170, 19.063730, 12, 8.037675025, 9.031036689, 10.016853228, 11.011433613, 12, 13.00335483778, 14.0032419887, 15.010599256, 16.014701252, 17.022586116, 18.026759354, 19.034805018, 20.040319754, 21.049340, 22.057200, 14.00307400478, 10.041653674, 11.026090956, 12.018613197, 13.005738609, 14.00307400478, 15.00010889823, 16.006101658, 17.008450261, 18.014078959, 19.017028697, 20.023365807, 21.02710824, 22.034394934, 23.041220, 24.051040, 25.060660, 15.99491461956, 12.034404895, 13.024812213, 14.00859625, 15.003065617, 15.99491461956, 16.999131703, 17.999161001, 19.00358013, 20.004076742, 21.008655886, 22.009966947, 23.015687659, 24.020472917, 25.029460, 26.038340, 27.048260, 28.057810, 18.998403224, 14.035060, 15.018009103, 16.011465724, 17.002095237, 18.000937956, 18.998403224, 19.999981315, 20.999948951, 22.002998815, 23.003574631, 24.008115485, 25.012101747, 26.019615555, 27.026760086, 28.035670, 29.043260, 30.052500, 31.060429, 19.99244017542, 16.025761262, 17.017671504, 18.005708213, 19.001880248, 19.99244017542, 20.993846684, 21.991385113, 22.994466904, 23.993610779, 24.997736888, 26.000461206, 27.007589903, 28.012071575, 29.019385933, 30.024801045, 31.033110, 32.040020, 33.049380, 34.057028, 22.98976928087, 18.025969, 19.013877499, 20.007351328, 20.997655206, 21.994436425, 22.98976928087, 23.990962782, 24.989953968, 25.992633, 26.994076788, 27.998938, 29.002861, 30.008976, 31.013585452, 32.02046656, 33.026719756, 34.035170, 35.042493, 36.051480, 37.059340, 23.985041699, 19.03547, 20.018862545, 21.01171291, 21.999573843, 22.994123669, 23.985041699, 24.985836917, 25.982592929, 26.984340585, 27.983876825, 28.9886, 29.990434, 30.996546, 31.998975, 33.005254, 34.009456424, 35.017340, 36.023000, 37.031400, 38.037570, 39.046772, 40.053930, 26.981538627, 21.028040, 22.019520, 23.007267432, 23.999938865, 24.990428095, 25.986891692, 26.981538627, 27.981910306, 28.980445046, 29.982960256, 30.983946619, 31.988124489, 32.990843336, 33.996851837, 34.999860235, 36.006207204, 37.01067782, 38.017231021, 39.02297, 40.031450, 41.038330, 42.046890, 27.97692653246, 22.034530, 23.025520, 24.011545616, 25.004105574, 25.992329921, 26.986704905, 27.97692653246, 28.9764947, 29.973770171, 30.975363226999998, 31.974148082, 32.97800022, 33.978575524, 34.984583575, 35.986599477, 36.99293608, 37.995633601, 39.002070013, 40.005869121, 41.01456, 42.019790, 43.028660, 44.035260, 30.973761629, 24.034350, 25.020260, 26.011780, 26.999230236, 27.992314761, 28.981800606, 29.978313789, 30.973761629, 31.973907274, 32.971725543, 33.973636257, 34.973314117, 35.97825968, 36.979608946, 37.984156827, 38.986179475, 39.991296951, 40.994335435, 42.001007913, 43.00619, 44.012990, 45.019220, 46.027380, 31.972070999, 26.027880, 27.018833, 28.004372763, 28.996608049, 29.984903249, 30.979554728, 31.972070999, 32.971458759, 33.967866902, 34.969032161, 35.96708076, 36.971125567, 37.971163317, 38.975134306, 39.975451728, 40.979582149, 41.981022419, 42.98715479, 43.99021339, 44.996508112, 46.000750, 47.008590, 48.014170, 49.023619, 34.968852682, 28.028510, 29.014110, 30.004770, 30.992413086, 31.985689901, 32.977451887, 33.973762819, 34.968852682, 35.968306981, 36.965902591, 37.968010425, 38.968008164, 39.970415472, 40.970684525, 41.973254804, 42.974054403, 43.978281071, 44.980286886, 45.98421004, 46.988710, 47.994950, 49.000320, 50.007840, 51.014490, 39.96238312251, 30.021560, 31.012123, 31.997637984, 32.989925709, 33.980271244, 34.975257585, 35.967545105, 36.96677632, 37.962732394, 38.964313231, 39.96238312251, 40.964500611, 41.963045736, 42.965636056, 43.964924033, 44.968039956, 45.968094129, 46.972186792, 47.974540, 48.980520, 49.984430, 50.991630, 51.996780, 53.004940, 38.963706679, 32.021920, 33.007260, 33.998410, 34.988009692, 35.981292235, 36.973375889, 37.969081184, 38.963706679, 39.963998475, 40.961825762, 41.96240281, 42.96071554, 43.961556804, 44.960699493, 45.961976864, 46.961678473, 47.965513535, 48.967450928, 49.972783355, 50.976380, 51.982610, 52.987120, 53.994200, 54.999710, 39.962590983, 34.014120, 35.004940, 35.993087063, 36.985870269, 37.976318452, 38.970719725, 39.962590983, 40.962278062, 41.958618014, 42.958766628, 43.955481754, 44.956186566, 45.953692587, 46.954546006, 47.952534177, 48.955674148, 49.957518962, 50.961499214, 51.9651, 52.970050, 53.974350, 54.980550, 55.985570, 56.992356, 44.955911909, 36.014920, 37.003050, 37.994700, 38.984790002, 39.977967407, 40.969251125, 41.965516429, 42.961150658, 43.959402752, 44.955911909, 45.95517189, 46.952407508, 47.952231468, 48.950023975, 49.952187685, 50.953603368, 51.956675468, 52.959610, 53.963264561, 54.968243949, 55.972870, 56.977790, 57.983710, 58.989220, 59.995710, 47.947946281, 38.009770, 39.001610, 39.990498838, 40.983145, 41.973030902, 42.968522499, 43.959690069, 44.958125616, 45.952631555, 46.951763088, 47.947946281, 48.947869982, 49.944791194, 50.946614955, 51.946897311, 52.949727171, 53.951052401, 54.955265056, 55.958199639, 56.963989137, 57.966970, 58.972930, 59.976760, 60.983200, 61.987490, 62.994420, 50.943959507, 40.011090, 40.999780, 41.991230, 42.980650, 43.97411, 44.965775808, 45.960200481, 46.95490894, 47.952253707, 48.948516101, 49.947158485, 50.943959507, 51.944775479, 52.944337979, 53.946439854, 54.947233701, 55.950530966, 56.952561432, 57.956834136, 58.960207407, 59.965026862, 60.968480, 61.973780, 62.977550, 63.983470, 64.987920, 51.940507472, 42.006430, 42.997710, 43.985549, 44.97964, 45.968358635, 46.962900046, 47.954031716, 48.951335721, 49.946044205, 50.944767431, 51.940507472, 52.940649386, 53.938880395, 54.940839672, 55.940653139, 56.943613013, 57.944353129, 58.948586367, 59.950076033, 60.954717204, 61.95661319, 62.961860, 63.964410, 64.970160, 65.973380, 66.979550, 54.938045141, 44.006870, 44.994510, 45.986720, 46.976100, 47.96852, 48.959618005, 49.95423823, 50.948210787, 51.945565464, 52.941290117, 53.940358854, 54.938045141, 55.93890491, 56.938285378, 57.939981549, 58.940440237, 59.942911246, 60.944652638, 61.94842822, 62.95023999, 63.95424909, 64.956336065, 65.961080, 66.964140, 67.969300, 68.972840, 55.934937475, 45.014578, 46.000810, 46.992890, 47.980504, 48.973610, 49.962988982, 50.956819538, 51.948113875, 52.945307942, 53.939610501, 54.938293357, 55.934937475, 56.935393969, 57.933275558, 58.934875464, 59.934071683, 60.936745281, 61.936767442, 62.940369091, 63.941201265, 64.94538027, 65.946780638, 66.950947244, 67.9537, 68.958780, 69.961460, 70.966720, 71.969620, 58.933195048, 47.011490, 48.001760, 48.989720, 49.981540, 50.970720, 51.963590, 52.954218896, 53.948459635, 54.941999029, 55.939839278, 56.936291373, 57.935752814, 58.933195048, 59.933817059, 60.932475763, 61.934050563, 62.933611611, 63.935809908, 64.93647846, 65.939762004, 66.940889529, 67.944873058, 68.94632, 69.951, 70.9529, 71.957810, 72.960240, 73.965380, 74.968330, 57.935342907, 48.019750, 49.009660, 49.995930, 50.987720, 51.975680, 52.968470, 53.957905495, 54.951330251, 55.942132022, 56.939793526, 57.935342907, 58.934346705, 59.930786372, 60.931056033, 61.928345115, 62.929669374, 63.927965959, 64.930084304, 65.929139334, 66.931569414, 67.931868789, 68.935610269, 69.9365, 70.940736283, 71.942092682, 72.946470, 73.948070, 74.952870, 75.955330, 76.960550, 77.963180, 62.929597474, 51.997180, 52.985550, 53.976710, 54.966050, 55.958560, 56.949211078, 57.944538499, 58.939498028, 59.93736503, 60.933457821, 61.932583745, 62.929597474, 63.929764183, 64.927789485, 65.928868813, 66.927730314, 67.929610889, 68.929429269, 69.932392343, 70.932676833, 71.935820307, 72.936675282, 73.939874862, 74.9419, 75.945275026, 76.947850, 77.951960, 78.954560, 79.960870, 63.929142222, 53.992950, 54.983980, 55.972380, 56.964788, 57.954591555, 58.949263764, 59.941827035, 60.939510635, 61.934329764, 62.933211566, 63.929142222, 64.929240984, 65.926033419, 66.927127345, 67.924844154, 68.926550281, 69.925319274, 70.927721599, 71.926857951, 72.929779104, 73.929458609, 74.932936741, 75.93329357, 76.936958967, 77.938440216, 78.942652, 79.944342348, 80.950480, 81.954420, 82.961030, 68.925573587, 55.994910, 56.982930, 57.974250, 58.963370, 59.957060, 60.949446287, 61.944175238, 62.939294196, 63.936838747, 64.932734754, 65.93158901, 66.928201703, 67.927980084, 68.925573587, 69.926021972, 70.924701349, 71.926366268, 72.925174682, 73.926945762, 74.926500246, 75.928827626, 76.9291543, 77.93160818, 78.93289326, 79.936515781, 80.937752355, 81.942990, 82.946980, 83.952650, 84.957000, 85.963120, 73.921177767, 57.991010, 58.981750, 59.970190, 60.963790, 61.954650, 62.949640, 63.941653, 64.939436406, 65.933843453, 66.93273407, 67.92809424, 68.927964533, 69.924247381, 70.924950954, 71.922075815, 72.923458945, 73.921177767, 74.922858948, 75.921402557, 76.923548591, 77.922852739, 78.925400995, 79.925372392, 80.928820467, 81.929549725, 82.934620, 83.937470, 84.943030, 85.946490, 86.952510, 87.956910, 88.963830, 74.921596478, 59.993130, 60.980620, 61.973200, 62.963690, 63.957572, 64.949564, 65.94471, 66.939186071, 67.936769069, 68.932273675, 69.930924826, 70.927112428, 71.926752283, 72.923824844, 73.923928692, 74.921596478, 75.922394021, 76.920647286, 77.921827281, 78.920947934, 79.922533816, 80.922132287, 81.924504067, 82.924980024, 83.929058, 84.932020, 85.936500, 86.939900, 87.944940, 88.949390, 89.955500, 90.960430, 91.966800, 79.916521271, 64.964660, 65.955210, 66.950090, 67.941798, 68.939557817, 69.933390644, 70.932241822, 71.927112352, 72.926765345, 73.922476436, 74.922523368, 75.919213597, 76.919914038, 77.91730909, 78.918499098, 79.916521271, 80.917992474, 81.916699401, 82.919118473, 83.918462354, 84.922245053, 85.924271579, 86.928521358, 87.931423998, 88.936450, 89.939960, 90.945960, 91.949920, 92.956290, 93.960490, 78.918337087, 66.964790, 67.958516, 68.950106, 69.944792, 70.93874, 71.936644572, 72.931691524, 73.929891034, 74.925776207, 75.924541469, 76.921379082, 77.921145706, 78.918337087, 79.918529296, 80.916290563, 81.916804119, 82.915180421, 83.916478974, 84.915608403, 85.918797577, 86.920711324, 87.924065926, 88.926385334, 89.930627737, 90.933968095, 91.939258714, 92.943050, 93.948680, 94.952870, 95.958530, 96.962800, 85.910610729, 68.965180, 69.955259, 70.949625738, 71.942092038, 72.939289195, 73.933084369, 74.930945746, 75.925910078, 76.92467, 77.920364783, 78.920082431, 79.916378965, 80.916592015, 81.9134836, 82.914136099, 83.911506687, 84.912527331, 85.910610729, 86.913354862, 87.914446969, 88.917630581, 89.919516555, 90.923445215, 91.92615621, 92.931274357, 93.934360, 94.939840, 95.943070, 96.948560, 97.951910, 98.957600, 99.961140, 84.911789737, 70.965320, 71.959080, 72.950561, 73.944264751, 74.93857, 75.935072226, 76.930408, 77.928141, 78.92398946, 79.92251925, 80.918995913, 81.918208598, 82.915109701, 83.914384821, 84.911789737, 85.911167419, 86.909180526, 87.911315588, 88.912278016, 89.914801694, 90.916536958, 91.9197289, 92.922041876, 93.926404946, 94.929302889, 95.934272637, 96.937351916, 97.941790668, 98.945379283, 99.949870, 100.953196445, 101.958870, 87.905612124, 72.965970, 73.956310, 74.949949568, 75.941766782, 76.937944782, 77.93218, 78.929708, 79.924521013, 80.923211846, 81.918401639, 82.917556701, 83.913425275, 84.912932803, 85.909260204, 86.908877124, 87.905612124, 88.907450675, 89.907737888, 90.910203095, 91.911037858, 92.914025634, 93.915361312, 94.919358766, 95.921696802, 96.926152923, 97.928452934, 98.933240926, 99.935351911, 100.940517888, 101.943018987, 102.948950, 103.952330, 104.958580, 88.905848295, 75.958450, 76.949645, 77.943610, 78.937351634, 79.93428, 80.929127468, 81.926792451, 82.922354243, 83.920388264, 84.916433039, 85.914885576, 86.91087573, 87.909501146, 88.905848295, 89.907151886, 90.907304791, 91.908949143, 92.909582713, 93.911595245, 94.912820621, 95.915891343, 96.918133995, 97.92220302, 98.924636204, 99.927756586, 100.93031385, 101.933555695, 102.936730, 103.941050, 104.944870, 105.949790, 106.954140, 107.959480, 89.904704416, 77.955230, 78.949160, 79.9404, 80.937210026, 81.931087, 82.928653801, 83.923250, 84.921471182, 85.916473591, 86.914816252, 87.910226904, 88.9088895, 89.904704416, 90.905645767, 91.905040847, 92.906476006, 93.906315192, 94.9080426, 95.908273386, 96.910953109, 97.912734892, 98.916512106, 99.917761889, 100.921140415, 101.922981285, 102.926599606, 103.928780, 104.933050, 105.935910, 106.940750, 107.943960, 108.949240, 109.952870, 92.906378058, 80.949030, 81.943130, 82.936705382, 83.933570, 84.927912447, 85.925038326, 86.920361108, 87.918332163, 88.913418245, 89.911264845, 90.906996243, 91.907193888, 92.906378058, 93.907283888, 94.906835792, 95.908100647, 96.908098556, 97.910328412, 98.911618375, 99.914181619, 100.915252025, 101.918037614, 102.919143842, 103.922464701, 104.923936545, 105.927970, 106.930310, 107.934840, 108.937630, 109.942440, 110.945650, 111.950830, 112.954700, 97.905408169, 82.948740, 83.940090, 84.936550, 85.930695904, 86.927326502, 87.921953241, 88.919480009, 89.913936896, 90.911750194, 91.906810991, 92.90681261, 93.905088269, 94.905842129, 95.904679477, 96.906021465, 97.905408169, 98.90771187, 99.907477336, 100.910347001, 101.91029736, 102.913207142, 103.913763625, 104.91697461, 105.918136802, 106.921692604, 107.923453, 108.927810, 109.929730, 110.934410, 111.936840, 112.941880, 113.944920, 114.950290, 98.906254747, 84.948830, 85.942880, 86.936530, 87.932678, 88.927167, 89.923556564, 90.918427639, 91.915260166, 92.910248984, 93.909657002, 94.907657084, 95.907871383, 96.906365358, 97.907215966, 98.906254747, 99.90765778, 100.907314659, 101.909215019, 102.909181351, 103.911447454, 104.911660566, 105.914357927, 106.915079572, 107.918461226, 108.919982665, 109.923820483, 110.92569283, 111.929146493, 112.931590, 113.935880, 114.938690, 115.943370, 116.946480, 117.951480, 101.904349312, 86.949180, 87.940260, 88.936110, 89.929890, 90.926292, 91.920120, 92.917052034, 93.911359711, 94.910412929, 95.907597835, 96.9075547, 97.905287132, 98.905939302, 99.904219476, 100.905582087, 101.904349312, 102.906323847, 103.905432701, 104.907752866, 105.907329433, 106.909905089, 107.910173465, 108.913203233, 109.914136041, 110.917696, 111.918965, 112.922487194, 113.924281, 114.928686173, 115.930810, 116.935580, 117.937820, 118.942840, 119.945310, 102.905504292, 88.948837, 89.942870, 90.936550, 91.931980, 92.925740, 93.921698, 94.91589874, 95.914460631, 96.911336797, 97.910708158, 98.908132104, 99.90812155, 100.906163625, 101.906843196, 102.905504292, 103.906655518, 104.905693821, 105.907287135, 106.906748423, 107.908728018, 108.908737289, 109.911136411, 110.911585913, 111.914394159, 112.915530627, 113.918806, 114.920334, 115.924062, 116.925980, 117.930070, 118.932110, 119.936410, 120.938720, 121.943210, 105.903485715, 90.949110, 91.940420, 92.935910, 93.928770, 94.924690, 95.918164359, 96.916479073, 97.912720902, 98.911767833, 99.908505886, 100.908289242, 101.905608544, 102.906087307, 103.904035834, 104.90508492, 105.903485715, 106.905133481, 107.903891701, 108.905950451, 109.905153254, 110.907670734, 111.907314058, 112.910152908, 113.910362638, 114.913683824, 115.914158662, 116.917841338, 117.9189843, 118.923110, 119.924691878, 120.928870, 121.930550, 122.934930, 123.936880, 106.90509682, 92.949780, 93.942780, 94.935480, 95.930680, 96.923972412, 97.921566201, 98.917597178, 99.916104255, 100.912802233, 101.911685, 102.90897272, 103.908629157, 104.906528661, 105.906668921, 106.90509682, 107.905955556, 108.904752292, 109.906107231, 110.905291157, 111.907004814, 112.906566579, 113.908803704, 114.908762698, 115.911359933, 116.911684562, 117.914582768, 118.915665059, 119.918787384, 120.919848046, 121.923530, 122.924900, 123.928640, 124.930430, 125.934500, 126.936770, 127.941170, 128.943690, 129.950448, 113.90335854, 94.949870, 95.939770, 96.934940, 97.927395546, 98.925010, 99.920289525, 100.918681538, 101.914462258, 102.913419246, 103.909849475, 104.909467905, 105.90645941, 106.906617928, 107.904183683, 108.904982293, 109.90300207, 110.904178107, 111.902757809, 112.904401662, 113.90335854, 114.905430969, 115.904755809, 116.907218618, 117.90691453, 118.909921597, 119.909850129, 120.912977363, 121.913332432, 122.917002999, 123.917647616, 124.92124637, 125.922353321, 126.926443864, 127.927762285, 128.932150, 129.933901937, 130.940670, 131.945550, 114.903878484, 96.949540, 97.942140, 98.934220, 99.931110851, 100.926340, 101.924090238, 102.919914188, 103.918296171, 104.91467354, 105.913465411, 106.9102951, 107.90969818, 108.907150507, 109.907165274, 110.905103278, 111.905532331, 112.904057761, 113.904913876, 114.903878484, 115.905259703, 116.904513564, 117.906354367, 118.90584535, 119.907959608, 120.907845822, 121.91027601, 122.910438276, 123.913175231, 124.913600588, 125.916463857, 126.917353091, 127.920172328, 128.92169698, 129.924970049, 130.926851767, 131.93299026, 132.937810, 133.944150, 134.949330, 119.902194676, 98.949330, 99.939044343, 100.936060, 101.930295324, 102.928100, 103.923143223, 104.921349437, 105.91688062, 106.915644329, 107.911925378, 108.911283214, 109.907842791, 110.90773446, 111.904818207, 112.905170577, 113.902778869, 114.903342397, 115.90174053, 116.902951656, 117.901603167, 118.90330763, 119.902194676, 120.90423548, 121.903439046, 122.905720838, 123.905273946, 124.907784125, 125.90765328, 126.910360024, 127.910536624, 128.913479, 129.913967295, 130.916999769, 131.917815713, 132.923829249, 133.928291765, 134.934730, 135.939340, 136.945990, 120.903815686, 102.939690, 103.936472, 104.931486348, 105.928791, 106.924150, 107.922160, 108.918132426, 109.916753, 110.913163, 111.912398009, 112.909371672, 113.909269, 114.906598, 115.906793629, 116.904835941, 117.905528731, 118.903942009, 119.905072427, 120.903815686, 121.905173651, 122.90421397, 123.905935743, 124.905253818, 125.90724748, 126.906923609, 127.909169001, 128.909148442, 129.911656324, 130.911982275, 131.914466896, 132.91525163, 133.920379744, 134.925165771, 135.930350, 136.935310, 137.940790, 138.945980, 129.906224399, 104.943640, 05.937504237, 106.935006, 107.929444597, 108.927415515, 109.922407316, 110.921110692, 111.917013672, 112.915891, 113.912089, 114.911902, 115.90846, 116.908644719, 117.905827581, 118.906403645, 119.904020222, 120.904936424, 121.903043898, 122.904270029, 123.902817896, 124.904430731, 125.903311696, 126.905226336, 127.904463056, 128.906598238, 129.906224399, 130.908523864, 131.90855316, 132.910955306, 133.911368737, 134.916448592, 135.920101246, 136.925322954, 137.929220, 138.934730, 139.938850, 140.944650, 141.949080, 126.904472681, 107.943475, 108.938149417, 109.935242, 110.930276, 111.927970, 112.923640583, 113.921850, 114.918048, 115.916808633, 116.91365, 117.913074, 118.910074, 119.910048173, 120.907366811, 121.907589284, 122.905588965, 123.906209852, 124.904630164, 125.905624153, 126.904472681, 127.905809443, 128.904987722, 129.906674247, 130.906124609, 131.907997381, 132.907796939, 133.909744465, 134.910048121, 135.914653993, 136.91787084, 137.922349591, 138.926099478, 139.931000, 140.935030, 141.940180, 142.944560, 143.949990, 131.904153457, 109.944278068, 110.941602, 111.935623112, 112.933341174, 113.927980306, 114.92629392, 115.921581087, 116.920358735, 117.916178655, 118.915410688, 119.911784244, 120.911461829, 121.908367632, 122.90848191, 123.905893003, 124.906395464, 125.904273634, 126.905183723, 127.903531275, 128.904779435, 129.903508007, 130.905082362, 131.904153457, 132.905910722, 133.905394464, 134.907227495, 135.907218794, 136.911562125, 137.913954475, 138.918792936, 139.921640943, 140.926648049, 141.92970959, 142.935110, 143.938510, 144.944070, 145.947750, 146.953560, 132.905451932, 111.950301, 112.944493274, 113.941450, 114.935910, 115.933367, 116.928670701, 117.926559494, 118.922377304, 119.920677253, 120.917229209, 121.916113434, 122.912996036, 123.912257798, 124.90972827, 125.909451977, 126.907417525, 127.907748866, 128.906064426, 129.906708552, 130.905463926, 131.90643426, 132.905451932, 133.906718475, 134.905977008, 135.907311576, 136.907089473, 137.911016704, 138.913363999, 139.917282354, 140.920045752, 141.924298927, 142.92735175, 143.932076914, 144.93552617, 145.940289423, 146.944155008, 147.949218153, 148.952930, 149.958170, 150.962190, 137.905247237, 113.950675405, 114.947370, 115.941380, 116.938499, 117.933040, 118.930659661, 119.926044974, 120.924054499, 121.919904, 122.918781036, 123.915093603, 124.914472912, 125.911250177, 126.911093797, 127.908317698, 128.908679439, 129.906320811, 130.906941118, 131.905061288, 132.90600749, 133.904508383, 134.905688591, 135.904575945, 136.905827384, 137.905247237, 138.908841341, 139.910604505, 140.914411009, 141.91645341, 142.920626719, 143.922952853, 144.927627032, 145.930219572, 146.934945, 147.937720047, 148.942580, 149.945680, 150.950810, 151.954270, 152.959610, 138.906353267, 116.950068, 117.946730, 118.940990, 119.938070, 120.933010, 121.930710, 122.926240, 123.924574275, 124.920816034, 125.919512667, 126.916375448, 127.915585177, 128.912692815, 129.912368724, 130.91007, 131.910101145, 132.908218, 133.908514011, 134.906976844, 135.907635536, 136.906493598, 137.90711193, 138.906353267, 139.909477645, 140.910962152, 141.91407913, 142.91606272, 143.919599647, 144.921645401, 145.92579346, 146.928235284, 147.932228868, 148.934734, 149.938770, 150.941720, 151.946250, 152.949620, 153.954500, 154.958350, 139.905438706, 118.952760, 119.946640, 120.943420, 121.937910, 122.935400, 123.930410, 124.928440, 125.923971, 126.922731, 127.918911, 128.918102, 129.914736, 130.914422, 131.911460487, 132.91151502, 133.908924821, 134.909151396, 135.907172422, 136.907805577, 137.905991321, 138.906652651, 139.905438706, 140.90827627, 141.909244205, 142.91238591, 143.913647336, 144.917233135, 145.918759009, 146.922673954, 147.92443241, 148.928399883, 149.930408931, 150.933976196, 151.936540, 152.940580, 153.943420, 154.948040, 155.951260, 156.956340, 140.907652769, 120.955364, 121.951810, 122.945960, 123.942960, 124.937830, 125.935310, 126.930830, 127.928791, 128.925095, 129.92359, 130.920259, 131.919255, 132.916330532, 133.915711737, 134.913111745, 135.912691611, 136.910705455, 137.910754636, 138.908938399, 139.909075874, 140.907652769, 141.910044806, 142.910816926, 143.913305245, 144.9145117, 145.917644336, 146.918995992, 147.922135026, 148.923717651, 149.926672997, 150.928318618, 151.931499225, 152.933838905, 153.937518153, 154.940120, 155.944270, 156.947430, 157.951980, 158.955500, 141.907723297, 123.952230, 124.948880, 125.943220, 126.940500, 127.935390, 128.933188, 129.928506, 130.927247, 131.923321237, 132.922348, 133.918790181, 134.91818116, 135.914976035, 136.914567137, 137.911949961, 138.911978288, 139.909552, 140.909609854, 141.907723297, 142.90981429, 143.910087274, 144.912573636, 145.913116939, 146.916100441, 147.916893288, 148.920148842, 149.920890888, 150.923828929, 151.924682219, 152.927698232, 153.929477307, 154.932932, 155.935018114, 156.939030, 157.941600, 158.946090, 159.949090, 160.953880, 144.912749023, 125.957520, 126.951630, 127.948420, 128.943160, 129.940450, 130.935870, 131.933750, 132.929782, 133.928353, 134.924876, 135.923565829, 136.920479493, 137.919548281, 138.916804082, 139.916041789, 140.913555054, 141.912874471, 142.910932616, 143.912590843, 144.912749023, 145.914696305, 146.915138545, 147.917474618, 148.918334155, 149.920983561, 150.921206973, 151.923496795, 152.924116889, 153.926463943, 154.928101267, 155.931056736, 156.933039369, 157.936561407, 158.938970, 159.942990, 160.945860, 161.950290, 162.953680, 151.919732425, 127.958080, 128.954640, 129.948920, 130.946110, 131.940690, 132.938670, 133.933970, 134.93252, 135.928275527, 136.926971746, 137.923243961, 138.922296605, 139.918994687, 140.918476488, 141.915197641, 142.914628338, 143.911999478, 144.913410353, 145.9130409, 146.914897923, 147.914822674, 148.917184735, 149.917275539, 150.919932409, 151.919732425, 152.922097356, 153.922209273, 154.924640161, 155.925527887, 156.928358717, 157.929991317, 158.933211271, 159.935140, 160.938830, 161.941220, 162.945360, 163.948280, 164.952980, 152.921230339, 129.963569, 130.957753, 131.954370, 132.949240, 133.946510, 134.941820, 135.939600, 136.935570, 137.933709, 138.92979228, 139.928087607, 140.92493072, 141.923434945, 142.920297509, 143.918816823, 144.916265237, 145.917205817, 146.916746111, 147.918085895, 148.917931238, 149.919701819, 150.919850161, 151.921744534, 152.921230339, 153.922979237, 154.92289326, 155.924752249, 156.925423647, 157.927845302, 158.929088861, 159.931971, 160.933680, 161.937040, 162.939210, 163.942990, 164.945720, 165.949970, 166.953210, 157.924103912, 133.955370, 134.952570, 135.947340, 136.945020, 137.940120, 138.938240, 139.933674, 140.932126, 141.928116, 142.92674951, 143.922963, 144.921709252, 145.918310608, 146.91909442, 147.918114524, 148.919340915, 149.918658876, 150.920348482, 151.919790996, 152.921749543, 153.920865598, 154.922622022, 155.922122743, 156.923960135, 157.924103912, 158.926388658, 159.927054146, 160.929669211, 161.930984751, 162.933990, 163.935860, 164.939380, 165.941600, 166.945570, 167.948360, 168.952870, 158.925346757, 135.961380, 136.955980, 137.953160, 138.948290, 139.945805049, 140.941448, 141.938744, 142.935121, 143.933045, 144.929274, 145.927246584, 146.924044585, 147.924271701, 148.923245909, 149.923659686, 150.923102543, 151.924074438, 152.923434588, 153.924678019, 154.923505236, 155.924747213, 156.924024604, 157.925413137, 158.925346757, 159.927167606, 160.927569919, 161.929488234, 162.930647536, 163.933350838, 164.934880, 165.937991959, 166.940050, 167.943640, 168.946220, 169.950250, 170.953300, 163.929174751, 137.962490, 138.959540, 139.954010, 140.951350, 141.946366, 142.943830, 143.939254, 144.937425, 145.932845369, 146.9310915, 147.927149831, 148.927304787, 149.925585184, 150.926184601, 151.9247183, 152.92576467, 153.924424457, 154.925753775, 155.92428311, 156.925466095, 157.924409487, 158.925739214, 159.925197517, 160.926933364, 161.926798447, 162.928731159, 163.929174751, 164.931703333, 165.932806741, 166.935655462, 167.937128769, 168.940307614, 169.942390, 170.946200, 171.948760, 172.953000, 164.93032207, 139.968539, 140.963098, 141.959770, 142.954610, 143.951480, 144.947200, 145.944640, 146.940056, 147.937718, 148.933774771, 149.933496182, 150.931688142, 151.931713714, 152.930198789, 153.930601579, 154.929103491, 155.929839, 156.928256188, 157.928941007, 158.927711959, 159.928729478, 160.927854776, 161.929095504, 162.928733903, 163.930233507, 164.93032207, 165.932284162, 166.933132633, 167.935515708, 168.936872273, 169.939618929, 170.94146515, 171.944820, 172.947290, 173.951150, 174.954050, 165.930293061, 142.966340, 143.960380, 144.957390, 145.952000, 146.949490, 147.944550, 148.942306, 149.937913839, 150.937448903, 151.935050389, 152.935063492, 153.932783081, 154.933208949, 155.931064698, 156.931916, 157.929893474, 158.930684066, 159.929083292, 160.929995309, 161.928778264, 162.930032749, 163.929200229, 164.930726003, 165.930293061, 166.932048159, 167.932370224, 168.934590364, 169.935464312, 170.938029808, 171.939356113, 172.942400, 173.944230, 174.947770, 175.950080, 176.954050, 168.93421325, 144.970073, 145.966425, 146.960961, 147.957840, 148.952720, 149.949960, 150.94548349, 151.944422, 152.942012112, 153.941567808, 154.939199459, 155.938979933, 156.936973, 157.936979525, 158.934975, 159.935262801, 160.933549, 161.933994682, 162.932651124, 163.93356, 164.932435492, 165.933554131, 166.932851622, 167.934172776, 168.93421325, 169.935801397, 170.93642944, 171.938400044, 172.939603607, 173.942168605, 174.943836853, 175.946994685, 176.949040, 177.952640, 178.955340, 173.938862089, 147.967420, 148.964040, 149.958420, 150.955400769, 151.950288919, 152.949480, 153.946393928, 154.945782332, 155.942818215, 156.942627848, 157.939865617, 158.940050099, 159.937552344, 160.937901678, 161.93576821, 162.936334305, 163.934489416, 164.935279, 165.933882042, 166.934949605, 167.933896895, 168.935189802, 169.934761837, 170.936325799, 171.936381469, 172.938210787, 173.938862089, 174.94127645, 175.942571683, 176.945260822, 177.94664668, 178.950170, 179.952330, 180.956150, 174.940771819, 149.973228, 150.967577, 151.964120, 152.958767331, 153.957522, 154.954316216, 155.953032523, 156.9500983, 157.949313283, 158.946628776, 159.946033, 160.943572, 161.943277288, 162.941179, 163.941339, 164.939406724, 165.939859, 166.93827, 167.938739111, 168.937651439, 169.938474968, 170.937913136, 171.939085669, 172.938930602, 173.94033748, 174.940771819, 175.94268631, 176.943758055, 177.945954559, 178.947327443, 179.94988116, 180.951970, 181.955040, 182.957570, 183.960910, 179.946549953, 152.970690, 153.964860, 154.963390, 155.959364025, 156.958396, 157.954799366, 158.95399487, 159.950684379, 160.950274844, 161.947210498, 162.947089, 163.944367284, 164.944567, 165.94218, 166.9426, 167.940568, 168.941259, 169.939609, 170.940492, 171.939448301, 172.940513, 173.940046178, 174.941509181, 175.941408631, 176.943220651, 177.943698766, 178.945816145, 179.946549953, 180.949101246, 181.950554096, 182.953530439, 183.955446515, 184.958820, 185.960890, 186.964590, 187.966850, 180.947995763, 154.974592, 155.972303, 156.968192445, 157.966699, 158.963018173, 159.961486056, 160.958417, 161.957291859, 162.954330271, 163.953534, 164.950772514, 165.950512, 166.948093, 167.948047, 168.946011, 169.946175, 170.944476, 171.944895, 172.94375, 173.944454, 174.943737, 175.944857, 176.944472403, 177.945778221, 178.945929535, 179.947464831, 180.947995763, 181.950151849, 182.951372616, 183.954007966, 184.955559375, 185.958552023, 186.960530, 187.963700, 188.965830, 189.969230, 183.950931188, 157.974562, 158.972918, 159.968478805, 160.967357, 161.963497417, 162.962523542, 163.958954382, 164.958279949, 165.955027253, 166.954816014, 167.951808394, 168.95177879, 169.949228482, 170.949451, 171.947292, 172.947689, 173.946079, 174.946717, 175.945634, 176.946643, 177.945876236, 178.947070447, 179.946704459, 180.948197248, 181.948204156, 182.950222951, 183.950931188, 184.953419264, 185.954364127, 186.957160466, 187.958489105, 188.961912868, 189.963181378, 190.966600, 191.968170, 186.955753109, 159.982115, 160.977589119, 161.976002, 162.972080535, 163.970323, 164.967088557, 165.965808, 166.962601, 167.961572608, 168.958791096, 169.958220071, 170.955716, 171.955422961, 172.953243, 173.953115, 174.951381, 175.951623, 176.950328, 177.950989, 178.949987641, 179.950789084, 180.950067916, 181.95121008, 182.950819841, 183.952520756, 184.952954982, 185.954986084, 186.955753109, 187.958114438, 188.959229007, 189.961817977, 190.963125242, 191.965960, 192.967470, 193.970420, 191.96148069, 161.984431, 162.982690, 163.978035649, 164.976762, 165.972690753, 166.971547969, 167.967803678, 168.96701927, 169.963577028, 170.963184819, 171.960023303, 172.959808409, 173.957062202, 174.956945835, 175.954806, 176.954965324, 177.953251241, 178.953816017, 179.952378803, 180.953244, 181.952110186, 182.953126102, 183.952489071, 184.954042265, 185.953838158, 186.955750458, 187.955838228, 188.95814747, 189.958447048, 190.960929718, 191.96148069, 192.964151563, 193.965182083, 194.968126661, 195.969639333, 192.96292643, 163.992201, 164.987520, 165.985824, 166.981665156, 167.979881, 168.976294942, 169.974965, 170.971626042, 171.970456, 172.967501739, 173.966861045, 174.964112895, 175.963648688, 176.9613015, 177.961082, 178.959122266, 179.959229446, 180.957625297, 181.958076296, 182.956846458, 183.957476, 184.956698, 185.957946104, 186.957363361, 187.958853121, 188.958718935, 189.960545968, 190.960594046, 191.962605012, 192.96292643, 193.965078378, 194.965979573, 195.968396542, 196.969653285, 197.972280, 198.973804583, 194.964791134, 165.994855, 166.992979, 167.988150742, 168.986715, 169.982495289, 170.981244542, 171.977347128, 172.976444754, 173.972818767, 174.972420552, 175.968944622, 176.968469481, 177.965648724, 178.965363404, 179.963031477, 180.963097285, 181.961170656, 182.961596703, 183.959922251, 184.960619, 185.959350813, 186.960587, 187.959395391, 188.960833686, 189.959931655, 190.961676661, 191.961038005, 192.962987401, 193.962680253, 194.964791134, 195.964951521, 196.967340182, 197.96789279, 198.970593094, 199.971440677, 200.974512868, 201.975740, 196.966568662, 168.998080, 169.996122, 170.991878881, 171.990035, 172.98623738, 173.984761, 174.981274107, 175.980099, 176.976864908, 177.97603192, 178.973212812, 179.972521124, 180.970079048, 181.969617874, 182.967593034, 183.967451524, 184.965789411, 185.965952703, 186.964567541, 187.965323661, 188.963948286, 189.964700339, 190.963704225, 191.964812953, 192.964149715, 193.96536525, 194.96503464, 195.966569813, 196.966568662, 197.968242303, 198.968765193, 199.970725647, 200.97165724, 201.973805838, 202.975154542, 203.977724, 204.979870, 201.970643011, 171.003760, 171.998832686, 172.997242, 173.992863695, 174.99142327, 175.98735458, 176.986279158, 177.982483143, 178.981833861, 179.978266394, 180.977819311, 181.974689964, 182.974449841, 183.971713051, 184.971899086, 185.96936179, 186.969814236, 187.967577049, 188.968190034, 189.966322449, 190.967157105, 191.965634327, 192.966665421, 193.965439409, 194.966720113, 195.965832649, 196.967212908, 197.966769032, 198.968279932, 199.968326004, 200.970302268, 201.970643011, 202.972872484, 203.973493933, 204.976073386, 205.977514066, 206.982588545, 207.985940, 208.991040, 209.994510, 204.974427541, 176.000590, 176.996427286, 177.994897, 178.991089082, 179.989906, 180.986257447, 181.985667104, 182.982192802, 183.981873122, 184.978791305, 185.978325, 186.975905897, 187.976009782, 188.973588428, 189.973877149, 190.971786154, 191.972225, 192.970672, 193.9712, 194.969774335, 195.970481151, 196.969574511, 197.970483495, 198.969877, 199.970962672, 200.970818891, 201.972105808, 202.97234422, 203.973863522, 204.974427541, 205.97611032, 206.977419429, 207.9820187, 208.985358952, 209.990073689, 210.993477, 211.998228, 207.976652071, 178.003830191, 179.002150, 179.997918173, 180.996623958, 181.992671842, 182.991874629, 183.988142339, 184.987609944, 185.984238945, 186.98391837, 187.980874338, 188.980807, 189.978081517, 190.978265, 191.975785171, 192.976173234, 193.97401207, 194.97454205, 195.972774109, 196.973431124, 197.972033959, 198.97291665, 199.971826675, 200.972884511, 201.972159133, 202.973390521, 203.973043589, 204.974481755, 205.974465278, 206.975896887, 207.976652071, 208.98109012, 209.984188527, 210.988736964, 211.991897543, 212.996581499, 213.999805408, 215.004807, 208.980398734, 184.001124, 184.997625, 185.996597625, 186.993157835, 187.992265154, 188.989199012, 189.988295129, 190.985786119, 191.985457954, 192.982959771, 193.98283396, 194.980650737, 195.980666509, 196.978864454, 197.979206, 198.977671961, 199.978131829, 200.977009036, 201.977742324, 202.976876001, 203.977812736, 204.977389366, 205.97849913, 206.978470679, 207.979742196, 208.980398734, 209.984120371, 210.98726946, 211.991285724, 212.994384666, 213.998711539, 215.001769776, 216.006305943, 217.009470, 218.014316, 208.982430435, 187.999422048, 188.998480562, 189.995101185, 190.994574485, 191.991335149, 192.991025275, 193.988185606, 194.988110728, 195.98553458, 196.98565963, 197.983388616, 198.983666063, 199.981798604, 200.982259764, 201.980757541, 202.981420103, 203.980318121, 204.981203322, 205.980481099, 206.981593173, 207.981245702, 208.982430435, 209.982873673, 210.986653154, 211.988867969, 212.99285728, 213.99520135, 214.999419988, 216.001915035, 217.006334796, 218.008973037, 219.013744, 220.016602, 210.987496271, 192.999843112, 193.998725085, 194.996268098, 195.995788077, 196.993189215, 197.992837202, 198.990532254, 199.990351264, 200.988416999, 201.988630236, 202.986941984, 203.987251326, 204.986074483, 205.986667036, 206.985783502, 207.986589977, 208.986173143, 209.98714771, 210.987496271, 211.990744771, 212.992936646, 213.996371733, 214.99865257, 216.002423257, 217.004718822, 218.008694336, 219.011161691, 220.015407682, 221.018050, 222.022330, 223.025190, 222.017577738, 195.005437696, 196.002115223, 197.001584351, 197.998678663, 198.998370297, 199.9956993, 200.995628335, 201.993263492, 202.993386687, 203.99142874, 204.991718799, 205.990214104, 206.990734225, 207.98964247, 208.990414742, 209.989696216, 210.990600523, 211.990703529, 212.993882668, 213.995362554, 214.998745483, 216.00027437, 217.003927675, 218.005601256, 219.009480204, 220.011393981, 221.015536782, 222.017577738, 223.021790, 224.024090, 225.028440, 226.030890, 227.035407, 228.037986, 222.01755173, 199.007258147, 200.00657249, 201.003860867, 202.003372847, 203.000924647, 204.000653204, 204.99859396, 205.998666066, 206.996949414, 207.997138783, 208.995953555, 209.996407738, 210.995536544, 211.996202244, 212.996189081, 213.998971145, 215.000341497, 216.00319799, 217.004631951, 218.007578322, 219.009252149, 220.012327405, 221.014254762, 222.01755173, 223.019735857, 224.023249951, 225.025565414, 226.029386231, 227.031835938, 228.035729, 229.038450228, 230.042510, 231.045440, 232.049772, 228.031070292, 202.009890686, 203.009271619, 204.006499668, 205.00626857, 206.00382727, 207.003798105, 208.00183994, 209.001991373, 210.000494978, 211.000897987, 211.999794499, 213.000383959, 214.000107894, 215.002719834, 216.003533035, 217.006320327, 218.00714023, 219.010085078, 220.011028384, 221.013917338, 222.01537453, 223.018502171, 224.020211821, 225.023611564, 226.025409823, 227.029177842, 228.031070292, 229.034957577, 230.037056394, 231.041220, 232.043638, 233.048060, 234.050704, 227.027752127, 206.01450498, 207.011949748, 208.011551551, 209.009494863, 210.009435986, 211.007734835, 212.007813822, 213.006607643, 214.006901798, 215.006453625, 216.008720075, 217.009346914, 218.011641453, 219.012420389, 220.014762979, 221.015591248, 222.017843851, 223.019137468, 224.021722866, 225.023229585, 226.026098089, 227.027752127, 228.031021112, 229.033015243, 230.036294178, 231.038558786, 232.042027438, 233.044550, 234.048420, 235.051232, 236.055296, 232.038055325, 209.017715682, 210.015075342, 211.014928413, 212.012980288, 213.01301014, 214.01149977, 215.01173033, 216.011062115, 217.013114328, 218.013284499, 219.015536895, 220.015747762, 221.018183674, 222.018468121, 223.020811448, 224.021466895, 225.023951021, 226.024903069, 227.02770407, 228.028741127, 229.03176243, 230.033133843, 231.036304343, 232.038055325, 233.041581843, 234.04360123, 235.047510074, 236.049870, 237.053894, 238.056496, 231.03588399, 212.023204138, 213.02110934, 214.020918417, 215.019185865, 216.019109564, 217.018323986, 218.020041889, 219.019883143, 220.021875303, 221.021877983, 222.023742, 223.023962273, 224.025625738, 225.026130678, 226.027947753, 227.028805072, 228.031051376, 229.032096793, 230.034540754, 231.03588399, 232.038591592, 233.040247277, 234.043308058, 235.045443615, 236.048681284, 237.051145659, 238.05450271, 239.057260, 240.060980, 238.050788247, 217.024368791, 218.023535671, 219.02491916, 220.024723, 221.026399, 222.026086, 223.0277386, 224.027604778, 225.029390717, 226.029338702, 227.031156367, 228.031374006, 229.033505939, 230.033939784, 231.036293704, 232.037156152, 233.039635207, 234.040952088, 235.043929918, 236.045568006, 237.048730184, 238.050788247, 239.054293299, 240.056591988, 241.060330, 242.062931, 237.048173444, 225.033913933, 226.035145, 227.034956789, 228.036180, 229.036263808, 230.037827597, 231.038245085, 232.040108, 233.040740546, 234.042895038, 235.044063267, 236.0465696, 237.048173444, 238.050946405, 239.052939025, 240.056162182, 241.058252431, 242.06164118, 243.064279, 244.067850, 242.058742611, 228.038742328, 229.040150212, 230.039649886, 231.041101107, 232.041187097, 233.042997375, 234.043317076, 235.04528605, 236.046057964, 237.048409658, 238.049559894, 239.052163381, 240.053813545, 241.056851456, 242.058742611, 243.062003092, 244.064203907, 245.067747154, 246.070204627, 247.074070, 243.06138108, 231.045560, 232.046590, 233.046348, 234.047809, 235.047946, 236.049579, 237.049996, 238.051984324, 239.053024479, 240.055300179, 241.056829144, 242.059549159, 243.06138108, 244.064284847, 245.066452114, 246.069774619, 247.072093, 248.075752, 249.078480, 247.07035354, 233.050771232, 234.050159841, 235.051434, 236.051413, 237.052901, 238.053028697, 239.054957, 240.055529539, 241.057653001, 242.058835824, 243.061389114, 244.062752578, 245.065491249, 246.067223662, 247.07035354, 248.072348508, 249.075953413, 250.078356959, 251.082284605, 252.084870, 247.07030708, 235.056580, 236.057330, 237.057003, 238.058281, 239.058279, 240.059759, 241.060230, 242.061981, 243.063007572, 244.065180774, 245.066361616, 246.068672947, 247.07030708, 248.073086, 249.074986657, 250.07831652, 251.080760172, 252.084310, 253.086880, 254.090600, 251.079586788, 237.062070, 238.061410, 239.062422, 240.062302, 241.063726, 242.063701552, 243.065427, 244.066000689, 245.068048612, 246.068805309, 247.071000589, 248.072184861, 249.074853537, 250.076406066, 251.079586788, 252.081625846, 253.085133145, 254.087322909, 255.091046, 256.093440, 252.082978512, 240.068920, 241.068538, 242.069745, 243.069548, 244.070883, 245.071324, 246.072896, 247.073656, 248.075471, 249.076411, 250.078612, 251.079992142, 252.082978512, 253.084824697, 254.088022021, 255.090273122, 256.093598, 257.095979, 258.099520, 257.095104724, 242.073430, 243.074353, 244.074084, 245.075385, 246.075299023, 247.076847, 248.077194714, 249.079034, 250.079521264, 251.081575017, 252.082466855, 253.085185236, 254.08685422, 255.089962202, 256.091773117, 257.095104724, 258.097076, 259.100595, 260.102678, 258.098431319, 245.080829, 246.081886, 247.081635, 248.082823, 249.083013, 250.084420, 251.084839, 252.086560, 253.087280, 254.089656, 255.091082705, 256.094059025, 257.095541368, 258.098431319, 259.100509, 260.103652, 261.105721, 262.108865, 255.093241131, 248.086596, 249.087833, 250.087510, 251.089012, 252.088976521, 253.090678, 254.090955253, 255.093241131, 256.094282666, 257.09687719, 258.098207, 259.101031, 260.102643, 261.105749, 262.107301, 263.110552, 264.112345, 260.105504, 251.094360, 252.095371, 253.095210, 254.096454, 255.096681, 256.098629, 257.099555, 258.101814, 259.102901, 260.105504, 261.106883, 262.109634, 263.111293, 264.114038, 265.115839, 266.119305, 263.112547, 253.100689, 254.100184, 255.101340, 256.101166194, 257.102990, 258.103489, 259.105637, 260.106440, 261.108766556, 262.109925, 263.112547, 264.113985, 265.116704, 266.117956, 267.121529, 268.123644, 255.107398, 255.107398, 256.108127, 257.107722, 258.109231, 259.109610, 260.111300, 261.112056, 262.114084, 263.114988, 264.117404, 265.118601, 266.121029, 267.122377, 268.125445, 269.127460, 270.130712, 259.114500, 258.113168, 259.114500, 260.114422071, 261.116117, 262.116398, 263.118322, 264.118931, 265.121114693, 266.122065, 267.124425, 268.125606, 269.128755, 270.130329, 271.133472, 272.135158, 273.138220, 262.122892, 260.121970, 261.121664, 262.122892, 263.123035, 264.124604, 265.125147, 266.126942, 267.127650, 268.129755, 269.130694, 270.133616, 271.135179, 272.138032, 273.139618, 274.142440, 275.144250, 263.128558, 263.128558, 264.128394885, 265.130085, 266.130097, 267.131789, 268.132162, 269.134056, 270.134650, 271.137657, 272.139052, 273.141986, 274.143131, 275.145952, 276.147208, 277.149841, 265.136151, 265.136151, 266.137299, 267.137307, 268.138728, 269.139055, 270.140657, 271.141139, 272.143738, 273.144913, 274.147492, 275.148647, 276.151156, 277.152420, 278.154812, 279.156193, 281.162061, 267.144341, 268.143795, 269.145124, 270.144720, 271.146062, 272.146317, 273.148863, 274.149492, 275.152176, 276.153034, 277.155647, 278.156469, 279.158861, 280.159795, 281.162061, 272.153615, 272.153615, 273.153682, 274.155713, 275.156142, 276.158493, 277.159519, 278.161604, 279.162468, 280.164473, 281.165372, 282.167486, 283.168415, 283.171792, 277.163943, 278.164312, 279.166546, 280.167039, 281.169286, 282.169765, 283.171792, 284.172384, 285.174105, 283.176451, 283.176451, 284.178080, 285.178732, 286.180481, 287.181045, 285.183698, 285.183698, 286.183855, 287.185599, 288.185689, 289.187279, 287.191186, 287.191186, 288.192492, 289.192715, 290.194141, 291.194384, 292.199786, 289.198862, 290.198590, 291.200011, 292.199786, 291.206564, 291.206564, 292.207549, 293.214670, 293.214670}; #endif /* header guard */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/physconst.h����������������������������������������������������������������������������0000644�0001015�0000765�00000003040�10677071761�014040� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** PHYSCONST.H : Includes physical constants ** D. Sherrill, April 1993 ** Edward F. Valeev, March 1998 */ /* revised 5/7/93 to agree w/ 1986 CODATA * recommended values J. Phys. Chem. Ref. Data 17, 1795 (1988) * all values revised * * revised 4/28/02 to agree with NIST online database * updated au2amu, hartree2J, hartree2wavenumbers * * revised 10/28/02 by TDC to include vacuum permittivity (_e0) * Avagadro's number (_na). * * Added electron rest mass from NIST database 6/27/03. * -TDC */ #ifndef _psi_include_physconst_h_ #define _psi_include_physconst_h_ #define _pi 3.14159265358979323846264338327950288 #define _twopi 6.2831853071795862320E0 #define _h 6.6260755E-34 /* J s */ #define _c 2.99792458E8 /* m s^-1 */ #define _kb 1.380658E-23 /* J K^-1 */ #define _psi3_R 8.314510 /* J K^-1 mol^-1 */ #define _bohr2angstroms 0.529177249 #define _bohr2m 0.529177249E-10 #define _bohr2cm 0.529177249E-8 #define _amu2g 1.6605402E-24 #define _amu2kg 1.6605402E-27 #define _au2amu 5.485799110E-4 #define _hartree2J 4.35974381E-18 #define _cal2J 4.184 #define _dipmom_au2si 8.47835791E-30 #define _dipmom_au2debye 2.54175 #define _dipmom_debye2si 3.33564E-30 #define _c_au 137.0359895 #define _hartree2ev 27.211396 #define _hartree2wavenumbers 219474.6313710 #define _e0 8.854187816E-12 /* vacuum permittivity */ #define _na 6.022136736E23 /* Avagadro's number */ #define _me 9.10938188E-31 /* electron rest mass */ /* For Cray X1 compilers */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #endif /* header guard */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/psiconfig.h.in�������������������������������������������������������������������������0000644�0001015�0000765�00000000352�10677071761�014377� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #ifndef _psi_include_psiconfig_h #define _psi_include_psiconfig_h /* Define if you have <stdint.h>. */ #undef HAVE_STDINT_H /* Which integrals standard is used? */ #undef PSI_INTEGRALS_STANDARD #endif /* _psi_src_psiconfig_h */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/psifiles.h�����������������������������������������������������������������������������0000644�0001015�0000765�00000017675�11001670650�013627� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** PSIFILES.H ** ** This header file contains the definitions of the numbers assigned ** to various binary files in PSI. This was created primarily to ** help avoid conflicts in the numbering of new PSI files in developmental ** programs but will grow to encompass some older binary files. ** ** This additional level of abstraction will aid in the maintenance of ** code. You are strongly encouraged to refer to files using these ** definitions rather than the actual numbers; the numbers may change ** in the future but the names will not. ** ** Created by C. David Sherrill on 29 April 1998 */ #ifndef _psi_include_psifiles_h_ #define _psi_include_psifiles_h_ #define PSI_DEFAULT_FILE_PREFIX "psi" #define PSIF_CHKPT 32 /* new libpsio checkpoint file number */ #define PSIF_OPTKING 1 #define PSIF_DSCF 31 #define PSIF_SO_TEI 33 #define PSIF_OEI 35 #define PSIF_SO_R12 38 #define PSIF_SO_R12T1 39 #define PSIF_DERINFO 40 #define PSIF_SO_PRESORT 41 #define PSIF_OLD_CHKPT 42 /* Until we have flexible PSIF_CHKPT this will store previous calculation info */ #define PSIF_CIVECT 43 /* CI vector from DETCI along with string and determinant info */ #define PSIF_AO_DGDBX 44 /* B-field derivative AO integrals over GIAO Gaussians -- only bra-ket permutational symmetry holds */ #define PSIF_AO_DGDBY 45 #define PSIF_AO_DGDBZ 46 #define PSIF_DETCAS 60 #define PSIF_MO_TEI 72 #define PSIF_MO_OPDM 73 #define PSIF_MO_TPDM 74 #define PSIF_MO_LAG 75 #define PSIF_AO_OPDM 76 /* PSIF_AO_OPDM also contains AO Lagrangian */ #define PSIF_AO_TPDM 77 /* ** MO Hessian File (also contains specialized integral and Fock lists. ** See programs STABLE and CPHF for more info. ** -TDC, 7/00 */ #define PSIF_MO_HESS 78 #define PSIF_CPHF 78 #define PSIF_MO_R12 79 #define PSIF_MO_R12T2 80 /* ** Additions for UHF-based transformations. ** -TDC, 6/01 */ #define PSIF_MO_AA_TEI 81 #define PSIF_MO_BB_TEI 82 #define PSIF_MO_AB_TEI 83 #define PSIF_MO_AA_TPDM 84 #define PSIF_MO_BB_TPDM 85 #define PSIF_MO_AB_TPDM 86 #define PSIF_AA_PRESORT 87 /* AA UHF twopdm presort file */ #define PSIF_BB_PRESORT 88 /* BB UHF twopdm presort file */ #define PSIF_AB_PRESORT 89 /* AB UHF twopdm presort file */ /* Use for DBOC calculations */ #define PSIF_DBOC 90 #define PSIF_SO_PKSUPER1 92 #define PSIF_SO_PKSUPER2 93 #define PSIF_SO_D1OEI 200 /* Derivative OEIs are stored in file 199 */ #define PSIF_SO_D1ERI 200 /* Derivative ERIs are stored in files 200, 201, 202, etc. File 200 contains integrals with respect to SALC derivative 0, etc. */ /* All of these one-electron quantities have been moved into PSIF_OEI Most integrals are real Hermitian hence only lower triangle of the matrix is written out */ /* These macros give libpsio TOC strings for easy identification. */ #define PSIF_SO_S "SO-basis Overlap Ints" #define PSIF_SO_T "SO-basis Kinetic Energy Ints" #define PSIF_SO_V "SO-basis Potential Energy Ints" #define PSIF_AO_S "AO-basis Overlap Ints" #define PSIF_AO_MX "AO-basis Mu-X Ints" #define PSIF_AO_MY "AO-basis Mu-Y Ints" #define PSIF_AO_MZ "AO-basis Mu-Z Ints" #define PSIF_MO_MX "MO-basis Mu-X Ints" #define PSIF_MO_MY "MO-basis Mu-Y Ints" #define PSIF_MO_MZ "MO-basis Mu-Z Ints" #define PSIF_AO_QXX "AO-basis Q-XX Ints" /* Electric quadrupole moment integrals */ #define PSIF_AO_QXY "AO-basis Q-XY Ints" #define PSIF_AO_QXZ "AO-basis Q-XZ Ints" #define PSIF_AO_QYY "AO-basis Q-YY Ints" #define PSIF_AO_QYZ "AO-basis Q-YZ Ints" #define PSIF_AO_QZZ "AO-basis Q-ZZ Ints" /* These integrals are anti-Hermitian -- upper triangle has sign opposite of that of the lower triangle */ #define PSIF_AO_NablaX "AO-basis Nabla-X Ints" /* integrals of nabla operator */ #define PSIF_AO_NablaY "AO-basis Nabla-Y Ints" #define PSIF_AO_NablaZ "AO-basis Nabla-Z Ints" /* These integrals are pure imaginary Hermitian. We write the full matrix of the imaginary part of these integrals out (i.e. multiply by i=sqrt(-1) to get the integrals) */ #define PSIF_AO_LX "AO-basis LX Ints" /* integrals of angular momentum operator */ #define PSIF_AO_LY "AO-basis LY Ints" #define PSIF_AO_LZ "AO-basis LZ Ints" #define PSIF_AO_DSDB_X "AO-basis dS/dBx Ints" /* Overlap derivative integrals WRT B field */ #define PSIF_AO_DSDB_Y "AO-basis dS/dBy Ints" #define PSIF_AO_DSDB_Z "AO-basis dS/dBz Ints" #define PSIF_AO_DHDB_X "AO-basis dh/dBx Ints" /* One-electron derivative integrals WRT B field */ #define PSIF_AO_DHDB_Y "AO-basis dh/dBy Ints" #define PSIF_AO_DHDB_Z "AO-basis dh/dBz Ints" #define PSIF_AO_D2HDBDE_XX "AO-basis d2h/dBxdEx Ints" /* One-electron derivative integrals WRT E and B fields */ #define PSIF_AO_D2HDBDE_XY "AO-basis d2h/dBxdEy Ints" #define PSIF_AO_D2HDBDE_XZ "AO-basis d2h/dBxdEz Ints" #define PSIF_AO_D2HDBDE_YX "AO-basis d2h/dBydEx Ints" #define PSIF_AO_D2HDBDE_YY "AO-basis d2h/dBydEy Ints" #define PSIF_AO_D2HDBDE_YZ "AO-basis d2h/dBydEz Ints" #define PSIF_AO_D2HDBDE_ZX "AO-basis d2h/dBzdEx Ints" #define PSIF_AO_D2HDBDE_ZY "AO-basis d2h/dBzdEy Ints" #define PSIF_AO_D2HDBDE_ZZ "AO-basis d2h/dBzdEz Ints" #define PSIF_MO_DFDB_X "AO-basis dF/dBx Ints" /* Fock operator derivative integrals WRT B field */ #define PSIF_MO_DFDB_Y "AO-basis dF/dBy Ints" #define PSIF_MO_DFDB_Z "AO-basis dF/dBz Ints" #define PSIF_MO_OEI "MO-basis One-electron Ints" #define PSIF_MO_A_OEI "MO-basis Alpha One-electron Ints" #define PSIF_MO_B_OEI "MO-basis Beta One-electron Ints" #define PSIF_MO_FZC "MO-basis Frozen-Core Operator" #define PSIF_MO_A_FZC "MO-basis Alpha Frozen-Core Oper" #define PSIF_MO_B_FZC "MO-basis Beta Frozen-Core Oper" /* More macros */ #define PSIF_AO_OPDM_TRIANG "AO-basis OPDM triang" #define PSIF_AO_LAG_TRIANG "AO-basis Lagrangian triang" #define PSIF_AO_OPDM_SQUARE "AO-basis OPDM square" #define PSIF_SO_OPDM "SO-basis OPDM" #define PSIF_SO_OPDM_TRIANG "SO-basis triang" /* PSI return codes --- for new PSI driver */ #define PSI_RETURN_SUCCESS 0 #define PSI_RETURN_FAILURE 1 #define PSI_RETURN_ENDLOOP 2 //Added by ACS (01/06) for the UMP2R12 routines #define PSIF_MO_AA_R12 54 #define PSIF_MO_BB_R12 55 #define PSIF_MO_AB_R12 56 #define PSIF_MO_AA_R12T1 57 #define PSIF_MO_BB_R12T1 58 #define PSIF_MO_AB_R12T1 59 #define PSIF_MO_BA_R12T1 61 #define PSIF_MO_AA_R12SQ 62 #define PSIF_MO_BB_R12SQ 63 #define PSIF_MO_AB_R12SQ 64 #define PSIF_MO_R12SQ 65 #define PSIF_MO_A_MX "MO-basis Alpha Mu-X Ints" #define PSIF_MO_A_MY "MO-basis Alpha Mu-Y Ints" #define PSIF_MO_A_MZ "MO-basis Alpha Mu-Z Ints" #define PSIF_MO_B_MX "MO-basis Beta Mu-X Ints" #define PSIF_MO_B_MY "MO-basis Beta Mu-Y Ints" #define PSIF_MO_B_MZ "MO-basis Beta Mu-Z Ints" #define PSIF_MO_A_QXX "MO-basis Alpha Q-XX Ints" #define PSIF_MO_A_QYY "MO-basis Alpha Q-YY Ints" #define PSIF_MO_A_QZZ "MO-basis Alpha Q-ZZ Ints" #define PSIF_MO_B_QXX "MO-basis Beta Q-XX Ints" #define PSIF_MO_B_QYY "MO-basis Beta Q-YY Ints" #define PSIF_MO_B_QZZ "MO-basis Beta Q-ZZ Ints" #define PSIF_AO_QRR "AO-basis Q-XX + Q-YY + Q-ZZ Ints" #define PSIF_MO_QRR "MO-basis Q-XX + Q-YY + Q-ZZ Ints" #define PSIF_MO_A_QRR "MO-basis Alpha Q-XX + Q-YY + Q-ZZ Ints" #define PSIF_MO_B_QRR "MO-basis Beta Q-XX + Q-YY + Q-ZZ Ints" // end ACS additions /* PSIMRCC files */ #define PSIF_PSIMRCC_INTEGRALS 50 #define PSIF_PSIMRCC_RESTART 51 /* MCSCF files */ #define PSIF_MCSCF 52 #endif /* header guard */ �������������������������������������������������������������������psi3/include/psitypes.h�����������������������������������������������������������������������������0000644�0001015�0000765�00000002065�10757644132�013671� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #ifndef _psi_include_psitypes_h_ #define _psi_include_psitypes_h_ #include <psiconfig.h> /* Define Psi data types here */ /* default PSI floating-point type */ typedef double PSI_FLOAT; /* default PSI 64-bit integer */ #ifdef HAVE_STDINT_H #include <stdint.h> typedef int_least64_t PSI_INT_LEAST64; #else #include <climits> #if defined(ULONGLONG_MAX) && !defined(ULLONG_MAX) # define ULLONG_MAX ULONGLONG_MAX #endif #if defined(ULLONG_MAX) && !defined(ULONGLONG_MAX) # define ULONGLONG_MAX ULLONG_MAX #endif # ifdef ULLONG_MAX # if ULONGLONG_MAX == (0xffffffffffffffffuLL) /* uLL reqd for xlC */ typedef long long PSI_INT_LEAST64; # else # error defaults not correct; you must hand modify psitypes.h # endif # elif ULONG_MAX != 0xffffffff # if ULONG_MAX == 18446744073709551615 /* 2**64 - 1 */ typedef long PSI_INT_LEAST64; # else # error defaults not correct; you must hand modify scint.h # endif # else /* assume no 64-bit integers */ # error 64 bit integer types are required # endif #endif /* HAVE_STDINT_H */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/rgb.h����������������������������������������������������������������������������������0000644�0001015�0000765�00000001424�10677071761�012564� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*------------------------------------------ Default RGB colors for atoms EV, March 30, 2001 ------------------------------------------*/ #ifndef _psi_include_rgb_h_ #define _psi_include_rgb_h_ #define LAST_RGB_INDEX 9 #ifdef __cplusplus extern "C" { #endif double atomic_rgb[][3] = { {0.40, 0.40, 0.40}, /* default element or ghost */ {1.00, 1.00, 1.00}, /* hydrogen */ {0.80, 0.80, 0.50}, /* helium */ {0.30, 0.80, 0.30}, /* lithium */ {0.65, 0.80, 0.25}, /* berrilium */ {0.50, 0.80, 0.15}, /* boron */ {0.25, 0.25, 0.25}, /* carbon */ {0.00, 0.00, 1.00}, /* nitrogen */ {1.00, 0.00, 0.00}, /* oxygen */ {0.75, 0.40, 0.15} /* fluorine */ }; #ifdef __cplusplus } #endif #endif /* header guard */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/include/symmetry.h�����������������������������������������������������������������������������0000644�0001015�0000765�00000002616�10677071761�013707� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*------------------------------------------------------- symmetry.h : Definitions of various symmetry constants Edward Valeev, Oct. 1999 -------------------------------------------------------*/ #ifndef _psi_include_symmetry_h_ #define _psi_include_symmetry_h_ /*-------------------------------------------------------------- Point groups at this moment are limited to D2h and sumbgroups Therefore the number of symmetry elements is at most 8. Each symmetry operation corresponds to a bit of a byte word. The correspondence is hardwired via defines "GFLAG" where G is the operation symbol. To describe nuclear stabilizers or subgroups in general I use a byte in which bits corresponding to the symmetry operations that constitute the group are set. The result is that each operation's contribution to the byte equals "GCODE". --------------------------------------------------------------*/ #define EFLAG 0 #define C2ZFLAG 1 #define C2YFLAG 2 #define C2XFLAG 3 #define IFLAG 4 #define SIGXYFLAG 5 #define SIGXZFLAG 6 #define SIGYZFLAG 7 #define C2XCODE 1<<C2XFLAG #define C2YCODE 1<<C2YFLAG #define C2ZCODE 1<<C2ZFLAG #define ICODE 1<<IFLAG #define SIGXYCODE 1<<SIGXYFLAG #define SIGXZCODE 1<<SIGXZFLAG #define SIGYZCODE 1<<SIGYZFLAG #define ECODE 1<<EFLAG /*----------------- Indices for axes -----------------*/ #define XAXIS 0 #define YAXIS 1 #define ZAXIS 2 #endif /* header guard */ ������������������������������������������������������������������������������������������������������������������psi3/include/vdw_radii.h����������������������������������������������������������������������������0000644�0001015�0000765�00000001354�10677071761�013764� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*------------------------------------------ standard van der Waals radii for atoms (in angstrom) EV, March 30, 2001 ------------------------------------------*/ #ifndef _psi_include_vdwradii_h_ #define _psi_include_vdwradii_h_ #define LAST_VDW_RADII_INDEX 9 #ifdef __cplusplus extern "C" { #endif double atomic_vdw_radii[] = { 2.0, /* default element or ghost */ 1.2, /* hydrogen */ 1.4, /* helium */ 1.82, /* lithium */ 1.8, /* berrilium (there's no info in literature) */ 1.6, /* boron (there's no info in literature) */ 1.70, /* carbon */ 1.55, /* nitrogen */ 1.52, /* oxygen */ 1.47 /* fluorine */ }; #ifdef __cplusplus } #endif #endif /* header guard */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/INSTALL����������������������������������������������������������������������������������������0000644�0001015�0000765�00000041272�11146062472�011243� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions for PSI3 ---------------------------------- I. Compilation Prerequisites II. Brief Summary of Configruation, Compilation, and Installation III. Detailed Installation Instructions IV. Recommendations for BLAS and LAPACK libraries V. Miscellaneous architecture-specific notes ---------------------------------- I. Compilation Prerequisites: * ANSI C compiler * C++ Compiler * F77 Compiler (the F95 compiler, gfortran, with gcc-4.X will work) --> Note: The F77 compiler is only used to determine the symbol-naming convention of and some system routines for the BLAS and LAPACK libraries on a few architectures. It is optional in a few cases (e.g. Mac OS X systems). * Optimized BLAS library (see recommendations below) * Optimized LAPACK library (see recommendations below) * POSIX threads (Pthreads) library (optional) * Perl interpreter (5.005 or higher; needed for running test cases) * GNU utilities: (see http://www.gnu.org) ** make ** flex ** bison ** autoconf (version 2.52 or higher) ** fileutils (esp. install) * For documentation: ** latex ** latex2html (for generating web-based documentation only; either v0.99_1 or 1.62, but you must apply the patch supplied in psi3/misc) II. Brief Summary of Configruation, Compilation, and Installation A good directory for the PSI3 source code is /usr/local/src/psi3. The directory should NOT be named /usr/local/psi, as that is the default installation directory unless changed by the --prefix directive (see below). It should also not have any periods in the path, e.g., /usr/local/psi3.2, because of a bug in dvips which will cause the compilation of documentation to fail. The following series of steps will configure and build the PSI3 package and install the executables in /usr/local/psi/bin: * cd $PSI3 (the top-level PSI3 source directory -- probably THIS directory) * mkdir objdir * cd objdir * ../configure * make * make tests (optional, but recommended) * make install * make doc (optional) You may need to make use of one or more of the following options to the configure script: * --prefix=directory --- Use this option if you wish to install the PSI3 package somewhere other than the default directory, /usr/local/psi. * --with-cc=compiler --- Use this option to specify a C compiler. One should use compilers that generate reentrant code, if possible. The default search order for compilers is: cc_r (AIX only), gcc, icc, cc. * --with-cxx=compiler --- Use this option to specify a C++ compiler. One should use compilers that generate reentrant code, if possible. The default search order for compilers is: xlC_r (AIX only), g++, c++, icpc, cxx. * --with-fc=compiler --- Use this option to specify a Fortran-77 compiler, which is used to determine linking coventions for BLAS and LAPACK libraries and to provide system routines for those libraries. Note that no fortran compiler is necessary on Mac OS X systems (see below). The default search order for compilers is: xlf_r (AIX only), gfortran, g77, ifort, f77, f2c. * --with-f77symbol=value --- This option allows manual assignment of the FORTRAN77 symbol convention, which is necessary for C programs to link Fortran-interface libraries such as BLAS and LAPACK. This option should only be used by experts and even then should almost never be necessary. Allowed values are: lc : lower-case lcu : lower-case with underscore (default) uc : upper-case ucu : upper-case with underscore * --with-ld=linker --- Use this option to specify a linker. The default is 'ld'. * --with-ar=archiver --- Use this option to specify an archiver. The default is to look for 'ar' automatically. * --with-ar-flags=flags --- Use this option to specify additional archiver flags. The default is 'r'. * --with-incdirs=directories --- Use this option to specify extra directories where to look for header files. Directories should be specified prepended by '-I', i.e. '-Idir1 -Idir2', etc. If several directories are specified, enclose the list with single right-quotes, e.g., --with-incdirs='-I/usr/local/include -I/home/psi3/include'. * --with-libs=libraries --- Use this option to specify extra libraries which should be used during linking. Libraries should be specified by their full names or in the usual '-l' notation, e.g. '-lm /usr/lib/libm.a', etc. If several libraries are specified, enclose the list with single right-quotes, e.g., --with-libs='-libm -lgcc_s'. * --with-libdirs=directories --- Use this option to specify extra directories where to look for libraries. Directories should be specified prepended by '-L', i.e. '-Ldir1 -Ldir2', etc. If several directories are specified, enclose the list with single right-quotes, e.g., --with-libdirs='-L/usr/local/lib -I/home/psi3/lib'. * --with-blas=library --- Use this option to specify a BLAS library. If your BLAS library has multiple components, enclose the file list with single right-quotes, e.g., --with-blas='-lf77blas -latlas'. Note that many BLAS libraries can be detected automatically. * --with-lapack=library --- Use this option to specify a LAPACK library. If your LAPACK library has multiple components, enclose the file list with single right-quotes, e.g., --with-lapack='-llapack -lcblas -latlas'. Note that many LAPACK libraries can be detected automatically. * --with-max-am-eri=integer --- Specifies the maximum angular momentum level for the primitive Gaussian basis functions when computing electron repulsion integrals. This is set to g-type functions (AM=4) by default. * --with-max-am-deriv1=integer --- Specifies the maximum angular momentum level for first derivatives of the primitive Gaussian basis functions. This is set to f-type functions (AM=3) by default. * --with-max-am-deriv2=integer --- Specifies the maximum angular momentum level for second derivatives of the primitive Gaussian basis functions. This is set to d-type functions (AM=2) by default. * --with-max-am-r12=integer --- Specifies the maximum angular momentum level for primitive Gaussian basis functions used in r_12 explicitly correlated methods. This is set to f-type functions (AM=3) by default. * --with-debug=yes/no --- Turns on debugging flags (-g) if yes. This is set to no by default. * --with-opt=yes/no --- Turns off compiler optimizations (-OX) if no. This is set to yes by default. * --with-strict=yes -- Turns on strict compiler warnings. III. Detailed Installation Instructions This section provides a more detailed explanation of the procedure for compiling and installing the PSI3 package. III.A. Step 1: Configuration First, we recommend that you choose for the top-level $PSI3 source directory something other than /usr/local/psi; your $HOME directory or /usr/local/src/psi3 are convenient choices. Next, in the top-level $PSI3 source directory you've chosen, first run autoconf to generate the configure script from configure.ac. It is best to keep the source code separate from the compilation area, so you must first choose a subdirectory for compilation of the codes. A simple option is $PSI3/objdir, which should work for most environments. However, if you need executables for several architectures, you should choose more meaningful subdirectory names. * The compilation directory will be referred to as $objdir for the remainder of these instructions. In $objdir, run the configure script found in the $PSI3 top-level source directory. This script will scan your system to locate certain libraries, header files, etc. needed for complete compilation. The script accepts a number of options, all of which are listed above. The most important of these is the --prefix option, which selects the installation directory for the executables, the libraries, header files, basis set data, and other administrative files. The default --prefix is /usr/local/psi. * The configure script's --prefix directory will be referred to as $prefix for the remainder of these instructions. III.B. Step 2: Compilation Running "make" (which must be GNU's 'make' utility) in $objdir will compile the PSI3 libraries and executable modules. III.C. Step 3: Testing To execute automatically the ever-growing number of test cases after compilation, simply execute "make tests" in the $objdir directory. This will run each (relatively small) test case and report the results. Failure of any of the test cases should be reported to the developers. By default, any such failure will stop the testing process. If you desire to run the entire testing suit without interruption, execute "make tests TESTFLAGS='-u -q'". Note that you must do a "make testsclean" in $objdir to run the test suite again. III.D. Step 4: Installation Once testing is complete, installation into $prefix is accomplished by running "make install" in $objdir. Executable modules are installed in $prefix/bin, libraries in $prefix/lib, and basis set data and other control strctures $prefix/share. III.E. Step 5: Building Documentation If your system has the appropriate utilities, you may build the package documentation from the top-level $objdir by running "make doc". The resulting files will appear in the $prefix/doc area. III.F. Step 6: Cleaning All object files and libraries can be removed to save disk space by running "make clean" in $objdir. III.G. Step 7: User Configuration After the PSI3 package has been successfullly installed, the user will need to add the installation directory into his/her path. If the package has been installed in the default location /usr/local/psi, then in C shell, the user should add something like the following to their .cshrc file: setenv PSI /usr/local/psi set path = ($path $PSI/bin) setenv MANPATH $PSI/doc/man:$MANPATH The final line will enable the use of the PSI3 man pages. IV. Recommendations for BLAS and LAPACK libraries Much of the speed and efficiency of the PSI3 programs depends on the corresponding speed and efficiency of the available BLAS and LAPACK libraries (especially the former). In addition, the most common compilation problems involve these libraries. Users may therefore wish to consider the following BLAS and LAPACK recommendations when building PSI3: (1) It is NOT wise to use the stock BLAS library provided with many Linux distributions like RedHat. This library is usually just the netlib distribution and is completely unoptimized. PSI3's performance will suffer if you choose this route. The choice of LAPACK is less critical, and so the unoptimized netlib distribution is acceptable. If you do choose to use the RedHat/Fedora stock BLAS and LAPACK, be aware that some RPM's do not make the correct symbolic links. For example, you may have /usr/lib/libblas.so.3.1.0 but not /usr/lib/libblas.so. If this happens, create the link as, e.g., ln -s /usr/lib/libblas.so.3.1.0 /usr/lib/libblas.so. You may need to do similarly for lapack. (2) Perhaps the best choices for BLAS are Kazushige Goto's hand-optimized BLAS (http://www.tacc.utexas.edu/resources/software/) and ATLAS (http://math-atlas.sourceforge.net/). These work well on nearly every achitecture to which the PSI3 developers have access, though we have identified at least one case in which the Goto libraries yielded faulty DGEMM calls. On Mac OS X systems, however, the vecLib package that comes with Xcode works well. Note also that we have encountered problems with the version 10 of Intel's MKL, particularly for very large coupled cluster calculations. (3) PSI3 does not require a Fortran compiler, unless the resident BLAS and LAPACK libraries require Fortran-based system libraries. If you see compiler complaints about missing symbols like "do_fio" or "e_wsfe", then your libraries were most likely compiled with g77 or gfortran, which require -lg2c to resolve the Fortran I/O calls. Use of the same gcc package for PSI3 should normally resolve this problem. (4) The PSI3 configure script can often identify and use several different BLAS and LAPACK libraries, but its ability to do this automatically depends on a number of factors, including correspondence between the compiler used for PSI3 and the compiler used to build BLAS/LAPACK, placement of the libraries in commonly searched directories, etc. PSI3's configure script will find your BLAS and LAPACK if any of the the following are installed in standard locations (e.g. /usr/local/lib): (a) ATLAS: libf77blas.a and libatlas.a, plus netlib's liblapack.a (b) MKL 8: libmkl.so and libmkl_lapack64.a (with the corresponding Intel compilers) (c) Goto: libgoto.a and netlib's liblapack.a (d) Cray SCSL (e.g. on SGI Altix): libscs.so (NB: No Fortran compiler is necessary in this case, so --with-fc=no should work.) (e) ESSL (e.g. on AIX systems): libessl.a (5) If configure cannot identify your BLAS and LAPACK libraries automatically, you can specify them on the command-line using the --with-blas and --with-lapack arguments described above. Here are a few examples that work on the PSI3 developers' systems: (a) Linux with ATLAS: --with-blas='-lf77blas -latlas' --with-lapack='-llapack -lcblas' (b) Mac OS X with vecLib: --with-blas='-altivec -framework vecLib' --with-lapack=' ' (c) Linux with MKL 8.1 and icc/icpc/ifort 9.1: --with-libdirs=-L/usr/local/opt/intel/mkl/8.0.2/lib/32 --with-blas=-lmkl --with-lapack=-lmkl_lapack32 (d) Linux on ia32 with MKL 10.1 and icc/icpc 11.0: --with-blas='-Wl,--start-group -L/usr/local/opt/intel/mkl/10.1.0.015/lib/32 -l mkl -Wl,--end-group -lguide -lpthread' V. Miscellaneous architecture-specific notes * Linux on x86 and x86_64: (1) gcc compiler: versions 3.2, 3.3, 3.4, 4.0, and 4.1 have been tested. (2) Intel compilers: versions 9.0 and 11.0 have been tested. We do not recommend using version 8.1. (3) Portland Group compilers: version 6.0-5 has been tested. (4) Some versions of RedHat/Fedora Core RPM packages for the BLAS and LAPACK libraries fail to make all the required symlinks. For example, you may have /usr/lib/libblas.so.3.1.0 but not /usr/lib/libblas.so. If this happens, create the link as, e.g., ln -s /usr/lib/libblas.so.3.1.0 /usr/lib/libblas.so. You may need to do something similar for LAPACK. * Linux on Itanium2 (IA64): (1) Intel compiler versions 9.0 and 10.0 have been tested and work. Version 8.1 does not work. (2) gcc compilers work. * Mac OS 10.X: (1) The compilation requires a developer's toolkit (Xcode) from apple.com. Note that a fortran compiler is not needed for PSI 3.4 on Mac OS X systems. (2) The libcompat.a library is no longer needed as of 1/24/2008. (3) For apple systems, the latest configure script assumes that the vecLib will be used for the optimized BLAS and LAPACK libraries, unless the user indicates otherwise using the --with-blas and --with-lapack flags to configure. If you encounter difficulty with configure, you may have success explicitly indicating the vecLib using: --with-blas='-altivec -framework vecLib' --with-lapack=' ' (4) Pre Mac OS 10.4: Certain PSI3 codes require significant stackspace for compilation. Increase your shell's stacksize limit before running "make". For csh, for example, this is done using "unlimit stacksize". [NB: This limit appears to have been lifted in Mac OS 10.3.X (Panther).] (5) Mac 10.5 users can take advantage of the ruby driver in PSI 3.4 by including the following options on the configure command line: --with-ruby-include="-I/System/Library/Frameworks/Ruby.framework/Headers" --with-ruby-lib="-framework Ruby" * AIX in a 64-bit environment: We do not presently support the use of XL compilers on AIX systems. We have tested gcc-4.1.1 under AIX 5.3, and we recommend use of the configure flag: --with-aix64. * SGI IRIX 6.x: (1) MIPSpro C++ compilers prior to version 7.4 require a command-line flag '-LANG:std' in order to compile PSI3 properly. (2) Use command-line flag '-64' in order to produce 64-bit executables with MIPSpro compilers. The following is an example of appropriate configure options: --with-cc='cc -64' --with-cxx='CC -64 -LANG:std' --with-fc='f77 -64' (3) Under IRIX, configure will attempt to detect automatically and use the optimized SGI Scientific Computing Software Library (SCSL). * Compaq Alpha/OSF 5.1: Default Bourne shell under Tru64 (/bin/sh) is not POSIX-compliant which causes some PSI3 makefiles to fail. Set environmental variable BIN_SH to xpg4. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/�������������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111703�010742� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/macro.psi����������������������������������������������������������������������������������0000644�0001015�0000765�00000026110�07722456316�012601� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .ds OS OS_NAME_HERE .\" @(#)tmac.an 1.37 90/02/04 SMI; .ds ]W Psi Release 3.2 ' # month name . \".if "\nd"0" .nr m \n(mo-1 . \".if "\nm"0" .ds ]m January . \".if "\nm"1" .ds ]m February . \".if "\nm"2" .ds ]m March . \".if "\nm"3" .ds ]m April . \".if "\nm"4" .ds ]m May . \".if "\nm"5" .ds ]m June . \".if "\nm"6" .ds ]m July . \".if "\nm"7" .ds ]m August . \".if "\nm"8" .ds ]m September . \".if "\nm"9" .ds ]m October . \".if "\nm"10" .ds ]m November . \".if "\nm"11" .ds ]m December ' # set the date . \".if n \{.nr m \nm+1 . \". ie \nd .ds ]W Modified \nm/\nd/\ny . \". el .ds ]W Printed \n(mo/\n(dy/\n(yr\} . \".if t \{.ie \nd .ds ]W \*(]m \nd, 19\ny . \". el .ds ]W \*(]m \n(dy, 19\n(yr\} ' # end of commented out chunk .if t .tr *\(** .ie n \{\ . ds lq \&"\" . ds rq \&"\" .\} .el \{\ . ds rq '' . ds lq `` .\} .de UC . \".if t \{\ . \". ie "\\$1"" .ds ]W 3rd Berkeley Distribution . \". ie "\\$1"4" .ds ]W \\$1th Berkeley Distribution . \". el .ds ]w \\$2 \\$1 BSD . \".\} .. ' # reset the basic page layout .de }E .}f .in \\n()Ru+\\n(INu .ll \\n(LLu .. ' # default tabs .de DT 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .. ' # set type font and size .de }f .ps 10 .ft 1 .. ' # handle the head of the page .de }H .ev 1 .}C 'sp .5i .ft 1 .ps 10 .tl \\*(]H\\*(]D\\*(]H 'sp .5i .ev .ns .. ' # handle the foot of the page .de }F .ev 1 .ft 1 .ps 10 'sp .5i .if !\\nD .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if o .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if e .tl \\*(PN%\\*(]L\\*(]W .if !\\nX 'bp .if \\nX .if \\n%>=\\nX \{\ .ds PN \\n% .pn 1 .af % a .nr X 0 'bp 1\} .if \\nX .if \\n%<\\nX 'bp .ev .. ' # the cut mark -- we don't need this -- Henry . \".if n .ig . \".de }C . \".po .1i . \".tl '-' . \".po . \".. ' # the final cut mark -- we don't need this -- Henry . \".de }M . \".}N . \".wh -1p }C . \".ll \\n(LLu . \".. ' # no runout unless there was a .TH .de }K .}N .pl 1 .ll \\n(LLu .. .em }K ' # set title and heading .de TH .PD .DT .if n .nr IN .5i .if t .nr IN .5i .ll 6.5i .nr LL \\n(.l .ds ]H \\$1\|(\|\\$2\|) .ds ]D MISC. REFERENCE MANUAL PAGES .if '\\$2'1' .ds ]D PSI COMMANDS FOR \\*(pT .if '\\$2'2' .ds ]D PSI COMMON INPUT FOR \\*(pT .if '\\$2'3' .ds ]D PSI PROCEDURES FOR \\*(pT .if '\\$2'4' .ds ]D PSI EXAMPLES FOR \\*(pT .if '\\$2'5' .ds ]D PSI LIBRARY .if !'\\$4'' .ds ]W \\$4 .if !'\\$5'' .ds ]D \\$5 .wh 0 }H .if t .wh -1i }F .if n .wh -1.167i }F .em }M .if !\\n(nl .if !\\nP .nr P 1 .if !\\n(nl .if \\nP .pn \\nP .if \\nX .if \\nP>=\\nX \{\ .ds PN \\nP .pn 1 .af % a .nr X 0 \} .if !\\n(nl .if \\nP .nr P 0 .if \\nC .if \\n(nl .bp .if !\\nC .if \\n(nl .bp 1 .ds ]L Last change: \\$3 .}E .DT .nr )I .5i .nr )R 0 . \".if n .na .mk ka .if !'\\n(ka'-1' .bp .. ' # IX - Make an Index Entry .de IX .if \\nF .tm .IE\tENTRY\t\\$1\t\\$2\t\\$3\t\\$4\t\\$5\t\\$6\t\\*(PN\\n% .. ' # TX - Resolve a Title Reference .de TX .ds Tx "UNKNOWN TITLE ABBREVIATION: \\$1 .if '\\$1'GSBG' .ds Tx "Getting Started .if '\\$1'SUBG' .ds Tx "Customizing SunOS .if '\\$1'SHBG' .ds Tx "Basic Troubleshooting .if '\\$1'SVBG' .ds Tx "SunView User's Guide .if '\\$1'MMBG' .ds Tx "Mail and Messages .if '\\$1'DMBG' .ds Tx "Doing More with SunOS .if '\\$1'UNBG' .ds Tx "Using the Network .if '\\$1'GDBG' .ds Tx "Games, Demos & Other Pursuits .if '\\$1'CHANGE' .ds Tx "SunOS 4.1 Release Manual .if '\\$1'INSTALL' .ds Tx "Installing SunOS 4.1 .if '\\$1'ADMIN' .ds Tx "System and Network Administration .if '\\$1'SECUR' .ds Tx "Security Features Guide .if '\\$1'PROM' .ds Tx "PROM User's Manual .if '\\$1'DIAG' .ds Tx "Sun System Diagnostics .if '\\$1'SUNDIAG' .ds Tx "Sundiag User's Guide .if '\\$1'MANPAGES' .ds Tx "SunOS Reference Manual .if '\\$1'REFMAN' .ds Tx "SunOS Reference Manual .if '\\$1'SSI' .ds Tx "Sun System Introduction .if '\\$1'SSO' .ds Tx "System Services Overview .if '\\$1'TEXT' .ds Tx "Editing Text Files .if '\\$1'DOCS' .ds Tx "Formatting Documents .if '\\$1'TROFF' .ds Tx "Using \&\fBnroff\fP and \&\fBtroff\fP .if '\\$1'INDEX' .ds Tx "Global Index .if '\\$1'CPG' .ds Tx "C Programmer's Guide .if '\\$1'CREF' .ds Tx "C Reference Manual .if '\\$1'ASSY' .ds Tx "Assembly Language Reference .if '\\$1'PUL' .ds Tx "Programming Utilities and Libraries .if '\\$1'DEBUG' .ds Tx "Debugging Tools .if '\\$1'NETP' .ds Tx "Network Programming .if '\\$1'DRIVER' .ds Tx "Writing Device Drivers .if '\\$1'STREAMS' .ds Tx "STREAMS Programming .if '\\$1'SBDK' .ds Tx "SBus Developer's Kit .if '\\$1'WDDS' .ds Tx "Writing Device Drivers for the SBus .if '\\$1'FPOINT' .ds Tx "Floating-Point Programmer's Guide .if '\\$1'SVPG' .ds Tx "SunView\ 1 Programmer's Guide .if '\\$1'SVSPG' .ds Tx "SunView\ 1 System Programmer's Guide .if '\\$1'PIXRCT' .ds Tx "Pixrect Reference Manual .if '\\$1'CGI' .ds Tx "SunCGI Reference Manual .if '\\$1'CORE' .ds Tx "SunCore Reference Manual .if '\\$1'4ASSY' .ds Tx "Sun-4 Assembly Language Reference .if '\\$1'SARCH' .ds Tx "\s-1SPARC\s0 Architecture Manual . # non-Sun titles .if '\\$1'KR' .ds Tx "The C Programming Language \fI\\*(Tx\fP\\$2 .. ' # section heading .de SH .}X 0 .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .. ' # sub section heading .de SS .}X .25i "" "" .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .br .. ' # subroutine for section heading .de }X .}E .ti \\$1 .sp \\n()Pu .ne 2 .nr )R 0 .fi .it 1 }N .SM .B .. ' # end of SH (cf }X above and }N below) .de }2 .nr )E 0 .}E .nr )I .5i .ns .. ' # italic .de I .ft 2 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # bold .de B .ft 3 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # small .de SM .ps 9 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # combinations of Roman, italic, bold .de RI .}S 1 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de VS 'if '\\$1'4' .mc \s12\(br\s0 .. .de VE 'mc .. .de RB .}S 1 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IR .}S 2 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IB .}S 2 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BR .}S 3 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BI .}S 3 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. ' # make special case of shift out of italic .de }S .ds ]F .if "\\$1"2" .if !"\\$5"" .ds ]F\^ .ie !"\\$4"" .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" .el \\$3 .}f .. ' # small and boldface .de SB \&\fB\s-1\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6\s0\fR .. ' # paragraph .de LP .PP .. .de PP .sp \\n()Pu .ne 2 .}E .nr )I .5i .ns .. ' # paragraph distance .de PD .if t .nr )P .4v .if n .nr )P 1v .if !"\\$1"" .nr )P \\$1v .. ' # hanging indent .de HP .sp \\n()Pu .ne 2 .if !"\\$1"" .nr )I \\$1n .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n()Ru+\\n(INu .}f .. ' # indented paragraph .de IP .TP \\$2 \&\\$1 .. ' # hanging label .de TP .if !"\\$1"" .nr )I \\$1n .sp \\n()Pu .in \\n()Ru .nr )E 1 .ns .it 1 }N .di ]B .. ' # end of TP (cf }N below) .de }1 .ds ]X \&\\*(]B\\ .nr )E 0 .if !"\\$1"" .nr )I \\$1n .}f .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n(INu .ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X .br\} .el \\*(]X\h|\\n()Iu+\\n()Ru\c .}f .. ' # handle end of 1-line features .de }N .if \\n()E .br .di .if "\\n()E"0" .}f .if "\\n()E"1" .}1 .if "\\n()E"2" .}2 .nr )E 0 .. ' # increase relative indent .de RS .nr ]\\n+()p \\n()I .nr )\\n()p \\n()R .ie !"\\$1"" .nr )R +\\$1n .el .nr )R +\\n()I .nr )I .5i .}E .. ' # decrease relative indent .de RE .if !"\\$1"" \{.ie "\\$1"0" .nr )p 1 1 . el .nr )p \\$1 1\} .ds ]i \\*(]I\\n()p .ds ]r \\*(]R\\n()p .nr )I \\*(]i .nr )R \\*(]r .if \\n()p .nr )p -1 .}E .. .nr )p 0 1 .ds ]I \\\\n(] .ds ]R \\\\n() .bd S 3 3 .if t .ds R \(rg .if n .ds R (Reg.) .ds S \s10 .hy 14 .if !'\*(Lv'ADVANCED' .ig .ds pT \*(Lv \*(OS USERS .. .if '\*(Lv'ADVANCED' .ig .ds pT \*(OS USERS .. .ds ]W Psi Release 3.2 .\" This is used to ignore blanks on a line .\" Its purpose is to make the troff input look prettier. .de __ \\$1 .. .\" Start List .de sL \" .sL: start an optional list .di dL .LP \" This resets some things, apparently .nf .. .\" End List .de eL \" .eL: end an optional list under heading $1 .di .fi .\" The number 40 on the following line must be change if sL or eL are changed .if \\n(dn>40 \{\ .\"SH \\$1 -- \\n(dn \" Use this line for debugging .SH \\$1 .nf .dL .fi .\} .. .\" The input skip string, used to space headings. .ds sS \0\0\0\0\0\0\0 .\" Input Section Header .iS .de iS .LP .nf \\$1 .fi .. .\" Input Line .de iL .IP "\\$1" 7 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option .de iO .IP "\\*(sS\\$1" 14 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option Value .de iV .IP "\\*(sS\\*(sS\\$1" 21 .if !'\\$2'' \{\ \\$2 .\} .. .\" Start CMS .de sC .if !'\\*(OS'CMS' .ig eC .. .\" End Advanced with .eC .\" Start UNIX .de sU .if !'\\*(OS'UNIX' .ig eU .. .\" End Advanced with .eU .\" Start Advanced .de sA .if !'\\*(Lv'ADVANCED' .ig eA .. .\" End Advanced with .eA .\" Start Beginner .de sB .if !'\\*(Lv'' .ig eB .. .\" End Beginner with .eB .\" Psi Name .de pN \" .pN: convert a generic file name to a specific name .ta 2.5in .if '\*(OS'CMS' \{\ . ds pO \\$1 . if '\\$1'OUTPUT' .ds pO \" Unix only . if '\\$1'BASIS' .ds pO BASIS DATA . if '\\$1'PBASIS' .ds pO PBASIS DATA . if '\\$1'HVIB_IN' .ds pO HVIB15 . if '\\$1'HVIB_OUT' .ds pO FILE15 . if '\\$1'FILE91A' .ds pO FILE91 . if '\\$1'FILE92A' .ds pO FILE92 . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .if '\*(OS'UNIX' \{\ . ds pO \\$1 . if '\\$1'INPUT' .ds pO input.dat . if '\\$1'LMO' .ds pO lmo.dat . if '\\$1'CONTOUR' .ds pO contour.ps . if '\\$1'CMO' .ds pO cmo.dat . if '\\$1'BASIS' .ds pO basis.dat . if '\\$1'PBASIS' .ds pO pbasis.dat . if '\\$1'RESUL1' .ds pO resul1.dat . if '\\$1'RESUL2' .ds pO resul2.dat . if '\\$1'RESUL3' .ds pO \" CMS only . if '\\$1'SLOFILE' .ds pO \" CMS only . if '\\$1'INTDERO' .ds pO \" CMS only . if '\\$1'MAKEFT' .ds pO resul3.dat . if '\\$1'INTDER1' .ds pO intder1.dat . if '\\$1'INTDIFO' .ds pO intdifo.dat . if '\\$1'IDER' .ds pO ider.dat . if '\\$1'OPDM48' .ds pO file51.dat . if '\\$1'HVIB_IN' .ds pO file15.dat . if '\\$1'HVIB_OUT' .ds pO file16.dat . if '\\$1'FILE12A' .ds pO file12a.dat . if '\\$1'FILE16A' .ds pO file16a.dat . if '\\$1'FILE21A' .ds pO file21a.dat . if '\\$1'FILE11' .ds pO file11.dat . if '\\$1'FILE12' .ds pO file12.dat . if '\\$1'FILE13' .ds pO file13.dat . if '\\$1'FILE14' .ds pO file14.dat . if '\\$1'TOTAL15' .ds pO total15.dat . if '\\$1'TOTAL20' .ds pO total20.dat . if '\\$1'FILE15' .ds pO file15.dat . if '\\$1'FILE16' .ds pO file16.dat . if '\\$1'FILE17' .ds pO file17.dat . if '\\$1'FILE18' .ds pO file18.dat . if '\\$1'FILE19' .ds pO file19.dat . if '\\$1'FILE20' .ds pO file20.dat . if '\\$1'FILE21' .ds pO file21.dat . if '\\$1'FILE22' .ds pO file22.dat . if '\\$1'FILE23' .ds pO file23.dat . if '\\$1'FILE24' .ds pO file24.dat . if '\\$1'FILE25' .ds pO file25.dat . if '\\$1'FILE91A' .ds pO file91a.dat . if '\\$1'FILE92A' .ds pO file92a.dat . if '\\$1'CHECK' .ds pO tape3.dat . if '\\$1'OUTPUT' .ds pO output.dat\" Unix only . if '\\$1'FILE6' .ds pO \" CMS only . if '\\$1'BMAT' .ds pO input.dat . if '\\$1'INTCO' .ds pO intco.dat . if '\\$1'GEOM' .ds pO geom.dat . if '\\$1'FCONST' .ds pO fconst.dat . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .. \" End of .pN macro definition ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/Makefile.in��������������������������������������������������������������������������������0000644�0001015�0000765�00000002165�11026242634�013020� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .PHONY: default all install depend clean dclean targetclean subdirs = ruby default: all all: install_inc: depend: clean: dclean: targetclean: top_srcdir = @top_srcdir@ prefix = @prefix@ srcdir = @srcdir@ datarootdir = @datarootdir@ datadir = @datadir@ pkgdatadir = @pkgdatadir@ VPATH = @srcdir@ top_objdir = .. MKDIRS = @MKDIRS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ install: pbasis.dat psi.dat $(MKDIRS) $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $(srcdir)/pbasis.dat $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $(srcdir)/psi.dat $(DESTDIR)$(pkgdatadir) for dir in $(subdirs); \ do \ (cd $${dir}; echo Making in $${dir}; $(MAKE) install) || exit 1; \ done install_man: macro.psi $(MKDIRS) $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $< $(DESTDIR)$(pkgdatadir) $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=lib/Makefile ./config.status �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/pbasis.dat���������������������������������������������������������������������������������0000644�0001015�0000765�00002722711�11114652441�012735� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BASIS: ( HYDROGEN:"(4S/2S)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") ) BORON:"(9S5P/4S2P)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) CARBON:"(9S5P/4S2P)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) NITROGEN:"(9S5P/4S2P)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) OXYGEN:"(9S5P/4S2P)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) FLUORINE:"(9S5P/4S2P)" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) ALUMINUM:"(11S7P/6S4P)" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) SILICON:"(11S7P/6S4P)" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) PHOSPHORUS:"(11S7P/6S4P)" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) SULFUR:"(11S7P/6S4P)" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) CHLORINE:"(11S7P/6S4P)" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) % ****************************************************************** % * % * DOUBLE-ZETA BASIS SETS FOR H,B-F,AL-CL % * % ****************************************************************** HYDROGEN:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") ) LITHIUM:"DZ" = ( (GET "HUZINAGA-DUNNING_DZ") ) BORON:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) CARBON:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) NITROGEN:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) OXYGEN:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) FLUORINE:"DZ" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") ) NEON:"DZ" = ( (GET "HUZINAGA-DUNNING_DZ") ) ALUMINUM:"DZ" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) SILICON:"DZ" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) PHOSPHORUS:"DZ" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) SULFUR:"DZ" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) CHLORINE:"DZ" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") ) % begin additions by c.b. kellogg % ****************************************************************** % **** Standard Double-zeta basis with one standard % **** polarization function (standard dzp) % ****************************************************************** HYDROGEN:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "1P_POLARIZATION") ) BORON:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") (GET "1D_POLARIZATION") ) CARBON:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") (GET "1D_POLARIZATION") ) NITROGEN:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") (GET "1D_POLARIZATION") ) OXYGEN:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") (GET "1D_POLARIZATION") ) FLUORINE:"DZP" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (GET "HUZINAGA-DUNNING_(5P/2P)") (GET "1D_POLARIZATION") ) NEON:"DZP" = ( (GET "HUZINAGA-DUNNING_DZ") (GET "1D_POLARIZATION") ) ALUMINUM:"DZP" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") (GET "1D_POLARIZATION") ) SILICON:"DZP" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") (GET "1D_POLARIZATION") ) PHOSPHORUS:"DZP" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") (GET "1D_POLARIZATION") ) SULFUR:"DZP" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") (GET "1D_POLARIZATION") ) CHLORINE:"DZP" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (GET "HUZINAGA-DUNNING_(7P/4P)") (GET "1D_POLARIZATION") ) % begin additions by buyong ma % ****************************************************************** % ** DZP BASIS SET FOR ALKALI AND ALKALINE EARTH METALS ** % ** BUYONG MA ** % ****************************************************************** % LITHIUM % ## 9s5p/4s2p ######################################################### % # reference: Thakkar, A. J.; Koga, T.; Saito, M.; Hoffmeyer, R. E ## % # Inter. J. Quan. Chem: Quan. Chem. Symp. 1993, 27 ,343 % # default contraction E(2P)=-7.3647293 % ####################################################################### LITHIUM:"DZP" = ( (S ( 1499.0000 0.0010420) ( 224.9100 0.0080240) ( 51.1840 0.0405900) ( 14.4530 0.1504840) ( 4.6303 0.3932780) ( 1.5900 0.5294390)) (S ( 1.5900 0.2177400) ( 0.56547 0.8127200)) (S ( 0.07341 1.0000000)) (S ( 0.02804 1.0000000)) (P ( 3.26650 0.0121690) ( 0.65119 0.0670150) ( 0.16963 0.2958300) ( 0.055778 0.7454170)) (P ( 0.020500 1.0000000)) ) %BERYLLIUM %## 9s5p/4s4p ####################################################### %# reference: Thakkar, A. J.; Koga, T.; Saito, M.; Hoffmeyer, R. E ## %# Inter. J. Quan. Chem: Quan. Chem. Symp. 1993, 27, 343 %# default contraction E(3P)= -14.510791 %#################################################################### BERYLLIUM:"DZP" = ( (S ( 2933.00000 0.0010460) ( 440.02000 0.0080660) ( 100.15000 0.0410010) ( 28.30400 0.1545510) ( 9.11460 0.4169990) ( 3.16940 0.4997590)) (S ( 3.16940 0.3163930) ( 1.14390 0.7217990)) (S ( 0.18648 1.0000000)) (S ( 0.065912 1.0000000)) (P ( 7.449800 0.0143990) ( 1.579600 0.0843450) ( 0.436040 0.3325820) ( 0.144360 0.7018990)) (P ( 0.050195 1.0000000)) ) %SODIUM %##################################################################### %## 11s5p/7s2p plus two even-tempered p functions as polarization ### %# Huzinaga, S. % * MODIFIED CONTRACTION BY HFS III, DEC, 1993 %# default contraction E(2S)= -161.83825644 %###################################################################### SODIUM:"DZP" = ( (S ( 16489.56600 0.00102968) ( 2535.25390 0.00759877) ( 592.29211 0.03732636) ( 170.66573 0.13422522) ( 56.957095 0.3279325)) (S ( 21.169833 1.0000000)) (S ( 8.471402 1.0000000)) (S ( 2.522141 1.0000000)) (S ( 0.928598 1.0000000)) (S ( 0.366060 1.0000000)) (S ( 0.041337 1.0000000)) (P ( 80.830968 0.01384012) ( 18.510942 0.09127347) ( 5.536469 0.29826410) ( 1.761295 0.49460330)) (P ( 0.536547 1.0000000)) (P ( 0.163 1.0000000)) (P ( 0.050 1.0000000)) ) % end changes by c.b.kellogg % ****************************************************************** % * DOUBLE-ZETA PLUS POLARIZATION BASIS SETS FOR H, B-F,AL-CL % * AUGMENTED WACHTERS BASIS SETS FOR SC-ZN % * % *********************************************** % DZP-OLD basis sets removed - M. Sinnokrot & B. Temelso % ****************************************************************** % *************************************************************** % ************************************************************** % * 9S PRIMITIVE SET CONTRACTED TO 4S FOR B-F, 4S TO 2S FOR H % * % * THOMAS H. DUNNING, JR. J. CHEM. PHYS., 53, XXXX (XXXX). % * HUZINAGA ..... % ************************************************************** % * HYDROGEN SCALED BY 1.2 % ************************************************************** HYDROGEN:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 19.2406 0.032828) ( 2.8992 0.231208) ( 0.6534 0.817238)) (S ( 0.1776 1.0)) ) LITHIUM:"HUZINAGA-DUNNING_DZ" = ( (S ( 921.3000000000 0.0013670000) ( 138.7000000000 0.0104250000) ( 31.9400000000 0.0498590000) ( 9.3530000000 0.1607010000) ( 3.1580000000 0.3446040000) ( 1.1570000000 0.4251970000)) (S ( 0.4446000000 1.0000000000)) (S ( 0.0766600000 1.0000000000)) (S ( 0.0286400000 1.0000000000)) (P ( 1.4880000000 0.0387700000) ( 0.2667000000 0.2362570000) ( 0.0720100000 0.8304480000)) (P ( 0.0237000000 1.0000000000)) ) BORON:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 2788.4100 0.002122) ( 419.0390 0.016171) ( 96.4683 0.078356) ( 28.0694 0.263250) ( 9.3760 0.596729) ( 1.3057 0.230397)) (S ( 3.4062 1.0)) (S ( 0.3245 1.0)) (S ( 0.1022 1.0)) ) CARBON:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 4232.6100 0.002029) ( 634.8820 0.015535) ( 146.0970 0.075411) ( 42.4974 0.257121) ( 14.1892 0.596555) ( 1.9666 0.242517)) (S ( 5.1477 1.0)) (S ( 0.4962 1.0)) (S ( 0.1533 1.0)) ) NITROGEN:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 5909.4400 0.002004) ( 887.4510 0.015310) ( 204.7490 0.074293) ( 59.8376 0.253364) ( 19.9981 0.600576) ( 2.6860 0.245111)) (S ( 7.1927 1.0)) (S ( 0.7000 1.0)) (S ( 0.2133 1.0)) ) OXYGEN:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 7816.5400 0.002031) ( 1175.8200 0.015436) ( 273.1880 0.073771) ( 81.1696 0.247606) ( 27.1836 0.611832) ( 3.4136 0.241205)) (S ( 9.5322 1.0)) (S ( 0.9398 1.0)) (S ( 0.2846 1.0)) ) FLUORINE:"HUZINAGA-DUNNING_(9S/4S)" = ( (S ( 9994.7900 0.002017) ( 1506.0300 0.015295) ( 350.2690 0.073110) ( 104.0530 0.246420) ( 34.8432 0.612593) ( 4.3688 0.242489)) (S ( 12.2164 1.0)) (S ( 1.2078 1.0)) (S ( 0.3634 1.0)) ) NEON:"HUZINAGA-DUNNING_DZ" = ( (S ( 12100.0000000000 0.0012000000) ( 1821.0000000000 0.0090920000) ( 432.8000000000 0.0413050000) ( 132.5000000000 0.1378670000) ( 43.7700000000 0.3624330000) ( 14.9100000000 0.4722470000) ( 5.1270000000 0.1300350000)) (S ( 14.9100000000 1.0000000000)) (S ( 1.4910000000 1.0000000000)) (S ( 0.4468000000 1.0000000000)) (P ( 56.4500000000 0.0208750000) ( 12.9200000000 0.1300320000) ( 3.8650000000 0.3956790000) ( 1.2030000000 0.6214500000)) (P ( 0.3444000000 1.0000000000)) ) % ************************************************************** % * 11S PRIMITIVE SET CONTRACTED TO 6S FOR AL-CL % * % * THOMAS H. DUNNING,JR. AND P. JEFFREY HAY, IN MODERN THEORETICAL % * CHEMISTRY, VOL 3, ED. H. F. SCHAEFER III. PLENUM PRESS NY.1977 % ************************************************************** ALUMINUM:"HUZINAGA-DUNNING_(11S/6S)" = ( (S ( 23490. 0.002509) ( 3548. 0.018986) ( 823.5 0.092914) ( 237.7 0.335935) ( 78.6 0.647391)) (S ( 78.6 0.111937) ( 29.05 0.655976) ( 11.62 0.283349)) (S ( 3.465 1.000000)) (S ( 1.233 1.000000)) (S ( 0.2018 1.000000)) (S ( 0.07805 1.000000)) ) SILICON:"HUZINAGA-DUNNING_(11S/6S)" = ( (S ( 26740.0 0.002583) ( 4076.0 0.019237) ( 953.3 0.093843) ( 274.6 0.341235) ( 90.68 0.641675)) (S ( 90.680 0.121439) ( 33.530 0.653143) ( 13.460 0.277624)) (S ( 4.0510 1.0)) (S ( 1.4840 1.0)) (S ( 0.2704 1.0)) (S ( 0.09932 1.0)) ) PHOSPHORUS:"HUZINAGA-DUNNING_(11S/6S)" = ( (S ( 30630. 0.002619) ( 4684. 0.019479) ( 1094. 0.095207) ( 315.3 0.345742) ( 104.1 0.636288)) (S ( 104.1 0.130706) ( 38.42 0.650274) ( 15.45 0.272308)) (S ( 4.656 1.0)) (S ( 1.759 1.0)) (S ( 0.3409 1.0)) (S ( 0.1238 1.0)) ) SULFUR:"HUZINAGA-DUNNING_(11S/6S)" = ( (S ( 35710.0 0.002565) ( 5397. 0.019405) ( 1250. 0.095595) ( 359.9 0.345793) ( 119.2 0.635794)) (S ( 119.2 0.130096) ( 43.98 0.651301) ( 17.63 0.271955)) (S ( 5.420 1.0)) (S ( 2.074 1.0)) (S ( 0.4246 1.0)) (S ( 0.1519 1.0)) ) CHLORINE:"HUZINAGA-DUNNING_(11S/6S)" = ( (S ( 40850. 0.002532) ( 6179. 0.019207) ( 1425. 0.095257) ( 409.2 0.345589) ( 135.5 0.636401)) (S ( 135.5 0.120956) ( 50.13 0.648511) ( 20.21 0.275487)) (S ( 6.283 1.0)) (S ( 2.460 1.0)) (S ( 0.5271 1.0)) (S ( 0.1884 1.0)) ) % ************************************************************** % * 5P PRIMITVE SET CONTRACTED TO 2P FOR B-F % * % * THOMAS H. DUNNING, JR. J. CHEM. PHYS., 53, XXXX (XXXX). % * HUZINAGA ..... % ************************************************************** BORON:"HUZINAGA-DUNNING_(5P/2P)" = ( (P ( 11.3413 0.017987) ( 2.4360 0.110339) ( 0.6836 0.383111) ( 0.2134 0.647860)) (P ( 0.0701 1.0)) ) CARBON:"HUZINAGA-DUNNING_(5P/2P)" = ( (P ( 18.1557 0.018534) ( 3.9864 0.115442) ( 1.1429 0.386206) ( 0.3594 0.640089)) (P ( 0.1146 1.0)) ) NITROGEN:"HUZINAGA-DUNNING_(5P/2P)" = ( (P ( 26.7860 0.018257) ( 5.9564 0.116407) ( 1.7074 0.390111) ( 0.5314 0.637221)) (P ( 0.1654 1.0)) ) OXYGEN:"HUZINAGA-DUNNING_(5P/2P)" = ( (P ( 35.1832 0.019580) ( 7.9040 0.124189) ( 2.3051 0.394727) ( 0.7171 0.627375)) (P ( 0.2137 1.0)) ) FLUORINE:"HUZINAGA-DUNNING_(5P/2P)" = ( (P ( 44.3555 0.020868) ( 10.0820 0.130092) ( 2.9959 0.396219) ( 0.9383 0.620368)) (P ( 0.2733 1.0)) ) % ************************************************************* % * 7P PRIMITIVE SET CONTRACTED TO 4P FOR AL-CL % * % * T.H. DUNNING,JR. AND P.EJEFFREY HAY, IN MODERN THEORETICAL % * CHEMISTRY, VOL 3, ED. H. F. SCHAEFER III. PLENUM PRESS NY 1977 % ************************************************************* ALUMINUM:"HUZINAGA-DUNNING_(7P/4P)" = ( (P ( 141.5 0.017882) ( 33.22 0.120375) ( 10.39 0.411580) ( 3.593 0.595353)) (P ( 3.593 0.211758) ( 1.242 0.837795)) (P ( 0.3040 1.000000)) (P ( 0.07629 1.000000)) ) SILICON:"HUZINAGA-DUNNING_(7P/4P)" = ( (P ( 163.70 0.011498) ( 38.350 0.077726) ( 12.020 0.263595) ( 4.185 0.758269)) (P ( 4.1850 -1.173045) ( 1.4830 1.438335)) (P ( 0.3350 1.0)) (P ( 0.09699 1.0)) ) PHOSPHORUS:"HUZINAGA-DUNNING_(7P/4P)" = ( (P ( 187.7 0.013158) ( 43.63 0.090494) ( 13.60 0.305054) ( 4.766 0.713579)) (P ( 4.766 -0.792573) ( 1.743 1.429987)) (P ( 0.4192 1.0)) (P ( 0.1245 1.0)) ) SULFUR:"HUZINAGA-DUNNING_(7P/4P)" = ( (P ( 212.9 0.014091) ( 49.60 0.096685) ( 15.52 0.323874) ( 5.476 0.691756)) (P ( 5.476 -0.626737) ( 2.044 1.377051)) (P ( 0.5218 1.0)) (P ( 0.1506 1.0)) ) CHLORINE:"HUZINAGA-DUNNING_(7P/4P)" = ( (P ( 240.8 0.014595) ( 56.56 0.099047) ( 17.85 0.330562) ( 6.350 0.682874)) (P ( 6.350 -0.561785) ( 2.403 1.351901)) (P ( 0.6410 1.0)) (P ( 0.1838 1.0)) ) % *************************************************************** % ************************************************************** % * 9S PRIMITVE SET CONTRACTED TO 5S FOR B-F, 4S TO 3S FOR H % * % * THOMAS H. DUNNING, JR. J. CHEM. PHYS., 53, XXXX (XXXX). % * HUZINAGA .... % ************************************************************** % * HYDROGEN SCALED BY 1.2 % ************************************************************** HYDROGEN:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 19.2406 0.130844) ( 2.8992 0.921539)) (S ( 0.6534 1.0)) (S ( 0.1776 1.0)) ) BORON:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 2788.4100 0.006340) ( 419.0390 0.048310) ( 96.4683 0.234078) ( 28.0694 0.786421)) (S ( 9.3760 0.801018) ( 1.3057 0.309273)) (S ( 3.4062 1.0)) (S ( 0.3245 1.0)) (S ( 0.1022 1.0)) ) CARBON:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 4232.6100 0.006228) ( 634.8820 0.047676) ( 146.0970 0.231439) ( 42.4974 0.789108)) (S ( 14.1892 0.791751) ( 1.9666 0.321870)) (S ( 5.1477 1.0)) (S ( 0.4962 1.0)) (S ( 0.1533 1.0)) ) NITROGEN:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 5909.4400 0.006240) ( 887.4510 0.047669) ( 204.7490 0.231317) ( 59.8376 0.788869)) (S ( 19.9981 0.792912) ( 2.6860 0.323609)) (S ( 7.1927 1.0)) (S ( 0.7000 1.0)) (S ( 0.2133 1.0)) ) OXYGEN:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 7816.5400 0.006436) ( 1175.8200 0.048924) ( 273.1880 0.233819) ( 81.1696 0.784798)) (S ( 27.1836 0.803381) ( 3.4136 0.316720)) (S ( 9.5322 1.0)) (S ( 0.9398 1.0)) (S ( 0.2846 1.0)) ) FLUORINE:"HUZINAGA-DUNNING_(9S/5S)" = ( (S ( 9994.7900 0.006431) ( 1506.0300 0.048757) ( 350.2690 0.233065) ( 104.0530 0.785549)) (S ( 34.8432 0.802728) ( 4.3688 0.317752)) (S ( 12.2164 1.0)) (S ( 1.2078 1.0)) (S ( 0.3634 1.0)) ) % **************************************************************** % ************************************************************** % * 5P PRIMITIVE SET CONTRACTED TO 3P FOR B-F % * % * THOMAS H. DUNNING, JR. J. CHEM. PHYS., 53, XXXX (XXXX). % * HUZINAGA .... % ************************************************************** BORON:"HUZINAGA-DUNNING_(5P/3P)" = ( (P ( 11.3413 0.038707) ( 2.4360 0.237448) ( 0.6836 0.824446)) (P ( 0.2134 1.0)) (P ( 0.0701 1.0)) ) CARBON:"HUZINAGA-DUNNING_(5P/3P)" = ( (P ( 18.1557 0.039196) ( 3.9864 0.244144) ( 1.1429 0.816775)) (P ( 0.3594 1.0)) (P ( 0.1146 1.0)) ) NITROGEN:"HUZINAGA-DUNNING_(5P/3P)" = ( (P ( 26.7860 0.038244) ( 5.9564 0.243846) ( 1.7074 0.817193)) (P ( 0.5314 1.0)) (P ( 0.1654 1.0)) ) OXYGEN:"HUZINAGA-DUNNING_(5P/3P)" = ( (P ( 35.1832 0.040023) ( 7.9040 0.253849) ( 2.3051 0.806842)) (P ( 0.7171 1.0)) (P ( 0.2137 1.0)) ) FLUORINE:"HUZINAGA-DUNNING_(5P/3P)" = ( (P ( 44.3555 0.042011) ( 10.0820 0.261899) ( 2.9959 0.797662)) (P ( 0.9383 1.0)) (P ( 0.2733 1.0)) ) % ************************************************************** % * 11S PRIMITIVE SET CONTRACTED TO 7S FOR AL-CL % * % * THOMAS H. DUNNING,JR. AND P.JEFFREY HAY, IN MODERN THEORETICAL % * CHEMISTRY, VOL 3, ED. H. F. SCHAEFER III. PLENUM PRESS NY.1977 % * % * MODIFIED CONTRACTION BY HFS III, MAY, 1986 % ************************************************************** ALUMINUM:"HUZINAGA-DUNNING_(11S/7S)" = ( (S ( 23490. 0.002509) ( 3548. 0.018986) ( 823.5 0.092914) ( 237.7 0.335935) ( 78.6 0.647391)) (S ( 78.6 0.111937) ( 29.05 0.655976)) (S ( 11.62 1.000000)) (S ( 3.465 1.000000)) (S ( 1.233 1.000000)) (S ( 0.2018 1.000000)) (S ( 0.07805 1.000000)) ) SILICON:"HUZINAGA-DUNNING_(11S/7S)" = ( (S ( 26740.0 0.002583) ( 4076.0 0.019237) ( 953.3 0.093843) ( 274.6 0.341235) ( 90.68 0.641675)) (S ( 90.680 0.121439) ( 33.530 0.653143)) (S ( 13.460 1.000000)) (S ( 4.0510 1.0)) (S ( 1.4840 1.0)) (S ( 0.2704 1.0)) (S ( 0.09932 1.0)) ) PHOSPHORUS:"HUZINAGA-DUNNING_(11S/7S)" = ( (S ( 30630. 0.002619) ( 4684. 0.019479) ( 1094. 0.095207) ( 315.3 0.345742) ( 104.1 0.636288)) (S ( 104.1 0.130706) ( 38.42 0.650274)) (S ( 15.45 1.000000)) (S ( 4.656 1.0)) (S ( 1.759 1.0)) (S ( 0.3409 1.0)) (S ( 0.1238 1.0)) ) SULFUR:"HUZINAGA-DUNNING_(11S/7S)" = ( (S ( 35710.0 0.002565) ( 5397. 0.019405) ( 1250. 0.095595) ( 359.9 0.345793) ( 119.2 0.635794)) (S ( 119.2 0.130096) ( 43.98 0.651301)) (S ( 17.63 1.000000)) (S ( 5.420 1.0)) (S ( 2.074 1.0)) (S ( 0.4264 1.0)) (S ( 0.1519 1.0)) ) CHLORINE:"HUZINAGA-DUNNING_(11S/7S)" = ( (S ( 40850. 0.002532) ( 6179. 0.019207) ( 1425. 0.095257) ( 409.2 0.345589) ( 135.5 0.636401)) (S ( 135.5 0.120956) ( 50.13 0.648511)) (S ( 20.21 1.000000)) (S ( 6.283 1.0)) (S ( 2.460 1.0)) (S ( 0.5271 1.0)) (S ( 0.1884 1.0)) ) % ************************************************************* % * 7P PRIMITIVE SET CONTRACTED TO 5P FOR AL-CL % * % * T.H. DUNNING,JR. AND P.JEFFREY HAY, IN MODERN THEORETICAL % * CHEMISTRY, VOL 3, ED. H. F. SCHAEFER III. PLENUM PRESS NY 1977 % * % * MODIFIED CONTRACTION BY HFS III, MAY, 1986 % ************************************************************* ALUMINUM:"HUZINAGA-DUNNING_(7P/5P)" = ( (P ( 141.5 0.017882) ( 33.22 0.120375) ( 10.39 0.411580)) (P ( 3.593 1.000000)) (P ( 1.242 1.000000)) (P ( 0.3040 1.000000)) (P ( 0.07629 1.000000)) ) SILICON:"HUZINAGA-DUNNING_(7P/5P)" = ( (P ( 163.70 0.011498) ( 38.350 0.077726) ( 12.020 0.263595)) (P ( 4.1850 1.000000)) (P ( 1.4830 1.000000)) (P ( 0.3350 1.0)) (P ( 0.09699 1.0)) ) PHOSPHORUS:"HUZINAGA-DUNNING_(7P/5P)" = ( (P ( 187.7 0.013158) ( 43.63 0.090494) ( 13.60 0.305054)) (P ( 4.766 1.000000)) (P ( 1.743 1.000000)) (P ( 0.4192 1.0)) (P ( 0.1245 1.0)) ) SULFUR:"HUZINAGA-DUNNING_(7P/5P)" = ( (P ( 212.9 0.014091) ( 49.60 0.096685) ( 15.52 0.323874)) (P ( 5.476 1.000000)) (P ( 2.044 1.000000)) (P ( 0.5218 1.0)) (P ( 0.1506 1.0)) ) CHLORINE:"HUZINAGA-DUNNING_(7P/5P)" = ( (P ( 240.8 0.014595) ( 56.56 0.099047) ( 17.85 0.330562)) (P ( 6.350 1.000000)) (P ( 2.403 1.000000)) (P ( 0.6410 1.0)) (P ( 0.1838 1.0)) ) % ************************************************************** % * 12S PRIMITIVE SET CONTRACTED TO 9S FOR AL-CL % * % * S. HUZINAGA , APPROXIMATE ATOMIC FUNCTIONS II., UNIVERSITY OF ALBERTA % ************************************************************** ALUMINUM:"HUZINAGA_(12S/9S)" = ( (S ( 54866.489 0.00035287562) ( 8211.7665 0.0027441710) ( 1866.1761 0.014158397) ( 531.12934 0.055731404)) (S ( 175.11797 1.0)) (S ( 64.005500 1.0)) (S ( 25.292507 1.0)) (S ( 10.534910 1.0)) (S ( 3.2067110 1.0)) (S ( 1.1525551 1.0)) (S ( 0.17667755 1.0)) (S ( 0.06523747 1.0)) ) SILICON:"HUZINAGA_(12S/9S)" = ( (S ( 69379.230 0.00031745878) ( 10354.940 0.0024856925) ( 2333.8796 0.013030250) ( 657.14295 0.052260491)) (S ( 214.30113 1.0)) (S ( 77.629168 1.0)) (S ( 30.630807 1.0)) (S ( 12.801295 1.0)) (S ( 3.9268663 1.0)) (S ( 1.4523433 1.0)) (S ( 0.25623427 1.0)) (S ( 0.094279218 1.0)) ) PHOSPHORUS:"HUZINAGA_(12S/9S)" = ( (S ( 77492.429 0.00032906498) ( 11605.789 0.0025517411) ( 2645.9649 0.013130174) ( 754.97623 0.051896915)) (S ( 248.75468 1.0)) (S ( 91.156530 1.0)) (S ( 36.225668 1.0)) (S ( 15.211316 1.0)) (S ( 4.7138230 1.0)) (S ( 1.7826948 1.0)) (S ( 0.34252100 1.0)) (S ( 0.12463132 1.0)) ) SULFUR:"HUZINAGA_(12S/9S)" = ( (S ( 93413.396 0.00030654032) ( 13961.657 0.0023915122) ( 3169.9098 0.012358114) ( 902.45634 0.049039750)) (S ( 297.15842 1.0)) (S ( 108.70201 1.0)) (S ( 43.155299 1.0)) (S ( 18.107948 1.0)) (S ( 5.5704717 1.0)) (S ( 2.1427164 1.0)) (S ( 0.43399430 1.0)) (S ( 0.15701692 1.0)) ) CHLORINE:"HUZINAGA_(12S/9S)" = ( (S (105818.82 0.00030547509) ( 15872.006 0.0023651510) ( 3619.6548 0.012189277) ( 1030.8038 0.048413396)) (S ( 339.90788 1.0)) (S ( 124.53810 1.0)) (S ( 49.513502 1.0)) (S ( 20.805604 1.0)) (S ( 6.4648238 1.0)) (S ( 2.5254537 1.0)) (S ( 0.53783215 1.0)) (S ( 0.19349716 1.0)) ) % ************************************************************* % * 9P PRIMITIVE SET CONTRACTED TO 6P FOR AL-CL % * % * S. HUZINAGA, APPROXIMATE ATOMIC FUNCTIONS II., U. OF ALBERTA, 19?? % ************************************************************* ALUMINUM:"HUZINAGA_(9P/6P)" = ( (P ( 259.28362 0.0040558767) ( 61.076870 0.030464818) ( 19.303237 0.12688990) ( 7.0108820 0.31252961)) (P ( 2.6738653 1.0)) (P ( 1.0365955 1.0)) (P ( 0.31681873 1.0)) (P ( 0.11425682 1.0)) (P ( 0.04139700 1.0)) ) SILICON:"HUZINAGA_(9P/6P)" = ( (P ( 335.48319 0.0035511893) ( 78.900366 0.027356818) ( 24.988150 0.11649209) ( 9.2197114 0.29304509)) (P ( 3.6211402 1.0)) (P ( 1.4513101 1.0)) (P ( 0.50497692 1.0)) (P ( 0.18631667 1.0)) (P ( 0.06543200 1.0)) ) PHOSPHORUS:"HUZINAGA_(9P/6P)" = ( (P ( 384.84336 0.0037125225) ( 90.552096 0.028587931) ( 28.805685 0.12113631) ( 10.688374 0.30147790)) (P ( 4.2520977 1.0)) (P ( 1.7405277 1.0)) (P ( 0.59789296 1.0)) (P ( 0.22921800 1.0)) (P ( 0.083827970 1.0)) ) SULFUR:"HUZINAGA_(9P/6P)" = ( (P ( 495.03999 0.0031182213) ( 117.22119 0.024213249) ( 37.506558 0.10593219) ( 13.909968 0.28269850)) (P ( 5.5045015 1.0)) (P ( 2.2432812 1.0)) (P ( 0.77617992 1.0)) (P ( 0.29187047 1.0)) (P ( 0.10286700 1.0)) ) CHLORINE:"HUZINAGA_(9P/6P)" = ( (P ( 589.77639 0.0029332779) ( 139.84860 0.022934282) ( 44.794920 0.10198374) ( 16.612069 0.27845962)) (P ( 6.5994980 1.0)) (P ( 2.7141323 1.0)) (P ( 0.95279614 1.0)) (P ( 0.35804401 1.0)) (P ( 0.12498600 1.0)) ) % **************************************************************** % ****************************************************************** % * POLARIZATION FUNCTIONS FROM DUNNING FOR H, B-F % * % ****************************************************************** HYDROGEN:"DUNNING_POLARIZATION" = ( (P ( 0.75 1.0)) ) BORON:"DUNNING_POLARIZATION" = ( (D ( 0.70 1.0)) ) CARBON:"DUNNING_POLARIZATION" = ( (D ( 0.75 1.0)) ) NITROGEN:"DUNNING_POLARIZATION" = ( (D ( 0.80 1.0)) ) OXYGEN:"DUNNING_POLARIZATION" = ( (D ( 0.85 1.0)) ) FLUORINE:"DUNNING_POLARIZATION" = ( (D ( 1.0 1.0)) ) % *************************************************************** % * POLARIZATION FUNCTIONS AS HANDED DOWN BY OUR ILLUSTRIOUS % * LEADER H. F. SCHAEFER III, FOR AL-CL % * % ************************************************************** ALUMINUM:"STANDARD_POLARIZATION" = ( (D ( 0.4 1.0)) ) SILICON:"STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) PHOSPHORUS:"STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) SULFUR:"STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) CHLORINE:"STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) % *************************************************************** % * POLARIZATION FUNCTIONS FROM DUNNING FOR TZP H, B-F % * % *************************************************************** HYDROGEN:"MORE_DUNNING_POLARIZATION" = ( (P ( 0.75 1.0)) ) BORON:"MORE_DUNNING_POLARIZATION" = ( (D ( 0.70 1.0)) ) CARBON:"MORE_DUNNING_POLARIZATION" = ( (D ( 0.75 1.0)) ) NITROGEN:"MORE_DUNNING_POLARIZATION" = ( (D ( 0.80 1.0)) ) OXYGEN:"MORE_DUNNING_POLARIZATION" = ( (D ( 0.85 1.0)) ) FLUORINE:"MORE_DUNNING_POLARIZATION" = ( (D ( 1.0 1.0)) ) % *************************************************************** % * POLARIZATION FUNCTIONS AS HANDED DOWN BY OUR ILLUSTRIOUS % * LEADER H. F. SCHAEFER III, FOR AL-CL TZP BASIS % * % ************************************************************** ALUMINUM:"MORE_STANDARD_POLARIZATION" = ( (D ( 0.4 1.0)) ) SILICON:"MORE_STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) PHOSPHORUS:"MORE_STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) SULFUR:"MORE_STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) CHLORINE:"MORE_STANDARD_POLARIZATION" = ( (D ( 0.5 1.0)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: STO-3G % % STO-3G Minimal Basis % -------------------- % Elements Contraction References % H - He: (3s) -> [1s] W.J. Hehre, R.F. Stewart and J.A. Pople, % Li - Ne: (6s,3p) -> [2s,1p] J. Chem. Phys. 2657 (1969). % Na - Ar: (9s,6p) -> [3s,2p] W.J. Hehre, R. Ditchfield, R.F. Stewart, % J.A. Pople, J. Chem. Phys. 2769 (1970). % K,Ca - : (12s,9p) -> [4s,3p] W.J. Pietro, B.A. Levy, W.J. Hehre and R.F. % Ga - Kr Stewart, J. Am. Chem. Soc. 19, 2225 (1980). % Sc - Zn: (12s,9p,3d) -> [4s,3p,1d] W.J. Pietro and W.J. Hehre, J. Comp. Chem. % Y - Cd: (15s,12p,6d)-> [5s,4p,2d] 4, 241 (1983). % ** % The exponents and contraction coefficients for the STO-3G basis sets were % obtained by least-squares fitting of Slater-type AO's, with scaling factors % based on optimal values for a variety of molecules. The s and p exponents for % the valence shell were constrained to be equal. % ** % The original scaling factors for Li, Be and B were superceded by values given % in the paper on second row basis sets. % ** % 3s and 3p exponents and contraction coefficients are taken from the work of % Hehre et al. JCP 52, 2769 (1970) while the scaling factors for K, Ca, etc. % come from J. Am. Chem. Soc. 19, 2225 (1980). % ** % Note: Whenever the exponents for transition metals differed between programs % such as Gaussian and GAMESS or HONDO, the Gaussian exponents were used. % Attempts to obtain information from W. J. Hehre to arbitrate the % differences proved unsuccessful. The Gaussian 5d convention was used. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"STO-3G" = ( (S ( 3.4252509100 0.1543289700) ( 0.6239137300 0.5353281400) ( 0.1688554000 0.4446345400)) ) HELIUM:"STO-3G" = ( (S ( 6.3624213900 0.1543289700) ( 1.1589230000 0.5353281400) ( 0.3136497900 0.4446345400)) ) LITHIUM:"STO-3G" = ( (S ( 16.1195750000 0.1543289700) ( 2.9362007000 0.5353281400) ( 0.7946505000 0.4446345400)) (S ( 0.6362897000 -0.0999672300) ( 0.1478601000 0.3995128300) ( 0.0480887000 0.7001154700)) (P ( 0.6362897000 0.1559162700) ( 0.1478601000 0.6076837200) ( 0.0480887000 0.3919573900)) ) BERYLLIUM:"STO-3G" = ( (S ( 30.1678710000 0.1543289700) ( 5.4951153000 0.5353281400) ( 1.4871927000 0.4446345400)) (S ( 1.3148331000 -0.0999672300) ( 0.3055389000 0.3995128300) ( 0.0993707000 0.7001154700)) (P ( 1.3148331000 0.1559162700) ( 0.3055389000 0.6076837200) ( 0.0993707000 0.3919573900)) ) BORON:"STO-3G" = ( (S ( 48.7911130000 0.1543289700) ( 8.8873622000 0.5353281400) ( 2.4052670000 0.4446345400)) (S ( 2.2369561000 -0.0999672300) ( 0.5198205000 0.3995128300) ( 0.1690618000 0.7001154700)) (P ( 2.2369561000 0.1559162700) ( 0.5198205000 0.6076837200) ( 0.1690618000 0.3919573900)) ) CARBON:"STO-3G" = ( (S ( 71.6168370000 0.1543289700) ( 13.0450960000 0.5353281400) ( 3.5305122000 0.4446345400)) (S ( 2.9412494000 -0.0999672300) ( 0.6834831000 0.3995128300) ( 0.2222899000 0.7001154700)) (P ( 2.9412494000 0.1559162700) ( 0.6834831000 0.6076837200) ( 0.2222899000 0.3919573900)) ) NITROGEN:"STO-3G" = ( (S ( 99.1061690000 0.1543289700) ( 18.0523120000 0.5353281400) ( 4.8856602000 0.4446345400)) (S ( 3.7804559000 -0.0999672300) ( 0.8784966000 0.3995128300) ( 0.2857144000 0.7001154700)) (P ( 3.7804559000 0.1559162700) ( 0.8784966000 0.6076837200) ( 0.2857144000 0.3919573900)) ) OXYGEN:"STO-3G" = ( (S ( 130.7093200000 0.1543289700) ( 23.8088610000 0.5353281400) ( 6.4436083000 0.4446345400)) (S ( 5.0331513000 -0.0999672300) ( 1.1695961000 0.3995128300) ( 0.3803890000 0.7001154700)) (P ( 5.0331513000 0.1559162700) ( 1.1695961000 0.6076837200) ( 0.3803890000 0.3919573900)) ) FLUORINE:"STO-3G" = ( (S ( 166.6791300000 0.1543289700) ( 30.3608120000 0.5353281400) ( 8.2168207000 0.4446345400)) (S ( 6.4648032000 -0.0999672300) ( 1.5022812000 0.3995128300) ( 0.4885885000 0.7001154700)) (P ( 6.4648032000 0.1559162700) ( 1.5022812000 0.6076837200) ( 0.4885885000 0.3919573900)) ) NEON:"STO-3G" = ( (S ( 207.0156100000 0.1543289700) ( 37.7081510000 0.5353281400) ( 10.2052970000 0.4446345400)) (S ( 8.2463151000 -0.0999672300) ( 1.9162662000 0.3995128300) ( 0.6232293000 0.7001154700)) (P ( 8.2463151000 0.1559162700) ( 1.9162662000 0.6076837200) ( 0.6232293000 0.3919573900)) ) SODIUM:"STO-3G" = ( (S ( 250.7724300000 0.1543289670) ( 45.6785110000 0.5353281420) ( 12.3623880000 0.4446345420)) (S ( 12.0401930000 -0.0999672292) ( 2.7978819000 0.3995128260) ( 0.9099580000 0.7001154690)) (S ( 1.4787406000 -0.2196203690) ( 0.4125649000 0.2255954340) ( 0.1614751000 0.9003984260)) (P ( 12.0401930000 0.1559162750) ( 2.7978819000 0.6076837190) ( 0.9099580000 0.3919573930)) (P ( 1.4787406000 0.0105876043) ( 0.4125649000 0.5951670050) ( 0.1614751000 0.4620010120)) ) MAGNESIUM:"STO-3G" = ( (S ( 299.2374000000 0.1543289670) ( 54.5064700000 0.5353281420) ( 14.7515800000 0.4446345420)) (S ( 15.1218200000 -0.0999672292) ( 3.5139870000 0.3995128260) ( 1.1428570000 0.7001154690)) (S ( 1.3954480000 -0.2196203690) ( 0.3893260000 0.2255954340) ( 0.1523800000 0.9003984260)) (P ( 15.1218200000 0.1559162750) ( 3.5139870000 0.6076837190) ( 1.1428570000 0.3919573930)) (P ( 1.3954480000 0.0105876043) ( 0.3893260000 0.5951670050) ( 0.1523800000 0.4620010120)) ) ALUMINUM:"STO-3G" = ( (S ( 351.4214770000 0.1543289670) ( 64.0118607000 0.5353281420) ( 17.3241076000 0.4446345420)) (S ( 18.8993962000 -0.0999672292) ( 4.3918132300 0.3995128260) ( 1.4283539700 0.7001154690)) (S ( 1.3954482900 -0.2196203690) ( 0.3893265320 0.2255954340) ( 0.1523797660 0.9003984260)) (P ( 18.8993962000 0.1559162750) ( 4.3918132300 0.6076837190) ( 1.4283539700 0.3919573930)) (P ( 1.3954482900 0.0105876043) ( 0.3893265320 0.5951670050) ( 0.1523797660 0.4620010120)) ) SILICON:"STO-3G" = ( (S ( 407.7975510000 0.1543289670) ( 74.2808330000 0.5353281420) ( 20.1032923000 0.4446345420)) (S ( 23.1936561000 -0.0999672292) ( 5.3897068700 0.3995128260) ( 1.7528999500 0.7001154690)) (S ( 1.4787406200 -0.2196203690) ( 0.4125648800 0.2255954340) ( 0.1614750980 0.9003984260)) (P ( 23.1936561000 0.1559162750) ( 5.3897068700 0.6076837190) ( 1.7528999500 0.3919573930)) (P ( 1.4787406200 0.0105876043) ( 0.4125648800 0.5951670050) ( 0.1614750980 0.4620010120)) ) PHOSPHORUS:"STO-3G" = ( (S ( 468.3656380000 0.1543289670) ( 85.3133856000 0.5353281420) ( 23.0891316000 0.4446345420)) (S ( 28.0326396000 -0.0999672292) ( 6.5141825800 0.3995128260) ( 2.1186143500 0.7001154690)) (S ( 1.7431032300 -0.2196203690) ( 0.4863213770 0.2255954340) ( 0.1903428910 0.9003984260)) (P ( 28.0326396000 0.1559162750) ( 6.5141825800 0.6076837190) ( 2.1186143500 0.3919573930)) (P ( 1.7431032300 0.0105876043) ( 0.4863213770 0.5951670050) ( 0.1903428910 0.4620010120)) ) SULFUR:"STO-3G" = ( (S ( 533.1257360000 0.1543289670) ( 97.1095183000 0.5353281420) ( 26.2816254000 0.4446345420)) (S ( 33.3297517000 -0.0999672292) ( 7.7451175200 0.3995128260) ( 2.5189526000 0.7001154690)) (S ( 2.0291942700 -0.2196203690) ( 0.5661400520 0.2255954340) ( 0.2215833790 0.9003984260)) (P ( 33.3297517000 0.1559162750) ( 7.7451175200 0.6076837190) ( 2.5189526000 0.3919573930)) (P ( 2.0291942700 0.0105876043) ( 0.5661400520 0.5951670050) ( 0.2215833790 0.4620010120)) ) CHLORINE:"STO-3G" = ( (S ( 601.3456140000 0.1543289670) ( 109.5358540000 0.5353281420) ( 29.6446769000 0.4446345420)) (S ( 38.9604189000 -0.0999672292) ( 9.0535634800 0.3995128260) ( 2.9444998300 0.7001154690)) (S ( 2.1293864900 -0.2196203690) ( 0.5940934270 0.2255954340) ( 0.2325241410 0.9003984260)) (P ( 38.9604189000 0.1559162750) ( 9.0535634800 0.6076837190) ( 2.9444998300 0.3919573930)) (P ( 2.1293864900 0.0105876043) ( 0.5940934270 0.5951670050) ( 0.2325241410 0.4620010120)) ) ARGON:"STO-3G" = ( (S ( 674.4465180000 0.1543289670) ( 122.8512750000 0.5353281420) ( 33.2483494000 0.4446345420)) (S ( 45.1642439000 -0.0999672292) ( 10.4951990000 0.3995128260) ( 3.4133644500 0.7001154690)) (S ( 2.6213665200 -0.2196203690) ( 0.7313546050 0.2255954340) ( 0.2862472360 0.9003984260)) (P ( 45.1642439000 0.1559162750) ( 10.4951990000 0.6076837190) ( 3.4133644500 0.3919573930)) (P ( 2.6213665200 0.0105876043) ( 0.7313546050 0.5951670050) ( 0.2862472360 0.4620010120)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % WACHTERS AND WACHTERS-f Basis sets % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: Wachters+f % % Wachters+f First Row Transition Metal Basis % ------------------------------------------- % Elements Contraction References % Sc - Cu: (14s,11p,6d,3f) -> [8s,6p,4d,1f] A. J. H. Wachters, J. Chem. Phys. % 52, 1033 (1970). % A. J. H. Wachters, IBM Tech. Rept. % RJ584 (1969) % f exponents from: C. W. Bauschlicher, Jr. S. R. Langhoff and L. A. Barnes, % J. Chem. Phys. 91, 2399 (1989) %** % The f functions are contracted (3f)/[1f]. You can split off the last f for a % (3f)/[2f] contraction. The contraction coefficients are from a three term fit % to an STO with exponents of 1.6(Sc) to 4.8(Cu) in steps of 0.4. It is easy % to replace (3f) with (1f) using Stewards fits. % For Sc and Ti the 3s and 3p orbitals sometimes mix with ligands which are % bound to the metal. You can get around this by changing the 3p contraction % to 3311111 and correlate the metal 3s and 3p. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % BASIS "Wachters+f" SPHERICAL (according to EMSL library) % "WACHTERS-F":puream = true SCANDIUM:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 0.8918597000 0.1737857000) ( 0.3198414000 0.5973381000) ( 0.1369599000 0.3929396000)) ) TITANIUM:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 1.3935308000 0.1737857000) ( 0.4997522000 0.5973381000) ( 0.2139998000 0.3929396000)) ) VANADIUM:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 2.0066843000 0.1737857000) ( 0.7196432000 0.5973381000) ( 0.3081598000 0.3929396000)) ) CHROMIUM:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 2.7313203000 0.1737857000) ( 0.9795143000 0.5973381000) ( 0.4194397000 0.3929396000)) ) MANGANESE:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 3.5674388000 0.1737857000) ( 1.2793657000 0.5973381000) ( 0.5478396000 0.3929396000)) ) IRON:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 4.5150397000 0.1737857000) ( 1.6191972000 0.5973381000) ( 0.6933595000 0.3929396000)) ) COBALT:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 5.5741231000 0.1737857000) ( 1.9990089000 0.5973381000) ( 0.8559993000 0.3929396000)) ) NICKEL:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 6.7446890000 0.1737857000) ( 2.4188007000 0.5973381000) ( 1.0357592000 0.3929396000)) ) COPPER:"WACHTERS-F" = ( (GET "WACHTERS") (F ( 8.0267373000 0.1737857000) ( 2.8785728000 0.5973381000) ( 1.2326390000 0.3929396000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %POTASSIUM %k wachters ######################################################## %k 14s9p1d/10s6p1d %# plus two even-tempered p functions %% * MODIFIED CONTRACTION BY HFS III, DEC, 1993 %# uncontracted basis -599.1563938267 %# default contraction -599.15505327442 %#################################################################### % If WACHTERS-F are spherical, so should WACHTERS. % "WACHTERS":puream = true POTASSIUM:"WACHTERS" = ( (S ( 150591.00 0.000260) ( 22629.6 0.00200 ) ( 5223.16 0.01015 ) ( 495.165 0.12732 ) ( 1498.06 0.04043 )) (S ( 180.792 1.00000)) (S ( 71.194 1.000)) (S ( 29.3723 1.000)) (S ( 8.68863 1.00)) (S ( 3.46382 1.00000)) (S ( 0.81131 1.0)) (S ( 0.312555 1.000)) (S ( 0.035668 1.00)) (S ( 0.016652 1.0)) (P ( 867.259 0.00234) ( 205.254 0.0188) ( 65.8214 0.08668) ( 24.5742 0.25041)) (P ( 9.87704 1.000000)) (P ( 4.11693 1.000000)) (P ( 1.55653 1.000000)) (P ( 0.614068 1.000000)) (P ( 0.228735 1.000000)) (P ( 0.085202 1.000000)) (P ( 0.031737 1.000000)) (D ( 0.100000 1.000000)) ) SCANDIUM:"WACHTERS" = ( (S ( 188961.0000000000 0.0002500000) ( 28491.4000000000 0.0019300000) ( 6572.4300000000 0.0098000000) ( 1881.0300000000 0.0394000000) ( 617.9790000000 0.1253200000) ( 225.1270000000 0.2957700000)) (S ( 88.5664000000 0.4190000000) ( 36.5819000000 0.2413900000)) (S ( 11.0358000000 1.0000000000)) (S ( 4.4906300000 1.0000000000)) (S ( 1.1293500000 1.0000000000)) (S ( 0.4546130000 1.0000000000)) (S ( 0.0775330000 1.0000000000)) (S ( 0.0307900000 1.0000000000)) (P ( 1113.8200000000 0.0022300000) ( 266.2440000000 0.0176400000) ( 86.5763000000 0.0812300000)) (P ( 32.5934000000 0.2404000000) ( 13.2190000000 0.4251700000) ( 5.5835700000 0.3597200000)) (P ( 2.1859400000 1.0000000000)) (P ( 0.8950110000 0.5760200000) ( 0.3519750000 0.3089000000)) (P ( 0.1346200000 1.0000000000)) (P ( 0.0465480000 1.0000000000)) (D ( 22.4283000000 0.0214000000) ( 6.0347900000 0.1130400000) ( 1.9790500000 0.3139300000)) (D ( 0.6667500000 1.0000000000)) (D ( 0.2182310000 1.0000000000)) (D ( 0.0588000000 1.0000000000)) ) TITANIUM:"WACHTERS" = ( (S ( 206082.0000000000 0.0002500000) ( 31226.8000000000 0.0019300000) ( 7199.3200000000 0.0098800000) ( 2048.7500000000 0.0399400000) ( 670.7900000000 0.1273700000) ( 243.6500000000 0.2998100000)) (S ( 95.9250000000 0.4182500000) ( 39.8101000000 0.2358200000)) (S ( 12.2205000000 1.0000000000)) (S ( 5.0088200000 1.0000000000)) (S ( 1.2856900000 1.0000000000)) (S ( 0.5128060000 1.0000000000)) (S ( 0.0855760000 1.0000000000)) (S ( 0.0333020000 1.0000000000)) (P ( 1264.7000000000 0.0021400000) ( 301.2300000000 0.0172500000) ( 96.9777000000 0.0811700000)) (P ( 36.3727000000 0.2414300000) ( 14.7814000000 0.4263100000) ( 6.2746500000 0.3571400000)) (P ( 2.4787800000 1.0000000000)) (P ( 1.0161800000 0.5770900000) ( 0.3981620000 0.2998600000)) (P ( 0.1523400000 1.0000000000)) (P ( 0.0510800000 1.0000000000)) (D ( 25.9924000000 0.0225300000) ( 7.0863400000 0.1196100000) ( 2.3487100000 0.3270000000)) (D ( 0.8001980000 1.0000000000)) (D ( 0.2620490000 1.0000000000)) (D ( 0.0720000000 1.0000000000)) ) VANADIUM:"WACHTERS" = ( (S ( 226878.0000000000 0.0002500000) ( 33899.6000000000 0.0019700000) ( 7720.2400000000 0.0101700000) ( 2191.5300000000 0.0409800000) ( 719.1690000000 0.1298000000) ( 262.0860000000 0.3025900000)) (S ( 103.6530000000 0.4163700000) ( 43.2548000000 0.2313300000)) (S ( 13.5088000000 1.0000000000)) (S ( 5.5671500000 1.0000000000)) (S ( 1.4517400000 1.0000000000)) (S ( 0.5744450000 1.0000000000)) (S ( 0.0928200000 1.0000000000)) (S ( 0.0355320000 1.0000000000)) (P ( 1398.4300000000 0.0021400000) ( 331.5710000000 0.0173500000) ( 107.0020000000 0.0812800000)) (P ( 40.3183000000 0.2413000000) ( 16.4635000000 0.4262200000) ( 7.0235200000 0.3557800000)) (P ( 2.7902500000 1.0000000000)) (P ( 1.1460900000 0.5769300000) ( 0.4472720000 0.2947000000)) (P ( 0.1668720000 1.0000000000)) (P ( 0.0545670000 1.0000000000)) (D ( 30.2212000000 0.0227000000) ( 8.2721800000 0.1224800000) ( 2.7582300000 0.3328600000)) (D ( 0.9421370000 1.0000000000)) (D ( 0.3052980000 1.0000000000)) (D ( 0.0820000000 1.0000000000)) ) CHROMIUM:"WACHTERS" = ( (S ( 236658.0000000000 0.0002700000) ( 35364.0000000000 0.0020800000) ( 8058.3100000000 0.0107100000) ( 2294.2300000000 0.0428400000) ( 756.1180000000 0.1342000000) ( 277.0000000000 0.3079800000)) (S ( 110.1790000000 0.4136100000) ( 46.3710000000 0.2224100000)) (S ( 14.8215000000 1.0000000000)) (S ( 6.1326200000 1.0000000000)) (S ( 1.6295900000 1.0000000000)) (S ( 0.6411770000 1.0000000000)) (S ( 0.0995110000 1.0000000000)) (S ( 0.0375880000 1.0000000000)) (P ( 1478.7700000000 0.0022800000) ( 351.4900000000 0.0183600000) ( 113.8260000000 0.0850300000)) (P ( 43.1567000000 0.2476100000) ( 17.7775000000 0.4271800000) ( 7.6612800000 0.3457900000)) (P ( 3.0776500000 1.0000000000)) (P ( 1.2661900000 0.5749000000) ( 0.4935340000 0.2847300000)) (P ( 0.1810100000 1.0000000000)) (P ( 0.0579200000 1.0000000000)) (D ( 34.0221000000 0.0232800000) ( 9.4316100000 0.1256400000) ( 3.1591800000 0.3389700000)) (D ( 1.0799500000 1.0000000000)) (D ( 0.3465820000 1.0000000000)) (D ( 0.0912000000 1.0000000000)) ) MANGANESE:"WACHTERS" = ( (S ( 243694.0000000000 0.0002900000) ( 35995.0000000000 0.0022500000) ( 8223.5600000000 0.0115200000) ( 2353.1200000000 0.0455900000) ( 780.9650000000 0.1403900000) ( 288.5190000000 0.3147200000)) (S ( 115.7010000000 0.4097400000) ( 49.1175000000 0.2107900000)) (S ( 16.0885000000 1.0000000000)) (S ( 6.7043000000 1.0000000000)) (S ( 1.8051700000 1.0000000000)) (S ( 0.7030110000 1.0000000000)) (S ( 0.1063850000 1.0000000000)) (S ( 0.0396160000 1.0000000000)) (P ( 1500.3900000000 0.0025800000) ( 358.8000000000 0.0204800000) ( 116.6990000000 0.0929300000)) (P ( 44.6132000000 0.2607400000) ( 18.5985000000 0.4288900000) ( 8.1377800000 0.3259800000)) (P ( 3.3373400000 1.0000000000)) (P ( 1.3789500000 0.5693500000) ( 0.5386390000 0.2735400000)) (P ( 0.1914750000 1.0000000000)) (P ( 0.0604200000 1.0000000000)) (D ( 37.8977000000 0.0240900000) ( 10.5201000000 0.1307300000) ( 3.5376400000 0.3464800000)) (D ( 1.2121700000 1.0000000000)) (D ( 0.3879120000 1.0000000000)) (D ( 0.1054000000 1.0000000000)) ) IRON:"WACHTERS" = ( (S ( 257539.0000000000 0.0002900000) ( 38636.9000000000 0.0022600000) ( 8891.4400000000 0.0115200000) ( 2544.0100000000 0.0456600000) ( 844.7770000000 0.1403500000) ( 312.5270000000 0.3142000000)) (S ( 125.5930000000 0.4087800000) ( 53.4987000000 0.2116300000)) (S ( 17.7151000000 1.0000000000)) (S ( 7.3767700000 1.0000000000)) (S ( 2.0184700000 1.0000000000)) (S ( 0.7799350000 1.0000000000)) (S ( 0.1142200000 1.0000000000)) (S ( 0.0418890000 1.0000000000)) (P ( 1678.4000000000 0.0024900000) ( 396.3920000000 0.0201500000) ( 128.5880000000 0.0919900000)) (P ( 49.1158000000 0.2599100000) ( 20.5035000000 0.4288700000) ( 8.9871200000 0.3269100000)) (P ( 3.6824900000 1.0000000000)) (P ( 1.5217500000 0.5692500000) ( 0.5926840000 0.2686300000)) (P ( 0.2023700000 1.0000000000)) (P ( 0.0627600000 1.0000000000)) (D ( 41.4526000000 0.0251100000) ( 11.5403000000 0.1362600000) ( 3.8854300000 0.3532300000)) (D ( 1.3238000000 1.0000000000)) (D ( 0.4166800000 1.0000000000)) (D ( 0.1133000000 1.0000000000)) ) COBALT:"WACHTERS" = ( (S ( 270991.0000000000 0.0003100000) ( 39734.8000000000 0.0024200000) ( 9057.4600000000 0.0123800000) ( 2598.2100000000 0.0484900000) ( 868.2000000000 0.1467200000) ( 323.4310000000 0.3212700000)) (S ( 130.8600000000 0.4049700000) ( 56.1219000000 0.1996100000)) (S ( 18.9219000000 1.0000000000)) (S ( 7.9523800000 1.0000000000)) (S ( 2.1975400000 1.0000000000)) (S ( 0.8467130000 1.0000000000)) (S ( 0.1222660000 1.0000000000)) (S ( 0.0441720000 1.0000000000)) (P ( 1636.2100000000 0.0029600000) ( 390.9030000000 0.0233600000) ( 127.8840000000 0.1034300000)) (P ( 49.2413000000 0.2795400000) ( 20.7512000000 0.4326800000) ( 9.2036800000 0.2986100000)) (P ( 3.8177900000 1.0000000000)) (P ( 1.5876200000 0.5562500000) ( 0.6246600000 0.2434500000)) (P ( 0.2119620000 1.0000000000)) (P ( 0.0651030000 1.0000000000)) (D ( 44.9774000000 0.0262700000) ( 12.5690000000 0.1418200000) ( 4.2442200000 0.3594200000)) (D ( 1.4433000000 1.0000000000)) (D ( 0.4499650000 1.0000000000)) (D ( 0.1219000000 1.0000000000)) ) NICKEL:"WACHTERS" = ( (S ( 284878.0000000000 0.0003200000) ( 41997.9000000000 0.0024600000) ( 9627.6700000000 0.0125400000) ( 2761.9600000000 0.0492600000) ( 920.4880000000 0.1495000000) ( 341.8050000000 0.3264000000)) (S ( 138.0230000000 0.4047400000) ( 59.2587000000 0.1918600000)) (S ( 20.3712000000 1.0000000000)) (S ( 8.5940000000 1.0000000000)) (S ( 2.3941700000 1.0000000000)) (S ( 0.9181690000 1.0000000000)) (S ( 0.1301760000 1.0000000000)) (S ( 0.0463920000 1.0000000000)) (P ( 1774.1800000000 0.0029500000) ( 423.4030000000 0.0233700000) ( 138.3110000000 0.1040600000)) (P ( 53.1703000000 0.2822600000) ( 22.3874000000 0.4348600000) ( 9.9284800000 0.2944200000)) (P ( 4.1162500000 1.0000000000)) (P ( 1.7103100000 0.5527300000) ( 0.6725280000 0.2344100000)) (P ( 0.2198820000 1.0000000000)) (P ( 0.0666700000 1.0000000000)) (D ( 48.9403000000 0.0270600000) ( 13.7169000000 0.1459800000) ( 4.6395100000 0.3641800000)) (D ( 1.5743300000 1.0000000000)) (D ( 0.4864090000 1.0000000000)) (D ( 0.1316000000 1.0000000000)) ) COPPER:"WACHTERS" = ( (S ( 337200.0000000000 0.0002800000) ( 50072.9000000000 0.0021700000) ( 11373.4000000000 0.0112200000) ( 3239.8200000000 0.0446210000) ( 1071.9700000000 0.1383600000) ( 395.0990000000 0.3125500000)) (S ( 158.3990000000 0.4106000000) ( 67.3591000000 0.2145300000)) (S ( 22.2983000000 1.0000000000)) (S ( 9.3935700000 1.0000000000)) (S ( 2.5784800000 1.0000000000)) (S ( 0.9640800000 1.0000000000)) (S ( 0.1133030000 1.0000000000)) (S ( 0.0407910000 1.0000000000)) (P ( 2245.2900000000 0.0022600000) ( 532.1060000000 0.0184100000) ( 172.1950000000 0.0864600000)) (P ( 65.3239000000 0.2545000000) ( 27.0551000000 0.4341900000) ( 11.7435000000 0.3339000000)) (P ( 4.6938200000 1.0000000000)) (P ( 1.9066700000 0.5693600000) ( 0.7114450000 0.2470200000)) (P ( 0.2325980000 1.0000000000)) (P ( 0.0692990000 1.0000000000)) (D ( 48.5439000000 0.0309700000) ( 13.5490000000 0.1619600000) ( 4.5162800000 0.3781200000)) (D ( 1.4732900000 1.0000000000)) (D ( 0.4148750000 1.0000000000)) (D ( 0.1491000000 1.0000000000)) ) % No Wachters-f basis set for Zn BT -July-1-2002 %**************************************************************** % All RYDBERG and NEGATIVE_ION additions deleted by % M. Sinnokrot and B. Temelso, July 1, 2002 %**************************************************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * GAUSSIAN 82 SERIES OF BASIS SETS FROM 321G TO 6-311++G** % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** % 3-21G- and 6-31G-type basis sets use CARTESIAN functions % (according to EMSL library) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"3-21G" = ( (GET "321GS") ) HELIUM:"3-21G" = ( (GET "321GS") ) LITHIUM:"3-21G" = ( (GET "321GS") (GET "321GP") ) BERYLLIUM:"3-21G" = ( (GET "321GS") (GET "321GP") ) BORON:"3-21G" = ( (GET "321GS") (GET "321GP") ) CARBON:"3-21G" = ( (GET "321GS") (GET "321GP") ) NITROGEN:"3-21G" = ( (GET "321GS") (GET "321GP") ) OXYGEN:"3-21G" = ( (GET "321GS") (GET "321GP") ) FLUORINE:"3-21G" = ( (GET "321GS") (GET "321GP") ) NEON:"3-21G" = ( (GET "321GS") (GET "321GP") ) SODIUM:"3-21G" = ( (GET "321GS") (GET "321GP") ) MAGNESIUM:"3-21G" = ( (GET "321GS") (GET "321GP") ) ALUMINUM:"3-21G" = ( (GET "321GS") (GET "321GP") ) SILICON:"3-21G" = ( (GET "321GS") (GET "321GP") ) PHOSPHORUS:"3-21G" = ( (GET "321GS") (GET "321GP") ) SULFUR:"3-21G" = ( (GET "321GS") (GET "321GP") ) CHLORINE:"3-21G" = ( (GET "321GS") (GET "321GP") ) ARGON:"3-21G" = ( (GET "321GS") (GET "321GP") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE S-FUNCTIONS FOR THE GAUSSIAN 82 321G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"321GS" = ( (S ( 5.447178000 0.1562850000) ( 0.824547240 0.9046910000)) (S ( 0.183191580 1.0000000000)) ) HELIUM:"321GS" = ( (S ( 13.626700000 0.1752300000) ( 1.999350000 0.8934830000)) (S ( 0.382993000 1.0000000000)) ) LITHIUM:"321GS" = ( (S ( 36.838200000 0.0696686000) ( 5.481720000 0.3813460000) ( 1.113270000 0.6817020000)) (S ( 0.540205000 -0.2631270000) ( 0.102255000 1.1433900000)) (S ( 0.028564500 1.0000000000)) ) BERYLLIUM:"321GS" = ( (S ( 71.887600000 0.0644263000) ( 10.728900000 0.3660960000) ( 2.222050000 0.6959340000)) (S ( 1.295480000 -0.4210640000) ( 0.268881000 1.2240700000)) (S ( 0.077350100 1.0000000000)) ) BORON:"321GS" = ( (S ( 116.434000000 0.0629605000) ( 17.431400000 0.3633040000) ( 3.680160000 0.6972550000)) (S ( 2.281870000 -0.3686620000) ( 0.465248000 1.1994400000)) (S ( 0.124328000 1.0000000000)) ) CARBON:"321GS" = ( (S ( 172.256000000 0.0617669000) ( 25.910900000 0.3587940000) ( 5.533350000 0.7007130000)) (S ( 3.664980000 -0.3958970000) ( 0.770545000 1.2158400000)) (S ( 0.195857000 1.0000000000)) ) NITROGEN:"321GS" = ( (S ( 242.766000000 0.0598657000) ( 36.485100000 0.3529550000) ( 7.814490000 0.7065130000)) (S ( 5.425220000 -0.4133010000) ( 1.149150000 1.2244200000)) (S ( 0.283205000 1.0000000000)) ) OXYGEN:"321GS" = ( (S ( 322.037000000 0.0592394000) ( 48.430800000 0.3515000000) ( 10.420600000 0.7076580000)) (S ( 7.402940000 -0.4044530000) ( 1.576200000 1.2215600000)) (S ( 0.373684000 1.0000000000)) ) FLUORINE:"321GS" = ( (S ( 413.801000000 0.0585483000) ( 62.244600000 0.3493080000) ( 13.434000000 0.7096320000)) (S ( 9.777590000 -0.4073270000) ( 2.086170000 1.2231400000)) (S ( 0.482383000 1.0000000000)) ) NEON:"321GS" = ( (S ( 515.724000000 0.0581430000) ( 77.653800000 0.3479510000) ( 16.813600000 0.7107140000)) (S ( 12.483000000 -0.4099220000) ( 2.664510000 1.2243100000)) (S ( 0.606250000 1.0000000000)) ) SODIUM:"321GS" = ( (S ( 547.613000000 0.0674911000) ( 82.067800000 0.3935050000) ( 17.691700000 0.6656050000)) (S ( 17.540700000 -0.1119370000) ( 3.793980000 0.2546540000) ( 0.906441000 0.8444170000)) (S ( 0.501824000 -0.2196600000) ( 0.060945800 1.0891200000)) (S ( 0.024434900 1.0000000000)) ) MAGNESIUM:"321GS" = ( (S ( 652.841000000 0.0675982000) ( 98.380500000 0.3917780000) ( 21.299600000 0.6666610000)) (S ( 23.372700000 -0.1102460000) ( 5.199530000 0.1841190000) ( 1.315080000 0.8963990000)) (S ( 0.611349000 -0.3611010000) ( 0.141841000 1.2150500000)) (S ( 0.046401100 1.0000000000)) ) ALUMINUM:"321GS" = ( (S ( 775.737000000 0.0668347000) ( 116.952000000 0.3890610000) ( 25.332600000 0.6694680000)) (S ( 29.479600000 -0.1079020000) ( 6.633140000 0.1462450000) ( 1.726750000 0.9237300000)) (S ( 0.946160000 -0.3203270000) ( 0.202506000 1.1841200000)) (S ( 0.063908800 1.0000000000)) ) SILICON:"321GS" = ( (S ( 910.655000000 0.0660823000) ( 137.336000000 0.3862290000) ( 29.760100000 0.6723800000)) (S ( 36.671600000 -0.1045110000) ( 8.317290000 0.1074100000) ( 2.216450000 0.9514460000)) (S ( 1.079130000 -0.3761080000) ( 0.302422000 1.2516500000)) (S ( 0.093339200 1.0000000000)) ) PHOSPHORUS:"321GS" = ( (S ( 1054.900000000 0.0655407000) ( 159.195000000 0.3840360000) ( 34.530400000 0.6745410000)) (S ( 44.286600000 -0.1021300000) ( 10.101900000 0.0815922000) ( 2.739970000 0.9697880000)) (S ( 1.218650000 -0.3714950000) ( 0.395546000 1.2709900000)) (S ( 0.122811000 1.0000000000)) ) SULFUR:"321GS" = ( (S ( 1210.620000000 0.0650071000) ( 182.747000000 0.3820400000) ( 39.667300000 0.6765450000)) (S ( 52.223600000 -0.1003100000) ( 11.962900000 0.0650877000) ( 3.289110000 0.9814550000)) (S ( 1.223840000 -0.2860890000) ( 0.457303000 1.2280600000)) (S ( 0.142269000 1.0000000000)) ) CHLORINE:"321GS" = ( (S ( 1376.400000000 0.0645827000) ( 207.857000000 0.3803630000) ( 45.155400000 0.6781900000)) (S ( 60.801400000 -0.0987639000) ( 13.976500000 0.0511338000) ( 3.887100000 0.9913370000)) (S ( 1.352990000 -0.2224010000) ( 0.526955000 1.1825200000)) (S ( 0.166714000 1.0000000000)) ) ARGON:"321GS" = ( (S ( 1553.710000000 0.0641707000) ( 234.678000000 0.3787970000) ( 51.012100000 0.6797520000)) (S ( 70.045300000 -0.0974661000) ( 16.147300000 0.0390569000) ( 4.534920000 0.9999160000)) (S ( 1.542090000 -0.1768660000) ( 0.607267000 1.1469000000)) (S ( 0.195373000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE P-FUNCTIONS FOR THE GAUSSIAN 82 321G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** LITHIUM:"321GP" = ( (P ( 0.540205000 0.1615460000) ( 0.102255000 0.9156630000)) (P ( 0.028564500 1.0000000000)) ) BERYLLIUM:"321GP" = ( (P ( 1.295480000 0.2051320000) ( 0.268881000 0.8825280000)) (P ( 0.077350100 1.0000000000)) ) BORON:"321GP" = ( (P ( 2.281870000 0.2311520000) ( 0.465248000 0.8667640000)) (P ( 0.124328000 1.0000000000)) ) CARBON:"321GP" = ( (P ( 3.664980000 0.2364600000) ( 0.770545000 0.8606190000)) (P ( 0.195857000 1.0000000000)) ) NITROGEN:"321GP" = ( (P ( 5.425220000 0.2379720000) ( 1.149150000 0.8589530000)) (P ( 0.283205000 1.0000000000)) ) OXYGEN:"321GP" = ( (P ( 7.402940000 0.2445860000) ( 1.576200000 0.8539550000)) (P ( 0.373684000 1.0000000000)) ) FLUORINE:"321GP" = ( (P ( 9.777590000 0.2466800000) ( 2.086170000 0.8523210000)) (P ( 0.482383000 1.0000000000)) ) NEON:"321GP" = ( (P ( 12.483000000 0.2474600000) ( 2.664510000 0.8517430000)) (P ( 0.606250000 1.0000000000)) ) SODIUM:"321GP" = ( (P ( 17.540700000 0.1282330000) ( 3.793980000 0.4715330000) ( 0.906441000 0.6042730000)) (P ( 0.501824000 0.0090664900) ( 0.060945800 0.9972020000)) (P ( 0.024434900 1.0000000000)) ) MAGNESIUM:"321GP" = ( (P ( 23.372700000 0.1210140000) ( 5.199530000 0.4628100000) ( 1.315080000 0.6069070000)) (P ( 0.611349000 0.0242633000) ( 0.141841000 0.9866730000)) (P ( 0.046401100 1.0000000000)) ) ALUMINUM:"321GP" = ( (P ( 29.479600000 0.1175740000) ( 6.633140000 0.4611740000) ( 1.726750000 0.6055350000)) (P ( 0.946160000 0.0519383000) ( 0.202506000 0.9726600000)) (P ( 0.063908800 1.0000000000)) ) SILICON:"321GP" = ( (P ( 36.671600000 0.1133550000) ( 8.317290000 0.4575780000) ( 2.216450000 0.6074270000)) (P ( 1.079130000 0.0671030000) ( 0.302422000 0.9568830000)) (P ( 0.093339200 1.0000000000)) ) PHOSPHORUS:"321GP" = ( (P ( 44.286600000 0.1108510000) ( 10.101900000 0.4564950000) ( 2.739970000 0.6069360000)) (P ( 1.218650000 0.0915823000) ( 0.395546000 0.9349240000)) (P ( 0.122811000 1.0000000000)) ) SULFUR:"321GP" = ( (P ( 52.223600000 0.1096460000) ( 11.962900000 0.4576490000) ( 3.289110000 0.6042610000)) (P ( 1.223840000 0.1647770000) ( 0.457303000 0.8708550000)) (P ( 0.142269000 1.0000000000)) ) CHLORINE:"321GP" = ( (P ( 60.801400000 0.1085980000) ( 13.976500000 0.4586820000) ( 3.887100000 0.6019620000)) (P ( 1.352990000 0.2192160000) ( 0.526955000 0.8223210000)) (P ( 0.166714000 1.0000000000)) ) ARGON:"321GP" = ( (P ( 70.045300000 0.1076190000) ( 16.147300000 0.4595760000) ( 4.534920000 0.6000410000)) (P ( 1.542090000 0.2556870000) ( 0.607267000 0.7898420000)) (P ( 0.195373000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ***************************************************************** % * THE GAUSSIAN 82 631G BASIS % * % * H - He (4s) -> [2s] % * Li - Ne (10s,40) -> [3s,2p] % * W. J. Hehre, R. Ditchfield, and J. A. Pople, J. Chem. Phys. % * 56, 2257 (1972). % * Na - Ar (16s,10p) -> [4s,3p] % * M. M. Francl, W. J. Petro, W. J. Hehre, J. S. Binkley, % * M. S. Gordon, D. J. DeFrees, and J. A. Pople, J. Chem. Phys. % * 77, 3654 (1982). % * Sc - Zn (22s,16p,4d)->[5s,4p,2d] % * T. L. Windus, J. Chem. Phys. 109, 1223 (1998). % * % ***************************************************************** % 3-21G- and 6-31G-type basis sets use CARTESIAN functions % (according to EMSL library) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31G" = ( (GET "631GS") ) HELIUM:"6-31G" = ( (GET "631GS") ) LITHIUM:"6-31G" = ( (GET "631GS") (GET "631GP") ) BERYLLIUM:"6-31G" = ( (GET "631GS") (GET "631GP") ) BORON:"6-31G" = ( (GET "631GS") (GET "631GP") ) CARBON:"6-31G" = ( (GET "631GS") (GET "631GP") ) NITROGEN:"6-31G" = ( (GET "631GS") (GET "631GP") ) OXYGEN:"6-31G" = ( (GET "631GS") (GET "631GP") ) FLUORINE:"6-31G" = ( (GET "631GS") (GET "631GP") ) NEON:"6-31G" = ( (GET "631GS") (GET "631GP") ) SODIUM:"6-31G" = ( (GET "631GS") (GET "631GP") ) MAGNESIUM:"6-31G" = ( (GET "631GS") (GET "631GP") ) ALUMINUM:"6-31G" = ( (GET "631GS") (GET "631GP") ) SILICON:"6-31G" = ( (GET "631GS") (GET "631GP") ) PHOSPHORUS:"6-31G" = ( (GET "631GS") (GET "631GP") ) SULFUR:"6-31G" = ( (GET "631GS") (GET "631GP") ) CHLORINE:"6-31G" = ( (GET "631GS") (GET "631GP") ) ARGON:"6-31G" = ( (GET "631GS") (GET "631GP") ) COPPER:"6-31G" = ( (GET "631GS") (GET "631GP") (GET "631GD") ) POTASSIUM:"6-31G" = ( (GET "631GS") (GET "631GP") (GET "631GD") ) CALCIUM:"6-31G" = ( (GET "631GS") (GET "631GP") (GET "631GD") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE GAUSSIAN 82 631PGS BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"6-31+G*" = ( (GET "631GS") ) HELIUM:"6-31+G*" = ( (GET "631GS") ) LITHIUM:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) BERYLLIUM:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) BORON:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) CARBON:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) NITROGEN:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) OXYGEN:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) FLUORINE:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) NEON:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SODIUM:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) MAGNESIUM:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) ALUMINUM:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SILICON:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) PHOSPHORUS:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SULFUR:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) CHLORINE:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) ARGON:"6-31+G*" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) %%%%%%%% ALIAS 6-31+G(d) => 6-31+G* %%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31+G(d)" = ( (GET "631GS") ) HELIUM:"6-31+G(d)" = ( (GET "631GS") ) LITHIUM:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) BERYLLIUM:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) BORON:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) CARBON:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) NITROGEN:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) OXYGEN:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) FLUORINE:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) NEON:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SODIUM:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) MAGNESIUM:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) ALUMINUM:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SILICON:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) PHOSPHORUS:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) SULFUR:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) CHLORINE:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) ARGON:"6-31+G(d)" = ( (GET "631GS") (GET "PLUSS") (GET "631GP") (GET "PLUSP") (GET "STAR1") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE GAUSSIAN 82 631GST BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31G*" = ( (GET "631GS") ) HELIUM:"6-31G*" = ( (GET "631GS") ) LITHIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BERYLLIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BORON:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CARBON:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NITROGEN:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) OXYGEN:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) FLUORINE:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NEON:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SODIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) MAGNESIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ALUMINUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SILICON:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) PHOSPHORUS:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SULFUR:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CHLORINE:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ARGON:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) POTASSIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") ) CALCIUM:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") ) COPPER:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") ) COPPER:"6-31G*" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") ) %%%%%%%%% ALIASES 6-31G(d) => 6-31G* %%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31G(d)" = ( (GET "631GS") ) HELIUM:"6-31G(d)" = ( (GET "631GS") ) LITHIUM:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BERYLLIUM:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BORON:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CARBON:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NITROGEN:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) OXYGEN:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) FLUORINE:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NEON:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SODIUM:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) MAGNESIUM:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ALUMINUM:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SILICON:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) PHOSPHORUS:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SULFUR:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CHLORINE:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ARGON:"6-31G(d)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6-31+G* Split Valence + Polarization Basis % ------------------------------------------ % Elements Contraction References % H : (4s) -> [2s] P.C. Hariharan and J.A. Pople, Theoret. % He : (4s) -> [2s] Chimica Acta 28, 213 (1973). % Li - Ne: (11s,5p,1d) -> [4s,3p,1d] % Na - Ar: (16s,10p,1d)-> [4s,3p,1d] M.M. Francl, W.J. Petro, W.J. Hehre, J.S. % Binkley, M.S. Gordon, D.J. DeFrees and J.A. % Pople, J. Chem. Phys. 77, 3654 (1982) % Note: He and Ne are unpublished basis sets % taken from the Gaussian program. % Diffuse exponents: T. Clark, J. Chandrasekhar, P.v.R. Schleyer, J. Comp. Chem. % 4, 294 (1983). R. Krishnam, J.S. Binkley, R. Seeger, J.A. % Pople, J. Chem. Phys. 72, 650 (1980). P.M.W. Gill, B.G. % Johnson, J.A. Pople and M.J. Frisch, Chem. Phys. Lett. % 197, 499 (1992). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31+G*" = ( (GET "631GS") ) HELIUM:"6-31+G*" = ( (GET "631GS") ) LITHIUM:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) BERYLLIUM:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) BORON:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) CARBON:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) NITROGEN:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) OXYGEN:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) FLUORINE:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) NEON:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) SODIUM:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) MAGNESIUM:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) ALUMINUM:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) SILICON:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) PHOSPHORUS:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) SULFUR:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) CHLORINE:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) ARGON:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) COPPER:"6-31+G*" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") (GET "PLUSS") (GET "PLUSP") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 6-31G** basis sets % % This basis set adds hydrogen p polarization functions to the 6-31G* basis. % Note: This basis set uses 6-component d functions. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-31G**" = ( (GET "631GS") (P (1.10000000 1.00000000)) ) HELIUM:"6-31G**" = ( (GET "631GS") ) LITHIUM:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BERYLLIUM:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BORON:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CARBON:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NITROGEN:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) OXYGEN:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) FLUORINE:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NEON:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SODIUM:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) MAGNESIUM:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ALUMINUM:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SILICON:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) PHOSPHORUS:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SULFUR:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CHLORINE:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ARGON:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) COPPER:"6-31G**" = ( (GET "631GS") (GET "631GP") (GET "631GD") (GET "STAR1") ) %%%%%%%%%% ALIAS 6-31G(d,p) => 6-31G** %%%%%%%%%%%%%%% HYDROGEN:"6-31G(d,p)" = ( (GET "631GS") (P (1.10000000 1.00000000)) ) HELIUM:"6-31G(d,p)" = ( (GET "631GS") ) LITHIUM:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BERYLLIUM:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) BORON:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CARBON:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NITROGEN:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) OXYGEN:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) FLUORINE:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) NEON:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SODIUM:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) MAGNESIUM:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ALUMINUM:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SILICON:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) PHOSPHORUS:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) SULFUR:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) CHLORINE:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) ARGON:"6-31G(d,p)" = ( (GET "631GS") (GET "631GP") (GET "STAR1") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE S-FUNCTIONS FOR THE GAUSSIAN 82 631G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"631GS" = ( (S ( 18.731136960 0.0334946043) ( 2.825394365 0.2347269535) ( 0.640121692 0.8137573262)) (S ( 0.161277759 1.0000000000)) ) HELIUM:"631GS" = ( (S ( 38.421634000 0.0237660000) ( 5.778030000 0.1546790000) ( 1.241774000 0.4696300000)) (S ( 0.297964000 1.0000000000)) ) LITHIUM:"631GS" = ( (S ( 642.4189200000 0.0021426000) ( 96.7985150000 0.0162089000) ( 22.0911210000 0.0773156000) ( 6.2010703000 0.2457860000) ( 1.9351177000 0.4701890000) ( 0.6367358000 0.3454708000)) (S ( 2.3249184000 -0.0350917000) ( 0.6324306000 -0.1912328000) ( 0.0790534000 1.0839878000)) (S ( 0.0359620000 1.0000000000)) ) BERYLLIUM:"631GS" = ( (S ( 1264.585690000 0.0019447576) ( 189.936806000 0.0148350520) ( 43.159089000 0.0720905463) ( 12.098662700 0.2371541500) ( 3.806323220 0.4691986520) ( 1.272890300 0.3565202280)) (S ( 3.196463098 -0.1126487290) ( 0.747813304 -0.2295064090) ( 0.219966330 1.1869167700)) (S ( 0.082309901 1.0000000000)) ) BORON:"631GS" = ( (S ( 2068.882250000 0.0018662746) ( 310.649570000 0.0142514817) ( 70.683033000 0.0695516185) ( 19.861080300 0.2325729330) ( 6.299304840 0.4670787120) ( 2.127026970 0.3634314400)) (S ( 4.727971071 -0.1303937970) ( 1.190337736 -0.1307889510) ( 0.359411683 1.1309444800)) (S ( 0.126751247 1.0000000000)) ) CARBON:"631GS" = ( (S ( 3047.524880000 0.0018347371) ( 457.369518000 0.0140373228) ( 103.948685000 0.0688426222) ( 29.210155300 0.2321844430) ( 9.286662960 0.4679413480) ( 3.163926960 0.3623119850)) (S ( 7.868272350 -0.1193324200) ( 1.881288540 -0.1608541520) ( 0.544249258 1.1434564400)) (S ( 0.168714478 1.0000000000)) ) NITROGEN:"631GS" = ( (S ( 4173.511460000 0.0018347722) ( 627.457911000 0.0139946270) ( 142.902093000 0.0685865518) ( 40.234329300 0.2322408730) ( 12.820212900 0.4690699480) ( 4.390437010 0.3604551990)) (S ( 11.626361860 -0.1149611820) ( 2.716279807 -0.1691174790) ( 0.772218397 1.1458519500)) (S ( 0.212031497 1.0000000000)) ) OXYGEN:"631GS" = ( (S ( 5484.671660000 0.0018310744) ( 825.234946000 0.0139501722) ( 188.046958000 0.0684450781) ( 52.964500000 0.2327143360) ( 16.897570400 0.4701928980) ( 5.799635340 0.3585208530)) (S ( 15.539616250 -0.1107775490) ( 3.599933586 -0.1480262620) ( 1.013761750 1.1307670100)) (S ( 0.270005823 1.0000000000)) ) FLUORINE:"631GS" = ( (S ( 7001.713090000 0.0018196169) ( 1051.366090000 0.0139160796) ( 239.285690000 0.0684053245) ( 67.397445300 0.2331857600) ( 21.519957300 0.4712674390) ( 7.403101300 0.3566185460)) (S ( 20.847952800 -0.1085069750) ( 4.808308340 -0.1464516580) ( 1.344069860 1.1286885800)) (S ( 0.358151393 1.0000000000)) ) NEON:"631GS" = ( (S ( 8425.851530000 0.0018843480) ( 1268.519400000 0.0143368994) ( 289.621414000 0.0701096233) ( 81.859004000 0.2373732660) ( 26.251507900 0.4730071260) ( 9.094720510 0.3484012410)) (S ( 26.532131000 -0.1071182870) ( 6.101755010 -0.1461638210) ( 1.696271530 1.1277735000)) (S ( 0.445818700 1.0000000000)) ) SODIUM:"631GS" = ( (S ( 9993.200000000 0.0019376600) ( 1499.890000000 0.0148070000) ( 341.951000000 0.0727055000) ( 94.679600000 0.2526290000) ( 29.734500000 0.4932420000) ( 10.006300000 0.3131690000)) (S ( 150.963000000 -0.0035420800) ( 35.587800000 -0.0439588000) ( 11.168300000 -0.1097520000) ( 3.902010000 0.1873980000) ( 1.381770000 0.6466990000) ( 0.466382000 0.3060580000)) (S ( 0.497966000 -0.2485030000) ( 0.084352900 -0.1317040000) ( 0.066635000 1.2335200000)) (S ( 0.025954400 1.0000000000)) ) MAGNESIUM:"631GS" = ( (S (11722.800000000 0.0019778300) ( 1759.930000000 0.0151140000) ( 400.846000000 0.0739108000) ( 112.807000000 0.2491910000) ( 35.999700000 0.4879280000) ( 12.182800000 0.3196620000)) (S ( 189.180000000 -0.0032371700) ( 45.211900000 -0.0410079000) ( 14.356300000 -0.1126000000) ( 5.138860000 0.1486330000) ( 1.906520000 0.6164970000) ( 0.705887000 0.3648290000)) (S ( 0.929340000 -0.2122900000) ( 0.269035000 -0.1079850000) ( 0.117379000 1.1758400000)) (S ( 0.042106100 1.0000000000)) ) ALUMINUM:"631GS" = ( (S (13983.100000000 0.0019426700) ( 2098.750000000 0.0148599000) ( 477.705000000 0.0728494000) ( 134.360000000 0.2468300000) ( 42.870900000 0.4872580000) ( 14.518900000 0.3234960000)) (S ( 239.668000000 -0.0029261900) ( 57.441900000 -0.0374083000) ( 18.285900000 -0.1144870000) ( 6.599140000 0.1156350000) ( 2.490490000 0.6125950000) ( 0.944545000 0.3937990000)) (S ( 1.277900000 -0.2276060000) ( 0.397590000 0.0014458300) ( 0.160095000 1.0927900000)) (S ( 0.055657700 1.0000000000)) ) SILICON:"631GS" = ( (S (16115.900000000 0.0019594800) ( 2425.580000000 0.0149288000) ( 553.867000000 0.0728478000) ( 156.340000000 0.2461300000) ( 50.068300000 0.4859140000) ( 17.017800000 0.3250020000)) (S ( 292.718000000 -0.0027809400) ( 69.873100000 -0.0357146000) ( 22.336300000 -0.1149850000) ( 8.150390000 0.0935634000) ( 3.134580000 0.6030170000) ( 1.225430000 0.4189590000)) (S ( 1.727380000 -0.2446300000) ( 0.572922000 0.0043157200) ( 0.222192000 1.0981800000)) (S ( 0.077836900 1.0000000000)) ) PHOSPHORUS:"631GS" = ( (S (19413.300000000 0.0018516000) ( 2909.420000000 0.0142062000) ( 661.364000000 0.0699995000) ( 185.759000000 0.2400790000) ( 59.194300000 0.4847620000) ( 20.031000000 0.3352000000)) (S ( 339.478000000 -0.0027821700) ( 81.010100000 -0.0360499000) ( 25.878000000 -0.1166310000) ( 9.452210000 0.0968328000) ( 3.665660000 0.6144180000) ( 1.467460000 0.4037980000)) (S ( 2.156230000 -0.2529230000) ( 0.748997000 0.0328517000) ( 0.283145000 1.0812500000)) (S ( 0.099831700 1.0000000000)) ) SULFUR:"631GS" = ( (S (21917.100000000 0.0018692400) ( 3301.490000000 0.0142303000) ( 754.146000000 0.0696962000) ( 212.711000000 0.2384870000) ( 67.989600000 0.4833070000) ( 23.051500000 0.3380740000)) (S ( 423.735000000 -0.0023767700) ( 100.710000000 -0.0316930000) ( 32.159900000 -0.1133170000) ( 11.807900000 0.0560900000) ( 4.631100000 0.5922550000) ( 1.870250000 0.4550060000)) (S ( 2.615840000 -0.2503740000) ( 0.922167000 0.0669570000) ( 0.341287000 1.0545100000)) (S ( 0.117167000 1.0000000000)) ) CHLORINE:"631GS" = ( (S (25180.100000000 0.0018329600) ( 3780.350000000 0.0140342000) ( 860.474000000 0.0690974000) ( 242.145000000 0.2374520000) ( 77.334900000 0.4830340000) ( 26.247000000 0.3398560000)) (S ( 491.765000000 -0.0022973900) ( 116.984000000 -0.0307137000) ( 37.415300000 -0.1125280000) ( 13.783400000 0.0450163000) ( 5.452150000 0.5893530000) ( 2.225880000 0.4652060000)) (S ( 3.186490000 -0.2518270000) ( 1.144270000 0.0615890000) ( 0.420377000 1.0601800000)) (S ( 0.142657000 1.0000000000)) ) ARGON:"631GS" = ( (S (28348.300000000 0.0018252600) ( 4257.620000000 0.0139686000) ( 969.857000000 0.0687073000) ( 273.263000000 0.2362040000) ( 87.369500000 0.4822140000) ( 29.686700000 0.3420430000)) (S ( 575.891000000 -0.0021597200) ( 136.816000000 -0.0290775000) ( 43.809800000 -0.1108270000) ( 16.209400000 0.0276999000) ( 6.460840000 0.5776130000) ( 2.651140000 0.4886880000)) (S ( 3.860280000 -0.2555920000) ( 1.413730000 0.0378066000) ( 0.516646000 1.0805600000)) (S ( 0.173888000 1.0000000000)) ) COPPER:"631GS" = ( (S (76794.380000000 0.0017481610) (11530.700000000 0.0133960200) ( 2626.575000000 0.0661088500) ( 740.490300000 0.2298265000) ( 237.352800000 0.4787675000) ( 81.158180000 0.3530739000)) (S ( 1610.814000000 0.0023640550) ( 383.636700000 0.0315363500) ( 124.173300000 0.1269452000) ( 46.746780000 -0.0226284000) ( 19.065690000 -0.6192080000) ( 7.871567000 -0.4585393000)) (S ( 64.457320000 -0.0043310750) ( 21.852120000 0.0741230700) ( 9.405343000 0.2542108000) ( 3.999168000 -0.2874843000) ( 1.670297000 -0.7291436000) ( 0.659627000 -0.2113951000)) (S ( 2.600088000 0.0502757700) ( 0.963094000 0.2650040000) ( 0.136161000 -1.1201550000)) (S ( 0.047332000 1.0000000000)) ) POTASSIUM:"631GS" = ( (S ( 31594.4200000000 0.0018280100) ( 4744.3300000000 0.0139940300) ( 1080.4190000000 0.0688712900) ( 304.2338000000 0.2369760000) ( 97.2458600000 0.4829040000) ( 33.0249500000 0.3404795000)) (S ( 622.7625000000 -0.0025029760) ( 147.8839000000 -0.0331555000) ( 47.3273500000 -0.1226387000) ( 17.5149500000 0.0535364300) ( 6.9227220000 0.6193860000) ( 2.7682770000 0.4345878000)) (S ( 11.8480200000 0.0127768900) ( 4.0792110000 0.2098767000) ( 1.7634810000 -0.0030952740) ( 0.7889270000 -0.5593884000) ( 0.3503870000 -0.5134760000) ( 0.1463440000 -0.0659803500)) (S ( 0.7168010000 -0.0523777200) ( 0.2337410000 -0.2798503000) ( 0.0386750000 1.1415470000)) (S ( 0.0165210000 1.0000000000)) ) CALCIUM:"631GS" = ( (S ( 35264.8600000000 0.0018135010) ( 5295.5030000000 0.0138849300) ( 1206.0200000000 0.0683616200) ( 339.6839000000 0.2356188000) ( 108.6264000000 0.4820639000) ( 36.9210300000 0.3429819000)) (S ( 706.3096000000 0.0024482250) ( 167.8187000000 0.0324150400) ( 53.8255800000 0.1226219000) ( 20.0163800000 -0.0431696500) ( 7.9702790000 -0.6126995000) ( 3.2120590000 -0.4487540000)) (S ( 14.1951800000 0.0108450000) ( 4.8808280000 0.2088333000) ( 2.1603900000 0.0315033800) ( 0.9878990000 -0.5526518000) ( 0.4495170000 -0.5437997000) ( 0.1873870000 -0.0666934200)) (S ( 1.0322710000 -0.0443972000) ( 0.3811710000 -0.3284563000) ( 0.0651310000 1.1630100000)) (S ( 0.0260100000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE P-FUNCTIONS FOR THE GAUSSIAN 82 631G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** LITHIUM:"631GP" = ( (P ( 2.3249184000 0.0089415000) ( 0.6324306000 0.1410095000) ( 0.0790534000 0.9453637000)) (P ( 0.0359620000 1.0000000000)) ) BERYLLIUM:"631GP" = ( (P ( 3.196463098 0.0559801998) ( 0.747813304 0.2615506110) ( 0.219966330 0.7939723390)) (P ( 0.082309901 1.0000000000)) ) BORON:"631GP" = ( (P ( 4.727971071 0.0745975799) ( 1.190337736 0.3078466770) ( 0.359411683 0.7434568340)) (P ( 0.126751247 1.0000000000)) ) CARBON:"631GP" = ( (P ( 7.868272350 0.0689990666) ( 1.881288540 0.3164239610) ( 0.544249258 0.7443082910)) (P ( 0.168714478 1.0000000000)) ) NITROGEN:"631GP" = ( (P ( 11.626361860 0.0675797439) ( 2.716279807 0.3239072960) ( 0.772218397 0.7408951400)) (P ( 0.212031497 1.0000000000)) ) OXYGEN:"631GP" = ( (P ( 15.539616250 0.0708742682) ( 3.599933586 0.3397528390) ( 1.013761750 0.7271585770)) (P ( 0.270005823 1.0000000000)) ) FLUORINE:"631GP" = ( (P ( 20.847952800 0.0716287243) ( 4.808308340 0.3459121030) ( 1.344069860 0.7224699570)) (P ( 0.358151393 1.0000000000)) ) NEON:"631GP" = ( (P ( 26.532131000 0.0719095885) ( 6.101755010 0.3495133720) ( 1.696271530 0.7199405120)) (P ( 0.445818700 1.0000000000)) ) SODIUM:"631GP" = ( (P ( 150.963000000 0.0050016600) ( 35.587800000 0.0355109000) ( 11.168300000 0.1428250000) ( 3.902010000 0.3386200000) ( 1.381770000 0.4515790000) ( 0.466382000 0.2732710000)) (P ( 0.497966000 -0.0230225000) ( 0.084352900 0.9503590000) ( 0.066635000 0.0598579000)) (P ( 0.025954400 1.0000000000)) ) MAGNESIUM:"631GP" = ( (P ( 189.180000000 0.0049281300) ( 45.211900000 0.0349888000) ( 14.356300000 0.1407250000) ( 5.138860000 0.3336420000) ( 1.906520000 0.4449400000) ( 0.705887000 0.2692540000)) (P ( 0.929340000 -0.0224192000) ( 0.269035000 0.1922710000) ( 0.117379000 0.8461810000)) (P ( 0.042106100 1.0000000000)) ) ALUMINUM:"631GP" = ( (P ( 239.668000000 0.0046028500) ( 57.441900000 0.0331990000) ( 18.285900000 0.1362820000) ( 6.599140000 0.3304760000) ( 2.490490000 0.4491460000) ( 0.944545000 0.2657040000)) (P ( 1.277900000 -0.0175126000) ( 0.397590000 0.2445330000) ( 0.160095000 0.8049340000)) (P ( 0.055657700 1.0000000000)) ) SILICON:"631GP" = ( (P ( 292.718000000 0.0044382600) ( 69.873100000 0.0326679000) ( 22.336300000 0.1347210000) ( 8.150390000 0.3286780000) ( 3.134580000 0.4496400000) ( 1.225430000 0.2613720000)) (P ( 1.727380000 -0.0177951000) ( 0.572922000 0.2535390000) ( 0.222192000 0.8006690000)) (P ( 0.077836900 1.0000000000)) ) PHOSPHORUS:"631GP" = ( (P ( 339.478000000 0.0045646200) ( 81.010100000 0.0336936000) ( 25.878000000 0.1397550000) ( 9.452210000 0.3393620000) ( 3.665660000 0.4509210000) ( 1.467460000 0.2385860000)) (P ( 2.156230000 -0.0177653000) ( 0.748997000 0.2740580000) ( 0.283145000 0.7854210000)) (P ( 0.099831700 1.0000000000)) ) SULFUR:"631GP" = ( (P ( 423.735000000 0.0040610100) ( 100.710000000 0.0306813000) ( 32.159900000 0.1304520000) ( 11.807900000 0.3272050000) ( 4.631100000 0.4528510000) ( 1.870250000 0.2560420000)) (P ( 2.615840000 -0.0145105000) ( 0.922167000 0.3102630000) ( 0.341287000 0.7544830000)) (P ( 0.117167000 1.0000000000)) ) CHLORINE:"631GP" = ( (P ( 491.765000000 0.0039894000) ( 116.984000000 0.0303177000) ( 37.415300000 0.1298800000) ( 13.783400000 0.3279510000) ( 5.452150000 0.4535270000) ( 2.225880000 0.2521540000)) (P ( 3.186490000 -0.0142993000) ( 1.144270000 0.3235720000) ( 0.420377000 0.7435070000)) (P ( 0.142657000 1.0000000000)) ) ARGON:"631GP" = ( (P ( 575.891000000 0.0038066500) ( 136.816000000 0.0292305000) ( 43.809800000 0.1264670000) ( 16.209400000 0.3235100000) ( 6.460840000 0.4548960000) ( 2.651140000 0.2566300000)) (P ( 3.860280000 -0.0159197000) ( 1.413730000 0.3246460000) ( 0.516646000 0.7439900000)) (P ( 0.173888000 1.0000000000)) ) COPPER:"631GP" = ( (P ( 1610.814000000 0.0039633070) ( 383.636700000 0.0311022300) ( 124.173300000 0.1361350000) ( 46.746780000 0.3492914000) ( 19.065690000 0.4624780000) ( 7.871567000 0.2020102000)) (P ( 64.457320000 -0.0075237250) ( 21.852120000 -0.0297568700) ( 9.405343000 0.0684965400) ( 3.999168000 0.4027141000) ( 1.670297000 0.4908490000) ( 0.659627000 0.1759268000)) (P ( 2.600088000 -0.1702911000) ( 0.963094000 0.0931013300) ( 0.136161000 0.9814336000)) (P ( 0.047332000 1.0000000000)) ) POTASSIUM:"631GP" = ( (P ( 622.7625000000 0.0040946370) ( 147.8839000000 0.0314519900) ( 47.3273500000 0.1351558000) ( 17.5149500000 0.3390500000) ( 6.9227220000 0.4629455000) ( 2.7682770000 0.2242638000)) (P ( 11.8480200000 -0.0122137700) ( 4.0792110000 -0.0069005370) ( 1.7634810000 0.2007466000) ( 0.7889270000 0.4281332000) ( 0.3503870000 0.3970156000) ( 0.1463440000 0.1104718000)) (P ( 0.7168010000 0.0316430000) ( 0.2337410000 -0.0404616000) ( 0.0386750000 1.0120290000)) (P ( 0.0165210000 1.0000000000)) ) CALCIUM:"631GP" = ( (P ( 706.3096000000 0.0040203710) ( 167.8187000000 0.0310060100) ( 53.8255800000 0.1337279000) ( 20.0163800000 0.3367983000) ( 7.9702790000 0.4631281000) ( 3.2120590000 0.2257532000)) (P ( 14.1951800000 -0.0128962100) ( 4.8808280000 -0.0102519800) ( 2.1603900000 0.1959781000) ( 0.9878990000 0.4357933000) ( 0.4495170000 0.3996452000) ( 0.1873870000 0.0971363600)) (P ( 1.0322710000 -0.4298621000) ( 0.3811710000 0.0069358290) ( 0.0651310000 0.9705933000)) (P ( 0.0260100000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE GAUSSIAN 82 6311G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** % 6-311G basis set uses CARTESIAN functions, but the ones with extra % polarization and diffuse functions use SPHERICAL funcations % (all according to EMSL library) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"6-311G" = ( (GET "6311GS") ) HELIUM:"6-311G" = ( (GET "6311GS") ) LITHIUM:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) BERYLLIUM:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) BORON:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) CARBON:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) NITROGEN:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) OXYGEN:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) FLUORINE:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) NEON:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) SODIUM:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) MAGNESIUM:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) ALUMINUM:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) SILICON:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) PHOSPHORUS:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) SULFUR:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) CHLORINE:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) ARGON:"6-311G" = ( (GET "6311GS") (GET "6311GP") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 6-311G* Valence Triple Zeta + Polarization Basis % ------------------------------------------------ % Elements Contraction Reference % H - He: (5s) -> [3s] R. Krishnan, J.S. Binkley, R. Seeger and % Li - Ne: (11s,5p,1d) -> [4s,3p,1d] J.A. Pople, J. Chem. Phys. 72, 650 (1980). % K - Ca: (14s,11p,4d)-> [8s,7p,2d] J-P. Blaudeau, M. P. McGrath, L.A. Curtiss % and L. Radom, J. Chem. Phys. 107, 5016 % (1997). % Ga - Kr: (14,12p,6d) -> [8s,7p,3d] L. A. Curtiss, M. P. McGrath, J-P. Blandeau, % % N. E. Davis, R. C. Binning, Jr., L. Radom, % J. Chem. Phys. 103, 6104 (1995). % I : (15s,12p,7d)-> [10s,9p,5d] M.N. Glukhovtsev, A. Pross, % M.P. McGrath and L. Radom, J. Chem. Phys. % 103, 1878 (1995). % ** % This basis has increased flexibility in the valence region relative to the % 6-31G basis because it uses three functions to represent each valence AO. % Note: This basis uses 5-component d functions. % ************************************************************************** % % BASIS "6-311G*" SPHERICAL according to EMSL Library % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311G*":puream = true HYDROGEN:"6-311G*" = ( (GET "6311GS") ) HELIUM:"6-311G*" = ( (GET "6311GS") ) LITHIUM:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BERYLLIUM:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BORON:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CARBON:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NITROGEN:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) OXYGEN:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) FLUORINE:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NEON:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SODIUM:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) MAGNESIUM:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ALUMINUM:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SILICON:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) PHOSPHORUS:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SULFUR:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CHLORINE:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ARGON:"6-311G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) %%%%%%%%% ALIAS 6-311G(d) => 6-311G* %%%%%%%%%%%%%%%%%%%%%%%%% % BASIS "6-311G(d)/6-311G*" SPHERICAL according to EMSL Library "6-311G(d)":puream = true HYDROGEN:"6-311G(d)" = ( (GET "6311GS") ) HELIUM:"6-311G(d)" = ( (GET "6311GS") ) LITHIUM:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BERYLLIUM:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BORON:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CARBON:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NITROGEN:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) OXYGEN:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) FLUORINE:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NEON:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SODIUM:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) MAGNESIUM:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ALUMINUM:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SILICON:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) PHOSPHORUS:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SULFUR:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CHLORINE:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ARGON:"6-311G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6-311+G* Valence Triple Zeta + Polarization + Diffuse Basis % ------------------------------------------------------------- % BASIS "6-311+G(d)/6-311+G*" SPHERICAL according to EMSL Library %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311+G*":puream = true HYDROGEN:"6-311+G*" = ( (GET "6311GS") ) HELIUM:"6-311+G*" = ( (GET "6311GS") ) LITHIUM:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) BERYLLIUM:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) BORON:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) CARBON:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) NITROGEN:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) OXYGEN:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) FLUORINE:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) NEON:"6-311+G*" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) %%%%%%%% ALIAS 6-311+G(d) => 6-311+G* %%%%%%%%%%%%%%%%%%%%%%% % BASIS "6-311+G(d)/6-311+G*" SPHERICAL according to EMSL Library "6-311+G(d)":puream = true HYDROGEN:"6-311+G(d)" = ( (GET "6311GS") ) HELIUM:"6-311+G(d)" = ( (GET "6311GS") ) LITHIUM:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) BERYLLIUM:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) BORON:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) CARBON:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) NITROGEN:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) OXYGEN:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) FLUORINE:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) NEON:"6-311+G(d)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") (GET "PLUSS") (GET "PLUSP") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 6-311G** Valence Triple Zeta + Polarization Basis % ------------------------------------------------- % Elements Contraction Reference % H - He: (5s,1p) -> [3s,1p] R. Krishnan, J.S. Binkley, R. Seeger and % Li - Ne: (11s,5p,1d) -> [4s,3p,1d] J.A. Pople, J. Chem. Phys. 72, 650 (1980). % K - Ca: (14s,11p,4d)-> [8s,7p,2d] J-P. Blaudeau, M. P. McGrath, L.A. Curtiss % and L. Radom, J. Chem. Phys. 107, 5016 % (1997). % Ga - Kr: (14,12p,6d) -> [8s,7p,3d] L. A. Curtiss, M. P. McGrath, J-P. % % N. E. Davis, R. C. Binning, Jr., L. Radom, % J. Chem. Phys. 103, 6104 (1995). % I : (15s,12p,6d)-> [10s,9p,4d] M.N. Glukhovtsev, A. Pross, M.P. McGrath % and L. Radom, J. Chem. Phys. 103, 1878 % (1995). % ** % This basis has increased flexibility in the valence region relative to the % 6-31G basis because it uses three functions to represent each valence AO. % Note: This basis uses 5-component d functions. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % BASIS "6-311G**/6-311G(d,p)" SPHERICAL according to EMSL Library "6-311G**":puream = true HYDROGEN:"6-311G**" = ( (GET "6311GS") (GET "STAR11") ) HELIUM:"6-311G**" = ( (GET "6311GS") (GET "STAR11") ) LITHIUM:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BERYLLIUM:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BORON:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CARBON:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NITROGEN:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) OXYGEN:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) FLUORINE:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NEON:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SODIUM:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) MAGNESIUM:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ALUMINUM:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SILICON:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) PHOSPHORUS:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SULFUR:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CHLORINE:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ARGON:"6-311G**" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) %%%%%%%%%%%%% ALIAS 6-311G** => 6-311G(d,p) %%%%%%%%%%%%%%%%%%%%%% % BASIS "6-311G(d,p)/6-311G**" SPHERICAL according to EMSL Library "6-311G(d,p)":puream = true HYDROGEN:"6-311G(d,p)" = ( (GET "6311GS") (GET "STAR11") ) HELIUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "STAR11") ) LITHIUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BERYLLIUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) BORON:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CARBON:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NITROGEN:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) OXYGEN:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) FLUORINE:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) NEON:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SODIUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) MAGNESIUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ALUMINUM:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SILICON:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) PHOSPHORUS:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) SULFUR:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) CHLORINE:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) ARGON:"6-311G(d,p)" = ( (GET "6311GS") (GET "6311GP") (GET "STAR11") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 6-311G(2d,2p) Basis Set % % Constructed by removing diffuse functions (PLUSS, PLUSP) from % 6-311++G(2d,2p) basis sets % Added on: Jan 18, 2003 % % BASIS "6-311G(2d,2p)" SPHERICAL according to EMSL Library % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311G(2d,2p)":puream = true HYDROGEN:"6-311G(2d,2p)" = ( (GET "6311GS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) ) HELIUM:"6-311G(2d,2p)" = ( (GET "6311GS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) ) LITHIUM:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.4000000000 1.0000000000)) (D ( 0.1000000000 1.0000000000)) ) BERYLLIUM:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.5100000000 1.0000000000)) (D ( 0.1275000000 1.0000000000)) ) BORON:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.8020000000 1.0000000000)) (D ( 0.2005000000 1.0000000000)) ) CARBON:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.2520000000 1.0000000000)) (D ( 0.3130000000 1.0000000000)) ) NITROGEN:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.8260000000 1.0000000000)) (D ( 0.4565000000 1.0000000000)) ) OXYGEN:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 2.5840000000 1.0000000000)) (D ( 0.6460000000 1.0000000000)) ) FLUORINE:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 2.3960000000 1.0000000000)) (D ( 0.8750000000 1.0000000000)) ) NEON:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 4.6080000000 1.0000000000)) (D ( 1.1520000000 1.0000000000)) (S ( 0.1300000000 1.0000000000)) (P ( 0.1300000000 1.0000000000)) ) SODIUM:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.3500000000 1.0000000000)) (D ( 0.0875000000 1.0000000000)) ) MAGNESIUM:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.3500000000 1.0000000000)) (D ( 0.0875000000 1.0000000000)) ) ALUMINUM:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.6500000000 1.0000000000)) (D ( 0.1625000000 1.0000000000)) ) SILICON:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.9000000000 1.0000000000)) (D ( 0.2250000000 1.0000000000)) ) PHOSPHORUS:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.1000000000 1.0000000000)) (D ( 0.2750000000 1.0000000000)) ) SULFUR:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.3000000000 1.0000000000)) (D ( 0.3250000000 1.0000000000)) ) CHLORINE:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.5000000000 1.0000000000)) (D ( 0.3750000000 1.0000000000)) ) ARGON:"6-311G(2d,2p)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.7000000000 1.0000000000)) (D ( 0.4250000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6-311G(2df,2pd) Valence Triple Zeta + Polarization % --------------------------------------------------- % Elements Contraction Reference % H: (5s,2p,1d) -> [3s,2p,1d] R. Krishnan, J.S. Binkley, R. Seeger % He: (5s,2p,1d) -> [3s,2p,1d] and J.A. Pople, J.C.P. 72, 650 (1980). % % Li - Ne: (11s,5p,2d,1f) -> [4s,3p,2d,1f] % K - Ca: (14s,11p,5d,1f)-> [8s,7p,3d,1f] J-P. Blaudeau, M. P. McGrath, L.A. % Curtiss and L. Radom, J. Chem. Phys. % 107, 5016 (1997). % ** % This basis contains three sets of polarization functions on every atom. % Note: This basis set uses 5-component d functions. % % BASIS "6-311G(2df,2pd)" SPHERICAL according to EMSL Library %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311G(2df,2pd)":puream = true HYDROGEN:"6-311G(2df,2pd)" = ( (GET "6311GS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) (D ( 1.0000000000 1.0000000000)) ) HELIUM:"6-311G(2df,2pd)" = ( (GET "6311GS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) (D ( 2.0000000000 1.0000000000)) ) LITHIUM:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.4000000000 1.0000000000)) (D ( 0.1000000000 1.0000000000)) (F ( 0.1500000000 1.0000000000)) ) BERYLLIUM:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.5100000000 1.0000000000)) (D ( 0.1275000000 1.0000000000)) (F ( 0.2600000000 1.0000000000)) ) BORON:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 0.8020000000 1.0000000000)) (D ( 0.2005000000 1.0000000000)) (F ( 0.5000000000 1.0000000000)) ) CARBON:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.2520000000 1.0000000000)) (D ( 0.3130000000 1.0000000000)) (F ( 0.8000000000 1.0000000000)) ) NITROGEN:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 1.8260000000 1.0000000000)) (D ( 0.4565000000 1.0000000000)) (F ( 1.0000000000 1.0000000000)) ) OXYGEN:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 2.5840000000 1.0000000000)) (D ( 0.6460000000 1.0000000000)) (F ( 1.4000000000 1.0000000000)) ) FLUORINE:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 2.3960000000 1.0000000000)) (D ( 0.8750000000 1.0000000000)) (F ( 1.8500000000 1.0000000000)) ) NEON:"6-311G(2df,2pd)" = ( (GET "6311GS") (GET "6311GP") (D ( 4.6080000000 1.0000000000)) (D ( 1.1520000000 1.0000000000)) (F ( 2.5000000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE S-FUNCTIONS FOR THE GAUSSIAN 82 6311G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"6311GS" = ( (S ( 33.865000000 0.0254938000) ( 5.094790000 0.1903730000) ( 1.158790000 0.8521610000)) (S ( 0.325840000 1.0000000000)) (S ( 0.102741000 1.0000000000)) ) HELIUM:"6311GS" = ( (S ( 98.124300000 0.0287452000) ( 14.768900000 0.2080610000) ( 3.318830000 0.8376350000)) (S ( 0.874047000 1.0000000000)) (S ( 0.244564000 1.0000000000)) ) LITHIUM:"6311GS" = ( (S ( 900.460000000 0.0022870400) ( 134.433000000 0.0176350000) ( 30.436500000 0.0873434000) ( 8.626390000 0.2809770000) ( 2.483320000 0.6587410000) ( 0.303179000 0.1187120000)) (S ( 4.868900000 0.0933293000) ( 0.856924000 0.9430450000) ( 0.243227000 -0.0027982700)) (S ( 0.063507000 1.0000000000)) (S ( 0.024368300 1.0000000000)) ) BERYLLIUM:"6311GS" = ( (S ( 1682.800000000 0.0022857400) ( 251.715000000 0.0175938000) ( 57.411600000 0.0863315000) ( 16.517100000 0.2818350000) ( 4.853640000 0.6405940000) ( 0.626863000 0.1444670000)) (S ( 8.309380000 0.1086210000) ( 1.740750000 0.9273010000) ( 0.485816000 -0.0029716900)) (S ( 0.163613000 1.0000000000)) (S ( 0.056728500 1.0000000000)) ) BORON:"6311GS" = ( (S ( 2858.890000000 0.0021537500) ( 428.140000000 0.0165823000) ( 97.528200000 0.0821870000) ( 27.969300000 0.2766180000) ( 8.215770000 0.6293160000) ( 1.112780000 0.1737700000)) (S ( 13.241500000 0.1174430000) ( 3.001660000 0.9180020000) ( 0.912856000 -0.0026510500)) (S ( 0.315454000 1.0000000000)) (S ( 0.098856300 1.0000000000)) ) CARBON:"6311GS" = ( (S ( 4563.240000000 0.0019666500) ( 682.024000000 0.0152306000) ( 154.973000000 0.0761269000) ( 44.455300000 0.2608010000) ( 13.029000000 0.6164620000) ( 1.827730000 0.2210060000)) (S ( 20.964200000 0.1146600000) ( 4.803310000 0.9199990000) ( 1.459330000 -0.0030306800)) (S ( 0.483456000 1.0000000000)) (S ( 0.145585000 1.0000000000)) ) NITROGEN:"6311GS" = ( (S ( 6293.480000000 0.0019697900) ( 949.044000000 0.0149613000) ( 218.776000000 0.0735006000) ( 63.691600000 0.2489370000) ( 18.828200000 0.6024600000) ( 2.720230000 0.2562020000)) (S ( 30.633100000 0.1119060000) ( 7.026140000 0.9216660000) ( 2.112050000 -0.0025691900)) (S ( 0.684009000 1.0000000000)) (S ( 0.200878000 1.0000000000)) ) OXYGEN:"6311GS" = ( (S ( 8588.500000000 0.0018951500) ( 1297.230000000 0.0143859000) ( 299.296000000 0.0707320000) ( 87.377100000 0.2400010000) ( 25.678900000 0.5947970000) ( 3.740040000 0.2808020000)) (S ( 42.117500000 0.1138890000) ( 9.628370000 0.9208110000) ( 2.853320000 -0.0032744700)) (S ( 0.905661000 1.0000000000)) (S ( 0.255611000 1.0000000000)) ) FLUORINE:"6311GS" = ( (S (11427.100000000 0.0018009300) ( 1722.350000000 0.0137419000) ( 395.746000000 0.0681334000) ( 115.139000000 0.2333250000) ( 33.602600000 0.5890860000) ( 4.919010000 0.2995050000)) (S ( 55.444100000 0.1145360000) ( 12.632300000 0.9205120000) ( 3.717560000 -0.0033780400)) (S ( 1.165450000 1.0000000000)) (S ( 0.321892000 1.0000000000)) ) NEON:"6311GS" = ( (S (13995.700000000 0.0018327600) ( 2117.100000000 0.0138827000) ( 490.425000000 0.0680687000) ( 143.833000000 0.2313280000) ( 41.926500000 0.5858900000) ( 6.156840000 0.3058830000)) (S ( 69.121100000 0.1191490000) ( 15.835000000 0.9173750000) ( 4.673260000 -0.0040583900)) (S ( 1.457560000 1.0000000000)) (S ( 0.397057000 1.0000000000)) ) SODIUM:"6311GS" = ( (S ( 36166.4000000000 0.0010320000) ( 5372.5800000000 0.0080710000) ( 1213.2100000000 0.0421290000) ( 339.6230000000 0.1697890000) ( 109.5530000000 0.5146210000) ( 38.7773000000 0.3798170000)) (S ( 38.7773000000 0.3747620000) ( 14.5759000000 0.5757690000) ( 5.2699300000 0.1129330000)) (S ( 1.8277700000 1.0000000000)) (S ( 0.6199480000 1.0000000000)) (S ( 0.0572400000 1.0000000000)) (S ( 0.0240480000 1.0000000000)) ) MAGNESIUM:"6311GS" = ( (S ( 43866.5000000000 0.0009180000) ( 6605.3700000000 0.0070470000) ( 1513.2600000000 0.0359410000) ( 432.3170000000 0.1414610000) ( 142.1490000000 0.4267640000) ( 51.3983000000 0.4979750000)) (S ( 51.3983000000 0.2513550000) ( 19.9196000000 0.6186710000) ( 8.0247400000 0.1884170000)) (S ( 2.5081700000 1.0000000000)) (S ( 0.8715310000 1.0000000000)) (S ( 0.1081880000 1.0000000000)) (S ( 0.0401300000 1.0000000000)) ) ALUMINUM:"6311GS" = ( (S ( 54866.4890000000 0.0008390000) ( 8211.7665000000 0.0065270000) ( 1866.1761000000 0.0336660000) ( 531.1293400000 0.1329020000) ( 175.1179700000 0.4012660000) ( 64.0055000000 0.5313380000)) (S ( 64.0055000000 0.2023050000) ( 25.2925070000 0.6247900000) ( 10.5349100000 0.2274390000)) (S ( 3.2067110000 1.0000000000)) (S ( 1.1525550000 1.0000000000)) (S ( 0.1766780000 1.0000000000)) (S ( 0.0652370000 1.0000000000)) ) SILICON:"6311GS" = ( (S ( 69379.2300000000 0.0007570000) ( 10354.9400000000 0.0059320000) ( 2333.8796000000 0.0310880000) ( 657.1429500000 0.1249670000) ( 214.3011300000 0.3868970000) ( 77.6291680000 0.5548880000)) (S ( 77.6291680000 0.1778810000) ( 30.6308070000 0.6277650000) ( 12.8012950000 0.2476230000)) (S ( 3.9268660000 1.0000000000)) (S ( 1.4523430000 1.0000000000)) (S ( 0.2562340000 1.0000000000)) (S ( 0.0942790000 1.0000000000)) ) PHOSPHORUS:"6311GS" = ( (S ( 77492.4000000000 0.0007810000) ( 11605.8000000000 0.0060680000) ( 2645.9600000000 0.0311600000) ( 754.9760000000 0.1234310000) ( 248.7550000000 0.3782090000) ( 91.1565000000 0.5632620000)) (S ( 91.1565000000 0.1602550000) ( 36.2257000000 0.6276470000) ( 15.2113000000 0.2638490000)) (S ( 4.7941700000 1.0000000000)) (S ( 1.8079300000 1.0000000000)) (S ( 0.3568160000 1.0000000000)) (S ( 0.1147830000 1.0000000000)) ) SULFUR:"6311GS" = ( (S ( 93413.4000000000 0.0007430000) ( 13961.7000000000 0.0057930000) ( 3169.9100000000 0.0299540000) ( 902.4560000000 0.1190280000) ( 297.1580000000 0.3684320000) ( 108.7020000000 0.5772990000)) (S ( 108.7020000000 0.1431860000) ( 43.1553000000 0.6244650000) ( 18.1079000000 0.2833660000)) (S ( 5.5600900000 1.0000000000)) (S ( 2.1318300000 1.0000000000)) (S ( 0.4204030000 1.0000000000)) (S ( 0.1360450000 1.0000000000)) ) CHLORINE:"6311GS" = ( (S ( 105819.0000000000 0.0007380000) ( 15872.0000000000 0.0057180000) ( 3619.6500000000 0.0294950000) ( 1030.8000000000 0.1172860000) ( 339.9080000000 0.3629490000) ( 124.5380000000 0.5841490000)) (S ( 124.5380000000 0.1341770000) ( 49.5135000000 0.6242500000) ( 20.8056000000 0.2917560000)) (S ( 6.5834600000 1.0000000000)) (S ( 2.5646800000 1.0000000000)) (S ( 0.5597630000 1.0000000000)) (S ( 0.1832730000 1.0000000000)) ) ARGON:"6311GS" = ( (S ( 118022.38000000 0.00074700) ( 17683.54100000 0.00579000) ( 4027.76570000 0.02991900 ) ( 1145.39770000 0.11920600 ) ( 377.16375000 0.36902800 ) ( 138.15969000 0.57645900 )) (S ( 138.15969000 0.14392700 ) ( 54.98911700 0.62293800) ( 23.17066700 0.28396400)) (S ( 7.37786000 1.00000000)) (S ( 2.92368800 1.00000000)) (S ( 0.65040500 1.00000000)) (S ( 0.23282500 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE P-FUNCTIONS FOR THE GAUSSIAN 82 6311G BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** LITHIUM:"6311GP" = ( (P ( 4.868900000 0.0327661000) ( 0.856924000 0.1597920000) ( 0.243227000 0.8856670000)) (P ( 0.063507000 1.0000000000)) (P ( 0.024368300 1.0000000000)) ) BERYLLIUM:"6311GP" = ( (P ( 8.309380000 0.0361344000) ( 1.740750000 0.2169580000) ( 0.485816000 0.8418390000)) (P ( 0.163613000 1.0000000000)) (P ( 0.056728500 1.0000000000)) ) BORON:"6311GP" = ( (P ( 13.241500000 0.0418100000) ( 3.001660000 0.2365750000) ( 0.912856000 0.8162140000)) (P ( 0.315454000 1.0000000000)) (P ( 0.098856300 1.0000000000)) ) CARBON:"6311GP" = ( (P ( 20.964200000 0.0402487000) ( 4.803310000 0.2375940000) ( 1.459330000 0.8158540000)) (P ( 0.483456000 1.0000000000)) (P ( 0.145585000 1.0000000000)) ) NITROGEN:"6311GP" = ( (P ( 30.633100000 0.0383119000) ( 7.026140000 0.2374030000) ( 2.112050000 0.8175920000)) (P ( 0.684009000 1.0000000000)) (P ( 0.200878000 1.0000000000)) ) OXYGEN:"6311GP" = ( (P ( 42.117500000 0.0365114000) ( 9.628370000 0.2371530000) ( 2.853320000 0.8197020000)) (P ( 0.905661000 1.0000000000)) (P ( 0.255611000 1.0000000000)) ) FLUORINE:"6311GP" = ( (P ( 55.444100000 0.0354609000) ( 12.632300000 0.2374510000) ( 3.717560000 0.8204580000)) (P ( 1.165450000 1.0000000000)) (P ( 0.321892000 1.0000000000)) ) NEON:"6311GP" = ( (P ( 69.121100000 0.0356574000) ( 15.835000000 0.2394770000) ( 4.673260000 0.8184610000)) (P ( 1.457560000 1.0000000000)) (P ( 0.397057000 1.0000000000)) ) SODIUM:"6311GP" = ( (P ( 144.6450000000 0.0114850000) ( 33.9074000000 0.0823830000) ( 10.6285000000 0.3196580000) ( 3.8238900000 0.7012950000)) (P ( 1.4442900000 0.6385060000) ( 0.5526210000 0.4253650000)) (P ( 0.1887200000 1.0000000000)) (P ( 0.0465010000 1.0000000000)) (P ( 0.0162850000 1.0000000000)) ) MAGNESIUM:"6311GP" = ( (P ( 193.8540000000 0.0101880000) ( 45.4420000000 0.0753600000) ( 14.1864000000 0.3074190000) ( 5.0575100000 0.7175750000)) (P ( 1.8886100000 0.6673390000) ( 0.7226520000 0.3946490000)) (P ( 0.2364170000 1.0000000000)) (P ( 0.0933580000 1.0000000000)) (P ( 0.0348090000 1.0000000000)) ) ALUMINUM:"6311GP" = ( (P ( 259.2836200000 0.0094480000) ( 61.0768700000 0.0709740000) ( 19.3032370000 0.2956360000) ( 7.0108820000 0.7282190000)) (P ( 2.6738650000 0.6444670000) ( 1.0365960000 0.4174130000)) (P ( 0.3168190000 1.0000000000)) (P ( 0.1142570000 1.0000000000)) (P ( 0.0413970000 1.0000000000)) ) SILICON:"6311GP" = ( (P ( 335.4831900000 0.0088660000) ( 78.9003660000 0.0682990000) ( 24.9881500000 0.2909580000) ( 9.2197110000 0.7321170000)) (P ( 3.6211400000 0.6198790000) ( 1.4513100000 0.4391480000)) (P ( 0.5049770000 1.0000000000)) (P ( 0.1863170000 1.0000000000)) (P ( 0.0654320000 1.0000000000)) ) PHOSPHORUS:"6311GP" = ( (P ( 384.8430000000 0.0092060000) ( 90.5521000000 0.0698740000) ( 29.1339000000 0.2924700000) ( 10.8862000000 0.7281030000)) (P ( 4.3525900000 0.6283490000) ( 1.7770600000 0.4280440000)) (P ( 0.6970050000 1.0000000000)) (P ( 0.2535320000 1.0000000000)) (P ( 0.0684930000 1.0000000000)) ) SULFUR:"6311GP" = ( (P ( 495.0400000000 0.0083090000) ( 117.2210000000 0.0640240000) ( 37.7749000000 0.2776140000) ( 14.0584000000 0.7450760000)) (P ( 5.5657400000 0.6137120000) ( 2.2629700000 0.4438180000)) (P ( 0.8079940000 1.0000000000)) (P ( 0.2774600000 1.0000000000)) (P ( 0.0771410000 1.0000000000)) ) CHLORINE:"6311GP" = ( (P ( 589.7760000000 0.0023910000) ( 139.8490000000 0.0185040000) ( 45.1413000000 0.0813770000) ( 16.8733000000 0.2215520000) ( 6.7411000000 0.7725690000)) (P ( 6.7411000000 -1.5722440000) ( 2.7715200000 0.9923890000)) (P ( 1.0238700000 1.0000000000)) (P ( 0.3813680000 1.0000000000)) (P ( 0.1094370000 1.0000000000)) ) ARGON:"6311GP" = ( (P ( 663.0620100000 0.0030820000) ( 157.0928100000 0.0241650000) ( 50.2311000000 0.1082230000) ( 18.6353450000 0.2941920000) ( 7.4465370000 0.6878620000)) (P ( 7.4465370000 -0.1214482000) ( 3.0956980000 0.1632370000)) (P ( 1.1064630000 1.0000000000)) (P ( 0.4156010000 1.0000000000)) (P ( 0.1454490000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE D-FUNCTIONS FOR THE GAUSSIAN 82 6311G BASIS % VITALY A. RASSOLOV, MARK A. RATNER, JOHN A. POPLE, % PAUL C. REDFERN, LARRY A. CURTISS. % J. Comp. Chem. Vol.22 No 9. 976-984. 2001 % % Added on Jan 7, 2003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% POTASSIUM:"631GD" = ( (D (9.029078 0.08747672) (2.285045 0.3795635) (0.663892 0.7180393)) (D (0.179389 1.000000)) ) CALCIUM:"631GD" = ( (D (10.11067 0.08747672) (2.558769 0.3795635) (0.743420 0.7180393)) (D (0.200878 1.0000000)) ) COPPER:"631GD" = ( (D ( 30.853410000 0.0919990500) ( 8.264985000 0.3985021000) ( 2.495332000 0.6917897000)) (D ( 0.667658000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE GAUSSIAN 82 6311PPGSS BASIS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** % BASIS "6-311++G**/6-311++G(d,p)" SPHERICAL according to EMSL Library %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % NO DIFFUSE FUNCTION % HELIUM:"6-311++G**" = ( % (GET "6311GS") % (GET "PLUSS") % (GET "STAR11") % ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311++G**":puream = true HYDROGEN:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "STAR11") ) LITHIUM:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) BERYLLIUM:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) BORON:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) CARBON:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) NITROGEN:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) OXYGEN:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) FLUORINE:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) NEON:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SODIUM:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) MAGNESIUM:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) ALUMINUM:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SILICON:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) PHOSPHORUS:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SULFUR:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) CHLORINE:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) ARGON:"6-311++G**" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) %%%%%%%%% ALIAS 6-311++G(d,p) => 6-311++G** %%%%%%%%%%%%%%%%%%%%% % BASIS "6-311++G(d,p)/6-311++G**" SPHERICAL according to EMSL Library "6-311++G(d,p)":puream = true HYDROGEN:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "STAR11") ) HELIUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "STAR11") ) LITHIUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) BERYLLIUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) BORON:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) CARBON:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) NITROGEN:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) OXYGEN:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) FLUORINE:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) NEON:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SODIUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) MAGNESIUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) ALUMINUM:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SILICON:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) PHOSPHORUS:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) SULFUR:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) CHLORINE:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) ARGON:"6-311++G(d,p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6-311++G(2d,2p) Valence Triple Zeta + Polarization + Diffuse Basis % ------------------------------------------------------------------- % Elements Contraction Reference % H: (6s,2p) -> [4s,2p] R. Krishnan, J.S. Binkley, R. Seeger and % He: (5s,2p) -> [3s,2p] J.A. Pople, J. Chem. Phys. 72, 650 (1980). % Li - Ne: (12s,6p,2d) -> [5s,4p,2d] % K - Ca: (14s,11p,5d)-> [8s,7p,3d] J-P. Blaudeau, M. P. McGrath, L.A. Curtiss % and L. Radom, J. Chem. Phys. 107, 5016 % (1997). % ** % Diffuse exponents: T. Clark, J. Chandrasekhar, P.v.R. Schleyer, J. Comp. Chem. % 4, 294 (1983). % ** % This basis contains two sets of polarization functions on every atom. % Note: This basis set uses 5-component d functions. % % BASIS "6-311++G(2d,2p)" SPHERICAL according to EMSL Library %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311++G(2d,2p)":puream = true HYDROGEN:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) ) HELIUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (P ( 1.5000000000 1.0000000000)) (P ( 0.3750000000 1.0000000000)) ) LITHIUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.4000000000 1.0000000000)) (D ( 0.1000000000 1.0000000000)) ) BERYLLIUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.5100000000 1.0000000000)) (D ( 0.1275000000 1.0000000000)) ) BORON:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.8020000000 1.0000000000)) (D ( 0.2005000000 1.0000000000)) ) CARBON:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.2520000000 1.0000000000)) (D ( 0.3130000000 1.0000000000)) ) NITROGEN:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.8260000000 1.0000000000)) (D ( 0.4565000000 1.0000000000)) ) OXYGEN:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 2.5840000000 1.0000000000)) (D ( 0.6460000000 1.0000000000)) ) FLUORINE:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 2.3960000000 1.0000000000)) (D ( 0.8750000000 1.0000000000)) ) NEON:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 4.6080000000 1.0000000000)) (D ( 1.1520000000 1.0000000000)) (S ( 0.1300000000 1.0000000000)) (P ( 0.1300000000 1.0000000000)) ) SODIUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.3500000000 1.0000000000)) (D ( 0.0875000000 1.0000000000)) ) MAGNESIUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.3500000000 1.0000000000)) (D ( 0.0875000000 1.0000000000)) ) ALUMINUM:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.6500000000 1.0000000000)) (D ( 0.1625000000 1.0000000000)) ) SILICON:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 0.9000000000 1.0000000000)) (D ( 0.2250000000 1.0000000000)) ) PHOSPHORUS:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.1000000000 1.0000000000)) (D ( 0.2750000000 1.0000000000)) ) SULFUR:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.3000000000 1.0000000000)) (D ( 0.3250000000 1.0000000000)) ) CHLORINE:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.5000000000 1.0000000000)) (D ( 0.3750000000 1.0000000000)) ) ARGON:"6-311++G(2d,2p)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (D ( 1.7000000000 1.0000000000)) (D ( 0.4250000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6-311++G(3df,3pd) Valence Triple Zeta + Diffuse + Extended Polarization Basis % ----------------------------------------------------------------------------- % Elements Contraction References % H: (6s,3p,1d) ->[4s,3p,1d] R. Krishnan, J.S. Binkley, R. Seeger % He: (5s,3p,1d) ->[3s,3p,1d] and J.A. Pople, J. Chem. Phys. 72, 650 % % Li - Ne: (12s,6p,3d,1f) ->[5s,4p,3d,1f] (1980). % Na - Ar: (14s,11p,3d,1f) ->[7s,6p,3d,1f] % ** % Diffuse Functions: T. Clark, J. Chandrasekhar, G.W. Spitznagel and % P. von R. Schleyer. J. Comp. Chem. 4, 294 (1983) % P.M.W. Gill, B.G. Johnson, J.A. Pople and M.J. Frisch, % Chem. Phys. Lett. 197, 499 (1992). % Polarization Funct's: M.J. Frisch, J.A. Pople and J.S. Binkley J. Chem. % Phys. 80 3265 (1984). % ** % This basis is the largest Pople-style basis set which has been published. % Note: This basis set uses 5-component d and 7-component f functions. % % BASIS "6-311++G(3df,3pd)" SPHERICAL according to EMSL Library %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "6-311++G(3df,3pd)":puream = true HYDROGEN:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "STAR11") (P ( 3.0000000000 1.0000000000)) (P ( 0.1875000000 1.0000000000)) (D ( 1.0000000000 1.0000000000)) ) HELIUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "STAR11") (P ( 3.0000000000 1.0000000000)) (P ( 0.1875000000 1.0000000000)) (D ( 2.0000000000 1.0000000000)) ) LITHIUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 0.8000000000 1.0000000000)) (D ( 0.0500000000 1.0000000000)) (F ( 0.1500000000 1.0000000000)) ) BERYLLIUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 1.0200000000 1.0000000000)) (D ( 0.0637500000 1.0000000000)) (F ( 0.2600000000 1.0000000000)) ) BORON:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 1.6040000000 1.0000000000)) (D ( 0.1002500000 1.0000000000)) (F ( 0.5000000000 1.0000000000)) ) CARBON:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 2.5040000000 1.0000000000)) (D ( 0.1565000000 1.0000000000)) (F ( 0.8000000000 1.0000000000)) ) NITROGEN:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 3.6520000000 1.0000000000)) (D ( 0.2282500000 1.0000000000)) (F ( 1.0000000000 1.0000000000)) ) OXYGEN:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 5.1600000000 1.0000000000)) (D ( 0.3225000000 1.0000000000)) (F ( 1.4000000000 1.0000000000)) ) FLUORINE:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 7.0000000000 1.0000000000)) (D ( 0.4375000000 1.0000000000)) (F ( 1.8500000000 1.0000000000)) ) NEON:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 9.2160000000 1.0000000000)) (D ( 2.3040000000 1.0000000000)) (D ( 0.5760000000 1.0000000000)) (F ( 2.5000000000 1.0000000000)) (S ( 0.1300000000 1.0000000000)) (P ( 0.1300000000 1.0000000000)) ) SODIUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 0.7000000000 1.0000000000)) (D ( 0.0437500000 1.0000000000)) (F ( 0.1500000000 1.0000000000)) ) MAGNESIUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 0.7000000000 1.0000000000)) (D ( 0.0437500000 1.0000000000)) (F ( 0.2000000000 1.0000000000)) ) ALUMINUM:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 1.3000000000 1.0000000000)) (D ( 0.0812500000 1.0000000000)) (F ( 0.2500000000 1.0000000000)) ) SILICON:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 1.8000000000 1.0000000000)) (D ( 0.1125000000 1.0000000000)) (F ( 0.3200000000 1.0000000000)) ) PHOSPHORUS:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 2.2000000000 1.0000000000)) (D ( 0.1375000000 1.0000000000)) (F ( 0.4500000000 1.0000000000)) ) SULFUR:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 2.6000000000 1.0000000000)) (D ( 0.1625000000 1.0000000000)) (F ( 0.5500000000 1.0000000000)) ) CHLORINE:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 3.0000000000 1.0000000000)) (D ( 0.1875000000 1.0000000000)) (F ( 0.7000000000 1.0000000000)) ) ARGON:"6-311++G(3df,3pd)" = ( (GET "6311GS") (GET "PLUSS") (GET "6311GP") (GET "PLUSP") (GET "STAR11") (D ( 3.4000000000 1.0000000000)) (D ( 0.2125000000 1.0000000000)) (F ( 0.8500000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE DIFFUSE S FUNCTIONS FROM THE GAUSSIAN 82 SERIES OF BASIS SETS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"PLUSS" = ( (S ( 0.036000000 1.0000000000)) ) LITHIUM:"PLUSS" = ( (S ( 0.007400000 1.0000000000)) ) BERYLLIUM:"PLUSS" = ( (S ( 0.020700000 1.0000000000)) ) BORON:"PLUSS" = ( (S ( 0.031500000 1.0000000000)) ) CARBON:"PLUSS" = ( (S ( 0.043800000 1.0000000000)) ) NITROGEN:"PLUSS" = ( (S ( 0.063900000 1.0000000000)) ) OXYGEN:"PLUSS" = ( (S ( 0.084500000 1.0000000000)) ) FLUORINE:"PLUSS" = ( (S ( 0.107600000 1.0000000000)) ) NEON:"PLUSS" = ( (S ( 0.130000000 1.0000000000)) ) SODIUM:"PLUSS" = ( (S ( 0.007600000 1.0000000000)) ) MAGNESIUM:"PLUSS" = ( (S ( 0.014600000 1.0000000000)) ) ALUMINUM:"PLUSS" = ( (S ( 0.031800000 1.0000000000)) ) SILICON:"PLUSS" = ( (S ( 0.033100000 1.0000000000)) ) PHOSPHORUS:"PLUSS" = ( (S ( 0.034800000 1.0000000000)) ) SULFUR:"PLUSS" = ( (S ( 0.040500000 1.0000000000)) ) CHLORINE:"PLUSS" = ( (S ( 0.048300000 1.0000000000)) ) ARGON:"PLUSS" = ( (S ( 0.060000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE DIFFUSE P FUNCTIONS FROM THE GAUSSIAN 82 SERIES OF BASIS SETS % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** LITHIUM:"PLUSP" = ( (P ( 0.007400000 1.0000000000)) ) BERYLLIUM:"PLUSP" = ( (P ( 0.020700000 1.0000000000)) ) BORON:"PLUSP" = ( (P ( 0.031500000 1.0000000000)) ) CARBON:"PLUSP" = ( (P ( 0.043800000 1.0000000000)) ) NITROGEN:"PLUSP" = ( (P ( 0.063900000 1.0000000000)) ) OXYGEN:"PLUSP" = ( (P ( 0.084500000 1.0000000000)) ) FLUORINE:"PLUSP" = ( (P ( 0.107600000 1.0000000000)) ) NEON:"PLUSP" = ( (P ( 0.130000000 1.0000000000)) ) SODIUM:"PLUSP" = ( (P ( 0.007600000 1.0000000000)) ) MAGNESIUM:"PLUSP" = ( (P ( 0.014600000 1.0000000000)) ) ALUMINUM:"PLUSP" = ( (P ( 0.031800000 1.0000000000)) ) SILICON:"PLUSP" = ( (P ( 0.033100000 1.0000000000)) ) PHOSPHORUS:"PLUSP" = ( (P ( 0.034800000 1.0000000000)) ) SULFUR:"PLUSP" = ( (P ( 0.040500000 1.0000000000)) ) CHLORINE:"PLUSP" = ( (P ( 0.048300000 1.0000000000)) ) ARGON:"PLUSP" = ( (P ( 0.060000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE POLARIZATION FUNCTIONS FOR THE 6311 GAUSSIAN 82 BASIS SET % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"STAR11" = ( (P ( 0.750000000 1.0000000000)) ) HELIUM:"STAR11" = ( (P ( 0.750000000 1.0000000000)) ) LITHIUM:"STAR11" = ( (D ( 0.200000000 1.0000000000)) ) BERYLLIUM:"STAR11" = ( (D ( 0.255000000 1.0000000000)) ) BORON:"STAR11" = ( (D ( 0.401000000 1.0000000000)) ) CARBON:"STAR11" = ( (D ( 0.626000000 1.0000000000)) ) NITROGEN:"STAR11" = ( (D ( 0.913000000 1.0000000000)) ) OXYGEN:"STAR11" = ( (D ( 1.292000000 1.0000000000)) ) FLUORINE:"STAR11" = ( (D ( 1.750000000 1.0000000000)) ) NEON:"STAR11" = ( (D ( 2.304000000 1.0000000000)) ) SODIUM:"STAR11" = ( (D ( 0.175000000 1.0000000000)) ) MAGNESIUM:"STAR11" = ( (D ( 0.175000000 1.0000000000)) ) ALUMINUM:"STAR11" = ( (D ( 0.32500000 1.0000000000)) ) SILICON:"STAR11" = ( (D ( 0.450000000 1.0000000000)) ) PHOSPHORUS:"STAR11" = ( (D ( 0.550000000 1.0000000000)) ) SULFUR:"STAR11" = ( (D ( 0.650000000 1.0000000000)) ) CHLORINE:"STAR11" = ( (D ( 0.750000000 1.0000000000)) ) ARGON:"STAR11" = ( (D ( 0.85000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * THE POLARIZATION FUNCTIONS FOR THE 631 GAUSSIAN 82 BASIS SET % * % * REFERENCES TO BE SUPPLIED LATER % * % *************************************************************** HYDROGEN:"STAR1" = ( (P ( 1.100000000 1.0000000000)) ) HELIUM:"STAR1" = ( (P ( 1.100000000 1.0000000000)) ) LITHIUM:"STAR1" = ( (D ( 0.200000000 1.0000000000)) ) BERYLLIUM:"STAR1" = ( (D ( 0.400000000 1.0000000000)) ) BORON:"STAR1" = ( (D ( 0.600000000 1.0000000000)) ) CARBON:"STAR1" = ( (D ( 0.800000000 1.0000000000)) ) NITROGEN:"STAR1" = ( (D ( 0.800000000 1.0000000000)) ) OXYGEN:"STAR1" = ( (D ( 0.800000000 1.0000000000)) ) FLUORINE:"STAR1" = ( (D ( 0.800000000 1.0000000000)) ) NEON:"STAR1" = ( (D ( 0.800000000 1.0000000000)) ) SODIUM:"STAR1" = ( (D ( 0.175000000 1.0000000000)) ) MAGNESIUM:"STAR1" = ( (D ( 0.175000000 1.0000000000)) ) ALUMINUM:"STAR1" = ( (D ( 0.325000000 1.0000000000)) ) SILICON:"STAR1" = ( (D ( 0.450000000 1.0000000000)) ) PHOSPHORUS:"STAR1" = ( (D ( 0.550000000 1.0000000000)) ) SULFUR:"STAR1" = ( (D ( 0.650000000 1.0000000000)) ) CHLORINE:"STAR1" = ( (D ( 0.750000000 1.0000000000)) ) ARGON:"STAR1" = ( (D ( 0.850000000 1.0000000000)) ) POTASSIUM:"STAR1" = ( (D ( 0.044850 1.0000000000)) ) CALCIUM:"STAR1" = ( (D ( 0.050200 1.0000000000)) ) COPPER:"STAR1" = ( (F ( 0.800000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis sets starting w/ GCV removed - % M. Sinnokrot & B. Temelso % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *************************************************************** % * TRIPLE-ZETA (9S5P/5S3P) BASIS SETS FOR H,B-F % * (4S/3S) FOR H % * (11S7P/7S5P) FOR AL-CL % * % * % ****************************************************************** % % TZP-OLD basis sets removed by M. Sinnokrot & B. Temelso % July 1, 2002 % % begin changes by c.b. kellogg % *************************************************************** % **** Standard Triple-zeta basis with standard pair of % **** polarization functions added (standard tz2p basis) % **** % *************************************************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN: "TZ2P" = ( (GET "(5S/3S)") (GET "2P_POLARIZATION") ) BORON: "TZ2P" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") ) CARBON: "TZ2P" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") ) NITROGEN: "TZ2P" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") ) OXYGEN: "TZ2P" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") ) FLUORINE: "TZ2P" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") ) ALUMINUM: "TZ2P" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") ) SILICON: "TZ2P" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") ) PHOSPHORUS: "TZ2P" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") ) SULFUR: "TZ2P" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") ) CHLORINE: "TZ2P" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") ) % end changes by c.b. kellogg % *************************************************************** % **** BEGIN ADDITIONS BY C JANSSEN (From Neil Burton) ********* % **** The new tz hydrogen basis set *************************** % *************************************************************** HYDROGEN:"(5S/3S)" = ( (S ( 33.64 0.025374) ( 5.058 0.189684) ( 1.147 0.852933)) (S ( 0.3211 1.0)) (S ( 0.1013 1.0)) ) % *************************************************************** % **** BEGIN ADDITIONS BY JOSEPH FOWLER 8/29/89 **************** % **** FROM JCP VOL.55, NUM 2, PP.716-723, 1971; DUNNING ****** % *************************************************************** BORON:"(10S6P/5S3P)" = ( (S ( 6250. 0.000798) ( 916.1 0.006410) ( 202.2 0.034299) ( 55.83 0.135487) ( 17.86 0.388532) ( 6.253 0.547758)) (S ( 6.253 0.232643) ( 2.312 0.797219)) (S ( 0.6824 1.000000)) (S ( 0.2604 1.000000)) (S ( 0.08940 1.000000)) (P ( 15.46 0.016822) ( 3.483 0.100878) ( 1.066 0.336895) ( 0.3928 0.672317)) (P ( 0.1503 1.000000)) (P ( 0.05722 1.000000)) ) CARBON:"(10S6P/5S3P)" = ( (S ( 9471. 0.000776) ( 1398. 0.006218) ( 307.5 0.033575) ( 84.54 0.134278) ( 26.91 0.393668) ( 9.409 0.544169)) (S ( 9.409 0.248075) ( 3.500 0.782844)) (S ( 1.068 1.000000)) (S ( 0.4002 1.000000)) (S ( 0.1351 1.000000)) (P ( 25.37 0.016295) ( 5.776 0.102098) ( 1.787 0.340228) ( 0.6577 0.668269)) (P ( 0.2480 1.000000)) (P ( 0.09106 1.000000)) ) NITROGEN:"(10S6P/5S3P)" = ( (S ( 13520. 0.000760) ( 1999. 0.006076) ( 440.0 0.032847) ( 120.9 0.132396) ( 38.47 0.393261) ( 13.46 0.546339)) (S ( 13.46 0.252036) ( 4.993 0.779385)) (S ( 1.569 1.000000)) (S ( 0.5800 1.000000)) (S ( 0.1923 1.000000)) (P ( 35.91 0.016916) ( 8.480 0.102200) ( 2.706 0.338134) ( 0.9921 0.669281)) (P ( 0.3727 1.000000)) (P ( 0.1346 1.000000)) ) OXYGEN:"(10S6P/5S3P)" = ( (S ( 18050. 0.000757) ( 2660. 0.006066) ( 585.7 0.032782) ( 160.9 0.132609) ( 51.16 0.396839) ( 17.90 0.542572)) (S ( 17.90 0.262490) ( 6.639 0.769828)) (S ( 2.077 1.000000)) (S ( 0.7736 1.000000)) (S ( 0.2558 1.000000)) (P ( 49.83 0.016358) ( 11.49 0.106453) ( 3.609 0.349302) ( 1.321 0.657183)) (P ( 0.4821 1.000000)) (P ( 0.1651 1.000000)) ) FLUORINE:"(10S6P/5S3P)" = ( (S ( 23340. 0.000757) ( 3431. 0.006081) ( 757.7 0.032636) ( 209.2 0.131704) ( 66.73 0.396240) ( 23.37 0.543672)) (S ( 23.37 0.264893) ( 8.624 0.767925)) (S ( 2.692 1.000000)) (S ( 1.009 1.000000)) (S ( 0.3312 1.000000)) (P ( 65.66 0.016037) ( 15.22 0.105697) ( 4.788 0.350227) ( 1.732 0.658195)) (P ( 0.6206 1.000000)) (P ( 0.2070 1.000000)) ) NEON:"(10S6P/5S3P)" = ( (S ( 28660. 0.000767) ( 4263. 0.006068) ( 946.8 0.032474) ( 261.5 0.131468) ( 83.34 0.397723) ( 29.17 0.542491)) (S ( 29.17 0.269065) ( 10.76 0.764121)) (S ( 3.343 1.000000)) (S ( 1.241 1.000000)) (S ( 0.4063 1.000000)) (P ( 84.84 0.015550) ( 19.71 0.103011) ( 6.219 0.349215) ( 2.211 0.662839)) (P ( 0.7853 1.000000)) (P ( 0.2566 1.000000)) ) % ************************************************************** % ***** MORE STUFF ADDED BY ME (JOSEPH EVAN FOWLER) 8/29/89 **** % ***** REF: A.D. MCLEAN, G.S. CHANDLER, J. CHEM. PHYS., **** % ***** 72 (10), 15 MAY 1980, PP. 5639-5648 **** % ************************************************************** SODIUM:"(12S9P/6S5P)" = ( (S ( 36166.4 0.001032) ( 5372.58 0.008071) ( 1213.21 0.042129) ( 339.62 0.169789) ( 109.55 0.514621) ( 38.777 0.379817)) (S ( 38.777 0.374762) ( 14.576 0.575769) ( 5.2699 0.112933)) (S ( 1.8278 1.000000)) (S ( 0.6199 1.000000)) (S ( 0.0572 1.000000)) (S ( 0.0240 1.000000)) (P ( 144.645 0.011485) ( 33.907 0.082383) ( 10.629 0.319658) ( 3.8239 0.701295)) (P ( 1.4443 0.638506) ( 0.5526 0.425365)) (P ( 0.1887 1.000000)) (P ( 0.0465 1.000000)) (P ( 0.0163 1.000000)) ) MAGNESIUM:"(12S9P/6S5P)" = ( (S ( 43866.5 0.000918) ( 6605.37 0.007047) ( 1513.26 0.035941) ( 432.317 0.141461) ( 142.149 0.426764) ( 51.398 0.497975)) (S ( 51.398 0.251355) ( 19.920 0.618671) ( 8.0247 0.188417)) (S ( 2.5082 1.000000)) (S ( 0.8715 1.000000)) (S ( 0.1082 1.000000)) (S ( 0.0401 1.000000)) (P ( 193.854 0.010188) ( 45.442 0.075360) ( 14.186 0.307419) ( 5.0575 0.717575)) (P ( 1.8886 0.667339) ( 0.7227 0.394649)) (P ( 0.2364 1.000000)) (P ( 0.0934 1.000000)) (P ( 0.0348 1.000000)) ) ALUMINUM:"(12S9P/6S5P)" = ( (S ( 54866.49 0.000839) ( 8211.77 0.006527) ( 1866.18 0.033666) ( 531.129 0.132902) ( 175.118 0.401266) ( 64.0055 0.531338)) (S ( 64.0055 0.202305) ( 25.2925 0.624790) ( 10.5349 0.227439)) (S ( 3.2067 1.000000)) (S ( 1.1526 1.000000)) (S ( 0.1767 1.000000)) (S ( 0.0652 1.000000)) (P ( 259.284 0.009448) ( 61.0769 0.070974) ( 19.3032 0.295636) ( 7.0109 0.728219)) (P ( 2.6739 0.644467) ( 1.0366 0.417413)) (P ( 0.3168 1.000000)) (P ( 0.1143 1.000000)) (P ( 0.0414 1.000000)) ) SILICON:"(12S9P/6S5P)" = ( (S ( 69379.23 0.000757) ( 10354.94 0.005932) ( 2333.88 0.031088) ( 657.14 0.124967) ( 214.30 0.386897) ( 77.629 0.554888)) (S ( 77.629 0.177881) ( 30.631 0.627765) ( 12.801 0.247623)) (S ( 3.9269 1.000000)) (S ( 1.4523 1.000000)) (S ( 0.2562 1.000000)) (S ( 0.0943 1.000000)) (P ( 335.48 0.008866) ( 78.900 0.068299) ( 24.988 0.290958) ( 9.2197 0.732116)) (P ( 3.6211 0.619879) ( 1.4513 0.439148)) (P ( 0.5050 1.000000)) (P ( 0.1863 1.000000)) (P ( 0.0654 1.000000)) ) PHOSPHORUS:"(12S9P/6S5P)" = ( (S ( 77492.43 0.000787) ( 11605.79 0.006107) ( 2645.96 0.031373) ( 754.98 0.124239) ( 248.75 0.380893) ( 91.157 0.559812)) (S ( 91.157 0.163986) ( 36.226 0.625950) ( 15.211 0.262196)) (S ( 4.7138 1.000000)) (S ( 1.7827 1.000000)) (S ( 0.3425 1.000000)) (S ( 0.1246 1.000000)) (P ( 384.84 0.003240) ( 90.552 0.024925) ( 28.806 0.105697) ( 10.688 0.263229) ( 4.2521 0.719053)) (P ( 4.2521 -1.612739) ( 1.7405 1.205083)) (P ( 0.5979 1.000000)) (P ( 0.2292 1.000000)) (P ( 0.0838 1.000000)) ) SULFUR:"(12S9P/6S5P)" = ( (S ( 93413.4 0.000742) ( 13961.7 0.005790) ( 3169.9 0.029945) ( 902.46 0.118971) ( 297.16 0.368273) ( 108.702 0.577507)) (S ( 108.702 0.142943) ( 43.155 0.624606) ( 18.108 0.283438)) (S ( 5.5705 1.000000)) (S ( 2.1427 1.000000)) (S ( 0.4340 1.000000)) (S ( 0.1570 1.000000)) (P ( 495.04 0.002720) ( 117.22 0.021090) ( 37.507 0.092369) ( 13.910 0.246781) ( 5.5045 0.743840)) (P ( 5.5045 -1.608719) ( 2.2433 1.223255)) (P ( 0.7762 1.000000)) (P ( 0.2919 1.000000)) (P ( 0.1029 1.000000)) ) CHLORINE:"(12S9P/6S5P)" = ( (S ( 105818.8 0.000743) ( 15872.0 0.005753) ( 3619.7 0.029676) ( 1030.8 0.118010) ( 339.91 0.365230) ( 124.538 0.581221)) (S ( 124.538 0.137548) ( 49.514 0.622881) ( 20.806 0.290143)) (S ( 6.4648 1.000000)) (S ( 2.5254 1.000000)) (S ( 0.5378 1.000000)) (S ( 0.1935 1.000000)) (P ( 589.78 0.002760) ( 139.85 0.021536) ( 44.795 0.095916) ( 16.612 0.262315) ( 6.5995 0.726811)) (P ( 6.5995 -1.564924) ( 2.7141 1.495778)) (P ( 0.9528 1.000000)) (P ( 0.3580 1.000000)) (P ( 0.1250 1.000000)) ) ARGON:"(12S9P/6S5P)" = ( (S ( 118022.4 0.000747) ( 17683.5 0.005790) ( 4027.8 0.029919) ( 1145.40 0.119206) ( 377.16 0.369028) ( 138.160 0.576459)) (S ( 138.160 0.143927) ( 54.989 0.622938) ( 23.171 0.283964)) (S ( 7.3779 1.000000)) (S ( 2.9237 1.000000)) (S ( 0.6504 1.000000)) (S ( 0.2328 1.000000)) (P ( 663.06 0.003082) ( 157.09 0.024165) ( 50.231 0.108223) ( 18.635 0.294192) ( 7.4465 0.687862)) (P ( 7.4465 -1.214482) ( 3.0957 1.632370)) (P ( 1.1065 1.000000)) (P ( 0.4156 1.000000)) (P ( 0.1454 1.000000)) ) % ******************************************* % ******* The standard polarization functions % ******* Added by C Janssen April 5, 1991 % ******* as suggested by Brian Yates % ******************************************* HYDROGEN:"1P_POLARIZATION" = ( (P ( 0.75 1.0)) ) BORON:"1D_POLARIZATION" = ( (D ( 0.70 1.0)) ) CARBON:"1D_POLARIZATION" = ( (D ( 0.75 1.0)) ) NITROGEN:"1D_POLARIZATION" = ( (D ( 0.80 1.0)) ) OXYGEN:"1D_POLARIZATION" = ( (D ( 0.85 1.0)) ) FLUORINE:"1D_POLARIZATION" = ( (D ( 0.9 1.0)) ) NEON:"1D_POLARIZATION" = ( (D ( 0.95 1.0)) ) ALUMINUM:"1D_POLARIZATION" = ( (D ( 0.4 1.0)) ) SILICON:"1D_POLARIZATION" = ( (D ( 0.5 1.0)) ) PHOSPHORUS:"1D_POLARIZATION" = ( (D ( 0.6 1.0)) ) SULFUR:"1D_POLARIZATION" = ( (D ( 0.7 1.0)) ) CHLORINE:"1D_POLARIZATION" = ( (D ( 0.75 1.0)) ) % **************************************************** % ******* The standard pairs of polarization functions % ******* Added by C Janssen April 5, 1991 % ******* as suggested by Brian Yates % **************************************************** HYDROGEN:"2P_POLARIZATION" = ( (P ( 1.50 1.0)) (P ( 0.375 1.0)) ) BORON:"2D_POLARIZATION" = ( (D ( 1.40 1.0)) (D ( 0.35 1.0)) ) CARBON:"2D_POLARIZATION" = ( (D ( 1.50 1.0)) (D ( 0.375 1.0)) ) NITROGEN:"2D_POLARIZATION" = ( (D ( 1.60 1.0)) (D ( 0.40 1.0)) ) OXYGEN:"2D_POLARIZATION" = ( (D ( 1.70 1.0)) (D ( 0.425 1.0)) ) FLUORINE:"2D_POLARIZATION" = ( (D ( 2.0 1.0)) (D ( 0.5 1.0)) ) ALUMINUM:"2D_POLARIZATION" = ( (D ( 0.8 1.0)) (D ( 0.2 1.0)) ) SILICON:"2D_POLARIZATION" = ( (D ( 1.0 1.0)) (D ( 0.25 1.0)) ) PHOSPHORUS:"2D_POLARIZATION" = ( (D ( 1.2 1.0)) (D ( 0.3 1.0)) ) SULFUR:"2D_POLARIZATION" = ( (D ( 1.4 1.0)) (D ( 0.35 1.0)) ) CHLORINE:"2D_POLARIZATION" = ( (D ( 1.50 1.0)) (D ( 0.375 1.0)) ) % ************************************************** % ******* The standard second polarization functions % ******* Added by C Janssen April 5, 1991 % ******* as suggested by Brian Yates % ************************************************** HYDROGEN:"1D_POLARIZATION" = ( (D ( 1.00 1.0)) ) BORON:"1F_POLARIZATION" = ( (F ( 0.50 1.0)) ) CARBON:"1F_POLARIZATION" = ( (F ( 0.80 1.0)) ) NITROGEN:"1F_POLARIZATION" = ( (F ( 1.00 1.0)) ) OXYGEN:"1F_POLARIZATION" = ( (F ( 1.40 1.0)) ) FLUORINE:"1F_POLARIZATION" = ( (F ( 1.85 1.0)) ) ALUMINUM:"1F_POLARIZATION" = ( (F ( 0.25 1.0)) ) SILICON:"1F_POLARIZATION" = ( (F ( 0.32 1.0)) ) PHOSPHORUS:"1F_POLARIZATION" = ( (F ( 0.45 1.0)) ) SULFUR:"1F_POLARIZATION" = ( (F ( 0.55 1.0)) ) CHLORINE:"1F_POLARIZATION" = ( (F ( 0.70 1.0)) ) % ****************end**end****************end**end************** % ****end**end****************end**end****************end**end** % All ANO basis sets removed - M. Sinnokot & B. Temelso % * reading WMR basis file. % start of diffuse functions by C.B. Kellogg % ****************************************************************** % **** Standard Double-zeta basis with % **** one diffuse s added for H, B-F, Al-Cl % **** and one diffuse p added for B-F, Al-Cl % ****************************************************************** HYDROGEN:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.04415 1.0)) ) BORON:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.02879 1.0)) (GET "HUZINAGA-DUNNING_(5P/2P)") (P ( 0.02246 1.0)) ) CARBON:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.04302 1.0)) (GET "HUZINAGA-DUNNING_(5P/2P)") (P ( 0.03629 1.0)) ) NITROGEN:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.06029 1.0)) (GET "HUZINAGA-DUNNING_(5P/2P)") (P ( 0.05148 1.0)) ) OXYGEN:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.08227 1.0)) (GET "HUZINAGA-DUNNING_(5P/2P)") (P ( 0.06508 1.0)) ) FLUORINE:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(9S/4S)") (S ( 0.1049 1.0)) (GET "HUZINAGA-DUNNING_(5P/2P)") (P ( 0.08260 1.0)) ) ALUMINUM:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (S ( 0.02148 1.0)) (GET "HUZINAGA-DUNNING_(7P/4P)") (P ( 0.01891 1.0)) ) SILICON:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (S ( 0.02729 1.0)) (GET "HUZINAGA-DUNNING_(7P/4P)") (P ( 0.02500 1.0)) ) PHOSPHORUS:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (S ( 0.03448 1.0)) (GET "HUZINAGA-DUNNING_(7P/4P)") (P ( 0.03346 1.0)) ) SULFUR:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (S ( 0.04267 1.0)) (GET "HUZINAGA-DUNNING_(7P/4P)") (P ( 0.04096 1.0)) ) CHLORINE:"DZ-DIF" = ( (GET "HUZINAGA-DUNNING_(11S/6S)") (S ( 0.05048 1.0)) (GET "HUZINAGA-DUNNING_(7P/4P)") (P ( 0.05087 1.0)) ) % ****************************************************************** % **** Standard Double-zeta basis with % **** one polarization function added (standard dzp basis) % **** and one diffuse s added for H, B-F, Al-Cl % **** and one diffuse p added for B-F, Al-Cl % ****************************************************************** HYDROGEN:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1P_POLARIZATION") ) BORON:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) CARBON:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) NITROGEN:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) OXYGEN:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) FLUORINE:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) ALUMINUM:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) SILICON:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) PHOSPHORUS:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) SULFUR:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) CHLORINE:"DZP-DIF" = ( (GET "DZ-DIF") (GET "1D_POLARIZATION") ) % ****************************************************************** % **** Standard Triple-zeta basis with % **** one diffuse s added for H, B-F, Al-Cl % **** and one diffuse p added for B-F, Al-Cl % ****************************************************************** HYDROGEN:"TZ-DIF" = ( (GET "(5S/3S)") (S ( 0.03016 1.0)) ) BORON:"TZ-DIF" = ( (S ( 6250. 0.000798) ( 916.1 0.006410) ( 202.2 0.034299) ( 55.83 0.135487) ( 17.86 0.388532) ( 6.253 0.547758)) (S ( 6.253 0.232643) ( 2.312 0.797219)) (S ( 0.6824 1.000000)) (S ( 0.2604 1.000000)) (S ( 0.08940 1.000000)) (S ( 0.03240 1.0)) (P ( 15.46 0.016822) ( 3.483 0.100878) ( 1.066 0.336895) ( 0.3928 0.672317)) (P ( 0.1503 1.000000)) (P ( 0.05722 1.000000)) (P ( 0.02184 1.0)) ) CARBON:"TZ-DIF" = ( (S ( 9471. 0.000776) ( 1398. 0.006218) ( 307.5 0.033575) ( 84.54 0.134278) ( 26.91 0.393668) ( 9.409 0.544169)) (S ( 9.409 0.248075) ( 3.500 0.782844)) (S ( 1.068 1.000000)) (S ( 0.4002 1.000000)) (S ( 0.1351 1.000000)) (S ( 0.04812 1.0)) (P ( 25.37 0.016295) ( 5.776 0.102098) ( 1.787 0.340228) ( 0.6577 0.668269)) (P ( 0.2480 1.000000)) (P ( 0.09106 1.000000)) (P ( 0.03389 1.0)) ) NITROGEN:"TZ-DIF" = ( (S ( 13520. 0.000760) ( 1999. 0.006076) ( 440.0 0.032847) ( 120.9 0.132396) ( 38.47 0.393261) ( 13.46 0.546339)) (S ( 13.46 0.252036) ( 4.993 0.779385)) (S ( 1.569 1.000000)) (S ( 0.5800 1.000000)) (S ( 0.1923 1.000000)) (S ( 0.06742 1.0)) (P ( 35.91 0.016916) ( 8.480 0.102200) ( 2.706 0.338134) ( 0.9921 0.669281)) (P ( 0.3727 1.000000)) (P ( 0.1346 1.000000)) (P ( 0.04959 1.0)) ) OXYGEN:"TZ-DIF" = ( (S ( 18050. 0.000757) ( 2660. 0.006066) ( 585.7 0.032782) ( 160.9 0.132609) ( 51.16 0.396839) ( 17.90 0.542572)) (S ( 17.90 0.262490) ( 6.639 0.769828)) (S ( 2.077 1.000000)) (S ( 0.7736 1.000000)) (S ( 0.2558 1.000000)) (S ( 0.08993 1.0)) (P ( 49.83 0.016358) ( 11.49 0.106453) ( 3.609 0.349302) ( 1.321 0.657183)) (P ( 0.4821 1.000000)) (P ( 0.1651 1.000000)) (P ( 0.05840 1.0)) ) FLUORINE:"TZ-DIF" = ( (S ( 23340. 0.000757) ( 3431. 0.006081) ( 757.7 0.032636) ( 209.2 0.131704) ( 66.73 0.396240) ( 23.37 0.543672)) (S ( 23.37 0.264893) ( 8.624 0.767925)) (S ( 2.692 1.000000)) (S ( 1.009 1.000000)) (S ( 0.3312 1.000000)) (S ( 0.1164 1.0)) (P ( 65.66 0.016037) ( 15.22 0.105697) ( 4.788 0.350227) ( 1.732 0.658195)) (P ( 0.6206 1.000000)) (P ( 0.2070 1.000000)) (P ( 0.07161 1.0)) ) ALUMINUM:"TZ-DIF" = ( (S ( 54866.49 0.000839) ( 8211.77 0.006527) ( 1866.18 0.033666) ( 531.129 0.132902) ( 175.118 0.401266) ( 64.0055 0.531338)) (S ( 64.0055 0.202305) ( 25.2925 0.624790) ( 10.5349 0.227439)) (S ( 3.2067 1.000000)) (S ( 1.1526 1.000000)) (S ( 0.1767 1.000000)) (S ( 0.0652 1.000000)) (S ( 0.01703 1.0)) (P ( 259.284 0.009448) ( 61.0769 0.070974) ( 19.3032 0.295636) ( 7.0109 0.728219)) (P ( 2.6739 0.644467) ( 1.0366 0.417413)) (P ( 0.3168 1.000000)) (P ( 0.1143 1.000000)) (P ( 0.0414 1.000000)) (P ( 0.01497 1.0)) ) SILICON:"TZ-DIF" = ( (S ( 69379.23 0.000757) ( 10354.94 0.005932) ( 2333.88 0.031088) ( 657.14 0.124967) ( 214.30 0.386897) ( 77.629 0.554888)) (S ( 77.629 0.177881) ( 30.631 0.627765) ( 12.801 0.247623)) (S ( 3.9269 1.000000)) (S ( 1.4523 1.000000)) (S ( 0.2562 1.000000)) (S ( 0.0943 1.000000)) (S ( 0.02567 1.0)) (P ( 335.48 0.008866) ( 78.900 0.068299) ( 24.988 0.290958) ( 9.2197 0.732116)) (P ( 3.6211 0.619879) ( 1.4513 0.439148)) (P ( 0.5050 1.000000)) (P ( 0.1863 1.000000)) (P ( 0.0654 1.000000)) (P ( 0.02354 1.0)) ) PHOSPHORUS:"TZ-DIF" = ( (S ( 77492.43 0.000787) ( 11605.79 0.006107) ( 2645.96 0.031373) ( 754.98 0.124239) ( 248.75 0.380893) ( 91.157 0.559812)) (S ( 91.157 0.163986) ( 36.226 0.625950) ( 15.211 0.262196)) (S ( 4.7138 1.000000)) (S ( 1.7827 1.000000)) (S ( 0.3425 1.000000)) (S ( 0.1246 1.000000)) (S ( 0.03463 1.0)) (P ( 384.84 0.003240) ( 90.552 0.024925) ( 28.806 0.105697) ( 10.688 0.263229) ( 4.2521 0.719053)) (P ( 4.2521 -1.612739) ( 1.7405 1.205083)) (P ( 0.5979 1.000000)) (P ( 0.2292 1.000000)) (P ( 0.0838 1.000000)) (P ( 0.03138 1.0)) ) SULFUR:"TZ-DIF" = ( (S ( 93413.4 0.000742) ( 13961.7 0.005790) ( 3169.9 0.029945) ( 902.46 0.118971) ( 297.16 0.368273) ( 108.702 0.577507)) (S ( 108.702 0.142943) ( 43.155 0.624606) ( 18.108 0.283438)) (S ( 5.5705 1.000000)) (S ( 2.1427 1.000000)) (S ( 0.4340 1.000000)) (S ( 0.1570 1.000000)) (S ( 0.04430 1.0)) (P ( 495.04 0.002720) ( 117.22 0.021090) ( 37.507 0.092369) ( 13.910 0.246781) ( 5.5045 0.743840)) (P ( 5.5045 -1.608719) ( 2.2433 1.223255)) (P ( 0.7762 1.000000)) (P ( 0.2919 1.000000)) (P ( 0.1029 1.000000)) (P ( 0.03749 1.0)) ) CHLORINE:"TZ-DIF" = ( (S ( 105818.8 0.000743) ( 15872.0 0.005753) ( 3619.7 0.029676) ( 1030.8 0.118010) ( 339.91 0.365230) ( 124.538 0.581221)) (S ( 124.538 0.137548) ( 49.514 0.622881) ( 20.806 0.290143)) (S ( 6.4648 1.000000)) (S ( 2.5254 1.000000)) (S ( 0.5378 1.000000)) (S ( 0.1935 1.000000)) (S ( 0.05541 1.0)) (P ( 589.78 0.002760) ( 139.85 0.021536) ( 44.795 0.095916) ( 16.612 0.262315) ( 6.5995 0.726811)) (P ( 6.5995 -1.564924) ( 2.7141 1.495778)) (P ( 0.9528 1.000000)) (P ( 0.3580 1.000000)) (P ( 0.1250 1.000000)) (P ( 0.04531 1.0)) ) % ****************************************************************** % **** Standard Triple-zeta basis with two % **** polarization functions added (tz2p) % **** with one diffuse s added for H, B-F, Al-Cl % **** and one diffuse p added for B-F, Al-Cl % ****************************************************************** HYDROGEN:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2P_POLARIZATION") ) BORON:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) CARBON:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) NITROGEN:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) OXYGEN:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) FLUORINE:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) ALUMINUM:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) SILICON:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) PHOSPHORUS:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) SULFUR:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) CHLORINE:"TZ2P-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") ) % *************************************************************** % **** Standard Triple-zeta basis with standard pair of % **** polarization functions (tz2p) and one higher angular % **** momentum function added (d for H, f for B-F, AL-CL) % **** and with one diffuse s added for H, B-F, Al-Cl % **** and one diffuse p added for B-F, Al-Cl % *************************************************************** HYDROGEN:"TZ2PD-DIF" = ( (GET "TZ2PF-DIF") ) HYDROGEN:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2P_POLARIZATION") (GET "1D_POLARIZATION") ) BORON:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) CARBON:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) NITROGEN:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) OXYGEN:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) FLUORINE:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) ALUMINUM:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) SILICON:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) PHOSPHORUS:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) SULFUR:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) CHLORINE:"TZ2PF-DIF" = ( (GET "TZ-DIF") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) % *************************************************************** % **** Standard Triple-zeta basis with standard pair of % **** polarization functions (tz2p) and one higher angular % **** momentum function added (d for H, f for B-F, AL-CL) % **** % *************************************************************** HYDROGEN: "TZ2PF" = ( (GET "TZ2PD") ) HYDROGEN: "TZ2PD" = ( (GET "(5S/3S)") (GET "2P_POLARIZATION") (GET "1D_POLARIZATION") ) BORON: "TZ2PF" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) CARBON: "TZ2PF" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) NITROGEN: "TZ2PF" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) OXYGEN: "TZ2PF" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) FLUORINE: "TZ2PF" = ( (GET "(10S6P/5S3P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) ALUMINUM: "TZ2PF" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) SILICON: "TZ2PF" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) PHOSPHORUS: "TZ2PF" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) SULFUR: "TZ2PF" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) CHLORINE: "TZ2PF" = ( (GET "(12S9P/6S5P)") (GET "2D_POLARIZATION") (GET "1F_POLARIZATION") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------------------------------- % THE CORRELATION CONSISTENT BASIS SETS % ------------------------------------- % % The correlation consistent basis sets for H, He, B-Ne, and Al-Ar broken % down by basis set quality (size). Each file contains extra information % useful for benchmarking (note: spherical harmonic rather than cartesian % forms were used). % % In publications please use the designations which we have assigned to % each level of basis set; this will minimize confusion. We also identify % the cc-pVDZ, cc-pVTZ, cc-pVQZ, and cc-pV5Z series as the "standard sets" % and refer to the group as cc-pVXZ sets. The series aug-cc-pVDZ, % aug-cc-pVTZ, aug-cc-pVQZ, and aug-cc-pV5Z are the "augmented sets" or % aug-cc-pVXZ sets. %** % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % functions to use. For hydrogen the polarization exponents were determined by % optimizing them at the SD-CI level for molecular hydrogen in its ground % state. The (s,p) exponents for B - Ne were optimized in atomic Hartree- % Fock calculations on the ground state. The polarization exponents were % optimized at the SD-CI level. % % % The citations are: % % (1) T.H. Dunning, Jr., J. Chem. Phys. 90, 1007 (1989). % [cc-pVXZ (X=D,T,Q) basis sets for hydrogen and the first row atoms % B-Ne] % % (2) R.A. Kendall, T.H. Dunning, Jr., and R.J. Harrison, J. Chem. Phys. % 96, 6796 (1992). % [aug-cc-pVXZ (X=D,T,Q) basis sets for H and B-Ne] % % (3) D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 98, 1358 (1993). % [cc-pVXZ and aug-cc-pVXZ (X=D,T,Q) sets for the second row atoms % Al-Ar] % % (4) D.E. Woon, K.A. Peterson, and T.H. Dunning, Jr. (unpublished). % [cc-pVXZ (X=D,T,Q) basis sets for helium; cc-pV5Z and aug-cc-pV5Z % basis sets for H, B-Ne, and Al-Ar] % %% Please report any problems to David Feller (d3e102@pnlg.pnl.gov). %**************************************************************************** % % All correlation consistent basis sets use SPHERICAL harmonic functions % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPVDZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: cc-pVDZ % % Correlation Consistent Polarized Valence Double Zeta (cc-pVDZ) Basis % -------------------------------------------------------------------- % Elements Contraction References % H : (4s,1p) -> [2s,1p] T.H. Dunning, Jr. J. Chem. Phys. 90, 1007 % (1989). % He : (5s,1p) -> [2s,1p] D.E. Woon and T.H. Dunning, Jr. J. Chem. % Phys. 100, 2975 (1994). % Li - Ne: (9s,4p,1d) -> [3s,2p,1d] T.H. Dunning, Jr. J.C.P. 90, 1007 (1989). % Na - Mg: (12s,8p,1d) -> [4s,3p,1d] D. Woon and T.H. Dunning, Jr. % (to be published) % Al - Ar: (12s,8p,1d) -> [4s,3p,1d] D.E. Woon and T.H. Dunning, Jr. % J. Chem. Phys. 98, 1358 (1993). % Ca : (13s,10p,5d) -> [5s,4p,2d] J. Koput and K. A. Peterson, % J. Phys. Chem. A 106, 9595 (2002) % %** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PVDZ":puream = true HYDROGEN:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) HELIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) LITHIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) BERYLLIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) BORON:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) CARBON:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) NITROGEN:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) OXYGEN:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) FLUORINE:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) NEON:"CC-PVDZ" = ( (GET "H_CCPVDZ") ) SODIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.0973000000 1.0000000000)) ) MAGNESIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.1870000000 1.0000000000)) ) ALUMINUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.1890000000 1.0000000000)) ) SILICON:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) ) PHOSPHORUS:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.3730000000 1.0000000000)) ) SULFUR:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.4790000000 1.0000000000)) ) CHLORINE:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.6000000000 1.0000000000)) ) ARGON:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.7380000000 1.0000000000)) ) CALCIUM:"CC-PVDZ" = ( (GET "H_CCPVDZ") (D (10.3182000 0.03284900) ( 2.5924200 0.14819200) ( 0.7617000 0.31092100) ( 0.2083800 0.45219500)) (D ( 0.0537000 1.00000000)) ) %%%%%%%%%%%% ALIAS cc-pVDZ => CC-PVDZ %%%%%%%%%%%%%%%%%%%%%%%%%%%% "cc-pVDZ":puream = true HYDROGEN:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) HELIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) LITHIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) BERYLLIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) BORON:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) CARBON:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) NITROGEN:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) OXYGEN:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) FLUORINE:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) NEON:"cc-pVDZ" = ( (GET "H_CCPVDZ") ) SODIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.0973000000 1.0000000000)) ) MAGNESIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.1870000000 1.0000000000)) ) ALUMINUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.1890000000 1.0000000000)) ) SILICON:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) ) PHOSPHORUS:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.3730000000 1.0000000000)) ) SULFUR:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.4790000000 1.0000000000)) ) CHLORINE:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.6000000000 1.0000000000)) ) ARGON:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D ( 0.7380000000 1.0000000000)) ) CALCIUM:"cc-pVDZ" = ( (GET "H_CCPVDZ") (D (10.3182000 0.03284900) ( 2.5924200 0.14819200) ( 0.7617000 0.31092100) ( 0.2083800 0.45219500)) (D ( 0.0537000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PV((D+d))Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: cc-pV((D+d))Z % cc-pV((D+d))Z Basis % ----------------- % cc-pv((D+d))Z basis sets from Dunning. Include an additional shell of % tight d-functions. % % T. H. Dunning, K. A. Peterson, and A. K. Wilson, JCP 114, (2001). % % Elements Contraction References % Al - Ar: (12s,8p,2d) -> [4s,3p,2d] T.H. Dunning, Jr., K.A. Peterson and % A.K. Wilson, J. Chem. Phys. 114, % 9244 (2001) % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV(D+d)Z for Al, Si, P, S, Cl, Ar % updated by M.S. & B.T on July 1, 2002 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV(D+D)Z":puream = true ALUMINUM:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.1900000000 1.0000000000)) (D ( 1.1950000000 1.0000000000)) ) SILICON:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) (D ( 1.8030000000 1.0000000000)) ) PHOSPHORUS:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.3740000000 1.0000000000)) (D ( 2.5060000000 1.0000000000)) ) SULFUR:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.4810000000 1.0000000000)) (D ( 2.9940000000 1.0000000000)) ) CHLORINE:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.6030000000 1.0000000000)) (D ( 3.6520000000 1.0000000000)) ) ARGON:"CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.7390000000 1.0000000000)) (D ( 4.3900000000 1.0000000000)) ) %%%%%%%%%% ALIAS cc-pV(D+d)Z => CC-PV(D+D)Z %%%%%%%%%%%%%%%%%%% "cc-pV(D+d)Z":puream = true ALUMINUM:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.1900000000 1.0000000000)) (D ( 1.1950000000 1.0000000000)) ) SILICON:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) (D ( 1.8030000000 1.0000000000)) ) PHOSPHORUS:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.3740000000 1.0000000000)) (D ( 2.5060000000 1.0000000000)) ) SULFUR:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.4810000000 1.0000000000)) (D ( 2.9940000000 1.0000000000)) ) CHLORINE:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.6030000000 1.0000000000)) (D ( 3.6520000000 1.0000000000)) ) ARGON:"cc-pV(D+d)Z" = ( (GET "H_CCPVDZ") (D ( 0.7390000000 1.0000000000)) (D ( 4.3900000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPVDZ basis sets % (w/o D contraction for 2nd row elements) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"H_CCPVDZ" = ( (S ( 13.01000000 0.01968500) ( 1.96200000 0.13797700) ( 0.44460000 0.47814800) ( 0.12200000 0.50124000)) (S ( 0.12200000 1.00000000)) (P ( 0.72700000 1.00000000)) ) HELIUM:"H_CCPVDZ" = ( (S ( 38.36000000 0.02380900) ( 5.77000000 0.15489100) ( 1.24000000 0.46998700) ( 0.29760000 0.51302700)) (S ( 0.29760000 1.00000000)) (P ( 1.27500000 1.00000000)) ) LITHIUM:"H_CCPVDZ" = ( (S ( 1469.0000000000 0.0007660000) ( 220.5000000000 0.0058920000) ( 50.2600000000 0.0296710000) ( 14.2400000000 0.1091800000) ( 4.5810000000 0.2827890000) ( 1.5800000000 0.4531230000) ( 0.5640000000 0.2747740000) ( 0.0734500000 0.0097510000)) (S ( 1469.0000000000 -0.0001200000) ( 220.5000000000 -0.0009230000) ( 50.2600000000 -0.0046890000) ( 14.2400000000 -0.0176820000) ( 4.5810000000 -0.0489020000) ( 1.5800000000 -0.0960090000) ( 0.5640000000 -0.1363800000) ( 0.0734500000 0.5751020000)) (S ( 0.0280500000 1.0000000000)) (P ( 1.5340000000 0.0227840000) ( 0.2749000000 0.1391070000) ( 0.0736200000 0.5003750000)) (P ( 0.0240300000 1.0000000000)) (D ( 0.1239000000 1.0000000000)) ) BERYLLIUM:"H_CCPVDZ" = ( (S ( 2940.0000000000 0.0006800000) ( 441.2000000000 0.0052360000) ( 100.5000000000 0.0266060000) ( 28.4300000000 0.0999930000) ( 9.1690000000 0.2697020000) ( 3.1960000000 0.4514690000) ( 1.1590000000 0.2950740000) ( 0.1811000000 0.0125870000)) (S ( 2940.0000000000 -0.0001230000) ( 441.2000000000 -0.0009660000) ( 100.5000000000 -0.0048310000) ( 28.4300000000 -0.0193140000) ( 9.1690000000 -0.0532800000) ( 3.1960000000 -0.1207230000) ( 1.1590000000 -0.1334350000) ( 0.1811000000 0.5307670000)) (S ( 0.0589000000 1.0000000000)) (P ( 3.6190000000 0.0291110000) ( 0.7110000000 0.1693650000) ( 0.1951000000 0.5134580000)) (P ( 0.0601800000 1.0000000000)) (D ( 0.2380000000 1.0000000000)) ) BORON:"H_CCPVDZ" = ( (S ( 4570.00000000 0.00069600) ( 685.90000000 0.00535300) ( 156.50000000 0.02713400) ( 44.47000000 0.10138000) ( 14.48000000 0.27205500) ( 5.13100000 0.44840300) ( 1.89800000 0.29012300) ( 0.33290000 0.01432200) ( 0.10430000 -0.00348600)) (S ( 4570.00000000 -0.00013900) ( 685.90000000 -0.00109700) ( 156.50000000 -0.00544400) ( 44.47000000 -0.02191600) ( 14.48000000 -0.05975100) ( 5.13100000 -0.13873200) ( 1.89800000 -0.13148200) ( 0.33290000 0.53952600) ( 0.10430000 0.58077400)) (S ( 0.10430000 1.00000000)) (P ( 6.00100000 0.03548100) ( 1.24100000 0.19807200) ( 0.33640000 0.50523000) ( 0.09538000 0.47949900)) (P ( 0.09538000 1.00000000)) (D ( 0.34300000 1.00000000)) ) CARBON:"H_CCPVDZ" = ( (S ( 6665.00000000 0.00069200) ( 1000.00000000 0.00532900) ( 228.00000000 0.02707700) ( 64.71000000 0.10171800) ( 21.06000000 0.27474000) ( 7.49500000 0.44856400) ( 2.79700000 0.28507400) ( 0.52150000 0.01520400) ( 0.15960000 -0.00319100)) (S ( 6665.00000000 -0.00014600) ( 1000.00000000 -0.00115400) ( 228.00000000 -0.00572500) ( 64.71000000 -0.02331200) ( 21.06000000 -0.06395500) ( 7.49500000 -0.14998100) ( 2.79700000 -0.12726200) ( 0.52150000 0.54452900) ( 0.15960000 0.58049600)) (S ( 0.15960000 1.00000000)) (P ( 9.43900000 0.03810900) ( 2.00200000 0.20948000) ( 0.54560000 0.50855700) ( 0.15170000 0.46884200)) (P ( 0.15170000 1.00000000)) (D ( 0.55000000 1.00000000)) ) NITROGEN:"H_CCPVDZ" = ( (S ( 9046.00000000 0.00070000) ( 1357.00000000 0.00538900) ( 309.30000000 0.02740600) ( 87.73000000 0.10320700) ( 28.56000000 0.27872300) ( 10.21000000 0.44854000) ( 3.83800000 0.27823800) ( 0.74660000 0.01544000) ( 0.22480000 -0.00286400)) (S ( 9046.00000000 -0.00015300) ( 1357.00000000 -0.00120800) ( 309.30000000 -0.00599200) ( 87.73000000 -0.02454400) ( 28.56000000 -0.06745900) ( 10.21000000 -0.15807800) ( 3.83800000 -0.12183100) ( 0.74660000 0.54900300) ( 0.22480000 0.57881500)) (S ( 0.22480000 1.00000000)) (P ( 13.55000000 0.03991900) ( 2.91700000 0.21716900) ( 0.79730000 0.51031900) ( 0.21850000 0.46221400)) (P ( 0.21850000 1.00000000)) (D ( 0.81700000 1.00000000)) ) OXYGEN:"H_CCPVDZ" = ( (S ( 11720.00000000 0.00071000) ( 1759.00000000 0.00547000) ( 400.80000000 0.02783700) ( 113.70000000 0.10480000) ( 37.03000000 0.28306200) ( 13.27000000 0.44871900) ( 5.02500000 0.27095200) ( 1.01300000 0.01545800) ( 0.30230000 -0.00258500)) (S ( 11720.00000000 -0.00016000) ( 1759.00000000 -0.00126300) ( 400.80000000 -0.00626700) ( 113.70000000 -0.02571600) ( 37.03000000 -0.07092400) ( 13.27000000 -0.16541100) ( 5.02500000 -0.11695500) ( 1.01300000 0.55736800) ( 0.30230000 0.57275900)) (S ( 0.30230000 1.00000000)) (P ( 17.70000000 0.04301800) ( 3.85400000 0.22891300) ( 1.04600000 0.50872800) ( 0.27530000 0.46053100)) (P ( 0.27530000 1.00000000)) (D ( 1.18500000 1.00000000)) ) FLUORINE:"H_CCPVDZ" = ( (S ( 14710.00000000 0.00072100) ( 2207.00000000 0.00555300) ( 502.80000000 0.02826700) ( 142.60000000 0.10644400) ( 46.47000000 0.28681400) ( 16.70000000 0.44864100) ( 6.35600000 0.26476100) ( 1.31600000 0.01533300) ( 0.38970000 -0.00233200)) (S ( 14710.00000000 -0.00016500) ( 2207.00000000 -0.00130800) ( 502.80000000 -0.00649500) ( 142.60000000 -0.02669100) ( 46.47000000 -0.07369000) ( 16.70000000 -0.17077600) ( 6.35600000 -0.11232700) ( 1.31600000 0.56281400) ( 0.38970000 0.56877800)) (S ( 0.38970000 1.00000000)) (P ( 22.67000000 0.04487800) ( 4.97700000 0.23571800) ( 1.34700000 0.50852100) ( 0.34710000 0.45812000)) (P ( 0.34710000 1.00000000)) (D ( 1.64000000 1.00000000)) ) NEON:"H_CCPVDZ" = ( (S ( 17880.00000000 0.00073800) ( 2683.00000000 0.00567700) ( 611.50000000 0.02888300) ( 173.50000000 0.10854000) ( 56.64000000 0.29090700) ( 20.42000000 0.44832400) ( 7.81000000 0.25802600) ( 1.65300000 0.01506300) ( 0.48690000 -0.00210000)) (S ( 17880.00000000 -0.00017200) ( 2683.00000000 -0.00135700) ( 611.50000000 -0.00673700) ( 173.50000000 -0.02766300) ( 56.64000000 -0.07620800) ( 20.42000000 -0.17522700) ( 7.81000000 -0.10703800) ( 1.65300000 0.56705000) ( 0.48690000 0.56521600)) (S ( 0.48690000 1.00000000)) (P ( 28.39000000 0.04608700) ( 6.27000000 0.24018100) ( 1.69500000 0.50874400) ( 0.43170000 0.45566000)) (P ( 0.43170000 1.00000000)) (D ( 2.20200000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Elements Contraction References % Na - Mg: (12s,8p,1d) -> [4s,3p,1d] D. Woon and T.H. Dunning, Jr. % (to be published) % Al - Ar: (12s,8p,1d) -> [4s,3p,1d] D.E. Woon and T.H. Dunning, Jr. % J. Chem. Phys. 98, 1358 (1993). % % CCPVDZ for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T July 1, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SODIUM:"H_CCPVDZ" = ( (S ( 31700.0000000000 0.0004588780) ( 4755.0000000000 0.0035507000) ( 1082.0000000000 0.0182618000) ( 306.4000000000 0.0716650000) ( 99.5300000000 0.2123460000) ( 35.4200000000 0.4162030000) ( 13.3000000000 0.3730200000) ( 4.3920000000 0.0625054000) ( 1.6760000000 -0.0062453200) ( 0.5889000000 0.0024337400) ( 0.0564000000 -0.0004423810)) (S ( 31700.0000000000 -0.0001121620) ( 4755.0000000000 -0.0008685120) ( 1082.0000000000 -0.0045133000) ( 306.4000000000 -0.0181436000) ( 99.5300000000 -0.0580799000) ( 35.4200000000 -0.1376530000) ( 13.3000000000 -0.1939080000) ( 4.3920000000 0.0858009000) ( 1.6760000000 0.6044190000) ( 0.5889000000 0.4417190000) ( 0.0564000000 0.0130547000)) (S ( 31700.0000000000 0.0000170160) ( 4755.0000000000 0.0001306930) ( 1082.0000000000 0.0006877840) ( 306.4000000000 0.0027235900) ( 99.5300000000 0.0089552900) ( 35.4200000000 0.0207832000) ( 13.3000000000 0.0319380000) ( 4.3920000000 -0.0191368000) ( 1.6760000000 -0.1025950000) ( 0.5889000000 -0.1989450000) ( 0.0564000000 0.6559520000)) (S ( 0.0230700000 1.0000000000)) (P ( 138.1000000000 0.0057964100) ( 32.2400000000 0.0415756000) ( 9.9850000000 0.1628730000) ( 3.4840000000 0.3594010000) ( 1.2310000000 0.4499880000) ( 0.4177000000 0.2275070000) ( 0.0651300000 0.0080824700)) (P ( 138.1000000000 -0.0005815310) ( 32.2400000000 -0.0040730600) ( 9.9850000000 -0.0167937000) ( 3.4840000000 -0.0353268000) ( 1.2310000000 -0.0521971000) ( 0.4177000000 -0.0168359000) ( 0.0651300000 0.4346130000)) (P ( 0.0205300000 1.0000000000)) ) MAGNESIUM:"H_CCPVDZ" = ( (S ( 47390.0000000000 0.0003460230) ( 7108.0000000000 0.0026807700) ( 1618.0000000000 0.0138367000) ( 458.4000000000 0.0551767000) ( 149.3000000000 0.1696600000) ( 53.5900000000 0.3647030000) ( 20.7000000000 0.4068560000) ( 8.3840000000 0.1350890000) ( 2.5420000000 0.0049088400) ( 0.8787000000 0.0002864600) ( 0.1077000000 0.0000264590)) (S ( 47390.0000000000 -0.0000877839) ( 7108.0000000000 -0.0006747250) ( 1618.0000000000 -0.0035560300) ( 458.4000000000 -0.0142154000) ( 149.3000000000 -0.0476748000) ( 53.5900000000 -0.1148920000) ( 20.7000000000 -0.2006760000) ( 8.3840000000 -0.0341224000) ( 2.5420000000 0.5704540000) ( 0.8787000000 0.5423090000) ( 0.1077000000 0.0218128000)) (S ( 47390.0000000000 0.0000169628) ( 7108.0000000000 0.0001298650) ( 1618.0000000000 0.0006888310) ( 458.4000000000 0.0027353300) ( 149.3000000000 0.0093122400) ( 53.5900000000 0.0223265000) ( 20.7000000000 0.0411195000) ( 8.3840000000 0.0054564200) ( 2.5420000000 -0.1340120000) ( 0.8787000000 -0.2561760000) ( 0.1077000000 0.6058560000)) (S ( 0.0399900000 1.0000000000)) (P ( 179.9000000000 0.0053816100) ( 42.1400000000 0.0392418000) ( 13.1300000000 0.1574450000) ( 4.6280000000 0.3585350000) ( 1.6700000000 0.4572260000) ( 0.5857000000 0.2159180000) ( 0.1311000000 0.0066494800)) (P ( 179.9000000000 -0.0008659480) ( 42.1400000000 -0.0061597800) ( 13.1300000000 -0.0261519000) ( 4.6280000000 -0.0570647000) ( 1.6700000000 -0.0873906000) ( 0.5857000000 -0.0122990000) ( 0.1311000000 0.5020850000)) (P ( 0.0411200000 1.0000000000)) ) ALUMINUM:"H_CCPVDZ" = ( (S ( 64150.0000000000 0.0002902500) ( 9617.0000000000 0.0022506400) ( 2189.0000000000 0.0116459000) ( 620.5000000000 0.0467377000) ( 202.7000000000 0.1462990000) ( 73.1500000000 0.3302830000) ( 28.5500000000 0.4158610000) ( 11.7700000000 0.1892530000) ( 3.3000000000 0.0115889000) ( 1.1730000000 -0.0012838500) ( 0.1752000000 0.0004258830)) (S ( 64150.0000000000 -0.0000758048) ( 9617.0000000000 -0.0005817910) ( 2189.0000000000 -0.0030811300) ( 620.5000000000 -0.0123112000) ( 202.7000000000 -0.0419781000) ( 73.1500000000 -0.1033710000) ( 28.5500000000 -0.1963080000) ( 11.7700000000 -0.0830002000) ( 3.3000000000 0.5410400000) ( 1.1730000000 0.5787960000) ( 0.1752000000 0.0288147000)) (S ( 64150.0000000000 0.0000175078) ( 9617.0000000000 0.0001342080) ( 2189.0000000000 0.0007124420) ( 620.5000000000 0.0028433000) ( 202.7000000000 0.0097684200) ( 73.1500000000 0.0241850000) ( 28.5500000000 0.0474993000) ( 11.7700000000 0.0203621000) ( 3.3000000000 -0.1587880000) ( 1.1730000000 -0.3116940000) ( 0.1752000000 0.6201470000)) (S ( 0.0647300000 1.0000000000)) (P ( 258.8000000000 0.0040684700) ( 60.8900000000 0.0306815000) ( 19.1400000000 0.1291490000) ( 6.8810000000 0.3208310000) ( 2.5740000000 0.4538150000) ( 0.9572000000 0.2750660000) ( 0.2099000000 0.0190807000)) (P ( 258.8000000000 -0.0007480530) ( 60.8900000000 -0.0054579600) ( 19.1400000000 -0.0245371000) ( 6.8810000000 -0.0582138000) ( 2.5740000000 -0.0983756000) ( 0.9572000000 -0.0260064000) ( 0.2099000000 0.4640200000)) (P ( 0.0598600000 1.0000000000)) ) SILICON:"H_CCPVDZ" = ( (S ( 78860.0000000000 0.0002704430) ( 11820.0000000000 0.0020971700) ( 2692.0000000000 0.0108506000) ( 763.4000000000 0.0436754000) ( 249.6000000000 0.1376530000) ( 90.2800000000 0.3166440000) ( 35.2900000000 0.4185810000) ( 14.5100000000 0.2102120000) ( 4.0530000000 0.0144952000) ( 1.4820000000 -0.0020359000) ( 0.2517000000 0.0006241860)) (S ( 78860.0000000000 -0.0000723177) ( 11820.0000000000 -0.0005551160) ( 2692.0000000000 -0.0029380500) ( 763.4000000000 -0.0117687000) ( 249.6000000000 -0.0402907000) ( 90.2800000000 -0.1006090000) ( 35.2900000000 -0.1965280000) ( 14.5100000000 -0.1023820000) ( 4.0530000000 0.5271900000) ( 1.4820000000 0.5932510000) ( 0.2517000000 0.0332652000)) (S ( 78860.0000000000 0.0000185113) ( 11820.0000000000 0.0001422360) ( 2692.0000000000 0.0007521850) ( 763.4000000000 0.0030227900) ( 249.6000000000 0.0103677000) ( 90.2800000000 0.0262563000) ( 35.2900000000 0.0523989000) ( 14.5100000000 0.0290959000) ( 4.0530000000 -0.1780030000) ( 1.4820000000 -0.3468740000) ( 0.2517000000 0.6230200000)) (S ( 0.0924300000 1.0000000000)) (P ( 315.9000000000 0.0039265600) ( 74.4200000000 0.0298811000) ( 23.4800000000 0.1272120000) ( 8.4880000000 0.3209430000) ( 3.2170000000 0.4554290000) ( 1.2290000000 0.2685630000) ( 0.2964000000 0.0188336000)) (P ( 315.9000000000 -0.0008583020) ( 74.4200000000 -0.0063032800) ( 23.4800000000 -0.0288255000) ( 8.4880000000 -0.0694560000) ( 3.2170000000 -0.1194930000) ( 1.2290000000 -0.0199581000) ( 0.2964000000 0.5102680000)) (P ( 0.0876800000 1.0000000000)) ) PHOSPHORUS:"H_CCPVDZ" = ( (S ( 94840.0000000000 0.0002555090) ( 14220.0000000000 0.0019819300) ( 3236.0000000000 0.0102760000) ( 917.1000000000 0.0414823000) ( 299.5000000000 0.1319840000) ( 108.1000000000 0.3086620000) ( 42.1800000000 0.4206470000) ( 17.2800000000 0.2228780000) ( 4.8580000000 0.0164035000) ( 1.8180000000 -0.0025425500) ( 0.3372000000 0.0007480500)) (S ( 94840.0000000000 -0.0000696939) ( 14220.0000000000 -0.0005352660) ( 3236.0000000000 -0.0028370900) ( 917.1000000000 -0.0113983000) ( 299.5000000000 -0.0392929000) ( 108.1000000000 -0.0996364000) ( 42.1800000000 -0.1979830000) ( 17.2800000000 -0.1148600000) ( 4.8580000000 0.5185950000) ( 1.8180000000 0.6018470000) ( 0.3372000000 0.0368612000)) (S ( 94840.0000000000 0.0000191199) ( 14220.0000000000 0.0001472230) ( 3236.0000000000 0.0007779120) ( 917.1000000000 0.0031454600) ( 299.5000000000 0.0108200000) ( 108.1000000000 0.0279957000) ( 42.1800000000 0.0563978000) ( 17.2800000000 0.0358190000) ( 4.8580000000 -0.1933870000) ( 1.8180000000 -0.3720970000) ( 0.3372000000 0.6242460000)) (S ( 0.1232000000 1.0000000000)) (P ( 370.5000000000 0.0039500500) ( 87.3300000000 0.0302492000) ( 27.5900000000 0.1295540000) ( 10.0000000000 0.3275940000) ( 3.8250000000 0.4569920000) ( 1.4940000000 0.2530860000) ( 0.3921000000 0.0168798000)) (P ( 370.5000000000 -0.0009598320) ( 87.3300000000 -0.0071117700) ( 27.5900000000 -0.0327122000) ( 10.0000000000 -0.0795784000) ( 3.8250000000 -0.1350160000) ( 1.4940000000 -0.0091058500) ( 0.3921000000 0.5378020000)) (P ( 0.1186000000 1.0000000000)) ) SULFUR:"H_CCPVDZ" = ( (S ( 110800.0000000000 0.0002476350) ( 16610.0000000000 0.0019202600) ( 3781.0000000000 0.0099619200) ( 1071.0000000000 0.0402975000) ( 349.8000000000 0.1286040000) ( 126.3000000000 0.3034800000) ( 49.2600000000 0.4214320000) ( 20.1600000000 0.2307810000) ( 5.7200000000 0.0178971000) ( 2.1820000000 -0.0029751600) ( 0.4327000000 0.0008495220)) (S ( 110800.0000000000 -0.0000687039) ( 16610.0000000000 -0.0005276810) ( 3781.0000000000 -0.0027967100) ( 1071.0000000000 -0.0112651000) ( 349.8000000000 -0.0388834000) ( 126.3000000000 -0.0995025000) ( 49.2600000000 -0.1997400000) ( 20.1600000000 -0.1233600000) ( 5.7200000000 0.5131940000) ( 2.1820000000 0.6071200000) ( 0.4327000000 0.0396753000)) (S ( 110800.0000000000 0.0000199077) ( 16610.0000000000 0.0001534830) ( 3781.0000000000 0.0008095030) ( 1071.0000000000 0.0032897400) ( 349.8000000000 0.0112967000) ( 126.3000000000 0.0296385000) ( 49.2600000000 0.0599851000) ( 20.1600000000 0.0413248000) ( 5.7200000000 -0.2074740000) ( 2.1820000000 -0.3928890000) ( 0.4327000000 0.6328400000)) (S ( 0.1570000000 1.0000000000)) (P ( 399.7000000000 0.0044754100) ( 94.1900000000 0.0341708000) ( 29.7500000000 0.1442500000) ( 10.7700000000 0.3539280000) ( 4.1190000000 0.4590850000) ( 1.6250000000 0.2063830000) ( 0.4726000000 0.0102141000)) (P ( 399.7000000000 -0.0011625100) ( 94.1900000000 -0.0086566400) ( 29.7500000000 -0.0390886000) ( 10.7700000000 -0.0934625000) ( 4.1190000000 -0.1479940000) ( 1.6250000000 0.0301904000) ( 0.4726000000 0.5615730000)) (P ( 0.1407000000 1.0000000000)) ) CHLORINE:"H_CCPVDZ" = ( (S ( 127900.0000000000 0.0002411530) ( 19170.0000000000 0.0018709500) ( 4363.0000000000 0.0097082700) ( 1236.0000000000 0.0393153000) ( 403.6000000000 0.1259320000) ( 145.7000000000 0.2993410000) ( 56.8100000000 0.4218860000) ( 23.2300000000 0.2372010000) ( 6.6440000000 0.0191531000) ( 2.5750000000 -0.0033479200) ( 0.5371000000 0.0009298830)) (S ( 127900.0000000000 -0.0000678922) ( 19170.0000000000 -0.0005218360) ( 4363.0000000000 -0.0027651300) ( 1236.0000000000 -0.0111537000) ( 403.6000000000 -0.0385919000) ( 145.7000000000 -0.0994848000) ( 56.8100000000 -0.2013920000) ( 23.2300000000 -0.1303130000) ( 6.6440000000 0.5094430000) ( 2.5750000000 0.6107250000) ( 0.5371000000 0.0421549000)) (S ( 127900.0000000000 0.0000204986) ( 19170.0000000000 0.0001582980) ( 4363.0000000000 0.0008336390) ( 1236.0000000000 0.0033988000) ( 403.6000000000 0.0116738000) ( 145.7000000000 0.0309622000) ( 56.8100000000 0.0629533000) ( 23.2300000000 0.0460257000) ( 6.6440000000 -0.2193120000) ( 2.5750000000 -0.4087730000) ( 0.5371000000 0.6384650000)) (S ( 0.1938000000 1.0000000000)) (P ( 417.6000000000 0.0052598200) ( 98.3300000000 0.0398332000) ( 31.0400000000 0.1646550000) ( 11.1900000000 0.3873220000) ( 4.2490000000 0.4570720000) ( 1.6240000000 0.1516360000) ( 0.5322000000 0.0018161500)) (P ( 417.6000000000 -0.0014357000) ( 98.3300000000 -0.0107796000) ( 31.0400000000 -0.0470075000) ( 11.1900000000 -0.1110300000) ( 4.2490000000 -0.1532750000) ( 1.6240000000 0.0894609000) ( 0.5322000000 0.5794440000)) (P ( 0.1620000000 1.0000000000)) ) ARGON:"H_CCPVDZ" = ( (S ( 145700.0000000000 0.0002367000) ( 21840.0000000000 0.0018352300) ( 4972.0000000000 0.0095286000) ( 1408.0000000000 0.0386283000) ( 459.7000000000 0.1240810000) ( 165.9000000000 0.2964710000) ( 64.6900000000 0.4220680000) ( 26.4400000000 0.2417110000) ( 7.6280000000 0.0200509000) ( 2.9960000000 -0.0036100000) ( 0.6504000000 0.0009756070)) (S ( 145700.0000000000 -0.0000674910) ( 21840.0000000000 -0.0005185220) ( 4972.0000000000 -0.0027482500) ( 1408.0000000000 -0.0111007000) ( 459.7000000000 -0.0384820000) ( 165.9000000000 -0.0997599000) ( 64.6900000000 -0.2030880000) ( 26.4400000000 -0.1356080000) ( 7.6280000000 0.5071950000) ( 2.9960000000 0.6128980000) ( 0.6504000000 0.0442968000)) (S ( 145700.0000000000 0.0000210457) ( 21840.0000000000 0.0001625650) ( 4972.0000000000 0.0008554630) ( 1408.0000000000 0.0034974500) ( 459.7000000000 0.0120156000) ( 165.9000000000 0.0321368000) ( 64.6900000000 0.0655279000) ( 26.4400000000 0.0499370000) ( 7.6280000000 -0.2297690000) ( 2.9960000000 -0.4210060000) ( 0.6504000000 0.6423310000)) (S ( 0.2337000000 1.0000000000)) (P ( 453.7000000000 0.0057055500) ( 106.8000000000 0.0430460000) ( 33.7300000000 0.1765910000) ( 12.1300000000 0.4068630000) ( 4.5940000000 0.4525490000) ( 1.6780000000 0.1228010000) ( 0.5909000000 -0.0044599600)) (P ( 453.7000000000 -0.0016065500) ( 106.8000000000 -0.0121714000) ( 33.7300000000 -0.0520789000) ( 12.1300000000 -0.1237370000) ( 4.5940000000 -0.1516190000) ( 1.6780000000 0.1424250000) ( 0.5909000000 0.5845010000)) (P ( 0.1852000000 1.0000000000)) ) CALCIUM:"H_CCPVDZ" = ( (S (190000.7000000 0.00022145) ( 28481.4600000 0.00171830) ( 6482.7010000 0.00892348) ( 1835.8910000 0.03630183) ( 598.7243000 0.11762223) ( 215.8841000 0.28604352) ( 84.0124200 0.42260708) ( 34.2248800 0.25774366) ( 10.0249700 0.02391893) ( 4.0559200 -0.00495218) ( 1.0202610 0.00171779) ( 0.4268650 -0.00089209) ( 0.0633470 0.00024510)) (S (190000.7000000 -0.00006453) ( 28481.4600000 -0.00049662) ( 6482.7010000 -0.00262826) ( 1835.8910000 -0.01066845) ( 598.7243000 -0.03713509) ( 215.8841000 -0.09804284) ( 84.0124200 -0.20342692) ( 34.2248800 -0.15244655) ( 10.0249700 0.48279406) ( 4.0559200 0.62923839) ( 1.0202610 0.06164842) ( 0.4268650 -0.01479971) ( 0.0633470 0.00361089)) (S (190000.7000000 0.00002223) ( 28481.4600000 0.00017170) ( 6482.7010000 0.00090452) ( 1835.8910000 0.00370343) ( 598.7243000 0.01283750) ( 215.8841000 0.03475459) ( 84.0124200 0.07303491) ( 34.2248800 0.06100083) ( 10.0249700 -0.24292928) ( 4.0559200 -0.48708500) ( 1.0202610 0.56502804) ( 0.4268650 0.65574386) ( 0.0633470 0.02672894)) (S (190000.7000000 0.00000531) ( 28481.4600000 0.00004111) ( 6482.7010000 0.00021568) ( 1835.8910000 0.00088827) ( 598.7243000 0.00305813) ( 215.8841000 0.00837608) ( 84.0124200 0.01741056) ( 34.2248800 0.01515453) ( 10.0249700 -0.06207919) ( 4.0559200 -0.12611803) ( 1.0202610 0.17360694) ( 0.4268650 0.37822943) ( 0.0633470 -0.65964698)) (S ( 0.0263010 1.0000000 )) (P ( 1072.0430000 0.00198166) ( 253.8439000 0.01612944) ( 81.3162600 0.07657851) ( 30.2418300 0.23269594) ( 12.1011000 0.42445210) ( 5.0225540 0.37326402) ( 1.9092200 0.07868530) ( 0.7713040 -0.00599927) ( 0.3005700 0.00264257) ( 0.0766490 -0.00085694)) (P ( 1072.0430000 -0.00064891) ( 253.8439000 -0.00527907) ( 81.3162600 -0.02581131) ( 30.2418300 -0.08062892) ( 12.1011000 -0.15846552) ( 5.0225540 -0.12816816) ( 1.9092200 0.25610103) ( 0.7713040 0.58724068) ( 0.3005700 0.30372561) ( 0.0766490 0.01416451)) (P ( 1072.0430000 0.00013595) ( 253.8439000 0.00109420) ( 81.3162600 0.00542680) ( 30.2418300 0.01674718) ( 12.1011000 0.03389863) ( 5.0225540 0.02531183) ( 1.9092200 -0.05895713) ( 0.7713040 -0.15876120) ( 0.3005700 -0.08554523) ( 0.0766490 0.54464665)) (P ( 0.0277720 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPVTZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Triple Zeta (cc-pVTZ) Basis % -------------------------------------------------------------------- % Elements Contraction References % H : (5s,2p,1d) -> [3s,2p,1d] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % He : (6s,2p,1d) -> [3s,2p,1d] D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). % Li - Ne: (10s,5p,2d,1f) -> [4s,3p,2d,1f] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % NA : (16s,10p,2d,1f)-> [5s,4p,2d,1f] D. Woon and T.H. Dunning, Jr. % Mg : (15s,10p,2d,1f)-> [5s,4p,2d,1f] (to be published) % Al - Ar: (15s,9p,2d,1f) -> [5s,4p,2d,1f] D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 98, 1358 (1993). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPVTZ and CCPV((D+D))z for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T July 2, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PVTZ":puream = true HYDROGEN:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) HELIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) LITHIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) BERYLLIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) BORON:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) CARBON:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) NITROGEN:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) OXYGEN:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) FLUORINE:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) NEON:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) SODIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) MAGNESIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) ALUMINUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.1090000000 1.0000000000)) ) SILICON:"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.1590000000 1.0000000000)) (D ( 0.4810000000 1.0000000000)) ) PHOSPHORUS :"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2160000000 1.0000000000)) (D ( 0.6520000000 1.0000000000)) ) SULFUR:"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2690000000 1.0000000000)) (D ( 0.8190000000 1.0000000000)) ) CHLORINE:"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 1.0460000000 1.0000000000)) (D ( 0.3440000000 1.0000000000)) ) ARGON:"CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 1.2540000000 1.0000000000)) (D ( 0.4100000000 1.0000000000)) ) CALCIUM:"CC-PVTZ" = ( (GET "H_CCPVTZ") ) %%%%%%%%%%% ALIASES cc-pVTZ => CC-PVTZ %%%%%%%%%%%%%% "cc-pVTZ":puream = true HYDROGEN:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) HELIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) LITHIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) BERYLLIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) BORON:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) CARBON:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) NITROGEN:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) OXYGEN:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) FLUORINE:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) NEON:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) SODIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) MAGNESIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) ALUMINUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 0.1090000000 1.0000000000)) ) SILICON:"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 0.1590000000 1.0000000000)) (D ( 0.4810000000 1.0000000000)) ) PHOSPHORUS :"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2160000000 1.0000000000)) (D ( 0.6520000000 1.0000000000)) ) SULFUR:"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2690000000 1.0000000000)) (D ( 0.8190000000 1.0000000000)) ) CHLORINE:"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 1.0460000000 1.0000000000)) (D ( 0.3440000000 1.0000000000)) ) ARGON:"cc-pVTZ" = ( (GET "H_CCPVTZ") (D ( 1.2540000000 1.0000000000)) (D ( 0.4100000000 1.0000000000)) ) CALCIUM:"cc-pVTZ" = ( (GET "H_CCPVTZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PV(T+D)Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Triple Zeta (cc-pVTZ) Basis % -------------------------------------------------------------------- % Elements Contraction References % Al - Ar: (15s,9p,3d,1f) -> [5s,4p,3d,1f] T.H. Dunning, Jr., K.A. Peterson % and A.K. Wilson, J. Chem. Phys. % 114, 9244 (2001) % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV(T+D)Z":puream = true ALUMINUM:"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.1110000000 1.0000000000)) (D ( 1.5700000000 1.0000000000)) ) SILICON:"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.1600000000 1.0000000000)) (D ( 0.4760000000 1.0000000000)) (D ( 2.3030000000 1.0000000000)) ) PHOSPHORUS :"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.2180000000 1.0000000000)) (D ( 0.6480000000 1.0000000000)) (D ( 3.1200000000 1.0000000000)) ) SULFUR:"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.2730000000 1.0000000000)) (D ( 0.8120000000 1.0000000000)) (D ( 3.7560000000 1.0000000000)) ) CHLORINE:"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 1.0110000000 1.0000000000)) (D ( 0.3390000000 1.0000000000)) (D ( 4.6100000000 1.0000000000)) ) ARGON:"CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 1.2350000000 1.0000000000)) (D ( 0.4120000000 1.0000000000)) (D ( 5.5510000000 1.0000000000)) ) %%%%%%%%%%% ALIASES cc-pV(T+d)Z => CC-PV(T+D)Z %%%%%%% "cc-pV(T+d)Z":puream = true ALUMINUM:"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 0.1110000000 1.0000000000)) (D ( 1.5700000000 1.0000000000)) ) SILICON:"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 0.1600000000 1.0000000000)) (D ( 0.4760000000 1.0000000000)) (D ( 2.3030000000 1.0000000000)) ) PHOSPHORUS :"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 0.2180000000 1.0000000000)) (D ( 0.6480000000 1.0000000000)) (D ( 3.1200000000 1.0000000000)) ) SULFUR:"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 0.2730000000 1.0000000000)) (D ( 0.8120000000 1.0000000000)) (D ( 3.7560000000 1.0000000000)) ) CHLORINE:"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 1.0110000000 1.0000000000)) (D ( 0.3390000000 1.0000000000)) (D ( 4.6100000000 1.0000000000)) ) ARGON:"cc-pV(T+d)Z" = ( (GET "H_CCPVTZ") (D ( 1.2350000000 1.0000000000)) (D ( 0.4120000000 1.0000000000)) (D ( 5.5510000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPVTZ Basis Sets %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"H_CCPVTZ" = ( (S ( 33.87000000 0.00606800) ( 5.09500000 0.04530800) ( 1.15900000 0.20282200) ( 0.32580000 0.50390300) ( 0.10270000 0.38342100)) (S ( 0.32580000 1.00000000)) (S ( 0.10270000 1.00000000)) (P ( 1.40700000 1.00000000)) (P ( 0.38800000 1.00000000)) (D ( 1.05700000 1.00000000)) ) HELIUM:"H_CCPVTZ" = ( (S ( 234.00000000 0.00258700) ( 35.16000000 0.01953300) ( 7.98900000 0.09099800) ( 2.21200000 0.27205000) ( 0.66690000 0.47806500) ( 0.20890000 0.30773700)) (S ( 0.66690000 1.00000000)) (S ( 0.20890000 1.00000000)) (P ( 3.04400000 1.00000000)) (P ( 0.75800000 1.00000000)) (D ( 1.96500000 1.00000000)) ) LITHIUM:"H_CCPVTZ" = ( (S ( 5988.0000000000 0.0001330000) ( 898.9000000000 0.0010250000) ( 205.9000000000 0.0052720000) ( 59.2400000000 0.0209290000) ( 19.8700000000 0.0663400000) ( 7.4060000000 0.1657750000) ( 2.9300000000 0.3150380000) ( 1.1890000000 0.3935230000) ( 0.4798000000 0.1908700000)) (S ( 5988.0000000000 -0.0000210000) ( 898.9000000000 -0.0001610000) ( 205.9000000000 -0.0008200000) ( 59.2400000000 -0.0033260000) ( 19.8700000000 -0.0105190000) ( 7.4060000000 -0.0280970000) ( 2.9300000000 -0.0559360000) ( 1.1890000000 -0.0992370000) ( 0.4798000000 -0.1121890000)) (S ( 0.0750900000 1.0000000000)) (S ( 0.0283200000 1.0000000000)) (P ( 3.2660000000 0.0086300000) ( 0.6511000000 0.0475380000) ( 0.1696000000 0.2097720000)) (P ( 0.0557800000 1.0000000000)) (P ( 0.0205000000 1.0000000000)) (D ( 0.1874000000 1.0000000000)) (D ( 0.0801000000 1.0000000000)) (F ( 0.1829000000 1.0000000000)) ) BERYLLIUM:"H_CCPVTZ" = ( (S ( 6863.0000000000 0.0002360000) ( 1030.0000000000 0.0018260000) ( 234.7000000000 0.0094520000) ( 66.5600000000 0.0379570000) ( 21.6900000000 0.1199650000) ( 7.7340000000 0.2821620000) ( 2.9160000000 0.4274040000) ( 1.1300000000 0.2662780000) ( 0.1101000000 -0.0072750000)) (S ( 6863.0000000000 -0.0000430000) ( 1030.0000000000 -0.0003330000) ( 234.7000000000 -0.0017360000) ( 66.5600000000 -0.0070120000) ( 21.6900000000 -0.0231260000) ( 7.7340000000 -0.0581380000) ( 2.9160000000 -0.1145560000) ( 1.1300000000 -0.1359080000) ( 0.1101000000 0.5774410000)) (S ( 0.2577000000 1.0000000000)) (S ( 0.0440900000 1.0000000000)) (P ( 7.4360000000 0.0107360000) ( 1.5770000000 0.0628540000) ( 0.4352000000 0.2481800000)) (P ( 0.1438000000 1.0000000000)) (P ( 0.0499400000 1.0000000000)) (D ( 0.3480000000 1.0000000000)) (D ( 0.1803000000 1.0000000000)) (F ( 0.3250000000 1.0000000000)) ) BORON:"H_CCPVTZ" = ( (S ( 5473.00000000 0.00055500) ( 820.90000000 0.00429100) ( 186.80000000 0.02194900) ( 52.83000000 0.08444100) ( 17.08000000 0.23855700) ( 5.99900000 0.43507200) ( 2.20800000 0.34195500) ( 0.58790000 0.03685600) ( 0.24150000 -0.00954500) ( 0.08610000 0.00236800)) (S ( 5473.00000000 -0.00011200) ( 820.90000000 -0.00086800) ( 186.80000000 -0.00448400) ( 52.83000000 -0.01768300) ( 17.08000000 -0.05363900) ( 5.99900000 -0.11900500) ( 2.20800000 -0.16582400) ( 0.58790000 0.12010700) ( 0.24150000 0.59598100) ( 0.08610000 0.41102100)) (S ( 0.58790000 1.00000000)) (S ( 0.08610000 1.00000000)) (P ( 12.05000000 0.01311800) ( 2.61300000 0.07989600) ( 0.74750000 0.27727500) ( 0.23850000 0.50427000) ( 0.07698000 0.35368000)) (P ( 0.23850000 1.00000000)) (P ( 0.07698000 1.00000000)) (D ( 0.66100000 1.00000000)) (D ( 0.19900000 1.00000000)) (F ( 0.49000000 1.00000000)) ) CARBON:"H_CCPVTZ" = ( (S ( 8236.00000000 0.00053100) ( 1235.00000000 0.00410800) ( 280.80000000 0.02108700) ( 79.27000000 0.08185300) ( 25.59000000 0.23481700) ( 8.99700000 0.43440100) ( 3.31900000 0.34612900) ( 0.90590000 0.03937800) ( 0.36430000 -0.00898300) ( 0.12850000 0.00238500)) (S ( 8236.00000000 -0.00011300) ( 1235.00000000 -0.00087800) ( 280.80000000 -0.00454000) ( 79.27000000 -0.01813300) ( 25.59000000 -0.05576000) ( 8.99700000 -0.12689500) ( 3.31900000 -0.17035200) ( 0.90590000 0.14038200) ( 0.36430000 0.59868400) ( 0.12850000 0.39538900)) (S ( 0.90590000 1.00000000)) (S ( 0.12850000 1.00000000)) (P ( 18.71000000 0.01403100) ( 4.13300000 0.08686600) ( 1.20000000 0.29021600) ( 0.38270000 0.50100800) ( 0.12090000 0.34340600)) (P ( 0.38270000 1.00000000)) (P ( 0.12090000 1.00000000)) (D ( 1.09700000 1.00000000)) (D ( 0.31800000 1.00000000)) (F ( 0.76100000 1.00000000)) ) NITROGEN:"H_CCPVTZ" = ( (S ( 11420.00000000 0.00052300) ( 1712.00000000 0.00404500) ( 389.30000000 0.02077500) ( 110.00000000 0.08072700) ( 35.57000000 0.23307400) ( 12.54000000 0.43350100) ( 4.64400000 0.34747200) ( 1.29300000 0.04126200) ( 0.51180000 -0.00850800) ( 0.17870000 0.00238400)) (S ( 11420.00000000 -0.00011500) ( 1712.00000000 -0.00089500) ( 389.30000000 -0.00462400) ( 110.00000000 -0.01852800) ( 35.57000000 -0.05733900) ( 12.54000000 -0.13207600) ( 4.64400000 -0.17251000) ( 1.29300000 0.15181400) ( 0.51180000 0.59994400) ( 0.17870000 0.38746200)) (S ( 1.29300000 1.00000000)) (S ( 0.17870000 1.00000000)) (P ( 26.63000000 0.01467000) ( 5.94800000 0.09176400) ( 1.74200000 0.29868300) ( 0.55500000 0.49848700) ( 0.17250000 0.33702300)) (P ( 0.55500000 1.00000000)) (P ( 0.17250000 1.00000000)) (D ( 1.65400000 1.00000000)) (D ( 0.46900000 1.00000000)) (F ( 1.09300000 1.00000000)) ) OXYGEN:"H_CCPVTZ" = ( (S ( 15330.00000000 0.00050800) ( 2299.00000000 0.00392900) ( 522.40000000 0.02024300) ( 147.30000000 0.07918100) ( 47.55000000 0.23068700) ( 16.76000000 0.43311800) ( 6.20700000 0.35026000) ( 1.75200000 0.04272800) ( 0.68820000 -0.00815400) ( 0.23840000 0.00238100)) (S ( 15330.00000000 -0.00011500) ( 2299.00000000 -0.00089500) ( 522.40000000 -0.00463600) ( 147.30000000 -0.01872400) ( 47.55000000 -0.05846300) ( 16.76000000 -0.13646300) ( 6.20700000 -0.17574000) ( 1.75200000 0.16093400) ( 0.68820000 0.60341800) ( 0.23840000 0.37876500)) (S ( 1.75200000 1.00000000)) (S ( 0.23840000 1.00000000)) (P ( 34.46000000 0.01592800) ( 7.74900000 0.09974000) ( 2.28000000 0.31049200) ( 0.71560000 0.49102600) ( 0.21400000 0.33633700)) (P ( 0.71560000 1.00000000)) (P ( 0.21400000 1.00000000)) (D ( 2.31400000 1.00000000)) (D ( 0.64500000 1.00000000)) (F ( 1.42800000 1.00000000)) ) FLUORINE:"H_CCPVTZ" = ( (S ( 19500.00000000 0.00050700) ( 2923.00000000 0.00392300) ( 664.50000000 0.02020000) ( 187.50000000 0.07901000) ( 60.62000000 0.23043900) ( 21.42000000 0.43287200) ( 7.95000000 0.34996400) ( 2.25700000 0.04323300) ( 0.88150000 -0.00789200) ( 0.30410000 0.00238400)) (S ( 19500.00000000 -0.00011700) ( 2923.00000000 -0.00091200) ( 664.50000000 -0.00471700) ( 187.50000000 -0.01908600) ( 60.62000000 -0.05965500) ( 21.42000000 -0.14001000) ( 7.95000000 -0.17678200) ( 2.25700000 0.17162500) ( 0.88150000 0.60504300) ( 0.30410000 0.36951200)) (S ( 2.25700000 1.00000000)) (S ( 0.30410000 1.00000000)) (P ( 43.88000000 0.01666500) ( 9.92600000 0.10447200) ( 2.93000000 0.31726000) ( 0.91320000 0.48734300) ( 0.26720000 0.33460400)) (P ( 0.91320000 1.00000000)) (P ( 0.26720000 1.00000000)) (D ( 3.10700000 1.00000000)) (D ( 0.85500000 1.00000000)) (F ( 1.91700000 1.00000000)) ) NEON:"H_CCPVTZ" = ( (S ( 24350.00000000 0.00050200) ( 3650.00000000 0.00388100) ( 829.60000000 0.01999700) ( 234.00000000 0.07841800) ( 75.61000000 0.22967600) ( 26.73000000 0.43272200) ( 9.92700000 0.35064200) ( 2.83600000 0.04391100) ( 1.10200000 -0.00764500) ( 0.37820000 0.00237500)) (S ( 24350.00000000 -0.00011800) ( 3650.00000000 -0.00091500) ( 829.60000000 -0.00473700) ( 234.00000000 -0.01923300) ( 75.61000000 -0.06036900) ( 26.73000000 -0.14250800) ( 9.92700000 -0.17771000) ( 2.83600000 0.17735200) ( 1.10200000 0.60583600) ( 0.37820000 0.36510900)) (S ( 2.83600000 1.00000000)) (S ( 0.37820000 1.00000000)) (P ( 54.70000000 0.01715100) ( 12.43000000 0.10765600) ( 3.67900000 0.32168100) ( 1.14300000 0.48523200) ( 0.33000000 0.33258400)) (P ( 1.14300000 1.00000000)) (P ( 0.33000000 1.00000000)) (D ( 4.01400000 1.00000000)) (D ( 1.09600000 1.00000000)) (F ( 2.54400000 1.00000000)) ) SODIUM:"H_CCPVTZ" = ( (S ( 423000.0000000000 0.0000180618) ( 63340.0000000000 0.0001404300) ( 14410.0000000000 0.0007384380) ( 4077.0000000000 0.0031118200) ( 1328.0000000000 0.0112081000) ( 478.6000000000 0.0352828000) ( 186.2000000000 0.0959897000) ( 76.9200000000 0.2137350000) ( 33.3200000000 0.3486880000) ( 15.0000000000 0.3245660000) ( 6.8690000000 0.1126330000) ( 2.6830000000 0.0070679700) ( 1.1090000000 0.0005980100) ( 0.0601500000 -0.0000053087)) (S ( 423000.0000000000 -0.0000044065) ( 63340.0000000000 -0.0000343443) ( 14410.0000000000 -0.0001801140) ( 4077.0000000000 -0.0007639000) ( 1328.0000000000 -0.0027524800) ( 478.6000000000 -0.0088601600) ( 186.2000000000 -0.0247939000) ( 76.9200000000 -0.0605995000) ( 33.3200000000 -0.1164460000) ( 15.0000000000 -0.1624370000) ( 6.8690000000 -0.0438891000) ( 2.6830000000 0.3379170000) ( 1.1090000000 0.5613470000) ( 0.0601500000 0.0040675400)) (S ( 423000.0000000000 0.0000006630) ( 63340.0000000000 0.0000051577) ( 14410.0000000000 0.0000271250) ( 4077.0000000000 0.0001146350) ( 1328.0000000000 0.0004151180) ( 478.6000000000 0.0013297800) ( 186.2000000000 0.0037559500) ( 76.9200000000 0.0091402500) ( 33.3200000000 0.0179859000) ( 15.0000000000 0.0251477000) ( 6.8690000000 0.0076352200) ( 2.6830000000 -0.0614589000) ( 1.1090000000 -0.1157210000) ( 0.0601500000 0.6264060000)) (S ( 0.4540000000 1.0000000000)) (S ( 0.0238200000 1.0000000000)) (P ( 243.3000000000 0.0022439200) ( 57.3900000000 0.0173997000) ( 18.1000000000 0.0774125000) ( 6.5750000000 0.2191020000) ( 2.5210000000 0.3785220000) ( 0.9607000000 0.3949020000) ( 0.3512000000 0.1604240000) ( 0.0982700000 0.0023331100)) (P ( 243.3000000000 -0.0002224010) ( 57.3900000000 -0.0017427700) ( 18.1000000000 -0.0077545600) ( 6.5750000000 -0.0225187000) ( 2.5210000000 -0.0384330000) ( 0.9607000000 -0.0450177000) ( 0.3512000000 -0.0192132000) ( 0.0982700000 0.1826970000)) (P ( 0.0373400000 1.0000000000)) (P ( 0.0150000000 1.0000000000)) (D ( 0.1367000000 1.0000000000)) (D ( 0.0636000000 1.0000000000)) (F ( 0.1397000000 1.0000000000)) ) MAGNESIUM:"H_CCPVTZ" = ( (S ( 164900.0000000000 0.0000729929) ( 24710.0000000000 0.0005666520) ( 5628.0000000000 0.0029626900) ( 1596.0000000000 0.0122962000) ( 521.0000000000 0.0427324000) ( 188.0000000000 0.1230130000) ( 73.0100000000 0.2748320000) ( 29.9000000000 0.4018180000) ( 12.5400000000 0.2646970000) ( 4.3060000000 0.0332612000) ( 1.8260000000 -0.0044133500) ( 0.7417000000 0.0020602400) ( 0.0761200000 0.0007081950)) (S ( 164900.0000000000 -0.0000184248) ( 24710.0000000000 -0.0001435000) ( 5628.0000000000 -0.0007487100) ( 1596.0000000000 -0.0031440700) ( 521.0000000000 -0.0110481000) ( 188.0000000000 -0.0336058000) ( 73.0100000000 -0.0825946000) ( 29.9000000000 -0.1593140000) ( 12.5400000000 -0.1528880000) ( 4.3060000000 0.1908490000) ( 1.8260000000 0.5799640000) ( 0.7417000000 0.3720290000) ( 0.0761200000 -0.0119344000)) (S ( 164900.0000000000 0.0000035518) ( 24710.0000000000 0.0000276420) ( 5628.0000000000 0.0001444040) ( 1596.0000000000 0.0006057440) ( 521.0000000000 0.0021352700) ( 188.0000000000 0.0064993400) ( 73.0100000000 0.0161446000) ( 29.9000000000 0.0315766000) ( 12.5400000000 0.0316374000) ( 4.3060000000 -0.0439140000) ( 1.8260000000 -0.1510930000) ( 0.7417000000 -0.2176680000) ( 0.0761200000 0.5472450000)) (S ( 0.1457000000 1.0000000000)) (S ( 0.0331000000 1.0000000000)) (P ( 316.9000000000 0.0020753200) ( 74.8600000000 0.0162869000) ( 23.7200000000 0.0738697000) ( 8.6690000000 0.2142970000) ( 3.3630000000 0.3821540000) ( 1.3100000000 0.3981780000) ( 0.4911000000 0.1528780000) ( 0.2364000000 -0.0043754000)) (P ( 316.9000000000 -0.0003297270) ( 74.8600000000 -0.0025875400) ( 23.7200000000 -0.0119120000) ( 8.6690000000 -0.0350227000) ( 3.3630000000 -0.0639968000) ( 1.3100000000 -0.0704436000) ( 0.4911000000 -0.0375836000) ( 0.2364000000 0.1770430000)) (P ( 0.0873300000 1.0000000000)) (P ( 0.0323700000 1.0000000000)) (D ( 0.1260000000 1.0000000000)) (D ( 0.2940000000 1.0000000000)) (F ( 0.2520000000 1.0000000000)) ) ALUMINUM:"H_CCPVTZ" = ( (S ( 205500.0000000000 0.0000678836) ( 30780.0000000000 0.0005271490) ( 7006.0000000000 0.0027620300) ( 1985.0000000000 0.0114728000) ( 649.1000000000 0.0398188000) ( 235.0000000000 0.1150400000) ( 91.6200000000 0.2608870000) ( 37.6700000000 0.3963860000) ( 15.9100000000 0.2845970000) ( 5.8500000000 0.0444583000) ( 2.5420000000 -0.0048983800) ( 1.0570000000 0.0026125300) ( 0.1455000000 0.0007220680)) (S ( 205500.0000000000 -0.0000176377) ( 30780.0000000000 -0.0001371950) ( 7006.0000000000 -0.0007189100) ( 1985.0000000000 -0.0030114600) ( 649.1000000000 -0.0106014000) ( 235.0000000000 -0.0321345000) ( 91.6200000000 -0.0803156000) ( 37.6700000000 -0.1567940000) ( 15.9100000000 -0.1683760000) ( 5.8500000000 0.1268790000) ( 2.5420000000 0.5614940000) ( 1.0570000000 0.4366130000) ( 0.1455000000 -0.0114563000)) (S ( 205500.0000000000 0.0000040732) ( 30780.0000000000 0.0000316566) ( 7006.0000000000 0.0001661160) ( 1985.0000000000 0.0006949920) ( 649.1000000000 0.0024551100) ( 235.0000000000 0.0074459800) ( 91.6200000000 0.0188253000) ( 37.6700000000 0.0372772000) ( 15.9100000000 0.0419496000) ( 5.8500000000 -0.0354375000) ( 2.5420000000 -0.1751320000) ( 1.0570000000 -0.2762030000) ( 0.1455000000 0.6528090000)) (S ( 0.2931000000 1.0000000000)) (S ( 0.0565000000 1.0000000000)) (P ( 444.4000000000 0.0016278600) ( 105.1000000000 0.0130687000) ( 33.4700000000 0.0612341000) ( 12.3300000000 0.1878700000) ( 4.8690000000 0.3604520000) ( 1.9610000000 0.4084540000) ( 0.1888000000 0.0097651400)) (P ( 444.4000000000 -0.0002863410) ( 105.1000000000 -0.0024230800) ( 33.4700000000 -0.0108658000) ( 12.3300000000 -0.0364307000) ( 4.8690000000 -0.0641074000) ( 1.9610000000 -0.0972239000) ( 0.1888000000 0.5034480000)) (P ( 0.7834000000 1.0000000000)) (P ( 0.0555700000 1.0000000000)) (D ( 0.3330000000 1.0000000000)) (F ( 0.2440000000 1.0000000000)) ) SILICON:"H_CCPVTZ" = ( (S ( 254900.0000000000 0.0000625101) ( 38190.0000000000 0.0004855530) ( 8690.0000000000 0.0025451600) ( 2462.0000000000 0.0105866000) ( 804.8000000000 0.0368787000) ( 291.3000000000 0.1074790000) ( 113.6000000000 0.2479360000) ( 46.7500000000 0.3909270000) ( 19.8200000000 0.3020260000) ( 7.7080000000 0.0559236000) ( 3.3400000000 -0.0040240600) ( 1.4020000000 0.0025803000) ( 0.2070000000 0.0006079300)) (S ( 254900.0000000000 -0.0000166370) ( 38190.0000000000 -0.0001293100) ( 8690.0000000000 -0.0006788280) ( 2462.0000000000 -0.0028411700) ( 804.8000000000 -0.0100551000) ( 291.3000000000 -0.0305774000) ( 113.6000000000 -0.0777256000) ( 46.7500000000 -0.1542360000) ( 19.8200000000 -0.1803680000) ( 7.7080000000 0.0798218000) ( 3.3400000000 0.5474410000) ( 1.4020000000 0.4801190000) ( 0.2070000000 -0.0106996000)) (S ( 254900.0000000000 0.0000042626) ( 38190.0000000000 0.0000331062) ( 8690.0000000000 0.0001740150) ( 2462.0000000000 0.0007275740) ( 804.8000000000 0.0025833300) ( 291.3000000000 0.0078635400) ( 113.6000000000 0.0202155000) ( 46.7500000000 0.0407320000) ( 19.8200000000 0.0499358000) ( 7.7080000000 -0.0249396000) ( 3.3400000000 -0.1903500000) ( 1.4020000000 -0.3183500000) ( 0.2070000000 0.6811800000)) (S ( 0.4387000000 1.0000000000)) (S ( 0.0794400000 1.0000000000)) (P ( 481.5000000000 0.0019204500) ( 113.9000000000 0.0153552000) ( 36.2300000000 0.0713991000) ( 13.3400000000 0.2130520000) ( 5.2520000000 0.3903540000) ( 2.1200000000 0.3937210000) ( 0.2528000000 0.0039563000)) (P ( 481.5000000000 -0.0004052200) ( 113.9000000000 -0.0033589600) ( 36.2300000000 -0.0152860000) ( 13.3400000000 -0.0489218000) ( 5.2520000000 -0.0855008000) ( 2.1200000000 -0.1121370000) ( 0.2528000000 0.5519190000)) (P ( 0.8561000000 1.0000000000)) (P ( 0.0788900000 1.0000000000)) (F ( 0.3360000000 1.0000000000)) ) PHOSPHORUS:"H_CCPVTZ" = ( (S ( 312400.0000000000 0.0000576960) ( 46800.0000000000 0.0004482960) ( 10650.0000000000 0.0023493900) ( 3018.0000000000 0.0097826500) ( 986.8000000000 0.0341467000) ( 357.4000000000 0.1002040000) ( 139.6000000000 0.2343720000) ( 57.6300000000 0.3824340000) ( 24.6000000000 0.3180880000) ( 10.1200000000 0.0707788000) ( 4.2830000000 -0.0018179900) ( 1.8050000000 0.0021618000) ( 0.2782000000 0.0004322970)) (S ( 312400.0000000000 -0.0000156709) ( 46800.0000000000 -0.0001217240) ( 10650.0000000000 -0.0006396720) ( 3018.0000000000 -0.0026742600) ( 986.8000000000 -0.0094983100) ( 357.4000000000 -0.0289349000) ( 139.6000000000 -0.0745121000) ( 57.6300000000 -0.1499380000) ( 24.6000000000 -0.1894670000) ( 10.1200000000 0.0363270000) ( 4.2830000000 0.5288160000) ( 1.8050000000 0.5191150000) ( 0.2782000000 -0.0092569500)) (S ( 312400.0000000000 0.0000043063) ( 46800.0000000000 0.0000334194) ( 10650.0000000000 0.0001758850) ( 3018.0000000000 0.0007343400) ( 986.8000000000 0.0026177500) ( 357.4000000000 0.0079785200) ( 139.6000000000 0.0207940000) ( 57.6300000000 0.0424446000) ( 24.6000000000 0.0563436000) ( 10.1200000000 -0.0127358000) ( 4.2830000000 -0.1964950000) ( 1.8050000000 -0.3535550000) ( 0.2782000000 0.7009120000)) (S ( 0.6158000000 1.0000000000)) (S ( 0.1055000000 1.0000000000)) (P ( 504.9000000000 0.0023372800) ( 119.4000000000 0.0185410000) ( 37.9600000000 0.0849693000) ( 13.9500000000 0.2446150000) ( 5.4570000000 0.4227660000) ( 2.1770000000 0.3684390000) ( 0.2877000000 -0.0037900500)) (P ( 504.9000000000 -0.0005552360) ( 119.4000000000 -0.0044591300) ( 37.9600000000 -0.0206350000) ( 13.9500000000 -0.0617694000) ( 5.4570000000 -0.1089240000) ( 2.1770000000 -0.1055990000) ( 0.2877000000 0.5769810000)) (P ( 0.8010000000 1.0000000000)) (P ( 0.0971400000 1.0000000000)) (F ( 0.4520000000 1.0000000000)) ) SULFUR:"H_CCPVTZ" = ( (S ( 374100.0000000000 0.0000542140) ( 56050.0000000000 0.0004208550) ( 12760.0000000000 0.0022069800) ( 3615.0000000000 0.0091925800) ( 1183.0000000000 0.0321123000) ( 428.8000000000 0.0946683000) ( 167.8000000000 0.2236300000) ( 69.4700000000 0.3743930000) ( 29.8400000000 0.3291080000) ( 12.7200000000 0.0847038000) ( 5.2440000000 0.0004408510) ( 2.2190000000 0.0016482700) ( 0.3490000000 0.0003013060)) (S ( 374100.0000000000 -0.0000149837) ( 56050.0000000000 -0.0001161980) ( 12760.0000000000 -0.0006115830) ( 3615.0000000000 -0.0025537000) ( 1183.0000000000 -0.0090870800) ( 428.8000000000 -0.0277045000) ( 167.8000000000 -0.0720020000) ( 69.4700000000 -0.1464390000) ( 29.8400000000 -0.1951500000) ( 12.7200000000 0.0081919300) ( 5.2440000000 0.5166010000) ( 2.2190000000 0.5421780000) ( 0.3490000000 -0.0091807200)) (S ( 374100.0000000000 0.0000043507) ( 56050.0000000000 0.0000337140) ( 12760.0000000000 0.0001776740) ( 3615.0000000000 0.0007411160) ( 1183.0000000000 0.0026459100) ( 428.8000000000 0.0080748700) ( 167.8000000000 0.0212276000) ( 69.4700000000 0.0438323000) ( 29.8400000000 0.0612716000) ( 12.7200000000 -0.0036151000) ( 5.2440000000 -0.2045100000) ( 2.2190000000 -0.3818710000) ( 0.3490000000 0.7141470000)) (S ( 0.7767000000 1.0000000000)) (S ( 0.1322000000 1.0000000000)) (P ( 574.4000000000 0.0024226400) ( 135.8000000000 0.0192796000) ( 43.1900000000 0.0885401000) ( 15.8700000000 0.2546540000) ( 6.2080000000 0.4339840000) ( 2.4830000000 0.3549530000) ( 0.3229000000 -0.0050297700)) (P ( 574.4000000000 -0.0006201020) ( 135.8000000000 -0.0049388200) ( 43.1900000000 -0.0232647000) ( 15.8700000000 -0.0685195000) ( 6.2080000000 -0.1238960000) ( 2.4830000000 -0.0969499000) ( 0.3229000000 0.5693940000)) (P ( 0.8688000000 1.0000000000)) (P ( 0.1098000000 1.0000000000)) (F ( 0.5570000000 1.0000000000)) ) CHLORINE:"H_CCPVTZ" = ( (S ( 456100.0000000000 0.0000492970) ( 68330.0000000000 0.0003830290) ( 15550.0000000000 0.0020085400) ( 4405.0000000000 0.0083855800) ( 1439.0000000000 0.0294703000) ( 520.4000000000 0.0878325000) ( 203.1000000000 0.2114730000) ( 83.9600000000 0.3653640000) ( 36.2000000000 0.3408840000) ( 15.8300000000 0.1021330000) ( 6.3340000000 0.0031167500) ( 2.6940000000 0.0010575100) ( 0.4313000000 0.0001561360)) (S ( 456100.0000000000 -0.0000138304) ( 68330.0000000000 -0.0001072790) ( 15550.0000000000 -0.0005650830) ( 4405.0000000000 -0.0023613500) ( 1439.0000000000 -0.0084588600) ( 520.4000000000 -0.0259638000) ( 203.1000000000 -0.0686362000) ( 83.9600000000 -0.1418740000) ( 36.2000000000 -0.1993190000) ( 15.8300000000 -0.0195662000) ( 6.3340000000 0.4997410000) ( 2.6940000000 0.5637360000) ( 0.4313000000 -0.0083509100)) (S ( 456100.0000000000 0.0000041855) ( 68330.0000000000 0.0000324395) ( 15550.0000000000 0.0001711050) ( 4405.0000000000 0.0007141760) ( 1439.0000000000 0.0025670500) ( 520.4000000000 0.0078855200) ( 203.1000000000 0.0210867000) ( 83.9600000000 0.0442264000) ( 36.2000000000 0.0651670000) ( 15.8300000000 0.0060301200) ( 6.3340000000 -0.2064950000) ( 2.6940000000 -0.4058710000) ( 0.4313000000 0.7256610000)) (S ( 0.9768000000 1.0000000000)) (S ( 0.1625000000 1.0000000000)) (P ( 663.3000000000 0.0024044800) ( 156.8000000000 0.0192148000) ( 49.9800000000 0.0885097000) ( 18.4200000000 0.2560200000) ( 7.2400000000 0.4369270000) ( 2.9220000000 0.3503340000) ( 0.3818000000 -0.0045842300)) (P ( 663.3000000000 -0.0006521450) ( 156.8000000000 -0.0051944500) ( 49.9800000000 -0.0246938000) ( 18.4200000000 -0.0728167000) ( 7.2400000000 -0.1340300000) ( 2.9220000000 -0.0947742000) ( 0.3818000000 0.5646670000)) (P ( 1.0220000000 1.0000000000)) (P ( 0.1301000000 1.0000000000)) (F ( 0.7060000000 1.0000000000)) ) ARGON:"H_CCPVTZ" = ( (S ( 545000.0000000000 0.0000455828) ( 81640.0000000000 0.0003541080) ( 18580.0000000000 0.0018579700) ( 5261.0000000000 0.0077685100) ( 1717.0000000000 0.0274232000) ( 619.9000000000 0.0823836000) ( 241.6000000000 0.2012300000) ( 99.7900000000 0.3567810000) ( 43.1500000000 0.3495630000) ( 19.1400000000 0.1182660000) ( 7.4880000000 0.0056019000) ( 3.2050000000 0.0004834730) ( 0.5204000000 0.0000292025)) (S ( 545000.0000000000 -0.0000129551) ( 81640.0000000000 -0.0001004280) ( 18580.0000000000 -0.0005295830) ( 5261.0000000000 -0.0022139600) ( 1717.0000000000 -0.0079684500) ( 619.9000000000 -0.0245803000) ( 241.6000000000 -0.0657798000) ( 99.7900000000 -0.1379420000) ( 43.1500000000 -0.2016300000) ( 19.1400000000 -0.0412834000) ( 7.4880000000 0.4846800000) ( 3.2050000000 0.5792240000) ( 0.5204000000 -0.0072755300)) (S ( 545000.0000000000 0.0000040499) ( 81640.0000000000 0.0000313691) ( 18580.0000000000 0.0001656460) ( 5261.0000000000 0.0006916620) ( 1717.0000000000 0.0024979000) ( 619.9000000000 0.0077107400) ( 241.6000000000 0.0208714000) ( 99.7900000000 0.0443965000) ( 43.1500000000 0.0680224000) ( 19.1400000000 0.0141350000) ( 7.4880000000 -0.2074890000) ( 3.2050000000 -0.4250450000) ( 0.5204000000 0.7336270000)) (S ( 1.1960000000 1.0000000000)) (S ( 0.1954000000 1.0000000000)) (P ( 761.8000000000 0.0023697600) ( 180.2000000000 0.0190199000) ( 57.5000000000 0.0880807000) ( 21.2400000000 0.2563770000) ( 8.3880000000 0.4387110000) ( 3.4160000000 0.3475690000) ( 0.4523000000 -0.0052388200)) (P ( 761.8000000000 -0.0006672110) ( 180.2000000000 -0.0053271700) ( 57.5000000000 -0.0255494000) ( 21.2400000000 -0.0757197000) ( 8.3880000000 -0.1411330000) ( 3.4160000000 -0.0932768000) ( 0.4523000000 0.5624500000)) (P ( 1.2060000000 1.0000000000)) (P ( 0.1545000000 1.0000000000)) (F ( 0.8900000000 1.0000000000)) ) CALCIUM:"H_CCPVTZ" = ( (S ( 2402654.0000000000 0.0000093100) ( 359789.8000000000 0.0000723900) ( 81878.0900000000 0.0003805900) ( 23190.8900000000 0.0016045300) ( 7565.2120000000 0.0058078000) ( 2730.7020000000 0.0185956600) ( 1064.6400000000 0.0528777600) ( 441.0605000000 0.1301514900) ( 191.7269000000 0.2593147100) ( 86.5377400000 0.3614961000) ( 39.8992400000 0.2641116000) ( 17.6406500000 0.0570939800) ( 8.3599900000 -0.0018220000) ( 3.9513300000 0.0021116400) ( 1.7134000000 -0.0009770900) ( 0.8108600000 0.0004558100) ( 0.3602500000 -0.0001914600) ( 0.0810800000 0.0000917100) ( 0.0448400000 -0.0000787400) ( 0.0214300000 0.0000223200)) (S ( 2402654.0000000000 -0.0000027000) ( 359789.8000000000 -0.0000210200) ( 81878.0900000000 -0.0001105200) ( 23190.8900000000 -0.0004666600) ( 7565.2120000000 -0.0016951300) ( 2730.7020000000 -0.0054834600) ( 1064.6400000000 -0.0159659700) ( 441.0605000000 -0.0415138400) ( 191.7269000000 -0.0928638700) ( 86.5377400000 -0.1653165700) ( 39.8992400000 -0.1766407400) ( 17.6406500000 0.0644442200) ( 8.3599900000 0.5108796200) ( 3.9513300000 0.4946380400) ( 1.7134000000 0.0875009400) ( 0.8108600000 -0.0035910100) ( 0.3602500000 0.0024922000) ( 0.0810800000 -0.0007582500) ( 0.0448400000 0.0006458700) ( 0.0214300000 -0.0001817400)) (S ( 2402654.0000000000 0.0000009300) ( 359789.8000000000 0.0000072500) ( 81878.0900000000 0.0000381100) ( 23190.8900000000 0.0001610100) ( 7565.2120000000 0.0005846600) ( 2730.7020000000 0.0018950400) ( 1064.6400000000 0.0055252500) ( 441.0605000000 0.0144701000) ( 191.7269000000 0.0327158100) ( 86.5377400000 0.0600319000) ( 39.8992400000 0.0670168300) ( 17.6406500000 -0.0259366000) ( 8.3599900000 -0.2674746700) ( 3.9513300000 -0.4269725600) ( 1.7134000000 0.0679640500) ( 0.8108600000 0.7102053900) ( 0.3602500000 0.4418005700) ( 0.0810800000 0.0219313900) ( 0.0448400000 -0.0118692400) ( 0.0214300000 0.0026527200)) (S ( 2402654.0000000000 -0.0000002200) ( 359789.8000000000 -0.0000017300) ( 81878.0900000000 -0.0000091000) ( 23190.8900000000 -0.0000384400) ( 7565.2120000000 -0.0001396500) ( 2730.7020000000 -0.0004525100) ( 1064.6400000000 -0.0013203800) ( 441.0605000000 -0.0034584100) ( 191.7269000000 -0.0078368600) ( 86.5377400000 -0.0144151700) ( 39.8992400000 -0.0162164800) ( 17.6406500000 0.0063442000) ( 8.3599900000 0.0674062600) ( 3.9513300000 0.1144739600) ( 1.7134000000 -0.0263447700) ( 0.8108600000 -0.2336988500) ( 0.3602500000 -0.3160753800) ( 0.0810800000 0.3328193600) ( 0.0448400000 0.5611103500) ( 0.0214300000 0.2808178100)) (S ( 0.0810800000 1.0000000000)) (S ( 0.0214300000 1.0000000000)) (P ( 4061.2890000000 0.0001979900) ( 962.2465000000 0.0017320800) ( 312.1686000000 0.0095337900) ( 118.7144000000 0.0383901200) ( 49.8067000000 0.1167588100) ( 22.2599800000 0.2562687400) ( 10.2876400000 0.3797808000) ( 4.8611540000 0.3082932600) ( 2.2487730000 0.0859209000) ( 1.0336620000 0.0021206700) ( 0.4641320000 0.0012888000) ( 0.1987500000 -0.0004683500) ( 0.0673900000 0.0001472800) ( 0.0254200000 -0.0000528800)) (P ( 4061.2890000000 -0.0000645500) ( 962.2465000000 -0.0005645800) ( 312.1686000000 -0.0031312500) ( 118.7144000000 -0.0127408600) ( 49.8067000000 -0.0399140300) ( 22.2599800000 -0.0905044800) ( 10.2876400000 -0.1426189800) ( 4.8611540000 -0.1098090400) ( 2.2487730000 0.1516249000) ( 1.0336620000 0.4617641100) ( 0.4641320000 0.4326003100) ( 0.1987500000 0.1112741100) ( 0.0673900000 0.0025287400) ( 0.0254200000 0.0007103200)) (P ( 4061.2890000000 0.0000133600) ( 962.2465000000 0.0001185200) ( 312.1686000000 0.0006487200) ( 118.7144000000 0.0026799300) ( 49.8067000000 0.0082851300) ( 22.2599800000 0.0192123500) ( 10.2876400000 0.0295498400) ( 4.8611540000 0.0243123200) ( 2.2487730000 -0.0411123000) ( 1.0336620000 -0.1041975800) ( 0.4641320000 -0.1503653700) ( 0.1987500000 0.0243172900) ( 0.0673900000 0.5986116400) ( 0.0254200000 0.4813557100)) (P ( 0.1987500000 1.0000000000)) (P ( 0.0254200000 1.0000000000)) (D ( 16.9462300000 0.0154730000) ( 4.4721200000 0.0788740000) ( 1.4380900000 0.2087800000) ( 0.4669900000 0.3302130000) ( 0.1415100000 0.4375620000) ( 0.0416400000 0.3747900000)) (D ( 0.1415100000 1.0000000000)) (D ( 0.0416400000 1.0000000000)) (F ( 0.1509000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPVQZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Quadruple Zeta (cc-pVQZ) Basis % ---------------------------------------------------------------------- % Elements Contraction References % H : (6s,3p,2d,1f) -> [4s,3p,2d,1f] T.H. Dunning, Jr. J. Chem. % Phys. 90, 1007 (1989). % He : (7s,3p,2d,1f) -> [4s,3p,2d,1f] D.E. Woon and T.H. Dunning, Jr. % % J. Chem. Phys. 100, 2975 (1994) % % Li - Ne: (12s,6p,3d,2f,1g) -> [5s,4p,3d,2f,1g] T.H. Dunning, Jr. J. Chem. % Phys. 90, 1007 (1989). % Na : (19s,12p,3d,2f,1g) -> [6s,5p,3d,2f,1g] D. Woon and T.H. Dunning, Jr. % Mg : (16s,12p,3d,2f,1g) -> [6s,5p,3d,2f,1g] (to be published) % Al - Ar: (16s,11p,3d,2f,1g) -> [6s,5p,3d,2f,1g] D.E. Woon and T.H. Dunning, Jr. % % J. Chem. Phys. 98, 1358 (1993). % % Ga - Kr: (21s,16p,12d,2f,1g)-> [7s,6p,4d,2f,1g] A.K. Wilson, D.E. Woon, K.A. % Peterson, T.H. Dunning, Jr., % J. Chem. Phys., 110, 7667 (1999 % ) % ** % Note that the Ga - Kr basis sets are intended for use with a 14 orbital % frozen core, i.e. (1s,2s,2px,2py,2pz,3s,3px,3py,3pz,3d(z2),3d(x2-y2),3dxy, % 3dxz,3dyz) atomic orbitals. This is not the default in Gaussian, which % keeps the 3d space active. % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPVQZ and CCPV((Q+D))z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 3, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PVQZ":puream = true HYDROGEN:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) HELIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) LITHIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) BERYLLIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) BORON:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) CARBON:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) NITROGEN:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) OXYGEN:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) FLUORINE:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) NEON:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) SODIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) MAGNESIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) ALUMINUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) SILICON:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) PHOSPHORUS :"CC-PVQZ" = ( (GET "H_CCPVQZ") ) SULFUR:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) CHLORINE:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) ARGON:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) CALCIUM:"CC-PVQZ" = ( (GET "H_CCPVQZ") ) %%%%%%%%%%%% ALIASES cc-pVQZ => CC-PVQZ %%%%%%%%%% "cc-pVQZ":puream = true HYDROGEN:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) HELIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) LITHIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) BERYLLIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) BORON:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) CARBON:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) NITROGEN:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) OXYGEN:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) FLUORINE:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) NEON:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) SODIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) MAGNESIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) ALUMINUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) SILICON:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) PHOSPHORUS :"cc-pVQZ" = ( (GET "H_CCPVQZ") ) SULFUR:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) CHLORINE:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) ARGON:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) CALCIUM:"cc-pVQZ" = ( (GET "H_CCPVQZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV((Q+D))Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV(Q+D)Z":puream = true ALUMINUM:"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) SILICON:"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) PHOSPHORUS :"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) SULFUR:"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) CHLORINE:"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) ARGON:"CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) %%%%%%%%% ALIASES cc-pV(Q+D)Z => CC-PV(Q+D)Z %%%%%%%%% "cc-pV(Q+d)Z":puream = true ALUMINUM:"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) SILICON:"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) PHOSPHORUS :"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) SULFUR:"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) CHLORINE:"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) ARGON:"cc-pV(Q+d)Z" = ( (GET "H_CCPVQ_PLUS_DZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPVQZ Basis Sets %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"H_CCPVQZ" = ( (S ( 82.64000000 0.00200600) ( 12.41000000 0.01534300) ( 2.82400000 0.07557900) ( 0.79770000 0.25687500) ( 0.25810000 0.49736800) ( 0.08989000 0.29613300)) (S ( 0.79770000 1.00000000)) (S ( 0.25810000 1.00000000)) (S ( 0.08989000 1.00000000)) (P ( 2.29200000 1.00000000)) (P ( 0.83800000 1.00000000)) (P ( 0.29200000 1.00000000)) (D ( 2.06200000 1.00000000)) (D ( 0.66200000 1.00000000)) (F ( 1.39700000 1.00000000)) ) HELIUM:"H_CCPVQZ" = ( (S ( 528.50000000 0.00094000) ( 79.31000000 0.00721400) ( 18.05000000 0.03597500) ( 5.08500000 0.12778200) ( 1.60900000 0.30847000) ( 0.53630000 0.45305200) ( 0.18330000 0.23888400)) (S ( 1.60900000 1.00000000)) (S ( 0.53630000 1.00000000)) (S ( 0.18330000 1.00000000)) (P ( 5.99400000 1.00000000)) (P ( 1.74500000 1.00000000)) (P ( 0.56000000 1.00000000)) (D ( 4.29900000 1.00000000)) (D ( 1.22300000 1.00000000)) (F ( 2.68000000 1.00000000)) ) LITHIUM:"H_CCPVQZ" = ( (S ( 6601.0000000000 0.0001170000) ( 989.7000000000 0.0009110000) ( 225.7000000000 0.0047280000) ( 64.2900000000 0.0191970000) ( 21.1800000000 0.0630470000) ( 7.7240000000 0.1632080000) ( 3.0030000000 0.3148270000) ( 1.2120000000 0.3939360000) ( 0.4930000000 0.1969180000)) (S ( 6601.0000000000 -0.0000180000) ( 989.7000000000 -0.0001420000) ( 225.7000000000 -0.0007410000) ( 64.2900000000 -0.0030200000) ( 21.1800000000 -0.0101230000) ( 7.7240000000 -0.0270940000) ( 3.0030000000 -0.0573590000) ( 1.2120000000 -0.0938950000) ( 0.4930000000 -0.1210910000)) (S ( 0.0951500000 1.0000000000)) (S ( 0.0479100000 1.0000000000)) (S ( 0.0222000000 1.0000000000)) (P ( 6.2500000000 0.0033880000) ( 1.3700000000 0.0193160000) ( 0.3672000000 0.0791040000)) (P ( 0.1192000000 1.0000000000)) (P ( 0.0447400000 1.0000000000)) (P ( 0.0179500000 1.0000000000)) (D ( 0.3440000000 1.0000000000)) (D ( 0.1530000000 1.0000000000)) (D ( 0.0680000000 1.0000000000)) (F ( 0.2460000000 1.0000000000)) (F ( 0.1292000000 1.0000000000)) (G ( 0.2380000000 1.0000000000)) ) BERYLLIUM:"H_CCPVQZ" = ( (S ( 14630.0000000000 0.0000920000) ( 2191.0000000000 0.0007130000) ( 498.2000000000 0.0037350000) ( 140.9000000000 0.0154680000) ( 45.8600000000 0.0528740000) ( 16.4700000000 0.1456940000) ( 6.3190000000 0.3026810000) ( 2.5350000000 0.4049360000) ( 1.0350000000 0.2223870000)) (S ( 14630.0000000000 -0.0000170000) ( 2191.0000000000 -0.0001300000) ( 498.2000000000 -0.0006790000) ( 140.9000000000 -0.0028570000) ( 45.8600000000 -0.0098130000) ( 16.4700000000 -0.0286090000) ( 6.3190000000 -0.0637600000) ( 2.5350000000 -0.1172310000) ( 1.0350000000 -0.1212020000)) (S ( 0.2528000000 1.0000000000)) (S ( 0.1052000000 1.0000000000)) (S ( 0.0426100000 1.0000000000)) (P ( 14.0300000000 0.0040990000) ( 3.1680000000 0.0256260000) ( 0.9024000000 0.1037680000)) (P ( 0.3036000000 1.0000000000)) (P ( 0.1130000000 1.0000000000)) (P ( 0.0428600000 1.0000000000)) (D ( 1.0720000000 1.0000000000)) (D ( 0.4410000000 1.0000000000)) (D ( 0.1811000000 1.0000000000)) (F ( 0.4810000000 1.0000000000)) (F ( 0.2550000000 1.0000000000)) (G ( 0.4150000000 1.0000000000)) ) BORON:"H_CCPVQZ" = ( (S ( 23870.0000000000 0.0000880000) ( 3575.0000000000 0.0006870000) ( 812.8000000000 0.0036000000) ( 229.7000000000 0.0149490000) ( 74.6900000000 0.0514350000) ( 26.8100000000 0.1433020000) ( 10.3200000000 0.3009350000) ( 4.1780000000 0.4035260000) ( 1.7270000000 0.2253400000)) (S ( 23870.0000000000 -0.0000180000) ( 3575.0000000000 -0.0001390000) ( 812.8000000000 -0.0007250000) ( 229.7000000000 -0.0030630000) ( 74.6900000000 -0.0105810000) ( 26.8100000000 -0.0313650000) ( 10.3200000000 -0.0710120000) ( 4.1780000000 -0.1321030000) ( 1.7270000000 -0.1230720000)) (S ( 0.4704000000 1.0000000000)) (S ( 0.1896000000 1.0000000000)) (S ( 0.0739400000 1.0000000000)) (P ( 22.2600000000 0.0050950000) ( 5.0580000000 0.0332060000) ( 1.4870000000 0.1323140000)) (P ( 0.5071000000 1.0000000000)) (P ( 0.1812000000 1.0000000000)) (P ( 0.0646300000 1.0000000000)) (D ( 1.1100000000 1.0000000000)) (D ( 0.4020000000 1.0000000000)) (D ( 0.1450000000 1.0000000000)) (F ( 0.8820000000 1.0000000000)) (F ( 0.3110000000 1.0000000000)) (G ( 0.6730000000 1.0000000000)) ) CARBON:"H_CCPVQZ" = ( (S ( 33980.0000000000 0.0000910000) ( 5089.0000000000 0.0007040000) ( 1157.0000000000 0.0036930000) ( 326.6000000000 0.0153600000) ( 106.1000000000 0.0529290000) ( 38.1100000000 0.1470430000) ( 14.7500000000 0.3056310000) ( 6.0350000000 0.3993450000) ( 2.5300000000 0.2170510000)) (S ( 33980.0000000000 -0.0000190000) ( 5089.0000000000 -0.0001510000) ( 1157.0000000000 -0.0007850000) ( 326.6000000000 -0.0033240000) ( 106.1000000000 -0.0115120000) ( 38.1100000000 -0.0341600000) ( 14.7500000000 -0.0771730000) ( 6.0350000000 -0.1414930000) ( 2.5300000000 -0.1180190000)) (S ( 0.7355000000 1.0000000000)) (S ( 0.2905000000 1.0000000000)) (S ( 0.1111000000 1.0000000000)) (P ( 34.5100000000 0.0053780000) ( 7.9150000000 0.0361320000) ( 2.3680000000 0.1424930000)) (P ( 0.8132000000 1.0000000000)) (P ( 0.2890000000 1.0000000000)) (P ( 0.1007000000 1.0000000000)) (D ( 1.8480000000 1.0000000000)) (D ( 0.6490000000 1.0000000000)) (D ( 0.2280000000 1.0000000000)) (F ( 1.4190000000 1.0000000000)) (F ( 0.4850000000 1.0000000000)) (G ( 1.0110000000 1.0000000000)) ) NITROGEN:"H_CCPVQZ" = ( (S ( 45840.0000000000 0.0000920000) ( 6868.0000000000 0.0007170000) ( 1563.0000000000 0.0037490000) ( 442.4000000000 0.0155320000) ( 144.3000000000 0.0531460000) ( 52.1800000000 0.1467870000) ( 20.3400000000 0.3046630000) ( 8.3810000000 0.3976840000) ( 3.5290000000 0.2176410000)) (S ( 45840.0000000000 -0.0000200000) ( 6868.0000000000 -0.0001590000) ( 1563.0000000000 -0.0008240000) ( 442.4000000000 -0.0034780000) ( 144.3000000000 -0.0119660000) ( 52.1800000000 -0.0353880000) ( 20.3400000000 -0.0800770000) ( 8.3810000000 -0.1467220000) ( 3.5290000000 -0.1163600000)) (S ( 1.0540000000 1.0000000000)) (S ( 0.4118000000 1.0000000000)) (S ( 0.1552000000 1.0000000000)) (P ( 49.3300000000 0.0055330000) ( 11.3700000000 0.0379620000) ( 3.4350000000 0.1490280000)) (P ( 1.1820000000 1.0000000000)) (P ( 0.4173000000 1.0000000000)) (P ( 0.1428000000 1.0000000000)) (D ( 2.8370000000 1.0000000000)) (D ( 0.9680000000 1.0000000000)) (D ( 0.3350000000 1.0000000000)) (F ( 2.0270000000 1.0000000000)) (F ( 0.6850000000 1.0000000000)) (G ( 1.4270000000 1.0000000000)) ) OXYGEN:"H_CCPVQZ" = ( (S ( 61420.0000000000 0.0000900000) ( 9199.0000000000 0.0006980000) ( 2091.0000000000 0.0036640000) ( 590.9000000000 0.0152180000) ( 192.3000000000 0.0524230000) ( 69.3200000000 0.1459210000) ( 26.9700000000 0.3052580000) ( 11.1000000000 0.3985080000) ( 4.6820000000 0.2169800000)) (S ( 61420.0000000000 -0.0000200000) ( 9199.0000000000 -0.0001590000) ( 2091.0000000000 -0.0008290000) ( 590.9000000000 -0.0035080000) ( 192.3000000000 -0.0121560000) ( 69.3200000000 -0.0362610000) ( 26.9700000000 -0.0829920000) ( 11.1000000000 -0.1520900000) ( 4.6820000000 -0.1153310000)) (S ( 1.4280000000 1.0000000000)) (S ( 0.5547000000 1.0000000000)) (S ( 0.2067000000 1.0000000000)) (P ( 63.4200000000 0.0060440000) ( 14.6600000000 0.0417990000) ( 4.4590000000 0.1611430000)) (P ( 1.5310000000 1.0000000000)) (P ( 0.5302000000 1.0000000000)) (P ( 0.1750000000 1.0000000000)) (D ( 3.7750000000 1.0000000000)) (D ( 1.3000000000 1.0000000000)) (D ( 0.4440000000 1.0000000000)) (F ( 2.6660000000 1.0000000000)) (F ( 0.8590000000 1.0000000000)) (G ( 1.8460000000 1.0000000000)) ) FLUORINE:"H_CCPVQZ" = ( (S ( 74530.0000000000 0.0000950000) ( 11170.0000000000 0.0007380000) ( 2543.0000000000 0.0038580000) ( 721.0000000000 0.0159260000) ( 235.9000000000 0.0542890000) ( 85.6000000000 0.1495130000) ( 33.5500000000 0.3082520000) ( 13.9300000000 0.3948530000) ( 5.9150000000 0.2110310000)) (S ( 74530.0000000000 -0.0000220000) ( 11170.0000000000 -0.0001720000) ( 2543.0000000000 -0.0008910000) ( 721.0000000000 -0.0037480000) ( 235.9000000000 -0.0128620000) ( 85.6000000000 -0.0380610000) ( 33.5500000000 -0.0862390000) ( 13.9300000000 -0.1558650000) ( 5.9150000000 -0.1109140000)) (S ( 1.8430000000 1.0000000000)) (S ( 0.7124000000 1.0000000000)) (S ( 0.2637000000 1.0000000000)) (P ( 80.3900000000 0.0063470000) ( 18.6300000000 0.0442040000) ( 5.6940000000 0.1685140000)) (P ( 1.9530000000 1.0000000000)) (P ( 0.6702000000 1.0000000000)) (P ( 0.2166000000 1.0000000000)) (D ( 5.0140000000 1.0000000000)) (D ( 1.7250000000 1.0000000000)) (D ( 0.5860000000 1.0000000000)) (F ( 3.5620000000 1.0000000000)) (F ( 1.1480000000 1.0000000000)) (G ( 2.3760000000 1.0000000000)) ) NEON:"H_CCPVQZ" = ( (S ( 99920.00000000 0.00008600) ( 14960.00000000 0.00066900) ( 3399.00000000 0.00351800) ( 958.90000000 0.01466700) ( 311.20000000 0.05096200) ( 111.70000000 0.14374400) ( 43.32000000 0.30456200) ( 17.80000000 0.40010500) ( 7.50300000 0.21864400) ( 2.33700000 0.01866400) ( 0.90010000 -0.00216700) ( 0.33010000 0.00095100)) (S ( 99920.00000000 -0.00002000) ( 14960.00000000 -0.00015800) ( 3399.00000000 -0.00082400) ( 958.90000000 -0.00350000) ( 311.20000000 -0.01223300) ( 111.70000000 -0.03701700) ( 43.32000000 -0.08611300) ( 17.80000000 -0.15838100) ( 7.50300000 -0.11428800) ( 2.33700000 0.29819100) ( 0.90010000 0.58578400) ( 0.33010000 0.27246700)) (S ( 2.33700000 1.00000000)) (S ( 0.90010000 1.00000000)) (S ( 0.33010000 1.00000000)) (P ( 99.68000000 0.00656600) ( 23.15000000 0.04597900) ( 7.10800000 0.17341900) ( 2.44100000 0.36457100) ( 0.83390000 0.43818500) ( 0.26620000 0.24168000)) (P ( 2.44100000 1.00000000)) (P ( 0.83390000 1.00000000)) (P ( 0.26620000 1.00000000)) (D ( 6.47100000 1.00000000)) (D ( 2.21300000 1.00000000)) (D ( 0.74700000 1.00000000)) (F ( 4.65700000 1.00000000)) (F ( 1.52400000 1.00000000)) (G ( 2.98300000 1.00000000)) ) SODIUM:"H_CCPVQZ" = ( (S ( 1224000.0000000000 0.0000047889) ( 183200.0000000000 0.0000372395) ( 41700.0000000000 0.0001958310) ( 11810.0000000000 0.0008266980) ( 3853.0000000000 0.0030025100) ( 1391.0000000000 0.0097031000) ( 542.5000000000 0.0282337000) ( 224.9000000000 0.0732058000) ( 97.9300000000 0.1628970000) ( 44.3100000000 0.2887080000) ( 20.6500000000 0.3468290000) ( 9.7290000000 0.2068650000) ( 4.2280000000 0.0328009000) ( 1.9690000000 -0.0006477360) ( 0.8890000000 0.0014587800) ( 0.3964000000 -0.0001783460)) (S ( 1224000.0000000000 -0.0000011696) ( 183200.0000000000 -0.0000090911) ( 41700.0000000000 -0.0000478499) ( 11810.0000000000 -0.0002019620) ( 3853.0000000000 -0.0007358370) ( 1391.0000000000 -0.0023874600) ( 542.5000000000 -0.0070496900) ( 224.9000000000 -0.0187856000) ( 97.9300000000 -0.0446153000) ( 44.3100000000 -0.0897741000) ( 20.6500000000 -0.1429400000) ( 9.7290000000 -0.1243150000) ( 4.2280000000 0.0999648000) ( 1.9690000000 0.4170800000) ( 0.8890000000 0.4751230000) ( 0.3964000000 0.1632680000)) (S ( 1224000.0000000000 0.0000001759) ( 183200.0000000000 0.0000013659) ( 41700.0000000000 0.0000071980) ( 11810.0000000000 0.0000303349) ( 3853.0000000000 0.0001107520) ( 1391.0000000000 0.0003585960) ( 542.5000000000 0.0010627200) ( 224.9000000000 0.0028268700) ( 97.9300000000 0.0067674200) ( 44.3100000000 0.0136480000) ( 20.6500000000 0.0222814000) ( 9.7290000000 0.0196011000) ( 4.2280000000 -0.0167708000) ( 1.9690000000 -0.0773734000) ( 0.8890000000 -0.1135010000) ( 0.3964000000 -0.1391300000)) (S ( 0.0699300000 1.0000000000)) (S ( 0.0328900000 1.0000000000)) (S ( 0.0161200000 1.0000000000)) (P ( 413.4000000000 0.0009081960) ( 97.9800000000 0.0074177300) ( 31.3700000000 0.0357464000) ( 11.6200000000 0.1185200000) ( 4.6710000000 0.2614030000) ( 1.9180000000 0.3783950000) ( 0.7775000000 0.3346320000) ( 0.3013000000 0.1268440000) ( 0.2275000000 -0.0147117000)) (P ( 413.4000000000 -0.0000901741) ( 97.9800000000 -0.0007393420) ( 31.3700000000 -0.0035730900) ( 11.6200000000 -0.0120142000) ( 4.6710000000 -0.0267178000) ( 1.9180000000 -0.0392753000) ( 0.7775000000 -0.0376083000) ( 0.3013000000 -0.0433228000) ( 0.2275000000 0.0518003000)) (P ( 0.0752700000 1.0000000000)) (P ( 0.0312600000 1.0000000000)) (P ( 0.0134200000 1.0000000000)) (D ( 0.1538000000 1.0000000000)) (D ( 0.0865000000 1.0000000000)) (D ( 0.0487000000 1.0000000000)) (F ( 0.1912000000 1.0000000000)) (F ( 0.1036000000 1.0000000000)) (G ( 0.1722000000 1.0000000000)) ) MAGNESIUM:"H_CCPVQZ" = ( (S ( 327600.0000000000 0.0000309608) ( 49050.0000000000 0.0002409540) ( 11150.0000000000 0.0012666000) ( 3152.0000000000 0.0053335900) ( 1025.0000000000 0.0190770000) ( 368.8000000000 0.0588058000) ( 143.2000000000 0.1514540000) ( 58.9600000000 0.3007160000) ( 25.4000000000 0.3811490000) ( 11.1500000000 0.2135840000) ( 4.0040000000 0.0231210000) ( 1.7010000000 -0.0023075700) ( 0.7060000000 0.0012890000)) (S ( 327600.0000000000 -0.0000078317) ( 49050.0000000000 -0.0000607935) ( 11150.0000000000 -0.0003211970) ( 3152.0000000000 -0.0013495500) ( 1025.0000000000 -0.0049057000) ( 368.8000000000 -0.0153561000) ( 143.2000000000 -0.0423409000) ( 58.9600000000 -0.0940603000) ( 25.4000000000 -0.1634250000) ( 11.1500000000 -0.1247540000) ( 4.0040000000 0.2356230000) ( 1.7010000000 0.5775630000) ( 0.7060000000 0.3352320000)) (S ( 327600.0000000000 0.0000015091) ( 49050.0000000000 0.0000117134) ( 11150.0000000000 0.0000618980) ( 3152.0000000000 0.0002600880) ( 1025.0000000000 0.0009462180) ( 368.8000000000 0.0029659500) ( 143.2000000000 0.0082124500) ( 58.9600000000 0.0183977000) ( 25.4000000000 0.0326657000) ( 11.1500000000 0.0257315000) ( 4.0040000000 -0.0535351000) ( 1.7010000000 -0.1568950000) ( 0.7060000000 -0.2066590000)) (S ( 0.1410000000 1.0000000000)) (S ( 0.0680800000 1.0000000000)) (S ( 0.0306300000 1.0000000000)) (P ( 539.6000000000 0.0008339690) ( 127.9000000000 0.0068921500) ( 41.0200000000 0.0337874000) ( 15.2500000000 0.1144010000) ( 6.1660000000 0.2595140000) ( 2.5610000000 0.3850950000) ( 1.0600000000 0.3353730000) ( 0.4176000000 0.1106410000) ( 0.2690000000 -0.0121315000)) (P ( 539.6000000000 -0.0001320760) ( 127.9000000000 -0.0010953800) ( 41.0200000000 -0.0053949500) ( 15.2500000000 -0.0185572000) ( 6.1660000000 -0.0427375000) ( 2.5610000000 -0.0647684000) ( 1.0600000000 -0.0627818000) ( 0.4176000000 -0.0244912000) ( 0.2690000000 0.1047610000)) (P ( 0.1223000000 1.0000000000)) (P ( 0.0547600000 1.0000000000)) (P ( 0.0238800000 1.0000000000)) (D ( 0.1060000000 1.0000000000)) (D ( 0.1944000000 1.0000000000)) (D ( 0.3570000000 1.0000000000)) (F ( 0.1810000000 1.0000000000)) (F ( 0.3590000000 1.0000000000)) (G ( 0.3070000000 1.0000000000)) ) ALUMINUM:"H_CCPVQZ" = ( (S ( 419600.0000000000 0.0000278219) ( 62830.0000000000 0.0002163300) ( 14290.0000000000 0.0011375400) ( 4038.0000000000 0.0047963500) ( 1312.0000000000 0.0172389000) ( 470.5000000000 0.0538066000) ( 181.8000000000 0.1413260000) ( 74.4600000000 0.2892680000) ( 31.9000000000 0.3848250000) ( 13.9600000000 0.2328520000) ( 5.1800000000 0.0293330000) ( 2.2650000000 -0.0030057400) ( 0.9664000000 0.0016667300)) (S ( 419600.0000000000 -0.0000072375) ( 62830.0000000000 -0.0000561733) ( 14290.0000000000 -0.0002965280) ( 4038.0000000000 -0.0012491300) ( 1312.0000000000 -0.0045510100) ( 470.5000000000 -0.0144393000) ( 181.8000000000 -0.0403464000) ( 74.4600000000 -0.0922618000) ( 31.9000000000 -0.1645100000) ( 13.9600000000 -0.1412960000) ( 5.1800000000 0.1953650000) ( 2.2650000000 0.5724750000) ( 0.9664000000 0.3740410000)) (S ( 419600.0000000000 0.0000016715) ( 62830.0000000000 0.0000129641) ( 14290.0000000000 0.0000685101) ( 4038.0000000000 0.0002882740) ( 1312.0000000000 0.0010527600) ( 470.5000000000 0.0033387800) ( 181.8000000000 0.0093921700) ( 74.4600000000 0.0216047000) ( 31.9000000000 0.0395873000) ( 13.9600000000 0.0349180000) ( 5.1800000000 -0.0528415000) ( 2.2650000000 -0.1918780000) ( 0.9664000000 -0.2541150000)) (S ( 0.2447000000 1.0000000000)) (S ( 0.1184000000 1.0000000000)) (S ( 0.0502100000 1.0000000000)) (P ( 891.3000000000 0.0004917550) ( 211.3000000000 0.0041584300) ( 68.2800000000 0.0212538000) ( 25.7000000000 0.0764058000) ( 10.6300000000 0.1942770000) ( 4.6020000000 0.3344280000) ( 2.0150000000 0.3750260000) ( 0.8706000000 0.2040410000)) (P ( 891.3000000000 -0.0000888695) ( 211.3000000000 -0.0007458230) ( 68.2800000000 -0.0038702500) ( 25.7000000000 -0.0139350000) ( 10.6300000000 -0.0366860000) ( 4.6020000000 -0.0627797000) ( 2.0150000000 -0.0789602000) ( 0.8706000000 -0.0288589000)) (P ( 0.2972000000 1.0000000000)) (P ( 0.1100000000 1.0000000000)) (P ( 0.0398900000 1.0000000000)) (D ( 0.0804000000 1.0000000000)) (D ( 0.1990000000 1.0000000000)) (D ( 0.4940000000 1.0000000000)) (F ( 0.1540000000 1.0000000000)) (F ( 0.4010000000 1.0000000000)) (G ( 0.3570000000 1.0000000000)) ) SILICON:"H_CCPVQZ" = ( (S ( 513000.0000000000 0.0000260920) ( 76820.0000000000 0.0002029050) ( 17470.0000000000 0.0010671500) ( 4935.0000000000 0.0045059700) ( 1602.0000000000 0.0162359000) ( 574.1000000000 0.0508913000) ( 221.5000000000 0.1351550000) ( 90.5400000000 0.2812920000) ( 38.7400000000 0.3853360000) ( 16.9500000000 0.2456510000) ( 6.4520000000 0.0343145000) ( 2.8740000000 -0.0033488400) ( 1.2500000000 0.0018762500)) (S ( 513000.0000000000 -0.0000069488) ( 76820.0000000000 -0.0000539641) ( 17470.0000000000 -0.0002847160) ( 4935.0000000000 -0.0012020300) ( 1602.0000000000 -0.0043839700) ( 574.1000000000 -0.0139776000) ( 221.5000000000 -0.0393516000) ( 90.5400000000 -0.0914283000) ( 38.7400000000 -0.1656090000) ( 16.9500000000 -0.1525050000) ( 6.4520000000 0.1685240000) ( 2.8740000000 0.5692840000) ( 1.2500000000 0.3980560000)) (S ( 513000.0000000000 0.0000017807) ( 76820.0000000000 0.0000138148) ( 17470.0000000000 0.0000730005) ( 4935.0000000000 0.0003076660) ( 1602.0000000000 0.0011256300) ( 574.1000000000 0.0035843500) ( 221.5000000000 0.0101728000) ( 90.5400000000 0.0237520000) ( 38.7400000000 0.0443483000) ( 16.9500000000 0.0419041000) ( 6.4520000000 -0.0502504000) ( 2.8740000000 -0.2165780000) ( 1.2500000000 -0.2864480000)) (S ( 0.3599000000 1.0000000000)) (S ( 0.1699000000 1.0000000000)) (S ( 0.0706600000 1.0000000000)) (P ( 1122.0000000000 0.0004481430) ( 266.0000000000 0.0038163900) ( 85.9200000000 0.0198105000) ( 32.3300000000 0.0727017000) ( 13.3700000000 0.1898390000) ( 5.8000000000 0.3356720000) ( 2.5590000000 0.3793650000) ( 1.1240000000 0.2011930000)) (P ( 1122.0000000000 -0.0000964883) ( 266.0000000000 -0.0008119710) ( 85.9200000000 -0.0043008700) ( 32.3300000000 -0.0157502000) ( 13.3700000000 -0.0429541000) ( 5.8000000000 -0.0752574000) ( 2.5590000000 -0.0971446000) ( 1.1240000000 -0.0227507000)) (P ( 0.3988000000 1.0000000000)) (P ( 0.1533000000 1.0000000000)) (P ( 0.0572800000 1.0000000000)) (D ( 0.1200000000 1.0000000000)) (D ( 0.3020000000 1.0000000000)) (D ( 0.7600000000 1.0000000000)) (F ( 0.2120000000 1.0000000000)) (F ( 0.5410000000 1.0000000000)) (G ( 0.4610000000 1.0000000000)) ) PHOSPHORUS:"H_CCPVQZ" = ( (S ( 615200.0000000000 0.0000247450) ( 92120.0000000000 0.0001924650) ( 20950.0000000000 0.0010120200) ( 5920.0000000000 0.0042726100) ( 1922.0000000000 0.0154161000) ( 688.0000000000 0.0485976000) ( 265.0000000000 0.1300600000) ( 108.2000000000 0.2745140000) ( 46.2200000000 0.3854020000) ( 20.2300000000 0.2559340000) ( 7.8590000000 0.0391237000) ( 3.5470000000 -0.0036801000) ( 1.5640000000 0.0020821100)) (S ( 615200.0000000000 -0.0000067221) ( 92120.0000000000 -0.0000522311) ( 20950.0000000000 -0.0002753610) ( 5920.0000000000 -0.0011630700) ( 1922.0000000000 -0.0042428100) ( 688.0000000000 -0.0136114000) ( 265.0000000000 -0.0385114000) ( 108.2000000000 -0.0906643000) ( 46.2200000000 -0.1665840000) ( 20.2300000000 -0.1614470000) ( 7.8590000000 0.1467810000) ( 3.5470000000 0.5666820000) ( 1.5640000000 0.4164330000)) (S ( 615200.0000000000 0.0000018474) ( 92120.0000000000 0.0000143380) ( 20950.0000000000 0.0000757228) ( 5920.0000000000 0.0003192050) ( 1922.0000000000 0.0011685100) ( 688.0000000000 0.0037426700) ( 265.0000000000 0.0106817000) ( 108.2000000000 0.0252657000) ( 46.2200000000 0.0479283000) ( 20.2300000000 0.0477096000) ( 7.8590000000 -0.0466525000) ( 3.5470000000 -0.2349680000) ( 1.5640000000 -0.3113370000)) (S ( 0.4888000000 1.0000000000)) (S ( 0.2266000000 1.0000000000)) (S ( 0.0933100000 1.0000000000)) (P ( 1367.0000000000 0.0004210150) ( 324.0000000000 0.0036098500) ( 104.6000000000 0.0189217000) ( 39.3700000000 0.0705560000) ( 16.2600000000 0.1881570000) ( 7.0560000000 0.3387090000) ( 3.1300000000 0.3819430000) ( 1.3940000000 0.1952610000)) (P ( 1367.0000000000 -0.0001008270) ( 324.0000000000 -0.0008544990) ( 104.6000000000 -0.0045711600) ( 39.3700000000 -0.0170327000) ( 16.2600000000 -0.0475204000) ( 7.0560000000 -0.0852786000) ( 3.1300000000 -0.1096760000) ( 1.3940000000 -0.0161181000)) (P ( 0.5179000000 1.0000000000)) (P ( 0.2032000000 1.0000000000)) (P ( 0.0769800000 1.0000000000)) (D ( 0.1650000000 1.0000000000)) (D ( 0.4130000000 1.0000000000)) (D ( 1.0360000000 1.0000000000)) (F ( 0.2800000000 1.0000000000)) (F ( 0.7030000000 1.0000000000)) (G ( 0.5970000000 1.0000000000)) ) SULFUR:"H_CCPVQZ" = ( (S ( 727800.0000000000 0.0000236025) ( 109000.0000000000 0.0001834820) ( 24800.0000000000 0.0009642780) ( 7014.0000000000 0.0040653700) ( 2278.0000000000 0.0146973000) ( 814.7000000000 0.0465081000) ( 313.4000000000 0.1255080000) ( 127.7000000000 0.2684330000) ( 54.4800000000 0.3848090000) ( 23.8500000000 0.2653720000) ( 9.4280000000 0.0437326000) ( 4.2900000000 -0.0037880700) ( 1.9090000000 0.0021808300)) (S ( 727800.0000000000 -0.0000065218) ( 109000.0000000000 -0.0000506631) ( 24800.0000000000 -0.0002668330) ( 7014.0000000000 -0.0011260100) ( 2278.0000000000 -0.0041118600) ( 814.7000000000 -0.0132454000) ( 313.4000000000 -0.0377004000) ( 127.7000000000 -0.0898554000) ( 54.4800000000 -0.1670980000) ( 23.8500000000 -0.1693540000) ( 9.4280000000 0.1278240000) ( 4.2900000000 0.5648620000) ( 1.9090000000 0.4317670000)) (S ( 727800.0000000000 0.0000018941) ( 109000.0000000000 0.0000146948) ( 24800.0000000000 0.0000775460) ( 7014.0000000000 0.0003265090) ( 2278.0000000000 0.0011968600) ( 814.7000000000 0.0038479900) ( 313.4000000000 0.0110539000) ( 127.7000000000 0.0264645000) ( 54.4800000000 0.0508771000) ( 23.8500000000 0.0530030000) ( 9.4280000000 -0.0425518000) ( 4.2900000000 -0.2508530000) ( 1.9090000000 -0.3331520000)) (S ( 0.6270000000 1.0000000000)) (S ( 0.2873000000 1.0000000000)) (S ( 0.1172000000 1.0000000000)) (P ( 1546.0000000000 0.0004411830) ( 366.4000000000 0.0037757100) ( 118.4000000000 0.0198360000) ( 44.5300000000 0.0742063000) ( 18.3800000000 0.1973270000) ( 7.9650000000 0.3518510000) ( 3.5410000000 0.3786870000) ( 1.5910000000 0.1709310000)) (P ( 1546.0000000000 -0.0001131100) ( 366.4000000000 -0.0009585810) ( 118.4000000000 -0.0051347100) ( 44.5300000000 -0.0192641000) ( 18.3800000000 -0.0535980000) ( 7.9650000000 -0.0960333000) ( 3.5410000000 -0.1181830000) ( 1.5910000000 0.0092319400)) (P ( 0.6205000000 1.0000000000)) (P ( 0.2420000000 1.0000000000)) (P ( 0.0901400000 1.0000000000)) (D ( 0.2030000000 1.0000000000)) (D ( 0.5040000000 1.0000000000)) (D ( 1.2500000000 1.0000000000)) (F ( 0.3350000000 1.0000000000)) (F ( 0.8690000000 1.0000000000)) (G ( 0.6830000000 1.0000000000)) ) CHLORINE:"H_CCPVQZ" = ( (S ( 834900.0000000000 0.0000231688) ( 125000.0000000000 0.0001801540) ( 28430.0000000000 0.0009477820) ( 8033.0000000000 0.0040013900) ( 2608.0000000000 0.0144629000) ( 933.9000000000 0.0456586000) ( 360.0000000000 0.1232480000) ( 147.0000000000 0.2643690000) ( 62.8800000000 0.3829890000) ( 27.6000000000 0.2709340000) ( 11.0800000000 0.0471404000) ( 5.0750000000 -0.0037176600) ( 2.2780000000 0.0021915800)) (S ( 834900.0000000000 -0.0000064965) ( 125000.0000000000 -0.0000504895) ( 28430.0000000000 -0.0002661130) ( 8033.0000000000 -0.0011249900) ( 2608.0000000000 -0.0041049700) ( 933.9000000000 -0.0131987000) ( 360.0000000000 -0.0375342000) ( 147.0000000000 -0.0897233000) ( 62.8800000000 -0.1676710000) ( 27.6000000000 -0.1747630000) ( 11.0800000000 0.1149090000) ( 5.0750000000 0.5636180000) ( 2.2780000000 0.4416060000)) (S ( 834900.0000000000 0.0000019665) ( 125000.0000000000 0.0000152620) ( 28430.0000000000 0.0000806086) ( 8033.0000000000 0.0003399600) ( 2608.0000000000 0.0012455100) ( 933.9000000000 0.0039961200) ( 360.0000000000 0.0114751000) ( 147.0000000000 0.0275504000) ( 62.8800000000 0.0532917000) ( 27.6000000000 0.0571246000) ( 11.0800000000 -0.0395201000) ( 5.0750000000 -0.2643430000) ( 2.2780000000 -0.3492910000)) (S ( 0.7775000000 1.0000000000)) (S ( 0.3527000000 1.0000000000)) (S ( 0.1431000000 1.0000000000)) (P ( 1703.0000000000 0.0004740390) ( 403.6000000000 0.0040641200) ( 130.3000000000 0.0213355000) ( 49.0500000000 0.0794611000) ( 20.2600000000 0.2089270000) ( 8.7870000000 0.3649450000) ( 3.9190000000 0.3717250000) ( 1.7650000000 0.1462920000)) (P ( 1703.0000000000 -0.0001282660) ( 403.6000000000 -0.0010935600) ( 130.3000000000 -0.0058342900) ( 49.0500000000 -0.0219258000) ( 20.2600000000 -0.0601385000) ( 8.7870000000 -0.1069290000) ( 3.9190000000 -0.1224540000) ( 1.7650000000 0.0383619000)) (P ( 0.7207000000 1.0000000000)) (P ( 0.2839000000 1.0000000000)) (P ( 0.1060000000 1.0000000000)) (D ( 0.2540000000 1.0000000000)) (D ( 0.6280000000 1.0000000000)) (D ( 1.5510000000 1.0000000000)) (F ( 0.4230000000 1.0000000000)) (F ( 1.0890000000 1.0000000000)) (G ( 0.8270000000 1.0000000000)) ) ARGON:"H_CCPVQZ" = ( (S ( 950600.0000000000 0.0000227545) ( 142300.0000000000 0.0001769450) ( 32360.0000000000 0.0009312820) ( 9145.0000000000 0.0039286000) ( 2970.0000000000 0.0142064000) ( 1064.0000000000 0.0448114000) ( 410.8000000000 0.1210010000) ( 168.0000000000 0.2605790000) ( 71.9900000000 0.3813640000) ( 31.6700000000 0.2760580000) ( 12.8900000000 0.0505179000) ( 5.9290000000 -0.0035986600) ( 2.6780000000 0.0021879800)) (S ( 950600.0000000000 -0.0000064620) ( 142300.0000000000 -0.0000502346) ( 32360.0000000000 -0.0002648040) ( 9145.0000000000 -0.0011189500) ( 2970.0000000000 -0.0040827600) ( 1064.0000000000 -0.0131216000) ( 410.8000000000 -0.0372855000) ( 168.0000000000 -0.0894709000) ( 71.9900000000 -0.1680540000) ( 31.6700000000 -0.1795940000) ( 12.8900000000 0.1029530000) ( 5.9290000000 0.5626300000) ( 2.6780000000 0.4503550000)) (S ( 950600.0000000000 0.0000020206) ( 142300.0000000000 0.0000156851) ( 32360.0000000000 0.0000828617) ( 9145.0000000000 0.0003492640) ( 2970.0000000000 0.0012797600) ( 1064.0000000000 0.0041036500) ( 410.8000000000 0.0117789000) ( 168.0000000000 0.0283868000) ( 71.9900000000 0.0552406000) ( 31.6700000000 0.0607492000) ( 12.8900000000 -0.0362012000) ( 5.9290000000 -0.2753980000) ( 2.6780000000 -0.3628450000)) (S ( 0.9416000000 1.0000000000)) (S ( 0.4239000000 1.0000000000)) (S ( 0.1714000000 1.0000000000)) (P ( 1890.0000000000 0.0004957520) ( 447.8000000000 0.0042517200) ( 144.6000000000 0.0223277000) ( 54.4600000000 0.0830878000) ( 22.5100000000 0.2171100000) ( 9.7740000000 0.3745070000) ( 4.3680000000 0.3664450000) ( 1.9590000000 0.1292450000)) (P ( 1890.0000000000 -0.0001388630) ( 447.8000000000 -0.0011887000) ( 144.6000000000 -0.0063255300) ( 54.4600000000 -0.0238813000) ( 22.5100000000 -0.0649238000) ( 9.7740000000 -0.1154440000) ( 4.3680000000 -0.1236510000) ( 1.9590000000 0.0649055000)) (P ( 0.8260000000 1.0000000000)) (P ( 0.3297000000 1.0000000000)) (P ( 0.1242000000 1.0000000000)) (D ( 0.3110000000 1.0000000000)) (D ( 0.7630000000 1.0000000000)) (D ( 1.8730000000 1.0000000000)) (F ( 0.5430000000 1.0000000000)) (F ( 1.3250000000 1.0000000000)) (G ( 1.0070000000 1.0000000000)) ) % Ca : J. Koput and K.A. Peterson, J. Phys. Chem. A, 106, 9595 (2002). CALCIUM:"H_CCPVQZ" = ( (S ( 7503960.0000000000 0.0000022400) ( 1123486.0000000000 0.0000174400) ( 255663.5000000000 0.0000917700) ( 72416.0600000000 0.0003876800) ( 23626.0400000000 0.0014118500) ( 8529.9860000000 0.0045935900) ( 3327.3410000000 0.0135973300) ( 1380.3540000000 0.0366736000) ( 602.2149000000 0.0887207600) ( 273.8874000000 0.1841489300) ( 128.9451000000 0.3007421600) ( 62.4229900000 0.3243481500) ( 30.5743700000 0.1719574700) ( 13.8552200000 0.0248093300) ( 6.8362040000 -0.0010340800) ( 3.3781530000 0.0010129000) ( 1.4919070000 -0.0004667800) ( 0.7211400000 0.0001866200) ( 0.3341520000 -0.0000880800) ( 0.0823820000 0.0000334700) ( 0.0416550000 -0.0000264500) ( 0.0199730000 0.0000081300)) (S ( 7503960.0000000000 -0.0000006500) ( 1123486.0000000000 -0.0000050700) ( 255663.5000000000 -0.0000266300) ( 72416.0600000000 -0.0001126600) ( 23626.0400000000 -0.0004103000) ( 8529.9860000000 -0.0013411100) ( 3327.3410000000 -0.0039940400) ( 1380.3540000000 -0.0109890300) ( 602.2149000000 -0.0275644700) ( 273.8874000000 -0.0621624600) ( 128.9451000000 -0.1186047600) ( 62.4229900000 -0.1741049400) ( 30.5743700000 -0.1184771400) ( 13.8552200000 0.1945746800) ( 6.8362040000 0.5466113100) ( 3.3781530000 0.3812632400) ( 1.4919070000 0.0518785300) ( 0.7211400000 -0.0020499600) ( 0.3341520000 0.0016880900) ( 0.0823820000 -0.0003974000) ( 0.0416550000 0.0003116700) ( 0.0199730000 -0.0000951100)) (S ( 7503960.0000000000 0.0000002200) ( 1123486.0000000000 0.0000017500) ( 255663.5000000000 0.0000091800) ( 72416.0600000000 0.0000388800) ( 23626.0400000000 0.0001413800) ( 8529.9860000000 0.0004632400) ( 3327.3410000000 0.0013773100) ( 1380.3540000000 0.0038078600) ( 602.2149000000 0.0095564100) ( 273.8874000000 0.0218313200) ( 128.9451000000 0.0421495100) ( 62.4229900000 0.0646284500) ( 30.5743700000 0.0453598300) ( 13.8552200000 -0.0824985300) ( 6.8362040000 -0.3231510700) ( 3.3781530000 -0.3606349600) ( 1.4919070000 0.2043895400) ( 0.7211400000 0.6961008900) ( 0.3341520000 0.3617749800) ( 0.0823820000 0.0142185300) ( 0.0416550000 -0.0064193200) ( 0.0199730000 0.0015714700)) (S ( 7503960.0000000000 -0.0000000500) ( 1123486.0000000000 -0.0000004200) ( 255663.5000000000 -0.0000021900) ( 72416.0600000000 -0.0000092900) ( 23626.0400000000 -0.0000337400) ( 8529.9860000000 -0.0001107000) ( 3327.3410000000 -0.0003286200) ( 1380.3540000000 -0.0009105000) ( 602.2149000000 -0.0022809000) ( 273.8874000000 -0.0052309500) ( 128.9451000000 -0.0100836100) ( 62.4229900000 -0.0156129400) ( 30.5743700000 -0.0108833800) ( 13.8552200000 0.0199576800) ( 6.8362040000 0.0834886000) ( 3.3781530000 0.0959495100) ( 1.4919070000 -0.0639577200) ( 0.7211400000 -0.2452248700) ( 0.3341520000 -0.2858467000) ( 0.0823820000 0.3701332100) ( 0.0416550000 0.5909556200) ( 0.0199730000 0.2232082100)) (S ( 0.0823820000 1.0000000000)) (S ( 0.0416550000 1.0000000000)) (S ( 0.0199730000 1.0000000000)) (P ( 9363.0100000000 0.0000461700) ( 2216.2550000000 0.0004104900) ( 719.7596000000 0.0023556700) ( 275.1728000000 0.0102549100) ( 116.3924000000 0.0356603500) ( 52.7777000000 0.0996405600) ( 25.1318800000 0.2132062600) ( 12.3141600000 0.3315352400) ( 6.1667970000 0.3293426300) ( 3.1142790000 0.1546641400) ( 1.5190130000 0.0221552600) ( 0.7254350000 0.0005519100) ( 0.3409260000 0.0001517700) ( 0.1440000000 -0.0000543900) ( 0.0580000000 0.0000053800) ( 0.0231600000 -0.0000037200)) (P ( 9363.0100000000 -0.0000150500) ( 2216.2550000000 -0.0001336100) ( 719.7596000000 -0.0007701400) ( 275.1728000000 -0.0033645300) ( 116.3924000000 -0.0118662400) ( 52.7777000000 -0.0338942300) ( 25.1318800000 -0.0751432900) ( 12.3141600000 -0.1214434800) ( 6.1667970000 -0.1292208400) ( 3.1142790000 0.0158770300) ( 1.5190130000 0.3085367600) ( 0.7254350000 0.4728152100) ( 0.3409260000 0.2941028100) ( 0.1440000000 0.0449810900) ( 0.0580000000 0.0000121900) ( 0.0231600000 0.0006591500)) (P ( 9363.0100000000 0.0000031300) ( 2216.2550000000 0.0000279500) ( 719.7596000000 0.0001600300) ( 275.1728000000 0.0007041700) ( 116.3924000000 0.0024692200) ( 52.7777000000 0.0071189900) ( 25.1318800000 0.0156901700) ( 12.3141600000 0.0257856400) ( 6.1667970000 0.0269365600) ( 3.1142790000 -0.0048558600) ( 1.5190130000 -0.0765421200) ( 0.7254350000 -0.1155445900) ( 0.3409260000 -0.1212706200) ( 0.1440000000 0.1264200300) ( 0.0580000000 0.6144308700) ( 0.0231600000 0.3940816400)) (P ( 0.1440000000 1.0000000000)) (P ( 0.0580000000 1.0000000000)) (P ( 0.0231600000 1.0000000000)) (D ( 26.2708300000 0.0073460000) ( 7.3078200000 0.0409010000) ( 2.4549800000 0.1300650000) ( 0.8871400000 0.2441510000) ( 0.3092500000 0.3354450000) ( 0.1031600000 0.4119710000) ( 0.0337400000 0.2865260000)) (D ( 0.3092500000 1.0000000000)) (D ( 0.1031600000 1.0000000000)) (D ( 0.0337400000 1.0000000000)) (F ( 0.4883000000 1.0000000000)) (F ( 0.1165000000 1.0000000000)) (G ( 0.1466000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cc-pv(Q+D)Z basis sets from Dunning. Include an additional shell of % tight d-functions. % % T. H. Dunning, K. A. Peterson, and A. K. Wilson, JCP 114, (2001). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Quadruple Zeta + tight d Basis % ----------------------------------------------------------------------- % Elements Contraction References % Al - Ar: (16s,11p,4d,2f,1g) -> [6s,5p,4d,2f,1g] T.H. Dunning, Jr. K.A. % Peterson and A.K. Wilson, % J. Chem. Phys. 114, 9244 % (2001) % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ALUMINUM:"H_CCPVQ_PLUS_DZ" = ( (S ( 419600.0000000000 0.0000278219) ( 62830.0000000000 0.0002163300) ( 14290.0000000000 0.0011375400) ( 4038.0000000000 0.0047963500) ( 1312.0000000000 0.0172389000) ( 470.5000000000 0.0538066000) ( 181.8000000000 0.1413260000) ( 74.4600000000 0.2892680000) ( 31.9000000000 0.3848250000) ( 13.9600000000 0.2328520000) ( 5.1800000000 0.0293330000) ( 2.2650000000 -0.0030057400) ( 0.9664000000 0.0016667300)) (S ( 419600.0000000000 -0.0000072375) ( 62830.0000000000 -0.0000561733) ( 14290.0000000000 -0.0002965280) ( 4038.0000000000 -0.0012491300) ( 1312.0000000000 -0.0045510100) ( 470.5000000000 -0.0144393000) ( 181.8000000000 -0.0403464000) ( 74.4600000000 -0.0922618000) ( 31.9000000000 -0.1645100000) ( 13.9600000000 -0.1412960000) ( 5.1800000000 0.1953650000) ( 2.2650000000 0.5724750000) ( 0.9664000000 0.3740410000)) (S ( 419600.0000000000 0.0000016715) ( 62830.0000000000 0.0000129641) ( 14290.0000000000 0.0000685101) ( 4038.0000000000 0.0002882740) ( 1312.0000000000 0.0010527600) ( 470.5000000000 0.0033387800) ( 181.8000000000 0.0093921700) ( 74.4600000000 0.0216047000) ( 31.9000000000 0.0395873000) ( 13.9600000000 0.0349180000) ( 5.1800000000 -0.0528415000) ( 2.2650000000 -0.1918780000) ( 0.9664000000 -0.2541150000)) (S ( 0.2447000000 1.0000000000)) (S ( 0.1184000000 1.0000000000)) (S ( 0.0502100000 1.0000000000)) (P ( 891.3000000000 0.0004917550) ( 211.3000000000 0.0041584300) ( 68.2800000000 0.0212538000) ( 25.7000000000 0.0764058000) ( 10.6300000000 0.1942770000) ( 4.6020000000 0.3344280000) ( 2.0150000000 0.3750260000) ( 0.8706000000 0.2040410000)) (P ( 891.3000000000 -0.0000888695) ( 211.3000000000 -0.0007458230) ( 68.2800000000 -0.0038702500) ( 25.7000000000 -0.0139350000) ( 10.6300000000 -0.0366860000) ( 4.6020000000 -0.0627797000) ( 2.0150000000 -0.0789602000) ( 0.8706000000 -0.0288589000)) (P ( 0.2972000000 1.0000000000)) (P ( 0.1100000000 1.0000000000)) (P ( 0.0398900000 1.0000000000)) (D ( 1.9700000000 1.0000000000)) (D ( 0.4370000000 1.0000000000)) (D ( 0.1950000000 1.0000000000)) (D ( 0.0800000000 1.0000000000)) (F ( 0.1540000000 1.0000000000)) (F ( 0.4010000000 1.0000000000)) (G ( 0.3570000000 1.0000000000)) ) SILICON:"H_CCPVQ_PLUS_DZ" = ( (S ( 513000.0000000000 0.0000260920) ( 76820.0000000000 0.0002029050) ( 17470.0000000000 0.0010671500) ( 4935.0000000000 0.0045059700) ( 1602.0000000000 0.0162359000) ( 574.1000000000 0.0508913000) ( 221.5000000000 0.1351550000) ( 90.5400000000 0.2812920000) ( 38.7400000000 0.3853360000) ( 16.9500000000 0.2456510000) ( 6.4520000000 0.0343145000) ( 2.8740000000 -0.0033488400) ( 1.2500000000 0.0018762500)) (S ( 513000.0000000000 -0.0000069488) ( 76820.0000000000 -0.0000539641) ( 17470.0000000000 -0.0002847160) ( 4935.0000000000 -0.0012020300) ( 1602.0000000000 -0.0043839700) ( 574.1000000000 -0.0139776000) ( 221.5000000000 -0.0393516000) ( 90.5400000000 -0.0914283000) ( 38.7400000000 -0.1656090000) ( 16.9500000000 -0.1525050000) ( 6.4520000000 0.1685240000) ( 2.8740000000 0.5692840000) ( 1.2500000000 0.3980560000)) (S ( 513000.0000000000 0.0000017807) ( 76820.0000000000 0.0000138148) ( 17470.0000000000 0.0000730005) ( 4935.0000000000 0.0003076660) ( 1602.0000000000 0.0011256300) ( 574.1000000000 0.0035843500) ( 221.5000000000 0.0101728000) ( 90.5400000000 0.0237520000) ( 38.7400000000 0.0443483000) ( 16.9500000000 0.0419041000) ( 6.4520000000 -0.0502504000) ( 2.8740000000 -0.2165780000) ( 1.2500000000 -0.2864480000)) (S ( 0.3599000000 1.0000000000)) (S ( 0.1699000000 1.0000000000)) (S ( 0.0706600000 1.0000000000)) (P ( 1122.0000000000 0.0004481430) ( 266.0000000000 0.0038163900) ( 85.9200000000 0.0198105000) ( 32.3300000000 0.0727017000) ( 13.3700000000 0.1898390000) ( 5.8000000000 0.3356720000) ( 2.5590000000 0.3793650000) ( 1.1240000000 0.2011930000)) (P ( 1122.0000000000 -0.0000964883) ( 266.0000000000 -0.0008119710) ( 85.9200000000 -0.0043008700) ( 32.3300000000 -0.0157502000) ( 13.3700000000 -0.0429541000) ( 5.8000000000 -0.0752574000) ( 2.5590000000 -0.0971446000) ( 1.1240000000 -0.0227507000)) (P ( 0.3988000000 1.0000000000)) (P ( 0.1533000000 1.0000000000)) (P ( 0.0572800000 1.0000000000)) (D ( 2.6450000000 1.0000000000)) (D ( 0.6080000000 1.0000000000)) (D ( 0.2720000000 1.0000000000)) (D ( 0.1130000000 1.0000000000)) (F ( 0.2120000000 1.0000000000)) (F ( 0.5410000000 1.0000000000)) (G ( 0.4610000000 1.0000000000)) ) PHOSPHORUS:"H_CCPVQ_PLUS_DZ" = ( (S ( 615200.0000000000 0.0000247450) ( 92120.0000000000 0.0001924650) ( 20950.0000000000 0.0010120200) ( 5920.0000000000 0.0042726100) ( 1922.0000000000 0.0154161000) ( 688.0000000000 0.0485976000) ( 265.0000000000 0.1300600000) ( 108.2000000000 0.2745140000) ( 46.2200000000 0.3854020000) ( 20.2300000000 0.2559340000) ( 7.8590000000 0.0391237000) ( 3.5470000000 -0.0036801000) ( 1.5640000000 0.0020821100)) (S ( 615200.0000000000 -0.0000067221) ( 92120.0000000000 -0.0000522311) ( 20950.0000000000 -0.0002753610) ( 5920.0000000000 -0.0011630700) ( 1922.0000000000 -0.0042428100) ( 688.0000000000 -0.0136114000) ( 265.0000000000 -0.0385114000) ( 108.2000000000 -0.0906643000) ( 46.2200000000 -0.1665840000) ( 20.2300000000 -0.1614470000) ( 7.8590000000 0.1467810000) ( 3.5470000000 0.5666820000) ( 1.5640000000 0.4164330000)) (S ( 615200.0000000000 0.0000018474) ( 92120.0000000000 0.0000143380) ( 20950.0000000000 0.0000757228) ( 5920.0000000000 0.0003192050) ( 1922.0000000000 0.0011685100) ( 688.0000000000 0.0037426700) ( 265.0000000000 0.0106817000) ( 108.2000000000 0.0252657000) ( 46.2200000000 0.0479283000) ( 20.2300000000 0.0477096000) ( 7.8590000000 -0.0466525000) ( 3.5470000000 -0.2349680000) ( 1.5640000000 -0.3113370000)) (S ( 0.4888000000 1.0000000000)) (S ( 0.2266000000 1.0000000000)) (S ( 0.0933100000 1.0000000000)) (P ( 1367.0000000000 0.0004210150) ( 324.0000000000 0.0036098500) ( 104.6000000000 0.0189217000) ( 39.3700000000 0.0705560000) ( 16.2600000000 0.1881570000) ( 7.0560000000 0.3387090000) ( 3.1300000000 0.3819430000) ( 1.3940000000 0.1952610000)) (P ( 1367.0000000000 -0.0001008270) ( 324.0000000000 -0.0008544990) ( 104.6000000000 -0.0045711600) ( 39.3700000000 -0.0170327000) ( 16.2600000000 -0.0475204000) ( 7.0560000000 -0.0852786000) ( 3.1300000000 -0.1096760000) ( 1.3940000000 -0.0161181000)) (P ( 0.5179000000 1.0000000000)) (P ( 0.2032000000 1.0000000000)) (P ( 0.0769800000 1.0000000000)) (D ( 3.3430000000 1.0000000000)) (D ( 0.8070000000 1.0000000000)) (D ( 0.3650000000 1.0000000000)) (D ( 0.1540000000 1.0000000000)) (F ( 0.2800000000 1.0000000000)) (F ( 0.7030000000 1.0000000000)) (G ( 0.5970000000 1.0000000000)) ) SULFUR:"H_CCPVQ_PLUS_DZ" = ( (S ( 727800.0000000000 0.0000236025) ( 109000.0000000000 0.0001834820) ( 24800.0000000000 0.0009642780) ( 7014.0000000000 0.0040653700) ( 2278.0000000000 0.0146973000) ( 814.7000000000 0.0465081000) ( 313.4000000000 0.1255080000) ( 127.7000000000 0.2684330000) ( 54.4800000000 0.3848090000) ( 23.8500000000 0.2653720000) ( 9.4280000000 0.0437326000) ( 4.2900000000 -0.0037880700) ( 1.9090000000 0.0021808300)) (S ( 727800.0000000000 -0.0000065218) ( 109000.0000000000 -0.0000506631) ( 24800.0000000000 -0.0002668330) ( 7014.0000000000 -0.0011260100) ( 2278.0000000000 -0.0041118600) ( 814.7000000000 -0.0132454000) ( 313.4000000000 -0.0377004000) ( 127.7000000000 -0.0898554000) ( 54.4800000000 -0.1670980000) ( 23.8500000000 -0.1693540000) ( 9.4280000000 0.1278240000) ( 4.2900000000 0.5648620000) ( 1.9090000000 0.4317670000)) (S ( 727800.0000000000 0.0000018941) ( 109000.0000000000 0.0000146948) ( 24800.0000000000 0.0000775460) ( 7014.0000000000 0.0003265090) ( 2278.0000000000 0.0011968600) ( 814.7000000000 0.0038479900) ( 313.4000000000 0.0110539000) ( 127.7000000000 0.0264645000) ( 54.4800000000 0.0508771000) ( 23.8500000000 0.0530030000) ( 9.4280000000 -0.0425518000) ( 4.2900000000 -0.2508530000) ( 1.9090000000 -0.3331520000)) (S ( 0.6270000000 1.0000000000)) (S ( 0.2873000000 1.0000000000)) (S ( 0.1172000000 1.0000000000)) (P ( 1546.0000000000 0.0004411830) ( 366.4000000000 0.0037757100) ( 118.4000000000 0.0198360000) ( 44.5300000000 0.0742063000) ( 18.3800000000 0.1973270000) ( 7.9650000000 0.3518510000) ( 3.5410000000 0.3786870000) ( 1.5910000000 0.1709310000)) (P ( 1546.0000000000 -0.0001131100) ( 366.4000000000 -0.0009585810) ( 118.4000000000 -0.0051347100) ( 44.5300000000 -0.0192641000) ( 18.3800000000 -0.0535980000) ( 7.9650000000 -0.0960333000) ( 3.5410000000 -0.1181830000) ( 1.5910000000 0.0092319400)) (P ( 0.6205000000 1.0000000000)) (P ( 0.2420000000 1.0000000000)) (P ( 0.0901400000 1.0000000000)) (D ( 4.1590000000 1.0000000000)) (D ( 1.0190000000 1.0000000000)) (D ( 0.4640000000 1.0000000000)) (D ( 0.1940000000 1.0000000000)) (F ( 0.3350000000 1.0000000000)) (F ( 0.8690000000 1.0000000000)) (G ( 0.6830000000 1.0000000000)) ) CHLORINE:"H_CCPVQ_PLUS_DZ" = ( (S ( 834900.0000000000 0.0000231688) ( 125000.0000000000 0.0001801540) ( 28430.0000000000 0.0009477820) ( 8033.0000000000 0.0040013900) ( 2608.0000000000 0.0144629000) ( 933.9000000000 0.0456586000) ( 360.0000000000 0.1232480000) ( 147.0000000000 0.2643690000) ( 62.8800000000 0.3829890000) ( 27.6000000000 0.2709340000) ( 11.0800000000 0.0471404000) ( 5.0750000000 -0.0037176600) ( 2.2780000000 0.0021915800)) (S ( 834900.0000000000 -0.0000064965) ( 125000.0000000000 -0.0000504895) ( 28430.0000000000 -0.0002661130) ( 8033.0000000000 -0.0011249900) ( 2608.0000000000 -0.0041049700) ( 933.9000000000 -0.0131987000) ( 360.0000000000 -0.0375342000) ( 147.0000000000 -0.0897233000) ( 62.8800000000 -0.1676710000) ( 27.6000000000 -0.1747630000) ( 11.0800000000 0.1149090000) ( 5.0750000000 0.5636180000) ( 2.2780000000 0.4416060000)) (S ( 834900.0000000000 0.0000019665) ( 125000.0000000000 0.0000152620) ( 28430.0000000000 0.0000806086) ( 8033.0000000000 0.0003399600) ( 2608.0000000000 0.0012455100) ( 933.9000000000 0.0039961200) ( 360.0000000000 0.0114751000) ( 147.0000000000 0.0275504000) ( 62.8800000000 0.0532917000) ( 27.6000000000 0.0571246000) ( 11.0800000000 -0.0395201000) ( 5.0750000000 -0.2643430000) ( 2.2780000000 -0.3492910000)) (S ( 0.7775000000 1.0000000000)) (S ( 0.3527000000 1.0000000000)) (S ( 0.1431000000 1.0000000000)) (P ( 1703.0000000000 0.0004740390) ( 403.6000000000 0.0040641200) ( 130.3000000000 0.0213355000) ( 49.0500000000 0.0794611000) ( 20.2600000000 0.2089270000) ( 8.7870000000 0.3649450000) ( 3.9190000000 0.3717250000) ( 1.7650000000 0.1462920000)) (P ( 1703.0000000000 -0.0001282660) ( 403.6000000000 -0.0010935600) ( 130.3000000000 -0.0058342900) ( 49.0500000000 -0.0219258000) ( 20.2600000000 -0.0601385000) ( 8.7870000000 -0.1069290000) ( 3.9190000000 -0.1224540000) ( 1.7650000000 0.0383619000)) (P ( 0.7207000000 1.0000000000)) (P ( 0.2839000000 1.0000000000)) (P ( 0.1060000000 1.0000000000)) (D ( 5.1910000000 1.0000000000)) (D ( 1.2760000000 1.0000000000)) (D ( 0.5830000000 1.0000000000)) (D ( 0.2430000000 1.0000000000)) (F ( 0.4230000000 1.0000000000)) (F ( 1.0890000000 1.0000000000)) (G ( 0.8270000000 1.0000000000)) ) ARGON:"H_CCPVQ_PLUS_DZ" = ( (S ( 950600.0000000000 0.0000227545) ( 142300.0000000000 0.0001769450) ( 32360.0000000000 0.0009312820) ( 9145.0000000000 0.0039286000) ( 2970.0000000000 0.0142064000) ( 1064.0000000000 0.0448114000) ( 410.8000000000 0.1210010000) ( 168.0000000000 0.2605790000) ( 71.9900000000 0.3813640000) ( 31.6700000000 0.2760580000) ( 12.8900000000 0.0505179000) ( 5.9290000000 -0.0035986600) ( 2.6780000000 0.0021879800)) (S ( 950600.0000000000 -0.0000064620) ( 142300.0000000000 -0.0000502346) ( 32360.0000000000 -0.0002648040) ( 9145.0000000000 -0.0011189500) ( 2970.0000000000 -0.0040827600) ( 1064.0000000000 -0.0131216000) ( 410.8000000000 -0.0372855000) ( 168.0000000000 -0.0894709000) ( 71.9900000000 -0.1680540000) ( 31.6700000000 -0.1795940000) ( 12.8900000000 0.1029530000) ( 5.9290000000 0.5626300000) ( 2.6780000000 0.4503550000)) (S ( 950600.0000000000 0.0000020206) ( 142300.0000000000 0.0000156851) ( 32360.0000000000 0.0000828617) ( 9145.0000000000 0.0003492640) ( 2970.0000000000 0.0012797600) ( 1064.0000000000 0.0041036500) ( 410.8000000000 0.0117789000) ( 168.0000000000 0.0283868000) ( 71.9900000000 0.0552406000) ( 31.6700000000 0.0607492000) ( 12.8900000000 -0.0362012000) ( 5.9290000000 -0.2753980000) ( 2.6780000000 -0.3628450000)) (S ( 0.9416000000 1.0000000000)) (S ( 0.4239000000 1.0000000000)) (S ( 0.1714000000 1.0000000000)) (P ( 1890.0000000000 0.0004957520) ( 447.8000000000 0.0042517200) ( 144.6000000000 0.0223277000) ( 54.4600000000 0.0830878000) ( 22.5100000000 0.2171100000) ( 9.7740000000 0.3745070000) ( 4.3680000000 0.3664450000) ( 1.9590000000 0.1292450000)) (P ( 1890.0000000000 -0.0001388630) ( 447.8000000000 -0.0011887000) ( 144.6000000000 -0.0063255300) ( 54.4600000000 -0.0238813000) ( 22.5100000000 -0.0649238000) ( 9.7740000000 -0.1154440000) ( 4.3680000000 -0.1236510000) ( 1.9590000000 0.0649055000)) (P ( 0.8260000000 1.0000000000)) (P ( 0.3297000000 1.0000000000)) (P ( 0.1242000000 1.0000000000)) (D ( 6.3150000000 1.0000000000)) (D ( 1.5620000000 1.0000000000)) (D ( 0.7150000000 1.0000000000)) (D ( 0.2970000000 1.0000000000)) (F ( 0.5430000000 1.0000000000)) (F ( 1.3250000000 1.0000000000)) (G ( 1.0070000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV5Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: cc-pV5Z % % Correlation Consistent Polarized Valence Quintuple Zeta (cc-pV5Z) Basis % ---------------------------------------------------------------------- % Elements Contraction References % H : (8s,4p,3d,2f,1g) -> [5s,4p,3d,2f,1g] T.H. Dunning, Jr. % He : (8s,4p,3d,2f,1g) -> [5s,4p,3d,2f,1g] D.E. Woon and T.H. % Dunning, Jr., J.C.P. % 100, 2975 (1994). % Li : (14s,7p,4d,3f,2g,1h) -> [6s,5p,4d,3f,2g,1h] Unofficial set from % D. Feller. % B - Ne: (14s,8p,4d,3f,2g,1h) -> [6s,5p,4d,3f,2g,1h] D. Woon, K. Peterson % Na : (20s,12p,4d,3f,2g,1h) -> [7s,6p,4d,3f,2g,1h] D. Woon and T.H. Dunning % % Mg : (20s,14p,4d,3f,2g,1h) -> [7s,6p,4d,3f,2g,1h] (unpublished) % Al- Ar: (20s,12p,4d,3f,2g,1h) -> [7s,6p,4d,3f,2g,1h] % Ga - Kr: (26s,17p,13d,3f,2g,1h)-> [8s,7p,5d,3f,2g,1h] A.K. Wilson, D.E. Woon, % K.A. Peterson, T.H. % Dunning, Jr., J. % Chem. Phys. 110, 7667 % (1999) % ** % The lithium and sodium sets are unofficial sets designed to loosely match % the original cc-pVDZ, cc-pVTZ and cc-pVQZ Na sets. % ** % It was noticed in January 2000 that the s and p contractions for Ar % don't correspond to the HF AOs. The vectors are rotated amongst % themselves. The total energy is unaffected. The contraction coefficients % appear to correspond to the SCF natural orbitals. % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPV5Z and CCPV((5+D))z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 3, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV5Z":puream = true HYDROGEN:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) HELIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) LITHIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) BERYLLIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) BORON:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) CARBON:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) NITROGEN:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) OXYGEN:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) FLUORINE:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) NEON:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) SODIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) MAGNESIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) ALUMINUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) SILICON:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) PHOSPHORUS :"CC-PV5Z" = ( (GET "H_CCPV5Z") ) SULFUR:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) CHLORINE:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) ARGON:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) CALCIUM:"CC-PV5Z" = ( (GET "H_CCPV5Z") ) %%%%%%%%%% ALIAS cc-pV5Z => CC-PV5Z %%%%%%%%%%%% "cc-pV5Z":puream = true HYDROGEN:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) HELIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) LITHIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) BERYLLIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) BORON:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) CARBON:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) NITROGEN:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) OXYGEN:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) FLUORINE:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) NEON:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) SODIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) MAGNESIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) ALUMINUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) SILICON:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) PHOSPHORUS :"cc-pV5Z" = ( (GET "H_CCPV5Z") ) SULFUR:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) CHLORINE:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) ARGON:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) CALCIUM:"cc-pV5Z" = ( (GET "H_CCPV5Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV((5+D))Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV(5+D)Z":puream = true ALUMINUM:"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) SILICON:"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) PHOSPHORUS :"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) SULFUR:"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) CHLORINE:"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) ARGON:"CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) %%%%%%%%% ALIASES cc-pV(5+d)Z => CC-PV(5+D)Z %%%%%%%%% "cc-pV(5+d)Z":puream = true ALUMINUM:"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) SILICON:"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) PHOSPHORUS :"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) SULFUR:"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) CHLORINE:"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) ARGON:"cc-pV(5+d)Z" = ( (GET "H_CCPV5_PLUS_DZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPV5Z Basis Sets %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"H_CCPV5Z" = ( (S ( 402.00000000 0.00027900) ( 60.24000000 0.00216500) ( 13.73000000 0.01120100) ( 3.90500000 0.04487800) ( 1.28300000 0.14229900) ( 0.46550000 0.33097900) ( 0.18110000 0.43626900) ( 0.07279000 0.17644000)) (S ( 1.28300000 1.00000000)) (S ( 0.46550000 1.00000000)) (S ( 0.18110000 1.00000000)) (S ( 0.07279000 1.00000000)) (P ( 4.51600000 1.00000000)) (P ( 1.71200000 1.00000000)) (P ( 0.64900000 1.00000000)) (P ( 0.24600000 1.00000000)) (D ( 2.95000000 1.00000000)) (D ( 1.20600000 1.00000000)) (D ( 0.49300000 1.00000000)) (F ( 2.50600000 1.00000000)) (F ( 0.87500000 1.00000000)) (G ( 2.35800000 1.00000000)) ) HELIUM:"H_CCPV5Z" = ( (S ( 1145.00000000 0.00035900) ( 171.70000000 0.00277100) ( 39.07000000 0.01425100) ( 11.04000000 0.05556600) ( 3.56600000 0.16209100) ( 1.24000000 0.33219700) ( 0.44730000 0.41961500) ( 0.16400000 0.18612800)) (S ( 3.56600000 1.00000000)) (S ( 1.24000000 1.00000000)) (S ( 0.44730000 1.00000000)) (S ( 0.16400000 1.00000000)) (P ( 10.15300000 1.00000000)) (P ( 3.62700000 1.00000000)) (P ( 1.29600000 1.00000000)) (P ( 0.46300000 1.00000000)) (D ( 7.66600000 1.00000000)) (D ( 2.64700000 1.00000000)) (D ( 0.91400000 1.00000000)) (F ( 5.41100000 1.00000000)) (F ( 1.70700000 1.00000000)) (G ( 3.43000000 1.00000000)) ) LITHIUM:"H_CCPV5Z" = ( (S ( 29493.0000000000 0.0000180000) ( 4417.1010000000 0.0001410000) ( 1005.2230000000 0.0007390000) ( 284.7009000000 0.0031070000) ( 92.8654300000 0.0111350000) ( 33.5117900000 0.0346700000) ( 13.0418000000 0.0921710000) ( 5.3575360000 0.1995760000) ( 2.2793380000 0.3288360000) ( 0.9939900000 0.3459750000)) (S ( 29493.0000000000 -0.0000030000) ( 4417.1010000000 -0.0000220000) ( 1005.2230000000 -0.0001150000) ( 284.7009000000 -0.0004870000) ( 92.8654300000 -0.0017460000) ( 33.5117900000 -0.0055200000) ( 13.0418000000 -0.0149280000) ( 5.3575360000 -0.0342060000) ( 2.2793380000 -0.0621550000) ( 0.9939900000 -0.0959020000)) (S ( 0.4334710000 1.0000000000)) (S ( 0.0955660000 1.0000000000)) (S ( 0.0446570000 1.0000000000)) (S ( 0.0206330000 1.0000000000)) (P ( 11.2500000000 0.0013120000) ( 2.5000000000 0.0099180000) ( 0.6500000000 0.0375420000)) (P ( 0.2500000000 1.0000000000)) (P ( 0.1000000000 1.0000000000)) (P ( 0.0390000000 1.0000000000)) (P ( 0.0170000000 1.0000000000)) (D ( 0.5500000000 1.0000000000)) (D ( 0.2900000000 1.0000000000)) (D ( 0.1400000000 1.0000000000)) (D ( 0.0610000000 1.0000000000)) (F ( 0.3500000000 1.0000000000)) (F ( 0.2200000000 1.0000000000)) (F ( 0.1100000000 1.0000000000)) (G ( 0.3200000000 1.0000000000)) (G ( 0.1600000000 1.0000000000)) (H ( 0.3200000000 1.0000000000)) ) BERYLLIUM:"H_CCPV5Z" = ( (S ( 54620.0000000000 0.0000180000) ( 8180.0000000000 0.0001380000) ( 1862.0000000000 0.0007230000) ( 527.3000000000 0.0030390000) ( 172.0000000000 0.0109080000) ( 62.1000000000 0.0340350000) ( 24.2100000000 0.0911930000) ( 9.9930000000 0.1992680000) ( 4.3050000000 0.3293550000) ( 1.9210000000 0.3404890000)) (S ( 54620.0000000000 -0.0000030000) ( 8180.0000000000 -0.0000250000) ( 1862.0000000000 -0.0001310000) ( 527.3000000000 -0.0005580000) ( 172.0000000000 -0.0019880000) ( 62.1000000000 -0.0063700000) ( 24.2100000000 -0.0172170000) ( 9.9930000000 -0.0408580000) ( 4.3050000000 -0.0742370000) ( 1.9210000000 -0.1192340000)) (S ( 0.8663000000 1.0000000000)) (S ( 0.2475000000 1.0000000000)) (S ( 0.1009000000 1.0000000000)) (S ( 0.0412900000 1.0000000000)) (P ( 43.7500000000 0.0006330000) ( 10.3300000000 0.0048080000) ( 3.2260000000 0.0205270000) ( 1.1270000000 0.0678160000)) (P ( 0.4334000000 1.0000000000)) (P ( 0.1808000000 1.0000000000)) (P ( 0.0782700000 1.0000000000)) (P ( 0.0337200000 1.0000000000)) (D ( 1.6350000000 1.0000000000)) (D ( 0.7410000000 1.0000000000)) (D ( 0.3350000000 1.0000000000)) (D ( 0.1519000000 1.0000000000)) (F ( 0.6860000000 1.0000000000)) (F ( 0.4010000000 1.0000000000)) (F ( 0.2350000000 1.0000000000)) (G ( 0.6030000000 1.0000000000)) (G ( 0.3240000000 1.0000000000)) (H ( 0.5100000000 1.0000000000)) ) BORON:"H_CCPV5Z" = ( (S ( 68260.00000000 0.00002400) ( 10230.00000000 0.00018500) ( 2328.00000000 0.00097000) ( 660.40000000 0.00405600) ( 216.20000000 0.01439900) ( 78.60000000 0.04390100) ( 30.98000000 0.11305700) ( 12.96000000 0.23382500) ( 5.65900000 0.35396000) ( 2.55600000 0.30154700) ( 1.17500000 0.08752100) ( 0.42490000 0.00281900) ( 0.17120000 0.00004300) ( 0.06913000 0.00007800)) (S ( 68260.00000000 -0.00000500) ( 10230.00000000 -0.00003700) ( 2328.00000000 -0.00019600) ( 660.40000000 -0.00082400) ( 216.20000000 -0.00292300) ( 78.60000000 -0.00913800) ( 30.98000000 -0.02410500) ( 12.96000000 -0.05475500) ( 5.65900000 -0.09694300) ( 2.55600000 -0.13748500) ( 1.17500000 -0.04456500) ( 0.42490000 0.32434500) ( 0.17120000 0.57041400) ( 0.06913000 0.24344400)) (S ( 1.17500000 1.00000000)) (S ( 0.42490000 1.00000000)) (S ( 0.17120000 1.00000000)) (S ( 0.06913000 1.00000000)) (P ( 66.44000000 0.00083800) ( 15.71000000 0.00640900) ( 4.93600000 0.02808100) ( 1.77000000 0.09215200) ( 0.70080000 0.22416400) ( 0.29010000 0.36991500) ( 0.12110000 0.37444100) ( 0.04973000 0.13908600)) (P ( 0.70080000 1.00000000)) (P ( 0.29010000 1.00000000)) (P ( 0.12110000 1.00000000)) (P ( 0.04973000 1.00000000)) (D ( 2.01000000 1.00000000)) (D ( 0.79600000 1.00000000)) (D ( 0.31600000 1.00000000)) (D ( 0.12500000 1.00000000)) (F ( 1.21500000 1.00000000)) (F ( 0.52500000 1.00000000)) (F ( 0.22700000 1.00000000)) (G ( 1.12400000 1.00000000)) (G ( 0.46100000 1.00000000)) (H ( 0.83400000 1.00000000)) ) CARBON:"H_CCPV5Z" = ( (S ( 96770.00000000 0.00002500) ( 14500.00000000 0.00019000) ( 3300.00000000 0.00100000) ( 935.80000000 0.00418300) ( 306.20000000 0.01485900) ( 111.30000000 0.04530100) ( 43.90000000 0.11650400) ( 18.40000000 0.24024900) ( 8.05400000 0.35879900) ( 3.63700000 0.29394100) ( 1.65600000 0.07766500) ( 0.63330000 0.00233300) ( 0.25450000 0.00050500) ( 0.10190000 0.00003000)) (S ( 96770.00000000 -0.00000500) ( 14500.00000000 -0.00004100) ( 3300.00000000 -0.00021300) ( 935.80000000 -0.00089700) ( 306.20000000 -0.00318700) ( 111.30000000 -0.00996100) ( 43.90000000 -0.02637500) ( 18.40000000 -0.06000100) ( 8.05400000 -0.10682500) ( 3.63700000 -0.14416600) ( 1.65600000 -0.02464420) ( 0.63330000 0.34900900) ( 0.25450000 0.55873700) ( 0.10190000 0.22810200)) (S ( 1.65600000 1.00000000)) (S ( 0.63330000 1.00000000)) (S ( 0.25450000 1.00000000)) (S ( 0.10190000 1.00000000)) (P ( 101.80000000 0.00089100) ( 24.04000000 0.00697600) ( 7.57100000 0.03166900) ( 2.73200000 0.10400600) ( 1.08500000 0.24163300) ( 0.44960000 0.37194600) ( 0.18760000 0.35420000) ( 0.07606000 0.13156800)) (P ( 1.08500000 1.00000000)) (P ( 0.44960000 1.00000000)) (P ( 0.18760000 1.00000000)) (P ( 0.07606000 1.00000000)) (D ( 3.13400000 1.00000000)) (D ( 1.23300000 1.00000000)) (D ( 0.48500000 1.00000000)) (D ( 0.19100000 1.00000000)) (F ( 2.00600000 1.00000000)) (F ( 0.83800000 1.00000000)) (F ( 0.35000000 1.00000000)) (G ( 1.75300000 1.00000000)) (G ( 0.67800000 1.00000000)) (H ( 1.25900000 1.00000000)) ) NITROGEN:"H_CCPV5Z" = ( (S ( 129200.00000000 0.00002500) ( 19350.00000000 0.00019700) ( 4404.00000000 0.00103200) ( 1248.00000000 0.00432500) ( 408.00000000 0.01538000) ( 148.20000000 0.04686700) ( 58.50000000 0.12011600) ( 24.59000000 0.24569500) ( 10.81000000 0.36137900) ( 4.88200000 0.28728300) ( 2.19500000 0.07017100) ( 0.87150000 0.00183100) ( 0.35040000 0.00083500) ( 0.13970000 -0.00000600)) (S ( 129200.00000000 -0.00000600) ( 19350.00000000 -0.00004300) ( 4404.00000000 -0.00022700) ( 1248.00000000 -0.00095800) ( 408.00000000 -0.00341600) ( 148.20000000 -0.01066700) ( 58.50000000 -0.02827900) ( 24.59000000 -0.06402000) ( 10.81000000 -0.11393200) ( 4.88200000 -0.14699500) ( 2.19500000 -0.00725100) ( 0.87150000 0.36618300) ( 0.35040000 0.54790800) ( 0.13970000 0.21664500)) (S ( 2.19500000 1.00000000)) (S ( 0.87150000 1.00000000)) (S ( 0.35040000 1.00000000)) (S ( 0.13970000 1.00000000)) (P ( 147.00000000 0.00089200) ( 34.76000000 0.00708200) ( 11.00000000 0.03281600) ( 3.99500000 0.10820900) ( 1.58700000 0.24809400) ( 0.65330000 0.37451300) ( 0.26860000 0.34841400) ( 0.10670000 0.12834000)) (P ( 1.58700000 1.00000000)) (P ( 0.65330000 1.00000000)) (P ( 0.26860000 1.00000000)) (P ( 0.10670000 1.00000000)) (D ( 4.64700000 1.00000000)) (D ( 1.81300000 1.00000000)) (D ( 0.70700000 1.00000000)) (D ( 0.27600000 1.00000000)) (F ( 2.94200000 1.00000000)) (F ( 1.20400000 1.00000000)) (F ( 0.49300000 1.00000000)) (G ( 2.51100000 1.00000000)) (G ( 0.94200000 1.00000000)) (H ( 1.76800000 1.00000000)) ) OXYGEN:"H_CCPV5Z" = ( (S ( 164200.00000000 0.00002600) ( 24590.00000000 0.00020500) ( 5592.00000000 0.00107600) ( 1582.00000000 0.00452200) ( 516.10000000 0.01610800) ( 187.20000000 0.04908500) ( 73.93000000 0.12485700) ( 31.22000000 0.25168600) ( 13.81000000 0.36242000) ( 6.25600000 0.27905100) ( 2.77600000 0.06355200) ( 1.13800000 0.00106300) ( 0.46000000 0.00114400) ( 0.18290000 -0.00004000)) (S ( 164200.00000000 -0.00000600) ( 24590.00000000 -0.00004600) ( 5592.00000000 -0.00024400) ( 1582.00000000 -0.00103100) ( 516.10000000 -0.00368800) ( 187.20000000 -0.01151400) ( 73.93000000 -0.03043500) ( 31.22000000 -0.06814700) ( 13.81000000 -0.12036800) ( 6.25600000 -0.14826000) ( 2.77600000 0.00990500) ( 1.13800000 0.38428600) ( 0.46000000 0.53680500) ( 0.18290000 0.20268700)) (S ( 2.77600000 1.00000000)) (S ( 1.13800000 1.00000000)) (S ( 0.46000000 1.00000000)) (S ( 0.18290000 1.00000000)) (P ( 195.50000000 0.00091800) ( 46.16000000 0.00738800) ( 14.58000000 0.03495800) ( 5.29600000 0.11543100) ( 2.09400000 0.25680300) ( 0.84710000 0.37393800) ( 0.33680000 0.34344700) ( 0.12850000 0.12970600)) (P ( 2.09400000 1.00000000)) (P ( 0.84710000 1.00000000)) (P ( 0.33680000 1.00000000)) (P ( 0.12850000 1.00000000)) (D ( 5.87900000 1.00000000)) (D ( 2.30700000 1.00000000)) (D ( 0.90500000 1.00000000)) (D ( 0.35500000 1.00000000)) (F ( 4.01600000 1.00000000)) (F ( 1.55400000 1.00000000)) (F ( 0.60100000 1.00000000)) (G ( 3.35000000 1.00000000)) (G ( 1.18900000 1.00000000)) (H ( 2.31900000 1.00000000)) ) FLUORINE:"H_CCPV5Z" = ( (S ( 211400.00000000 0.00002600) ( 31660.00000000 0.00020100) ( 7202.00000000 0.00105600) ( 2040.00000000 0.00443200) ( 666.40000000 0.01576600) ( 242.00000000 0.04811200) ( 95.53000000 0.12323200) ( 40.23000000 0.25151900) ( 17.72000000 0.36452500) ( 8.00500000 0.27976600) ( 3.53800000 0.06354500) ( 1.45800000 0.00111100) ( 0.58870000 0.00125800) ( 0.23240000 -0.00003500)) (S ( 211400.00000000 -0.00000600) ( 31660.00000000 -0.00004700) ( 7202.00000000 -0.00024400) ( 2040.00000000 -0.00103100) ( 666.40000000 -0.00368300) ( 242.00000000 -0.01151300) ( 95.53000000 -0.03066300) ( 40.23000000 -0.06957200) ( 17.72000000 -0.12399200) ( 8.00500000 -0.15021400) ( 3.53800000 0.01646000) ( 1.45800000 0.39255000) ( 0.58870000 0.53216400) ( 0.23240000 0.19652400)) (S ( 3.53800000 1.00000000)) (S ( 1.45800000 1.00000000)) (S ( 0.58870000 1.00000000)) (S ( 0.23240000 1.00000000)) (P ( 241.90000000 0.00100200) ( 57.17000000 0.00805400) ( 18.13000000 0.03804800) ( 6.62400000 0.12377900) ( 2.62200000 0.26606000) ( 1.05700000 0.37179600) ( 0.41760000 0.33289000) ( 0.15740000 0.12849100)) (P ( 2.62200000 1.00000000)) (P ( 1.05700000 1.00000000)) (P ( 0.41760000 1.00000000)) (P ( 0.15740000 1.00000000)) (D ( 7.76000000 1.00000000)) (D ( 3.03200000 1.00000000)) (D ( 1.18500000 1.00000000)) (D ( 0.46300000 1.00000000)) (F ( 5.39800000 1.00000000)) (F ( 2.07800000 1.00000000)) (F ( 0.80000000 1.00000000)) (G ( 4.33800000 1.00000000)) (G ( 1.51300000 1.00000000)) (H ( 2.99500000 1.00000000)) ) NEON:"H_CCPV5Z" = ( (S ( 262700.00000000 0.00002600) ( 39350.00000000 0.00020000) ( 8955.00000000 0.00105000) ( 2538.00000000 0.00440000) ( 829.90000000 0.01564900) ( 301.50000000 0.04775800) ( 119.00000000 0.12294300) ( 50.00000000 0.25248300) ( 21.98000000 0.36631400) ( 9.89100000 0.27961700) ( 4.32700000 0.06165100) ( 1.80400000 0.00093400) ( 0.72880000 0.00136700) ( 0.28670000 -0.00003800)) (S ( 262700.00000000 -0.00000600) ( 39350.00000000 -0.00004700) ( 8955.00000000 -0.00024700) ( 2538.00000000 -0.00103800) ( 829.90000000 -0.00371100) ( 301.50000000 -0.01159300) ( 119.00000000 -0.03108600) ( 50.00000000 -0.07097200) ( 21.98000000 -0.12726600) ( 9.89100000 -0.15123100) ( 4.32700000 0.02466600) ( 1.80400000 0.39961200) ( 0.72880000 0.52661600) ( 0.28670000 0.19085400)) (S ( 4.32700000 1.00000000)) (S ( 1.80400000 1.00000000)) (S ( 0.72880000 1.00000000)) (S ( 0.28670000 1.00000000)) (P ( 299.10000000 0.00103800) ( 70.73000000 0.00837500) ( 22.48000000 0.03969300) ( 8.24600000 0.12805600) ( 3.26900000 0.27032500) ( 1.31500000 0.37096300) ( 0.51580000 0.32849900) ( 0.19180000 0.12758800)) (P ( 3.26900000 1.00000000)) (P ( 1.31500000 1.00000000)) (P ( 0.51580000 1.00000000)) (P ( 0.19180000 1.00000000)) (D ( 9.83700000 1.00000000)) (D ( 3.84400000 1.00000000)) (D ( 1.50200000 1.00000000)) (D ( 0.58700000 1.00000000)) (F ( 7.09000000 1.00000000)) (F ( 2.73800000 1.00000000)) (F ( 1.05700000 1.00000000)) (G ( 5.46000000 1.00000000)) (G ( 1.88000000 1.00000000)) (H ( 3.77600000 1.00000000)) ) SODIUM:"H_CCPV5Z" = ( (S ( 1224000.0000000000 0.0000050000) ( 183200.0000000000 0.0000370000) ( 41700.0000000000 0.0001960000) ( 11810.0000000000 0.0008270000) ( 3853.0000000000 0.0030030000) ( 1391.0000000000 0.0097030000) ( 542.5000000000 0.0282340000) ( 224.9000000000 0.0732060000) ( 97.9300000000 0.1628970000) ( 44.3100000000 0.2887080000) ( 20.6500000000 0.3468290000) ( 9.7290000000 0.2068650000) ( 4.2280000000 0.0328010000) ( 1.9690000000 -0.0006480000) ( 0.8890000000 0.0014590000)) (S ( 1224000.0000000000 -0.0000010000) ( 183200.0000000000 -0.0000090000) ( 41700.0000000000 -0.0000480000) ( 11810.0000000000 -0.0002020000) ( 3853.0000000000 -0.0007360000) ( 1391.0000000000 -0.0023870000) ( 542.5000000000 -0.0070500000) ( 224.9000000000 -0.0187860000) ( 97.9300000000 -0.0446150000) ( 44.3100000000 -0.0897740000) ( 20.6500000000 -0.1429400000) ( 9.7290000000 -0.1243150000) ( 4.2280000000 0.0999650000) ( 1.9690000000 0.4170800000) ( 0.8890000000 0.4751230000)) (S ( 183200.0000000000 0.0000010000) ( 41700.0000000000 0.0000070000) ( 11810.0000000000 0.0000300000) ( 3853.0000000000 0.0001110000) ( 1391.0000000000 0.0003590000) ( 542.5000000000 0.0010630000) ( 224.9000000000 0.0028270000) ( 97.9300000000 0.0067670000) ( 44.3100000000 0.0136480000) ( 20.6500000000 0.0222810000) ( 9.7290000000 0.0196010000) ( 4.2280000000 -0.0167710000) ( 1.9690000000 -0.0773730000) ( 0.8890000000 -0.1135010000)) (S ( 0.3964000000 1.0000000000)) (S ( 0.0699300000 1.0000000000)) (S ( 0.0328900000 1.0000000000)) (S ( 0.0161200000 1.0000000000)) (P ( 413.4000000000 0.0009080000) ( 97.9800000000 0.0074180000) ( 31.3700000000 0.0357460000) ( 11.6200000000 0.1185200000) ( 4.6710000000 0.2614030000) ( 1.9180000000 0.3783950000) ( 0.7775000000 0.3346320000) ( 0.3013000000 0.1268440000)) (P ( 413.4000000000 -0.0000900000) ( 97.9800000000 -0.0007390000) ( 31.3700000000 -0.0035730000) ( 11.6200000000 -0.0120140000) ( 4.6710000000 -0.0267180000) ( 1.9180000000 -0.0392750000) ( 0.7775000000 -0.0376080000) ( 0.3013000000 -0.0433230000)) (P ( 0.2275000000 1.0000000000)) (P ( 0.0752700000 1.0000000000)) (P ( 0.0312600000 1.0000000000)) (P ( 0.0134200000 1.0000000000)) (D ( 0.2734000000 1.0000000000)) (D ( 0.1538000000 1.0000000000)) (D ( 0.0865000000 1.0000000000)) (D ( 0.0487000000 1.0000000000)) (F ( 0.4000000000 1.0000000000)) (F ( 0.1912000000 1.0000000000)) (F ( 0.1036000000 1.0000000000)) (G ( 0.4250000000 1.0000000000)) (G ( 0.1722000000 1.0000000000)) (H ( 0.2000000000 1.0000000000)) ) MAGNESIUM:"H_CCPV5Z" = ( (S ( 2968000.0000000000 0.0000019718) ( 444300.0000000000 0.0000153362) ( 101100.0000000000 0.0000806852) ( 28640.0000000000 0.0003407710) ( 9343.0000000000 0.0012419400) ( 3373.0000000000 0.0040412400) ( 1316.0000000000 0.0119797000) ( 545.8000000000 0.0324253000) ( 238.1000000000 0.0789332000) ( 108.2000000000 0.1665750000) ( 50.8000000000 0.2828710000) ( 24.4800000000 0.3318900000) ( 11.9300000000 0.2032870000) ( 5.5430000000 0.0382897000) ( 2.6750000000 0.0003089160) ( 1.2630000000 0.0013890700)) (S ( 2968000.0000000000 -0.0000004982) ( 444300.0000000000 -0.0000038756) ( 101100.0000000000 -0.0000203854) ( 28640.0000000000 -0.0000861659) ( 9343.0000000000 -0.0003141760) ( 3373.0000000000 -0.0010257700) ( 1316.0000000000 -0.0030581600) ( 545.8000000000 -0.0084106300) ( 238.1000000000 -0.0211202000) ( 108.2000000000 -0.0476882000) ( 50.8000000000 -0.0924119000) ( 24.4800000000 -0.1425480000) ( 11.9300000000 -0.1261680000) ( 5.5430000000 0.0715282000) ( 2.6750000000 0.3830390000) ( 1.2630000000 0.4901330000)) (S ( 2968000.0000000000 0.0000000960) ( 444300.0000000000 0.0000007462) ( 101100.0000000000 0.0000039312) ( 28640.0000000000 0.0000165812) ( 9343.0000000000 0.0000606257) ( 3373.0000000000 0.0001973220) ( 1316.0000000000 0.0005908810) ( 545.8000000000 0.0016190400) ( 238.1000000000 0.0040975600) ( 108.2000000000 0.0092298900) ( 50.8000000000 0.0182168000) ( 24.4800000000 0.0282884000) ( 11.9300000000 0.0265059000) ( 5.5430000000 -0.0172053000) ( 2.6750000000 -0.0885917000) ( 1.2630000000 -0.1638710000)) (S ( 0.5883000000 1.0000000000)) (S ( 0.1496000000 1.0000000000)) (S ( 0.0670000000 1.0000000000)) (S ( 0.0295200000 1.0000000000)) (P ( 1441.0000000000 0.0001524070) ( 341.4000000000 0.0013276400) ( 110.7000000000 0.0072193700) ( 41.9700000000 0.0285205000) ( 17.4900000000 0.0865346000) ( 7.7530000000 0.1949500000) ( 3.5340000000 0.3120510000) ( 1.6140000000 0.3484760000) ( 0.7299000000 0.2188860000) ( 0.3029000000 0.0435579000)) (P ( 1441.0000000000 -0.0000241031) ( 341.4000000000 -0.0002108090) ( 110.7000000000 -0.0011453000) ( 41.9700000000 -0.0045641700) ( 17.4900000000 -0.0139603000) ( 7.7530000000 -0.0321105000) ( 3.5340000000 -0.0516217000) ( 1.6140000000 -0.0613713000) ( 0.7299000000 -0.0442465000) ( 0.3029000000 0.0523191000)) (P ( 0.1583000000 1.0000000000)) (P ( 0.0819000000 1.0000000000)) (P ( 0.0412300000 1.0000000000)) (P ( 0.0198800000 1.0000000000)) (D ( 0.1100000000 1.0000000000)) (D ( 0.2420000000 1.0000000000)) (D ( 0.5320000000 1.0000000000)) (D ( 1.1710000000 1.0000000000)) (F ( 0.1550000000 1.0000000000)) (F ( 0.2640000000 1.0000000000)) (F ( 0.4480000000 1.0000000000)) (G ( 0.2400000000 1.0000000000)) (G ( 0.4440000000 1.0000000000)) (H ( 0.3750000000 1.0000000000)) ) ALUMINUM:"H_CCPV5Z" = ( (S ( 3269000.0000000000 0.0000021396) ( 489400.0000000000 0.0000166264) ( 111400.0000000000 0.0000875168) ( 31560.0000000000 0.0003689900) ( 10320.0000000000 0.0013390300) ( 3731.0000000000 0.0043563600) ( 1456.0000000000 0.0128955000) ( 604.1000000000 0.0348201000) ( 263.5000000000 0.0843530000) ( 119.8000000000 0.1759070000) ( 56.3200000000 0.2920910000) ( 27.1900000000 0.3282200000) ( 13.2600000000 0.1869270000) ( 6.0520000000 0.0310430000) ( 2.9810000000 -0.0005089220) ( 1.4760000000 0.0014883600)) (S ( 3269000.0000000000 -0.0000005560) ( 489400.0000000000 -0.0000043230) ( 111400.0000000000 -0.0000227413) ( 31560.0000000000 -0.0000960116) ( 10320.0000000000 -0.0003483760) ( 3731.0000000000 -0.0011383600) ( 1456.0000000000 -0.0033874400) ( 604.1000000000 -0.0093150500) ( 263.5000000000 -0.0233023000) ( 119.8000000000 -0.0523486000) ( 56.3200000000 -0.0999499000) ( 27.1900000000 -0.1505600000) ( 13.2600000000 -0.1191210000) ( 6.0520000000 0.1080910000) ( 2.9810000000 0.4111290000) ( 1.4760000000 0.4572140000)) (S ( 3269000.0000000000 0.0000001284) ( 489400.0000000000 0.0000009975) ( 111400.0000000000 0.0000052548) ( 31560.0000000000 0.0000221450) ( 10320.0000000000 0.0000805464) ( 3731.0000000000 0.0002625060) ( 1456.0000000000 0.0007842200) ( 604.1000000000 0.0021503900) ( 263.5000000000 0.0054197400) ( 119.8000000000 0.0121686000) ( 56.3200000000 0.0236823000) ( 27.1900000000 0.0360937000) ( 13.2600000000 0.0303284000) ( 6.0520000000 -0.0309034000) ( 2.9810000000 -0.1191260000) ( 1.4760000000 -0.2111450000)) (S ( 0.7334000000 1.0000000000)) (S ( 0.2447000000 1.0000000000)) (S ( 0.1088000000 1.0000000000)) (S ( 0.0467200000 1.0000000000)) (P ( 1461.0000000000 0.0002086130) ( 346.2000000000 0.0018100500) ( 112.2000000000 0.0097343300) ( 42.5100000000 0.0378266000) ( 17.7200000000 0.1108980000) ( 7.8520000000 0.2342950000) ( 3.5710000000 0.3452450000) ( 1.6370000000 0.3314300000)) (P ( 1461.0000000000 -0.0000371947) ( 346.2000000000 -0.0003285630) ( 112.2000000000 -0.0017426400) ( 42.5100000000 -0.0069482800) ( 17.7200000000 -0.0202807000) ( 7.8520000000 -0.0448657000) ( 3.5710000000 -0.0643278000) ( 1.6370000000 -0.0752666000)) (P ( 0.7382000000 1.0000000000)) (P ( 0.2577000000 1.0000000000)) (P ( 0.0977300000 1.0000000000)) (P ( 0.0369000000 1.0000000000)) (D ( 1.3170000000 1.0000000000)) (D ( 0.5260000000 1.0000000000)) (D ( 0.2100000000 1.0000000000)) (D ( 0.0840000000 1.0000000000)) (F ( 0.1300000000 1.0000000000)) (F ( 0.2580000000 1.0000000000)) (F ( 0.5130000000 1.0000000000)) (G ( 0.2520000000 1.0000000000)) (G ( 0.5430000000 1.0000000000)) (H ( 0.4460000000 1.0000000000)) ) SILICON:"H_CCPV5Z" = ( (S ( 3948000.0000000000 0.0000020371) ( 591100.0000000000 0.0000158394) ( 134500.0000000000 0.0000833590) ( 38120.0000000000 0.0003513610) ( 12460.0000000000 0.0012766000) ( 4504.0000000000 0.0041519100) ( 1758.0000000000 0.0123030000) ( 729.1000000000 0.0333102000) ( 318.0000000000 0.0809845000) ( 144.6000000000 0.1702900000) ( 67.9700000000 0.2868790000) ( 32.8200000000 0.3303400000) ( 16.0300000000 0.1966020000) ( 7.3960000000 0.0354535000) ( 3.6610000000 -0.0005352040) ( 1.8230000000 0.0016146500)) (S ( 3948000.0000000000 -0.0000005421) ( 591100.0000000000 -0.0000042168) ( 134500.0000000000 -0.0000221813) ( 38120.0000000000 -0.0000936028) ( 12460.0000000000 -0.0003401160) ( 4504.0000000000 -0.0011106100) ( 1758.0000000000 -0.0033087800) ( 729.1000000000 -0.0091160200) ( 318.0000000000 -0.0228790000) ( 144.6000000000 -0.0517119000) ( 67.9700000000 -0.0999091000) ( 32.8200000000 -0.1527470000) ( 16.0300000000 -0.1275080000) ( 7.3960000000 0.0946963000) ( 3.6610000000 0.4140360000) ( 1.8230000000 0.4679340000)) (S ( 3948000.0000000000 0.0000001389) ( 591100.0000000000 0.0000010795) ( 134500.0000000000 0.0000056863) ( 38120.0000000000 0.0000239537) ( 12460.0000000000 0.0000872409) ( 4504.0000000000 0.0002841630) ( 1758.0000000000 0.0008498400) ( 729.1000000000 0.0023352700) ( 318.0000000000 0.0059046600) ( 144.6000000000 0.0133461000) ( 67.9700000000 0.0262889000) ( 32.8200000000 0.0407426000) ( 16.0300000000 0.0361476000) ( 7.3960000000 -0.0303923000) ( 3.6610000000 -0.1359610000) ( 1.8230000000 -0.2501440000)) (S ( 0.9147000000 1.0000000000)) (S ( 0.3393000000 1.0000000000)) (S ( 0.1500000000 1.0000000000)) (S ( 0.0643800000 1.0000000000)) (P ( 1780.0000000000 0.0002012060) ( 421.8000000000 0.0017493700) ( 136.7000000000 0.0094814100) ( 51.8100000000 0.0372313000) ( 21.6000000000 0.1107630000) ( 9.5630000000 0.2379330000) ( 4.3500000000 0.3536910000) ( 2.0060000000 0.3288390000)) (P ( 1780.0000000000 -0.0000427152) ( 421.8000000000 -0.0003770390) ( 136.7000000000 -0.0020224000) ( 51.8100000000 -0.0081283300) ( 21.6000000000 -0.0242272000) ( 9.5630000000 -0.0543825000) ( 4.3500000000 -0.0799051000) ( 2.0060000000 -0.0888958000)) (P ( 0.9205000000 1.0000000000)) (P ( 0.3500000000 1.0000000000)) (P ( 0.1381000000 1.0000000000)) (P ( 0.0533800000 1.0000000000)) (D ( 0.1260000000 1.0000000000)) (D ( 0.3210000000 1.0000000000)) (D ( 0.8170000000 1.0000000000)) (D ( 2.0820000000 1.0000000000)) (F ( 0.1690000000 1.0000000000)) (F ( 0.3410000000 1.0000000000)) (F ( 0.6880000000 1.0000000000)) (G ( 0.3200000000 1.0000000000)) (G ( 0.7050000000 1.0000000000)) (H ( 0.5830000000 1.0000000000)) ) PHOSPHORUS:"H_CCPV5Z" = ( (S ( 4666000.0000000000 0.0000019676) ( 698600.0000000000 0.0000152963) ( 159000.0000000000 0.0000804826) ( 45040.0000000000 0.0003397370) ( 14720.0000000000 0.0012329100) ( 5323.0000000000 0.0040134500) ( 2076.0000000000 0.0119124000) ( 861.1000000000 0.0322511000) ( 375.7000000000 0.0786643000) ( 170.8000000000 0.1664580000) ( 80.2900000000 0.2830390000) ( 38.7700000000 0.3319420000) ( 18.9300000000 0.2033520000) ( 8.7960000000 0.0383183000) ( 4.3580000000 -0.0003847200) ( 2.1740000000 0.0015874400)) (S ( 4666000.0000000000 -0.0000005342) ( 698600.0000000000 -0.0000041542) ( 159000.0000000000 -0.0000218484) ( 45040.0000000000 -0.0000923272) ( 14720.0000000000 -0.0003351090) ( 5323.0000000000 -0.0010950800) ( 2076.0000000000 -0.0032679800) ( 861.1000000000 -0.0089995100) ( 375.7000000000 -0.0226528000) ( 170.8000000000 -0.0514650000) ( 80.2900000000 -0.1001860000) ( 38.7700000000 -0.1550750000) ( 18.9300000000 -0.1338180000) ( 8.7960000000 0.0878361000) ( 4.3580000000 0.4225810000) ( 2.1740000000 0.4748990000)) (S ( 4666000.0000000000 0.0000001468) ( 698600.0000000000 0.0000011406) ( 159000.0000000000 0.0000060057) ( 45040.0000000000 0.0000253427) ( 14720.0000000000 0.0000921606) ( 5323.0000000000 0.0003005630) ( 2076.0000000000 0.0008998840) ( 861.1000000000 0.0024735400) ( 375.7000000000 0.0062681200) ( 170.8000000000 0.0142598000) ( 80.2900000000 0.0282769000) ( 38.7700000000 0.0445124000) ( 18.9300000000 0.0407217000) ( 8.7960000000 -0.0301908000) ( 4.3580000000 -0.1528940000) ( 2.1740000000 -0.2824110000)) (S ( 1.0950000000 1.0000000000)) (S ( 0.4400000000 1.0000000000)) (S ( 0.1945000000 1.0000000000)) (S ( 0.0837600000 1.0000000000)) (P ( 2010.0000000000 0.0002159150) ( 476.3000000000 0.0018753600) ( 154.4000000000 0.0101742000) ( 58.5100000000 0.0399856000) ( 24.4000000000 0.1185630000) ( 10.8000000000 0.2518160000) ( 4.9130000000 0.3665650000) ( 2.2690000000 0.3161770000)) (P ( 2010.0000000000 -0.0000511444) ( 476.3000000000 -0.0004483560) ( 154.4000000000 -0.0024234000) ( 58.5100000000 -0.0096982600) ( 24.4000000000 -0.0290965000) ( 10.8000000000 -0.0641726000) ( 4.9130000000 -0.0945071000) ( 2.2690000000 -0.0934700000)) (P ( 1.0430000000 1.0000000000)) (P ( 0.4313000000 1.0000000000)) (P ( 0.1767000000 1.0000000000)) (P ( 0.0700900000 1.0000000000)) (D ( 0.1660000000 1.0000000000)) (D ( 0.4180000000 1.0000000000)) (D ( 1.0540000000 1.0000000000)) (D ( 2.6560000000 1.0000000000)) (F ( 0.2190000000 1.0000000000)) (F ( 0.4500000000 1.0000000000)) (F ( 0.9230000000 1.0000000000)) (G ( 0.4120000000 1.0000000000)) (G ( 0.9030000000 1.0000000000)) (H ( 0.7450000000 1.0000000000)) ) SULFUR:"H_CCPV5Z" = ( (S ( 5481000.0000000000 0.0000018934) ( 820600.0000000000 0.0000147211) ( 186700.0000000000 0.0000775084) ( 52880.0000000000 0.0003272240) ( 17250.0000000000 0.0011936500) ( 6226.0000000000 0.0038839300) ( 2429.0000000000 0.0115336000) ( 1007.0000000000 0.0312748000) ( 439.5000000000 0.0764387000) ( 199.8000000000 0.1627000000) ( 93.9200000000 0.2793280000) ( 45.3400000000 0.3331450000) ( 22.1500000000 0.2098360000) ( 10.3400000000 0.0415974000) ( 5.1190000000 -0.0004505520) ( 2.5530000000 0.0016885500)) (S ( 5481000.0000000000 -0.0000005229) ( 820600.0000000000 -0.0000040669) ( 186700.0000000000 -0.0000214065) ( 52880.0000000000 -0.0000904540) ( 17250.0000000000 -0.0003300800) ( 6226.0000000000 -0.0010778200) ( 2429.0000000000 -0.0032187400) ( 1007.0000000000 -0.0088721700) ( 439.5000000000 -0.0223771000) ( 199.8000000000 -0.0510577000) ( 93.9200000000 -0.1002250000) ( 45.3400000000 -0.1567950000) ( 22.1500000000 -0.1397480000) ( 10.3400000000 0.0810059000) ( 5.1190000000 0.4308830000) ( 2.5530000000 0.4816880000)) (S ( 5481000.0000000000 0.0000001518) ( 820600.0000000000 0.0000011801) ( 186700.0000000000 0.0000062170) ( 52880.0000000000 0.0000262405) ( 17250.0000000000 0.0000959040) ( 6226.0000000000 0.0003126780) ( 2429.0000000000 0.0009363220) ( 1007.0000000000 0.0025779000) ( 439.5000000000 0.0065412100) ( 199.8000000000 0.0149630000) ( 93.9200000000 0.0298940000) ( 45.3400000000 0.0476946000) ( 22.1500000000 0.0449556000) ( 10.3400000000 -0.0293009000) ( 5.1190000000 -0.1689160000) ( 2.5530000000 -0.3110140000)) (S ( 1.2820000000 1.0000000000)) (S ( 0.5450000000 1.0000000000)) (S ( 0.2411000000 1.0000000000)) (S ( 0.1035000000 1.0000000000)) (P ( 2200.0000000000 0.0002390490) ( 521.4000000000 0.0020768600) ( 169.0000000000 0.0112363000) ( 64.0500000000 0.0440690000) ( 26.7200000000 0.1291680000) ( 11.8300000000 0.2690830000) ( 5.3780000000 0.3786110000) ( 2.4820000000 0.2967790000)) (P ( 2200.0000000000 -0.0000608562) ( 521.4000000000 -0.0005304190) ( 169.0000000000 -0.0028791500) ( 64.0500000000 -0.0114397000) ( 26.7200000000 -0.0342764000) ( 11.8300000000 -0.0735811000) ( 5.3780000000 -0.1077820000) ( 2.4820000000 -0.0879769000)) (P ( 1.1160000000 1.0000000000)) (P ( 0.4848000000 1.0000000000)) (P ( 0.2006000000 1.0000000000)) (P ( 0.0795100000 1.0000000000)) (D ( 0.2050000000 1.0000000000)) (D ( 0.5120000000 1.0000000000)) (D ( 1.2810000000 1.0000000000)) (D ( 3.2030000000 1.0000000000)) (F ( 0.2550000000 1.0000000000)) (F ( 0.5290000000 1.0000000000)) (F ( 1.0960000000 1.0000000000)) (G ( 0.4630000000 1.0000000000)) (G ( 1.0710000000 1.0000000000)) (H ( 0.8720000000 1.0000000000)) ) CHLORINE:"H_CCPV5Z" = ( (S ( 6410000.0000000000 0.0000018135) ( 959600.0000000000 0.0000141118) ( 218300.0000000000 0.0000742406) ( 61810.0000000000 0.0003141310) ( 20140.0000000000 0.0011464200) ( 7264.0000000000 0.0037388800) ( 2832.0000000000 0.0110946000) ( 1175.0000000000 0.0301152000) ( 512.6000000000 0.0739145000) ( 233.0000000000 0.1582580000) ( 109.5000000000 0.2747530000) ( 52.8600000000 0.3340660000) ( 25.8400000000 0.2175890000) ( 12.1700000000 0.0457278000) ( 6.0300000000 -0.0001347390) ( 3.0120000000 0.0016393300)) (S ( 6410000.0000000000 -0.0000005083) ( 959600.0000000000 -0.0000039563) ( 218300.0000000000 -0.0000208095) ( 61810.0000000000 -0.0000881175) ( 20140.0000000000 -0.0003217420) ( 7264.0000000000 -0.0010527700) ( 2832.0000000000 -0.0031418300) ( 1175.0000000000 -0.0086636300) ( 512.6000000000 -0.0219353000) ( 233.0000000000 -0.0502584000) ( 109.5000000000 -0.0995414000) ( 52.8600000000 -0.1576470000) ( 25.8400000000 -0.1460240000) ( 12.1700000000 0.0692230000) ( 6.0300000000 0.4304120000) ( 3.0120000000 0.4908020000)) (S ( 6410000.0000000000 0.0000001538) ( 959600.0000000000 0.0000011965) ( 218300.0000000000 0.0000062983) ( 61810.0000000000 0.0000266450) ( 20140.0000000000 0.0000974162) ( 7264.0000000000 0.0003183600) ( 2832.0000000000 0.0009523770) ( 1175.0000000000 0.0026243000) ( 512.6000000000 0.0066816000) ( 233.0000000000 0.0153595000) ( 109.5000000000 0.0309432000) ( 52.8600000000 0.0500638000) ( 25.8400000000 0.0489782000) ( 12.1700000000 -0.0260807000) ( 6.0300000000 -0.1784260000) ( 3.0120000000 -0.3323240000)) (S ( 1.5110000000 1.0000000000)) (S ( 0.6604000000 1.0000000000)) (S ( 0.2926000000 1.0000000000)) (S ( 0.1254000000 1.0000000000)) (P ( 2548.0000000000 0.0002357020) ( 603.7000000000 0.0020515800) ( 195.6000000000 0.0111543000) ( 74.1500000000 0.0439816000) ( 30.9400000000 0.1299940000) ( 13.6900000000 0.2729590000) ( 6.2290000000 0.3836900000) ( 2.8780000000 0.2918700000)) (P ( 2548.0000000000 -0.0000635410) ( 603.7000000000 -0.0005532590) ( 195.6000000000 -0.0030279500) ( 74.1500000000 -0.0120650000) ( 30.9400000000 -0.0366348000) ( 13.6900000000 -0.0790764000) ( 6.2290000000 -0.1174220000) ( 2.8780000000 -0.0860943000)) (P ( 1.2820000000 1.0000000000)) (P ( 0.5641000000 1.0000000000)) (P ( 0.2348000000 1.0000000000)) (P ( 0.0931200000 1.0000000000)) (D ( 0.2500000000 1.0000000000)) (D ( 0.6180000000 1.0000000000)) (D ( 1.5290000000 1.0000000000)) (D ( 3.7810000000 1.0000000000)) (F ( 0.3200000000 1.0000000000)) (F ( 0.6560000000 1.0000000000)) (F ( 1.3450000000 1.0000000000)) (G ( 0.5560000000 1.0000000000)) (G ( 1.3020000000 1.0000000000)) (H ( 1.0530000000 1.0000000000)) ) ARGON:"H_CCPV5Z" = ( (S ( 7401000.0000000000 0.0000017500) ( 1108000.0000000000 0.0000136100) ( 252100.0000000000 0.0000716300) ( 71380.0000000000 0.0003030300) ( 23260.0000000000 0.0011060800) ( 8390.0000000000 0.0036067100) ( 3271.0000000000 0.0107132100) ( 1357.0000000000 0.0291067700) ( 592.0000000000 0.0716601100) ( 269.1000000000 0.1541405300) ( 126.5000000000 0.2704170700) ( 61.0300000000 0.3348547000) ( 29.8600000000 0.2243463100) ( 14.1700000000 0.0500028400) ( 7.0220000000 0.0000645900) ( 3.5110000000 0.0016864100)) (S ( 7401000.0000000000 -0.0000005000) ( 1108000.0000000000 -0.0000038700) ( 252100.0000000000 -0.0000203400) ( 71380.0000000000 -0.0000860900) ( 23260.0000000000 -0.0003144400) ( 8390.0000000000 -0.0010284100) ( 3271.0000000000 -0.0030726700) ( 1357.0000000000 -0.0084753200) ( 592.0000000000 -0.0215200800) ( 269.1000000000 -0.0494493200) ( 126.5000000000 -0.0987759200) ( 61.0300000000 -0.1583082200) ( 29.8600000000 -0.1514029800) ( 14.1700000000 0.0582426400) ( 7.0220000000 0.4293830500) ( 3.5110000000 0.4990888400)) (S ( 7401000.0000000000 0.0000001600) ( 1108000.0000000000 0.0000012100) ( 252100.0000000000 0.0000063600) ( 71380.0000000000 0.0000268900) ( 23260.0000000000 0.0000983400) ( 8390.0000000000 0.0003212900) ( 3271.0000000000 0.0009620000) ( 1357.0000000000 0.0026524500) ( 592.0000000000 0.0067703500) ( 269.1000000000 0.0156172700) ( 126.5000000000 0.0317166600) ( 61.0300000000 0.0519974200) ( 29.8600000000 0.0524751400) ( 14.1700000000 -0.0226414700) ( 7.0220000000 -0.1860622900) ( 3.5110000000 -0.3501454700)) (S ( 1.7580000000 1.0000000000)) (S ( 0.7841000000 1.0000000000)) (S ( 0.3480000000 1.0000000000)) (S ( 0.1491000000 1.0000000000)) (P ( 2927.0000000000 0.0002319900) ( 693.5000000000 0.0020232900) ( 224.7000000000 0.0110340100) ( 85.1700000000 0.0438397000) ( 35.5300000000 0.1303590400) ( 15.7300000000 0.2757499100) ( 7.1650000000 0.3876433000) ( 3.3220000000 0.2874074100)) (P ( 2927.0000000000 -0.0000649100) ( 693.5000000000 -0.0005653100) ( 224.7000000000 -0.0031098800) ( 85.1700000000 -0.0124696400) ( 35.5300000000 -0.0382246500) ( 15.7300000000 -0.0830791800) ( 7.1650000000 -0.1245940900) ( 3.3220000000 -0.0832971300)) (P ( 1.4780000000 1.0000000000)) (P ( 0.6552000000 1.0000000000)) (P ( 0.2751000000 1.0000000000)) (P ( 0.1097000000 1.0000000000)) (D ( 0.3090000000 1.0000000000)) (D ( 0.7700000000 1.0000000000)) (D ( 1.9170000000 1.0000000000)) (D ( 4.7760000000 1.0000000000)) (F ( 0.4080000000 1.0000000000)) (F ( 0.8250000000 1.0000000000)) (F ( 1.6680000000 1.0000000000)) (G ( 0.6650000000 1.0000000000)) (G ( 1.5620000000 1.0000000000)) (H ( 1.2640000000 1.0000000000)) ) CALCIUM:"H_CCPV5Z" = ( (S ( 28249600.0000000 0.00000043) ( 4250190.0000000 0.00000329) ( 975014.0000000 0.00001714) ( 277446.0000000 0.00007228) ( 90454.7000000 0.00026522) ( 32515.9000000 0.00087484) ( 12610.6000000 0.00264991) ( 5190.7700000 0.00748447) ( 2242.3300000 0.01973093) ( 1011.5300000 0.04779799) ( 475.5470000 0.10359562) ( 232.0720000 0.19293018) ( 116.8740000 0.28626757) ( 60.3427000 0.29278494) ( 31.5244000 0.16312798) ( 16.0308000 0.03221688) ( 8.4599200 0.00059258) ( 4.5271800 0.00104790) ( 2.4185900 -0.00038379) ( 1.2512900 0.00015772) ( 0.6434300 -0.00014357) ( 0.3291800 0.00005770)) (S ( 28249600.0000000 -0.00000012) ( 4250190.0000000 -0.00000096) ( 975014.0000000 -0.00000497) ( 277446.0000000 -0.00002099) ( 90454.7000000 -0.00007701) ( 32515.9000000 -0.00025431) ( 12610.6000000 -0.00077168) ( 5190.7700000 -0.00219083) ( 2242.3300000 -0.00583567) ( 1011.5300000 -0.01446869) ( 475.5470000 -0.03280384) ( 232.0720000 -0.06674435) ( 116.8740000 -0.11668667) ( 60.3427000 -0.15919701) ( 31.5244000 -0.11620650) ( 16.0308000 0.10547012) ( 8.4599200 0.42483472) ( 4.5271800 0.45779736) ( 2.4185900 0.16619966) ( 1.2512900 0.01462386) ( 0.6434300 0.00204654) ( 0.3291800 0.00019519)) (S ( 28249600.0000000 0.00000004) ( 4250190.0000000 0.00000033) ( 975014.0000000 0.00000172) ( 277446.0000000 0.00000724) ( 90454.7000000 0.00002656) ( 32515.9000000 0.00008772) ( 12610.6000000 0.00026618) ( 5190.7700000 0.00075622) ( 2242.3300000 0.00201618) ( 1011.5300000 0.00501203) ( 475.5470000 0.01141485) ( 232.0720000 0.02345426) ( 116.8740000 0.04173784) ( 60.3427000 0.05894305) ( 31.5244000 0.04503419) ( 16.0308000 -0.04437618) ( 8.4599200 -0.21875449) ( 4.5271800 -0.36363043) ( 2.4185900 -0.15422068) ( 1.2512900 0.35238152) ( 0.6434300 0.61412099) ( 0.3291800 0.30037275)) (S ( 28249600.0000000 -0.00000001) ( 4250190.0000000 -0.00000008) ( 975014.0000000 -0.00000041) ( 277446.0000000 -0.00000173) ( 90454.7000000 -0.00000634) ( 32515.9000000 -0.00002094) ( 12610.6000000 -0.00006356) ( 5190.7700000 -0.00018056) ( 2242.3300000 -0.00048155) ( 1011.5300000 -0.00119721) ( 475.5470000 -0.00272889) ( 232.0720000 -0.00561187) ( 116.8740000 -0.01001305) ( 60.3427000 -0.01419051) ( 31.5244000 -0.01092170) ( 16.0308000 0.01086343) ( 8.4599200 0.05501493) ( 4.5271800 0.09688214) ( 2.4185900 0.03947968) ( 1.2512900 -0.10866983) ( 0.6434300 -0.22728320) ( 0.3291800 -0.25708490)) (S ( 0.1423900 1.0000000 )) (S ( 0.0781900 1.0000000 )) (S ( 0.0376300 1.0000000 )) (S ( 0.0182900 1.0000000 )) (P ( 406353.0000000 0.00000023) ( 13600.7000000 0.00002393) ( 3235.4700000 0.00021218) ( 1053.0500000 0.00122733) ( 403.5690000 0.00545277) ( 171.4900000 0.01962669) ( 78.2363000 0.05827993) ( 37.6065000 0.13955299) ( 18.7090000 0.25592562) ( 9.5004100 0.33998132) ( 4.9055700 0.27304774) ( 2.5267000 0.09644148) ( 1.2713900 0.00955231) ( 0.6260100 0.00067589)) (P ( 406353.0000000 -0.00000007) ( 13600.7000000 -0.00000779) ( 3235.4700000 -0.00006908) ( 1053.0500000 -0.00040059) ( 403.5690000 -0.00178490) ( 171.4900000 -0.00648320) ( 78.2363000 -0.01956244) ( 37.6065000 -0.04824767) ( 18.7090000 -0.09128611) ( 9.5004100 -0.12842086) ( 4.9055700 -0.09952292) ( 2.5267000 0.09012384) ( 1.2713900 0.35519880) ( 0.6260100 0.44448891)) (P ( 406353.0000000 0.00000002) ( 13600.7000000 0.00000162) ( 3235.4700000 0.00001439) ( 1053.0500000 0.00008354) ( 403.5690000 0.00037208) ( 171.4900000 0.00135333) ( 78.2363000 0.00408642) ( 37.6065000 0.01011073) ( 18.7090000 0.01916725) ( 9.5004100 0.02716132) ( 4.9055700 0.02080774) ( 2.5267000 -0.02308515) ( 1.2713900 -0.08551094) ( 0.6260100 -0.11794499)) (P ( 0.3009900 1.0000000 )) (P ( 0.1176900 1.0000000 )) (P ( 0.0511600 1.0000000 )) (P ( 0.0214200 1.0000000 )) (D ( 39.5628000 0.00344600) ( 11.4373000 0.02136000) ( 3.9674300 0.07544800) ( 1.5247800 0.17152800)) (D ( 0.5904700 1.0000000 )) (D ( 0.2191400 1.0000000 )) (D ( 0.0795700 1.0000000 )) (D ( 0.0283400 1.0000000 )) (F ( 0.0860000 1.0000000 )) (F ( 0.2580000 1.0000000 )) (F ( 0.7741000 1.0000000 )) (G ( 0.1012000 1.0000000 )) (G ( 0.3023000 1.0000000 )) (H ( 0.2534000 1.0000000 )) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPV((5+D))Z % Correlation Consistent Polarized Valence Quintuple Zeta + tight d Basis % ---------------------------------------------------------------------- % Elements Contraction References % Al- Ar: (20s,12p,5d,3f,2g,1h) -> [7s,6p,5d,3f,2g,1h] T.H. Dunning, Jr., % K.A. Peterson and A.K. % Wilson, J. Chem. Phys. % 114, 9244 (2001) % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cc-pv((5+D))Z basis sets from Dunning. Include an additional shell of % tight d-functions. % % T. H. Dunning, K. A. Peterson, and A. K. Wilson, JCP 114, (2001). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ALUMINUM:"H_CCPV5_PLUS_DZ" = ( (S ( 3269000.0000000000 0.0000021396) ( 489400.0000000000 0.0000166264) ( 111400.0000000000 0.0000875168) ( 31560.0000000000 0.0003689900) ( 10320.0000000000 0.0013390300) ( 3731.0000000000 0.0043563600) ( 1456.0000000000 0.0128955000) ( 604.1000000000 0.0348201000) ( 263.5000000000 0.0843530000) ( 119.8000000000 0.1759070000) ( 56.3200000000 0.2920910000) ( 27.1900000000 0.3282200000) ( 13.2600000000 0.1869270000) ( 6.0520000000 0.0310430000) ( 2.9810000000 -0.0005089220) ( 1.4760000000 0.0014883600)) (S ( 3269000.0000000000 -0.0000005560) ( 489400.0000000000 -0.0000043230) ( 111400.0000000000 -0.0000227413) ( 31560.0000000000 -0.0000960116) ( 10320.0000000000 -0.0003483760) ( 3731.0000000000 -0.0011383600) ( 1456.0000000000 -0.0033874400) ( 604.1000000000 -0.0093150500) ( 263.5000000000 -0.0233023000) ( 119.8000000000 -0.0523486000) ( 56.3200000000 -0.0999499000) ( 27.1900000000 -0.1505600000) ( 13.2600000000 -0.1191210000) ( 6.0520000000 0.1080910000) ( 2.9810000000 0.4111290000) ( 1.4760000000 0.4572140000)) (S ( 3269000.0000000000 0.0000001284) ( 489400.0000000000 0.0000009975) ( 111400.0000000000 0.0000052548) ( 31560.0000000000 0.0000221450) ( 10320.0000000000 0.0000805464) ( 3731.0000000000 0.0002625060) ( 1456.0000000000 0.0007842200) ( 604.1000000000 0.0021503900) ( 263.5000000000 0.0054197400) ( 119.8000000000 0.0121686000) ( 56.3200000000 0.0236823000) ( 27.1900000000 0.0360937000) ( 13.2600000000 0.0303284000) ( 6.0520000000 -0.0309034000) ( 2.9810000000 -0.1191260000) ( 1.4760000000 -0.2111450000)) (S ( 0.7334000000 1.0000000000)) (S ( 0.2447000000 1.0000000000)) (S ( 0.1088000000 1.0000000000)) (S ( 0.0467200000 1.0000000000)) (P ( 1461.0000000000 0.0002086130) ( 346.2000000000 0.0018100500) ( 112.2000000000 0.0097343300) ( 42.5100000000 0.0378266000) ( 17.7200000000 0.1108980000) ( 7.8520000000 0.2342950000) ( 3.5710000000 0.3452450000) ( 1.6370000000 0.3314300000)) (P ( 1461.0000000000 -0.0000371947) ( 346.2000000000 -0.0003285630) ( 112.2000000000 -0.0017426400) ( 42.5100000000 -0.0069482800) ( 17.7200000000 -0.0202807000) ( 7.8520000000 -0.0448657000) ( 3.5710000000 -0.0643278000) ( 1.6370000000 -0.0752666000)) (P ( 0.7382000000 1.0000000000)) (P ( 0.2577000000 1.0000000000)) (P ( 0.0977300000 1.0000000000)) (P ( 0.0369000000 1.0000000000)) (D ( 2.6390000000 1.0000000000)) (D ( 0.5880000000 1.0000000000)) (D ( 0.3800000000 1.0000000000)) (D ( 0.1800000000 1.0000000000)) (D ( 0.0728000000 1.0000000000)) (F ( 0.1300000000 1.0000000000)) (F ( 0.2580000000 1.0000000000)) (F ( 0.5130000000 1.0000000000)) (G ( 0.2520000000 1.0000000000)) (G ( 0.5430000000 1.0000000000)) (H ( 0.4460000000 1.0000000000)) ) SILICON:"H_CCPV5_PLUS_DZ" = ( (S ( 3948000.0000000000 0.0000020371) ( 591100.0000000000 0.0000158394) ( 134500.0000000000 0.0000833590) ( 38120.0000000000 0.0003513610) ( 12460.0000000000 0.0012766000) ( 4504.0000000000 0.0041519100) ( 1758.0000000000 0.0123030000) ( 729.1000000000 0.0333102000) ( 318.0000000000 0.0809845000) ( 144.6000000000 0.1702900000) ( 67.9700000000 0.2868790000) ( 32.8200000000 0.3303400000) ( 16.0300000000 0.1966020000) ( 7.3960000000 0.0354535000) ( 3.6610000000 -0.0005352040) ( 1.8230000000 0.0016146500)) (S ( 3948000.0000000000 -0.0000005421) ( 591100.0000000000 -0.0000042168) ( 134500.0000000000 -0.0000221813) ( 38120.0000000000 -0.0000936028) ( 12460.0000000000 -0.0003401160) ( 4504.0000000000 -0.0011106100) ( 1758.0000000000 -0.0033087800) ( 729.1000000000 -0.0091160200) ( 318.0000000000 -0.0228790000) ( 144.6000000000 -0.0517119000) ( 67.9700000000 -0.0999091000) ( 32.8200000000 -0.1527470000) ( 16.0300000000 -0.1275080000) ( 7.3960000000 0.0946963000) ( 3.6610000000 0.4140360000) ( 1.8230000000 0.4679340000)) (S ( 3948000.0000000000 0.0000001389) ( 591100.0000000000 0.0000010795) ( 134500.0000000000 0.0000056863) ( 38120.0000000000 0.0000239537) ( 12460.0000000000 0.0000872409) ( 4504.0000000000 0.0002841630) ( 1758.0000000000 0.0008498400) ( 729.1000000000 0.0023352700) ( 318.0000000000 0.0059046600) ( 144.6000000000 0.0133461000) ( 67.9700000000 0.0262889000) ( 32.8200000000 0.0407426000) ( 16.0300000000 0.0361476000) ( 7.3960000000 -0.0303923000) ( 3.6610000000 -0.1359610000) ( 1.8230000000 -0.2501440000)) (S ( 0.9147000000 1.0000000000)) (S ( 0.3393000000 1.0000000000)) (S ( 0.1500000000 1.0000000000)) (S ( 0.0643800000 1.0000000000)) (P ( 1780.0000000000 0.0002012060) ( 421.8000000000 0.0017493700) ( 136.7000000000 0.0094814100) ( 51.8100000000 0.0372313000) ( 21.6000000000 0.1107630000) ( 9.5630000000 0.2379330000) ( 4.3500000000 0.3536910000) ( 2.0060000000 0.3288390000)) (P ( 1780.0000000000 -0.0000427152) ( 421.8000000000 -0.0003770390) ( 136.7000000000 -0.0020224000) ( 51.8100000000 -0.0081283300) ( 21.6000000000 -0.0242272000) ( 9.5630000000 -0.0543825000) ( 4.3500000000 -0.0799051000) ( 2.0060000000 -0.0888958000)) (P ( 0.9205000000 1.0000000000)) (P ( 0.3500000000 1.0000000000)) (P ( 0.1381000000 1.0000000000)) (P ( 0.0533800000 1.0000000000)) (D ( 3.7380000000 1.0000000000)) (D ( 0.8930000000 1.0000000000)) (D ( 0.5330000000 1.0000000000)) (D ( 0.2580000000 1.0000000000)) (D ( 0.1050000000 1.0000000000)) (F ( 0.1690000000 1.0000000000)) (F ( 0.3410000000 1.0000000000)) (F ( 0.6880000000 1.0000000000)) (G ( 0.3200000000 1.0000000000)) (G ( 0.7050000000 1.0000000000)) (H ( 0.5830000000 1.0000000000)) ) PHOSPHORUS:"H_CCPV5_PLUS_DZ" = ( (S ( 4666000.0000000000 0.0000019676) ( 698600.0000000000 0.0000152963) ( 159000.0000000000 0.0000804826) ( 45040.0000000000 0.0003397370) ( 14720.0000000000 0.0012329100) ( 5323.0000000000 0.0040134500) ( 2076.0000000000 0.0119124000) ( 861.1000000000 0.0322511000) ( 375.7000000000 0.0786643000) ( 170.8000000000 0.1664580000) ( 80.2900000000 0.2830390000) ( 38.7700000000 0.3319420000) ( 18.9300000000 0.2033520000) ( 8.7960000000 0.0383183000) ( 4.3580000000 -0.0003847200) ( 2.1740000000 0.0015874400)) (S ( 4666000.0000000000 -0.0000005342) ( 698600.0000000000 -0.0000041542) ( 159000.0000000000 -0.0000218484) ( 45040.0000000000 -0.0000923272) ( 14720.0000000000 -0.0003351090) ( 5323.0000000000 -0.0010950800) ( 2076.0000000000 -0.0032679800) ( 861.1000000000 -0.0089995100) ( 375.7000000000 -0.0226528000) ( 170.8000000000 -0.0514650000) ( 80.2900000000 -0.1001860000) ( 38.7700000000 -0.1550750000) ( 18.9300000000 -0.1338180000) ( 8.7960000000 0.0878361000) ( 4.3580000000 0.4225810000) ( 2.1740000000 0.4748990000)) (S ( 4666000.0000000000 0.0000001468) ( 698600.0000000000 0.0000011406) ( 159000.0000000000 0.0000060057) ( 45040.0000000000 0.0000253427) ( 14720.0000000000 0.0000921606) ( 5323.0000000000 0.0003005630) ( 2076.0000000000 0.0008998840) ( 861.1000000000 0.0024735400) ( 375.7000000000 0.0062681200) ( 170.8000000000 0.0142598000) ( 80.2900000000 0.0282769000) ( 38.7700000000 0.0445124000) ( 18.9300000000 0.0407217000) ( 8.7960000000 -0.0301908000) ( 4.3580000000 -0.1528940000) ( 2.1740000000 -0.2824110000)) (S ( 1.0950000000 1.0000000000)) (S ( 0.4400000000 1.0000000000)) (S ( 0.1945000000 1.0000000000)) (S ( 0.0837600000 1.0000000000)) (P ( 2010.0000000000 0.0002159150) ( 476.3000000000 0.0018753600) ( 154.4000000000 0.0101742000) ( 58.5100000000 0.0399856000) ( 24.4000000000 0.1185630000) ( 10.8000000000 0.2518160000) ( 4.9130000000 0.3665650000) ( 2.2690000000 0.3161770000)) (P ( 2010.0000000000 -0.0000511444) ( 476.3000000000 -0.0004483560) ( 154.4000000000 -0.0024234000) ( 58.5100000000 -0.0096982600) ( 24.4000000000 -0.0290965000) ( 10.8000000000 -0.0641726000) ( 4.9130000000 -0.0945071000) ( 2.2690000000 -0.0934700000)) (P ( 1.0430000000 1.0000000000)) (P ( 0.4313000000 1.0000000000)) (P ( 0.1767000000 1.0000000000)) (P ( 0.0700900000 1.0000000000)) (D ( 5.1030000000 1.0000000000)) (D ( 1.2540000000 1.0000000000)) (D ( 0.7240000000 1.0000000000)) (D ( 0.3540000000 1.0000000000)) (D ( 0.1440000000 1.0000000000)) (F ( 0.2190000000 1.0000000000)) (F ( 0.4500000000 1.0000000000)) (F ( 0.9230000000 1.0000000000)) (G ( 0.4120000000 1.0000000000)) (G ( 0.9030000000 1.0000000000)) (H ( 0.7450000000 1.0000000000)) ) SULFUR:"H_CCPV5_PLUS_DZ" = ( (S ( 5481000.0000000000 0.0000018934) ( 820600.0000000000 0.0000147211) ( 186700.0000000000 0.0000775084) ( 52880.0000000000 0.0003272240) ( 17250.0000000000 0.0011936500) ( 6226.0000000000 0.0038839300) ( 2429.0000000000 0.0115336000) ( 1007.0000000000 0.0312748000) ( 439.5000000000 0.0764387000) ( 199.8000000000 0.1627000000) ( 93.9200000000 0.2793280000) ( 45.3400000000 0.3331450000) ( 22.1500000000 0.2098360000) ( 10.3400000000 0.0415974000) ( 5.1190000000 -0.0004505520) ( 2.5530000000 0.0016885500)) (S ( 5481000.0000000000 -0.0000005229) ( 820600.0000000000 -0.0000040669) ( 186700.0000000000 -0.0000214065) ( 52880.0000000000 -0.0000904540) ( 17250.0000000000 -0.0003300800) ( 6226.0000000000 -0.0010778200) ( 2429.0000000000 -0.0032187400) ( 1007.0000000000 -0.0088721700) ( 439.5000000000 -0.0223771000) ( 199.8000000000 -0.0510577000) ( 93.9200000000 -0.1002250000) ( 45.3400000000 -0.1567950000) ( 22.1500000000 -0.1397480000) ( 10.3400000000 0.0810059000) ( 5.1190000000 0.4308830000) ( 2.5530000000 0.4816880000)) (S ( 5481000.0000000000 0.0000001518) ( 820600.0000000000 0.0000011801) ( 186700.0000000000 0.0000062170) ( 52880.0000000000 0.0000262405) ( 17250.0000000000 0.0000959040) ( 6226.0000000000 0.0003126780) ( 2429.0000000000 0.0009363220) ( 1007.0000000000 0.0025779000) ( 439.5000000000 0.0065412100) ( 199.8000000000 0.0149630000) ( 93.9200000000 0.0298940000) ( 45.3400000000 0.0476946000) ( 22.1500000000 0.0449556000) ( 10.3400000000 -0.0293009000) ( 5.1190000000 -0.1689160000) ( 2.5530000000 -0.3110140000)) (S ( 1.2820000000 1.0000000000)) (S ( 0.5450000000 1.0000000000)) (S ( 0.2411000000 1.0000000000)) (S ( 0.1035000000 1.0000000000)) (P ( 2200.0000000000 0.0002390490) ( 521.4000000000 0.0020768600) ( 169.0000000000 0.0112363000) ( 64.0500000000 0.0440690000) ( 26.7200000000 0.1291680000) ( 11.8300000000 0.2690830000) ( 5.3780000000 0.3786110000) ( 2.4820000000 0.2967790000)) (P ( 2200.0000000000 -0.0000608562) ( 521.4000000000 -0.0005304190) ( 169.0000000000 -0.0028791500) ( 64.0500000000 -0.0114397000) ( 26.7200000000 -0.0342764000) ( 11.8300000000 -0.0735811000) ( 5.3780000000 -0.1077820000) ( 2.4820000000 -0.0879769000)) (P ( 1.1160000000 1.0000000000)) (P ( 0.4848000000 1.0000000000)) (P ( 0.2006000000 1.0000000000)) (P ( 0.0795100000 1.0000000000)) (D ( 6.5100000000 1.0000000000)) (D ( 1.5900000000 1.0000000000)) (D ( 0.8860000000 1.0000000000)) (D ( 0.4380000000 1.0000000000)) (D ( 0.1770000000 1.0000000000)) (F ( 0.2550000000 1.0000000000)) (F ( 0.5290000000 1.0000000000)) (F ( 1.0960000000 1.0000000000)) (G ( 0.4630000000 1.0000000000)) (G ( 1.0710000000 1.0000000000)) (H ( 0.8720000000 1.0000000000)) ) CHLORINE:"H_CCPV5_PLUS_DZ" = ( (S ( 6410000.0000000000 0.0000018135) ( 959600.0000000000 0.0000141118) ( 218300.0000000000 0.0000742406) ( 61810.0000000000 0.0003141310) ( 20140.0000000000 0.0011464200) ( 7264.0000000000 0.0037388800) ( 2832.0000000000 0.0110946000) ( 1175.0000000000 0.0301152000) ( 512.6000000000 0.0739145000) ( 233.0000000000 0.1582580000) ( 109.5000000000 0.2747530000) ( 52.8600000000 0.3340660000) ( 25.8400000000 0.2175890000) ( 12.1700000000 0.0457278000) ( 6.0300000000 -0.0001347390) ( 3.0120000000 0.0016393300)) (S ( 6410000.0000000000 -0.0000005083) ( 959600.0000000000 -0.0000039563) ( 218300.0000000000 -0.0000208095) ( 61810.0000000000 -0.0000881175) ( 20140.0000000000 -0.0003217420) ( 7264.0000000000 -0.0010527700) ( 2832.0000000000 -0.0031418300) ( 1175.0000000000 -0.0086636300) ( 512.6000000000 -0.0219353000) ( 233.0000000000 -0.0502584000) ( 109.5000000000 -0.0995414000) ( 52.8600000000 -0.1576470000) ( 25.8400000000 -0.1460240000) ( 12.1700000000 0.0692230000) ( 6.0300000000 0.4304120000) ( 3.0120000000 0.4908020000)) (S ( 6410000.0000000000 0.0000001538) ( 959600.0000000000 0.0000011965) ( 218300.0000000000 0.0000062983) ( 61810.0000000000 0.0000266450) ( 20140.0000000000 0.0000974162) ( 7264.0000000000 0.0003183600) ( 2832.0000000000 0.0009523770) ( 1175.0000000000 0.0026243000) ( 512.6000000000 0.0066816000) ( 233.0000000000 0.0153595000) ( 109.5000000000 0.0309432000) ( 52.8600000000 0.0500638000) ( 25.8400000000 0.0489782000) ( 12.1700000000 -0.0260807000) ( 6.0300000000 -0.1784260000) ( 3.0120000000 -0.3323240000)) (S ( 1.5110000000 1.0000000000)) (S ( 0.6604000000 1.0000000000)) (S ( 0.2926000000 1.0000000000)) (S ( 0.1254000000 1.0000000000)) (P ( 2548.0000000000 0.0002357020) ( 603.7000000000 0.0020515800) ( 195.6000000000 0.0111543000) ( 74.1500000000 0.0439816000) ( 30.9400000000 0.1299940000) ( 13.6900000000 0.2729590000) ( 6.2290000000 0.3836900000) ( 2.8780000000 0.2918700000)) (P ( 2548.0000000000 -0.0000635410) ( 603.7000000000 -0.0005532590) ( 195.6000000000 -0.0030279500) ( 74.1500000000 -0.0120650000) ( 30.9400000000 -0.0366348000) ( 13.6900000000 -0.0790764000) ( 6.2290000000 -0.1174220000) ( 2.8780000000 -0.0860943000)) (P ( 1.2820000000 1.0000000000)) (P ( 0.5641000000 1.0000000000)) (P ( 0.2348000000 1.0000000000)) (P ( 0.0931200000 1.0000000000)) (D ( 8.3990000000 1.0000000000)) (D ( 2.0300000000 1.0000000000)) (D ( 1.0970000000 1.0000000000)) (D ( 0.5490000000 1.0000000000)) (D ( 0.2210000000 1.0000000000)) (F ( 0.3200000000 1.0000000000)) (F ( 0.6560000000 1.0000000000)) (F ( 1.3450000000 1.0000000000)) (G ( 0.5560000000 1.0000000000)) (G ( 1.3020000000 1.0000000000)) (H ( 1.0530000000 1.0000000000)) ) ARGON:"H_CCPV5_PLUS_DZ" = ( (S ( 7401000.0000000000 0.0000017502) ( 1108000.0000000000 0.0000136147) ( 252100.0000000000 0.0000716297) ( 71380.0000000000 0.0003030350) ( 23260.0000000000 0.0011061000) ( 8390.0000000000 0.0036067900) ( 3271.0000000000 0.0107134000) ( 1357.0000000000 0.0291074000) ( 592.0000000000 0.0716617000) ( 269.1000000000 0.1541440000) ( 126.5000000000 0.2704230000) ( 61.0300000000 0.3348620000) ( 29.8600000000 0.2243470000) ( 14.1700000000 0.0500081000) ( 7.0220000000 0.0001497260) ( 3.5110000000 0.0021036900)) (S ( 7401000.0000000000 -0.0000005204) ( 1108000.0000000000 -0.0000040491) ( 252100.0000000000 -0.0000213023) ( 71380.0000000000 -0.0000901686) ( 23260.0000000000 -0.0003293740) ( 8390.0000000000 -0.0010771500) ( 3271.0000000000 -0.0032189200) ( 1357.0000000000 -0.0088784500) ( 592.0000000000 -0.0225545000) ( 269.1000000000 -0.0518453000) ( 126.5000000000 -0.1037220000) ( 61.0300000000 -0.1665950000) ( 29.8600000000 -0.1601650000) ( 14.1700000000 0.0623654000) ( 7.0220000000 0.4655340000) ( 3.5110000000 0.5815640000)) (S ( 7401000.0000000000 0.0000000023) ( 1108000.0000000000 0.0000000174) ( 252100.0000000000 0.0000000955) ( 71380.0000000000 0.0000003836) ( 23260.0000000000 0.0000015053) ( 8390.0000000000 0.0000045863) ( 3271.0000000000 0.0000155002) ( 1357.0000000000 0.0000406695) ( 592.0000000000 0.0001313370) ( 269.1000000000 0.0003326850) ( 126.5000000000 0.0010667000) ( 61.0300000000 0.0025721000) ( 29.8600000000 0.0048358400) ( 14.1700000000 -0.0038572800) ( 7.0220000000 -0.0476125000) ( 3.5110000000 -0.1829570000)) (S ( 1.7580000000 1.0000000000)) (S ( 0.7841000000 1.0000000000)) (S ( 0.3480000000 1.0000000000)) (S ( 0.1491000000 1.0000000000)) (P ( 2927.0000000000 0.0001883380) ( 693.5000000000 0.0016428800) ( 224.7000000000 0.0089489300) ( 85.1700000000 0.0355111000) ( 35.5300000000 0.1051470000) ( 15.7300000000 0.2215520000) ( 7.1650000000 0.3084120000) ( 3.3220000000 0.2322030000)) (P ( 2927.0000000000 -0.0001502070) ( 693.5000000000 -0.0013092800) ( 224.7000000000 -0.0071650100) ( 85.1700000000 -0.0285723000) ( 35.5300000000 -0.0860158000) ( 15.7300000000 -0.1839960000) ( 7.1650000000 -0.2658440000) ( 3.3220000000 -0.1887410000)) (P ( 1.4780000000 1.0000000000)) (P ( 0.6552000000 1.0000000000)) (P ( 0.2751000000 1.0000000000)) (P ( 0.1097000000 1.0000000000)) (D ( 10.5180000000 1.0000000000)) (D ( 2.5160000000 1.0000000000)) (D ( 1.3320000000 1.0000000000)) (D ( 0.6730000000 1.0000000000)) (D ( 0.2700000000 1.0000000000)) (F ( 0.4080000000 1.0000000000)) (F ( 0.8250000000 1.0000000000)) (F ( 1.6680000000 1.0000000000)) (G ( 0.6650000000 1.0000000000)) (G ( 1.5620000000 1.0000000000)) (H ( 1.2640000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV6Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Sextuple Zeta (cc-pV6Z) Basis % ---------------------------------------------------------------------- % Elements Contraction References % H - He: (10s,5p,4d,3f,2g,1h) -> [6s,5p,4d,3f,2g,1h] K.A. Peterson, % D.E. Woon and % T.H. Dunning, Jr., % J. Chem. Phys. 100, % 7410 (1994). % K.A. Peterson, to % be published % B - Ne: (16s,10p,5d,4f,3g,2h,1i) -> [7s,6p,5d,4f,3g,2h,1i] A. Wilson, % T. van Mourik and % T.H. Dunning, Jr., % J. Mol. Struct. % (THEOCHEM) 388, % 339 (1997) % Al- Ar: (21s,14p,5d,4f,3g,2h,1i) -> [8s,7p,5d,4f,3g,2h,1i] T. van Mourik and % T.H. Dunning, Jr., % Int. J. Quantum % Chem. 76, 205 (2000) % % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPV6Z and CCPV(6+d)z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 3, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV6Z":puream = true HYDROGEN:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) HELIUM:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) BORON:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) CARBON:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) NITROGEN:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) OXYGEN:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) FLUORINE:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) NEON:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) SODIUM:"CC-PV5Z" = ( (GET "H_CCPV6Z") ) MAGNESIUM:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) ALUMINUM:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) SILICON:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) PHOSPHORUS :"CC-PV6Z" = ( (GET "H_CCPV6Z") ) SULFUR:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) CHLORINE:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) ARGON:"CC-PV6Z" = ( (GET "H_CCPV6Z") ) %%%%%%%%% ALIASES cc-pV6Z => CC-PV6Z %%%%%%% "cc-pV6Z":puream = true HYDROGEN:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) HELIUM:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) BORON:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) CARBON:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) NITROGEN:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) OXYGEN:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) FLUORINE:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) NEON:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) SODIUM:"cc-pV5Z" = ( (GET "H_CCPV6Z") ) MAGNESIUM:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) ALUMINUM:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) SILICON:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) PHOSPHORUS :"cc-pV6Z" = ( (GET "H_CCPV6Z") ) SULFUR:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) CHLORINE:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) ARGON:"cc-pV6Z" = ( (GET "H_CCPV6Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CCPV(6+d)Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PV(6+D)Z":puream = true ALUMINUM:"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) SILICON:"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) PHOSPHORUS :"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) SULFUR:"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) CHLORINE:"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) ARGON:"CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) %%%%%%%%% ALIAS cc-pV(6+D)Z => CC-PV6+DZ %%%%%%%%%% "cc-pV(6+d)Z":puream = true ALUMINUM:"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) SILICON:"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) PHOSPHORUS :"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) SULFUR:"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) CHLORINE:"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) ARGON:"cc-pV(6+d)Z" = ( (GET "H_CCPV6_PLUS_DZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CCPV6Z Basis Sets %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HYDROGEN:"H_CCPV6Z" = ( (S ( 1776.77556000 0.00004400) ( 254.01771200 0.00037200) ( 54.69803900 0.00209400) ( 15.01834400 0.00886300) ( 4.91507800 0.03054000) ( 1.79492400 0.09034200) ( 0.71071600 0.21323900) ( 0.30480200 0.35235000) ( 0.13804600 0.33965700) ( 0.06215700 0.10733000)) (S ( 1.79492400 1.00000000)) (S ( 0.71071600 1.00000000)) (S ( 0.30480200 1.00000000)) (S ( 0.13804600 1.00000000)) (S ( 0.06215700 1.00000000)) (P ( 8.64900000 1.00000000)) (P ( 3.43000000 1.00000000)) (P ( 1.36000000 1.00000000)) (P ( 0.53900000 1.00000000)) (P ( 0.21400000 1.00000000)) (D ( 4.45300000 1.00000000)) (D ( 1.95800000 1.00000000)) (D ( 0.86100000 1.00000000)) (D ( 0.37800000 1.00000000)) (F ( 4.10000000 1.00000000)) (F ( 1.78000000 1.00000000)) (F ( 0.77300000 1.00000000)) (G ( 3.19900000 1.00000000)) (G ( 1.32600000 1.00000000)) (H ( 2.65300000 1.00000000)) ) HELIUM:"H_CCPV6Z" = ( (S ( 4785.0000000000 0.0000006000) ( 717.0000000000 0.0000047000) ( 163.2000000000 0.0000244000) ( 46.2600000000 0.0001012000) ( 15.1000000000 0.0003486000)) (S ( 5.4370000000 1.0000000000)) (S ( 2.0880000000 1.0000000000)) (S ( 0.8297000000 1.0000000000)) (S ( 0.3366000000 1.0000000000)) (S ( 0.1369000000 1.0000000000)) (P ( 0.3870000000 1.0000000000)) (P ( 0.9840000000 1.0000000000)) (P ( 2.4980000000 1.0000000000)) (P ( 6.3420000000 1.0000000000)) (P ( 16.1040000000 1.0000000000)) (D ( 0.7470000000 1.0000000000)) (D ( 1.9100000000 1.0000000000)) (D ( 4.8860000000 1.0000000000)) (D ( 12.4980000000 1.0000000000)) (F ( 1.2920000000 1.0000000000)) (F ( 3.4620000000 1.0000000000)) (F ( 9.2760000000 1.0000000000)) (G ( 2.2360000000 1.0000000000)) (G ( 6.5860000000 1.0000000000)) (H ( 4.1590000000 1.0000000000)) ) BORON:"H_CCPV6Z" = ( (S ( 210400.00000000 0.00000583) ( 31500.00000000 0.00004532) ( 7169.00000000 0.00023838) ( 2030.00000000 0.00100570) ( 662.50000000 0.00364496) ( 239.20000000 0.01173628) ( 93.26000000 0.03380702) ( 38.64000000 0.08556593) ( 16.78000000 0.18260322) ( 7.54100000 0.30583760) ( 3.48200000 0.34080347) ( 1.61800000 0.17535036) ( 0.62700000 0.01721834) ( 0.29340000 -0.00231977) ( 0.13100000 0.00101748) ( 0.05815000 -0.00018483)) (S ( 210400.00000000 -0.00000118) ( 31500.00000000 -0.00000915) ( 7169.00000000 -0.00004819) ( 2030.00000000 -0.00020306) ( 662.50000000 -0.00073917) ( 239.20000000 -0.00238603) ( 93.26000000 -0.00698654) ( 38.64000000 -0.01811594) ( 16.78000000 -0.04123129) ( 7.54100000 -0.07781353) ( 3.48200000 -0.12123181) ( 1.61800000 -0.10843020) ( 0.62700000 0.11016510) ( 0.29340000 0.41921850) ( 0.13100000 0.47252922) ( 0.05815000 0.14294499)) (S ( 1.61800000 1.00000000)) (S ( 0.62700000 1.00000000)) (S ( 0.29340000 1.00000000)) (S ( 0.13100000 1.00000000)) (S ( 0.05815000 1.00000000)) (P ( 192.50000000 0.00013490) ( 45.64000000 0.00114741) ( 14.75000000 0.00584793) ( 5.50300000 0.02117091) ( 2.22200000 0.06266872) ( 0.95900000 0.15302764) ( 0.43140000 0.27797889) ( 0.19690000 0.35888912) ( 0.09033000 0.27950147) ( 0.04066000 0.07532647)) (P ( 0.95900000 1.00000000)) (P ( 0.43140000 1.00000000)) (P ( 0.19690000 1.00000000)) (P ( 0.09033000 1.00000000)) (P ( 0.04066000 1.00000000)) (D ( 2.88600000 1.00000000)) (D ( 1.26700000 1.00000000)) (D ( 0.55600000 1.00000000)) (D ( 0.24400000 1.00000000)) (D ( 0.10700000 1.00000000)) (F ( 1.65100000 1.00000000)) (F ( 0.80020000 1.00000000)) (F ( 0.38780000 1.00000000)) (F ( 0.18800000 1.00000000)) (G ( 1.64690000 1.00000000)) (G ( 0.78890000 1.00000000)) (G ( 0.37790000 1.00000000)) (H ( 1.31200000 1.00000000)) (H ( 0.58060000 1.00000000)) (I ( 0.98470000 1.00000000)) ) CARBON:"H_CCPV6Z" = ( (S ( 312100.00000000 0.00000567) ( 46740.00000000 0.00004410) ( 10640.00000000 0.00023190) ( 3013.00000000 0.00097897) ( 982.80000000 0.00355163) ( 354.80000000 0.01144061) ( 138.40000000 0.03299855) ( 57.35000000 0.08405347) ( 24.92000000 0.18067613) ( 11.23000000 0.30491140) ( 5.20100000 0.34141570) ( 2.42600000 0.17717867) ( 0.96730000 0.01892227) ( 0.44560000 -0.00171121) ( 0.19710000 0.00103578) ( 0.08635000 -0.00015204)) (S ( 312100.00000000 -0.00000121) ( 46740.00000000 -0.00000939) ( 10640.00000000 -0.00004947) ( 3013.00000000 -0.00020857) ( 982.80000000 -0.00076015) ( 354.80000000 -0.00245469) ( 138.40000000 -0.00720153) ( 57.35000000 -0.01880742) ( 24.92000000 -0.04325001) ( 11.23000000 -0.08259733) ( 5.20100000 -0.12857592) ( 2.42600000 -0.10760284) ( 0.96730000 0.12407734) ( 0.44560000 0.42851768) ( 0.19710000 0.46123320) ( 0.08635000 0.13761657)) (S ( 2.42600000 1.00000000)) (S ( 0.96730000 1.00000000)) (S ( 0.44560000 1.00000000)) (S ( 0.19710000 1.00000000)) (S ( 0.08635000 1.00000000)) (P ( 295.20000000 0.00014249) ( 69.98000000 0.00122010) ( 22.64000000 0.00633696) ( 8.48500000 0.02351875) ( 3.45900000 0.06990447) ( 1.50400000 0.16546049) ( 0.67830000 0.28710436) ( 0.30870000 0.35280269) ( 0.14000000 0.26533663) ( 0.06178000 0.07173361)) (P ( 1.50400000 1.00000000)) (P ( 0.67830000 1.00000000)) (P ( 0.30870000 1.00000000)) (P ( 0.14000000 1.00000000)) (P ( 0.06178000 1.00000000)) (D ( 4.54200000 1.00000000)) (D ( 1.97900000 1.00000000)) (D ( 0.86210000 1.00000000)) (D ( 0.37560000 1.00000000)) (D ( 0.16360000 1.00000000)) (F ( 2.63100000 1.00000000)) (F ( 1.25500000 1.00000000)) (F ( 0.59880000 1.00000000)) (F ( 0.28570000 1.00000000)) (G ( 2.65200000 1.00000000)) (G ( 1.20400000 1.00000000)) (G ( 0.54700000 1.00000000)) (H ( 2.03000000 1.00000000)) (H ( 0.85110000 1.00000000)) (I ( 1.49100000 1.00000000)) ) NITROGEN:"H_CCPV6Z" = ( (S ( 432300.00000000 0.00000559) ( 64700.00000000 0.00004351) ( 14720.00000000 0.00022893) ( 4170.00000000 0.00096502) ( 1361.00000000 0.00350219) ( 491.20000000 0.01129212) ( 191.60000000 0.03261283) ( 79.41000000 0.08329727) ( 34.53000000 0.17998566) ( 15.58000000 0.30500351) ( 7.23200000 0.34115932) ( 3.38200000 0.17748269) ( 1.36900000 0.01988409) ( 0.62480000 -0.00124663) ( 0.27470000 0.00104011) ( 0.11920000 -0.00012659)) (S ( 432300.00000000 -0.00000123) ( 64700.00000000 -0.00000958) ( 14720.00000000 -0.00005051) ( 4170.00000000 -0.00021264) ( 1361.00000000 -0.00077534) ( 491.20000000 -0.00250624) ( 191.60000000 -0.00736529) ( 79.41000000 -0.01930167) ( 34.53000000 -0.04471738) ( 15.58000000 -0.08606647) ( 7.23200000 -0.13329627) ( 3.38200000 -0.10596548) ( 1.36900000 0.13466734) ( 0.62480000 0.43394007) ( 0.27470000 0.45294902) ( 0.11920000 0.13402164)) (S ( 3.38200000 1.00000000)) (S ( 1.36900000 1.00000000)) (S ( 0.62480000 1.00000000)) (S ( 0.27470000 1.00000000)) (S ( 0.11920000 1.00000000)) (P ( 415.90000000 0.00014841) ( 98.61000000 0.00127634) ( 31.92000000 0.00670242) ( 12.00000000 0.02526170) ( 4.91900000 0.07518943) ( 2.14800000 0.17401505) ( 0.96960000 0.29279209) ( 0.43990000 0.34826478) ( 0.19780000 0.25593655) ( 0.08603000 0.06947929)) (P ( 2.14800000 1.00000000)) (P ( 0.96960000 1.00000000)) (P ( 0.43990000 1.00000000)) (P ( 0.19780000 1.00000000)) (P ( 0.08603000 1.00000000)) (D ( 6.71700000 1.00000000)) (D ( 2.89600000 1.00000000)) (D ( 1.24900000 1.00000000)) (D ( 0.53800000 1.00000000)) (D ( 0.23200000 1.00000000)) (F ( 3.82900000 1.00000000)) (F ( 1.79500000 1.00000000)) (F ( 0.84100000 1.00000000)) (F ( 0.39400000 1.00000000)) (G ( 3.85600000 1.00000000)) (G ( 1.70200000 1.00000000)) (G ( 0.75100000 1.00000000)) (H ( 2.87500000 1.00000000)) (H ( 1.17000000 1.00000000)) (I ( 2.09900000 1.00000000)) ) OXYGEN:"H_CCPV6Z" = ( (S ( 570800.00000000 0.00000555) ( 85480.00000000 0.00004311) ( 19460.00000000 0.00022667) ( 5512.00000000 0.00095637) ( 1798.00000000 0.00347320) ( 648.90000000 0.01119778) ( 253.10000000 0.03238766) ( 104.90000000 0.08285977) ( 45.65000000 0.17958381) ( 20.62000000 0.30522110) ( 9.58700000 0.34089349) ( 4.49300000 0.17742611) ( 1.83700000 0.02049107) ( 0.83490000 -0.00096807) ( 0.36580000 0.00105715) ( 0.15700000 -0.00009721)) (S ( 570800.00000000 -0.00000126) ( 85480.00000000 -0.00000977) ( 19460.00000000 -0.00005148) ( 5512.00000000 -0.00021696) ( 1798.00000000 -0.00079162) ( 648.90000000 -0.00255900) ( 253.10000000 -0.00753313) ( 104.90000000 -0.01978897) ( 45.65000000 -0.04606288) ( 20.62000000 -0.08919560) ( 9.58700000 -0.13754216) ( 4.49300000 -0.10511948) ( 1.83700000 0.14477143) ( 0.83490000 0.44146336) ( 0.36580000 0.44468145) ( 0.15700000 0.12824259)) (S ( 4.49300000 1.00000000)) (S ( 1.83700000 1.00000000)) (S ( 0.83490000 1.00000000)) (S ( 0.36580000 1.00000000)) (S ( 0.15700000 1.00000000)) (P ( 525.60000000 0.00016664) ( 124.60000000 0.00143336) ( 40.34000000 0.00754762) ( 15.18000000 0.02859456) ( 6.24500000 0.08438858) ( 2.73200000 0.18748342) ( 1.22700000 0.29790579) ( 0.54920000 0.33855755) ( 0.24180000 0.24726093) ( 0.10250000 0.07003350)) (P ( 2.73200000 1.00000000)) (P ( 1.22700000 1.00000000)) (P ( 0.54920000 1.00000000)) (P ( 0.24180000 1.00000000)) (P ( 0.10250000 1.00000000)) (D ( 8.25300000 1.00000000)) (D ( 3.59700000 1.00000000)) (D ( 1.56800000 1.00000000)) (D ( 0.68400000 1.00000000)) (D ( 0.29800000 1.00000000)) (F ( 5.43000000 1.00000000)) (F ( 2.41600000 1.00000000)) (F ( 1.07500000 1.00000000)) (F ( 0.47800000 1.00000000)) (G ( 5.21100000 1.00000000)) (G ( 2.19000000 1.00000000)) (G ( 0.92000000 1.00000000)) (H ( 3.87200000 1.00000000)) (H ( 1.50500000 1.00000000)) (I ( 2.77300000 1.00000000)) ) FLUORINE:"H_CCPV6Z" = ( (S ( 723500.00000000 0.00000556) ( 108400.00000000 0.00004318) ( 24680.00000000 0.00022700) ( 6990.00000000 0.00095803) ( 2282.00000000 0.00347015) ( 824.60000000 0.01118526) ( 321.80000000 0.03232880) ( 133.50000000 0.08279545) ( 58.11000000 0.17988024) ( 26.28000000 0.30557831) ( 12.24000000 0.34026839) ( 5.74700000 0.17668240) ( 2.36500000 0.02085475) ( 1.07100000 -0.00075322) ( 0.46810000 0.00107444) ( 0.19940000 -0.00007951)) (S ( 723500.00000000 -0.00000129) ( 108400.00000000 -0.00000999) ( 24680.00000000 -0.00005260) ( 6990.00000000 -0.00022172) ( 2282.00000000 -0.00080692) ( 824.60000000 -0.00260817) ( 321.80000000 -0.00767402) ( 133.50000000 -0.02019353) ( 58.11000000 -0.04718752) ( 26.28000000 -0.09158009) ( 12.24000000 -0.14048558) ( 5.74700000 -0.10367094) ( 2.36500000 0.15282048) ( 1.07100000 0.44614578) ( 0.46810000 0.43811811) ( 0.19940000 0.12447048)) (S ( 5.74700000 1.00000000)) (S ( 2.36500000 1.00000000)) (S ( 1.07100000 1.00000000)) (S ( 0.46810000 1.00000000)) (S ( 0.19940000 1.00000000)) (P ( 660.00000000 0.00017721) ( 156.40000000 0.00152691) ( 50.64000000 0.00807207) ( 19.08000000 0.03074021) ( 7.87200000 0.09011914) ( 3.44900000 0.19528789) ( 1.54500000 0.30107685) ( 0.68640000 0.33322071) ( 0.29860000 0.24114678) ( 0.12450000 0.06967220)) (P ( 3.44900000 1.00000000)) (P ( 1.54500000 1.00000000)) (P ( 0.68640000 1.00000000)) (P ( 0.29860000 1.00000000)) (P ( 0.12450000 1.00000000)) (D ( 10.57300000 1.00000000)) (D ( 4.61300000 1.00000000)) (D ( 2.01300000 1.00000000)) (D ( 0.87800000 1.00000000)) (D ( 0.38300000 1.00000000)) (F ( 7.56300000 1.00000000)) (F ( 3.33000000 1.00000000)) (F ( 1.46600000 1.00000000)) (F ( 0.64500000 1.00000000)) (G ( 6.73500000 1.00000000)) (G ( 2.78300000 1.00000000)) (G ( 1.15000000 1.00000000)) (H ( 5.08800000 1.00000000)) (H ( 1.93700000 1.00000000)) (I ( 3.58100000 1.00000000)) ) NEON:"H_CCPV6Z" = ( (S ( 902400.00000000 0.00000551) ( 135100.00000000 0.00004282) ( 30750.00000000 0.00022514) ( 8710.00000000 0.00095016) ( 2842.00000000 0.00344719) ( 1026.00000000 0.01112545) ( 400.10000000 0.03220568) ( 165.90000000 0.08259891) ( 72.21000000 0.17990564) ( 32.66000000 0.30605208) ( 15.22000000 0.34012559) ( 7.14900000 0.17616823) ( 2.95700000 0.02101527) ( 1.33500000 -0.00050745) ( 0.58160000 0.00105785) ( 0.24630000 -0.00005988)) (S ( 902400.00000000 -0.00000129) ( 135100.00000000 -0.00001005) ( 30750.00000000 -0.00005293) ( 8710.00000000 -0.00022312) ( 2842.00000000 -0.00081338) ( 1026.00000000 -0.00263230) ( 400.10000000 -0.00775910) ( 165.90000000 -0.02045277) ( 72.21000000 -0.04797505) ( 32.66000000 -0.09340086) ( 15.22000000 -0.14277215) ( 7.14900000 -0.10229083) ( 2.95700000 0.15878576) ( 1.33500000 0.44940789) ( 0.58160000 0.43348545) ( 0.24630000 0.12157570)) (S ( 7.14900000 1.00000000)) (S ( 2.95700000 1.00000000)) (S ( 1.33500000 1.00000000)) (S ( 0.58160000 1.00000000)) (S ( 0.24630000 1.00000000)) (P ( 815.60000000 0.00018376) ( 193.30000000 0.00158509) ( 62.60000000 0.00841464) ( 23.61000000 0.03220033) ( 9.76200000 0.09396390) ( 4.28100000 0.20048077) ( 1.91500000 0.30311365) ( 0.84760000 0.32975784) ( 0.36600000 0.23667427) ( 0.15100000 0.06911689)) (P ( 4.28100000 1.00000000)) (P ( 1.91500000 1.00000000)) (P ( 0.84760000 1.00000000)) (P ( 0.36600000 1.00000000)) (P ( 0.15100000 1.00000000)) (D ( 13.31700000 1.00000000)) (D ( 5.80300000 1.00000000)) (D ( 2.52900000 1.00000000)) (D ( 1.10200000 1.00000000)) (D ( 0.48000000 1.00000000)) (F ( 10.35600000 1.00000000)) (F ( 4.53800000 1.00000000)) (F ( 1.98900000 1.00000000)) (F ( 0.87100000 1.00000000)) (G ( 8.34500000 1.00000000)) (G ( 3.41700000 1.00000000)) (G ( 1.39900000 1.00000000)) (H ( 6.51900000 1.00000000)) (H ( 2.44700000 1.00000000)) (I ( 4.48900000 1.00000000)) ) ALUMINUM:"H_CCPV6Z" = ( (S ( 3652000.0000000000 0.0000019000) ( 546800.0000000000 0.0000145000) ( 124500.0000000000 0.0000762000) ( 35440.0000000000 0.0003158000) ( 11840.0000000000 0.0010974000) ( 4434.0000000000 0.0033697000) ( 1812.0000000000 0.0093222000) ( 791.5000000000 0.0237992000) ( 361.0000000000 0.0568191000) ( 169.5000000000 0.1224680000) ( 81.6800000000 0.2238970000) ( 40.2800000000 0.3134460000) ( 20.2500000000 0.2749750000) ( 10.2300000000 0.1105640000) ( 4.8020000000 0.0119215000) ( 2.3390000000 0.0006528000)) (S ( 3652000.0000000000 -0.0000005000) ( 546800.0000000000 -0.0000038000) ( 124500.0000000000 -0.0000198000) ( 35440.0000000000 -0.0000821000) ( 11840.0000000000 -0.0002858000) ( 4434.0000000000 -0.0008785000) ( 1812.0000000000 -0.0024482000) ( 791.5000000000 -0.0063100000) ( 361.0000000000 -0.0154854000) ( 169.5000000000 -0.0349589000) ( 81.6800000000 -0.0707729000) ( 40.2800000000 -0.1194230000) ( 20.2500000000 -0.1488420000) ( 10.2300000000 -0.0590465000) ( 4.8020000000 0.2166930000) ( 2.3390000000 0.4765570000)) (S ( 3652000.0000000000 0.0000001000) ( 546800.0000000000 0.0000009000) ( 124500.0000000000 0.0000046000) ( 35440.0000000000 0.0000190000) ( 11840.0000000000 0.0000659000) ( 4434.0000000000 0.0002031000) ( 1812.0000000000 0.0005647000) ( 791.5000000000 0.0014620000) ( 361.0000000000 0.0035794000) ( 169.5000000000 0.0081516000) ( 81.6800000000 0.0165276000) ( 40.2800000000 0.0285467000) ( 20.2500000000 0.0361484000) ( 10.2300000000 0.0153804000) ( 4.8020000000 -0.0612141000) ( 2.3390000000 -0.1512630000)) (S ( 1.1630000000 1.0000000000)) (S ( 0.5882000000 1.0000000000)) (S ( 0.2311000000 1.0000000000)) (S ( 0.1027000000 1.0000000000)) (S ( 0.0452100000 1.0000000000)) (P ( 2884.0000000000 0.0000638000) ( 683.2000000000 0.0005631000) ( 222.0000000000 0.0031691000) ( 84.8200000000 0.0132401000) ( 35.8100000000 0.0433403000) ( 16.2200000000 0.1119500000) ( 7.7020000000 0.2177960000) ( 3.7410000000 0.3116750000) ( 1.8310000000 0.3167220000)) (P ( 2884.0000000000 -0.0000080000) ( 683.2000000000 -0.0000651000) ( 222.0000000000 -0.0003999000) ( 84.8200000000 -0.0015369000) ( 35.8100000000 -0.0055644000) ( 16.2200000000 -0.0131106000) ( 7.7020000000 -0.0297200000) ( 3.7410000000 -0.0347195000) ( 1.8310000000 -0.0551621000)) (P ( 0.8878000000 1.0000000000)) (P ( 0.3989000000 1.0000000000)) (P ( 0.1718000000 1.0000000000)) (P ( 0.0729800000 1.0000000000)) (P ( 0.0306900000 1.0000000000)) (D ( 2.2143000000 1.0000000000)) (D ( 0.9449000000 1.0000000000)) (D ( 0.4032000000 1.0000000000)) (D ( 0.1721000000 1.0000000000)) (D ( 0.0734300000 1.0000000000)) (F ( 0.8756000000 1.0000000000)) (F ( 0.4472000000 1.0000000000)) (F ( 0.2284000000 1.0000000000)) (F ( 0.1167000000 1.0000000000)) (G ( 0.6952000000 1.0000000000)) (G ( 0.3771000000 1.0000000000)) (G ( 0.2046000000 1.0000000000)) (H ( 0.6560000000 1.0000000000)) (H ( 0.3300000000 1.0000000000)) (I ( 0.5302000000 1.0000000000)) ) SILICON:"H_CCPV6Z" = ( (S ( 4465000.0000000000 0.0000017000) ( 668500.0000000000 0.0000136000) ( 152200.0000000000 0.0000714000) ( 43300.0000000000 0.0002973000) ( 14410.0000000000 0.0010383000) ( 5394.0000000000 0.0031747000) ( 2212.0000000000 0.0087324000) ( 968.1000000000 0.0223830000) ( 441.2000000000 0.0537273000) ( 207.1000000000 0.1166490000) ( 99.8000000000 0.2159780000) ( 49.2400000000 0.3095660000) ( 24.7400000000 0.2839450000) ( 12.4700000000 0.1222320000) ( 5.7950000000 0.0141952000) ( 2.8300000000 0.0003121000)) (S ( 4465000.0000000000 -0.0000005000) ( 668500.0000000000 -0.0000036000) ( 152200.0000000000 -0.0000190000) ( 43300.0000000000 -0.0000791000) ( 14410.0000000000 -0.0002769000) ( 5394.0000000000 -0.0008472000) ( 2212.0000000000 -0.0023478000) ( 968.1000000000 -0.0060705000) ( 441.2000000000 -0.0149711000) ( 207.1000000000 -0.0339729000) ( 99.8000000000 -0.0694584000) ( 49.2400000000 -0.1190010000) ( 24.7400000000 -0.1536450000) ( 12.4700000000 -0.0704684000) ( 5.7950000000 0.2131490000) ( 2.8300000000 0.4915960000)) (S ( 4465000.0000000000 0.0000001000) ( 668500.0000000000 0.0000009000) ( 152200.0000000000 0.0000049000) ( 43300.0000000000 0.0000203000) ( 14410.0000000000 0.0000709000) ( 5394.0000000000 0.0002172000) ( 2212.0000000000 0.0006013000) ( 968.1000000000 0.0015591000) ( 441.2000000000 0.0038443000) ( 207.1000000000 0.0087797000) ( 99.8000000000 0.0180388000) ( 49.2400000000 0.0315224000) ( 24.7400000000 0.0416905000) ( 12.4700000000 0.0200973000) ( 5.7950000000 -0.0667484000) ( 2.8300000000 -0.1819060000)) (S ( 1.4070000000 1.0000000000)) (S ( 0.6995000000 1.0000000000)) (S ( 0.3083000000 1.0000000000)) (S ( 0.1385000000 1.0000000000)) (S ( 0.0614500000 1.0000000000)) (P ( 3572.0000000000 0.0000599000) ( 846.0000000000 0.0005296000) ( 274.8000000000 0.0029958000) ( 105.0000000000 0.0126335000) ( 44.3500000000 0.0419044000) ( 20.0800000000 0.1102590000) ( 9.5300000000 0.2188310000) ( 4.6340000000 0.3178280000) ( 2.2800000000 0.3194250000)) (P ( 3572.0000000000 -0.0000128000) ( 846.0000000000 -0.0001126000) ( 274.8000000000 -0.0006402000) ( 105.0000000000 -0.0027029000) ( 44.3500000000 -0.0090789000) ( 20.0800000000 -0.0242348000) ( 9.5300000000 -0.0493460000) ( 4.6340000000 -0.0725859000) ( 2.2800000000 -0.0804258000)) (P ( 1.1160000000 1.0000000000)) (P ( 0.4991000000 1.0000000000)) (P ( 0.2254000000 1.0000000000)) (P ( 0.1001000000 1.0000000000)) (P ( 0.0433200000 1.0000000000)) (D ( 3.2386000000 1.0000000000)) (D ( 1.3767000000 1.0000000000)) (D ( 0.5853000000 1.0000000000)) (D ( 0.2488000000 1.0000000000)) (D ( 0.1058000000 1.0000000000)) (F ( 1.3510000000 1.0000000000)) (F ( 0.6600000000 1.0000000000)) (F ( 0.3225000000 1.0000000000)) (F ( 0.1575000000 1.0000000000)) (G ( 0.8528000000 1.0000000000)) (G ( 0.4631000000 1.0000000000)) (G ( 0.2515000000 1.0000000000)) (H ( 0.8557000000 1.0000000000)) (H ( 0.4231000000 1.0000000000)) (I ( 0.6946000000 1.0000000000)) ) PHOSPHORUS:"H_CCPV6Z" = ( (S ( 5384000.0000000000 0.0000016000) ( 806200.0000000000 0.0000128000) ( 183600.0000000000 0.0000672000) ( 52250.0000000000 0.0002797000) ( 17390.0000000000 0.0009767000) ( 6523.0000000000 0.0029684000) ( 2687.0000000000 0.0081240000) ( 1178.0000000000 0.0209200000) ( 536.2000000000 0.0505590000) ( 251.5000000000 0.1104790000) ( 121.3000000000 0.2069570000) ( 59.8800000000 0.3047370000) ( 30.0500000000 0.2929520000) ( 15.1200000000 0.1355610000) ( 7.0100000000 0.0173208000) ( 3.4410000000 -0.0000352000)) (S ( 5384000.0000000000 -0.0000004000) ( 806200.0000000000 -0.0000035000) ( 183600.0000000000 -0.0000183000) ( 52250.0000000000 -0.0000759000) ( 17390.0000000000 -0.0002657000) ( 6523.0000000000 -0.0008080000) ( 2687.0000000000 -0.0022273000) ( 1178.0000000000 -0.0057833000) ( 536.2000000000 -0.0143438000) ( 251.5000000000 -0.0327061000) ( 121.3000000000 -0.0673716000) ( 59.8800000000 -0.1176470000) ( 30.0500000000 -0.1572800000) ( 15.1200000000 -0.0838544000) ( 7.0100000000 0.1997180000) ( 3.4410000000 0.4986050000)) (S ( 5384000.0000000000 0.0000001000) ( 806200.0000000000 0.0000010000) ( 183600.0000000000 0.0000050000) ( 52250.0000000000 0.0000209000) ( 17390.0000000000 0.0000730000) ( 6523.0000000000 0.0002221000) ( 2687.0000000000 0.0006122000) ( 1178.0000000000 0.0015918000) ( 536.2000000000 0.0039534000) ( 251.5000000000 0.0090572000) ( 121.3000000000 0.0187909000) ( 59.8800000000 0.0333831000) ( 30.0500000000 0.0459484000) ( 15.1200000000 0.0255240000) ( 7.0100000000 -0.0669496000) ( 3.4410000000 -0.2036450000)) (S ( 1.7120000000 1.0000000000)) (S ( 0.8337000000 1.0000000000)) (S ( 0.3912000000 1.0000000000)) (S ( 0.1777000000 1.0000000000)) (S ( 0.0793900000 1.0000000000)) (P ( 4552.0000000000 0.0000520000) ( 1078.0000000000 0.0004604000) ( 350.1000000000 0.0026208000) ( 133.8000000000 0.0111873000) ( 56.5200000000 0.0378229000) ( 25.5800000000 0.1021160000) ( 12.1400000000 0.2103140000) ( 5.9020000000 0.3173830000) ( 2.9100000000 0.3271650000)) (P ( 4552.0000000000 -0.0000124000) ( 1078.0000000000 -0.0001094000) ( 350.1000000000 -0.0006256000) ( 133.8000000000 -0.0026734000) ( 56.5200000000 -0.0091552000) ( 25.5800000000 -0.0250993000) ( 12.1400000000 -0.0531810000) ( 5.9020000000 -0.0815888000) ( 2.9100000000 -0.0919725000)) (P ( 1.4350000000 1.0000000000)) (P ( 0.6570000000 1.0000000000)) (P ( 0.3005000000 1.0000000000)) (P ( 0.1340000000 1.0000000000)) (P ( 0.0578300000 1.0000000000)) (D ( 4.3008000000 1.0000000000)) (D ( 1.8346000000 1.0000000000)) (D ( 0.7826000000 1.0000000000)) (D ( 0.3339000000 1.0000000000)) (D ( 0.1424000000 1.0000000000)) (F ( 1.8160000000 1.0000000000)) (F ( 0.8806000000 1.0000000000)) (F ( 0.4270000000 1.0000000000)) (F ( 0.2070000000 1.0000000000)) (G ( 1.0616000000 1.0000000000)) (G ( 0.5791000000 1.0000000000)) (G ( 0.3159000000 1.0000000000)) (H ( 1.0850000000 1.0000000000)) (H ( 0.5277000000 1.0000000000)) (I ( 0.8890000000 1.0000000000)) ) SULFUR:"H_CCPV6Z" = ( (S ( 6297000.0000000000 0.0000016000) ( 943100.0000000000 0.0000124000) ( 214900.0000000000 0.0000649000) ( 61250.0000000000 0.0002693000) ( 20450.0000000000 0.0009347000) ( 7719.0000000000 0.0028083000) ( 3198.0000000000 0.0076740000) ( 1402.0000000000 0.0198898000) ( 637.2000000000 0.0482589000) ( 298.9000000000 0.1057570000) ( 144.3000000000 0.2002230000) ( 71.2100000000 0.3007280000) ( 35.7300000000 0.2986880000) ( 17.9700000000 0.1463470000) ( 8.3410000000 0.0201159000) ( 4.1120000000 -0.0002488000)) (S ( 6297000.0000000000 -0.0000004000) ( 943100.0000000000 -0.0000034000) ( 214900.0000000000 -0.0000179000) ( 61250.0000000000 -0.0000744000) ( 20450.0000000000 -0.0002587000) ( 7719.0000000000 -0.0007777000) ( 3198.0000000000 -0.0021396000) ( 1402.0000000000 -0.0055906000) ( 637.2000000000 -0.0139076000) ( 298.9000000000 -0.0317689000) ( 144.3000000000 -0.0659302000) ( 71.2100000000 -0.1168320000) ( 35.7300000000 -0.1597870000) ( 17.9700000000 -0.0945322000) ( 8.3410000000 0.1878280000) ( 4.1120000000 0.5046830000)) (S ( 6297000.0000000000 0.0000001000) ( 943100.0000000000 0.0000010000) ( 214900.0000000000 0.0000052000) ( 61250.0000000000 0.0000216000) ( 20450.0000000000 0.0000751000) ( 7719.0000000000 0.0002258000) ( 3198.0000000000 0.0006217000) ( 1402.0000000000 0.0016251000) ( 637.2000000000 0.0040535000) ( 298.9000000000 0.0092902000) ( 144.3000000000 0.0194561000) ( 71.2100000000 0.0350040000) ( 35.7300000000 0.0494897000) ( 17.9700000000 0.0303443000) ( 8.3410000000 -0.0663661000) ( 4.1120000000 -0.2231540000)) (S ( 2.0450000000 1.0000000000)) (S ( 0.9770000000 1.0000000000)) (S ( 0.4766000000 1.0000000000)) (S ( 0.2185000000 1.0000000000)) (S ( 0.0975900000 1.0000000000)) (P ( 5266.0000000000 0.0000523000) ( 1247.0000000000 0.0004635000) ( 405.0000000000 0.0026410000) ( 154.8000000000 0.0113169000) ( 65.3800000000 0.0384704000) ( 29.5900000000 0.1043390000) ( 14.0400000000 0.2156840000) ( 6.8240000000 0.3252600000) ( 3.3690000000 0.3261780000)) (P ( 5266.0000000000 -0.0000133000) ( 1247.0000000000 -0.0001179000) ( 405.0000000000 -0.0006759000) ( 154.8000000000 -0.0028973000) ( 65.3800000000 -0.0099980000) ( 29.5900000000 -0.0275416000) ( 14.0400000000 -0.0587943000) ( 6.8240000000 -0.0903761000) ( 3.3690000000 -0.0999891000)) (P ( 1.6660000000 1.0000000000)) (P ( 0.7681000000 1.0000000000)) (P ( 0.3504000000 1.0000000000)) (P ( 0.1556000000 1.0000000000)) (P ( 0.0668100000 1.0000000000)) (D ( 5.0755000000 1.0000000000)) (D ( 2.1833000000 1.0000000000)) (D ( 0.9392000000 1.0000000000)) (D ( 0.4040000000 1.0000000000)) (D ( 0.1738000000 1.0000000000)) (F ( 1.3222000000 1.0000000000)) (F ( 0.7319000000 1.0000000000)) (F ( 0.4051000000 1.0000000000)) (F ( 0.2243000000 1.0000000000)) (G ( 1.3473000000 1.0000000000)) (G ( 0.7009000000 1.0000000000)) (G ( 0.3647000000 1.0000000000)) (H ( 1.2861000000 1.0000000000)) (H ( 0.6115000000 1.0000000000)) (I ( 1.0409000000 1.0000000000)) ) CHLORINE:"H_CCPV6Z" = ( (S ( 7733000.0000000000 0.0000014347) ( 1158000.0000000000 0.0000111486) ( 263700.0000000000 0.0000585865) ( 75010.0000000000 0.0002445180) ( 24890.0000000000 0.0008582870) ( 9318.0000000000 0.0026101900) ( 3840.0000000000 0.0071378400) ( 1684.0000000000 0.0184564000) ( 766.3000000000 0.0448944000) ( 359.5000000000 0.0993822000) ( 173.4000000000 0.1907820000) ( 85.6100000000 0.2935650000) ( 42.9300000000 0.3064770000) ( 21.5500000000 0.1622090000) ( 10.0500000000 0.0249383000) ( 4.9780000000 -0.0005131420)) (S ( 7733000.0000000000 -0.0000004022) ( 1158000.0000000000 -0.0000031245) ( 263700.0000000000 -0.0000164290) ( 75010.0000000000 -0.0000685421) ( 24890.0000000000 -0.0002410010) ( 9318.0000000000 -0.0007335380) ( 3840.0000000000 -0.0020183000) ( 1684.0000000000 -0.0052610700) ( 766.3000000000 -0.0130986000) ( 359.5000000000 -0.0301794000) ( 173.4000000000 -0.0631888000) ( 85.6100000000 -0.1138590000) ( 42.9300000000 -0.1612510000) ( 21.5500000000 -0.1092340000) ( 10.0500000000 0.1629990000) ( 4.9780000000 0.5014130000)) (S ( 7733000.0000000000 0.0000001217) ( 1158000.0000000000 0.0000009451) ( 263700.0000000000 0.0000049712) ( 75010.0000000000 0.0000207323) ( 24890.0000000000 0.0000729402) ( 9318.0000000000 0.0002218990) ( 3840.0000000000 0.0006113550) ( 1684.0000000000 0.0015933700) ( 766.3000000000 0.0039800100) ( 359.5000000000 0.0091937500) ( 173.4000000000 0.0194399000) ( 85.6100000000 0.0355187000) ( 42.9300000000 0.0520674000) ( 21.5500000000 0.0365644000) ( 10.0500000000 -0.0597500000) ( 4.9780000000 -0.2316410000)) (S ( 2.4780000000 1.0000000000)) (S ( 1.1800000000 1.0000000000)) (S ( 0.5828000000 1.0000000000)) (S ( 0.2668000000 1.0000000000)) (S ( 0.1183000000 1.0000000000)) (P ( 6091.0000000000 0.0000516194) ( 1442.0000000000 0.0004584680) ( 468.3000000000 0.0026150900) ( 179.0000000000 0.0112554000) ( 75.6100000000 0.0384577000) ( 34.2200000000 0.1050810000) ( 16.2300000000 0.2186030000) ( 7.8900000000 0.3308740000) ( 3.8980000000 0.3258790000)) (P ( 6091.0000000000 -0.0000139259) ( 1442.0000000000 -0.0001233240) ( 468.3000000000 -0.0007075510) ( 179.0000000000 -0.0030493900) ( 75.6100000000 -0.0105752000) ( 34.2200000000 -0.0294094000) ( 16.2300000000 -0.0632296000) ( 7.8900000000 -0.0981870000) ( 3.8980000000 -0.1058700000)) (P ( 1.9330000000 1.0000000000)) (P ( 0.9057000000 1.0000000000)) (P ( 0.4140000000 1.0000000000)) (P ( 0.1836000000 1.0000000000)) (P ( 0.0785900000 1.0000000000)) (D ( 6.2428000000 1.0000000000)) (D ( 2.6906000000 1.0000000000)) (D ( 1.1596000000 1.0000000000)) (D ( 0.4998000000 1.0000000000)) (D ( 0.2154000000 1.0000000000)) (F ( 2.5327000000 1.0000000000)) (F ( 1.2406000000 1.0000000000)) (F ( 0.6077000000 1.0000000000)) (F ( 0.2977000000 1.0000000000)) (G ( 1.5388000000 1.0000000000)) (G ( 0.8050000000 1.0000000000)) (G ( 0.4212000000 1.0000000000)) (H ( 1.5613000000 1.0000000000)) (H ( 0.7397000000 1.0000000000)) (I ( 1.2572000000 1.0000000000)) ) ARGON:"H_CCPV6Z" = ( (S ( 9149000.0000000000 0.0000013000) ( 1370000.0000000000 0.0000104000) ( 311900.0000000000 0.0000549000) ( 88650.0000000000 0.0002296000) ( 29330.0000000000 0.0008103000) ( 10930.0000000000 0.0024853000) ( 4480.0000000000 0.0068369000) ( 1962.0000000000 0.0176199000) ( 894.1000000000 0.0428752000) ( 419.6000000000 0.0954853000) ( 202.3000000000 0.1850640000) ( 99.8400000000 0.2890420000) ( 50.0700000000 0.3101660000) ( 25.1400000000 0.1721830000) ( 11.8100000000 0.0285227000) ( 5.8820000000 -0.0005757000)) (S ( 9149000.0000000000 -0.0000004000) ( 1370000.0000000000 -0.0000030000) ( 311900.0000000000 -0.0000156000) ( 88650.0000000000 -0.0000652000) ( 29330.0000000000 -0.0002304000) ( 10930.0000000000 -0.0007075000) ( 4480.0000000000 -0.0019573000) ( 1962.0000000000 -0.0050856000) ( 894.1000000000 -0.0126528000) ( 419.6000000000 -0.0293065000) ( 202.3000000000 -0.0617712000) ( 99.8400000000 -0.1125410000) ( 50.0700000000 -0.1622930000) ( 25.1400000000 -0.1184120000) ( 11.8100000000 0.1461480000) ( 5.8820000000 0.4977520000)) (S ( 9149000.0000000000 0.0000001000) ( 1370000.0000000000 0.0000009000) ( 311900.0000000000 0.0000049000) ( 88650.0000000000 0.0000204000) ( 29330.0000000000 0.0000720000) ( 10930.0000000000 0.0002210000) ( 4480.0000000000 0.0006125000) ( 1962.0000000000 0.0015908000) ( 894.1000000000 0.0039722000) ( 419.6000000000 0.0092204000) ( 202.3000000000 0.0196367000) ( 99.8400000000 0.0362570000) ( 50.0700000000 0.0541725000) ( 25.1400000000 0.0409996000) ( 11.8100000000 -0.0551744000) ( 5.8820000000 -0.2387540000)) (S ( 2.9390000000 1.0000000000)) (S ( 1.4050000000 1.0000000000)) (S ( 0.6963000000 1.0000000000)) (S ( 0.3188000000 1.0000000000)) (S ( 0.1410000000 1.0000000000)) (P ( 7050.0000000000 0.0000502000) ( 1669.0000000000 0.0004454000) ( 542.1000000000 0.0025480000) ( 207.1000000000 0.0110155000) ( 87.5200000000 0.0378490000) ( 39.6100000000 0.1043550000) ( 18.7800000000 0.2193350000) ( 9.1300000000 0.3346150000) ( 4.5160000000 0.3267710000)) (P ( 7050.0000000000 -0.0000140000) ( 1669.0000000000 -0.0001243000) ( 542.1000000000 -0.0007147000) ( 207.1000000000 -0.0030968000) ( 87.5200000000 -0.0107961000) ( 39.6100000000 -0.0303536000) ( 18.7800000000 -0.0659785000) ( 9.1300000000 -0.1038770000) ( 4.5160000000 -0.1099560000)) (P ( 2.2450000000 1.0000000000)) (P ( 1.0650000000 1.0000000000)) (P ( 0.4885000000 1.0000000000)) (P ( 0.2166000000 1.0000000000)) (P ( 0.0925500000 1.0000000000)) (D ( 7.6327000000 1.0000000000)) (D ( 3.2876000000 1.0000000000)) (D ( 1.4160000000 1.0000000000)) (D ( 0.6099000000 1.0000000000)) (D ( 0.2627000000 1.0000000000)) (F ( 3.0582000000 1.0000000000)) (F ( 1.5292000000 1.0000000000)) (F ( 0.7647000000 1.0000000000)) (F ( 0.3824000000 1.0000000000)) (G ( 1.8450000000 1.0000000000)) (G ( 0.9657000000 1.0000000000)) (G ( 0.5055000000 1.0000000000)) (H ( 1.8743000000 1.0000000000)) (H ( 0.8871000000 1.0000000000)) (I ( 1.5066000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Valence Sextuple Zeta + tight d % ---------------------------------------------------------------------- % Elements Contraction References % Al- Ar: (21s,14p,6d,4f,3g,2h,1i) -> [8s,7p,6d,4f,3g,2h,1i] T.H. Dunning, Jr., % K.A. Peterson and % A.K. Wilson, % J. Chem. Phys. % 114, 9244 (2001) % % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ALUMINUM:"H_CCPV6_PLUS_DZ" = ( (S ( 3652000.0000000000 0.0000019000) ( 546800.0000000000 0.0000145000) ( 124500.0000000000 0.0000762000) ( 35440.0000000000 0.0003158000) ( 11840.0000000000 0.0010974000) ( 4434.0000000000 0.0033697000) ( 1812.0000000000 0.0093222000) ( 791.5000000000 0.0237992000) ( 361.0000000000 0.0568191000) ( 169.5000000000 0.1224680000) ( 81.6800000000 0.2238970000) ( 40.2800000000 0.3134460000) ( 20.2500000000 0.2749750000) ( 10.2300000000 0.1105640000) ( 4.8020000000 0.0119215000) ( 2.3390000000 0.0006528000)) (S ( 3652000.0000000000 -0.0000005000) ( 546800.0000000000 -0.0000038000) ( 124500.0000000000 -0.0000198000) ( 35440.0000000000 -0.0000821000) ( 11840.0000000000 -0.0002858000) ( 4434.0000000000 -0.0008785000) ( 1812.0000000000 -0.0024482000) ( 791.5000000000 -0.0063100000) ( 361.0000000000 -0.0154854000) ( 169.5000000000 -0.0349589000) ( 81.6800000000 -0.0707729000) ( 40.2800000000 -0.1194230000) ( 20.2500000000 -0.1488420000) ( 10.2300000000 -0.0590465000) ( 4.8020000000 0.2166930000) ( 2.3390000000 0.4765570000)) (S ( 3652000.0000000000 0.0000001000) ( 546800.0000000000 0.0000009000) ( 124500.0000000000 0.0000046000) ( 35440.0000000000 0.0000190000) ( 11840.0000000000 0.0000659000) ( 4434.0000000000 0.0002031000) ( 1812.0000000000 0.0005647000) ( 791.5000000000 0.0014620000) ( 361.0000000000 0.0035794000) ( 169.5000000000 0.0081516000) ( 81.6800000000 0.0165276000) ( 40.2800000000 0.0285467000) ( 20.2500000000 0.0361484000) ( 10.2300000000 0.0153804000) ( 4.8020000000 -0.0612141000) ( 2.3390000000 -0.1512630000)) (S ( 1.1630000000 1.0000000000)) (S ( 0.5882000000 1.0000000000)) (S ( 0.2311000000 1.0000000000)) (S ( 0.1027000000 1.0000000000)) (S ( 0.0452100000 1.0000000000)) (P ( 2884.0000000000 0.0000638000) ( 683.2000000000 0.0005631000) ( 222.0000000000 0.0031691000) ( 84.8200000000 0.0132401000) ( 35.8100000000 0.0433403000) ( 16.2200000000 0.1119500000) ( 7.7020000000 0.2177960000) ( 3.7410000000 0.3116750000) ( 1.8310000000 0.3167220000)) (P ( 2884.0000000000 -0.0000080000) ( 683.2000000000 -0.0000651000) ( 222.0000000000 -0.0003999000) ( 84.8200000000 -0.0015369000) ( 35.8100000000 -0.0055644000) ( 16.2200000000 -0.0131106000) ( 7.7020000000 -0.0297200000) ( 3.7410000000 -0.0347195000) ( 1.8310000000 -0.0551621000)) (P ( 0.8878000000 1.0000000000)) (P ( 0.3989000000 1.0000000000)) (P ( 0.1718000000 1.0000000000)) (P ( 0.0729800000 1.0000000000)) (P ( 0.0306900000 1.0000000000)) (D ( 4.2400000000 1.0000000000)) (D ( 0.8500000000 1.0000000000)) (D ( 0.7490000000 1.0000000000)) (D ( 0.3500000000 1.0000000000)) (D ( 0.1560000000 1.0000000000)) (D ( 0.0661000000 1.0000000000)) (F ( 0.8756000000 1.0000000000)) (F ( 0.4472000000 1.0000000000)) (F ( 0.2284000000 1.0000000000)) (F ( 0.1167000000 1.0000000000)) (G ( 0.6952000000 1.0000000000)) (G ( 0.3771000000 1.0000000000)) (G ( 0.2046000000 1.0000000000)) (H ( 0.6560000000 1.0000000000)) (H ( 0.3300000000 1.0000000000)) (I ( 0.5302000000 1.0000000000)) ) SILICON:"H_CCPV6_PLUS_DZ" = ( (S ( 4465000.0000000000 0.0000017000) ( 668500.0000000000 0.0000136000) ( 152200.0000000000 0.0000714000) ( 43300.0000000000 0.0002973000) ( 14410.0000000000 0.0010383000) ( 5394.0000000000 0.0031747000) ( 2212.0000000000 0.0087324000) ( 968.1000000000 0.0223830000) ( 441.2000000000 0.0537273000) ( 207.1000000000 0.1166490000) ( 99.8000000000 0.2159780000) ( 49.2400000000 0.3095660000) ( 24.7400000000 0.2839450000) ( 12.4700000000 0.1222320000) ( 5.7950000000 0.0141952000) ( 2.8300000000 0.0003121000)) (S ( 4465000.0000000000 -0.0000005000) ( 668500.0000000000 -0.0000036000) ( 152200.0000000000 -0.0000190000) ( 43300.0000000000 -0.0000791000) ( 14410.0000000000 -0.0002769000) ( 5394.0000000000 -0.0008472000) ( 2212.0000000000 -0.0023478000) ( 968.1000000000 -0.0060705000) ( 441.2000000000 -0.0149711000) ( 207.1000000000 -0.0339729000) ( 99.8000000000 -0.0694584000) ( 49.2400000000 -0.1190010000) ( 24.7400000000 -0.1536450000) ( 12.4700000000 -0.0704684000) ( 5.7950000000 0.2131490000) ( 2.8300000000 0.4915960000)) (S ( 4465000.0000000000 0.0000001000) ( 668500.0000000000 0.0000009000) ( 152200.0000000000 0.0000049000) ( 43300.0000000000 0.0000203000) ( 14410.0000000000 0.0000709000) ( 5394.0000000000 0.0002172000) ( 2212.0000000000 0.0006013000) ( 968.1000000000 0.0015591000) ( 441.2000000000 0.0038443000) ( 207.1000000000 0.0087797000) ( 99.8000000000 0.0180388000) ( 49.2400000000 0.0315224000) ( 24.7400000000 0.0416905000) ( 12.4700000000 0.0200973000) ( 5.7950000000 -0.0667484000) ( 2.8300000000 -0.1819060000)) (S ( 1.4070000000 1.0000000000)) (S ( 0.6995000000 1.0000000000)) (S ( 0.3083000000 1.0000000000)) (S ( 0.1385000000 1.0000000000)) (S ( 0.0614500000 1.0000000000)) (P ( 3572.0000000000 0.0000599000) ( 846.0000000000 0.0005296000) ( 274.8000000000 0.0029958000) ( 105.0000000000 0.0126335000) ( 44.3500000000 0.0419044000) ( 20.0800000000 0.1102590000) ( 9.5300000000 0.2188310000) ( 4.6340000000 0.3178280000) ( 2.2800000000 0.3194250000)) (P ( 3572.0000000000 -0.0000128000) ( 846.0000000000 -0.0001126000) ( 274.8000000000 -0.0006402000) ( 105.0000000000 -0.0027029000) ( 44.3500000000 -0.0090789000) ( 20.0800000000 -0.0242348000) ( 9.5300000000 -0.0493460000) ( 4.6340000000 -0.0725859000) ( 2.2800000000 -0.0804258000)) (P ( 1.1160000000 1.0000000000)) (P ( 0.4991000000 1.0000000000)) (P ( 0.2254000000 1.0000000000)) (P ( 0.1001000000 1.0000000000)) (P ( 0.0433200000 1.0000000000)) (D ( 6.8250000000 1.0000000000)) (D ( 1.7630000000 1.0000000000)) (D ( 0.8350000000 1.0000000000)) (D ( 0.5070000000 1.0000000000)) (D ( 0.2320000000 1.0000000000)) (D ( 0.0977000000 1.0000000000)) (F ( 1.3510000000 1.0000000000)) (F ( 0.6600000000 1.0000000000)) (F ( 0.3225000000 1.0000000000)) (F ( 0.1575000000 1.0000000000)) (G ( 0.8528000000 1.0000000000)) (G ( 0.4631000000 1.0000000000)) (G ( 0.2515000000 1.0000000000)) (H ( 0.8557000000 1.0000000000)) (H ( 0.4231000000 1.0000000000)) (I ( 0.6946000000 1.0000000000)) ) PHOSPHORUS:"H_CCPV6_PLUS_DZ" = ( (S ( 5384000.0000000000 0.0000016000) ( 806200.0000000000 0.0000128000) ( 183600.0000000000 0.0000672000) ( 52250.0000000000 0.0002797000) ( 17390.0000000000 0.0009767000) ( 6523.0000000000 0.0029684000) ( 2687.0000000000 0.0081240000) ( 1178.0000000000 0.0209200000) ( 536.2000000000 0.0505590000) ( 251.5000000000 0.1104790000) ( 121.3000000000 0.2069570000) ( 59.8800000000 0.3047370000) ( 30.0500000000 0.2929520000) ( 15.1200000000 0.1355610000) ( 7.0100000000 0.0173208000) ( 3.4410000000 -0.0000352000)) (S ( 5384000.0000000000 -0.0000004000) ( 806200.0000000000 -0.0000035000) ( 183600.0000000000 -0.0000183000) ( 52250.0000000000 -0.0000759000) ( 17390.0000000000 -0.0002657000) ( 6523.0000000000 -0.0008080000) ( 2687.0000000000 -0.0022273000) ( 1178.0000000000 -0.0057833000) ( 536.2000000000 -0.0143438000) ( 251.5000000000 -0.0327061000) ( 121.3000000000 -0.0673716000) ( 59.8800000000 -0.1176470000) ( 30.0500000000 -0.1572800000) ( 15.1200000000 -0.0838544000) ( 7.0100000000 0.1997180000) ( 3.4410000000 0.4986050000)) (S ( 5384000.0000000000 0.0000001000) ( 806200.0000000000 0.0000010000) ( 183600.0000000000 0.0000050000) ( 52250.0000000000 0.0000209000) ( 17390.0000000000 0.0000730000) ( 6523.0000000000 0.0002221000) ( 2687.0000000000 0.0006122000) ( 1178.0000000000 0.0015918000) ( 536.2000000000 0.0039534000) ( 251.5000000000 0.0090572000) ( 121.3000000000 0.0187909000) ( 59.8800000000 0.0333831000) ( 30.0500000000 0.0459484000) ( 15.1200000000 0.0255240000) ( 7.0100000000 -0.0669496000) ( 3.4410000000 -0.2036450000)) (S ( 1.7120000000 1.0000000000)) (S ( 0.8337000000 1.0000000000)) (S ( 0.3912000000 1.0000000000)) (S ( 0.1777000000 1.0000000000)) (S ( 0.0793900000 1.0000000000)) (P ( 4552.0000000000 0.0000520000) ( 1078.0000000000 0.0004604000) ( 350.1000000000 0.0026208000) ( 133.8000000000 0.0111873000) ( 56.5200000000 0.0378229000) ( 25.5800000000 0.1021160000) ( 12.1400000000 0.2103140000) ( 5.9020000000 0.3173830000) ( 2.9100000000 0.3271650000)) (P ( 4552.0000000000 -0.0000124000) ( 1078.0000000000 -0.0001094000) ( 350.1000000000 -0.0006256000) ( 133.8000000000 -0.0026734000) ( 56.5200000000 -0.0091552000) ( 25.5800000000 -0.0250993000) ( 12.1400000000 -0.0531810000) ( 5.9020000000 -0.0815888000) ( 2.9100000000 -0.0919725000)) (P ( 1.4350000000 1.0000000000)) (P ( 0.6570000000 1.0000000000)) (P ( 0.3005000000 1.0000000000)) (P ( 0.1340000000 1.0000000000)) (P ( 0.0578300000 1.0000000000)) (D ( 9.4730000000 1.0000000000)) (D ( 2.4820000000 1.0000000000)) (D ( 1.0880000000 1.0000000000)) (D ( 0.6920000000 1.0000000000)) (D ( 0.3190000000 1.0000000000)) (D ( 0.1340000000 1.0000000000)) (F ( 1.8160000000 1.0000000000)) (F ( 0.8806000000 1.0000000000)) (F ( 0.4270000000 1.0000000000)) (F ( 0.2070000000 1.0000000000)) (G ( 1.0616000000 1.0000000000)) (G ( 0.5791000000 1.0000000000)) (G ( 0.3159000000 1.0000000000)) (H ( 1.0850000000 1.0000000000)) (H ( 0.5277000000 1.0000000000)) (I ( 0.8890000000 1.0000000000)) ) SULFUR:"H_CCPV6_PLUS_DZ" = ( (S ( 6297000.0000000000 0.0000016000) ( 943100.0000000000 0.0000124000) ( 214900.0000000000 0.0000649000) ( 61250.0000000000 0.0002693000) ( 20450.0000000000 0.0009347000) ( 7719.0000000000 0.0028083000) ( 3198.0000000000 0.0076740000) ( 1402.0000000000 0.0198898000) ( 637.2000000000 0.0482589000) ( 298.9000000000 0.1057570000) ( 144.3000000000 0.2002230000) ( 71.2100000000 0.3007280000) ( 35.7300000000 0.2986880000) ( 17.9700000000 0.1463470000) ( 8.3410000000 0.0201159000) ( 4.1120000000 -0.0002488000)) (S ( 6297000.0000000000 -0.0000004000) ( 943100.0000000000 -0.0000034000) ( 214900.0000000000 -0.0000179000) ( 61250.0000000000 -0.0000744000) ( 20450.0000000000 -0.0002587000) ( 7719.0000000000 -0.0007777000) ( 3198.0000000000 -0.0021396000) ( 1402.0000000000 -0.0055906000) ( 637.2000000000 -0.0139076000) ( 298.9000000000 -0.0317689000) ( 144.3000000000 -0.0659302000) ( 71.2100000000 -0.1168320000) ( 35.7300000000 -0.1597870000) ( 17.9700000000 -0.0945322000) ( 8.3410000000 0.1878280000) ( 4.1120000000 0.5046830000)) (S ( 6297000.0000000000 0.0000001000) ( 943100.0000000000 0.0000010000) ( 214900.0000000000 0.0000052000) ( 61250.0000000000 0.0000216000) ( 20450.0000000000 0.0000751000) ( 7719.0000000000 0.0002258000) ( 3198.0000000000 0.0006217000) ( 1402.0000000000 0.0016251000) ( 637.2000000000 0.0040535000) ( 298.9000000000 0.0092902000) ( 144.3000000000 0.0194561000) ( 71.2100000000 0.0350040000) ( 35.7300000000 0.0494897000) ( 17.9700000000 0.0303443000) ( 8.3410000000 -0.0663661000) ( 4.1120000000 -0.2231540000)) (S ( 2.0450000000 1.0000000000)) (S ( 0.9770000000 1.0000000000)) (S ( 0.4766000000 1.0000000000)) (S ( 0.2185000000 1.0000000000)) (S ( 0.0975900000 1.0000000000)) (P ( 5266.0000000000 0.0000523000) ( 1247.0000000000 0.0004635000) ( 405.0000000000 0.0026410000) ( 154.8000000000 0.0113169000) ( 65.3800000000 0.0384704000) ( 29.5900000000 0.1043390000) ( 14.0400000000 0.2156840000) ( 6.8240000000 0.3252600000) ( 3.3690000000 0.3261780000)) (P ( 5266.0000000000 -0.0000133000) ( 1247.0000000000 -0.0001179000) ( 405.0000000000 -0.0006759000) ( 154.8000000000 -0.0028973000) ( 65.3800000000 -0.0099980000) ( 29.5900000000 -0.0275416000) ( 14.0400000000 -0.0587943000) ( 6.8240000000 -0.0903761000) ( 3.3690000000 -0.0999891000)) (P ( 1.6660000000 1.0000000000)) (P ( 0.7681000000 1.0000000000)) (P ( 0.3504000000 1.0000000000)) (P ( 0.1556000000 1.0000000000)) (P ( 0.0668100000 1.0000000000)) (D ( 11.5330000000 1.0000000000)) (D ( 2.9880000000 1.0000000000)) (D ( 1.2590000000 1.0000000000)) (D ( 0.8040000000 1.0000000000)) (D ( 0.3800000000 1.0000000000)) (D ( 0.1600000000 1.0000000000)) (F ( 1.3222000000 1.0000000000)) (F ( 0.7319000000 1.0000000000)) (F ( 0.4051000000 1.0000000000)) (F ( 0.2243000000 1.0000000000)) (G ( 1.3473000000 1.0000000000)) (G ( 0.7009000000 1.0000000000)) (G ( 0.3647000000 1.0000000000)) (H ( 1.2861000000 1.0000000000)) (H ( 0.6115000000 1.0000000000)) (I ( 1.0409000000 1.0000000000)) ) CHLORINE:"H_CCPV6_PLUS_DZ" = ( (S ( 7733000.0000000000 0.0000014347) ( 1158000.0000000000 0.0000111486) ( 263700.0000000000 0.0000585865) ( 75010.0000000000 0.0002445180) ( 24890.0000000000 0.0008582870) ( 9318.0000000000 0.0026101900) ( 3840.0000000000 0.0071378400) ( 1684.0000000000 0.0184564000) ( 766.3000000000 0.0448944000) ( 359.5000000000 0.0993822000) ( 173.4000000000 0.1907820000) ( 85.6100000000 0.2935650000) ( 42.9300000000 0.3064770000) ( 21.5500000000 0.1622090000) ( 10.0500000000 0.0249383000) ( 4.9780000000 -0.0005131420)) (S ( 7733000.0000000000 -0.0000004022) ( 1158000.0000000000 -0.0000031245) ( 263700.0000000000 -0.0000164290) ( 75010.0000000000 -0.0000685421) ( 24890.0000000000 -0.0002410010) ( 9318.0000000000 -0.0007335380) ( 3840.0000000000 -0.0020183000) ( 1684.0000000000 -0.0052610700) ( 766.3000000000 -0.0130986000) ( 359.5000000000 -0.0301794000) ( 173.4000000000 -0.0631888000) ( 85.6100000000 -0.1138590000) ( 42.9300000000 -0.1612510000) ( 21.5500000000 -0.1092340000) ( 10.0500000000 0.1629990000) ( 4.9780000000 0.5014130000)) (S ( 7733000.0000000000 0.0000001217) ( 1158000.0000000000 0.0000009451) ( 263700.0000000000 0.0000049712) ( 75010.0000000000 0.0000207323) ( 24890.0000000000 0.0000729402) ( 9318.0000000000 0.0002218990) ( 3840.0000000000 0.0006113550) ( 1684.0000000000 0.0015933700) ( 766.3000000000 0.0039800100) ( 359.5000000000 0.0091937500) ( 173.4000000000 0.0194399000) ( 85.6100000000 0.0355187000) ( 42.9300000000 0.0520674000) ( 21.5500000000 0.0365644000) ( 10.0500000000 -0.0597500000) ( 4.9780000000 -0.2316410000)) (S ( 2.4780000000 1.0000000000)) (S ( 1.1800000000 1.0000000000)) (S ( 0.5828000000 1.0000000000)) (S ( 0.2668000000 1.0000000000)) (S ( 0.1183000000 1.0000000000)) (P ( 6091.0000000000 0.0000516194) ( 1442.0000000000 0.0004584680) ( 468.3000000000 0.0026150900) ( 179.0000000000 0.0112554000) ( 75.6100000000 0.0384577000) ( 34.2200000000 0.1050810000) ( 16.2300000000 0.2186030000) ( 7.8900000000 0.3308740000) ( 3.8980000000 0.3258790000)) (P ( 6091.0000000000 -0.0000139259) ( 1442.0000000000 -0.0001233240) ( 468.3000000000 -0.0007075510) ( 179.0000000000 -0.0030493900) ( 75.6100000000 -0.0105752000) ( 34.2200000000 -0.0294094000) ( 16.2300000000 -0.0632296000) ( 7.8900000000 -0.0981870000) ( 3.8980000000 -0.1058700000)) (P ( 1.9330000000 1.0000000000)) (P ( 0.9057000000 1.0000000000)) (P ( 0.4140000000 1.0000000000)) (P ( 0.1836000000 1.0000000000)) (P ( 0.0785900000 1.0000000000)) (D ( 14.7720000000 1.0000000000)) (D ( 3.8200000000 1.0000000000)) (D ( 1.5830000000 1.0000000000)) (D ( 1.0360000000 1.0000000000)) (D ( 0.4880000000 1.0000000000)) (D ( 0.2030000000 1.0000000000)) (F ( 2.5327000000 1.0000000000)) (F ( 1.2406000000 1.0000000000)) (F ( 0.6077000000 1.0000000000)) (F ( 0.2977000000 1.0000000000)) (G ( 1.5388000000 1.0000000000)) (G ( 0.8050000000 1.0000000000)) (G ( 0.4212000000 1.0000000000)) (H ( 1.5613000000 1.0000000000)) (H ( 0.7397000000 1.0000000000)) (I ( 1.2572000000 1.0000000000)) ) ARGON:"H_CCPV6_PLUS_DZ" = ( (S ( 9149000.0000000000 0.0000013000) ( 1370000.0000000000 0.0000104000) ( 311900.0000000000 0.0000549000) ( 88650.0000000000 0.0002296000) ( 29330.0000000000 0.0008103000) ( 10930.0000000000 0.0024853000) ( 4480.0000000000 0.0068369000) ( 1962.0000000000 0.0176199000) ( 894.1000000000 0.0428752000) ( 419.6000000000 0.0954853000) ( 202.3000000000 0.1850640000) ( 99.8400000000 0.2890420000) ( 50.0700000000 0.3101660000) ( 25.1400000000 0.1721830000) ( 11.8100000000 0.0285227000) ( 5.8820000000 -0.0005757000)) (S ( 9149000.0000000000 -0.0000004000) ( 1370000.0000000000 -0.0000030000) ( 311900.0000000000 -0.0000156000) ( 88650.0000000000 -0.0000652000) ( 29330.0000000000 -0.0002304000) ( 10930.0000000000 -0.0007075000) ( 4480.0000000000 -0.0019573000) ( 1962.0000000000 -0.0050856000) ( 894.1000000000 -0.0126528000) ( 419.6000000000 -0.0293065000) ( 202.3000000000 -0.0617712000) ( 99.8400000000 -0.1125410000) ( 50.0700000000 -0.1622930000) ( 25.1400000000 -0.1184120000) ( 11.8100000000 0.1461480000) ( 5.8820000000 0.4977520000)) (S ( 9149000.0000000000 0.0000001000) ( 1370000.0000000000 0.0000009000) ( 311900.0000000000 0.0000049000) ( 88650.0000000000 0.0000204000) ( 29330.0000000000 0.0000720000) ( 10930.0000000000 0.0002210000) ( 4480.0000000000 0.0006125000) ( 1962.0000000000 0.0015908000) ( 894.1000000000 0.0039722000) ( 419.6000000000 0.0092204000) ( 202.3000000000 0.0196367000) ( 99.8400000000 0.0362570000) ( 50.0700000000 0.0541725000) ( 25.1400000000 0.0409996000) ( 11.8100000000 -0.0551744000) ( 5.8820000000 -0.2387540000)) (S ( 2.9390000000 1.0000000000)) (S ( 1.4050000000 1.0000000000)) (S ( 0.6963000000 1.0000000000)) (S ( 0.3188000000 1.0000000000)) (S ( 0.1410000000 1.0000000000)) (P ( 7050.0000000000 0.0000502000) ( 1669.0000000000 0.0004454000) ( 542.1000000000 0.0025480000) ( 207.1000000000 0.0110155000) ( 87.5200000000 0.0378490000) ( 39.6100000000 0.1043550000) ( 18.7800000000 0.2193350000) ( 9.1300000000 0.3346150000) ( 4.5160000000 0.3267710000)) (P ( 7050.0000000000 -0.0000140000) ( 1669.0000000000 -0.0001243000) ( 542.1000000000 -0.0007147000) ( 207.1000000000 -0.0030968000) ( 87.5200000000 -0.0107961000) ( 39.6100000000 -0.0303536000) ( 18.7800000000 -0.0659785000) ( 9.1300000000 -0.1038770000) ( 4.5160000000 -0.1099560000)) (P ( 2.2450000000 1.0000000000)) (P ( 1.0650000000 1.0000000000)) (P ( 0.4885000000 1.0000000000)) (P ( 0.2166000000 1.0000000000)) (P ( 0.0925500000 1.0000000000)) (D ( 17.7430000000 1.0000000000)) (D ( 4.5800000000 1.0000000000)) (D ( 1.8890000000 1.0000000000)) (D ( 1.2520000000 1.0000000000)) (D ( 0.5940000000 1.0000000000)) (D ( 0.2470000000 1.0000000000)) (F ( 3.0582000000 1.0000000000)) (F ( 1.5292000000 1.0000000000)) (F ( 0.7647000000 1.0000000000)) (F ( 0.3824000000 1.0000000000)) (G ( 1.8450000000 1.0000000000)) (G ( 0.9657000000 1.0000000000)) (G ( 0.5055000000 1.0000000000)) (H ( 1.8743000000 1.0000000000)) (H ( 0.8871000000 1.0000000000)) (I ( 1.5066000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ----------------------------------------------- % CORRELATION CONSISTENT CORE-VALENCE BASIS SETS % ----------------------------------------------- % % The correlation consistent core-valence basis sets extend the ideas of the % original cc-pVxZ sets by including extra functions designed for core-core and % core-valence correlation. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Written as extensions of cc-pCVXZ basis by B.T. 12/15/2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PCVDZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: cc-pCVDZ % % Correlation Consistent Polarized Core/Valence Double Zeta (cc-pCVDZ) Basis % -------------------------------------------------------------------------- % Elements Contraction References % H : (4s,1p) -> [2s,1p] T.H. Dunning, Jr. J. Chem. Phys. 90, 1007 % (1989). % Li - Ne: (10s,5p,1d) -> [4s,3p,1d] T.H. Dunning, Jr. J.C.P. 90, 1007 (1989). % Na - Ar: (13s,9p,2d) -> [5s,4p,2d] D. Woon and T.H. Dunning, Jr. % (to be published) %** % Additional core/valence functions which are added to the original cc-pVDZ % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). %** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PCVDZ":puream = true BORON:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 3.06600000 1.00000000)) (P ( 9.94000000 1.00000000)) ) CARBON:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 4.53000000 1.00000000)) (P ( 14.55700000 1.00000000)) ) NITROGEN:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 6.23300000 1.00000000)) (P ( 19.97700000 1.00000000)) ) OXYGEN:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 8.21500000 1.00000000)) (P ( 26.05600000 1.00000000)) ) FLUORINE:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 10.42600000 1.00000000)) (P ( 32.83000000 1.00000000)) ) NEON:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 12.85400000 1.00000000)) (P ( 40.18400000 1.00000000)) ) % Ca : K.A. Peterson (to be published) CALCIUM:"CC-PCVDZ" = ( (GET "CC-PVDZ") (S ( 1.1143000 1.0000000)) (P ( 1.5101000 1.0000000)) (D ( 1.3743000 1.0000000)) ) %%%%%%%%%% ALIASES cc-pCVDZ => CC-PCVDZ %%%%%%%% "cc-pCVDZ":puream = true BORON:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 3.06600000 1.00000000)) (P ( 9.94000000 1.00000000)) ) CARBON:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 4.53000000 1.00000000)) (P ( 14.55700000 1.00000000)) ) NITROGEN:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 6.23300000 1.00000000)) (P ( 19.97700000 1.00000000)) ) OXYGEN:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 8.21500000 1.00000000)) (P ( 26.05600000 1.00000000)) ) FLUORINE:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 10.42600000 1.00000000)) (P ( 32.83000000 1.00000000)) ) NEON:"cc-pCVDZ" = ( (GET "CC-PVDZ") (S ( 12.85400000 1.00000000)) (P ( 40.18400000 1.00000000)) ) CALCIUM:"cc-pCVDZ" = ( (GET "CC-PCVDZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PCVTZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Correlation Consistent Polarized Core/Valence Triple Zeta (cc-pCVTZ) Basis % -------------------------------------------------------------------------- % Elements Contraction References % Li - Ne: (12s,7p,3d,1f) -> [6s,5p,3d,1f] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % NA : (18s,12p,4d,2f)-> [7s,6p,4d,2f] D. Woon and T.H. Dunning, Jr. % (to be published) % ** % Additional core/valence functions which are added to the original cc-pVTZ % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PCVTZ":puream = true BORON:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 2.94000000 1.00000000)) (S ( 8.31100000 1.00000000)) (P ( 6.01600000 1.00000000)) (P ( 22.89100000 1.00000000)) (D ( 13.01500000 1.00000000)) ) CARBON:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 4.29200000 1.00000000)) (S ( 11.87600000 1.00000000)) (P ( 8.77800000 1.00000000)) (P ( 33.19000000 1.00000000)) (D ( 14.83900000 1.00000000)) ) NITROGEN:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 5.95200000 1.00000000)) (S ( 16.20100000 1.00000000)) (P ( 11.87100000 1.00000000)) (P ( 44.84900000 1.00000000)) (D ( 14.20000000 1.00000000)) ) OXYGEN:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 7.84500000 1.00000000)) (S ( 21.03200000 1.00000000)) (P ( 15.15900000 1.00000000)) (P ( 57.43700000 1.00000000)) (D ( 15.85800000 1.00000000)) ) FLUORINE:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 9.81200000 1.00000000)) (S ( 25.94300000 1.00000000)) (P ( 18.75600000 1.00000000)) (P ( 71.34800000 1.00000000)) (D ( 19.10800000 1.00000000)) ) NEON:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 12.08300000 1.00000000)) (S ( 31.94700000 1.00000000)) (P ( 22.82700000 1.00000000)) (P ( 87.01700000 1.00000000)) (D ( 23.16800000 1.00000000)) ) CALCIUM:"CC-PCVTZ" = ( (GET "CC-PVTZ") (S ( 2.0630000 1.0000000)) (S ( 0.4098000 1.0000000)) (P ( 2.8806000 1.0000000)) (P ( 0.5347000 1.0000000)) (D ( 2.2775000 1.0000000)) (D ( 1.1270000 1.0000000)) (F ( 1.3909000 1.0000000)) ) %%%%%%% ALIASES cc-pCVTZ => CC-PCVTZ %%%%%%%%% "cc-pCVTZ":puream = true BORON:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) CARBON:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) NITROGEN:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) OXYGEN:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) FLUORINE:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) NEON:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) CALCIUM:"cc-pCVTZ" = ( (GET "CC-PCVTZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PCVQZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Core/Valence Quadruple Zeta (cc-pCVQZ) Basis % ----------------------------------------------------------------------------- % Elements Contraction References % Li - Ne: (15s,9p,5d,3f,1g) -> [8s,7p,5d,3f,1g] T.H. Dunning, Jr. J. Chem. % Phys. 90, 1007 (1989). % Na : (22s,15p,6d,4f,2g) -> [9s,8p,6d,4f,2g] D. Woon and T.H. Dunning, Jr. % (to be published) % Al - Ar: (19s,14p,6d,4f,2g) -> [9s,8p,6d,4f,2g] % ** % Additional core/valence functions which are added to the original cc-pVQZ % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PCVQZ":puream = true BORON:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 4.86400000 1.00000000)) (S ( 13.28800000 1.00000000)) (S ( 36.30400000 1.00000000)) (P ( 5.48900000 1.00000000)) (P ( 16.30200000 1.00000000)) (P ( 48.41800000 1.00000000)) (D ( 6.64000000 1.00000000)) (D ( 24.46200000 1.00000000)) (F ( 18.79400000 1.00000000)) ) CARBON:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 7.21600000 1.00000000)) (S ( 19.57000000 1.00000000)) (S ( 53.07300000 1.00000000)) (P ( 8.18200000 1.00000000)) (P ( 24.18600000 1.00000000)) (P ( 71.49400000 1.00000000)) (D ( 8.65600000 1.00000000)) (D ( 33.21300000 1.00000000)) (F ( 24.69400000 1.00000000)) ) NITROGEN:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 9.86200000 1.00000000)) (S ( 26.62700000 1.00000000)) (S ( 71.89400000 1.00000000)) (P ( 11.32000000 1.00000000)) (P ( 33.34900000 1.00000000)) (P ( 98.24500000 1.00000000)) (D ( 11.82800000 1.00000000)) (D ( 45.21800000 1.00000000)) (F ( 28.36400000 1.00000000)) ) OXYGEN:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 12.97400000 1.00000000)) (S ( 34.90000000 1.00000000)) (S ( 93.88100000 1.00000000)) (P ( 14.47500000 1.00000000)) (P ( 42.73000000 1.00000000)) (P ( 126.14000000 1.00000000)) (D ( 14.92700000 1.00000000)) (D ( 57.54400000 1.00000000)) (F ( 26.48300000 1.00000000)) ) FLUORINE:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 16.31900000 1.00000000)) (S ( 43.78400000 1.00000000)) (S ( 117.47200000 1.00000000)) (P ( 18.11900000 1.00000000)) (P ( 53.50500000 1.00000000)) (P ( 158.00100000 1.00000000)) (D ( 18.94300000 1.00000000)) (D ( 72.79800000 1.00000000)) (F ( 25.16100000 1.00000000)) ) NEON:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 20.18000000 1.00000000)) (S ( 54.04200000 1.00000000)) (S ( 144.72500000 1.00000000)) (P ( 22.22200000 1.00000000)) (P ( 65.62200000 1.00000000)) (P ( 193.78000000 1.00000000)) (D ( 23.61300000 1.00000000)) (D ( 90.10700000 1.00000000)) (F ( 28.83000000 1.00000000)) ) % K. A. Peterson (to be published) CALCIUM:"CC-PCVQZ" = ( (GET "CC-PVQZ") (S ( 3.2818000 1.0000000)) (S ( 1.5643000 1.0000000)) (S ( 0.7456000 1.0000000)) (P ( 3.3392000 1.0000000)) (P ( 1.6309000 1.0000000)) (P ( 0.7966000 1.0000000)) (D ( 3.3287000 1.0000000)) (D ( 1.6458000 1.0000000)) (D ( 0.8137000 1.0000000)) (F ( 2.2297000 1.0000000)) (F ( 1.2035000 1.0000000)) (G ( 1.5908000 1.0000000)) ) %%%%%%%% ALIASES cc-pCVQZ => CC-PCVQZ %%%%%%%%%%% "cc-pCVQZ":puream = true BORON:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) CARBON:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) NITROGEN:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) OXYGEN:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) FLUORINE:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) NEON:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) CALCIUM:"cc-pCVQZ" = ( (GET "CC-PCVQZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CC-PCV5Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Correlation Consistent Polarized Core/Valence Quintuple Zeta (cc-pCV5Z) Basis % ----------------------------------------------------------------------------- % Elements Contraction References % B - Ne: (18s,12p,7d,5f,3g,1h) -> [10s,9p,7d,5f,3g,1h] D. Woon, K. Peterson % Al : (20s,12p,4d,3f,2g,1h) -> [7s,6p,4d,3f,2g,1h] (unpublished) % ** % Additional core/valence functions which are added to the original cc-pV5Z % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PCV5Z":puream = true BORON:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 6.41100000 1.00000000)) (S ( 14.52100000 1.00000000)) (S ( 32.89000000 1.00000000)) (S ( 74.49600000 1.00000000)) (P ( 5.17200000 1.00000000)) (P ( 13.22500000 1.00000000)) (P ( 33.81600000 1.00000000)) (P ( 86.46700000 1.00000000)) (D ( 7.06600000 1.00000000)) (D ( 19.72100000 1.00000000)) (D ( 55.04200000 1.00000000)) (F ( 9.99400000 1.00000000)) (F ( 33.09000000 1.00000000)) (G ( 24.02000000 1.00000000)) ) CARBON:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 9.18500000 1.00000000)) (S ( 20.79500000 1.00000000)) (S ( 47.08000000 1.00000000)) (S ( 106.58800000 1.00000000)) (P ( 7.66800000 1.00000000)) (P ( 19.48400000 1.00000000)) (P ( 49.51000000 1.00000000)) (P ( 125.80400000 1.00000000)) (D ( 10.00900000 1.00000000)) (D ( 28.06500000 1.00000000)) (D ( 78.69500000 1.00000000)) (F ( 11.69300000 1.00000000)) (F ( 41.56900000 1.00000000)) (G ( 32.78000000 1.00000000)) ) NITROGEN:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 12.27500000 1.00000000)) (S ( 27.82700000 1.00000000)) (S ( 63.08500000 1.00000000)) (S ( 143.01300000 1.00000000)) (P ( 10.76000000 1.00000000)) (P ( 27.18000000 1.00000000)) (P ( 68.65600000 1.00000000)) (P ( 173.42500000 1.00000000)) (D ( 14.05300000 1.00000000)) (D ( 39.08100000 1.00000000)) (D ( 108.68500000 1.00000000)) (F ( 14.35700000 1.00000000)) (F ( 52.69000000 1.00000000)) (G ( 41.12000000 1.00000000)) ) OXYGEN:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 15.64500000 1.00000000)) (S ( 35.87400000 1.00000000)) (S ( 82.25900000 1.00000000)) (S ( 188.62000000 1.00000000)) (P ( 14.04900000 1.00000000)) (P ( 35.44600000 1.00000000)) (P ( 89.42900000 1.00000000)) (P ( 225.63000000 1.00000000)) (D ( 16.70300000 1.00000000)) (D ( 47.32000000 1.00000000)) (D ( 134.05600000 1.00000000)) (F ( 17.35400000 1.00000000)) (F ( 65.54600000 1.00000000)) (G ( 48.57800000 1.00000000)) ) FLUORINE:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 19.87600000 1.00000000)) (S ( 44.88000000 1.00000000)) (S ( 101.33900000 1.00000000)) (S ( 228.82400000 1.00000000)) (P ( 17.30600000 1.00000000)) (P ( 43.66300000 1.00000000)) (P ( 110.16200000 1.00000000)) (P ( 277.93800000 1.00000000)) (D ( 21.73100000 1.00000000)) (D ( 60.95500000 1.00000000)) (D ( 170.89000000 1.00000000)) (F ( 22.33700000 1.00000000)) (F ( 82.29000000 1.00000000)) (G ( 49.72700000 1.00000000)) ) NEON:"CC-PCV5Z" = ( (GET "CC-PV5Z") (S ( 24.31300000 1.00000000)) (S ( 54.68000000 1.00000000)) (S ( 122.97500000 1.00000000)) (S ( 276.57100000 1.00000000)) (P ( 21.30900000 1.00000000)) (P ( 53.72000000 1.00000000)) (P ( 135.42800000 1.00000000)) (P ( 341.41400000 1.00000000)) (D ( 27.04400000 1.00000000)) (D ( 75.75000000 1.00000000)) (D ( 212.17600000 1.00000000)) (F ( 28.02900000 1.00000000)) (F ( 102.58600000 1.00000000)) (G ( 38.79400000 1.00000000)) ) CALCIUM:"CC-PCV5Z" = ( (S ( 28249600.0000000 0.00000043) ( 4250190.0000000 0.00000329) ( 975014.0000000 0.00001714) ( 277446.0000000 0.00007228) ( 90454.7000000 0.00026522) ( 32515.9000000 0.00087484) ( 12610.6000000 0.00264991) ( 5190.7700000 0.00748447) ( 2242.3300000 0.01973093) ( 1011.5300000 0.04779799) ( 475.5470000 0.10359562) ( 232.0720000 0.19293018) ( 116.8740000 0.28626757) ( 60.3427000 0.29278494) ( 31.5244000 0.16312798) ( 16.0308000 0.03221688) ( 8.4599200 0.00059258)) (S ( 28249600.0000000 -0.00000012) ( 4250190.0000000 -0.00000096) ( 975014.0000000 -0.00000497) ( 277446.0000000 -0.00002099) ( 90454.7000000 -0.00007701) ( 32515.9000000 -0.00025431) ( 12610.6000000 -0.00077168) ( 5190.7700000 -0.00219083) ( 2242.3300000 -0.00583567) ( 1011.5300000 -0.01446869) ( 475.5470000 -0.03280384) ( 232.0720000 -0.06674435) ( 116.8740000 -0.11668667) ( 60.3427000 -0.15919701) ( 31.5244000 -0.11620650) ( 16.0308000 0.10547012) ( 8.4599200 0.42483472)) (S ( 28249600.0000000 0.00000004) ( 4250190.0000000 0.00000033) ( 975014.0000000 0.00000172) ( 277446.0000000 0.00000724) ( 90454.7000000 0.00002656) ( 32515.9000000 0.00008772) ( 12610.6000000 0.00026618) ( 5190.7700000 0.00075622) ( 2242.3300000 0.00201618) ( 1011.5300000 0.00501203) ( 475.5470000 0.01141485) ( 232.0720000 0.02345426) ( 116.8740000 0.04173784) ( 60.3427000 0.05894305) ( 31.5244000 0.04503419) ( 16.0308000 -0.04437618) ( 8.4599200 -0.21875449)) (S ( 4.5271800 1.0000000 )) (S ( 2.4185900 1.0000000 )) (S ( 1.2512900 1.0000000 )) (S ( 0.6434300 1.0000000 )) (S ( 0.3291800 1.0000000 )) (S ( 0.1423900 1.0000000 )) (S ( 0.0781900 1.0000000 )) (S ( 0.0376300 1.0000000 )) (S ( 0.0182900 1.0000000 )) (P ( 406353.0000000 0.00000023) ( 13600.7000000 0.00002393) ( 3235.4700000 0.00021218) ( 1053.0500000 0.00122733) ( 403.5690000 0.00545277) ( 171.4900000 0.01962669) ( 78.2363000 0.05827993) ( 37.6065000 0.13955299) ( 18.7090000 0.25592562) ( 9.5004100 0.33998132)) (P ( 406353.0000000 -0.00000007) ( 13600.7000000 -0.00000779) ( 3235.4700000 -0.00006908) ( 1053.0500000 -0.00040059) ( 403.5690000 -0.00178490) ( 171.4900000 -0.00648320) ( 78.2363000 -0.01956244) ( 37.6065000 -0.04824767) ( 18.7090000 -0.09128611) ( 9.5004100 -0.12842086)) (P ( 4.9055700 1.0000000 )) (P ( 2.5267000 1.0000000 )) (P ( 1.2713900 1.0000000 )) (P ( 0.6260100 1.0000000 )) (P ( 0.3009900 1.0000000 )) (P ( 0.1176900 1.0000000 )) (P ( 0.0511600 1.0000000 )) (P ( 0.0214200 1.0000000 )) (D ( 39.5628000 0.00344600) ( 11.4373000 0.02136000) ( 3.9674300 0.07544800) ( 1.5247800 0.17152800)) (D ( 0.5904700 1.0000000 )) (D ( 0.2191400 1.0000000 )) (D ( 0.0795700 1.0000000 )) (D ( 0.0283400 1.0000000 )) (F ( 0.0860000 1.0000000 )) (F ( 0.2580000 1.0000000 )) (F ( 0.7741000 1.0000000 )) (G ( 0.1012000 1.0000000 )) (G ( 0.3023000 1.0000000 )) (H ( 0.2534000 1.0000000 )) (D ( 5.6203000 1.0000000 )) (D ( 3.2886000 1.0000000 )) (D ( 1.9242000 1.0000000 )) (D ( 1.1259000 1.0000000 )) (F ( 4.6792000 1.0000000 )) (F ( 2.7433000 1.0000000 )) (F ( 1.6083000 1.0000000 )) (G ( 2.3770000 1.0000000 )) (G ( 1.1626000 1.0000000 )) (H ( 1.9816000 1.0000000 )) ) %%%%%%%%% ALIAS cc-pCV5Z => CC-PCV5Z %%%%%%% "cc-pCV5Z":puream = true BORON:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) CARBON:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) NITROGEN:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) OXYGEN:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) FLUORINE:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) NEON:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) PHOSPHORUS:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) CALCIUM:"cc-pCV5Z" = ( (GET "CC-PCV5Z") ) % % An unofficial basis directly from K. A. Peterson (April 2001). % % basis p_cc-pCV5Z PHOSPHORUS:"CC-PCV5Z" = ( (S ( 4666000.00000000 0.00000197) ( 698600.00000000 0.00001530) ( 159000.00000000 0.00008048) ( 45040.00000000 0.00033974) ( 14720.00000000 0.00123291) ( 5323.00000000 0.00401345) ( 2076.00000000 0.01191240) ( 861.10000000 0.03225110) ( 375.70000000 0.07866430) ( 170.80000000 0.16645800) ( 80.29000000 0.28303900) ( 38.77000000 0.33194200) ( 18.93000000 0.20335200) ( 8.79600000 0.03831830) ( 4.35800000 -0.00038472) ( 2.17400000 0.00158744) ( 1.09500000 -0.00041338) ( 0.44000000 0.00015284) ( 0.19450000 -0.00008270) ( 0.08376000 0.00001841)) (S ( 4666000.00000000 -0.00000053) ( 698600.00000000 -0.00000415) ( 159000.00000000 -0.00002185) ( 45040.00000000 -0.00009233) ( 14720.00000000 -0.00033511) ( 5323.00000000 -0.00109508) ( 2076.00000000 -0.00326798) ( 861.10000000 -0.00899951) ( 375.70000000 -0.02265280) ( 170.80000000 -0.05146500) ( 80.29000000 -0.10018600) ( 38.77000000 -0.15507500) ( 18.93000000 -0.13381800) ( 8.79600000 0.08783610) ( 4.35800000 0.42258100) ( 2.17400000 0.47489900) ( 1.09500000 0.16500200) ( 0.44000000 0.00846862) ( 0.19450000 -0.00029176) ( 0.08376000 0.00028534)) (S ( 4666000.00000000 0.00000015) ( 698600.00000000 0.00000114) ( 159000.00000000 0.00000601) ( 45040.00000000 0.00002534) ( 14720.00000000 0.00009216) ( 5323.00000000 0.00030056) ( 2076.00000000 0.00089988) ( 861.10000000 0.00247354) ( 375.70000000 0.00626812) ( 170.80000000 0.01425980) ( 80.29000000 0.02827690) ( 38.77000000 0.04451240) ( 18.93000000 0.04072170) ( 8.79600000 -0.03019080) ( 4.35800000 -0.15289400) ( 2.17400000 -0.28241100) ( 1.09500000 -0.14852200) ( 0.44000000 0.39356300) ( 0.19450000 0.61732700) ( 0.08376000 0.21461200)) (S ( 1.09500000 1.00000000)) (S ( 0.44000000 1.00000000)) (S ( 0.19450000 1.00000000)) (S ( 0.08376000 1.00000000)) (P ( 2010.00000000 0.00021592) ( 476.30000000 0.00187536) ( 154.40000000 0.01017420) ( 58.51000000 0.03998560) ( 24.40000000 0.11856300) ( 10.80000000 0.25181600) ( 4.91300000 0.36656500) ( 2.26900000 0.31617700) ( 1.04300000 0.10470000) ( 0.43130000 0.00609862) ( 0.17670000 0.00050208) ( 0.07009000 -0.00002956)) (P ( 2010.00000000 -0.00005114) ( 476.30000000 -0.00044836) ( 154.40000000 -0.00242340) ( 58.51000000 -0.00969826) ( 24.40000000 -0.02909650) ( 10.80000000 -0.06417260) ( 4.91300000 -0.09450710) ( 2.26900000 -0.09347000) ( 1.04300000 0.05206110) ( 0.43130000 0.37462400) ( 0.17670000 0.50909700) ( 0.07009000 0.21511600)) (P ( 1.04300000 1.00000000)) (P ( 0.43130000 1.00000000)) (P ( 0.17670000 1.00000000)) (P ( 0.07009000 1.00000000)) (D ( 0.16600000 1.00000000)) (D ( 0.41800000 1.00000000)) (D ( 1.05400000 1.00000000)) (D ( 2.65600000 1.00000000)) (F ( 0.21900000 1.00000000)) (F ( 0.45000000 1.00000000)) (F ( 0.92300000 1.00000000)) (G ( 0.41200000 1.00000000)) (G ( 0.90300000 1.00000000)) (H ( 0.74500000 1.00000000)) (S ( 5.01700000 1.00000000)) (S ( 8.79200000 1.00000000)) (S ( 15.40600000 1.00000000)) (S ( 26.99600000 1.00000000)) (P ( 5.28900000 1.00000000)) (P ( 9.81500000 1.00000000)) (P ( 18.21400000 1.00000000)) (P ( 33.79900000 1.00000000)) (D ( 5.70700000 1.00000000)) (D ( 11.41300000 1.00000000)) (D ( 22.82500000 1.00000000)) (D ( 45.64800000 1.00000000)) (F ( 4.08500000 1.00000000)) (F ( 9.66700000 1.00000000)) (F ( 22.87200000 1.00000000)) (G ( 6.73200000 1.00000000)) (G ( 17.37200000 1.00000000)) (H ( 12.79200000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CC-PCV6Z basis set % % Correlation Consistent Polarized Core/Valence Sextuple Zeta (cc-pCV6Z) Basis % ----------------------------------------------------------------------------- % Elements Contraction References % H : (10s,5p,4d,3f,2g,1h) -> [6s,5p,4d,3f,2g,1h] % O,Ne : (21s,15p,9d,7f,5g,3h,1i) -> [12s,11p,9d,7f,5g,3h,1i] D. Feller (to be % published) % ** % The correlation consistent core-valence basis sets extend the ideas of the % original cc-pVxZ sets by including extra functions designed for core-core and % core-valence correlation. % ** % cc-pCV6Z Atomic Energies % ** % State UHF (noneq) ROHF (noneq) ROHF(equiv) HF Limit (equiv) % ----- ---------- ----------- ----------- --------- % H 2-S -0.4999992 -0.4999992 -0.4999992 -0.50000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "CC-PCV6Z":puream = true OXYGEN:"CC-PCV6Z" = ( (GET "CC-PV6Z") (S ( 348.4406000000 1.0000000000)) (S ( 175.3001000000 1.0000000000)) (S ( 88.1933400000 1.0000000000)) (S ( 44.3699900000 1.0000000000)) (S ( 22.3225000000 1.0000000000)) (P ( 363.9568000000 1.0000000000)) (P ( 163.0141000000 1.0000000000)) (P ( 73.0130900000 1.0000000000)) (P ( 32.7021400000 1.0000000000)) (P ( 14.6471000000 1.0000000000)) (D ( 253.9252000000 1.0000000000)) (D ( 109.6239000000 1.0000000000)) (D ( 47.3265600000 1.0000000000)) (D ( 20.4317000000 1.0000000000)) (F ( 138.2648000000 1.0000000000)) (F ( 49.0034900000 1.0000000000)) (F ( 17.3677000000 1.0000000000)) (G ( 82.3645100000 1.0000000000)) (G ( 23.6764000000 1.0000000000)) (H ( 62.7153200000 1.0000000000)) ) NEON:"CC-PCV6Z" = ( (GET "CC-PV6Z") (S ( 526.1367000000 1.0000000000)) (S ( 264.9976000000 1.0000000000)) (S ( 133.4704000000 1.0000000000)) (S ( 67.2246200000 1.0000000000)) (S ( 33.8588000000 1.0000000000)) (P ( 558.8741000000 1.0000000000)) (P ( 250.2470000000 1.0000000000)) (P ( 112.0531000000 1.0000000000)) (P ( 50.1739900000 1.0000000000)) (P ( 22.4664000000 1.0000000000)) (D ( 392.7164000000 1.0000000000)) (D ( 169.5564000000 1.0000000000)) (D ( 73.2064700000 1.0000000000)) (D ( 31.6071000000 1.0000000000)) (F ( 224.9657000000 1.0000000000)) (F ( 82.4518500000 1.0000000000)) (F ( 30.2193000000 1.0000000000)) (G ( 119.8449000000 1.0000000000)) (G ( 33.5255000000 1.0000000000)) (H ( 50.9084700000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUGMENTED CORRELATION CONSISTENT BASIS SETS % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUGCCPVDZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Augmented cc-pVDZ Basis % ----------------------- % Elements Contraction References % H : (5s,2p) -> [3s,2p] T.H. Dunning, Jr. J. Chem. Phys. 90, % 1007 (1989). % He : (5s,2p) -> [3s,2p] D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). % Li - F: (10s,5p,2d) -> [4s,3p,2d] T.H. Dunning, Jr. J. Chem. Phys. 90, % 1007 (1989). % R.A. Kendall, T.H. Dunning, Jr. and % R.J. Harrison, JCP 96, 6769 (1992). % Na - Cl: (13s,9p,2d) -> [5s,4p,2d] D.E. Woon and T.H. Dunning, Jr. % J. Chem. Phys. 98, 1358 (1993). % The Na augmenting functions are from % D.E. Woon and T.H. Dunning, Jr. % (to be published). % Ga - Kr: (15s,12p,7d) -> [6s,5p,3d] A.K. Wilson, D.E. Woon, K.A. Peterson, % T.H. Dunning, Jr., J. Chem. Phys., % 110, 7667 (1999). % ** % The diffuse functions for Li, Be, Na and Mg are from D.E. Woon and T.H. % Dunning (to be published). % Additional core/valence functions which are added to the original cc-pVDZ % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % functions to use. For hydrogen the polarization exponents were determined by % optimizing them at the SD-CI level for molecular hydrogen in its ground % state. The (s,p) exponents for B - Ne were optimized in atomic Hartree- % Fock calculations on the ground state. The polarization exponents were % optimized at the SD-CI level. % ** % The extra diffuse nonpolarization functions were optimized in Hartree-Fock % calculations on the lowest state of the anion. The extra polarization % functions were optimized in SD-CI calculations. % ** % Note that the Ga - Kr basis sets are intended for use with a 14 orbital % frozen core, i.e. (1s,2s,2px,2py,2pz,3s,3px,3py,3pz,3d(z2),3d(x2-y2),3dxy, % 3dxz,3dyz) atomic orbitals. This is not the default in Gaussian, which % keeps the 3d space active. % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PVDZ":puream = true HYDROGEN:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.02974000 1.00000000)) (P ( 0.14100000 1.00000000)) ) HELIUM:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.07255000 1.00000000)) (P ( 0.24730000 1.00000000)) ) BORON:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.03105000 1.00000000)) (P ( 0.02378000 1.00000000)) (D ( 0.09040000 1.00000000)) ) CARBON:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.04690000 1.00000000)) (P ( 0.04041000 1.00000000)) (D ( 0.15100000 1.00000000)) ) NITROGEN:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.06124000 1.00000000)) (P ( 0.05611000 1.00000000)) (D ( 0.23000000 1.00000000)) ) OXYGEN:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.07896000 1.00000000)) (P ( 0.06856000 1.00000000)) (D ( 0.33200000 1.00000000)) ) FLUORINE:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.09863000 1.00000000)) (P ( 0.08502000 1.00000000)) (D ( 0.46400000 1.00000000)) ) NEON:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (S ( 0.12300000 1.00000000)) (P ( 0.10640000 1.00000000)) (D ( 0.63100000 1.00000000)) ) ALUMINUM:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.1890000000 1.0000000000)) (S ( 0.0231000000 1.0000000000)) (P ( 0.0153000000 1.0000000000)) (D ( 0.0535000000 1.0000000000)) ) SILICON:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) (S ( 0.0332000000 1.0000000000)) (P ( 0.0250000000 1.0000000000)) (D ( 0.0823000000 1.0000000000)) ) PHOSPHORUS:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.3730000000 1.0000000000)) (S ( 0.0417000000 1.0000000000)) (P ( 0.0343000000 1.0000000000)) (D ( 0.1130000000 1.0000000000)) ) SULFUR:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.4790000000 1.0000000000)) (S ( 0.0507000000 1.0000000000)) (P ( 0.0399000000 1.0000000000)) (D ( 0.1520000000 1.0000000000)) ) CHLORINE:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.6000000000 1.0000000000)) (S ( 0.0608000000 1.0000000000)) (P ( 0.0466000000 1.0000000000)) (D ( 0.1960000000 1.0000000000)) ) ARGON:"AUG-CC-PVDZ" = ( (GET "H_CCPVDZ") (D ( 0.7380000000 1.0000000000)) (S ( 0.0709000000 1.0000000000)) (P ( 0.0533000000 1.0000000000)) (D ( 0.2400000000 1.0000000000)) ) %%%%%%%%%% ALIASES aug-cc-pVDZ => AUG-CC-PVDZ %%%%%%%%%%%%%% "aug-cc-pVDZ":puream = true HYDROGEN:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) HELIUM:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) BORON:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) CARBON:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) NITROGEN:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) OXYGEN:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) FLUORINE:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) NEON:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) ALUMINUM:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) SILICON:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) PHOSPHORUS:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) SULFUR:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) CHLORINE:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) ARGON:"aug-cc-pVDZ" = ( (GET "AUG-CC-PVDZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPV(D+D)Z for Al, Si, P, S, Cl, Ar % updated by M.S. & B.T on July 5, 2002 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV(D+D)Z":puream = true ALUMINUM:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.1900000000 1.0000000000)) (D ( 1.1950000000 1.0000000000)) (S ( 0.0231000000 1.0000000000)) (P ( 0.0153000000 1.0000000000)) (D ( 0.0552000000 1.0000000000)) ) SILICON:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.2750000000 1.0000000000)) (D ( 1.8030000000 1.0000000000)) (S ( 0.0332000000 1.0000000000)) (P ( 0.0250000000 1.0000000000)) (D ( 0.0840000000 1.0000000000)) ) PHOSPHORUS:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.3740000000 1.0000000000)) (D ( 2.5060000000 1.0000000000)) (S ( 0.0417000000 1.0000000000)) (P ( 0.0343000000 1.0000000000)) (D ( 0.1160000000 1.0000000000)) ) SULFUR:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.4810000000 1.0000000000)) (D ( 2.9940000000 1.0000000000)) (S ( 0.0507000000 1.0000000000)) (P ( 0.0399000000 1.0000000000)) (D ( 0.1550000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.6030000000 1.0000000000)) (D ( 3.6520000000 1.0000000000)) (S ( 0.0608000000 1.0000000000)) (P ( 0.0466000000 1.0000000000)) (D ( 0.1980000000 1.0000000000)) ) ARGON:"AUG-CC-PV(D+D)Z" = ( (GET "H_CCPVDZ") (D ( 0.7390000000 1.0000000000)) (D ( 4.3900000000 1.0000000000)) (S ( 0.0709000000 1.0000000000)) (P ( 0.0533000000 1.0000000000)) (D ( 0.2380000000 1.0000000000)) ) %%%%%%%%%%% ALIASES aug-cc-pV(D+d)Z => AUG-CC-PV(D+D)Z %%%%%%%%%%%% "aug-cc-pV(D+d)Z":puream = true ALUMINUM:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) SILICON:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) PHOSPHORUS:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) SULFUR:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) CHLORINE:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) ARGON:"aug-cc-pV(D+d)Z" = ( (GET "AUG-CC-PV(D+D)Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPVTZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Augmented cc-pVTZ Basis % ----------------------- % Elements Contraction References % H : (6s,3p,2d) -> [4s,3p,2d] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % He : (6s,3p,2d) -> [4s,3p,2d] D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). % Li - F: (11s,6p,3d,2f) -> [5s,4p,3d,2f] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % R.A. Kendall, T.H. Dunning, Jr. and % R.J. Harrison, JCP 96, 6769 (1992). % Na - Ar:(16s,10p,3d,2f) -> [6s,5p,3d,2f] D.E. Woon and T.H. Dunning, Jr. % J. Chem. Phys. 98, 1358 (1993). % Ga - Kr:(21s,14p,10d,2f)-> [7s,6p,4d,2f] A.K. Wilson, D.E. Woon, K.A. % Peterson, T.H. Dunning, Jr., % J. Chem. Phys., 110, 7667 (1999). % ** % The diffuse functions for Li, Be, Na and Mg are from D.E. Woon and T.H. % Dunning (to be published). % ** % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % functions to use. For hydrogen the polarization exponents were determined by % optimizing them at the SD-CI level for molecular hydrogen in its ground % state. The (s,p) exponents for B - Ne were optimized in atomic Hartree- % Fock calculations on the ground state. The polarization exponents were % optimized at the SD-CI level. % ** % The extra diffuse nonpolarization functions were optimized in Hartree-Fock % calculations on the lowest state of the anion. The extra polarization % functions were optimized in SD-CI calculations. % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % aug-CCPVTZ and aug-CCPV((D+D))z for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T July 5, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PVTZ":puream = true HYDROGEN:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.02526000 1.00000000)) (P ( 0.10200000 1.00000000)) (D ( 0.24700000 1.00000000)) ) HELIUM:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.05138000 1.00000000)) (P ( 0.19930000 1.00000000)) (D ( 0.45920000 1.00000000)) ) BORON:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.02914000 1.00000000)) (P ( 0.02096000 1.00000000)) (D ( 0.06040000 1.00000000)) (F ( 0.16300000 1.00000000)) ) CARBON:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.04402000 1.00000000)) (P ( 0.03569000 1.00000000)) (D ( 0.10000000 1.00000000)) (F ( 0.26800000 1.00000000)) ) NITROGEN:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.05760000 1.00000000)) (P ( 0.04910000 1.00000000)) (D ( 0.15100000 1.00000000)) (F ( 0.36400000 1.00000000)) ) OXYGEN:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.07376000 1.00000000)) (P ( 0.05974000 1.00000000)) (D ( 0.21400000 1.00000000)) (F ( 0.50000000 1.00000000)) ) FLUORINE:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.09158000 1.00000000)) (P ( 0.07361000 1.00000000)) (D ( 0.29200000 1.00000000)) (F ( 0.72400000 1.00000000)) ) NEON:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (S ( 0.11330000 1.00000000)) (P ( 0.09175000 1.00000000)) (D ( 0.38600000 1.00000000)) (F ( 1.08400000 1.00000000)) ) ALUMINUM:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.0356000000 1.0000000000)) (D ( 0.1090000000 1.0000000000)) (S ( 0.0221000000 1.0000000000)) (P ( 0.0146000000 1.0000000000)) (D ( 0.0356000000 1.0000000000)) (F ( 0.0858000000 1.0000000000)) ) SILICON:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.1590000000 1.0000000000)) (D ( 0.4810000000 1.0000000000)) (S ( 0.0330000000 1.0000000000)) (P ( 0.0237000000 1.0000000000)) (D ( 0.0556000000 1.0000000000)) (F ( 0.1250000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2160000000 1.0000000000)) (D ( 0.6520000000 1.0000000000)) (S ( 0.0409000000 1.0000000000)) (P ( 0.0307000000 1.0000000000)) (D ( 0.0775000000 1.0000000000)) (F ( 0.1650000000 1.0000000000)) ) SULFUR:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 0.2690000000 1.0000000000)) (D ( 0.8190000000 1.0000000000)) (S ( 0.0497000000 1.0000000000)) (P ( 0.0351000000 1.0000000000)) (D ( 0.1010000000 1.0000000000)) (F ( 0.2180000000 1.0000000000)) ) CHLORINE:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 1.0460000000 1.0000000000)) (D ( 0.3440000000 1.0000000000)) (S ( 0.0591000000 1.0000000000)) (P ( 0.0419000000 1.0000000000)) (D ( 0.1350000000 1.0000000000)) (F ( 0.3120000000 1.0000000000)) ) ARGON:"AUG-CC-PVTZ" = ( (GET "H_CCPVTZ") (D ( 1.2540000000 1.0000000000)) (D ( 0.4100000000 1.0000000000)) (S ( 0.0685000000 1.0000000000)) (P ( 0.0487000000 1.0000000000)) (D ( 0.1690000000 1.0000000000)) (F ( 0.4060000000 1.0000000000)) ) %%%%%%%%%%% ALIAS aug-cc-pVTZ=> AUG-CC-PVTZ" %%%%%%%%%%%%%%%%%% "aug-cc-pVTZ":puream = true HYDROGEN:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) HELIUM:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) BORON:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) CARBON:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) NITROGEN:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) OXYGEN:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) FLUORINE:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) NEON:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) ALUMINUM:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) SILICON:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) PHOSPHORUS:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) SULFUR:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) CHLORINE:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) ARGON:"aug-cc-pVTZ" = ( (GET "AUG-CC-PVTZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPV(T+D)Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV(T+D)Z":puream = true ALUMINUM:"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.1110000000 1.0000000000)) (D ( 1.5700000000 1.0000000000)) (S ( 0.0221000000 1.0000000000)) (P ( 0.0146000000 1.0000000000)) (D ( 0.0357000000 1.0000000000)) (F ( 0.0858000000 1.0000000000)) ) SILICON:"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.1600000000 1.0000000000)) (D ( 0.4760000000 1.0000000000)) (D ( 2.3030000000 1.0000000000)) (S ( 0.0330000000 1.0000000000)) (P ( 0.0237000000 1.0000000000)) (D ( 0.0551000000 1.0000000000)) (F ( 0.1250000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.2180000000 1.0000000000)) (D ( 0.6480000000 1.0000000000)) (D ( 3.1200000000 1.0000000000)) (S ( 0.0409000000 1.0000000000)) (P ( 0.0307000000 1.0000000000)) (D ( 0.0775000000 1.0000000000)) (F ( 0.1650000000 1.0000000000)) ) SULFUR:"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 0.2730000000 1.0000000000)) (D ( 0.8120000000 1.0000000000)) (D ( 3.7560000000 1.0000000000)) (S ( 0.0497000000 1.0000000000)) (P ( 0.0351000000 1.0000000000)) (D ( 0.1010000000 1.0000000000)) (F ( 0.2180000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 1.0110000000 1.0000000000)) (D ( 0.3390000000 1.0000000000)) (D ( 4.6100000000 1.0000000000)) (S ( 0.0591000000 1.0000000000)) (P ( 0.0419000000 1.0000000000)) (D ( 0.1300000000 1.0000000000)) (F ( 0.3120000000 1.0000000000)) ) ARGON:"AUG-CC-PV(T+D)Z" = ( (GET "H_CCPVTZ") (D ( 1.2350000000 1.0000000000)) (D ( 0.4120000000 1.0000000000)) (D ( 5.5510000000 1.0000000000)) (S ( 0.0685000000 1.0000000000)) (P ( 0.0487000000 1.0000000000)) (D ( 0.1550000000 1.0000000000)) (F ( 0.4060000000 1.0000000000)) ) %%%%%%%%%%% ALIASES aug-cc-pV(T+d)Z => AUG-CC-PV(T+D)Z %%%%%%%%%%%%%%%%%%%%%%% "aug-cc-pV(T+d)Z":puream = true ALUMINUM:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) SILICON:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) PHOSPHORUS:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) SULFUR:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) CHLORINE:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) ARGON:"aug-cc-pV(T+d)Z" = ( (GET "AUG-CC-PV(T+D)Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPVQZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Augmented cc-pVQZ Basis % ----------------------- % Elements Contraction References % H : (7s,4p,3d,2f) -> [5s,4p,3d,2f] T.H. Dunning, Jr. J. Chem. % He : (7s,4p,3d,2f) -> [5s,4p,3d,2f] D.E. Woon and T.H. Dunning, Jr. % % J. Chem. Phys. 100, 2975 (1994) % % Li - Ne: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] Phys. 90, 1007 (1989). % R.A. Kendall, T.H. Dunning, Jr. and % R.J. Harrison, JCP 96, 6769 (1992). % Na - Ar: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] D.E. Woon and T.H. Dunning, Jr. % % J. Chem. Phys. 98, 1358 (1993). % % Ga - Kr: (22s,17p,13d,3f,2g)-> [8s,7p,5d,3f,2g] A.K. Wilson, D.E. Woon, K.A. % Peterson, T.H. Dunning, Jr., % J. Chem. Phys., 110, 7667 % (1999). % ** % The diffuse functions for Li, Be, Na and Mg are from D.E. Woon and T.H. % Dunning (to be published). % Additional core/valence functions which are added to the original cc-pVQZ % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % functions to use. For hydrogen the polarization exponents were determined by % optimizing them at the SD-CI level for molecular hydrogen in its ground % state. The (s,p) exponents for B - Ne were optimized in atomic Hartree- % Fock calculations on the ground state. The polarization exponents were % optimized at the SD-CI level. % ** % The extra diffuse nonpolarization functions were optimized in Hartree-Fock % calculations on the lowest state of the anion. The extra polarization % functions were optimized in SD-CI calculations. % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % aug-CCPVQZ and aug-CCPV((Q+D))z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 5, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PVQZ":puream = true HYDROGEN:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.02363000 1.00000000)) (P ( 0.08480000 1.00000000)) (D ( 0.19000000 1.00000000)) (F ( 0.36000000 1.00000000)) ) HELIUM:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.04819000 1.00000000)) (P ( 0.16260000 1.00000000)) (D ( 0.35100000 1.00000000)) (F ( 0.69060000 1.00000000)) ) BORON:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.02721000 1.00000000)) (P ( 0.01878000 1.00000000)) (D ( 0.04660000 1.00000000)) (F ( 0.11300000 1.00000000)) (G ( 0.27300000 1.00000000)) ) CARBON:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.04145000 1.00000000)) (P ( 0.03218000 1.00000000)) (D ( 0.07660000 1.00000000)) (F ( 0.18700000 1.00000000)) (G ( 0.42400000 1.00000000)) ) NITROGEN:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.05464000 1.00000000)) (P ( 0.04402000 1.00000000)) (D ( 0.11100000 1.00000000)) (F ( 0.24500000 1.00000000)) (G ( 0.55900000 1.00000000)) ) OXYGEN:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.06959000 1.00000000)) (P ( 0.05348000 1.00000000)) (D ( 0.15400000 1.00000000)) (F ( 0.32400000 1.00000000)) (G ( 0.71400000 1.00000000)) ) FLUORINE:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.08594000 1.00000000)) (P ( 0.06568000 1.00000000)) (D ( 0.20700000 1.00000000)) (F ( 0.46000000 1.00000000)) (G ( 0.92400000 1.00000000)) ) NEON:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.10540000 1.00000000)) (P ( 0.08178000 1.00000000)) (D ( 0.27300000 1.00000000)) (F ( 0.68900000 1.00000000)) (G ( 1.22400000 1.00000000)) ) ALUMINUM:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0183000000 1.0000000000)) (P ( 0.0121000000 1.0000000000)) (D ( 0.0282000000 1.0000000000)) (F ( 0.0582000000 1.0000000000)) (G ( 0.1530000000 1.0000000000)) ) SILICON:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0275000000 1.0000000000)) (P ( 0.0200000000 1.0000000000)) (D ( 0.0435000000 1.0000000000)) (F ( 0.0846000000 1.0000000000)) (G ( 0.2120000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0354000000 1.0000000000)) (P ( 0.0272000000 1.0000000000)) (D ( 0.0594000000 1.0000000000)) (F ( 0.1090000000 1.0000000000)) (G ( 0.2500000000 1.0000000000)) ) SULFUR:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0428000000 1.0000000000)) (P ( 0.0317000000 1.0000000000)) (D ( 0.0748000000 1.0000000000)) (F ( 0.1400000000 1.0000000000)) (G ( 0.2970000000 1.0000000000)) ) CHLORINE:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0519000000 1.0000000000)) (P ( 0.0376000000 1.0000000000)) (D ( 0.0952000000 1.0000000000)) (F ( 0.2170000000 1.0000000000)) (G ( 0.3780000000 1.0000000000)) ) ARGON:"AUG-CC-PVQZ" = ( (GET "H_CCPVQZ") (S ( 0.0610000000 1.0000000000)) (P ( 0.0435000000 1.0000000000)) (D ( 0.1160000000 1.0000000000)) (F ( 0.2940000000 1.0000000000)) (G ( 0.4590000000 1.0000000000)) ) %%%%%%%%%%% ALIAS aug-cc-pVQZ => AUG-CC-PVQZ %%%%%%%%%%%% "aug-cc-pVQZ":puream = true HYDROGEN:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) HELIUM:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) BORON:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) CARBON:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) NITROGEN:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) OXYGEN:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) FLUORINE:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) NEON:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) ALUMINUM:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) SILICON:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) PHOSPHORUS:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) SULFUR:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) CHLORINE:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) ARGON:"aug-cc-pVQZ" = ( (GET "AUG-CC-PVQZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CC-PV((Q+D))Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV(Q+D)Z":puream = true ALUMINUM:"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0183000000 1.0000000000)) (P ( 0.0121000000 1.0000000000)) (D ( 0.0274000000 1.0000000000)) (F ( 0.0582000000 1.0000000000)) (G ( 0.1530000000 1.0000000000)) ) SILICON:"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0275000000 1.0000000000)) (P ( 0.0200000000 1.0000000000)) (D ( 0.0414000000 1.0000000000)) (F ( 0.0846000000 1.0000000000)) (G ( 0.2120000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0354000000 1.0000000000)) (P ( 0.0272000000 1.0000000000)) (D ( 0.0570000000 1.0000000000)) (F ( 0.1090000000 1.0000000000)) (G ( 0.2500000000 1.0000000000)) ) SULFUR:"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0428000000 1.0000000000)) (P ( 0.0317000000 1.0000000000)) (D ( 0.0722000000 1.0000000000)) (F ( 0.1400000000 1.0000000000)) (G ( 0.2970000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0519000000 1.0000000000)) (P ( 0.0376000000 1.0000000000)) (D ( 0.0912000000 1.0000000000)) (F ( 0.2170000000 1.0000000000)) (G ( 0.3780000000 1.0000000000)) ) ARGON:"AUG-CC-PV(Q+D)Z" = ( (GET "H_CCPVQ_PLUS_DZ") (S ( 0.0610000000 1.0000000000)) (P ( 0.0435000000 1.0000000000)) (D ( 0.1080000000 1.0000000000)) (F ( 0.2940000000 1.0000000000)) (G ( 0.4590000000 1.0000000000)) ) %%%%%%%%%%% ALIASES aug-cc-pV(Q+D)Z => AUG-CC-PV(Q+D)Z %%%%%%%%%%%%%%%%%%%% "aug-cc-pV(Q+d)Z":puream = true ALUMINUM:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) SILICON:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) PHOSPHORUS:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) SULFUR:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) CHLORINE:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) ARGON:"aug-cc-pV(Q+d)Z" = ( (GET "AUG-CC-PV(Q+D)Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPV5Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Diffuse Function Augmented Polarized Valence Quintuple Zeta (aug-cc-pV5Z) % ------------------------------------------------------------------------- % Elements Contraction References % H : (9s,5p,4d,3f,2g) -> [6s,5p,4d,3f,2g] T.H. Dunning, Jr. % B -Ne : (15s,8p,5d,4f,3g,2h) -> [7s,6p,5d,4f,3g,2h] D. Woon, K. Peterson % Al-Ar : (21s,13p,5d,4f,3g,2h) -> [8s,7p,5d,4f,3g,2h] (unpublished) % Ga - Kr: (27s,18p,14d,4f,3g,2h)-> [9s,8p,6d,4f,3g,2h] A.K. Wilson, D.E. Woon, % K.A. Peterson, T.H. % Dunning, Jr., J. % Chem. Phys., % 110, 7667 (1999). % ** % Additional core/valence functions which are added to the original cc-pV5Z % exponents are from D. Woon and T. H. Dunning, Jr., J. Chem. Phys. 103, 4572 % (1995). % ** % The basic idea behind the correlation consistent basis sets is that functions % which contribute approximately the same amount of correlation energy should % be grouped together when considering what mixture of s,p,d,.. etc basis % functions to use. For hydrogen the polarization exponents were determined by % optimizing them at the SD-CI level for molecular hydrogen in its ground % state. The (s,p) exponents for B - Ne were optimized in atomic Hartree- % Fock calculations on the ground state. The polarization exponents were % optimized at the SD-CI level. % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % aug-CCPV5Z and aug-CCPV((5+D))z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 5, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV5Z":puream = true HYDROGEN:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.02070000 1.00000000)) (P ( 0.07440000 1.00000000)) (D ( 0.15600000 1.00000000)) (F ( 0.27400000 1.00000000)) (G ( 0.54300000 1.00000000)) ) HELIUM:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.04664000 1.00000000)) (P ( 0.14000000 1.00000000)) (D ( 0.28920000 1.00000000)) (F ( 0.53450000 1.00000000)) (G ( 0.78990000 1.00000000)) ) BORON:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.02610000 1.00000000)) (P ( 0.01570000 1.00000000)) (D ( 0.04310000 1.00000000)) (F ( 0.08430000 1.00000000)) (G ( 0.20200000 1.00000000)) ) CARBON:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.03940000 1.00000000)) (P ( 0.02720000 1.00000000)) (D ( 0.07010000 1.00000000)) (F ( 0.13800000 1.00000000)) (G ( 0.31900000 1.00000000)) (H ( 0.58600000 1.00000000)) ) NITROGEN:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.05180000 1.00000000)) (P ( 0.03690000 1.00000000)) (D ( 0.09710000 1.00000000)) (F ( 0.19200000 1.00000000)) (G ( 0.43600000 1.00000000)) (H ( 0.78800000 1.00000000)) ) OXYGEN:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.06550000 1.00000000)) (P ( 0.04460000 1.00000000)) (D ( 0.13100000 1.00000000)) (F ( 0.23700000 1.00000000)) (G ( 0.51700000 1.00000000)) (H ( 1.02400000 1.00000000)) ) FLUORINE:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.08060000 1.00000000)) (P ( 0.05500000 1.00000000)) (D ( 0.17200000 1.00000000)) (F ( 0.33100000 1.00000000)) (G ( 0.66300000 1.00000000)) (H ( 1.32600000 1.00000000)) ) NEON:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.09570000 1.00000000)) (P ( 0.06540000 1.00000000)) (D ( 0.21300000 1.00000000)) (F ( 0.42500000 1.00000000)) (G ( 0.80900000 1.00000000)) (H ( 1.62800000 1.00000000)) ) ALUMINUM:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0177000000 1.0000000000)) (P ( 0.0115000000 1.0000000000)) (D ( 0.0294000000 1.0000000000)) (F ( 0.0509000000 1.0000000000)) (G ( 0.1069000000 1.0000000000)) (H ( 0.2270000000 1.0000000000)) ) SILICON:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0260000000 1.0000000000)) (P ( 0.0192000000 1.0000000000)) (D ( 0.0468000000 1.0000000000)) (F ( 0.0735000000 1.0000000000)) (G ( 0.1510000000 1.0000000000)) (H ( 0.3230000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0335000000 1.0000000000)) (P ( 0.0253000000 1.0000000000)) (D ( 0.0624000000 1.0000000000)) (F ( 0.0950000000 1.0000000000)) (G ( 0.1840000000 1.0000000000)) (H ( 0.3720000000 1.0000000000)) ) SULFUR:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0420000000 1.0000000000)) (P ( 0.0294000000 1.0000000000)) (D ( 0.0794000000 1.0000000000)) (F ( 0.1188000000 1.0000000000)) (G ( 0.2200000000 1.0000000000)) (H ( 0.4720000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0479000000 1.0000000000)) (P ( 0.0348000000 1.0000000000)) (D ( 0.1003000000 1.0000000000)) (F ( 0.1640000000 1.0000000000)) (G ( 0.2770000000 1.0000000000)) (H ( 0.6070000000 1.0000000000)) ) ARGON:"AUG-CC-PV5Z" = ( (GET "H_CCPV5Z") (S ( 0.0538000000 1.0000000000)) (P ( 0.0402000000 1.0000000000)) (D ( 0.1210000000 1.0000000000)) (F ( 0.2090000000 1.0000000000)) (G ( 0.3340000000 1.0000000000)) (H ( 0.7420000000 1.0000000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUGCCPV((5+D))Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV(5+D)Z":puream = true ALUMINUM:"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0177000000 1.0000000000)) (P ( 0.0115000000 1.0000000000)) (D ( 0.0254000000 1.0000000000)) (F ( 0.0509000000 1.0000000000)) (G ( 0.1069000000 1.0000000000)) (H ( 0.2270000000 1.0000000000)) ) SILICON:"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0260000000 1.0000000000)) (P ( 0.0192000000 1.0000000000)) (D ( 0.0390000000 1.0000000000)) (F ( 0.0735000000 1.0000000000)) (G ( 0.1510000000 1.0000000000)) (H ( 0.3230000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0335000000 1.0000000000)) (P ( 0.0253000000 1.0000000000)) (D ( 0.0537000000 1.0000000000)) (F ( 0.0950000000 1.0000000000)) (G ( 0.1840000000 1.0000000000)) (H ( 0.3720000000 1.0000000000)) ) SULFUR:"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0420000000 1.0000000000)) (P ( 0.0294000000 1.0000000000)) (D ( 0.0664000000 1.0000000000)) (F ( 0.1188000000 1.0000000000)) (G ( 0.2200000000 1.0000000000)) (H ( 0.4720000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0479000000 1.0000000000)) (P ( 0.0348000000 1.0000000000)) (D ( 0.0836000000 1.0000000000)) (F ( 0.1640000000 1.0000000000)) (G ( 0.2770000000 1.0000000000)) (H ( 0.6070000000 1.0000000000)) ) ARGON:"AUG-CC-PV(5+D)Z" = ( (GET "H_CCPV5_PLUS_DZ") (S ( 0.0538000000 1.0000000000)) (P ( 0.0402000000 1.0000000000)) (D ( 0.0978000000 1.0000000000)) (F ( 0.2090000000 1.0000000000)) (G ( 0.3340000000 1.0000000000)) (H ( 0.7420000000 1.0000000000)) ) %%%%%%%%%%% ALIASES aug-cc-pV5Z => AUG-CC-PV(5+D)Z %%%%%%%%%%%%%%%%%%% "aug-cc-pV5Z":puream = true HYDROGEN:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) HELIUM:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) BORON:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) CARBON:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) NITROGEN:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) OXYGEN:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) FLUORINE:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) NEON:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) ALUMINUM:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) SILICON:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) PHOSPHORUS:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) SULFUR:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) CHLORINE:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) ARGON:"aug-cc-pV5Z" = ( (GET "AUG-CC-PV5Z") ) %%%%%%%%%%% ALIASES aug-cc-pV(5+d)Z => AUG-CC-PV(5+D)Z %%%%%%%%%%%%%%%%%%%% "aug-cc-pV(5+d)Z":puream = true ALUMINUM:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) SILICON:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) PHOSPHORUS:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) SULFUR:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) CHLORINE:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) ARGON:"aug-cc-pV(5+d)Z" = ( (GET "AUG-CC-PV(5+D)Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPV6Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Diffuse Function Augmented Polarized Valence Sextuple Zeta (aug-cc-pV6Z) % ----------------------------------------------------------------------- % Elements Contraction References % H - He: (11s,6p,5d,4f,3g,2h) -> [7s,6p,5d,4f,3g,2h] K.A. Peterson and % D.E. Woon, % (unpublished) % B - F : (17s,11p,6d,5f,4g,3h,2i) -> [8s,7p,6d,5f,4g,3h,2i] A.K. Wilson, T. van % Mourik and T.H. % Dunning, Jr., % J. Mol. Struct. % (THEOCHEM) 388, % 339 (1997). % Diffuse Functions: % T. van Mourik, A.K. % Wilson and T.H. % Dunning, Jr., % Mol. Phys. 96, 529 % (1999) % Ne : (17s,11p,6d,5f,4g,3h,2i) -> [8s,7p,6d,5f,4g,3h,2i] Unoffical set of % diffuse functions % from D. Feller % Al- Ar: (22s,15p,6d,5f,4g,3h,2i) -> [9s,8p,6d,5f,4g,3h,2i] T. van Mourik and % T.H. Dunning, Jr., % Int. J. Quantum % Chem. 76, 205 (2000) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % aug-CCPV6Z and aug-CCPV(6+d)z basis sets for Na, Mg, Al, Si, P, S, Cl, Ar % added by M.S. & B.T on July 5, 2002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PV6Z":puream = true HYDROGEN:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.01890000 1.00000000)) (P ( 0.06700000 1.00000000)) (D ( 0.12600000 1.00000000)) (F ( 0.24500000 1.00000000)) (G ( 0.40700000 1.00000000)) (H ( 0.68200000 1.00000000)) ) HELIUM:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0447300000 1.0000000000)) (P ( 0.1280000000 1.0000000000)) (D ( 0.2410000000 1.0000000000)) (F ( 0.4070000000 1.0000000000)) (G ( 0.6860000000 1.0000000000)) (H ( 1.0160000000 1.0000000000)) ) BORON:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.02300000 1.00000000)) (P ( 0.01365000 1.00000000)) (D ( 0.03920000 1.00000000)) (F ( 0.07330000 1.00000000)) (G ( 0.16200000 1.00000000)) (H ( 0.28800000 1.00000000)) (I ( 0.50000000 1.00000000)) ) CARBON:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.03540000 1.00000000)) (P ( 0.02376000 1.00000000)) (D ( 0.06360000 1.00000000)) (F ( 0.11800000 1.00000000)) (G ( 0.25400000 1.00000000)) (H ( 0.45100000 1.00000000)) (I ( 0.77600000 1.00000000)) ) NITROGEN:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.04714000 1.00000000)) (P ( 0.03150000 1.00000000)) (D ( 0.08740000 1.00000000)) (F ( 0.15100000 1.00000000)) (G ( 0.32600000 1.00000000)) (H ( 0.58700000 1.00000000)) (I ( 1.04100000 1.00000000)) ) OXYGEN:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.05935000 1.00000000)) (P ( 0.03380000 1.00000000)) (D ( 0.11500000 1.00000000)) (F ( 0.19500000 1.00000000)) (G ( 0.40600000 1.00000000)) (H ( 0.74800000 1.00000000)) (I ( 1.34500000 1.00000000)) ) FLUORINE:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0731500000 1.0000000000)) (P ( 0.0476000000 1.0000000000)) (D ( 0.1510000000 1.0000000000)) (F ( 0.2720000000 1.0000000000)) (G ( 0.5200000000 1.0000000000)) (H ( 0.9850000000 1.0000000000)) (I ( 1.7390000000 1.0000000000)) ) NEON:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0869000000 1.0000000000)) (P ( 0.0566000000 1.0000000000)) (D ( 0.1870000000 1.0000000000)) (F ( 0.3492000000 1.0000000000)) (G ( 0.6345000000 1.0000000000)) (H ( 1.2093000000 1.0000000000)) (I ( 2.1215000000 1.0000000000)) ) ALUMINUM:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0173700000 1.0000000000)) (P ( 0.0102100000 1.0000000000)) (D ( 0.0266600000 1.0000000000)) (F ( 0.0462500000 1.0000000000)) (G ( 0.0854500000 1.0000000000)) (H ( 0.1655000000 1.0000000000)) (I ( 0.2990000000 1.0000000000)) ) SILICON:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0253900000 1.0000000000)) (P ( 0.0169400000 1.0000000000)) (D ( 0.0413900000 1.0000000000)) (F ( 0.0688400000 1.0000000000)) (G ( 0.1164000000 1.0000000000)) (H ( 0.2351000000 1.0000000000)) (I ( 0.4271000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0322800000 1.0000000000)) (P ( 0.0219700000 1.0000000000)) (D ( 0.0549200000 1.0000000000)) (F ( 0.0871000000 1.0000000000)) (G ( 0.1470000000 1.0000000000)) (H ( 0.2874000000 1.0000000000)) (I ( 0.5151000000 1.0000000000)) ) SULFUR:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0389300000 1.0000000000)) (P ( 0.0264800000 1.0000000000)) (D ( 0.0698600000 1.0000000000)) (F ( 0.1100000000 1.0000000000)) (G ( 0.1799000000 1.0000000000)) (H ( 0.3465000000 1.0000000000)) (I ( 0.6222000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0462500000 1.0000000000)) (P ( 0.0316300000 1.0000000000)) (D ( 0.0888500000 1.0000000000)) (F ( 0.1465000000 1.0000000000)) (G ( 0.2177000000 1.0000000000)) (H ( 0.4365000000 1.0000000000)) (I ( 0.8074000000 1.0000000000)) ) ARGON:"AUG-CC-PV6Z" = ( (GET "H_CCPV6Z") (S ( 0.0535700000 1.0000000000)) (P ( 0.0367800000 1.0000000000)) (D ( 0.1078000000 1.0000000000)) (F ( 0.1830000000 1.0000000000)) (G ( 0.2555000000 1.0000000000)) (H ( 0.5265000000 1.0000000000)) (I ( 0.9926000000 1.0000000000)) ) %%%%%%%%%%% ALIAS aug-cc-pV6Z => AUG-CC-PV6Z %%%%%%%%%%%%%% "aug-cc-pV6Z":puream = true HYDROGEN:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) HELIUM:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) BORON:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) CARBON:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) NITROGEN:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) OXYGEN:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) FLUORINE:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) NEON:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) ALUMINUM:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) SILICON:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) PHOSPHORUS:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) SULFUR:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) CHLORINE:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) ARGON:"aug-cc-pV6Z" = ( (GET "AUG-CC-PV6Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CCPV(6+d)Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % inconsistency of naming basis as AUG-CC-PV6+DZ instead of AUG-CC-PV(6+D)Z % found and changed , BT 08/25/03 "AUG-CC-PV(6+D)Z":puream = true ALUMINUM:"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0173700000 1.0000000000)) (P ( 0.0102100000 1.0000000000)) (D ( 0.0237000000 1.0000000000)) (F ( 0.0462500000 1.0000000000)) (G ( 0.0854500000 1.0000000000)) (H ( 0.1655000000 1.0000000000)) (I ( 0.2990000000 1.0000000000)) ) SILICON:"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0253900000 1.0000000000)) (P ( 0.0169400000 1.0000000000)) (D ( 0.0370000000 1.0000000000)) (F ( 0.0688400000 1.0000000000)) (G ( 0.1164000000 1.0000000000)) (H ( 0.2351000000 1.0000000000)) (I ( 0.4271000000 1.0000000000)) ) PHOSPHORUS :"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0322800000 1.0000000000)) (P ( 0.0219700000 1.0000000000)) (D ( 0.0507000000 1.0000000000)) (F ( 0.0871000000 1.0000000000)) (G ( 0.1470000000 1.0000000000)) (H ( 0.2874000000 1.0000000000)) (I ( 0.5151000000 1.0000000000)) ) SULFUR:"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0389300000 1.0000000000)) (P ( 0.0264800000 1.0000000000)) (D ( 0.0609000000 1.0000000000)) (F ( 0.1100000000 1.0000000000)) (G ( 0.1799000000 1.0000000000)) (H ( 0.3465000000 1.0000000000)) (I ( 0.6222000000 1.0000000000)) ) CHLORINE:"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0462500000 1.0000000000)) (P ( 0.0316300000 1.0000000000)) (D ( 0.0775000000 1.0000000000)) (F ( 0.1465000000 1.0000000000)) (G ( 0.2177000000 1.0000000000)) (H ( 0.4365000000 1.0000000000)) (I ( 0.8074000000 1.0000000000)) ) ARGON:"AUG-CC-PV(6+D)Z" = ( (GET "H_CCPV6_PLUS_DZ") (S ( 0.0535700000 1.0000000000)) (P ( 0.0367800000 1.0000000000)) (D ( 0.0898000000 1.0000000000)) (F ( 0.1830000000 1.0000000000)) (G ( 0.2555000000 1.0000000000)) (H ( 0.5265000000 1.0000000000)) (I ( 0.9926000000 1.0000000000)) ) %%%%%%%%%%% ALIAS aug-cc-pV(6+d)Z => AUG-CC-PV(6+D)Z %%%%%%%%%%%%%%%%%%%% "aug-cc-pV(6+d)Z":puream = true ALUMINUM:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) SILICON:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) PHOSPHORUS:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) SULFUR:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) CHLORINE:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) ARGON:"aug-cc-pV(6+d)Z" = ( (GET "AUG-CC-PV(6+d)Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CC-PCVDZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: aug-cc-pCVDZ % % Augmented Polarized Core/Valence Double Zeta (aug-cc-pCVDZ) Basis % ---------------------------------------------------------------- % Elements Contraction References % B - Ne: (11s,6p,2d) -> [5s,4p,2d] T.H. Dunning, Jr. J.C.P. 90, 1007 (1989). % ** % All additional core/valence functions are D. Woon, K. Peterson and T.H. Dunning % % Jr. (to be published) with the exception of the neon exponents. They % were extrapolated from the oxygen and fluorine values. % ** % The correlation consistent core-valence basis sets extend the ideas of the % original cc-pVxZ sets by including extra functions designed for core-core and % core-valence correlation. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PCVDZ":puream = true BORON:"AUG-CC-PCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.03105000 1.00000000)) (P ( 0.02378000 1.00000000)) (D ( 0.09040000 1.00000000)) ) CARBON:"AUG-CC-PCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.04690000 1.00000000)) (P ( 0.04041000 1.00000000)) (D ( 0.15100000 1.00000000)) ) NITROGEN:"AUG-CC-PCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.06124000 1.00000000)) (P ( 0.05611000 1.00000000)) (D ( 0.23000000 1.00000000)) ) OXYGEN:"AUG-CC-PCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.07896000 1.00000000)) (P ( 0.06856000 1.00000000)) (D ( 0.33200000 1.00000000)) ) FLUORINE:"AUG-CC-PCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.09863000 1.00000000)) (P ( 0.08502000 1.00000000)) (D ( 0.46400000 1.00000000)) ) %%%%%%%%%% ALIAS aug-cc-pCVDZ => AUG-CC-PCVDZ %%%%%%%%% "aug-cc-pCVDZ":puream = true BORON:"aug-cc-pCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.03105000 1.00000000)) (P ( 0.02378000 1.00000000)) (D ( 0.09040000 1.00000000)) ) CARBON:"aug-cc-pCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.04690000 1.00000000)) (P ( 0.04041000 1.00000000)) (D ( 0.15100000 1.00000000)) ) NITROGEN:"aug-cc-pCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.06124000 1.00000000)) (P ( 0.05611000 1.00000000)) (D ( 0.23000000 1.00000000)) ) OXYGEN:"aug-cc-pCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.07896000 1.00000000)) (P ( 0.06856000 1.00000000)) (D ( 0.33200000 1.00000000)) ) FLUORINE:"aug-cc-pCVDZ" = ( (GET "CC-PCVDZ") (S ( 0.09863000 1.00000000)) (P ( 0.08502000 1.00000000)) (D ( 0.46400000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CC-PCVTZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: aug-cc-pCVTZ % % Augmented Polarized Core/Valence Triple Zeta (aug-cc-pVTZ) Basis % ---------------------------------------------------------------- % Elements Contraction References % B - Ne: (13s,8p,4d,2f) -> [7s,6p,4d,2f] T.H. Dunning, Jr. J. Chem. Phys. % 90, 1007 (1989). % ** % All additional core/valence functions are D. Woon, K. Peterson and T.H. Dunning % % Jr. (to be published) with the exception of the neon exponents. They % were extrapolated from the oxygen and fluorine values. % ** % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PCVTZ":puream = true BORON:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.02914000 1.00000000)) (P ( 0.02096000 1.00000000)) (D ( 0.06040000 1.00000000)) (F ( 0.16300000 1.00000000)) ) CARBON:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.04402000 1.00000000)) (P ( 0.03569000 1.00000000)) (D ( 0.10000000 1.00000000)) (F ( 0.26800000 1.00000000)) ) NITROGEN:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.05760000 1.00000000)) (P ( 0.04910000 1.00000000)) (D ( 0.15100000 1.00000000)) (F ( 0.36400000 1.00000000)) ) OXYGEN:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.07376000 1.00000000)) (P ( 0.05974000 1.00000000)) (D ( 0.21400000 1.00000000)) (F ( 0.50000000 1.00000000)) ) FLUORINE:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.09158000 1.00000000)) (P ( 0.07361000 1.00000000)) (D ( 0.29200000 1.00000000)) (F ( 0.72400000 1.00000000)) ) NEON:"AUG-CC-PCVTZ" = ( (GET "CC-PCVTZ") (S ( 0.11330000 1.00000000)) (P ( 0.09175000 1.00000000)) (D ( 0.38600000 1.00000000)) (F ( 1.08400000 1.00000000)) ) %%%%%%%%%% ALIAS aug-cc-pCVTZ => AUG-CC-PCVTZ %%%%%%%%%%% "aug-cc-pCVTZ":puream = true BORON:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) CARBON:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) NITROGEN:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) OXYGEN:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) FLUORINE:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) NEON:"aug-cc-pCVTZ" = ( (GET "AUG-CC-PCVTZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CC-PCVQZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: aug-cc-pCVQZ % % Augmented Polarized Core/Valence Quadruple Zeta (aug-cc-pVTZ) Basis % ------------------------------------------------------------------- % Elements Contraction References % B - Ne: (16s,10p,6d,4f,2g) -> [9s,8p,6d,4f,2g] T.H. Dunning, Jr. J. Chem. % Phys. 90, 1007 (1989). % ** % All additional core/valence functions are D. Woon, K. Peterson and T.H. Dunning % % Jr. (to be published) with the exception of the neon exponents. They % were extrapolated from the oxygen and fluorine values. % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PCVQZ":puream = true BORON:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.02721000 1.00000000)) (P ( 0.01878000 1.00000000)) (D ( 0.04660000 1.00000000)) (F ( 0.11300000 1.00000000)) (G ( 0.27300000 1.00000000)) ) CARBON:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.04145000 1.00000000)) (P ( 0.03218000 1.00000000)) (D ( 0.07660000 1.00000000)) (F ( 0.18700000 1.00000000)) (G ( 0.42400000 1.00000000)) ) NITROGEN:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.05464000 1.00000000)) (P ( 0.04402000 1.00000000)) (D ( 0.11100000 1.00000000)) (F ( 0.24500000 1.00000000)) (G ( 0.55900000 1.00000000)) ) OXYGEN:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.06959000 1.00000000)) (P ( 0.05348000 1.00000000)) (D ( 0.15400000 1.00000000)) (F ( 0.32400000 1.00000000)) (G ( 0.71400000 1.00000000)) ) FLUORINE:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.08594000 1.00000000)) (P ( 0.06568000 1.00000000)) (D ( 0.20700000 1.00000000)) (F ( 0.46000000 1.00000000)) (G ( 0.92400000 1.00000000)) ) NEON:"AUG-CC-PCVQZ" = ( (GET "CC-PCVQZ") (S ( 0.10540000 1.00000000)) (P ( 0.08178000 1.00000000)) (D ( 0.27300000 1.00000000)) (F ( 0.68900000 1.00000000)) (G ( 1.22400000 1.00000000)) ) %%%%%%%%%% ALIAS aug-cc-pCVQZ => AUG-CC-PCVQZ %%%%%%%%%%%%%%%%% "aug-cc-pCVQZ":puream = true BORON:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) CARBON:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) NITROGEN:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) OXYGEN:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) FLUORINE:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) NEON:"aug-cc-pCVQZ" = ( (GET "AUG-CC-PCVQZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-CC-PCV5Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: aug-cc-pCV5Z % % Augmented Polarized Core/Valence Quintuple Zeta (aug-cc-pV5Z) Basis % ------------------------------------------------------------------- % Elements Contraction References % H : (9s,5p,4d,3f,2g) -> [6s,5p,4d,3f,2g] T.H. Dunning, Jr. % He : (9s,4p,3d,2f,1g) -> [5s,4p,3d,2f,1g] D.E. Woon and T.H. % Dunning, Jr., J.C.P. % 100, 2975 (1994). % B - F: (19s,13p,8d,6f,4g,2h) -> [11s,10p,8d,6f,4g,2h] D. Woon, K. Peterson % ** % All additional core/valence functions are D. Woon, K. Peterson and T.H. Dunning % % Jr. (to be published). % ** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-CC-PCV5Z":puream = true BORON:"AUG-CC-PCV5Z" = ( (GET "CC-PCV5Z") (S ( 0.02610000 1.00000000)) (P ( 0.01570000 1.00000000)) (D ( 0.04310000 1.00000000)) (F ( 0.08430000 1.00000000)) (G ( 0.20200000 1.00000000)) (H ( 0.38400000 1.00000000)) ) CARBON:"AUG-CC-PCV5Z" = ( (GET "CC-PCV5Z") (S ( 0.03940000 1.00000000)) (P ( 0.02720000 1.00000000)) (D ( 0.07010000 1.00000000)) (F ( 0.13800000 1.00000000)) (G ( 0.31900000 1.00000000)) (H ( 0.58600000 1.00000000)) ) NITROGEN:"AUG-CC-PCV5Z" = ( (GET "CC-PCV5Z") (S ( 0.05180000 1.00000000)) (P ( 0.03690000 1.00000000)) (D ( 0.09710000 1.00000000)) (F ( 0.19200000 1.00000000)) (G ( 0.43600000 1.00000000)) (H ( 0.78800000 1.00000000)) ) OXYGEN:"AUG-CC-PCV5Z" = ( (GET "CC-PCV5Z") (S ( 0.06550000 1.00000000)) (P ( 0.04460000 1.00000000)) (D ( 0.13100000 1.00000000)) (F ( 0.23700000 1.00000000)) (G ( 0.51700000 1.00000000)) (H ( 1.02400000 1.00000000)) ) FLUORINE:"AUG-CC-PCV5Z" = ( (GET "CC-PCV5Z") (S ( 0.08060000 1.00000000)) (P ( 0.05500000 1.00000000)) (D ( 0.17200000 1.00000000)) (F ( 0.33100000 1.00000000)) (G ( 0.66300000 1.00000000)) (H ( 1.32600000 1.00000000)) ) %%%%%%%%%% ALIAS aug-cc-pCV5Z => AUG-CC-PCV5Z %%%%%%%%% "aug-cc-pCV5Z":puream = true BORON:"aug-cc-pCV5Z" = ( (GET "AUG-CC-PCV5Z") ) CARBON:"aug-cc-pCV5Z" = ( (GET "AUG-CC-PCV5Z") ) NITROGEN:"aug-cc-pCV5Z" = ( (GET "AUG-CC-PCV5Z") ) OXYGEN:"aug-cc-pCV5Z" = ( (GET "AUG-CC-PCV5Z") ) FLUORINE:"aug-cc-pCV5Z" = ( (GET "AUG-CC-PCV5Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % D-AUG-CCPVDZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: d-aug-cc-pVDZ % Doubly Augmented cc-pVDZ Basis % ------------------------------ % Elements Contraction References % H - He: (6s,3p) -> [4s,3p] T.H. Dunning, Jr. J. Chem. Phys. 90, % 1007 (1989). % D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). % B - Ne: (11s,6p,3d) -> [5s,4p,3d] T.H. Dunning, Jr. J. Chem. Phys. 90, % 1007 (1989). % ** % The first shell of diffuse functions are from R.A. Kendall, T.H. Dunning, Jr. % and R.J. Harrison, J. Chem Phys. 96, 6769 (1992). % The second set are from D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 100, % 2975 (1994). % The diffuse functions for Li, Be, Na and Mg are from D.E. Woon and T.H. % Dunning, Jr. (to be published). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "D-AUG-CC-PVDZ":puream = true HYDROGEN:"D-AUG-CC-PVDZ" = ( (GET "AUG-CC-PVDZ") (S ( 0.00725000 1.00000000)) (P ( 0.02730000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % D-AUG-CC-PVTZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: d-aug-cc-pVTZ % Doubly Augmented cc-pVTZ Basis % ------------------------------ % Elements Contraction References % H - He: (7s,4p,3d) -> [5s,4p,3d] T.H. Dunning, Jr. J. Chem. Phys. 90, % % 1007 (1989). % D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). % B - Ne: (12s,7p,4d,3f) -> [6s,5p,4d,3f] T.H. Dunning, Jr. J. Chem. Phys. 90, % % 1007 (1989). % ** % The first shell of diffuse functions are from R.A. Kendall, T.H. Dunning, Jr. % and R.J. Harrison, J. Chem Phys. 96, 6769 (1992). % The second shell is from D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 100, % 2975 (1994). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "D-AUG-CC-PVTZ":puream = true HYDROGEN:"D-AUG-CC-PVTZ" = ( (GET "AUG-CC-PVTZ") (S ( 0.00621000 1.00000000)) (P ( 0.02680000 1.00000000)) (D ( 0.05770000 1.00000000)) ) HELIUM:"D-AUG-CC-PVTZ" = ( (GET "AUG-CC-PVTZ") (S ( 0.01260000 1.00000000)) (P ( 0.05240000 1.00000000)) (D ( 0.10700000 1.00000000)) ) %%%%%%%%%%% ALIAS d-aug-cc-pVTZ=> D-AUG-CC-PVTZ" %%%%%%%%%%%%%%%%%% "d-aug-cc-pVTZ":puream = true HYDROGEN:"d-aug-cc-pVTZ" = ( (GET "D-AUG-CC-PVTZ") ) HELIUM:"d-aug-cc-pVTZ" = ( (GET "D-AUG-CC-PVTZ") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % D-AUG-CC-PVQZ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: d-aug-cc-pVQZ % Doubly Augmented cc-pVQZ Basis % ------------------------------ % Elements Contraction References % H - He: (8s,5p,4d,3f) -> [6s,5p,4d,3f] T.H. Dunning, Jr., J. Chem. % Phys. 90, 1007 (1989). % D.E. Woon and T.H. Dunning, Jr. % % J. Chem. Phys. 100, 2975 (1994) % % B - Ne: (14s,8p,5d,4f,3g) -> [7s,6p,5d,4f,3g] T.H. Dunning, Jr., J. Chem. % Phys. 90, 1007 (1989). % ** % The first shell of diffuse functions are from R.A. Kendall, T.H. Dunning, Jr. % and R.J. Harrison, J. Chem Phys. 96, 6769 (1992). % The second shell is from D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 100, % 2975 (1994). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "D-AUG-CC-PVQZ":puream = true HYDROGEN:"D-AUG-CC-PVQZ" = ( (GET "AUG-CC-PVQZ") (S ( 0.00621000 1.00000000)) (P ( 0.02460000 1.00000000)) (D ( 0.05450000 1.00000000)) (F ( 0.09280000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % D-AUG-CC-PV5Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: d-aug-cc-pV5Z % Doubly Augmented cc-pV5Z Basis % ------------------------------ % Elements Contraction References % H - He: (10s,6p,5d,4f,3g) -> [7s,6p,5d,4f,3g] T.H. Dunning, Jr., J Chem % % Phys. 90, 1007 (1989). % D.E. Woon and T.H. % Dunning, Jr., J. Chem. % Phys. 100, 2975 (1994) % B - Ne: (16s,9p,6d,5f,4g,3h) -> [8s,7p,6d,5f,4g,3h] T.H. Dunning, Jr., J. % Chem. Phys. 90, 1007 % (1989). % ** % The first shell of diffuse functions are from R.A. Kendall, T.H. Dunning, Jr. % and R.J. Harrison, J. Chem Phys. 96, 6769 (1992). % The second shell is from D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 100, % 2975 (1994). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "D-AUG-CC-PV5Z":puream = true HYDROGEN:"D-AUG-CC-PV5Z" = ( (GET "AUG-CC-PV5Z") (S ( 0.00589000 1.00000000)) (P ( 0.02250000 1.00000000)) (D ( 0.04940000 1.00000000)) (F ( 0.08580000 1.00000000)) (G ( 0.12500000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % D-AUG-CC-PV6Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: d-aug-cc-pV6Z % Doubly Augmented cc-pV6Z Basis % ------------------------------ % Elements Contraction References % H : (12s,7p,6d,5f,4g,3h) -> [8s,7p,6d,5f,4g,3h] K.A. Peterson and % D.E. Woon, % (unpublished) % B - F : (18s,12p,7d,6f,5g,4h,2i) -> [9s,8p,7d,6f,5g,4h,2i] A.K. Wilson, T. v. % Mourik and T.H. % Dunning, Jr., % J. Mol. Struct. % (THEOCHEM) 388, % 339 (1997). % The second shell of diffuse functions is from D.E. Woon and T.H. Dunning, Jr., % J. Chem. Phys. 100, 2975 (1994). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "D-AUG-CC-PV6Z":puream = true HYDROGEN:"D-AUG-CC-PV6Z" = ( (GET "AUG-CC-PV6Z") (S ( 0.00575000 1.00000000)) (P ( 0.02100000 1.00000000)) (D ( 0.04200000 1.00000000)) (F ( 0.07770000 1.00000000)) (G ( 0.12500000 1.00000000)) (H ( 0.17500000 1.00000000)) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % PV7Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: pV7Z % Polarized Valence Septuple Zeta (pV7Z-like) Basis % ------------------------------------------------- % H: (14s,6p,5d,4f,3g,2h,1i) -> [7s,6p,5d,4f,3g,2h,1i] D. Feller ??? % C - F: (18s,12p,6d,5f,4g,3h,2i) -> [8s,7p,6d,5f,4g,3h,2i] D. Feller and K.A. % Peterson, JCP 110, % 8384 (1999) and % S: (27s,18p,6d,5f,4g,3h,2i) -> [9s,8p,6d,5f,4g,3h,2i] D. Feller and J.A. % Sordo (to be published) % In order to be consistent with the rest of the correlation consistent basis % sets, the 7Z sets should contain 1k function. The present sets do not, but % it has been shown possible to estimate the contribution of the missing % functions by plotting the energy contribution of each l shell for d,f,g etc. % and then perform an exponential extrapolation. % % 8/26/03 EFV -- rename pV7Z basis for C to __pV7Z so that people don't use it % it seems to be of questionable quality (a local minimum?) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "PV7Z":puream = true HYDROGEN:"PV7Z" = ( (S ( 2762.5161400000 0.0000220000) ( 1211.8584400000 0.0000060000) ( 531.6171200000 0.0000944000) ( 233.2093860000 0.0001794000) ( 102.3041130000 0.0005845000) ( 44.8786889000 0.0015591000) ( 19.6873484000 0.0043883000) ( 8.6364307300 0.0120863000)) (S ( 3.7886227400 1.0000000000)) (S ( 1.6619900800 1.0000000000)) (S ( 0.7290805200 1.0000000000)) (S ( 0.3198324800 1.0000000000)) (S ( 0.1403038600 1.0000000000)) (S ( 0.0615483900 1.0000000000)) (P ( 8.1536480000 1.0000000000)) (P ( 3.8622750000 1.0000000000)) (P ( 1.8295080000 1.0000000000)) (P ( 0.8666140000 1.0000000000)) (P ( 0.4105030000 1.0000000000)) (P ( 0.1944500000 1.0000000000)) (D ( 6.0348330000 1.0000000000)) (D ( 3.0569580000 1.0000000000)) (D ( 1.5485090000 1.0000000000)) (D ( 0.7844010000 1.0000000000)) (D ( 0.3973400000 1.0000000000)) (F ( 5.8947400000 1.0000000000)) (F ( 2.9029400000 1.0000000000)) (F ( 1.4295900000 1.0000000000)) (F ( 0.7040200000 1.0000000000)) (G ( 4.6226740000 1.0000000000)) (G ( 2.1711260000 1.0000000000)) (G ( 1.0197100000 1.0000000000)) (H ( 4.2237060000 1.0000000000)) (H ( 1.7050600000 1.0000000000)) (I ( 3.4140000000 1.0000000000)) ) % changed name of basis from CARBON:"__PV7Z" to CARBON:"PV7Z" % BT 08/25/03 CARBON:"PV7Z" = ( (S ( 949028.8000000000 0.0000014000) ( 142083.0000000000 0.0000110000) ( 32332.4700000000 0.0000578000) ( 9158.1170000000 0.0002444000) ( 2987.9090000000 0.0008910000) ( 1078.7880000000 0.0029040000) ( 420.8308000000 0.0086310000) ( 174.6003000000 0.0235290000) ( 76.1829200000 0.0581610000) ( 34.6358800000 0.1266240000) ( 16.2707600000 0.2304650000) ( 7.8554790000 0.3192970000)) (S ( 949028.8000000000 -0.0000003000) ( 142083.0000000000 -0.0000023000) ( 32332.4700000000 -0.0000123000) ( 9158.1170000000 -0.0000520000) ( 2987.9090000000 -0.0001900000) ( 1078.7880000000 -0.0006200000) ( 420.8308000000 -0.0018550000) ( 174.6003000000 -0.0050920000) ( 76.1829200000 -0.0129160000) ( 34.6358800000 -0.0292300000) ( 16.2707600000 -0.0584140000) ( 7.8554790000 -0.0966550000)) (S ( 3.8821720000 1.0000000000)) (S ( 1.9283340000 1.0000000000)) (S ( 0.8358060000 1.0000000000)) (S ( 0.3862910000 1.0000000000)) (S ( 0.1768600000 1.0000000000)) (S ( 0.0802520000 1.0000000000)) (P ( 765.4553000000 0.0000272000) ( 180.8628000000 0.0002410000) ( 58.7144100000 0.0013570000) ( 22.4162500000 0.0056200000) ( 9.4062140000 0.0182670000) ( 4.1871980000 0.0500190000)) (P ( 1.9558760000 1.0000000000)) (P ( 0.9453360000 1.0000000000)) (P ( 0.4627630000 1.0000000000)) (P ( 0.2267960000 1.0000000000)) (P ( 0.1105920000 1.0000000000)) (P ( 0.0524000000 1.0000000000)) (D ( 8.0028000000 1.0000000000)) (D ( 3.6663000000 1.0000000000)) (D ( 1.6796000000 1.0000000000)) (D ( 0.7695000000 1.0000000000)) (D ( 0.3525000000 1.0000000000)) (D ( 0.1615000000 1.0000000000)) (F ( 3.5134000000 1.0000000000)) (F ( 1.8214000000 1.0000000000)) (F ( 0.9443000000 1.0000000000)) (F ( 0.4896000000 1.0000000000)) (F ( 0.2538000000 1.0000000000)) (G ( 3.0363000000 1.0000000000)) (G ( 1.6713000000 1.0000000000)) (G ( 0.9200000000 1.0000000000)) (G ( 0.5064000000 1.0000000000)) (H ( 1.8273000000 1.0000000000)) (H ( 0.8999000000 1.0000000000)) (H ( 0.4432000000 1.0000000000)) (I ( 3.2802000000 1.0000000000)) (I ( 0.6777000000 1.0000000000)) ) NITROGEN:"PV7Z" = ( (S ( 1296296.0000000000 0.0000014000) ( 194068.6000000000 0.0000110000) ( 44160.5700000000 0.0000580000) ( 12507.7200000000 0.0002450000) ( 4080.4760000000 0.0008930000) ( 1473.1400000000 0.0029130000) ( 574.6066000000 0.0086640000) ( 238.3700000000 0.0236350000) ( 103.9936000000 0.0585180000) ( 47.2794400000 0.1277287000) ( 22.2187100000 0.2328737000) ( 10.7356900000 0.3211170000)) (S ( 1296296.0000000000 -0.0000003100) ( 194068.6000000000 -0.0000024300) ( 44160.5700000000 -0.0000127900) ( 12507.7200000000 -0.0000539900) ( 4080.4760000000 -0.0001973000) ( 1473.1400000000 -0.0006432000) ( 574.6066000000 -0.0019264000) ( 238.3700000000 -0.0052948000) ( 103.9936000000 -0.0134588000) ( 47.2794400000 -0.0306129000) ( 22.2187100000 -0.0615113000) ( 10.7356900000 -0.1020055000)) (S ( 5.3088560000 1.0000000000)) (S ( 2.6391770000 1.0000000000)) (S ( 1.1657640000 1.0000000000)) (S ( 0.5370910000 1.0000000000)) (S ( 0.2449040000 1.0000000000)) (S ( 0.1102710000 1.0000000000)) (P ( 1094.9600000000 0.0000276000) ( 258.6611000000 0.0002450000) ( 83.8525500000 0.0013920000) ( 31.9622500000 0.0058590000) ( 13.4112100000 0.0194130000) ( 5.9854710000 0.0535998000)) (P ( 2.8036300000 1.0000000000)) (P ( 1.3557360000 1.0000000000)) (P ( 0.6623960000 1.0000000000)) (P ( 0.3229120000 1.0000000000)) (P ( 0.1559210000 1.0000000000)) (P ( 0.0728200000 1.0000000000)) (D ( 8.5914298000 1.0000000000)) (D ( 4.0335351000 1.0000000000)) (D ( 1.8936785000 1.0000000000)) (D ( 0.8890509000 1.0000000000)) (D ( 0.4173948000 1.0000000000)) (D ( 0.1959600000 1.0000000000)) (F ( 5.7389002000 1.0000000000)) (F ( 2.7724156000 1.0000000000)) (F ( 1.3393312000 1.0000000000)) (F ( 0.6470199000 1.0000000000)) (F ( 0.3125700000 1.0000000000)) (G ( 5.5368024000 1.0000000000)) (G ( 2.5872908000 1.0000000000)) (G ( 1.2090144000 1.0000000000)) (G ( 0.5649600000 1.0000000000)) (H ( 4.2181288000 1.0000000000)) (H ( 2.0871494000 1.0000000000)) (H ( 1.0327300000 1.0000000000)) (I ( 3.4500000000 1.0000000000)) (I ( 1.5800000000 1.0000000000)) ) OXYGEN:"PV7Z" = ( (S ( 1678789.0000000000 0.0000014000) ( 251388.2000000000 0.0000112000) ( 57213.7300000000 0.0000589000) ( 16207.4400000000 0.0002490000) ( 5288.2760000000 0.0009070000) ( 1909.4780000000 0.0029570000) ( 744.9231000000 0.0087910000) ( 309.0755000000 0.0239800000) ( 134.8645000000 0.0593810000) ( 61.3312900000 0.1296500000) ( 28.8379600000 0.2360640000) ( 13.9450400000 0.3229210000)) (S ( 1678789.0000000000 -0.0000003000) ( 251388.2000000000 -0.0000025000) ( 57213.7300000000 -0.0000134000) ( 16207.4400000000 -0.0000560000) ( 5288.2760000000 -0.0002060000) ( 1909.4780000000 -0.0006720000) ( 744.9231000000 -0.0020130000) ( 309.0755000000 -0.0055350000) ( 134.8645000000 -0.0140790000) ( 61.3312900000 -0.0321130000) ( 28.8379600000 -0.0646760000) ( 13.9450400000 -0.1071540000)) (S ( 6.8990770000 1.0000000000)) (S ( 3.4315770000 1.0000000000)) (S ( 1.5398400000 1.0000000000)) (S ( 0.7097510000 1.0000000000)) (S ( 0.3230470000 1.0000000000)) (S ( 0.1442220000 1.0000000000)) (P ( 1349.0590000000 0.0000323000) ( 319.4569000000 0.0002860000) ( 103.7804000000 0.0016160000) ( 39.6282100000 0.0067850000) ( 16.6613700000 0.0224990000) ( 7.4641660000 0.0616740000)) (P ( 3.5093250000 1.0000000000)) (P ( 1.6956800000 1.0000000000)) (P ( 0.8227420000 1.0000000000)) (P ( 0.3957330000 1.0000000000)) (P ( 0.1876440000 1.0000000000)) (P ( 0.0858410000 1.0000000000)) (D ( 10.0642930000 1.0000000000)) (D ( 4.8432594000 1.0000000000)) (D ( 2.3307312000 1.0000000000)) (D ( 1.1216223000 1.0000000000)) (D ( 0.5397605000 1.0000000000)) (D ( 0.2597500000 1.0000000000)) (F ( 6.9117087000 1.0000000000)) (F ( 3.4199449000 1.0000000000)) (F ( 1.6922043000 1.0000000000)) (F ( 0.8373104000 1.0000000000)) (F ( 0.4143050000 1.0000000000)) (G ( 7.2379949000 1.0000000000)) (G ( 3.4157598000 1.0000000000)) (G ( 1.6119678000 1.0000000000)) (G ( 0.7607210000 1.0000000000)) (H ( 5.7331092000 1.0000000000)) (H ( 2.5824816000 1.0000000000)) (H ( 1.1632800000 1.0000000000)) (I ( 4.8130000000 1.0000000000)) (I ( 2.0780000000 1.0000000000)) ) FLUORINE:"PV7Z" = ( (S ( 2115112.0000000000 0.0000015000) ( 316699.7000000000 0.0000113000) ( 72075.7100000000 0.0000595000) ( 20416.8300000000 0.0002514000) ( 6661.4580000000 0.0009160000) ( 2405.1880000000 0.0029860000) ( 938.2595000000 0.0088819000) ( 389.2710000000 0.0242321000) ( 169.8499000000 0.0600301000) ( 77.2436700000 0.1311355000) ( 36.3287400000 0.2385632000) ( 17.5738700000 0.3243075000)) (S ( 2115112.0000000000 -0.0000003400) ( 316699.7000000000 -0.0000026200) ( 72075.7100000000 -0.0000137800) ( 20416.8300000000 -0.0000581700) ( 6661.4580000000 -0.0002124200) ( 2405.1880000000 -0.0006928100) ( 938.2595000000 -0.0020746000) ( 389.2710000000 -0.0057097400) ( 169.8499000000 -0.0145356000) ( 77.2436700000 -0.0332350000) ( 36.3287400000 -0.0670662000) ( 17.5738700000 -0.1109840000)) (S ( 8.6935300000 1.0000000000)) (S ( 4.3217690000 1.0000000000)) (S ( 1.9595200000 1.0000000000)) (S ( 0.9031850000 1.0000000000)) (S ( 0.4104050000 1.0000000000)) (S ( 0.1820240000 1.0000000000)) (P ( 1687.7180000000 0.0000346000) ( 399.6517000000 0.0003058000) ( 129.8267000000 0.0017313000) ( 49.5782600000 0.0072975000) ( 20.8619300000 0.0243126000) ( 9.3655640000 0.0664341000)) (P ( 4.4099770000 1.0000000000)) (P ( 2.1283760000 1.0000000000)) (P ( 1.0282880000 1.0000000000)) (P ( 0.4907570000 1.0000000000)) (P ( 0.2300730000 1.0000000000)) (P ( 0.1037660000 1.0000000000)) (D ( 12.6344950000 1.0000000000)) (D ( 6.1124792000 1.0000000000)) (D ( 2.9571743000 1.0000000000)) (D ( 1.4306600000 1.0000000000)) (D ( 0.6921432000 1.0000000000)) (D ( 0.3348540000 1.0000000000)) (F ( 11.6443240000 1.0000000000)) (F ( 5.5714469000 1.0000000000)) (F ( 2.6657641000 1.0000000000)) (F ( 1.2754852000 1.0000000000)) (F ( 0.6102800000 1.0000000000)) (G ( 8.2863953000 1.0000000000)) (G ( 3.9105216000 1.0000000000)) (G ( 1.8454562000 1.0000000000)) (G ( 0.8709090000 1.0000000000)) (H ( 7.7626969000 1.0000000000)) (H ( 3.4810300000 1.0000000000)) (H ( 1.5610000000 1.0000000000)) (I ( 5.5300000000 1.0000000000)) (I ( 2.1600000000 1.0000000000)) ) SULFUR:"PV7Z" = ( (S ( 7010036.0000000000 0.0000014394) ( 3489316.1000000001 -0.0000008403) ( 1736842.2000000000 0.0000048692) ( 864530.7300000000 0.0000032375) ( 430328.8900000000 0.0000167683) ( 214200.5400000000 0.0000310075) ( 106620.4800000000 0.0000829940) ( 53071.4180000000 0.0001899820) ( 26416.8330000000 0.0004615139) ( 13149.2450000000 0.0010945308) ( 6545.1692000000 0.0026089891) ( 3257.9239000000 0.0061757438) ( 1621.6645000000 0.0144588950) ( 807.1998400000 0.0331748500) ( 401.7918600000 0.0728116400) ( 199.9959500000 0.1472239730) ( 99.5499980000 0.2541443160) ( 49.5520150000 0.3247505290) ( 24.6650150000 0.2308746750) ( 12.2772600000 0.0594301940) ( 6.1111298000 0.0038523020)) (S ( 7010036.0000000000 0.0000003974) ( 3489316.1000000001 -0.0000002314) ( 1736842.2000000000 0.0000013427) ( 864530.7300000000 0.0000008998) ( 430328.8900000000 0.0000046194) ( 214200.5400000000 0.0000085924) ( 106620.4800000000 0.0000228721) ( 53071.4180000000 0.0000526215) ( 26416.8330000000 0.0001273476) ( 13149.2450000000 0.0003034602) ( 6545.1692000000 0.0007224215) ( 3257.9239000000 0.0017220247) ( 1621.6645000000 0.0040541165) ( 807.1998400000 0.0094756820) ( 401.7918600000 0.0214254370) ( 199.9959500000 0.0461949500) ( 99.5499980000 0.0899140220) ( 49.5520150000 0.1463329580) ( 24.6650150000 0.1490147800) ( 12.2772600000 -0.0161861918) ( 6.1111298000 -0.3446816400)) (S ( 7010036.0000000000 -0.0000001155) ( 3489316.1000000001 0.0000000680) ( 1736842.2000000000 -0.0000003922) ( 864530.7300000000 -0.0000002551) ( 430328.8900000000 -0.0000013547) ( 214200.5400000000 -0.0000024647) ( 106620.4800000000 -0.0000067032) ( 53071.4180000000 -0.0000151431) ( 26416.8330000000 -0.0000372532) ( 13149.2450000000 -0.0000875207) ( 6545.1692000000 -0.0002110324) ( 3257.9239000000 -0.0004976731) ( 1621.6645000000 -0.0011840931) ( 807.1998400000 -0.0027474376) ( 401.7918600000 -0.0062804034) ( 199.9959500000 -0.0135158100) ( 99.5499980000 -0.0268189060) ( 49.5520150000 -0.0442798560) ( 24.6650150000 -0.0476551370) ( 12.2772600000 0.0069191566) ( 6.1111298000 0.1275718470)) (S ( 3.0418765000 1.0000000000)) (S ( 1.5141247000 1.0000000000)) (S ( 0.7536708200 1.0000000000)) (S ( 0.3751472500 1.0000000000)) (S ( 0.1867333200 1.0000000000)) (S ( 0.0929483940 1.0000000000)) (P ( 9780.0262000000 0.0000144008) ( 4800.6372000000 0.0000147654) ( 2356.4475000000 0.0001001155) ( 1156.6891000000 0.0002900027) ( 567.7740000000 0.0010415811) ( 278.6983300000 0.0034037782) ( 136.8022500000 0.0108411690) ( 67.1509430000 0.0319423170) ( 32.9618050000 0.0848947570) ( 16.1796770000 0.1856741160) ( 7.9419789000 0.3046790240)) (P ( 9780.0262000000 0.0000036506) ( 4800.6372000000 0.0000038365) ( 2356.4475000000 0.0000252796) ( 1156.6891000000 0.0000744710) ( 567.7740000000 0.0002644809) ( 278.6983300000 0.0008733248) ( 136.8022500000 0.0027778292) ( 67.1509430000 0.0082927386) ( 32.9618050000 0.0223585230) ( 16.1796770000 0.0502619120) ( 7.9419789000 0.0843221210)) (P ( 3.8984108000 1.0000000000)) (P ( 1.9135793000 1.0000000000)) (P ( 0.9393022100 1.0000000000)) (P ( 0.4610671900 1.0000000000)) (P ( 0.2263200800 1.0000000000)) (P ( 0.1110917900 1.0000000000)) (P ( 0.0545306690 1.0000000000)) (D ( 8.1157469000 1.0000000000)) (D ( 3.6595333000 1.0000000000)) (D ( 1.6501480000 1.0000000000)) (D ( 0.7440808000 1.0000000000)) (D ( 0.3355191000 1.0000000000)) (D ( 0.1512915000 1.0000000000)) (F ( 1.7321483000 1.0000000000)) (F ( 0.7770966000 1.0000000000)) (F ( 0.3486301000 1.0000000000)) (F ( 0.1564065000 1.0000000000)) (F ( 0.0701689000 1.0000000000)) (G ( 1.5999868000 1.0000000000)) (G ( 0.9809852000 1.0000000000)) (G ( 0.6014624000 1.0000000000)) (G ( 0.3687691000 1.0000000000)) (H ( 1.5347571000 1.0000000000)) (H ( 0.9157262000 1.0000000000)) (H ( 0.5463760000 1.0000000000)) (I ( 1.5000000000 1.0000000000)) (I ( 0.7570000000 1.0000000000)) ) %%%%%%%%%% ALIAS pV7Z => PV7Z %%%%%%%%%%%%%%% "pV7Z":puream = true HYDROGEN:"pV7Z" = ( (GET "PV7Z") ) CARBON:"__pV7Z" = ( (GET "__PV7Z") ) NITROGEN:"pV7Z" = ( (GET "PV7Z") ) OXYGEN:"pV7Z" = ( (GET "PV7Z") ) FLUORINE:"pV7Z" = ( (GET "PV7Z") ) SULFUR:"pV7Z" = ( (GET "PV7Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Information on *unofficial* cc-pV7Z % Obtained by augmenting pV7Z basis sets of Feller and Co. with k-functions % Optimized at the CISD(FC) level % To be published % -EV 01/29/2001 "CC-PV7Z":puream = true HYDROGEN:"CC-PV7Z" = ( (GET "PV7Z") ) CARBON:"CC-PV7Z" = ( (GET "PV7Z") (K ( 1.9560000000 1.0000000000)) ) NITROGEN:"CC-PV7Z" = ( (GET "PV7Z") (K ( 2.3790000000 1.0000000000)) ) OXYGEN:"CC-PV7Z" = ( (GET "PV7Z") (K ( 3.1270000000 1.0000000000)) ) FLUORINE:"CC-PV7Z" = ( (GET "PV7Z") (K ( 4.2560000000 1.0000000000)) ) SULFUR:"CC-PV7Z" = ( (GET "PV7Z") (K ( 1.2090000000 1.0000000000)) ) %%%%%%%%%% ALIASES cc-pV7Z => CC-PV7Z %%%%%%%%%%%%%%%%%%%%% "cc-pV7Z":puream = true HYDROGEN:"cc-pV7Z" = ( (GET "CC-PV7Z") ) CARBON:"cc-pV7Z" = ( (GET "CC-PV7Z") ) NITROGEN:"cc-pV7Z" = ( (GET "CC-PV7Z") ) OXYGEN:"cc-pV7Z" = ( (GET "CC-PV7Z") ) FLUORINE:"cc-pV7Z" = ( (GET "CC-PV7Z") ) SULFUR:"cc-pV7Z" = ( (GET "CC-PV7Z") ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % AUG-PV7Z % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Basis Set Library Information on: aug-pV7Z % Augmented Polarized Valence Septuple Zeta (pV7Z-like) Basis % ----------------------------------------------------------- % H: (15s,7p,6d,5f,4g,3h,2i) -> [8s,7p,6d,5f,4g,3h,2i] D. Feller, private communication % C - F: (19s,13p,7d,6f,5g,4h,3i) -> [9s,8p,7d,6f,5g,4h,3i] D. Feller and K.A. % Peterson, JCP 110, % 8384 (1999) % S: (28s,19p,7d,6f,5g,4h,3i) ->[10s,9p,7d,6f,5g,4h,3i] D. Feller and J.A. % Sordo (to be % published) % In order to be consistent with the rest of the correlation consistent basis % %sets, the 7Z sets should contain 1k function. The present sets do not, but % it has been shown possible to estimate the contribution of the missing % functions by plotting the energy contribution of each l shell for d,f,g etc. % and then perform an exponential extrapolation. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "AUG-PV7Z":puream = true HYDROGEN:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0270000000 1.0000000000)) (P ( 0.0921080000 1.0000000000)) (D ( 0.2012730000 1.0000000000)) (F ( 0.3467040000 1.0000000000)) (G ( 0.4789260000 1.0000000000)) (H ( 0.6883120000 1.0000000000)) (I ( 1.7070000000 1.0000000000)) ) CARBON:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0321008000 1.0000000000)) (P ( 0.0194070000 1.0000000000)) (D ( 0.0621000000 1.0000000000)) (F ( 0.0976200000 1.0000000000)) (G ( 0.2202000000 1.0000000000)) (H ( 0.2216000000 1.0000000000)) (I ( 0.3389000000 1.0000000000)) ) NITROGEN:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0190122000 1.0000000000)) (P ( 0.0269704000 1.0000000000)) (D ( 0.0753692000 1.0000000000)) (F ( 0.1202192000 1.0000000000)) (G ( 0.2456348000 1.0000000000)) (H ( 0.5163650000 1.0000000000)) (I ( 0.7900000000 1.0000000000)) ) OXYGEN:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0554700000 1.0000000000)) (P ( 0.0286137000 1.0000000000)) (D ( 0.1039000000 1.0000000000)) (F ( 0.1726270000 1.0000000000)) (G ( 0.3457820000 1.0000000000)) (H ( 0.5816400000 1.0000000000)) (I ( 1.0390000000 1.0000000000)) ) FLUORINE:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0700090000 1.0000000000)) (P ( 0.0345890000 1.0000000000)) (D ( 0.1339420000 1.0000000000)) (F ( 0.2542830000 1.0000000000)) (G ( 0.3958677000 1.0000000000)) (H ( 0.7805000000 1.0000000000)) (I ( 1.0800000000 1.0000000000)) ) SULFUR:"AUG-PV7Z" = ( (GET "PV7Z") (S ( 0.0371790000 1.0000000000)) (P ( 0.0218120000 1.0000000000)) (D ( 0.0343800000 1.0000000000)) (F ( 0.0219300000 1.0000000000)) (G ( 0.1843800000 1.0000000000)) (H ( 0.3035400000 1.0000000000)) (I ( 0.4450000000 1.0000000000)) ) %%%%%%%%%%%%% ALIASES aug-pV7Z => AUG-PV7Z %%%%%%% "aug-pV7Z":puream = true HYDROGEN:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) CARBON:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) NITROGEN:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) OXYGEN:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) FLUORINE:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) SULFUR:"aug-pV7Z" = ( (GET "AUG-PV7Z") ) % Information on *unofficial* aug-cc-pV7Z % Obtained by augmenting aug-pV7Z basis sets of Feller and Co. with k-functions % Diffuse k exponents optimized at the CCSD(FC) level % To be published % -EV 04/05/2001 "AUG-CC-PV7Z":puream = true HYDROGEN:"AUG-CC-PV7Z" = ( (GET "AUG-PV7Z") ) NITROGEN:"AUG-CC-PV7Z" = ( (GET "AUG-PV7Z") (K ( 2.3790000000 1.0000000000)) (K ( 0.9770000000 1.0000000000)) ) OXYGEN:"AUG-CC-PV7Z" = ( (GET "AUG-PV7Z") (K ( 3.1270000000 1.0000000000)) (K ( 1.2320000000 1.0000000000)) ) FLUORINE:"AUG-CC-PV7Z" = ( (GET "AUG-PV7Z") (K ( 4.2560000000 1.0000000000)) (K ( 1.5970000000 1.0000000000)) ) %%%%%%%%%% ALIASES aug-cc-pV7Z => AUG-CC-PV7Z %%%%%%%%%%%%%%%%%%%%% "aug-cc-pV7Z":puream = true HYDROGEN:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) CARBON:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) NITROGEN:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) OXYGEN:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) FLUORINE:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) SULFUR:"aug-cc-pV7Z" = ( (GET "AUG-CC-PV7Z") ) ) % �������������������������������������������������������psi3/lib/psi.dat������������������������������������������������������������������������������������0000644�0001015�0000765�00000140626�11112421754�012243� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ psi: ( % Default iteration counts ndisp = 1 nopt = 40 ncasiter = 20 nbrueckner = 20 % The basic programs input = "input" uinput = "input --chkptgeom" init = $input done = ("psiclean") ints = "cints" scf = "cscf" localize = "localize" deriv = "cints --deriv1" deriv2 = "cints --deriv2" propint = "cints --oeprop" mkpt2ints = "cints --mkpt2" transqt = "transqt2" %transqt = "transqt2" cctrans = "transqt2" %testing with CC modules; eventually will replace transqt backtransqt = "transqt --backtr" cphf = "cphf" cphf_X = "cphf --X_only" response = "response" normco = "normco" oeprop = "oeprop" optking = "optking" stable = "stable" cis = "cis" ugeom = "ugeom" rgeom = () %freqs by finite differences of gradients findif_disp_freq_grad_cart = "optking --disp_freq_grad_cart" findif_disp_freq_energy_cart = "optking --disp_freq_energy_cart" findif_next = "optking --disp_load" findif_input = "input --keepchkpt --chkptgeom --noreorient" findif_grad_save = "optking --grad_save" findif_energy_save = "optking --energy_save" findif_freq_grad_cart = "optking --freq_grad_cart" findif_freq_energy_cart = "optking --freq_energy_cart" findif_disp_symm = "optking --disp_irrep --irrep 1" findif_disp_nosymm = "optking --disp_nosymm" findif_freq_grad_symm = "optking --freq_grad_irrep --irrep 1" findif_freq_grad_nosymm = "optking --freq_grad_nosymm" findif_grad_energy = "optking --grad_energy" findif_delete_binaries = "optking --delete_binaries" geomupdate = ("optking --opt_step") dboc = "dboc" % CASSCF specific programs casscf = "detcas" % CC specific programs ccsort = "ccsort" ccreset = "ccsort --reset" ccenergy = "ccenergy" cctriples = "cctriples" cchbar = "cchbar" cclambda = "cclambda" cceom = "cceom" ccresponse = "ccresponse" ooccman = "ccman" % cclambda_excited = "cclambda --excited" cclambda_excited = "cclambda" cclambda_zeta = "cclambda --zeta" ccdensity = "ccdensity" ccdensity_calc_xi = "ccdensity --calc_xi" ccdensity_use_zeta = "ccdensity --use_zeta" % --excited ccdensity_excited = "ccdensity --excited" ccdensity_onepdm = "ccdensity --onepdm" ccdensity_excited_onepdm = "ccdensity --onepdm" % --excited % Determinant CI specific programs detci = "detci" clag = "clag" % Determinant CI based Orbital Optimization detcasman = "detcasman" detcas = "detcas" % MP2-specific programs mp2 = "mp2" mp2_direct = "cints --mp2" mp2r12 = "mp2r12" mp2r12_moints = "cints --mp2r12" % MCSCF mcscf = "mcscf" % PSIMRCC transqt_psimrcc = "transqt --psimrcc" psimrcc = "psimrcc" % NONBONDED nonbonded = "nonbonded" % -------------------------------- SCF Procedures % *** SCF energy *** SCFEnergy = ($ints $scf) SCFRHFEnergy = ($SCFEnergy $done) SCFROHFEnergy = ($SCFEnergy $done) SCFUHFEnergy = ($SCFEnergy $done) SCFTwoConEnergy = ($SCFEnergy $done) % *** SCF gradients *** SCFFirst = ($ints $scf $deriv) SCFRHFFirst = ($SCFFirst $done) SCFROHFFirst = ($SCFFirst $done) SCFUHFFirst = ($SCFFirst $done) SCFTwoConFirst = ($SCFFirst $done) % *** SCF second derivatives *** SCFSecond = ($ints $scf $transqt $deriv2 $propint $cphf) SCFRHFSecond = ($SCFSecond $done) SCFROHFSecond = ERROR SCFUHFSecond = ERROR SCFTwoConSecond = ERROR % Optimizing geometries with SCF gradients SCFFirstOpt = (repeat $nopt $SCFFirst $geomupdate end $done) SCFRHFFirstOpt = $SCFFirstOpt SCFROHFFirstOpt = $SCFFirstOpt SCFUHFFirstOpt = $SCFFirstOpt SCFTwoConFirstOpt = $SCFFirstOpt % Optimizing geometries with SCF energies SCFEnergyOpt = (repeat $nopt $SCFEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCFEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) SCFRHFEnergyOpt = $SCFEnergyOpt SCFROHFEnergyOpt = $SCFEnergyOpt SCFUHFEnergyOpt = $SCFEnergyOpt SCFTwoConEnergyOpt = $SCFEnergyOpt % *** SCF Frequencies by Second Derivatives *** SCFSecondFreq = ($ints $scf $transqt $deriv2 $propint $cphf) SCFRHFSecondFreq = ($SCFSecondFreq $done) SCFROHFSecondFreq = ERROR SCFUHFSecondFreq = ERROR SCFTwoConSecondFreq = ERROR % *** SCF Frequencies by finite differences of analytic gradients *** SCFFirstFreq = ($SCFEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $SCFFirst $findif_grad_save end $findif_freq_grad_cart $done) SCFRHFFirstFreq = $SCFFirstFreq SCFROHFFirstFreq = $SCFFirstFreq SCFUHFFirstFreq = $SCFFirstFreq SCFTwoConFirstFreq = $SCFFirstFreq % *** SCF Frequencies by finite differences of energies *** SCFEnergyFreq = ($SCFEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $SCFEnergy $findif_energy_save end $findif_freq_energy_cart $done) SCFRHFEnergyFreq = $SCFEnergyFreq SCFROHFEnergyFreq = $SCFEnergyFreq SCFUHFEnergyFreq = $SCFEnergyFreq SCFTwoConEnergyFreq = $SCFEnergyFreq % Procedures for symm force constants via differences of analytic gradients SCFFirstSymm_FC = ($SCFEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCFFirst $findif_grad_save end $findif_freq_grad_symm $done) SCFRHFFirstSymm_FC = $SCFFirstSymm_FC SCFROHFFirstSymm_FC = $SCFFirstSymm_FC SCFUHFFirstSymm_FC = $SCFFirstSymm_FC SCFTwoConFirstSymm_FC = $SCFFirstSymm_FC % Procedures for force constants via differences of analytic gradients SCFFirstFC = ($SCFEnergy $findif_disp_nosymm repeat NUM_DISP $findif_next $findif_input $SCFFirst $findif_grad_save end $findif_freq_grad_nosymm $done) SCFRHFFirstFC = $SCFFirstFC SCFROHFFirstFC = $SCFFirstFC SCFUHFFirstFC = $SCFFirstFC SCFTwoConFirstFC = $SCFFirstFC % Testing procedure for optimizing geometries with SCF finite displacements SCFROHFEnergyDisp = (repeat $ndisp $ugeom $uinput $SCFEnergy $rgeom end $done) % Procedure for an SCF linear response calculation SCFResponse = ($SCFEnergy $transqt $ccsort $propint $response $done) SCFRHFResponse = $SCFResponse SCFUHFResponse = ERROR SCFROHFResponse = ERROR SCFTwoConResponse = ERROR % Procedure for an SCF property computation SCFEnergyOEPROP = ($SCFEnergy $oeprop $done) SCFRHFEnergyOEPROP = ($SCFEnergy $oeprop $done) SCFUHFEnergyOEPROP = ERROR SCFROHFEnergyOEPROP = ($SCFROHFEnergy $oeprop $done) SCFTwoConEnergyOEPROP = ERROR % -------------------------------- SCF+D Procedures % wfn=scf but it's changed to SCF+D in psi3 driver % *** SCF+D energy *** SCF+DEnergy = ($ints $scf $nonbonded) SCF+DRHFEnergy = $SCF+DEnergy SCF+DROHFEnergy = $SCF+DEnergy SCF+DUHFEnergy = $SCF+DEnergy SCF+DTwoConEnergy = $SCF+DEnergy % *** SCF+D gradients *** SCF+DFirst = ($ints $scf $nonbonded $deriv) SCF+DRHFFirst = ($SCF+DFirst $done) SCF+DROHFFirst = ($SCF+DFirst $done) SCF+DUHFFirst = ($SCF+DFirst $done) SCF+DTwoConFirst = ($SCF+DFirst $done) % *** SCF+D second derivatives *** SCF+DSecond = ($ints $scf $transqt $deriv2 $nonbonded $propint $cphf) SCF+DRHFSecond = ($SCF+DSecond $done) SCF+DROHFSecond = ($SCF+DSecond $done) SCF+DUHFSecond = ($SCF+DSecond $done) SCF+DTwoConSecond = ($SCF+DSecond $done) % Optimizing geometries with SCF+D gradients SCF+DFirstOpt = (repeat $nopt $SCF+DFirst $geomupdate end $done) SCF+DRHFFirstOpt = $SCF+DFirstOpt SCF+DROHFFirstOpt = $SCF+DFirstOpt SCF+DUHFFirstOpt = $SCF+DFirstOpt SCF+DTwoConFirstOpt = $SCF+DFirstOpt % Optimizing geometries with SCF+D energies SCF+DEnergyOpt = (repeat $nopt $SCF+DEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCF+DEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) SCF+DRHFEnergyOpt = $SCF+DEnergyOpt SCF+DROHFEnergyOpt = $SCF+DEnergyOpt SCF+DUHFEnergyOpt = $SCF+DEnergyOpt SCF+DTwoConEnergyOpt = $SCF+DEnergyOpt % *** SCF+D Frequencies by Second Derivatives *** SCF+DSecondFreq = ($ints $scf $transqt $deriv2 $nonbonded $propint $cphf) SCF+DRHFSecondFreq = ($SCF+DSecondFreq $done) SCF+DROHFSecondFreq = ERROR SCF+DUHFSecondFreq = ERROR SCF+DTwoConSecondFreq = ERROR % *** SCF+D Frequencies by finite differences of analytic gradients *** SCF+DFirstFreq = ($SCF+DEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $SCF+DFirst $findif_grad_save end $findif_freq_grad_cart $done) SCF+DRHFFirstFreq = $SCF+DFirstFreq SCF+DROHFFirstFreq = $SCF+DFirstFreq SCF+DUHFFirstFreq = $SCF+DFirstFreq SCF+DTwoConFirstFreq = $SCF+DFirstFreq % *** SCF+D Frequencies by finite differences of energies *** SCF+DEnergyFreq = ($SCF+DEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $SCF+DEnergy $findif_energy_save end $findif_freq_energy_cart $done) SCF+DRHFEnergyFreq = $SCF+DEnergyFreq SCF+DROHFEnergyFreq = $SCF+DEnergyFreq SCF+DUHFEnergyFreq = $SCF+DEnergyFreq SCF+DTwoConEnergyFreq = $SCF+DEnergyFreq % Procedures for symm force constants via differences of analytic gradients SCF+DFirstSymm_FC = ($SCF+DEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCF+DFirst $findif_grad_save end $findif_freq_grad_symm $done) SCF+DRHFFirstSymm_FC = $SCF+DFirstSymm_FC SCF+DROHFFirstSymm_FC = $SCF+DFirstSymm_FC SCF+DUHFFirstSymm_FC = $SCF+DFirstSymm_FC SCF+DTwoConFirstSymm_FC = $SCF+DFirstSymm_FC % Procedures for force constants via differences of analytic gradients SCF+DFirstFC = ($SCF+DEnergy $findif_disp_nosymm repeat NUM_DISP $findif_next $findif_input $SCF+DFirst $findif_grad_save end $findif_freq_grad_nosymm $done) SCF+DRHFFirstFC = $SCF+DFirstFC SCF+DROHFFirstFC = $SCF+DFirstFC SCF+DUHFFirstFC = $SCF+DFirstFC SCF+DTwoConFirstFC = $SCF+DFirstFC % -------------------------------- SCF_MVD Procedures % *** SCF_MVD energy *** SCF_MVDEnergy = $SCFEnergyOEPROP SCF_MVDRHFEnergy = $SCF_MVDEnergy SCF_MVDROHFEnergy = $SCF_MVDEnergy SCF_MVDUHFEnergy = ERROR SCF_MVDTwoConEnergy = ERROR % *** SCF_MVD energies for geometry optimization *** SCF_MVDEnergyOpt = (repeat $nopt $SCFEnergy $oeprop $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCFEnergy $oeprop $findif_energy_save end $findif_grad_energy $geomupdate end $done) SCF_MVDRHFEnergyOpt = $SCF_MVDEnergyOpt SCF_MVDROHFEnergyOpt = $SCF_MVDEnergyOpt SCF_MVDUHFEnergyOpt = ERROR SCF_MVDTwoConEnergyOpt = ERROR % *** SCF_MVD energies for vibrational frequencies *** SCF_MVDEnergyFreq = ($SCF_MVDEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $SCF_MVDEnergy $findif_energy_save end $findif_freq_energy_cart $done) SCF_MVDRHFEnergyFreq = $SCF_MVDEnergyFreq SCF_MVDROHFEnergyFreq = $SCF_MVDEnergyFreq SCF_MVDUHFEnergyFreq = ERROR SCF_MVDTwoConEnergyFreq = ERROR % *** SCF_MVD gradients *** SCF_MVDFirst = ($ints $scf $transqt $deriv2 $cphf_X $deriv) SCF_MVDRHFFirst = ($SCF_MVDFirst $done) SCF_MVDROHFFirst = ERROR SCF_MVDUHFFirst = ERROR SCF_MVDTwoConFirst = ERROR % *** SCF_MVD gradients for geometry optimization *** SCF_MVDFirstOpt = (repeat $nopt $SCF_MVDFirst $geomupdate end $done) SCF_MVDRHFFirstOpt = $SCF_MVDFirstOpt SCF_MVDROHFFirstOpt = $SCF_MVDFirstOpt SCF_MVDUHFFirstOpt = $SCF_MVDFirstOpt SCF_MVDTwoConFirstOpt = $SCF_MVDFirstOpt % *** SCF_MVD gradients to get all vibrational frequencies *** SCF_MVDFirstFreq = ($SCF_MVDEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $SCF_MVDFirst $findif_grad_save end $findif_freq_grad_cart $done) SCF_MVDRHFFirstFreq = $SCF_MVDFirstFreq SCF_MVDROHFFirstFreq = $SCF_MVDFirstFreq SCF_MVDUHFFirstFreq = $SCF_MVDFirstFreq SCF_MVDTwoConFirstFreq = $SCF_MVDFirstFreq % *** SCF_MVD gradients for symmetric force constants *** SCF_MVDFirstSymm_FC = ($SCF_MVDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $SCF_MVDFirst $findif_grad_save end $findif_freq_grad_symm $done) SCF_MVDRHFFirstSymm_FC = $SCF_MVDFirstSymm_FC SCF_MVDROHFFirstSymm_FC = $SCF_MVDFirstSymm_FC SCF_MVDUHFFirstSymm_FC = $SCF_MVDFirstSymm_FC SCF_MVDTwoConFirstSymm_FC = $SCF_MVDFirstSymm_FC % *** SCF_MVD gradients for all force constants *** SCF_MVDFirstFC = ($SCF_MVDEnergy $findif_disp_nosymm repeat NUM_DISP $findif_next $findif_input $SCF_MVDFirst $findif_grad_save end $findif_freq_grad_nosymm $done) SCF_MVDRHFFirstFC = $SCF_MVDFirstFC SCF_MVDROHFFirstFC = $SCF_MVDFirstFC SCF_MVDUHFFirstFC = $SCF_MVDFirstFC SCF_MVDTwoConFirstFC = $SCF_MVDFirstFC % Procedure for an SCF DBOC computation SCFDBOC = ($input $dboc) SCFRHFDBOC = ($input $dboc) SCFROHFDBOC = ($input $dboc) SCFUHFDBOC = ($input $dboc) SCFTwoConDBOC = ERROR % -------------------------------- Direct SCF Procedures % Procedures for the Direct SCF energy DirectSCFEnergy = ($scf) DirectSCFRHFEnergy = ($DirectSCFEnergy $done) DirectSCFROHFEnergy = ($DirectSCFEnergy $done) DirectSCFUHFEnergy = ($DirectSCFEnergy $done) DirectSCFTwoConEnergy = ($DirectSCFEnergy $done) % Procedures for the Direct SCF gradients DirectSCFFirst = ($scf $deriv) DirectSCFRHFFirst = ($DirectSCFFirst $done) DirectSCFROHFFirst = ($DirectSCFFirst $done) DirectSCFUHFFirst = ($DirectSCFFirst $done) DirectSCFTwoConFirst = ($DirectSCFFirst $done) % Procedures for the Direct SCF Second Derivatives DirectSCFSecond = ($scf $transqt $deriv2 $propint $cphf $done) DirectSCFRHFSecond = $DirectSCFSecond DirectSCFROHFSecond = ERROR DirectSCFUHFSecond = ERROR DirectSCFTwoConSecond = ERROR % Procedures for the optimizing geometries with Direct SCF gradients DirectSCFFirstOpt = (repeat $nopt $DirectSCFFirst $geomupdate end $done) DirectSCFRHFFirstOpt = $DirectSCFFirstOpt DirectSCFROHFFirstOpt = $DirectSCFFirstOpt DirectSCFUHFFirstOpt = $DirectSCFFirstOpt DirectSCFTwoConFirstOpt = $DirectSCFFirstOpt % Procedures for optimizing geometries with SCF energies DirectSCFEnergyOpt = (repeat $nopt $DirectSCFEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $DirectSCFEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) DirectSCFRHFEnergyOpt = $DirectSCFEnergyOpt DirectSCFROHFEnergyOpt = $DirectSCFEnergyOpt DirectSCFUHFEnergyOpt = $DirectSCFEnergyOpt DirectSCFTwoConEnergyOpt = $DirectSCFEnergyOpt % Procedures for the finite displacements of SCF gradients DirectSCFFirstDisp = ($findif_disp repeat $ndisp $findif_next $uinput $DirectSCFFirst $findif_grad_save end $findif_calc $done) DirectSCFRHFFirstDisp = $DirectSCFFirstDisp DirectSCFROHFFirstDisp = $DirectSCFFirstDisp DirectSCFUHFFirstDisp = $DirectSCFFirstDisp DirectSCFTwoConFirstDisp = $DirectSCFFirstDisp % Procedures for the SCF Second Derivatives DirectSCFSecondFreq = ($scf $transqt $deriv2 $propint $cphf $done) DirectSCFRHFSecondFreq = $DirectSCFSecondFreq DirectSCFROHFSecondFreq = ERROR DirectSCFUHFSecondFreq = ERROR DirectSCFTwoConSecondFreq = ERROR % Procedures for symm freqs via differences of analytic gradients DirectSCFFirstSymm_FC = ($scf $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $DirectSCFFirst $findif_grad_save end $findif_freq_grad_symm $done) DirectSCFRHFFirstSymm_FC = $DirectSCFFirstSymm_FC DirectSCFROHFFirstSymm_FC = $DirectSCFFirstSymm_FC DirectSCFUHFFirstSymm_FC = $DirectSCFFirstSymm_FC DirectSCFTwoConFirstSymm_FC = $DirectSCFFirstSymm_FC % Procedures for freqs via differences of analytic gradients DirectSCFFirstFreq = ($DirectSCFEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $DirectSCFFirst $findif_grad_save end $findif_freq_grad_cart $done) DirectSCFRHFFirstFreq = $DirectSCFFirstFreq DirectSCFROHFFirstFreq = $DirectSCFFirstFreq DirectSCFUHFFirstFreq = $DirectSCFFirstFreq DirectSCFTwoConFirstFreq = $DirectSCFFirstFreq % Testing procedure for optimizing geometries with SCF finite displacements DirectSCFROHFEnergyDisp = (repeat $ndisp $ugeom $uinput $DirectSCFEnergy $rgeom end $done) % Procedure for an SCF linear response calculation DirectSCFResponse = ($DirectSCFEnergy $transqt $ccsort $propint $response $done) DirectSCFRHFResponse = $DirectSCFResponse DirectSCFUHFResponse = ERROR DirectSCFROHFResponse = ERROR DirectSCFTwoConResponse = ERROR % Procedure for an SCF property computation DirectSCFEnergyOEPROP = ($DirectSCFEnergy $oeprop $done) DirectSCFRHFEnergyOEPROP = ($DirectSCFRHFEnergy $oeprop $done) DirectSCFUHFEnergyOEPROP = ERROR DirectSCFROHFEnergyOEPROP = ($DirectSCFROHFEnergy $oeprop $done) DirectSCFTwoConEnergyOEPROP = ERROR % -------------------------------- CCSD Procedures % Procedures for the CCSD energy CCSDEnergy = ($ints $scf $cctrans $ccsort $ccenergy) CCSDRHFEnergy = ($CCSDEnergy $done) CCSDROHFEnergy = ($CCSDEnergy $done) CCSDUHFEnergy = ($CCSDEnergy $done) CCSDTwoConEnergy = ERROR % Procedures for the CCSD gradient CCSDFirst = ($CCSDEnergy $cchbar $cclambda $ccdensity $oeprop $backtransqt $deriv) CCSDRHFFirst = $CCSDFirst CCSDROHFFirst = $CCSDFirst CCSDUHFFirst = $CCSDFirst CCSDTwoConFirst = ERROR %Procedures for the CCSD gradient with no restart CCSDFirstReset = ($ints $scf $cctrans $ccreset $ccenergy $cchbar $cclambda $ccdensity $oeprop $backtransqt $deriv) CCSDRHFFirstReset = $CCSDFirstReset CCSDROHFFirstReset = $CCSDFirstReset CCSDUHFFirstReset = $CCSDFirstReset % Procedures for optimization via energy points CCSDEnergyOpt = (repeat $nopt $CCSDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $CCSDEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) CCSDRHFEnergyOpt = $CCSDEnergyOpt CCSDROHFEnergyOpt = $CCSDEnergyOpt CCSDUHFEnergyOpt = $CCSDEnergyOpt CCSDTwoConEnergyOpt = ERROR % Procedures for optimization via energy points with CCSD_MVD CCSD_MVDEnergyOpt = (repeat $nopt $CCSDEnergy $cchbar $cclambda $ccdensity $oeprop $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $CCSDEnergy $cchbar $cclambda $ccdensity $oeprop $findif_energy_save end $findif_grad_energy $geomupdate end $done) CCSD_MVDRHFEnergyOpt = $CCSD_MVDEnergyOpt CCSD_MVDROHFEnergyOpt = $CCSD_MVDEnergyOpt CCSD_MVDUHFEnergyOpt = $CCSD_MVDEnergyOpt CCSD_MVDTwoConEnergyOpt = ERROR % Procedures for the optimizing geomtries with CCSD gradients CCSDRHFFirstOpt = (repeat $nopt $CCSDRHFFirst $geomupdate end $done) CCSDROHFFirstOpt = (repeat $nopt $CCSDROHFFirst $geomupdate end $done) CCSDUHFFirstOpt = (repeat $nopt $CCSDUHFFirst $geomupdate end $done) CCSDTwoConFirstOpt = ERROR % Procedures for the finite displacements of CCSD gradients CCSDRHFFirstDisp = (repeat $ndisp $ugeom $uinput $CCSDRHFFirst $rgeom end $done) CCSDROHFFirstDisp = (repeat $ndisp $ugeom $uinput $CCSDROHFFirst $rgeom end $done) CCSDUHFFirstDisp = (repeat $ndisp $ugeom $uinput $CCSDROHFFirst $rgeom end $done) CCSDTwoConFirstDisp = ERROR % CCSD Freqs via differences of analytic gradients CCSDFirstFreq = ($CCSDEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $CCSDFirstReset $findif_grad_save end $findif_freq_grad_cart $done) CCSDRHFFirstFreq = $CCSDFirstFreq CCSDROHFFirstFreq = $CCSDFirstFreq CCSDUHFFirstFreq = $CCSDFirstFreq CCSDTwoConFirstFreq = $CCSDFirstFreq % CCSD Freqs via differences of energies CCSDEnergyFreq = ($CCSDEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $CCSDEnergy $findif_energy_save end $findif_freq_energy_cart $done) CCSDRHFEnergyFreq = $CCSDEnergyFreq CCSDROHFEnergyFreq = $CCSDEnergyFreq CCSDUHFEnergyFreq = $CCSDEnergyFreq CCSDTwoConEnergyFreq = $CCSDEnergyFreq % Procedures for force constants via differences of analytic gradients CCSDFirstFC = ($CCSDEnergy $findif_disp_nosymm repeat NUM_DISP $findif_next $findif_input $CCSDFirst $findif_grad_save end $findif_freq_grad_nosymm $done) CCSDRHFFirstFC = $CCSDFirstFC CCSDROHFFirstFC = $CCSDFirstFC CCSDUHFFirstFC = $CCSDFirstFC CCSDTwoConFirstFC = $CCSDFirstFC % Procedures for symmetric force constants via differences of analytic gradients CCSDFirstSymm_FC = ($CCSDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $CCSDFirst $findif_grad_save end $findif_freq_grad_symm $done) CCSDRHFFirstSymm_FC = $CCSDFirstSymm_FC CCSDROHFFirstSymm_FC = $CCSDFirstSymm_FC CCSDUHFFirstSymm_FC = $CCSDFirstSymm_FC CCSDTwoConFirstSymm_FC = $CCSDFirstSymm_FC % Procedure for an CCSD linear response calculation CCSDResponse = ($CCSDEnergy $cchbar $cclambda $propint $ccresponse $done) CCSDRHFResponse = $CCSDResponse CCSDUHFResponse = ERROR CCSDROHFResponse = ERROR CCSDTwoConResponse = ERROR % Procedure for an orbital relaxed CCSD one-electron property computation CCSDFirstOEPROP = ($CCSDEnergy $cchbar $cclambda $ccdensity $oeprop $done) CCSDRHFFirstOEPROP = $CCSDFirstOEPROP CCSDUHFFirstOEPROP = $CCSDFirstOEPROP CCSDROHFFirstOEPROP = $CCSDFirstOEPROP CCSDTwoConFirstOEPROP = ERROR % Procedures for the CCSD_MVD energy CCSD_MVDEnergy = $CCSDFirstOEPROP CCSD_MVDRHFEnergy = $CCSD_MVDEnergy CCSD_MVDROHFEnergy = $CCSD_MVDEnergy CCSD_MVDUHFEnergy = $CCSD_MVDEnergy CCSDTwoConEnergy = ERROR % CCSD_MVD Freqs via differences of energies CCSD_MVDEnergyFreq = ($CCSD_MVDEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $CCSD_MVDEnergy $findif_energy_save end $findif_freq_energy_cart $done) CCSD_MVDRHFEnergyFreq = $CCSD_MVDEnergyFreq CCSD_MVDROHFEnergyFreq = $CCSD_MVDEnergyFreq CCSD_MVDUHFEnergyFreq = $CCSD_MVDEnergyFreq CCSD_MVDTwoConEnergyFreq = $CCSD_MVDEnergyFreq % Procedure for a non-(orbital-relaxed) CCSD one-electron property computation CCSDEnergyOEPROP = ($CCSDEnergy $cchbar $cclambda $ccdensity_onepdm $oeprop $done) CCSDRHFEnergyOEPROP = $CCSDEnergyOEPROP CCSDUHFEnergyOEPROP = $CCSDEnergyOEPROP CCSDROHFEnergyOEPROP = $CCSDEnergyOEPROP CCSDTwoConEnergyOEPROP = ERROR % -------------------------------- CCSD(T) Procedures % Procedures for the CCSD(T) energy CCSD_TEnergy = ($ints $scf $cctrans $ccsort $ccenergy $cctriples) CCSD_TRHFEnergy = ($CCSD_TEnergy $done) CCSD_TROHFEnergy = ($CCSD_TEnergy $done) CCSD_TUHFEnergy = ($CCSD_TEnergy $done) CCSD_TTwoConEnergy = ERROR % Procedures for the CCSD(T) gradient CCSD_TFirst = ($CCSD_TEnergy $cchbar $cclambda $ccdensity $backtransqt $deriv) CCSD_TRHFFirst = ERROR CCSD_TROHFFirst = ERROR CCSD_TUHFFirst = $CCSD_TFirst CCSD_TTwoConFirst = ERROR % Procedures for optimization via energy points CCSD_TEnergyOpt = (repeat $nopt $CCSD_TEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $CCSD_TEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) CCSD_TRHFEnergyOpt = $CCSD_TEnergyOpt CCSD_TROHFEnergyOpt = $CCSD_TEnergyOpt CCSD_TUHFEnergyOpt = $CCSD_TEnergyOpt CCSD_TTwoConEnergyOpt = ERROR % Procedures for the optimizing geomtries with CCSD(T) gradients CCSD_TRHFFirstOpt = ERROR CCSD_TROHFFirstOpt = ERROR CCSD_TUHFFirstOpt = (repeat $nopt $CCSD_TUHFFirst $geomupdate end $done) CCSD_TTwoConFirstOpt = ERROR % Procedures for the finite displacements of CCSD(T) gradients CCSD_TRHFFirstDisp = ERROR CCSD_TROHFFirstDisp = ERROR CCSD_TUHFFirstDisp = (repeat $nopt $CCSD_TUHFFirst $geomupdate end $done) CCSD_TTwoConFirstDisp = ERROR % -------------------------------- CC2 Procedures % Procedures for the CC2 energy CC2Energy = ($ints $scf $cctrans $ccsort $ccenergy) CC2RHFEnergy = ($CC2Energy $done) CC2UHFEnergy = ($CC2Energy $done) CC2ROHFEnergy = ($CC2Energy $done) % Procedure for a non-(orbital-relaxed) CC2 one-electron property computation CC2EnergyOEPROP = ($CC2Energy $cchbar $cclambda $ccdensity_onepdm $oeprop $done) CC2RHFEnergyOEPROP = $CC2EnergyOEPROP CC2UHFEnergyOEPROP = $CC2EnergyOEPROP CC2ROHFEnergyOEPROP = $CC2EnergyOEPROP CC2TwoConEnergyOEPROP = ERROR % Procedure for an CC2 linear response calculation CC2Response = ($CC2Energy $cchbar $cclambda $propint $ccresponse $done) CC2RHFResponse = $CC2Response CC2UHFResponse = ERROR CC2ROHFResponse = ERROR CC2TwoConResponse = ERROR % -------------------------------- CC3 Procedures % Procedures for the CC3 energy CC3Energy = ($ints $scf $cctrans $ccsort $ccenergy) CC3RHFEnergy = ($CC3Energy $done) CC3ROHFEnergy = ($CC3Energy $done) CC3UHFEnergy = ($CC3Energy $done) CCTwoConEnergy = ERROR % Procedures for optimization via energy points CC3EnergyOpt = (repeat $nopt $CC3Energy $findif_delete_binaries $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $CC3Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) CC3RHFEnergyOpt = $CC3EnergyOpt CC3ROHFEnergyOpt = $CC3EnergyOpt CC3UHFEnergyOpt = $CC3EnergyOpt CC3TwoConEnergyOpt = ERROR % CC3 Freqs via differences of energies CC3EnergyFreq = ($CC3Energy $findif_delete_binaries $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $CC3Energy $findif_energy_save end $findif_freq_energy_cart $done) CC3RHFEnergyFreq = $CC3EnergyFreq CC3ROHFEnergyFreq = $CC3EnergyFreq CC3UHFEnergyFreq = $CC3EnergyFreq CC3TwoConEnergyFreq = ERROR % -------------------------------- EOM CC2 Procedures % Procedure for the EOM_CC2 energy EOM_CC2Energy = ($ints $scf $cctrans $ccsort $ccenergy $cchbar $cceom) EOM_CC2RHFEnergy = ($EOM_CC2Energy $done) EOM_CC2ROHFEnergy = ERROR EOM_CC2UHFEnergy = ERROR EOM_CC2TwoConEnergy = ERROR % Procedure for the LEOM_CC2 energy LEOM_CC2Energy =($ints $scf $localize $transqt $ccsort $ccenergy $cchbar $cceom ) LEOM_CC2RHFEnergy = ($LEOM_CC2Energy $done) LEOM_CC2ROHFEnergy = ERROR LEOM_CC2UHFEnergy = ERROR LEOM_CC2TwoConEnergy = ERROR % Procedures for optimization via energy points EOM_CC2EnergyOpt = (repeat $nopt $EOM_CC2Energy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $EOM_CC2Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) EOM_CC2RHFEnergyOpt = ($EOM_CC2EnergyOpt $done) EOM_CC2ROHFEnergyOpt = ERROR EOM_CC2UHFEnergyOpt = ERROR EOM_CC2TwoConEnergyOpt = ERROR % Procedure for the EOM CC2 gradient EOM_CC2First = ($EOM_CC2Energy $cclambda_excited $ccdensity_calc_xi $cclambda_zeta $ccdensity_use_zeta $oeprop $backtransqt $deriv) EOM_CC2RHFFirst = ERROR EOM_CC2ROHFFirst = ERROR EOM_CC2UHFFirst = ERROR EOM_CC2TwoConFirst = ERROR % Procedure for optimizing geometries with gradients EOM_CC2RHFFirstOpt = ERROR EOM_CC2ROHFFirstOpt = ERROR EOM_CC2UHFFirstOpt = ERROR EOM_CC2TwoConFirstOpt = ERROR % EOM CC2 Freqs via differences of energies EOM_CC2EnergyFreq = ($EOM_CC2Energy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $EOM_CC2Energy $findif_energy_save end $findif_freq_energy_cart $done) EOM_CC2RHFEnergyFreq = $EOM_CC2EnergyFreq EOM_CC2ROHFEnergyFreq = ERROR EOM_CC2UHFEnergyFreq = ERROR EOM_CC2TwoConEnergyFreq = ERROR % Procedures for freqs via differences of analytic gradients EOM_CC2FirstFreq = ($EOM_CC2Energy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $EOM_CC2First $findif_grad_save end $findif_freq_grad_cart) EOM_CC2RHFFirstFreq = ERROR EOM_CC2ROHFFirstFreq = ERROR EOM_CC2UHFFirstFreq = ERROR EOM_CC2TwoConFirstFreq = ERROR % Procedure for an EOM CC2 one-electron property computation EOM_CC2FirstOEPROP = ($EOM_CC2Energy $cclambda_excited $ccdensity_calc_xi $cclambda_zeta $ccdensity_use_zeta $oeprop $done) EOM_CC2RHFFirstOEPROP = ERROR EOM_CC2UHFFirstOEPROP = ERROR EOM_CC2ROHFFirstOEPROP = ERROR EOM_CC2TwoConFirstOEPROP = ERROR % Procedure for an EOM CC2 one-electron property computation - % no T amplitude or orbital relaxation EOM_CC2EnergyOEPROP = ($EOM_CC2Energy $cclambda_excited $propint $ccdensity_excited_onepdm $oeprop $done) EOM_CC2RHFEnergyOEPROP = $EOM_CC2EnergyOEPROP EOM_CC2UHFEnergyOEPROP = ERROR EOM_CC2ROHFEnergyOEPROP = ERROR EOM_CC2TwoConEnergyOEPROP = ERROR % -------------------------------- EOM CCSD Procedures % Procedure for the EOM_CCSD energy EOM_CCSDEnergy = ($ints $scf $cctrans $ccsort $ccenergy $cchbar $cceom) EOM_CCSDRHFEnergy = ($EOM_CCSDEnergy $done) EOM_CCSDROHFEnergy = ($EOM_CCSDEnergy $done) EOM_CCSDUHFEnergy = ($EOM_CCSDEnergy $done) EOM_CCSDTwoConEnergy = ERROR % Procedure for the LEOM_CCSD energy LEOM_CCSDEnergy =($ints $scf $localize $transqt $ccsort $ccenergy $cchbar $cceom ) LEOM_CCSDRHFEnergy = ($LEOM_CCSDEnergy $done) LEOM_CCSDROHFEnergy = ($LEOM_CCSDEnergy $done) LEOM_CCSDUHFEnergy = ERROR LEOM_CCSDTwoConEnergy = ERROR % Procedures for optimization via energy points EOM_CCSDEnergyOpt = (repeat $nopt $EOM_CCSDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $EOM_CCSDEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) EOM_CCSDRHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDROHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDUHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDTwoConEnergyOpt = ERROR % Procedure for the EOM CCSD gradient EOM_CCSDFirst = ($EOM_CCSDEnergy $cclambda_excited $ccdensity_calc_xi $cclambda_zeta $ccdensity_use_zeta $oeprop $backtransqt $deriv) EOM_CCSDRHFFirst = ($EOM_CCSDFirst $done) EOM_CCSDROHFFirst = ($EOM_CCSDFirst $done) EOM_CCSDUHFFirst = ($EOM_CCSDFirst $done) EOM_CCSDTwoConFirst = ERROR % Procedure for optimizing geometries with gradients EOM_CCSDRHFFirstOpt = (repeat $nopt $EOM_CCSDFirst $geomupdate end $done) EOM_CCSDROHFFirstOpt = (repeat $nopt $EOM_CCSDFirst $geomupdate end $done) EOM_CCSDUHFFirstOpt = (repeat $nopt $EOM_CCSDFirst $geomupdate end $done) EOM_CCSDTwoConFirstOpt = ERROR % Procedure for optimizing geometries with energy points EOM_CCSDEnergyOpt = (repeat $nopt $EOM_CCSDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $EOM_CCSDEnergy $findif_energy_save end $findif_grad_energy $geomupdate end) EOM_CCSDRHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDROHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDUHFEnergyOpt = ($EOM_CCSDEnergyOpt $done) EOM_CCSDTwoConEnergyOpt = ERROR % CCSD Freqs via differences of energies EOM_CCSDEnergyFreq = ($EOM_CCSDEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $EOM_CCSDEnergy $findif_energy_save end $findif_freq_energy_cart $done) EOM_CCSDRHFEnergyFreq = $EOM_CCSDEnergyFreq EOM_CCSDROHFEnergyFreq = $EOM_CCSDEnergyFreq EOM_CCSDUHFEnergyFreq = $EOM_CCSDEnergyFreq EOM_CCSDTwoConEnergyFreq = $EOM_CCSDEnergyFreq % Procedures for freqs via differences of analytic gradients EOM_CCSDFirstFreq = ($EOM_CCSDEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $EOM_CCSDFirst $findif_grad_save end $findif_freq_grad_cart) EOM_CCSDRHFFirstFreq = ($EOM_CCSDFirstFreq $done) EOM_CCSDROHFFirstFreq = ($EOM_CCSDFirstFreq $done) EOM_CCSDUHFFirstFreq = ($EOM_CCSDFirstFreq $done) EOM_CCSDTwoConFirstFreq = ERROR % Procedures for symmetric force constants via differences of analytic gradients EOM_CCSDFirstSymm_FC = ($EOM_CCSDEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $EOM_CCSDFirst $findif_grad_save end $findif_freq_grad_symm $done) EOM_CCSDRHFFirstSymm_FC = $EOM_CCSDFirstSymm_FC EOM_CCSDROHFFirstSymm_FC = $EOM_CCSDFirstSymm_FC EOM_CCSDUHFFirstSymm_FC = $EOM_CCSDFirstSymm_FC EOM_CCSDTwoConFirstSymm_FC = $EOM_CCSDFirstSymm_FC % Procedure for an CCSD one-electron property computation EOM_CCSDFirstOEPROP = ($EOM_CCSDEnergy $cclambda_excited $ccdensity_calc_xi $cclambda_zeta $ccdensity_use_zeta $oeprop $done) EOM_CCSDRHFFirstOEPROP = $EOM_CCSDFirstOEPROP EOM_CCSDUHFFirstOEPROP = $EOM_CCSDFirstOEPROP EOM_CCSDROHFFirstOEPROP = $EOM_CCSDFirstOEPROP EOM_CCSDTwoConFirstOEPROP = ERROR % Procedure for an CCSD one-electron property computation - % no T amplitude or orbital relaxation EOM_CCSDEnergyOEPROP = ($EOM_CCSDEnergy $cclambda_excited $propint $ccdensity_excited_onepdm $oeprop $done) EOM_CCSDRHFEnergyOEPROP = $EOM_CCSDEnergyOEPROP EOM_CCSDUHFEnergyOEPROP = $EOM_CCSDEnergyOEPROP EOM_CCSDROHFEnergyOEPROP = $EOM_CCSDEnergyOEPROP EOM_CCSDTwoConEnergyOEPROP = ERROR % -------------------------------- EOM CC3 Procedures % Procedure for the EOM_CC3 energy EOM_CC3Energy = ($ints $scf $cctrans $ccsort $ccenergy $cchbar $cceom) EOM_CC3RHFEnergy = ($EOM_CC3Energy $done) EOM_CC3ROHFEnergy = ($EOM_CC3Energy $done) EOM_CC3UHFEnergy = ($EOM_CC3Energy $done) EOM_CC3TwoConEnergy = ERROR EOM_CC3EnergyOpt = (repeat $nopt $EOM_CC3Energy $findif_delete_binaries $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $EOM_CC3Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) EOM_CC3RHFEnergyOpt = ERROR EOM_CC3ROHFEnergyOpt = ($EOM_CC3EnergyOpt $done) EOM_CC3UHFEnergyOpt = ($EOM_CC3EnergyOpt $done) EOM_CC3TwoConEnergyOpt = ERROR % EOM_CC3 Freqs via differences of energies EOM_CC3EnergyFreq = ($EOM_CC3Energy $findif_delete_binaries $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $EOM_CC3Energy $findif_energy_save end $findif_freq_energy_cart $done) EOM_CC3RHFEnergyFreq = ERROR EOM_CC3ROHFEnergyFreq = $EOM_CC3EnergyFreq EOM_CC3UHFEnergyFreq = $EOM_CC3EnergyFreq EOM_CC3TwoConEnergyFreq = $EOM_CC3EnergyFreq % -------------------------------- OOCCD Procedures % Procedures for the OOCCD energy OOCCDRHFEnergy = ($ints $scf $transqt $ooccman $done) OOCCDROHFEnergy = ERROR OOCCDUHFEnergy = ERROR OOCCDTwoConEnergy = ERROR % Procedures for the OOCCD gradient OOCCDFirst = ($ints $scf $transqt $ooccman $backtransqt $oeprop $deriv) OOCCDRHFFirst = ($OOCCDFirst $done) OOCCDROHFFirst = ERROR OOCCDUHFFirst = ERROR OOCCDTwoConFirst = ERROR % Procedures for the optimizing geomtries with OOCCD gradients OOCCDFirstOpt = (repeat $nopt $OOCCDFirst $geomupdate end $done) OOCCDRHFFirstOpt = $OOCCDFirstOpt OOCCDROHFFirstOpt = ERROR OOCCDUHFFirstOpt = ERROR OOCCDTwoConFirstOpt = ERROR % Procedures for the finite displacements of OOCCD gradients OOCCDFirstDisp = (repeat $ndisp $ugeom $OOCCDFirst $rgeom end $done) OOCCDRHFFirstDisp = $OOCCDFirstDisp OOCCDUHFFirstDisp = ERROR OOCCDROHFFirstDisp = ERROR OOCCDTwoConFirstDisp = ERROR % -------------------------------- BCCD Procedures % Procedures for the BCCD energy BCCDEnergy = ($ints $scf repeat $nbrueckner $cctrans $ccsort $ccenergy end) BCCDRHFEnergy = ($BCCDEnergy $done) BCCDROHFEnergy = ERROR BCCDUHFEnergy = ($BCCDEnergy $done) BCCDTwoConEnergy = ERROR % -------------------------------- BCCD(T) Procedures % Procedures for the BCCD(T) energy BCCD_TEnergy = ($ints $scf repeat $nbrueckner $cctrans $ccsort $ccenergy end $cctriples) BCCD_TRHFEnergy = ($BCCD_TEnergy $done) BCCD_TROHFEnergy = ERROR BCCD_TUHFEnergy = ($BCCD_TEnergy $done) BCCD_TTwoConEnergy = ERROR % -------------------------------- DETCI Procedures % Procedures for the DETCI energy DETCIEnergy = ($ints $scf $transqt $detci) DETCIRHFEnergy = ($DETCIEnergy $done) DETCIROHFEnergy = ($DETCIEnergy $done) DETCIUHFEnergy = ERROR DETCITwoConEnergy = ERROR % Procedures for the DETCI gradient: not yet impl, need orb response DETCIFirst = ERROR DETCIRHFFirst = ERROR DETCIROHFFirst = ERROR DETCIUHFFirst = ERROR DETCITwoConFirst = ERROR % Procedures for the optimizing geomtries with DETCI gradients DETCIFirstOpt = (repeat $nopt $DETCIFirst $geomupdate end $done) DETCIRHFFirstOpt = $DETCIFirstOpt DETCIROHFFirstOpt = ERROR DETCIUHFFirstOpt = ERROR DETCITwoConFirstOpt = ERROR % Procedures for the finite displacements of DETCI gradients DETCIFirstDisp = (repeat $ndisp $ugeom $DETCIFirst $rgeom end $done) DETCIRHFFirstDisp = $DETCIFirstDisp DETCIUHFFirstDisp = ERROR DETCIROHFFirstDisp = ERROR DETCITwoConFirstDisp = ERROR % Procedures for displacements of energies DETCIEnergyDisp = (repeat $ndisp $ugeom $DETCIEnergy $rgeom end $done) DETCIRHFEnergyDisp = $DETCIEnergyDisp DETCIROHFEnergyDisp = $DETCIEnergyDisp DETCIUHFEnergyDisp = ERROR DETCITwoConEnergyDisp = ERROR % Procedures for optimization via energy points DETCIEnergyOpt = (repeat $nopt $DETCIEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $DETCIEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) DETCIRHFEnergyOpt = $DETCIEnergyOpt DETCIROHFEnergyOpt = $DETCIEnergyOpt DETCIUHFEnergyOpt = ERROR DETCITwoConEnergyOpt = $DETCIEnergyOpt % whenever gradients are available; DETCI freqs via differences of analytic gradients % DETCIFirstFreq = % ($DETCIEnergy $findif_disp_freq_grad_cart repeat NUM_DISP % $findif_next $findif_input $DETCIFirst $findif_grad_save end % $findif_freq_grad_cart $done) % DETCIRHFFirstFreq = $DETCIFirstFreq % DETCIROHFFirstFreq = $DETCIFirstFreq % DETCIUHFFirstFreq = $DETCIFirstFreq % DETCITwoConFirstFreq = $DETCIFirstFreq % DETCI Freqs via differences of energies DETCIEnergyFreq = ($DETCIEnergy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $DETCIEnergy $findif_energy_save end $findif_freq_energy_cart $done) DETCIRHFEnergyFreq = $DETCIEnergyFreq DETCIROHFEnergyFreq = $DETCIEnergyFreq DETCIUHFEnergyFreq = $DETCIEnergyFreq DETCITwoConEnergyFreq = $DETCIEnergyFreq % Procedures for CI DBOC computation DETCIDBOC = ($input $dboc) DETCIRHFDBOC = ($DETCIDBOC $done) DETCIROHFDBOC = ($DETCIDBOC $done) DETCIUHFDBOC = ($DETCIDBOC $done) DETCITwoConDBOC = ($DETCIDBOC $done) % Procedure for ZAPTn Energy (SEW) ZAPTNROHFEnergy = ($DETCIEnergy $done) % -------------------------------- DETCAS Procedures % Procedures for the DETCAS energy DETCASEnergy = ($ints $scf $detcasman) DETCASRHFEnergy = ($DETCASEnergy $done) DETCASROHFEnergy = ($DETCASEnergy $done) DETCASUHFEnergy = ERROR DETCASTwoConEnergy = ERROR % Procedures for the DETCAS gradient DETCASFirst = ($ints $scf $detcasman $backtransqt $oeprop $deriv) DETCASRHFFirst = ($DETCASFirst $done) DETCASROHFFirst = ($DETCASFirst $done) DETCASUHFFirst = ERROR DETCASTwoConFirst = ERROR % Procedures for the optimizing geomtries with DETCAS gradients DETCASFirstOpt = (repeat $nopt $DETCASFirst $geomupdate end $done) DETCASRHFFirstOpt = $DETCASFirstOpt DETCASROHFFirstOpt = $DETCASFirstOpt DETCASUHFFirstOpt = ERROR DETCASTwoConFirstOpt = ERROR % Procedures for the finite displacements of DETCAS gradients DETCASFirstDisp = (repeat $ndisp $ugeom $DETCASFirst $rgeom end $done) DETCASRHFFirstDisp = $DETCASFirstDisp DETCASROHFFirstDisp = $DETCASFirstDisp DETCASUHFFirstDisp = ERROR DETCASTwoConFirstDisp = ERROR % Procedures for optimization via DETCAS energy points DETCASEnergyOpt = (repeat $nopt $DETCASEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $DETCASEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) DETCASRHFEnergyOpt = $DETCASEnergyOpt DETCASROHFEnergyOpt = $DETCASEnergyOpt DETCASUHFEnergyOpt = ERROR DETCASTwoConEnergyOpt = $DETCASEnergyOpt % Procedures for symmetric frequencies via finite differences of gradients DETCASFirstSymm_FC = ($input $DETCASEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $DETCASFirst $findif_grad_save end $findif_freq_grad_symm $done) DETCASRHFFirstSymm_FC = $DETCASFirstSymm_FC DETCASROHFFirstSymm_FC = $DETCASFirstSymm_FC DETCASUHFFirstSymm_FC = $DETCASFirstSymm_FC DETCASTwoConFirstSymm_FC = $DETCASFirstSymm_FC % Procedures for frequencies via finite differences of gradients DETCASFirstFreq = ($input $DETCASEnergy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $DETCASFirst $findif_grad_save end $findif_freq_grad_cart $done) DETCASRHFFirstFreq = $DETCASFirstFreq DETCASROHFFirstFreq = $DETCASFirstFreq DETCASUHFFirstFreq = $DETCASFirstFreq DETCASTwoConFirstFreq = $DETCASFirstFreq % Procedures for DETCAS DBOC computation DETCASDBOC = ($input $dboc) DETCASRHFDBOC = ($DETCASDBOC $done) DETCASROHFDBOC = ($DETCASDBOC $done) DETCASUHFDBOC = ($DETCASDBOC $done) DETCASTwoConDBOC = ($DETCASDBOC $done) % Procedures for the conventional MP2 energy MP2Energy = ($ints $scf $transqt $ccsort $mp2) MP2RHFEnergy = ($MP2Energy $done) MP2ROHFEnergy = ($MP2Energy $done) MP2UHFEnergy = ($MP2Energy $done) MP2TwoConEnergy = ERROR % Procedures for optimization via MP2 energy points MP2EnergyOpt = (repeat $nopt $MP2Energy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $MP2Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) MP2RHFEnergyOpt = $MP2EnergyOpt MP2ROHFEnergyOpt = $MP2EnergyOpt MP2UHFEnergyOpt = $MP2EnergyOpt MP2TwoConEnergyOpt = ERROR % Procedures for orbital-unrelaxed MP2 one-electron properties MP2EnergyOEPROP = ($MP2Energy $oeprop) MP2RHFEnergyOEPROP = ($MP2EnergyOEPROP $done) MP2ROHFEnergyOEPROP = ($MP2EnergyOEPROP $done) MP2UHFEnergyOEPROP = ($MP2EnergyOEPROP $done) MP2TwoConEnergyOEPROP = ERROR % Procedure for orbital-relaxed MP2 one-electron properties MP2FirstOEPROP = ($MP2Energy $oeprop) MP2RHFFirstOEPROP = ($MP2FirstOEPROP $done) MP2UHFFirstOEPROP = ERROR MP2ROHFFirstOEPROP = ERROR MP2TwoConFirstOEPROP = ERROR % Procedures for the MP2 gradient MP2First = ($MP2Energy $oeprop $backtransqt $deriv) MP2RHFFirst = $MP2First MP2ROHFFirst = ERROR MP2UHFFirst = ERROR MP2TwoConFirst = ERROR % Procedures for geometry optimization with MP2 gradients MP2RHFFirstOpt = (repeat $nopt $MP2RHFFirst $geomupdate end $done) MP2ROHFFirstOpt = ERROR MP2UHFFirstOpt = ERROR MP2TwoConFirstOpt = ERROR % Procedures for the MP2 gradient with no restart MP2FirstReset = ($ints $scf $transqt $ccreset $mp2 $oeprop $backtransqt $deriv) MP2RHFFirstReset = $MP2FirstReset MP2ROHFFirstReset = $MP2FirstReset MP2UHFFirstReset = $MP2FirstReset % Procedures for the finite displacements of MP2 gradients MP2RHFFirstDisp = (repeat $ndisp $ugeom $uinput $MP2RHFFirst $rgeom end $done) MP2ROHFFirstDisp = (repeat $ndisp $ugeom $uinput $MP2ROHFFirst $rgeom end $done) MP2UHFFirstDisp = (repeat $ndisp $ugeom $uinput $MP2UHFFirst $rgeom end $done) MP2TwoConFirstDisp = ERROR % MP2 Freqs via differences of analytic gradients MP2FirstFreq = ($MP2Energy $findif_disp_freq_grad_cart repeat NUM_DISP $findif_next $findif_input $MP2FirstReset $findif_grad_save end $findif_freq_grad_cart $done) MP2RHFFirstFreq = $MP2FirstFreq MP2ROHFFirstFreq = ERROR MP2UHFFirstFreq = ERROR MP2TwoConFirstFreq = ERROR % MP2 Freqs via differences of energies MP2EnergyFreq = ($MP2Energy $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $MP2Energy $findif_energy_save end $findif_freq_energy_cart $done) MP2RHFEnergyFreq = $MP2EnergyFreq MP2ROHFEnergyFreq = $MP2EnergyFreq MP2UHFEnergyFreq = $MP2EnergyFreq MP2TwoConEnergyFreq = ERROR % Procedures for force constants via differences of analytic gradients MP2FirstFC = ($MP2Energy $findif_disp_nosymm repeat NUM_DISP $findif_next $findif_input $MP2First $findif_grad_save end $findif_freq_grad_nosymm $done) MP2RHFFirstFC = $MP2FirstFC MP2ROHFFirstFC = ERROR MP2UHFFirstFC = ERROR MP2TwoConFirstFC = ERROR % Procedures for symmetric force constants via differences of analytic gradients MP2FirstSymm_FC = ($MP2Energy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $MP2First $findif_grad_save end $findif_freq_grad_symm $done) MP2RHFFirstSymm_FC = $MP2FirstSymm_FC MP2ROHFFirstSymm_FC = ERROR MP2UHFFirstSymm_FC = ERROR MP2TwoConFirstSymm_FC = ERROR % Procedures for the direct MP2 energy DirectMP2Energy = ($DirectSCFEnergy $mp2_direct) DirectMP2RHFEnergy = ($DirectMP2Energy $done) DirectMP2ROHFEnergy = ERROR DirectMP2UHFEnergy = ERROR DirectMP2TwoConEnergy = ERROR % Procedures for optimization via DirectMP2 energy points DirectMP2EnergyOpt = (repeat $nopt $DirectMP2Energy $findif_disp_symm repeat $ndisp $findif_next $findif_input $DirectMP2Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) DirectMP2RHFEnergyOpt = $DirectMP2EnergyOpt DirectMP2ROHFEnergyOpt = ERROR DirectMP2UHFEnergyOpt = ERROR DirectMP2TwoConEnergyOpt = ERROR % Procedures for the MP2-R12 energy (MP2-R12 transformation is always direct) MP2R12Energy = ($SCFEnergy $mp2r12_moints $mp2r12) MP2R12RHFEnergy = ($MP2R12Energy $done) MP2R12ROHFEnergy = ERROR MP2R12UHFEnergy = ERROR MP2R12TwoConEnergy = ERROR % Procedures for the direct MP2-R12 energy DirectMP2R12Energy = ($DirectSCFEnergy $mp2r12_moints $mp2r12) DirectMP2R12RHFEnergy = ($DirectMP2R12Energy $done) DirectMP2R12ROHFEnergy = ERROR DirectMP2R12UHFEnergy = ERROR DirectMP2R12TwoConEnergy = ERROR % Procedures for optimization via MP2-R12 energy points MP2R12EnergyOpt = (repeat $nopt $MP2R12Energy $findif_disp_symm repeat $ndisp $findif_next $findif_input $MP2R12Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) MP2R12RHFEnergyOpt = $MP2R12EnergyOpt MP2R12ROHFEnergyOpt = ERROR MP2R12UHFEnergyOpt = ERROR MP2R12TwoConEnergyOpt = ERROR % Procedures for optimization via DirectMP2R12 energy points DirectMP2R12EnergyOpt = (repeat $nopt $DirectMP2R12Energy $findif_disp_symm repeat $ndisp $findif_next $findif_input $DirectMP2R12Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) DirectMP2R12RHFEnergyOpt = $DirectMP2R12EnergyOpt DirectMP2R12ROHFEnergyOpt = ERROR DirectMP2R12UHFEnergyOpt = ERROR DirectMP2R12TwoConEnergyOpt = ERROR % Procedure for the CIS energy CISEnergy = ($ints $scf $cctrans $ccsort $cis) CISRHFEnergy = ($CISEnergy $done) CISROHFEnergy = ERROR CISUHFEnergy = ($CISEnergy $done) CISTwoConEnergy = ERROR % -------------------------------- MCSCF Procedures % *** MCSCF energy *** MCSCFEnergy = ($ints $mcscf) MCSCFRHFEnergy = ($MCSCFEnergy $done) MCSCFROHFEnergy = ($MCSCFEnergy $done) MCSCFTWOCONEnergy = ($MCSCFEnergy $done) MCSCFUHFEnergy = ERROR % Procedures for the PSIMRCC energy PSIMRCCSCFEnergy = ($SCFEnergy $transqt_psimrcc $psimrcc) PSIMRCC_MCSCF_Energy = ($MCSCFEnergy $transqt_psimrcc $psimrcc) PSIMRCCRHFEnergy = ($PSIMRCC_MCSCF_Energy $done) PSIMRCCROHFEnergy = ($PSIMRCC_MCSCF_Energy $done) PSIMRCCTWOCONEnergy = ($PSIMRCC_MCSCF_Energy $done) PSIMRCCUHFEnergy = ERROR % Procedures for the PSIMRCC optimization PSIMRCCSCFEnergyOpt = (repeat $nopt $PSIMRCCSCFEnergy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $PSIMRCCSCFEnergy $findif_energy_save end $findif_grad_energy $geomupdate end $done) PSIMRCC_MCSCF_EnergyOpt = (repeat $nopt $PSIMRCC_MCSCF_Energy $findif_disp_symm repeat NUM_DISP $findif_next $findif_input $PSIMRCC_MCSCF_Energy $findif_energy_save end $findif_grad_energy $geomupdate end $done) PSIMRCCRHFEnergyOpt = $PSIMRCC_MCSCF_EnergyOpt PSIMRCCROHFEnergyOpt = $PSIMRCC_MCSCF_EnergyOpt PSIMRCCTWOCONEnergyOpt = $PSIMRCC_MCSCF_EnergyOpt PSIMRCCUHFEnergyOpt = ERROR PSIMRCCEnergyFreq = ($SCFEnergy $transqt_psimrcc $psimrcc $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $ints $scf $transqt_psimrcc $psimrcc $findif_energy_save end $findif_freq_energy_cart $done) PSIMRCC_MCSCF_EnergyFreq = ($MCSCFEnergy $transqt_psimrcc $psimrcc $findif_disp_freq_energy_cart repeat NUM_DISP $findif_next $findif_input $ints $mcscf $transqt_psimrcc $psimrcc $findif_energy_save end $findif_freq_energy_cart $done) PSIMRCCRHFEnergyFreq = ($PSIMRCC_MCSCF_EnergyFreq) PSIMRCCROHFEnergyFreq = ($PSIMRCC_MCSCF_EnergyFreq) PSIMRCCTWOCONEnergyFreq = ($PSIMRCC_MCSCF_EnergyFreq) PSIMRCCTWOCONEnergyFreq = ERROR % Procedures for IDMKPT2 energy IDMKPT2_MCSCF_Energy = ($MCSCFEnergy $mkpt2ints $psimrcc) IDMKPT2RHFEnergy = ($IDMKPT2_MCSCF_Energy $done) IDMKPT2ROHFEnergy = ($IDMKPT2_MCSCF_Energy $done) IDMKPT2TWOCONEnergy = ($IDMKPT2_MCSCF_Energy $done) IDMKPT2UHFEnergy = ERROR ) ����������������������������������������������������������������������������������������������������������psi3/lib/ruby/��������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111702�011722� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/ccdensity.rb��������������������������������������������������������������������������0000644�0001015�0000765�00000003622�10667613177�014263� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi ccdensity module module Psi class CCDensity # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj, binary=nil) @task = task_obj # Set the generic command for this class if binary == nil set_binary_command Psi::Commands::CCDENSITY else set_binary_command binary end end end # Add ccdensity ability to Task class Task def ccdensity(*args) # convert to a hash args_hash = args[0] binary = nil if args_hash != nil if args_hash.has_key?(:binary) binary = args_hash[:binary] end end # Create a new cclambda object ccdensity_obj = Psi::CCDensity.new(self, binary) # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure cchbar knows if get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "ccdensity" ccdensity_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def ccdensity(*args) # convert to a hash args_hash = args[0] Psi::global_task.ccdensity(args_hash) end ��������������������������������������������������������������������������������������������������������������psi3/lib/ruby/ccenergy.rb���������������������������������������������������������������������������0000644�0001015�0000765�00000006500�10671261664�014066� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi ccenergy module module Psi class CCEnergy # Mixin the InputGenerator include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => true, "rohf" => false, "uhf" => false, "twocon" => false } end def self.supports_analytic_second_derivatives { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::CCENERGY end end # Add ccenergy ability to Task class Task def ccsd(*args) # convert to a hash args_hash = args[0] # Call transqt and ccsort unless told not to if args_hash != nil if args_hash.has_key?(:transqt) == false or (args_hash.has_key?(:transqt) and args_hash[:transqt] == true) transqt(args_hash) end if args_hash.has_key?(:ccsort) == false or (args_hash.has_key?(:ccsort) and args_hash[:ccsort] == true) ccsort(args_hash) end else transqt(args_hash) ccsort(args_hash) end args_hash.delete(:transqt) unless args_hash == nil args_hash.delete(:ccsort) unless args_hash == nil # Create a new scf object ccsd_obj = Psi::CCEnergy.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure ccenergy knows if get_gradients == true and CCEnergy.supports_analytic_gradients[reference] == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants, user settings should override input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "ccsd" ccsd_obj.execute(input_hash) # Check to see if we are supposed to compute analytical gradients, only do if # 1. It is supported # 2. The user requested it # 3. The wavefunction is CCSD if get_gradients == true and CCEnergy.supports_analytic_gradients[reference] == true and wavefunction.casecmp("ccsd") == 0 puts "gradient:" Psi::indent_puts cchbar(input_hash) cclambda(input_hash) ccdensity(input_hash) oeprop(input_hash) # Tell transqt to do a back transformation transqt_input_hash = input_hash transqt_input_hash[:backtr] = true transqt(transqt_input_hash) deriv(input_hash) Psi::unindent_puts end etot end end end # Create some global functions # User can send additional input parameters to the function def ccsd(*args) # convert to a hash args_hash = args[0] Psi::global_task.ccsd(args_hash) end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/cceom.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000006420�10667613177�013363� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi ccenergy module module Psi class CCEom # Mixin the InputGenerator include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def self.supports_analytic_second_derivatives { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::CCEOM end end # Add ccenergy ability to Task class Task def eom(*args) # convert to a hash args_hash = args[0] # Call transqt and ccsort unless told not to if args_hash != nil if args_hash.has_key?(:cchbar) == false or (args_hash.has_key?(:cchbar) and args_hash[:cchbar] == true) cchbar(args_hash) end else cchbar(args_hash) end args_hash.delete(:cchbar) unless args_hash == nil # Create a new scf object eom_obj = Psi::CCEom.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure ccenergy knows if get_gradients == true and CCEom.supports_analytic_gradients[reference] == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants, user settings should override input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "eom" eom_obj.execute(input_hash) # Check to see if we are supposed to compute analytical gradients, only do if # 1. It is supported # 2. The user requested it # 3. The wavefunction is CCSD if get_gradients == true and CCEom.supports_analytic_gradients[reference] == true and wavefunction.casecmp("eom_ccsd") == 0 puts "gradient:" Psi::indent_puts cclambda(input_hash, :binary => Psi::Commands::CCLAMBDA_EXCITED) ccdensity(input_hash, :binary => Psi::Commands::CCDENSITY_CALC_XI) cclambda(input_hash, :binary => Psi::Commands::CCLAMBDA_ZETA) ccdensity(input_hash, :binary => Psi::Commands::CCDENSITY_USE_ZETA) oeprop(input_hash) # Tell transqt to do a back transformation transqt_input_hash = input_hash transqt_input_hash[:backtr] = true transqt(transqt_input_hash) deriv(input_hash) Psi::unindent_puts end eom_states_energy end end end # Create some global functions # User can send additional input parameters to the function def eom(*args) # convert to a hash args_hash = args[0] Psi::global_task.eom(args_hash) end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/cchbar.rb�����������������������������������������������������������������������������0000644�0001015�0000765�00000003164�10660061455�013506� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi cchbar module module Psi class CCHBar # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::CCHBAR end end # Add cchbar ability to Task class Task def cchbar(*args) # convert to a hash args_hash = args[0] # Create a new scf object cchbar_obj = Psi::CCHBar.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure cchbar knows if get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "cchbar" cchbar_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def cchbar(*args) # convert to a hash args_hash = args[0] Psi::global_task.cchbar(args_hash) end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/cclambda.rb���������������������������������������������������������������������������0000644�0001015�0000765�00000003607�10667613177�014027� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi cclambda module module Psi class CCLambda # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj, binary=nil) @task = task_obj # Set the generic command for this class if binary == nil set_binary_command Psi::Commands::CCLAMBDA else set_binary_command binary end end end # Add cclambda ability to Task class Task def cclambda(*args) # convert to a hash args_hash = args[0] binary = nil if args_hash != nil if args_hash.has_key?(:binary) binary = args_hash[:binary] end end # Create a new cclambda object cclambda_obj = Psi::CCLambda.new(self, binary) # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure cchbar knows if get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "cclambda" cclambda_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def cclambda(*args) # convert to a hash args_hash = args[0] Psi::global_task.cclambda(args_hash) end �������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/ccsort.rb�����������������������������������������������������������������������������0000644�0001015�0000765�00000003157�10660061455�013563� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi scf module module Psi class CCSort # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::CCSORT end end # Add ccsort ability to Task class Task def ccsort(*args) # convert to a hash args_hash = args[0] # Create a new scf object ccsort_obj = Psi::CCSort.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure ccenergy knows if get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the scf module, sending the input file as keyboard input puts "ccsort" ccsort_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def ccsort(*args) # convert to a hash args_hash = args[0] Psi::global_task.ccsort(args_hash) end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/cctriples.rb��������������������������������������������������������������������������0000644�0001015�0000765�00000004331�10667613177�014264� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi scf module module Psi class CCTriples # Mixin the InputGenerator include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def self.supports_analytic_second_derivatives { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::CCTRIPLES end end # Add cctriples ability to Task class Task def ccsd_t(*args) # convert to a hash args_hash = args[0] # Ensure that ccsd is called unless told otherwise if args_hash != nil if args_hash.has_key?(:ccsd) == false or (args_hash.has_key?(:ccsd) == true and args_hash[:ccsd] != false) ccsd(args_hash) end else ccsd(args_hash) end args_hash.delete(:ccsd) unless args_hash == nil args_hash.delete(:transqt) unless args_hash == nil args_hash.delete(:ccsort) unless args_hash == nil # Create a new scf object ccsd_t_obj = Psi::CCTriples.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the scf module, sending the input file as keyboard input puts "ccsd(t)" ccsd_t_obj.execute(input_hash) Psi::Chkpt::etot end end end # Create some global functions # User can send additional input parameters to the function def ccsd_t(*args) # convert to a hash args_hash = args[0] Psi::global_task.ccsd_t(args_hash) end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/chkpt.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000007754�10671261664�013414� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������module Psi module Chkpt #rb_define_module_function(rubyChkpt, "exist?", RUBYCAST(ruby_psi_chkpt_exist), 1); def self.exist?(key) Psi::global_task.exist?(key) end #rb_define_module_function(rubyChkpt, "exists?", RUBYCAST(ruby_psi_chkpt_exist), 1); def self.exists?(key) Psi::global_task.exists?(key) end #rb_define_module_function(rubyChkpt, "label", RUBYCAST(ruby_psi_chkpt_label_get), 0); def self.label Psi::global_task.label end #rb_define_module_function(rubyChkpt, "escf", RUBYCAST(ruby_psi_chkpt_escf_get), 0); def self.escf Psi::global_task.escf end #rb_define_module_function(rubyChkpt, "escf=", RUBYCAST(ruby_psi_chkpt_escf_set), 1); def self.escf=(val) Psi::global_task.escf=val end #rb_define_module_function(rubyChkpt, "eref", RUBYCAST(ruby_psi_chkpt_eref_get), 0); def self.eref Psi::global_task.eref end #rb_define_module_function(rubyChkpt, "eref=", RUBYCAST(ruby_psi_chkpt_eref_set), 1); def self.eref=(val) Psi::global_task.eref=val end #rb_define_module_function(rubyChkpt, "ecorr", RUBYCAST(ruby_psi_chkpt_ecorr_get), 0); def self.ecorr Psi::global_task.ecorr end #rb_define_module_function(rubyChkpt, "ecorr=", RUBYCAST(ruby_psi_chkpt_ecorr_set), 1); def self.ecorr=(val) Psi::global_task.ecorr=val end #rb_define_module_function(rubyChkpt, "enuc", RUBYCAST(ruby_psi_chkpt_enuc_get), 0); def self.enuc Psi::global_task.enuc end #rb_define_module_function(rubyChkpt, "enuc=", RUBYCAST(ruby_psi_chkpt_enuc_set), 1); def self.enuc=(val) Psi::global_task.enuc=val end #rb_define_module_function(rubyChkpt, "efzc", RUBYCAST(ruby_psi_chkpt_efzc_get), 0); def self.efzc Psi::global_task.efzc end #rb_define_module_function(rubyChkpt, "efzc=", RUBYCAST(ruby_psi_chkpt_efzc_set), 1); def self.efzc=(val) Psi::global_task.efzc=val end def self.clsdpi=(val) Psi::global_task.clsdpi=val end def self.clsdpi Psi::global_task.clsdpi end def self.exps=(val) Psi::global_task.exps=val end def self.exps Psi::global_task.exps end def self.frzcpi=(val) Psi::global_task.frzcpi=val end def self.frzcpi Psi::global_task.frzcpi end def self.frzvpi=(val) Psi::global_task.frzvpi=val end def self.frzvpi Psi::global_task.frzvpi end def self.load_zmat Psi::global_task.load_zmat end #rb_define_module_function(rubyChkpt, "etot", RUBYCAST(ruby_psi_chkpt_etot_get), 0); def self.etot Psi::global_task.etot end #rb_define_module_function(rubyChkpt, "etot=", RUBYCAST(ruby_psi_chkpt_etot_set), 1); def self.etot=(val) Psi::global_task.etot=val end #rb_define_module_function(rubyChkpt, "disp", RUBYCAST(ruby_psi_chkpt_etot_get), 0); def self.disp Psi::global_task.disp end #rb_define_module_function(rubyChkpt, "disp=", RUBYCAST(ruby_psi_chkpt_etot_set), 1); def self.disp=(val) Psi::global_task.disp=val end #rb_define_module_function(rubyChkpt, "eccsd", RUBYCAST(ruby_psi_chkpt_eccsd_get), 0); def self.eccsd Psi::global_task.eccsd end #rb_define_module_function(rubyChkpt, "e_t", RUBYCAST(ruby_psi_chkpt_e_t_get), 0); def self.e_t Psi::global_task.e_t end def self.emp2 Psi::global_task.emp2 end def self.num_irreps Psi::global_task.num_irreps end def self.evals Psi::global_task.evals end def self.alpha_evals Psi::global_task.alpha_evals end def self.beta_evals Psi::global_task.beta_evals end def self.evals=(val) Psi::global_task.evals=val end def self.alpha_evals=(val) Psi::global_task.alpha_evals=val end def self.beta_evals=(val) Psi::global_task.beta_evals=val end end end ��������������������psi3/lib/ruby/cints.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000002002�10660061455�013372� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi cints module module Psi class Cints # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) # Save which task we are created by @task = task_obj # Set the generic command for cints set_binary_command Psi::Commands::INTS end end # Add cints ability to the Task class class Task def ints(*args) # convert to a hash args_hash = args[0] # Create a new input object input_obj = Psi::Cints.new self # Form the input hash and generate the input file input_hash = { } input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts "ints" input_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def ints(*args) puts "in global ints" args_hash = args[0] Psi::global_task.ints(args_hash) end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/clean.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000003031�10670061367�013342� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi scf module module Psi class Clean # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::DONE end end # Add psiclean ability to Task class Task def clean(*args) # convert to a hash args_hash = args[0] # Create a new scf object clean_obj = Psi::Clean.new self # Form the input hash and generate the input file input_hash = { } # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the psiclean module, sending the input file as keyboard input puts "cleaning" clean_obj.execute(input_hash) # Return true true end def veryclean(*args) args_hash = args[0] # Run clean clean(args_hash) # Remove files in the local directory that match prefix.[0-9]* list = Dir[prefix + ".[0-9]*"] printf "Deleting: " list.each do |item| printf item + " " File.delete(item) end puts true end end end # Create some global functions # User can send additional input parameters to the function def clean(*args) # convert to a hash args_hash = args[0] Psi::global_task.clean(args_hash) end def veryclean(*args) # convert to a hash args_hash = args[0] Psi::global_task.veryclean(args_hash) end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/color.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000001207�10660061455�013376� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������def colorize(text, color_code) # Make sure the terminal supports color if (ENV.has_key?("COLORTERM") and ENV["COLORTERM"] == 1) or (ENV.has_key?("TERM") and ENV["TERM"].include?("color")) "#{color_code}#{text}\e[0m" else text end end def red(text); colorize(text, "\e[31m"); end def green(text); colorize(text, "\e[32m"); end def blue(text); colorize(text, "\e[34m"); end def yellow(text); colorize(text, "\e[33m"); end def magenta(text); colorize(text, "\e[35m"); end def cyan(text); colorize(text, "\e[36m"); end def white(text); colorize(text, "\e[37m"); end def bold(text); colorize(text, "\e[1m"); end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/cphf.rb�������������������������������������������������������������������������������0000644�0001015�0000765�00000001765�10660404375�013213� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ module Psi class Cphf # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) # Save which task we are created by set_task task_obj # Set the generic command for cints set_binary_command Psi::Commands::CPHF end end # Add cints ability to the Task class class Task def cphf(*args) # convert to a hash args_hash = args[0] # Create a new input object input_obj = Psi::Cphf.new self # Form the input hash and generate the input file input_hash = { "wfn" => wavefunction, "reference" => reference } input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts "cphf" input_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def cphf(*args) args_hash = args[0] Psi::global_task.cphf(args_hash) end �����������psi3/lib/ruby/deriv.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000002155�10660404375�013376� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi cints module module Psi class Deriv # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) # Save which task we are created by set_task task_obj # Override the psi_module_name set_psi_module_name "Cints" # Set the generic command for cints set_binary_command Psi::Commands::DERIV end end # Add cints ability to the Task class class Task def deriv(*args) # convert to a hash args_hash = args[0] # Create a new input object input_obj = Psi::Deriv.new self # Form the input hash and generate the input file input_hash = { "wfn" => wavefunction, "reference" => reference } input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts "derivatives" input_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def deriv(*args) args_hash = args[0] Psi::global_task.deriv(args_hash) end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/deriv2.rb�����������������������������������������������������������������������������0000644�0001015�0000765�00000002122�10660404375�013452� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ module Psi class Deriv2 # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) # Save which task we are created by set_task task_obj # Override the psi_module_name set_psi_module_name "Cints" # Set the generic command for cints set_binary_command Psi::Commands::DERIV2 end end # Add cints ability to the Task class class Task def deriv2(*args) # convert to a hash args_hash = args[0] # Create a new input object input_obj = Psi::Deriv2.new self # Form the input hash and generate the input file input_hash = { "wfn" => wavefunction, "reference" => reference } input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts "2nd derivatives" input_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def deriv2(*args) args_hash = args[0] Psi::global_task.deriv(args_hash) end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/detci.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000004325�10671261664�013362� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi detci module module Psi class DetCI # Mixin the InputGenerator include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::DETCI end end # Add detci ability to Task class Task def detci(*args) # convert to a hash args_hash = args[0] # Call transqt unless told not to if args_hash != nil if args_hash.has_key?(:transqt) == false or (args_hash.has_key?(:transqt) and args_hash[:transqt] == true) transqt(args_hash) end else transqt(args_hash) end args_hash.delete(:transqt) unless args_hash == nil # Create a new scf object detci_obj = Psi::DetCI.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure detci knows if get_gradients == true and DetCI.supports_analytic_gradients[reference] == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants, user settings should override input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "detci" detci_obj.execute(input_hash) etot end end end # Create some global functions # User can send additional input parameters to the function def detci(*args) # convert to a hash args_hash = args[0] Psi::global_task.detci(args_hash) end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/frequencies.rb������������������������������������������������������������������������0000644�0001015�0000765�00000022313�10660404375�014574� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������module Psi class Frequencies # Mixin the InputGenerator include InputGenerator def initialize(task_obj) set_task task_obj # Override the psi_module_name set_psi_module_name "OptKing" end def execute(input_file, binary) puts "DEBUG: For #{binary} would have used:\n#{input_file.string}" if Psi::check_commands == true prefix = "" prefix = "-p #{get_task.prefix}" if get_task.prefix != nil if Psi::check_commands != true # Run optking with our input file if Psi::quiet == false `echo "#{input_file.string}" | #{binary} #{prefix} -f -` else `echo "#{input_file.string}" | #{binary} #{prefix} -f - >& /dev/null` end if $?.exited? # Return the status code to the caller so that it can handle what to do next return $?.exitstatus else puts "Error occurred in Frequencies::execute." exit 1 end end end end # Add frequencies ability to Task class Task def frequencies(*args) # The user MUST provide a code block if block_given? == false puts red("Error: ") + "You must provide a code block for frequencies." exit 1 end # Convert to a hash args_hash = args[0] # By default do frequencies by energy points unless the requested wavefunction # supports either second derivatives or first derivatives set_gradients(false) set_second_deriv(false) # Check to see what we support # First do gradients # Check to see what we support: if wavefunction.casecmp("scf") == 0 and SCF.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("ccsd") == 0 and CCEnergy.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("ccsd_t") == 0 and CCTriples.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("mp2") == 0 and MP2.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("detci") == 0 and DetCI.supports_analytic_gradients[reference] == true set_gradients(true) end # Next check for second derivatives # Check to see what we support: if wavefunction.casecmp("scf") == 0 and SCF.supports_analytic_second_derivatives[reference] == true set_second_deriv(true) elsif wavefunction.casecmp("ccsd") == 0 and CCEnergy.supports_analytic_second_derivatives[reference] == true set_second_deriv(true) elsif wavefunction.casecmp("ccsd_t") == 0 and CCTriples.supports_analytic_second_derivatives[reference] == true set_second_deriv(true) elsif wavefunction.casecmp("mp2") == 0 and MP2.supports_analytic_second_derivatives[reference] == true set_second_deriv(true) elsif wavefunction.casecmp("detci") == 0 and DetCI.supports_analytic_second_derivatives[reference] == true set_second_deriv(true) end # Check for user arguments if args_hash != nil # Did the user request gradients? if args_hash.has_key?(:gradients) and args_hash[:gradients] == true and get_gradients == false puts red("WARNING: ") + "Analytic gradients requested, but are not supported." puts " Switching to frequencies by energy points." elsif args_hash.has_key?(:gradients) and args_hash[:gradients] == true and get_second_deriv == true puts red("WARNING: ") + "Analytic second derivatives available, but analytic gradients requested." puts " Switching to frequencies by analytic gradients." # If we have 2nd derivatives then we must have 1st derivatives set_second_deriv(false) elsif args_hash.has_key?(:gradients) and args_hash[:gradients] == false set_gradients(false) set_second_deriv(false) end end args_hash.delete(:gradients) unless args_hash == nil # Report what we are doing if get_second_deriv == true set_gradients(false) puts "\nComputing frequencies via analytic second derivatives." elsif get_gradients == true puts "\nComputing frequencies via finite differences of gradients." else puts "\nComputing frequencies via finite differences of energies." end # Create a new frequencies object frequencies_obj = Psi::Frequencies.new self # Form the input hash and generate input file. # Form the input hash and generate input file input_hash = { "reference" => reference, "wfn" => wavefunction } # Make sure derivatives are turned off or on if get_second_deriv == true input_hash["dertype"] = "second" elsif get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Handle the geometry if get_optimization_complete == false if @zmat != nil and @geometry == nil input_hash["zmat"] = @zmat elsif @zmat == nil and @geometry != nil input_hash["geometry"] = @geometry elsif @zmat == nil and @geometry == nil puts red("Error: ") +"Neither geometry nor zmat are set." exit 1 else puts red("Error: ") + "Both geometry and zmat are set. One must be nil." exit 1 end end # We are doing frequiencies input_hash["jobtype"] = "freq" input_hash = input_hash.merge(args_hash) unless args_hash == nil # Generate the input file input_file = frequencies_obj.generate_input input_hash puts "Computing frequencies..." Psi::indent_puts # Run input to generate initial checkpoint file ONLY if get_optimization_completed == false if get_optimization_complete == false input(args_hash) else # else run input with --chkptgeom puts "Using optimized geometry from checkpoint." #input(:binary => Psi::Commands::INPUTCHKPT, :quiet => true) end if get_second_deriv == true # Simply yield out to the code block, it should know what to do. yield(nil) elsif get_gradients == true # If geometry optimization was done then we do not need to do a single point energy if get_optimization_complete == false # Temporarily turn off gradients set_gradients(false) # Do the single point energy yield(nil) # Turn gradients back on set_gradients(true) end # Figure out the displacements needed for frequencies by gradients number_displacements = frequencies_obj.execute(input_file, Psi::Commands::FINDIF_DISP_FREQ_GRAD_CART) puts "Computing #{number_displacements} displacements." Psi::indent_puts # Attempt to do the displacements number_displacements.times do |i| # Do pre-displacement commands frequencies_obj.execute(input_file, Psi::Commands::FINDIF_NEXT) input(:binary => Psi::Commands::FINDIF_INPUT, :quiet => true) puts "Displacement #{i+1}" # Compute the gradient at this point Psi::indent_puts yield(nil) Psi::unindent_puts # Do post-displacement commands frequencies_obj.execute(input_file, Psi::Commands::FINDIF_GRAD_SAVE) end Psi::unindent_puts # Finished with displacements # Tell optking to compute frequencies from the gradients frequencies_obj.execute(input_file, Psi::Commands::FINDIF_FREQ_GRAD_CART) else # If geometry optimization was done then we do not need to do a single point energy if get_optimization_complete == false # Do the single point energy yield(nil) end # Figure out the displacements needed for frequencies by energy number_displacements = frequencies_obj.execute(input_file, Psi::Commands::FINDIF_DISP_FREQ_ENERGY_CART) puts "Computing #{number_displacements} displacements." Psi::indent_puts # Attempt to do the displacements number_displacements.times do |i| # Do pre-displacement commands frequencies_obj.execute(input_file, Psi::Commands::FINDIF_NEXT) input(:binary => Psi::Commands::FINDIF_INPUT, :quiet => true) puts "Displacement #{i+1}" # Compute the energy at this point Psi::indent_puts yield(nil) Psi::unindent_puts # Do post-displacement commands frequencies_obj.execute(input_file, Psi::Commands::FINDIF_ENERGY_SAVE) end Psi::unindent_puts # Finished with displacements # Tell optking to compute frequencies from the energies frequencies_obj.execute(input_file, Psi::Commands::FINDIF_FREQ_ENERGY_CART) end Psi::unindent_puts end end end def frequencies(*args) # Convert to a hash args_hash = args[0] Psi::global_task.frequencies(args_hash) do |input_hash| yield(input_hash) end end alias freq frequencies ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/input.rb������������������������������������������������������������������������������0000644�0001015�0000765�00000005555�10671261664�013437� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi input module module Psi class Input # Mixin the InputGenerator include InputGenerator include Executor # Static function used by all instances of Input def self.first_time_run if @input_first_time_run == nil @input_first_time_run = false Psi::Commands::INPUT else Psi::Commands::INPUTKEEP end end def initialize(task_obj) # Save which task we are created by @task = task_obj # Set the generic command set_binary_command Input.first_time_run end end # Add input ability to the Task class class Task # User can send additional input parameters to the function def input(*args) # convert to a hash args_hash = args[0] quiet = false # Create a new input object input_obj = Psi::Input.new self # Make sure some label is set @label = "Default PSIRB label" if @label == nil # Check to see if the user passed a binary override if args_hash != nil if args_hash.has_key?(:binary) input_obj.set_binary_command(args_hash[:binary]) args_hash.delete(:binary) end if args_hash.has_key?(:quiet) quiet = args_hash[:quiet] args_hash.delete(:quiet) end end if @basis == nil puts "Set a basis." exit 1 end # Check to see if @basis includes '*', if so wrap in "" if @basis.kind_of?(Array) == false and @basis.include?("*") basis_to_use = "\\\"#{@basis}\\\"" else basis_to_use = @basis end # Form the input hash and generate the input file input_hash = { "label" => "\\\"#{@label.to_str}\\\"", "basis" => basis_to_use, "reference" => reference, "wfn" => wavefunction } # Handle the geometry if @zmat != nil and @geometry == nil input_hash["zmat"] = @zmat elsif @zmat == nil and geometry != nil input_hash["geometry"] = @geometry elsif @zmat == nil and @geometry == nil puts "Error: Neither geometry nor zmat are set." exit 1 else puts "Error: Both geometry and zmat are set. One must be nil." exit 1 end # What are the units on the geometry @units = "angstroms" unless @units != nil input_hash["units"] = @units input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts input_obj.get_binary_command if quiet == false input_obj.execute(input_hash) # Ensure label was written self.label=@label.to_str # We finished successfully true end end end # A generic global input function that call input on the global Task def input(*args) args_hash = args[0] Psi::global_task.input(args_hash) end ���������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/Makefile.in���������������������������������������������������������������������������0000644�0001015�0000765�00000002470�11026242634�014000� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .PHONY: default all install depend clean targetclean default: all all: install_inc: depend: clean: targetclean: top_srcdir = @top_srcdir@ prefix = @prefix@ srcdir = @srcdir@ datarootdir = @datarootdir@ datadir = @datadir@ pkgdatadir = @pkgdatadir@ rubydatadir = $(pkgdatadir)/ruby VPATH = @srcdir@ top_objdir = ../.. MKDIRS = @MKDIRS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ RUBYSRC = \ ccdensity.rb cchbar.rb cctriples.rb clean.rb deriv.rb mp2.rb pes.rb scf.rb transqt.rb \ ccenergy.rb cclambda.rb chkpt.rb color.rb deriv2.rb frequencies.rb oeprop.rb propint.rb symbols.rb \ cceom.rb ccsort.rb cints.rb cphf.rb detci.rb input.rb optking.rb psi3.rb testcases.rb install: $(RUBYSRC) $(MKDIRS) $(rubydatadir) for rbfile in $(RUBYSRC); \ do \ ($(INSTALL_DATA) $(srcdir)/$${rbfile} $(rubydatadir)) || exit 1; \ done install_man: $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=lib/Makefile ./config.status ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/mp2.rb��������������������������������������������������������������������������������0000644�0001015�0000765�00000004440�10671261664�012766� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi MP2 module module Psi class MP2 # Mixin the InputGenerator include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def self.supports_analytic_second_derivatives { "rhf" => false, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::MP2 end end # Add mp2 ability to Task class Task def mp2(*args) # convert to a hash args_hash = args[0] # Call transqt and ccsort unless told not to if args_hash != nil if args_hash.has_key?(:transqt) == false or (args_hash.has_key?(:transqt) and args_hash[:transqt] == true) transqt(args_hash) end if args_hash.has_key?(:ccsort) == false or (args_hash.has_key?(:ccsort) and args_hash[:ccsort] == true) ccsort(args_hash) end else transqt(args_hash) ccsort(args_hash) end args_hash.delete(:transqt) unless args_hash == nil args_hash.delete(:ccsort) unless args_hash == nil # Create a new mp2 object mp2_obj = Psi::MP2.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the scf module, sending the input file as keyboard input puts "mp2" mp2_obj.execute(input_hash) etot end end end # Create some global functions # User can send additional input parameters to the function def mp2(*args) # convert to a hash args_hash = args[0] Psi::global_task.mp2(args_hash) end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/oeprop.rb�����������������������������������������������������������������������������0000644�0001015�0000765�00000003165�10660061455�013571� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi oeprop module module Psi class OEProp # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::OEPROP end end # Add oeprop ability to Task class Task def oeprop(*args) # convert to a hash args_hash = args[0] # Create a new cclambda object oeprop_obj = Psi::OEProp.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # If we are doing analytic gradients make sure cchbar knows if get_gradients == true input_hash["dertype"] = "first" else input_hash["dertype"] = "none" end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the ccenergy module, sending the input file as keyboard input puts "oeprop" oeprop_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def oeprop(*args) # convert to a hash args_hash = args[0] Psi::global_task.oeprop(args_hash) end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/optking.rb����������������������������������������������������������������������������0000644�0001015�0000765�00000027625�10670061367�013752� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to optking module # Some handy constants BEND = "bend" STRE = "stre" LIN1 = "lin1" LIN2 = "lin2" TORS = "tors" OUT = "out" module Psi class OptKing # Mixin the InputGenerator include InputGenerator # We don't mix in the Executor because optking returns error codes corresponding to certain actions def initialize(task_obj) set_task task_obj end # Generate the :fixed_info tag for the input file def generate_fixedintco(input_file, fixedintco) if fixedintco != nil input_file.puts "fixed_intco:(" # Go through fixedintco and generate the input sub_result = generate_value(fixedintco) input_file.puts(sub_result.string) input_file.puts ")" end return input_file end def execute(input_file, binary) puts "DEBUG: For #{binary} would have used:\n#{input_file.string}" if Psi::check_commands == true prefix = "" prefix = "-p #{get_task.prefix}" if get_task.prefix != nil if Psi::check_commands != true # Run optking with our input file if Psi::quiet == false `echo "#{input_file.string}" | #{binary} #{prefix} -f -` else `echo "#{input_file.string}" | #{binary} #{prefix} -f - >& /dev/null` end if $?.exited? # Return the status code to the caller so that it can handle what to do next return $?.exitstatus else puts "Error occurred in OptKing::execute." exit 1 end end end end # Add optking ability to Task class Task def optking(*args) # The user MUST provide a code block if block_given? == false puts red("Error: ") + "You must provide a code block for optking." exit 1 end # Convert to a hash args_hash = args[0] # Initial values result = 0 max_geometry_cycles = 20 current_cycle = 0 save_energy = false fixedintco = nil cleanup = true # By default, we do by energy points unless the requested wavefunction supports analytic gradients set_gradients(false) # Check to see what we support: if wavefunction.casecmp("scf") == 0 and SCF.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("ccsd") == 0 and CCEnergy.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("ccsd_t") == 0 and CCTriples.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("mp2") == 0 and MP2.supports_analytic_gradients[reference] == true set_gradients(true) elsif wavefunction.casecmp("detci") == 0 and DetCI.supports_analytic_gradients[reference] == true set_gradients(true) end # Check to see if the user requested gradients, if they did and get_gradients is false # warn the user and do by energy points if args_hash != nil # Did the user specify fixed coordinates? if args_hash.has_key?(:fixed_intco) puts "Doing a constrained geometry optimization." fixedintco = args_hash[:fixed_intco] end if args_hash.has_key?(:cleanup) cleanup = args_hash[:cleanup] end if args_hash.has_key?(:gradients) and args_hash[:gradients] == true and get_gradients == false puts red("WARNING: ") + "Analytic gradients requested, but are not supported." puts " Switching to gradients by energy points." end # Did the user explicitly request by energy points? if args_hash.has_key?(:gradients) and args_hash[:gradients] == false # User requested NO gradients. set_gradients(false) end # Does user want to save result of code block to checkpoint for optking to use? if args_hash.has_key?(:save_energy) save_energy = args_hash[:save_energy] end end # Did user request a limited number of optimization cycles? if args_hash != nil if args_hash.has_key?(:max_cycles) max_geometry_cycles = args_hash[:max_cycles] end end # We are done with :gradients option, drop it from the list so that it isn't passed to optking args_hash.delete(:gradients) unless args_hash == nil args_hash.delete(:max_cycles) unless args_hash == nil args_hash.delete(:fixed_intco) unless args_hash == nil # Report what we are doing if get_gradients == true puts "Optimizing geometry via analytic gradients.\n" else puts "Optimizing geometry via energy points.\n" end # Create a new optking object optking_obj = Psi::OptKing.new self # Form the input hash and generate input file input_hash = { "reference" => reference, "wfn" => wavefunction } # Make sure gradients are turned off or on if get_gradients == false input_hash["dertype"] = "none" else input_hash["dertype"] = "first" end # We are doing optimization input_hash["jobtype"] = "opt" input_hash = input_hash.merge(args_hash) unless args_hash == nil # Handle the geometry if @zmat != nil and @geometry == nil input_hash["zmat"] = @zmat elsif @zmat == nil and geometry != nil input_hash["geometry"] = @geometry elsif @zmat == nil and @geometry == nil puts red("Error: ") + "Neither geometry nor zmat are set." exit 1 else puts red("Error: ") + "Both geometry and zmat are set. One must be nil." exit 1 end # Generate optking input file input_file = optking_obj.generate_input input_hash # If using fixedintco need to add it to the input file input_file = optking_obj.generate_fixedintco(input_file, fixedintco) unless fixedintco == nil puts "Optimizing geometry..." Psi::indent_puts # REQUIRED: Run input to generate initial checkpoint file contents input(args_hash) # OPTIONAL: Run a single point so that optking has something to work with if we are doing energy points if get_gradients == false loop do puts "Computing reference geometry and energy:" Psi::indent_puts result = yield(input_hash) # Save energy to checkpoint if needed self.etot = result if save_energy == true Psi::unindent_puts # Single point obtained, form displacements current_cycle += 1 number_displacements = optking_obj.execute(input_file, Psi::Commands::FINDIF_DISP_SYMM) if number_displacements == 1 # Something must be wrong puts "Error: Unable to generate displacements." exit 1 end puts "Cycle #{current_cycle}: computing energies for #{number_displacements} displacements:" Psi::indent_puts # Attempt to do the displacements number_displacements.times do |i| # Do pre-displacement commands optking_obj.execute(input_file, Psi::Commands::FINDIF_NEXT) input(:binary => Psi::Commands::FINDIF_INPUT, :quiet => true) puts "Displacement #{i+1}" Psi::indent_puts # Get the energy from user result = yield(input_hash) # Save energy to checkpoint if needed self.etot = result if save_energy == true Psi::unindent_puts # Do post-displacement commands optking_obj.execute(input_file, Psi::Commands::FINDIF_ENERGY_SAVE) end Psi::unindent_puts # Finished with displacements # Tell optking to compute gradients from energies result = optking_obj.execute(input_file, Psi::Commands::FINDIF_GRAD_ENERGY) # Tell optking to take a step. # If result == 2 geometry is optimized # If result == 0 geometry is not optimized # If result == 1 optking failure result = optking_obj.execute(input_file, Psi::Commands::GEOMUPDATE) break if result == 2 or result == 1 # Is it time to stop? if current_cycle >= max_geometry_cycles result = 3 break end end # Report results if result == 2 puts "Optimization complete." elsif result == 3 puts "Max cycles reached. Stopping optimization." else puts "Error during optimization." exit 1 end else # Optimizations by analytic gradients are much easier loop do current_cycle += 1 puts "Cycle #{current_cycle}:" Psi::indent_puts # Yield to the user code block passing the need input_hash result = yield(input_hash) # Update geometry result = optking_obj.execute(input_file, Psi::Commands::GEOMUPDATE) break if result == 2 or result == 1 # Is it time to stop? if current_cycle >= max_geometry_cycles result = 3 break end Psi::unindent_puts end # Report results if result == 2 puts "Optimization complete." elsif result == 3 puts "Max cycles reached. Stopping optimization." else puts "Error during optimization." exit 1 end end Psi::unindent_puts Psi::unindent_puts # I'm missing one somewhere # Tell methods that follow that an optimization was completed. set_optimization_complete true # Unless told not to, run psiclean clean if cleanup == true # If the user gave a zmatrix read in the new zmatrix from checkpoint if @zmat != nil chkpt_zmat = ZEntry.new self zmat_arr = chkpt_zmat.to_a # zmat_arr should "look" like @zmat, go through it and update the variables # if a variable is a symbol then update the global variable referred to by the symbol count = zmat_arr.length - 1 0.upto(count) do |x| if @zmat[x].length >= 3 if @zmat[x][2].kind_of?(Symbol) # Set the global variable that is named from the symbol to the zmat_arr value eval("$" + @zmat[x][2].id2name + "=zmat_arr[x][2]") else @zmat[x][2] = zmat_arr[x][2] end end if @zmat[x].length >= 5 if @zmat[x][4].kind_of?(Symbol) # Set the global variable that is named from the symbol to the zmat_arr value eval("$" + @zmat[x][4].id2name + "=zmat_arr[x][4]") else @zmat[x][4] = zmat_arr[x][4] end end if @zmat[x].length >= 7 if @zmat[x][6].kind_of?(Symbol) # Set the global variable that is named from the symbol to the zmat_arr value eval("$" + @zmat[x][6].id2name + "=zmat_arr[x][6]") else @zmat[x][6] = zmat_arr[x][6] end end end end # Return the new total energy of the system etot end end end # User is expected to provide a code block that tells optking what to do # for a single step. # Accepts the following options: # :gradients => true/false default depends on wavefunction, user can only override with false # :max_cycles => number default 20 # :save_energy => true/false default false (optking reads energy from checkpoint), true (save result of # code block to checkpoint which optking will read) def optking(*args) # Convert to a hash args_hash = args[0] Psi::global_task.optking(args_hash) do |input_hash| yield(input_hash) end end�����������������������������������������������������������������������������������������������������������psi3/lib/ruby/pes.rb��������������������������������������������������������������������������������0000644�0001015�0000765�00000011127�10743705665�013063� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Code that simplifies computing a potential energy surface # Add pes ability to Task module Psi class Task # Function arguments: # :num_disps => # (required) # :report => true or false (default => true) # :col_labels => array (required, column headings) # :file => string (optional) # :format => formatstring (optional) if "csv" saves the file in csv format. # # Expects a yield block that runs the single point and returns the information to collect. # # Returns the information that was collected def pes(*args) # Convert the array to a hash args_hash = args[0] format = "normal" format = args_hash[:format] if args_hash.has_key?(:format) # Make sure num_disps is provided if args_hash.has_key?(:num_disps) == false puts "Error: In function \"pes\", :num_disps required." exit 1 end # Check to see if :report is given and if it is true :col_label is required if args_hash.has_key?(:report) and args_hash[:report] == true if args_hash.has_key?(:col_labels) == false puts "Error: In function \"pes\", :col_labels is required if :report => true." exit 1 end end # Create the result array result = [] # Loop over the displacements puts "Beginning PES scan..." Psi::indent_puts (1..args_hash[:num_disps]).each do |ndisp| puts "Displacement #{ndisp}" Psi::indent_puts result += yield(ndisp) Psi::unindent_puts end Psi::unindent_puts # Report the results if args_hash.has_key?(:report) and args_hash[:report] == true puts "Results from PES scan:" args_hash[:col_labels].each do |label| printf(sprintf(" %-14s ", label.to_s)) end printf "\n" col_count = (args_hash[:col_labels].length) - 1 row_count = (result.length / args_hash[:col_labels].length) - 1 (0..row_count).each do |row| (0..col_count).each do |col| indx = row * (col_count+1) + col if result[indx].instance_of? Fixnum or result[indx].instance_of? Bignum printf(sprintf(" %-14d ", result[indx])) elsif result[indx].instance_of? Float printf(sprintf(" %-14.9f ", result[indx])) else printf(sprintf(" %-14s ", result[indx].to_s)) end end printf "\n" end end # Does the user want the data saved to a file? if args_hash.has_key?(:file) File.open(args_hash[:file], "w") do |file| args_hash[:col_labels].each do |label| if format == "normal" file.printf(sprintf(" %-14s ", label.to_s)) elsif format == "csv" file.printf(label.to_s + ",") end end file.printf "\n" col_count = (args_hash[:col_labels].length) - 1 row_count = (result.length / args_hash[:col_labels].length) - 1 (0..row_count).each do |row| (0..col_count).each do |col| indx = row * (col_count+1) + col if format == "normal" if result[indx].instance_of? Fixnum or result[indx].instance_of? Bignum file.printf(sprintf(" %-14d ", result[indx])) elsif result[indx].instance_of? Float file.printf(sprintf(" %-14.9f ", result[indx])) else file.printf(sprintf(" %-14s ", result[indx].to_s)) end elsif format == "csv" file.printf(result[indx].to_s + ",") end end file.printf "\n" end end end # If the user provided :col_labels, convert result into a more # manageable form if args_hash.has_key?(:col_labels) new_result = {} # Add empty arrays to the new hash args_hash[:col_labels].each do |label| new_result[label] = [] end # Go through added the data to the appropriate array col_count = (args_hash[:col_labels].length) - 1 row_count = (result.length / args_hash[:col_labels].length) - 1 (0..row_count).each do |row| (0..col_count).each do |col| new_result[args_hash[:col_labels][col]] << result[row * (col_count+1) + col] end end result = new_result end return result end end end # Provide global ability to pes def pes(*args) args_hash = args[0] Psi::global_task.pes(args_hash) do |disp| yield disp end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/propint.rb����������������������������������������������������������������������������0000644�0001015�0000765�00000002132�10660404375�013753� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ module Psi class Propint # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) # Save which task we are created by set_task task_obj # Override the psi_module_name set_psi_module_name "Cints" # Set the generic command for cints set_binary_command Psi::Commands::PROPINT end end # Add cints ability to the Task class class Task def propint(*args) # convert to a hash args_hash = args[0] # Create a new input object input_obj = Psi::Propint.new self # Form the input hash and generate the input file input_hash = { "wfn" => wavefunction, "reference" => reference } input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the input module, sending the input file as keyboard input puts "property integrals" input_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def deriv(*args) args_hash = args[0] Psi::global_task.propint(args_hash) end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/psi3.rb�������������������������������������������������������������������������������0000644�0001015�0000765�00000030041�10757651611�013142� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Global include file for Psi3 # Includes the basics to get you started # Other Ruby modules that are required require 'stringio' # Please note that not all the objects are given here. Any commands that communicate directly to # any Psi3 library function is implemented in the source for psirb. module Psi module SupportsAnalyticalGradients def supports_analytical_gradients true end end module NoAnalyticalGradients def supports_analytical_gradients false end end module Commands INPUT = "input" INPUTKEEP = "input --keepoutput" UINPUT = "input --chkptgeom" INPUTCHKPT = "input --keepchkpt --keepoutput" INIT = INPUT DONE = "psiclean" INTS = "cints" SCF = "cscf" LOCALIZE = "localize" DERIV = "cints --deriv1" DERIV2 = "cints --deriv2" PROPINT = "cints --oeprop" TRANSQT = "transqt" CCTRANS = "transqt2" BACKTRANSQT = "transqt --backtr" CPHF = "cphf" RESPONSE = "response" NORMCO = "normco" OEPROP = "oeprop" OPTKING = "optking" STABLE = "stable" CIS = "cis" UGEOM = "ugeom" CCSORT = "ccsort" CCRESET = "ccsort --reset" CCENERGY = "ccenergy" CCTRIPLES = "cctriples" CCHBAR = "cchbar" CCLAMBDA = "cclambda" CCEOM = "cceom" CCRESPONSE = "ccresponse" CCDENSITY = "ccdensity" MP2 = "mp2" DETCI = "detci" CCLAMBDA_EXCITED = "cclambda" CCLAMBDA_ZETA = "cclambda --zeta" CCDENSITY_CALC_XI = "ccdensity --calc_xi" CCDENSITY_USE_ZETA = "ccdensity --use_zeta" # --excited # Things for optimizations FINDIF_DISP_SYMM = "optking --disp_irrep --irrep 1" FINDIF_NEXT = "optking --disp_load" FINDIF_INPUT = "input --keepchkpt --chkptgeom --noreorient" FINDIF_ENERGY_SAVE = "optking --energy_save" FINDIF_GRAD_ENERGY = "optking --grad_energy" GEOMUPDATE = "optking --opt_step" # Things for frequencies FINDIF_DISP_FREQ_ENERGY_CART = "optking --disp_freq_energy_cart" FINDIF_FREQ_ENERGY_CART = "optking --freq_energy_cart" FINDIF_DISP_FREQ_GRAD_CART = "optking --disp_freq_grad_cart" FINDIF_GRAD_SAVE = "optking --grad_save" FINDIF_FREQ_GRAD_CART = "optking --freq_grad_cart" end # Access to the global task object. The first time it is retrieved the object is created. def self.global_task=(val) @global_task = val end def self.global_task if @global_task == nil # Creat the global task @global_task = Psi::Task.new end @global_task end def self.memory=(val) Psi::global_task.memory=val end def self.memory Psi::global_task.memory end def self.prefix=(val) Psi::global_task.prefix=val end def self.prefix Psi::global_task.prefix end def self.scratch=(val) Psi::global_task.scratch=val end def self.scratch Psi::global_task.scratch end def self.check_commands=(val) Psi::global_task.check_commands = val end def self.check_commands Psi::global_task.check_commands end def self.print_toc(unit) Psi::global_task.print_toc unit end def self.units=(val) Psi::global_task.units = val end def self.units Psi::global_task.units end # Routines to set active geometry, referred to only by Input def self.geometry=(val) Psi::global_task.geometry = val end def self.geometry Psi::global_task.geometry end # Routines to set active zmat, referred to only by Input def self.zmat=(val) Psi::global_task.zmat = val end def self.zmat Psi::global_task.zmat end # Routines to remember basis def self.basis=(val) Psi::global_task.basis = val end def self.basis Psi::global_task.basis end # Set the label def self.label=(val) Psi::global_task.label = val end def self.label Psi::global_task.label end # Set the label def self.wavefunction=(val) Psi::global_task.wavefunction = val end def self.wavefunction Psi::global_task.wavefunction end # Set the flag for analytical gradients def self.analytical_gradients=(val) Psi::global_task.analytical_gradients=val end def self.analytical_gradients Psi::global_task.analytical_gradients end # Set the global reference def self.reference=(val) Psi::global_task.reference = val end def self.reference Psi::global_task.reference end # Additions to the Task class class Task def check_commands=(val) @check_commands = val end def check_commands if @check_commands == nil @check_commands = false end @check_commands end def reference=(val) @reference = val end def reference if @reference == nil puts "Warning: Reference not set. Assuming RHF." return "RHF" end @reference end def wavefunction=(val) @wavefunction = val end def wavefunction if @wavefunction == nil # Was never set, assume SCF puts "Warning: Wavefunction not set. Assuming SCF." return "SCF" end @wavefunction end # What are the units for the geometry def units=(val) @units = val end def units if @units == nil return "angstroms" end @units end # Routines to set active geometry, referred to only by Input def geometry=(val) @geometry = val end def geometry @geometry end # Routines to set active zmat, referred to only by Input def zmat=(val) @zmat = val end def zmat @zmat end # Routines to remember basis def basis=(val) puts val.to_s @basis = val end def basis puts val.to_s @basis end # Set the label def label=(val) @label = val end def label @label end def gradients=(val) @gradients = val end def set_gradients(val) @gradients = val end def get_gradients @gradients end def gradients if @gradients == nil return false end @gradients end def second_deriv=(val) @second_deriv = val end def set_second_deriv(val) @second_deriv = val end def get_second_deriv @second_deriv end def second_deriv if @second_deriv == nil return false end @second_deriv end def set_optimization_complete(val) @optimization_complete = val end def get_optimization_complete if @optimization_complete == nil return false end @optimization_complete end # Memory is given in megabytes def get_memory if @memory == nil return 256 end @memory end def set_memory=(val) @memory=val end def memory=(val) @memory=val end def memory if @memory == nil return 256 end @memory end def self.create(*args) args_hash = args[0] t = Psi::Task.new args_hash if t == nil puts "Error: Unable to create Task object." exit 1 end if block_given? yield t else t end end end # of Task module InputGenerator def set_task(val) @task = val end def get_task @task end def set_psi_module_name(val) @psi_module_name = val end def get_psi_module_name if @psi_module_name == nil self.class.name.slice!(5..-1) else @psi_module_name end end def generate_value(item) result = StringIO.new("", "w") if item.kind_of?(Array) # Encompass an array with () result.printf "(" item.each do |x| sub_result = generate_value(x) result.printf(sub_result.string) end # close off the array result.puts ")" elsif item.kind_of?(Hash) item.each do |key,value| result.puts "#{key} = #{generate_value(value).string}" end elsif item.kind_of?(Symbol) # 1. Get the name of the symbol :name (without colon) and tack on a $ to the front # making it a global variable. # 2. eval the global variable for it's value value = eval("$" + item.id2name) result.printf "#{value.to_s} " else # Tell everything else to convert to a string result.printf "#{item.to_s} " end return result end def generate_scratch_input(input) # Make sure the scratch location stuff is included input.puts "psi:(" input.puts " files:(" input.puts " default:(" input.puts " nvolume=1" input.puts " volume1=\\\"#{@task.scratch}\\\"" input.puts " )" input.puts " file32: (nvolume=1 volume1=\\\"./\\\")" input.puts " )" input.puts ")" end # Set the input parameters that are needed to run the given psi module # Expects a hash containing properties to be set # { "jobtype" => "sp", "dertype" => "none" } # Uses the name of the encompassing class to name the module for psi3 input file def generate_input(input_hash) input = StringIO.new("", "w") # Generate file sections generate_scratch_input(input) # Begin the input input.puts "#{get_psi_module_name}:(" # Go through the hash and add entries into the input sub_result = generate_value(input_hash) input.puts(sub_result.string) # Put in the memory keyword input.puts "memory = (#{@task.get_memory} MB)" # Close off the input input.puts ")" return input end end module Executor def set_binary_command(binary) @program = binary end def get_binary_command @program end def execute_internal(input_file, binary=nil) puts "DEBUG: For #{binary} would have used:\n#{input_file.string}" if Psi::check_commands == true and binary != nil if Psi::check_commands == true and get_binary_command != nil puts "DEBUG: For #{get_binary_command} would have used:\n#{input_file.string}" end if Psi::check_commands != true prefix = "" prefix = "-p #{get_task.prefix}" if get_task.prefix != nil if binary != nil if Psi::quiet `echo "#{input_file.string}" | #{binary} #{prefix} -f - >& /dev/null` else `echo "#{input_file.string}" | #{binary} #{prefix} -f -` end elsif get_binary_command != nil if Psi::quiet `echo "#{input_file.string}" | #{get_binary_command} #{prefix} -f - >& /dev/null` else `echo "#{input_file.string}" | #{get_binary_command} #{prefix} -f -` end else puts "Error: Executor.execute: Unable to determine which module to run." exit 1 end # Check to see if the above line worked status = $? # Note for optking a specialized execute is needed if status != 0 puts "Module exited with an error." puts "Error code: #{status}" puts "Used:\n#{input_file.string}" exit 1 end end end # This function requires that InputGenerator be used def execute(input_hash, binary=nil) # Form the input file input_file = generate_input input_hash # execute the module execute_internal(input_file, binary) end end end require 'color' require 'input' require 'cints' require 'scf' require 'optking' require 'clean' require 'pes' require 'transqt' require 'ccsort' require 'ccenergy' require 'cctriples' require 'symbols' require 'chkpt' require 'mp2' require 'cchbar' require 'ccdensity' require 'cclambda' require 'oeprop' require 'deriv' require 'detci' require 'deriv2' require 'propint' require 'cphf' require 'frequencies' require 'cceom' if File.exist?( File.expand_path("~/.psi.rb")) load "~/.psi.rb" end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/scf.rb��������������������������������������������������������������������������������0000644�0001015�0000765�00000010337�10671261664�013045� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi scf module require 'pp' module Psi class SCF include InputGenerator include Executor # Which references does this method support def self.supports_analytic_gradients { "rhf" => true, "rohf" => true, "uhf" => true, "twocon" => true } end def self.supports_analytic_second_derivatives { "rhf" => true, "rohf" => false, "uhf" => false, "twocon" => false } end def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::SCF end end # Add scf ability to Task class Task def scf(*args) # convert to a hash args_hash = args[0] # Make sure cints is called if args_hash != nil if args_hash.has_key?(:ints) == false or (args_hash.has_key?(:ints) and args_hash[:ints] == true) ints("wfn" => "scf") end else ints("wfn" => "scf") end # Create a new scf object scf_obj = Psi::SCF.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the user overrode the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction else input_hash["wfn"] = args_hash["wfn"] end args_hash.delete("wfn") unless args_hash == nil # Check to see if the user gave the reference wavefunction. if it is given, do not use the # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference else input_hash["reference"] = args_hash["reference"] end args_hash.delete("reference") unless args_hash == nil # If we are doing analytical gradients then cscf needs to know if get_gradients == true and SCF.supports_analytic_gradients[reference] == true input_hash["dertype"] = "first" elsif get_second_deriv == true and SCF.supports_analytic_second_derivatives[reference] == true input_hash["dertype"] = "second" else input_hash["dertype"] = "none" end # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the scf module, sending the input file as keyboard input puts "scf" scf_obj.execute(input_hash) # Check to see if we are supposed to compute analytical gradients, only do if # 1. It is supported # 2. The user requested it # 3. The wavefunction is SCF if get_gradients == true and SCF.supports_analytic_gradients[reference] == true and wavefunction.casecmp("scf") == 0 # Make sure the wavefunction is set input_hash["wfn"] = "scf" deriv(input_hash) elsif get_second_deriv == true and SCF.supports_analytic_second_derivatives[reference] == true and wavefunction.casecmp("scf") == 0 # Make sure the wavefunction is set input_hash["wfn"] = "scf" transqt(input_hash) deriv2(input_hash) propint(input_hash) cphf(input_hash) end # Return the total energy to the user etot end def rhf(*args) # Convert to hash args_hash = args[0] # Set the Task reference to RHF # Must use @ sign here to access the instance variable, if we did reference then only # local variable is set @reference = "rhf" # Call scf scf(args_hash) end def rohf(*args) args_hash = args[0] # Set the Task reference to ROHF @reference = "rohf" # Call scf scf(args_hash) end def uhf(*args) args_hash = args[0] # Set the global reference to UHF @reference = "uhf" # Call scf scf(args_hash) end end end # Create some global functions # User can send additional input parameters to the function def scf(*args) # convert to a hash args_hash = args[0] Psi::global_task.scf(args_hash) end def rhf(*args) # Convert to hash args_hash = args[0] Psi::global_task.rhf(args_hash) end def rohf(*args) args_hash = args[0] Psi::global_task.rohf(args_hash) end def uhf(*args) args_hash = args[0] Psi::global_task.uhf(args_hash) end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/symbols.rb����������������������������������������������������������������������������0000644�0001015�0000765�00000001421�10667567037�013764� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Define atomic symbol constants to remove the need of using quotes around atoms HYDROGEN = H = "H" HELIUM = HE = "He" LITHIUM = LI = "LI" BERYLLIUM = BE = "BE" BORON = B = "B" CARBON = C = "C" NITROGEN = N = "N" OXYGEN = O = "O" FLUORINE = F = "F" NEON = NE = "Ne" SODIUM = NA = "Na" MAGNESIUM = MG = "Mg" ALUMINIUM = AL = "Al" SILICON = SI = "Si" PHOSPHORUS = P = "P" SULFUR = S = "S" CHLORINE = CL = "Cl" ARGON = AR = "Ar" POTASSIUM = K = "K" CALCIUM = CA = "Ca" SCANDIUM = SC = "Sc" TITANIUM = TI = "Ti" VANADIUM = V = "V" CHROMIUM = CR = "Cr" MANGANESE = MN = "Mn" IRON = FE = "Fe" COBALT = CO = "Co" NICKEL = NI = "Ni" COPPER = CU = "Cu" ZINC = ZN = "Zn" GALLIUM = GA = "Ga" GERMANIUM = GE = "Ge" ARSENIC = AS = "As" SELENIUM = SE = "Se" BROMINE = BR = "Br" KRYPTRON = KR = "Kr" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/testcases.rb��������������������������������������������������������������������������0000644�0001015�0000765�00000005511�10660061455�014260� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make sure color.rb is included require 'color' PSITEST_ETOL = 10e-8; # Default test criterion for energies PSITEST_ENUCTOL = 10e-10; # Check nuclear repulsion energy tighter than other energies def test_scf_energy(expected) retcode = 0 # Make sure SCF is in the checkpoint if Psi::Chkpt::exist?("SCF energy") if (Psi::Chkpt::escf - expected).abs < PSITEST_ETOL puts "SCF final energy: " + green("PASSED") else puts "SCF final energy: " + red("FAILED") puts "Obtained: #{Psi::Chkpt::escf}" puts "Expected: #{expected}" retcode = 1 end else puts red("Error: ") + "SCF energy not found in checkpoint." retcode = 1 end return retcode end def test_ccsd_energy(expected) retcode = 0 # Make sure CCSD is in the checkpoint if Psi::Chkpt::exist?("CCSD Energy") if (Psi::Chkpt::eccsd - expected).abs < PSITEST_ETOL puts "CCSD final energy: " + green("PASSED") else puts "CCSD final energy: " + red("FAILED") puts "Obtained: #{Psi::Chkpt::eccsd}" puts "Expected: #{expected}" retcode = 1 end else puts red("Error: ") + "CCSD energy not found in checkpoint." retcode = 1 end return retcode end def test_t_energy(expected) retcode = 0 # Make sure (T) is in the checkpoint if Psi::Chkpt::exist?("(T) Energy") if (Psi::Chkpt::e_t - expected).abs < PSITEST_ETOL puts "(T) final energy: " + green("PASSED") else puts "(T) final energy: " + red("FAILED") puts "Obtained: #{Psi::Chkpt::e_t}" puts "Expected: #{expected}" retcode = 1 end else puts red("Error: ") + "(T) energy not found in checkpoint." retcode = 1 end return retcode end def test_nuclear_repulsion(expected) retcode = 0 # Make sure it is found in the checkpoint if Psi::Chkpt::exist?("Nuclear rep. energy") if (Psi::Chkpt::enuc - expected).abs < PSITEST_ENUCTOL puts "Nuclear repulsion energy: " + green("PASSED") else puts "Nuclear repulsion energy: " + red("FAILED") puts "Obtained: #{Psi::Chkpt::enuc}" puts "Expected: #{expected}" retcode = 1 end else puts red("Error:") + "Nuclear repulsion energy not found in checkpoint." retcode = 1 end return retcode end def test_total_energy(expected) retcode = 0 # Make sure it is found in the checkpoint if Psi::Chkpt::exist?("Total energy") if (Psi::Chkpt::etot - expected).abs < PSITEST_ETOL puts "Total energy: " + green("PASSED") else puts "Total energy: " + red("FAILED") puts "Obtained: #{Psi::Chkpt::etot}" puts "Expected: #{expected}" retcode = 1 end else puts red("Error:") + "Total energy not found in checkpoint." retcode = 1 end return retcode end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/lib/ruby/transqt.rb����������������������������������������������������������������������������0000644�0001015�0000765�00000003271�10655133047�013760� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handle access to Psi scf module module Psi class TransQT # Mixin the InputGenerator include InputGenerator include Executor def initialize(task_obj) @task = task_obj # Set the generic command for this class set_binary_command Psi::Commands::TRANSQT end end # Add transqt ability to Task class Task def transqt(*args) # convert to a hash args_hash = args[0] # Create a new scf object transqt_obj = Psi::TransQT.new self # Form the input hash and generate the input file input_hash = { } # Check to see if the function arguments have the reference, if so use it, otherwise use # global setting if args_hash == nil or args_hash.has_key?("reference") == false input_hash["reference"] = reference end # Check the wavefunction if args_hash == nil or args_hash.has_key?("wfn") == false input_hash["wfn"] = wavefunction end # Are we doing a back transformation? if args_hash != nil and args_hash.has_key?(:backtr) and args_hash[:backtr] == true transqt_obj.set_binary_command Psi::Commands::BACKTRANSQT end args_hash.delete(:backtr) unless args_hash == nil # Merge what we've done with what the user wants input_hash = input_hash.merge(args_hash) unless args_hash == nil # Run the scf module, sending the input file as keyboard input puts "transqt" transqt_obj.execute(input_hash) end end end # Create some global functions # User can send additional input parameters to the function def transqt(*args) # convert to a hash args_hash = args[0] Psi::global_task.transqt(args_hash) end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/LICENSE����������������������������������������������������������������������������������������0000644�0001015�0000765�00000043070�07724542761�011230� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) 19yy <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/Makefile.in������������������������������������������������������������������������������������0000644�0001015�0000765�00000004232�11100440730�012235� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SHELL = /bin/sh .PHONY: default all install install_man install_inc install_host depend clean dclean targetclean tests testsclean doc default: all subdirs = lib include src top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ top_objdir = . prefix = @prefix@ scriptdir = $(prefix)/bin MKDIRS = @MKDIRS@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ all: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making in $${dir} && $(MAKE) all) || exit 1; \ done install: install_host for dir in $(subdirs); \ do \ (cd $${dir} && echo Making install in $${dir} && $(MAKE) install) || exit 1; \ done install_inc: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making install in $${dir} && $(MAKE) install_inc) || exit 1; \ done install_man: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making install in $${dir} && $(MAKE) install_man) || exit 1; \ done depend: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making depend in $${dir} && $(MAKE) depend) || exit 1; \ done clean: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making clean in $${dir} && $(MAKE) clean) || exit 1; \ done dclean: for dir in $(subdirs); \ do \ (cd $${dir} && echo Making dclean in $${dir} && $(MAKE) dclean) || exit 1; \ done targetclean: for dir in $(subdirs) tests doc; \ do \ (cd $${dir} && echo Making clean in $${dir} && $(MAKE) targetclean) || exit 1; \ done tests: (cd tests && echo Running test suite... && $(MAKE)) || exit 1; testsclean: (cd tests && echo Cleaning test suite... && $(MAKE) clean) || exit 1; doc: (cd doc && echo Building documentation... && $(MAKE)) || exit 1; $(top_srcdir)/configure: $(top_srcdir)/configure.ac $(top_srcdir)/aclocal.m4 cd $(top_srcdir) && autoconf $(top_objdir)/config.status: $(top_srcdir)/configure cd $(top_objdir) && ./config.status --recheck Makefile: $(srcdir)/Makefile.in $(top_objdir)/config.status cd $(top_objdir) && CONFIG_FILES=Makefile ./config.status ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/misc/������������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111672�011134� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/misc/export_trunk.pl���������������������������������������������������������������������������0000755�0001015�0000765�00000010254�11012340353�014232� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # # Prepare PSI code for shipment to non-developer parties # Edward Valeev (evaleev at vt.edu) 2008 # my $svnurl = "https://sirius.chem.vt.edu/svn/psi3/trunk"; my $debug = 0; my $nargs = $#ARGV; usage() if ( $nargs < 0 || $nargs > 1 ); my $make_patch = ( $nargs == 1 ); my $rev1 = shift; my $rev2 = shift if ($make_patch); # if asked for HEAD, determine the actual revision number from the repository if ( $rev1 eq "HEAD" ) { $_ = `svn info $svnurl | grep 'Revision:'`; chomp; my @tokens = split; $rev1 = $tokens[1]; } die "REV1 <= REV2" if ( $rev1 <= $rev2 ); my $dirname1 = checkout($rev1); if ($make_patch) { my $dirname2 = checkout($rev2); make_patch($dirname1,$dirname2); } else { make_tgz($dirname1); } exit; 0; sub usage() { printf STDOUT "Usage: export_trunk.pl REV1 [REV2]\n"; printf STDOUT "where: REV1 -- the target revision to export (numeric revision specifier or HEAD)\n"; printf STDOUT " REV2 (optional) -- if specified, create a patch file that brings REV2 to REV1 (REV1 must be greater than REV2)\n"; } sub checkout() { my $rev = shift; my $briefdirname = "psi3-r$rev"; system("rm -rf $briefdirname"); system("svn export -r $rev $svnurl $briefdirname"); # extract psi version and buildid from checked-out configure.ac my $version; my $buildid; { $_ = `grep psi_version $briefdirname/configure.ac | grep define`; chomp; s/\[/ /g; s/\]/ /g; my @tokens = split; $version = $tokens[3]; $_ = `grep psi_buildid $briefdirname/configure.ac | grep define`; chomp; s/\[/ /g; s/\]/ /g; @tokens = split; $buildid = $tokens[3]; } print "Working on: psi3 version $version buildid $buildid revision $rev\n"; # form the full name and rename the directory my $dirname = "psi-$version-$buildid-r$rev"; system("mv $briefdirname $dirname"); # sanitize sanitize($dirname); # prepare for build system("(cd $dirname; autoconf; rm -rf autom4te.cache)"); return $dirname; } sub make_tgz() { my $dirname = shift; # make .tgz system("rm -rf $dirname.tar.gz"); system("tar cvzf $dirname.tar.gz $dirname"); system("rm -rf $dirname"); print "Prepared $dirname.tar.gz\n"; } sub make_patch() { my $dirname1 = shift; my $dirname2 = shift; my ($version1,$buildid1,$rev1) = parse_dirname($dirname1); my ($version2,$buildid2,$rev2) = parse_dirname($dirname2); my $patchname = "psi-patch-$rev2-to-$rev1"; system("rm -rf $patchname"); system("diff -Naur $dirname2 $dirname1 > $patchname"); system("rm -rf $dirname1 $dirname2"); print "Prepared $patchname\n"; } sub parse_dirname() { my $dirname = shift; my ($psi, $version, $buildid, $rrev) = split /-/, $dirname; return ($version, $buildid, $rrev); } # # Rip out pieces not ready for distribution # sub sanitize() { my $dirname = shift; system("rm -rf $dirname/misc"); my @binaries = ( "psimrcc", "mcscf", "nonbonded" ); my @libraries = (); my @tests = ( "psimrcc-sp1", "mcscf-rhf1", "mcscf-rohf1", "mcscf-twocon1", "scf+d-opt1" ); foreach my $bin (@binaries) { system("rm -rf $dirname/src/bin/$bin"); system("sed s/$bin// < $dirname/src/bin/Makefile.in > tmp.in"); system("mv tmp.in $dirname/src/bin/Makefile.in"); # assuming that each entry in AC_CONFIG_FILES is on its own line system( "cat $dirname/configure.ac | grep -v 'src/bin/$bin/Makefile' > tmp.ac" ); system("mv tmp.ac $dirname/configure.ac"); } foreach my $lib (@libraries) { system("rm -rf $dirname/src/lib/$lib"); system("sed s/$lib// < $dirname/src/lib/Makefile.in > tmp.in"); system("mv tmp.in $dirname/src/lib/Makefile.in"); # assuming that each entry in AC_CONFIG_FILES is on its own line system( "cat $dirname/configure.ac | grep -v 'src/lib/$lib/Makefile' > tmp.ac" ); system("mv tmp.ac $dirname/configure.ac"); } foreach my $test (@tests) { system("rm -rf $dirname/tests/$test"); system("sed s/$test// < $dirname/tests/Makefile.in > tmp.in"); system("mv tmp.in $dirname/tests/Makefile.in"); # assuming that each entry in AC_CONFIG_FILES is on its own line system( "cat $dirname/configure.ac | grep -v 'tests/$test/Makefile' > tmp.ac" ); system("mv tmp.ac $dirname/configure.ac"); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/misc/g94_2_PSI3��������������������������������������������������������������������������������0000755�0001015�0000765�00000010510�07775210632�012512� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl ############################################################################## # # BASIS SET FORMAT CONVERTER - GAUSSIAN_94 TO PSI_3 # ############################################################################### # # Used to convert a basis set formatted according to Gaussian 94 rules to # to the Psi 3 format. Reads g94 basis set from STDIN and prints out to STDOUT # # Usage: g94_2_PSI3 < input_file_name > output_file_name # g94_2_PSI3 STDIN STDOUT # ############################################################################## # # NJD (11/22/03) added all atom names up until Radium, then common elements # after that. If you need to add more, check element names with canonical index # in /src/bin/input/init_elem_names.c # Fixed for Linux perl # # BT(11/22/03) Modified for version of perl in Redhat 9.0 (%lf identifier # changed to %f for formatted printing) # # Psi 3 needs full element names rather than element symbols %elemname = ( G => GHOST, H => HYDROGEN, HE => HELIUM, LI => LITHIUM, BE => BERYLLIUM, B => BORON, C => CARBON, N => NITROGEN, O => OXYGEN, F => FLUORINE, NE => NEON, NA => SODIUM, MG => MAGNESIUM, AL => ALUMINUM, SI => SILICON, P => PHOSPHORUS, S => SULFUR, CL => CHLORINE, AR => ARGON, K => POTASSIUM, CA => CALCIUM, SC => SCANDIUM, TI => TITANIUM, V => VANADIUM, CR => CHROMIUM, MN => MANGANESE, FE => IRON, CO => COBALT, NI => NICKEL, CU => COPPER, ZN => ZINC, GA => GALLIUM, GE => GERMANIUM, AS => ARSENIC, SE => SELENIUM, BR => BROMINE, KR => KRYPTON, RB => RUBIDIUM, SR => STRONTIUM, Y => YTTRIUM, ZR => ZIRCONIUM, NB => NIOBIUM, MO => MOLYBDENUM, TE => TECHNETIUM, RU => RUTHENIUM, RH => RHODIUM, PD => PALLADIUM, AG => SILVER, CD => CADMIUM, IN => INDIUM, SN => TIN, SB => ANTIMONY, TE => TELLURIUM, I => IODINE, XE => XENON, CS => CESIUM, BA => BARIUM, LA => LANTHANUM, CE => CERIUM, PR => PRASEODYMIUM, ND => NEODYMIUM, PM => PROMETHIUM, SM => SAMARIUM, EU => EUROPIUM, GD => GADOLINIUM, TB => TERBIUM, DY => DYSPROSIUM, HO => HOLMIUM, ER => ERBIUM, TM => THULIUM, YB => YTTERBIUM, LU => LUTETIUM, HF => HAFNIUM, TA => TANATLUM, W => TUNGSTEN, RE => RHENIUM, OS => OSMIUM, IR => IRIDIUM, PT => PLATINUM, AU => GOLD, HG => MERCURY, TL => THALLIUM, PB => LEAD, BI => BISMUTH, PO => POLONIUM, AT => ASTATINE, RN => RADON, FR => FRANCIUM, RA => RADIUM, U => URANIUM, NP => NEPTUNIUM, PU => PLUTONIUM, ); # Find the first line containing BASIS keyword and parse basis name BASIS: while (<STDIN>) { # Skip all lines until the first containing BASIS keyword ( !/BASIS|Basis|basis/) && next BASIS; ($scr, $basisname) = split "\""; last BASIS; } # Parse element name, contractions and primitives MAIN: while (<STDIN>) { # Grab the element symbol and transform it to the standard # Psi 3 full element name ($elemsymb, $junk) = split " "; $elemsymb eq "" && last MAIN; $elemsymb =~ tr/[a-z]/[A-Z]/; print "$elemname{$elemsymb}:\"$basisname\" = (\n"; # Loop over each contraction CONTR: while (<STDIN>) { /\*\*\*\*/ && last CONTR; ($am, $num_prim, $junk) = split " "; # Split SP contractions to S and P contractions # Print in PSI 3 format if ($am =~ /SP/) { $num_prim2=$num_prim; # Read in each primitive print "\n (S "; for($i=0; $i<$num_prim; $i++) { ($exp[$i], $s_coeff[$i], $p_coeff[$i] ) = split " ", <STDIN>; printf " ( %20.10f %20.10f)", $exp[$i],$s_coeff[$i]; $i != $num_prim - 1 && print "\n "; } print ")"; print "\n (P "; for($i=0; $i<$num_prim2; $i++) { printf " ( %20.10f %20.10f)", $exp[$i],$p_coeff[$i]; $i != $num_prim - 1 && print "\n "; } print ""; } # Print the other contractions in PSI 3 format else{ print "\n ($am "; # Read in each primitive for ($i=0; $i<$num_prim; $i++) { ($exp, $coeff) = split " ", <STDIN>; printf " ( %20.10f %20.10f)", $exp,$coeff; $i != $num_prim - 1 && print "\n "; } } print ")"; # close contraction } print ")\n\n"; # close basis set } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/misc/psi3.spec���������������������������������������������������������������������������������0000644�0001015�0000765�00000006603�07717044114�012700� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Summary: PSI Quantum Chemical Program Suite Name: psi Version: 3 Release: 2 Copyright: Virginia Tech., Georgia Tech., and others Group: Applications/Scientific Source: ftp://sirius.chem.vt.edu/psi3/psi-3.2.tgz URL: http://www.psicode.org/ Vendor: Virginia Tech. Packager: T. Daniel Crawford <crawdad@vt.edu> %description: The PSI3 quantum chemistry package is designed to compute properties of small molecules using high-level ab initio techniques. %prep %setup %build ./configure make %install make install %files /usr/local/bin/ccdensity /usr/local/bin/ccenergy /usr/local/bin/cceom /usr/local/bin/cchbar /usr/local/bin/cclambda /usr/local/bin/ccresponse /usr/local/bin/ccsort /usr/local/bin/cctriples /usr/local/bin/cints /usr/local/bin/cis /usr/local/bin/clag /usr/local/bin/cphf /usr/local/bin/cscf /usr/local/bin/detcas /usr/local/bin/detcasman /usr/local/bin/detci /usr/local/bin/extrema /usr/local/bin/geom /usr/local/bin/input /usr/local/bin/localize /usr/local/bin/mocube /usr/local/bin/mp2 /usr/local/bin/mp2r12 /usr/local/bin/oeprop /usr/local/bin/optking /usr/local/bin/psi2molden /usr/local/bin/psi3 /usr/local/bin/psiclean /usr/local/bin/response /usr/local/bin/stable /usr/local/bin/tocprint /usr/local/bin/transqt /usr/local/share/pbasis.dat /usr/local/share/psi.dat /usr/local/man/man1/ccenergy.1 /usr/local/man/man1/cceom.1 /usr/local/man/man1/cints.1 /usr/local/man/man1/clag.1 /usr/local/man/man1/cscf.1 /usr/local/man/man1/cphf.1 /usr/local/man/man1/detcas.1 /usr/local/man/man1/detcasman.1 /usr/local/man/man1/detci.1 /usr/local/man/man1/geom.1 /usr/local/man/man1/input.1 /usr/local/man/man1/mocube.1 /usr/local/man/man1/mp2.1 /usr/local/man/man1/mp2r12.1 /usr/local/man/man1/oeprop.1 /usr/local/man/man1/optking.1 /usr/local/man/man1/psi3.1 /usr/local/man/man1/psiclean.1 /usr/local/man/man1/tocprint.1 /usr/local/man/man1/transqt.1 %doc /usr/local/doc/html/cints.html %doc /usr/local/doc/html/CINTS/home.html %doc /usr/local/doc/html/CINTS/commandline.html %doc /usr/local/doc/html/CINTS/description.html %doc /usr/local/doc/html/CINTS/references.html %doc /usr/local/doc/html/CINTS/compile.html %doc /usr/local/doc/html/CINTS/examples.html %doc /usr/local/doc/html/CINTS/keywords.html %doc /usr/local/doc/html/CINTS/toc.html %doc /usr/local/doc/html/userman/contents.png %doc /usr/local/doc/html/userman/img1.png %doc /usr/local/doc/html/userman/img2.png %doc /usr/local/doc/html/userman/img3.png %doc /usr/local/doc/html/userman/img4.png %doc /usr/local/doc/html/userman/img5.png %doc /usr/local/doc/html/userman/img6.png %doc /usr/local/doc/html/userman/img7.png %doc /usr/local/doc/html/userman/img8.png %doc /usr/local/doc/html/userman/next_g.png %doc /usr/local/doc/html/userman/prev.png %doc /usr/local/doc/html/userman/next.png %doc /usr/local/doc/html/userman/up_g.png %doc /usr/local/doc/html/userman/prev_g.png %doc /usr/local/doc/html/userman/up.png %doc /usr/local/doc/html/userman/index.html %doc /usr/local/doc/html/userman/node1.html %doc /usr/local/doc/html/userman/node2.html %doc /usr/local/doc/html/userman/node3.html %doc /usr/local/doc/html/userman/node4.html %doc /usr/local/doc/html/userman/node5.html %doc /usr/local/doc/html/userman/node6.html %doc /usr/local/doc/html/userman/node7.html %doc /usr/local/doc/html/userman/node8.html %doc /usr/local/doc/html/userman/node9.html %doc /usr/local/doc/html/userman/userman.html %doc /usr/local/doc/html/userman/userman.css %doc /usr/local/doc/ps/userman.ps �����������������������������������������������������������������������������������������������������������������������������psi3/misc/PsiElementData.nb�������������������������������������������������������������������������0000644�0001015�0000765�00001601704�11112535552�014325� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 6.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 459494, 7431] NotebookOptionsPosition[ 458342, 7393] NotebookOutlinePosition[ 458679, 7408] CellTagsIndexPosition[ 458636, 7405] WindowFrame->Normal ContainsDynamic->False*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell["Create masses.h using online isotope data from wolfram.com", "Title", CellChangeTimes->{{3.4135852563406*^9, 3.413585275286303*^9}, { 3.41358542206135*^9, 3.41358546024609*^9}}], Cell["Author : Martin Torheyden (mtorhey at vt period edu)", "Subsubtitle", CellChangeTimes->{{3.413585547167658*^9, 3.413585566334443*^9}}], Cell["\<\ The sources of data are described at \ http://reference.wolfram.com/mathematica/note/IsotopeDataSourceInformation.\ html The sources of data as listed on March 3, 2008: Atomic Mass Data Center.\"NUBASE.\" 2003. \[RightGuillemet] Firestone, R.B.\"The Berkeley Laboratory Isotopes Project's: Exploring the \ Table of Isotopes.\" 2000. \[RightGuillemet] Raghavan, P.\"Table of Nuclear Moments.\" Atomic Data and Nuclear Data Tables \ 42, no.2 (1989) : 189 - 291. Sansonetti, J.E.and W.C.Martin.\"NIST Handbook of Basic Atomic Spectroscopic \ Data.\" 2005. \[RightGuillemet] United States National Institute of Standards and Technology.\"Atomic Weights \ and Isotopic Compositions Elements.\" 2005. \[RightGuillemet] United States National Nuclear Data Center, Brookhaven National \ Laboratory.\"Nuclear Wallet Cards\" 2007. \[RightGuillemet] United States National Nuclear Data Center, Brookhaven National \ Laboratory.\"NuDat 2.3.\" 2007. \[RightGuillemet]\ \>", "Text", CellChangeTimes->{{3.413585477583881*^9, 3.413585533365624*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{ RowBox[{"extractPsiSymbol", "[", "isotopesymbol_", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"chemsymb", ",", "massnumber", ",", "psisymbol"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"chemsymb", "=", RowBox[{"ToUpperCase", "[", RowBox[{"isotopesymbol", "[", RowBox[{"[", RowBox[{"1", ",", "2"}], "]"}], "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"massnumber", "=", RowBox[{"isotopesymbol", "[", RowBox[{"[", RowBox[{"1", ",", "1", ",", "2"}], "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"psisymbol", "=", RowBox[{"StringJoin", "[", RowBox[{"chemsymb", ",", RowBox[{"ToString", "[", "massnumber", "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "psisymbol", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getIsotopeData", "[", "atomname_", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{ "atomsymbol", ",", "isotopename", ",", "i", ",", "isotopesymbol", ",", "psisymbol", ",", "isotopemass", ",", "isotopeabundance", ",", "isotopeHalfLife", ",", "isotopedata"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"atomsymbol", "=", RowBox[{"ToUpperCase", "[", RowBox[{"ElementData", "[", RowBox[{"atomname", ",", "\"\<Symbol\>\""}], "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<atomsymbol=\>\"", ",", "atomsymbol"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopename", "=", RowBox[{"IsotopeData", "[", "atomname", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopedata", "=", RowBox[{"{", RowBox[{"atomsymbol", ",", RowBox[{"{", "}"}]}], "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopename", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopesymbol", "=", RowBox[{"IsotopeData", "[", RowBox[{ RowBox[{"isotopename", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<Symbol\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopesymbol=\>\"", ",", "isotopesymbol"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"psisymbol", "=", RowBox[{"extractPsiSymbol", "[", "isotopesymbol", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<psisymbol=\>\"", ",", "psisymbol"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopemass", "=", RowBox[{"IsotopeData", "[", RowBox[{ RowBox[{"isotopename", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<AtomicMass\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopemass=\>\"", ",", "isotopemass"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopeabundance", "=", RowBox[{"IsotopeData", "[", RowBox[{ RowBox[{"isotopename", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<IsotopeAbundance\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopeabundance=\>\"", ",", "isotopeabundance"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopeHalfLife", "=", RowBox[{"IsotopeData", "[", RowBox[{ RowBox[{"isotopename", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<HalfLife\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopeHalfLife=\>\"", ",", "isotopeHalfLife"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"NumberQ", "[", "isotopemass", "]"}], "&&", RowBox[{"NumberQ", "[", "isotopeabundance", "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"isotopedata", "[", RowBox[{"[", "2", "]"}], "]"}], "=", RowBox[{"Append", "[", RowBox[{ RowBox[{"isotopedata", "[", RowBox[{"[", "2", "]"}], "]"}], ",", RowBox[{"{", RowBox[{ "psisymbol", ",", "isotopemass", ",", "isotopeabundance", ",", "isotopeHalfLife"}], "}"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopedata=\>\"", ",", "isotopedata"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"Return", "[", "isotopedata", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getIsotopes", "[", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"atomname", ",", "atomsymbol", ",", "i", ",", "isotopes"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"atomname", "=", RowBox[{"ElementData", "[", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<atomname=\>\"", ",", "atomname"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopes", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "atomname", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"getIsotopeData", "[", RowBox[{"atomname", "[", RowBox[{"[", "i", "]"}], "]"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopes", "=", RowBox[{"Append", "[", RowBox[{"isotopes", ",", RowBox[{"getIsotopeData", "[", RowBox[{"atomname", "[", RowBox[{"[", "i", "]"}], "]"}], "]"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "isotopes", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"InsertListintoListofLists", "[", RowBox[{"OldlistofLists_List", ",", "ToInsert_List", ",", "pos_"}], "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"NewlistofLists", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"NewlistofLists", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"pos", "-", "1"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"NewlistofLists", "=", RowBox[{"Append", "[", RowBox[{"NewlistofLists", ",", RowBox[{"OldlistofLists", "[", RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"NewlistofLists", "=", RowBox[{"Append", "[", RowBox[{"NewlistofLists", ",", "ToInsert"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "pos"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "OldlistofLists", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"NewlistofLists", "=", RowBox[{"Append", "[", RowBox[{"NewlistofLists", ",", RowBox[{"OldlistofLists", "[", RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "NewlistofLists", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"isstableIsotope", "[", "isotope_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"isstable", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isstable", "=", "False"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotope", "[", RowBox[{"[", "2", "]"}], "]"}], "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "i", ",", "4"}], "]"}], "]"}], "===", "Infinity"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isstable", "=", "True"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "isstable", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"isnaturallyoccurringIsotope", "[", "isotope_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"sum", ",", "isnaturallyoccurring", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"sum", "=", "0.0"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotope", "[", RowBox[{"[", "2", "]"}], "]"}], "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"sum", "=", RowBox[{"sum", "+", RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "i", ",", "3"}], "]"}], "]"}]}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<sum=\>\"", ",", "sum"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"sum", ">", "0.1"}], ",", "\[IndentingNewLine]", RowBox[{"isnaturallyoccurring", "=", "True"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isnaturallyoccurring", "=", "False"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "isnaturallyoccurring", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getMostStableIsotope", "[", "isotope_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"moststableindex", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"moststableindex", "=", "1"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "2"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotope", "[", RowBox[{"[", "2", "]"}], "]"}], "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "i", ",", "4"}], "]"}], "]"}], ">", RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "moststableindex", ",", "4"}], "]"}], "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"moststableindex", "=", "i"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "moststableindex"}], "]"}], "]"}], "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getMostAbundantIsotope", "[", "isotope_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"mostabundantindex", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostabundantindex", "=", "1"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "2"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotope", "[", RowBox[{"[", "2", "]"}], "]"}], "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "i", ",", "3"}], "]"}], "]"}], ">", RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "mostabundantindex", ",", "3"}], "]"}], "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostabundantindex", "=", "i"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", RowBox[{"isotope", "[", RowBox[{"[", RowBox[{"2", ",", "mostabundantindex"}], "]"}], "]"}], "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getMostCommonIsotope", "[", "isotope_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", "mostcommonisotope", "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"isnaturallyoccurringIsotope", "[", "isotope", "]"}], ",", "\[IndentingNewLine]", RowBox[{"mostcommonisotope", "=", RowBox[{"getMostAbundantIsotope", "[", "isotope", "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostcommonisotope", "=", RowBox[{"getMostStableIsotope", "[", "isotope", "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "mostcommonisotope", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getTotalNumberofIsotopes", "[", "isotopes_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"i", ",", "numofisotopes"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"numofisotopes", "=", "0"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopes", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"numofisotopes", "=", RowBox[{"numofisotopes", "+", RowBox[{"Length", "[", RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}], "]"}]}]}], ";"}]}], "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{ RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}], ",", "\"\< Number of isotopes =\>\"", ",", RowBox[{"Length", "[", RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}], "]"}]}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "numofisotopes", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getMostCommonIsotopeMassList", "[", "isotopes_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"masslist", ",", "i"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"masslist", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", " ", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopes", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"masslist", "=", RowBox[{"Append", "[", RowBox[{"masslist", ",", RowBox[{"{", RowBox[{ RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}], ",", RowBox[{ RowBox[{"getMostCommonIsotope", "[", RowBox[{"isotopes", "[", RowBox[{"[", "i", "]"}], "]"}], "]"}], "[", RowBox[{"[", "2", "]"}], "]"}]}], "}"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", "masslist", "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"Return", "[", "masslist", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"getIsotopeMassList", "[", "isotopes_List", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{"masslist", ",", "i", ",", "j", ",", "mostcommonisotope"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"masslist", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", " ", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopes", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostcommonisotope", "=", RowBox[{"getMostCommonIsotope", "[", RowBox[{"isotopes", "[", RowBox[{"[", "i", "]"}], "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"masslist", "=", RowBox[{"Append", "[", RowBox[{"masslist", ",", RowBox[{"{", RowBox[{ RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}], ",", RowBox[{"mostcommonisotope", "[", RowBox[{"[", "2", "]"}], "]"}]}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"j", "=", "1"}], ",", RowBox[{"j", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}], "]"}]}], ",", RowBox[{"j", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"masslist", "=", RowBox[{"Append", "[", RowBox[{"masslist", ",", RowBox[{"{", RowBox[{ RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "2", ",", "j", ",", "1"}], "]"}], "]"}], ",", RowBox[{"isotopes", "[", RowBox[{"[", RowBox[{"i", ",", "2", ",", "j", ",", "2"}], "]"}], "]"}]}], "}"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", "masslist", "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<Length[masslist]=\>\"", ",", RowBox[{"Length", "[", "masslist", "]"}]}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"Return", "[", "masslist", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{ RowBox[{"createIsotopeAliases", "[", RowBox[{"isotopes_List", ",", "aliases_List"}], "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{ "i", ",", "j", ",", "k", ",", "subst", ",", "isot", ",", "isotopesnew"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopesnew", "=", "isotopes"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "aliases", "]"}]}], ",", RowBox[{"i", "++"}], ",", " ", RowBox[{"(*", " ", RowBox[{"loop", " ", "over", " ", "different", " ", "aliases"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"For", "[", RowBox[{ RowBox[{"j", "=", "1"}], ",", RowBox[{"j", "\[LessEqual]", RowBox[{"Length", "[", "isotopesnew", "]"}]}], ",", " ", RowBox[{"j", "++"}], ",", " ", RowBox[{"(*", " ", RowBox[{ "loop", " ", "over", " ", "different", " ", "atomtypes"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"For", "[", RowBox[{ RowBox[{"k", "=", "1"}], ",", RowBox[{"k", "\[LessEqual]", RowBox[{"Length", "[", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2"}], "]"}], "]"}], "]"}]}], ",", RowBox[{"k", "++"}], ",", " ", RowBox[{"(*", " ", RowBox[{ "loop", " ", "over", " ", "different", " ", "isotopesnew"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2", ",", "k"}], "]"}], "]"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"aliases", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}], "===", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2", ",", "k", ",", "1"}], "]"}], "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isot", "=", RowBox[{"isotopesnew", "[", RowBox[{"[", "j", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isot=\>\"", ",", "isot"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"subst", "=", RowBox[{"{", RowBox[{ RowBox[{"aliases", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}], ",", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2", ",", "k", ",", "2"}], "]"}], "]"}], ",", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2", ",", "k", ",", "3"}], "]"}], "]"}], ",", RowBox[{"isotopesnew", "[", RowBox[{"[", RowBox[{"j", ",", "2", ",", "k", ",", "4"}], "]"}], "]"}]}], "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<subst=\>\"", ",", "subst"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", " ", RowBox[{ RowBox[{"isot", "[", RowBox[{"[", "2", "]"}], "]"}], "=", RowBox[{"InsertListintoListofLists", "[", RowBox[{ RowBox[{"isot", "[", RowBox[{"[", "2", "]"}], "]"}], ",", "subst", ",", RowBox[{"k", "+", "1"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isot=\>\"", ",", "isot"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"isotopesnew", "=", RowBox[{"Drop", "[", RowBox[{"isotopesnew", ",", RowBox[{"{", "j", "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopesnew", "=", RowBox[{"InsertListintoListofLists", "[", RowBox[{"isotopesnew", ",", "isot", ",", "j"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopesnew[[j]]=\>\"", ",", RowBox[{"isotopesnew", "[", RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"j", "=", RowBox[{"j", "+", "1"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "isotopesnew", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"printPsiElementData", "[", "]"}], ":=", RowBox[{"Module", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"{", RowBox[{ "isotopes", ",", "mostcommonisotopemasslist", ",", "isotopemasslist", ",", "mostcommonisotopemasslistLabels", ",", "mostcommonisotopemasslistValues", ",", "isotopemasslistLabels", ",", "isotopemasslistValues", ",", "i", ",", "j", ",", "labelstoberemoved"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopes", "=", RowBox[{"getIsotopes", "[", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopes", "=", RowBox[{"createIsotopeAliases", "[", RowBox[{"isotopes", ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\"\<H2\>\"", ",", "\"\<D\>\""}], "}"}], ",", RowBox[{"{", RowBox[{"\"\<H3\>\"", ",", "\"\<T\>\""}], "}"}]}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopes", "=", RowBox[{"InsertListintoListofLists", "[", RowBox[{"isotopes", ",", RowBox[{"{", RowBox[{"\"\<X\>\"", ",", RowBox[{"{", RowBox[{"{", RowBox[{ "\"\<X0\>\"", ",", "0.0000", ",", "1.0", ",", "Infinity"}], "}"}], "}"}]}], "}"}], ",", "1"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"mostcommonisotopemasslist", "=", RowBox[{"getMostCommonIsotopeMassList", "[", "isotopes", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{ "\"\<mostcommonisotopemasslist=\>\"", ",", "mostcommonisotopemasslist"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", RowBox[{"isotopemasslist", "=", RowBox[{"getIsotopeMassList", "[", "isotopes", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", " ", RowBox[{ "Isotope", " ", "X", " ", "and", " ", "X0", " ", "should", " ", "not", " ", "be", " ", "in", " ", "the", " ", "isotopemasslist"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"labelstoberemoved", "=", RowBox[{"{", RowBox[{"\"\<X\>\"", ",", "\"\<X0\>\""}], "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length before X removal = \>\"", ",", RowBox[{"Length", "[", "isotopemasslist", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"j", "=", "1"}], ",", RowBox[{"j", "\[LessEqual]", RowBox[{"Length", "[", "labelstoberemoved", "]"}]}], ",", " ", RowBox[{"j", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopemasslist", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"isotopemasslist", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}], "===", RowBox[{"labelstoberemoved", "[", RowBox[{"[", "j", "]"}], "]"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopemasslist", "=", RowBox[{"Drop", "[", RowBox[{"isotopemasslist", ",", RowBox[{"{", "i", "}"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length after X removal = \>\"", ",", RowBox[{"Length", "[", "isotopemasslist", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\<isotopemasslist=\>\"", ",", "isotopemasslist"}], "]"}], ";"}], "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"(*", " ", RowBox[{ "Now", " ", "all", " ", "the", " ", "necessary", " ", "data", " ", "are", " ", "in", " ", "mostcommonisotopemasslist", " ", "and", " ", RowBox[{"isotopemasslist", ".", " ", "Printing"}], " ", RowBox[{"out", "."}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"mostcommonisotopemasslistLabels", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"mostcommonisotopemasslistValues", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "mostcommonisotopemasslist", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostcommonisotopemasslistLabels", "=", RowBox[{"Append", "[", RowBox[{"mostcommonisotopemasslistLabels", ",", RowBox[{"mostcommonisotopemasslist", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"mostcommonisotopemasslistLabels", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"StringJoin", "[", RowBox[{"\"\<\\\"\>\"", ",", RowBox[{"mostcommonisotopemasslistLabels", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<\\\"\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"(*", RowBox[{"StringJoin", "["}], "*)"}], "\[IndentingNewLine]", RowBox[{"mostcommonisotopemasslistValues", "=", RowBox[{"Append", "[", RowBox[{"mostcommonisotopemasslistValues", ",", RowBox[{"mostcommonisotopemasslist", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<#define LAST_ATOMIC_INDEX (\>\"", ",", RowBox[{ RowBox[{"Length", "[", "mostcommonisotopemasslist", "]"}], "-", "1"}], ",", "\"\<)\>\""}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\<static const char *atomic_labels[] =\>\"", ",", "mostcommonisotopemasslistLabels"}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\<static double an2masses[] =\>\"", ",", "mostcommonisotopemasslistValues"}], "]"}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"isotopemasslistLabels", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopemasslistValues", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", RowBox[{"Length", "[", "isotopemasslist", "]"}]}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopemasslistLabels", "=", RowBox[{"Append", "[", RowBox[{"isotopemasslistLabels", ",", RowBox[{"isotopemasslist", "[", RowBox[{"[", RowBox[{"i", ",", "1"}], "]"}], "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"isotopemasslistLabels", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"StringJoin", "[", RowBox[{"\"\<\\\"\>\"", ",", RowBox[{"isotopemasslistLabels", "[", RowBox[{"[", "i", "]"}], "]"}], ",", "\"\<\\\"\>\""}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"isotopemasslistValues", "=", RowBox[{"Append", "[", RowBox[{"isotopemasslistValues", ",", RowBox[{"isotopemasslist", "[", RowBox[{"[", RowBox[{"i", ",", "2"}], "]"}], "]"}]}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<#define LAST_MASS_INDEX (\>\"", ",", RowBox[{ RowBox[{"Length", "[", "isotopemasslist", "]"}], "-", "1"}], ",", "\"\<)\>\""}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\<static const char *mass_labels[] =\>\"", ",", "isotopemasslistLabels"}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\<static double atomic_masses[] =\>\"", ",", "isotopemasslistValues"}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", "\"\<\>\"", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[mostcommonisotopemasslist]=\>\"", ",", RowBox[{"Length", "[", "mostcommonisotopemasslist", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[mostcommonisotopemasslistLabels]=\>\"", ",", RowBox[{"Length", "[", "mostcommonisotopemasslistLabels", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[mostcommonisotopemasslistValues]=\>\"", ",", RowBox[{"Length", "[", "mostcommonisotopemasslistValues", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[isotopemasslist]=\>\"", ",", RowBox[{"Length", "[", "isotopemasslist", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[isotopemasslistLabels]=\>\"", ",", RowBox[{"Length", "[", "isotopemasslistLabels", "]"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{"\"\<Length[isotopemasslistValues]=\>\"", ",", RowBox[{"Length", "[", "isotopemasslistValues", "]"}]}], "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], ";"}]}], "Input", CellChangeTimes->{{3.4131393673688517`*^9, 3.41313941916416*^9}, { 3.413139569804329*^9, 3.413139610716476*^9}, {3.4131397475123787`*^9, 3.4131399373914003`*^9}, {3.413140525355842*^9, 3.4131406417694197`*^9}, { 3.413140783058135*^9, 3.413140784849597*^9}, {3.413140825530065*^9, 3.413140828329575*^9}, {3.413140874953827*^9, 3.413140973738509*^9}, { 3.4131410362776747`*^9, 3.413141047299595*^9}, {3.413141142837582*^9, 3.413141207547532*^9}, {3.4131412416150703`*^9, 3.4131413005551233`*^9}, { 3.4131413485571327`*^9, 3.413141397963377*^9}, {3.41314142847215*^9, 3.413141435379178*^9}, {3.4131415093358183`*^9, 3.413141574427257*^9}, { 3.413141692987729*^9, 3.4131418873287992`*^9}, {3.413141921815049*^9, 3.413141948964773*^9}, {3.413141988632128*^9, 3.4131421330638027`*^9}, { 3.413142342539447*^9, 3.413142436647648*^9}, {3.413475004662019*^9, 3.413475046730441*^9}, {3.4134750892543907`*^9, 3.413475094029565*^9}, { 3.413475343363826*^9, 3.413475354514701*^9}, {3.413475536240918*^9, 3.413475577043065*^9}, {3.41347571850375*^9, 3.413475722748588*^9}, { 3.413478555957595*^9, 3.413478556393615*^9}, {3.4134786143800087`*^9, 3.413478788532113*^9}, {3.413478835002716*^9, 3.413478880602845*^9}, { 3.413478935484145*^9, 3.413479036902149*^9}, {3.413479161692285*^9, 3.413479200223113*^9}, {3.413479243254827*^9, 3.413479260622363*^9}, { 3.413479430593487*^9, 3.413479435487073*^9}, {3.413479475710033*^9, 3.413479502517375*^9}, {3.413479585023543*^9, 3.413479616407411*^9}, { 3.413479761683825*^9, 3.413479772587543*^9}, {3.413479810827602*^9, 3.413479924472815*^9}, {3.413479960859565*^9, 3.413480055229439*^9}, { 3.413480102879628*^9, 3.4134801372099533`*^9}, {3.413480296951331*^9, 3.413480418112471*^9}, {3.413480496217235*^9, 3.413480561832039*^9}, { 3.413480617535014*^9, 3.413480674990498*^9}, {3.413480705362397*^9, 3.4134808736760607`*^9}, {3.4134809604981937`*^9, 3.413481050304886*^9}, { 3.413481168157864*^9, 3.4134812377995443`*^9}, {3.413481278611644*^9, 3.413481330306196*^9}, {3.413481399799945*^9, 3.413481415599234*^9}, { 3.4134816141006613`*^9, 3.413481704961832*^9}, {3.413481921708015*^9, 3.413481955152872*^9}, {3.413482479393309*^9, 3.4134825687273293`*^9}, { 3.413482628258396*^9, 3.413482679345809*^9}, {3.413482717789613*^9, 3.4134827658341503`*^9}, {3.4134828065647078`*^9, 3.41348290191521*^9}, 3.413482988923567*^9, {3.413483121500041*^9, 3.4134831545622063`*^9}, { 3.4134833026527653`*^9, 3.41348338552398*^9}, {3.413484048884914*^9, 3.413484081888625*^9}, {3.413484135683403*^9, 3.413484267621097*^9}, { 3.413484367872499*^9, 3.413484515886063*^9}, {3.413484560399414*^9, 3.413484611165732*^9}, {3.413484766729349*^9, 3.4134847689430656`*^9}, { 3.4134848166134253`*^9, 3.41348483079416*^9}, {3.413484889890603*^9, 3.413484998143979*^9}, {3.413485049471938*^9, 3.413485052805813*^9}, { 3.413485090016687*^9, 3.4134851348464317`*^9}, {3.413485192402025*^9, 3.413485251143078*^9}, {3.4134853306026983`*^9, 3.413485332543037*^9}, { 3.4134853849601107`*^9, 3.413485632752931*^9}, {3.4134857489081993`*^9, 3.413485764336113*^9}, {3.413486592761751*^9, 3.4134870275552883`*^9}, { 3.4134870818173847`*^9, 3.4134870949524927`*^9}, {3.413489586176055*^9, 3.413489601648313*^9}, {3.413489641846491*^9, 3.413489651321068*^9}, { 3.413489687827881*^9, 3.413489796515791*^9}, {3.413489869500197*^9, 3.413489890534243*^9}, {3.413546058890954*^9, 3.413546061619802*^9}, { 3.413546623281167*^9, 3.413546750343981*^9}, {3.413546907874934*^9, 3.413546998900835*^9}, {3.413547048871574*^9, 3.413547116469769*^9}, { 3.413547151714353*^9, 3.413547166660715*^9}, {3.413547300794478*^9, 3.413547305073135*^9}, {3.413547590124029*^9, 3.413547652867084*^9}, { 3.4135478484501963`*^9, 3.4135478534258547`*^9}, {3.41354792643921*^9, 3.4135479438097143`*^9}, {3.4135479938151627`*^9, 3.413548022941702*^9}, { 3.4135481232819767`*^9, 3.4135481307084913`*^9}, {3.413548365531704*^9, 3.41354836859851*^9}, 3.413548484443288*^9, 3.413548548064204*^9, { 3.4135485869065447`*^9, 3.413548600669506*^9}, {3.4135486394182587`*^9, 3.413548721720171*^9}, {3.413548760682548*^9, 3.413548839625416*^9}, { 3.413548957181341*^9, 3.413548991272584*^9}, {3.41354912749089*^9, 3.41354914003295*^9}, {3.4135491976604958`*^9, 3.413549223576086*^9}, { 3.4135493726057863`*^9, 3.413549446868451*^9}, {3.413549555126693*^9, 3.413549556236909*^9}, {3.413549979042234*^9, 3.413549990451598*^9}, { 3.4135509070883408`*^9, 3.413550915428265*^9}, {3.413550951207329*^9, 3.4135510028711367`*^9}, {3.413551073058528*^9, 3.413551140208913*^9}, { 3.413551178029686*^9, 3.4135512689265223`*^9}, {3.4135516708935204`*^9, 3.4135516749892893`*^9}, {3.4135517966130247`*^9, 3.4135517996769247`*^9}, {3.4135518611036177`*^9, 3.413551869649075*^9}, { 3.413552324223509*^9, 3.41355234439401*^9}, {3.413552432199007*^9, 3.413552443795348*^9}, {3.41355277677043*^9, 3.413552813038274*^9}, { 3.413552851953198*^9, 3.413552868463477*^9}, {3.413552931526065*^9, 3.413552939977234*^9}, {3.413558712486709*^9, 3.413558726755106*^9}, { 3.413558790743857*^9, 3.413558822836842*^9}, {3.41355918626306*^9, 3.413559191107547*^9}, {3.413559232855653*^9, 3.4135592640239887`*^9}, { 3.4135593044037247`*^9, 3.41355940656597*^9}, {3.413559465421845*^9, 3.413559557321834*^9}, {3.413559734825375*^9, 3.4135597918712187`*^9}, { 3.4135598466431713`*^9, 3.413559862645578*^9}, {3.413559922721602*^9, 3.4135599230948963`*^9}, {3.413560338269308*^9, 3.4135605702425327`*^9}, { 3.4135606246757517`*^9, 3.413560686062182*^9}, {3.4135614714705753`*^9, 3.4135616157664957`*^9}, {3.413561647527377*^9, 3.413561839207988*^9}, { 3.413561978133854*^9, 3.413561985221634*^9}, {3.413562018455887*^9, 3.413562141704179*^9}, {3.413562643556477*^9, 3.413562716202118*^9}, { 3.413562747655981*^9, 3.413562892362095*^9}, {3.413563616217396*^9, 3.4135636171831427`*^9}, {3.4135637317113647`*^9, 3.413563734551166*^9}, 3.413563802086363*^9, {3.4135640772546873`*^9, 3.4135640853890867`*^9}, { 3.4135643549279118`*^9, 3.413564646644898*^9}, {3.4135647418697968`*^9, 3.4135647448759003`*^9}, {3.413564805198477*^9, 3.413564824516077*^9}, { 3.413564951708799*^9, 3.413564969397382*^9}, {3.413565015443989*^9, 3.413565018833145*^9}, {3.413565622930808*^9, 3.413565920720792*^9}, { 3.4135660105333*^9, 3.413566034978591*^9}, {3.413566159730139*^9, 3.413566227223329*^9}, {3.413566269212123*^9, 3.413566411042747*^9}, { 3.413566442600657*^9, 3.4135664519173393`*^9}, {3.41356649279576*^9, 3.4135665600354557`*^9}, {3.413566668045795*^9, 3.4135666791171494`*^9}, { 3.413566773065806*^9, 3.413566803966066*^9}, {3.413566997138301*^9, 3.413567074855006*^9}, {3.413567154873065*^9, 3.41356716728621*^9}, { 3.413567329071445*^9, 3.413567430179702*^9}, {3.413567472964242*^9, 3.413567538463979*^9}, {3.4135676137172832`*^9, 3.4135677913247337`*^9}, { 3.413567865439507*^9, 3.413567881936265*^9}, {3.413567913206581*^9, 3.413567969867784*^9}, {3.41356845508742*^9, 3.413568639532349*^9}, { 3.413568697589072*^9, 3.413568704981916*^9}, {3.41356980857857*^9, 3.413570039521883*^9}, {3.413570139428604*^9, 3.413570423155883*^9}, { 3.413570472520732*^9, 3.413570678560197*^9}, 3.4135709205645*^9, 3.413571027813122*^9, 3.413571084599846*^9, 3.41357113141431*^9, { 3.4135713199124117`*^9, 3.413571368377575*^9}, {3.413571415310601*^9, 3.413571416946505*^9}, {3.413571484909307*^9, 3.41357149805282*^9}, { 3.413571540862545*^9, 3.413571541364448*^9}, {3.413571615593464*^9, 3.413571680510373*^9}, {3.41357173798699*^9, 3.413571787287669*^9}, { 3.413571905166071*^9, 3.413571947683629*^9}, {3.413572127165402*^9, 3.413572197644837*^9}, {3.4135722511384687`*^9, 3.413572481585951*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"printPsiElementData", "[", "]"}], ";"}]], "Input", CellChangeTimes->{{3.413141617863195*^9, 3.4131416202199793`*^9}, 3.413141971392407*^9, {3.4134787989894447`*^9, 3.413478816935302*^9}, { 3.413483401889043*^9, 3.413483435368001*^9}, {3.413484275201057*^9, 3.413484356041068*^9}, {3.413484718596257*^9, 3.413484724257*^9}, 3.413549244409225*^9, {3.413549472273233*^9, 3.413549489521262*^9}, { 3.413549708814275*^9, 3.413549723168865*^9}, {3.41354976990886*^9, 3.4135498498096237`*^9}, 3.4135501790608892`*^9, {3.413551284069042*^9, 3.413551288391345*^9}, {3.413551846884149*^9, 3.413551848210005*^9}, { 3.413551973988432*^9, 3.4135519844171133`*^9}, {3.4135595730685368`*^9, 3.413559691194442*^9}, 3.413560034042862*^9, {3.4135602738694887`*^9, 3.4135602851864443`*^9}, {3.41356071706796*^9, 3.4135607850751133`*^9}, { 3.413560897222191*^9, 3.4135609385946903`*^9}, {3.413561215670702*^9, 3.413561234122511*^9}, {3.413561296573495*^9, 3.4135613166747093`*^9}, { 3.41356135002186*^9, 3.41356137837409*^9}, {3.413561861595727*^9, 3.413561898466165*^9}, {3.41356216536779*^9, 3.413562182115737*^9}, { 3.4135622400863657`*^9, 3.413562254800729*^9}, {3.413562377366222*^9, 3.413562392971683*^9}, {3.413562433904014*^9, 3.413562445867895*^9}, { 3.413562504180849*^9, 3.413562508259063*^9}, 3.413562923085012*^9, { 3.413563020982358*^9, 3.413563038395566*^9}, {3.413563204017761*^9, 3.413563211013069*^9}, {3.4135632814810266`*^9, 3.413563286516513*^9}, { 3.413563533701682*^9, 3.413563563623125*^9}, {3.413563627820689*^9, 3.413563640483642*^9}, 3.413563860009501*^9, {3.413564660571954*^9, 3.413564685768498*^9}, 3.413565036273573*^9, {3.4135659358045177`*^9, 3.413565954203712*^9}, 3.413566580518095*^9, {3.413566877471837*^9, 3.413566887228496*^9}, {3.413566933856913*^9, 3.413566950917994*^9}, { 3.413567184595811*^9, 3.413567227561339*^9}, {3.413567570721279*^9, 3.413567572089267*^9}}], Cell[CellGroupData[{ Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length before X removal = \"\>", "\[InvisibleSpace]", "3300"}], SequenceForm["Length before X removal = ", 3300], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.4135812355177107`*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length after X removal = \"\>", "\[InvisibleSpace]", "3298"}], SequenceForm["Length after X removal = ", 3298], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581235570957*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"#define LAST_ATOMIC_INDEX (\"\>", "\[InvisibleSpace]", "118", "\[InvisibleSpace]", "\<\")\"\>"}], SequenceForm["#define LAST_ATOMIC_INDEX (", 118, ")"], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581235620777*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"static const char *atomic_labels[] =\"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"\<\"\\\"X\\\"\"\>", ",", "\<\"\\\"H\\\"\"\>", ",", "\<\"\\\"HE\\\"\"\>", ",", "\<\"\\\"LI\\\"\"\>", ",", "\<\"\\\"BE\\\"\"\>", ",", "\<\"\\\"B\\\"\"\>", ",", "\<\"\\\"C\\\"\"\>", ",", "\<\"\\\"N\\\"\"\>", ",", "\<\"\\\"O\\\"\"\>", ",", "\<\"\\\"F\\\"\"\>", ",", "\<\"\\\"NE\\\"\"\>", ",", "\<\"\\\"NA\\\"\"\>", ",", "\<\"\\\"MG\\\"\"\>", ",", "\<\"\\\"AL\\\"\"\>", ",", "\<\"\\\"SI\\\"\"\>", ",", "\<\"\\\"P\\\"\"\>", ",", "\<\"\\\"S\\\"\"\>", ",", "\<\"\\\"CL\\\"\"\>", ",", "\<\"\\\"AR\\\"\"\>", ",", "\<\"\\\"K\\\"\"\>", ",", "\<\"\\\"CA\\\"\"\>", ",", "\<\"\\\"SC\\\"\"\>", ",", "\<\"\\\"TI\\\"\"\>", ",", "\<\"\\\"V\\\"\"\>", ",", "\<\"\\\"CR\\\"\"\>", ",", "\<\"\\\"MN\\\"\"\>", ",", "\<\"\\\"FE\\\"\"\>", ",", "\<\"\\\"CO\\\"\"\>", ",", "\<\"\\\"NI\\\"\"\>", ",", "\<\"\\\"CU\\\"\"\>", ",", "\<\"\\\"ZN\\\"\"\>", ",", "\<\"\\\"GA\\\"\"\>", ",", "\<\"\\\"GE\\\"\"\>", ",", "\<\"\\\"AS\\\"\"\>", ",", "\<\"\\\"SE\\\"\"\>", ",", "\<\"\\\"BR\\\"\"\>", ",", "\<\"\\\"KR\\\"\"\>", ",", "\<\"\\\"RB\\\"\"\>", ",", "\<\"\\\"SR\\\"\"\>", ",", "\<\"\\\"Y\\\"\"\>", ",", "\<\"\\\"ZR\\\"\"\>", ",", "\<\"\\\"NB\\\"\"\>", ",", "\<\"\\\"MO\\\"\"\>", ",", "\<\"\\\"TC\\\"\"\>", ",", "\<\"\\\"RU\\\"\"\>", ",", "\<\"\\\"RH\\\"\"\>", ",", "\<\"\\\"PD\\\"\"\>", ",", "\<\"\\\"AG\\\"\"\>", ",", "\<\"\\\"CD\\\"\"\>", ",", "\<\"\\\"IN\\\"\"\>", ",", "\<\"\\\"SN\\\"\"\>", ",", "\<\"\\\"SB\\\"\"\>", ",", "\<\"\\\"TE\\\"\"\>", ",", "\<\"\\\"I\\\"\"\>", ",", "\<\"\\\"XE\\\"\"\>", ",", "\<\"\\\"CS\\\"\"\>", ",", "\<\"\\\"BA\\\"\"\>", ",", "\<\"\\\"LA\\\"\"\>", ",", "\<\"\\\"CE\\\"\"\>", ",", "\<\"\\\"PR\\\"\"\>", ",", "\<\"\\\"ND\\\"\"\>", ",", "\<\"\\\"PM\\\"\"\>", ",", "\<\"\\\"SM\\\"\"\>", ",", "\<\"\\\"EU\\\"\"\>", ",", "\<\"\\\"GD\\\"\"\>", ",", "\<\"\\\"TB\\\"\"\>", ",", "\<\"\\\"DY\\\"\"\>", ",", "\<\"\\\"HO\\\"\"\>", ",", "\<\"\\\"ER\\\"\"\>", ",", "\<\"\\\"TM\\\"\"\>", ",", "\<\"\\\"YB\\\"\"\>", ",", "\<\"\\\"LU\\\"\"\>", ",", "\<\"\\\"HF\\\"\"\>", ",", "\<\"\\\"TA\\\"\"\>", ",", "\<\"\\\"W\\\"\"\>", ",", "\<\"\\\"RE\\\"\"\>", ",", "\<\"\\\"OS\\\"\"\>", ",", "\<\"\\\"IR\\\"\"\>", ",", "\<\"\\\"PT\\\"\"\>", ",", "\<\"\\\"AU\\\"\"\>", ",", "\<\"\\\"HG\\\"\"\>", ",", "\<\"\\\"TL\\\"\"\>", ",", "\<\"\\\"PB\\\"\"\>", ",", "\<\"\\\"BI\\\"\"\>", ",", "\<\"\\\"PO\\\"\"\>", ",", "\<\"\\\"AT\\\"\"\>", ",", "\<\"\\\"RN\\\"\"\>", ",", "\<\"\\\"FR\\\"\"\>", ",", "\<\"\\\"RA\\\"\"\>", ",", "\<\"\\\"AC\\\"\"\>", ",", "\<\"\\\"TH\\\"\"\>", ",", "\<\"\\\"PA\\\"\"\>", ",", "\<\"\\\"U\\\"\"\>", ",", "\<\"\\\"NP\\\"\"\>", ",", "\<\"\\\"PU\\\"\"\>", ",", "\<\"\\\"AM\\\"\"\>", ",", "\<\"\\\"CM\\\"\"\>", ",", "\<\"\\\"BK\\\"\"\>", ",", "\<\"\\\"CF\\\"\"\>", ",", "\<\"\\\"ES\\\"\"\>", ",", "\<\"\\\"FM\\\"\"\>", ",", "\<\"\\\"MD\\\"\"\>", ",", "\<\"\\\"NO\\\"\"\>", ",", "\<\"\\\"LR\\\"\"\>", ",", "\<\"\\\"RF\\\"\"\>", ",", "\<\"\\\"DB\\\"\"\>", ",", "\<\"\\\"SG\\\"\"\>", ",", "\<\"\\\"BH\\\"\"\>", ",", "\<\"\\\"HS\\\"\"\>", ",", "\<\"\\\"MT\\\"\"\>", ",", "\<\"\\\"DS\\\"\"\>", ",", "\<\"\\\"RG\\\"\"\>", ",", "\<\"\\\"UUB\\\"\"\>", ",", "\<\"\\\"UUT\\\"\"\>", ",", "\<\"\\\"UUQ\\\"\"\>", ",", "\<\"\\\"UUP\\\"\"\>", ",", "\<\"\\\"UUH\\\"\"\>", ",", "\<\"\\\"UUS\\\"\"\>", ",", "\<\"\\\"UUO\\\"\"\>"}], "}"}]}], SequenceForm[ "static const char *atomic_labels[] =", { "\"X\"", "\"H\"", "\"HE\"", "\"LI\"", "\"BE\"", "\"B\"", "\"C\"", "\"N\"", "\"O\"", "\"F\"", "\"NE\"", "\"NA\"", "\"MG\"", "\"AL\"", "\"SI\"", "\"P\"", "\"S\"", "\"CL\"", "\"AR\"", "\"K\"", "\"CA\"", "\"SC\"", "\"TI\"", "\"V\"", "\"CR\"", "\"MN\"", "\"FE\"", "\"CO\"", "\"NI\"", "\"CU\"", "\"ZN\"", "\"GA\"", "\"GE\"", "\"AS\"", "\"SE\"", "\"BR\"", "\"KR\"", "\"RB\"", "\"SR\"", "\"Y\"", "\"ZR\"", "\"NB\"", "\"MO\"", "\"TC\"", "\"RU\"", "\"RH\"", "\"PD\"", "\"AG\"", "\"CD\"", "\"IN\"", "\"SN\"", "\"SB\"", "\"TE\"", "\"I\"", "\"XE\"", "\"CS\"", "\"BA\"", "\"LA\"", "\"CE\"", "\"PR\"", "\"ND\"", "\"PM\"", "\"SM\"", "\"EU\"", "\"GD\"", "\"TB\"", "\"DY\"", "\"HO\"", "\"ER\"", "\"TM\"", "\"YB\"", "\"LU\"", "\"HF\"", "\"TA\"", "\"W\"", "\"RE\"", "\"OS\"", "\"IR\"", "\"PT\"", "\"AU\"", "\"HG\"", "\"TL\"", "\"PB\"", "\"BI\"", "\"PO\"", "\"AT\"", "\"RN\"", "\"FR\"", "\"RA\"", "\"AC\"", "\"TH\"", "\"PA\"", "\"U\"", "\"NP\"", "\"PU\"", "\"AM\"", "\"CM\"", "\"BK\"", "\"CF\"", "\"ES\"", "\"FM\"", "\"MD\"", "\"NO\"", "\"LR\"", "\"RF\"", "\"DB\"", "\"SG\"", "\"BH\"", "\"HS\"", "\"MT\"", "\"DS\"", "\"RG\"", "\"UUB\"", "\"UUT\"", "\"UUQ\"", "\"UUP\"", "\"UUH\"", "\"UUS\"", "\"UUO\""}], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581235672765*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"static double an2masses[] =\"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{ "0.`", ",", "1.00782503207`12.000000000000004", ",", "4.00260325415`12.000000000000004", ",", "7.016004548`10.000000000000004", ",", "9.012182201`9.999999999999998", ",", "11.009305406`11.", ",", "12", ",", "14.00307400477999999999999999999`13.", ",", "15.99491461956`13.", ",", "18.998403224`10.999999999999998", ",", "19.99244017542`13.", ",", "22.98976928087`13.", ",", "23.985041699`11.000000000000005", ",", "26.981538627`11.", ",", "27.97692653246`13.", ",", "30.973761629`10.999999999999996", ",", "31.972070999`11.", ",", "34.968852682`10.999999999999996", ",", "39.96238312251`13.", ",", "38.963706679`11.", ",", "39.962590983`11.", ",", "44.955911909`11.", ",", "47.947946281`11.", ",", "50.943959507`11.", ",", "51.940507472`11.", ",", "54.938045141`11.000000000000005", ",", "55.934937475`11.", ",", "58.933195048`11.", ",", "57.935342907`11.", ",", "62.929597474`11.000000000000005", ",", "63.929142222`11.", ",", "68.925573587`11.", ",", "73.921177767`11.", ",", "74.921596478`11.", ",", "79.916521271`11.", ",", "78.918337087`11.", ",", "85.910610729`11.", ",", "84.911789737`11.", ",", "87.905612124`11.", ",", "88.905848295`11.", ",", "89.904704416`11.", ",", "92.906378058`11.", ",", "97.905408169`11.000000000000005", ",", "98.906254747`11.", ",", "101.904349312`12.000000000000004", ",", "102.905504292`11.999999999999998", ",", "105.903485715`12.000000000000004", ",", "106.90509682`11.000000000000005", ",", "113.90335854`11.", ",", "114.903878484`12.000000000000004", ",", "119.902194676`11.999999999999998", ",", "120.903815686`12.000000000000004", ",", "129.906224399`11.999999999999998", ",", "126.904472681`11.999999999999998", ",", "131.904153457`11.999999999999996", ",", "132.905451932`12.", ",", "137.905247237`12.000000000000004", ",", "138.906353267`11.999999999999998", ",", "139.905438706`11.999999999999996", ",", "140.907652769`11.999999999999996", ",", "141.907723297`12.000000000000004", ",", "144.912749023`12.000000000000004", ",", "151.919732425`12.000000000000004", ",", "152.921230339`12.", ",", "157.924103912`11.999999999999998", ",", "158.925346757`11.999999999999998", ",", "163.929174751`11.999999999999998", ",", "164.93032207`11.", ",", "165.930293061`12.", ",", "168.93421325`11.000000000000005", ",", "173.938862089`11.999999999999996", ",", "174.940771819`12.000000000000004", ",", "179.946549953`12.000000000000004", ",", "180.947995763`12.000000000000004", ",", "183.950931188`12.000000000000004", ",", "186.955753109`12.", ",", "191.96148069`11.", ",", "192.96292643`11.000000000000005", ",", "194.964791134`11.999999999999998", ",", "196.966568662`12.000000000000004", ",", "201.970643011`12.000000000000004", ",", "204.974427541`11.999999999999996", ",", "207.976652071`11.999999999999996", ",", "208.980398734`12.", ",", "208.982430435`12.000000000000004", ",", "210.987496271`12.", ",", "222.017577738`12.000000000000004", ",", "222.01755173`11.000000000000005", ",", "228.031070292`11.999999999999998", ",", "227.027752127`11.999999999999998", ",", "232.038055325`11.999999999999998", ",", "231.03588399`11.000000000000005", ",", "238.050788247`11.999999999999998", ",", "237.048173444`12.000000000000004", ",", "242.058742611`11.999999999999998", ",", "243.06138108`10.999999999999996", ",", "247.07035354`11.", ",", "247.07030708`10.999999999999996", ",", "251.079586788`12.000000000000004", ",", "252.082978512`11.999999999999998", ",", "257.095104724`12.000000000000004", ",", "258.098431319`11.999999999999998", ",", "255.093241131`12.000000000000004", ",", "260.105504`9.000000000000002", ",", "263.112547`9.000000000000002", ",", "255.107398`9.000000000000002", ",", "259.1145`9.000000000000002", ",", "262.122892`9.000000000000002", ",", "263.128558`9.000000000000002", ",", "265.136151`9.000000000000002", ",", "281.162061`9.000000000000002", ",", "272.153615`9.000000000000002", ",", "283.171792`9.000000000000002", ",", "283.176451`9.000000000000002", ",", "285.183698`9.000000000000002", ",", "287.191186`9.000000000000002", ",", "292.199786`9.000000000000002", ",", "291.206564`9.000000000000002", ",", "293.21467`9.000000000000002"}], "}"}]}], SequenceForm[ "static double an2masses[] =", { 0., 1.00782503207`12.000000000000004, 4.00260325415`12.000000000000004, 7.016004548`10.000000000000004, 9.012182201`9.999999999999998, 11.009305406`11., 12, 14.00307400478`13., 15.99491461956`13., 18.998403224`10.999999999999998, 19.99244017542`13., 22.98976928087`13., 23.985041699`11.000000000000005, 26.981538627`11., 27.97692653246`13., 30.973761629`10.999999999999996, 31.972070999`11., 34.968852682`10.999999999999996, 39.96238312251`13., 38.963706679`11., 39.962590983`11., 44.955911909`11., 47.947946281`11., 50.943959507`11., 51.940507472`11., 54.938045141`11.000000000000005, 55.934937475`11., 58.933195048`11., 57.935342907`11., 62.929597474`11.000000000000005, 63.929142222`11., 68.925573587`11., 73.921177767`11., 74.921596478`11., 79.916521271`11., 78.918337087`11., 85.910610729`11., 84.911789737`11., 87.905612124`11., 88.905848295`11., 89.904704416`11., 92.906378058`11., 97.905408169`11.000000000000005, 98.906254747`11., 101.904349312`12.000000000000004, 102.905504292`11.999999999999998, 105.903485715`12.000000000000004, 106.90509682`11.000000000000005, 113.90335854`11., 114.903878484`12.000000000000004, 119.902194676`11.999999999999998, 120.903815686`12.000000000000004, 129.906224399`11.999999999999998, 126.904472681`11.999999999999998, 131.904153457`11.999999999999996, 132.905451932`12., 137.905247237`12.000000000000004, 138.906353267`11.999999999999998, 139.905438706`11.999999999999996, 140.907652769`11.999999999999996, 141.907723297`12.000000000000004, 144.912749023`12.000000000000004, 151.919732425`12.000000000000004, 152.921230339`12., 157.924103912`11.999999999999998, 158.925346757`11.999999999999998, 163.929174751`11.999999999999998, 164.93032207`11., 165.930293061`12., 168.93421325`11.000000000000005, 173.938862089`11.999999999999996, 174.940771819`12.000000000000004, 179.946549953`12.000000000000004, 180.947995763`12.000000000000004, 183.950931188`12.000000000000004, 186.955753109`12., 191.96148069`11., 192.96292643`11.000000000000005, 194.964791134`11.999999999999998, 196.966568662`12.000000000000004, 201.970643011`12.000000000000004, 204.974427541`11.999999999999996, 207.976652071`11.999999999999996, 208.980398734`12., 208.982430435`12.000000000000004, 210.987496271`12., 222.017577738`12.000000000000004, 222.01755173`11.000000000000005, 228.031070292`11.999999999999998, 227.027752127`11.999999999999998, 232.038055325`11.999999999999998, 231.03588399`11.000000000000005, 238.050788247`11.999999999999998, 237.048173444`12.000000000000004, 242.058742611`11.999999999999998, 243.06138108`10.999999999999996, 247.07035354`11., 247.07030708`10.999999999999996, 251.079586788`12.000000000000004, 252.082978512`11.999999999999998, 257.095104724`12.000000000000004, 258.098431319`11.999999999999998, 255.093241131`12.000000000000004, 260.105504`9.000000000000002, 263.112547`9.000000000000002, 255.107398`9.000000000000002, 259.1145`9.000000000000002, 262.122892`9.000000000000002, 263.128558`9.000000000000002, 265.136151`9.000000000000002, 281.162061`9.000000000000002, 272.153615`9.000000000000002, 283.171792`9.000000000000002, 283.176451`9.000000000000002, 285.183698`9.000000000000002, 287.191186`9.000000000000002, 292.199786`9.000000000000002, 291.206564`9.000000000000002, 293.21467`9.000000000000002}], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.4135812357236032`*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"#define LAST_MASS_INDEX (\"\>", "\[InvisibleSpace]", "3297", "\[InvisibleSpace]", "\<\")\"\>"}], SequenceForm["#define LAST_MASS_INDEX (", 3297, ")"], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581235772338*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"static const char *mass_labels[] =\"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"\<\"\\\"H\\\"\"\>", ",", "\<\"\\\"H1\\\"\"\>", ",", "\<\"\\\"H2\\\"\"\>", ",", "\<\"\\\"D\\\"\"\>", ",", "\<\"\\\"H3\\\"\"\>", ",", "\<\"\\\"T\\\"\"\>", ",", "\<\"\\\"H4\\\"\"\>", ",", "\<\"\\\"H5\\\"\"\>", ",", "\<\"\\\"H6\\\"\"\>", ",", "\<\"\\\"H7\\\"\"\>", ",", "\<\"\\\"HE\\\"\"\>", ",", "\<\"\\\"HE3\\\"\"\>", ",", "\<\"\\\"HE4\\\"\"\>", ",", "\<\"\\\"HE5\\\"\"\>", ",", "\<\"\\\"HE6\\\"\"\>", ",", "\<\"\\\"HE7\\\"\"\>", ",", "\<\"\\\"HE8\\\"\"\>", ",", "\<\"\\\"HE9\\\"\"\>", ",", "\<\"\\\"HE10\\\"\"\>", ",", "\<\"\\\"LI\\\"\"\>", ",", "\<\"\\\"LI3\\\"\"\>", ",", "\<\"\\\"LI4\\\"\"\>", ",", "\<\"\\\"LI5\\\"\"\>", ",", "\<\"\\\"LI6\\\"\"\>", ",", "\<\"\\\"LI7\\\"\"\>", ",", "\<\"\\\"LI8\\\"\"\>", ",", "\<\"\\\"LI9\\\"\"\>", ",", "\<\"\\\"LI10\\\"\"\>", ",", "\<\"\\\"LI11\\\"\"\>", ",", "\<\"\\\"LI12\\\"\"\>", ",", "\<\"\\\"BE\\\"\"\>", ",", "\<\"\\\"BE5\\\"\"\>", ",", "\<\"\\\"BE6\\\"\"\>", ",", "\<\"\\\"BE7\\\"\"\>", ",", "\<\"\\\"BE8\\\"\"\>", ",", "\<\"\\\"BE9\\\"\"\>", ",", "\<\"\\\"BE10\\\"\"\>", ",", "\<\"\\\"BE11\\\"\"\>", ",", "\<\"\\\"BE12\\\"\"\>", ",", "\<\"\\\"BE13\\\"\"\>", ",", "\<\"\\\"BE14\\\"\"\>", ",", "\<\"\\\"BE15\\\"\"\>", ",", "\<\"\\\"BE16\\\"\"\>", ",", "\<\"\\\"B\\\"\"\>", ",", "\<\"\\\"B6\\\"\"\>", ",", "\<\"\\\"B7\\\"\"\>", ",", "\<\"\\\"B8\\\"\"\>", ",", "\<\"\\\"B9\\\"\"\>", ",", "\<\"\\\"B10\\\"\"\>", ",", "\<\"\\\"B11\\\"\"\>", ",", "\<\"\\\"B12\\\"\"\>", ",", "\<\"\\\"B13\\\"\"\>", ",", "\<\"\\\"B14\\\"\"\>", ",", "\<\"\\\"B15\\\"\"\>", ",", "\<\"\\\"B16\\\"\"\>", ",", "\<\"\\\"B17\\\"\"\>", ",", "\<\"\\\"B18\\\"\"\>", ",", "\<\"\\\"B19\\\"\"\>", ",", "\<\"\\\"C\\\"\"\>", ",", "\<\"\\\"C8\\\"\"\>", ",", "\<\"\\\"C9\\\"\"\>", ",", "\<\"\\\"C10\\\"\"\>", ",", "\<\"\\\"C11\\\"\"\>", ",", "\<\"\\\"C12\\\"\"\>", ",", "\<\"\\\"C13\\\"\"\>", ",", "\<\"\\\"C14\\\"\"\>", ",", "\<\"\\\"C15\\\"\"\>", ",", "\<\"\\\"C16\\\"\"\>", ",", "\<\"\\\"C17\\\"\"\>", ",", "\<\"\\\"C18\\\"\"\>", ",", "\<\"\\\"C19\\\"\"\>", ",", "\<\"\\\"C20\\\"\"\>", ",", "\<\"\\\"C21\\\"\"\>", ",", "\<\"\\\"C22\\\"\"\>", ",", "\<\"\\\"N\\\"\"\>", ",", "\<\"\\\"N10\\\"\"\>", ",", "\<\"\\\"N11\\\"\"\>", ",", "\<\"\\\"N12\\\"\"\>", ",", "\<\"\\\"N13\\\"\"\>", ",", "\<\"\\\"N14\\\"\"\>", ",", "\<\"\\\"N15\\\"\"\>", ",", "\<\"\\\"N16\\\"\"\>", ",", "\<\"\\\"N17\\\"\"\>", ",", "\<\"\\\"N18\\\"\"\>", ",", "\<\"\\\"N19\\\"\"\>", ",", "\<\"\\\"N20\\\"\"\>", ",", "\<\"\\\"N21\\\"\"\>", ",", "\<\"\\\"N22\\\"\"\>", ",", "\<\"\\\"N23\\\"\"\>", ",", "\<\"\\\"N24\\\"\"\>", ",", "\<\"\\\"N25\\\"\"\>", ",", "\<\"\\\"O\\\"\"\>", ",", "\<\"\\\"O12\\\"\"\>", ",", "\<\"\\\"O13\\\"\"\>", ",", "\<\"\\\"O14\\\"\"\>", ",", "\<\"\\\"O15\\\"\"\>", ",", "\<\"\\\"O16\\\"\"\>", ",", "\<\"\\\"O17\\\"\"\>", ",", "\<\"\\\"O18\\\"\"\>", ",", "\<\"\\\"O19\\\"\"\>", ",", "\<\"\\\"O20\\\"\"\>", ",", "\<\"\\\"O21\\\"\"\>", ",", "\<\"\\\"O22\\\"\"\>", ",", "\<\"\\\"O23\\\"\"\>", ",", "\<\"\\\"O24\\\"\"\>", ",", "\<\"\\\"O25\\\"\"\>", ",", "\<\"\\\"O26\\\"\"\>", ",", "\<\"\\\"O27\\\"\"\>", ",", "\<\"\\\"O28\\\"\"\>", ",", "\<\"\\\"F\\\"\"\>", ",", "\<\"\\\"F14\\\"\"\>", ",", "\<\"\\\"F15\\\"\"\>", ",", "\<\"\\\"F16\\\"\"\>", ",", "\<\"\\\"F17\\\"\"\>", ",", "\<\"\\\"F18\\\"\"\>", ",", "\<\"\\\"F19\\\"\"\>", ",", "\<\"\\\"F20\\\"\"\>", ",", "\<\"\\\"F21\\\"\"\>", ",", "\<\"\\\"F22\\\"\"\>", ",", "\<\"\\\"F23\\\"\"\>", ",", "\<\"\\\"F24\\\"\"\>", ",", "\<\"\\\"F25\\\"\"\>", ",", "\<\"\\\"F26\\\"\"\>", ",", "\<\"\\\"F27\\\"\"\>", ",", "\<\"\\\"F28\\\"\"\>", ",", "\<\"\\\"F29\\\"\"\>", ",", "\<\"\\\"F30\\\"\"\>", ",", "\<\"\\\"F31\\\"\"\>", ",", "\<\"\\\"NE\\\"\"\>", ",", "\<\"\\\"NE16\\\"\"\>", ",", "\<\"\\\"NE17\\\"\"\>", ",", "\<\"\\\"NE18\\\"\"\>", ",", "\<\"\\\"NE19\\\"\"\>", ",", "\<\"\\\"NE20\\\"\"\>", ",", "\<\"\\\"NE21\\\"\"\>", ",", "\<\"\\\"NE22\\\"\"\>", ",", "\<\"\\\"NE23\\\"\"\>", ",", "\<\"\\\"NE24\\\"\"\>", ",", "\<\"\\\"NE25\\\"\"\>", ",", "\<\"\\\"NE26\\\"\"\>", ",", "\<\"\\\"NE27\\\"\"\>", ",", "\<\"\\\"NE28\\\"\"\>", ",", "\<\"\\\"NE29\\\"\"\>", ",", "\<\"\\\"NE30\\\"\"\>", ",", "\<\"\\\"NE31\\\"\"\>", ",", "\<\"\\\"NE32\\\"\"\>", ",", "\<\"\\\"NE33\\\"\"\>", ",", "\<\"\\\"NE34\\\"\"\>", ",", "\<\"\\\"NA\\\"\"\>", ",", "\<\"\\\"NA18\\\"\"\>", ",", "\<\"\\\"NA19\\\"\"\>", ",", "\<\"\\\"NA20\\\"\"\>", ",", "\<\"\\\"NA21\\\"\"\>", ",", "\<\"\\\"NA22\\\"\"\>", ",", "\<\"\\\"NA23\\\"\"\>", ",", "\<\"\\\"NA24\\\"\"\>", ",", "\<\"\\\"NA25\\\"\"\>", ",", "\<\"\\\"NA26\\\"\"\>", ",", "\<\"\\\"NA27\\\"\"\>", ",", "\<\"\\\"NA28\\\"\"\>", ",", "\<\"\\\"NA29\\\"\"\>", ",", "\<\"\\\"NA30\\\"\"\>", ",", "\<\"\\\"NA31\\\"\"\>", ",", "\<\"\\\"NA32\\\"\"\>", ",", "\<\"\\\"NA33\\\"\"\>", ",", "\<\"\\\"NA34\\\"\"\>", ",", "\<\"\\\"NA35\\\"\"\>", ",", "\<\"\\\"NA36\\\"\"\>", ",", "\<\"\\\"NA37\\\"\"\>", ",", "\<\"\\\"MG\\\"\"\>", ",", "\<\"\\\"MG19\\\"\"\>", ",", "\<\"\\\"MG20\\\"\"\>", ",", "\<\"\\\"MG21\\\"\"\>", ",", "\<\"\\\"MG22\\\"\"\>", ",", "\<\"\\\"MG23\\\"\"\>", ",", "\<\"\\\"MG24\\\"\"\>", ",", "\<\"\\\"MG25\\\"\"\>", ",", "\<\"\\\"MG26\\\"\"\>", ",", "\<\"\\\"MG27\\\"\"\>", ",", "\<\"\\\"MG28\\\"\"\>", ",", "\<\"\\\"MG29\\\"\"\>", ",", "\<\"\\\"MG30\\\"\"\>", ",", "\<\"\\\"MG31\\\"\"\>", ",", "\<\"\\\"MG32\\\"\"\>", ",", "\<\"\\\"MG33\\\"\"\>", ",", "\<\"\\\"MG34\\\"\"\>", ",", "\<\"\\\"MG35\\\"\"\>", ",", "\<\"\\\"MG36\\\"\"\>", ",", "\<\"\\\"MG37\\\"\"\>", ",", "\<\"\\\"MG38\\\"\"\>", ",", "\<\"\\\"MG39\\\"\"\>", ",", "\<\"\\\"MG40\\\"\"\>", ",", "\<\"\\\"AL\\\"\"\>", ",", "\<\"\\\"AL21\\\"\"\>", ",", "\<\"\\\"AL22\\\"\"\>", ",", "\<\"\\\"AL23\\\"\"\>", ",", "\<\"\\\"AL24\\\"\"\>", ",", "\<\"\\\"AL25\\\"\"\>", ",", "\<\"\\\"AL26\\\"\"\>", ",", "\<\"\\\"AL27\\\"\"\>", ",", "\<\"\\\"AL28\\\"\"\>", ",", "\<\"\\\"AL29\\\"\"\>", ",", "\<\"\\\"AL30\\\"\"\>", ",", "\<\"\\\"AL31\\\"\"\>", ",", "\<\"\\\"AL32\\\"\"\>", ",", "\<\"\\\"AL33\\\"\"\>", ",", "\<\"\\\"AL34\\\"\"\>", ",", "\<\"\\\"AL35\\\"\"\>", ",", "\<\"\\\"AL36\\\"\"\>", ",", "\<\"\\\"AL37\\\"\"\>", ",", "\<\"\\\"AL38\\\"\"\>", ",", "\<\"\\\"AL39\\\"\"\>", ",", "\<\"\\\"AL40\\\"\"\>", ",", "\<\"\\\"AL41\\\"\"\>", ",", "\<\"\\\"AL42\\\"\"\>", ",", "\<\"\\\"SI\\\"\"\>", ",", "\<\"\\\"SI22\\\"\"\>", ",", "\<\"\\\"SI23\\\"\"\>", ",", "\<\"\\\"SI24\\\"\"\>", ",", "\<\"\\\"SI25\\\"\"\>", ",", "\<\"\\\"SI26\\\"\"\>", ",", "\<\"\\\"SI27\\\"\"\>", ",", "\<\"\\\"SI28\\\"\"\>", ",", "\<\"\\\"SI29\\\"\"\>", ",", "\<\"\\\"SI30\\\"\"\>", ",", "\<\"\\\"SI31\\\"\"\>", ",", "\<\"\\\"SI32\\\"\"\>", ",", "\<\"\\\"SI33\\\"\"\>", ",", "\<\"\\\"SI34\\\"\"\>", ",", "\<\"\\\"SI35\\\"\"\>", ",", "\<\"\\\"SI36\\\"\"\>", ",", "\<\"\\\"SI37\\\"\"\>", ",", "\<\"\\\"SI38\\\"\"\>", ",", "\<\"\\\"SI39\\\"\"\>", ",", "\<\"\\\"SI40\\\"\"\>", ",", "\<\"\\\"SI41\\\"\"\>", ",", "\<\"\\\"SI42\\\"\"\>", ",", "\<\"\\\"SI43\\\"\"\>", ",", "\<\"\\\"SI44\\\"\"\>", ",", "\<\"\\\"P\\\"\"\>", ",", "\<\"\\\"P24\\\"\"\>", ",", "\<\"\\\"P25\\\"\"\>", ",", "\<\"\\\"P26\\\"\"\>", ",", "\<\"\\\"P27\\\"\"\>", ",", "\<\"\\\"P28\\\"\"\>", ",", "\<\"\\\"P29\\\"\"\>", ",", "\<\"\\\"P30\\\"\"\>", ",", "\<\"\\\"P31\\\"\"\>", ",", "\<\"\\\"P32\\\"\"\>", ",", "\<\"\\\"P33\\\"\"\>", ",", "\<\"\\\"P34\\\"\"\>", ",", "\<\"\\\"P35\\\"\"\>", ",", "\<\"\\\"P36\\\"\"\>", ",", "\<\"\\\"P37\\\"\"\>", ",", "\<\"\\\"P38\\\"\"\>", ",", "\<\"\\\"P39\\\"\"\>", ",", "\<\"\\\"P40\\\"\"\>", ",", "\<\"\\\"P41\\\"\"\>", ",", "\<\"\\\"P42\\\"\"\>", ",", "\<\"\\\"P43\\\"\"\>", ",", "\<\"\\\"P44\\\"\"\>", ",", "\<\"\\\"P45\\\"\"\>", ",", "\<\"\\\"P46\\\"\"\>", ",", "\<\"\\\"S\\\"\"\>", ",", "\<\"\\\"S26\\\"\"\>", ",", "\<\"\\\"S27\\\"\"\>", ",", "\<\"\\\"S28\\\"\"\>", ",", "\<\"\\\"S29\\\"\"\>", ",", "\<\"\\\"S30\\\"\"\>", ",", "\<\"\\\"S31\\\"\"\>", ",", "\<\"\\\"S32\\\"\"\>", ",", "\<\"\\\"S33\\\"\"\>", ",", "\<\"\\\"S34\\\"\"\>", ",", "\<\"\\\"S35\\\"\"\>", ",", "\<\"\\\"S36\\\"\"\>", ",", "\<\"\\\"S37\\\"\"\>", ",", "\<\"\\\"S38\\\"\"\>", ",", "\<\"\\\"S39\\\"\"\>", ",", "\<\"\\\"S40\\\"\"\>", ",", "\<\"\\\"S41\\\"\"\>", ",", "\<\"\\\"S42\\\"\"\>", ",", "\<\"\\\"S43\\\"\"\>", ",", "\<\"\\\"S44\\\"\"\>", ",", "\<\"\\\"S45\\\"\"\>", ",", "\<\"\\\"S46\\\"\"\>", ",", "\<\"\\\"S47\\\"\"\>", ",", "\<\"\\\"S48\\\"\"\>", ",", "\<\"\\\"S49\\\"\"\>", ",", "\<\"\\\"CL\\\"\"\>", ",", "\<\"\\\"CL28\\\"\"\>", ",", "\<\"\\\"CL29\\\"\"\>", ",", "\<\"\\\"CL30\\\"\"\>", ",", "\<\"\\\"CL31\\\"\"\>", ",", "\<\"\\\"CL32\\\"\"\>", ",", "\<\"\\\"CL33\\\"\"\>", ",", "\<\"\\\"CL34\\\"\"\>", ",", "\<\"\\\"CL35\\\"\"\>", ",", "\<\"\\\"CL36\\\"\"\>", ",", "\<\"\\\"CL37\\\"\"\>", ",", "\<\"\\\"CL38\\\"\"\>", ",", "\<\"\\\"CL39\\\"\"\>", ",", "\<\"\\\"CL40\\\"\"\>", ",", "\<\"\\\"CL41\\\"\"\>", ",", "\<\"\\\"CL42\\\"\"\>", ",", "\<\"\\\"CL43\\\"\"\>", ",", "\<\"\\\"CL44\\\"\"\>", ",", "\<\"\\\"CL45\\\"\"\>", ",", "\<\"\\\"CL46\\\"\"\>", ",", "\<\"\\\"CL47\\\"\"\>", ",", "\<\"\\\"CL48\\\"\"\>", ",", "\<\"\\\"CL49\\\"\"\>", ",", "\<\"\\\"CL50\\\"\"\>", ",", "\<\"\\\"CL51\\\"\"\>", ",", "\<\"\\\"AR\\\"\"\>", ",", "\<\"\\\"AR30\\\"\"\>", ",", "\<\"\\\"AR31\\\"\"\>", ",", "\<\"\\\"AR32\\\"\"\>", ",", "\<\"\\\"AR33\\\"\"\>", ",", "\<\"\\\"AR34\\\"\"\>", ",", "\<\"\\\"AR35\\\"\"\>", ",", "\<\"\\\"AR36\\\"\"\>", ",", "\<\"\\\"AR37\\\"\"\>", ",", "\<\"\\\"AR38\\\"\"\>", ",", "\<\"\\\"AR39\\\"\"\>", ",", "\<\"\\\"AR40\\\"\"\>", ",", "\<\"\\\"AR41\\\"\"\>", ",", "\<\"\\\"AR42\\\"\"\>", ",", "\<\"\\\"AR43\\\"\"\>", ",", "\<\"\\\"AR44\\\"\"\>", ",", "\<\"\\\"AR45\\\"\"\>", ",", "\<\"\\\"AR46\\\"\"\>", ",", "\<\"\\\"AR47\\\"\"\>", ",", "\<\"\\\"AR48\\\"\"\>", ",", "\<\"\\\"AR49\\\"\"\>", ",", "\<\"\\\"AR50\\\"\"\>", ",", "\<\"\\\"AR51\\\"\"\>", ",", "\<\"\\\"AR52\\\"\"\>", ",", "\<\"\\\"AR53\\\"\"\>", ",", "\<\"\\\"K\\\"\"\>", ",", "\<\"\\\"K32\\\"\"\>", ",", "\<\"\\\"K33\\\"\"\>", ",", "\<\"\\\"K34\\\"\"\>", ",", "\<\"\\\"K35\\\"\"\>", ",", "\<\"\\\"K36\\\"\"\>", ",", "\<\"\\\"K37\\\"\"\>", ",", "\<\"\\\"K38\\\"\"\>", ",", "\<\"\\\"K39\\\"\"\>", ",", "\<\"\\\"K40\\\"\"\>", ",", "\<\"\\\"K41\\\"\"\>", ",", "\<\"\\\"K42\\\"\"\>", ",", "\<\"\\\"K43\\\"\"\>", ",", "\<\"\\\"K44\\\"\"\>", ",", "\<\"\\\"K45\\\"\"\>", ",", "\<\"\\\"K46\\\"\"\>", ",", "\<\"\\\"K47\\\"\"\>", ",", "\<\"\\\"K48\\\"\"\>", ",", "\<\"\\\"K49\\\"\"\>", ",", "\<\"\\\"K50\\\"\"\>", ",", "\<\"\\\"K51\\\"\"\>", ",", "\<\"\\\"K52\\\"\"\>", ",", "\<\"\\\"K53\\\"\"\>", ",", "\<\"\\\"K54\\\"\"\>", ",", "\<\"\\\"K55\\\"\"\>", ",", "\<\"\\\"CA\\\"\"\>", ",", "\<\"\\\"CA34\\\"\"\>", ",", "\<\"\\\"CA35\\\"\"\>", ",", "\<\"\\\"CA36\\\"\"\>", ",", "\<\"\\\"CA37\\\"\"\>", ",", "\<\"\\\"CA38\\\"\"\>", ",", "\<\"\\\"CA39\\\"\"\>", ",", "\<\"\\\"CA40\\\"\"\>", ",", "\<\"\\\"CA41\\\"\"\>", ",", "\<\"\\\"CA42\\\"\"\>", ",", "\<\"\\\"CA43\\\"\"\>", ",", "\<\"\\\"CA44\\\"\"\>", ",", "\<\"\\\"CA45\\\"\"\>", ",", "\<\"\\\"CA46\\\"\"\>", ",", "\<\"\\\"CA47\\\"\"\>", ",", "\<\"\\\"CA48\\\"\"\>", ",", "\<\"\\\"CA49\\\"\"\>", ",", "\<\"\\\"CA50\\\"\"\>", ",", "\<\"\\\"CA51\\\"\"\>", ",", "\<\"\\\"CA52\\\"\"\>", ",", "\<\"\\\"CA53\\\"\"\>", ",", "\<\"\\\"CA54\\\"\"\>", ",", "\<\"\\\"CA55\\\"\"\>", ",", "\<\"\\\"CA56\\\"\"\>", ",", "\<\"\\\"CA57\\\"\"\>", ",", "\<\"\\\"SC\\\"\"\>", ",", "\<\"\\\"SC36\\\"\"\>", ",", "\<\"\\\"SC37\\\"\"\>", ",", "\<\"\\\"SC38\\\"\"\>", ",", "\<\"\\\"SC39\\\"\"\>", ",", "\<\"\\\"SC40\\\"\"\>", ",", "\<\"\\\"SC41\\\"\"\>", ",", "\<\"\\\"SC42\\\"\"\>", ",", "\<\"\\\"SC43\\\"\"\>", ",", "\<\"\\\"SC44\\\"\"\>", ",", "\<\"\\\"SC45\\\"\"\>", ",", "\<\"\\\"SC46\\\"\"\>", ",", "\<\"\\\"SC47\\\"\"\>", ",", "\<\"\\\"SC48\\\"\"\>", ",", "\<\"\\\"SC49\\\"\"\>", ",", "\<\"\\\"SC50\\\"\"\>", ",", "\<\"\\\"SC51\\\"\"\>", ",", "\<\"\\\"SC52\\\"\"\>", ",", "\<\"\\\"SC53\\\"\"\>", ",", "\<\"\\\"SC54\\\"\"\>", ",", "\<\"\\\"SC55\\\"\"\>", ",", "\<\"\\\"SC56\\\"\"\>", ",", "\<\"\\\"SC57\\\"\"\>", ",", "\<\"\\\"SC58\\\"\"\>", ",", "\<\"\\\"SC59\\\"\"\>", ",", "\<\"\\\"SC60\\\"\"\>", ",", "\<\"\\\"TI\\\"\"\>", ",", "\<\"\\\"TI38\\\"\"\>", ",", "\<\"\\\"TI39\\\"\"\>", ",", "\<\"\\\"TI40\\\"\"\>", ",", "\<\"\\\"TI41\\\"\"\>", ",", "\<\"\\\"TI42\\\"\"\>", ",", "\<\"\\\"TI43\\\"\"\>", ",", "\<\"\\\"TI44\\\"\"\>", ",", "\<\"\\\"TI45\\\"\"\>", ",", "\<\"\\\"TI46\\\"\"\>", ",", "\<\"\\\"TI47\\\"\"\>", ",", "\<\"\\\"TI48\\\"\"\>", ",", "\<\"\\\"TI49\\\"\"\>", ",", "\<\"\\\"TI50\\\"\"\>", ",", "\<\"\\\"TI51\\\"\"\>", ",", "\<\"\\\"TI52\\\"\"\>", ",", "\<\"\\\"TI53\\\"\"\>", ",", "\<\"\\\"TI54\\\"\"\>", ",", "\<\"\\\"TI55\\\"\"\>", ",", "\<\"\\\"TI56\\\"\"\>", ",", "\<\"\\\"TI57\\\"\"\>", ",", "\<\"\\\"TI58\\\"\"\>", ",", "\<\"\\\"TI59\\\"\"\>", ",", "\<\"\\\"TI60\\\"\"\>", ",", "\<\"\\\"TI61\\\"\"\>", ",", "\<\"\\\"TI62\\\"\"\>", ",", "\<\"\\\"TI63\\\"\"\>", ",", "\<\"\\\"V\\\"\"\>", ",", "\<\"\\\"V40\\\"\"\>", ",", "\<\"\\\"V41\\\"\"\>", ",", "\<\"\\\"V42\\\"\"\>", ",", "\<\"\\\"V43\\\"\"\>", ",", "\<\"\\\"V44\\\"\"\>", ",", "\<\"\\\"V45\\\"\"\>", ",", "\<\"\\\"V46\\\"\"\>", ",", "\<\"\\\"V47\\\"\"\>", ",", "\<\"\\\"V48\\\"\"\>", ",", "\<\"\\\"V49\\\"\"\>", ",", "\<\"\\\"V50\\\"\"\>", ",", "\<\"\\\"V51\\\"\"\>", ",", "\<\"\\\"V52\\\"\"\>", ",", "\<\"\\\"V53\\\"\"\>", ",", "\<\"\\\"V54\\\"\"\>", ",", "\<\"\\\"V55\\\"\"\>", ",", "\<\"\\\"V56\\\"\"\>", ",", "\<\"\\\"V57\\\"\"\>", ",", "\<\"\\\"V58\\\"\"\>", ",", "\<\"\\\"V59\\\"\"\>", ",", "\<\"\\\"V60\\\"\"\>", ",", "\<\"\\\"V61\\\"\"\>", ",", "\<\"\\\"V62\\\"\"\>", ",", "\<\"\\\"V63\\\"\"\>", ",", "\<\"\\\"V64\\\"\"\>", ",", "\<\"\\\"V65\\\"\"\>", ",", "\<\"\\\"CR\\\"\"\>", ",", "\<\"\\\"CR42\\\"\"\>", ",", "\<\"\\\"CR43\\\"\"\>", ",", "\<\"\\\"CR44\\\"\"\>", ",", "\<\"\\\"CR45\\\"\"\>", ",", "\<\"\\\"CR46\\\"\"\>", ",", "\<\"\\\"CR47\\\"\"\>", ",", "\<\"\\\"CR48\\\"\"\>", ",", "\<\"\\\"CR49\\\"\"\>", ",", "\<\"\\\"CR50\\\"\"\>", ",", "\<\"\\\"CR51\\\"\"\>", ",", "\<\"\\\"CR52\\\"\"\>", ",", "\<\"\\\"CR53\\\"\"\>", ",", "\<\"\\\"CR54\\\"\"\>", ",", "\<\"\\\"CR55\\\"\"\>", ",", "\<\"\\\"CR56\\\"\"\>", ",", "\<\"\\\"CR57\\\"\"\>", ",", "\<\"\\\"CR58\\\"\"\>", ",", "\<\"\\\"CR59\\\"\"\>", ",", "\<\"\\\"CR60\\\"\"\>", ",", "\<\"\\\"CR61\\\"\"\>", ",", "\<\"\\\"CR62\\\"\"\>", ",", "\<\"\\\"CR63\\\"\"\>", ",", "\<\"\\\"CR64\\\"\"\>", ",", "\<\"\\\"CR65\\\"\"\>", ",", "\<\"\\\"CR66\\\"\"\>", ",", "\<\"\\\"CR67\\\"\"\>", ",", "\<\"\\\"MN\\\"\"\>", ",", "\<\"\\\"MN44\\\"\"\>", ",", "\<\"\\\"MN45\\\"\"\>", ",", "\<\"\\\"MN46\\\"\"\>", ",", "\<\"\\\"MN47\\\"\"\>", ",", "\<\"\\\"MN48\\\"\"\>", ",", "\<\"\\\"MN49\\\"\"\>", ",", "\<\"\\\"MN50\\\"\"\>", ",", "\<\"\\\"MN51\\\"\"\>", ",", "\<\"\\\"MN52\\\"\"\>", ",", "\<\"\\\"MN53\\\"\"\>", ",", "\<\"\\\"MN54\\\"\"\>", ",", "\<\"\\\"MN55\\\"\"\>", ",", "\<\"\\\"MN56\\\"\"\>", ",", "\<\"\\\"MN57\\\"\"\>", ",", "\<\"\\\"MN58\\\"\"\>", ",", "\<\"\\\"MN59\\\"\"\>", ",", "\<\"\\\"MN60\\\"\"\>", ",", "\<\"\\\"MN61\\\"\"\>", ",", "\<\"\\\"MN62\\\"\"\>", ",", "\<\"\\\"MN63\\\"\"\>", ",", "\<\"\\\"MN64\\\"\"\>", ",", "\<\"\\\"MN65\\\"\"\>", ",", "\<\"\\\"MN66\\\"\"\>", ",", "\<\"\\\"MN67\\\"\"\>", ",", "\<\"\\\"MN68\\\"\"\>", ",", "\<\"\\\"MN69\\\"\"\>", ",", "\<\"\\\"FE\\\"\"\>", ",", "\<\"\\\"FE45\\\"\"\>", ",", "\<\"\\\"FE46\\\"\"\>", ",", "\<\"\\\"FE47\\\"\"\>", ",", "\<\"\\\"FE48\\\"\"\>", ",", "\<\"\\\"FE49\\\"\"\>", ",", "\<\"\\\"FE50\\\"\"\>", ",", "\<\"\\\"FE51\\\"\"\>", ",", "\<\"\\\"FE52\\\"\"\>", ",", "\<\"\\\"FE53\\\"\"\>", ",", "\<\"\\\"FE54\\\"\"\>", ",", "\<\"\\\"FE55\\\"\"\>", ",", "\<\"\\\"FE56\\\"\"\>", ",", "\<\"\\\"FE57\\\"\"\>", ",", "\<\"\\\"FE58\\\"\"\>", ",", "\<\"\\\"FE59\\\"\"\>", ",", "\<\"\\\"FE60\\\"\"\>", ",", "\<\"\\\"FE61\\\"\"\>", ",", "\<\"\\\"FE62\\\"\"\>", ",", "\<\"\\\"FE63\\\"\"\>", ",", "\<\"\\\"FE64\\\"\"\>", ",", "\<\"\\\"FE65\\\"\"\>", ",", "\<\"\\\"FE66\\\"\"\>", ",", "\<\"\\\"FE67\\\"\"\>", ",", "\<\"\\\"FE68\\\"\"\>", ",", "\<\"\\\"FE69\\\"\"\>", ",", "\<\"\\\"FE70\\\"\"\>", ",", "\<\"\\\"FE71\\\"\"\>", ",", "\<\"\\\"FE72\\\"\"\>", ",", "\<\"\\\"CO\\\"\"\>", ",", "\<\"\\\"CO47\\\"\"\>", ",", "\<\"\\\"CO48\\\"\"\>", ",", "\<\"\\\"CO49\\\"\"\>", ",", "\<\"\\\"CO50\\\"\"\>", ",", "\<\"\\\"CO51\\\"\"\>", ",", "\<\"\\\"CO52\\\"\"\>", ",", "\<\"\\\"CO53\\\"\"\>", ",", "\<\"\\\"CO54\\\"\"\>", ",", "\<\"\\\"CO55\\\"\"\>", ",", "\<\"\\\"CO56\\\"\"\>", ",", "\<\"\\\"CO57\\\"\"\>", ",", "\<\"\\\"CO58\\\"\"\>", ",", "\<\"\\\"CO59\\\"\"\>", ",", "\<\"\\\"CO60\\\"\"\>", ",", "\<\"\\\"CO61\\\"\"\>", ",", "\<\"\\\"CO62\\\"\"\>", ",", "\<\"\\\"CO63\\\"\"\>", ",", "\<\"\\\"CO64\\\"\"\>", ",", "\<\"\\\"CO65\\\"\"\>", ",", "\<\"\\\"CO66\\\"\"\>", ",", "\<\"\\\"CO67\\\"\"\>", ",", "\<\"\\\"CO68\\\"\"\>", ",", "\<\"\\\"CO69\\\"\"\>", ",", "\<\"\\\"CO70\\\"\"\>", ",", "\<\"\\\"CO71\\\"\"\>", ",", "\<\"\\\"CO72\\\"\"\>", ",", "\<\"\\\"CO73\\\"\"\>", ",", "\<\"\\\"CO74\\\"\"\>", ",", "\<\"\\\"CO75\\\"\"\>", ",", "\<\"\\\"NI\\\"\"\>", ",", "\<\"\\\"NI48\\\"\"\>", ",", "\<\"\\\"NI49\\\"\"\>", ",", "\<\"\\\"NI50\\\"\"\>", ",", "\<\"\\\"NI51\\\"\"\>", ",", "\<\"\\\"NI52\\\"\"\>", ",", "\<\"\\\"NI53\\\"\"\>", ",", "\<\"\\\"NI54\\\"\"\>", ",", "\<\"\\\"NI55\\\"\"\>", ",", "\<\"\\\"NI56\\\"\"\>", ",", "\<\"\\\"NI57\\\"\"\>", ",", "\<\"\\\"NI58\\\"\"\>", ",", "\<\"\\\"NI59\\\"\"\>", ",", "\<\"\\\"NI60\\\"\"\>", ",", "\<\"\\\"NI61\\\"\"\>", ",", "\<\"\\\"NI62\\\"\"\>", ",", "\<\"\\\"NI63\\\"\"\>", ",", "\<\"\\\"NI64\\\"\"\>", ",", "\<\"\\\"NI65\\\"\"\>", ",", "\<\"\\\"NI66\\\"\"\>", ",", "\<\"\\\"NI67\\\"\"\>", ",", "\<\"\\\"NI68\\\"\"\>", ",", "\<\"\\\"NI69\\\"\"\>", ",", "\<\"\\\"NI70\\\"\"\>", ",", "\<\"\\\"NI71\\\"\"\>", ",", "\<\"\\\"NI72\\\"\"\>", ",", "\<\"\\\"NI73\\\"\"\>", ",", "\<\"\\\"NI74\\\"\"\>", ",", "\<\"\\\"NI75\\\"\"\>", ",", "\<\"\\\"NI76\\\"\"\>", ",", "\<\"\\\"NI77\\\"\"\>", ",", "\<\"\\\"NI78\\\"\"\>", ",", "\<\"\\\"CU\\\"\"\>", ",", "\<\"\\\"CU52\\\"\"\>", ",", "\<\"\\\"CU53\\\"\"\>", ",", "\<\"\\\"CU54\\\"\"\>", ",", "\<\"\\\"CU55\\\"\"\>", ",", "\<\"\\\"CU56\\\"\"\>", ",", "\<\"\\\"CU57\\\"\"\>", ",", "\<\"\\\"CU58\\\"\"\>", ",", "\<\"\\\"CU59\\\"\"\>", ",", "\<\"\\\"CU60\\\"\"\>", ",", "\<\"\\\"CU61\\\"\"\>", ",", "\<\"\\\"CU62\\\"\"\>", ",", "\<\"\\\"CU63\\\"\"\>", ",", "\<\"\\\"CU64\\\"\"\>", ",", "\<\"\\\"CU65\\\"\"\>", ",", "\<\"\\\"CU66\\\"\"\>", ",", "\<\"\\\"CU67\\\"\"\>", ",", "\<\"\\\"CU68\\\"\"\>", ",", "\<\"\\\"CU69\\\"\"\>", ",", "\<\"\\\"CU70\\\"\"\>", ",", "\<\"\\\"CU71\\\"\"\>", ",", "\<\"\\\"CU72\\\"\"\>", ",", "\<\"\\\"CU73\\\"\"\>", ",", "\<\"\\\"CU74\\\"\"\>", ",", "\<\"\\\"CU75\\\"\"\>", ",", "\<\"\\\"CU76\\\"\"\>", ",", "\<\"\\\"CU77\\\"\"\>", ",", "\<\"\\\"CU78\\\"\"\>", ",", "\<\"\\\"CU79\\\"\"\>", ",", "\<\"\\\"CU80\\\"\"\>", ",", "\<\"\\\"ZN\\\"\"\>", ",", "\<\"\\\"ZN54\\\"\"\>", ",", "\<\"\\\"ZN55\\\"\"\>", ",", "\<\"\\\"ZN56\\\"\"\>", ",", "\<\"\\\"ZN57\\\"\"\>", ",", "\<\"\\\"ZN58\\\"\"\>", ",", "\<\"\\\"ZN59\\\"\"\>", ",", "\<\"\\\"ZN60\\\"\"\>", ",", "\<\"\\\"ZN61\\\"\"\>", ",", "\<\"\\\"ZN62\\\"\"\>", ",", "\<\"\\\"ZN63\\\"\"\>", ",", "\<\"\\\"ZN64\\\"\"\>", ",", "\<\"\\\"ZN65\\\"\"\>", ",", "\<\"\\\"ZN66\\\"\"\>", ",", "\<\"\\\"ZN67\\\"\"\>", ",", "\<\"\\\"ZN68\\\"\"\>", ",", "\<\"\\\"ZN69\\\"\"\>", ",", "\<\"\\\"ZN70\\\"\"\>", ",", "\<\"\\\"ZN71\\\"\"\>", ",", "\<\"\\\"ZN72\\\"\"\>", ",", "\<\"\\\"ZN73\\\"\"\>", ",", "\<\"\\\"ZN74\\\"\"\>", ",", "\<\"\\\"ZN75\\\"\"\>", ",", "\<\"\\\"ZN76\\\"\"\>", ",", "\<\"\\\"ZN77\\\"\"\>", ",", "\<\"\\\"ZN78\\\"\"\>", ",", "\<\"\\\"ZN79\\\"\"\>", ",", "\<\"\\\"ZN80\\\"\"\>", ",", "\<\"\\\"ZN81\\\"\"\>", ",", "\<\"\\\"ZN82\\\"\"\>", ",", "\<\"\\\"ZN83\\\"\"\>", ",", "\<\"\\\"GA\\\"\"\>", ",", "\<\"\\\"GA56\\\"\"\>", ",", "\<\"\\\"GA57\\\"\"\>", ",", "\<\"\\\"GA58\\\"\"\>", ",", "\<\"\\\"GA59\\\"\"\>", ",", "\<\"\\\"GA60\\\"\"\>", ",", "\<\"\\\"GA61\\\"\"\>", ",", "\<\"\\\"GA62\\\"\"\>", ",", "\<\"\\\"GA63\\\"\"\>", ",", "\<\"\\\"GA64\\\"\"\>", ",", "\<\"\\\"GA65\\\"\"\>", ",", "\<\"\\\"GA66\\\"\"\>", ",", "\<\"\\\"GA67\\\"\"\>", ",", "\<\"\\\"GA68\\\"\"\>", ",", "\<\"\\\"GA69\\\"\"\>", ",", "\<\"\\\"GA70\\\"\"\>", ",", "\<\"\\\"GA71\\\"\"\>", ",", "\<\"\\\"GA72\\\"\"\>", ",", "\<\"\\\"GA73\\\"\"\>", ",", "\<\"\\\"GA74\\\"\"\>", ",", "\<\"\\\"GA75\\\"\"\>", ",", "\<\"\\\"GA76\\\"\"\>", ",", "\<\"\\\"GA77\\\"\"\>", ",", "\<\"\\\"GA78\\\"\"\>", ",", "\<\"\\\"GA79\\\"\"\>", ",", "\<\"\\\"GA80\\\"\"\>", ",", "\<\"\\\"GA81\\\"\"\>", ",", "\<\"\\\"GA82\\\"\"\>", ",", "\<\"\\\"GA83\\\"\"\>", ",", "\<\"\\\"GA84\\\"\"\>", ",", "\<\"\\\"GA85\\\"\"\>", ",", "\<\"\\\"GA86\\\"\"\>", ",", "\<\"\\\"GE\\\"\"\>", ",", "\<\"\\\"GE58\\\"\"\>", ",", "\<\"\\\"GE59\\\"\"\>", ",", "\<\"\\\"GE60\\\"\"\>", ",", "\<\"\\\"GE61\\\"\"\>", ",", "\<\"\\\"GE62\\\"\"\>", ",", "\<\"\\\"GE63\\\"\"\>", ",", "\<\"\\\"GE64\\\"\"\>", ",", "\<\"\\\"GE65\\\"\"\>", ",", "\<\"\\\"GE66\\\"\"\>", ",", "\<\"\\\"GE67\\\"\"\>", ",", "\<\"\\\"GE68\\\"\"\>", ",", "\<\"\\\"GE69\\\"\"\>", ",", "\<\"\\\"GE70\\\"\"\>", ",", "\<\"\\\"GE71\\\"\"\>", ",", "\<\"\\\"GE72\\\"\"\>", ",", "\<\"\\\"GE73\\\"\"\>", ",", "\<\"\\\"GE74\\\"\"\>", ",", "\<\"\\\"GE75\\\"\"\>", ",", "\<\"\\\"GE76\\\"\"\>", ",", "\<\"\\\"GE77\\\"\"\>", ",", "\<\"\\\"GE78\\\"\"\>", ",", "\<\"\\\"GE79\\\"\"\>", ",", "\<\"\\\"GE80\\\"\"\>", ",", "\<\"\\\"GE81\\\"\"\>", ",", "\<\"\\\"GE82\\\"\"\>", ",", "\<\"\\\"GE83\\\"\"\>", ",", "\<\"\\\"GE84\\\"\"\>", ",", "\<\"\\\"GE85\\\"\"\>", ",", "\<\"\\\"GE86\\\"\"\>", ",", "\<\"\\\"GE87\\\"\"\>", ",", "\<\"\\\"GE88\\\"\"\>", ",", "\<\"\\\"GE89\\\"\"\>", ",", "\<\"\\\"AS\\\"\"\>", ",", "\<\"\\\"AS60\\\"\"\>", ",", "\<\"\\\"AS61\\\"\"\>", ",", "\<\"\\\"AS62\\\"\"\>", ",", "\<\"\\\"AS63\\\"\"\>", ",", "\<\"\\\"AS64\\\"\"\>", ",", "\<\"\\\"AS65\\\"\"\>", ",", "\<\"\\\"AS66\\\"\"\>", ",", "\<\"\\\"AS67\\\"\"\>", ",", "\<\"\\\"AS68\\\"\"\>", ",", "\<\"\\\"AS69\\\"\"\>", ",", "\<\"\\\"AS70\\\"\"\>", ",", "\<\"\\\"AS71\\\"\"\>", ",", "\<\"\\\"AS72\\\"\"\>", ",", "\<\"\\\"AS73\\\"\"\>", ",", "\<\"\\\"AS74\\\"\"\>", ",", "\<\"\\\"AS75\\\"\"\>", ",", "\<\"\\\"AS76\\\"\"\>", ",", "\<\"\\\"AS77\\\"\"\>", ",", "\<\"\\\"AS78\\\"\"\>", ",", "\<\"\\\"AS79\\\"\"\>", ",", "\<\"\\\"AS80\\\"\"\>", ",", "\<\"\\\"AS81\\\"\"\>", ",", "\<\"\\\"AS82\\\"\"\>", ",", "\<\"\\\"AS83\\\"\"\>", ",", "\<\"\\\"AS84\\\"\"\>", ",", "\<\"\\\"AS85\\\"\"\>", ",", "\<\"\\\"AS86\\\"\"\>", ",", "\<\"\\\"AS87\\\"\"\>", ",", "\<\"\\\"AS88\\\"\"\>", ",", "\<\"\\\"AS89\\\"\"\>", ",", "\<\"\\\"AS90\\\"\"\>", ",", "\<\"\\\"AS91\\\"\"\>", ",", "\<\"\\\"AS92\\\"\"\>", ",", "\<\"\\\"SE\\\"\"\>", ",", "\<\"\\\"SE65\\\"\"\>", ",", "\<\"\\\"SE66\\\"\"\>", ",", "\<\"\\\"SE67\\\"\"\>", ",", "\<\"\\\"SE68\\\"\"\>", ",", "\<\"\\\"SE69\\\"\"\>", ",", "\<\"\\\"SE70\\\"\"\>", ",", "\<\"\\\"SE71\\\"\"\>", ",", "\<\"\\\"SE72\\\"\"\>", ",", "\<\"\\\"SE73\\\"\"\>", ",", "\<\"\\\"SE74\\\"\"\>", ",", "\<\"\\\"SE75\\\"\"\>", ",", "\<\"\\\"SE76\\\"\"\>", ",", "\<\"\\\"SE77\\\"\"\>", ",", "\<\"\\\"SE78\\\"\"\>", ",", "\<\"\\\"SE79\\\"\"\>", ",", "\<\"\\\"SE80\\\"\"\>", ",", "\<\"\\\"SE81\\\"\"\>", ",", "\<\"\\\"SE82\\\"\"\>", ",", "\<\"\\\"SE83\\\"\"\>", ",", "\<\"\\\"SE84\\\"\"\>", ",", "\<\"\\\"SE85\\\"\"\>", ",", "\<\"\\\"SE86\\\"\"\>", ",", "\<\"\\\"SE87\\\"\"\>", ",", "\<\"\\\"SE88\\\"\"\>", ",", "\<\"\\\"SE89\\\"\"\>", ",", "\<\"\\\"SE90\\\"\"\>", ",", "\<\"\\\"SE91\\\"\"\>", ",", "\<\"\\\"SE92\\\"\"\>", ",", "\<\"\\\"SE93\\\"\"\>", ",", "\<\"\\\"SE94\\\"\"\>", ",", "\<\"\\\"BR\\\"\"\>", ",", "\<\"\\\"BR67\\\"\"\>", ",", "\<\"\\\"BR68\\\"\"\>", ",", "\<\"\\\"BR69\\\"\"\>", ",", "\<\"\\\"BR70\\\"\"\>", ",", "\<\"\\\"BR71\\\"\"\>", ",", "\<\"\\\"BR72\\\"\"\>", ",", "\<\"\\\"BR73\\\"\"\>", ",", "\<\"\\\"BR74\\\"\"\>", ",", "\<\"\\\"BR75\\\"\"\>", ",", "\<\"\\\"BR76\\\"\"\>", ",", "\<\"\\\"BR77\\\"\"\>", ",", "\<\"\\\"BR78\\\"\"\>", ",", "\<\"\\\"BR79\\\"\"\>", ",", "\<\"\\\"BR80\\\"\"\>", ",", "\<\"\\\"BR81\\\"\"\>", ",", "\<\"\\\"BR82\\\"\"\>", ",", "\<\"\\\"BR83\\\"\"\>", ",", "\<\"\\\"BR84\\\"\"\>", ",", "\<\"\\\"BR85\\\"\"\>", ",", "\<\"\\\"BR86\\\"\"\>", ",", "\<\"\\\"BR87\\\"\"\>", ",", "\<\"\\\"BR88\\\"\"\>", ",", "\<\"\\\"BR89\\\"\"\>", ",", "\<\"\\\"BR90\\\"\"\>", ",", "\<\"\\\"BR91\\\"\"\>", ",", "\<\"\\\"BR92\\\"\"\>", ",", "\<\"\\\"BR93\\\"\"\>", ",", "\<\"\\\"BR94\\\"\"\>", ",", "\<\"\\\"BR95\\\"\"\>", ",", "\<\"\\\"BR96\\\"\"\>", ",", "\<\"\\\"BR97\\\"\"\>", ",", "\<\"\\\"KR\\\"\"\>", ",", "\<\"\\\"KR69\\\"\"\>", ",", "\<\"\\\"KR70\\\"\"\>", ",", "\<\"\\\"KR71\\\"\"\>", ",", "\<\"\\\"KR72\\\"\"\>", ",", "\<\"\\\"KR73\\\"\"\>", ",", "\<\"\\\"KR74\\\"\"\>", ",", "\<\"\\\"KR75\\\"\"\>", ",", "\<\"\\\"KR76\\\"\"\>", ",", "\<\"\\\"KR77\\\"\"\>", ",", "\<\"\\\"KR78\\\"\"\>", ",", "\<\"\\\"KR79\\\"\"\>", ",", "\<\"\\\"KR80\\\"\"\>", ",", "\<\"\\\"KR81\\\"\"\>", ",", "\<\"\\\"KR82\\\"\"\>", ",", "\<\"\\\"KR83\\\"\"\>", ",", "\<\"\\\"KR84\\\"\"\>", ",", "\<\"\\\"KR85\\\"\"\>", ",", "\<\"\\\"KR86\\\"\"\>", ",", "\<\"\\\"KR87\\\"\"\>", ",", "\<\"\\\"KR88\\\"\"\>", ",", "\<\"\\\"KR89\\\"\"\>", ",", "\<\"\\\"KR90\\\"\"\>", ",", "\<\"\\\"KR91\\\"\"\>", ",", "\<\"\\\"KR92\\\"\"\>", ",", "\<\"\\\"KR93\\\"\"\>", ",", "\<\"\\\"KR94\\\"\"\>", ",", "\<\"\\\"KR95\\\"\"\>", ",", "\<\"\\\"KR96\\\"\"\>", ",", "\<\"\\\"KR97\\\"\"\>", ",", "\<\"\\\"KR98\\\"\"\>", ",", "\<\"\\\"KR99\\\"\"\>", ",", "\<\"\\\"KR100\\\"\"\>", ",", "\<\"\\\"RB\\\"\"\>", ",", "\<\"\\\"RB71\\\"\"\>", ",", "\<\"\\\"RB72\\\"\"\>", ",", "\<\"\\\"RB73\\\"\"\>", ",", "\<\"\\\"RB74\\\"\"\>", ",", "\<\"\\\"RB75\\\"\"\>", ",", "\<\"\\\"RB76\\\"\"\>", ",", "\<\"\\\"RB77\\\"\"\>", ",", "\<\"\\\"RB78\\\"\"\>", ",", "\<\"\\\"RB79\\\"\"\>", ",", "\<\"\\\"RB80\\\"\"\>", ",", "\<\"\\\"RB81\\\"\"\>", ",", "\<\"\\\"RB82\\\"\"\>", ",", "\<\"\\\"RB83\\\"\"\>", ",", "\<\"\\\"RB84\\\"\"\>", ",", "\<\"\\\"RB85\\\"\"\>", ",", "\<\"\\\"RB86\\\"\"\>", ",", "\<\"\\\"RB87\\\"\"\>", ",", "\<\"\\\"RB88\\\"\"\>", ",", "\<\"\\\"RB89\\\"\"\>", ",", "\<\"\\\"RB90\\\"\"\>", ",", "\<\"\\\"RB91\\\"\"\>", ",", "\<\"\\\"RB92\\\"\"\>", ",", "\<\"\\\"RB93\\\"\"\>", ",", "\<\"\\\"RB94\\\"\"\>", ",", "\<\"\\\"RB95\\\"\"\>", ",", "\<\"\\\"RB96\\\"\"\>", ",", "\<\"\\\"RB97\\\"\"\>", ",", "\<\"\\\"RB98\\\"\"\>", ",", "\<\"\\\"RB99\\\"\"\>", ",", "\<\"\\\"RB100\\\"\"\>", ",", "\<\"\\\"RB101\\\"\"\>", ",", "\<\"\\\"RB102\\\"\"\>", ",", "\<\"\\\"SR\\\"\"\>", ",", "\<\"\\\"SR73\\\"\"\>", ",", "\<\"\\\"SR74\\\"\"\>", ",", "\<\"\\\"SR75\\\"\"\>", ",", "\<\"\\\"SR76\\\"\"\>", ",", "\<\"\\\"SR77\\\"\"\>", ",", "\<\"\\\"SR78\\\"\"\>", ",", "\<\"\\\"SR79\\\"\"\>", ",", "\<\"\\\"SR80\\\"\"\>", ",", "\<\"\\\"SR81\\\"\"\>", ",", "\<\"\\\"SR82\\\"\"\>", ",", "\<\"\\\"SR83\\\"\"\>", ",", "\<\"\\\"SR84\\\"\"\>", ",", "\<\"\\\"SR85\\\"\"\>", ",", "\<\"\\\"SR86\\\"\"\>", ",", "\<\"\\\"SR87\\\"\"\>", ",", "\<\"\\\"SR88\\\"\"\>", ",", "\<\"\\\"SR89\\\"\"\>", ",", "\<\"\\\"SR90\\\"\"\>", ",", "\<\"\\\"SR91\\\"\"\>", ",", "\<\"\\\"SR92\\\"\"\>", ",", "\<\"\\\"SR93\\\"\"\>", ",", "\<\"\\\"SR94\\\"\"\>", ",", "\<\"\\\"SR95\\\"\"\>", ",", "\<\"\\\"SR96\\\"\"\>", ",", "\<\"\\\"SR97\\\"\"\>", ",", "\<\"\\\"SR98\\\"\"\>", ",", "\<\"\\\"SR99\\\"\"\>", ",", "\<\"\\\"SR100\\\"\"\>", ",", "\<\"\\\"SR101\\\"\"\>", ",", "\<\"\\\"SR102\\\"\"\>", ",", "\<\"\\\"SR103\\\"\"\>", ",", "\<\"\\\"SR104\\\"\"\>", ",", "\<\"\\\"SR105\\\"\"\>", ",", "\<\"\\\"Y\\\"\"\>", ",", "\<\"\\\"Y76\\\"\"\>", ",", "\<\"\\\"Y77\\\"\"\>", ",", "\<\"\\\"Y78\\\"\"\>", ",", "\<\"\\\"Y79\\\"\"\>", ",", "\<\"\\\"Y80\\\"\"\>", ",", "\<\"\\\"Y81\\\"\"\>", ",", "\<\"\\\"Y82\\\"\"\>", ",", "\<\"\\\"Y83\\\"\"\>", ",", "\<\"\\\"Y84\\\"\"\>", ",", "\<\"\\\"Y85\\\"\"\>", ",", "\<\"\\\"Y86\\\"\"\>", ",", "\<\"\\\"Y87\\\"\"\>", ",", "\<\"\\\"Y88\\\"\"\>", ",", "\<\"\\\"Y89\\\"\"\>", ",", "\<\"\\\"Y90\\\"\"\>", ",", "\<\"\\\"Y91\\\"\"\>", ",", "\<\"\\\"Y92\\\"\"\>", ",", "\<\"\\\"Y93\\\"\"\>", ",", "\<\"\\\"Y94\\\"\"\>", ",", "\<\"\\\"Y95\\\"\"\>", ",", "\<\"\\\"Y96\\\"\"\>", ",", "\<\"\\\"Y97\\\"\"\>", ",", "\<\"\\\"Y98\\\"\"\>", ",", "\<\"\\\"Y99\\\"\"\>", ",", "\<\"\\\"Y100\\\"\"\>", ",", "\<\"\\\"Y101\\\"\"\>", ",", "\<\"\\\"Y102\\\"\"\>", ",", "\<\"\\\"Y103\\\"\"\>", ",", "\<\"\\\"Y104\\\"\"\>", ",", "\<\"\\\"Y105\\\"\"\>", ",", "\<\"\\\"Y106\\\"\"\>", ",", "\<\"\\\"Y107\\\"\"\>", ",", "\<\"\\\"Y108\\\"\"\>", ",", "\<\"\\\"ZR\\\"\"\>", ",", "\<\"\\\"ZR78\\\"\"\>", ",", "\<\"\\\"ZR79\\\"\"\>", ",", "\<\"\\\"ZR80\\\"\"\>", ",", "\<\"\\\"ZR81\\\"\"\>", ",", "\<\"\\\"ZR82\\\"\"\>", ",", "\<\"\\\"ZR83\\\"\"\>", ",", "\<\"\\\"ZR84\\\"\"\>", ",", "\<\"\\\"ZR85\\\"\"\>", ",", "\<\"\\\"ZR86\\\"\"\>", ",", "\<\"\\\"ZR87\\\"\"\>", ",", "\<\"\\\"ZR88\\\"\"\>", ",", "\<\"\\\"ZR89\\\"\"\>", ",", "\<\"\\\"ZR90\\\"\"\>", ",", "\<\"\\\"ZR91\\\"\"\>", ",", "\<\"\\\"ZR92\\\"\"\>", ",", "\<\"\\\"ZR93\\\"\"\>", ",", "\<\"\\\"ZR94\\\"\"\>", ",", "\<\"\\\"ZR95\\\"\"\>", ",", "\<\"\\\"ZR96\\\"\"\>", ",", "\<\"\\\"ZR97\\\"\"\>", ",", "\<\"\\\"ZR98\\\"\"\>", ",", "\<\"\\\"ZR99\\\"\"\>", ",", "\<\"\\\"ZR100\\\"\"\>", ",", "\<\"\\\"ZR101\\\"\"\>", ",", "\<\"\\\"ZR102\\\"\"\>", ",", "\<\"\\\"ZR103\\\"\"\>", ",", "\<\"\\\"ZR104\\\"\"\>", ",", "\<\"\\\"ZR105\\\"\"\>", ",", "\<\"\\\"ZR106\\\"\"\>", ",", "\<\"\\\"ZR107\\\"\"\>", ",", "\<\"\\\"ZR108\\\"\"\>", ",", "\<\"\\\"ZR109\\\"\"\>", ",", "\<\"\\\"ZR110\\\"\"\>", ",", "\<\"\\\"NB\\\"\"\>", ",", "\<\"\\\"NB81\\\"\"\>", ",", "\<\"\\\"NB82\\\"\"\>", ",", "\<\"\\\"NB83\\\"\"\>", ",", "\<\"\\\"NB84\\\"\"\>", ",", "\<\"\\\"NB85\\\"\"\>", ",", "\<\"\\\"NB86\\\"\"\>", ",", "\<\"\\\"NB87\\\"\"\>", ",", "\<\"\\\"NB88\\\"\"\>", ",", "\<\"\\\"NB89\\\"\"\>", ",", "\<\"\\\"NB90\\\"\"\>", ",", "\<\"\\\"NB91\\\"\"\>", ",", "\<\"\\\"NB92\\\"\"\>", ",", "\<\"\\\"NB93\\\"\"\>", ",", "\<\"\\\"NB94\\\"\"\>", ",", "\<\"\\\"NB95\\\"\"\>", ",", "\<\"\\\"NB96\\\"\"\>", ",", "\<\"\\\"NB97\\\"\"\>", ",", "\<\"\\\"NB98\\\"\"\>", ",", "\<\"\\\"NB99\\\"\"\>", ",", "\<\"\\\"NB100\\\"\"\>", ",", "\<\"\\\"NB101\\\"\"\>", ",", "\<\"\\\"NB102\\\"\"\>", ",", "\<\"\\\"NB103\\\"\"\>", ",", "\<\"\\\"NB104\\\"\"\>", ",", "\<\"\\\"NB105\\\"\"\>", ",", "\<\"\\\"NB106\\\"\"\>", ",", "\<\"\\\"NB107\\\"\"\>", ",", "\<\"\\\"NB108\\\"\"\>", ",", "\<\"\\\"NB109\\\"\"\>", ",", "\<\"\\\"NB110\\\"\"\>", ",", "\<\"\\\"NB111\\\"\"\>", ",", "\<\"\\\"NB112\\\"\"\>", ",", "\<\"\\\"NB113\\\"\"\>", ",", "\<\"\\\"MO\\\"\"\>", ",", "\<\"\\\"MO83\\\"\"\>", ",", "\<\"\\\"MO84\\\"\"\>", ",", "\<\"\\\"MO85\\\"\"\>", ",", "\<\"\\\"MO86\\\"\"\>", ",", "\<\"\\\"MO87\\\"\"\>", ",", "\<\"\\\"MO88\\\"\"\>", ",", "\<\"\\\"MO89\\\"\"\>", ",", "\<\"\\\"MO90\\\"\"\>", ",", "\<\"\\\"MO91\\\"\"\>", ",", "\<\"\\\"MO92\\\"\"\>", ",", "\<\"\\\"MO93\\\"\"\>", ",", "\<\"\\\"MO94\\\"\"\>", ",", "\<\"\\\"MO95\\\"\"\>", ",", "\<\"\\\"MO96\\\"\"\>", ",", "\<\"\\\"MO97\\\"\"\>", ",", "\<\"\\\"MO98\\\"\"\>", ",", "\<\"\\\"MO99\\\"\"\>", ",", "\<\"\\\"MO100\\\"\"\>", ",", "\<\"\\\"MO101\\\"\"\>", ",", "\<\"\\\"MO102\\\"\"\>", ",", "\<\"\\\"MO103\\\"\"\>", ",", "\<\"\\\"MO104\\\"\"\>", ",", "\<\"\\\"MO105\\\"\"\>", ",", "\<\"\\\"MO106\\\"\"\>", ",", "\<\"\\\"MO107\\\"\"\>", ",", "\<\"\\\"MO108\\\"\"\>", ",", "\<\"\\\"MO109\\\"\"\>", ",", "\<\"\\\"MO110\\\"\"\>", ",", "\<\"\\\"MO111\\\"\"\>", ",", "\<\"\\\"MO112\\\"\"\>", ",", "\<\"\\\"MO113\\\"\"\>", ",", "\<\"\\\"MO114\\\"\"\>", ",", "\<\"\\\"MO115\\\"\"\>", ",", "\<\"\\\"TC\\\"\"\>", ",", "\<\"\\\"TC85\\\"\"\>", ",", "\<\"\\\"TC86\\\"\"\>", ",", "\<\"\\\"TC87\\\"\"\>", ",", "\<\"\\\"TC88\\\"\"\>", ",", "\<\"\\\"TC89\\\"\"\>", ",", "\<\"\\\"TC90\\\"\"\>", ",", "\<\"\\\"TC91\\\"\"\>", ",", "\<\"\\\"TC92\\\"\"\>", ",", "\<\"\\\"TC93\\\"\"\>", ",", "\<\"\\\"TC94\\\"\"\>", ",", "\<\"\\\"TC95\\\"\"\>", ",", "\<\"\\\"TC96\\\"\"\>", ",", "\<\"\\\"TC97\\\"\"\>", ",", "\<\"\\\"TC98\\\"\"\>", ",", "\<\"\\\"TC99\\\"\"\>", ",", "\<\"\\\"TC100\\\"\"\>", ",", "\<\"\\\"TC101\\\"\"\>", ",", "\<\"\\\"TC102\\\"\"\>", ",", "\<\"\\\"TC103\\\"\"\>", ",", "\<\"\\\"TC104\\\"\"\>", ",", "\<\"\\\"TC105\\\"\"\>", ",", "\<\"\\\"TC106\\\"\"\>", ",", "\<\"\\\"TC107\\\"\"\>", ",", "\<\"\\\"TC108\\\"\"\>", ",", "\<\"\\\"TC109\\\"\"\>", ",", "\<\"\\\"TC110\\\"\"\>", ",", "\<\"\\\"TC111\\\"\"\>", ",", "\<\"\\\"TC112\\\"\"\>", ",", "\<\"\\\"TC113\\\"\"\>", ",", "\<\"\\\"TC114\\\"\"\>", ",", "\<\"\\\"TC115\\\"\"\>", ",", "\<\"\\\"TC116\\\"\"\>", ",", "\<\"\\\"TC117\\\"\"\>", ",", "\<\"\\\"TC118\\\"\"\>", ",", "\<\"\\\"RU\\\"\"\>", ",", "\<\"\\\"RU87\\\"\"\>", ",", "\<\"\\\"RU88\\\"\"\>", ",", "\<\"\\\"RU89\\\"\"\>", ",", "\<\"\\\"RU90\\\"\"\>", ",", "\<\"\\\"RU91\\\"\"\>", ",", "\<\"\\\"RU92\\\"\"\>", ",", "\<\"\\\"RU93\\\"\"\>", ",", "\<\"\\\"RU94\\\"\"\>", ",", "\<\"\\\"RU95\\\"\"\>", ",", "\<\"\\\"RU96\\\"\"\>", ",", "\<\"\\\"RU97\\\"\"\>", ",", "\<\"\\\"RU98\\\"\"\>", ",", "\<\"\\\"RU99\\\"\"\>", ",", "\<\"\\\"RU100\\\"\"\>", ",", "\<\"\\\"RU101\\\"\"\>", ",", "\<\"\\\"RU102\\\"\"\>", ",", "\<\"\\\"RU103\\\"\"\>", ",", "\<\"\\\"RU104\\\"\"\>", ",", "\<\"\\\"RU105\\\"\"\>", ",", "\<\"\\\"RU106\\\"\"\>", ",", "\<\"\\\"RU107\\\"\"\>", ",", "\<\"\\\"RU108\\\"\"\>", ",", "\<\"\\\"RU109\\\"\"\>", ",", "\<\"\\\"RU110\\\"\"\>", ",", "\<\"\\\"RU111\\\"\"\>", ",", "\<\"\\\"RU112\\\"\"\>", ",", "\<\"\\\"RU113\\\"\"\>", ",", "\<\"\\\"RU114\\\"\"\>", ",", "\<\"\\\"RU115\\\"\"\>", ",", "\<\"\\\"RU116\\\"\"\>", ",", "\<\"\\\"RU117\\\"\"\>", ",", "\<\"\\\"RU118\\\"\"\>", ",", "\<\"\\\"RU119\\\"\"\>", ",", "\<\"\\\"RU120\\\"\"\>", ",", "\<\"\\\"RH\\\"\"\>", ",", "\<\"\\\"RH89\\\"\"\>", ",", "\<\"\\\"RH90\\\"\"\>", ",", "\<\"\\\"RH91\\\"\"\>", ",", "\<\"\\\"RH92\\\"\"\>", ",", "\<\"\\\"RH93\\\"\"\>", ",", "\<\"\\\"RH94\\\"\"\>", ",", "\<\"\\\"RH95\\\"\"\>", ",", "\<\"\\\"RH96\\\"\"\>", ",", "\<\"\\\"RH97\\\"\"\>", ",", "\<\"\\\"RH98\\\"\"\>", ",", "\<\"\\\"RH99\\\"\"\>", ",", "\<\"\\\"RH100\\\"\"\>", ",", "\<\"\\\"RH101\\\"\"\>", ",", "\<\"\\\"RH102\\\"\"\>", ",", "\<\"\\\"RH103\\\"\"\>", ",", "\<\"\\\"RH104\\\"\"\>", ",", "\<\"\\\"RH105\\\"\"\>", ",", "\<\"\\\"RH106\\\"\"\>", ",", "\<\"\\\"RH107\\\"\"\>", ",", "\<\"\\\"RH108\\\"\"\>", ",", "\<\"\\\"RH109\\\"\"\>", ",", "\<\"\\\"RH110\\\"\"\>", ",", "\<\"\\\"RH111\\\"\"\>", ",", "\<\"\\\"RH112\\\"\"\>", ",", "\<\"\\\"RH113\\\"\"\>", ",", "\<\"\\\"RH114\\\"\"\>", ",", "\<\"\\\"RH115\\\"\"\>", ",", "\<\"\\\"RH116\\\"\"\>", ",", "\<\"\\\"RH117\\\"\"\>", ",", "\<\"\\\"RH118\\\"\"\>", ",", "\<\"\\\"RH119\\\"\"\>", ",", "\<\"\\\"RH120\\\"\"\>", ",", "\<\"\\\"RH121\\\"\"\>", ",", "\<\"\\\"RH122\\\"\"\>", ",", "\<\"\\\"PD\\\"\"\>", ",", "\<\"\\\"PD91\\\"\"\>", ",", "\<\"\\\"PD92\\\"\"\>", ",", "\<\"\\\"PD93\\\"\"\>", ",", "\<\"\\\"PD94\\\"\"\>", ",", "\<\"\\\"PD95\\\"\"\>", ",", "\<\"\\\"PD96\\\"\"\>", ",", "\<\"\\\"PD97\\\"\"\>", ",", "\<\"\\\"PD98\\\"\"\>", ",", "\<\"\\\"PD99\\\"\"\>", ",", "\<\"\\\"PD100\\\"\"\>", ",", "\<\"\\\"PD101\\\"\"\>", ",", "\<\"\\\"PD102\\\"\"\>", ",", "\<\"\\\"PD103\\\"\"\>", ",", "\<\"\\\"PD104\\\"\"\>", ",", "\<\"\\\"PD105\\\"\"\>", ",", "\<\"\\\"PD106\\\"\"\>", ",", "\<\"\\\"PD107\\\"\"\>", ",", "\<\"\\\"PD108\\\"\"\>", ",", "\<\"\\\"PD109\\\"\"\>", ",", "\<\"\\\"PD110\\\"\"\>", ",", "\<\"\\\"PD111\\\"\"\>", ",", "\<\"\\\"PD112\\\"\"\>", ",", "\<\"\\\"PD113\\\"\"\>", ",", "\<\"\\\"PD114\\\"\"\>", ",", "\<\"\\\"PD115\\\"\"\>", ",", "\<\"\\\"PD116\\\"\"\>", ",", "\<\"\\\"PD117\\\"\"\>", ",", "\<\"\\\"PD118\\\"\"\>", ",", "\<\"\\\"PD119\\\"\"\>", ",", "\<\"\\\"PD120\\\"\"\>", ",", "\<\"\\\"PD121\\\"\"\>", ",", "\<\"\\\"PD122\\\"\"\>", ",", "\<\"\\\"PD123\\\"\"\>", ",", "\<\"\\\"PD124\\\"\"\>", ",", "\<\"\\\"AG\\\"\"\>", ",", "\<\"\\\"AG93\\\"\"\>", ",", "\<\"\\\"AG94\\\"\"\>", ",", "\<\"\\\"AG95\\\"\"\>", ",", "\<\"\\\"AG96\\\"\"\>", ",", "\<\"\\\"AG97\\\"\"\>", ",", "\<\"\\\"AG98\\\"\"\>", ",", "\<\"\\\"AG99\\\"\"\>", ",", "\<\"\\\"AG100\\\"\"\>", ",", "\<\"\\\"AG101\\\"\"\>", ",", "\<\"\\\"AG102\\\"\"\>", ",", "\<\"\\\"AG103\\\"\"\>", ",", "\<\"\\\"AG104\\\"\"\>", ",", "\<\"\\\"AG105\\\"\"\>", ",", "\<\"\\\"AG106\\\"\"\>", ",", "\<\"\\\"AG107\\\"\"\>", ",", "\<\"\\\"AG108\\\"\"\>", ",", "\<\"\\\"AG109\\\"\"\>", ",", "\<\"\\\"AG110\\\"\"\>", ",", "\<\"\\\"AG111\\\"\"\>", ",", "\<\"\\\"AG112\\\"\"\>", ",", "\<\"\\\"AG113\\\"\"\>", ",", "\<\"\\\"AG114\\\"\"\>", ",", "\<\"\\\"AG115\\\"\"\>", ",", "\<\"\\\"AG116\\\"\"\>", ",", "\<\"\\\"AG117\\\"\"\>", ",", "\<\"\\\"AG118\\\"\"\>", ",", "\<\"\\\"AG119\\\"\"\>", ",", "\<\"\\\"AG120\\\"\"\>", ",", "\<\"\\\"AG121\\\"\"\>", ",", "\<\"\\\"AG122\\\"\"\>", ",", "\<\"\\\"AG123\\\"\"\>", ",", "\<\"\\\"AG124\\\"\"\>", ",", "\<\"\\\"AG125\\\"\"\>", ",", "\<\"\\\"AG126\\\"\"\>", ",", "\<\"\\\"AG127\\\"\"\>", ",", "\<\"\\\"AG128\\\"\"\>", ",", "\<\"\\\"AG129\\\"\"\>", ",", "\<\"\\\"AG130\\\"\"\>", ",", "\<\"\\\"CD\\\"\"\>", ",", "\<\"\\\"CD95\\\"\"\>", ",", "\<\"\\\"CD96\\\"\"\>", ",", "\<\"\\\"CD97\\\"\"\>", ",", "\<\"\\\"CD98\\\"\"\>", ",", "\<\"\\\"CD99\\\"\"\>", ",", "\<\"\\\"CD100\\\"\"\>", ",", "\<\"\\\"CD101\\\"\"\>", ",", "\<\"\\\"CD102\\\"\"\>", ",", "\<\"\\\"CD103\\\"\"\>", ",", "\<\"\\\"CD104\\\"\"\>", ",", "\<\"\\\"CD105\\\"\"\>", ",", "\<\"\\\"CD106\\\"\"\>", ",", "\<\"\\\"CD107\\\"\"\>", ",", "\<\"\\\"CD108\\\"\"\>", ",", "\<\"\\\"CD109\\\"\"\>", ",", "\<\"\\\"CD110\\\"\"\>", ",", "\<\"\\\"CD111\\\"\"\>", ",", "\<\"\\\"CD112\\\"\"\>", ",", "\<\"\\\"CD113\\\"\"\>", ",", "\<\"\\\"CD114\\\"\"\>", ",", "\<\"\\\"CD115\\\"\"\>", ",", "\<\"\\\"CD116\\\"\"\>", ",", "\<\"\\\"CD117\\\"\"\>", ",", "\<\"\\\"CD118\\\"\"\>", ",", "\<\"\\\"CD119\\\"\"\>", ",", "\<\"\\\"CD120\\\"\"\>", ",", "\<\"\\\"CD121\\\"\"\>", ",", "\<\"\\\"CD122\\\"\"\>", ",", "\<\"\\\"CD123\\\"\"\>", ",", "\<\"\\\"CD124\\\"\"\>", ",", "\<\"\\\"CD125\\\"\"\>", ",", "\<\"\\\"CD126\\\"\"\>", ",", "\<\"\\\"CD127\\\"\"\>", ",", "\<\"\\\"CD128\\\"\"\>", ",", "\<\"\\\"CD129\\\"\"\>", ",", "\<\"\\\"CD130\\\"\"\>", ",", "\<\"\\\"CD131\\\"\"\>", ",", "\<\"\\\"CD132\\\"\"\>", ",", "\<\"\\\"IN\\\"\"\>", ",", "\<\"\\\"IN97\\\"\"\>", ",", "\<\"\\\"IN98\\\"\"\>", ",", "\<\"\\\"IN99\\\"\"\>", ",", "\<\"\\\"IN100\\\"\"\>", ",", "\<\"\\\"IN101\\\"\"\>", ",", "\<\"\\\"IN102\\\"\"\>", ",", "\<\"\\\"IN103\\\"\"\>", ",", "\<\"\\\"IN104\\\"\"\>", ",", "\<\"\\\"IN105\\\"\"\>", ",", "\<\"\\\"IN106\\\"\"\>", ",", "\<\"\\\"IN107\\\"\"\>", ",", "\<\"\\\"IN108\\\"\"\>", ",", "\<\"\\\"IN109\\\"\"\>", ",", "\<\"\\\"IN110\\\"\"\>", ",", "\<\"\\\"IN111\\\"\"\>", ",", "\<\"\\\"IN112\\\"\"\>", ",", "\<\"\\\"IN113\\\"\"\>", ",", "\<\"\\\"IN114\\\"\"\>", ",", "\<\"\\\"IN115\\\"\"\>", ",", "\<\"\\\"IN116\\\"\"\>", ",", "\<\"\\\"IN117\\\"\"\>", ",", "\<\"\\\"IN118\\\"\"\>", ",", "\<\"\\\"IN119\\\"\"\>", ",", "\<\"\\\"IN120\\\"\"\>", ",", "\<\"\\\"IN121\\\"\"\>", ",", "\<\"\\\"IN122\\\"\"\>", ",", "\<\"\\\"IN123\\\"\"\>", ",", "\<\"\\\"IN124\\\"\"\>", ",", "\<\"\\\"IN125\\\"\"\>", ",", "\<\"\\\"IN126\\\"\"\>", ",", "\<\"\\\"IN127\\\"\"\>", ",", "\<\"\\\"IN128\\\"\"\>", ",", "\<\"\\\"IN129\\\"\"\>", ",", "\<\"\\\"IN130\\\"\"\>", ",", "\<\"\\\"IN131\\\"\"\>", ",", "\<\"\\\"IN132\\\"\"\>", ",", "\<\"\\\"IN133\\\"\"\>", ",", "\<\"\\\"IN134\\\"\"\>", ",", "\<\"\\\"IN135\\\"\"\>", ",", "\<\"\\\"SN\\\"\"\>", ",", "\<\"\\\"SN99\\\"\"\>", ",", "\<\"\\\"SN100\\\"\"\>", ",", "\<\"\\\"SN101\\\"\"\>", ",", "\<\"\\\"SN102\\\"\"\>", ",", "\<\"\\\"SN103\\\"\"\>", ",", "\<\"\\\"SN104\\\"\"\>", ",", "\<\"\\\"SN105\\\"\"\>", ",", "\<\"\\\"SN106\\\"\"\>", ",", "\<\"\\\"SN107\\\"\"\>", ",", "\<\"\\\"SN108\\\"\"\>", ",", "\<\"\\\"SN109\\\"\"\>", ",", "\<\"\\\"SN110\\\"\"\>", ",", "\<\"\\\"SN111\\\"\"\>", ",", "\<\"\\\"SN112\\\"\"\>", ",", "\<\"\\\"SN113\\\"\"\>", ",", "\<\"\\\"SN114\\\"\"\>", ",", "\<\"\\\"SN115\\\"\"\>", ",", "\<\"\\\"SN116\\\"\"\>", ",", "\<\"\\\"SN117\\\"\"\>", ",", "\<\"\\\"SN118\\\"\"\>", ",", "\<\"\\\"SN119\\\"\"\>", ",", "\<\"\\\"SN120\\\"\"\>", ",", "\<\"\\\"SN121\\\"\"\>", ",", "\<\"\\\"SN122\\\"\"\>", ",", "\<\"\\\"SN123\\\"\"\>", ",", "\<\"\\\"SN124\\\"\"\>", ",", "\<\"\\\"SN125\\\"\"\>", ",", "\<\"\\\"SN126\\\"\"\>", ",", "\<\"\\\"SN127\\\"\"\>", ",", "\<\"\\\"SN128\\\"\"\>", ",", "\<\"\\\"SN129\\\"\"\>", ",", "\<\"\\\"SN130\\\"\"\>", ",", "\<\"\\\"SN131\\\"\"\>", ",", "\<\"\\\"SN132\\\"\"\>", ",", "\<\"\\\"SN133\\\"\"\>", ",", "\<\"\\\"SN134\\\"\"\>", ",", "\<\"\\\"SN135\\\"\"\>", ",", "\<\"\\\"SN136\\\"\"\>", ",", "\<\"\\\"SN137\\\"\"\>", ",", "\<\"\\\"SB\\\"\"\>", ",", "\<\"\\\"SB103\\\"\"\>", ",", "\<\"\\\"SB104\\\"\"\>", ",", "\<\"\\\"SB105\\\"\"\>", ",", "\<\"\\\"SB106\\\"\"\>", ",", "\<\"\\\"SB107\\\"\"\>", ",", "\<\"\\\"SB108\\\"\"\>", ",", "\<\"\\\"SB109\\\"\"\>", ",", "\<\"\\\"SB110\\\"\"\>", ",", "\<\"\\\"SB111\\\"\"\>", ",", "\<\"\\\"SB112\\\"\"\>", ",", "\<\"\\\"SB113\\\"\"\>", ",", "\<\"\\\"SB114\\\"\"\>", ",", "\<\"\\\"SB115\\\"\"\>", ",", "\<\"\\\"SB116\\\"\"\>", ",", "\<\"\\\"SB117\\\"\"\>", ",", "\<\"\\\"SB118\\\"\"\>", ",", "\<\"\\\"SB119\\\"\"\>", ",", "\<\"\\\"SB120\\\"\"\>", ",", "\<\"\\\"SB121\\\"\"\>", ",", "\<\"\\\"SB122\\\"\"\>", ",", "\<\"\\\"SB123\\\"\"\>", ",", "\<\"\\\"SB124\\\"\"\>", ",", "\<\"\\\"SB125\\\"\"\>", ",", "\<\"\\\"SB126\\\"\"\>", ",", "\<\"\\\"SB127\\\"\"\>", ",", "\<\"\\\"SB128\\\"\"\>", ",", "\<\"\\\"SB129\\\"\"\>", ",", "\<\"\\\"SB130\\\"\"\>", ",", "\<\"\\\"SB131\\\"\"\>", ",", "\<\"\\\"SB132\\\"\"\>", ",", "\<\"\\\"SB133\\\"\"\>", ",", "\<\"\\\"SB134\\\"\"\>", ",", "\<\"\\\"SB135\\\"\"\>", ",", "\<\"\\\"SB136\\\"\"\>", ",", "\<\"\\\"SB137\\\"\"\>", ",", "\<\"\\\"SB138\\\"\"\>", ",", "\<\"\\\"SB139\\\"\"\>", ",", "\<\"\\\"TE\\\"\"\>", ",", "\<\"\\\"TE105\\\"\"\>", ",", "\<\"\\\"TE106\\\"\"\>", ",", "\<\"\\\"TE107\\\"\"\>", ",", "\<\"\\\"TE108\\\"\"\>", ",", "\<\"\\\"TE109\\\"\"\>", ",", "\<\"\\\"TE110\\\"\"\>", ",", "\<\"\\\"TE111\\\"\"\>", ",", "\<\"\\\"TE112\\\"\"\>", ",", "\<\"\\\"TE113\\\"\"\>", ",", "\<\"\\\"TE114\\\"\"\>", ",", "\<\"\\\"TE115\\\"\"\>", ",", "\<\"\\\"TE116\\\"\"\>", ",", "\<\"\\\"TE117\\\"\"\>", ",", "\<\"\\\"TE118\\\"\"\>", ",", "\<\"\\\"TE119\\\"\"\>", ",", "\<\"\\\"TE120\\\"\"\>", ",", "\<\"\\\"TE121\\\"\"\>", ",", "\<\"\\\"TE122\\\"\"\>", ",", "\<\"\\\"TE123\\\"\"\>", ",", "\<\"\\\"TE124\\\"\"\>", ",", "\<\"\\\"TE125\\\"\"\>", ",", "\<\"\\\"TE126\\\"\"\>", ",", "\<\"\\\"TE127\\\"\"\>", ",", "\<\"\\\"TE128\\\"\"\>", ",", "\<\"\\\"TE129\\\"\"\>", ",", "\<\"\\\"TE130\\\"\"\>", ",", "\<\"\\\"TE131\\\"\"\>", ",", "\<\"\\\"TE132\\\"\"\>", ",", "\<\"\\\"TE133\\\"\"\>", ",", "\<\"\\\"TE134\\\"\"\>", ",", "\<\"\\\"TE135\\\"\"\>", ",", "\<\"\\\"TE136\\\"\"\>", ",", "\<\"\\\"TE137\\\"\"\>", ",", "\<\"\\\"TE138\\\"\"\>", ",", "\<\"\\\"TE139\\\"\"\>", ",", "\<\"\\\"TE140\\\"\"\>", ",", "\<\"\\\"TE141\\\"\"\>", ",", "\<\"\\\"TE142\\\"\"\>", ",", "\<\"\\\"I\\\"\"\>", ",", "\<\"\\\"I108\\\"\"\>", ",", "\<\"\\\"I109\\\"\"\>", ",", "\<\"\\\"I110\\\"\"\>", ",", "\<\"\\\"I111\\\"\"\>", ",", "\<\"\\\"I112\\\"\"\>", ",", "\<\"\\\"I113\\\"\"\>", ",", "\<\"\\\"I114\\\"\"\>", ",", "\<\"\\\"I115\\\"\"\>", ",", "\<\"\\\"I116\\\"\"\>", ",", "\<\"\\\"I117\\\"\"\>", ",", "\<\"\\\"I118\\\"\"\>", ",", "\<\"\\\"I119\\\"\"\>", ",", "\<\"\\\"I120\\\"\"\>", ",", "\<\"\\\"I121\\\"\"\>", ",", "\<\"\\\"I122\\\"\"\>", ",", "\<\"\\\"I123\\\"\"\>", ",", "\<\"\\\"I124\\\"\"\>", ",", "\<\"\\\"I125\\\"\"\>", ",", "\<\"\\\"I126\\\"\"\>", ",", "\<\"\\\"I127\\\"\"\>", ",", "\<\"\\\"I128\\\"\"\>", ",", "\<\"\\\"I129\\\"\"\>", ",", "\<\"\\\"I130\\\"\"\>", ",", "\<\"\\\"I131\\\"\"\>", ",", "\<\"\\\"I132\\\"\"\>", ",", "\<\"\\\"I133\\\"\"\>", ",", "\<\"\\\"I134\\\"\"\>", ",", "\<\"\\\"I135\\\"\"\>", ",", "\<\"\\\"I136\\\"\"\>", ",", "\<\"\\\"I137\\\"\"\>", ",", "\<\"\\\"I138\\\"\"\>", ",", "\<\"\\\"I139\\\"\"\>", ",", "\<\"\\\"I140\\\"\"\>", ",", "\<\"\\\"I141\\\"\"\>", ",", "\<\"\\\"I142\\\"\"\>", ",", "\<\"\\\"I143\\\"\"\>", ",", "\<\"\\\"I144\\\"\"\>", ",", "\<\"\\\"XE\\\"\"\>", ",", "\<\"\\\"XE110\\\"\"\>", ",", "\<\"\\\"XE111\\\"\"\>", ",", "\<\"\\\"XE112\\\"\"\>", ",", "\<\"\\\"XE113\\\"\"\>", ",", "\<\"\\\"XE114\\\"\"\>", ",", "\<\"\\\"XE115\\\"\"\>", ",", "\<\"\\\"XE116\\\"\"\>", ",", "\<\"\\\"XE117\\\"\"\>", ",", "\<\"\\\"XE118\\\"\"\>", ",", "\<\"\\\"XE119\\\"\"\>", ",", "\<\"\\\"XE120\\\"\"\>", ",", "\<\"\\\"XE121\\\"\"\>", ",", "\<\"\\\"XE122\\\"\"\>", ",", "\<\"\\\"XE123\\\"\"\>", ",", "\<\"\\\"XE124\\\"\"\>", ",", "\<\"\\\"XE125\\\"\"\>", ",", "\<\"\\\"XE126\\\"\"\>", ",", "\<\"\\\"XE127\\\"\"\>", ",", "\<\"\\\"XE128\\\"\"\>", ",", "\<\"\\\"XE129\\\"\"\>", ",", "\<\"\\\"XE130\\\"\"\>", ",", "\<\"\\\"XE131\\\"\"\>", ",", "\<\"\\\"XE132\\\"\"\>", ",", "\<\"\\\"XE133\\\"\"\>", ",", "\<\"\\\"XE134\\\"\"\>", ",", "\<\"\\\"XE135\\\"\"\>", ",", "\<\"\\\"XE136\\\"\"\>", ",", "\<\"\\\"XE137\\\"\"\>", ",", "\<\"\\\"XE138\\\"\"\>", ",", "\<\"\\\"XE139\\\"\"\>", ",", "\<\"\\\"XE140\\\"\"\>", ",", "\<\"\\\"XE141\\\"\"\>", ",", "\<\"\\\"XE142\\\"\"\>", ",", "\<\"\\\"XE143\\\"\"\>", ",", "\<\"\\\"XE144\\\"\"\>", ",", "\<\"\\\"XE145\\\"\"\>", ",", "\<\"\\\"XE146\\\"\"\>", ",", "\<\"\\\"XE147\\\"\"\>", ",", "\<\"\\\"CS\\\"\"\>", ",", "\<\"\\\"CS112\\\"\"\>", ",", "\<\"\\\"CS113\\\"\"\>", ",", "\<\"\\\"CS114\\\"\"\>", ",", "\<\"\\\"CS115\\\"\"\>", ",", "\<\"\\\"CS116\\\"\"\>", ",", "\<\"\\\"CS117\\\"\"\>", ",", "\<\"\\\"CS118\\\"\"\>", ",", "\<\"\\\"CS119\\\"\"\>", ",", "\<\"\\\"CS120\\\"\"\>", ",", "\<\"\\\"CS121\\\"\"\>", ",", "\<\"\\\"CS122\\\"\"\>", ",", "\<\"\\\"CS123\\\"\"\>", ",", "\<\"\\\"CS124\\\"\"\>", ",", "\<\"\\\"CS125\\\"\"\>", ",", "\<\"\\\"CS126\\\"\"\>", ",", "\<\"\\\"CS127\\\"\"\>", ",", "\<\"\\\"CS128\\\"\"\>", ",", "\<\"\\\"CS129\\\"\"\>", ",", "\<\"\\\"CS130\\\"\"\>", ",", "\<\"\\\"CS131\\\"\"\>", ",", "\<\"\\\"CS132\\\"\"\>", ",", "\<\"\\\"CS133\\\"\"\>", ",", "\<\"\\\"CS134\\\"\"\>", ",", "\<\"\\\"CS135\\\"\"\>", ",", "\<\"\\\"CS136\\\"\"\>", ",", "\<\"\\\"CS137\\\"\"\>", ",", "\<\"\\\"CS138\\\"\"\>", ",", "\<\"\\\"CS139\\\"\"\>", ",", "\<\"\\\"CS140\\\"\"\>", ",", "\<\"\\\"CS141\\\"\"\>", ",", "\<\"\\\"CS142\\\"\"\>", ",", "\<\"\\\"CS143\\\"\"\>", ",", "\<\"\\\"CS144\\\"\"\>", ",", "\<\"\\\"CS145\\\"\"\>", ",", "\<\"\\\"CS146\\\"\"\>", ",", "\<\"\\\"CS147\\\"\"\>", ",", "\<\"\\\"CS148\\\"\"\>", ",", "\<\"\\\"CS149\\\"\"\>", ",", "\<\"\\\"CS150\\\"\"\>", ",", "\<\"\\\"CS151\\\"\"\>", ",", "\<\"\\\"BA\\\"\"\>", ",", "\<\"\\\"BA114\\\"\"\>", ",", "\<\"\\\"BA115\\\"\"\>", ",", "\<\"\\\"BA116\\\"\"\>", ",", "\<\"\\\"BA117\\\"\"\>", ",", "\<\"\\\"BA118\\\"\"\>", ",", "\<\"\\\"BA119\\\"\"\>", ",", "\<\"\\\"BA120\\\"\"\>", ",", "\<\"\\\"BA121\\\"\"\>", ",", "\<\"\\\"BA122\\\"\"\>", ",", "\<\"\\\"BA123\\\"\"\>", ",", "\<\"\\\"BA124\\\"\"\>", ",", "\<\"\\\"BA125\\\"\"\>", ",", "\<\"\\\"BA126\\\"\"\>", ",", "\<\"\\\"BA127\\\"\"\>", ",", "\<\"\\\"BA128\\\"\"\>", ",", "\<\"\\\"BA129\\\"\"\>", ",", "\<\"\\\"BA130\\\"\"\>", ",", "\<\"\\\"BA131\\\"\"\>", ",", "\<\"\\\"BA132\\\"\"\>", ",", "\<\"\\\"BA133\\\"\"\>", ",", "\<\"\\\"BA134\\\"\"\>", ",", "\<\"\\\"BA135\\\"\"\>", ",", "\<\"\\\"BA136\\\"\"\>", ",", "\<\"\\\"BA137\\\"\"\>", ",", "\<\"\\\"BA138\\\"\"\>", ",", "\<\"\\\"BA139\\\"\"\>", ",", "\<\"\\\"BA140\\\"\"\>", ",", "\<\"\\\"BA141\\\"\"\>", ",", "\<\"\\\"BA142\\\"\"\>", ",", "\<\"\\\"BA143\\\"\"\>", ",", "\<\"\\\"BA144\\\"\"\>", ",", "\<\"\\\"BA145\\\"\"\>", ",", "\<\"\\\"BA146\\\"\"\>", ",", "\<\"\\\"BA147\\\"\"\>", ",", "\<\"\\\"BA148\\\"\"\>", ",", "\<\"\\\"BA149\\\"\"\>", ",", "\<\"\\\"BA150\\\"\"\>", ",", "\<\"\\\"BA151\\\"\"\>", ",", "\<\"\\\"BA152\\\"\"\>", ",", "\<\"\\\"BA153\\\"\"\>", ",", "\<\"\\\"LA\\\"\"\>", ",", "\<\"\\\"LA117\\\"\"\>", ",", "\<\"\\\"LA118\\\"\"\>", ",", "\<\"\\\"LA119\\\"\"\>", ",", "\<\"\\\"LA120\\\"\"\>", ",", "\<\"\\\"LA121\\\"\"\>", ",", "\<\"\\\"LA122\\\"\"\>", ",", "\<\"\\\"LA123\\\"\"\>", ",", "\<\"\\\"LA124\\\"\"\>", ",", "\<\"\\\"LA125\\\"\"\>", ",", "\<\"\\\"LA126\\\"\"\>", ",", "\<\"\\\"LA127\\\"\"\>", ",", "\<\"\\\"LA128\\\"\"\>", ",", "\<\"\\\"LA129\\\"\"\>", ",", "\<\"\\\"LA130\\\"\"\>", ",", "\<\"\\\"LA131\\\"\"\>", ",", "\<\"\\\"LA132\\\"\"\>", ",", "\<\"\\\"LA133\\\"\"\>", ",", "\<\"\\\"LA134\\\"\"\>", ",", "\<\"\\\"LA135\\\"\"\>", ",", "\<\"\\\"LA136\\\"\"\>", ",", "\<\"\\\"LA137\\\"\"\>", ",", "\<\"\\\"LA138\\\"\"\>", ",", "\<\"\\\"LA139\\\"\"\>", ",", "\<\"\\\"LA140\\\"\"\>", ",", "\<\"\\\"LA141\\\"\"\>", ",", "\<\"\\\"LA142\\\"\"\>", ",", "\<\"\\\"LA143\\\"\"\>", ",", "\<\"\\\"LA144\\\"\"\>", ",", "\<\"\\\"LA145\\\"\"\>", ",", "\<\"\\\"LA146\\\"\"\>", ",", "\<\"\\\"LA147\\\"\"\>", ",", "\<\"\\\"LA148\\\"\"\>", ",", "\<\"\\\"LA149\\\"\"\>", ",", "\<\"\\\"LA150\\\"\"\>", ",", "\<\"\\\"LA151\\\"\"\>", ",", "\<\"\\\"LA152\\\"\"\>", ",", "\<\"\\\"LA153\\\"\"\>", ",", "\<\"\\\"LA154\\\"\"\>", ",", "\<\"\\\"LA155\\\"\"\>", ",", "\<\"\\\"CE\\\"\"\>", ",", "\<\"\\\"CE119\\\"\"\>", ",", "\<\"\\\"CE120\\\"\"\>", ",", "\<\"\\\"CE121\\\"\"\>", ",", "\<\"\\\"CE122\\\"\"\>", ",", "\<\"\\\"CE123\\\"\"\>", ",", "\<\"\\\"CE124\\\"\"\>", ",", "\<\"\\\"CE125\\\"\"\>", ",", "\<\"\\\"CE126\\\"\"\>", ",", "\<\"\\\"CE127\\\"\"\>", ",", "\<\"\\\"CE128\\\"\"\>", ",", "\<\"\\\"CE129\\\"\"\>", ",", "\<\"\\\"CE130\\\"\"\>", ",", "\<\"\\\"CE131\\\"\"\>", ",", "\<\"\\\"CE132\\\"\"\>", ",", "\<\"\\\"CE133\\\"\"\>", ",", "\<\"\\\"CE134\\\"\"\>", ",", "\<\"\\\"CE135\\\"\"\>", ",", "\<\"\\\"CE136\\\"\"\>", ",", "\<\"\\\"CE137\\\"\"\>", ",", "\<\"\\\"CE138\\\"\"\>", ",", "\<\"\\\"CE139\\\"\"\>", ",", "\<\"\\\"CE140\\\"\"\>", ",", "\<\"\\\"CE141\\\"\"\>", ",", "\<\"\\\"CE142\\\"\"\>", ",", "\<\"\\\"CE143\\\"\"\>", ",", "\<\"\\\"CE144\\\"\"\>", ",", "\<\"\\\"CE145\\\"\"\>", ",", "\<\"\\\"CE146\\\"\"\>", ",", "\<\"\\\"CE147\\\"\"\>", ",", "\<\"\\\"CE148\\\"\"\>", ",", "\<\"\\\"CE149\\\"\"\>", ",", "\<\"\\\"CE150\\\"\"\>", ",", "\<\"\\\"CE151\\\"\"\>", ",", "\<\"\\\"CE152\\\"\"\>", ",", "\<\"\\\"CE153\\\"\"\>", ",", "\<\"\\\"CE154\\\"\"\>", ",", "\<\"\\\"CE155\\\"\"\>", ",", "\<\"\\\"CE156\\\"\"\>", ",", "\<\"\\\"CE157\\\"\"\>", ",", "\<\"\\\"PR\\\"\"\>", ",", "\<\"\\\"PR121\\\"\"\>", ",", "\<\"\\\"PR122\\\"\"\>", ",", "\<\"\\\"PR123\\\"\"\>", ",", "\<\"\\\"PR124\\\"\"\>", ",", "\<\"\\\"PR125\\\"\"\>", ",", "\<\"\\\"PR126\\\"\"\>", ",", "\<\"\\\"PR127\\\"\"\>", ",", "\<\"\\\"PR128\\\"\"\>", ",", "\<\"\\\"PR129\\\"\"\>", ",", "\<\"\\\"PR130\\\"\"\>", ",", "\<\"\\\"PR131\\\"\"\>", ",", "\<\"\\\"PR132\\\"\"\>", ",", "\<\"\\\"PR133\\\"\"\>", ",", "\<\"\\\"PR134\\\"\"\>", ",", "\<\"\\\"PR135\\\"\"\>", ",", "\<\"\\\"PR136\\\"\"\>", ",", "\<\"\\\"PR137\\\"\"\>", ",", "\<\"\\\"PR138\\\"\"\>", ",", "\<\"\\\"PR139\\\"\"\>", ",", "\<\"\\\"PR140\\\"\"\>", ",", "\<\"\\\"PR141\\\"\"\>", ",", "\<\"\\\"PR142\\\"\"\>", ",", "\<\"\\\"PR143\\\"\"\>", ",", "\<\"\\\"PR144\\\"\"\>", ",", "\<\"\\\"PR145\\\"\"\>", ",", "\<\"\\\"PR146\\\"\"\>", ",", "\<\"\\\"PR147\\\"\"\>", ",", "\<\"\\\"PR148\\\"\"\>", ",", "\<\"\\\"PR149\\\"\"\>", ",", "\<\"\\\"PR150\\\"\"\>", ",", "\<\"\\\"PR151\\\"\"\>", ",", "\<\"\\\"PR152\\\"\"\>", ",", "\<\"\\\"PR153\\\"\"\>", ",", "\<\"\\\"PR154\\\"\"\>", ",", "\<\"\\\"PR155\\\"\"\>", ",", "\<\"\\\"PR156\\\"\"\>", ",", "\<\"\\\"PR157\\\"\"\>", ",", "\<\"\\\"PR158\\\"\"\>", ",", "\<\"\\\"PR159\\\"\"\>", ",", "\<\"\\\"ND\\\"\"\>", ",", "\<\"\\\"ND124\\\"\"\>", ",", "\<\"\\\"ND125\\\"\"\>", ",", "\<\"\\\"ND126\\\"\"\>", ",", "\<\"\\\"ND127\\\"\"\>", ",", "\<\"\\\"ND128\\\"\"\>", ",", "\<\"\\\"ND129\\\"\"\>", ",", "\<\"\\\"ND130\\\"\"\>", ",", "\<\"\\\"ND131\\\"\"\>", ",", "\<\"\\\"ND132\\\"\"\>", ",", "\<\"\\\"ND133\\\"\"\>", ",", "\<\"\\\"ND134\\\"\"\>", ",", "\<\"\\\"ND135\\\"\"\>", ",", "\<\"\\\"ND136\\\"\"\>", ",", "\<\"\\\"ND137\\\"\"\>", ",", "\<\"\\\"ND138\\\"\"\>", ",", "\<\"\\\"ND139\\\"\"\>", ",", "\<\"\\\"ND140\\\"\"\>", ",", "\<\"\\\"ND141\\\"\"\>", ",", "\<\"\\\"ND142\\\"\"\>", ",", "\<\"\\\"ND143\\\"\"\>", ",", "\<\"\\\"ND144\\\"\"\>", ",", "\<\"\\\"ND145\\\"\"\>", ",", "\<\"\\\"ND146\\\"\"\>", ",", "\<\"\\\"ND147\\\"\"\>", ",", "\<\"\\\"ND148\\\"\"\>", ",", "\<\"\\\"ND149\\\"\"\>", ",", "\<\"\\\"ND150\\\"\"\>", ",", "\<\"\\\"ND151\\\"\"\>", ",", "\<\"\\\"ND152\\\"\"\>", ",", "\<\"\\\"ND153\\\"\"\>", ",", "\<\"\\\"ND154\\\"\"\>", ",", "\<\"\\\"ND155\\\"\"\>", ",", "\<\"\\\"ND156\\\"\"\>", ",", "\<\"\\\"ND157\\\"\"\>", ",", "\<\"\\\"ND158\\\"\"\>", ",", "\<\"\\\"ND159\\\"\"\>", ",", "\<\"\\\"ND160\\\"\"\>", ",", "\<\"\\\"ND161\\\"\"\>", ",", "\<\"\\\"PM\\\"\"\>", ",", "\<\"\\\"PM126\\\"\"\>", ",", "\<\"\\\"PM127\\\"\"\>", ",", "\<\"\\\"PM128\\\"\"\>", ",", "\<\"\\\"PM129\\\"\"\>", ",", "\<\"\\\"PM130\\\"\"\>", ",", "\<\"\\\"PM131\\\"\"\>", ",", "\<\"\\\"PM132\\\"\"\>", ",", "\<\"\\\"PM133\\\"\"\>", ",", "\<\"\\\"PM134\\\"\"\>", ",", "\<\"\\\"PM135\\\"\"\>", ",", "\<\"\\\"PM136\\\"\"\>", ",", "\<\"\\\"PM137\\\"\"\>", ",", "\<\"\\\"PM138\\\"\"\>", ",", "\<\"\\\"PM139\\\"\"\>", ",", "\<\"\\\"PM140\\\"\"\>", ",", "\<\"\\\"PM141\\\"\"\>", ",", "\<\"\\\"PM142\\\"\"\>", ",", "\<\"\\\"PM143\\\"\"\>", ",", "\<\"\\\"PM144\\\"\"\>", ",", "\<\"\\\"PM145\\\"\"\>", ",", "\<\"\\\"PM146\\\"\"\>", ",", "\<\"\\\"PM147\\\"\"\>", ",", "\<\"\\\"PM148\\\"\"\>", ",", "\<\"\\\"PM149\\\"\"\>", ",", "\<\"\\\"PM150\\\"\"\>", ",", "\<\"\\\"PM151\\\"\"\>", ",", "\<\"\\\"PM152\\\"\"\>", ",", "\<\"\\\"PM153\\\"\"\>", ",", "\<\"\\\"PM154\\\"\"\>", ",", "\<\"\\\"PM155\\\"\"\>", ",", "\<\"\\\"PM156\\\"\"\>", ",", "\<\"\\\"PM157\\\"\"\>", ",", "\<\"\\\"PM158\\\"\"\>", ",", "\<\"\\\"PM159\\\"\"\>", ",", "\<\"\\\"PM160\\\"\"\>", ",", "\<\"\\\"PM161\\\"\"\>", ",", "\<\"\\\"PM162\\\"\"\>", ",", "\<\"\\\"PM163\\\"\"\>", ",", "\<\"\\\"SM\\\"\"\>", ",", "\<\"\\\"SM128\\\"\"\>", ",", "\<\"\\\"SM129\\\"\"\>", ",", "\<\"\\\"SM130\\\"\"\>", ",", "\<\"\\\"SM131\\\"\"\>", ",", "\<\"\\\"SM132\\\"\"\>", ",", "\<\"\\\"SM133\\\"\"\>", ",", "\<\"\\\"SM134\\\"\"\>", ",", "\<\"\\\"SM135\\\"\"\>", ",", "\<\"\\\"SM136\\\"\"\>", ",", "\<\"\\\"SM137\\\"\"\>", ",", "\<\"\\\"SM138\\\"\"\>", ",", "\<\"\\\"SM139\\\"\"\>", ",", "\<\"\\\"SM140\\\"\"\>", ",", "\<\"\\\"SM141\\\"\"\>", ",", "\<\"\\\"SM142\\\"\"\>", ",", "\<\"\\\"SM143\\\"\"\>", ",", "\<\"\\\"SM144\\\"\"\>", ",", "\<\"\\\"SM145\\\"\"\>", ",", "\<\"\\\"SM146\\\"\"\>", ",", "\<\"\\\"SM147\\\"\"\>", ",", "\<\"\\\"SM148\\\"\"\>", ",", "\<\"\\\"SM149\\\"\"\>", ",", "\<\"\\\"SM150\\\"\"\>", ",", "\<\"\\\"SM151\\\"\"\>", ",", "\<\"\\\"SM152\\\"\"\>", ",", "\<\"\\\"SM153\\\"\"\>", ",", "\<\"\\\"SM154\\\"\"\>", ",", "\<\"\\\"SM155\\\"\"\>", ",", "\<\"\\\"SM156\\\"\"\>", ",", "\<\"\\\"SM157\\\"\"\>", ",", "\<\"\\\"SM158\\\"\"\>", ",", "\<\"\\\"SM159\\\"\"\>", ",", "\<\"\\\"SM160\\\"\"\>", ",", "\<\"\\\"SM161\\\"\"\>", ",", "\<\"\\\"SM162\\\"\"\>", ",", "\<\"\\\"SM163\\\"\"\>", ",", "\<\"\\\"SM164\\\"\"\>", ",", "\<\"\\\"SM165\\\"\"\>", ",", "\<\"\\\"EU\\\"\"\>", ",", "\<\"\\\"EU130\\\"\"\>", ",", "\<\"\\\"EU131\\\"\"\>", ",", "\<\"\\\"EU132\\\"\"\>", ",", "\<\"\\\"EU133\\\"\"\>", ",", "\<\"\\\"EU134\\\"\"\>", ",", "\<\"\\\"EU135\\\"\"\>", ",", "\<\"\\\"EU136\\\"\"\>", ",", "\<\"\\\"EU137\\\"\"\>", ",", "\<\"\\\"EU138\\\"\"\>", ",", "\<\"\\\"EU139\\\"\"\>", ",", "\<\"\\\"EU140\\\"\"\>", ",", "\<\"\\\"EU141\\\"\"\>", ",", "\<\"\\\"EU142\\\"\"\>", ",", "\<\"\\\"EU143\\\"\"\>", ",", "\<\"\\\"EU144\\\"\"\>", ",", "\<\"\\\"EU145\\\"\"\>", ",", "\<\"\\\"EU146\\\"\"\>", ",", "\<\"\\\"EU147\\\"\"\>", ",", "\<\"\\\"EU148\\\"\"\>", ",", "\<\"\\\"EU149\\\"\"\>", ",", "\<\"\\\"EU150\\\"\"\>", ",", "\<\"\\\"EU151\\\"\"\>", ",", "\<\"\\\"EU152\\\"\"\>", ",", "\<\"\\\"EU153\\\"\"\>", ",", "\<\"\\\"EU154\\\"\"\>", ",", "\<\"\\\"EU155\\\"\"\>", ",", "\<\"\\\"EU156\\\"\"\>", ",", "\<\"\\\"EU157\\\"\"\>", ",", "\<\"\\\"EU158\\\"\"\>", ",", "\<\"\\\"EU159\\\"\"\>", ",", "\<\"\\\"EU160\\\"\"\>", ",", "\<\"\\\"EU161\\\"\"\>", ",", "\<\"\\\"EU162\\\"\"\>", ",", "\<\"\\\"EU163\\\"\"\>", ",", "\<\"\\\"EU164\\\"\"\>", ",", "\<\"\\\"EU165\\\"\"\>", ",", "\<\"\\\"EU166\\\"\"\>", ",", "\<\"\\\"EU167\\\"\"\>", ",", "\<\"\\\"GD\\\"\"\>", ",", "\<\"\\\"GD134\\\"\"\>", ",", "\<\"\\\"GD135\\\"\"\>", ",", "\<\"\\\"GD136\\\"\"\>", ",", "\<\"\\\"GD137\\\"\"\>", ",", "\<\"\\\"GD138\\\"\"\>", ",", "\<\"\\\"GD139\\\"\"\>", ",", "\<\"\\\"GD140\\\"\"\>", ",", "\<\"\\\"GD141\\\"\"\>", ",", "\<\"\\\"GD142\\\"\"\>", ",", "\<\"\\\"GD143\\\"\"\>", ",", "\<\"\\\"GD144\\\"\"\>", ",", "\<\"\\\"GD145\\\"\"\>", ",", "\<\"\\\"GD146\\\"\"\>", ",", "\<\"\\\"GD147\\\"\"\>", ",", "\<\"\\\"GD148\\\"\"\>", ",", "\<\"\\\"GD149\\\"\"\>", ",", "\<\"\\\"GD150\\\"\"\>", ",", "\<\"\\\"GD151\\\"\"\>", ",", "\<\"\\\"GD152\\\"\"\>", ",", "\<\"\\\"GD153\\\"\"\>", ",", "\<\"\\\"GD154\\\"\"\>", ",", "\<\"\\\"GD155\\\"\"\>", ",", "\<\"\\\"GD156\\\"\"\>", ",", "\<\"\\\"GD157\\\"\"\>", ",", "\<\"\\\"GD158\\\"\"\>", ",", "\<\"\\\"GD159\\\"\"\>", ",", "\<\"\\\"GD160\\\"\"\>", ",", "\<\"\\\"GD161\\\"\"\>", ",", "\<\"\\\"GD162\\\"\"\>", ",", "\<\"\\\"GD163\\\"\"\>", ",", "\<\"\\\"GD164\\\"\"\>", ",", "\<\"\\\"GD165\\\"\"\>", ",", "\<\"\\\"GD166\\\"\"\>", ",", "\<\"\\\"GD167\\\"\"\>", ",", "\<\"\\\"GD168\\\"\"\>", ",", "\<\"\\\"GD169\\\"\"\>", ",", "\<\"\\\"TB\\\"\"\>", ",", "\<\"\\\"TB136\\\"\"\>", ",", "\<\"\\\"TB137\\\"\"\>", ",", "\<\"\\\"TB138\\\"\"\>", ",", "\<\"\\\"TB139\\\"\"\>", ",", "\<\"\\\"TB140\\\"\"\>", ",", "\<\"\\\"TB141\\\"\"\>", ",", "\<\"\\\"TB142\\\"\"\>", ",", "\<\"\\\"TB143\\\"\"\>", ",", "\<\"\\\"TB144\\\"\"\>", ",", "\<\"\\\"TB145\\\"\"\>", ",", "\<\"\\\"TB146\\\"\"\>", ",", "\<\"\\\"TB147\\\"\"\>", ",", "\<\"\\\"TB148\\\"\"\>", ",", "\<\"\\\"TB149\\\"\"\>", ",", "\<\"\\\"TB150\\\"\"\>", ",", "\<\"\\\"TB151\\\"\"\>", ",", "\<\"\\\"TB152\\\"\"\>", ",", "\<\"\\\"TB153\\\"\"\>", ",", "\<\"\\\"TB154\\\"\"\>", ",", "\<\"\\\"TB155\\\"\"\>", ",", "\<\"\\\"TB156\\\"\"\>", ",", "\<\"\\\"TB157\\\"\"\>", ",", "\<\"\\\"TB158\\\"\"\>", ",", "\<\"\\\"TB159\\\"\"\>", ",", "\<\"\\\"TB160\\\"\"\>", ",", "\<\"\\\"TB161\\\"\"\>", ",", "\<\"\\\"TB162\\\"\"\>", ",", "\<\"\\\"TB163\\\"\"\>", ",", "\<\"\\\"TB164\\\"\"\>", ",", "\<\"\\\"TB165\\\"\"\>", ",", "\<\"\\\"TB166\\\"\"\>", ",", "\<\"\\\"TB167\\\"\"\>", ",", "\<\"\\\"TB168\\\"\"\>", ",", "\<\"\\\"TB169\\\"\"\>", ",", "\<\"\\\"TB170\\\"\"\>", ",", "\<\"\\\"TB171\\\"\"\>", ",", "\<\"\\\"DY\\\"\"\>", ",", "\<\"\\\"DY138\\\"\"\>", ",", "\<\"\\\"DY139\\\"\"\>", ",", "\<\"\\\"DY140\\\"\"\>", ",", "\<\"\\\"DY141\\\"\"\>", ",", "\<\"\\\"DY142\\\"\"\>", ",", "\<\"\\\"DY143\\\"\"\>", ",", "\<\"\\\"DY144\\\"\"\>", ",", "\<\"\\\"DY145\\\"\"\>", ",", "\<\"\\\"DY146\\\"\"\>", ",", "\<\"\\\"DY147\\\"\"\>", ",", "\<\"\\\"DY148\\\"\"\>", ",", "\<\"\\\"DY149\\\"\"\>", ",", "\<\"\\\"DY150\\\"\"\>", ",", "\<\"\\\"DY151\\\"\"\>", ",", "\<\"\\\"DY152\\\"\"\>", ",", "\<\"\\\"DY153\\\"\"\>", ",", "\<\"\\\"DY154\\\"\"\>", ",", "\<\"\\\"DY155\\\"\"\>", ",", "\<\"\\\"DY156\\\"\"\>", ",", "\<\"\\\"DY157\\\"\"\>", ",", "\<\"\\\"DY158\\\"\"\>", ",", "\<\"\\\"DY159\\\"\"\>", ",", "\<\"\\\"DY160\\\"\"\>", ",", "\<\"\\\"DY161\\\"\"\>", ",", "\<\"\\\"DY162\\\"\"\>", ",", "\<\"\\\"DY163\\\"\"\>", ",", "\<\"\\\"DY164\\\"\"\>", ",", "\<\"\\\"DY165\\\"\"\>", ",", "\<\"\\\"DY166\\\"\"\>", ",", "\<\"\\\"DY167\\\"\"\>", ",", "\<\"\\\"DY168\\\"\"\>", ",", "\<\"\\\"DY169\\\"\"\>", ",", "\<\"\\\"DY170\\\"\"\>", ",", "\<\"\\\"DY171\\\"\"\>", ",", "\<\"\\\"DY172\\\"\"\>", ",", "\<\"\\\"DY173\\\"\"\>", ",", "\<\"\\\"HO\\\"\"\>", ",", "\<\"\\\"HO140\\\"\"\>", ",", "\<\"\\\"HO141\\\"\"\>", ",", "\<\"\\\"HO142\\\"\"\>", ",", "\<\"\\\"HO143\\\"\"\>", ",", "\<\"\\\"HO144\\\"\"\>", ",", "\<\"\\\"HO145\\\"\"\>", ",", "\<\"\\\"HO146\\\"\"\>", ",", "\<\"\\\"HO147\\\"\"\>", ",", "\<\"\\\"HO148\\\"\"\>", ",", "\<\"\\\"HO149\\\"\"\>", ",", "\<\"\\\"HO150\\\"\"\>", ",", "\<\"\\\"HO151\\\"\"\>", ",", "\<\"\\\"HO152\\\"\"\>", ",", "\<\"\\\"HO153\\\"\"\>", ",", "\<\"\\\"HO154\\\"\"\>", ",", "\<\"\\\"HO155\\\"\"\>", ",", "\<\"\\\"HO156\\\"\"\>", ",", "\<\"\\\"HO157\\\"\"\>", ",", "\<\"\\\"HO158\\\"\"\>", ",", "\<\"\\\"HO159\\\"\"\>", ",", "\<\"\\\"HO160\\\"\"\>", ",", "\<\"\\\"HO161\\\"\"\>", ",", "\<\"\\\"HO162\\\"\"\>", ",", "\<\"\\\"HO163\\\"\"\>", ",", "\<\"\\\"HO164\\\"\"\>", ",", "\<\"\\\"HO165\\\"\"\>", ",", "\<\"\\\"HO166\\\"\"\>", ",", "\<\"\\\"HO167\\\"\"\>", ",", "\<\"\\\"HO168\\\"\"\>", ",", "\<\"\\\"HO169\\\"\"\>", ",", "\<\"\\\"HO170\\\"\"\>", ",", "\<\"\\\"HO171\\\"\"\>", ",", "\<\"\\\"HO172\\\"\"\>", ",", "\<\"\\\"HO173\\\"\"\>", ",", "\<\"\\\"HO174\\\"\"\>", ",", "\<\"\\\"HO175\\\"\"\>", ",", "\<\"\\\"ER\\\"\"\>", ",", "\<\"\\\"ER143\\\"\"\>", ",", "\<\"\\\"ER144\\\"\"\>", ",", "\<\"\\\"ER145\\\"\"\>", ",", "\<\"\\\"ER146\\\"\"\>", ",", "\<\"\\\"ER147\\\"\"\>", ",", "\<\"\\\"ER148\\\"\"\>", ",", "\<\"\\\"ER149\\\"\"\>", ",", "\<\"\\\"ER150\\\"\"\>", ",", "\<\"\\\"ER151\\\"\"\>", ",", "\<\"\\\"ER152\\\"\"\>", ",", "\<\"\\\"ER153\\\"\"\>", ",", "\<\"\\\"ER154\\\"\"\>", ",", "\<\"\\\"ER155\\\"\"\>", ",", "\<\"\\\"ER156\\\"\"\>", ",", "\<\"\\\"ER157\\\"\"\>", ",", "\<\"\\\"ER158\\\"\"\>", ",", "\<\"\\\"ER159\\\"\"\>", ",", "\<\"\\\"ER160\\\"\"\>", ",", "\<\"\\\"ER161\\\"\"\>", ",", "\<\"\\\"ER162\\\"\"\>", ",", "\<\"\\\"ER163\\\"\"\>", ",", "\<\"\\\"ER164\\\"\"\>", ",", "\<\"\\\"ER165\\\"\"\>", ",", "\<\"\\\"ER166\\\"\"\>", ",", "\<\"\\\"ER167\\\"\"\>", ",", "\<\"\\\"ER168\\\"\"\>", ",", "\<\"\\\"ER169\\\"\"\>", ",", "\<\"\\\"ER170\\\"\"\>", ",", "\<\"\\\"ER171\\\"\"\>", ",", "\<\"\\\"ER172\\\"\"\>", ",", "\<\"\\\"ER173\\\"\"\>", ",", "\<\"\\\"ER174\\\"\"\>", ",", "\<\"\\\"ER175\\\"\"\>", ",", "\<\"\\\"ER176\\\"\"\>", ",", "\<\"\\\"ER177\\\"\"\>", ",", "\<\"\\\"TM\\\"\"\>", ",", "\<\"\\\"TM145\\\"\"\>", ",", "\<\"\\\"TM146\\\"\"\>", ",", "\<\"\\\"TM147\\\"\"\>", ",", "\<\"\\\"TM148\\\"\"\>", ",", "\<\"\\\"TM149\\\"\"\>", ",", "\<\"\\\"TM150\\\"\"\>", ",", "\<\"\\\"TM151\\\"\"\>", ",", "\<\"\\\"TM152\\\"\"\>", ",", "\<\"\\\"TM153\\\"\"\>", ",", "\<\"\\\"TM154\\\"\"\>", ",", "\<\"\\\"TM155\\\"\"\>", ",", "\<\"\\\"TM156\\\"\"\>", ",", "\<\"\\\"TM157\\\"\"\>", ",", "\<\"\\\"TM158\\\"\"\>", ",", "\<\"\\\"TM159\\\"\"\>", ",", "\<\"\\\"TM160\\\"\"\>", ",", "\<\"\\\"TM161\\\"\"\>", ",", "\<\"\\\"TM162\\\"\"\>", ",", "\<\"\\\"TM163\\\"\"\>", ",", "\<\"\\\"TM164\\\"\"\>", ",", "\<\"\\\"TM165\\\"\"\>", ",", "\<\"\\\"TM166\\\"\"\>", ",", "\<\"\\\"TM167\\\"\"\>", ",", "\<\"\\\"TM168\\\"\"\>", ",", "\<\"\\\"TM169\\\"\"\>", ",", "\<\"\\\"TM170\\\"\"\>", ",", "\<\"\\\"TM171\\\"\"\>", ",", "\<\"\\\"TM172\\\"\"\>", ",", "\<\"\\\"TM173\\\"\"\>", ",", "\<\"\\\"TM174\\\"\"\>", ",", "\<\"\\\"TM175\\\"\"\>", ",", "\<\"\\\"TM176\\\"\"\>", ",", "\<\"\\\"TM177\\\"\"\>", ",", "\<\"\\\"TM178\\\"\"\>", ",", "\<\"\\\"TM179\\\"\"\>", ",", "\<\"\\\"YB\\\"\"\>", ",", "\<\"\\\"YB148\\\"\"\>", ",", "\<\"\\\"YB149\\\"\"\>", ",", "\<\"\\\"YB150\\\"\"\>", ",", "\<\"\\\"YB151\\\"\"\>", ",", "\<\"\\\"YB152\\\"\"\>", ",", "\<\"\\\"YB153\\\"\"\>", ",", "\<\"\\\"YB154\\\"\"\>", ",", "\<\"\\\"YB155\\\"\"\>", ",", "\<\"\\\"YB156\\\"\"\>", ",", "\<\"\\\"YB157\\\"\"\>", ",", "\<\"\\\"YB158\\\"\"\>", ",", "\<\"\\\"YB159\\\"\"\>", ",", "\<\"\\\"YB160\\\"\"\>", ",", "\<\"\\\"YB161\\\"\"\>", ",", "\<\"\\\"YB162\\\"\"\>", ",", "\<\"\\\"YB163\\\"\"\>", ",", "\<\"\\\"YB164\\\"\"\>", ",", "\<\"\\\"YB165\\\"\"\>", ",", "\<\"\\\"YB166\\\"\"\>", ",", "\<\"\\\"YB167\\\"\"\>", ",", "\<\"\\\"YB168\\\"\"\>", ",", "\<\"\\\"YB169\\\"\"\>", ",", "\<\"\\\"YB170\\\"\"\>", ",", "\<\"\\\"YB171\\\"\"\>", ",", "\<\"\\\"YB172\\\"\"\>", ",", "\<\"\\\"YB173\\\"\"\>", ",", "\<\"\\\"YB174\\\"\"\>", ",", "\<\"\\\"YB175\\\"\"\>", ",", "\<\"\\\"YB176\\\"\"\>", ",", "\<\"\\\"YB177\\\"\"\>", ",", "\<\"\\\"YB178\\\"\"\>", ",", "\<\"\\\"YB179\\\"\"\>", ",", "\<\"\\\"YB180\\\"\"\>", ",", "\<\"\\\"YB181\\\"\"\>", ",", "\<\"\\\"LU\\\"\"\>", ",", "\<\"\\\"LU150\\\"\"\>", ",", "\<\"\\\"LU151\\\"\"\>", ",", "\<\"\\\"LU152\\\"\"\>", ",", "\<\"\\\"LU153\\\"\"\>", ",", "\<\"\\\"LU154\\\"\"\>", ",", "\<\"\\\"LU155\\\"\"\>", ",", "\<\"\\\"LU156\\\"\"\>", ",", "\<\"\\\"LU157\\\"\"\>", ",", "\<\"\\\"LU158\\\"\"\>", ",", "\<\"\\\"LU159\\\"\"\>", ",", "\<\"\\\"LU160\\\"\"\>", ",", "\<\"\\\"LU161\\\"\"\>", ",", "\<\"\\\"LU162\\\"\"\>", ",", "\<\"\\\"LU163\\\"\"\>", ",", "\<\"\\\"LU164\\\"\"\>", ",", "\<\"\\\"LU165\\\"\"\>", ",", "\<\"\\\"LU166\\\"\"\>", ",", "\<\"\\\"LU167\\\"\"\>", ",", "\<\"\\\"LU168\\\"\"\>", ",", "\<\"\\\"LU169\\\"\"\>", ",", "\<\"\\\"LU170\\\"\"\>", ",", "\<\"\\\"LU171\\\"\"\>", ",", "\<\"\\\"LU172\\\"\"\>", ",", "\<\"\\\"LU173\\\"\"\>", ",", "\<\"\\\"LU174\\\"\"\>", ",", "\<\"\\\"LU175\\\"\"\>", ",", "\<\"\\\"LU176\\\"\"\>", ",", "\<\"\\\"LU177\\\"\"\>", ",", "\<\"\\\"LU178\\\"\"\>", ",", "\<\"\\\"LU179\\\"\"\>", ",", "\<\"\\\"LU180\\\"\"\>", ",", "\<\"\\\"LU181\\\"\"\>", ",", "\<\"\\\"LU182\\\"\"\>", ",", "\<\"\\\"LU183\\\"\"\>", ",", "\<\"\\\"LU184\\\"\"\>", ",", "\<\"\\\"HF\\\"\"\>", ",", "\<\"\\\"HF153\\\"\"\>", ",", "\<\"\\\"HF154\\\"\"\>", ",", "\<\"\\\"HF155\\\"\"\>", ",", "\<\"\\\"HF156\\\"\"\>", ",", "\<\"\\\"HF157\\\"\"\>", ",", "\<\"\\\"HF158\\\"\"\>", ",", "\<\"\\\"HF159\\\"\"\>", ",", "\<\"\\\"HF160\\\"\"\>", ",", "\<\"\\\"HF161\\\"\"\>", ",", "\<\"\\\"HF162\\\"\"\>", ",", "\<\"\\\"HF163\\\"\"\>", ",", "\<\"\\\"HF164\\\"\"\>", ",", "\<\"\\\"HF165\\\"\"\>", ",", "\<\"\\\"HF166\\\"\"\>", ",", "\<\"\\\"HF167\\\"\"\>", ",", "\<\"\\\"HF168\\\"\"\>", ",", "\<\"\\\"HF169\\\"\"\>", ",", "\<\"\\\"HF170\\\"\"\>", ",", "\<\"\\\"HF171\\\"\"\>", ",", "\<\"\\\"HF172\\\"\"\>", ",", "\<\"\\\"HF173\\\"\"\>", ",", "\<\"\\\"HF174\\\"\"\>", ",", "\<\"\\\"HF175\\\"\"\>", ",", "\<\"\\\"HF176\\\"\"\>", ",", "\<\"\\\"HF177\\\"\"\>", ",", "\<\"\\\"HF178\\\"\"\>", ",", "\<\"\\\"HF179\\\"\"\>", ",", "\<\"\\\"HF180\\\"\"\>", ",", "\<\"\\\"HF181\\\"\"\>", ",", "\<\"\\\"HF182\\\"\"\>", ",", "\<\"\\\"HF183\\\"\"\>", ",", "\<\"\\\"HF184\\\"\"\>", ",", "\<\"\\\"HF185\\\"\"\>", ",", "\<\"\\\"HF186\\\"\"\>", ",", "\<\"\\\"HF187\\\"\"\>", ",", "\<\"\\\"HF188\\\"\"\>", ",", "\<\"\\\"TA\\\"\"\>", ",", "\<\"\\\"TA155\\\"\"\>", ",", "\<\"\\\"TA156\\\"\"\>", ",", "\<\"\\\"TA157\\\"\"\>", ",", "\<\"\\\"TA158\\\"\"\>", ",", "\<\"\\\"TA159\\\"\"\>", ",", "\<\"\\\"TA160\\\"\"\>", ",", "\<\"\\\"TA161\\\"\"\>", ",", "\<\"\\\"TA162\\\"\"\>", ",", "\<\"\\\"TA163\\\"\"\>", ",", "\<\"\\\"TA164\\\"\"\>", ",", "\<\"\\\"TA165\\\"\"\>", ",", "\<\"\\\"TA166\\\"\"\>", ",", "\<\"\\\"TA167\\\"\"\>", ",", "\<\"\\\"TA168\\\"\"\>", ",", "\<\"\\\"TA169\\\"\"\>", ",", "\<\"\\\"TA170\\\"\"\>", ",", "\<\"\\\"TA171\\\"\"\>", ",", "\<\"\\\"TA172\\\"\"\>", ",", "\<\"\\\"TA173\\\"\"\>", ",", "\<\"\\\"TA174\\\"\"\>", ",", "\<\"\\\"TA175\\\"\"\>", ",", "\<\"\\\"TA176\\\"\"\>", ",", "\<\"\\\"TA177\\\"\"\>", ",", "\<\"\\\"TA178\\\"\"\>", ",", "\<\"\\\"TA179\\\"\"\>", ",", "\<\"\\\"TA180\\\"\"\>", ",", "\<\"\\\"TA181\\\"\"\>", ",", "\<\"\\\"TA182\\\"\"\>", ",", "\<\"\\\"TA183\\\"\"\>", ",", "\<\"\\\"TA184\\\"\"\>", ",", "\<\"\\\"TA185\\\"\"\>", ",", "\<\"\\\"TA186\\\"\"\>", ",", "\<\"\\\"TA187\\\"\"\>", ",", "\<\"\\\"TA188\\\"\"\>", ",", "\<\"\\\"TA189\\\"\"\>", ",", "\<\"\\\"TA190\\\"\"\>", ",", "\<\"\\\"W\\\"\"\>", ",", "\<\"\\\"W158\\\"\"\>", ",", "\<\"\\\"W159\\\"\"\>", ",", "\<\"\\\"W160\\\"\"\>", ",", "\<\"\\\"W161\\\"\"\>", ",", "\<\"\\\"W162\\\"\"\>", ",", "\<\"\\\"W163\\\"\"\>", ",", "\<\"\\\"W164\\\"\"\>", ",", "\<\"\\\"W165\\\"\"\>", ",", "\<\"\\\"W166\\\"\"\>", ",", "\<\"\\\"W167\\\"\"\>", ",", "\<\"\\\"W168\\\"\"\>", ",", "\<\"\\\"W169\\\"\"\>", ",", "\<\"\\\"W170\\\"\"\>", ",", "\<\"\\\"W171\\\"\"\>", ",", "\<\"\\\"W172\\\"\"\>", ",", "\<\"\\\"W173\\\"\"\>", ",", "\<\"\\\"W174\\\"\"\>", ",", "\<\"\\\"W175\\\"\"\>", ",", "\<\"\\\"W176\\\"\"\>", ",", "\<\"\\\"W177\\\"\"\>", ",", "\<\"\\\"W178\\\"\"\>", ",", "\<\"\\\"W179\\\"\"\>", ",", "\<\"\\\"W180\\\"\"\>", ",", "\<\"\\\"W181\\\"\"\>", ",", "\<\"\\\"W182\\\"\"\>", ",", "\<\"\\\"W183\\\"\"\>", ",", "\<\"\\\"W184\\\"\"\>", ",", "\<\"\\\"W185\\\"\"\>", ",", "\<\"\\\"W186\\\"\"\>", ",", "\<\"\\\"W187\\\"\"\>", ",", "\<\"\\\"W188\\\"\"\>", ",", "\<\"\\\"W189\\\"\"\>", ",", "\<\"\\\"W190\\\"\"\>", ",", "\<\"\\\"W191\\\"\"\>", ",", "\<\"\\\"W192\\\"\"\>", ",", "\<\"\\\"RE\\\"\"\>", ",", "\<\"\\\"RE160\\\"\"\>", ",", "\<\"\\\"RE161\\\"\"\>", ",", "\<\"\\\"RE162\\\"\"\>", ",", "\<\"\\\"RE163\\\"\"\>", ",", "\<\"\\\"RE164\\\"\"\>", ",", "\<\"\\\"RE165\\\"\"\>", ",", "\<\"\\\"RE166\\\"\"\>", ",", "\<\"\\\"RE167\\\"\"\>", ",", "\<\"\\\"RE168\\\"\"\>", ",", "\<\"\\\"RE169\\\"\"\>", ",", "\<\"\\\"RE170\\\"\"\>", ",", "\<\"\\\"RE171\\\"\"\>", ",", "\<\"\\\"RE172\\\"\"\>", ",", "\<\"\\\"RE173\\\"\"\>", ",", "\<\"\\\"RE174\\\"\"\>", ",", "\<\"\\\"RE175\\\"\"\>", ",", "\<\"\\\"RE176\\\"\"\>", ",", "\<\"\\\"RE177\\\"\"\>", ",", "\<\"\\\"RE178\\\"\"\>", ",", "\<\"\\\"RE179\\\"\"\>", ",", "\<\"\\\"RE180\\\"\"\>", ",", "\<\"\\\"RE181\\\"\"\>", ",", "\<\"\\\"RE182\\\"\"\>", ",", "\<\"\\\"RE183\\\"\"\>", ",", "\<\"\\\"RE184\\\"\"\>", ",", "\<\"\\\"RE185\\\"\"\>", ",", "\<\"\\\"RE186\\\"\"\>", ",", "\<\"\\\"RE187\\\"\"\>", ",", "\<\"\\\"RE188\\\"\"\>", ",", "\<\"\\\"RE189\\\"\"\>", ",", "\<\"\\\"RE190\\\"\"\>", ",", "\<\"\\\"RE191\\\"\"\>", ",", "\<\"\\\"RE192\\\"\"\>", ",", "\<\"\\\"RE193\\\"\"\>", ",", "\<\"\\\"RE194\\\"\"\>", ",", "\<\"\\\"OS\\\"\"\>", ",", "\<\"\\\"OS162\\\"\"\>", ",", "\<\"\\\"OS163\\\"\"\>", ",", "\<\"\\\"OS164\\\"\"\>", ",", "\<\"\\\"OS165\\\"\"\>", ",", "\<\"\\\"OS166\\\"\"\>", ",", "\<\"\\\"OS167\\\"\"\>", ",", "\<\"\\\"OS168\\\"\"\>", ",", "\<\"\\\"OS169\\\"\"\>", ",", "\<\"\\\"OS170\\\"\"\>", ",", "\<\"\\\"OS171\\\"\"\>", ",", "\<\"\\\"OS172\\\"\"\>", ",", "\<\"\\\"OS173\\\"\"\>", ",", "\<\"\\\"OS174\\\"\"\>", ",", "\<\"\\\"OS175\\\"\"\>", ",", "\<\"\\\"OS176\\\"\"\>", ",", "\<\"\\\"OS177\\\"\"\>", ",", "\<\"\\\"OS178\\\"\"\>", ",", "\<\"\\\"OS179\\\"\"\>", ",", "\<\"\\\"OS180\\\"\"\>", ",", "\<\"\\\"OS181\\\"\"\>", ",", "\<\"\\\"OS182\\\"\"\>", ",", "\<\"\\\"OS183\\\"\"\>", ",", "\<\"\\\"OS184\\\"\"\>", ",", "\<\"\\\"OS185\\\"\"\>", ",", "\<\"\\\"OS186\\\"\"\>", ",", "\<\"\\\"OS187\\\"\"\>", ",", "\<\"\\\"OS188\\\"\"\>", ",", "\<\"\\\"OS189\\\"\"\>", ",", "\<\"\\\"OS190\\\"\"\>", ",", "\<\"\\\"OS191\\\"\"\>", ",", "\<\"\\\"OS192\\\"\"\>", ",", "\<\"\\\"OS193\\\"\"\>", ",", "\<\"\\\"OS194\\\"\"\>", ",", "\<\"\\\"OS195\\\"\"\>", ",", "\<\"\\\"OS196\\\"\"\>", ",", "\<\"\\\"IR\\\"\"\>", ",", "\<\"\\\"IR164\\\"\"\>", ",", "\<\"\\\"IR165\\\"\"\>", ",", "\<\"\\\"IR166\\\"\"\>", ",", "\<\"\\\"IR167\\\"\"\>", ",", "\<\"\\\"IR168\\\"\"\>", ",", "\<\"\\\"IR169\\\"\"\>", ",", "\<\"\\\"IR170\\\"\"\>", ",", "\<\"\\\"IR171\\\"\"\>", ",", "\<\"\\\"IR172\\\"\"\>", ",", "\<\"\\\"IR173\\\"\"\>", ",", "\<\"\\\"IR174\\\"\"\>", ",", "\<\"\\\"IR175\\\"\"\>", ",", "\<\"\\\"IR176\\\"\"\>", ",", "\<\"\\\"IR177\\\"\"\>", ",", "\<\"\\\"IR178\\\"\"\>", ",", "\<\"\\\"IR179\\\"\"\>", ",", "\<\"\\\"IR180\\\"\"\>", ",", "\<\"\\\"IR181\\\"\"\>", ",", "\<\"\\\"IR182\\\"\"\>", ",", "\<\"\\\"IR183\\\"\"\>", ",", "\<\"\\\"IR184\\\"\"\>", ",", "\<\"\\\"IR185\\\"\"\>", ",", "\<\"\\\"IR186\\\"\"\>", ",", "\<\"\\\"IR187\\\"\"\>", ",", "\<\"\\\"IR188\\\"\"\>", ",", "\<\"\\\"IR189\\\"\"\>", ",", "\<\"\\\"IR190\\\"\"\>", ",", "\<\"\\\"IR191\\\"\"\>", ",", "\<\"\\\"IR192\\\"\"\>", ",", "\<\"\\\"IR193\\\"\"\>", ",", "\<\"\\\"IR194\\\"\"\>", ",", "\<\"\\\"IR195\\\"\"\>", ",", "\<\"\\\"IR196\\\"\"\>", ",", "\<\"\\\"IR197\\\"\"\>", ",", "\<\"\\\"IR198\\\"\"\>", ",", "\<\"\\\"IR199\\\"\"\>", ",", "\<\"\\\"PT\\\"\"\>", ",", "\<\"\\\"PT166\\\"\"\>", ",", "\<\"\\\"PT167\\\"\"\>", ",", "\<\"\\\"PT168\\\"\"\>", ",", "\<\"\\\"PT169\\\"\"\>", ",", "\<\"\\\"PT170\\\"\"\>", ",", "\<\"\\\"PT171\\\"\"\>", ",", "\<\"\\\"PT172\\\"\"\>", ",", "\<\"\\\"PT173\\\"\"\>", ",", "\<\"\\\"PT174\\\"\"\>", ",", "\<\"\\\"PT175\\\"\"\>", ",", "\<\"\\\"PT176\\\"\"\>", ",", "\<\"\\\"PT177\\\"\"\>", ",", "\<\"\\\"PT178\\\"\"\>", ",", "\<\"\\\"PT179\\\"\"\>", ",", "\<\"\\\"PT180\\\"\"\>", ",", "\<\"\\\"PT181\\\"\"\>", ",", "\<\"\\\"PT182\\\"\"\>", ",", "\<\"\\\"PT183\\\"\"\>", ",", "\<\"\\\"PT184\\\"\"\>", ",", "\<\"\\\"PT185\\\"\"\>", ",", "\<\"\\\"PT186\\\"\"\>", ",", "\<\"\\\"PT187\\\"\"\>", ",", "\<\"\\\"PT188\\\"\"\>", ",", "\<\"\\\"PT189\\\"\"\>", ",", "\<\"\\\"PT190\\\"\"\>", ",", "\<\"\\\"PT191\\\"\"\>", ",", "\<\"\\\"PT192\\\"\"\>", ",", "\<\"\\\"PT193\\\"\"\>", ",", "\<\"\\\"PT194\\\"\"\>", ",", "\<\"\\\"PT195\\\"\"\>", ",", "\<\"\\\"PT196\\\"\"\>", ",", "\<\"\\\"PT197\\\"\"\>", ",", "\<\"\\\"PT198\\\"\"\>", ",", "\<\"\\\"PT199\\\"\"\>", ",", "\<\"\\\"PT200\\\"\"\>", ",", "\<\"\\\"PT201\\\"\"\>", ",", "\<\"\\\"PT202\\\"\"\>", ",", "\<\"\\\"AU\\\"\"\>", ",", "\<\"\\\"AU169\\\"\"\>", ",", "\<\"\\\"AU170\\\"\"\>", ",", "\<\"\\\"AU171\\\"\"\>", ",", "\<\"\\\"AU172\\\"\"\>", ",", "\<\"\\\"AU173\\\"\"\>", ",", "\<\"\\\"AU174\\\"\"\>", ",", "\<\"\\\"AU175\\\"\"\>", ",", "\<\"\\\"AU176\\\"\"\>", ",", "\<\"\\\"AU177\\\"\"\>", ",", "\<\"\\\"AU178\\\"\"\>", ",", "\<\"\\\"AU179\\\"\"\>", ",", "\<\"\\\"AU180\\\"\"\>", ",", "\<\"\\\"AU181\\\"\"\>", ",", "\<\"\\\"AU182\\\"\"\>", ",", "\<\"\\\"AU183\\\"\"\>", ",", "\<\"\\\"AU184\\\"\"\>", ",", "\<\"\\\"AU185\\\"\"\>", ",", "\<\"\\\"AU186\\\"\"\>", ",", "\<\"\\\"AU187\\\"\"\>", ",", "\<\"\\\"AU188\\\"\"\>", ",", "\<\"\\\"AU189\\\"\"\>", ",", "\<\"\\\"AU190\\\"\"\>", ",", "\<\"\\\"AU191\\\"\"\>", ",", "\<\"\\\"AU192\\\"\"\>", ",", "\<\"\\\"AU193\\\"\"\>", ",", "\<\"\\\"AU194\\\"\"\>", ",", "\<\"\\\"AU195\\\"\"\>", ",", "\<\"\\\"AU196\\\"\"\>", ",", "\<\"\\\"AU197\\\"\"\>", ",", "\<\"\\\"AU198\\\"\"\>", ",", "\<\"\\\"AU199\\\"\"\>", ",", "\<\"\\\"AU200\\\"\"\>", ",", "\<\"\\\"AU201\\\"\"\>", ",", "\<\"\\\"AU202\\\"\"\>", ",", "\<\"\\\"AU203\\\"\"\>", ",", "\<\"\\\"AU204\\\"\"\>", ",", "\<\"\\\"AU205\\\"\"\>", ",", "\<\"\\\"HG\\\"\"\>", ",", "\<\"\\\"HG171\\\"\"\>", ",", "\<\"\\\"HG172\\\"\"\>", ",", "\<\"\\\"HG173\\\"\"\>", ",", "\<\"\\\"HG174\\\"\"\>", ",", "\<\"\\\"HG175\\\"\"\>", ",", "\<\"\\\"HG176\\\"\"\>", ",", "\<\"\\\"HG177\\\"\"\>", ",", "\<\"\\\"HG178\\\"\"\>", ",", "\<\"\\\"HG179\\\"\"\>", ",", "\<\"\\\"HG180\\\"\"\>", ",", "\<\"\\\"HG181\\\"\"\>", ",", "\<\"\\\"HG182\\\"\"\>", ",", "\<\"\\\"HG183\\\"\"\>", ",", "\<\"\\\"HG184\\\"\"\>", ",", "\<\"\\\"HG185\\\"\"\>", ",", "\<\"\\\"HG186\\\"\"\>", ",", "\<\"\\\"HG187\\\"\"\>", ",", "\<\"\\\"HG188\\\"\"\>", ",", "\<\"\\\"HG189\\\"\"\>", ",", "\<\"\\\"HG190\\\"\"\>", ",", "\<\"\\\"HG191\\\"\"\>", ",", "\<\"\\\"HG192\\\"\"\>", ",", "\<\"\\\"HG193\\\"\"\>", ",", "\<\"\\\"HG194\\\"\"\>", ",", "\<\"\\\"HG195\\\"\"\>", ",", "\<\"\\\"HG196\\\"\"\>", ",", "\<\"\\\"HG197\\\"\"\>", ",", "\<\"\\\"HG198\\\"\"\>", ",", "\<\"\\\"HG199\\\"\"\>", ",", "\<\"\\\"HG200\\\"\"\>", ",", "\<\"\\\"HG201\\\"\"\>", ",", "\<\"\\\"HG202\\\"\"\>", ",", "\<\"\\\"HG203\\\"\"\>", ",", "\<\"\\\"HG204\\\"\"\>", ",", "\<\"\\\"HG205\\\"\"\>", ",", "\<\"\\\"HG206\\\"\"\>", ",", "\<\"\\\"HG207\\\"\"\>", ",", "\<\"\\\"HG208\\\"\"\>", ",", "\<\"\\\"HG209\\\"\"\>", ",", "\<\"\\\"HG210\\\"\"\>", ",", "\<\"\\\"TL\\\"\"\>", ",", "\<\"\\\"TL176\\\"\"\>", ",", "\<\"\\\"TL177\\\"\"\>", ",", "\<\"\\\"TL178\\\"\"\>", ",", "\<\"\\\"TL179\\\"\"\>", ",", "\<\"\\\"TL180\\\"\"\>", ",", "\<\"\\\"TL181\\\"\"\>", ",", "\<\"\\\"TL182\\\"\"\>", ",", "\<\"\\\"TL183\\\"\"\>", ",", "\<\"\\\"TL184\\\"\"\>", ",", "\<\"\\\"TL185\\\"\"\>", ",", "\<\"\\\"TL186\\\"\"\>", ",", "\<\"\\\"TL187\\\"\"\>", ",", "\<\"\\\"TL188\\\"\"\>", ",", "\<\"\\\"TL189\\\"\"\>", ",", "\<\"\\\"TL190\\\"\"\>", ",", "\<\"\\\"TL191\\\"\"\>", ",", "\<\"\\\"TL192\\\"\"\>", ",", "\<\"\\\"TL193\\\"\"\>", ",", "\<\"\\\"TL194\\\"\"\>", ",", "\<\"\\\"TL195\\\"\"\>", ",", "\<\"\\\"TL196\\\"\"\>", ",", "\<\"\\\"TL197\\\"\"\>", ",", "\<\"\\\"TL198\\\"\"\>", ",", "\<\"\\\"TL199\\\"\"\>", ",", "\<\"\\\"TL200\\\"\"\>", ",", "\<\"\\\"TL201\\\"\"\>", ",", "\<\"\\\"TL202\\\"\"\>", ",", "\<\"\\\"TL203\\\"\"\>", ",", "\<\"\\\"TL204\\\"\"\>", ",", "\<\"\\\"TL205\\\"\"\>", ",", "\<\"\\\"TL206\\\"\"\>", ",", "\<\"\\\"TL207\\\"\"\>", ",", "\<\"\\\"TL208\\\"\"\>", ",", "\<\"\\\"TL209\\\"\"\>", ",", "\<\"\\\"TL210\\\"\"\>", ",", "\<\"\\\"TL211\\\"\"\>", ",", "\<\"\\\"TL212\\\"\"\>", ",", "\<\"\\\"PB\\\"\"\>", ",", "\<\"\\\"PB178\\\"\"\>", ",", "\<\"\\\"PB179\\\"\"\>", ",", "\<\"\\\"PB180\\\"\"\>", ",", "\<\"\\\"PB181\\\"\"\>", ",", "\<\"\\\"PB182\\\"\"\>", ",", "\<\"\\\"PB183\\\"\"\>", ",", "\<\"\\\"PB184\\\"\"\>", ",", "\<\"\\\"PB185\\\"\"\>", ",", "\<\"\\\"PB186\\\"\"\>", ",", "\<\"\\\"PB187\\\"\"\>", ",", "\<\"\\\"PB188\\\"\"\>", ",", "\<\"\\\"PB189\\\"\"\>", ",", "\<\"\\\"PB190\\\"\"\>", ",", "\<\"\\\"PB191\\\"\"\>", ",", "\<\"\\\"PB192\\\"\"\>", ",", "\<\"\\\"PB193\\\"\"\>", ",", "\<\"\\\"PB194\\\"\"\>", ",", "\<\"\\\"PB195\\\"\"\>", ",", "\<\"\\\"PB196\\\"\"\>", ",", "\<\"\\\"PB197\\\"\"\>", ",", "\<\"\\\"PB198\\\"\"\>", ",", "\<\"\\\"PB199\\\"\"\>", ",", "\<\"\\\"PB200\\\"\"\>", ",", "\<\"\\\"PB201\\\"\"\>", ",", "\<\"\\\"PB202\\\"\"\>", ",", "\<\"\\\"PB203\\\"\"\>", ",", "\<\"\\\"PB204\\\"\"\>", ",", "\<\"\\\"PB205\\\"\"\>", ",", "\<\"\\\"PB206\\\"\"\>", ",", "\<\"\\\"PB207\\\"\"\>", ",", "\<\"\\\"PB208\\\"\"\>", ",", "\<\"\\\"PB209\\\"\"\>", ",", "\<\"\\\"PB210\\\"\"\>", ",", "\<\"\\\"PB211\\\"\"\>", ",", "\<\"\\\"PB212\\\"\"\>", ",", "\<\"\\\"PB213\\\"\"\>", ",", "\<\"\\\"PB214\\\"\"\>", ",", "\<\"\\\"PB215\\\"\"\>", ",", "\<\"\\\"BI\\\"\"\>", ",", "\<\"\\\"BI184\\\"\"\>", ",", "\<\"\\\"BI185\\\"\"\>", ",", "\<\"\\\"BI186\\\"\"\>", ",", "\<\"\\\"BI187\\\"\"\>", ",", "\<\"\\\"BI188\\\"\"\>", ",", "\<\"\\\"BI189\\\"\"\>", ",", "\<\"\\\"BI190\\\"\"\>", ",", "\<\"\\\"BI191\\\"\"\>", ",", "\<\"\\\"BI192\\\"\"\>", ",", "\<\"\\\"BI193\\\"\"\>", ",", "\<\"\\\"BI194\\\"\"\>", ",", "\<\"\\\"BI195\\\"\"\>", ",", "\<\"\\\"BI196\\\"\"\>", ",", "\<\"\\\"BI197\\\"\"\>", ",", "\<\"\\\"BI198\\\"\"\>", ",", "\<\"\\\"BI199\\\"\"\>", ",", "\<\"\\\"BI200\\\"\"\>", ",", "\<\"\\\"BI201\\\"\"\>", ",", "\<\"\\\"BI202\\\"\"\>", ",", "\<\"\\\"BI203\\\"\"\>", ",", "\<\"\\\"BI204\\\"\"\>", ",", "\<\"\\\"BI205\\\"\"\>", ",", "\<\"\\\"BI206\\\"\"\>", ",", "\<\"\\\"BI207\\\"\"\>", ",", "\<\"\\\"BI208\\\"\"\>", ",", "\<\"\\\"BI209\\\"\"\>", ",", "\<\"\\\"BI210\\\"\"\>", ",", "\<\"\\\"BI211\\\"\"\>", ",", "\<\"\\\"BI212\\\"\"\>", ",", "\<\"\\\"BI213\\\"\"\>", ",", "\<\"\\\"BI214\\\"\"\>", ",", "\<\"\\\"BI215\\\"\"\>", ",", "\<\"\\\"BI216\\\"\"\>", ",", "\<\"\\\"BI217\\\"\"\>", ",", "\<\"\\\"BI218\\\"\"\>", ",", "\<\"\\\"PO\\\"\"\>", ",", "\<\"\\\"PO188\\\"\"\>", ",", "\<\"\\\"PO189\\\"\"\>", ",", "\<\"\\\"PO190\\\"\"\>", ",", "\<\"\\\"PO191\\\"\"\>", ",", "\<\"\\\"PO192\\\"\"\>", ",", "\<\"\\\"PO193\\\"\"\>", ",", "\<\"\\\"PO194\\\"\"\>", ",", "\<\"\\\"PO195\\\"\"\>", ",", "\<\"\\\"PO196\\\"\"\>", ",", "\<\"\\\"PO197\\\"\"\>", ",", "\<\"\\\"PO198\\\"\"\>", ",", "\<\"\\\"PO199\\\"\"\>", ",", "\<\"\\\"PO200\\\"\"\>", ",", "\<\"\\\"PO201\\\"\"\>", ",", "\<\"\\\"PO202\\\"\"\>", ",", "\<\"\\\"PO203\\\"\"\>", ",", "\<\"\\\"PO204\\\"\"\>", ",", "\<\"\\\"PO205\\\"\"\>", ",", "\<\"\\\"PO206\\\"\"\>", ",", "\<\"\\\"PO207\\\"\"\>", ",", "\<\"\\\"PO208\\\"\"\>", ",", "\<\"\\\"PO209\\\"\"\>", ",", "\<\"\\\"PO210\\\"\"\>", ",", "\<\"\\\"PO211\\\"\"\>", ",", "\<\"\\\"PO212\\\"\"\>", ",", "\<\"\\\"PO213\\\"\"\>", ",", "\<\"\\\"PO214\\\"\"\>", ",", "\<\"\\\"PO215\\\"\"\>", ",", "\<\"\\\"PO216\\\"\"\>", ",", "\<\"\\\"PO217\\\"\"\>", ",", "\<\"\\\"PO218\\\"\"\>", ",", "\<\"\\\"PO219\\\"\"\>", ",", "\<\"\\\"PO220\\\"\"\>", ",", "\<\"\\\"AT\\\"\"\>", ",", "\<\"\\\"AT193\\\"\"\>", ",", "\<\"\\\"AT194\\\"\"\>", ",", "\<\"\\\"AT195\\\"\"\>", ",", "\<\"\\\"AT196\\\"\"\>", ",", "\<\"\\\"AT197\\\"\"\>", ",", "\<\"\\\"AT198\\\"\"\>", ",", "\<\"\\\"AT199\\\"\"\>", ",", "\<\"\\\"AT200\\\"\"\>", ",", "\<\"\\\"AT201\\\"\"\>", ",", "\<\"\\\"AT202\\\"\"\>", ",", "\<\"\\\"AT203\\\"\"\>", ",", "\<\"\\\"AT204\\\"\"\>", ",", "\<\"\\\"AT205\\\"\"\>", ",", "\<\"\\\"AT206\\\"\"\>", ",", "\<\"\\\"AT207\\\"\"\>", ",", "\<\"\\\"AT208\\\"\"\>", ",", "\<\"\\\"AT209\\\"\"\>", ",", "\<\"\\\"AT210\\\"\"\>", ",", "\<\"\\\"AT211\\\"\"\>", ",", "\<\"\\\"AT212\\\"\"\>", ",", "\<\"\\\"AT213\\\"\"\>", ",", "\<\"\\\"AT214\\\"\"\>", ",", "\<\"\\\"AT215\\\"\"\>", ",", "\<\"\\\"AT216\\\"\"\>", ",", "\<\"\\\"AT217\\\"\"\>", ",", "\<\"\\\"AT218\\\"\"\>", ",", "\<\"\\\"AT219\\\"\"\>", ",", "\<\"\\\"AT220\\\"\"\>", ",", "\<\"\\\"AT221\\\"\"\>", ",", "\<\"\\\"AT222\\\"\"\>", ",", "\<\"\\\"AT223\\\"\"\>", ",", "\<\"\\\"RN\\\"\"\>", ",", "\<\"\\\"RN195\\\"\"\>", ",", "\<\"\\\"RN196\\\"\"\>", ",", "\<\"\\\"RN197\\\"\"\>", ",", "\<\"\\\"RN198\\\"\"\>", ",", "\<\"\\\"RN199\\\"\"\>", ",", "\<\"\\\"RN200\\\"\"\>", ",", "\<\"\\\"RN201\\\"\"\>", ",", "\<\"\\\"RN202\\\"\"\>", ",", "\<\"\\\"RN203\\\"\"\>", ",", "\<\"\\\"RN204\\\"\"\>", ",", "\<\"\\\"RN205\\\"\"\>", ",", "\<\"\\\"RN206\\\"\"\>", ",", "\<\"\\\"RN207\\\"\"\>", ",", "\<\"\\\"RN208\\\"\"\>", ",", "\<\"\\\"RN209\\\"\"\>", ",", "\<\"\\\"RN210\\\"\"\>", ",", "\<\"\\\"RN211\\\"\"\>", ",", "\<\"\\\"RN212\\\"\"\>", ",", "\<\"\\\"RN213\\\"\"\>", ",", "\<\"\\\"RN214\\\"\"\>", ",", "\<\"\\\"RN215\\\"\"\>", ",", "\<\"\\\"RN216\\\"\"\>", ",", "\<\"\\\"RN217\\\"\"\>", ",", "\<\"\\\"RN218\\\"\"\>", ",", "\<\"\\\"RN219\\\"\"\>", ",", "\<\"\\\"RN220\\\"\"\>", ",", "\<\"\\\"RN221\\\"\"\>", ",", "\<\"\\\"RN222\\\"\"\>", ",", "\<\"\\\"RN223\\\"\"\>", ",", "\<\"\\\"RN224\\\"\"\>", ",", "\<\"\\\"RN225\\\"\"\>", ",", "\<\"\\\"RN226\\\"\"\>", ",", "\<\"\\\"RN227\\\"\"\>", ",", "\<\"\\\"RN228\\\"\"\>", ",", "\<\"\\\"FR\\\"\"\>", ",", "\<\"\\\"FR199\\\"\"\>", ",", "\<\"\\\"FR200\\\"\"\>", ",", "\<\"\\\"FR201\\\"\"\>", ",", "\<\"\\\"FR202\\\"\"\>", ",", "\<\"\\\"FR203\\\"\"\>", ",", "\<\"\\\"FR204\\\"\"\>", ",", "\<\"\\\"FR205\\\"\"\>", ",", "\<\"\\\"FR206\\\"\"\>", ",", "\<\"\\\"FR207\\\"\"\>", ",", "\<\"\\\"FR208\\\"\"\>", ",", "\<\"\\\"FR209\\\"\"\>", ",", "\<\"\\\"FR210\\\"\"\>", ",", "\<\"\\\"FR211\\\"\"\>", ",", "\<\"\\\"FR212\\\"\"\>", ",", "\<\"\\\"FR213\\\"\"\>", ",", "\<\"\\\"FR214\\\"\"\>", ",", "\<\"\\\"FR215\\\"\"\>", ",", "\<\"\\\"FR216\\\"\"\>", ",", "\<\"\\\"FR217\\\"\"\>", ",", "\<\"\\\"FR218\\\"\"\>", ",", "\<\"\\\"FR219\\\"\"\>", ",", "\<\"\\\"FR220\\\"\"\>", ",", "\<\"\\\"FR221\\\"\"\>", ",", "\<\"\\\"FR222\\\"\"\>", ",", "\<\"\\\"FR223\\\"\"\>", ",", "\<\"\\\"FR224\\\"\"\>", ",", "\<\"\\\"FR225\\\"\"\>", ",", "\<\"\\\"FR226\\\"\"\>", ",", "\<\"\\\"FR227\\\"\"\>", ",", "\<\"\\\"FR228\\\"\"\>", ",", "\<\"\\\"FR229\\\"\"\>", ",", "\<\"\\\"FR230\\\"\"\>", ",", "\<\"\\\"FR231\\\"\"\>", ",", "\<\"\\\"FR232\\\"\"\>", ",", "\<\"\\\"RA\\\"\"\>", ",", "\<\"\\\"RA202\\\"\"\>", ",", "\<\"\\\"RA203\\\"\"\>", ",", "\<\"\\\"RA204\\\"\"\>", ",", "\<\"\\\"RA205\\\"\"\>", ",", "\<\"\\\"RA206\\\"\"\>", ",", "\<\"\\\"RA207\\\"\"\>", ",", "\<\"\\\"RA208\\\"\"\>", ",", "\<\"\\\"RA209\\\"\"\>", ",", "\<\"\\\"RA210\\\"\"\>", ",", "\<\"\\\"RA211\\\"\"\>", ",", "\<\"\\\"RA212\\\"\"\>", ",", "\<\"\\\"RA213\\\"\"\>", ",", "\<\"\\\"RA214\\\"\"\>", ",", "\<\"\\\"RA215\\\"\"\>", ",", "\<\"\\\"RA216\\\"\"\>", ",", "\<\"\\\"RA217\\\"\"\>", ",", "\<\"\\\"RA218\\\"\"\>", ",", "\<\"\\\"RA219\\\"\"\>", ",", "\<\"\\\"RA220\\\"\"\>", ",", "\<\"\\\"RA221\\\"\"\>", ",", "\<\"\\\"RA222\\\"\"\>", ",", "\<\"\\\"RA223\\\"\"\>", ",", "\<\"\\\"RA224\\\"\"\>", ",", "\<\"\\\"RA225\\\"\"\>", ",", "\<\"\\\"RA226\\\"\"\>", ",", "\<\"\\\"RA227\\\"\"\>", ",", "\<\"\\\"RA228\\\"\"\>", ",", "\<\"\\\"RA229\\\"\"\>", ",", "\<\"\\\"RA230\\\"\"\>", ",", "\<\"\\\"RA231\\\"\"\>", ",", "\<\"\\\"RA232\\\"\"\>", ",", "\<\"\\\"RA233\\\"\"\>", ",", "\<\"\\\"RA234\\\"\"\>", ",", "\<\"\\\"AC\\\"\"\>", ",", "\<\"\\\"AC206\\\"\"\>", ",", "\<\"\\\"AC207\\\"\"\>", ",", "\<\"\\\"AC208\\\"\"\>", ",", "\<\"\\\"AC209\\\"\"\>", ",", "\<\"\\\"AC210\\\"\"\>", ",", "\<\"\\\"AC211\\\"\"\>", ",", "\<\"\\\"AC212\\\"\"\>", ",", "\<\"\\\"AC213\\\"\"\>", ",", "\<\"\\\"AC214\\\"\"\>", ",", "\<\"\\\"AC215\\\"\"\>", ",", "\<\"\\\"AC216\\\"\"\>", ",", "\<\"\\\"AC217\\\"\"\>", ",", "\<\"\\\"AC218\\\"\"\>", ",", "\<\"\\\"AC219\\\"\"\>", ",", "\<\"\\\"AC220\\\"\"\>", ",", "\<\"\\\"AC221\\\"\"\>", ",", "\<\"\\\"AC222\\\"\"\>", ",", "\<\"\\\"AC223\\\"\"\>", ",", "\<\"\\\"AC224\\\"\"\>", ",", "\<\"\\\"AC225\\\"\"\>", ",", "\<\"\\\"AC226\\\"\"\>", ",", "\<\"\\\"AC227\\\"\"\>", ",", "\<\"\\\"AC228\\\"\"\>", ",", "\<\"\\\"AC229\\\"\"\>", ",", "\<\"\\\"AC230\\\"\"\>", ",", "\<\"\\\"AC231\\\"\"\>", ",", "\<\"\\\"AC232\\\"\"\>", ",", "\<\"\\\"AC233\\\"\"\>", ",", "\<\"\\\"AC234\\\"\"\>", ",", "\<\"\\\"AC235\\\"\"\>", ",", "\<\"\\\"AC236\\\"\"\>", ",", "\<\"\\\"TH\\\"\"\>", ",", "\<\"\\\"TH209\\\"\"\>", ",", "\<\"\\\"TH210\\\"\"\>", ",", "\<\"\\\"TH211\\\"\"\>", ",", "\<\"\\\"TH212\\\"\"\>", ",", "\<\"\\\"TH213\\\"\"\>", ",", "\<\"\\\"TH214\\\"\"\>", ",", "\<\"\\\"TH215\\\"\"\>", ",", "\<\"\\\"TH216\\\"\"\>", ",", "\<\"\\\"TH217\\\"\"\>", ",", "\<\"\\\"TH218\\\"\"\>", ",", "\<\"\\\"TH219\\\"\"\>", ",", "\<\"\\\"TH220\\\"\"\>", ",", "\<\"\\\"TH221\\\"\"\>", ",", "\<\"\\\"TH222\\\"\"\>", ",", "\<\"\\\"TH223\\\"\"\>", ",", "\<\"\\\"TH224\\\"\"\>", ",", "\<\"\\\"TH225\\\"\"\>", ",", "\<\"\\\"TH226\\\"\"\>", ",", "\<\"\\\"TH227\\\"\"\>", ",", "\<\"\\\"TH228\\\"\"\>", ",", "\<\"\\\"TH229\\\"\"\>", ",", "\<\"\\\"TH230\\\"\"\>", ",", "\<\"\\\"TH231\\\"\"\>", ",", "\<\"\\\"TH232\\\"\"\>", ",", "\<\"\\\"TH233\\\"\"\>", ",", "\<\"\\\"TH234\\\"\"\>", ",", "\<\"\\\"TH235\\\"\"\>", ",", "\<\"\\\"TH236\\\"\"\>", ",", "\<\"\\\"TH237\\\"\"\>", ",", "\<\"\\\"TH238\\\"\"\>", ",", "\<\"\\\"PA\\\"\"\>", ",", "\<\"\\\"PA212\\\"\"\>", ",", "\<\"\\\"PA213\\\"\"\>", ",", "\<\"\\\"PA214\\\"\"\>", ",", "\<\"\\\"PA215\\\"\"\>", ",", "\<\"\\\"PA216\\\"\"\>", ",", "\<\"\\\"PA217\\\"\"\>", ",", "\<\"\\\"PA218\\\"\"\>", ",", "\<\"\\\"PA219\\\"\"\>", ",", "\<\"\\\"PA220\\\"\"\>", ",", "\<\"\\\"PA221\\\"\"\>", ",", "\<\"\\\"PA222\\\"\"\>", ",", "\<\"\\\"PA223\\\"\"\>", ",", "\<\"\\\"PA224\\\"\"\>", ",", "\<\"\\\"PA225\\\"\"\>", ",", "\<\"\\\"PA226\\\"\"\>", ",", "\<\"\\\"PA227\\\"\"\>", ",", "\<\"\\\"PA228\\\"\"\>", ",", "\<\"\\\"PA229\\\"\"\>", ",", "\<\"\\\"PA230\\\"\"\>", ",", "\<\"\\\"PA231\\\"\"\>", ",", "\<\"\\\"PA232\\\"\"\>", ",", "\<\"\\\"PA233\\\"\"\>", ",", "\<\"\\\"PA234\\\"\"\>", ",", "\<\"\\\"PA235\\\"\"\>", ",", "\<\"\\\"PA236\\\"\"\>", ",", "\<\"\\\"PA237\\\"\"\>", ",", "\<\"\\\"PA238\\\"\"\>", ",", "\<\"\\\"PA239\\\"\"\>", ",", "\<\"\\\"PA240\\\"\"\>", ",", "\<\"\\\"U\\\"\"\>", ",", "\<\"\\\"U217\\\"\"\>", ",", "\<\"\\\"U218\\\"\"\>", ",", "\<\"\\\"U219\\\"\"\>", ",", "\<\"\\\"U220\\\"\"\>", ",", "\<\"\\\"U221\\\"\"\>", ",", "\<\"\\\"U222\\\"\"\>", ",", "\<\"\\\"U223\\\"\"\>", ",", "\<\"\\\"U224\\\"\"\>", ",", "\<\"\\\"U225\\\"\"\>", ",", "\<\"\\\"U226\\\"\"\>", ",", "\<\"\\\"U227\\\"\"\>", ",", "\<\"\\\"U228\\\"\"\>", ",", "\<\"\\\"U229\\\"\"\>", ",", "\<\"\\\"U230\\\"\"\>", ",", "\<\"\\\"U231\\\"\"\>", ",", "\<\"\\\"U232\\\"\"\>", ",", "\<\"\\\"U233\\\"\"\>", ",", "\<\"\\\"U234\\\"\"\>", ",", "\<\"\\\"U235\\\"\"\>", ",", "\<\"\\\"U236\\\"\"\>", ",", "\<\"\\\"U237\\\"\"\>", ",", "\<\"\\\"U238\\\"\"\>", ",", "\<\"\\\"U239\\\"\"\>", ",", "\<\"\\\"U240\\\"\"\>", ",", "\<\"\\\"U241\\\"\"\>", ",", "\<\"\\\"U242\\\"\"\>", ",", "\<\"\\\"NP\\\"\"\>", ",", "\<\"\\\"NP225\\\"\"\>", ",", "\<\"\\\"NP226\\\"\"\>", ",", "\<\"\\\"NP227\\\"\"\>", ",", "\<\"\\\"NP228\\\"\"\>", ",", "\<\"\\\"NP229\\\"\"\>", ",", "\<\"\\\"NP230\\\"\"\>", ",", "\<\"\\\"NP231\\\"\"\>", ",", "\<\"\\\"NP232\\\"\"\>", ",", "\<\"\\\"NP233\\\"\"\>", ",", "\<\"\\\"NP234\\\"\"\>", ",", "\<\"\\\"NP235\\\"\"\>", ",", "\<\"\\\"NP236\\\"\"\>", ",", "\<\"\\\"NP237\\\"\"\>", ",", "\<\"\\\"NP238\\\"\"\>", ",", "\<\"\\\"NP239\\\"\"\>", ",", "\<\"\\\"NP240\\\"\"\>", ",", "\<\"\\\"NP241\\\"\"\>", ",", "\<\"\\\"NP242\\\"\"\>", ",", "\<\"\\\"NP243\\\"\"\>", ",", "\<\"\\\"NP244\\\"\"\>", ",", "\<\"\\\"PU\\\"\"\>", ",", "\<\"\\\"PU228\\\"\"\>", ",", "\<\"\\\"PU229\\\"\"\>", ",", "\<\"\\\"PU230\\\"\"\>", ",", "\<\"\\\"PU231\\\"\"\>", ",", "\<\"\\\"PU232\\\"\"\>", ",", "\<\"\\\"PU233\\\"\"\>", ",", "\<\"\\\"PU234\\\"\"\>", ",", "\<\"\\\"PU235\\\"\"\>", ",", "\<\"\\\"PU236\\\"\"\>", ",", "\<\"\\\"PU237\\\"\"\>", ",", "\<\"\\\"PU238\\\"\"\>", ",", "\<\"\\\"PU239\\\"\"\>", ",", "\<\"\\\"PU240\\\"\"\>", ",", "\<\"\\\"PU241\\\"\"\>", ",", "\<\"\\\"PU242\\\"\"\>", ",", "\<\"\\\"PU243\\\"\"\>", ",", "\<\"\\\"PU244\\\"\"\>", ",", "\<\"\\\"PU245\\\"\"\>", ",", "\<\"\\\"PU246\\\"\"\>", ",", "\<\"\\\"PU247\\\"\"\>", ",", "\<\"\\\"AM\\\"\"\>", ",", "\<\"\\\"AM231\\\"\"\>", ",", "\<\"\\\"AM232\\\"\"\>", ",", "\<\"\\\"AM233\\\"\"\>", ",", "\<\"\\\"AM234\\\"\"\>", ",", "\<\"\\\"AM235\\\"\"\>", ",", "\<\"\\\"AM236\\\"\"\>", ",", "\<\"\\\"AM237\\\"\"\>", ",", "\<\"\\\"AM238\\\"\"\>", ",", "\<\"\\\"AM239\\\"\"\>", ",", "\<\"\\\"AM240\\\"\"\>", ",", "\<\"\\\"AM241\\\"\"\>", ",", "\<\"\\\"AM242\\\"\"\>", ",", "\<\"\\\"AM243\\\"\"\>", ",", "\<\"\\\"AM244\\\"\"\>", ",", "\<\"\\\"AM245\\\"\"\>", ",", "\<\"\\\"AM246\\\"\"\>", ",", "\<\"\\\"AM247\\\"\"\>", ",", "\<\"\\\"AM248\\\"\"\>", ",", "\<\"\\\"AM249\\\"\"\>", ",", "\<\"\\\"CM\\\"\"\>", ",", "\<\"\\\"CM233\\\"\"\>", ",", "\<\"\\\"CM234\\\"\"\>", ",", "\<\"\\\"CM235\\\"\"\>", ",", "\<\"\\\"CM236\\\"\"\>", ",", "\<\"\\\"CM237\\\"\"\>", ",", "\<\"\\\"CM238\\\"\"\>", ",", "\<\"\\\"CM239\\\"\"\>", ",", "\<\"\\\"CM240\\\"\"\>", ",", "\<\"\\\"CM241\\\"\"\>", ",", "\<\"\\\"CM242\\\"\"\>", ",", "\<\"\\\"CM243\\\"\"\>", ",", "\<\"\\\"CM244\\\"\"\>", ",", "\<\"\\\"CM245\\\"\"\>", ",", "\<\"\\\"CM246\\\"\"\>", ",", "\<\"\\\"CM247\\\"\"\>", ",", "\<\"\\\"CM248\\\"\"\>", ",", "\<\"\\\"CM249\\\"\"\>", ",", "\<\"\\\"CM250\\\"\"\>", ",", "\<\"\\\"CM251\\\"\"\>", ",", "\<\"\\\"CM252\\\"\"\>", ",", "\<\"\\\"BK\\\"\"\>", ",", "\<\"\\\"BK235\\\"\"\>", ",", "\<\"\\\"BK236\\\"\"\>", ",", "\<\"\\\"BK237\\\"\"\>", ",", "\<\"\\\"BK238\\\"\"\>", ",", "\<\"\\\"BK239\\\"\"\>", ",", "\<\"\\\"BK240\\\"\"\>", ",", "\<\"\\\"BK241\\\"\"\>", ",", "\<\"\\\"BK242\\\"\"\>", ",", "\<\"\\\"BK243\\\"\"\>", ",", "\<\"\\\"BK244\\\"\"\>", ",", "\<\"\\\"BK245\\\"\"\>", ",", "\<\"\\\"BK246\\\"\"\>", ",", "\<\"\\\"BK247\\\"\"\>", ",", "\<\"\\\"BK248\\\"\"\>", ",", "\<\"\\\"BK249\\\"\"\>", ",", "\<\"\\\"BK250\\\"\"\>", ",", "\<\"\\\"BK251\\\"\"\>", ",", "\<\"\\\"BK252\\\"\"\>", ",", "\<\"\\\"BK253\\\"\"\>", ",", "\<\"\\\"BK254\\\"\"\>", ",", "\<\"\\\"CF\\\"\"\>", ",", "\<\"\\\"CF237\\\"\"\>", ",", "\<\"\\\"CF238\\\"\"\>", ",", "\<\"\\\"CF239\\\"\"\>", ",", "\<\"\\\"CF240\\\"\"\>", ",", "\<\"\\\"CF241\\\"\"\>", ",", "\<\"\\\"CF242\\\"\"\>", ",", "\<\"\\\"CF243\\\"\"\>", ",", "\<\"\\\"CF244\\\"\"\>", ",", "\<\"\\\"CF245\\\"\"\>", ",", "\<\"\\\"CF246\\\"\"\>", ",", "\<\"\\\"CF247\\\"\"\>", ",", "\<\"\\\"CF248\\\"\"\>", ",", "\<\"\\\"CF249\\\"\"\>", ",", "\<\"\\\"CF250\\\"\"\>", ",", "\<\"\\\"CF251\\\"\"\>", ",", "\<\"\\\"CF252\\\"\"\>", ",", "\<\"\\\"CF253\\\"\"\>", ",", "\<\"\\\"CF254\\\"\"\>", ",", "\<\"\\\"CF255\\\"\"\>", ",", "\<\"\\\"CF256\\\"\"\>", ",", "\<\"\\\"ES\\\"\"\>", ",", "\<\"\\\"ES240\\\"\"\>", ",", "\<\"\\\"ES241\\\"\"\>", ",", "\<\"\\\"ES242\\\"\"\>", ",", "\<\"\\\"ES243\\\"\"\>", ",", "\<\"\\\"ES244\\\"\"\>", ",", "\<\"\\\"ES245\\\"\"\>", ",", "\<\"\\\"ES246\\\"\"\>", ",", "\<\"\\\"ES247\\\"\"\>", ",", "\<\"\\\"ES248\\\"\"\>", ",", "\<\"\\\"ES249\\\"\"\>", ",", "\<\"\\\"ES250\\\"\"\>", ",", "\<\"\\\"ES251\\\"\"\>", ",", "\<\"\\\"ES252\\\"\"\>", ",", "\<\"\\\"ES253\\\"\"\>", ",", "\<\"\\\"ES254\\\"\"\>", ",", "\<\"\\\"ES255\\\"\"\>", ",", "\<\"\\\"ES256\\\"\"\>", ",", "\<\"\\\"ES257\\\"\"\>", ",", "\<\"\\\"ES258\\\"\"\>", ",", "\<\"\\\"FM\\\"\"\>", ",", "\<\"\\\"FM242\\\"\"\>", ",", "\<\"\\\"FM243\\\"\"\>", ",", "\<\"\\\"FM244\\\"\"\>", ",", "\<\"\\\"FM245\\\"\"\>", ",", "\<\"\\\"FM246\\\"\"\>", ",", "\<\"\\\"FM247\\\"\"\>", ",", "\<\"\\\"FM248\\\"\"\>", ",", "\<\"\\\"FM249\\\"\"\>", ",", "\<\"\\\"FM250\\\"\"\>", ",", "\<\"\\\"FM251\\\"\"\>", ",", "\<\"\\\"FM252\\\"\"\>", ",", "\<\"\\\"FM253\\\"\"\>", ",", "\<\"\\\"FM254\\\"\"\>", ",", "\<\"\\\"FM255\\\"\"\>", ",", "\<\"\\\"FM256\\\"\"\>", ",", "\<\"\\\"FM257\\\"\"\>", ",", "\<\"\\\"FM258\\\"\"\>", ",", "\<\"\\\"FM259\\\"\"\>", ",", "\<\"\\\"FM260\\\"\"\>", ",", "\<\"\\\"MD\\\"\"\>", ",", "\<\"\\\"MD245\\\"\"\>", ",", "\<\"\\\"MD246\\\"\"\>", ",", "\<\"\\\"MD247\\\"\"\>", ",", "\<\"\\\"MD248\\\"\"\>", ",", "\<\"\\\"MD249\\\"\"\>", ",", "\<\"\\\"MD250\\\"\"\>", ",", "\<\"\\\"MD251\\\"\"\>", ",", "\<\"\\\"MD252\\\"\"\>", ",", "\<\"\\\"MD253\\\"\"\>", ",", "\<\"\\\"MD254\\\"\"\>", ",", "\<\"\\\"MD255\\\"\"\>", ",", "\<\"\\\"MD256\\\"\"\>", ",", "\<\"\\\"MD257\\\"\"\>", ",", "\<\"\\\"MD258\\\"\"\>", ",", "\<\"\\\"MD259\\\"\"\>", ",", "\<\"\\\"MD260\\\"\"\>", ",", "\<\"\\\"MD261\\\"\"\>", ",", "\<\"\\\"MD262\\\"\"\>", ",", "\<\"\\\"NO\\\"\"\>", ",", "\<\"\\\"NO248\\\"\"\>", ",", "\<\"\\\"NO249\\\"\"\>", ",", "\<\"\\\"NO250\\\"\"\>", ",", "\<\"\\\"NO251\\\"\"\>", ",", "\<\"\\\"NO252\\\"\"\>", ",", "\<\"\\\"NO253\\\"\"\>", ",", "\<\"\\\"NO254\\\"\"\>", ",", "\<\"\\\"NO255\\\"\"\>", ",", "\<\"\\\"NO256\\\"\"\>", ",", "\<\"\\\"NO257\\\"\"\>", ",", "\<\"\\\"NO258\\\"\"\>", ",", "\<\"\\\"NO259\\\"\"\>", ",", "\<\"\\\"NO260\\\"\"\>", ",", "\<\"\\\"NO261\\\"\"\>", ",", "\<\"\\\"NO262\\\"\"\>", ",", "\<\"\\\"NO263\\\"\"\>", ",", "\<\"\\\"NO264\\\"\"\>", ",", "\<\"\\\"LR\\\"\"\>", ",", "\<\"\\\"LR251\\\"\"\>", ",", "\<\"\\\"LR252\\\"\"\>", ",", "\<\"\\\"LR253\\\"\"\>", ",", "\<\"\\\"LR254\\\"\"\>", ",", "\<\"\\\"LR255\\\"\"\>", ",", "\<\"\\\"LR256\\\"\"\>", ",", "\<\"\\\"LR257\\\"\"\>", ",", "\<\"\\\"LR258\\\"\"\>", ",", "\<\"\\\"LR259\\\"\"\>", ",", "\<\"\\\"LR260\\\"\"\>", ",", "\<\"\\\"LR261\\\"\"\>", ",", "\<\"\\\"LR262\\\"\"\>", ",", "\<\"\\\"LR263\\\"\"\>", ",", "\<\"\\\"LR264\\\"\"\>", ",", "\<\"\\\"LR265\\\"\"\>", ",", "\<\"\\\"LR266\\\"\"\>", ",", "\<\"\\\"RF\\\"\"\>", ",", "\<\"\\\"RF253\\\"\"\>", ",", "\<\"\\\"RF254\\\"\"\>", ",", "\<\"\\\"RF255\\\"\"\>", ",", "\<\"\\\"RF256\\\"\"\>", ",", "\<\"\\\"RF257\\\"\"\>", ",", "\<\"\\\"RF258\\\"\"\>", ",", "\<\"\\\"RF259\\\"\"\>", ",", "\<\"\\\"RF260\\\"\"\>", ",", "\<\"\\\"RF261\\\"\"\>", ",", "\<\"\\\"RF262\\\"\"\>", ",", "\<\"\\\"RF263\\\"\"\>", ",", "\<\"\\\"RF264\\\"\"\>", ",", "\<\"\\\"RF265\\\"\"\>", ",", "\<\"\\\"RF266\\\"\"\>", ",", "\<\"\\\"RF267\\\"\"\>", ",", "\<\"\\\"RF268\\\"\"\>", ",", "\<\"\\\"DB\\\"\"\>", ",", "\<\"\\\"DB255\\\"\"\>", ",", "\<\"\\\"DB256\\\"\"\>", ",", "\<\"\\\"DB257\\\"\"\>", ",", "\<\"\\\"DB258\\\"\"\>", ",", "\<\"\\\"DB259\\\"\"\>", ",", "\<\"\\\"DB260\\\"\"\>", ",", "\<\"\\\"DB261\\\"\"\>", ",", "\<\"\\\"DB262\\\"\"\>", ",", "\<\"\\\"DB263\\\"\"\>", ",", "\<\"\\\"DB264\\\"\"\>", ",", "\<\"\\\"DB265\\\"\"\>", ",", "\<\"\\\"DB266\\\"\"\>", ",", "\<\"\\\"DB267\\\"\"\>", ",", "\<\"\\\"DB268\\\"\"\>", ",", "\<\"\\\"DB269\\\"\"\>", ",", "\<\"\\\"DB270\\\"\"\>", ",", "\<\"\\\"SG\\\"\"\>", ",", "\<\"\\\"SG258\\\"\"\>", ",", "\<\"\\\"SG259\\\"\"\>", ",", "\<\"\\\"SG260\\\"\"\>", ",", "\<\"\\\"SG261\\\"\"\>", ",", "\<\"\\\"SG262\\\"\"\>", ",", "\<\"\\\"SG263\\\"\"\>", ",", "\<\"\\\"SG264\\\"\"\>", ",", "\<\"\\\"SG265\\\"\"\>", ",", "\<\"\\\"SG266\\\"\"\>", ",", "\<\"\\\"SG267\\\"\"\>", ",", "\<\"\\\"SG268\\\"\"\>", ",", "\<\"\\\"SG269\\\"\"\>", ",", "\<\"\\\"SG270\\\"\"\>", ",", "\<\"\\\"SG271\\\"\"\>", ",", "\<\"\\\"SG272\\\"\"\>", ",", "\<\"\\\"SG273\\\"\"\>", ",", "\<\"\\\"BH\\\"\"\>", ",", "\<\"\\\"BH260\\\"\"\>", ",", "\<\"\\\"BH261\\\"\"\>", ",", "\<\"\\\"BH262\\\"\"\>", ",", "\<\"\\\"BH263\\\"\"\>", ",", "\<\"\\\"BH264\\\"\"\>", ",", "\<\"\\\"BH265\\\"\"\>", ",", "\<\"\\\"BH266\\\"\"\>", ",", "\<\"\\\"BH267\\\"\"\>", ",", "\<\"\\\"BH268\\\"\"\>", ",", "\<\"\\\"BH269\\\"\"\>", ",", "\<\"\\\"BH270\\\"\"\>", ",", "\<\"\\\"BH271\\\"\"\>", ",", "\<\"\\\"BH272\\\"\"\>", ",", "\<\"\\\"BH273\\\"\"\>", ",", "\<\"\\\"BH274\\\"\"\>", ",", "\<\"\\\"BH275\\\"\"\>", ",", "\<\"\\\"HS\\\"\"\>", ",", "\<\"\\\"HS263\\\"\"\>", ",", "\<\"\\\"HS264\\\"\"\>", ",", "\<\"\\\"HS265\\\"\"\>", ",", "\<\"\\\"HS266\\\"\"\>", ",", "\<\"\\\"HS267\\\"\"\>", ",", "\<\"\\\"HS268\\\"\"\>", ",", "\<\"\\\"HS269\\\"\"\>", ",", "\<\"\\\"HS270\\\"\"\>", ",", "\<\"\\\"HS271\\\"\"\>", ",", "\<\"\\\"HS272\\\"\"\>", ",", "\<\"\\\"HS273\\\"\"\>", ",", "\<\"\\\"HS274\\\"\"\>", ",", "\<\"\\\"HS275\\\"\"\>", ",", "\<\"\\\"HS276\\\"\"\>", ",", "\<\"\\\"HS277\\\"\"\>", ",", "\<\"\\\"MT\\\"\"\>", ",", "\<\"\\\"MT265\\\"\"\>", ",", "\<\"\\\"MT266\\\"\"\>", ",", "\<\"\\\"MT267\\\"\"\>", ",", "\<\"\\\"MT268\\\"\"\>", ",", "\<\"\\\"MT269\\\"\"\>", ",", "\<\"\\\"MT270\\\"\"\>", ",", "\<\"\\\"MT271\\\"\"\>", ",", "\<\"\\\"MT272\\\"\"\>", ",", "\<\"\\\"MT273\\\"\"\>", ",", "\<\"\\\"MT274\\\"\"\>", ",", "\<\"\\\"MT275\\\"\"\>", ",", "\<\"\\\"MT276\\\"\"\>", ",", "\<\"\\\"MT277\\\"\"\>", ",", "\<\"\\\"MT278\\\"\"\>", ",", "\<\"\\\"MT279\\\"\"\>", ",", "\<\"\\\"DS\\\"\"\>", ",", "\<\"\\\"DS267\\\"\"\>", ",", "\<\"\\\"DS268\\\"\"\>", ",", "\<\"\\\"DS269\\\"\"\>", ",", "\<\"\\\"DS270\\\"\"\>", ",", "\<\"\\\"DS271\\\"\"\>", ",", "\<\"\\\"DS272\\\"\"\>", ",", "\<\"\\\"DS273\\\"\"\>", ",", "\<\"\\\"DS274\\\"\"\>", ",", "\<\"\\\"DS275\\\"\"\>", ",", "\<\"\\\"DS276\\\"\"\>", ",", "\<\"\\\"DS277\\\"\"\>", ",", "\<\"\\\"DS278\\\"\"\>", ",", "\<\"\\\"DS279\\\"\"\>", ",", "\<\"\\\"DS280\\\"\"\>", ",", "\<\"\\\"DS281\\\"\"\>", ",", "\<\"\\\"RG\\\"\"\>", ",", "\<\"\\\"RG272\\\"\"\>", ",", "\<\"\\\"RG273\\\"\"\>", ",", "\<\"\\\"RG274\\\"\"\>", ",", "\<\"\\\"RG275\\\"\"\>", ",", "\<\"\\\"RG276\\\"\"\>", ",", "\<\"\\\"RG277\\\"\"\>", ",", "\<\"\\\"RG278\\\"\"\>", ",", "\<\"\\\"RG279\\\"\"\>", ",", "\<\"\\\"RG280\\\"\"\>", ",", "\<\"\\\"RG281\\\"\"\>", ",", "\<\"\\\"RG282\\\"\"\>", ",", "\<\"\\\"RG283\\\"\"\>", ",", "\<\"\\\"UUB\\\"\"\>", ",", "\<\"\\\"UUB277\\\"\"\>", ",", "\<\"\\\"UUB278\\\"\"\>", ",", "\<\"\\\"UUB279\\\"\"\>", ",", "\<\"\\\"UUB280\\\"\"\>", ",", "\<\"\\\"UUB281\\\"\"\>", ",", "\<\"\\\"UUB282\\\"\"\>", ",", "\<\"\\\"UUB283\\\"\"\>", ",", "\<\"\\\"UUB284\\\"\"\>", ",", "\<\"\\\"UUB285\\\"\"\>", ",", "\<\"\\\"UUT\\\"\"\>", ",", "\<\"\\\"UUT283\\\"\"\>", ",", "\<\"\\\"UUT284\\\"\"\>", ",", "\<\"\\\"UUT285\\\"\"\>", ",", "\<\"\\\"UUT286\\\"\"\>", ",", "\<\"\\\"UUT287\\\"\"\>", ",", "\<\"\\\"UUQ\\\"\"\>", ",", "\<\"\\\"UUQ285\\\"\"\>", ",", "\<\"\\\"UUQ286\\\"\"\>", ",", "\<\"\\\"UUQ287\\\"\"\>", ",", "\<\"\\\"UUQ288\\\"\"\>", ",", "\<\"\\\"UUQ289\\\"\"\>", ",", "\<\"\\\"UUP\\\"\"\>", ",", "\<\"\\\"UUP287\\\"\"\>", ",", "\<\"\\\"UUP288\\\"\"\>", ",", "\<\"\\\"UUP289\\\"\"\>", ",", "\<\"\\\"UUP290\\\"\"\>", ",", "\<\"\\\"UUP291\\\"\"\>", ",", "\<\"\\\"UUH\\\"\"\>", ",", "\<\"\\\"UUH289\\\"\"\>", ",", "\<\"\\\"UUH290\\\"\"\>", ",", "\<\"\\\"UUH291\\\"\"\>", ",", "\<\"\\\"UUH292\\\"\"\>", ",", "\<\"\\\"UUS\\\"\"\>", ",", "\<\"\\\"UUS291\\\"\"\>", ",", "\<\"\\\"UUS292\\\"\"\>", ",", "\<\"\\\"UUO\\\"\"\>", ",", "\<\"\\\"UUO293\\\"\"\>"}], "}"}]}], SequenceForm[ "static const char *mass_labels[] =", { "\"H\"", "\"H1\"", "\"H2\"", "\"D\"", "\"H3\"", "\"T\"", "\"H4\"", "\"H5\"", "\"H6\"", "\"H7\"", "\"HE\"", "\"HE3\"", "\"HE4\"", "\"HE5\"", "\"HE6\"", "\"HE7\"", "\"HE8\"", "\"HE9\"", "\"HE10\"", "\"LI\"", "\"LI3\"", "\"LI4\"", "\"LI5\"", "\"LI6\"", "\"LI7\"", "\"LI8\"", "\"LI9\"", "\"LI10\"", "\"LI11\"", "\"LI12\"", "\"BE\"", "\"BE5\"", "\"BE6\"", "\"BE7\"", "\"BE8\"", "\"BE9\"", "\"BE10\"", "\"BE11\"", "\"BE12\"", "\"BE13\"", "\"BE14\"", "\"BE15\"", "\"BE16\"", "\"B\"", "\"B6\"", "\"B7\"", "\"B8\"", "\"B9\"", "\"B10\"", "\"B11\"", "\"B12\"", "\"B13\"", "\"B14\"", "\"B15\"", "\"B16\"", "\"B17\"", "\"B18\"", "\"B19\"", "\"C\"", "\"C8\"", "\"C9\"", "\"C10\"", "\"C11\"", "\"C12\"", "\"C13\"", "\"C14\"", "\"C15\"", "\"C16\"", "\"C17\"", "\"C18\"", "\"C19\"", "\"C20\"", "\"C21\"", "\"C22\"", "\"N\"", "\"N10\"", "\"N11\"", "\"N12\"", "\"N13\"", "\"N14\"", "\"N15\"", "\"N16\"", "\"N17\"", "\"N18\"", "\"N19\"", "\"N20\"", "\"N21\"", "\"N22\"", "\"N23\"", "\"N24\"", "\"N25\"", "\"O\"", "\"O12\"", "\"O13\"", "\"O14\"", "\"O15\"", "\"O16\"", "\"O17\"", "\"O18\"", "\"O19\"", "\"O20\"", "\"O21\"", "\"O22\"", "\"O23\"", "\"O24\"", "\"O25\"", "\"O26\"", "\"O27\"", "\"O28\"", "\"F\"", "\"F14\"", "\"F15\"", "\"F16\"", "\"F17\"", "\"F18\"", "\"F19\"", "\"F20\"", "\"F21\"", "\"F22\"", "\"F23\"", "\"F24\"", "\"F25\"", "\"F26\"", "\"F27\"", "\"F28\"", "\"F29\"", "\"F30\"", "\"F31\"", "\"NE\"", "\"NE16\"", "\"NE17\"", "\"NE18\"", "\"NE19\"", "\"NE20\"", "\"NE21\"", "\"NE22\"", "\"NE23\"", "\"NE24\"", "\"NE25\"", "\"NE26\"", "\"NE27\"", "\"NE28\"", "\"NE29\"", "\"NE30\"", "\"NE31\"", "\"NE32\"", "\"NE33\"", "\"NE34\"", "\"NA\"", "\"NA18\"", "\"NA19\"", "\"NA20\"", "\"NA21\"", "\"NA22\"", "\"NA23\"", "\"NA24\"", "\"NA25\"", "\"NA26\"", "\"NA27\"", "\"NA28\"", "\"NA29\"", "\"NA30\"", "\"NA31\"", "\"NA32\"", "\"NA33\"", "\"NA34\"", "\"NA35\"", "\"NA36\"", "\"NA37\"", "\"MG\"", "\"MG19\"", "\"MG20\"", "\"MG21\"", "\"MG22\"", "\"MG23\"", "\"MG24\"", "\"MG25\"", "\"MG26\"", "\"MG27\"", "\"MG28\"", "\"MG29\"", "\"MG30\"", "\"MG31\"", "\"MG32\"", "\"MG33\"", "\"MG34\"", "\"MG35\"", "\"MG36\"", "\"MG37\"", "\"MG38\"", "\"MG39\"", "\"MG40\"", "\"AL\"", "\"AL21\"", "\"AL22\"", "\"AL23\"", "\"AL24\"", "\"AL25\"", "\"AL26\"", "\"AL27\"", "\"AL28\"", "\"AL29\"", "\"AL30\"", "\"AL31\"", "\"AL32\"", "\"AL33\"", "\"AL34\"", "\"AL35\"", "\"AL36\"", "\"AL37\"", "\"AL38\"", "\"AL39\"", "\"AL40\"", "\"AL41\"", "\"AL42\"", "\"SI\"", "\"SI22\"", "\"SI23\"", "\"SI24\"", "\"SI25\"", "\"SI26\"", "\"SI27\"", "\"SI28\"", "\"SI29\"", "\"SI30\"", "\"SI31\"", "\"SI32\"", "\"SI33\"", "\"SI34\"", "\"SI35\"", "\"SI36\"", "\"SI37\"", "\"SI38\"", "\"SI39\"", "\"SI40\"", "\"SI41\"", "\"SI42\"", "\"SI43\"", "\"SI44\"", "\"P\"", "\"P24\"", "\"P25\"", "\"P26\"", "\"P27\"", "\"P28\"", "\"P29\"", "\"P30\"", "\"P31\"", "\"P32\"", "\"P33\"", "\"P34\"", "\"P35\"", "\"P36\"", "\"P37\"", "\"P38\"", "\"P39\"", "\"P40\"", "\"P41\"", "\"P42\"", "\"P43\"", "\"P44\"", "\"P45\"", "\"P46\"", "\"S\"", "\"S26\"", "\"S27\"", "\"S28\"", "\"S29\"", "\"S30\"", "\"S31\"", "\"S32\"", "\"S33\"", "\"S34\"", "\"S35\"", "\"S36\"", "\"S37\"", "\"S38\"", "\"S39\"", "\"S40\"", "\"S41\"", "\"S42\"", "\"S43\"", "\"S44\"", "\"S45\"", "\"S46\"", "\"S47\"", "\"S48\"", "\"S49\"", "\"CL\"", "\"CL28\"", "\"CL29\"", "\"CL30\"", "\"CL31\"", "\"CL32\"", "\"CL33\"", "\"CL34\"", "\"CL35\"", "\"CL36\"", "\"CL37\"", "\"CL38\"", "\"CL39\"", "\"CL40\"", "\"CL41\"", "\"CL42\"", "\"CL43\"", "\"CL44\"", "\"CL45\"", "\"CL46\"", "\"CL47\"", "\"CL48\"", "\"CL49\"", "\"CL50\"", "\"CL51\"", "\"AR\"", "\"AR30\"", "\"AR31\"", "\"AR32\"", "\"AR33\"", "\"AR34\"", "\"AR35\"", "\"AR36\"", "\"AR37\"", "\"AR38\"", "\"AR39\"", "\"AR40\"", "\"AR41\"", "\"AR42\"", "\"AR43\"", "\"AR44\"", "\"AR45\"", "\"AR46\"", "\"AR47\"", "\"AR48\"", "\"AR49\"", "\"AR50\"", "\"AR51\"", "\"AR52\"", "\"AR53\"", "\"K\"", "\"K32\"", "\"K33\"", "\"K34\"", "\"K35\"", "\"K36\"", "\"K37\"", "\"K38\"", "\"K39\"", "\"K40\"", "\"K41\"", "\"K42\"", "\"K43\"", "\"K44\"", "\"K45\"", "\"K46\"", "\"K47\"", "\"K48\"", "\"K49\"", "\"K50\"", "\"K51\"", "\"K52\"", "\"K53\"", "\"K54\"", "\"K55\"", "\"CA\"", "\"CA34\"", "\"CA35\"", "\"CA36\"", "\"CA37\"", "\"CA38\"", "\"CA39\"", "\"CA40\"", "\"CA41\"", "\"CA42\"", "\"CA43\"", "\"CA44\"", "\"CA45\"", "\"CA46\"", "\"CA47\"", "\"CA48\"", "\"CA49\"", "\"CA50\"", "\"CA51\"", "\"CA52\"", "\"CA53\"", "\"CA54\"", "\"CA55\"", "\"CA56\"", "\"CA57\"", "\"SC\"", "\"SC36\"", "\"SC37\"", "\"SC38\"", "\"SC39\"", "\"SC40\"", "\"SC41\"", "\"SC42\"", "\"SC43\"", "\"SC44\"", "\"SC45\"", "\"SC46\"", "\"SC47\"", "\"SC48\"", "\"SC49\"", "\"SC50\"", "\"SC51\"", "\"SC52\"", "\"SC53\"", "\"SC54\"", "\"SC55\"", "\"SC56\"", "\"SC57\"", "\"SC58\"", "\"SC59\"", "\"SC60\"", "\"TI\"", "\"TI38\"", "\"TI39\"", "\"TI40\"", "\"TI41\"", "\"TI42\"", "\"TI43\"", "\"TI44\"", "\"TI45\"", "\"TI46\"", "\"TI47\"", "\"TI48\"", "\"TI49\"", "\"TI50\"", "\"TI51\"", "\"TI52\"", "\"TI53\"", "\"TI54\"", "\"TI55\"", "\"TI56\"", "\"TI57\"", "\"TI58\"", "\"TI59\"", "\"TI60\"", "\"TI61\"", "\"TI62\"", "\"TI63\"", "\"V\"", "\"V40\"", "\"V41\"", "\"V42\"", "\"V43\"", "\"V44\"", "\"V45\"", "\"V46\"", "\"V47\"", "\"V48\"", "\"V49\"", "\"V50\"", "\"V51\"", "\"V52\"", "\"V53\"", "\"V54\"", "\"V55\"", "\"V56\"", "\"V57\"", "\"V58\"", "\"V59\"", "\"V60\"", "\"V61\"", "\"V62\"", "\"V63\"", "\"V64\"", "\"V65\"", "\"CR\"", "\"CR42\"", "\"CR43\"", "\"CR44\"", "\"CR45\"", "\"CR46\"", "\"CR47\"", "\"CR48\"", "\"CR49\"", "\"CR50\"", "\"CR51\"", "\"CR52\"", "\"CR53\"", "\"CR54\"", "\"CR55\"", "\"CR56\"", "\"CR57\"", "\"CR58\"", "\"CR59\"", "\"CR60\"", "\"CR61\"", "\"CR62\"", "\"CR63\"", "\"CR64\"", "\"CR65\"", "\"CR66\"", "\"CR67\"", "\"MN\"", "\"MN44\"", "\"MN45\"", "\"MN46\"", "\"MN47\"", "\"MN48\"", "\"MN49\"", "\"MN50\"", "\"MN51\"", "\"MN52\"", "\"MN53\"", "\"MN54\"", "\"MN55\"", "\"MN56\"", "\"MN57\"", "\"MN58\"", "\"MN59\"", "\"MN60\"", "\"MN61\"", "\"MN62\"", "\"MN63\"", "\"MN64\"", "\"MN65\"", "\"MN66\"", "\"MN67\"", "\"MN68\"", "\"MN69\"", "\"FE\"", "\"FE45\"", "\"FE46\"", "\"FE47\"", "\"FE48\"", "\"FE49\"", "\"FE50\"", "\"FE51\"", "\"FE52\"", "\"FE53\"", "\"FE54\"", "\"FE55\"", "\"FE56\"", "\"FE57\"", "\"FE58\"", "\"FE59\"", "\"FE60\"", "\"FE61\"", "\"FE62\"", "\"FE63\"", "\"FE64\"", "\"FE65\"", "\"FE66\"", "\"FE67\"", "\"FE68\"", "\"FE69\"", "\"FE70\"", "\"FE71\"", "\"FE72\"", "\"CO\"", "\"CO47\"", "\"CO48\"", "\"CO49\"", "\"CO50\"", "\"CO51\"", "\"CO52\"", "\"CO53\"", "\"CO54\"", "\"CO55\"", "\"CO56\"", "\"CO57\"", "\"CO58\"", "\"CO59\"", "\"CO60\"", "\"CO61\"", "\"CO62\"", "\"CO63\"", "\"CO64\"", "\"CO65\"", "\"CO66\"", "\"CO67\"", "\"CO68\"", "\"CO69\"", "\"CO70\"", "\"CO71\"", "\"CO72\"", "\"CO73\"", "\"CO74\"", "\"CO75\"", "\"NI\"", "\"NI48\"", "\"NI49\"", "\"NI50\"", "\"NI51\"", "\"NI52\"", "\"NI53\"", "\"NI54\"", "\"NI55\"", "\"NI56\"", "\"NI57\"", "\"NI58\"", "\"NI59\"", "\"NI60\"", "\"NI61\"", "\"NI62\"", "\"NI63\"", "\"NI64\"", "\"NI65\"", "\"NI66\"", "\"NI67\"", "\"NI68\"", "\"NI69\"", "\"NI70\"", "\"NI71\"", "\"NI72\"", "\"NI73\"", "\"NI74\"", "\"NI75\"", "\"NI76\"", "\"NI77\"", "\"NI78\"", "\"CU\"", "\"CU52\"", "\"CU53\"", "\"CU54\"", "\"CU55\"", "\"CU56\"", "\"CU57\"", "\"CU58\"", "\"CU59\"", "\"CU60\"", "\"CU61\"", "\"CU62\"", "\"CU63\"", "\"CU64\"", "\"CU65\"", "\"CU66\"", "\"CU67\"", "\"CU68\"", "\"CU69\"", "\"CU70\"", "\"CU71\"", "\"CU72\"", "\"CU73\"", "\"CU74\"", "\"CU75\"", "\"CU76\"", "\"CU77\"", "\"CU78\"", "\"CU79\"", "\"CU80\"", "\"ZN\"", "\"ZN54\"", "\"ZN55\"", "\"ZN56\"", "\"ZN57\"", "\"ZN58\"", "\"ZN59\"", "\"ZN60\"", "\"ZN61\"", "\"ZN62\"", "\"ZN63\"", "\"ZN64\"", "\"ZN65\"", "\"ZN66\"", "\"ZN67\"", "\"ZN68\"", "\"ZN69\"", "\"ZN70\"", "\"ZN71\"", "\"ZN72\"", "\"ZN73\"", "\"ZN74\"", "\"ZN75\"", "\"ZN76\"", "\"ZN77\"", "\"ZN78\"", "\"ZN79\"", "\"ZN80\"", "\"ZN81\"", "\"ZN82\"", "\"ZN83\"", "\"GA\"", "\"GA56\"", "\"GA57\"", "\"GA58\"", "\"GA59\"", "\"GA60\"", "\"GA61\"", "\"GA62\"", "\"GA63\"", "\"GA64\"", "\"GA65\"", "\"GA66\"", "\"GA67\"", "\"GA68\"", "\"GA69\"", "\"GA70\"", "\"GA71\"", "\"GA72\"", "\"GA73\"", "\"GA74\"", "\"GA75\"", "\"GA76\"", "\"GA77\"", "\"GA78\"", "\"GA79\"", "\"GA80\"", "\"GA81\"", "\"GA82\"", "\"GA83\"", "\"GA84\"", "\"GA85\"", "\"GA86\"", "\"GE\"", "\"GE58\"", "\"GE59\"", "\"GE60\"", "\"GE61\"", "\"GE62\"", "\"GE63\"", "\"GE64\"", "\"GE65\"", "\"GE66\"", "\"GE67\"", "\"GE68\"", "\"GE69\"", "\"GE70\"", "\"GE71\"", "\"GE72\"", "\"GE73\"", "\"GE74\"", "\"GE75\"", "\"GE76\"", "\"GE77\"", "\"GE78\"", "\"GE79\"", "\"GE80\"", "\"GE81\"", "\"GE82\"", "\"GE83\"", "\"GE84\"", "\"GE85\"", "\"GE86\"", "\"GE87\"", "\"GE88\"", "\"GE89\"", "\"AS\"", "\"AS60\"", "\"AS61\"", "\"AS62\"", "\"AS63\"", "\"AS64\"", "\"AS65\"", "\"AS66\"", "\"AS67\"", "\"AS68\"", "\"AS69\"", "\"AS70\"", "\"AS71\"", "\"AS72\"", "\"AS73\"", "\"AS74\"", "\"AS75\"", "\"AS76\"", "\"AS77\"", "\"AS78\"", "\"AS79\"", "\"AS80\"", "\"AS81\"", "\"AS82\"", "\"AS83\"", "\"AS84\"", "\"AS85\"", "\"AS86\"", "\"AS87\"", "\"AS88\"", "\"AS89\"", "\"AS90\"", "\"AS91\"", "\"AS92\"", "\"SE\"", "\"SE65\"", "\"SE66\"", "\"SE67\"", "\"SE68\"", "\"SE69\"", "\"SE70\"", "\"SE71\"", "\"SE72\"", "\"SE73\"", "\"SE74\"", "\"SE75\"", "\"SE76\"", "\"SE77\"", "\"SE78\"", "\"SE79\"", "\"SE80\"", "\"SE81\"", "\"SE82\"", "\"SE83\"", "\"SE84\"", "\"SE85\"", "\"SE86\"", "\"SE87\"", "\"SE88\"", "\"SE89\"", "\"SE90\"", "\"SE91\"", "\"SE92\"", "\"SE93\"", "\"SE94\"", "\"BR\"", "\"BR67\"", "\"BR68\"", "\"BR69\"", "\"BR70\"", "\"BR71\"", "\"BR72\"", "\"BR73\"", "\"BR74\"", "\"BR75\"", "\"BR76\"", "\"BR77\"", "\"BR78\"", "\"BR79\"", "\"BR80\"", "\"BR81\"", "\"BR82\"", "\"BR83\"", "\"BR84\"", "\"BR85\"", "\"BR86\"", "\"BR87\"", "\"BR88\"", "\"BR89\"", "\"BR90\"", "\"BR91\"", "\"BR92\"", "\"BR93\"", "\"BR94\"", "\"BR95\"", "\"BR96\"", "\"BR97\"", "\"KR\"", "\"KR69\"", "\"KR70\"", "\"KR71\"", "\"KR72\"", "\"KR73\"", "\"KR74\"", "\"KR75\"", "\"KR76\"", "\"KR77\"", "\"KR78\"", "\"KR79\"", "\"KR80\"", "\"KR81\"", "\"KR82\"", "\"KR83\"", "\"KR84\"", "\"KR85\"", "\"KR86\"", "\"KR87\"", "\"KR88\"", "\"KR89\"", "\"KR90\"", "\"KR91\"", "\"KR92\"", "\"KR93\"", "\"KR94\"", "\"KR95\"", "\"KR96\"", "\"KR97\"", "\"KR98\"", "\"KR99\"", "\"KR100\"", "\"RB\"", "\"RB71\"", "\"RB72\"", "\"RB73\"", "\"RB74\"", "\"RB75\"", "\"RB76\"", "\"RB77\"", "\"RB78\"", "\"RB79\"", "\"RB80\"", "\"RB81\"", "\"RB82\"", "\"RB83\"", "\"RB84\"", "\"RB85\"", "\"RB86\"", "\"RB87\"", "\"RB88\"", "\"RB89\"", "\"RB90\"", "\"RB91\"", "\"RB92\"", "\"RB93\"", "\"RB94\"", "\"RB95\"", "\"RB96\"", "\"RB97\"", "\"RB98\"", "\"RB99\"", "\"RB100\"", "\"RB101\"", "\"RB102\"", "\"SR\"", "\"SR73\"", "\"SR74\"", "\"SR75\"", "\"SR76\"", "\"SR77\"", "\"SR78\"", "\"SR79\"", "\"SR80\"", "\"SR81\"", "\"SR82\"", "\"SR83\"", "\"SR84\"", "\"SR85\"", "\"SR86\"", "\"SR87\"", "\"SR88\"", "\"SR89\"", "\"SR90\"", "\"SR91\"", "\"SR92\"", "\"SR93\"", "\"SR94\"", "\"SR95\"", "\"SR96\"", "\"SR97\"", "\"SR98\"", "\"SR99\"", "\"SR100\"", "\"SR101\"", "\"SR102\"", "\"SR103\"", "\"SR104\"", "\"SR105\"", "\"Y\"", "\"Y76\"", "\"Y77\"", "\"Y78\"", "\"Y79\"", "\"Y80\"", "\"Y81\"", "\"Y82\"", "\"Y83\"", "\"Y84\"", "\"Y85\"", "\"Y86\"", "\"Y87\"", "\"Y88\"", "\"Y89\"", "\"Y90\"", "\"Y91\"", "\"Y92\"", "\"Y93\"", "\"Y94\"", "\"Y95\"", "\"Y96\"", "\"Y97\"", "\"Y98\"", "\"Y99\"", "\"Y100\"", "\"Y101\"", "\"Y102\"", "\"Y103\"", "\"Y104\"", "\"Y105\"", "\"Y106\"", "\"Y107\"", "\"Y108\"", "\"ZR\"", "\"ZR78\"", "\"ZR79\"", "\"ZR80\"", "\"ZR81\"", "\"ZR82\"", "\"ZR83\"", "\"ZR84\"", "\"ZR85\"", "\"ZR86\"", "\"ZR87\"", "\"ZR88\"", "\"ZR89\"", "\"ZR90\"", "\"ZR91\"", "\"ZR92\"", "\"ZR93\"", "\"ZR94\"", "\"ZR95\"", "\"ZR96\"", "\"ZR97\"", "\"ZR98\"", "\"ZR99\"", "\"ZR100\"", "\"ZR101\"", "\"ZR102\"", "\"ZR103\"", "\"ZR104\"", "\"ZR105\"", "\"ZR106\"", "\"ZR107\"", "\"ZR108\"", "\"ZR109\"", "\"ZR110\"", "\"NB\"", "\"NB81\"", "\"NB82\"", "\"NB83\"", "\"NB84\"", "\"NB85\"", "\"NB86\"", "\"NB87\"", "\"NB88\"", "\"NB89\"", "\"NB90\"", "\"NB91\"", "\"NB92\"", "\"NB93\"", "\"NB94\"", "\"NB95\"", "\"NB96\"", "\"NB97\"", "\"NB98\"", "\"NB99\"", "\"NB100\"", "\"NB101\"", "\"NB102\"", "\"NB103\"", "\"NB104\"", "\"NB105\"", "\"NB106\"", "\"NB107\"", "\"NB108\"", "\"NB109\"", "\"NB110\"", "\"NB111\"", "\"NB112\"", "\"NB113\"", "\"MO\"", "\"MO83\"", "\"MO84\"", "\"MO85\"", "\"MO86\"", "\"MO87\"", "\"MO88\"", "\"MO89\"", "\"MO90\"", "\"MO91\"", "\"MO92\"", "\"MO93\"", "\"MO94\"", "\"MO95\"", "\"MO96\"", "\"MO97\"", "\"MO98\"", "\"MO99\"", "\"MO100\"", "\"MO101\"", "\"MO102\"", "\"MO103\"", "\"MO104\"", "\"MO105\"", "\"MO106\"", "\"MO107\"", "\"MO108\"", "\"MO109\"", "\"MO110\"", "\"MO111\"", "\"MO112\"", "\"MO113\"", "\"MO114\"", "\"MO115\"", "\"TC\"", "\"TC85\"", "\"TC86\"", "\"TC87\"", "\"TC88\"", "\"TC89\"", "\"TC90\"", "\"TC91\"", "\"TC92\"", "\"TC93\"", "\"TC94\"", "\"TC95\"", "\"TC96\"", "\"TC97\"", "\"TC98\"", "\"TC99\"", "\"TC100\"", "\"TC101\"", "\"TC102\"", "\"TC103\"", "\"TC104\"", "\"TC105\"", "\"TC106\"", "\"TC107\"", "\"TC108\"", "\"TC109\"", "\"TC110\"", "\"TC111\"", "\"TC112\"", "\"TC113\"", "\"TC114\"", "\"TC115\"", "\"TC116\"", "\"TC117\"", "\"TC118\"", "\"RU\"", "\"RU87\"", "\"RU88\"", "\"RU89\"", "\"RU90\"", "\"RU91\"", "\"RU92\"", "\"RU93\"", "\"RU94\"", "\"RU95\"", "\"RU96\"", "\"RU97\"", "\"RU98\"", "\"RU99\"", "\"RU100\"", "\"RU101\"", "\"RU102\"", "\"RU103\"", "\"RU104\"", "\"RU105\"", "\"RU106\"", "\"RU107\"", "\"RU108\"", "\"RU109\"", "\"RU110\"", "\"RU111\"", "\"RU112\"", "\"RU113\"", "\"RU114\"", "\"RU115\"", "\"RU116\"", "\"RU117\"", "\"RU118\"", "\"RU119\"", "\"RU120\"", "\"RH\"", "\"RH89\"", "\"RH90\"", "\"RH91\"", "\"RH92\"", "\"RH93\"", "\"RH94\"", "\"RH95\"", "\"RH96\"", "\"RH97\"", "\"RH98\"", "\"RH99\"", "\"RH100\"", "\"RH101\"", "\"RH102\"", "\"RH103\"", "\"RH104\"", "\"RH105\"", "\"RH106\"", "\"RH107\"", "\"RH108\"", "\"RH109\"", "\"RH110\"", "\"RH111\"", "\"RH112\"", "\"RH113\"", "\"RH114\"", "\"RH115\"", "\"RH116\"", "\"RH117\"", "\"RH118\"", "\"RH119\"", "\"RH120\"", "\"RH121\"", "\"RH122\"", "\"PD\"", "\"PD91\"", "\"PD92\"", "\"PD93\"", "\"PD94\"", "\"PD95\"", "\"PD96\"", "\"PD97\"", "\"PD98\"", "\"PD99\"", "\"PD100\"", "\"PD101\"", "\"PD102\"", "\"PD103\"", "\"PD104\"", "\"PD105\"", "\"PD106\"", "\"PD107\"", "\"PD108\"", "\"PD109\"", "\"PD110\"", "\"PD111\"", "\"PD112\"", "\"PD113\"", "\"PD114\"", "\"PD115\"", "\"PD116\"", "\"PD117\"", "\"PD118\"", "\"PD119\"", "\"PD120\"", "\"PD121\"", "\"PD122\"", "\"PD123\"", "\"PD124\"", "\"AG\"", "\"AG93\"", "\"AG94\"", "\"AG95\"", "\"AG96\"", "\"AG97\"", "\"AG98\"", "\"AG99\"", "\"AG100\"", "\"AG101\"", "\"AG102\"", "\"AG103\"", "\"AG104\"", "\"AG105\"", "\"AG106\"", "\"AG107\"", "\"AG108\"", "\"AG109\"", "\"AG110\"", "\"AG111\"", "\"AG112\"", "\"AG113\"", "\"AG114\"", "\"AG115\"", "\"AG116\"", "\"AG117\"", "\"AG118\"", "\"AG119\"", "\"AG120\"", "\"AG121\"", "\"AG122\"", "\"AG123\"", "\"AG124\"", "\"AG125\"", "\"AG126\"", "\"AG127\"", "\"AG128\"", "\"AG129\"", "\"AG130\"", "\"CD\"", "\"CD95\"", "\"CD96\"", "\"CD97\"", "\"CD98\"", "\"CD99\"", "\"CD100\"", "\"CD101\"", "\"CD102\"", "\"CD103\"", "\"CD104\"", "\"CD105\"", "\"CD106\"", "\"CD107\"", "\"CD108\"", "\"CD109\"", "\"CD110\"", "\"CD111\"", "\"CD112\"", "\"CD113\"", "\"CD114\"", "\"CD115\"", "\"CD116\"", "\"CD117\"", "\"CD118\"", "\"CD119\"", "\"CD120\"", "\"CD121\"", "\"CD122\"", "\"CD123\"", "\"CD124\"", "\"CD125\"", "\"CD126\"", "\"CD127\"", "\"CD128\"", "\"CD129\"", "\"CD130\"", "\"CD131\"", "\"CD132\"", "\"IN\"", "\"IN97\"", "\"IN98\"", "\"IN99\"", "\"IN100\"", "\"IN101\"", "\"IN102\"", "\"IN103\"", "\"IN104\"", "\"IN105\"", "\"IN106\"", "\"IN107\"", "\"IN108\"", "\"IN109\"", "\"IN110\"", "\"IN111\"", "\"IN112\"", "\"IN113\"", "\"IN114\"", "\"IN115\"", "\"IN116\"", "\"IN117\"", "\"IN118\"", "\"IN119\"", "\"IN120\"", "\"IN121\"", "\"IN122\"", "\"IN123\"", "\"IN124\"", "\"IN125\"", "\"IN126\"", "\"IN127\"", "\"IN128\"", "\"IN129\"", "\"IN130\"", "\"IN131\"", "\"IN132\"", "\"IN133\"", "\"IN134\"", "\"IN135\"", "\"SN\"", "\"SN99\"", "\"SN100\"", "\"SN101\"", "\"SN102\"", "\"SN103\"", "\"SN104\"", "\"SN105\"", "\"SN106\"", "\"SN107\"", "\"SN108\"", "\"SN109\"", "\"SN110\"", "\"SN111\"", "\"SN112\"", "\"SN113\"", "\"SN114\"", "\"SN115\"", "\"SN116\"", "\"SN117\"", "\"SN118\"", "\"SN119\"", "\"SN120\"", "\"SN121\"", "\"SN122\"", "\"SN123\"", "\"SN124\"", "\"SN125\"", "\"SN126\"", "\"SN127\"", "\"SN128\"", "\"SN129\"", "\"SN130\"", "\"SN131\"", "\"SN132\"", "\"SN133\"", "\"SN134\"", "\"SN135\"", "\"SN136\"", "\"SN137\"", "\"SB\"", "\"SB103\"", "\"SB104\"", "\"SB105\"", "\"SB106\"", "\"SB107\"", "\"SB108\"", "\"SB109\"", "\"SB110\"", "\"SB111\"", "\"SB112\"", "\"SB113\"", "\"SB114\"", "\"SB115\"", "\"SB116\"", "\"SB117\"", "\"SB118\"", "\"SB119\"", "\"SB120\"", "\"SB121\"", "\"SB122\"", "\"SB123\"", "\"SB124\"", "\"SB125\"", "\"SB126\"", "\"SB127\"", "\"SB128\"", "\"SB129\"", "\"SB130\"", "\"SB131\"", "\"SB132\"", "\"SB133\"", "\"SB134\"", "\"SB135\"", "\"SB136\"", "\"SB137\"", "\"SB138\"", "\"SB139\"", "\"TE\"", "\"TE105\"", "\"TE106\"", "\"TE107\"", "\"TE108\"", "\"TE109\"", "\"TE110\"", "\"TE111\"", "\"TE112\"", "\"TE113\"", "\"TE114\"", "\"TE115\"", "\"TE116\"", "\"TE117\"", "\"TE118\"", "\"TE119\"", "\"TE120\"", "\"TE121\"", "\"TE122\"", "\"TE123\"", "\"TE124\"", "\"TE125\"", "\"TE126\"", "\"TE127\"", "\"TE128\"", "\"TE129\"", "\"TE130\"", "\"TE131\"", "\"TE132\"", "\"TE133\"", "\"TE134\"", "\"TE135\"", "\"TE136\"", "\"TE137\"", "\"TE138\"", "\"TE139\"", "\"TE140\"", "\"TE141\"", "\"TE142\"", "\"I\"", "\"I108\"", "\"I109\"", "\"I110\"", "\"I111\"", "\"I112\"", "\"I113\"", "\"I114\"", "\"I115\"", "\"I116\"", "\"I117\"", "\"I118\"", "\"I119\"", "\"I120\"", "\"I121\"", "\"I122\"", "\"I123\"", "\"I124\"", "\"I125\"", "\"I126\"", "\"I127\"", "\"I128\"", "\"I129\"", "\"I130\"", "\"I131\"", "\"I132\"", "\"I133\"", "\"I134\"", "\"I135\"", "\"I136\"", "\"I137\"", "\"I138\"", "\"I139\"", "\"I140\"", "\"I141\"", "\"I142\"", "\"I143\"", "\"I144\"", "\"XE\"", "\"XE110\"", "\"XE111\"", "\"XE112\"", "\"XE113\"", "\"XE114\"", "\"XE115\"", "\"XE116\"", "\"XE117\"", "\"XE118\"", "\"XE119\"", "\"XE120\"", "\"XE121\"", "\"XE122\"", "\"XE123\"", "\"XE124\"", "\"XE125\"", "\"XE126\"", "\"XE127\"", "\"XE128\"", "\"XE129\"", "\"XE130\"", "\"XE131\"", "\"XE132\"", "\"XE133\"", "\"XE134\"", "\"XE135\"", "\"XE136\"", "\"XE137\"", "\"XE138\"", "\"XE139\"", "\"XE140\"", "\"XE141\"", "\"XE142\"", "\"XE143\"", "\"XE144\"", "\"XE145\"", "\"XE146\"", "\"XE147\"", "\"CS\"", "\"CS112\"", "\"CS113\"", "\"CS114\"", "\"CS115\"", "\"CS116\"", "\"CS117\"", "\"CS118\"", "\"CS119\"", "\"CS120\"", "\"CS121\"", "\"CS122\"", "\"CS123\"", "\"CS124\"", "\"CS125\"", "\"CS126\"", "\"CS127\"", "\"CS128\"", "\"CS129\"", "\"CS130\"", "\"CS131\"", "\"CS132\"", "\"CS133\"", "\"CS134\"", "\"CS135\"", "\"CS136\"", "\"CS137\"", "\"CS138\"", "\"CS139\"", "\"CS140\"", "\"CS141\"", "\"CS142\"", "\"CS143\"", "\"CS144\"", "\"CS145\"", "\"CS146\"", "\"CS147\"", "\"CS148\"", "\"CS149\"", "\"CS150\"", "\"CS151\"", "\"BA\"", "\"BA114\"", "\"BA115\"", "\"BA116\"", "\"BA117\"", "\"BA118\"", "\"BA119\"", "\"BA120\"", "\"BA121\"", "\"BA122\"", "\"BA123\"", "\"BA124\"", "\"BA125\"", "\"BA126\"", "\"BA127\"", "\"BA128\"", "\"BA129\"", "\"BA130\"", "\"BA131\"", "\"BA132\"", "\"BA133\"", "\"BA134\"", "\"BA135\"", "\"BA136\"", "\"BA137\"", "\"BA138\"", "\"BA139\"", "\"BA140\"", "\"BA141\"", "\"BA142\"", "\"BA143\"", "\"BA144\"", "\"BA145\"", "\"BA146\"", "\"BA147\"", "\"BA148\"", "\"BA149\"", "\"BA150\"", "\"BA151\"", "\"BA152\"", "\"BA153\"", "\"LA\"", "\"LA117\"", "\"LA118\"", "\"LA119\"", "\"LA120\"", "\"LA121\"", "\"LA122\"", "\"LA123\"", "\"LA124\"", "\"LA125\"", "\"LA126\"", "\"LA127\"", "\"LA128\"", "\"LA129\"", "\"LA130\"", "\"LA131\"", "\"LA132\"", "\"LA133\"", "\"LA134\"", "\"LA135\"", "\"LA136\"", "\"LA137\"", "\"LA138\"", "\"LA139\"", "\"LA140\"", "\"LA141\"", "\"LA142\"", "\"LA143\"", "\"LA144\"", "\"LA145\"", "\"LA146\"", "\"LA147\"", "\"LA148\"", "\"LA149\"", "\"LA150\"", "\"LA151\"", "\"LA152\"", "\"LA153\"", "\"LA154\"", "\"LA155\"", "\"CE\"", "\"CE119\"", "\"CE120\"", "\"CE121\"", "\"CE122\"", "\"CE123\"", "\"CE124\"", "\"CE125\"", "\"CE126\"", "\"CE127\"", "\"CE128\"", "\"CE129\"", "\"CE130\"", "\"CE131\"", "\"CE132\"", "\"CE133\"", "\"CE134\"", "\"CE135\"", "\"CE136\"", "\"CE137\"", "\"CE138\"", "\"CE139\"", "\"CE140\"", "\"CE141\"", "\"CE142\"", "\"CE143\"", "\"CE144\"", "\"CE145\"", "\"CE146\"", "\"CE147\"", "\"CE148\"", "\"CE149\"", "\"CE150\"", "\"CE151\"", "\"CE152\"", "\"CE153\"", "\"CE154\"", "\"CE155\"", "\"CE156\"", "\"CE157\"", "\"PR\"", "\"PR121\"", "\"PR122\"", "\"PR123\"", "\"PR124\"", "\"PR125\"", "\"PR126\"", "\"PR127\"", "\"PR128\"", "\"PR129\"", "\"PR130\"", "\"PR131\"", "\"PR132\"", "\"PR133\"", "\"PR134\"", "\"PR135\"", "\"PR136\"", "\"PR137\"", "\"PR138\"", "\"PR139\"", "\"PR140\"", "\"PR141\"", "\"PR142\"", "\"PR143\"", "\"PR144\"", "\"PR145\"", "\"PR146\"", "\"PR147\"", "\"PR148\"", "\"PR149\"", "\"PR150\"", "\"PR151\"", "\"PR152\"", "\"PR153\"", "\"PR154\"", "\"PR155\"", "\"PR156\"", "\"PR157\"", "\"PR158\"", "\"PR159\"", "\"ND\"", "\"ND124\"", "\"ND125\"", "\"ND126\"", "\"ND127\"", "\"ND128\"", "\"ND129\"", "\"ND130\"", "\"ND131\"", "\"ND132\"", "\"ND133\"", "\"ND134\"", "\"ND135\"", "\"ND136\"", "\"ND137\"", "\"ND138\"", "\"ND139\"", "\"ND140\"", "\"ND141\"", "\"ND142\"", "\"ND143\"", "\"ND144\"", "\"ND145\"", "\"ND146\"", "\"ND147\"", "\"ND148\"", "\"ND149\"", "\"ND150\"", "\"ND151\"", "\"ND152\"", "\"ND153\"", "\"ND154\"", "\"ND155\"", "\"ND156\"", "\"ND157\"", "\"ND158\"", "\"ND159\"", "\"ND160\"", "\"ND161\"", "\"PM\"", "\"PM126\"", "\"PM127\"", "\"PM128\"", "\"PM129\"", "\"PM130\"", "\"PM131\"", "\"PM132\"", "\"PM133\"", "\"PM134\"", "\"PM135\"", "\"PM136\"", "\"PM137\"", "\"PM138\"", "\"PM139\"", "\"PM140\"", "\"PM141\"", "\"PM142\"", "\"PM143\"", "\"PM144\"", "\"PM145\"", "\"PM146\"", "\"PM147\"", "\"PM148\"", "\"PM149\"", "\"PM150\"", "\"PM151\"", "\"PM152\"", "\"PM153\"", "\"PM154\"", "\"PM155\"", "\"PM156\"", "\"PM157\"", "\"PM158\"", "\"PM159\"", "\"PM160\"", "\"PM161\"", "\"PM162\"", "\"PM163\"", "\"SM\"", "\"SM128\"", "\"SM129\"", "\"SM130\"", "\"SM131\"", "\"SM132\"", "\"SM133\"", "\"SM134\"", "\"SM135\"", "\"SM136\"", "\"SM137\"", "\"SM138\"", "\"SM139\"", "\"SM140\"", "\"SM141\"", "\"SM142\"", "\"SM143\"", "\"SM144\"", "\"SM145\"", "\"SM146\"", "\"SM147\"", "\"SM148\"", "\"SM149\"", "\"SM150\"", "\"SM151\"", "\"SM152\"", "\"SM153\"", "\"SM154\"", "\"SM155\"", "\"SM156\"", "\"SM157\"", "\"SM158\"", "\"SM159\"", "\"SM160\"", "\"SM161\"", "\"SM162\"", "\"SM163\"", "\"SM164\"", "\"SM165\"", "\"EU\"", "\"EU130\"", "\"EU131\"", "\"EU132\"", "\"EU133\"", "\"EU134\"", "\"EU135\"", "\"EU136\"", "\"EU137\"", "\"EU138\"", "\"EU139\"", "\"EU140\"", "\"EU141\"", "\"EU142\"", "\"EU143\"", "\"EU144\"", "\"EU145\"", "\"EU146\"", "\"EU147\"", "\"EU148\"", "\"EU149\"", "\"EU150\"", "\"EU151\"", "\"EU152\"", "\"EU153\"", "\"EU154\"", "\"EU155\"", "\"EU156\"", "\"EU157\"", "\"EU158\"", "\"EU159\"", "\"EU160\"", "\"EU161\"", "\"EU162\"", "\"EU163\"", "\"EU164\"", "\"EU165\"", "\"EU166\"", "\"EU167\"", "\"GD\"", "\"GD134\"", "\"GD135\"", "\"GD136\"", "\"GD137\"", "\"GD138\"", "\"GD139\"", "\"GD140\"", "\"GD141\"", "\"GD142\"", "\"GD143\"", "\"GD144\"", "\"GD145\"", "\"GD146\"", "\"GD147\"", "\"GD148\"", "\"GD149\"", "\"GD150\"", "\"GD151\"", "\"GD152\"", "\"GD153\"", "\"GD154\"", "\"GD155\"", "\"GD156\"", "\"GD157\"", "\"GD158\"", "\"GD159\"", "\"GD160\"", "\"GD161\"", "\"GD162\"", "\"GD163\"", "\"GD164\"", "\"GD165\"", "\"GD166\"", "\"GD167\"", "\"GD168\"", "\"GD169\"", "\"TB\"", "\"TB136\"", "\"TB137\"", "\"TB138\"", "\"TB139\"", "\"TB140\"", "\"TB141\"", "\"TB142\"", "\"TB143\"", "\"TB144\"", "\"TB145\"", "\"TB146\"", "\"TB147\"", "\"TB148\"", "\"TB149\"", "\"TB150\"", "\"TB151\"", "\"TB152\"", "\"TB153\"", "\"TB154\"", "\"TB155\"", "\"TB156\"", "\"TB157\"", "\"TB158\"", "\"TB159\"", "\"TB160\"", "\"TB161\"", "\"TB162\"", "\"TB163\"", "\"TB164\"", "\"TB165\"", "\"TB166\"", "\"TB167\"", "\"TB168\"", "\"TB169\"", "\"TB170\"", "\"TB171\"", "\"DY\"", "\"DY138\"", "\"DY139\"", "\"DY140\"", "\"DY141\"", "\"DY142\"", "\"DY143\"", "\"DY144\"", "\"DY145\"", "\"DY146\"", "\"DY147\"", "\"DY148\"", "\"DY149\"", "\"DY150\"", "\"DY151\"", "\"DY152\"", "\"DY153\"", "\"DY154\"", "\"DY155\"", "\"DY156\"", "\"DY157\"", "\"DY158\"", "\"DY159\"", "\"DY160\"", "\"DY161\"", "\"DY162\"", "\"DY163\"", "\"DY164\"", "\"DY165\"", "\"DY166\"", "\"DY167\"", "\"DY168\"", "\"DY169\"", "\"DY170\"", "\"DY171\"", "\"DY172\"", "\"DY173\"", "\"HO\"", "\"HO140\"", "\"HO141\"", "\"HO142\"", "\"HO143\"", "\"HO144\"", "\"HO145\"", "\"HO146\"", "\"HO147\"", "\"HO148\"", "\"HO149\"", "\"HO150\"", "\"HO151\"", "\"HO152\"", "\"HO153\"", "\"HO154\"", "\"HO155\"", "\"HO156\"", "\"HO157\"", "\"HO158\"", "\"HO159\"", "\"HO160\"", "\"HO161\"", "\"HO162\"", "\"HO163\"", "\"HO164\"", "\"HO165\"", "\"HO166\"", "\"HO167\"", "\"HO168\"", "\"HO169\"", "\"HO170\"", "\"HO171\"", "\"HO172\"", "\"HO173\"", "\"HO174\"", "\"HO175\"", "\"ER\"", "\"ER143\"", "\"ER144\"", "\"ER145\"", "\"ER146\"", "\"ER147\"", "\"ER148\"", "\"ER149\"", "\"ER150\"", "\"ER151\"", "\"ER152\"", "\"ER153\"", "\"ER154\"", "\"ER155\"", "\"ER156\"", "\"ER157\"", "\"ER158\"", "\"ER159\"", "\"ER160\"", "\"ER161\"", "\"ER162\"", "\"ER163\"", "\"ER164\"", "\"ER165\"", "\"ER166\"", "\"ER167\"", "\"ER168\"", "\"ER169\"", "\"ER170\"", "\"ER171\"", "\"ER172\"", "\"ER173\"", "\"ER174\"", "\"ER175\"", "\"ER176\"", "\"ER177\"", "\"TM\"", "\"TM145\"", "\"TM146\"", "\"TM147\"", "\"TM148\"", "\"TM149\"", "\"TM150\"", "\"TM151\"", "\"TM152\"", "\"TM153\"", "\"TM154\"", "\"TM155\"", "\"TM156\"", "\"TM157\"", "\"TM158\"", "\"TM159\"", "\"TM160\"", "\"TM161\"", "\"TM162\"", "\"TM163\"", "\"TM164\"", "\"TM165\"", "\"TM166\"", "\"TM167\"", "\"TM168\"", "\"TM169\"", "\"TM170\"", "\"TM171\"", "\"TM172\"", "\"TM173\"", "\"TM174\"", "\"TM175\"", "\"TM176\"", "\"TM177\"", "\"TM178\"", "\"TM179\"", "\"YB\"", "\"YB148\"", "\"YB149\"", "\"YB150\"", "\"YB151\"", "\"YB152\"", "\"YB153\"", "\"YB154\"", "\"YB155\"", "\"YB156\"", "\"YB157\"", "\"YB158\"", "\"YB159\"", "\"YB160\"", "\"YB161\"", "\"YB162\"", "\"YB163\"", "\"YB164\"", "\"YB165\"", "\"YB166\"", "\"YB167\"", "\"YB168\"", "\"YB169\"", "\"YB170\"", "\"YB171\"", "\"YB172\"", "\"YB173\"", "\"YB174\"", "\"YB175\"", "\"YB176\"", "\"YB177\"", "\"YB178\"", "\"YB179\"", "\"YB180\"", "\"YB181\"", "\"LU\"", "\"LU150\"", "\"LU151\"", "\"LU152\"", "\"LU153\"", "\"LU154\"", "\"LU155\"", "\"LU156\"", "\"LU157\"", "\"LU158\"", "\"LU159\"", "\"LU160\"", "\"LU161\"", "\"LU162\"", "\"LU163\"", "\"LU164\"", "\"LU165\"", "\"LU166\"", "\"LU167\"", "\"LU168\"", "\"LU169\"", "\"LU170\"", "\"LU171\"", "\"LU172\"", "\"LU173\"", "\"LU174\"", "\"LU175\"", "\"LU176\"", "\"LU177\"", "\"LU178\"", "\"LU179\"", "\"LU180\"", "\"LU181\"", "\"LU182\"", "\"LU183\"", "\"LU184\"", "\"HF\"", "\"HF153\"", "\"HF154\"", "\"HF155\"", "\"HF156\"", "\"HF157\"", "\"HF158\"", "\"HF159\"", "\"HF160\"", "\"HF161\"", "\"HF162\"", "\"HF163\"", "\"HF164\"", "\"HF165\"", "\"HF166\"", "\"HF167\"", "\"HF168\"", "\"HF169\"", "\"HF170\"", "\"HF171\"", "\"HF172\"", "\"HF173\"", "\"HF174\"", "\"HF175\"", "\"HF176\"", "\"HF177\"", "\"HF178\"", "\"HF179\"", "\"HF180\"", "\"HF181\"", "\"HF182\"", "\"HF183\"", "\"HF184\"", "\"HF185\"", "\"HF186\"", "\"HF187\"", "\"HF188\"", "\"TA\"", "\"TA155\"", "\"TA156\"", "\"TA157\"", "\"TA158\"", "\"TA159\"", "\"TA160\"", "\"TA161\"", "\"TA162\"", "\"TA163\"", "\"TA164\"", "\"TA165\"", "\"TA166\"", "\"TA167\"", "\"TA168\"", "\"TA169\"", "\"TA170\"", "\"TA171\"", "\"TA172\"", "\"TA173\"", "\"TA174\"", "\"TA175\"", "\"TA176\"", "\"TA177\"", "\"TA178\"", "\"TA179\"", "\"TA180\"", "\"TA181\"", "\"TA182\"", "\"TA183\"", "\"TA184\"", "\"TA185\"", "\"TA186\"", "\"TA187\"", "\"TA188\"", "\"TA189\"", "\"TA190\"", "\"W\"", "\"W158\"", "\"W159\"", "\"W160\"", "\"W161\"", "\"W162\"", "\"W163\"", "\"W164\"", "\"W165\"", "\"W166\"", "\"W167\"", "\"W168\"", "\"W169\"", "\"W170\"", "\"W171\"", "\"W172\"", "\"W173\"", "\"W174\"", "\"W175\"", "\"W176\"", "\"W177\"", "\"W178\"", "\"W179\"", "\"W180\"", "\"W181\"", "\"W182\"", "\"W183\"", "\"W184\"", "\"W185\"", "\"W186\"", "\"W187\"", "\"W188\"", "\"W189\"", "\"W190\"", "\"W191\"", "\"W192\"", "\"RE\"", "\"RE160\"", "\"RE161\"", "\"RE162\"", "\"RE163\"", "\"RE164\"", "\"RE165\"", "\"RE166\"", "\"RE167\"", "\"RE168\"", "\"RE169\"", "\"RE170\"", "\"RE171\"", "\"RE172\"", "\"RE173\"", "\"RE174\"", "\"RE175\"", "\"RE176\"", "\"RE177\"", "\"RE178\"", "\"RE179\"", "\"RE180\"", "\"RE181\"", "\"RE182\"", "\"RE183\"", "\"RE184\"", "\"RE185\"", "\"RE186\"", "\"RE187\"", "\"RE188\"", "\"RE189\"", "\"RE190\"", "\"RE191\"", "\"RE192\"", "\"RE193\"", "\"RE194\"", "\"OS\"", "\"OS162\"", "\"OS163\"", "\"OS164\"", "\"OS165\"", "\"OS166\"", "\"OS167\"", "\"OS168\"", "\"OS169\"", "\"OS170\"", "\"OS171\"", "\"OS172\"", "\"OS173\"", "\"OS174\"", "\"OS175\"", "\"OS176\"", "\"OS177\"", "\"OS178\"", "\"OS179\"", "\"OS180\"", "\"OS181\"", "\"OS182\"", "\"OS183\"", "\"OS184\"", "\"OS185\"", "\"OS186\"", "\"OS187\"", "\"OS188\"", "\"OS189\"", "\"OS190\"", "\"OS191\"", "\"OS192\"", "\"OS193\"", "\"OS194\"", "\"OS195\"", "\"OS196\"", "\"IR\"", "\"IR164\"", "\"IR165\"", "\"IR166\"", "\"IR167\"", "\"IR168\"", "\"IR169\"", "\"IR170\"", "\"IR171\"", "\"IR172\"", "\"IR173\"", "\"IR174\"", "\"IR175\"", "\"IR176\"", "\"IR177\"", "\"IR178\"", "\"IR179\"", "\"IR180\"", "\"IR181\"", "\"IR182\"", "\"IR183\"", "\"IR184\"", "\"IR185\"", "\"IR186\"", "\"IR187\"", "\"IR188\"", "\"IR189\"", "\"IR190\"", "\"IR191\"", "\"IR192\"", "\"IR193\"", "\"IR194\"", "\"IR195\"", "\"IR196\"", "\"IR197\"", "\"IR198\"", "\"IR199\"", "\"PT\"", "\"PT166\"", "\"PT167\"", "\"PT168\"", "\"PT169\"", "\"PT170\"", "\"PT171\"", "\"PT172\"", "\"PT173\"", "\"PT174\"", "\"PT175\"", "\"PT176\"", "\"PT177\"", "\"PT178\"", "\"PT179\"", "\"PT180\"", "\"PT181\"", "\"PT182\"", "\"PT183\"", "\"PT184\"", "\"PT185\"", "\"PT186\"", "\"PT187\"", "\"PT188\"", "\"PT189\"", "\"PT190\"", "\"PT191\"", "\"PT192\"", "\"PT193\"", "\"PT194\"", "\"PT195\"", "\"PT196\"", "\"PT197\"", "\"PT198\"", "\"PT199\"", "\"PT200\"", "\"PT201\"", "\"PT202\"", "\"AU\"", "\"AU169\"", "\"AU170\"", "\"AU171\"", "\"AU172\"", "\"AU173\"", "\"AU174\"", "\"AU175\"", "\"AU176\"", "\"AU177\"", "\"AU178\"", "\"AU179\"", "\"AU180\"", "\"AU181\"", "\"AU182\"", "\"AU183\"", "\"AU184\"", "\"AU185\"", "\"AU186\"", "\"AU187\"", "\"AU188\"", "\"AU189\"", "\"AU190\"", "\"AU191\"", "\"AU192\"", "\"AU193\"", "\"AU194\"", "\"AU195\"", "\"AU196\"", "\"AU197\"", "\"AU198\"", "\"AU199\"", "\"AU200\"", "\"AU201\"", "\"AU202\"", "\"AU203\"", "\"AU204\"", "\"AU205\"", "\"HG\"", "\"HG171\"", "\"HG172\"", "\"HG173\"", "\"HG174\"", "\"HG175\"", "\"HG176\"", "\"HG177\"", "\"HG178\"", "\"HG179\"", "\"HG180\"", "\"HG181\"", "\"HG182\"", "\"HG183\"", "\"HG184\"", "\"HG185\"", "\"HG186\"", "\"HG187\"", "\"HG188\"", "\"HG189\"", "\"HG190\"", "\"HG191\"", "\"HG192\"", "\"HG193\"", "\"HG194\"", "\"HG195\"", "\"HG196\"", "\"HG197\"", "\"HG198\"", "\"HG199\"", "\"HG200\"", "\"HG201\"", "\"HG202\"", "\"HG203\"", "\"HG204\"", "\"HG205\"", "\"HG206\"", "\"HG207\"", "\"HG208\"", "\"HG209\"", "\"HG210\"", "\"TL\"", "\"TL176\"", "\"TL177\"", "\"TL178\"", "\"TL179\"", "\"TL180\"", "\"TL181\"", "\"TL182\"", "\"TL183\"", "\"TL184\"", "\"TL185\"", "\"TL186\"", "\"TL187\"", "\"TL188\"", "\"TL189\"", "\"TL190\"", "\"TL191\"", "\"TL192\"", "\"TL193\"", "\"TL194\"", "\"TL195\"", "\"TL196\"", "\"TL197\"", "\"TL198\"", "\"TL199\"", "\"TL200\"", "\"TL201\"", "\"TL202\"", "\"TL203\"", "\"TL204\"", "\"TL205\"", "\"TL206\"", "\"TL207\"", "\"TL208\"", "\"TL209\"", "\"TL210\"", "\"TL211\"", "\"TL212\"", "\"PB\"", "\"PB178\"", "\"PB179\"", "\"PB180\"", "\"PB181\"", "\"PB182\"", "\"PB183\"", "\"PB184\"", "\"PB185\"", "\"PB186\"", "\"PB187\"", "\"PB188\"", "\"PB189\"", "\"PB190\"", "\"PB191\"", "\"PB192\"", "\"PB193\"", "\"PB194\"", "\"PB195\"", "\"PB196\"", "\"PB197\"", "\"PB198\"", "\"PB199\"", "\"PB200\"", "\"PB201\"", "\"PB202\"", "\"PB203\"", "\"PB204\"", "\"PB205\"", "\"PB206\"", "\"PB207\"", "\"PB208\"", "\"PB209\"", "\"PB210\"", "\"PB211\"", "\"PB212\"", "\"PB213\"", "\"PB214\"", "\"PB215\"", "\"BI\"", "\"BI184\"", "\"BI185\"", "\"BI186\"", "\"BI187\"", "\"BI188\"", "\"BI189\"", "\"BI190\"", "\"BI191\"", "\"BI192\"", "\"BI193\"", "\"BI194\"", "\"BI195\"", "\"BI196\"", "\"BI197\"", "\"BI198\"", "\"BI199\"", "\"BI200\"", "\"BI201\"", "\"BI202\"", "\"BI203\"", "\"BI204\"", "\"BI205\"", "\"BI206\"", "\"BI207\"", "\"BI208\"", "\"BI209\"", "\"BI210\"", "\"BI211\"", "\"BI212\"", "\"BI213\"", "\"BI214\"", "\"BI215\"", "\"BI216\"", "\"BI217\"", "\"BI218\"", "\"PO\"", "\"PO188\"", "\"PO189\"", "\"PO190\"", "\"PO191\"", "\"PO192\"", "\"PO193\"", "\"PO194\"", "\"PO195\"", "\"PO196\"", "\"PO197\"", "\"PO198\"", "\"PO199\"", "\"PO200\"", "\"PO201\"", "\"PO202\"", "\"PO203\"", "\"PO204\"", "\"PO205\"", "\"PO206\"", "\"PO207\"", "\"PO208\"", "\"PO209\"", "\"PO210\"", "\"PO211\"", "\"PO212\"", "\"PO213\"", "\"PO214\"", "\"PO215\"", "\"PO216\"", "\"PO217\"", "\"PO218\"", "\"PO219\"", "\"PO220\"", "\"AT\"", "\"AT193\"", "\"AT194\"", "\"AT195\"", "\"AT196\"", "\"AT197\"", "\"AT198\"", "\"AT199\"", "\"AT200\"", "\"AT201\"", "\"AT202\"", "\"AT203\"", "\"AT204\"", "\"AT205\"", "\"AT206\"", "\"AT207\"", "\"AT208\"", "\"AT209\"", "\"AT210\"", "\"AT211\"", "\"AT212\"", "\"AT213\"", "\"AT214\"", "\"AT215\"", "\"AT216\"", "\"AT217\"", "\"AT218\"", "\"AT219\"", "\"AT220\"", "\"AT221\"", "\"AT222\"", "\"AT223\"", "\"RN\"", "\"RN195\"", "\"RN196\"", "\"RN197\"", "\"RN198\"", "\"RN199\"", "\"RN200\"", "\"RN201\"", "\"RN202\"", "\"RN203\"", "\"RN204\"", "\"RN205\"", "\"RN206\"", "\"RN207\"", "\"RN208\"", "\"RN209\"", "\"RN210\"", "\"RN211\"", "\"RN212\"", "\"RN213\"", "\"RN214\"", "\"RN215\"", "\"RN216\"", "\"RN217\"", "\"RN218\"", "\"RN219\"", "\"RN220\"", "\"RN221\"", "\"RN222\"", "\"RN223\"", "\"RN224\"", "\"RN225\"", "\"RN226\"", "\"RN227\"", "\"RN228\"", "\"FR\"", "\"FR199\"", "\"FR200\"", "\"FR201\"", "\"FR202\"", "\"FR203\"", "\"FR204\"", "\"FR205\"", "\"FR206\"", "\"FR207\"", "\"FR208\"", "\"FR209\"", "\"FR210\"", "\"FR211\"", "\"FR212\"", "\"FR213\"", "\"FR214\"", "\"FR215\"", "\"FR216\"", "\"FR217\"", "\"FR218\"", "\"FR219\"", "\"FR220\"", "\"FR221\"", "\"FR222\"", "\"FR223\"", "\"FR224\"", "\"FR225\"", "\"FR226\"", "\"FR227\"", "\"FR228\"", "\"FR229\"", "\"FR230\"", "\"FR231\"", "\"FR232\"", "\"RA\"", "\"RA202\"", "\"RA203\"", "\"RA204\"", "\"RA205\"", "\"RA206\"", "\"RA207\"", "\"RA208\"", "\"RA209\"", "\"RA210\"", "\"RA211\"", "\"RA212\"", "\"RA213\"", "\"RA214\"", "\"RA215\"", "\"RA216\"", "\"RA217\"", "\"RA218\"", "\"RA219\"", "\"RA220\"", "\"RA221\"", "\"RA222\"", "\"RA223\"", "\"RA224\"", "\"RA225\"", "\"RA226\"", "\"RA227\"", "\"RA228\"", "\"RA229\"", "\"RA230\"", "\"RA231\"", "\"RA232\"", "\"RA233\"", "\"RA234\"", "\"AC\"", "\"AC206\"", "\"AC207\"", "\"AC208\"", "\"AC209\"", "\"AC210\"", "\"AC211\"", "\"AC212\"", "\"AC213\"", "\"AC214\"", "\"AC215\"", "\"AC216\"", "\"AC217\"", "\"AC218\"", "\"AC219\"", "\"AC220\"", "\"AC221\"", "\"AC222\"", "\"AC223\"", "\"AC224\"", "\"AC225\"", "\"AC226\"", "\"AC227\"", "\"AC228\"", "\"AC229\"", "\"AC230\"", "\"AC231\"", "\"AC232\"", "\"AC233\"", "\"AC234\"", "\"AC235\"", "\"AC236\"", "\"TH\"", "\"TH209\"", "\"TH210\"", "\"TH211\"", "\"TH212\"", "\"TH213\"", "\"TH214\"", "\"TH215\"", "\"TH216\"", "\"TH217\"", "\"TH218\"", "\"TH219\"", "\"TH220\"", "\"TH221\"", "\"TH222\"", "\"TH223\"", "\"TH224\"", "\"TH225\"", "\"TH226\"", "\"TH227\"", "\"TH228\"", "\"TH229\"", "\"TH230\"", "\"TH231\"", "\"TH232\"", "\"TH233\"", "\"TH234\"", "\"TH235\"", "\"TH236\"", "\"TH237\"", "\"TH238\"", "\"PA\"", "\"PA212\"", "\"PA213\"", "\"PA214\"", "\"PA215\"", "\"PA216\"", "\"PA217\"", "\"PA218\"", "\"PA219\"", "\"PA220\"", "\"PA221\"", "\"PA222\"", "\"PA223\"", "\"PA224\"", "\"PA225\"", "\"PA226\"", "\"PA227\"", "\"PA228\"", "\"PA229\"", "\"PA230\"", "\"PA231\"", "\"PA232\"", "\"PA233\"", "\"PA234\"", "\"PA235\"", "\"PA236\"", "\"PA237\"", "\"PA238\"", "\"PA239\"", "\"PA240\"", "\"U\"", "\"U217\"", "\"U218\"", "\"U219\"", "\"U220\"", "\"U221\"", "\"U222\"", "\"U223\"", "\"U224\"", "\"U225\"", "\"U226\"", "\"U227\"", "\"U228\"", "\"U229\"", "\"U230\"", "\"U231\"", "\"U232\"", "\"U233\"", "\"U234\"", "\"U235\"", "\"U236\"", "\"U237\"", "\"U238\"", "\"U239\"", "\"U240\"", "\"U241\"", "\"U242\"", "\"NP\"", "\"NP225\"", "\"NP226\"", "\"NP227\"", "\"NP228\"", "\"NP229\"", "\"NP230\"", "\"NP231\"", "\"NP232\"", "\"NP233\"", "\"NP234\"", "\"NP235\"", "\"NP236\"", "\"NP237\"", "\"NP238\"", "\"NP239\"", "\"NP240\"", "\"NP241\"", "\"NP242\"", "\"NP243\"", "\"NP244\"", "\"PU\"", "\"PU228\"", "\"PU229\"", "\"PU230\"", "\"PU231\"", "\"PU232\"", "\"PU233\"", "\"PU234\"", "\"PU235\"", "\"PU236\"", "\"PU237\"", "\"PU238\"", "\"PU239\"", "\"PU240\"", "\"PU241\"", "\"PU242\"", "\"PU243\"", "\"PU244\"", "\"PU245\"", "\"PU246\"", "\"PU247\"", "\"AM\"", "\"AM231\"", "\"AM232\"", "\"AM233\"", "\"AM234\"", "\"AM235\"", "\"AM236\"", "\"AM237\"", "\"AM238\"", "\"AM239\"", "\"AM240\"", "\"AM241\"", "\"AM242\"", "\"AM243\"", "\"AM244\"", "\"AM245\"", "\"AM246\"", "\"AM247\"", "\"AM248\"", "\"AM249\"", "\"CM\"", "\"CM233\"", "\"CM234\"", "\"CM235\"", "\"CM236\"", "\"CM237\"", "\"CM238\"", "\"CM239\"", "\"CM240\"", "\"CM241\"", "\"CM242\"", "\"CM243\"", "\"CM244\"", "\"CM245\"", "\"CM246\"", "\"CM247\"", "\"CM248\"", "\"CM249\"", "\"CM250\"", "\"CM251\"", "\"CM252\"", "\"BK\"", "\"BK235\"", "\"BK236\"", "\"BK237\"", "\"BK238\"", "\"BK239\"", "\"BK240\"", "\"BK241\"", "\"BK242\"", "\"BK243\"", "\"BK244\"", "\"BK245\"", "\"BK246\"", "\"BK247\"", "\"BK248\"", "\"BK249\"", "\"BK250\"", "\"BK251\"", "\"BK252\"", "\"BK253\"", "\"BK254\"", "\"CF\"", "\"CF237\"", "\"CF238\"", "\"CF239\"", "\"CF240\"", "\"CF241\"", "\"CF242\"", "\"CF243\"", "\"CF244\"", "\"CF245\"", "\"CF246\"", "\"CF247\"", "\"CF248\"", "\"CF249\"", "\"CF250\"", "\"CF251\"", "\"CF252\"", "\"CF253\"", "\"CF254\"", "\"CF255\"", "\"CF256\"", "\"ES\"", "\"ES240\"", "\"ES241\"", "\"ES242\"", "\"ES243\"", "\"ES244\"", "\"ES245\"", "\"ES246\"", "\"ES247\"", "\"ES248\"", "\"ES249\"", "\"ES250\"", "\"ES251\"", "\"ES252\"", "\"ES253\"", "\"ES254\"", "\"ES255\"", "\"ES256\"", "\"ES257\"", "\"ES258\"", "\"FM\"", "\"FM242\"", "\"FM243\"", "\"FM244\"", "\"FM245\"", "\"FM246\"", "\"FM247\"", "\"FM248\"", "\"FM249\"", "\"FM250\"", "\"FM251\"", "\"FM252\"", "\"FM253\"", "\"FM254\"", "\"FM255\"", "\"FM256\"", "\"FM257\"", "\"FM258\"", "\"FM259\"", "\"FM260\"", "\"MD\"", "\"MD245\"", "\"MD246\"", "\"MD247\"", "\"MD248\"", "\"MD249\"", "\"MD250\"", "\"MD251\"", "\"MD252\"", "\"MD253\"", "\"MD254\"", "\"MD255\"", "\"MD256\"", "\"MD257\"", "\"MD258\"", "\"MD259\"", "\"MD260\"", "\"MD261\"", "\"MD262\"", "\"NO\"", "\"NO248\"", "\"NO249\"", "\"NO250\"", "\"NO251\"", "\"NO252\"", "\"NO253\"", "\"NO254\"", "\"NO255\"", "\"NO256\"", "\"NO257\"", "\"NO258\"", "\"NO259\"", "\"NO260\"", "\"NO261\"", "\"NO262\"", "\"NO263\"", "\"NO264\"", "\"LR\"", "\"LR251\"", "\"LR252\"", "\"LR253\"", "\"LR254\"", "\"LR255\"", "\"LR256\"", "\"LR257\"", "\"LR258\"", "\"LR259\"", "\"LR260\"", "\"LR261\"", "\"LR262\"", "\"LR263\"", "\"LR264\"", "\"LR265\"", "\"LR266\"", "\"RF\"", "\"RF253\"", "\"RF254\"", "\"RF255\"", "\"RF256\"", "\"RF257\"", "\"RF258\"", "\"RF259\"", "\"RF260\"", "\"RF261\"", "\"RF262\"", "\"RF263\"", "\"RF264\"", "\"RF265\"", "\"RF266\"", "\"RF267\"", "\"RF268\"", "\"DB\"", "\"DB255\"", "\"DB256\"", "\"DB257\"", "\"DB258\"", "\"DB259\"", "\"DB260\"", "\"DB261\"", "\"DB262\"", "\"DB263\"", "\"DB264\"", "\"DB265\"", "\"DB266\"", "\"DB267\"", "\"DB268\"", "\"DB269\"", "\"DB270\"", "\"SG\"", "\"SG258\"", "\"SG259\"", "\"SG260\"", "\"SG261\"", "\"SG262\"", "\"SG263\"", "\"SG264\"", "\"SG265\"", "\"SG266\"", "\"SG267\"", "\"SG268\"", "\"SG269\"", "\"SG270\"", "\"SG271\"", "\"SG272\"", "\"SG273\"", "\"BH\"", "\"BH260\"", "\"BH261\"", "\"BH262\"", "\"BH263\"", "\"BH264\"", "\"BH265\"", "\"BH266\"", "\"BH267\"", "\"BH268\"", "\"BH269\"", "\"BH270\"", "\"BH271\"", "\"BH272\"", "\"BH273\"", "\"BH274\"", "\"BH275\"", "\"HS\"", "\"HS263\"", "\"HS264\"", "\"HS265\"", "\"HS266\"", "\"HS267\"", "\"HS268\"", "\"HS269\"", "\"HS270\"", "\"HS271\"", "\"HS272\"", "\"HS273\"", "\"HS274\"", "\"HS275\"", "\"HS276\"", "\"HS277\"", "\"MT\"", "\"MT265\"", "\"MT266\"", "\"MT267\"", "\"MT268\"", "\"MT269\"", "\"MT270\"", "\"MT271\"", "\"MT272\"", "\"MT273\"", "\"MT274\"", "\"MT275\"", "\"MT276\"", "\"MT277\"", "\"MT278\"", "\"MT279\"", "\"DS\"", "\"DS267\"", "\"DS268\"", "\"DS269\"", "\"DS270\"", "\"DS271\"", "\"DS272\"", "\"DS273\"", "\"DS274\"", "\"DS275\"", "\"DS276\"", "\"DS277\"", "\"DS278\"", "\"DS279\"", "\"DS280\"", "\"DS281\"", "\"RG\"", "\"RG272\"", "\"RG273\"", "\"RG274\"", "\"RG275\"", "\"RG276\"", "\"RG277\"", "\"RG278\"", "\"RG279\"", "\"RG280\"", "\"RG281\"", "\"RG282\"", "\"RG283\"", "\"UUB\"", "\"UUB277\"", "\"UUB278\"", "\"UUB279\"", "\"UUB280\"", "\"UUB281\"", "\"UUB282\"", "\"UUB283\"", "\"UUB284\"", "\"UUB285\"", "\"UUT\"", "\"UUT283\"", "\"UUT284\"", "\"UUT285\"", "\"UUT286\"", "\"UUT287\"", "\"UUQ\"", "\"UUQ285\"", "\"UUQ286\"", "\"UUQ287\"", "\"UUQ288\"", "\"UUQ289\"", "\"UUP\"", "\"UUP287\"", "\"UUP288\"", "\"UUP289\"", "\"UUP290\"", "\"UUP291\"", "\"UUH\"", "\"UUH289\"", "\"UUH290\"", "\"UUH291\"", "\"UUH292\"", "\"UUS\"", "\"UUS291\"", "\"UUS292\"", "\"UUO\"", "\"UUO293\""}], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581235839237*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"static double atomic_masses[] =\"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{ "1.00782503207`12.000000000000004", ",", "1.00782503207`12.000000000000004", ",", "2.01410177785`11.999999999999998", ",", "2.01410177785`11.999999999999998", ",", "3.01604927767`11.999999999999998", ",", "3.01604927767`11.999999999999998", ",", "4.027806424`10.", ",", "5.035311488`10.000000000000004", ",", "6.044942594`10.000000000000004", ",", "7.052749`7.000000000000001", ",", "4.00260325415`12.000000000000004", ",", "3.01602931914000000000000000001`11.999999999999998", ",", "4.00260325415`12.000000000000004", ",", "5.012223624`9.999999999999998", ",", "6.018889124`10.000000000000004", ",", "7.028020618`10.000000000000004", ",", "8.033921897`9.999999999999998", ",", "9.043950286`10.000000000000004", ",", "10.052398837`10.999999999999996", ",", "7.016004548`10.000000000000004", ",", "3.030775`7.000000000000001", ",", "4.027185558`10.", ",", "5.0125378`7.999999999999999", ",", "6.015122794`10.000000000000004", ",", "7.016004548`10.000000000000004", ",", "8.022487362`10.000000000000004", ",", "9.026789505`9.999999999999998", ",", "10.035481259`11.000000000000005", ",", "11.043797715`11.", ",", "12.05378`7.999999999999999", ",", "9.012182201`9.999999999999998", ",", "5.04079`7.000000000000001", ",", "6.019726317`9.999999999999998", ",", "7.016929828`10.000000000000004", ",", "8.005305103`9.999999999999998", ",", "9.012182201`9.999999999999998", ",", "10.013533818`11.000000000000005", ",", "11.021657749`11.", ",", "12.026920737`11.", ",", "13.035693007`11.", ",", "14.04289292`10.000000000000004", ",", "15.05346`7.999999999999999", ",", "16.06192`7.999999999999999", ",", "11.009305406`11.", ",", "6.04681`7.000000000000001", ",", "7.029917901`9.999999999999998", ",", "8.024607233`10.000000000000004", ",", "9.013328782`10.", ",", "10.012936992`11.000000000000005", ",", "11.009305406`11.", ",", "12.014352104`11.", ",", "13.017780217`11.", ",", "14.025404009`11.", ",", "15.031103021`11.", ",", "16.039808829`11.", ",", "17.046989906`11.", ",", "18.05617`7.999999999999999", ",", "19.06373`7.999999999999999", ",", "12", ",", "8.037675025`10.000000000000004", ",", "9.031036689`9.999999999999998", ",", "10.016853228`11.000000000000005", ",", "11.011433613`11.", ",", "12", ",", "13.00335483778`13.", ",", "14.0032419887`12.000000000000004", ",", "15.010599256`11.000000000000005", ",", "16.014701252`11.", ",", "17.022586116`10.999999999999998", ",", "18.026759354`11.000000000000005", ",", "19.034805018`11.000000000000004", ",", "20.040319754`10.999999999999998", ",", "21.04934`7.999999999999999", ",", "22.0572`7.999999999999999", ",", "14.00307400477999999999999999999`13.", ",", "10.041653674`10.999999999999996", ",", "11.026090956`11.", ",", "12.018613197`11.000000000000005", ",", "13.005738609`10.999999999999996", ",", "14.00307400477999999999999999999`13.", ",", "15.00010889823`13.", ",", "16.006101658`11.000000000000004", ",", "17.008450261`11.", ",", "18.014078959`10.999999999999998", ",", "19.017028697`11.000000000000005", ",", "20.023365807`11.", ",", "21.02710824`10.", ",", "22.034394934`10.999999999999998", ",", "23.04122`7.999999999999999", ",", "24.05104`7.999999999999999", ",", "25.06066`7.999999999999999", ",", "15.99491461956`13.", ",", "12.034404895`11.", ",", "13.02481221300000000000900726784`11.", ",", "14.00859625`10.000000000000004", ",", "15.00306561699999999998321229824`11.", ",", "15.99491461956`13.", ",", "16.999131703`10.999999999999996", ",", "17.999161001`10.999999999999998", ",", "19.00358013`10.", ",", "20.004076742`11.", ",", "21.008655886`11.", ",", "22.009966947`11.", ",", "23.015687659`11.", ",", "24.020472917`11.", ",", "25.02946`7.999999999999999", ",", "26.03834`7.999999999999999", ",", "27.04826`7.999999999999999", ",", "28.05781`7.999999999999999", ",", "18.998403224`10.999999999999998", ",", "14.03506`7.999999999999999", ",", "15.018009103`11.", ",", "16.011465724`11.", ",", "17.002095237`11.", ",", "18.000937956`10.999999999999996", ",", "18.998403224`10.999999999999998", ",", "19.999981315`11.", ",", "20.999948951`11.", ",", "22.002998815`11.", ",", "23.003574631`11.000000000000004", ",", "24.008115485`11.", ",", "25.012101747`11.", ",", "26.019615555`11.", ",", "27.026760086`11.", ",", "28.03567`7.999999999999999", ",", "29.04326`7.999999999999999", ",", "30.0525`7.999999999999999", ",", "31.060429`7.999999999999999", ",", "19.99244017542`13.", ",", "16.025761262`10.999999999999998", ",", "17.017671504`11.", ",", "18.005708213`11.000000000000005", ",", "19.001880248`11.", ",", "19.99244017542`13.", ",", "20.993846684`11.000000000000004", ",", "21.991385113`11.000000000000004", ",", "22.994466904`11.", ",", "23.993610779`11.", ",", "24.997736888`11.000000000000005", ",", "26.000461206`11.", ",", "27.007589903`11.", ",", "28.012071575`11.", ",", "29.019385933`11.000000000000005", ",", "30.024801045`11.", ",", "31.03311`7.999999999999999", ",", "32.04002`7.999999999999999", ",", "33.04938`7.999999999999999", ",", "34.057028`7.999999999999999", ",", "22.98976928087`13.", ",", "18.025969`7.999999999999999", ",", "19.013877499`11.", ",", "20.007351328`11.", ",", "20.997655206`11.", ",", "21.994436425`11.000000000000004", ",", "22.98976928087`13.", ",", "23.990962782`11.", ",", "24.989953968`11.", ",", "25.992633`7.999999999999999", ",", "26.994076788`11.000000000000005", ",", "27.998938`7.999999999999999", ",", "29.002861`7.999999999999999", ",", "30.008976`7.999999999999999", ",", "31.013585452`11.", ",", "32.02046656`10.", ",", "33.026719756`11.", ",", "34.03517`7.999999999999999", ",", "35.042493`7.999999999999999", ",", "36.05148`7.999999999999999", ",", "37.05934`7.999999999999999", ",", "23.985041699`11.000000000000005", ",", "19.03547`7.000000000000001", ",", "20.018862545`11.", ",", "21.01171291`9.999999999999998", ",", "21.999573843`11.", ",", "22.994123669`11.", ",", "23.985041699`11.000000000000005", ",", "24.985836917`11.000000000000005", ",", "25.982592929`11.", ",", "26.984340585`11.", ",", "27.983876825`11.", ",", "28.9886`6.0000000000000036", ",", "29.990434`7.999999999999999", ",", "30.996546`7.999999999999999", ",", "31.998975`7.999999999999999", ",", "33.005254`7.999999999999999", ",", "34.009456424`11.000000000000005", ",", "35.01734`7.999999999999999", ",", "36.023`7.999999999999999", ",", "37.0314`7.999999999999999", ",", "38.03757`7.999999999999999", ",", "39.046772`7.999999999999999", ",", "40.05393`7.999999999999999", ",", "26.981538627`11.", ",", "21.02804`7.999999999999999", ",", "22.01952`7.999999999999999", ",", "23.007267432`11.", ",", "23.999938865`11.", ",", "24.990428095`11.000000000000005", ",", "25.986891692`11.000000000000005", ",", "26.981538627`11.", ",", "27.981910306`10.999999999999996", ",", "28.980445046`11.", ",", "29.982960256`11.", ",", "30.983946619`11.", ",", "31.988124489`11.", ",", "32.990843336`11.", ",", "33.996851837`11.000000000000005", ",", "34.999860235`11.", ",", "36.006207204`11.", ",", "37.01067782`10.", ",", "38.017231021`10.999999999999996", ",", "39.02297`7.000000000000001", ",", "40.03145`7.999999999999999", ",", "41.03833`7.999999999999999", ",", "42.04689`7.999999999999999", ",", "27.97692653246`13.", ",", "22.03453`7.999999999999999", ",", "23.02552`7.999999999999999", ",", "24.011545616`11.", ",", "25.004105574`10.999999999999996", ",", "25.992329921`11.", ",", "26.986704905`11.", ",", "27.97692653246`13.", ",", "28.9764947`9.000000000000002", ",", "29.973770171`11.", ",", "30.975363226999998`17.", ",", "31.974148082`11.", ",", "32.97800022`10.", ",", "33.978575524`11.", ",", "34.984583575`11.000000000000005", ",", "35.986599477`11.", ",", "36.99293608`10.", ",", "37.995633601`11.", ",", "39.002070013`11.", ",", "40.005869121`11.", ",", "41.01456`7.000000000000001", ",", "42.01979`7.999999999999999", ",", "43.02866`7.999999999999999", ",", "44.03526`7.999999999999999", ",", "30.973761629`10.999999999999996", ",", "24.03435`7.999999999999999", ",", "25.02026`7.999999999999999", ",", "26.01178`7.999999999999999", ",", "26.999230236`11.", ",", "27.992314761`11.", ",", "28.981800606`11.", ",", "29.978313789`11.", ",", "30.973761629`10.999999999999996", ",", "31.973907274`11.000000000000005", ",", "32.971725543`11.", ",", "33.973636257`11.", ",", "34.973314117`11.000000000000005", ",", "35.97825968`10.", ",", "36.979608946`11.", ",", "37.984156827`11.", ",", "38.986179475`11.", ",", "39.991296951`11.", ",", "40.994335435`11.", ",", "42.001007913`11.", ",", "43.00619`7.000000000000001", ",", "44.01299`7.999999999999999", ",", "45.01922`7.999999999999999", ",", "46.02738`7.999999999999999", ",", "31.972070999`11.", ",", "26.02788`7.999999999999999", ",", "27.018833`7.999999999999999", ",", "28.004372763`11.000000000000005", ",", "28.996608049`11.", ",", "29.984903249`11.", ",", "30.979554728`11.", ",", "31.972070999`11.", ",", "32.971458759`10.999999999999996", ",", "33.967866902`11.", ",", "34.969032161`11.", ",", "35.96708076`10.", ",", "36.971125567`11.", ",", "37.971163317`10.999999999999996", ",", "38.975134306`10.999999999999996", ",", "39.975451728`11.", ",", "40.979582149`11.000000000000005", ",", "41.981022419`11.", ",", "42.98715479`10.000000000000004", ",", "43.99021339`10.000000000000004", ",", "44.996508112`11.", ",", "46.00075`7.999999999999999", ",", "47.00859`7.999999999999999", ",", "48.01417`7.999999999999999", ",", "49.023619`7.999999999999999", ",", "34.968852682`10.999999999999996", ",", "28.02851`7.999999999999999", ",", "29.01411`7.999999999999999", ",", "30.00477`7.999999999999999", ",", "30.992413086`11.", ",", "31.985689901`11.", ",", "32.977451887`11.", ",", "33.973762819`11.000000000000005", ",", "34.968852682`10.999999999999996", ",", "35.968306981`11.", ",", "36.965902591`11.", ",", "37.968010425`11.", ",", "38.968008164`10.999999999999996", ",", "39.970415472`11.", ",", "40.970684525`11.", ",", "41.973254804`11.", ",", "42.974054403`11.", ",", "43.978281071`11.", ",", "44.980286886`11.000000000000005", ",", "45.98421004`10.000000000000004", ",", "46.98871`7.999999999999999", ",", "47.99495`7.999999999999999", ",", "49.00032`7.999999999999999", ",", "50.00784`7.999999999999999", ",", "51.01449`7.999999999999999", ",", "39.96238312251`13.", ",", "30.02156`7.999999999999999", ",", "31.012123`7.999999999999999", ",", "31.997637984`11.", ",", "32.989925709`11.", ",", "33.980271244`11.000000000000005", ",", "34.975257585`11.", ",", "35.967545105`11.", ",", "36.96677632`9.999999999999998", ",", "37.962732394`11.000000000000005", ",", "38.964313231`11.", ",", "39.96238312251`13.", ",", "40.964500611`11.000000000000005", ",", "41.963045736`11.", ",", "42.965636056`11.", ",", "43.964924033`11.", ",", "44.968039956`11.", ",", "45.968094129`11.", ",", "46.972186792`11.", ",", "47.97454`7.999999999999999", ",", "48.98052`7.999999999999999", ",", "49.98443`7.999999999999999", ",", "50.99163`7.999999999999999", ",", "51.99678`7.999999999999999", ",", "53.00494`7.999999999999999", ",", "38.963706679`11.", ",", "32.02192`7.999999999999999", ",", "33.00726`7.999999999999999", ",", "33.99841`7.999999999999999", ",", "34.988009692`11.", ",", "35.981292235`11.", ",", "36.973375889`11.", ",", "37.969081184`10.999999999999996", ",", "38.963706679`11.", ",", "39.963998475`11.", ",", "40.961825762`11.", ",", "41.96240281`10.", ",", "42.96071554`9.999999999999998", ",", "43.961556804`11.", ",", "44.960699493`11.", ",", "45.961976864`11.", ",", "46.961678473`11.", ",", "47.965513535`11.", ",", "48.967450928`10.999999999999996", ",", "49.972783355`11.", ",", "50.97638`7.999999999999999", ",", "51.98261`7.999999999999999", ",", "52.98712`7.999999999999999", ",", "53.9942`7.999999999999999", ",", "54.99971`7.999999999999999", ",", "39.962590983`11.", ",", "34.01412`7.999999999999999", ",", "35.00494`7.999999999999999", ",", "35.993087063`11.000000000000005", ",", "36.985870269`11.", ",", "37.976318452`11.", ",", "38.970719725`10.999999999999996", ",", "39.962590983`11.", ",", "40.962278062`11.", ",", "41.958618014`11.", ",", "42.958766628`11.", ",", "43.955481754`11.", ",", "44.956186566`11.", ",", "45.953692587`11.", ",", "46.954546006`10.999999999999996", ",", "47.952534177`11.", ",", "48.955674148`11.", ",", "49.957518962`11.", ",", "50.961499214`11.", ",", "51.9651`5.999999999999999", ",", "52.97005`7.999999999999999", ",", "53.97435`7.999999999999999", ",", "54.98055`7.999999999999999", ",", "55.98557`7.999999999999999", ",", "56.992356`7.999999999999999", ",", "44.955911909`11.", ",", "36.01492`7.999999999999999", ",", "37.00305`7.999999999999999", ",", "37.9947`7.999999999999999", ",", "38.984790002`11.", ",", "39.977967407`10.999999999999996", ",", "40.969251125`11.", ",", "41.965516429`10.999999999999996", ",", "42.961150658`11.", ",", "43.959402752`11.", ",", "44.955911909`11.", ",", "45.95517189`9.999999999999998", ",", "46.952407508`11.", ",", "47.952231468`11.", ",", "48.950023975`11.", ",", "49.952187685`11.", ",", "50.953603368`11.", ",", "51.956675468`10.999999999999996", ",", "52.95961`7.999999999999999", ",", "53.963264561`11.", ",", "54.968243949`11.", ",", "55.97287`7.999999999999999", ",", "56.97779`7.999999999999999", ",", "57.98371`7.999999999999999", ",", "58.98922`7.999999999999999", ",", "59.99571`7.999999999999999", ",", "47.947946281`11.", ",", "38.00977`7.999999999999999", ",", "39.00161`7.999999999999999", ",", "39.990498838`11.", ",", "40.983145`7.999999999999999", ",", "41.973030902`11.", ",", "42.968522499`11.", ",", "43.959690069`11.", ",", "44.958125616`11.", ",", "45.952631555`11.", ",", "46.951763088`10.999999999999996", ",", "47.947946281`11.", ",", "48.947869982`11.", ",", "49.944791194`10.999999999999996", ",", "50.946614955`11.", ",", "51.946897311`11.", ",", "52.949727171`10.999999999999996", ",", "53.951052401`11.", ",", "54.955265056`10.999999999999996", ",", "55.958199639`11.", ",", "56.963989137`11.000000000000005", ",", "57.96697`7.999999999999999", ",", "58.97293`7.999999999999999", ",", "59.97676`7.999999999999999", ",", "60.9832`7.999999999999999", ",", "61.98749`7.999999999999999", ",", "62.99442`7.999999999999999", ",", "50.943959507`11.", ",", "40.01109`7.999999999999999", ",", "40.99978`7.999999999999999", ",", "41.99123`7.999999999999999", ",", "42.98065`7.999999999999999", ",", "43.97411`7.000000000000001", ",", "44.965775808`11.", ",", "45.960200481`11.", ",", "46.95490894`10.000000000000004", ",", "47.952253707`10.999999999999996", ",", "48.948516101`11.", ",", "49.947158485`11.", ",", "50.943959507`11.", ",", "51.944775479`11.", ",", "52.944337979`10.999999999999996", ",", "53.946439854`11.", ",", "54.947233701`11.", ",", "55.950530966`11.", ",", "56.952561432`11.", ",", "57.956834136`11.", ",", "58.960207407`11.", ",", "59.965026862`11.", ",", "60.96848`7.999999999999999", ",", "61.97378`7.999999999999999", ",", "62.97755`7.999999999999999", ",", "63.98347`7.999999999999999", ",", "64.98792`7.999999999999999", ",", "51.940507472`11.", ",", "42.00643`7.999999999999999", ",", "42.99771`7.999999999999999", ",", "43.985549`7.999999999999999", ",", "44.97964`7.000000000000001", ",", "45.968358635`11.000000000000005", ",", "46.962900046`10.999999999999996", ",", "47.954031716`11.000000000000005", ",", "48.951335721`11.", ",", "49.946044205`11.", ",", "50.944767431`11.", ",", "51.940507472`11.", ",", "52.940649386`11.", ",", "53.938880395`11.", ",", "54.940839672`11.", ",", "55.940653139`11.", ",", "56.943613013`10.999999999999996", ",", "57.944353129`11.", ",", "58.948586367`11.", ",", "59.950076033`11.", ",", "60.954717204`11.", ",", "61.95661319`9.999999999999998", ",", "62.96186`7.999999999999999", ",", "63.96441`7.999999999999999", ",", "64.97016`7.999999999999999", ",", "65.97338`7.999999999999999", ",", "66.97955`7.999999999999999", ",", "54.938045141`11.000000000000005", ",", "44.00687`7.999999999999999", ",", "44.99451`7.999999999999999", ",", "45.98672`7.999999999999999", ",", "46.9761`7.999999999999999", ",", "47.96852`7.000000000000001", ",", "48.959618005`11.", ",", "49.95423823`9.999999999999998", ",", "50.948210787`10.999999999999996", ",", "51.945565464`11.", ",", "52.941290117`11.", ",", "53.940358854`10.999999999999996", ",", "54.938045141`11.000000000000005", ",", "55.93890491`10.000000000000004", ",", "56.938285378`11.", ",", "57.939981549`11.", ",", "58.940440237`11.", ",", "59.942911246`11.", ",", "60.944652638`11.", ",", "61.94842822`9.999999999999998", ",", "62.95023999`10.000000000000004", ",", "63.95424909`9.999999999999998", ",", "64.956336065`10.999999999999996", ",", "65.96108`7.999999999999999", ",", "66.96414`7.999999999999999", ",", "67.9693`7.999999999999999", ",", "68.97284`7.999999999999999", ",", "55.934937475`11.", ",", "45.014578`7.999999999999999", ",", "46.00081`7.999999999999999", ",", "46.99289`7.999999999999999", ",", "47.980504`7.999999999999999", ",", "48.97361`7.999999999999999", ",", "49.962988982`11.", ",", "50.956819538`11.", ",", "51.948113875`11.", ",", "52.945307942`11.", ",", "53.939610501`11.", ",", "54.938293357`11.", ",", "55.934937475`11.", ",", "56.935393969`10.999999999999996", ",", "57.933275558`10.999999999999996", ",", "58.934875464`11.000000000000005", ",", "59.934071683`11.", ",", "60.936745281`11.", ",", "61.936767442`11.", ",", "62.940369091`11.", ",", "63.941201265`11.", ",", "64.94538027`9.999999999999998", ",", "65.946780638`11.000000000000005", ",", "66.950947244`11.000000000000005", ",", "67.9537`5.999999999999999", ",", "68.95878`7.999999999999999", ",", "69.96146`8.000000000000004", ",", "70.96672`7.999999999999999", ",", "71.96962`7.999999999999999", ",", "58.933195048`11.", ",", "47.01149`7.999999999999999", ",", "48.00176`7.999999999999999", ",", "48.98972`7.999999999999999", ",", "49.98154`7.999999999999999", ",", "50.97072`7.999999999999999", ",", "51.96359`7.999999999999999", ",", "52.954218896`10.999999999999996", ",", "53.948459635`11.", ",", "54.941999029`11.", ",", "55.939839278`11.", ",", "56.936291373`11.", ",", "57.935752814`11.", ",", "58.933195048`11.", ",", "59.933817059`11.", ",", "60.932475763`11.", ",", "61.934050563`11.", ",", "62.933611611`11.", ",", "63.935809908`11.", ",", "64.93647846`10.000000000000004", ",", "65.939762004`11.", ",", "66.940889529`10.999999999999996", ",", "67.944873058`11.", ",", "68.94632`7.000000000000001", ",", "69.951`5.000000000000002", ",", "70.9529`5.999999999999999", ",", "71.95781`8.000000000000004", ",", "72.96024`7.999999999999999", ",", "73.96538`7.999999999999999", ",", "74.96833`7.999999999999999", ",", "57.935342907`11.", ",", "48.01975`7.999999999999999", ",", "49.00966`7.999999999999999", ",", "49.99593`7.999999999999999", ",", "50.98772`7.999999999999999", ",", "51.97568`7.999999999999999", ",", "52.96847`7.999999999999999", ",", "53.957905495`11.", ",", "54.951330251`11.", ",", "55.942132022`11.", ",", "56.939793526`11.", ",", "57.935342907`11.", ",", "58.934346705`11.", ",", "59.930786372`11.", ",", "60.931056033`11.", ",", "61.928345115`10.999999999999996", ",", "62.929669374`11.", ",", "63.927965959`10.999999999999996", ",", "64.930084304`11.", ",", "65.929139334`11.", ",", "66.931569414`11.000000000000005", ",", "67.931868789`11.", ",", "68.935610269`11.", ",", "69.9365`5.999999999999999", ",", "70.940736283`11.", ",", "71.942092682`10.999999999999998", ",", "72.94647`7.999999999999999", ",", "73.94807`7.999999999999999", ",", "74.95287`7.999999999999999", ",", "75.95533`8.000000000000004", ",", "76.96055`7.999999999999999", ",", "77.96318`7.999999999999999", ",", "62.929597474`11.000000000000005", ",", "51.99718`7.999999999999999", ",", "52.98555`7.999999999999999", ",", "53.97671`7.999999999999999", ",", "54.96605`7.999999999999999", ",", "55.95856`7.999999999999999", ",", "56.949211078`11.", ",", "57.944538499`11.", ",", "58.939498028`11.", ",", "59.93736503`9.999999999999998", ",", "60.933457821`11.", ",", "61.932583745`11.000000000000005", ",", "62.929597474`11.000000000000005", ",", "63.929764183`11.", ",", "64.927789485`11.", ",", "65.928868813`11.", ",", "66.927730314`10.999999999999996", ",", "67.929610889`11.", ",", "68.929429269`11.000000000000005", ",", "69.932392343`11.", ",", "70.932676833`11.", ",", "71.935820307`11.", ",", "72.936675282`11.", ",", "73.939874862`11.", ",", "74.9419`5.999999999999999", ",", "75.945275026`10.999999999999998", ",", "76.94785`7.999999999999999", ",", "77.95196`7.999999999999999", ",", "78.95456`7.999999999999999", ",", "79.96087`7.999999999999999", ",", "63.929142222`11.", ",", "53.99295`7.999999999999999", ",", "54.98398`7.999999999999999", ",", "55.97238`7.999999999999999", ",", "56.964788`7.999999999999999", ",", "57.954591555`11.", ",", "58.949263764`11.", ",", "59.941827035`11.", ",", "60.939510635`11.", ",", "61.934329764`11.", ",", "62.933211566`11.", ",", "63.929142222`11.", ",", "64.929240984`10.999999999999996", ",", "65.926033419`11.", ",", "66.927127345`11.", ",", "67.924844154`11.", ",", "68.926550281`11.", ",", "69.925319274`11.", ",", "70.927721599`11.", ",", "71.926857951`11.", ",", "72.929779104`10.999999999999998", ",", "73.929458609`11.", ",", "74.932936741`11.", ",", "75.93329357`9.999999999999998", ",", "76.936958967`11.", ",", "77.938440216`11.", ",", "78.942652`8.000000000000004", ",", "79.944342348`11.", ",", "80.95048`8.000000000000004", ",", "81.95442`7.999999999999999", ",", "82.96103`7.999999999999999", ",", "68.925573587`11.", ",", "55.99491`7.999999999999999", ",", "56.98293`7.999999999999999", ",", "57.97425`7.999999999999999", ",", "58.96337`7.999999999999999", ",", "59.95706`7.999999999999999", ",", "60.949446287`11.000000000000005", ",", "61.944175238`11.", ",", "62.939294196`10.999999999999996", ",", "63.936838747`11.", ",", "64.932734754`11.", ",", "65.93158901`10.000000000000004", ",", "66.928201703`11.000000000000005", ",", "67.927980084`11.", ",", "68.925573587`11.", ",", "69.926021972`11.", ",", "70.924701349`11.", ",", "71.926366268`11.", ",", "72.925174682`11.", ",", "73.926945762`11.", ",", "74.926500246`11.", ",", "75.928827626`11.", ",", "76.9291543`9.000000000000002", ",", "77.93160818`10.000000000000004", ",", "78.93289326`9.999999999999998", ",", "79.936515781`11.", ",", "80.937752355`10.999999999999998", ",", "81.94299`7.999999999999999", ",", "82.94698`7.999999999999999", ",", "83.95265`7.999999999999999", ",", "84.957`7.999999999999999", ",", "85.96312`7.999999999999999", ",", "73.921177767`11.", ",", "57.99101`7.999999999999999", ",", "58.98175`7.999999999999999", ",", "59.97019`7.999999999999999", ",", "60.96379`7.999999999999999", ",", "61.95465`7.999999999999999", ",", "62.94964`7.999999999999999", ",", "63.941653`7.999999999999999", ",", "64.939436406`11.", ",", "65.933843453`11.", ",", "66.93273407`9.999999999999998", ",", "67.92809424`9.999999999999998", ",", "68.927964533`11.", ",", "69.924247381`10.999999999999998", ",", "70.924950954`11.", ",", "71.922075815`11.", ",", "72.923458945`11.", ",", "73.921177767`11.", ",", "74.922858948`11.", ",", "75.921402557`11.", ",", "76.923548591`11.", ",", "77.922852739`11.", ",", "78.925400995`11.", ",", "79.925372392`11.", ",", "80.928820467`11.", ",", "81.929549725`11.", ",", "82.93462`7.999999999999999", ",", "83.93747`7.999999999999999", ",", "84.94303`7.999999999999999", ",", "85.94649`7.999999999999999", ",", "86.95251`7.999999999999999", ",", "87.95691`7.999999999999999", ",", "88.96383`7.999999999999999", ",", "74.921596478`11.", ",", "59.99313`7.999999999999999", ",", "60.98062`7.999999999999999", ",", "61.9732`7.999999999999999", ",", "62.96369`7.999999999999999", ",", "63.957572`7.999999999999999", ",", "64.949564`7.999999999999999", ",", "65.94471`7.000000000000001", ",", "66.939186071`11.", ",", "67.936769069`11.", ",", "68.932273675`11.", ",", "69.930924826`11.", ",", "70.927112428`11.", ",", "71.926752283`11.000000000000005", ",", "72.923824844`11.", ",", "73.923928692`11.", ",", "74.921596478`11.", ",", "75.922394021`11.000000000000004", ",", "76.920647286`11.000000000000005", ",", "77.921827281`11.", ",", "78.920947934`11.", ",", "79.922533816`11.", ",", "80.922132287`11.", ",", "81.924504067`11.", ",", "82.924980024`11.", ",", "83.929058`7.999999999999999", ",", "84.93202`7.999999999999999", ",", "85.9365`7.999999999999999", ",", "86.9399`7.999999999999999", ",", "87.94494`7.999999999999999", ",", "88.94939`7.999999999999999", ",", "89.9555`7.999999999999999", ",", "90.96043`7.999999999999999", ",", "91.9668`7.999999999999999", ",", "79.916521271`11.", ",", "64.96466`7.999999999999999", ",", "65.95521`7.999999999999999", ",", "66.95009`7.999999999999999", ",", "67.941798`7.999999999999999", ",", "68.939557817`11.", ",", "69.933390644`11.", ",", "70.932241822`11.", ",", "71.927112352`11.", ",", "72.926765345`11.", ",", "73.922476436`10.999999999999998", ",", "74.922523368`11.", ",", "75.919213597`11.", ",", "76.919914038`11.", ",", "77.91730909`10.000000000000004", ",", "78.918499098`11.", ",", "79.916521271`11.", ",", "80.917992474`11.", ",", "81.916699401`11.000000000000005", ",", "82.919118473`11.", ",", "83.918462354`10.999999999999998", ",", "84.922245053`11.", ",", "85.924271579`11.", ",", "86.928521358`11.", ",", "87.931423998`11.", ",", "88.93645`8.000000000000004", ",", "89.93996`7.999999999999999", ",", "90.94596`7.999999999999999", ",", "91.94992`7.999999999999999", ",", "92.95629`7.999999999999999", ",", "93.96049`7.999999999999999", ",", "78.918337087`11.", ",", "66.96479`7.999999999999999", ",", "67.958516`7.999999999999999", ",", "68.950106`7.999999999999999", ",", "69.944792`7.999999999999999", ",", "70.93874`7.000000000000001", ",", "71.936644572`11.", ",", "72.931691524`11.", ",", "73.929891034`11.", ",", "74.925776207`11.", ",", "75.924541469`11.", ",", "76.921379082`11.", ",", "77.921145706`11.", ",", "78.918337087`11.", ",", "79.918529296`11.", ",", "80.916290563`11.", ",", "81.916804119`11.", ",", "82.915180421`11.000000000000005", ",", "83.916478974`11.", ",", "84.915608403`11.", ",", "85.918797577`11.", ",", "86.920711324`11.", ",", "87.924065926`11.", ",", "88.926385334`11.", ",", "89.930627737`11.000000000000004", ",", "90.933968095`11.000000000000004", ",", "91.939258714`11.", ",", "92.94305`7.999999999999999", ",", "93.94868`7.999999999999999", ",", "94.95287`7.999999999999999", ",", "95.95853`7.999999999999999", ",", "96.9628`7.999999999999999", ",", "85.910610729`11.", ",", "68.96518`7.999999999999999", ",", "69.955259`7.999999999999999", ",", "70.949625738`11.", ",", "71.942092038`11.", ",", "72.939289195`11.", ",", "73.933084369`11.000000000000004", ",", "74.930945746`11.", ",", "75.925910078`11.", ",", "76.92467`7.000000000000001", ",", "77.920364783`11.", ",", "78.920082431`11.", ",", "79.916378965`11.", ",", "80.916592015`11.", ",", "81.9134836`9.000000000000002", ",", "82.914136099`11.", ",", "83.911506687`11.", ",", "84.912527331`11.", ",", "85.910610729`11.", ",", "86.913354862`11.000000000000004", ",", "87.914446969`11.000000000000004", ",", "88.917630581`11.", ",", "89.919516555`11.", ",", "90.923445215`11.", ",", "91.92615621`9.999999999999998", ",", "92.931274357`11.000000000000005", ",", "93.93436`7.999999999999999", ",", "94.93984`7.999999999999999", ",", "95.94307`7.999999999999999", ",", "96.94856`7.999999999999999", ",", "97.95191`7.999999999999999", ",", "98.9576`7.999999999999999", ",", "99.96114`7.999999999999999", ",", "84.911789737`11.", ",", "70.96532`7.999999999999999", ",", "71.95908`8.000000000000004", ",", "72.950561`7.999999999999999", ",", "73.944264751`10.999999999999998", ",", "74.93857`7.000000000000001", ",", "75.935072226`11.", ",", "76.930408`7.999999999999999", ",", "77.928141`7.999999999999999", ",", "78.92398946`10.000000000000004", ",", "79.92251925`10.000000000000004", ",", "80.918995913`11.", ",", "81.918208598`11.", ",", "82.915109701`11.", ",", "83.914384821`11.", ",", "84.911789737`11.", ",", "85.911167419`11.000000000000004", ",", "86.909180526`11.", ",", "87.911315588`11.", ",", "88.912278016`11.", ",", "89.914801694`11.", ",", "90.916536958`11.000000000000005", ",", "91.9197289`9.000000000000002", ",", "92.922041876`11.", ",", "93.926404946`11.", ",", "94.929302889`11.", ",", "95.934272637`11.", ",", "96.937351916`11.", ",", "97.941790668`11.", ",", "98.945379283`11.", ",", "99.94987`7.999999999999999", ",", "100.95319644500000000000000000001`11.999999999999998", ",", "101.95887`9.000000000000002", ",", "87.905612124`11.", ",", "72.96597`7.999999999999999", ",", "73.95631`7.999999999999999", ",", "74.949949568`11.000000000000004", ",", "75.941766782`11.", ",", "76.937944782`11.", ",", "77.93218`6.999999999999997", ",", "78.929708`7.999999999999999", ",", "79.924521013`11.", ",", "80.923211846`11.", ",", "81.918401639`11.", ",", "82.917556701`11.", ",", "83.913425275`10.999999999999998", ",", "84.912932803`11.", ",", "85.909260204`11.", ",", "86.908877124`11.", ",", "87.905612124`11.", ",", "88.907450675`11.", ",", "89.907737888`11.", ",", "90.910203095`11.", ",", "91.911037858`11.000000000000004", ",", "92.914025634`11.", ",", "93.915361312`11.", ",", "94.919358766`11.", ",", "95.921696802`11.", ",", "96.926152923`11.", ",", "97.928452934`11.", ",", "98.933240926`11.", ",", "99.935351911`11.000000000000004", ",", "100.940517888`11.999999999999998", ",", "101.943018987`11.999999999999998", ",", "102.94895`9.000000000000002", ",", "103.95233`9.000000000000002", ",", "104.95858`9.000000000000002", ",", "88.905848295`11.", ",", "75.95845`7.999999999999999", ",", "76.949645`7.999999999999999", ",", "77.94361`7.999999999999999", ",", "78.937351634`11.", ",", "79.93428`7.000000000000001", ",", "80.929127468`11.", ",", "81.926792451`11.", ",", "82.922354243`11.", ",", "83.920388264`11.", ",", "84.916433039`11.000000000000005", ",", "85.914885576`11.", ",", "86.91087573`9.999999999999998", ",", "87.909501146`11.", ",", "88.905848295`11.", ",", "89.907151886`11.000000000000005", ",", "90.907304791`11.", ",", "91.908949143`11.", ",", "92.909582713`11.", ",", "93.911595245`11.", ",", "94.912820621`10.999999999999998", ",", "95.915891343`11.", ",", "96.918133995`11.", ",", "97.92220302`10.", ",", "98.924636204`10.999999999999998", ",", "99.927756586`11.", ",", "100.93031385`11.", ",", "101.933555695`12.000000000000004", ",", "102.93673`9.000000000000002", ",", "103.94105`9.000000000000002", ",", "104.94487`9.000000000000002", ",", "105.94979`9.000000000000002", ",", "106.95414`9.000000000000002", ",", "107.95948`9.000000000000002", ",", "89.904704416`11.", ",", "77.95523`7.999999999999999", ",", "78.94916`7.999999999999999", ",", "79.9404`5.999999999999999", ",", "80.937210026`11.", ",", "81.931087`7.999999999999999", ",", "82.928653801`11.000000000000005", ",", "83.92325`7.999999999999999", ",", "84.921471182`11.", ",", "85.916473591`11.", ",", "86.914816252`11.", ",", "87.910226904`11.", ",", "88.9088895`9.000000000000005", ",", "89.904704416`11.", ",", "90.905645767`11.", ",", "91.905040847`11.", ",", "92.906476006`11.", ",", "93.906315192`11.", ",", "94.9080426`9.000000000000002", ",", "95.908273386`11.", ",", "96.910953109`11.000000000000005", ",", "97.912734892`11.", ",", "98.916512106`11.", ",", "99.917761889`10.999999999999998", ",", "100.921140415`11.999999999999998", ",", "101.922981285`12.000000000000004", ",", "102.926599606`12.000000000000004", ",", "103.92878`9.000000000000002", ",", "104.93305`9.000000000000002", ",", "105.93591`9.000000000000002", ",", "106.94075`9.000000000000002", ",", "107.94396`9.000000000000002", ",", "108.94924`9.000000000000002", ",", "109.95287`9.000000000000002", ",", "92.906378058`11.", ",", "80.94903`7.999999999999999", ",", "81.94313`7.999999999999999", ",", "82.936705382`11.", ",", "83.93357`7.999999999999999", ",", "84.927912447`11.", ",", "85.925038326`11.", ",", "86.920361108`11.", ",", "87.918332163`11.", ",", "88.913418245`11.000000000000005", ",", "89.911264845`11.", ",", "90.906996243`11.", ",", "91.907193888`11.000000000000004", ",", "92.906378058`11.", ",", "93.907283888`11.000000000000005", ",", "94.906835792`11.", ",", "95.908100647`11.", ",", "96.908098556`11.000000000000004", ",", "97.910328412`11.", ",", "98.911618375`11.", ",", "99.914181619`11.", ",", "100.91525202500000000000000000001`11.999999999999998", ",", "101.91803761400000000000253755392`12.000000000000004", ",", "102.919143842`11.999999999999998", ",", "103.922464701`11.999999999999998", ",", "104.923936545`12.000000000000004", ",", "105.92797`9.000000000000002", ",", "106.93031`9.000000000000002", ",", "107.93484`9.000000000000002", ",", "108.93763`9.000000000000002", ",", "109.94244`9.000000000000002", ",", "110.94565`9.000000000000002", ",", "111.95083`9.000000000000002", ",", "112.9547`9.000000000000002", ",", "97.905408169`11.000000000000005", ",", "82.94874`7.999999999999999", ",", "83.94009`7.999999999999999", ",", "84.93655`7.999999999999999", ",", "85.930695904`11.", ",", "86.927326502`11.", ",", "87.921953241`11.", ",", "88.919480009`11.", ",", "89.913936896`11.", ",", "90.911750194`10.999999999999998", ",", "91.906810991`11.", ",", "92.90681261`9.999999999999998", ",", "93.905088269`11.", ",", "94.905842129`11.", ",", "95.904679477`11.", ",", "96.906021465`11.", ",", "97.905408169`11.000000000000005", ",", "98.90771187`10.000000000000004", ",", "99.907477336`11.", ",", "100.910347001`11.999999999999998", ",", "101.91029736`11.", ",", "102.913207142`11.999999999999998", ",", "103.913763625`11.999999999999998", ",", "104.91697461`10.999999999999996", ",", "105.918136802`12.000000000000004", ",", "106.921692604`12.000000000000004", ",", "107.923453`9.000000000000002", ",", "108.92781`9.000000000000002", ",", "109.92973`9.000000000000002", ",", "110.93441`9.000000000000002", ",", "111.93684`9.000000000000002", ",", "112.94188`9.000000000000002", ",", "113.94492`9.000000000000002", ",", "114.95029`9.000000000000002", ",", "98.906254747`11.", ",", "84.94883`7.999999999999999", ",", "85.94288`7.999999999999999", ",", "86.93653`7.999999999999999", ",", "87.932678`7.999999999999999", ",", "88.927167`7.999999999999999", ",", "89.923556564`11.", ",", "90.918427639`11.", ",", "91.915260166`11.", ",", "92.910248984`10.999999999999998", ",", "93.909657002`11.", ",", "94.907657084`11.", ",", "95.907871383`10.999999999999998", ",", "96.906365358`11.", ",", "97.907215966`11.000000000000004", ",", "98.906254747`11.", ",", "99.90765778`10.000000000000004", ",", "100.907314659`11.999999999999998", ",", "101.909215019`11.999999999999998", ",", "102.909181351`12.000000000000004", ",", "103.911447454`12.000000000000004", ",", "104.911660566`11.999999999999998", ",", "105.914357927`12.000000000000004", ",", "106.915079572`12.000000000000004", ",", "107.91846122600000000000794820607`11.999999999999998", ",", "108.919982665`12.000000000000004", ",", "109.923820483`11.999999999999998", ",", "110.92569283`11.", ",", "111.929146493`12.000000000000004", ",", "112.93159`9.000000000000002", ",", "113.93588`9.000000000000002", ",", "114.93869`9.000000000000002", ",", "115.94337`9.000000000000002", ",", "116.94648`9.000000000000002", ",", "117.95148`9.000000000000002", ",", "101.904349312`12.000000000000004", ",", "86.94918`8.000000000000004", ",", "87.94026`7.999999999999999", ",", "88.93611`7.999999999999999", ",", "89.92989`7.999999999999999", ",", "90.926292`7.999999999999999", ",", "91.92012`7.999999999999999", ",", "92.917052034`11.", ",", "93.911359711`11.000000000000005", ",", "94.910412929`11.", ",", "95.907597835`11.", ",", "96.9075547`9.000000000000002", ",", "97.905287132`11.", ",", "98.905939302`11.", ",", "99.904219476`11.", ",", "100.90558208699999999999999999999`11.999999999999998", ",", "101.904349312`12.000000000000004", ",", "102.906323847`11.999999999999998", ",", "103.905432701`12.000000000000004", ",", "104.90775286599999999999997902847`12.000000000000004", ",", "105.907329433`11.999999999999998", ",", "106.909905089`11.999999999999998", ",", "107.910173465`11.999999999999998", ",", "108.9132032329999999999884132352`11.999999999999998", ",", "109.914136041`11.999999999999998", ",", "110.917696`9.000000000000002", ",", "111.918965`9.000000000000002", ",", "112.922487194`11.999999999999998", ",", "113.924281`9.000000000000002", ",", "114.928686173`11.999999999999998", ",", "115.93081`9.000000000000002", ",", "116.93558`9.000000000000002", ",", "117.93782`9.000000000000002", ",", "118.94284`9.000000000000002", ",", "119.94531`9.000000000000002", ",", "102.905504292`11.999999999999998", ",", "88.948837`8.000000000000004", ",", "89.94287`7.999999999999999", ",", "90.93655`7.999999999999999", ",", "91.93198`7.999999999999999", ",", "92.92574`7.999999999999999", ",", "93.921698`7.999999999999999", ",", "94.91589874`9.999999999999998", ",", "95.914460631`11.", ",", "96.911336797`11.000000000000005", ",", "97.910708158`11.", ",", "98.908132104`11.", ",", "99.90812155`10.000000000000004", ",", "100.906163625`12.000000000000004", ",", "101.906843196`12.000000000000004", ",", "102.905504292`11.999999999999998", ",", "103.906655518`12.000000000000004", ",", "104.905693821`12.000000000000004", ",", "105.907287135`12.000000000000004", ",", "106.906748423`12.000000000000004", ",", "107.908728018`11.999999999999998", ",", "108.908737289`11.999999999999998", ",", "109.911136411`11.999999999999998", ",", "110.911585913`11.999999999999998", ",", "111.914394159`11.999999999999998", ",", "112.915530627`11.999999999999998", ",", "113.918806`9.000000000000002", ",", "114.920334`9.000000000000002", ",", "115.924062`9.000000000000002", ",", "116.92598`9.000000000000002", ",", "117.93007`9.000000000000002", ",", "118.93211`9.000000000000002", ",", "119.93641`9.000000000000002", ",", "120.93872`9.000000000000002", ",", "121.94321`9.000000000000002", ",", "105.903485715`12.000000000000004", ",", "90.94911`7.999999999999999", ",", "91.94042`7.999999999999999", ",", "92.93591`7.999999999999999", ",", "93.92877`7.999999999999999", ",", "94.92469`7.999999999999999", ",", "95.918164359`11.", ",", "96.916479073`11.", ",", "97.912720902`11.", ",", "98.911767833`11.", ",", "99.908505886`11.", ",", "100.908289242`11.999999999999998", ",", "101.905608544`12.000000000000004", ",", "102.906087307`11.999999999999998", ",", "103.904035834`11.999999999999998", ",", "104.90508492`11.", ",", "105.903485715`12.000000000000004", ",", "106.905133481`12.000000000000004", ",", "107.90389170099999999998686134272`11.999999999999998", ",", "108.905950451`11.999999999999998", ",", "109.905153254`11.999999999999998", ",", "110.907670734`11.999999999999998", ",", "111.907314058`11.999999999999998", ",", "112.910152908`11.999999999999998", ",", "113.910362638`11.999999999999998", ",", "114.913683824`11.999999999999998", ",", "115.914158662`12.000000000000004", ",", "116.917841338`11.999999999999998", ",", "117.9189843`10.", ",", "118.92311`9.000000000000002", ",", "119.924691878`12.000000000000004", ",", "120.92887`9.000000000000002", ",", "121.93055`9.000000000000002", ",", "122.93493`9.000000000000002", ",", "123.93688`9.000000000000002", ",", "106.90509682`11.000000000000005", ",", "92.94978`7.999999999999999", ",", "93.94278`8.000000000000004", ",", "94.93548`7.999999999999999", ",", "95.93068`7.999999999999999", ",", "96.923972412`11.", ",", "97.921566201`11.", ",", "98.917597178`11.", ",", "99.916104255`11.000000000000004", ",", "100.912802233`11.999999999999998", ",", "101.911685`9.000000000000002", ",", "102.90897272`10.999999999999996", ",", "103.908629157`11.999999999999998", ",", "104.906528661`11.999999999999998", ",", "105.906668921`11.999999999999998", ",", "106.90509682`11.000000000000005", ",", "107.905955556`12.000000000000004", ",", "108.904752292`11.999999999999998", ",", "109.906107231`12.000000000000004", ",", "110.905291157`11.999999999999998", ",", "111.907004814`11.999999999999998", ",", "112.906566579`11.999999999999998", ",", "113.908803704`12.000000000000004", ",", "114.908762698`12.000000000000004", ",", "115.911359933`11.999999999999998", ",", "116.911684562`12.000000000000004", ",", "117.914582768`11.999999999999998", ",", "118.91566505900000000000751828992`11.999999999999998", ",", "119.918787384`12.000000000000004", ",", "120.919848046`12.000000000000004", ",", "121.92353`9.000000000000002", ",", "122.9249`9.000000000000002", ",", "123.92864`9.000000000000002", ",", "124.93043`9.000000000000002", ",", "125.9345`9.000000000000002", ",", "126.93677`9.000000000000002", ",", "127.94117`9.000000000000002", ",", "128.94369`9.000000000000002", ",", "129.950448`9.000000000000002", ",", "113.90335854`11.", ",", "94.94987`7.999999999999999", ",", "95.93977`7.999999999999999", ",", "96.93494`7.999999999999999", ",", "97.927395546`11.", ",", "98.92501`7.999999999999999", ",", "99.920289525`11.", ",", "100.918681538`11.999999999999998", ",", "101.91446225800000000000652214272`12.000000000000004", ",", "102.913419246`11.999999999999998", ",", "103.909849475`11.999999999999998", ",", "104.90946790499999999998069571584`11.999999999999998", ",", "105.90645941`10.999999999999996", ",", "106.90661792799999999998448107519`12.000000000000004", ",", "107.904183683`11.999999999999998", ",", "108.904982293`12.000000000000004", ",", "109.90300207`11.", ",", "110.904178107`11.999999999999998", ",", "111.90275780900000000001374683137`12.000000000000004", ",", "112.904401662`12.000000000000004", ",", "113.90335854`11.", ",", "114.905430969`12.000000000000004", ",", "115.904755809`12.000000000000004", ",", "116.907218618`12.000000000000004", ",", "117.90691453`10.999999999999996", ",", "118.9099215969999999999928172544`12.000000000000007", ",", "119.909850129`11.999999999999998", ",", "120.912977363`11.999999999999998", ",", "121.913332432`12.000000000000004", ",", "122.91700299899999999998046502912`11.999999999999998", ",", "123.917647616`11.999999999999998", ",", "124.92124637`11.", ",", "125.922353321`12.000000000000004", ",", "126.926443864`11.999999999999998", ",", "127.927762285`12.000000000000004", ",", "128.93215`9.000000000000002", ",", "129.933901937`12.000000000000004", ",", "130.94067`9.000000000000002", ",", "131.94555`9.000000000000002", ",", "114.903878484`12.000000000000004", ",", "96.94954`7.999999999999999", ",", "97.94214`7.999999999999999", ",", "98.93422`7.999999999999999", ",", "99.931110851`11.", ",", "100.92634`9.000000000000002", ",", "101.92409023800000000000773849089`12.000000000000004", ",", "102.919914188`11.999999999999998", ",", "103.918296171`12.000000000000004", ",", "104.91467354`10.999999999999996", ",", "105.913465411`11.999999999999998", ",", "106.9102951`10.000000000000004", ",", "107.90969818`10.999999999999996", ",", "108.907150507`12.000000000000004", ",", "109.9071652740000000000074448896`12.000000000000004", ",", "110.905103278`11.999999999999998", ",", "111.905532331`11.999999999999998", ",", "112.904057761`12.000000000000004", ",", "113.904913876`11.999999999999998", ",", "114.903878484`12.000000000000004", ",", "115.905259703`11.999999999999998", ",", "116.904513564`11.999999999999998", ",", "117.90635436700000000000386924544`12.000000000000004", ",", "118.90584535`11.", ",", "119.907959608`11.999999999999998", ",", "120.907845822`12.000000000000004", ",", "121.91027601`11.", ",", "122.910438276`11.999999999999998", ",", "123.913175231`11.999999999999998", ",", "124.913600588`12.000000000000004", ",", "125.916463857`12.000000000000004", ",", "126.917353091`12.000000000000004", ",", "127.920172328`11.999999999999998", ",", "128.92169698`11.", ",", "129.924970049`11.999999999999996", ",", "130.926851767`12.000000000000004", ",", "131.93299026`11.000000000000005", ",", "132.93781`9.000000000000002", ",", "133.94415`9.000000000000002", ",", "134.94933`9.000000000000002", ",", "119.902194676`11.999999999999998", ",", "98.94933`7.999999999999999", ",", "99.939044343`11.", ",", "100.93606`9.000000000000002", ",", "101.930295324`11.999999999999998", ",", "102.9281`9.000000000000002", ",", "103.923143223`11.999999999999998", ",", "104.921349437`12.000000000000004", ",", "105.91688062`11.", ",", "106.91564432900000000001785724927`12.000000000000004", ",", "107.911925378`11.999999999999998", ",", "108.91128321399999999999280676864`12.000000000000004", ",", "109.907842791`12.000000000000004", ",", "110.90773446`11.", ",", "111.904818207`12.000000000000004", ",", "112.90517057700000000000066060288`12.000000000000004", ",", "113.902778869`11.999999999999998", ",", "114.903342397`11.999999999999998", ",", "115.90174053`11.", ",", "116.902951656`12.000000000000004", ",", "117.901603167`12.000000000000004", ",", "118.90330763`10.999999999999996", ",", "119.902194676`11.999999999999998", ",", "120.90423548`11.", ",", "121.903439046`11.999999999999998", ",", "122.905720838`11.999999999999998", ",", "123.905273946`12.000000000000004", ",", "124.907784125`11.999999999999998", ",", "125.90765328`11.", ",", "126.910360024`12.000000000000004", ",", "127.91053662399999999998204837888`11.999999999999998", ",", "128.913479`9.000000000000002", ",", "129.913967295`11.999999999999998", ",", "130.916999769`12.000000000000004", ",", "131.917815713`11.999999999999998", ",", "132.923829249`11.999999999999996", ",", "133.928291765`12.", ",", "134.93473`9.000000000000002", ",", "135.93934`9.000000000000002", ",", "136.94599`9.000000000000002", ",", "120.903815686`12.000000000000004", ",", "102.93969`9.000000000000002", ",", "103.936472`9.000000000000002", ",", "104.931486348`11.999999999999998", ",", "105.928791`9.000000000000002", ",", "106.92415`9.000000000000002", ",", "107.92216`9.000000000000002", ",", "108.918132426`12.000000000000004", ",", "109.916753`9.000000000000002", ",", "110.913163`9.000000000000002", ",", "111.9123980089999999999854772224`11.999999999999998", ",", "112.90937167200000000000645922816`12.000000000000004", ",", "113.909269`9.000000000000002", ",", "114.906598`9.000000000000002", ",", "115.906793629`11.999999999999998", ",", "116.904835941`11.999999999999998", ",", "117.90552873099999999998210080767`12.000000000000004", ",", "118.90394200900000000002104492032`12.000000000000004", ",", "119.905072427`12.000000000000004", ",", "120.903815686`12.000000000000004", ",", "121.90517365099999999999426428929`11.999999999999998", ",", "122.90421397`11.", ",", "123.905935743`11.999999999999998", ",", "124.90525381800000000001449132032`11.999999999999998", ",", "125.90724748`11.", ",", "126.906923609`11.999999999999998", ",", "127.90916900099999999999705350144`11.999999999999998", ",", "128.909148442`12.000000000000004", ",", "129.911656324`11.999999999999998", ",", "130.911982275`12.", ",", "131.914466896`11.999999999999998", ",", "132.91525163`10.999999999999996", ",", "133.920379744`11.999999999999998", ",", "134.925165771`11.999999999999998", ",", "135.93035`9.000000000000002", ",", "136.93531`9.000000000000002", ",", "137.94079`9.000000000000002", ",", "138.94598`9.000000000000002", ",", "129.906224399`11.999999999999998", ",", "104.94364`9.000000000000002", ",", "105.937504237`11.999999999999998", ",", "106.935006`9.000000000000002", ",", "107.929444597`11.999999999999998", ",", "108.927415515`11.999999999999998", ",", "109.92240731599999999998032871423`11.999999999999998", ",", "110.9211106920000000000123731968`11.999999999999998", ",", "111.917013672`11.999999999999998", ",", "112.915891`9.000000000000002", ",", "113.912089`9.000000000000002", ",", "114.911902`9.000000000000002", ",", "115.90846`7.999999999999999", ",", "116.908644719`11.999999999999998", ",", "117.905827581`11.999999999999998", ",", "118.906403645`11.999999999999998", ",", "119.90402022200000000001444937728`12.000000000000007", ",", "120.904936424`12.000000000000004", ",", "121.903043898`12.000000000000004", ",", "122.904270029`11.999999999999998", ",", "123.902817896`11.999999999999998", ",", "124.904430731`11.999999999999998", ",", "125.90331169599999999999379243008`12.000000000000004", ",", "126.905226336`12.000000000000004", ",", "127.904463056`11.999999999999998", ",", "128.906598238`12.", ",", "129.906224399`11.999999999999998", ",", "130.908523864`11.999999999999998", ",", "131.90855316`11.", ",", "132.910955306`11.999999999999998", ",", "133.911368737`11.999999999999996", ",", "134.916448592`12.", ",", "135.920101246`11.999999999999998", ",", "136.925322954`12.000000000000004", ",", "137.92922`9.000000000000002", ",", "138.93473`9.000000000000002", ",", "139.93885`9.000000000000002", ",", "140.94465`9.000000000000002", ",", "141.94908`9.000000000000002", ",", "126.904472681`11.999999999999998", ",", "107.943475`9.000000000000002", ",", "108.93814941700000000001114636288`12.000000000000004", ",", "109.935242`9.000000000000002", ",", "110.930276`9.000000000000002", ",", "111.92797`9.000000000000002", ",", "112.923640583000000000004456448`11.999999999999998", ",", "113.92185`9.000000000000002", ",", "114.918048`9.000000000000002", ",", "115.916808633`11.999999999999998", ",", "116.91365`7.999999999999999", ",", "117.913074`9.000000000000002", ",", "118.910074`9.000000000000002", ",", "119.91004817299999999999969591296`11.999999999999998", ",", "120.907366811`12.000000000000004", ",", "121.907589284`12.000000000000004", ",", "122.905588965`12.000000000000004", ",", "123.90620985200000000001212153855`12.000000000000004", ",", "124.904630164`12.000000000000004", ",", "125.905624153`11.999999999999998", ",", "126.904472681`11.999999999999998", ",", "127.905809443`12.000000000000004", ",", "128.904987722`11.999999999999998", ",", "129.906674247`12.", ",", "130.906124609`12.000000000000004", ",", "131.907997381`12.000000000000004", ",", "132.907796939`11.999999999999996", ",", "133.909744465`11.999999999999998", ",", "134.910048121`12.000000000000004", ",", "135.914653993`11.999999999999998", ",", "136.91787084`11.000000000000005", ",", "137.922349591`12.000000000000004", ",", "138.926099478`11.999999999999998", ",", "139.931`9.000000000000002", ",", "140.93503`9.000000000000002", ",", "141.94018`9.000000000000002", ",", "142.94456`9.000000000000002", ",", "143.94999`9.000000000000002", ",", "131.904153457`11.999999999999996", ",", "109.944278068`12.000000000000004", ",", "110.941602`9.000000000000002", ",", "111.935623112`11.999999999999998", ",", "112.933341174`12.000000000000004", ",", "113.927980306`11.999999999999998", ",", "114.92629392`10.999999999999996", ",", "115.921581087`11.999999999999998", ",", "116.920358735`11.999999999999998", ",", "117.916178655`11.999999999999998", ",", "118.915410688`12.000000000000004", ",", "119.911784244`11.999999999999998", ",", "120.911461829`12.000000000000004", ",", "121.908367632`11.999999999999998", ",", "122.90848191`11.", ",", "123.905893003`11.999999999999998", ",", "124.906395464`12.000000000000004", ",", "125.904273634`11.999999999999998", ",", "126.905183723`11.999999999999998", ",", "127.903531275`11.999999999999998", ",", "128.904779435`11.999999999999998", ",", "129.903508007`12.", ",", "130.905082362`11.999999999999998", ",", "131.904153457`11.999999999999996", ",", "132.905910722`12.000000000000004", ",", "133.905394464`12.000000000000004", ",", "134.907227495`12.000000000000004", ",", "135.907218794`11.999999999999998", ",", "136.911562125`12.", ",", "137.913954475`12.000000000000004", ",", "138.918792936`12.000000000000004", ",", "139.921640943`12.", ",", "140.926648049`12.000000000000004", ",", "141.92970959`11.", ",", "142.93511`9.000000000000002", ",", "143.93851`9.000000000000002", ",", "144.94407`9.000000000000002", ",", "145.94775`9.000000000000002", ",", "146.95356`9.000000000000002", ",", "132.905451932`12.", ",", "111.950301`9.000000000000002", ",", "112.944493274`12.000000000000004", ",", "113.94145`9.000000000000002", ",", "114.93591`9.000000000000002", ",", "115.933367`9.000000000000002", ",", "116.928670701`11.999999999999998", ",", "117.926559494`12.000000000000004", ",", "118.92237730400000000001920991233`11.999999999999998", ",", "119.920677253`12.000000000000004", ",", "120.91722920899999999999655018496`11.999999999999998", ",", "121.916113434`11.999999999999998", ",", "122.91299603599999999997982539776`12.000000000000004", ",", "123.912257798`11.999999999999998", ",", "124.90972827`11.", ",", "125.90945197699999999999873122304`11.999999999999998", ",", "126.907417525`11.999999999999998", ",", "127.907748866`12.000000000000004", ",", "128.906064426`11.999999999999998", ",", "129.906708552`11.999999999999996", ",", "130.905463926`11.999999999999998", ",", "131.90643426`11.", ",", "132.905451932`12.", ",", "133.906718475`12.000000000000004", ",", "134.905977008`12.000000000000004", ",", "135.907311576`11.999999999999998", ",", "136.907089473`11.999999999999996", ",", "137.911016704`12.000000000000004", ",", "138.913363999`12.", ",", "139.917282354`11.999999999999998", ",", "140.920045752`11.999999999999998", ",", "141.924298927`11.999999999999998", ",", "142.92735175`11.", ",", "143.932076914`11.999999999999996", ",", "144.93552617`11.", ",", "145.940289423`12.000000000000004", ",", "146.944155008`12.000000000000004", ",", "147.949218153`11.999999999999998", ",", "148.95293`9.000000000000002", ",", "149.95817`9.000000000000002", ",", "150.96219`9.000000000000002", ",", "137.905247237`12.000000000000004", ",", "113.950675405`11.999999999999998", ",", "114.94737`9.000000000000002", ",", "115.94138`9.000000000000002", ",", "116.938499`9.000000000000002", ",", "117.93304`9.000000000000002", ",", "118.930659661`12.000000000000004", ",", "119.926044974`12.000000000000004", ",", "120.924054499`11.999999999999998", ",", "121.919904`9.000000000000002", ",", "122.918781036`12.000000000000004", ",", "123.915093603`12.000000000000004", ",", "124.914472912`12.000000000000004", ",", "125.911250177`12.000000000000004", ",", "126.911093797`11.999999999999998", ",", "127.908317698`11.999999999999998", ",", "128.908679439`11.999999999999998", ",", "129.906320811`12.000000000000004", ",", "130.906941118`12.000000000000004", ",", "131.905061288`11.999999999999998", ",", "132.90600749`11.", ",", "133.904508383`12.000000000000004", ",", "134.905688591`12.", ",", "135.904575945`12.000000000000004", ",", "136.905827384`12.", ",", "137.905247237`12.000000000000004", ",", "138.908841341`11.999999999999998", ",", "139.910604505`11.999999999999998", ",", "140.914411009`12.", ",", "141.91645341`11.", ",", "142.920626719`12.", ",", "143.922952853`12.", ",", "144.927627032`12.000000000000004", ",", "145.930219572`11.999999999999998", ",", "146.934945`9.000000000000002", ",", "147.937720047`12.000000000000004", ",", "148.94258`9.000000000000002", ",", "149.94568`9.000000000000002", ",", "150.95081`9.000000000000002", ",", "151.95427`9.000000000000002", ",", "152.95961`9.000000000000002", ",", "138.906353267`11.999999999999998", ",", "116.950068`9.000000000000002", ",", "117.94673`9.000000000000002", ",", "118.94099`9.000000000000002", ",", "119.93807`9.000000000000002", ",", "120.93301`9.000000000000002", ",", "121.93071`9.000000000000002", ",", "122.92624`9.000000000000002", ",", "123.92457427500000000000315621376`11.999999999999998", ",", "124.920816034`11.999999999999998", ",", "125.919512667`11.999999999999998", ",", "126.916375448`12.000000000000004", ",", "127.915585177`12.000000000000004", ",", "128.912692815`12.000000000000004", ",", "129.912368724`11.999999999999998", ",", "130.91007`7.999999999999999", ",", "131.910101145`11.999999999999998", ",", "132.908218`9.000000000000002", ",", "133.908514011`11.999999999999996", ",", "134.906976844`12.000000000000004", ",", "135.907635536`12.000000000000004", ",", "136.906493598`12.000000000000004", ",", "137.90711193`11.", ",", "138.906353267`11.999999999999998", ",", "139.909477645`12.", ",", "140.910962152`11.999999999999998", ",", "141.91407913`11.", ",", "142.91606272`11.", ",", "143.919599647`11.999999999999998", ",", "144.921645401`11.999999999999996", ",", "145.92579346`10.999999999999996", ",", "146.928235284`11.999999999999998", ",", "147.932228868`11.999999999999998", ",", "148.934734`9.000000000000002", ",", "149.93877`9.000000000000002", ",", "150.94172`9.000000000000002", ",", "151.94625`9.000000000000002", ",", "152.94962`9.000000000000002", ",", "153.9545`9.000000000000002", ",", "154.95835`9.000000000000002", ",", "139.905438706`11.999999999999996", ",", "118.95276`9.000000000000002", ",", "119.94664`9.000000000000002", ",", "120.94342`9.000000000000002", ",", "121.93791`9.000000000000002", ",", "122.9354`9.000000000000002", ",", "123.93041`9.000000000000002", ",", "124.92844`9.000000000000002", ",", "125.923971`9.000000000000002", ",", "126.922731`9.000000000000002", ",", "127.918911`9.000000000000002", ",", "128.918102`9.000000000000002", ",", "129.914736`9.000000000000002", ",", "130.914422`9.000000000000002", ",", "131.911460487`11.999999999999996", ",", "132.91151502`11.", ",", "133.908924821`11.999999999999998", ",", "134.909151396`11.999999999999998", ",", "135.907172422`11.999999999999998", ",", "136.907805577`11.999999999999996", ",", "137.905991321`12.000000000000004", ",", "138.906652651`11.999999999999998", ",", "139.905438706`11.999999999999996", ",", "140.90827627`11.", ",", "141.909244205`12.", ",", "142.91238591`11.", ",", "143.913647336`12.000000000000004", ",", "144.917233135`12.", ",", "145.918759009`12.", ",", "146.922673954`11.999999999999998", ",", "147.92443241`10.999999999999996", ",", "148.928399883`11.999999999999996", ",", "149.930408931`12.000000000000004", ",", "150.933976196`12.000000000000004", ",", "151.93654`9.000000000000002", ",", "152.94058`9.000000000000002", ",", "153.94342`9.000000000000002", ",", "154.94804`9.000000000000002", ",", "155.95126`9.000000000000002", ",", "156.95634`9.000000000000002", ",", "140.907652769`11.999999999999996", ",", "120.955364`9.000000000000002", ",", "121.95181`9.000000000000002", ",", "122.94596`9.000000000000002", ",", "123.94296`9.000000000000002", ",", "124.93783`9.000000000000002", ",", "125.93531`9.000000000000002", ",", "126.93083`9.000000000000002", ",", "127.928791`9.000000000000002", ",", "128.925095`9.000000000000002", ",", "129.92359`7.999999999999999", ",", "130.920259`9.000000000000002", ",", "131.919255`9.000000000000002", ",", "132.916330532`11.999999999999998", ",", "133.915711737`11.999999999999998", ",", "134.913111745`11.999999999999998", ",", "135.912691611`11.999999999999996", ",", "136.910705455`12.000000000000004", ",", "137.910754636`11.999999999999998", ",", "138.908938399`12.", ",", "139.909075874`11.999999999999998", ",", "140.907652769`11.999999999999996", ",", "141.910044806`12.", ",", "142.910816926`12.000000000000004", ",", "143.913305245`12.000000000000004", ",", "144.9145117`9.999999999999998", ",", "145.917644336`12.000000000000004", ",", "146.918995992`11.999999999999996", ",", "147.922135026`11.999999999999996", ",", "148.923717651`11.999999999999996", ",", "149.926672997`12.", ",", "150.928318618`12.000000000000004", ",", "151.931499225`11.999999999999998", ",", "152.933838905`11.999999999999998", ",", "153.937518153`11.999999999999998", ",", "154.94012`9.000000000000002", ",", "155.94427`9.000000000000002", ",", "156.94743`9.000000000000002", ",", "157.95198`9.000000000000002", ",", "158.9555`9.000000000000002", ",", "141.907723297`12.000000000000004", ",", "123.95223`9.000000000000002", ",", "124.94888`9.000000000000002", ",", "125.94322`9.000000000000002", ",", "126.9405`9.000000000000002", ",", "127.93539`9.000000000000002", ",", "128.933188`9.000000000000002", ",", "129.928506`9.000000000000002", ",", "130.927247`9.000000000000002", ",", "131.923321237`12.000000000000004", ",", "132.922348`9.000000000000002", ",", "133.918790181`11.999999999999998", ",", "134.91818116`11.", ",", "135.914976035`11.999999999999998", ",", "136.914567137`11.999999999999998", ",", "137.911949961`12.", ",", "138.911978288`12.000000000000004", ",", "139.909552`9.000000000000002", ",", "140.909609854`12.000000000000004", ",", "141.907723297`12.000000000000004", ",", "142.90981429`11.", ",", "143.910087274`12.000000000000004", ",", "144.912573636`12.", ",", "145.913116939`11.999999999999998", ",", "146.916100441`11.999999999999998", ",", "147.916893288`11.999999999999996", ",", "148.920148842`12.000000000000004", ",", "149.920890888`12.000000000000004", ",", "150.923828929`12.000000000000004", ",", "151.924682219`12.", ",", "152.927698232`12.000000000000004", ",", "153.929477307`11.999999999999998", ",", "154.932932`9.000000000000002", ",", "155.935018114`12.000000000000004", ",", "156.93903`9.000000000000002", ",", "157.9416`9.000000000000002", ",", "158.94609`9.000000000000002", ",", "159.94909`9.000000000000002", ",", "160.95388`9.000000000000002", ",", "144.912749023`12.000000000000004", ",", "125.95752`9.000000000000002", ",", "126.95163`9.000000000000002", ",", "127.94842`9.000000000000002", ",", "128.94316`9.000000000000002", ",", "129.94045`9.000000000000002", ",", "130.93587`9.000000000000002", ",", "131.93375`9.000000000000002", ",", "132.929782`9.000000000000002", ",", "133.928353`9.000000000000002", ",", "134.924876`9.000000000000002", ",", "135.923565829`11.999999999999998", ",", "136.920479493`11.999999999999996", ",", "137.919548281`11.999999999999996", ",", "138.916804082`12.000000000000004", ",", "139.916041789`11.999999999999998", ",", "140.913555054`11.999999999999998", ",", "141.912874471`12.", ",", "142.910932616`11.999999999999998", ",", "143.912590843`11.999999999999998", ",", "144.912749023`12.000000000000004", ",", "145.914696305`12.000000000000004", ",", "146.915138545`12.", ",", "147.917474618`11.999999999999996", ",", "148.918334155`12.000000000000004", ",", "149.920983561`12.", ",", "150.921206973`11.999999999999998", ",", "151.923496795`12.000000000000004", ",", "152.924116889`11.999999999999998", ",", "153.926463943`11.999999999999998", ",", "154.928101267`12.000000000000004", ",", "155.931056736`11.999999999999998", ",", "156.933039369`12.", ",", "157.936561407`11.999999999999998", ",", "158.93897`9.000000000000002", ",", "159.94299`9.000000000000002", ",", "160.94586`9.000000000000002", ",", "161.95029`9.000000000000002", ",", "162.95368`9.000000000000002", ",", "151.919732425`12.000000000000004", ",", "127.95808`9.000000000000002", ",", "128.95464`9.000000000000002", ",", "129.94892`9.000000000000002", ",", "130.94611`9.000000000000002", ",", "131.94069`9.000000000000002", ",", "132.93867`9.000000000000002", ",", "133.93397`9.000000000000002", ",", "134.93252`7.999999999999999", ",", "135.928275527`12.", ",", "136.926971746`12.000000000000004", ",", "137.923243961`11.999999999999998", ",", "138.922296605`12.000000000000004", ",", "139.918994687`12.000000000000004", ",", "140.918476488`12.000000000000004", ",", "141.915197641`11.999999999999998", ",", "142.914628338`11.999999999999996", ",", "143.911999478`12.", ",", "144.913410353`12.000000000000004", ",", "145.9130409`10.000000000000004", ",", "146.914897923`11.999999999999998", ",", "147.914822674`12.000000000000004", ",", "148.917184735`11.999999999999996", ",", "149.917275539`12.000000000000004", ",", "150.919932409`12.000000000000004", ",", "151.919732425`12.000000000000004", ",", "152.922097356`12.000000000000004", ",", "153.922209273`12.000000000000004", ",", "154.924640161`11.999999999999998", ",", "155.925527887`12.000000000000004", ",", "156.928358717`12.000000000000004", ",", "157.929991317`11.999999999999998", ",", "158.933211271`11.999999999999998", ",", "159.93514`9.000000000000002", ",", "160.93883`9.000000000000002", ",", "161.94122`9.000000000000002", ",", "162.94536`9.000000000000002", ",", "163.94828`9.000000000000002", ",", "164.95298`9.000000000000002", ",", "152.921230339`12.", ",", "129.963569`9.000000000000002", ",", "130.957753`9.000000000000002", ",", "131.95437`9.000000000000002", ",", "132.94924`9.000000000000002", ",", "133.94651`9.000000000000002", ",", "134.94182`9.000000000000002", ",", "135.9396`9.000000000000002", ",", "136.93557`9.000000000000002", ",", "137.933709`9.000000000000002", ",", "138.92979228`10.999999999999996", ",", "139.928087607`11.999999999999998", ",", "140.92493072`10.999999999999996", ",", "141.923434945`11.999999999999998", ",", "142.920297509`11.999999999999998", ",", "143.918816823`11.999999999999996", ",", "144.916265237`11.999999999999996", ",", "145.917205817`12.000000000000004", ",", "146.916746111`12.000000000000004", ",", "147.918085895`11.999999999999998", ",", "148.917931238`12.000000000000004", ",", "149.919701819`11.999999999999998", ",", "150.919850161`11.999999999999998", ",", "151.921744534`11.999999999999996", ",", "152.921230339`12.", ",", "153.922979237`11.999999999999996", ",", "154.92289326`11.", ",", "155.924752249`11.999999999999998", ",", "156.925423647`12.000000000000004", ",", "157.927845302`11.999999999999998", ",", "158.929088861`11.999999999999998", ",", "159.931971`9.000000000000002", ",", "160.93368`9.000000000000002", ",", "161.93704`9.000000000000002", ",", "162.93921`9.000000000000002", ",", "163.94299`9.000000000000002", ",", "164.94572`9.000000000000002", ",", "165.94997`9.000000000000002", ",", "166.95321`9.000000000000002", ",", "157.924103912`11.999999999999998", ",", "133.95537`9.000000000000002", ",", "134.95257`9.000000000000002", ",", "135.94734`9.000000000000002", ",", "136.94502`9.000000000000002", ",", "137.94012`9.000000000000002", ",", "138.93824`9.000000000000002", ",", "139.933674`9.000000000000002", ",", "140.932126`9.000000000000002", ",", "141.928116`9.000000000000002", ",", "142.92674951`11.", ",", "143.922963`9.000000000000002", ",", "144.921709252`11.999999999999998", ",", "145.918310608`12.000000000000004", ",", "146.91909442`11.", ",", "147.918114524`12.000000000000004", ",", "148.919340915`11.999999999999998", ",", "149.918658876`11.999999999999998", ",", "150.920348482`11.999999999999998", ",", "151.919790996`12.000000000000004", ",", "152.921749543`12.", ",", "153.920865598`12.000000000000004", ",", "154.922622022`12.000000000000004", ",", "155.922122743`12.000000000000004", ",", "156.923960135`11.999999999999998", ",", "157.924103912`11.999999999999998", ",", "158.926388658`11.999999999999996", ",", "159.927054146`12.000000000000004", ",", "160.929669211`11.999999999999998", ",", "161.930984751`12.000000000000004", ",", "162.93399`9.000000000000002", ",", "163.93586`9.000000000000002", ",", "164.93938`9.000000000000002", ",", "165.9416`9.000000000000002", ",", "166.94557`9.000000000000002", ",", "167.94836`9.000000000000002", ",", "168.95287`9.000000000000002", ",", "158.925346757`11.999999999999998", ",", "135.96138`9.000000000000002", ",", "136.95598`9.000000000000002", ",", "137.95316`9.000000000000002", ",", "138.94829`9.000000000000002", ",", "139.945805049`11.999999999999998", ",", "140.941448`9.000000000000002", ",", "141.938744`9.000000000000002", ",", "142.935121`9.000000000000002", ",", "143.933045`9.000000000000002", ",", "144.929274`9.000000000000002", ",", "145.927246584`11.999999999999998", ",", "146.924044585`12.000000000000004", ",", "147.924271701`12.", ",", "148.923245909`11.999999999999996", ",", "149.923659686`12.000000000000004", ",", "150.923102543`12.000000000000004", ",", "151.924074438`12.000000000000004", ",", "152.923434588`12.000000000000004", ",", "153.924678019`11.999999999999998", ",", "154.923505236`11.999999999999998", ",", "155.924747213`11.999999999999998", ",", "156.924024604`12.000000000000004", ",", "157.925413137`11.999999999999998", ",", "158.925346757`11.999999999999998", ",", "159.927167606`11.999999999999996", ",", "160.927569919`12.", ",", "161.929488234`12.000000000000004", ",", "162.930647536`11.999999999999998", ",", "163.933350838`11.999999999999998", ",", "164.93488`9.000000000000002", ",", "165.937991959`11.999999999999998", ",", "166.94005`9.000000000000002", ",", "167.94364`9.000000000000002", ",", "168.94622`9.000000000000002", ",", "169.95025`9.000000000000002", ",", "170.9533`9.000000000000002", ",", "163.929174751`11.999999999999998", ",", "137.96249`9.000000000000002", ",", "138.95954`9.000000000000002", ",", "139.95401`9.000000000000002", ",", "140.95135`9.000000000000002", ",", "141.946366`9.000000000000002", ",", "142.94383`9.000000000000002", ",", "143.939254`9.000000000000002", ",", "144.937425`9.000000000000002", ",", "145.932845369`11.999999999999996", ",", "146.9310915`10.", ",", "147.927149831`12.000000000000004", ",", "148.927304787`11.999999999999996", ",", "149.925585184`12.", ",", "150.926184601`12.000000000000004", ",", "151.9247183`9.999999999999998", ",", "152.92576467`11.", ",", "153.924424457`11.999999999999998", ",", "154.925753775`11.999999999999998", ",", "155.92428311`11.", ",", "156.925466095`11.999999999999998", ",", "157.924409487`12.000000000000004", ",", "158.925739214`12.000000000000004", ",", "159.925197517`11.999999999999996", ",", "160.926933364`12.", ",", "161.926798447`12.", ",", "162.928731159`12.000000000000004", ",", "163.929174751`11.999999999999998", ",", "164.931703333`11.999999999999998", ",", "165.932806741`11.999999999999998", ",", "166.935655462`11.999999999999998", ",", "167.937128769`11.999999999999998", ",", "168.940307614`11.999999999999998", ",", "169.94239`9.000000000000002", ",", "170.9462`9.000000000000002", ",", "171.94876`9.000000000000002", ",", "172.953`9.000000000000002", ",", "164.93032207`11.", ",", "139.968539`9.000000000000002", ",", "140.963098`9.000000000000002", ",", "141.95977`9.000000000000002", ",", "142.95461`9.000000000000002", ",", "143.95148`9.000000000000002", ",", "144.9472`9.000000000000002", ",", "145.94464`9.000000000000002", ",", "146.940056`9.000000000000002", ",", "147.937718`9.000000000000002", ",", "148.933774771`11.999999999999998", ",", "149.933496182`11.999999999999998", ",", "150.931688142`12.000000000000004", ",", "151.931713714`11.999999999999998", ",", "152.930198789`12.000000000000004", ",", "153.930601579`12.000000000000004", ",", "154.929103491`12.000000000000004", ",", "155.929839`9.000000000000002", ",", "156.928256188`12.000000000000004", ",", "157.928941007`11.999999999999998", ",", "158.927711959`11.999999999999998", ",", "159.928729478`12.000000000000004", ",", "160.927854776`12.000000000000004", ",", "161.929095504`12.000000000000004", ",", "162.928733903`12.000000000000004", ",", "163.930233507`12.000000000000004", ",", "164.93032207`11.", ",", "165.932284162`11.999999999999998", ",", "166.933132633`11.999999999999998", ",", "167.935515708`12.000000000000004", ",", "168.936872273`11.999999999999998", ",", "169.939618929`12.000000000000004", ",", "170.94146515`11.", ",", "171.94482`9.000000000000002", ",", "172.94729`9.000000000000002", ",", "173.95115`9.000000000000002", ",", "174.95405`9.000000000000002", ",", "165.930293061`12.", ",", "142.96634`9.000000000000002", ",", "143.96038`9.000000000000002", ",", "144.95739`9.000000000000002", ",", "145.952`9.000000000000002", ",", "146.94949`9.000000000000002", ",", "147.94455`9.000000000000002", ",", "148.942306`9.000000000000002", ",", "149.937913839`12.000000000000004", ",", "150.937448903`11.999999999999998", ",", "151.935050389`11.999999999999996", ",", "152.935063492`12.000000000000004", ",", "153.932783081`11.999999999999998", ",", "154.933208949`12.", ",", "155.931064698`11.999999999999998", ",", "156.931916`9.000000000000002", ",", "157.929893474`11.999999999999998", ",", "158.930684066`12.000000000000004", ",", "159.929083292`11.999999999999998", ",", "160.929995309`12.000000000000004", ",", "161.928778264`11.999999999999996", ",", "162.930032749`11.999999999999998", ",", "163.929200229`12.000000000000004", ",", "164.930726003`12.000000000000004", ",", "165.930293061`12.", ",", "166.932048159`12.000000000000004", ",", "167.932370224`12.", ",", "168.934590364`12.", ",", "169.935464312`11.999999999999998", ",", "170.938029808`11.999999999999996", ",", "171.939356113`12.000000000000004", ",", "172.9424`9.000000000000002", ",", "173.94423`9.000000000000002", ",", "174.94777`9.000000000000002", ",", "175.95008`9.000000000000002", ",", "176.95405`9.000000000000002", ",", "168.93421325`11.000000000000005", ",", "144.970073`9.000000000000002", ",", "145.966425`9.000000000000002", ",", "146.960961`9.000000000000002", ",", "147.95784`9.000000000000002", ",", "148.95272`9.000000000000002", ",", "149.94996`9.000000000000002", ",", "150.94548349`11.000000000000005", ",", "151.944422`9.000000000000002", ",", "152.942012112`12.000000000000004", ",", "153.941567808`11.999999999999998", ",", "154.939199459`12.000000000000004", ",", "155.938979933`12.000000000000004", ",", "156.936973`9.000000000000002", ",", "157.936979525`12.000000000000004", ",", "158.934975`9.000000000000002", ",", "159.935262801`11.999999999999998", ",", "160.933549`9.000000000000002", ",", "161.933994682`11.999999999999996", ",", "162.932651124`12.000000000000004", ",", "163.93356`7.999999999999999", ",", "164.932435492`12.000000000000004", ",", "165.933554131`12.000000000000004", ",", "166.932851622`11.999999999999996", ",", "167.934172776`11.999999999999998", ",", "168.93421325`11.000000000000005", ",", "169.935801397`12.000000000000004", ",", "170.93642944`11.", ",", "171.938400044`12.", ",", "172.939603607`11.999999999999998", ",", "173.942168605`12.", ",", "174.943836853`11.999999999999996", ",", "175.946994685`11.999999999999996", ",", "176.94904`9.000000000000002", ",", "177.95264`9.000000000000002", ",", "178.95534`9.000000000000002", ",", "173.938862089`11.999999999999996", ",", "147.96742`9.000000000000002", ",", "148.96404`9.000000000000002", ",", "149.95842`9.000000000000002", ",", "150.955400769`11.999999999999998", ",", "151.950288919`11.999999999999998", ",", "152.94948`9.000000000000002", ",", "153.946393928`11.999999999999998", ",", "154.945782332`12.000000000000004", ",", "155.942818215`12.000000000000004", ",", "156.942627848`12.000000000000004", ",", "157.939865617`12.000000000000004", ",", "158.940050099`12.", ",", "159.937552344`11.999999999999998", ",", "160.937901678`11.999999999999996", ",", "161.93576821`11.000000000000005", ",", "162.936334305`12.000000000000004", ",", "163.934489416`12.000000000000004", ",", "164.935279`9.000000000000002", ",", "165.933882042`11.999999999999998", ",", "166.934949605`12.000000000000004", ",", "167.933896895`11.999999999999998", ",", "168.935189802`12.000000000000004", ",", "169.934761837`11.999999999999998", ",", "170.936325799`11.999999999999998", ",", "171.936381469`12.", ",", "172.938210787`11.999999999999998", ",", "173.938862089`11.999999999999996", ",", "174.94127645`11.", ",", "175.942571683`12.000000000000004", ",", "176.945260822`11.999999999999998", ",", "177.94664668`11.", ",", "178.95017`9.000000000000002", ",", "179.95233`9.000000000000002", ",", "180.95615`9.000000000000002", ",", "174.940771819`12.000000000000004", ",", "149.973228`9.000000000000002", ",", "150.967577`9.000000000000002", ",", "151.96412`9.000000000000002", ",", "152.958767331`12.000000000000004", ",", "153.957522`9.000000000000002", ",", "154.954316216`12.000000000000004", ",", "155.953032523`11.999999999999998", ",", "156.9500983`10.", ",", "157.949313283`11.999999999999996", ",", "158.946628776`12.000000000000004", ",", "159.946033`9.000000000000002", ",", "160.943572`9.000000000000002", ",", "161.943277288`12.", ",", "162.941179`9.000000000000002", ",", "163.941339`9.000000000000002", ",", "164.939406724`12.", ",", "165.939859`9.000000000000002", ",", "166.93827`7.999999999999999", ",", "167.938739111`12.000000000000004", ",", "168.937651439`12.", ",", "169.938474968`12.000000000000004", ",", "170.937913136`12.000000000000004", ",", "171.939085669`11.999999999999998", ",", "172.938930602`11.999999999999998", ",", "173.94033748`11.", ",", "174.940771819`12.000000000000004", ",", "175.94268631`11.", ",", "176.943758055`12.", ",", "177.945954559`12.", ",", "178.947327443`12.", ",", "179.94988116`11.", ",", "180.95197`9.000000000000002", ",", "181.95504`9.000000000000002", ",", "182.95757`9.000000000000002", ",", "183.96091`9.000000000000002", ",", "179.946549953`12.000000000000004", ",", "152.97069`9.000000000000002", ",", "153.96486`9.000000000000002", ",", "154.96339`9.000000000000002", ",", "155.959364025`12.000000000000004", ",", "156.958396`9.000000000000002", ",", "157.954799366`12.", ",", "158.95399487`11.000000000000005", ",", "159.950684379`11.999999999999996", ",", "160.950274844`12.000000000000004", ",", "161.947210498`12.000000000000004", ",", "162.947089`9.000000000000002", ",", "163.944367284`11.999999999999996", ",", "164.944567`9.000000000000002", ",", "165.94218`7.999999999999999", ",", "166.9426`7.000000000000001", ",", "167.940568`9.000000000000002", ",", "168.941259`9.000000000000002", ",", "169.939609`9.000000000000002", ",", "170.940492`9.000000000000002", ",", "171.939448301`11.999999999999996", ",", "172.940513`9.000000000000002", ",", "173.940046178`12.000000000000004", ",", "174.941509181`11.999999999999998", ",", "175.941408631`11.999999999999996", ",", "176.943220651`11.999999999999996", ",", "177.943698766`12.000000000000004", ",", "178.945816145`12.000000000000004", ",", "179.946549953`12.000000000000004", ",", "180.949101246`11.999999999999998", ",", "181.950554096`11.999999999999998", ",", "182.953530439`12.000000000000004", ",", "183.955446515`12.000000000000004", ",", "184.95882`9.000000000000002", ",", "185.96089`9.000000000000002", ",", "186.96459`9.000000000000002", ",", "187.96685`9.000000000000002", ",", "180.947995763`12.000000000000004", ",", "154.974592`9.000000000000002", ",", "155.972303`9.000000000000002", ",", "156.968192445`12.000000000000004", ",", "157.966699`9.000000000000002", ",", "158.963018173`11.999999999999998", ",", "159.961486056`12.000000000000004", ",", "160.958417`9.000000000000002", ",", "161.957291859`12.000000000000004", ",", "162.954330271`11.999999999999998", ",", "163.953534`9.000000000000002", ",", "164.950772514`12.000000000000004", ",", "165.950512`9.000000000000002", ",", "166.948093`9.000000000000002", ",", "167.948047`9.000000000000002", ",", "168.946011`9.000000000000002", ",", "169.946175`9.000000000000002", ",", "170.944476`9.000000000000002", ",", "171.944895`9.000000000000002", ",", "172.94375`7.999999999999999", ",", "173.944454`9.000000000000002", ",", "174.943737`9.000000000000002", ",", "175.944857`9.000000000000002", ",", "176.944472403`12.000000000000004", ",", "177.945778221`12.000000000000004", ",", "178.945929535`11.999999999999998", ",", "179.947464831`12.", ",", "180.947995763`12.000000000000004", ",", "181.950151849`11.999999999999996", ",", "182.951372616`11.999999999999998", ",", "183.954007966`11.999999999999998", ",", "184.955559375`12.000000000000004", ",", "185.958552023`11.999999999999996", ",", "186.96053`9.000000000000002", ",", "187.9637`9.000000000000002", ",", "188.96583`9.000000000000002", ",", "189.96923`9.000000000000002", ",", "183.950931188`12.000000000000004", ",", "157.974562`9.000000000000002", ",", "158.972918`9.000000000000002", ",", "159.968478805`12.000000000000004", ",", "160.967357`9.000000000000002", ",", "161.963497417`12.000000000000004", ",", "162.962523542`12.000000000000004", ",", "163.958954382`12.000000000000004", ",", "164.958279949`11.999999999999998", ",", "165.955027253`11.999999999999996", ",", "166.954816014`11.999999999999996", ",", "167.951808394`12.000000000000004", ",", "168.95177879`11.", ",", "169.949228482`11.999999999999998", ",", "170.949451`9.000000000000002", ",", "171.947292`9.000000000000002", ",", "172.947689`9.000000000000002", ",", "173.946079`9.000000000000002", ",", "174.946717`9.000000000000002", ",", "175.945634`9.000000000000002", ",", "176.946643`9.000000000000002", ",", "177.945876236`11.999999999999996", ",", "178.947070447`12.000000000000004", ",", "179.946704459`11.999999999999996", ",", "180.948197248`12.000000000000004", ",", "181.948204156`12.", ",", "182.950222951`12.", ",", "183.950931188`12.000000000000004", ",", "184.953419264`11.999999999999998", ",", "185.954364127`11.999999999999996", ",", "186.957160466`12.000000000000004", ",", "187.958489105`12.000000000000004", ",", "188.961912868`12.000000000000004", ",", "189.963181378`11.999999999999998", ",", "190.9666`9.000000000000002", ",", "191.96817`9.000000000000002", ",", "186.955753109`12.", ",", "159.982115`9.000000000000002", ",", "160.977589119`12.000000000000004", ",", "161.976002`9.000000000000002", ",", "162.972080535`12.000000000000004", ",", "163.970323`9.000000000000002", ",", "164.967088557`12.", ",", "165.965808`9.000000000000002", ",", "166.962601`9.000000000000002", ",", "167.961572608`12.000000000000004", ",", "168.958791096`11.999999999999998", ",", "169.958220071`11.999999999999996", ",", "170.955716`9.000000000000002", ",", "171.955422961`12.000000000000004", ",", "172.953243`9.000000000000002", ",", "173.953115`9.000000000000002", ",", "174.951381`9.000000000000002", ",", "175.951623`9.000000000000002", ",", "176.950328`9.000000000000002", ",", "177.950989`9.000000000000002", ",", "178.949987641`12.000000000000004", ",", "179.950789084`11.999999999999998", ",", "180.950067916`12.", ",", "181.95121008`11.", ",", "182.950819841`11.999999999999998", ",", "183.952520756`12.", ",", "184.952954982`12.", ",", "185.954986084`11.999999999999998", ",", "186.955753109`12.", ",", "187.958114438`11.999999999999998", ",", "188.959229007`11.999999999999998", ",", "189.961817977`11.999999999999998", ",", "190.963125242`12.000000000000004", ",", "191.96596`9.000000000000002", ",", "192.96747`9.000000000000002", ",", "193.97042`9.000000000000002", ",", "191.96148069`11.", ",", "161.984431`9.000000000000002", ",", "162.98269`9.000000000000002", ",", "163.978035649`12.000000000000004", ",", "164.976762`9.000000000000002", ",", "165.972690753`12.000000000000004", ",", "166.971547969`11.999999999999998", ",", "167.967803678`12.000000000000004", ",", "168.96701927`11.", ",", "169.963577028`12.000000000000004", ",", "170.963184819`12.000000000000004", ",", "171.960023303`12.", ",", "172.959808409`11.999999999999998", ",", "173.957062202`12.", ",", "174.956945835`12.000000000000004", ",", "175.954806`9.000000000000002", ",", "176.954965324`12.000000000000004", ",", "177.953251241`11.999999999999998", ",", "178.953816017`12.000000000000004", ",", "179.952378803`12.000000000000004", ",", "180.953244`9.000000000000002", ",", "181.952110186`11.999999999999998", ",", "182.953126102`11.999999999999998", ",", "183.952489071`12.", ",", "184.954042265`11.999999999999998", ",", "185.953838158`11.999999999999998", ",", "186.955750458`11.999999999999996", ",", "187.955838228`12.", ",", "188.95814747`10.999999999999996", ",", "189.958447048`12.000000000000004", ",", "190.960929718`11.999999999999998", ",", "191.96148069`11.", ",", "192.964151563`11.999999999999998", ",", "193.965182083`12.000000000000004", ",", "194.968126661`11.999999999999998", ",", "195.969639333`12.000000000000004", ",", "192.96292643`11.000000000000005", ",", "163.992201`9.000000000000002", ",", "164.98752`9.000000000000002", ",", "165.985824`9.000000000000002", ",", "166.981665156`12.000000000000004", ",", "167.979881`9.000000000000002", ",", "168.976294942`11.999999999999998", ",", "169.974965`9.000000000000002", ",", "170.971626042`12.000000000000004", ",", "171.970456`9.000000000000002", ",", "172.967501739`11.999999999999998", ",", "173.966861045`11.999999999999996", ",", "174.964112895`12.000000000000004", ",", "175.963648688`12.000000000000004", ",", "176.9613015`9.999999999999998", ",", "177.961082`9.000000000000002", ",", "178.959122266`12.000000000000004", ",", "179.959229446`12.", ",", "180.957625297`12.000000000000004", ",", "181.958076296`12.000000000000004", ",", "182.956846458`11.999999999999998", ",", "183.957476`9.000000000000002", ",", "184.956698`9.000000000000002", ",", "185.957946104`12.000000000000004", ",", "186.957363361`11.999999999999998", ",", "187.958853121`11.999999999999998", ",", "188.958718935`11.999999999999996", ",", "189.960545968`11.999999999999998", ",", "190.960594046`12.000000000000004", ",", "191.962605012`12.000000000000004", ",", "192.96292643`11.000000000000005", ",", "193.965078378`12.000000000000004", ",", "194.965979573`12.000000000000004", ",", "195.968396542`12.000000000000004", ",", "196.969653285`12.", ",", "197.97228`9.000000000000002", ",", "198.973804583`11.999999999999998", ",", "194.964791134`11.999999999999998", ",", "165.994855`9.000000000000002", ",", "166.992979`9.000000000000002", ",", "167.988150742`11.999999999999998", ",", "168.986715`9.000000000000002", ",", "169.982495289`12.000000000000004", ",", "170.981244542`12.000000000000004", ",", "171.977347128`11.999999999999998", ",", "172.976444754`11.999999999999998", ",", "173.972818767`11.999999999999996", ",", "174.972420552`11.999999999999996", ",", "175.968944622`12.", ",", "176.968469481`11.999999999999998", ",", "177.965648724`11.999999999999998", ",", "178.965363404`12.000000000000004", ",", "179.963031477`12.000000000000004", ",", "180.963097285`12.000000000000004", ",", "181.961170656`11.999999999999996", ",", "182.961596703`12.000000000000004", ",", "183.959922251`11.999999999999996", ",", "184.960619`9.000000000000002", ",", "185.959350813`12.000000000000004", ",", "186.960587`9.000000000000002", ",", "187.959395391`12.000000000000004", ",", "188.960833686`12.000000000000004", ",", "189.959931655`11.999999999999998", ",", "190.961676661`12.", ",", "191.961038005`11.999999999999996", ",", "192.962987401`11.999999999999996", ",", "193.962680253`11.999999999999996", ",", "194.964791134`11.999999999999998", ",", "195.964951521`12.000000000000004", ",", "196.967340182`12.", ",", "197.96789279`11.", ",", "198.970593094`12.000000000000004", ",", "199.971440677`11.999999999999998", ",", "200.974512868`11.999999999999998", ",", "201.97574`9.000000000000002", ",", "196.966568662`12.000000000000004", ",", "168.99808`9.000000000000002", ",", "169.996122`9.000000000000002", ",", "170.991878881`12.", ",", "171.990035`9.000000000000002", ",", "172.98623738`11.", ",", "173.984761`9.000000000000002", ",", "174.981274107`11.999999999999998", ",", "175.980099`9.000000000000002", ",", "176.976864908`11.999999999999998", ",", "177.97603192`11.", ",", "178.973212812`12.", ",", "179.972521124`12.000000000000004", ",", "180.970079048`11.999999999999998", ",", "181.969617874`11.999999999999998", ",", "182.967593034`12.000000000000004", ",", "183.967451524`12.000000000000004", ",", "184.965789411`11.999999999999998", ",", "185.965952703`11.999999999999998", ",", "186.964567541`11.999999999999996", ",", "187.965323661`11.999999999999998", ",", "188.963948286`11.999999999999998", ",", "189.964700339`11.999999999999998", ",", "190.963704225`11.999999999999998", ",", "191.964812953`11.999999999999998", ",", "192.964149715`12.000000000000004", ",", "193.96536525`11.", ",", "194.96503464`11.", ",", "195.966569813`12.000000000000004", ",", "196.966568662`12.000000000000004", ",", "197.968242303`12.000000000000004", ",", "198.968765193`11.999999999999996", ",", "199.970725647`12.000000000000004", ",", "200.97165724`11.", ",", "201.973805838`11.999999999999998", ",", "202.975154542`12.000000000000004", ",", "203.977724`9.000000000000002", ",", "204.97987`9.000000000000002", ",", "201.970643011`12.000000000000004", ",", "171.00376`9.000000000000002", ",", "171.998832686`12.", ",", "172.997242`9.000000000000002", ",", "173.992863695`12.", ",", "174.99142327`11.000000000000005", ",", "175.98735458`11.", ",", "176.986279158`12.", ",", "177.982483143`12.", ",", "178.981833861`11.999999999999996", ",", "179.978266394`11.999999999999998", ",", "180.977819311`11.999999999999998", ",", "181.974689964`12.000000000000004", ",", "182.974449841`11.999999999999998", ",", "183.971713051`12.000000000000004", ",", "184.971899086`11.999999999999998", ",", "185.96936179`11.", ",", "186.969814236`11.999999999999996", ",", "187.967577049`12.", ",", "188.968190034`12.000000000000004", ",", "189.966322449`12.000000000000004", ",", "190.967157105`12.000000000000004", ",", "191.965634327`12.000000000000004", ",", "192.966665421`12.000000000000004", ",", "193.965439409`12.000000000000004", ",", "194.966720113`11.999999999999996", ",", "195.965832649`11.999999999999998", ",", "196.967212908`11.999999999999996", ",", "197.966769032`11.999999999999998", ",", "198.968279932`11.999999999999998", ",", "199.968326004`12.000000000000004", ",", "200.970302268`11.999999999999996", ",", "201.970643011`12.000000000000004", ",", "202.972872484`12.", ",", "203.973493933`11.999999999999998", ",", "204.976073386`11.999999999999996", ",", "205.977514066`12.000000000000004", ",", "206.982588545`12.000000000000004", ",", "207.98594`9.000000000000002", ",", "208.99104`9.000000000000002", ",", "209.99451`9.000000000000002", ",", "204.974427541`11.999999999999996", ",", "176.00059`9.000000000000002", ",", "176.996427286`11.999999999999998", ",", "177.994897`9.000000000000002", ",", "178.991089082`12.", ",", "179.989906`9.000000000000002", ",", "180.986257447`11.999999999999998", ",", "181.985667104`12.000000000000004", ",", "182.982192802`11.999999999999998", ",", "183.981873122`11.999999999999996", ",", "184.978791305`12.000000000000004", ",", "185.978325`9.000000000000002", ",", "186.975905897`11.999999999999998", ",", "187.976009782`11.999999999999998", ",", "188.973588428`12.000000000000004", ",", "189.973877149`11.999999999999996", ",", "190.971786154`12.000000000000004", ",", "191.972225`9.000000000000002", ",", "192.970672`9.000000000000002", ",", "193.9712`7.000000000000001", ",", "194.969774335`12.000000000000004", ",", "195.970481151`12.", ",", "196.969574511`11.999999999999998", ",", "197.970483495`12.", ",", "198.969877`9.000000000000002", ",", "199.970962672`12.000000000000004", ",", "200.970818891`11.999999999999998", ",", "201.972105808`12.000000000000004", ",", "202.97234422`11.", ",", "203.973863522`12.000000000000004", ",", "204.974427541`11.999999999999996", ",", "205.97611032`11.", ",", "206.977419429`11.999999999999998", ",", "207.9820187`10.", ",", "208.985358952`12.000000000000004", ",", "209.990073689`12.000000000000004", ",", "210.993477`9.000000000000002", ",", "211.998228`9.000000000000002", ",", "207.976652071`11.999999999999996", ",", "178.003830191`11.999999999999998", ",", "179.00215`9.000000000000002", ",", "179.997918173`12.000000000000004", ",", "180.996623958`11.999999999999998", ",", "181.992671842`11.999999999999998", ",", "182.991874629`11.999999999999998", ",", "183.988142339`11.999999999999996", ",", "184.987609944`11.999999999999996", ",", "185.984238945`12.", ",", "186.98391837`11.", ",", "187.980874338`11.999999999999996", ",", "188.980807`9.000000000000002", ",", "189.978081517`11.999999999999998", ",", "190.978265`9.000000000000002", ",", "191.975785171`12.000000000000004", ",", "192.976173234`11.999999999999998", ",", "193.97401207`11.", ",", "194.97454205`11.", ",", "195.972774109`12.000000000000004", ",", "196.973431124`11.999999999999998", ",", "197.972033959`11.999999999999998", ",", "198.97291665`11.", ",", "199.971826675`11.999999999999996", ",", "200.972884511`11.999999999999996", ",", "201.972159133`11.999999999999998", ",", "202.973390521`12.000000000000004", ",", "203.973043589`11.999999999999996", ",", "204.974481755`12.000000000000004", ",", "205.974465278`11.999999999999998", ",", "206.975896887`11.999999999999998", ",", "207.976652071`11.999999999999996", ",", "208.98109012`11.", ",", "209.984188527`11.999999999999998", ",", "210.988736964`12.000000000000004", ",", "211.991897543`11.999999999999998", ",", "212.996581499`12.", ",", "213.999805408`11.999999999999996", ",", "215.004807`9.000000000000002", ",", "208.980398734`12.", ",", "184.001124`9.000000000000002", ",", "184.997625`9.000000000000002", ",", "185.996597625`11.999999999999998", ",", "186.993157835`11.999999999999998", ",", "187.992265154`12.", ",", "188.989199012`11.999999999999998", ",", "189.988295129`12.000000000000004", ",", "190.985786119`11.999999999999998", ",", "191.985457954`12.000000000000004", ",", "192.982959771`12.", ",", "193.98283396`10.999999999999996", ",", "194.980650737`12.", ",", "195.980666509`11.999999999999996", ",", "196.978864454`12.000000000000004", ",", "197.979206`9.000000000000002", ",", "198.977671961`11.999999999999998", ",", "199.978131829`12.", ",", "200.977009036`11.999999999999998", ",", "201.977742324`12.000000000000004", ",", "202.976876001`12.", ",", "203.977812736`11.999999999999996", ",", "204.977389366`12.", ",", "205.97849913`11.000000000000005", ",", "206.978470679`11.999999999999998", ",", "207.979742196`12.000000000000004", ",", "208.980398734`12.", ",", "209.984120371`11.999999999999998", ",", "210.98726946`11.", ",", "211.991285724`11.999999999999998", ",", "212.994384666`11.999999999999998", ",", "213.998711539`12.000000000000004", ",", "215.001769776`11.999999999999998", ",", "216.006305943`11.999999999999998", ",", "217.00947`9.000000000000002", ",", "218.014316`9.000000000000002", ",", "208.982430435`12.000000000000004", ",", "187.999422048`11.999999999999998", ",", "188.998480562`12.000000000000004", ",", "189.995101185`11.999999999999998", ",", "190.994574485`12.000000000000004", ",", "191.991335149`11.999999999999998", ",", "192.991025275`12.000000000000004", ",", "193.988185606`11.999999999999998", ",", "194.988110728`11.999999999999998", ",", "195.98553458`10.999999999999996", ",", "196.98565963`10.999999999999996", ",", "197.983388616`11.999999999999998", ",", "198.983666063`11.999999999999996", ",", "199.981798604`11.999999999999998", ",", "200.982259764`11.999999999999998", ",", "201.980757541`11.999999999999996", ",", "202.981420103`11.999999999999998", ",", "203.980318121`11.999999999999996", ",", "204.981203322`12.", ",", "205.980481099`11.999999999999998", ",", "206.981593173`12.", ",", "207.981245702`11.999999999999998", ",", "208.982430435`12.000000000000004", ",", "209.982873673`12.000000000000004", ",", "210.986653154`11.999999999999996", ",", "211.988867969`12.000000000000004", ",", "212.99285728`11.", ",", "213.99520135`11.", ",", "214.999419988`11.999999999999998", ",", "216.001915035`11.999999999999998", ",", "217.006334796`11.999999999999998", ",", "218.008973037`11.999999999999998", ",", "219.013744`9.000000000000002", ",", "220.016602`9.000000000000002", ",", "210.987496271`12.", ",", "192.999843112`11.999999999999998", ",", "193.998725085`11.999999999999996", ",", "194.996268098`12.000000000000004", ",", "195.995788077`12.000000000000004", ",", "196.993189215`12.", ",", "197.992837202`11.999999999999998", ",", "198.990532254`12.", ",", "199.990351264`11.999999999999996", ",", "200.988416999`12.", ",", "201.988630236`11.999999999999998", ",", "202.986941984`11.999999999999998", ",", "203.987251326`12.000000000000004", ",", "204.986074483`11.999999999999998", ",", "205.986667036`11.999999999999998", ",", "206.985783502`11.999999999999998", ",", "207.986589977`11.999999999999996", ",", "208.986173143`11.999999999999998", ",", "209.98714771`11.", ",", "210.987496271`12.", ",", "211.990744771`11.999999999999998", ",", "212.992936646`12.", ",", "213.996371733`11.999999999999998", ",", "214.99865257`11.", ",", "216.002423257`11.999999999999998", ",", "217.004718822`11.999999999999998", ",", "218.008694336`12.", ",", "219.011161691`12.000000000000004", ",", "220.015407682`11.999999999999998", ",", "221.01805`9.000000000000002", ",", "222.02233`9.000000000000002", ",", "223.02519`9.000000000000002", ",", "222.017577738`12.000000000000004", ",", "195.005437696`12.", ",", "196.002115223`11.999999999999996", ",", "197.001584351`12.", ",", "197.998678663`12.000000000000004", ",", "198.998370297`12.000000000000004", ",", "199.9956993`9.999999999999998", ",", "200.995628335`12.000000000000004", ",", "201.993263492`11.999999999999998", ",", "202.993386687`12.000000000000004", ",", "203.99142874`10.999999999999996", ",", "204.991718799`12.", ",", "205.990214104`11.999999999999998", ",", "206.990734225`11.999999999999998", ",", "207.98964247`11.000000000000005", ",", "208.990414742`12.000000000000004", ",", "209.989696216`11.999999999999998", ",", "210.990600523`12.000000000000004", ",", "211.990703529`11.999999999999998", ",", "212.993882668`12.000000000000004", ",", "213.995362554`12.000000000000004", ",", "214.998745483`12.000000000000004", ",", "216.00027437`11.", ",", "217.003927675`11.999999999999998", ",", "218.005601256`11.999999999999996", ",", "219.009480204`12.000000000000004", ",", "220.011393981`11.999999999999998", ",", "221.015536782`11.999999999999998", ",", "222.017577738`12.000000000000004", ",", "223.02179`9.000000000000002", ",", "224.02409`9.000000000000002", ",", "225.02844`9.000000000000002", ",", "226.03089`9.000000000000002", ",", "227.035407`9.000000000000002", ",", "228.037986`9.000000000000002", ",", "222.01755173`11.000000000000005", ",", "199.007258147`12.", ",", "200.00657249`11.", ",", "201.003860867`12.", ",", "202.003372847`12.000000000000004", ",", "203.000924647`11.999999999999996", ",", "204.000653204`12.000000000000004", ",", "204.99859396`11.", ",", "205.998666066`11.999999999999996", ",", "206.996949414`11.999999999999998", ",", "207.997138783`12.000000000000004", ",", "208.995953555`11.999999999999998", ",", "209.996407738`11.999999999999998", ",", "210.995536544`12.000000000000004", ",", "211.996202244`11.999999999999998", ",", "212.996189081`12.000000000000004", ",", "213.998971145`11.999999999999998", ",", "215.000341497`11.999999999999998", ",", "216.00319799`11.", ",", "217.004631951`12.", ",", "218.007578322`11.999999999999998", ",", "219.009252149`11.999999999999996", ",", "220.012327405`11.999999999999998", ",", "221.014254762`12.", ",", "222.01755173`11.000000000000005", ",", "223.019735857`11.999999999999998", ",", "224.023249951`12.000000000000004", ",", "225.025565414`12.000000000000004", ",", "226.029386231`12.000000000000004", ",", "227.031835938`11.999999999999998", ",", "228.035729`9.000000000000002", ",", "229.038450228`12.000000000000004", ",", "230.04251`9.000000000000002", ",", "231.04544`9.000000000000002", ",", "232.049772`9.000000000000002", ",", "228.031070292`11.999999999999998", ",", "202.009890686`12.000000000000004", ",", "203.009271619`11.999999999999998", ",", "204.006499668`11.999999999999998", ",", "205.00626857`11.000000000000005", ",", "206.00382727`11.000000000000005", ",", "207.003798105`11.999999999999998", ",", "208.00183994`11.", ",", "209.001991373`12.000000000000004", ",", "210.000494978`12.", ",", "211.000897987`12.000000000000004", ",", "211.999794499`12.000000000000004", ",", "213.000383959`11.999999999999998", ",", "214.000107894`11.999999999999996", ",", "215.002719834`12.000000000000004", ",", "216.003533035`12.", ",", "217.006320327`12.", ",", "218.00714023`11.", ",", "219.010085078`11.999999999999998", ",", "220.011028384`12.", ",", "221.013917338`11.999999999999998", ",", "222.01537453`11.", ",", "223.018502171`12.000000000000004", ",", "224.020211821`11.999999999999998", ",", "225.023611564`12.000000000000004", ",", "226.025409823`12.000000000000004", ",", "227.029177842`12.000000000000004", ",", "228.031070292`11.999999999999998", ",", "229.034957577`12.", ",", "230.037056394`12.000000000000004", ",", "231.04122`9.000000000000002", ",", "232.043638`9.000000000000002", ",", "233.04806`9.000000000000002", ",", "234.050704`9.000000000000002", ",", "227.027752127`11.999999999999998", ",", "206.01450498`11.", ",", "207.011949748`12.000000000000004", ",", "208.011551551`11.999999999999998", ",", "209.009494863`12.000000000000004", ",", "210.009435986`11.999999999999998", ",", "211.007734835`12.", ",", "212.007813822`11.999999999999998", ",", "213.006607643`11.999999999999998", ",", "214.006901798`11.999999999999998", ",", "215.006453625`12.", ",", "216.008720075`12.000000000000004", ",", "217.009346914`12.", ",", "218.011641453`11.999999999999998", ",", "219.012420389`12.000000000000004", ",", "220.014762979`12.000000000000004", ",", "221.015591248`11.999999999999998", ",", "222.017843851`11.999999999999998", ",", "223.019137468`11.999999999999996", ",", "224.021722866`12.", ",", "225.023229585`12.000000000000004", ",", "226.026098089`11.999999999999998", ",", "227.027752127`11.999999999999998", ",", "228.031021112`11.999999999999998", ",", "229.033015243`12.", ",", "230.036294178`11.999999999999998", ",", "231.038558786`12.000000000000004", ",", "232.042027438`11.999999999999998", ",", "233.04455`9.000000000000002", ",", "234.04842`9.000000000000002", ",", "235.051232`9.000000000000002", ",", "236.055296`9.000000000000002", ",", "232.038055325`11.999999999999998", ",", "209.017715682`11.999999999999998", ",", "210.015075342`11.999999999999996", ",", "211.014928413`11.999999999999998", ",", "212.012980288`11.999999999999996", ",", "213.01301014`11.", ",", "214.01149977`11.", ",", "215.01173033`11.", ",", "216.011062115`11.999999999999996", ",", "217.013114328`11.999999999999998", ",", "218.013284499`12.", ",", "219.015536895`12.", ",", "220.015747762`12.000000000000004", ",", "221.018183674`11.999999999999996", ",", "222.018468121`12.000000000000004", ",", "223.020811448`12.000000000000004", ",", "224.021466895`11.999999999999998", ",", "225.023951021`11.999999999999996", ",", "226.024903069`12.000000000000004", ",", "227.02770407`11.000000000000005", ",", "228.028741127`12.000000000000004", ",", "229.03176243`11.", ",", "230.033133843`11.999999999999996", ",", "231.036304343`11.999999999999998", ",", "232.038055325`11.999999999999998", ",", "233.041581843`11.999999999999998", ",", "234.04360123`11.", ",", "235.047510074`12.000000000000004", ",", "236.04987`9.000000000000002", ",", "237.053894`9.000000000000002", ",", "238.056496`9.000000000000002", ",", "231.03588399`11.000000000000005", ",", "212.023204138`11.999999999999998", ",", "213.02110934`10.999999999999996", ",", "214.020918417`11.999999999999998", ",", "215.019185865`12.", ",", "216.019109564`11.999999999999998", ",", "217.018323986`12.000000000000004", ",", "218.020041889`12.", ",", "219.019883143`12.", ",", "220.021875303`11.999999999999998", ",", "221.021877983`12.", ",", "222.023742`9.000000000000002", ",", "223.023962273`11.999999999999998", ",", "224.025625738`12.000000000000004", ",", "225.026130678`12.", ",", "226.027947753`11.999999999999998", ",", "227.028805072`11.999999999999998", ",", "228.031051376`12.000000000000004", ",", "229.032096793`12.000000000000004", ",", "230.034540754`11.999999999999996", ",", "231.03588399`11.000000000000005", ",", "232.038591592`12.000000000000004", ",", "233.040247277`12.000000000000004", ",", "234.043308058`11.999999999999998", ",", "235.045443615`11.999999999999998", ",", "236.048681284`11.999999999999998", ",", "237.051145659`11.999999999999998", ",", "238.05450271`10.999999999999996", ",", "239.05726`9.000000000000002", ",", "240.06098`9.000000000000002", ",", "238.050788247`11.999999999999998", ",", "217.024368791`11.999999999999998", ",", "218.023535671`11.999999999999998", ",", "219.02491916`11.", ",", "220.024723`9.000000000000002", ",", "221.026399`9.000000000000002", ",", "222.026086`9.000000000000002", ",", "223.0277386`9.999999999999998", ",", "224.027604778`11.999999999999998", ",", "225.029390717`12.000000000000004", ",", "226.029338702`11.999999999999998", ",", "227.031156367`12.000000000000004", ",", "228.031374006`11.999999999999998", ",", "229.033505939`12.000000000000004", ",", "230.033939784`12.000000000000004", ",", "231.036293704`11.999999999999998", ",", "232.037156152`11.999999999999996", ",", "233.039635207`12.000000000000004", ",", "234.040952088`11.999999999999998", ",", "235.043929918`11.999999999999998", ",", "236.045568006`11.999999999999998", ",", "237.048730184`12.000000000000004", ",", "238.050788247`11.999999999999998", ",", "239.054293299`11.999999999999998", ",", "240.056591988`11.999999999999998", ",", "241.06033`9.000000000000002", ",", "242.062931`9.000000000000002", ",", "237.048173444`12.000000000000004", ",", "225.033913933`12.", ",", "226.035145`9.000000000000002", ",", "227.034956789`11.999999999999998", ",", "228.03618`9.000000000000002", ",", "229.036263808`12.000000000000004", ",", "230.037827597`12.000000000000004", ",", "231.038245085`11.999999999999998", ",", "232.040108`9.000000000000002", ",", "233.040740546`12.000000000000004", ",", "234.042895038`12.000000000000004", ",", "235.044063267`11.999999999999998", ",", "236.0465696`9.999999999999998", ",", "237.048173444`12.000000000000004", ",", "238.050946405`11.999999999999998", ",", "239.052939025`12.000000000000004", ",", "240.056162182`12.000000000000004", ",", "241.058252431`12.000000000000004", ",", "242.06164118`11.", ",", "243.064279`9.000000000000002", ",", "244.06785`9.000000000000002", ",", "242.058742611`11.999999999999998", ",", "228.038742328`12.000000000000004", ",", "229.040150212`11.999999999999998", ",", "230.039649886`12.000000000000004", ",", "231.041101107`12.000000000000004", ",", "232.041187097`11.999999999999998", ",", "233.042997375`12.000000000000004", ",", "234.043317076`12.000000000000004", ",", "235.04528605`11.", ",", "236.046057964`12.000000000000004", ",", "237.048409658`11.999999999999998", ",", "238.049559894`12.000000000000004", ",", "239.052163381`12.000000000000004", ",", "240.053813545`11.999999999999998", ",", "241.056851456`12.000000000000004", ",", "242.058742611`11.999999999999998", ",", "243.062003092`11.999999999999998", ",", "244.064203907`11.999999999999998", ",", "245.067747154`11.999999999999998", ",", "246.070204627`11.999999999999998", ",", "247.07407`9.000000000000002", ",", "243.06138108`10.999999999999996", ",", "231.04556`9.000000000000002", ",", "232.04659`9.000000000000002", ",", "233.046348`9.000000000000002", ",", "234.047809`9.000000000000002", ",", "235.047946`9.000000000000002", ",", "236.049579`9.000000000000002", ",", "237.049996`9.000000000000002", ",", "238.051984324`11.999999999999998", ",", "239.053024479`12.000000000000004", ",", "240.055300179`12.000000000000004", ",", "241.056829144`12.000000000000004", ",", "242.059549159`11.999999999999998", ",", "243.06138108`10.999999999999996", ",", "244.064284847`12.000000000000004", ",", "245.066452114`11.999999999999998", ",", "246.069774619`11.999999999999998", ",", "247.072093`9.000000000000002", ",", "248.075752`9.000000000000002", ",", "249.07848`9.000000000000002", ",", "247.07035354`11.", ",", "233.050771232`11.999999999999998", ",", "234.050159841`11.999999999999998", ",", "235.051434`9.000000000000002", ",", "236.051413`9.000000000000002", ",", "237.052901`9.000000000000002", ",", "238.053028697`11.999999999999998", ",", "239.054957`9.000000000000002", ",", "240.055529539`11.999999999999998", ",", "241.057653001`11.999999999999998", ",", "242.058835824`12.000000000000004", ",", "243.061389114`11.999999999999998", ",", "244.062752578`12.000000000000004", ",", "245.065491249`12.000000000000004", ",", "246.067223662`12.000000000000004", ",", "247.07035354`11.", ",", "248.072348508`12.000000000000004", ",", "249.075953413`12.000000000000004", ",", "250.078356959`12.000000000000004", ",", "251.082284605`12.000000000000004", ",", "252.08487`9.000000000000002", ",", "247.07030708`10.999999999999996", ",", "235.05658`9.000000000000002", ",", "236.05733`9.000000000000002", ",", "237.057003`9.000000000000002", ",", "238.058281`9.000000000000002", ",", "239.058279`9.000000000000002", ",", "240.059759`9.000000000000002", ",", "241.06023`9.000000000000002", ",", "242.061981`9.000000000000002", ",", "243.063007572`11.999999999999998", ",", "244.065180774`11.999999999999998", ",", "245.066361616`11.999999999999998", ",", "246.068672947`11.999999999999998", ",", "247.07030708`10.999999999999996", ",", "248.073086`9.000000000000002", ",", "249.074986657`11.999999999999998", ",", "250.07831652`11.", ",", "251.080760172`12.000000000000004", ",", "252.08431`9.000000000000002", ",", "253.08688`9.000000000000002", ",", "254.0906`9.000000000000002", ",", "251.079586788`12.000000000000004", ",", "237.06207`9.000000000000002", ",", "238.06141`9.000000000000002", ",", "239.062422`9.000000000000002", ",", "240.062302`9.000000000000002", ",", "241.063726`9.000000000000002", ",", "242.063701552`12.000000000000004", ",", "243.065427`9.000000000000002", ",", "244.066000689`11.999999999999998", ",", "245.068048612`11.999999999999998", ",", "246.068805309`12.000000000000004", ",", "247.071000589`12.000000000000004", ",", "248.072184861`11.999999999999998", ",", "249.074853537`11.999999999999998", ",", "250.076406066`12.000000000000004", ",", "251.079586788`12.000000000000004", ",", "252.081625846`12.000000000000004", ",", "253.085133145`12.000000000000004", ",", "254.087322909`11.999999999999998", ",", "255.091046`9.000000000000002", ",", "256.09344`9.000000000000002", ",", "252.082978512`11.999999999999998", ",", "240.06892`9.000000000000002", ",", "241.068538`9.000000000000002", ",", "242.069745`9.000000000000002", ",", "243.069548`9.000000000000002", ",", "244.070883`9.000000000000002", ",", "245.071324`9.000000000000002", ",", "246.072896`9.000000000000002", ",", "247.073656`9.000000000000002", ",", "248.075471`9.000000000000002", ",", "249.076411`9.000000000000002", ",", "250.078612`9.000000000000002", ",", "251.079992142`11.999999999999998", ",", "252.082978512`11.999999999999998", ",", "253.084824697`11.999999999999998", ",", "254.088022021`12.000000000000004", ",", "255.090273122`11.999999999999998", ",", "256.093598`9.000000000000002", ",", "257.095979`9.000000000000002", ",", "258.09952`9.000000000000002", ",", "257.095104724`12.000000000000004", ",", "242.07343`9.000000000000002", ",", "243.074353`9.000000000000002", ",", "244.074084`9.000000000000002", ",", "245.075385`9.000000000000002", ",", "246.075299023`11.999999999999998", ",", "247.076847`9.000000000000002", ",", "248.077194714`11.999999999999998", ",", "249.079034`9.000000000000002", ",", "250.079521264`11.999999999999998", ",", "251.081575017`12.000000000000004", ",", "252.082466855`11.999999999999998", ",", "253.085185236`12.000000000000004", ",", "254.08685422`11.", ",", "255.089962202`11.999999999999998", ",", "256.091773117`12.000000000000004", ",", "257.095104724`12.000000000000004", ",", "258.097076`9.000000000000002", ",", "259.100595`9.000000000000002", ",", "260.102678`9.000000000000002", ",", "258.098431319`11.999999999999998", ",", "245.080829`9.000000000000002", ",", "246.081886`9.000000000000002", ",", "247.081635`9.000000000000002", ",", "248.082823`9.000000000000002", ",", "249.083013`9.000000000000002", ",", "250.08442`9.000000000000002", ",", "251.084839`9.000000000000002", ",", "252.08656`9.000000000000002", ",", "253.08728`9.000000000000002", ",", "254.089656`9.000000000000002", ",", "255.091082705`12.000000000000004", ",", "256.094059025`11.999999999999998", ",", "257.095541368`11.999999999999998", ",", "258.098431319`11.999999999999998", ",", "259.100509`9.000000000000002", ",", "260.103652`9.000000000000002", ",", "261.105721`9.000000000000002", ",", "262.108865`9.000000000000002", ",", "255.093241131`12.000000000000004", ",", "248.086596`9.000000000000002", ",", "249.087833`9.000000000000002", ",", "250.08751`9.000000000000002", ",", "251.089012`9.000000000000002", ",", "252.088976521`11.999999999999998", ",", "253.090678`9.000000000000002", ",", "254.090955253`12.000000000000004", ",", "255.093241131`12.000000000000004", ",", "256.094282666`12.000000000000004", ",", "257.09687719`11.", ",", "258.098207`9.000000000000002", ",", "259.101031`9.000000000000002", ",", "260.102643`9.000000000000002", ",", "261.105749`9.000000000000002", ",", "262.107301`9.000000000000002", ",", "263.110552`9.000000000000002", ",", "264.112345`9.000000000000002", ",", "260.105504`9.000000000000002", ",", "251.09436`9.000000000000002", ",", "252.095371`9.000000000000002", ",", "253.09521`9.000000000000002", ",", "254.096454`9.000000000000002", ",", "255.096681`9.000000000000002", ",", "256.098629`9.000000000000002", ",", "257.099555`9.000000000000002", ",", "258.101814`9.000000000000002", ",", "259.102901`9.000000000000002", ",", "260.105504`9.000000000000002", ",", "261.106883`9.000000000000002", ",", "262.109634`9.000000000000002", ",", "263.111293`9.000000000000002", ",", "264.114038`9.000000000000002", ",", "265.115839`9.000000000000002", ",", "266.119305`9.000000000000002", ",", "263.112547`9.000000000000002", ",", "253.100689`9.000000000000002", ",", "254.100184`9.000000000000002", ",", "255.10134`9.000000000000002", ",", "256.101166194`12.000000000000004", ",", "257.10299`9.000000000000002", ",", "258.103489`9.000000000000002", ",", "259.105637`9.000000000000002", ",", "260.10644`9.000000000000002", ",", "261.108766556`12.000000000000004", ",", "262.109925`9.000000000000002", ",", "263.112547`9.000000000000002", ",", "264.113985`9.000000000000002", ",", "265.116704`9.000000000000002", ",", "266.117956`9.000000000000002", ",", "267.121529`9.000000000000002", ",", "268.123644`9.000000000000002", ",", "255.107398`9.000000000000002", ",", "255.107398`9.000000000000002", ",", "256.108127`9.000000000000002", ",", "257.107722`9.000000000000002", ",", "258.109231`9.000000000000002", ",", "259.10961`9.000000000000002", ",", "260.1113`9.000000000000002", ",", "261.112056`9.000000000000002", ",", "262.114084`9.000000000000002", ",", "263.114988`9.000000000000002", ",", "264.117404`9.000000000000002", ",", "265.118601`9.000000000000002", ",", "266.121029`9.000000000000002", ",", "267.122377`9.000000000000002", ",", "268.125445`9.000000000000002", ",", "269.12746`9.000000000000002", ",", "270.130712`9.000000000000002", ",", "259.1145`9.000000000000002", ",", "258.113168`9.000000000000002", ",", "259.1145`9.000000000000002", ",", "260.114422071`12.000000000000004", ",", "261.116117`9.000000000000002", ",", "262.116398`9.000000000000002", ",", "263.118322`9.000000000000002", ",", "264.118931`9.000000000000002", ",", "265.121114693`12.000000000000004", ",", "266.122065`9.000000000000002", ",", "267.124425`9.000000000000002", ",", "268.125606`9.000000000000002", ",", "269.128755`9.000000000000002", ",", "270.130329`9.000000000000002", ",", "271.133472`9.000000000000002", ",", "272.135158`9.000000000000002", ",", "273.13822`9.000000000000002", ",", "262.122892`9.000000000000002", ",", "260.12197`9.000000000000002", ",", "261.121664`9.000000000000002", ",", "262.122892`9.000000000000002", ",", "263.123035`9.000000000000002", ",", "264.124604`9.000000000000002", ",", "265.125147`9.000000000000002", ",", "266.126942`9.000000000000002", ",", "267.12765`9.000000000000002", ",", "268.129755`9.000000000000002", ",", "269.130694`9.000000000000002", ",", "270.133616`9.000000000000002", ",", "271.135179`9.000000000000002", ",", "272.138032`9.000000000000002", ",", "273.139618`9.000000000000002", ",", "274.14244`9.000000000000002", ",", "275.14425`9.000000000000002", ",", "263.128558`9.000000000000002", ",", "263.128558`9.000000000000002", ",", "264.128394885`11.999999999999998", ",", "265.130085`9.000000000000002", ",", "266.130097`9.000000000000002", ",", "267.131789`9.000000000000002", ",", "268.132162`9.000000000000002", ",", "269.134056`9.000000000000002", ",", "270.13465`9.000000000000002", ",", "271.137657`9.000000000000002", ",", "272.139052`9.000000000000002", ",", "273.141986`9.000000000000002", ",", "274.143131`9.000000000000002", ",", "275.145952`9.000000000000002", ",", "276.147208`9.000000000000002", ",", "277.149841`9.000000000000002", ",", "265.136151`9.000000000000002", ",", "265.136151`9.000000000000002", ",", "266.137299`9.000000000000002", ",", "267.137307`9.000000000000002", ",", "268.138728`9.000000000000002", ",", "269.139055`9.000000000000002", ",", "270.140657`9.000000000000002", ",", "271.141139`9.000000000000002", ",", "272.143738`9.000000000000002", ",", "273.144913`9.000000000000002", ",", "274.147492`9.000000000000002", ",", "275.148647`9.000000000000002", ",", "276.151156`9.000000000000002", ",", "277.15242`9.000000000000002", ",", "278.154812`9.000000000000002", ",", "279.156193`9.000000000000002", ",", "281.162061`9.000000000000002", ",", "267.144341`9.000000000000002", ",", "268.143795`9.000000000000002", ",", "269.145124`9.000000000000002", ",", "270.14472`9.000000000000002", ",", "271.146062`9.000000000000002", ",", "272.146317`9.000000000000002", ",", "273.148863`9.000000000000002", ",", "274.149492`9.000000000000002", ",", "275.152176`9.000000000000002", ",", "276.153034`9.000000000000002", ",", "277.155647`9.000000000000002", ",", "278.156469`9.000000000000002", ",", "279.158861`9.000000000000002", ",", "280.159795`9.000000000000002", ",", "281.162061`9.000000000000002", ",", "272.153615`9.000000000000002", ",", "272.153615`9.000000000000002", ",", "273.153682`9.000000000000002", ",", "274.155713`9.000000000000002", ",", "275.156142`9.000000000000002", ",", "276.158493`9.000000000000002", ",", "277.159519`9.000000000000002", ",", "278.161604`9.000000000000002", ",", "279.162468`9.000000000000002", ",", "280.164473`9.000000000000002", ",", "281.165372`9.000000000000002", ",", "282.167486`9.000000000000002", ",", "283.168415`9.000000000000002", ",", "283.171792`9.000000000000002", ",", "277.163943`9.000000000000002", ",", "278.164312`9.000000000000002", ",", "279.166546`9.000000000000002", ",", "280.167039`9.000000000000002", ",", "281.169286`9.000000000000002", ",", "282.169765`9.000000000000002", ",", "283.171792`9.000000000000002", ",", "284.172384`9.000000000000002", ",", "285.174105`9.000000000000002", ",", "283.176451`9.000000000000002", ",", "283.176451`9.000000000000002", ",", "284.17808`9.000000000000002", ",", "285.178732`9.000000000000002", ",", "286.180481`9.000000000000002", ",", "287.181045`9.000000000000002", ",", "285.183698`9.000000000000002", ",", "285.183698`9.000000000000002", ",", "286.183855`9.000000000000002", ",", "287.185599`9.000000000000002", ",", "288.185689`9.000000000000002", ",", "289.187279`9.000000000000002", ",", "287.191186`9.000000000000002", ",", "287.191186`9.000000000000002", ",", "288.192492`9.000000000000002", ",", "289.192715`9.000000000000002", ",", "290.194141`9.000000000000002", ",", "291.194384`9.000000000000002", ",", "292.199786`9.000000000000002", ",", "289.198862`9.000000000000002", ",", "290.19859`9.000000000000002", ",", "291.200011`9.000000000000002", ",", "292.199786`9.000000000000002", ",", "291.206564`9.000000000000002", ",", "291.206564`9.000000000000002", ",", "292.207549`9.000000000000002", ",", "293.21467`9.000000000000002", ",", "293.21467`9.000000000000002"}], "}"}]}], SequenceForm[ "static double atomic_masses[] =", { 1.00782503207`12.000000000000004, 1.00782503207`12.000000000000004, 2.01410177785`11.999999999999998, 2.01410177785`11.999999999999998, 3.01604927767`11.999999999999998, 3.01604927767`11.999999999999998, 4.027806424`10., 5.035311488`10.000000000000004, 6.044942594`10.000000000000004, 7.052749`7.000000000000001, 4.00260325415`12.000000000000004, 3.01602931914`11.999999999999998, 4.00260325415`12.000000000000004, 5.012223624`9.999999999999998, 6.018889124`10.000000000000004, 7.028020618`10.000000000000004, 8.033921897`9.999999999999998, 9.043950286`10.000000000000004, 10.052398837`10.999999999999996, 7.016004548`10.000000000000004, 3.030775`7.000000000000001, 4.027185558`10., 5.0125378`7.999999999999999, 6.015122794`10.000000000000004, 7.016004548`10.000000000000004, 8.022487362`10.000000000000004, 9.026789505`9.999999999999998, 10.035481259`11.000000000000005, 11.043797715`11., 12.05378`7.999999999999999, 9.012182201`9.999999999999998, 5.04079`7.000000000000001, 6.019726317`9.999999999999998, 7.016929828`10.000000000000004, 8.005305103`9.999999999999998, 9.012182201`9.999999999999998, 10.013533818`11.000000000000005, 11.021657749`11., 12.026920737`11., 13.035693007`11., 14.04289292`10.000000000000004, 15.05346`7.999999999999999, 16.06192`7.999999999999999, 11.009305406`11., 6.04681`7.000000000000001, 7.029917901`9.999999999999998, 8.024607233`10.000000000000004, 9.013328782`10., 10.012936992`11.000000000000005, 11.009305406`11., 12.014352104`11., 13.017780217`11., 14.025404009`11., 15.031103021`11., 16.039808829`11., 17.046989906`11., 18.05617`7.999999999999999, 19.06373`7.999999999999999, 12, 8.037675025`10.000000000000004, 9.031036689`9.999999999999998, 10.016853228`11.000000000000005, 11.011433613`11., 12, 13.00335483778`13., 14.0032419887`12.000000000000004, 15.010599256`11.000000000000005, 16.014701252`11., 17.022586116`10.999999999999998, 18.026759354`11.000000000000005, 19.034805018`11.000000000000004, 20.040319754`10.999999999999998, 21.04934`7.999999999999999, 22.0572`7.999999999999999, 14.00307400478`13., 10.041653674`10.999999999999996, 11.026090956`11., 12.018613197`11.000000000000005, 13.005738609`10.999999999999996, 14.00307400478`13., 15.00010889823`13., 16.006101658`11.000000000000004, 17.008450261`11., 18.014078959`10.999999999999998, 19.017028697`11.000000000000005, 20.023365807`11., 21.02710824`10., 22.034394934`10.999999999999998, 23.04122`7.999999999999999, 24.05104`7.999999999999999, 25.06066`7.999999999999999, 15.99491461956`13., 12.034404895`11., 13.024812213`11., 14.00859625`10.000000000000004, 15.003065617`11., 15.99491461956`13., 16.999131703`10.999999999999996, 17.999161001`10.999999999999998, 19.00358013`10., 20.004076742`11., 21.008655886`11., 22.009966947`11., 23.015687659`11., 24.020472917`11., 25.02946`7.999999999999999, 26.03834`7.999999999999999, 27.04826`7.999999999999999, 28.05781`7.999999999999999, 18.998403224`10.999999999999998, 14.03506`7.999999999999999, 15.018009103`11., 16.011465724`11., 17.002095237`11., 18.000937956`10.999999999999996, 18.998403224`10.999999999999998, 19.999981315`11., 20.999948951`11., 22.002998815`11., 23.003574631`11.000000000000004, 24.008115485`11., 25.012101747`11., 26.019615555`11., 27.026760086`11., 28.03567`7.999999999999999, 29.04326`7.999999999999999, 30.0525`7.999999999999999, 31.060429`7.999999999999999, 19.99244017542`13., 16.025761262`10.999999999999998, 17.017671504`11., 18.005708213`11.000000000000005, 19.001880248`11., 19.99244017542`13., 20.993846684`11.000000000000004, 21.991385113`11.000000000000004, 22.994466904`11., 23.993610779`11., 24.997736888`11.000000000000005, 26.000461206`11., 27.007589903`11., 28.012071575`11., 29.019385933`11.000000000000005, 30.024801045`11., 31.03311`7.999999999999999, 32.04002`7.999999999999999, 33.04938`7.999999999999999, 34.057028`7.999999999999999, 22.98976928087`13., 18.025969`7.999999999999999, 19.013877499`11., 20.007351328`11., 20.997655206`11., 21.994436425`11.000000000000004, 22.98976928087`13., 23.990962782`11., 24.989953968`11., 25.992633`7.999999999999999, 26.994076788`11.000000000000005, 27.998938`7.999999999999999, 29.002861`7.999999999999999, 30.008976`7.999999999999999, 31.013585452`11., 32.02046656`10., 33.026719756`11., 34.03517`7.999999999999999, 35.042493`7.999999999999999, 36.05148`7.999999999999999, 37.05934`7.999999999999999, 23.985041699`11.000000000000005, 19.03547`7.000000000000001, 20.018862545`11., 21.01171291`9.999999999999998, 21.999573843`11., 22.994123669`11., 23.985041699`11.000000000000005, 24.985836917`11.000000000000005, 25.982592929`11., 26.984340585`11., 27.983876825`11., 28.9886`6.0000000000000036, 29.990434`7.999999999999999, 30.996546`7.999999999999999, 31.998975`7.999999999999999, 33.005254`7.999999999999999, 34.009456424`11.000000000000005, 35.01734`7.999999999999999, 36.023`7.999999999999999, 37.0314`7.999999999999999, 38.03757`7.999999999999999, 39.046772`7.999999999999999, 40.05393`7.999999999999999, 26.981538627`11., 21.02804`7.999999999999999, 22.01952`7.999999999999999, 23.007267432`11., 23.999938865`11., 24.990428095`11.000000000000005, 25.986891692`11.000000000000005, 26.981538627`11., 27.981910306`10.999999999999996, 28.980445046`11., 29.982960256`11., 30.983946619`11., 31.988124489`11., 32.990843336`11., 33.996851837`11.000000000000005, 34.999860235`11., 36.006207204`11., 37.01067782`10., 38.017231021`10.999999999999996, 39.02297`7.000000000000001, 40.03145`7.999999999999999, 41.03833`7.999999999999999, 42.04689`7.999999999999999, 27.97692653246`13., 22.03453`7.999999999999999, 23.02552`7.999999999999999, 24.011545616`11., 25.004105574`10.999999999999996, 25.992329921`11., 26.986704905`11., 27.97692653246`13., 28.9764947`9.000000000000002, 29.973770171`11., 30.975363226999998`17., 31.974148082`11., 32.97800022`10., 33.978575524`11., 34.984583575`11.000000000000005, 35.986599477`11., 36.99293608`10., 37.995633601`11., 39.002070013`11., 40.005869121`11., 41.01456`7.000000000000001, 42.01979`7.999999999999999, 43.02866`7.999999999999999, 44.03526`7.999999999999999, 30.973761629`10.999999999999996, 24.03435`7.999999999999999, 25.02026`7.999999999999999, 26.01178`7.999999999999999, 26.999230236`11., 27.992314761`11., 28.981800606`11., 29.978313789`11., 30.973761629`10.999999999999996, 31.973907274`11.000000000000005, 32.971725543`11., 33.973636257`11., 34.973314117`11.000000000000005, 35.97825968`10., 36.979608946`11., 37.984156827`11., 38.986179475`11., 39.991296951`11., 40.994335435`11., 42.001007913`11., 43.00619`7.000000000000001, 44.01299`7.999999999999999, 45.01922`7.999999999999999, 46.02738`7.999999999999999, 31.972070999`11., 26.02788`7.999999999999999, 27.018833`7.999999999999999, 28.004372763`11.000000000000005, 28.996608049`11., 29.984903249`11., 30.979554728`11., 31.972070999`11., 32.971458759`10.999999999999996, 33.967866902`11., 34.969032161`11., 35.96708076`10., 36.971125567`11., 37.971163317`10.999999999999996, 38.975134306`10.999999999999996, 39.975451728`11., 40.979582149`11.000000000000005, 41.981022419`11., 42.98715479`10.000000000000004, 43.99021339`10.000000000000004, 44.996508112`11., 46.00075`7.999999999999999, 47.00859`7.999999999999999, 48.01417`7.999999999999999, 49.023619`7.999999999999999, 34.968852682`10.999999999999996, 28.02851`7.999999999999999, 29.01411`7.999999999999999, 30.00477`7.999999999999999, 30.992413086`11., 31.985689901`11., 32.977451887`11., 33.973762819`11.000000000000005, 34.968852682`10.999999999999996, 35.968306981`11., 36.965902591`11., 37.968010425`11., 38.968008164`10.999999999999996, 39.970415472`11., 40.970684525`11., 41.973254804`11., 42.974054403`11., 43.978281071`11., 44.980286886`11.000000000000005, 45.98421004`10.000000000000004, 46.98871`7.999999999999999, 47.99495`7.999999999999999, 49.00032`7.999999999999999, 50.00784`7.999999999999999, 51.01449`7.999999999999999, 39.96238312251`13., 30.02156`7.999999999999999, 31.012123`7.999999999999999, 31.997637984`11., 32.989925709`11., 33.980271244`11.000000000000005, 34.975257585`11., 35.967545105`11., 36.96677632`9.999999999999998, 37.962732394`11.000000000000005, 38.964313231`11., 39.96238312251`13., 40.964500611`11.000000000000005, 41.963045736`11., 42.965636056`11., 43.964924033`11., 44.968039956`11., 45.968094129`11., 46.972186792`11., 47.97454`7.999999999999999, 48.98052`7.999999999999999, 49.98443`7.999999999999999, 50.99163`7.999999999999999, 51.99678`7.999999999999999, 53.00494`7.999999999999999, 38.963706679`11., 32.02192`7.999999999999999, 33.00726`7.999999999999999, 33.99841`7.999999999999999, 34.988009692`11., 35.981292235`11., 36.973375889`11., 37.969081184`10.999999999999996, 38.963706679`11., 39.963998475`11., 40.961825762`11., 41.96240281`10., 42.96071554`9.999999999999998, 43.961556804`11., 44.960699493`11., 45.961976864`11., 46.961678473`11., 47.965513535`11., 48.967450928`10.999999999999996, 49.972783355`11., 50.97638`7.999999999999999, 51.98261`7.999999999999999, 52.98712`7.999999999999999, 53.9942`7.999999999999999, 54.99971`7.999999999999999, 39.962590983`11., 34.01412`7.999999999999999, 35.00494`7.999999999999999, 35.993087063`11.000000000000005, 36.985870269`11., 37.976318452`11., 38.970719725`10.999999999999996, 39.962590983`11., 40.962278062`11., 41.958618014`11., 42.958766628`11., 43.955481754`11., 44.956186566`11., 45.953692587`11., 46.954546006`10.999999999999996, 47.952534177`11., 48.955674148`11., 49.957518962`11., 50.961499214`11., 51.9651`5.999999999999999, 52.97005`7.999999999999999, 53.97435`7.999999999999999, 54.98055`7.999999999999999, 55.98557`7.999999999999999, 56.992356`7.999999999999999, 44.955911909`11., 36.01492`7.999999999999999, 37.00305`7.999999999999999, 37.9947`7.999999999999999, 38.984790002`11., 39.977967407`10.999999999999996, 40.969251125`11., 41.965516429`10.999999999999996, 42.961150658`11., 43.959402752`11., 44.955911909`11., 45.95517189`9.999999999999998, 46.952407508`11., 47.952231468`11., 48.950023975`11., 49.952187685`11., 50.953603368`11., 51.956675468`10.999999999999996, 52.95961`7.999999999999999, 53.963264561`11., 54.968243949`11., 55.97287`7.999999999999999, 56.97779`7.999999999999999, 57.98371`7.999999999999999, 58.98922`7.999999999999999, 59.99571`7.999999999999999, 47.947946281`11., 38.00977`7.999999999999999, 39.00161`7.999999999999999, 39.990498838`11., 40.983145`7.999999999999999, 41.973030902`11., 42.968522499`11., 43.959690069`11., 44.958125616`11., 45.952631555`11., 46.951763088`10.999999999999996, 47.947946281`11., 48.947869982`11., 49.944791194`10.999999999999996, 50.946614955`11., 51.946897311`11., 52.949727171`10.999999999999996, 53.951052401`11., 54.955265056`10.999999999999996, 55.958199639`11., 56.963989137`11.000000000000005, 57.96697`7.999999999999999, 58.97293`7.999999999999999, 59.97676`7.999999999999999, 60.9832`7.999999999999999, 61.98749`7.999999999999999, 62.99442`7.999999999999999, 50.943959507`11., 40.01109`7.999999999999999, 40.99978`7.999999999999999, 41.99123`7.999999999999999, 42.98065`7.999999999999999, 43.97411`7.000000000000001, 44.965775808`11., 45.960200481`11., 46.95490894`10.000000000000004, 47.952253707`10.999999999999996, 48.948516101`11., 49.947158485`11., 50.943959507`11., 51.944775479`11., 52.944337979`10.999999999999996, 53.946439854`11., 54.947233701`11., 55.950530966`11., 56.952561432`11., 57.956834136`11., 58.960207407`11., 59.965026862`11., 60.96848`7.999999999999999, 61.97378`7.999999999999999, 62.97755`7.999999999999999, 63.98347`7.999999999999999, 64.98792`7.999999999999999, 51.940507472`11., 42.00643`7.999999999999999, 42.99771`7.999999999999999, 43.985549`7.999999999999999, 44.97964`7.000000000000001, 45.968358635`11.000000000000005, 46.962900046`10.999999999999996, 47.954031716`11.000000000000005, 48.951335721`11., 49.946044205`11., 50.944767431`11., 51.940507472`11., 52.940649386`11., 53.938880395`11., 54.940839672`11., 55.940653139`11., 56.943613013`10.999999999999996, 57.944353129`11., 58.948586367`11., 59.950076033`11., 60.954717204`11., 61.95661319`9.999999999999998, 62.96186`7.999999999999999, 63.96441`7.999999999999999, 64.97016`7.999999999999999, 65.97338`7.999999999999999, 66.97955`7.999999999999999, 54.938045141`11.000000000000005, 44.00687`7.999999999999999, 44.99451`7.999999999999999, 45.98672`7.999999999999999, 46.9761`7.999999999999999, 47.96852`7.000000000000001, 48.959618005`11., 49.95423823`9.999999999999998, 50.948210787`10.999999999999996, 51.945565464`11., 52.941290117`11., 53.940358854`10.999999999999996, 54.938045141`11.000000000000005, 55.93890491`10.000000000000004, 56.938285378`11., 57.939981549`11., 58.940440237`11., 59.942911246`11., 60.944652638`11., 61.94842822`9.999999999999998, 62.95023999`10.000000000000004, 63.95424909`9.999999999999998, 64.956336065`10.999999999999996, 65.96108`7.999999999999999, 66.96414`7.999999999999999, 67.9693`7.999999999999999, 68.97284`7.999999999999999, 55.934937475`11., 45.014578`7.999999999999999, 46.00081`7.999999999999999, 46.99289`7.999999999999999, 47.980504`7.999999999999999, 48.97361`7.999999999999999, 49.962988982`11., 50.956819538`11., 51.948113875`11., 52.945307942`11., 53.939610501`11., 54.938293357`11., 55.934937475`11., 56.935393969`10.999999999999996, 57.933275558`10.999999999999996, 58.934875464`11.000000000000005, 59.934071683`11., 60.936745281`11., 61.936767442`11., 62.940369091`11., 63.941201265`11., 64.94538027`9.999999999999998, 65.946780638`11.000000000000005, 66.950947244`11.000000000000005, 67.9537`5.999999999999999, 68.95878`7.999999999999999, 69.96146`8.000000000000004, 70.96672`7.999999999999999, 71.96962`7.999999999999999, 58.933195048`11., 47.01149`7.999999999999999, 48.00176`7.999999999999999, 48.98972`7.999999999999999, 49.98154`7.999999999999999, 50.97072`7.999999999999999, 51.96359`7.999999999999999, 52.954218896`10.999999999999996, 53.948459635`11., 54.941999029`11., 55.939839278`11., 56.936291373`11., 57.935752814`11., 58.933195048`11., 59.933817059`11., 60.932475763`11., 61.934050563`11., 62.933611611`11., 63.935809908`11., 64.93647846`10.000000000000004, 65.939762004`11., 66.940889529`10.999999999999996, 67.944873058`11., 68.94632`7.000000000000001, 69.951`5.000000000000002, 70.9529`5.999999999999999, 71.95781`8.000000000000004, 72.96024`7.999999999999999, 73.96538`7.999999999999999, 74.96833`7.999999999999999, 57.935342907`11., 48.01975`7.999999999999999, 49.00966`7.999999999999999, 49.99593`7.999999999999999, 50.98772`7.999999999999999, 51.97568`7.999999999999999, 52.96847`7.999999999999999, 53.957905495`11., 54.951330251`11., 55.942132022`11., 56.939793526`11., 57.935342907`11., 58.934346705`11., 59.930786372`11., 60.931056033`11., 61.928345115`10.999999999999996, 62.929669374`11., 63.927965959`10.999999999999996, 64.930084304`11., 65.929139334`11., 66.931569414`11.000000000000005, 67.931868789`11., 68.935610269`11., 69.9365`5.999999999999999, 70.940736283`11., 71.942092682`10.999999999999998, 72.94647`7.999999999999999, 73.94807`7.999999999999999, 74.95287`7.999999999999999, 75.95533`8.000000000000004, 76.96055`7.999999999999999, 77.96318`7.999999999999999, 62.929597474`11.000000000000005, 51.99718`7.999999999999999, 52.98555`7.999999999999999, 53.97671`7.999999999999999, 54.96605`7.999999999999999, 55.95856`7.999999999999999, 56.949211078`11., 57.944538499`11., 58.939498028`11., 59.93736503`9.999999999999998, 60.933457821`11., 61.932583745`11.000000000000005, 62.929597474`11.000000000000005, 63.929764183`11., 64.927789485`11., 65.928868813`11., 66.927730314`10.999999999999996, 67.929610889`11., 68.929429269`11.000000000000005, 69.932392343`11., 70.932676833`11., 71.935820307`11., 72.936675282`11., 73.939874862`11., 74.9419`5.999999999999999, 75.945275026`10.999999999999998, 76.94785`7.999999999999999, 77.95196`7.999999999999999, 78.95456`7.999999999999999, 79.96087`7.999999999999999, 63.929142222`11., 53.99295`7.999999999999999, 54.98398`7.999999999999999, 55.97238`7.999999999999999, 56.964788`7.999999999999999, 57.954591555`11., 58.949263764`11., 59.941827035`11., 60.939510635`11., 61.934329764`11., 62.933211566`11., 63.929142222`11., 64.929240984`10.999999999999996, 65.926033419`11., 66.927127345`11., 67.924844154`11., 68.926550281`11., 69.925319274`11., 70.927721599`11., 71.926857951`11., 72.929779104`10.999999999999998, 73.929458609`11., 74.932936741`11., 75.93329357`9.999999999999998, 76.936958967`11., 77.938440216`11., 78.942652`8.000000000000004, 79.944342348`11., 80.95048`8.000000000000004, 81.95442`7.999999999999999, 82.96103`7.999999999999999, 68.925573587`11., 55.99491`7.999999999999999, 56.98293`7.999999999999999, 57.97425`7.999999999999999, 58.96337`7.999999999999999, 59.95706`7.999999999999999, 60.949446287`11.000000000000005, 61.944175238`11., 62.939294196`10.999999999999996, 63.936838747`11., 64.932734754`11., 65.93158901`10.000000000000004, 66.928201703`11.000000000000005, 67.927980084`11., 68.925573587`11., 69.926021972`11., 70.924701349`11., 71.926366268`11., 72.925174682`11., 73.926945762`11., 74.926500246`11., 75.928827626`11., 76.9291543`9.000000000000002, 77.93160818`10.000000000000004, 78.93289326`9.999999999999998, 79.936515781`11., 80.937752355`10.999999999999998, 81.94299`7.999999999999999, 82.94698`7.999999999999999, 83.95265`7.999999999999999, 84.957`7.999999999999999, 85.96312`7.999999999999999, 73.921177767`11., 57.99101`7.999999999999999, 58.98175`7.999999999999999, 59.97019`7.999999999999999, 60.96379`7.999999999999999, 61.95465`7.999999999999999, 62.94964`7.999999999999999, 63.941653`7.999999999999999, 64.939436406`11., 65.933843453`11., 66.93273407`9.999999999999998, 67.92809424`9.999999999999998, 68.927964533`11., 69.924247381`10.999999999999998, 70.924950954`11., 71.922075815`11., 72.923458945`11., 73.921177767`11., 74.922858948`11., 75.921402557`11., 76.923548591`11., 77.922852739`11., 78.925400995`11., 79.925372392`11., 80.928820467`11., 81.929549725`11., 82.93462`7.999999999999999, 83.93747`7.999999999999999, 84.94303`7.999999999999999, 85.94649`7.999999999999999, 86.95251`7.999999999999999, 87.95691`7.999999999999999, 88.96383`7.999999999999999, 74.921596478`11., 59.99313`7.999999999999999, 60.98062`7.999999999999999, 61.9732`7.999999999999999, 62.96369`7.999999999999999, 63.957572`7.999999999999999, 64.949564`7.999999999999999, 65.94471`7.000000000000001, 66.939186071`11., 67.936769069`11., 68.932273675`11., 69.930924826`11., 70.927112428`11., 71.926752283`11.000000000000005, 72.923824844`11., 73.923928692`11., 74.921596478`11., 75.922394021`11.000000000000004, 76.920647286`11.000000000000005, 77.921827281`11., 78.920947934`11., 79.922533816`11., 80.922132287`11., 81.924504067`11., 82.924980024`11., 83.929058`7.999999999999999, 84.93202`7.999999999999999, 85.9365`7.999999999999999, 86.9399`7.999999999999999, 87.94494`7.999999999999999, 88.94939`7.999999999999999, 89.9555`7.999999999999999, 90.96043`7.999999999999999, 91.9668`7.999999999999999, 79.916521271`11., 64.96466`7.999999999999999, 65.95521`7.999999999999999, 66.95009`7.999999999999999, 67.941798`7.999999999999999, 68.939557817`11., 69.933390644`11., 70.932241822`11., 71.927112352`11., 72.926765345`11., 73.922476436`10.999999999999998, 74.922523368`11., 75.919213597`11., 76.919914038`11., 77.91730909`10.000000000000004, 78.918499098`11., 79.916521271`11., 80.917992474`11., 81.916699401`11.000000000000005, 82.919118473`11., 83.918462354`10.999999999999998, 84.922245053`11., 85.924271579`11., 86.928521358`11., 87.931423998`11., 88.93645`8.000000000000004, 89.93996`7.999999999999999, 90.94596`7.999999999999999, 91.94992`7.999999999999999, 92.95629`7.999999999999999, 93.96049`7.999999999999999, 78.918337087`11., 66.96479`7.999999999999999, 67.958516`7.999999999999999, 68.950106`7.999999999999999, 69.944792`7.999999999999999, 70.93874`7.000000000000001, 71.936644572`11., 72.931691524`11., 73.929891034`11., 74.925776207`11., 75.924541469`11., 76.921379082`11., 77.921145706`11., 78.918337087`11., 79.918529296`11., 80.916290563`11., 81.916804119`11., 82.915180421`11.000000000000005, 83.916478974`11., 84.915608403`11., 85.918797577`11., 86.920711324`11., 87.924065926`11., 88.926385334`11., 89.930627737`11.000000000000004, 90.933968095`11.000000000000004, 91.939258714`11., 92.94305`7.999999999999999, 93.94868`7.999999999999999, 94.95287`7.999999999999999, 95.95853`7.999999999999999, 96.9628`7.999999999999999, 85.910610729`11., 68.96518`7.999999999999999, 69.955259`7.999999999999999, 70.949625738`11., 71.942092038`11., 72.939289195`11., 73.933084369`11.000000000000004, 74.930945746`11., 75.925910078`11., 76.92467`7.000000000000001, 77.920364783`11., 78.920082431`11., 79.916378965`11., 80.916592015`11., 81.9134836`9.000000000000002, 82.914136099`11., 83.911506687`11., 84.912527331`11., 85.910610729`11., 86.913354862`11.000000000000004, 87.914446969`11.000000000000004, 88.917630581`11., 89.919516555`11., 90.923445215`11., 91.92615621`9.999999999999998, 92.931274357`11.000000000000005, 93.93436`7.999999999999999, 94.93984`7.999999999999999, 95.94307`7.999999999999999, 96.94856`7.999999999999999, 97.95191`7.999999999999999, 98.9576`7.999999999999999, 99.96114`7.999999999999999, 84.911789737`11., 70.96532`7.999999999999999, 71.95908`8.000000000000004, 72.950561`7.999999999999999, 73.944264751`10.999999999999998, 74.93857`7.000000000000001, 75.935072226`11., 76.930408`7.999999999999999, 77.928141`7.999999999999999, 78.92398946`10.000000000000004, 79.92251925`10.000000000000004, 80.918995913`11., 81.918208598`11., 82.915109701`11., 83.914384821`11., 84.911789737`11., 85.911167419`11.000000000000004, 86.909180526`11., 87.911315588`11., 88.912278016`11., 89.914801694`11., 90.916536958`11.000000000000005, 91.9197289`9.000000000000002, 92.922041876`11., 93.926404946`11., 94.929302889`11., 95.934272637`11., 96.937351916`11., 97.941790668`11., 98.945379283`11., 99.94987`7.999999999999999, 100.953196445`11.999999999999998, 101.95887`9.000000000000002, 87.905612124`11., 72.96597`7.999999999999999, 73.95631`7.999999999999999, 74.949949568`11.000000000000004, 75.941766782`11., 76.937944782`11., 77.93218`6.999999999999997, 78.929708`7.999999999999999, 79.924521013`11., 80.923211846`11., 81.918401639`11., 82.917556701`11., 83.913425275`10.999999999999998, 84.912932803`11., 85.909260204`11., 86.908877124`11., 87.905612124`11., 88.907450675`11., 89.907737888`11., 90.910203095`11., 91.911037858`11.000000000000004, 92.914025634`11., 93.915361312`11., 94.919358766`11., 95.921696802`11., 96.926152923`11., 97.928452934`11., 98.933240926`11., 99.935351911`11.000000000000004, 100.940517888`11.999999999999998, 101.943018987`11.999999999999998, 102.94895`9.000000000000002, 103.95233`9.000000000000002, 104.95858`9.000000000000002, 88.905848295`11., 75.95845`7.999999999999999, 76.949645`7.999999999999999, 77.94361`7.999999999999999, 78.937351634`11., 79.93428`7.000000000000001, 80.929127468`11., 81.926792451`11., 82.922354243`11., 83.920388264`11., 84.916433039`11.000000000000005, 85.914885576`11., 86.91087573`9.999999999999998, 87.909501146`11., 88.905848295`11., 89.907151886`11.000000000000005, 90.907304791`11., 91.908949143`11., 92.909582713`11., 93.911595245`11., 94.912820621`10.999999999999998, 95.915891343`11., 96.918133995`11., 97.92220302`10., 98.924636204`10.999999999999998, 99.927756586`11., 100.93031385`11., 101.933555695`12.000000000000004, 102.93673`9.000000000000002, 103.94105`9.000000000000002, 104.94487`9.000000000000002, 105.94979`9.000000000000002, 106.95414`9.000000000000002, 107.95948`9.000000000000002, 89.904704416`11., 77.95523`7.999999999999999, 78.94916`7.999999999999999, 79.9404`5.999999999999999, 80.937210026`11., 81.931087`7.999999999999999, 82.928653801`11.000000000000005, 83.92325`7.999999999999999, 84.921471182`11., 85.916473591`11., 86.914816252`11., 87.910226904`11., 88.9088895`9.000000000000005, 89.904704416`11., 90.905645767`11., 91.905040847`11., 92.906476006`11., 93.906315192`11., 94.9080426`9.000000000000002, 95.908273386`11., 96.910953109`11.000000000000005, 97.912734892`11., 98.916512106`11., 99.917761889`10.999999999999998, 100.921140415`11.999999999999998, 101.922981285`12.000000000000004, 102.926599606`12.000000000000004, 103.92878`9.000000000000002, 104.93305`9.000000000000002, 105.93591`9.000000000000002, 106.94075`9.000000000000002, 107.94396`9.000000000000002, 108.94924`9.000000000000002, 109.95287`9.000000000000002, 92.906378058`11., 80.94903`7.999999999999999, 81.94313`7.999999999999999, 82.936705382`11., 83.93357`7.999999999999999, 84.927912447`11., 85.925038326`11., 86.920361108`11., 87.918332163`11., 88.913418245`11.000000000000005, 89.911264845`11., 90.906996243`11., 91.907193888`11.000000000000004, 92.906378058`11., 93.907283888`11.000000000000005, 94.906835792`11., 95.908100647`11., 96.908098556`11.000000000000004, 97.910328412`11., 98.911618375`11., 99.914181619`11., 100.915252025`11.999999999999998, 101.918037614`12.000000000000004, 102.919143842`11.999999999999998, 103.922464701`11.999999999999998, 104.923936545`12.000000000000004, 105.92797`9.000000000000002, 106.93031`9.000000000000002, 107.93484`9.000000000000002, 108.93763`9.000000000000002, 109.94244`9.000000000000002, 110.94565`9.000000000000002, 111.95083`9.000000000000002, 112.9547`9.000000000000002, 97.905408169`11.000000000000005, 82.94874`7.999999999999999, 83.94009`7.999999999999999, 84.93655`7.999999999999999, 85.930695904`11., 86.927326502`11., 87.921953241`11., 88.919480009`11., 89.913936896`11., 90.911750194`10.999999999999998, 91.906810991`11., 92.90681261`9.999999999999998, 93.905088269`11., 94.905842129`11., 95.904679477`11., 96.906021465`11., 97.905408169`11.000000000000005, 98.90771187`10.000000000000004, 99.907477336`11., 100.910347001`11.999999999999998, 101.91029736`11., 102.913207142`11.999999999999998, 103.913763625`11.999999999999998, 104.91697461`10.999999999999996, 105.918136802`12.000000000000004, 106.921692604`12.000000000000004, 107.923453`9.000000000000002, 108.92781`9.000000000000002, 109.92973`9.000000000000002, 110.93441`9.000000000000002, 111.93684`9.000000000000002, 112.94188`9.000000000000002, 113.94492`9.000000000000002, 114.95029`9.000000000000002, 98.906254747`11., 84.94883`7.999999999999999, 85.94288`7.999999999999999, 86.93653`7.999999999999999, 87.932678`7.999999999999999, 88.927167`7.999999999999999, 89.923556564`11., 90.918427639`11., 91.915260166`11., 92.910248984`10.999999999999998, 93.909657002`11., 94.907657084`11., 95.907871383`10.999999999999998, 96.906365358`11., 97.907215966`11.000000000000004, 98.906254747`11., 99.90765778`10.000000000000004, 100.907314659`11.999999999999998, 101.909215019`11.999999999999998, 102.909181351`12.000000000000004, 103.911447454`12.000000000000004, 104.911660566`11.999999999999998, 105.914357927`12.000000000000004, 106.915079572`12.000000000000004, 107.918461226`11.999999999999998, 108.919982665`12.000000000000004, 109.923820483`11.999999999999998, 110.92569283`11., 111.929146493`12.000000000000004, 112.93159`9.000000000000002, 113.93588`9.000000000000002, 114.93869`9.000000000000002, 115.94337`9.000000000000002, 116.94648`9.000000000000002, 117.95148`9.000000000000002, 101.904349312`12.000000000000004, 86.94918`8.000000000000004, 87.94026`7.999999999999999, 88.93611`7.999999999999999, 89.92989`7.999999999999999, 90.926292`7.999999999999999, 91.92012`7.999999999999999, 92.917052034`11., 93.911359711`11.000000000000005, 94.910412929`11., 95.907597835`11., 96.9075547`9.000000000000002, 97.905287132`11., 98.905939302`11., 99.904219476`11., 100.905582087`11.999999999999998, 101.904349312`12.000000000000004, 102.906323847`11.999999999999998, 103.905432701`12.000000000000004, 104.907752866`12.000000000000004, 105.907329433`11.999999999999998, 106.909905089`11.999999999999998, 107.910173465`11.999999999999998, 108.913203233`11.999999999999998, 109.914136041`11.999999999999998, 110.917696`9.000000000000002, 111.918965`9.000000000000002, 112.922487194`11.999999999999998, 113.924281`9.000000000000002, 114.928686173`11.999999999999998, 115.93081`9.000000000000002, 116.93558`9.000000000000002, 117.93782`9.000000000000002, 118.94284`9.000000000000002, 119.94531`9.000000000000002, 102.905504292`11.999999999999998, 88.948837`8.000000000000004, 89.94287`7.999999999999999, 90.93655`7.999999999999999, 91.93198`7.999999999999999, 92.92574`7.999999999999999, 93.921698`7.999999999999999, 94.91589874`9.999999999999998, 95.914460631`11., 96.911336797`11.000000000000005, 97.910708158`11., 98.908132104`11., 99.90812155`10.000000000000004, 100.906163625`12.000000000000004, 101.906843196`12.000000000000004, 102.905504292`11.999999999999998, 103.906655518`12.000000000000004, 104.905693821`12.000000000000004, 105.907287135`12.000000000000004, 106.906748423`12.000000000000004, 107.908728018`11.999999999999998, 108.908737289`11.999999999999998, 109.911136411`11.999999999999998, 110.911585913`11.999999999999998, 111.914394159`11.999999999999998, 112.915530627`11.999999999999998, 113.918806`9.000000000000002, 114.920334`9.000000000000002, 115.924062`9.000000000000002, 116.92598`9.000000000000002, 117.93007`9.000000000000002, 118.93211`9.000000000000002, 119.93641`9.000000000000002, 120.93872`9.000000000000002, 121.94321`9.000000000000002, 105.903485715`12.000000000000004, 90.94911`7.999999999999999, 91.94042`7.999999999999999, 92.93591`7.999999999999999, 93.92877`7.999999999999999, 94.92469`7.999999999999999, 95.918164359`11., 96.916479073`11., 97.912720902`11., 98.911767833`11., 99.908505886`11., 100.908289242`11.999999999999998, 101.905608544`12.000000000000004, 102.906087307`11.999999999999998, 103.904035834`11.999999999999998, 104.90508492`11., 105.903485715`12.000000000000004, 106.905133481`12.000000000000004, 107.903891701`11.999999999999998, 108.905950451`11.999999999999998, 109.905153254`11.999999999999998, 110.907670734`11.999999999999998, 111.907314058`11.999999999999998, 112.910152908`11.999999999999998, 113.910362638`11.999999999999998, 114.913683824`11.999999999999998, 115.914158662`12.000000000000004, 116.917841338`11.999999999999998, 117.9189843`10., 118.92311`9.000000000000002, 119.924691878`12.000000000000004, 120.92887`9.000000000000002, 121.93055`9.000000000000002, 122.93493`9.000000000000002, 123.93688`9.000000000000002, 106.90509682`11.000000000000005, 92.94978`7.999999999999999, 93.94278`8.000000000000004, 94.93548`7.999999999999999, 95.93068`7.999999999999999, 96.923972412`11., 97.921566201`11., 98.917597178`11., 99.916104255`11.000000000000004, 100.912802233`11.999999999999998, 101.911685`9.000000000000002, 102.90897272`10.999999999999996, 103.908629157`11.999999999999998, 104.906528661`11.999999999999998, 105.906668921`11.999999999999998, 106.90509682`11.000000000000005, 107.905955556`12.000000000000004, 108.904752292`11.999999999999998, 109.906107231`12.000000000000004, 110.905291157`11.999999999999998, 111.907004814`11.999999999999998, 112.906566579`11.999999999999998, 113.908803704`12.000000000000004, 114.908762698`12.000000000000004, 115.911359933`11.999999999999998, 116.911684562`12.000000000000004, 117.914582768`11.999999999999998, 118.915665059`11.999999999999998, 119.918787384`12.000000000000004, 120.919848046`12.000000000000004, 121.92353`9.000000000000002, 122.9249`9.000000000000002, 123.92864`9.000000000000002, 124.93043`9.000000000000002, 125.9345`9.000000000000002, 126.93677`9.000000000000002, 127.94117`9.000000000000002, 128.94369`9.000000000000002, 129.950448`9.000000000000002, 113.90335854`11., 94.94987`7.999999999999999, 95.93977`7.999999999999999, 96.93494`7.999999999999999, 97.927395546`11., 98.92501`7.999999999999999, 99.920289525`11., 100.918681538`11.999999999999998, 101.914462258`12.000000000000004, 102.913419246`11.999999999999998, 103.909849475`11.999999999999998, 104.909467905`11.999999999999998, 105.90645941`10.999999999999996, 106.906617928`12.000000000000004, 107.904183683`11.999999999999998, 108.904982293`12.000000000000004, 109.90300207`11., 110.904178107`11.999999999999998, 111.902757809`12.000000000000004, 112.904401662`12.000000000000004, 113.90335854`11., 114.905430969`12.000000000000004, 115.904755809`12.000000000000004, 116.907218618`12.000000000000004, 117.90691453`10.999999999999996, 118.909921597`12.000000000000007, 119.909850129`11.999999999999998, 120.912977363`11.999999999999998, 121.913332432`12.000000000000004, 122.917002999`11.999999999999998, 123.917647616`11.999999999999998, 124.92124637`11., 125.922353321`12.000000000000004, 126.926443864`11.999999999999998, 127.927762285`12.000000000000004, 128.93215`9.000000000000002, 129.933901937`12.000000000000004, 130.94067`9.000000000000002, 131.94555`9.000000000000002, 114.903878484`12.000000000000004, 96.94954`7.999999999999999, 97.94214`7.999999999999999, 98.93422`7.999999999999999, 99.931110851`11., 100.92634`9.000000000000002, 101.924090238`12.000000000000004, 102.919914188`11.999999999999998, 103.918296171`12.000000000000004, 104.91467354`10.999999999999996, 105.913465411`11.999999999999998, 106.9102951`10.000000000000004, 107.90969818`10.999999999999996, 108.907150507`12.000000000000004, 109.907165274`12.000000000000004, 110.905103278`11.999999999999998, 111.905532331`11.999999999999998, 112.904057761`12.000000000000004, 113.904913876`11.999999999999998, 114.903878484`12.000000000000004, 115.905259703`11.999999999999998, 116.904513564`11.999999999999998, 117.906354367`12.000000000000004, 118.90584535`11., 119.907959608`11.999999999999998, 120.907845822`12.000000000000004, 121.91027601`11., 122.910438276`11.999999999999998, 123.913175231`11.999999999999998, 124.913600588`12.000000000000004, 125.916463857`12.000000000000004, 126.917353091`12.000000000000004, 127.920172328`11.999999999999998, 128.92169698`11., 129.924970049`11.999999999999996, 130.926851767`12.000000000000004, 131.93299026`11.000000000000005, 132.93781`9.000000000000002, 133.94415`9.000000000000002, 134.94933`9.000000000000002, 119.902194676`11.999999999999998, 98.94933`7.999999999999999, 99.939044343`11., 100.93606`9.000000000000002, 101.930295324`11.999999999999998, 102.9281`9.000000000000002, 103.923143223`11.999999999999998, 104.921349437`12.000000000000004, 105.91688062`11., 106.915644329`12.000000000000004, 107.911925378`11.999999999999998, 108.911283214`12.000000000000004, 109.907842791`12.000000000000004, 110.90773446`11., 111.904818207`12.000000000000004, 112.905170577`12.000000000000004, 113.902778869`11.999999999999998, 114.903342397`11.999999999999998, 115.90174053`11., 116.902951656`12.000000000000004, 117.901603167`12.000000000000004, 118.90330763`10.999999999999996, 119.902194676`11.999999999999998, 120.90423548`11., 121.903439046`11.999999999999998, 122.905720838`11.999999999999998, 123.905273946`12.000000000000004, 124.907784125`11.999999999999998, 125.90765328`11., 126.910360024`12.000000000000004, 127.910536624`11.999999999999998, 128.913479`9.000000000000002, 129.913967295`11.999999999999998, 130.916999769`12.000000000000004, 131.917815713`11.999999999999998, 132.923829249`11.999999999999996, 133.928291765`12., 134.93473`9.000000000000002, 135.93934`9.000000000000002, 136.94599`9.000000000000002, 120.903815686`12.000000000000004, 102.93969`9.000000000000002, 103.936472`9.000000000000002, 104.931486348`11.999999999999998, 105.928791`9.000000000000002, 106.92415`9.000000000000002, 107.92216`9.000000000000002, 108.918132426`12.000000000000004, 109.916753`9.000000000000002, 110.913163`9.000000000000002, 111.912398009`11.999999999999998, 112.909371672`12.000000000000004, 113.909269`9.000000000000002, 114.906598`9.000000000000002, 115.906793629`11.999999999999998, 116.904835941`11.999999999999998, 117.905528731`12.000000000000004, 118.903942009`12.000000000000004, 119.905072427`12.000000000000004, 120.903815686`12.000000000000004, 121.905173651`11.999999999999998, 122.90421397`11., 123.905935743`11.999999999999998, 124.905253818`11.999999999999998, 125.90724748`11., 126.906923609`11.999999999999998, 127.909169001`11.999999999999998, 128.909148442`12.000000000000004, 129.911656324`11.999999999999998, 130.911982275`12., 131.914466896`11.999999999999998, 132.91525163`10.999999999999996, 133.920379744`11.999999999999998, 134.925165771`11.999999999999998, 135.93035`9.000000000000002, 136.93531`9.000000000000002, 137.94079`9.000000000000002, 138.94598`9.000000000000002, 129.906224399`11.999999999999998, 104.94364`9.000000000000002, 105.937504237`11.999999999999998, 106.935006`9.000000000000002, 107.929444597`11.999999999999998, 108.927415515`11.999999999999998, 109.922407316`11.999999999999998, 110.921110692`11.999999999999998, 111.917013672`11.999999999999998, 112.915891`9.000000000000002, 113.912089`9.000000000000002, 114.911902`9.000000000000002, 115.90846`7.999999999999999, 116.908644719`11.999999999999998, 117.905827581`11.999999999999998, 118.906403645`11.999999999999998, 119.904020222`12.000000000000007, 120.904936424`12.000000000000004, 121.903043898`12.000000000000004, 122.904270029`11.999999999999998, 123.902817896`11.999999999999998, 124.904430731`11.999999999999998, 125.903311696`12.000000000000004, 126.905226336`12.000000000000004, 127.904463056`11.999999999999998, 128.906598238`12., 129.906224399`11.999999999999998, 130.908523864`11.999999999999998, 131.90855316`11., 132.910955306`11.999999999999998, 133.911368737`11.999999999999996, 134.916448592`12., 135.920101246`11.999999999999998, 136.925322954`12.000000000000004, 137.92922`9.000000000000002, 138.93473`9.000000000000002, 139.93885`9.000000000000002, 140.94465`9.000000000000002, 141.94908`9.000000000000002, 126.904472681`11.999999999999998, 107.943475`9.000000000000002, 108.938149417`12.000000000000004, 109.935242`9.000000000000002, 110.930276`9.000000000000002, 111.92797`9.000000000000002, 112.923640583`11.999999999999998, 113.92185`9.000000000000002, 114.918048`9.000000000000002, 115.916808633`11.999999999999998, 116.91365`7.999999999999999, 117.913074`9.000000000000002, 118.910074`9.000000000000002, 119.910048173`11.999999999999998, 120.907366811`12.000000000000004, 121.907589284`12.000000000000004, 122.905588965`12.000000000000004, 123.906209852`12.000000000000004, 124.904630164`12.000000000000004, 125.905624153`11.999999999999998, 126.904472681`11.999999999999998, 127.905809443`12.000000000000004, 128.904987722`11.999999999999998, 129.906674247`12., 130.906124609`12.000000000000004, 131.907997381`12.000000000000004, 132.907796939`11.999999999999996, 133.909744465`11.999999999999998, 134.910048121`12.000000000000004, 135.914653993`11.999999999999998, 136.91787084`11.000000000000005, 137.922349591`12.000000000000004, 138.926099478`11.999999999999998, 139.931`9.000000000000002, 140.93503`9.000000000000002, 141.94018`9.000000000000002, 142.94456`9.000000000000002, 143.94999`9.000000000000002, 131.904153457`11.999999999999996, 109.944278068`12.000000000000004, 110.941602`9.000000000000002, 111.935623112`11.999999999999998, 112.933341174`12.000000000000004, 113.927980306`11.999999999999998, 114.92629392`10.999999999999996, 115.921581087`11.999999999999998, 116.920358735`11.999999999999998, 117.916178655`11.999999999999998, 118.915410688`12.000000000000004, 119.911784244`11.999999999999998, 120.911461829`12.000000000000004, 121.908367632`11.999999999999998, 122.90848191`11., 123.905893003`11.999999999999998, 124.906395464`12.000000000000004, 125.904273634`11.999999999999998, 126.905183723`11.999999999999998, 127.903531275`11.999999999999998, 128.904779435`11.999999999999998, 129.903508007`12., 130.905082362`11.999999999999998, 131.904153457`11.999999999999996, 132.905910722`12.000000000000004, 133.905394464`12.000000000000004, 134.907227495`12.000000000000004, 135.907218794`11.999999999999998, 136.911562125`12., 137.913954475`12.000000000000004, 138.918792936`12.000000000000004, 139.921640943`12., 140.926648049`12.000000000000004, 141.92970959`11., 142.93511`9.000000000000002, 143.93851`9.000000000000002, 144.94407`9.000000000000002, 145.94775`9.000000000000002, 146.95356`9.000000000000002, 132.905451932`12., 111.950301`9.000000000000002, 112.944493274`12.000000000000004, 113.94145`9.000000000000002, 114.93591`9.000000000000002, 115.933367`9.000000000000002, 116.928670701`11.999999999999998, 117.926559494`12.000000000000004, 118.922377304`11.999999999999998, 119.920677253`12.000000000000004, 120.917229209`11.999999999999998, 121.916113434`11.999999999999998, 122.912996036`12.000000000000004, 123.912257798`11.999999999999998, 124.90972827`11., 125.909451977`11.999999999999998, 126.907417525`11.999999999999998, 127.907748866`12.000000000000004, 128.906064426`11.999999999999998, 129.906708552`11.999999999999996, 130.905463926`11.999999999999998, 131.90643426`11., 132.905451932`12., 133.906718475`12.000000000000004, 134.905977008`12.000000000000004, 135.907311576`11.999999999999998, 136.907089473`11.999999999999996, 137.911016704`12.000000000000004, 138.913363999`12., 139.917282354`11.999999999999998, 140.920045752`11.999999999999998, 141.924298927`11.999999999999998, 142.92735175`11., 143.932076914`11.999999999999996, 144.93552617`11., 145.940289423`12.000000000000004, 146.944155008`12.000000000000004, 147.949218153`11.999999999999998, 148.95293`9.000000000000002, 149.95817`9.000000000000002, 150.96219`9.000000000000002, 137.905247237`12.000000000000004, 113.950675405`11.999999999999998, 114.94737`9.000000000000002, 115.94138`9.000000000000002, 116.938499`9.000000000000002, 117.93304`9.000000000000002, 118.930659661`12.000000000000004, 119.926044974`12.000000000000004, 120.924054499`11.999999999999998, 121.919904`9.000000000000002, 122.918781036`12.000000000000004, 123.915093603`12.000000000000004, 124.914472912`12.000000000000004, 125.911250177`12.000000000000004, 126.911093797`11.999999999999998, 127.908317698`11.999999999999998, 128.908679439`11.999999999999998, 129.906320811`12.000000000000004, 130.906941118`12.000000000000004, 131.905061288`11.999999999999998, 132.90600749`11., 133.904508383`12.000000000000004, 134.905688591`12., 135.904575945`12.000000000000004, 136.905827384`12., 137.905247237`12.000000000000004, 138.908841341`11.999999999999998, 139.910604505`11.999999999999998, 140.914411009`12., 141.91645341`11., 142.920626719`12., 143.922952853`12., 144.927627032`12.000000000000004, 145.930219572`11.999999999999998, 146.934945`9.000000000000002, 147.937720047`12.000000000000004, 148.94258`9.000000000000002, 149.94568`9.000000000000002, 150.95081`9.000000000000002, 151.95427`9.000000000000002, 152.95961`9.000000000000002, 138.906353267`11.999999999999998, 116.950068`9.000000000000002, 117.94673`9.000000000000002, 118.94099`9.000000000000002, 119.93807`9.000000000000002, 120.93301`9.000000000000002, 121.93071`9.000000000000002, 122.92624`9.000000000000002, 123.924574275`11.999999999999998, 124.920816034`11.999999999999998, 125.919512667`11.999999999999998, 126.916375448`12.000000000000004, 127.915585177`12.000000000000004, 128.912692815`12.000000000000004, 129.912368724`11.999999999999998, 130.91007`7.999999999999999, 131.910101145`11.999999999999998, 132.908218`9.000000000000002, 133.908514011`11.999999999999996, 134.906976844`12.000000000000004, 135.907635536`12.000000000000004, 136.906493598`12.000000000000004, 137.90711193`11., 138.906353267`11.999999999999998, 139.909477645`12., 140.910962152`11.999999999999998, 141.91407913`11., 142.91606272`11., 143.919599647`11.999999999999998, 144.921645401`11.999999999999996, 145.92579346`10.999999999999996, 146.928235284`11.999999999999998, 147.932228868`11.999999999999998, 148.934734`9.000000000000002, 149.93877`9.000000000000002, 150.94172`9.000000000000002, 151.94625`9.000000000000002, 152.94962`9.000000000000002, 153.9545`9.000000000000002, 154.95835`9.000000000000002, 139.905438706`11.999999999999996, 118.95276`9.000000000000002, 119.94664`9.000000000000002, 120.94342`9.000000000000002, 121.93791`9.000000000000002, 122.9354`9.000000000000002, 123.93041`9.000000000000002, 124.92844`9.000000000000002, 125.923971`9.000000000000002, 126.922731`9.000000000000002, 127.918911`9.000000000000002, 128.918102`9.000000000000002, 129.914736`9.000000000000002, 130.914422`9.000000000000002, 131.911460487`11.999999999999996, 132.91151502`11., 133.908924821`11.999999999999998, 134.909151396`11.999999999999998, 135.907172422`11.999999999999998, 136.907805577`11.999999999999996, 137.905991321`12.000000000000004, 138.906652651`11.999999999999998, 139.905438706`11.999999999999996, 140.90827627`11., 141.909244205`12., 142.91238591`11., 143.913647336`12.000000000000004, 144.917233135`12., 145.918759009`12., 146.922673954`11.999999999999998, 147.92443241`10.999999999999996, 148.928399883`11.999999999999996, 149.930408931`12.000000000000004, 150.933976196`12.000000000000004, 151.93654`9.000000000000002, 152.94058`9.000000000000002, 153.94342`9.000000000000002, 154.94804`9.000000000000002, 155.95126`9.000000000000002, 156.95634`9.000000000000002, 140.907652769`11.999999999999996, 120.955364`9.000000000000002, 121.95181`9.000000000000002, 122.94596`9.000000000000002, 123.94296`9.000000000000002, 124.93783`9.000000000000002, 125.93531`9.000000000000002, 126.93083`9.000000000000002, 127.928791`9.000000000000002, 128.925095`9.000000000000002, 129.92359`7.999999999999999, 130.920259`9.000000000000002, 131.919255`9.000000000000002, 132.916330532`11.999999999999998, 133.915711737`11.999999999999998, 134.913111745`11.999999999999998, 135.912691611`11.999999999999996, 136.910705455`12.000000000000004, 137.910754636`11.999999999999998, 138.908938399`12., 139.909075874`11.999999999999998, 140.907652769`11.999999999999996, 141.910044806`12., 142.910816926`12.000000000000004, 143.913305245`12.000000000000004, 144.9145117`9.999999999999998, 145.917644336`12.000000000000004, 146.918995992`11.999999999999996, 147.922135026`11.999999999999996, 148.923717651`11.999999999999996, 149.926672997`12., 150.928318618`12.000000000000004, 151.931499225`11.999999999999998, 152.933838905`11.999999999999998, 153.937518153`11.999999999999998, 154.94012`9.000000000000002, 155.94427`9.000000000000002, 156.94743`9.000000000000002, 157.95198`9.000000000000002, 158.9555`9.000000000000002, 141.907723297`12.000000000000004, 123.95223`9.000000000000002, 124.94888`9.000000000000002, 125.94322`9.000000000000002, 126.9405`9.000000000000002, 127.93539`9.000000000000002, 128.933188`9.000000000000002, 129.928506`9.000000000000002, 130.927247`9.000000000000002, 131.923321237`12.000000000000004, 132.922348`9.000000000000002, 133.918790181`11.999999999999998, 134.91818116`11., 135.914976035`11.999999999999998, 136.914567137`11.999999999999998, 137.911949961`12., 138.911978288`12.000000000000004, 139.909552`9.000000000000002, 140.909609854`12.000000000000004, 141.907723297`12.000000000000004, 142.90981429`11., 143.910087274`12.000000000000004, 144.912573636`12., 145.913116939`11.999999999999998, 146.916100441`11.999999999999998, 147.916893288`11.999999999999996, 148.920148842`12.000000000000004, 149.920890888`12.000000000000004, 150.923828929`12.000000000000004, 151.924682219`12., 152.927698232`12.000000000000004, 153.929477307`11.999999999999998, 154.932932`9.000000000000002, 155.935018114`12.000000000000004, 156.93903`9.000000000000002, 157.9416`9.000000000000002, 158.94609`9.000000000000002, 159.94909`9.000000000000002, 160.95388`9.000000000000002, 144.912749023`12.000000000000004, 125.95752`9.000000000000002, 126.95163`9.000000000000002, 127.94842`9.000000000000002, 128.94316`9.000000000000002, 129.94045`9.000000000000002, 130.93587`9.000000000000002, 131.93375`9.000000000000002, 132.929782`9.000000000000002, 133.928353`9.000000000000002, 134.924876`9.000000000000002, 135.923565829`11.999999999999998, 136.920479493`11.999999999999996, 137.919548281`11.999999999999996, 138.916804082`12.000000000000004, 139.916041789`11.999999999999998, 140.913555054`11.999999999999998, 141.912874471`12., 142.910932616`11.999999999999998, 143.912590843`11.999999999999998, 144.912749023`12.000000000000004, 145.914696305`12.000000000000004, 146.915138545`12., 147.917474618`11.999999999999996, 148.918334155`12.000000000000004, 149.920983561`12., 150.921206973`11.999999999999998, 151.923496795`12.000000000000004, 152.924116889`11.999999999999998, 153.926463943`11.999999999999998, 154.928101267`12.000000000000004, 155.931056736`11.999999999999998, 156.933039369`12., 157.936561407`11.999999999999998, 158.93897`9.000000000000002, 159.94299`9.000000000000002, 160.94586`9.000000000000002, 161.95029`9.000000000000002, 162.95368`9.000000000000002, 151.919732425`12.000000000000004, 127.95808`9.000000000000002, 128.95464`9.000000000000002, 129.94892`9.000000000000002, 130.94611`9.000000000000002, 131.94069`9.000000000000002, 132.93867`9.000000000000002, 133.93397`9.000000000000002, 134.93252`7.999999999999999, 135.928275527`12., 136.926971746`12.000000000000004, 137.923243961`11.999999999999998, 138.922296605`12.000000000000004, 139.918994687`12.000000000000004, 140.918476488`12.000000000000004, 141.915197641`11.999999999999998, 142.914628338`11.999999999999996, 143.911999478`12., 144.913410353`12.000000000000004, 145.9130409`10.000000000000004, 146.914897923`11.999999999999998, 147.914822674`12.000000000000004, 148.917184735`11.999999999999996, 149.917275539`12.000000000000004, 150.919932409`12.000000000000004, 151.919732425`12.000000000000004, 152.922097356`12.000000000000004, 153.922209273`12.000000000000004, 154.924640161`11.999999999999998, 155.925527887`12.000000000000004, 156.928358717`12.000000000000004, 157.929991317`11.999999999999998, 158.933211271`11.999999999999998, 159.93514`9.000000000000002, 160.93883`9.000000000000002, 161.94122`9.000000000000002, 162.94536`9.000000000000002, 163.94828`9.000000000000002, 164.95298`9.000000000000002, 152.921230339`12., 129.963569`9.000000000000002, 130.957753`9.000000000000002, 131.95437`9.000000000000002, 132.94924`9.000000000000002, 133.94651`9.000000000000002, 134.94182`9.000000000000002, 135.9396`9.000000000000002, 136.93557`9.000000000000002, 137.933709`9.000000000000002, 138.92979228`10.999999999999996, 139.928087607`11.999999999999998, 140.92493072`10.999999999999996, 141.923434945`11.999999999999998, 142.920297509`11.999999999999998, 143.918816823`11.999999999999996, 144.916265237`11.999999999999996, 145.917205817`12.000000000000004, 146.916746111`12.000000000000004, 147.918085895`11.999999999999998, 148.917931238`12.000000000000004, 149.919701819`11.999999999999998, 150.919850161`11.999999999999998, 151.921744534`11.999999999999996, 152.921230339`12., 153.922979237`11.999999999999996, 154.92289326`11., 155.924752249`11.999999999999998, 156.925423647`12.000000000000004, 157.927845302`11.999999999999998, 158.929088861`11.999999999999998, 159.931971`9.000000000000002, 160.93368`9.000000000000002, 161.93704`9.000000000000002, 162.93921`9.000000000000002, 163.94299`9.000000000000002, 164.94572`9.000000000000002, 165.94997`9.000000000000002, 166.95321`9.000000000000002, 157.924103912`11.999999999999998, 133.95537`9.000000000000002, 134.95257`9.000000000000002, 135.94734`9.000000000000002, 136.94502`9.000000000000002, 137.94012`9.000000000000002, 138.93824`9.000000000000002, 139.933674`9.000000000000002, 140.932126`9.000000000000002, 141.928116`9.000000000000002, 142.92674951`11., 143.922963`9.000000000000002, 144.921709252`11.999999999999998, 145.918310608`12.000000000000004, 146.91909442`11., 147.918114524`12.000000000000004, 148.919340915`11.999999999999998, 149.918658876`11.999999999999998, 150.920348482`11.999999999999998, 151.919790996`12.000000000000004, 152.921749543`12., 153.920865598`12.000000000000004, 154.922622022`12.000000000000004, 155.922122743`12.000000000000004, 156.923960135`11.999999999999998, 157.924103912`11.999999999999998, 158.926388658`11.999999999999996, 159.927054146`12.000000000000004, 160.929669211`11.999999999999998, 161.930984751`12.000000000000004, 162.93399`9.000000000000002, 163.93586`9.000000000000002, 164.93938`9.000000000000002, 165.9416`9.000000000000002, 166.94557`9.000000000000002, 167.94836`9.000000000000002, 168.95287`9.000000000000002, 158.925346757`11.999999999999998, 135.96138`9.000000000000002, 136.95598`9.000000000000002, 137.95316`9.000000000000002, 138.94829`9.000000000000002, 139.945805049`11.999999999999998, 140.941448`9.000000000000002, 141.938744`9.000000000000002, 142.935121`9.000000000000002, 143.933045`9.000000000000002, 144.929274`9.000000000000002, 145.927246584`11.999999999999998, 146.924044585`12.000000000000004, 147.924271701`12., 148.923245909`11.999999999999996, 149.923659686`12.000000000000004, 150.923102543`12.000000000000004, 151.924074438`12.000000000000004, 152.923434588`12.000000000000004, 153.924678019`11.999999999999998, 154.923505236`11.999999999999998, 155.924747213`11.999999999999998, 156.924024604`12.000000000000004, 157.925413137`11.999999999999998, 158.925346757`11.999999999999998, 159.927167606`11.999999999999996, 160.927569919`12., 161.929488234`12.000000000000004, 162.930647536`11.999999999999998, 163.933350838`11.999999999999998, 164.93488`9.000000000000002, 165.937991959`11.999999999999998, 166.94005`9.000000000000002, 167.94364`9.000000000000002, 168.94622`9.000000000000002, 169.95025`9.000000000000002, 170.9533`9.000000000000002, 163.929174751`11.999999999999998, 137.96249`9.000000000000002, 138.95954`9.000000000000002, 139.95401`9.000000000000002, 140.95135`9.000000000000002, 141.946366`9.000000000000002, 142.94383`9.000000000000002, 143.939254`9.000000000000002, 144.937425`9.000000000000002, 145.932845369`11.999999999999996, 146.9310915`10., 147.927149831`12.000000000000004, 148.927304787`11.999999999999996, 149.925585184`12., 150.926184601`12.000000000000004, 151.9247183`9.999999999999998, 152.92576467`11., 153.924424457`11.999999999999998, 154.925753775`11.999999999999998, 155.92428311`11., 156.925466095`11.999999999999998, 157.924409487`12.000000000000004, 158.925739214`12.000000000000004, 159.925197517`11.999999999999996, 160.926933364`12., 161.926798447`12., 162.928731159`12.000000000000004, 163.929174751`11.999999999999998, 164.931703333`11.999999999999998, 165.932806741`11.999999999999998, 166.935655462`11.999999999999998, 167.937128769`11.999999999999998, 168.940307614`11.999999999999998, 169.94239`9.000000000000002, 170.9462`9.000000000000002, 171.94876`9.000000000000002, 172.953`9.000000000000002, 164.93032207`11., 139.968539`9.000000000000002, 140.963098`9.000000000000002, 141.95977`9.000000000000002, 142.95461`9.000000000000002, 143.95148`9.000000000000002, 144.9472`9.000000000000002, 145.94464`9.000000000000002, 146.940056`9.000000000000002, 147.937718`9.000000000000002, 148.933774771`11.999999999999998, 149.933496182`11.999999999999998, 150.931688142`12.000000000000004, 151.931713714`11.999999999999998, 152.930198789`12.000000000000004, 153.930601579`12.000000000000004, 154.929103491`12.000000000000004, 155.929839`9.000000000000002, 156.928256188`12.000000000000004, 157.928941007`11.999999999999998, 158.927711959`11.999999999999998, 159.928729478`12.000000000000004, 160.927854776`12.000000000000004, 161.929095504`12.000000000000004, 162.928733903`12.000000000000004, 163.930233507`12.000000000000004, 164.93032207`11., 165.932284162`11.999999999999998, 166.933132633`11.999999999999998, 167.935515708`12.000000000000004, 168.936872273`11.999999999999998, 169.939618929`12.000000000000004, 170.94146515`11., 171.94482`9.000000000000002, 172.94729`9.000000000000002, 173.95115`9.000000000000002, 174.95405`9.000000000000002, 165.930293061`12., 142.96634`9.000000000000002, 143.96038`9.000000000000002, 144.95739`9.000000000000002, 145.952`9.000000000000002, 146.94949`9.000000000000002, 147.94455`9.000000000000002, 148.942306`9.000000000000002, 149.937913839`12.000000000000004, 150.937448903`11.999999999999998, 151.935050389`11.999999999999996, 152.935063492`12.000000000000004, 153.932783081`11.999999999999998, 154.933208949`12., 155.931064698`11.999999999999998, 156.931916`9.000000000000002, 157.929893474`11.999999999999998, 158.930684066`12.000000000000004, 159.929083292`11.999999999999998, 160.929995309`12.000000000000004, 161.928778264`11.999999999999996, 162.930032749`11.999999999999998, 163.929200229`12.000000000000004, 164.930726003`12.000000000000004, 165.930293061`12., 166.932048159`12.000000000000004, 167.932370224`12., 168.934590364`12., 169.935464312`11.999999999999998, 170.938029808`11.999999999999996, 171.939356113`12.000000000000004, 172.9424`9.000000000000002, 173.94423`9.000000000000002, 174.94777`9.000000000000002, 175.95008`9.000000000000002, 176.95405`9.000000000000002, 168.93421325`11.000000000000005, 144.970073`9.000000000000002, 145.966425`9.000000000000002, 146.960961`9.000000000000002, 147.95784`9.000000000000002, 148.95272`9.000000000000002, 149.94996`9.000000000000002, 150.94548349`11.000000000000005, 151.944422`9.000000000000002, 152.942012112`12.000000000000004, 153.941567808`11.999999999999998, 154.939199459`12.000000000000004, 155.938979933`12.000000000000004, 156.936973`9.000000000000002, 157.936979525`12.000000000000004, 158.934975`9.000000000000002, 159.935262801`11.999999999999998, 160.933549`9.000000000000002, 161.933994682`11.999999999999996, 162.932651124`12.000000000000004, 163.93356`7.999999999999999, 164.932435492`12.000000000000004, 165.933554131`12.000000000000004, 166.932851622`11.999999999999996, 167.934172776`11.999999999999998, 168.93421325`11.000000000000005, 169.935801397`12.000000000000004, 170.93642944`11., 171.938400044`12., 172.939603607`11.999999999999998, 173.942168605`12., 174.943836853`11.999999999999996, 175.946994685`11.999999999999996, 176.94904`9.000000000000002, 177.95264`9.000000000000002, 178.95534`9.000000000000002, 173.938862089`11.999999999999996, 147.96742`9.000000000000002, 148.96404`9.000000000000002, 149.95842`9.000000000000002, 150.955400769`11.999999999999998, 151.950288919`11.999999999999998, 152.94948`9.000000000000002, 153.946393928`11.999999999999998, 154.945782332`12.000000000000004, 155.942818215`12.000000000000004, 156.942627848`12.000000000000004, 157.939865617`12.000000000000004, 158.940050099`12., 159.937552344`11.999999999999998, 160.937901678`11.999999999999996, 161.93576821`11.000000000000005, 162.936334305`12.000000000000004, 163.934489416`12.000000000000004, 164.935279`9.000000000000002, 165.933882042`11.999999999999998, 166.934949605`12.000000000000004, 167.933896895`11.999999999999998, 168.935189802`12.000000000000004, 169.934761837`11.999999999999998, 170.936325799`11.999999999999998, 171.936381469`12., 172.938210787`11.999999999999998, 173.938862089`11.999999999999996, 174.94127645`11., 175.942571683`12.000000000000004, 176.945260822`11.999999999999998, 177.94664668`11., 178.95017`9.000000000000002, 179.95233`9.000000000000002, 180.95615`9.000000000000002, 174.940771819`12.000000000000004, 149.973228`9.000000000000002, 150.967577`9.000000000000002, 151.96412`9.000000000000002, 152.958767331`12.000000000000004, 153.957522`9.000000000000002, 154.954316216`12.000000000000004, 155.953032523`11.999999999999998, 156.9500983`10., 157.949313283`11.999999999999996, 158.946628776`12.000000000000004, 159.946033`9.000000000000002, 160.943572`9.000000000000002, 161.943277288`12., 162.941179`9.000000000000002, 163.941339`9.000000000000002, 164.939406724`12., 165.939859`9.000000000000002, 166.93827`7.999999999999999, 167.938739111`12.000000000000004, 168.937651439`12., 169.938474968`12.000000000000004, 170.937913136`12.000000000000004, 171.939085669`11.999999999999998, 172.938930602`11.999999999999998, 173.94033748`11., 174.940771819`12.000000000000004, 175.94268631`11., 176.943758055`12., 177.945954559`12., 178.947327443`12., 179.94988116`11., 180.95197`9.000000000000002, 181.95504`9.000000000000002, 182.95757`9.000000000000002, 183.96091`9.000000000000002, 179.946549953`12.000000000000004, 152.97069`9.000000000000002, 153.96486`9.000000000000002, 154.96339`9.000000000000002, 155.959364025`12.000000000000004, 156.958396`9.000000000000002, 157.954799366`12., 158.95399487`11.000000000000005, 159.950684379`11.999999999999996, 160.950274844`12.000000000000004, 161.947210498`12.000000000000004, 162.947089`9.000000000000002, 163.944367284`11.999999999999996, 164.944567`9.000000000000002, 165.94218`7.999999999999999, 166.9426`7.000000000000001, 167.940568`9.000000000000002, 168.941259`9.000000000000002, 169.939609`9.000000000000002, 170.940492`9.000000000000002, 171.939448301`11.999999999999996, 172.940513`9.000000000000002, 173.940046178`12.000000000000004, 174.941509181`11.999999999999998, 175.941408631`11.999999999999996, 176.943220651`11.999999999999996, 177.943698766`12.000000000000004, 178.945816145`12.000000000000004, 179.946549953`12.000000000000004, 180.949101246`11.999999999999998, 181.950554096`11.999999999999998, 182.953530439`12.000000000000004, 183.955446515`12.000000000000004, 184.95882`9.000000000000002, 185.96089`9.000000000000002, 186.96459`9.000000000000002, 187.96685`9.000000000000002, 180.947995763`12.000000000000004, 154.974592`9.000000000000002, 155.972303`9.000000000000002, 156.968192445`12.000000000000004, 157.966699`9.000000000000002, 158.963018173`11.999999999999998, 159.961486056`12.000000000000004, 160.958417`9.000000000000002, 161.957291859`12.000000000000004, 162.954330271`11.999999999999998, 163.953534`9.000000000000002, 164.950772514`12.000000000000004, 165.950512`9.000000000000002, 166.948093`9.000000000000002, 167.948047`9.000000000000002, 168.946011`9.000000000000002, 169.946175`9.000000000000002, 170.944476`9.000000000000002, 171.944895`9.000000000000002, 172.94375`7.999999999999999, 173.944454`9.000000000000002, 174.943737`9.000000000000002, 175.944857`9.000000000000002, 176.944472403`12.000000000000004, 177.945778221`12.000000000000004, 178.945929535`11.999999999999998, 179.947464831`12., 180.947995763`12.000000000000004, 181.950151849`11.999999999999996, 182.951372616`11.999999999999998, 183.954007966`11.999999999999998, 184.955559375`12.000000000000004, 185.958552023`11.999999999999996, 186.96053`9.000000000000002, 187.9637`9.000000000000002, 188.96583`9.000000000000002, 189.96923`9.000000000000002, 183.950931188`12.000000000000004, 157.974562`9.000000000000002, 158.972918`9.000000000000002, 159.968478805`12.000000000000004, 160.967357`9.000000000000002, 161.963497417`12.000000000000004, 162.962523542`12.000000000000004, 163.958954382`12.000000000000004, 164.958279949`11.999999999999998, 165.955027253`11.999999999999996, 166.954816014`11.999999999999996, 167.951808394`12.000000000000004, 168.95177879`11., 169.949228482`11.999999999999998, 170.949451`9.000000000000002, 171.947292`9.000000000000002, 172.947689`9.000000000000002, 173.946079`9.000000000000002, 174.946717`9.000000000000002, 175.945634`9.000000000000002, 176.946643`9.000000000000002, 177.945876236`11.999999999999996, 178.947070447`12.000000000000004, 179.946704459`11.999999999999996, 180.948197248`12.000000000000004, 181.948204156`12., 182.950222951`12., 183.950931188`12.000000000000004, 184.953419264`11.999999999999998, 185.954364127`11.999999999999996, 186.957160466`12.000000000000004, 187.958489105`12.000000000000004, 188.961912868`12.000000000000004, 189.963181378`11.999999999999998, 190.9666`9.000000000000002, 191.96817`9.000000000000002, 186.955753109`12., 159.982115`9.000000000000002, 160.977589119`12.000000000000004, 161.976002`9.000000000000002, 162.972080535`12.000000000000004, 163.970323`9.000000000000002, 164.967088557`12., 165.965808`9.000000000000002, 166.962601`9.000000000000002, 167.961572608`12.000000000000004, 168.958791096`11.999999999999998, 169.958220071`11.999999999999996, 170.955716`9.000000000000002, 171.955422961`12.000000000000004, 172.953243`9.000000000000002, 173.953115`9.000000000000002, 174.951381`9.000000000000002, 175.951623`9.000000000000002, 176.950328`9.000000000000002, 177.950989`9.000000000000002, 178.949987641`12.000000000000004, 179.950789084`11.999999999999998, 180.950067916`12., 181.95121008`11., 182.950819841`11.999999999999998, 183.952520756`12., 184.952954982`12., 185.954986084`11.999999999999998, 186.955753109`12., 187.958114438`11.999999999999998, 188.959229007`11.999999999999998, 189.961817977`11.999999999999998, 190.963125242`12.000000000000004, 191.96596`9.000000000000002, 192.96747`9.000000000000002, 193.97042`9.000000000000002, 191.96148069`11., 161.984431`9.000000000000002, 162.98269`9.000000000000002, 163.978035649`12.000000000000004, 164.976762`9.000000000000002, 165.972690753`12.000000000000004, 166.971547969`11.999999999999998, 167.967803678`12.000000000000004, 168.96701927`11., 169.963577028`12.000000000000004, 170.963184819`12.000000000000004, 171.960023303`12., 172.959808409`11.999999999999998, 173.957062202`12., 174.956945835`12.000000000000004, 175.954806`9.000000000000002, 176.954965324`12.000000000000004, 177.953251241`11.999999999999998, 178.953816017`12.000000000000004, 179.952378803`12.000000000000004, 180.953244`9.000000000000002, 181.952110186`11.999999999999998, 182.953126102`11.999999999999998, 183.952489071`12., 184.954042265`11.999999999999998, 185.953838158`11.999999999999998, 186.955750458`11.999999999999996, 187.955838228`12., 188.95814747`10.999999999999996, 189.958447048`12.000000000000004, 190.960929718`11.999999999999998, 191.96148069`11., 192.964151563`11.999999999999998, 193.965182083`12.000000000000004, 194.968126661`11.999999999999998, 195.969639333`12.000000000000004, 192.96292643`11.000000000000005, 163.992201`9.000000000000002, 164.98752`9.000000000000002, 165.985824`9.000000000000002, 166.981665156`12.000000000000004, 167.979881`9.000000000000002, 168.976294942`11.999999999999998, 169.974965`9.000000000000002, 170.971626042`12.000000000000004, 171.970456`9.000000000000002, 172.967501739`11.999999999999998, 173.966861045`11.999999999999996, 174.964112895`12.000000000000004, 175.963648688`12.000000000000004, 176.9613015`9.999999999999998, 177.961082`9.000000000000002, 178.959122266`12.000000000000004, 179.959229446`12., 180.957625297`12.000000000000004, 181.958076296`12.000000000000004, 182.956846458`11.999999999999998, 183.957476`9.000000000000002, 184.956698`9.000000000000002, 185.957946104`12.000000000000004, 186.957363361`11.999999999999998, 187.958853121`11.999999999999998, 188.958718935`11.999999999999996, 189.960545968`11.999999999999998, 190.960594046`12.000000000000004, 191.962605012`12.000000000000004, 192.96292643`11.000000000000005, 193.965078378`12.000000000000004, 194.965979573`12.000000000000004, 195.968396542`12.000000000000004, 196.969653285`12., 197.97228`9.000000000000002, 198.973804583`11.999999999999998, 194.964791134`11.999999999999998, 165.994855`9.000000000000002, 166.992979`9.000000000000002, 167.988150742`11.999999999999998, 168.986715`9.000000000000002, 169.982495289`12.000000000000004, 170.981244542`12.000000000000004, 171.977347128`11.999999999999998, 172.976444754`11.999999999999998, 173.972818767`11.999999999999996, 174.972420552`11.999999999999996, 175.968944622`12., 176.968469481`11.999999999999998, 177.965648724`11.999999999999998, 178.965363404`12.000000000000004, 179.963031477`12.000000000000004, 180.963097285`12.000000000000004, 181.961170656`11.999999999999996, 182.961596703`12.000000000000004, 183.959922251`11.999999999999996, 184.960619`9.000000000000002, 185.959350813`12.000000000000004, 186.960587`9.000000000000002, 187.959395391`12.000000000000004, 188.960833686`12.000000000000004, 189.959931655`11.999999999999998, 190.961676661`12., 191.961038005`11.999999999999996, 192.962987401`11.999999999999996, 193.962680253`11.999999999999996, 194.964791134`11.999999999999998, 195.964951521`12.000000000000004, 196.967340182`12., 197.96789279`11., 198.970593094`12.000000000000004, 199.971440677`11.999999999999998, 200.974512868`11.999999999999998, 201.97574`9.000000000000002, 196.966568662`12.000000000000004, 168.99808`9.000000000000002, 169.996122`9.000000000000002, 170.991878881`12., 171.990035`9.000000000000002, 172.98623738`11., 173.984761`9.000000000000002, 174.981274107`11.999999999999998, 175.980099`9.000000000000002, 176.976864908`11.999999999999998, 177.97603192`11., 178.973212812`12., 179.972521124`12.000000000000004, 180.970079048`11.999999999999998, 181.969617874`11.999999999999998, 182.967593034`12.000000000000004, 183.967451524`12.000000000000004, 184.965789411`11.999999999999998, 185.965952703`11.999999999999998, 186.964567541`11.999999999999996, 187.965323661`11.999999999999998, 188.963948286`11.999999999999998, 189.964700339`11.999999999999998, 190.963704225`11.999999999999998, 191.964812953`11.999999999999998, 192.964149715`12.000000000000004, 193.96536525`11., 194.96503464`11., 195.966569813`12.000000000000004, 196.966568662`12.000000000000004, 197.968242303`12.000000000000004, 198.968765193`11.999999999999996, 199.970725647`12.000000000000004, 200.97165724`11., 201.973805838`11.999999999999998, 202.975154542`12.000000000000004, 203.977724`9.000000000000002, 204.97987`9.000000000000002, 201.970643011`12.000000000000004, 171.00376`9.000000000000002, 171.998832686`12., 172.997242`9.000000000000002, 173.992863695`12., 174.99142327`11.000000000000005, 175.98735458`11., 176.986279158`12., 177.982483143`12., 178.981833861`11.999999999999996, 179.978266394`11.999999999999998, 180.977819311`11.999999999999998, 181.974689964`12.000000000000004, 182.974449841`11.999999999999998, 183.971713051`12.000000000000004, 184.971899086`11.999999999999998, 185.96936179`11., 186.969814236`11.999999999999996, 187.967577049`12., 188.968190034`12.000000000000004, 189.966322449`12.000000000000004, 190.967157105`12.000000000000004, 191.965634327`12.000000000000004, 192.966665421`12.000000000000004, 193.965439409`12.000000000000004, 194.966720113`11.999999999999996, 195.965832649`11.999999999999998, 196.967212908`11.999999999999996, 197.966769032`11.999999999999998, 198.968279932`11.999999999999998, 199.968326004`12.000000000000004, 200.970302268`11.999999999999996, 201.970643011`12.000000000000004, 202.972872484`12., 203.973493933`11.999999999999998, 204.976073386`11.999999999999996, 205.977514066`12.000000000000004, 206.982588545`12.000000000000004, 207.98594`9.000000000000002, 208.99104`9.000000000000002, 209.99451`9.000000000000002, 204.974427541`11.999999999999996, 176.00059`9.000000000000002, 176.996427286`11.999999999999998, 177.994897`9.000000000000002, 178.991089082`12., 179.989906`9.000000000000002, 180.986257447`11.999999999999998, 181.985667104`12.000000000000004, 182.982192802`11.999999999999998, 183.981873122`11.999999999999996, 184.978791305`12.000000000000004, 185.978325`9.000000000000002, 186.975905897`11.999999999999998, 187.976009782`11.999999999999998, 188.973588428`12.000000000000004, 189.973877149`11.999999999999996, 190.971786154`12.000000000000004, 191.972225`9.000000000000002, 192.970672`9.000000000000002, 193.9712`7.000000000000001, 194.969774335`12.000000000000004, 195.970481151`12., 196.969574511`11.999999999999998, 197.970483495`12., 198.969877`9.000000000000002, 199.970962672`12.000000000000004, 200.970818891`11.999999999999998, 201.972105808`12.000000000000004, 202.97234422`11., 203.973863522`12.000000000000004, 204.974427541`11.999999999999996, 205.97611032`11., 206.977419429`11.999999999999998, 207.9820187`10., 208.985358952`12.000000000000004, 209.990073689`12.000000000000004, 210.993477`9.000000000000002, 211.998228`9.000000000000002, 207.976652071`11.999999999999996, 178.003830191`11.999999999999998, 179.00215`9.000000000000002, 179.997918173`12.000000000000004, 180.996623958`11.999999999999998, 181.992671842`11.999999999999998, 182.991874629`11.999999999999998, 183.988142339`11.999999999999996, 184.987609944`11.999999999999996, 185.984238945`12., 186.98391837`11., 187.980874338`11.999999999999996, 188.980807`9.000000000000002, 189.978081517`11.999999999999998, 190.978265`9.000000000000002, 191.975785171`12.000000000000004, 192.976173234`11.999999999999998, 193.97401207`11., 194.97454205`11., 195.972774109`12.000000000000004, 196.973431124`11.999999999999998, 197.972033959`11.999999999999998, 198.97291665`11., 199.971826675`11.999999999999996, 200.972884511`11.999999999999996, 201.972159133`11.999999999999998, 202.973390521`12.000000000000004, 203.973043589`11.999999999999996, 204.974481755`12.000000000000004, 205.974465278`11.999999999999998, 206.975896887`11.999999999999998, 207.976652071`11.999999999999996, 208.98109012`11., 209.984188527`11.999999999999998, 210.988736964`12.000000000000004, 211.991897543`11.999999999999998, 212.996581499`12., 213.999805408`11.999999999999996, 215.004807`9.000000000000002, 208.980398734`12., 184.001124`9.000000000000002, 184.997625`9.000000000000002, 185.996597625`11.999999999999998, 186.993157835`11.999999999999998, 187.992265154`12., 188.989199012`11.999999999999998, 189.988295129`12.000000000000004, 190.985786119`11.999999999999998, 191.985457954`12.000000000000004, 192.982959771`12., 193.98283396`10.999999999999996, 194.980650737`12., 195.980666509`11.999999999999996, 196.978864454`12.000000000000004, 197.979206`9.000000000000002, 198.977671961`11.999999999999998, 199.978131829`12., 200.977009036`11.999999999999998, 201.977742324`12.000000000000004, 202.976876001`12., 203.977812736`11.999999999999996, 204.977389366`12., 205.97849913`11.000000000000005, 206.978470679`11.999999999999998, 207.979742196`12.000000000000004, 208.980398734`12., 209.984120371`11.999999999999998, 210.98726946`11., 211.991285724`11.999999999999998, 212.994384666`11.999999999999998, 213.998711539`12.000000000000004, 215.001769776`11.999999999999998, 216.006305943`11.999999999999998, 217.00947`9.000000000000002, 218.014316`9.000000000000002, 208.982430435`12.000000000000004, 187.999422048`11.999999999999998, 188.998480562`12.000000000000004, 189.995101185`11.999999999999998, 190.994574485`12.000000000000004, 191.991335149`11.999999999999998, 192.991025275`12.000000000000004, 193.988185606`11.999999999999998, 194.988110728`11.999999999999998, 195.98553458`10.999999999999996, 196.98565963`10.999999999999996, 197.983388616`11.999999999999998, 198.983666063`11.999999999999996, 199.981798604`11.999999999999998, 200.982259764`11.999999999999998, 201.980757541`11.999999999999996, 202.981420103`11.999999999999998, 203.980318121`11.999999999999996, 204.981203322`12., 205.980481099`11.999999999999998, 206.981593173`12., 207.981245702`11.999999999999998, 208.982430435`12.000000000000004, 209.982873673`12.000000000000004, 210.986653154`11.999999999999996, 211.988867969`12.000000000000004, 212.99285728`11., 213.99520135`11., 214.999419988`11.999999999999998, 216.001915035`11.999999999999998, 217.006334796`11.999999999999998, 218.008973037`11.999999999999998, 219.013744`9.000000000000002, 220.016602`9.000000000000002, 210.987496271`12., 192.999843112`11.999999999999998, 193.998725085`11.999999999999996, 194.996268098`12.000000000000004, 195.995788077`12.000000000000004, 196.993189215`12., 197.992837202`11.999999999999998, 198.990532254`12., 199.990351264`11.999999999999996, 200.988416999`12., 201.988630236`11.999999999999998, 202.986941984`11.999999999999998, 203.987251326`12.000000000000004, 204.986074483`11.999999999999998, 205.986667036`11.999999999999998, 206.985783502`11.999999999999998, 207.986589977`11.999999999999996, 208.986173143`11.999999999999998, 209.98714771`11., 210.987496271`12., 211.990744771`11.999999999999998, 212.992936646`12., 213.996371733`11.999999999999998, 214.99865257`11., 216.002423257`11.999999999999998, 217.004718822`11.999999999999998, 218.008694336`12., 219.011161691`12.000000000000004, 220.015407682`11.999999999999998, 221.01805`9.000000000000002, 222.02233`9.000000000000002, 223.02519`9.000000000000002, 222.017577738`12.000000000000004, 195.005437696`12., 196.002115223`11.999999999999996, 197.001584351`12., 197.998678663`12.000000000000004, 198.998370297`12.000000000000004, 199.9956993`9.999999999999998, 200.995628335`12.000000000000004, 201.993263492`11.999999999999998, 202.993386687`12.000000000000004, 203.99142874`10.999999999999996, 204.991718799`12., 205.990214104`11.999999999999998, 206.990734225`11.999999999999998, 207.98964247`11.000000000000005, 208.990414742`12.000000000000004, 209.989696216`11.999999999999998, 210.990600523`12.000000000000004, 211.990703529`11.999999999999998, 212.993882668`12.000000000000004, 213.995362554`12.000000000000004, 214.998745483`12.000000000000004, 216.00027437`11., 217.003927675`11.999999999999998, 218.005601256`11.999999999999996, 219.009480204`12.000000000000004, 220.011393981`11.999999999999998, 221.015536782`11.999999999999998, 222.017577738`12.000000000000004, 223.02179`9.000000000000002, 224.02409`9.000000000000002, 225.02844`9.000000000000002, 226.03089`9.000000000000002, 227.035407`9.000000000000002, 228.037986`9.000000000000002, 222.01755173`11.000000000000005, 199.007258147`12., 200.00657249`11., 201.003860867`12., 202.003372847`12.000000000000004, 203.000924647`11.999999999999996, 204.000653204`12.000000000000004, 204.99859396`11., 205.998666066`11.999999999999996, 206.996949414`11.999999999999998, 207.997138783`12.000000000000004, 208.995953555`11.999999999999998, 209.996407738`11.999999999999998, 210.995536544`12.000000000000004, 211.996202244`11.999999999999998, 212.996189081`12.000000000000004, 213.998971145`11.999999999999998, 215.000341497`11.999999999999998, 216.00319799`11., 217.004631951`12., 218.007578322`11.999999999999998, 219.009252149`11.999999999999996, 220.012327405`11.999999999999998, 221.014254762`12., 222.01755173`11.000000000000005, 223.019735857`11.999999999999998, 224.023249951`12.000000000000004, 225.025565414`12.000000000000004, 226.029386231`12.000000000000004, 227.031835938`11.999999999999998, 228.035729`9.000000000000002, 229.038450228`12.000000000000004, 230.04251`9.000000000000002, 231.04544`9.000000000000002, 232.049772`9.000000000000002, 228.031070292`11.999999999999998, 202.009890686`12.000000000000004, 203.009271619`11.999999999999998, 204.006499668`11.999999999999998, 205.00626857`11.000000000000005, 206.00382727`11.000000000000005, 207.003798105`11.999999999999998, 208.00183994`11., 209.001991373`12.000000000000004, 210.000494978`12., 211.000897987`12.000000000000004, 211.999794499`12.000000000000004, 213.000383959`11.999999999999998, 214.000107894`11.999999999999996, 215.002719834`12.000000000000004, 216.003533035`12., 217.006320327`12., 218.00714023`11., 219.010085078`11.999999999999998, 220.011028384`12., 221.013917338`11.999999999999998, 222.01537453`11., 223.018502171`12.000000000000004, 224.020211821`11.999999999999998, 225.023611564`12.000000000000004, 226.025409823`12.000000000000004, 227.029177842`12.000000000000004, 228.031070292`11.999999999999998, 229.034957577`12., 230.037056394`12.000000000000004, 231.04122`9.000000000000002, 232.043638`9.000000000000002, 233.04806`9.000000000000002, 234.050704`9.000000000000002, 227.027752127`11.999999999999998, 206.01450498`11., 207.011949748`12.000000000000004, 208.011551551`11.999999999999998, 209.009494863`12.000000000000004, 210.009435986`11.999999999999998, 211.007734835`12., 212.007813822`11.999999999999998, 213.006607643`11.999999999999998, 214.006901798`11.999999999999998, 215.006453625`12., 216.008720075`12.000000000000004, 217.009346914`12., 218.011641453`11.999999999999998, 219.012420389`12.000000000000004, 220.014762979`12.000000000000004, 221.015591248`11.999999999999998, 222.017843851`11.999999999999998, 223.019137468`11.999999999999996, 224.021722866`12., 225.023229585`12.000000000000004, 226.026098089`11.999999999999998, 227.027752127`11.999999999999998, 228.031021112`11.999999999999998, 229.033015243`12., 230.036294178`11.999999999999998, 231.038558786`12.000000000000004, 232.042027438`11.999999999999998, 233.04455`9.000000000000002, 234.04842`9.000000000000002, 235.051232`9.000000000000002, 236.055296`9.000000000000002, 232.038055325`11.999999999999998, 209.017715682`11.999999999999998, 210.015075342`11.999999999999996, 211.014928413`11.999999999999998, 212.012980288`11.999999999999996, 213.01301014`11., 214.01149977`11., 215.01173033`11., 216.011062115`11.999999999999996, 217.013114328`11.999999999999998, 218.013284499`12., 219.015536895`12., 220.015747762`12.000000000000004, 221.018183674`11.999999999999996, 222.018468121`12.000000000000004, 223.020811448`12.000000000000004, 224.021466895`11.999999999999998, 225.023951021`11.999999999999996, 226.024903069`12.000000000000004, 227.02770407`11.000000000000005, 228.028741127`12.000000000000004, 229.03176243`11., 230.033133843`11.999999999999996, 231.036304343`11.999999999999998, 232.038055325`11.999999999999998, 233.041581843`11.999999999999998, 234.04360123`11., 235.047510074`12.000000000000004, 236.04987`9.000000000000002, 237.053894`9.000000000000002, 238.056496`9.000000000000002, 231.03588399`11.000000000000005, 212.023204138`11.999999999999998, 213.02110934`10.999999999999996, 214.020918417`11.999999999999998, 215.019185865`12., 216.019109564`11.999999999999998, 217.018323986`12.000000000000004, 218.020041889`12., 219.019883143`12., 220.021875303`11.999999999999998, 221.021877983`12., 222.023742`9.000000000000002, 223.023962273`11.999999999999998, 224.025625738`12.000000000000004, 225.026130678`12., 226.027947753`11.999999999999998, 227.028805072`11.999999999999998, 228.031051376`12.000000000000004, 229.032096793`12.000000000000004, 230.034540754`11.999999999999996, 231.03588399`11.000000000000005, 232.038591592`12.000000000000004, 233.040247277`12.000000000000004, 234.043308058`11.999999999999998, 235.045443615`11.999999999999998, 236.048681284`11.999999999999998, 237.051145659`11.999999999999998, 238.05450271`10.999999999999996, 239.05726`9.000000000000002, 240.06098`9.000000000000002, 238.050788247`11.999999999999998, 217.024368791`11.999999999999998, 218.023535671`11.999999999999998, 219.02491916`11., 220.024723`9.000000000000002, 221.026399`9.000000000000002, 222.026086`9.000000000000002, 223.0277386`9.999999999999998, 224.027604778`11.999999999999998, 225.029390717`12.000000000000004, 226.029338702`11.999999999999998, 227.031156367`12.000000000000004, 228.031374006`11.999999999999998, 229.033505939`12.000000000000004, 230.033939784`12.000000000000004, 231.036293704`11.999999999999998, 232.037156152`11.999999999999996, 233.039635207`12.000000000000004, 234.040952088`11.999999999999998, 235.043929918`11.999999999999998, 236.045568006`11.999999999999998, 237.048730184`12.000000000000004, 238.050788247`11.999999999999998, 239.054293299`11.999999999999998, 240.056591988`11.999999999999998, 241.06033`9.000000000000002, 242.062931`9.000000000000002, 237.048173444`12.000000000000004, 225.033913933`12., 226.035145`9.000000000000002, 227.034956789`11.999999999999998, 228.03618`9.000000000000002, 229.036263808`12.000000000000004, 230.037827597`12.000000000000004, 231.038245085`11.999999999999998, 232.040108`9.000000000000002, 233.040740546`12.000000000000004, 234.042895038`12.000000000000004, 235.044063267`11.999999999999998, 236.0465696`9.999999999999998, 237.048173444`12.000000000000004, 238.050946405`11.999999999999998, 239.052939025`12.000000000000004, 240.056162182`12.000000000000004, 241.058252431`12.000000000000004, 242.06164118`11., 243.064279`9.000000000000002, 244.06785`9.000000000000002, 242.058742611`11.999999999999998, 228.038742328`12.000000000000004, 229.040150212`11.999999999999998, 230.039649886`12.000000000000004, 231.041101107`12.000000000000004, 232.041187097`11.999999999999998, 233.042997375`12.000000000000004, 234.043317076`12.000000000000004, 235.04528605`11., 236.046057964`12.000000000000004, 237.048409658`11.999999999999998, 238.049559894`12.000000000000004, 239.052163381`12.000000000000004, 240.053813545`11.999999999999998, 241.056851456`12.000000000000004, 242.058742611`11.999999999999998, 243.062003092`11.999999999999998, 244.064203907`11.999999999999998, 245.067747154`11.999999999999998, 246.070204627`11.999999999999998, 247.07407`9.000000000000002, 243.06138108`10.999999999999996, 231.04556`9.000000000000002, 232.04659`9.000000000000002, 233.046348`9.000000000000002, 234.047809`9.000000000000002, 235.047946`9.000000000000002, 236.049579`9.000000000000002, 237.049996`9.000000000000002, 238.051984324`11.999999999999998, 239.053024479`12.000000000000004, 240.055300179`12.000000000000004, 241.056829144`12.000000000000004, 242.059549159`11.999999999999998, 243.06138108`10.999999999999996, 244.064284847`12.000000000000004, 245.066452114`11.999999999999998, 246.069774619`11.999999999999998, 247.072093`9.000000000000002, 248.075752`9.000000000000002, 249.07848`9.000000000000002, 247.07035354`11., 233.050771232`11.999999999999998, 234.050159841`11.999999999999998, 235.051434`9.000000000000002, 236.051413`9.000000000000002, 237.052901`9.000000000000002, 238.053028697`11.999999999999998, 239.054957`9.000000000000002, 240.055529539`11.999999999999998, 241.057653001`11.999999999999998, 242.058835824`12.000000000000004, 243.061389114`11.999999999999998, 244.062752578`12.000000000000004, 245.065491249`12.000000000000004, 246.067223662`12.000000000000004, 247.07035354`11., 248.072348508`12.000000000000004, 249.075953413`12.000000000000004, 250.078356959`12.000000000000004, 251.082284605`12.000000000000004, 252.08487`9.000000000000002, 247.07030708`10.999999999999996, 235.05658`9.000000000000002, 236.05733`9.000000000000002, 237.057003`9.000000000000002, 238.058281`9.000000000000002, 239.058279`9.000000000000002, 240.059759`9.000000000000002, 241.06023`9.000000000000002, 242.061981`9.000000000000002, 243.063007572`11.999999999999998, 244.065180774`11.999999999999998, 245.066361616`11.999999999999998, 246.068672947`11.999999999999998, 247.07030708`10.999999999999996, 248.073086`9.000000000000002, 249.074986657`11.999999999999998, 250.07831652`11., 251.080760172`12.000000000000004, 252.08431`9.000000000000002, 253.08688`9.000000000000002, 254.0906`9.000000000000002, 251.079586788`12.000000000000004, 237.06207`9.000000000000002, 238.06141`9.000000000000002, 239.062422`9.000000000000002, 240.062302`9.000000000000002, 241.063726`9.000000000000002, 242.063701552`12.000000000000004, 243.065427`9.000000000000002, 244.066000689`11.999999999999998, 245.068048612`11.999999999999998, 246.068805309`12.000000000000004, 247.071000589`12.000000000000004, 248.072184861`11.999999999999998, 249.074853537`11.999999999999998, 250.076406066`12.000000000000004, 251.079586788`12.000000000000004, 252.081625846`12.000000000000004, 253.085133145`12.000000000000004, 254.087322909`11.999999999999998, 255.091046`9.000000000000002, 256.09344`9.000000000000002, 252.082978512`11.999999999999998, 240.06892`9.000000000000002, 241.068538`9.000000000000002, 242.069745`9.000000000000002, 243.069548`9.000000000000002, 244.070883`9.000000000000002, 245.071324`9.000000000000002, 246.072896`9.000000000000002, 247.073656`9.000000000000002, 248.075471`9.000000000000002, 249.076411`9.000000000000002, 250.078612`9.000000000000002, 251.079992142`11.999999999999998, 252.082978512`11.999999999999998, 253.084824697`11.999999999999998, 254.088022021`12.000000000000004, 255.090273122`11.999999999999998, 256.093598`9.000000000000002, 257.095979`9.000000000000002, 258.09952`9.000000000000002, 257.095104724`12.000000000000004, 242.07343`9.000000000000002, 243.074353`9.000000000000002, 244.074084`9.000000000000002, 245.075385`9.000000000000002, 246.075299023`11.999999999999998, 247.076847`9.000000000000002, 248.077194714`11.999999999999998, 249.079034`9.000000000000002, 250.079521264`11.999999999999998, 251.081575017`12.000000000000004, 252.082466855`11.999999999999998, 253.085185236`12.000000000000004, 254.08685422`11., 255.089962202`11.999999999999998, 256.091773117`12.000000000000004, 257.095104724`12.000000000000004, 258.097076`9.000000000000002, 259.100595`9.000000000000002, 260.102678`9.000000000000002, 258.098431319`11.999999999999998, 245.080829`9.000000000000002, 246.081886`9.000000000000002, 247.081635`9.000000000000002, 248.082823`9.000000000000002, 249.083013`9.000000000000002, 250.08442`9.000000000000002, 251.084839`9.000000000000002, 252.08656`9.000000000000002, 253.08728`9.000000000000002, 254.089656`9.000000000000002, 255.091082705`12.000000000000004, 256.094059025`11.999999999999998, 257.095541368`11.999999999999998, 258.098431319`11.999999999999998, 259.100509`9.000000000000002, 260.103652`9.000000000000002, 261.105721`9.000000000000002, 262.108865`9.000000000000002, 255.093241131`12.000000000000004, 248.086596`9.000000000000002, 249.087833`9.000000000000002, 250.08751`9.000000000000002, 251.089012`9.000000000000002, 252.088976521`11.999999999999998, 253.090678`9.000000000000002, 254.090955253`12.000000000000004, 255.093241131`12.000000000000004, 256.094282666`12.000000000000004, 257.09687719`11., 258.098207`9.000000000000002, 259.101031`9.000000000000002, 260.102643`9.000000000000002, 261.105749`9.000000000000002, 262.107301`9.000000000000002, 263.110552`9.000000000000002, 264.112345`9.000000000000002, 260.105504`9.000000000000002, 251.09436`9.000000000000002, 252.095371`9.000000000000002, 253.09521`9.000000000000002, 254.096454`9.000000000000002, 255.096681`9.000000000000002, 256.098629`9.000000000000002, 257.099555`9.000000000000002, 258.101814`9.000000000000002, 259.102901`9.000000000000002, 260.105504`9.000000000000002, 261.106883`9.000000000000002, 262.109634`9.000000000000002, 263.111293`9.000000000000002, 264.114038`9.000000000000002, 265.115839`9.000000000000002, 266.119305`9.000000000000002, 263.112547`9.000000000000002, 253.100689`9.000000000000002, 254.100184`9.000000000000002, 255.10134`9.000000000000002, 256.101166194`12.000000000000004, 257.10299`9.000000000000002, 258.103489`9.000000000000002, 259.105637`9.000000000000002, 260.10644`9.000000000000002, 261.108766556`12.000000000000004, 262.109925`9.000000000000002, 263.112547`9.000000000000002, 264.113985`9.000000000000002, 265.116704`9.000000000000002, 266.117956`9.000000000000002, 267.121529`9.000000000000002, 268.123644`9.000000000000002, 255.107398`9.000000000000002, 255.107398`9.000000000000002, 256.108127`9.000000000000002, 257.107722`9.000000000000002, 258.109231`9.000000000000002, 259.10961`9.000000000000002, 260.1113`9.000000000000002, 261.112056`9.000000000000002, 262.114084`9.000000000000002, 263.114988`9.000000000000002, 264.117404`9.000000000000002, 265.118601`9.000000000000002, 266.121029`9.000000000000002, 267.122377`9.000000000000002, 268.125445`9.000000000000002, 269.12746`9.000000000000002, 270.130712`9.000000000000002, 259.1145`9.000000000000002, 258.113168`9.000000000000002, 259.1145`9.000000000000002, 260.114422071`12.000000000000004, 261.116117`9.000000000000002, 262.116398`9.000000000000002, 263.118322`9.000000000000002, 264.118931`9.000000000000002, 265.121114693`12.000000000000004, 266.122065`9.000000000000002, 267.124425`9.000000000000002, 268.125606`9.000000000000002, 269.128755`9.000000000000002, 270.130329`9.000000000000002, 271.133472`9.000000000000002, 272.135158`9.000000000000002, 273.13822`9.000000000000002, 262.122892`9.000000000000002, 260.12197`9.000000000000002, 261.121664`9.000000000000002, 262.122892`9.000000000000002, 263.123035`9.000000000000002, 264.124604`9.000000000000002, 265.125147`9.000000000000002, 266.126942`9.000000000000002, 267.12765`9.000000000000002, 268.129755`9.000000000000002, 269.130694`9.000000000000002, 270.133616`9.000000000000002, 271.135179`9.000000000000002, 272.138032`9.000000000000002, 273.139618`9.000000000000002, 274.14244`9.000000000000002, 275.14425`9.000000000000002, 263.128558`9.000000000000002, 263.128558`9.000000000000002, 264.128394885`11.999999999999998, 265.130085`9.000000000000002, 266.130097`9.000000000000002, 267.131789`9.000000000000002, 268.132162`9.000000000000002, 269.134056`9.000000000000002, 270.13465`9.000000000000002, 271.137657`9.000000000000002, 272.139052`9.000000000000002, 273.141986`9.000000000000002, 274.143131`9.000000000000002, 275.145952`9.000000000000002, 276.147208`9.000000000000002, 277.149841`9.000000000000002, 265.136151`9.000000000000002, 265.136151`9.000000000000002, 266.137299`9.000000000000002, 267.137307`9.000000000000002, 268.138728`9.000000000000002, 269.139055`9.000000000000002, 270.140657`9.000000000000002, 271.141139`9.000000000000002, 272.143738`9.000000000000002, 273.144913`9.000000000000002, 274.147492`9.000000000000002, 275.148647`9.000000000000002, 276.151156`9.000000000000002, 277.15242`9.000000000000002, 278.154812`9.000000000000002, 279.156193`9.000000000000002, 281.162061`9.000000000000002, 267.144341`9.000000000000002, 268.143795`9.000000000000002, 269.145124`9.000000000000002, 270.14472`9.000000000000002, 271.146062`9.000000000000002, 272.146317`9.000000000000002, 273.148863`9.000000000000002, 274.149492`9.000000000000002, 275.152176`9.000000000000002, 276.153034`9.000000000000002, 277.155647`9.000000000000002, 278.156469`9.000000000000002, 279.158861`9.000000000000002, 280.159795`9.000000000000002, 281.162061`9.000000000000002, 272.153615`9.000000000000002, 272.153615`9.000000000000002, 273.153682`9.000000000000002, 274.155713`9.000000000000002, 275.156142`9.000000000000002, 276.158493`9.000000000000002, 277.159519`9.000000000000002, 278.161604`9.000000000000002, 279.162468`9.000000000000002, 280.164473`9.000000000000002, 281.165372`9.000000000000002, 282.167486`9.000000000000002, 283.168415`9.000000000000002, 283.171792`9.000000000000002, 277.163943`9.000000000000002, 278.164312`9.000000000000002, 279.166546`9.000000000000002, 280.167039`9.000000000000002, 281.169286`9.000000000000002, 282.169765`9.000000000000002, 283.171792`9.000000000000002, 284.172384`9.000000000000002, 285.174105`9.000000000000002, 283.176451`9.000000000000002, 283.176451`9.000000000000002, 284.17808`9.000000000000002, 285.178732`9.000000000000002, 286.180481`9.000000000000002, 287.181045`9.000000000000002, 285.183698`9.000000000000002, 285.183698`9.000000000000002, 286.183855`9.000000000000002, 287.185599`9.000000000000002, 288.185689`9.000000000000002, 289.187279`9.000000000000002, 287.191186`9.000000000000002, 287.191186`9.000000000000002, 288.192492`9.000000000000002, 289.192715`9.000000000000002, 290.194141`9.000000000000002, 291.194384`9.000000000000002, 292.199786`9.000000000000002, 289.198862`9.000000000000002, 290.19859`9.000000000000002, 291.200011`9.000000000000002, 292.199786`9.000000000000002, 291.206564`9.000000000000002, 291.206564`9.000000000000002, 292.207549`9.000000000000002, 293.21467`9.000000000000002, 293.21467`9.000000000000002}], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581236150408*^9}], Cell[BoxData["\<\"\"\>"], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581236258293*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[mostcommonisotopemasslist]=\"\>", "\[InvisibleSpace]", "119"}], SequenceForm["Length[mostcommonisotopemasslist]=", 119], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.4135812362925053`*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[mostcommonisotopemasslistLabels]=\"\>", "\[InvisibleSpace]", "119"}], SequenceForm["Length[mostcommonisotopemasslistLabels]=", 119], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581236342916*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[mostcommonisotopemasslistValues]=\"\>", "\[InvisibleSpace]", "119"}], SequenceForm["Length[mostcommonisotopemasslistValues]=", 119], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.41358123639366*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[isotopemasslist]=\"\>", "\[InvisibleSpace]", "3298"}], SequenceForm["Length[isotopemasslist]=", 3298], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581236444653*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[isotopemasslistLabels]=\"\>", "\[InvisibleSpace]", "3298"}], SequenceForm["Length[isotopemasslistLabels]=", 3298], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.413581236494122*^9}], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Length[isotopemasslistValues]=\"\>", "\[InvisibleSpace]", "3298"}], SequenceForm["Length[isotopemasslistValues]=", 3298], Editable->False]], "Print", CellChangeTimes->{3.413567580921967*^9, 3.413567813791959*^9, 3.413567891226585*^9, 3.4135679898287487`*^9, 3.413568655073546*^9, 3.413568719790161*^9, 3.413570054665371*^9, 3.4135704339829693`*^9, 3.413570697996613*^9, 3.4135711526392927`*^9, 3.413571388703267*^9, 3.4135714331252813`*^9, 3.413571507066526*^9, 3.4135716879015636`*^9, 3.4135718040154753`*^9, 3.4135719755523167`*^9, 3.413572209152917*^9, 3.413572495431177*^9, 3.4135754203857107`*^9, 3.4135812365447206`*^9}] }, Open ]] }, Open ]] }, Open ]] }, WindowSize->{751, 706}, WindowMargins->{{141, Automatic}, {Automatic, 0}}, FrontEndVersion->"6.0 for Mac OS X x86 (32-bit) (April 20, 2007)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[590, 23, 186, 2, 123, "Title"], Cell[779, 27, 141, 1, 26, "Subsubtitle"], Cell[923, 30, 1046, 21, 176, "Text"], Cell[1972, 53, 47279, 1041, 3643, "Input"], Cell[CellGroupData[{ Cell[49276, 1098, 2015, 29, 27, "Input"], Cell[CellGroupData[{ Cell[51316, 1131, 693, 12, 20, "Print"], Cell[52012, 1145, 686, 11, 20, "Print"], Cell[52701, 1158, 731, 12, 20, "Print"], Cell[53435, 1172, 5546, 90, 141, "Print"], Cell[58984, 1264, 8814, 143, 321, "Print"], Cell[67801, 1409, 729, 12, 20, "Print"], Cell[68533, 1423, 152014, 2268, 5166, "Print"], Cell[220550, 3693, 232974, 3603, 8496, "Print"], Cell[453527, 7298, 528, 7, 20, "Print"], Cell[454058, 7307, 708, 12, 20, "Print"], Cell[454769, 7321, 718, 12, 20, "Print"], Cell[455490, 7335, 717, 12, 20, "Print"], Cell[456210, 7349, 684, 11, 20, "Print"], Cell[456897, 7362, 700, 12, 20, "Print"], Cell[457600, 7376, 702, 12, 20, "Print"] }, Open ]] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *) ������������������������������������������������������������psi3/README�����������������������������������������������������������������������������������������0000644�0001015�0000765�00000005073�11144156011�011060� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ PSI3: A Quantum Chemical Program Package ======================================== PSI3 is a suite of ab initio quantum chemistry programs designed to compute various molecular properties. A few highlights of the package include: * Coupled cluster (CC) methods, including CCSD, CCSD(T), and CC3. * Determinant-based configuration interaction (CI) methods, including full CI and various flavors of multireference CI. * Integrals and derivative integrals over Gaussian functions of arbitrary angular momentum (up to m-type functions have been tested). * Linear R12 methods, including MP2-R12. * Excited-state methods, including CIS(D), RPA, CCSD, and CC3. * Linear-response properties for SCF, CC2, and CCSD. ------------------------------------------------------------------------------ AUTHORS: ======== T. Daniel Crawford, C. David Sherrill, Edward F. Valeev, Justin T. Fermann, Rollin A. King, Matthew L. Leininger, Micah L. Abrams, Francesco A. Evangelista, Andrew C. Simmonett, Justin M. Turney, Nicholas J. Russ, Shawn T. Brown, Curtis L. Janssen, Edward T. Seidl, Joseph P. Kenny, and Wesley D. Allen, PSI 3.4, 2009. Please cite the manuscript describing the PSI3 program: "PSI3: An open-source ab initio electronic structure package", T. D. Crawford, C. D. Sherrill, E. F. Valeev, J. T. Fermann, R. A. King, M. L. Leininger, S. T. Brown, C. L. Janssen, E. T. Seidl, J. P. Kenny, and W. D. Allen, J. Comp. Chem. 28, 1610 (2007). ------------------------------------------------------------------------------ INSTALLATION: ============= The file "INSTALL" provides detailed installation instructions for PSI3. ------------------------------------------------------------------------------ LICENSE: ======== This software is distributed under the GNU General Public License. See the file LICENSE for more information. ------------------------------------------------------------------------------ DISCLAIMER: =========== There is no warranty for the program, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the program "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction. ------------------------------------------------------------------------------ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/�������������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111672�010770� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/���������������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111672�011540� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/�����������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111670�013523� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/add_core_ROHF.cc�������������������������������������������������������������0000644�0001015�0000765�00000001440�10757640026�016420� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void add_core_ROHF(struct iwlbuf *OutBuf) { int p,q,m,n; int nmo, nfzv, nfzc; double value; nmo = moinfo.nmo; nfzv = moinfo.nfzv; nfzc = moinfo.nfzc; for(p=nfzc; p < (nmo - nfzv); p++) { for(q=nfzc; q < (nmo - nfzv); q++) { value = moinfo.opdm[p][q]; for(m=0; m < nfzc; m++) { iwl_buf_wrt_val(OutBuf, p, q, m, m,value,0,outfile,0); iwl_buf_wrt_val(OutBuf, p, m, m, q,-0.5*value,0,outfile,0); } } } } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/add_core_UHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000001504�10757640026�016305� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* doesn't work yet */ void add_core_UHF(struct iwlbuf *OutBuf) { int p,q,m,n; int nmo, nfzv, nfzc; double value; nmo = moinfo.nmo; nfzv = moinfo.nfzv; nfzc = moinfo.nfzc; return; for(p=nfzc; p < (nmo - nfzv); p++) { for(q=nfzc; q < (nmo - nfzv); q++) { value = moinfo.opdm_a[p][q]; for(m=0; m < nfzc; m++) { iwl_buf_wrt_val(OutBuf, p, q, m, m,value,0,outfile,0); iwl_buf_wrt_val(OutBuf, p, m, m, q,-0.5*value,0,outfile,0); } } } } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/add_ref.cc�������������������������������������������������������������������0000644�0001015�0000765�00000002541�10757640026�015431� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void add_ref(struct iwlbuf *OutBuf) { int i,j; int nfzc, nclsd, nopen; nfzc = moinfo.nfzc; nclsd = moinfo.nclsd; nopen = moinfo.nopen; /*** One-electron component ***/ for(i=0; i < (nfzc + nclsd); i++) moinfo.opdm[i][i] += 2.0; for(i=nfzc + nclsd; i < (nfzc + nclsd + nopen); i++) moinfo.opdm[i][i] += 1.0; /*** Two-electron component ***/ /* docc-docc */ for(i=0; i < (nfzc + nclsd); i++) { iwl_buf_wrt_val(OutBuf, i, i, i, i, 1.0, 0, outfile, 0); for(j=0; j < i; j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 2.0, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-1.0, 0, outfile, 0); } } /* socc-docc && socc-socc*/ for(i=(nfzc + nclsd); i < (nfzc + nclsd + nopen); i++) { for(j=0; j < (nfzc + nclsd); j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 1.0, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-0.5, 0, outfile, 0); } for(j=(nfzc + nclsd); j < i; j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 0.5, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-0.5, 0, outfile, 0); } } } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/add_ref_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000001745�11027011315�016115� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void add_ref_RHF(struct iwlbuf *OutBuf) { int i,j; int nfzc, nclsd, nopen; nfzc = moinfo.nfzc; nclsd = moinfo.nclsd; nopen = moinfo.nopen; /*** One-electron component ***/ for(i=0; i < (nfzc + nclsd); i++) moinfo.opdm[i][i] += 2.0; for(i=nfzc + nclsd; i < (nfzc + nclsd + nopen); i++) moinfo.opdm[i][i] += 1.0; /*** Two-electron component ***/ /* docc-docc */ for(i=0; i < (nfzc + nclsd); i++) { iwl_buf_wrt_val(OutBuf, i, i, i, i, 1.0, 0, outfile, 0); for(j=0; j < i; j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 2.0, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-1.0, 0, outfile, 0); } } } }} // namespace psi::ccdensity ���������������������������psi3/src/bin/ccdensity/add_ref_ROHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000002546�10757640026�016254� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void add_ref_ROHF(struct iwlbuf *OutBuf) { int i,j; int nfzc, nclsd, nopen; nfzc = moinfo.nfzc; nclsd = moinfo.nclsd; nopen = moinfo.nopen; /*** One-electron component ***/ for(i=0; i < (nfzc + nclsd); i++) moinfo.opdm[i][i] += 2.0; for(i=nfzc + nclsd; i < (nfzc + nclsd + nopen); i++) moinfo.opdm[i][i] += 1.0; /*** Two-electron component ***/ /* docc-docc */ for(i=0; i < (nfzc + nclsd); i++) { iwl_buf_wrt_val(OutBuf, i, i, i, i, 1.0, 0, outfile, 0); for(j=0; j < i; j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 2.0, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-1.0, 0, outfile, 0); } } /* socc-docc && socc-socc*/ for(i=(nfzc + nclsd); i < (nfzc + nclsd + nopen); i++) { for(j=0; j < (nfzc + nclsd); j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 1.0, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-0.5, 0, outfile, 0); } for(j=(nfzc + nclsd); j < i; j++) { iwl_buf_wrt_val(OutBuf, i, i, j, j, 0.5, 0, outfile, 0); iwl_buf_wrt_val(OutBuf, i, j, j, i,-0.5, 0, outfile, 0); } } } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/add_ref_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000004403�10757640026�016132� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* add_ref_UHF(): This function adds the reference contributions to ** the one- and two-particle density matrices. These contributions ** are simply the prefactors in front of the one- and two-electron ** intgegrals, respectively, in the UHF energy expression. In the ** case of the two-pdm, however, care must be taken that only the ** permutationally unique elements be written to disk. ** ** In spin-orbitals with Mulliken-order two-electron integrals, the ** three spin contributions to the SCF energy are: ** ** E_AA(SCF) = sum_I h_II + 1/2 sum_IJ ([II|JJ] - [IJ|IJ]) ** E_BB(SCF) = sum_i h_ii + 1/2 sum_ij ([ii|jj] - [ij|ij]) ** E_AB(SCF) = 1/2 sum_Ij [II|jj] ** ** I use QT-standard ordering for the indices in these expressions. */ void add_ref_UHF(struct iwlbuf *AA, struct iwlbuf *BB, struct iwlbuf *AB) { int i,j; int nfzc, nclsd, nopen; nfzc = moinfo.nfzc; nclsd = moinfo.nclsd; nopen = moinfo.nopen; /*** One-electron components ***/ /* alpha-occ block */ for(i=0; i < (nfzc + nclsd + nopen); i++) moinfo.opdm_a[i][i] += 1.0; /* beta-occ block */ for(i=0; i < (nfzc + nclsd); i++) moinfo.opdm_b[i][i] += 1.0; /*** Two-electron components ***/ /* AA */ for(i=0; i < (nfzc + nclsd + nopen); i++) { for(j=0; j < i; j++) { iwl_buf_wrt_val(AA, i, i, j, j, 0.5, 0, outfile, 0); iwl_buf_wrt_val(AA, i, j, i, j,-0.25, 0, outfile, 0); iwl_buf_wrt_val(AA, j, i, j, i,-0.25, 0, outfile, 0); iwl_buf_wrt_val(AA, i, j, j, i,-0.25, 0, outfile, 0); } } /* BB */ for(i=0; i < (nfzc + nclsd); i++) { for(j=0; j < i; j++) { iwl_buf_wrt_val(BB, i, i, j, j, 0.5, 0, outfile, 0); iwl_buf_wrt_val(BB, i, j, i, j,-0.25, 0, outfile, 0); iwl_buf_wrt_val(BB, j, i, j, i,-0.25, 0, outfile, 0); iwl_buf_wrt_val(BB, i, j, j, i,-0.25, 0, outfile, 0); } } /* AB */ for(i=0; i < (nfzc + nclsd + nopen); i++) for(j=0; j < (nfzc + nclsd); j++) iwl_buf_wrt_val(AB, i, i, j, j, 1.0, 0, outfile, 0); } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/ael.c������������������������������������������������������������������������0000644�0001015�0000765�00000004464�10757640026�014451� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libqt/qt.h> #include <psifiles.h> #define EXTERN #include "globals.h" #include <cmath> /** AEL() computes the approximate excitation level according to ** Stanton and Bartlett, JCP, 98, 1993, 7034. ** Trace [rho(excited) - rho(ground)] = AEL ** where both densities are expressed in the basis that diagonalizes ** the ground-state CCSD density. ** I was never able to get these results to agree with those of JFS or ** the current ACES2 so I'm not going to use this right now. ** --RAK */ void ael(struct RHO_Params *rho_params) { int dim,i,j,k; double **rho_g, *evals, **evects, **tmat, **rho_x, ael, **rho_diff, trace; dim = moinfo.nmo - moinfo.nfzv; rho_g = block_matrix(dim,dim); rho_x = block_matrix(dim,dim); rho_diff = block_matrix(dim,dim); evals = init_array(dim); evects = block_matrix(dim,dim); tmat = block_matrix(dim,dim); /* read and diagonalize the ground-state rho */ psio_open(PSIF_MO_OPDM, PSIO_OPEN_OLD); psio_read_entry(PSIF_MO_OPDM, rho_params[0].opdm_lbl, (char *) &(rho_g[0][0]), sizeof(double)*dim*dim); psio_close(PSIF_MO_OPDM, 1); sq_rsp(dim, dim, rho_g, evals, 3, evects, 1.0E-14); C_DGEMM('t', 'n', dim, dim, dim, 1.0, &(evects[0][0]), dim, &(rho_g[0][0]), dim, 0.0, &(tmat[0][0]), dim); C_DGEMM('n', 'n', dim, dim, dim, 1.0, &(tmat[0][0]), dim, &(evects[0][0]), dim, 0.0, &(rho_g[0][0]), dim); for (i=1; i<params.nstates; ++i) { /* read in the excited state density */ psio_open(PSIF_MO_OPDM, PSIO_OPEN_OLD); psio_read_entry(PSIF_MO_OPDM, rho_params[i].opdm_lbl, (char *) &(rho_x[0][0]), sizeof(double)*dim*dim); psio_close(PSIF_MO_OPDM, 1); /* transform the excited-state density */ C_DGEMM('t', 'n', dim, dim, dim, 1.0, &(evects[0][0]), dim, &(rho_x[0][0]), dim, 0.0, &(tmat[0][0]), dim); C_DGEMM('n', 'n', dim, dim, dim, 1.0, &(tmat[0][0]), dim, &(evects[0][0]), dim, 0.0, &(rho_x[0][0]), dim); /* compute the ith AEL */ ael = 0.0; for (j=0; j<dim; ++j) { ael += 0.5 * fabs( rho_x[j][k] - rho_g[j][k] ); } fprintf(outfile, "\tAEL %d: %10.7lf\n", i, ael); } free(evals); free_block(evects); free_block(tmat); free_block(rho_g); free_block(rho_x); free_block(rho_diff); return; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_A.cc�������������������������������������������������������������������0000644�0001015�0000765�00000001032�11027011315�015356� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* BUILD_A(): Construct the molecular orbital Hessian, A. ** */ void build_A_RHF(void); void build_A_ROHF(void); void build_A_UHF(void); void build_A(void) { if(params.ref == 0) build_A_RHF(); else if(params.ref == 1) build_A_ROHF(); else if(params.ref == 2) build_A_UHF(); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_A_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000005266�11100440730�016071� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* BUILD_A_RHF(): Construct the molecular orbital Hessian, A, for ** RHF orbitals. At the moment we're actually building all symmetry ** blocks of A, though for the orbital Z-vector equations we really ** only need the totally symmetric components. ** ** In spatial orbitals: ** ** A(em,ai) = 4 <mi|ea> - <im|ea> - <me|ia> + (m==i) fea - (e==a) fmi ** ** */ void build_A_RHF(void) { int h, nirreps, e, m, a, i, em, ai, E, M, A, I; int Esym, Msym, Asym, Isym; dpdfile2 fIJ, fAB; dpdbuf4 Amat, D, C; nirreps = moinfo.nirreps; /* Two-electron integral contributions */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_MISC, rpsq, 11, 11, "A(EM,AI)"); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); dpd_buf4_scm(&Amat, 4.0); dpd_buf4_close(&Amat); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort_axpy(&D, CC_MISC, rqsp, 11, 11, "A(EM,AI)", -1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort_axpy(&C, CC_MISC, qpsr, 11, 11, "A(EM,AI)", -1); dpd_buf4_close(&C); /* Fock matrix contributions */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(em=0; em < Amat.params->rowtot[h]; em++) { e = Amat.params->roworb[h][em][0]; m = Amat.params->roworb[h][em][1]; E = fAB.params->rowidx[e]; M = fIJ.params->rowidx[m]; Esym = fAB.params->psym[e]; Msym = fIJ.params->psym[m]; for(ai=0; ai < Amat.params->coltot[h]; ai++) { a = Amat.params->colorb[h][ai][0]; i = Amat.params->colorb[h][ai][1]; A = fAB.params->colidx[a]; I = fIJ.params->colidx[i]; Asym = fAB.params->qsym[a]; Isym = fIJ.params->qsym[i]; if((M==I) && (Esym==Asym)) Amat.matrix[h][em][ai] += fAB.matrix[Esym][E][A]; if((E==A) && (Msym==Isym)) Amat.matrix[h][em][ai] -= fIJ.matrix[Msym][M][I]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_A_ROHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000016743�10754663017�016235� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* BUILD_A_ROHF(): Construct the molecular orbital Hessian, A, for ** ROHF orbitals. At the moment we're actually building all symmetry ** blocks of A, though for the orbital Z-vector equations we really ** only need the totally symmetric components. ** ** A(EM,AI) = 2<MI|EA> - <IM|EA> - <ME|IA> + del_MI fEA - del_EA fMI ** ** A(em,ai) = 2<mi|ea> - <im|ea> - <me|ia> + del_mi fea - del_ea fmi ** ** A(EM,ai) = 2<Mi|Ea> + del_Ma fei ** ** */ void build_A_ROHF(void) { int h, nirreps, e, m, a, i, em, ai, E, M, A, I; int Esym, Msym, Asym, Isym; int *virtpi, *openpi, *occpi, *occ_off, *vir_off; int *qt_occ, *qt_vir; /* Spatial orbital translators */ dpdfile2 fIJ, fij, fAB, fab, fIA, fia; dpdbuf4 Amat, Amat2, D, C; nirreps = moinfo.nirreps; occpi = moinfo.occpi; openpi = moinfo.openpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; /* Two-electron integral contributions */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_MISC, rpsq, 11, 11, "A(EM,AI)"); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); dpd_buf4_sort(&Amat, CC_TMP0, psrq, 11, 11, "D <im|ea> (ei,am)"); dpd_buf4_scm(&Amat, 2.0); dpd_buf4_copy(&Amat, CC_TMP0, "A(EM,ai)"); dpd_buf4_init(&D, CC_TMP0, 0, 11, 11, 11, 11, 0, "D <im|ea> (ei,am)"); dpd_buf4_axpy(&D, &Amat, -1.0); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_TMP0, qpsr, 11, 11, "C <ai|bj>"); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_TMP0, 0, 11, 11, 11, 11, 0, "C <ai|bj>"); dpd_buf4_axpy(&C, &Amat, -1.0); dpd_buf4_close(&C); dpd_buf4_copy(&Amat, CC_TMP0, "A(em,ai)"); dpd_buf4_close(&Amat); /* Fock matrix contributions */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fia); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(em=0; em < Amat.params->rowtot[h]; em++) { e = Amat.params->roworb[h][em][0]; m = Amat.params->roworb[h][em][1]; E = fAB.params->rowidx[e]; M = fIJ.params->rowidx[m]; Esym = fAB.params->psym[e]; Msym = fIJ.params->psym[m]; for(ai=0; ai < Amat.params->coltot[h]; ai++) { a = Amat.params->colorb[h][ai][0]; i = Amat.params->colorb[h][ai][1]; A = fAB.params->colidx[a]; I = fIJ.params->colidx[i]; Asym = fAB.params->qsym[a]; Isym = fIJ.params->qsym[i]; if((M==I) && (Esym==Asym)) Amat.matrix[h][em][ai] += fAB.matrix[Esym][E][A]; if((E==A) && (Msym==Isym)) Amat.matrix[h][em][ai] -= fIJ.matrix[Msym][M][I]; /* Check to see if these virtual indices actually correspond to open-shell orbitals --- if so, set this element to zero */ if((E >= (virtpi[Esym] - openpi[Esym])) || (A >= (virtpi[Asym] - openpi[Asym])) ) Amat.matrix[h][em][ai] = 0.0; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&Amat, CC_TMP0, 0, 11, 11, 11, 11, 0, "A(em,ai)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(em=0; em < Amat.params->rowtot[h]; em++) { e = Amat.params->roworb[h][em][0]; m = Amat.params->roworb[h][em][1]; E = fab.params->rowidx[e]; M = fij.params->rowidx[m]; Esym = fab.params->psym[e]; Msym = fij.params->psym[m]; for(ai=0; ai < Amat.params->coltot[h]; ai++) { a = Amat.params->colorb[h][ai][0]; i = Amat.params->colorb[h][ai][1]; A = fab.params->colidx[a]; I = fij.params->colidx[i]; Asym = fab.params->qsym[a]; Isym = fij.params->qsym[i]; if((M==I) && (Esym==Asym)) Amat.matrix[h][em][ai] += fab.matrix[Esym][E][A]; if((E==A) && (Msym==Isym)) Amat.matrix[h][em][ai] -= fij.matrix[Msym][M][I]; /* Check to see if these occupied indices actually correspond to open-shell orbitals --- if so, set this element to zero */ if((M >= (occpi[Msym] - openpi[Msym])) || (I >= (occpi[Isym] - openpi[Isym])) ) Amat.matrix[h][em][ai] = 0.0; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&Amat, CC_TMP0, 0, 11, 11, 11, 11, 0, "A(EM,ai)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(em=0; em < Amat.params->rowtot[h]; em++) { e = Amat.params->roworb[h][em][0]; m = Amat.params->roworb[h][em][1]; Esym = Amat.params->psym[e]; Msym = Amat.params->qsym[m]; E = e - vir_off[Esym]; M = m - occ_off[Msym]; for(ai=0; ai < Amat.params->coltot[h]; ai++) { a = Amat.params->colorb[h][ai][0]; i = Amat.params->colorb[h][ai][1]; Asym = Amat.params->rsym[a]; Isym = Amat.params->ssym[i]; A = a - vir_off[Asym]; I = i - occ_off[Isym]; /* This comparison is somewhat tricky. The algebraic expression for the Fock matrix shift here is: A(EM,ai) += delta(M,a) f(E,i)(beta) The Kronecker Delta is actually a comparison between the *spatial* orbitals associated with M, and A. Hence we have to compare the spatial orbital translation of the the two absolute orbital indices. */ if((qt_occ[m] == qt_vir[a]) && (Esym==Isym)) Amat.matrix[h][em][ai] += fia.matrix[Isym][I][E]; /* Check to see if these occupied and virtual indices actually correspond to open-shell orbitals --- if so, set this element to zero */ if((E >= (virtpi[Esym] - openpi[Esym])) || (I >= (occpi[Isym] - openpi[Isym])) ) Amat.matrix[h][em][ai] = 0.0; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_sort(&Amat, CC_TMP0, rspq, 11, 11, "A(em,AI)"); dpd_buf4_close(&Amat); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fia); /* Now sum all three A-matrix components and divide by 2 */ dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); dpd_buf4_init(&Amat2, CC_TMP0, 0, 11, 11, 11, 11, 0, "A(em,ai)"); dpd_buf4_axpy(&Amat2, &Amat, 1.0); dpd_buf4_close(&Amat2); dpd_buf4_init(&Amat2, CC_TMP0, 0, 11, 11, 11, 11, 0, "A(EM,ai)"); dpd_buf4_axpy(&Amat2, &Amat, 1.0); dpd_buf4_close(&Amat2); dpd_buf4_init(&Amat2, CC_TMP0, 0, 11, 11, 11, 11, 0, "A(em,AI)"); dpd_buf4_axpy(&Amat2, &Amat, 1.0); dpd_buf4_close(&Amat2); dpd_buf4_scm(&Amat, 0.5); dpd_buf4_close(&Amat); } }} // namespace psi::ccdensity �����������������������������psi3/src/bin/ccdensity/build_A_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000011153�10754663017�016107� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* BUILD_A_UHF(): Construct the components of the molecular orbital ** Hessian, A, for UHF orbitals. At the moment we're actually building ** all symmetry blocks of A, though for the orbital Z-vector equations ** we really only need the totally symmetric components. ** ** A(AI,JB) = delta_IJ f_AB - delta_AB f_IJ + <IJ||AB> - <JA||IB> ** ** A(ai,jb) = delta_ij f_ab - delta_ab f_ij + <ij||ab> - <ja||ib> ** ** A(AI,jb) = 2<Ij|Ab> ** ** TDC, January 2003 */ void build_A_UHF(void) { int h, nirreps, row, col; int a, i, b, j; int A, I, B, J; int Asym, Isym, Bsym, Jsym; dpdfile2 fIJ, fij, fAB, fab, fIA, fia; dpdbuf4 Amat, D, C; nirreps = moinfo.nirreps; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fia); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 1, "D <IJ|AB>"); dpd_buf4_sort(&D, CC_MISC, rpsq, 21, 21, "A(AI,BJ)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_sort_axpy(&D, CC_MISC, qrsp, 21, 21, "A(AI,BJ)", -1.0); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 21, 21, 21, 21, 0, "A(AI,BJ)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(row=0; row < Amat.params->rowtot[h]; row++) { a = Amat.params->roworb[h][row][0]; i = Amat.params->roworb[h][row][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(col=0; col < Amat.params->coltot[h]; col++) { b = Amat.params->colorb[h][col][0]; j = Amat.params->colorb[h][col][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][row][col] += fAB.matrix[Asym][A][B]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][row][col] -= fIJ.matrix[Isym][I][J]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 1, "D <ij|ab>"); dpd_buf4_sort(&D, CC_MISC, rpsq, 31, 31, "A(ai,bj)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_sort_axpy(&D, CC_MISC, qrsp, 31, 31, "A(ai,bj)", -1.0); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 31, 31, 31, 31, 0, "A(ai,bj)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(row=0; row < Amat.params->rowtot[h]; row++) { a = Amat.params->roworb[h][row][0]; i = Amat.params->roworb[h][row][1]; A = fab.params->rowidx[a]; I = fij.params->rowidx[i]; Asym = fab.params->psym[a]; Isym = fij.params->psym[i]; for(col=0; col < Amat.params->coltot[h]; col++) { b = Amat.params->colorb[h][col][0]; j = Amat.params->colorb[h][col][1]; B = fab.params->colidx[b]; J = fij.params->colidx[j]; Bsym = fab.params->qsym[b]; Jsym = fij.params->qsym[j]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][row][col] += fab.matrix[Asym][A][B]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][row][col] -= fij.matrix[Isym][I][J]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_sort(&D, CC_MISC, rpsq, 21, 31, "A(AI,bj)"); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 21, 31, 21, 31, 0, "A(AI,bj)"); dpd_buf4_scm(&Amat, 2); dpd_buf4_close(&Amat); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fia); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_X.cc�������������������������������������������������������������������0000644�0001015�0000765�00000005123�11027011315�015412� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* BUILD_X(): Construct the orbital rotation gradient, XAI, for CC ** gradient calculations: ** ** Xai = I'ia - I'ai ** */ void build_X(void) { dpdfile2 X, I, X2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_copy(&I, CC_OEI, "XAI"); dpd_file2_close(&I); dpd_file2_init(&X, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_scm(&X, -1.0); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_axpy(&I, &X, 1.0, 1); dpd_file2_close(&I); dpd_file2_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_copy(&I, CC_OEI, "XAI"); dpd_file2_close(&I); dpd_file2_init(&X, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_scm(&X, -1.0); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_axpy(&I, &X, 1.0, 1); dpd_file2_close(&I); dpd_file2_close(&X); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_copy(&I, CC_OEI, "Xai"); dpd_file2_close(&I); dpd_file2_init(&X, CC_OEI, 0, 1, 0, "Xai"); dpd_file2_scm(&X, -1.0); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_file2_axpy(&I, &X, 1.0, 1); dpd_file2_close(&I); dpd_file2_close(&X); /* Build spatial orbital version of X for Zvector: X(A,I) = 1/2[X(A,I)+X(a,i)] */ dpd_file2_init(&X, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_copy(&X, CC_MISC, "X(A,I)"); dpd_file2_close(&X); dpd_file2_init(&X, CC_MISC, 0, 1, 0, "X(A,I)"); dpd_file2_init(&X2, CC_OEI, 0, 1, 0, "Xai"); dpd_file2_axpy(&X2, &X, 1.0, 0); dpd_file2_close(&X2); dpd_file2_scm(&X, 0.5); dpd_file2_close(&X); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_copy(&I, CC_OEI, "XAI"); dpd_file2_close(&I); dpd_file2_init(&X, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_scm(&X, -1.0); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_axpy(&I, &X, 1.0, 1); dpd_file2_close(&I); dpd_file2_close(&X); dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_file2_copy(&I, CC_OEI, "Xai"); dpd_file2_close(&I); dpd_file2_init(&X, CC_OEI, 0, 3, 2, "Xai"); dpd_file2_scm(&X, -1.0); dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_file2_axpy(&I, &X, 1.0, 1); dpd_file2_close(&I); dpd_file2_close(&X); } } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_Z.cc�������������������������������������������������������������������0000644�0001015�0000765�00000001376�11027011315�015422� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build_Z(): Solve the orbital Z-vector equations: ** ** sum E,M A(AI,EM) D(orb)(E,M) = -X(A,I) ** ** where A(AI,EM) is the orbital Hessian computed in build_A(), X(A,I) ** is the orbital rotation gradient computed in build_X(), and ** D(orb)(E,M) is the final Z-vector we want. ** */ void build_Z_RHF(void); void build_Z_ROHF(void); void build_Z_UHF(void); void build_Z(void) { if(params.ref == 0) build_Z_RHF(); else if(params.ref == 1) build_Z_ROHF(); else if(params.ref == 2) build_Z_UHF(); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_Z_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000003712�11027011315�016115� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdlib.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <libciomr/libciomr.h> #include <math.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build_Z_RHF(): Solve the orbital Z-vector equations for RHF refs: ** ** sum E,M A(AI,EM) D(orb)(E,M) = -X(A,I) ** ** where A(AI,EM) is the orbital Hessian computed in build_A(), X(A,I) ** is the orbital rotation gradient computed in build_X(), and ** D(orb)(E,M) is the final Z-vector we want. ** */ void build_Z_RHF(void) { dpdbuf4 A; dpdfile2 X1, D; double *X; int h, nirreps, a, i, count; nirreps = moinfo.nirreps; /* Grab only irrep 0 of the orbital Hessian */ dpd_buf4_init(&A, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); dpd_buf4_mat_irrep_init(&A, 0); dpd_buf4_mat_irrep_rd(&A, 0); /* Place all the elements of the orbital rotation gradient, X into a linear array, Z */ dpd_file2_init(&X1, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); X = init_array(A.params->rowtot[0]); for(h=0,count=0; h < nirreps; h++) for(a=0; a < X1.params->rowtot[h]; a++) for(i=0; i < X1.params->coltot[h]; i++) X[count++] = -X1.matrix[h][a][i]; dpd_file2_mat_close(&X1); dpd_file2_close(&X1); /* Trying out Matt's Pople code --- way to go, Matt! */ pople(A.matrix[0], X, A.params->rowtot[0], 1, 1e-12, outfile, 0); /* Build the orbital component of Dai */ dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_mat_init(&D); for(h=0,count=0; h < nirreps; h++) for(a=0; a < D.params->rowtot[h]; a++) for(i=0; i < D.params->coltot[h]; i++) D.matrix[h][a][i] = X[count++]; dpd_file2_mat_wrt(&D); dpd_file2_mat_close(&D); dpd_file2_close(&D); free(X); dpd_buf4_mat_irrep_close(&A, 0); dpd_buf4_close(&A); } }} // namespace psi::ccdensity ������������������������������������������������������psi3/src/bin/ccdensity/build_Z_ROHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000012335�10757640026�016255� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #include <libciomr/libciomr.h> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build_Z_ROHF(): Solve the orbital Z-vector equations for ROHF refs: ** ** sum E,M A(AI,EM) D(orb)(E,M) = -X(A,I) ** ** where A(AI,EM) is the orbital Hessian computed in build_A(), X(A,I) ** is the orbital rotation gradient computed in build_X(), and ** D(orb)(E,M) is the final Z-vector we want. ** */ void build_Z_ROHF(void) { dpdbuf4 A; dpdfile2 X1, D; double **X, **T, **Y, **Z; int num_ai, h, nirreps, a, i, count, lastcol, rank, ai; int *virtpi, *occpi, *openpi; nirreps = moinfo.nirreps; occpi = moinfo.occpi; openpi = moinfo.openpi; virtpi = moinfo.virtpi; /*** Construct the ai transformation matrix which places all singly occupied orbital combinations at the end of the vector ***/ /* First compute the number of ai pairs */ num_ai = 0; for(h=0; h < nirreps; h++) num_ai += virtpi[h] * occpi[h]; /* fprintf(outfile, "num_ai = %d\n", num_ai); */ /* Malloc space for the transformation matrix */ T = block_matrix(num_ai,num_ai); /* Now compute the row/column swaps we need and the number of zero columns*/ for(h=0,count=0,rank=0; h < nirreps; h++) for(a=0; a < virtpi[h]; a++) for(i=0; i < occpi[h]; i++) { if((a >= (virtpi[h] - openpi[h])) && (i >= (occpi[h] - openpi[h])) ) T[count][count] = 0.0; else { T[count][count] = 1.0; rank++; } count++; } count = 0; lastcol = num_ai-1; for(h=0; h < nirreps; h++) for(a=0; a < virtpi[h]; a++) for(i=0; i < occpi[h] && lastcol > count; i++,count++) { if(T[count][count] == 0.0) { while (T[lastcol][lastcol] == 0.0) lastcol--; if(lastcol > count) { T[count][lastcol] = T[lastcol][count] = 1.0; T[lastcol][lastcol] = 0.0; } } } /* print_mat(T, num_ai, num_ai, outfile); */ /*** Finished building the transformation matrix ***/ /* Place all the elements of the orbital rotation gradient, X into a linear array, Z */ dpd_file2_init(&X1, CC_MISC, 0, 1, 0, "X(A,I)"); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); num_ai = 0; for(h=0; h < nirreps; h++) num_ai += X1.params->rowtot[h]*X1.params->coltot[h]; Z = block_matrix(1,num_ai); for(h=0,count=0; h < nirreps; h++) for(a=0; a < X1.params->rowtot[h]; a++) for(i=0; i < X1.params->coltot[h]; i++) Z[0][count++] = -X1.matrix[h][a][i]; dpd_file2_mat_close(&X1); dpd_file2_close(&X1); /* Push the zero elements of X to the end of the vector */ X = block_matrix(1,num_ai); /* newmm(T,0,Z,0,X,num_ai,num_ai,1,1.0,0.0); */ if(num_ai) C_DGEMV('n',num_ai, num_ai, 1.0, &(T[0][0]), num_ai, &(Z[0][0]), 1, 0.0, &(X[0][0]), 1); /* Now, grab only irrep 0 of the orbital Hessian */ dpd_buf4_init(&A, CC_MISC, 0, 11, 11, 11, 11, 0, "A(EM,AI)"); dpd_buf4_mat_irrep_init(&A, 0); dpd_buf4_mat_irrep_rd(&A, 0); /* Move the zero rows and columns of the Hessian to the bottom. Note that as long as we won't be writing A back to disk, it's OK to put the product back in A.matrix[0]. */ Y = block_matrix(num_ai,num_ai); /* newmm(A.matrix[0],0,T,0,Y,num_ai,num_ai,num_ai,1.0,0.0); */ if(num_ai) C_DGEMM('n','n',num_ai,num_ai,num_ai,1.0,&(A.matrix[0][0][0]),num_ai, &(T[0][0]),num_ai,0.0,&(Y[0][0]),num_ai); /* newmm(T,0,Y,0,A.matrix[0],num_ai,num_ai,num_ai,1.0,0.0); */ if(num_ai) C_DGEMM('n','n',num_ai,num_ai,num_ai,1.0,&(T[0][0]),num_ai,&(Y[0][0]),num_ai, 0.0,&(A.matrix[0][0][0]),num_ai); free_block(Y); /* Trying out Matt's Pople code --- way to go, Matt! */ pople(A.matrix[0], X[0], rank, 1, 1e-12, outfile, 0); dpd_buf4_mat_irrep_close(&A, 0); dpd_buf4_close(&A); /* Now re-order the elements of X back to the DPD format */ /* newmm(T,0,X,0,Z,num_ai,num_ai,1,1.0,0.0); */ if(num_ai) C_DGEMV('n',num_ai, num_ai, 1.0, &(T[0][0]), num_ai, &(X[0][0]), 1, 0.0, &(Z[0][0]), 1); free_block(X); /* We don't need the transformation matrix anymore */ free_block(T); /* for(ai=0; ai < num_ai; ai++) fprintf(outfile, "Z[%d] = %20.15f\n", ai, Z[0][ai]); */ /* Build the orbital component of Dai --- we'll build these as separate spin cases for future simplicity (e.g., UHF-based codes)*/ dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_mat_init(&D); for(h=0,count=0; h < nirreps; h++) for(a=0; a < D.params->rowtot[h]; a++) for(i=0; i < D.params->coltot[h]; i++) { D.matrix[h][a][i] = Z[0][count++]; if(a >= (virtpi[h] - openpi[h])) D.matrix[h][a][i] = 0.0; } dpd_file2_mat_wrt(&D); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_file2_mat_init(&D); for(h=0,count=0; h < nirreps; h++) for(a=0; a < D.params->rowtot[h]; a++) for(i=0; i < D.params->coltot[h]; i++) { D.matrix[h][a][i] = Z[0][count++]; if(i >= (occpi[h] - openpi[h])) D.matrix[h][a][i] = 0.0; } dpd_file2_mat_wrt(&D); dpd_file2_mat_close(&D); dpd_file2_close(&D); /* We're done with Z */ free_block(Z); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/build_Z_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000010675�10757640026�016146� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build_Z_UHF(): Solve the orbital Z-vector equations for UHF refs: ** ** A(AI,BJ) D(orb)(B,J) = -X(A,I) ** ** where A(AI,EM) is the orbital Hessian computed in build_A(), X(A,I) ** is the orbital rotation gradient computed in build_X(), and ** D(orb)(E,M) is the final Z-vector we want. ** */ void build_Z_UHF(void) { dpdbuf4 A_AA, A_BB, A_AB; dpdfile2 X, D; double **A, *Z; int num_ai, a, i, ai, bj; int h, nirreps, count, dim_A, dim_B; int *ipiv, info; int *avirtpi, *aoccpi; int *bvirtpi, *boccpi; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; /* compute the number of ai pairs */ num_ai = 0; for(h=0; h < nirreps; h++) { num_ai += avirtpi[h] * aoccpi[h]; num_ai += bvirtpi[h] * boccpi[h]; } /* Place all the elements of the orbital rotation gradient, X, into a linear array, Z */ Z = init_array(num_ai); dpd_file2_init(&X, CC_OEI, 0, 1, 0, "XAI"); dpd_file2_mat_init(&X); dpd_file2_mat_rd(&X); for(h=0,count=0; h < nirreps; h++) for(a=0; a < X.params->rowtot[h]; a++) for(i=0; i < X.params->coltot[h]; i++) Z[count++] = -X.matrix[h][a][i]; dpd_file2_mat_close(&X); dpd_file2_close(&X); dpd_file2_init(&X, CC_OEI, 0, 3, 2, "Xai"); dpd_file2_mat_init(&X); dpd_file2_mat_rd(&X); for(h=0; h < nirreps; h++) for(a=0; a < X.params->rowtot[h]; a++) for(i=0; i < X.params->coltot[h]; i++) Z[count++] = -X.matrix[h][a][i]; dpd_file2_mat_close(&X); dpd_file2_close(&X); /* Now, build the full MO Hessian */ dpd_buf4_init(&A_AA, CC_MISC, 0, 21, 21, 21, 21, 0, "A(AI,BJ)"); dpd_buf4_init(&A_BB, CC_MISC, 0, 31, 31, 31, 31, 0, "A(ai,bj)"); dpd_buf4_init(&A_AB, CC_MISC, 0, 21, 31, 21, 31, 0, "A(AI,bj)"); dim_A = A_AA.params->rowtot[0]; dim_B = A_BB.params->rowtot[0]; if(num_ai != dim_A + dim_B) { /* error */ fprintf(outfile, "Problem: num_ai(%d) != dim_A + dim_b (%d)\n", num_ai, dim_A + dim_B); exit(PSI_RETURN_FAILURE); } A = block_matrix(num_ai, num_ai); dpd_buf4_mat_irrep_init(&A_AA, 0); dpd_buf4_mat_irrep_rd(&A_AA, 0); for(ai=0; ai < dim_A; ai++) for(bj=0; bj < dim_A; bj++) A[ai][bj] = A_AA.matrix[0][ai][bj]; dpd_buf4_mat_irrep_close(&A_AA, 0); dpd_buf4_mat_irrep_init(&A_BB, 0); dpd_buf4_mat_irrep_rd(&A_BB, 0); for(ai=0; ai < dim_B; ai++) for(bj=0; bj < dim_B; bj++) A[ai+dim_A][bj+dim_A] = A_BB.matrix[0][ai][bj]; dpd_buf4_mat_irrep_close(&A_BB, 0); dpd_buf4_mat_irrep_init(&A_AB, 0); dpd_buf4_mat_irrep_rd(&A_AB, 0); for(ai=0; ai < dim_A; ai++) for(bj=0; bj < dim_B; bj++) A[ai][bj+dim_A] = A[bj+dim_A][ai] = A_AB.matrix[0][ai][bj]; dpd_buf4_mat_irrep_close(&A_AB, 0); dpd_buf4_close(&A_AA); dpd_buf4_close(&A_BB); dpd_buf4_close(&A_AB); /* ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A[0][0]), num_ai, &(ipiv[0]), &(Z[0]), num_ai); if(info) { fprintf(outfile, "\nError in DGESV return in build_Z_UHF: %d.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); free_block(A); */ pople(A, Z, num_ai, 1, 1e-12, outfile, 0); /* for(ai=0; ai < num_ai; ai++) fprintf(outfile, "Z[%d] = %20.15f\n", ai, Z[ai]); */ dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_scm(&D, 0.0); dpd_file2_mat_init(&D); for(h=0,count=0; h < nirreps; h++) for(a=0; a < D.params->rowtot[h]; a++) for(i=0; i < D.params->coltot[h]; i++) { if(fabs(Z[count]) > 1e3) D.matrix[h][a][i] = 0.0; else D.matrix[h][a][i] = Z[count]; count++; } dpd_file2_mat_wrt(&D); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_file2_scm(&D, 0.0); dpd_file2_mat_init(&D); for(h=0; h < nirreps; h++) for(a=0; a < D.params->rowtot[h]; a++) for(i=0; i < D.params->coltot[h]; i++) { if(fabs(Z[count]) > 1e3) D.matrix[h][a][i] = 0.0; else D.matrix[h][a][i] = Z[count]; count++; } dpd_file2_mat_wrt(&D); dpd_file2_mat_close(&D); dpd_file2_close(&D); /* We're done with Z */ free(Z); } }} // namespace psi::ccdensity �������������������������������������������������������������������psi3/src/bin/ccdensity/cache.cc���������������������������������������������������������������������0000644�0001015�0000765�00000037530�10757640026�015116� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace ccdensity { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_GL] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_GL] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/ccdensity.cc�����������������������������������������������������������������0000644�0001015�0000765�00000031107�11112564564�016030� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ /* ** CCDENSITY: Program to calculate the coupled-cluster one- and ** two-particle densities. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libpsio/psio.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libiwl/iwl.h> #include <cmath> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #include "globals.h" namespace psi { namespace ccdensity { void init_io(int argc, char *argv[]); void title(void); void get_moinfo(void); void get_frozen(void); void get_params(void); void exit_io(void); void onepdm(struct RHO_Params); void sortone(struct RHO_Params); void twopdm(void); void energy(struct RHO_Params); void resort_tei(void); void resort_gamma(void); void lag(struct RHO_Params rho_params); void build_X(void); void build_A(void); void build_Z(void); void relax_I(void); void relax_D(struct RHO_Params rho_params); void sortI(void); void fold(struct RHO_Params rho_params); void deanti(struct RHO_Params rho_params); void add_ref_RHF(struct iwlbuf *); void add_ref_ROHF(struct iwlbuf *); void add_ref_UHF(struct iwlbuf *, struct iwlbuf *, struct iwlbuf *); void add_core_ROHF(struct iwlbuf *); void add_core_UHF(struct iwlbuf *, struct iwlbuf *, struct iwlbuf *); void dump_RHF(struct iwlbuf *, struct RHO_Params rho_params); void dump_ROHF(struct iwlbuf *, struct RHO_Params rho_params); void dump_UHF(struct iwlbuf *, struct iwlbuf *, struct iwlbuf *, struct RHO_Params rho_params); void kinetic(void); void dipole(void); void probable(void); int **cacheprep_rhf(int level, int *cachefiles); int **cacheprep_uhf(int level, int *cachefiles); void cachedone_rhf(int **cachelist); void cachedone_uhf(int **cachelist); void setup_LR(struct RHO_Params); void G_build(void); void x_oe_intermediates(struct RHO_Params); void x_onepdm(struct RHO_Params); void x_te_intermediates(void); void x_Gijkl(void); void x_Gabcd(void); void x_Gibja(void); void x_Gijka(void); void x_Gijab(void); void x_Gciab(void); void V_build_x(void); void x_xi1(void); void x_xi_zero(void); void x_xi2(void); void x_xi_oe_intermediates(void); void G_norm(void); void zero_onepdm(struct RHO_Params rho_params); void zero_twopdm(void); void get_rho_params(void); void get_td_params(void); void td_setup(struct TD_Params S); void tdensity(struct TD_Params S); void td_print(void); void oscillator_strength(struct TD_Params *S); void rotational_strength(struct TD_Params *S); void ael(struct RHO_Params *rho_params); void cleanup(void); void td_cleanup(void); void x_oe_intermediates_rhf(struct RHO_Params rho_params); void x_te_intermediates_rhf(void); void x_xi_intermediates(void); void V_build(void); }} // namespace psi::cdensity using namespace psi::ccdensity; int main(int argc, char *argv[]) { int i; int **cachelist, *cachefiles; struct iwlbuf OutBuf; struct iwlbuf OutBuf_AA, OutBuf_BB, OutBuf_AB; dpdfile2 D; double tval; init_io(argc,argv); title(); /* get_frozen(); */ get_params(); get_moinfo(); get_rho_params(); if ((moinfo.nfzc || moinfo.nfzv) && params.relax_opdm) { fprintf(outfile, "\n\tGradients/orbital relaxation involving frozen orbitals not yet available.\n"); exit(PSI_RETURN_FAILURE); } cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } else if(params.ref == 2) { /** UHF **/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } for (i=0; i<params.nstates; ++i) { /* CC_GLG will contain L, or R0*L + Zeta, if relaxed and zeta is available */ /* CC_GL will contain L */ setup_LR(rho_params[i]); /* Calculate Xi, put Xi in EOM_XI, and quit */ if ( params.calc_xi ) { /* these intermediates go into EOM_TMP and are used to compute Xi; they may be reused to compute the excited-state density matrix */ if (params.ref == 0) { x_oe_intermediates_rhf(rho_params[i]); x_te_intermediates_rhf(); } else { x_oe_intermediates(rho_params[i]); x_te_intermediates(); } x_xi_intermediates(); /*Xi intermediates put in EOM_TMP_XI */ x_xi_zero(); /* make blank Xi */ x_xi1(); x_xi2(); dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); psio_close(EOM_TMP_XI,0); /* delete EOM_TMP_XI */ psio_open(EOM_TMP_XI,PSIO_OPEN_NEW); exit_io(); exit(PSI_RETURN_SUCCESS); } /* compute ground state parts of onepdm or put zeroes there */ if ( ((rho_params[i].L_irr == rho_params[i].G_irr) || (params.use_zeta)) ) { zero_onepdm(rho_params[i]); onepdm(rho_params[i]); } else zero_onepdm(rho_params[i]); /* if the one-electron excited-state intermediates are not already on disk (from a Xi calculation, compute them. They are nearly all necessary to compute the excited-state onepdm. Then complete excited-state onepdm.*/ if (!rho_params[i].R_ground) { x_oe_intermediates(rho_params[i]); /* change to x_oe_intermediates_rhf() when rho gets spin-adapted */ x_onepdm(rho_params[i]); } /* begin construction of twopdm */ if (!params.onepdm) { /* Compute intermediates for construction of ground-state twopdm */ if ( (params.L_irr == params.G_irr) || (params.use_zeta) ) { V_build(); /* uses CC_GLG, writes tau2*L2 to CC_MISC */ G_build(); /* uses CC_GLG, writes t2*L2 to CC_GLG */ } /* Compute ground-state twopdm or ground-state-like contributions to the excited twodpm */ if ( (params.L_irr == params.G_irr) || (params.use_zeta) ) twopdm(); else zero_twopdm(); /* Compute intermediates for construction of excited-state twopdm */ if (!params.ground) { x_te_intermediates(); /* change to x_te_intermediates_rhf() when rho gets spin-adapted */ V_build_x(); /* uses CC_GL, writes t2*L2 to EOM_TMP */ /* add in non-R0 parts of onepdm and twopdm */ x_Gijkl(); x_Gabcd(); x_Gibja(); x_Gijka(); x_Gciab(); x_Gijab(); } } sortone(rho_params[i]); /* puts full 1-pdm into moinfo.opdm */ /* dipole(); */ if (!params.onepdm) { if(!params.aobasis) energy(rho_params[i]); kinetic(); /* puts kinetic energy integrals into MO basis */ lag(rho_params[i]); /* builds the orbital lagrangian pieces, I */ /* dpd_init(1, moinfo.nirreps, params.memory, 2, frozen.occpi, frozen.occ_sym, frozen.virtpi, frozen.vir_sym); */ /* if(moinfo.nfzc || moinfo.nfzv) { resort_gamma(); resort_tei(); } */ build_X(); /* builds orbital rotation gradient X */ build_A(); /* construct MO Hessian A */ build_Z(); /* solves the orbital Z-vector equations */ relax_I(); /* adds orbital response contributions to Lagrangian */ if (params.relax_opdm) { relax_D(rho_params[i]); /* adds orbital response contributions to onepdm */ } sortone(rho_params[i]); /* builds large moinfo.opdm matrix */ sortI(); /* builds large lagrangian matrix I */ fold(rho_params[i]); deanti(rho_params[i]); } /* dpd_close(0); dpd_close(1); */ if(params.ref == 0) { /** RHF **/ iwl_buf_init(&OutBuf, PSIF_MO_TPDM, params.tolerance, 0, 0); add_core_ROHF(&OutBuf); add_ref_RHF(&OutBuf); dump_RHF(&OutBuf, rho_params[i]); iwl_buf_flush(&OutBuf, 1); iwl_buf_close(&OutBuf, 1); } else if(params.ref == 1) { /** ROHF **/ iwl_buf_init(&OutBuf, PSIF_MO_TPDM, params.tolerance, 0, 0); add_core_ROHF(&OutBuf); add_ref_ROHF(&OutBuf); dump_ROHF(&OutBuf, rho_params[i]); iwl_buf_flush(&OutBuf, 1); iwl_buf_close(&OutBuf, 1); } else if(params.ref == 2) { /** UHF **/ iwl_buf_init(&OutBuf_AA, PSIF_MO_AA_TPDM, params.tolerance, 0, 0); iwl_buf_init(&OutBuf_BB, PSIF_MO_BB_TPDM, params.tolerance, 0, 0); iwl_buf_init(&OutBuf_AB, PSIF_MO_AB_TPDM, params.tolerance, 0, 0); /* add_core_UHF(&OutBuf_AA, &OutBuf_BB, &OutBuf_AB); */ add_ref_UHF(&OutBuf_AA, &OutBuf_BB, &OutBuf_AB); dump_UHF(&OutBuf_AA, &OutBuf_BB, &OutBuf_AB, rho_params[i]); iwl_buf_flush(&OutBuf_AA, 1); iwl_buf_flush(&OutBuf_BB, 1); iwl_buf_flush(&OutBuf_AB, 1); iwl_buf_close(&OutBuf_AA, 1); iwl_buf_close(&OutBuf_BB, 1); iwl_buf_close(&OutBuf_AB, 1); } free_block(moinfo.opdm); psio_close(CC_TMP,0); psio_open(CC_TMP,PSIO_OPEN_NEW); psio_close(EOM_TMP0,0); psio_open(EOM_TMP0,PSIO_OPEN_NEW); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); psio_close(CC_GLG,0); psio_open(CC_GLG,PSIO_OPEN_NEW); psio_close(CC_GL,0); psio_open(CC_GL,PSIO_OPEN_NEW); psio_close(CC_GR,0); psio_open(CC_GR,PSIO_OPEN_NEW); if (!params.calc_xi) { psio_close(EOM_TMP,0); psio_open(EOM_TMP,PSIO_OPEN_NEW); } } /* if ( params.ael && (params.nstates > 1) ) ael(rho_params); */ if(params.transition) { get_td_params(); for(i=0; i < params.nstates; i++) { td_setup(td_params[i]); tdensity(td_params[i]); oscillator_strength(&(td_params[i])); if(params.ref == 0) { rotational_strength(&(td_params[i])); } td_cleanup(); } td_print(); } dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCDENSITY"; return(prgid); }} namespace psi { namespace ccdensity { void init_io(int argc, char *argv[]) { int i, num_unparsed; char *progid, *argv_unparsed[100];; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); params.onepdm = 0; params.prop_all = 0; params.calc_xi = 0; params.restart = 0; params.use_zeta = 0; params.transition = 0; for (i=1, num_unparsed=0; i<argc; ++i) { if(!strcmp(argv[i], "--onepdm")) { params.onepdm = 1; /* generate ONLY the onepdm (for one-electron properties) */ } else if (!strcmp(argv[i],"--use_zeta")) { params.use_zeta = 1; params.ground = 0; params.restart = 1; } else if (!strcmp(argv[i],"--calc_xi")) { params.calc_xi = 1; params.ground = 0; params.restart = 0; } else if (!strcmp(argv[i],"--prop_all")) { params.prop_all = 1; } else if (!strcmp(argv[i],"--transition")) { params.transition = 1; params.relax_opdm = 0; params.ground = 0; } else { argv_unparsed[num_unparsed++] = argv[i]; } } psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed,argv_unparsed,0); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); /* Open all dpd data files here */ /* erase files for easy debugging */ for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,PSIO_OPEN_OLD); /* psio_close(CC_GR,0); psio_close(CC_GL,0); psio_close(EOM_TMP0,0); psio_open(CC_GR,PSIO_OPEN_NEW); psio_open(CC_GL,PSIO_OPEN_NEW); psio_open(EOM_TMP0,PSIO_OPEN_NEW); */ } void title(void) { fprintf(outfile, "\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCDENSITY *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\n"); } void exit_io(void) { int i; /* delete temporary EOM files */ psio_close(EOM_TMP0,0); psio_close(EOM_TMP1,0); psio_close(CC_GLG,0); psio_open(EOM_TMP0,PSIO_OPEN_NEW); psio_open(EOM_TMP1,PSIO_OPEN_NEW); psio_open(CC_GLG,PSIO_OPEN_NEW); if (!params.calc_xi) { psio_close(EOM_TMP,0); psio_open(EOM_TMP,PSIO_OPEN_NEW); } if (params.use_zeta) { /* we're done with Xi amplitudes */ psio_close(EOM_XI,0); psio_open(EOM_XI,PSIO_OPEN_NEW); } /* Close all dpd data files here */ for(i=CC_MIN; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/classify.cc������������������������������������������������������������������0000644�0001015�0000765�00000013172�10757640026�015664� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void classify(int p, int q, int r, int s, double value, struct iwlbuf *ABuf, struct iwlbuf *BBuf, struct iwlbuf *CBuf, struct iwlbuf *DBuf, struct iwlbuf *EBuf, struct iwlbuf *FBuf) { int *occ, *vir, *socc; int *cc_occ, *cc_vir; int dirac=1; int soccs; /* NB that integrals involving frozen orbitals are KEPT in this code */ occ = frozen.occ; vir = frozen.vir; socc = frozen.socc; cc_occ = frozen.allcc_occ; cc_vir = frozen.allcc_vir; soccs = socc[p] + socc[q] + socc[r] + socc[s]; /* A (oo|oo) integrals */ if((occ[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(ABuf, cc_occ[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); /* B (vv|vv) integrals */ if((vir[p] && vir[q] && vir[r] && vir[s])) iwl_buf_wrt_val(BBuf, cc_vir[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); /* C (oo|vv) integrals */ if(soccs > 1) { if((occ[p] && occ[q] && vir[r] && vir[s])) iwl_buf_wrt_val(CBuf, cc_occ[p], cc_occ[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if((occ[r] && occ[s] && vir[p] && vir[q])) iwl_buf_wrt_val(CBuf, cc_occ[r], cc_occ[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); } else if((occ[p] && occ[q] && vir[r] && vir[s])) iwl_buf_wrt_val(CBuf, cc_occ[p], cc_occ[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[r] && occ[s] && vir[p] && vir[q])) iwl_buf_wrt_val(CBuf, cc_occ[r], cc_occ[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); /* D (ov|ov) integrals */ if(soccs > 1) { if((occ[p] && vir[q] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); if((occ[q] && vir[p] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); if((occ[p] && vir[q] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); if((occ[q] && vir[p] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); } else if((occ[p] && vir[q] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[q] && vir[p] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[p] && vir[q] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); else if((occ[q] && vir[p] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); /* E (vo|oo) integrals */ if(soccs > 1) { if((vir[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); if((vir[q] && occ[p] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[q], cc_occ[p], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); if((vir[r] && occ[s] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[r], cc_occ[s], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); if((vir[s] && occ[r] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[s], cc_occ[r], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); } else if((vir[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); else if((vir[p] && occ[q] && occ[s] && occ[r])) iwl_buf_wrt_val(EBuf, cc_vir[q], cc_occ[p], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); else if((vir[r] && occ[s] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[r], cc_occ[s], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); else if((vir[r] && occ[s] && occ[q] && occ[p])) iwl_buf_wrt_val(EBuf, cc_vir[s], cc_occ[r], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); /* F (ov|vv) integrals */ if(soccs > 1) { if((occ[p] && vir[q] && vir[r] && vir[s])) iwl_buf_wrt_val(FBuf, cc_occ[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if((occ[q] && vir[p] && vir[r] && vir[s])) iwl_buf_wrt_val(FBuf, cc_occ[q], cc_vir[p], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if((occ[r] && vir[s] && vir[p] && vir[q])) iwl_buf_wrt_val(FBuf, cc_occ[r], cc_vir[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); if((occ[s] && vir[r] && vir[p] && vir[q])) iwl_buf_wrt_val(FBuf, cc_occ[s], cc_vir[r], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); } else if((occ[p] && vir[q] && vir[r] && vir[s])) iwl_buf_wrt_val(FBuf, cc_occ[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[q] && vir[p] && vir[r] && vir[s])) iwl_buf_wrt_val(FBuf, cc_occ[q], cc_vir[p], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[r] && vir[s] && vir[p] && vir[q])) iwl_buf_wrt_val(FBuf, cc_occ[r], cc_vir[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); else if((occ[s] && vir[r] && vir[p] && vir[q])) iwl_buf_wrt_val(FBuf, cc_occ[s], cc_vir[r], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/deanti.cc��������������������������������������������������������������������0000644�0001015�0000765�00000003210�11027011315�015263� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DEANTI(): Convert the two-particle density from Dirac to Mulliken ** ordering. The original, Fock-adjusted density (see the comments in ** fock.c) corresponds to a two-electron energy (or energy derivative) ** expression of the form: ** ** E(TWO) = 1/4 sum_pqrs Gpqrs <pq||rs> ** ** However, the derivative two-electron integrals are produced in ** Mulliken-ordered, symmetric form rather than Dirac-ordered ** antisymmetric form. This code alters the two-particle density ** matrix ordering for the energy expression of the form: ** ** E(TWO) = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** The final conversion to Mulliken ordering is taken care of in ** dump.c ** ** The second equation above may be derived via ** ** E(TWO) = 1/4 sum_pqrs Gpqrs (<pq|rs> - <pq|sr>) ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqrs <pq|sr> ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqsr <pq|rs> ** = 1/4 sum_pqrs (Gpqrs - Gpqsr) <pq|rs> ** = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** Equations for the individual components are given explicitly in ** comments below. ** */ void deanti_RHF(struct RHO_Params rho_params); void deanti_ROHF(struct RHO_Params rho_params); void deanti_UHF(struct RHO_Params rho_params); void deanti(struct RHO_Params rho_params) { if(params.ref == 0) deanti_RHF(rho_params); else if(params.ref == 1) deanti_ROHF(rho_params); else if(params.ref == 2) deanti_UHF(rho_params); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/deanti_RHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000020750�11027011315�015772� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DEANTI_RHF(): Convert the RHF two-particle density from an ** energy expression using antisymmetrized Dirac integrals to one ** using simple Diract integrals. The original, Fock-adjusted ** density (see the comments in fock.c) corresponds to a ** two-electron energy (or energy derivative) expression of the ** form: ** ** E(TWO) = 1/4 sum_pqrs Gpqrs <pq||rs> ** ** However, the derivative two-electron integrals are produced in ** Mulliken-ordered, symmetric form rather than Dirac-ordered ** antisymmetric form. This code alters the two-particle density ** matrix ordering for the energy expression of the form: ** ** E(TWO) = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** The final conversion to Mulliken ordering is taken care of in ** dump.c ** ** The second equation above may be derived via ** ** E(TWO) = 1/4 sum_pqrs Gpqrs (<pq|rs> - <pq|sr>) ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqrs <pq|sr> ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqsr <pq|rs> ** = 1/4 sum_pqrs (Gpqrs - Gpqsr) <pq|rs> ** = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** Equations for the individual components are given explicitly in ** comments below. ** */ void deanti_RHF(struct RHO_Params rho_params) { dpdbuf4 G1, G2; dpdfile2 D, F; double one_energy = 0.0, two_energy = 0.0, total_two_energy = 0.0; dpdbuf4 A, B, C, DInts, E, FInts; if(!params.aobasis) { fprintf(outfile, "\n\tEnergies re-computed from Mulliken density:\n"); fprintf(outfile, "\t-------------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); one_energy += 2.0*dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); one_energy += 2.0*dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += 2.0*dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += 2.0*dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); } /* E_ijkl = (2 Gijkl - Gijlk) <ij|kl> */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "2 Gijkl - Gijlk", 2); dpd_buf4_sort_axpy(&G1, CC_GAMMA, pqsr, 0, 0, "2 Gijkl - Gijlk", -1); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 0, 0, 0, 0, "2 Gijkl - Gijlk"); dpd_buf4_copy(&G1, CC_GAMMA, "GIjKl"); if(!params.aobasis) { dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); two_energy = dpd_buf4_dot(&A, &G1); dpd_buf4_close(&A); fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* E_ijka = 2 [ (2 Gijka - Gjika) <ij|ka> ] */ /* NB: GIjKa is scaled by 1/2 in Gijka.cc. */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G1, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); /* The factor of 2 here is necessary because Gijka is multiplied by 1/2 in Gijka.cc */ dpd_buf4_scmcopy(&G1, CC_GAMMA, "GIjKa", 2); if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); two_energy = dpd_buf4_dot(&E, &G1); dpd_buf4_close(&E); /* The factor of 4 here is necessary because Gijka is multiplied by 1/2 in Gijka.cc */ fprintf(outfile, "\tIJKA energy = %20.15f\n", 4*two_energy); total_two_energy += 4*two_energy; } dpd_buf4_close(&G1); /* E_ijab = [ (2 Gijab - Gijba) - GIBJA - GIbjA ] <ij|ab> */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G1, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G1); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_sort_axpy(&G2, CC_GAMMA, prsq, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort_axpy(&G2, CC_GAMMA, prsq, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G2); dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "GIjAb", 2); if(!params.aobasis) { dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); two_energy = 2.0 * dpd_buf4_dot(&DInts, &G1); dpd_buf4_close(&DInts); fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* G'_IbJa = 2 GIBJA + 2 GIbJa */ dpd_buf4_init(&G1, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_axpy(&G2, &G1, 1); dpd_buf4_close(&G2); // dpd_buf4_scm(&G1, 2); if(!params.aobasis) { dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); two_energy = 2.0 * dpd_buf4_dot(&C, &G1); dpd_buf4_close(&C); fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* E_ciab = 2 [ (2 Gciab - Gciba) <ci|ab> ] */ /* NB: Gciab is scaled by 1/2 in Gciab.cc. */ dpd_buf4_init(&G1, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G1, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); /* The factor of 2 here is necessary because Gciab is multiplied by 1/2 in Gciab.cc */ dpd_buf4_scmcopy(&G1, CC_GAMMA, "GCiAb", 2); if(!params.aobasis) { dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_FINTS, qpsr, 11, 5, "F <ai|bc>"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); two_energy = dpd_buf4_dot(&FInts, &G1); dpd_buf4_close(&FInts); /* The factor of 4 here is necessary because Gciab is multiplied by 1/2 in Gciab.cc */ fprintf(outfile, "\tCIAB energy = %20.15f\n", 4*two_energy); total_two_energy += 4*two_energy; } dpd_buf4_close(&G1); /* E_abcd = (2 Gabcd - Gabdc) <ab|cd> */ dpd_buf4_init(&G1, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scmcopy(&G1, CC_GAMMA, "2 Gabcd - Gabdc", 2); dpd_buf4_sort_axpy(&G1, CC_GAMMA, pqsr, 5, 5, "2 Gabcd - Gabdc", -1); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_GAMMA, 0, 5, 5, 5, 5, 0, "2 Gabcd - Gabdc"); dpd_buf4_copy(&G1, CC_GAMMA, "GAbCd"); if(!params.aobasis) { dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); two_energy = dpd_buf4_dot(&B, &G1); dpd_buf4_close(&B); fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); if(!params.aobasis) { fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } } }} // namespace psi::ccdensity ������������������������psi3/src/bin/ccdensity/deanti_ROHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000025706�10757640026�016137� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DEANTI_ROHF(): Convert the ROHF two-particle density from Dirac to ** Mulliken ordering. The original, Fock-adjusted density (see the ** comments in fock.c) corresponds to a two-electron energy (or energy ** derivative) expression of the form: ** ** E(TWO) = 1/4 sum_pqrs Gpqrs <pq||rs> ** ** However, the derivative two-electron integrals are produced in ** Mulliken-ordered, symmetric form rather than Dirac-ordered ** antisymmetric form. This code alters the two-particle density ** matrix ordering for the energy expression of the form: ** ** E(TWO) = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** The final conversion to Mulliken ordering is taken care of in ** dump.c ** ** The second equation above may be derived via ** ** E(TWO) = 1/4 sum_pqrs Gpqrs (<pq|rs> - <pq|sr>) ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqrs <pq|sr> ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqsr <pq|rs> ** = 1/4 sum_pqrs (Gpqrs - Gpqsr) <pq|rs> ** = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** Equations for the individual components are given explicitly in ** comments below. ** */ void deanti_ROHF(struct RHO_Params rho_params) { dpdbuf4 G1, G2; dpdfile2 D, F; double one_energy = 0.0, two_energy = 0.0, total_two_energy = 0.0; dpdbuf4 A, B, C, DInts, E, FInts; if(!params.aobasis) { fprintf(outfile, "\n\tEnergies re-computed from Mulliken density:\n"); fprintf(outfile, "\t-------------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); one_energy += dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); } /* G(Ij,Kl) <-- 1/2 G(IJ,KL) + 1/2 G(ij,kl) + 1/2 G(Ij,Kl) + 1/2 G(iJ,kL) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_sort(&G1, CC_TMP0, qprs, 0, 0, "GjIKl"); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 0, 0, 0, 0, "GjIKl"); dpd_buf4_sort(&G2, CC_TMP0, pqsr, 0, 0, "GiJkL"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 0, 0, 0, 0, "GiJkL"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 0, 0, 2, 2, 0, "Gijkl"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_scm(&G1, 0.5); if(!params.aobasis) { dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); two_energy = dpd_buf4_dot(&A, &G1); dpd_buf4_close(&A); fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* G(IJ,KA) <-- G(IJ,KA) + G(ij,ka) + G(Ij,Ka) + G(iJ,kA) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&G2, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); two_energy = dpd_buf4_dot(&E, &G1); dpd_buf4_close(&E); fprintf(outfile, "\tIJKA energy = %20.15f\n", 2*two_energy); total_two_energy += 2*two_energy; } dpd_buf4_close(&G1); /* G(Ij,Ab) <-- G(Ij,Ab) - G(Ib,jA) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 0, 5, "GIbjA (Ij,Ab)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIbjA (Ij,Ab)"); dpd_buf4_axpy(&G2, &G1, -1.0); dpd_buf4_close(&G2); dpd_buf4_close(&G1); /* G(IJ,AB) <-- G(IJ,AB) - G(IB,JA) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_copy(&G1, CC_TMP0, "G(IJ,AB)"); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 0, 5, "GIBJA (IJ,AB)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIBJA (IJ,AB)"); dpd_buf4_axpy(&G2, &G1, -1.0); dpd_buf4_close(&G2); dpd_buf4_close(&G1); /* G(ij,ab) <-- G(ij,ab) - G(ib,ja) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 2, 7, 0, "Gijab"); dpd_buf4_copy(&G1, CC_TMP0, "G(ij,ab)"); dpd_buf4_close(&G1); dpd_buf4_init(&G1, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(ij,ab)"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 0, 5, "Gibja (ij,ab)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Gibja (ij,ab)"); dpd_buf4_axpy(&G2, &G1, -1.0); dpd_buf4_close(&G2); dpd_buf4_close(&G1); /* G(IJ,AB) <-- G(IJ,AB) + G(ij,ab) + G(Ij,Ab) + G(iJ,aB) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_sort(&G1, CC_TMP0, qpsr, 0, 5, "G(jI,bA)"); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(jI,bA)"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(ij,ab)"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); if(!params.aobasis) { dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); two_energy = dpd_buf4_dot(&DInts, &G1); dpd_buf4_close(&DInts); fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* G(IB,JA) <-- G(IB,JA) + G(ib,ja) + G(Ib,Ja) + G(iB,jA) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); if(!params.aobasis) { dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); two_energy = dpd_buf4_dot(&C, &G1); dpd_buf4_close(&C); fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); /* G(CI,AB) <-- G(CI,AB) + G(ci,ab) + G(Ci,Ab) + G(cI,aB) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&G2, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); if(!params.aobasis) { dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 5, "F(CI,BA)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(CI,BA)"); dpd_buf4_sort(&FInts, CC_TMP1, pqsr, 11, 5, "F(CI,AB)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP1, 0, 11, 5, 11, 5, 0, "F(CI,AB)"); two_energy = dpd_buf4_dot(&FInts, &G1); dpd_buf4_close(&FInts); fprintf(outfile, "\tCIAB energy = %20.15f\n", 2*two_energy); total_two_energy += 2*two_energy; } dpd_buf4_close(&G1); /* G(Ab,Cd) <-- 1/2 G(AB,CD) + 1/2 G(ab,cd) + G(Ab,Cd) */ dpd_buf4_init(&G1, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_sort(&G1, CC_TMP0, qprs, 5, 5, "G(bA,Cd)"); dpd_buf4_init(&G2, CC_TMP0, 0, 5, 5, 5, 5, 0, "G(bA,Cd)"); dpd_buf4_sort(&G2, CC_TMP1, pqsr, 5, 5, "G(aB,cD)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP1, 0, 5, 5, 5, 5, 0, "G(aB,cD)"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 5, 5, 7, 7, 0, "GABCD"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_GAMMA, 0, 5, 5, 7, 7, 0, "Gabcd"); dpd_buf4_axpy(&G2, &G1, 1.0); dpd_buf4_close(&G2); dpd_buf4_scm(&G1, 0.5); if(!params.aobasis) { dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); two_energy = dpd_buf4_dot(&B, &G1); dpd_buf4_close(&B); fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); total_two_energy += two_energy; } dpd_buf4_close(&G1); if(!params.aobasis) { fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } } }} // namespace psi::ccdensity ����������������������������������������������������������psi3/src/bin/ccdensity/deanti_UHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000027475�11027503542�016020� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DEANTI_UHF(): Convert the UHF two-particle density from Dirac to ** Mulliken ordering. The original, Fock-adjusted density (see the ** comments in fock.c) corresponds to a two-electron energy (or energy ** derivative) expression of the form: ** ** E(TWO) = 1/4 sum_pqrs Gpqrs <pq||rs> ** ** However, the derivative two-electron integrals are produced in ** Mulliken-ordered, symmetric form rather than Dirac-ordered ** antisymmetric form. This code alters the two-particle density ** matrix ordering for the energy expression of the form: ** ** E(TWO) = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** The final conversion to Mulliken ordering is taken care of in ** dump.c ** ** The second equation above may be derived via ** ** E(TWO) = 1/4 sum_pqrs Gpqrs (<pq|rs> - <pq|sr>) ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqrs <pq|sr> ** = 1/4 sum_pqrs Gpqrs <pq|rs> - 1/4 sum_pqrs Gpqsr <pq|rs> ** = 1/4 sum_pqrs (Gpqrs - Gpqsr) <pq|rs> ** = 1/2 sum_pqrs Gpqrs <pq|rs> ** ** Equations for the individual components are given explicitly in ** comments below. ** ** This code is rather different from its RHF/ROHF counterpart in that ** we must keep the three spin components of Gpqrs separate (i.e., no ** spin-adaptation is allowed for UHF cases). ** */ void deanti_UHF(struct RHO_Params rho_params) { dpdfile2 h, d; dpdbuf4 G, G2, A, B, C, D, E, F; double one_energy=0.0, two_energy=0.0, total_two_energy=0.0; fprintf(outfile, "\n\tEnergies re-computed from Mulliken density:\n"); fprintf(outfile, "\t-------------------------------------------\n"); dpd_file2_init(&d, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&h, CC_OEI, 0, 0, 0, "h(I,J)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_init(&h, CC_OEI, 0, 2, 2, "h(i,j)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&h, CC_OEI, 0, 1, 1, "h(A,B)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_init(&h, CC_OEI, 0, 3, 3, "h(a,b)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&h, CC_OEI, 0, 0, 1, "h(I,A)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_init(&h, CC_OEI, 0, 2, 3, "h(i,a)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&h, CC_OEI, 0, 0, 1, "h(I,A)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); dpd_file2_init(&d, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_init(&h, CC_OEI, 0, 2, 3, "h(i,a)"); one_energy += dpd_file2_dot(&d, &h); dpd_file2_close(&h); dpd_file2_close(&d); fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); /* G(Ij,Kl) = 1/2 G(Ij,Kl) */ dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); two_energy = 2*dpd_buf4_dot(&A, &G); dpd_buf4_close(&A); dpd_buf4_close(&G); fprintf(outfile, "\tIjKl energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(IJ,KL) = 1/2 G(IJ,KL) */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <IJ|KL>"); two_energy = dpd_buf4_dot(&A, &G); dpd_buf4_close(&A); dpd_buf4_close(&G); fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(ij,kl) = 1/2 G(ij,kl) */ dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 12, 12, 0, "Gijkl"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&A, CC_AINTS, 0, 10, 10, 10, 10, 0, "A <ij|kl>"); two_energy = dpd_buf4_dot(&A, &G); dpd_buf4_close(&A); dpd_buf4_close(&G); fprintf(outfile, "\tijkl energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* No change to G(IJ,KA) components */ dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); two_energy = 2*dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); two_energy += 2*dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); fprintf(outfile, "\tIjKa+iJkA energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 20, 0, 20, 0, "E <IJ|KA>"); two_energy = 2*dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 30, 10, 30, 0, "E <ij|ka>"); two_energy = 2*dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); fprintf(outfile, "\tijka energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(Ij,Ab) <-- G(Ij,Ab) - G(Ib,jA) */ dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&G2, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 22, 28, "GIbjA (Ij,Ab)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 22, 28, 22, 28, 0, "GIbjA (Ij,Ab)"); dpd_buf4_axpy(&G2, &G, -1.0); dpd_buf4_close(&G2); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); two_energy = 2 * dpd_buf4_dot(&D, &G); dpd_buf4_close(&D); dpd_buf4_close(&G); fprintf(outfile, "\tIjAb energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(IJ,AB) <-- G(IJ,AB) - G(IB,JA) */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_copy(&G, CC_GAMMA, "G(IJ,AB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); dpd_buf4_init(&G2, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 0, 5, "GIBJA (IJ,AB)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIBJA (IJ,AB)"); dpd_buf4_axpy(&G2, &G, -1.0); dpd_buf4_close(&G2); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ|AB>"); two_energy = dpd_buf4_dot(&D, &G); dpd_buf4_close(&D); dpd_buf4_close(&G); fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(ij,ab) <-- G(ij,ab) - G(ib,ja) */ dpd_buf4_init(&G, CC_GAMMA, 0, 10, 15, 12, 17, 0, "Gijab"); dpd_buf4_copy(&G, CC_GAMMA, "G(ij,ab)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 15, 10, 15, 0, "G(ij,ab)"); dpd_buf4_init(&G2, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_sort(&G2, CC_TMP0, prsq, 10, 15, "Gibja (ij,ab)"); dpd_buf4_close(&G2); dpd_buf4_init(&G2, CC_TMP0, 0, 10, 15, 10, 15, 0, "Gibja (ij,ab)"); dpd_buf4_axpy(&G2, &G, -1.0); dpd_buf4_close(&G2); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij|ab>"); two_energy = dpd_buf4_dot(&D, &G); dpd_buf4_close(&D); dpd_buf4_close(&G); fprintf(outfile, "\tijab energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* No change to G(IB,JA) components */ dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA|JB>"); two_energy = dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia|jb>"); two_energy = dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); fprintf(outfile, "\tibja energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); two_energy = dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); fprintf(outfile, "\tiBjA+IbJa energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* No change to G(CI,AB) components */ dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); two_energy = 2*dpd_buf4_dot(&F, &G); dpd_buf4_close(&F); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); two_energy += 2*dpd_buf4_dot(&F, &G); dpd_buf4_close(&F); dpd_buf4_close(&G); fprintf(outfile, "\tcIaB+CiAb energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_init(&F, CC_FINTS, 0, 21, 5, 21, 5, 0, "F <AI|BC>"); two_energy = 2*dpd_buf4_dot(&F, &G); dpd_buf4_close(&F); dpd_buf4_close(&G); fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); total_two_energy += two_energy; dpd_buf4_init(&G, CC_GAMMA, 0, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_init(&F, CC_FINTS, 0, 31, 15, 31, 15, 0, "F <ai|bc>"); two_energy = 2*dpd_buf4_dot(&F, &G); dpd_buf4_close(&F); dpd_buf4_close(&G); fprintf(outfile, "\tciab energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(Ab,Cd) = 1/2 G(Ab,Cd) */ dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); two_energy = 2*dpd_buf4_dot(&B, &G); dpd_buf4_close(&B); dpd_buf4_close(&G); fprintf(outfile, "\tAbCd energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(AB,CD) = 1/2 G(AB,CD) */ dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 7, 7, 0, "GABCD"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <AB|CD>"); two_energy = dpd_buf4_dot(&B, &G); dpd_buf4_close(&B); dpd_buf4_close(&G); fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); total_two_energy += two_energy; /* G(ab,cd) = 1/2 G(ab,cd) */ dpd_buf4_init(&G, CC_GAMMA, 0, 15, 15, 17, 17, 0, "Gabcd"); dpd_buf4_scm(&G, 0.5); dpd_buf4_init(&B, CC_BINTS, 0, 15, 15, 15, 15, 0, "B <ab|cd>"); two_energy = dpd_buf4_dot(&B, &G); dpd_buf4_close(&B); dpd_buf4_close(&G); fprintf(outfile, "\tabcd energy = %20.15f\n", two_energy); total_two_energy += two_energy; fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); fprintf(outfile, "\t%-7s correlation energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy); fprintf(outfile, "\tTotal %-7s energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy + moinfo.eref); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/dipole.cc��������������������������������������������������������������������0000644�0001015�0000765�00000022551�10757640026�015324� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <physconst.h> #define IOFF_MAX 32641 #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void dipole(void) { int nmo, nso, nao, noei, stat, i, I, h, j, nirreps; int *order, *doccpi, *ioff, natom, *clsdpi, *openpi, *orbspi; double **scf_pitzer, **scfA, **scfB; double **scf_qt, **X, **usotao; double *zvals, **geom; double *mu_x_ints, *mu_y_ints, *mu_z_ints; double **MUX_AO, **MUY_AO, **MUZ_AO; double **MUX_SO, **MUY_SO, **MUZ_SO; double **MUX_MO, **MUY_MO, **MUZ_MO; double mu_x, mu_y, mu_z, mu; double mu_x_n, mu_y_n, mu_z_n; double mu_x_ref, mu_y_ref, mu_z_ref; double mu_x_tot, mu_y_tot, mu_z_tot; if (params.ref == 2) return; /* doesn't do UHF yet */ chkpt_init(PSIO_OPEN_OLD); if ((params.ref == 0) || (params.ref == 1)) scf_pitzer = chkpt_rd_scf(); else if(params.ref == 2) { scfA = chkpt_rd_alpha_scf(); scfB = chkpt_rd_beta_scf(); } nso = chkpt_rd_nso(); nao = chkpt_rd_nao(); nmo = chkpt_rd_nmo(); usotao = chkpt_rd_usotao(); clsdpi = chkpt_rd_clsdpi(); openpi = chkpt_rd_openpi(); orbspi = chkpt_rd_orbspi(); nirreps = chkpt_rd_nirreps(); natom = chkpt_rd_natom(); zvals = chkpt_rd_zvals(); geom = chkpt_rd_geom(); chkpt_close(); mu_x_n = mu_y_n = mu_z_n = 0.0; mu_x_ref = mu_y_ref = mu_z_ref = 0.0; mu_x = mu_y = mu_z = 0.0; /* compute nuclear contribution to dipole moment */ for(i=0;i<natom;i++) { mu_x_n += zvals[i]*geom[i][0]; mu_y_n += zvals[i]*geom[i][1]; mu_z_n += zvals[i]*geom[i][2]; } /*** Build ioff ***/ ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); /* doccpi array must include frozen orbitals for reorder_qt() */ doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); /*** Reorder the SCF eigenvectors to QT ordering */ scf_qt = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt[j][I] = scf_pitzer[j][i]; } free(order); free(doccpi); free_block(scf_pitzer); /* fprintf(outfile, "SCF MO's\n"); */ /* print_mat(scf_qt, nso, nmo, outfile); */ /*** Read in dipole moment integrals in the AO basis ***/ noei = nao * (nao + 1)/2; mu_x_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MX,mu_x_ints,noei,0,0,outfile); mu_y_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MY,mu_y_ints,noei,0,0,outfile); mu_z_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MZ,mu_z_ints,noei,0,0,outfile); MUX_AO = block_matrix(nao,nao); MUY_AO = block_matrix(nao,nao); MUZ_AO = block_matrix(nao,nao); for(i=0; i < nao; i++) for(j=0; j < nao; j++) { MUX_AO[i][j] = mu_x_ints[INDEX(i,j)]; MUY_AO[i][j] = mu_y_ints[INDEX(i,j)]; MUZ_AO[i][j] = mu_z_ints[INDEX(i,j)]; } /* fprintf(outfile, "MUX_AOs\n"); */ /* print_mat(MUX_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUY_AOs\n"); */ /* print_mat(MUY_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUZ_AOs\n"); */ /* print_mat(MUZ_AO, nao, nao, outfile); */ MUX_SO = block_matrix(nso,nso); MUY_SO = block_matrix(nso,nso); MUZ_SO = block_matrix(nso,nso); MUX_MO = block_matrix(nmo,nmo); MUY_MO = block_matrix(nmo,nmo); MUZ_MO = block_matrix(nmo,nmo); /*** Transform the AO dipole integrals to the SO basis ***/ X = block_matrix(nso,nao); /* just a temporary matrix */ C_DGEMM('n','n',nso,nao,nao,1.0,&(usotao[0][0]),nao,&(MUX_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1.0,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUX_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1.0,&(usotao[0][0]),nao,&(MUY_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1.0,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUY_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1.0,&(usotao[0][0]),nao,&(MUZ_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1.0,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUZ_MO[0][0]),nso); free(mu_x_ints); free(mu_y_ints); free(mu_z_ints); free_block(X); free_block(usotao); free_block(MUX_AO); free_block(MUY_AO); free_block(MUZ_AO); /*** Transform the SO dipole integrals to the MO basis ***/ X = block_matrix(nmo,nso); /* just a temporary matrix */ C_DGEMM('t','n',nmo,nso,nso,1.0,&(scf_qt[0][0]),nmo,&(MUX_SO[0][0]),nso, 0,&(X[0][0]),nso); C_DGEMM('n','n',nmo,nmo,nso,1.0,&(X[0][0]),nso,&(scf_qt[0][0]),nmo, 0,&(MUX_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nso,nso,1.0,&(scf_qt[0][0]),nmo,&(MUY_SO[0][0]),nso, 0,&(X[0][0]),nso); C_DGEMM('n','n',nmo,nmo,nso,1.0,&(X[0][0]),nso,&(scf_qt[0][0]),nmo, 0,&(MUY_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nso,nso,1.0,&(scf_qt[0][0]),nmo,&(MUZ_SO[0][0]),nso, 0,&(X[0][0]),nso); C_DGEMM('n','n',nmo,nmo,nso,1.0,&(X[0][0]),nso,&(scf_qt[0][0]),nmo, 0,&(MUZ_MO[0][0]),nmo); free_block(scf_qt); free_block(MUX_SO); free_block(MUY_SO); free_block(MUZ_SO); free_block(X); /* fprintf(outfile, "MUX_MOs\n"); */ /* print_mat(MUX_MO, nmo, nmo, outfile); */ /* fprintf(outfile, "MUY_MOs\n"); */ /* print_mat(MUY_MO, nmo, nmo, outfile); */ /* fprintf(outfile, "MUZ_MOs\n"); */ /* print_mat(MUZ_MO, nmo, nmo, outfile); */ fprintf(outfile, "\tOne-particle density:\n"); print_mat(moinfo.opdm,nmo,nmo,outfile); /*** Contract the correlated dipole moment ***/ for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { mu_x += MUX_MO[i][j] * moinfo.opdm[i][j]; mu_y += MUY_MO[i][j] * moinfo.opdm[i][j]; mu_z += MUZ_MO[i][j] * moinfo.opdm[i][j]; } for(i=0; i < moinfo.nclsd; i++) { mu_x_ref += MUX_MO[i][i] * 2.0 ; mu_y_ref += MUY_MO[i][i] * 2.0 ; mu_z_ref += MUZ_MO[i][i] * 2.0 ; } free(ioff); free_block(MUX_MO); free_block(MUY_MO); free_block(MUZ_MO); mu_x_tot = mu_x + mu_x_n + mu_x_ref ; mu_y_tot = mu_y + mu_y_n + mu_y_ref ; mu_z_tot = mu_z + mu_z_n + mu_z_ref ; fprintf(outfile,"\n\tReference part of electric dipole moment:\n"); fprintf(outfile,"\t----------------------------------------------\n"); fprintf(outfile,"\tmu(X) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_x_ref* _dipmom_au2debye, mu_x_ref* _dipmom_au2si, mu_x_ref); fprintf(outfile,"\tmu(Y) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_y_ref* _dipmom_au2debye, mu_y_ref* _dipmom_au2si, mu_y_ref); fprintf(outfile,"\tmu(Z) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_z_ref* _dipmom_au2debye, mu_z_ref* _dipmom_au2si, mu_z_ref); mu = sqrt(mu_x_ref*mu_x_ref+ mu_y_ref*mu_y_ref+ mu_z_ref*mu_z_ref); fprintf(outfile,"\t|mu| = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu * _dipmom_au2debye, mu * _dipmom_au2si, mu); fprintf(outfile,"\n\tCorrelation part of electric dipole moment:\n"); fprintf(outfile,"\t----------------------------------------------\n"); fprintf(outfile,"\tmu(X) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_x* _dipmom_au2debye, mu_x* _dipmom_au2si, mu_x); fprintf(outfile,"\tmu(Y) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_y* _dipmom_au2debye, mu_y* _dipmom_au2si, mu_y); fprintf(outfile,"\tmu(Z) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_z* _dipmom_au2debye, mu_z* _dipmom_au2si, mu_z); mu = sqrt(mu_x*mu_x+ mu_y*mu_y+ mu_z*mu_z); fprintf(outfile,"\t|mu| = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu * _dipmom_au2debye, mu * _dipmom_au2si, mu); fprintf(outfile,"\n\tNuclear part of electric dipole moment:\n"); fprintf(outfile,"\t----------------------------------------------\n"); fprintf(outfile,"\tmu(X) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_x_n * _dipmom_au2debye, mu_x_n * _dipmom_au2si, mu_x_n); fprintf(outfile,"\tmu(Y) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_y_n * _dipmom_au2debye, mu_y_n * _dipmom_au2si, mu_y_n); fprintf(outfile,"\tmu(Z) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_z_n * _dipmom_au2debye, mu_z_n * _dipmom_au2si, mu_z_n); mu = sqrt(mu_x_n*mu_x_n + mu_y_n*mu_y_n + mu_z_n*mu_z_n); fprintf(outfile,"\t|mu| = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu * _dipmom_au2debye, mu * _dipmom_au2si, mu); fprintf(outfile,"\n\tTotal electric dipole moment:\n"); fprintf(outfile,"\t----------------------------------------------\n"); fprintf(outfile,"\tmu(X) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_x_tot * _dipmom_au2debye, mu_x_tot * _dipmom_au2si, mu_x_tot); fprintf(outfile,"\tmu(Y) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_y_tot * _dipmom_au2debye, mu_y_tot * _dipmom_au2si, mu_y_tot); fprintf(outfile,"\tmu(Z) = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu_z_tot * _dipmom_au2debye, mu_z_tot * _dipmom_au2si, mu_z_tot); mu = sqrt(mu_x_tot*mu_x_tot + mu_y_tot*mu_y_tot + mu_z_tot*mu_z_tot); fprintf(outfile,"\t|mu| = %8.5lf D, %15.8e C*m, %11.8lf a.u.\n", mu * _dipmom_au2debye, mu * _dipmom_au2si, mu); return; } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/distribute.cc����������������������������������������������������������������0000644�0001015�0000765�00000005207�10757640026�016225� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void classify(int p, int q, int r, int s, double value, struct iwlbuf *ABuf, struct iwlbuf *BBuf, struct iwlbuf *CBuf, struct iwlbuf *DBuf, struct iwlbuf *EBuf, struct iwlbuf *FBuf); void distribute(void) { double tolerance; struct iwlbuf InBuf; struct iwlbuf ABuf, BBuf, CBuf, DBuf, EBuf, FBuf; int lastbuf; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; tolerance = params.tolerance; iwl_buf_init(&InBuf, PSIF_MO_TEI, tolerance, 1, 1); iwl_buf_init(&ABuf, 90, tolerance, 0, 0); iwl_buf_init(&BBuf, 91, tolerance, 0, 0); iwl_buf_init(&CBuf, 92, tolerance, 0, 0); iwl_buf_init(&DBuf, 93, tolerance, 0, 0); iwl_buf_init(&EBuf, 94, tolerance, 0, 0); iwl_buf_init(&FBuf, 95, tolerance, 0, 0); /* Run through the buffer that's already available */ lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify(p,q,r,s,value,&ABuf,&BBuf,&CBuf,&DBuf,&EBuf,&FBuf); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify(p,q,r,s,value,&ABuf,&BBuf,&CBuf,&DBuf,&EBuf,&FBuf); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, 1); iwl_buf_flush(&ABuf, 1); iwl_buf_flush(&BBuf, 1); iwl_buf_flush(&CBuf, 1); iwl_buf_flush(&DBuf, 1); iwl_buf_flush(&EBuf, 1); iwl_buf_flush(&FBuf, 1); iwl_buf_close(&ABuf, 1); iwl_buf_close(&BBuf, 1); iwl_buf_close(&CBuf, 1); iwl_buf_close(&DBuf, 1); iwl_buf_close(&EBuf, 1); iwl_buf_close(&FBuf, 1); fflush(outfile); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/dump_RHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000010320�11027011315�015463� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DUMP_RHF(): Mulliken-order the RHF-CC two-electron density and ** dump it to a file for subsequent backtransformation. Basically ** all we have to do is swap indices two and three, e.g. ** ** G'(pr,qs) = G(pq,rs) ** ** In order for the Mulliken-ordered density to be valid for the ** backtransformation algorithm used in TRANSQT, the final density ** must have eight-fold permutational symmetry like the original ** integrals, so symmetrization of some components is necessary. ** ** Note that the CC-ordered indices must be translated inside ** dpd_buf4_dump() to QT ordering, as required by TRANSQT, hence ** the qt_occ and qt_vir arrays. ** ** The bk_pack option to dpd_buf4_dump() indicates whether the ** Mulliken-ordered twopdm component is bra-ket symmetric ** already. If so, then only the lower-triangle needs to be sent ** to TRANSQT2. ** ** I don't remember why I have the swap23 option in ** dpd_buf4_dump(), particularly since I do an explicit sort of ** the density components using DPD functions. It would actually ** be better to let the dump function handle this part to reduce ** disk usage. ** ** Finally, I note that Gibja is multiplied by 0.5 before it is ** dumped to disk. I don't remember why this is necessary. ** ** TDC, last updated 2/08 */ void dump_RHF(struct iwlbuf *OutBuf, struct RHO_Params rho_params) { int nirreps, nmo, nfzv; int *qt_occ, *qt_vir; int h, row, col, p, q, r, s; dpdbuf4 G; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; nirreps = moinfo.nirreps; nmo = moinfo.nmo; nfzv = moinfo.nfzv; psio_open(PSIF_MO_OPDM, PSIO_OPEN_OLD); psio_write_entry(PSIF_MO_OPDM, rho_params.opdm_lbl, (char *) moinfo.opdm[0], sizeof(double)*(nmo-nfzv)*(nmo-nfzv)); psio_close(PSIF_MO_OPDM, 1); if (!params.onepdm) { psio_open(PSIF_MO_LAG, PSIO_OPEN_OLD); psio_write_entry(PSIF_MO_LAG, "MO-basis Lagrangian", (char *) moinfo.I[0], sizeof(double)*nmo*nmo); psio_close(PSIF_MO_LAG, 1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 0, "G(IK,JL)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 0, 0, 0, 0, "G(IK,JL)"); dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_occ, qt_occ, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 10, "G(IK,JA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 10, 0, 10, 0, "G(IK,JA)"); dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_occ, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_sort(&G, CC_TMP9, prqs, 10, 10, "G(IA,JB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP9, 0, 10, 10, 10, 10, 0, "G(IA,JB)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, OutBuf, qt_occ, qt_vir, qt_occ, qt_vir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 5, "G(IJ,AB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); // dpd_buf4_scm(&G, 0.5); /* why is this necessary? */ dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_vir, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, prqs, 5, 10, "G(ca,IB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 5, 10, 5, 10, 0, "G(ca,IB)"); dpd_buf4_dump(&G, OutBuf, qt_vir, qt_vir, qt_occ, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_sort(&G, CC_TMP0, prqs, 5, 5, "G(AC,BD)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 5, 5, 5, 5, 0, "G(AC,BD)"); dpd_buf4_dump(&G, OutBuf, qt_vir, qt_vir, qt_vir, qt_vir, 1, 0); dpd_buf4_close(&G); } } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/dump_ROHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000012775�10757640026�015642� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DUMP_ROHF(): Mulliken-order the ROHF-CCSD two-electron density and ** dump it to a file for subsequent backtransformation. Basically all ** we have to do is swap indices two and three, e.g. ** ** G'(pr,qs) = G(pq,rs) ** ** In order for the Mulliken-ordered density to be valid for the ** backtransformation algorithm used in TRANSQT, the final density ** must have eight-fold permutational symmetry like the original ** integrals. Unfortunately, there are a couple of complications ** introduced by the redundant storage I use for open-shell orbitals ** (useful for spin-restricted references --- see the CCSORT code). In ** particular, if the Mulliken-ordered density is not bra-ket ** symmetric, specific elements of the final density must be ** multiplied by two or they will not appear with the correct ** prefactor in the backtransformation. This only affects the IJKA, ** IAJB, and ABCI Dirac-ordered densities, since the remaining three ** components are bra-ket symmetric in Mulliken order. ** ** I really need to give an example of this problem using specific ** elements of GIJKA so that the code below will be clearer.*/ void dump_ROHF(struct iwlbuf *OutBuf, struct RHO_Params rho_params) { int nirreps, nmo, nfzv; int *qt_occ, *qt_vir; int h, row, col, p, q, r, s; dpdbuf4 G; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; nirreps = moinfo.nirreps; nmo = moinfo.nmo; nfzv = moinfo.nfzv; psio_open(PSIF_MO_OPDM, PSIO_OPEN_OLD); /* psio_write_entry(PSIF_MO_OPDM, "MO-basis OPDM", (char *) moinfo.opdm[0], */ psio_write_entry(PSIF_MO_OPDM, rho_params.opdm_lbl, (char *) moinfo.opdm[0], sizeof(double)*(nmo-nfzv)*(nmo-nfzv)); psio_close(PSIF_MO_OPDM, 1); if (!params.onepdm) { psio_open(PSIF_MO_LAG, PSIO_OPEN_OLD); psio_write_entry(PSIF_MO_LAG, "MO-basis Lagrangian", (char *) moinfo.I[0], sizeof(double)*nmo*nmo); psio_close(PSIF_MO_LAG, 1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 0, "G(IK,JL)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 0, 0, 0, 0, "G(IK,JL)"); dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_occ, qt_occ, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 10, "G(IK,JA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 10, 0, 10, 0, "G(IK,JA)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; q = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; s = G.params->colorb[h][col][1]; if((qt_occ[q] == qt_vir[s]) && (p == r)) G.matrix[h][row][col] *= 2; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_occ, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_sort(&G, CC_TMP9, prqs, 10, 10, "G(IA,JB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP9, 0, 10, 10, 10, 10, 0, "G(IA,JB)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, OutBuf, qt_occ, qt_vir, qt_occ, qt_vir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 5, "G(IJ,AB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); dpd_buf4_scm(&G, 0.5); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; q = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; s = G.params->colorb[h][col][1]; if((qt_occ[p] == qt_vir[r]) && (qt_occ[q] == qt_vir[s])) G.matrix[h][row][col] *= 2; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_dump(&G, OutBuf, qt_occ, qt_occ, qt_vir, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, prqs, 5, 10, "G(ca,IB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 5, 10, 5, 10, 0, "G(ca,IB)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; q = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; s = G.params->colorb[h][col][1]; if((qt_vir[p] == qt_occ[r]) && (q == s)) G.matrix[h][row][col] *= 2; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_dump(&G, OutBuf, qt_vir, qt_vir, qt_occ, qt_vir, 0, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_sort(&G, CC_TMP0, prqs, 5, 5, "G(AC,BD)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 5, 5, 5, 5, 0, "G(AC,BD)"); dpd_buf4_dump(&G, OutBuf, qt_vir, qt_vir, qt_vir, qt_vir, 1, 0); dpd_buf4_close(&G); } } }} // namespace psi::ccdensity ���psi3/src/bin/ccdensity/dump_UHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000034051�10757640026�015515� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* DUMP_UHF(): Mulliken-order the UHF-CC two-electron density and dump ** it to a file for subsequent backtransformation. Basically all we ** have to do is swap indices two and three, e.g. ** ** G'(pr,qs) = G(pq,rs) ** ** In order for the Mulliken-ordered density to be valid for the ** backtransformation algorithm used in TRANSQT, the final density ** must have eight-fold permutational symmetry like the original ** integrals. */ #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) #define IOFF_MAX 32641 void dump_UHF(struct iwlbuf *AA, struct iwlbuf *BB, struct iwlbuf *AB, struct RHO_Params rho_params) { int nirreps, nmo, h, row, col; int *qt_aocc, *qt_avir; int *qt_bocc, *qt_bvir; int *ioff; int p, q, r, s, P, Q, R, S, pr, qs; double value; dpdbuf4 G; /* initialize the ioff array */ ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(p=1; p < IOFF_MAX; p++) ioff[p] = ioff[p-1] + p; qt_aocc = moinfo.qt_aocc; qt_avir = moinfo.qt_avir; qt_bocc = moinfo.qt_bocc; qt_bvir = moinfo.qt_bvir; nirreps = moinfo.nirreps; nmo = moinfo.nmo; psio_open(PSIF_MO_OPDM, PSIO_OPEN_OLD); /* psio_write_entry(PSIF_MO_OPDM, "MO-basis Alpha OPDM", (char *) moinfo.opdm_a[0], sizeof(double)*nmo*nmo); psio_write_entry(PSIF_MO_OPDM, "MO-basis Beta OPDM", (char *) moinfo.opdm_b[0], sizeof(double)*nmo*nmo); */ psio_write_entry(PSIF_MO_OPDM, rho_params.opdm_a_lbl, (char *) moinfo.opdm_a[0], sizeof(double)*nmo*nmo); psio_write_entry(PSIF_MO_OPDM, rho_params.opdm_b_lbl, (char *) moinfo.opdm_b[0], sizeof(double)*nmo*nmo); psio_close(PSIF_MO_OPDM, 1); if (!params.onepdm) { psio_open(PSIF_MO_LAG, PSIO_OPEN_OLD); psio_write_entry(PSIF_MO_LAG, "MO-basis Alpha Lagrangian", (char *) moinfo.I_a[0], sizeof(double)*nmo*nmo); psio_write_entry(PSIF_MO_LAG, "MO-basis Beta Lagrangian", (char *) moinfo.I_b[0], sizeof(double)*nmo*nmo); psio_close(PSIF_MO_LAG, 1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL"); dpd_buf4_sort(&G, CC_TMP0, prqs, 0, 0, "G(IJ,KL)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 0, 0, 0, 0, "G(IJ,KL)"); dpd_buf4_dump(&G, AA, qt_aocc, qt_aocc, qt_aocc, qt_aocc, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 12, 12, 0, "Gijkl"); dpd_buf4_sort(&G, CC_TMP0, prqs, 10, 10, "G(ij,kl)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 10, 10, 10, 0, "G(ij,kl)"); dpd_buf4_dump(&G, BB, qt_bocc, qt_bocc, qt_bocc, qt_bocc, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_aocc[r]; s = G.params->colorb[h][col][1]; S = qt_bocc[s]; value = 2.0 * G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_aocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_aocc[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AA, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bocc[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(BB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_aocc[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); iwl_buf_wrt_val(AB, P, R, S, Q, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bocc[p]; q = G.params->roworb[h][row][1]; Q = qt_aocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bocc[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, Q, S, P, R, value, 0, (FILE *) NULL, 0); iwl_buf_wrt_val(AB, S, Q, P, R, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "G(IJ,AB)"); dpd_buf4_sort(&G, CC_TMP0, prqs, 20, 20, "G(IA,JB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 20, 20, 20, 20, 0, "G(IA,JB)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, AA, qt_aocc, qt_avir, qt_aocc, qt_avir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 15, 10, 15, 0, "G(ij,ab)"); dpd_buf4_sort(&G, CC_TMP0, prqs, 30, 30, "G(ia,jb)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 30, 30, 30, 30, 0, "G(ia,jb)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, BB, qt_bocc, qt_bvir, qt_bocc, qt_bvir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_avir[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = 2.0 * G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_avir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_aocc[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = 0.5 * G.matrix[h][row][col]; iwl_buf_wrt_val(AA, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bvir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bocc[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = 0.5 * G.matrix[h][row][col]; iwl_buf_wrt_val(BB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_aocc[p]; q = G.params->roworb[h][row][1]; Q = qt_bvir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_aocc[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bocc[p]; q = G.params->roworb[h][row][1]; Q = qt_avir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bocc[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, Q, S, P, R, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 5, 21, 7, 0, "GCIAB"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_avir[p]; q = G.params->roworb[h][row][1]; Q = qt_aocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_avir[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AA, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 15, 31, 17, 0, "Gciab"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bvir[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bvir[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(BB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_avir[p]; q = G.params->roworb[h][row][1]; Q = qt_bocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_avir[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); iwl_buf_wrt_val(AB, P, R, S, Q, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_bvir[p]; q = G.params->roworb[h][row][1]; Q = qt_aocc[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_bvir[r]; s = G.params->colorb[h][col][1]; S = qt_avir[s]; value = G.matrix[h][row][col]; iwl_buf_wrt_val(AB, Q, S, P, R, value, 0, (FILE *) NULL, 0); iwl_buf_wrt_val(AB, S, Q, P, R, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 7, 7, 0, "GABCD"); dpd_buf4_sort(&G, CC_TMP0, prqs, 5, 5, "G(AB,CD)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 5, 5, 5, 5, 0, "G(AB,CD)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, AA, qt_avir, qt_avir, qt_avir, qt_avir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 15, 15, 17, 17, 0, "Gabcd"); dpd_buf4_sort(&G, CC_TMP0, prqs, 15, 15, "G(ab,cd)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 15, 15, 15, 15, 0, "G(ab,cd)"); dpd_buf4_symm(&G); dpd_buf4_dump(&G, BB, qt_bvir, qt_bvir, qt_bvir, qt_bvir, 1, 0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); for(h=0; h < G.params->nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_avir[p]; q = G.params->roworb[h][row][1]; Q = qt_bvir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_avir[r]; s = G.params->colorb[h][col][1]; S = qt_bvir[s]; value = 2.0 * G.matrix[h][row][col]; iwl_buf_wrt_val(AB, P, R, Q, S, value, 0, (FILE *) NULL, 0); } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); } free(ioff); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/energy.cc��������������������������������������������������������������������0000644�0001015�0000765�00000003355�11027011315�015322� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Calculates the one- and two-electron CC energies using the coresponding one- and two-particle density matrices. */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ENERGY(): Compute the CC energy using the one- and two-particle ** density matrices. ** ** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** The individual two-electron components are: ** ** E(ijkl) = 1/4 sum_ijkl Gijkl <ij||kl> ** ** E(ijka) = 1/4 sum_ijka [Gijka <ij||ka> + Gijak <ij||ak> + ** Giajk <ia||jk> + Gaijk <ai||jk>] ** = sum_ijka Gijka <ij||ka> ** ** E(ijab) = 1/4 sum_ijab [Gijab <ij||ab> + Gabij <ab||ij>] ** = 1/2 sum_ijab Gijab <ij||ab> ** ** E(iajb) = 1/4 sum_iajb [Giajb <ia||jb> + Giabj <ia||bj> + ** Gaijb <ai||jb> + Gaibj <ai||bj>] ** = sum_iajb Giajb <ia||jb> ** ** E(abci) = 1/4 sum_abci [Gabci <ab||ci> + Gabic <ab||ic> + ** Gciab <ic||ab> + Gicab <ic||ab>] ** = sum_abci Gabci <ab||ci> ** E(abcd) = 1/4 sum_abcd Gabcd <ab||cd> ** ** Individual spin cases are handled below. */ void energy_RHF(struct RHO_Params rho_params); void energy_ROHF(struct RHO_Params rho_params); void energy_UHF(struct RHO_Params rho_params); void energy(struct RHO_Params rho_params) { if(params.ref == 0) energy_RHF(rho_params); else if(params.ref == 1) energy_ROHF(rho_params); else if(params.ref == 2) energy_UHF(rho_params); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/energy_RHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000016176�11027011315�016026� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Calculates the one- and two-electron CC energies using the coresponding one- and two-particle density matrices. */ #include <stdio.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ENERGY_RHF(): Compute the RHF CC energy using the one- and two-particle ** density matrices. ** */ void energy_RHF(struct RHO_Params rho_params) { dpdfile2 D, F; dpdbuf4 G, A, B, C, DInts, E, FInts; double one_energy=0.0, two_energy=0.0, total_two_energy = 0.0; double this_energy; fprintf(outfile, "\n\tEnergies re-computed from CC density:\n"); fprintf(outfile, "\t-------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); total_two_energy = 0.0; /* E_ijkl = (2 Gijkl = Gijlk) <ij|kl> */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijkl - Gijlk", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 0, "2 Gijkl - Gijlk", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "2 Gijkl - Gijlk"); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); two_energy = dpd_buf4_dot(&A, &G); dpd_buf4_close(&A); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; /* E_ijka = 2 [ (2 Gijka - Gjika) <ij|ka> ] */ /* NB: GIjKa is scaled by 1/2 in Gijka.cc. */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); /* The factor of 4 here is necessary because Gijka is multiplied by 1/2 in Gijka.cc */ two_energy = 4.0 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; /* Generate spin-adapted Gijab jut for energy calculation */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); two_energy = 2.0 * dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); two_energy += 2.0 * dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); two_energy += 2.0 * dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&DInts, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); two_energy -= 2.0 * dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; /* Generate spin-adapted Gciab just for energy calculation */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_FINTS, qpsr, 11, 5, "F <ai|bc>"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); /* The factor of 4 here is necessary because Gciab is multiplied by 1/2 in Gciab.cc */ two_energy = 4*dpd_buf4_dot(&FInts, &G); dpd_buf4_close(&FInts); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gabcd - Gabdc", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 5, 5, "2 Gabcd - Gabdc", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "2 Gabcd - Gabdc"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); two_energy = dpd_buf4_dot(&B, &G); dpd_buf4_close(&B); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/energy_ROHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000024436�11027011315�016143� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Calculates the one- and two-electron CC energies using the coresponding one- and two-particle density matrices. */ #include <stdio.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ENERGY_ROHF(): Compute the ROHF CC energy using the one- and two-particle ** density matrices. */ void energy_ROHF(struct RHO_Params rho_params) { dpdfile2 D, F; dpdbuf4 G, A, B, C, DInts, E, FInts; double one_energy=0.0, two_energy=0.0, total_two_energy = 0.0; double this_energy; fprintf(outfile, "\n\tEnergies re-computed from CC density:\n"); fprintf(outfile, "\t-------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIJ = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fij"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDij = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDAB = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDab = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDIA = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDia = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDAI = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /*fprintf(outfile, "\tDai = %20.15f\n", this_energy); */ one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); if (params.onepdm) return; total_two_energy = 0.0; two_energy = 0.0; dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 2, 2, 2, 0, "GIJKL"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 2, 2, 2, 0, "Gijkl"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_close(&A); total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&DInts, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); /* ** Compute the Gibja contribution to the two-electron energy. By ** spin-case this contribution looks like: ** ** E(AA) <-- sum_IBJA G(IB,JA) <JA||IB> ** E(BB) <-- sum_ibja G(ib,ja) <ja||ib> ** E(AB) <-- sum_IbJa ( G(Ib,Ja) <Ja|Ib> + G(iB,jA) <jA|iB> - ** G(Ib,jA) <jA|bI> - G(iB,Ja) <Ja|Bi> ) ** ** See Gibja.c for the definition of G here. */ two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&DInts, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 7, "F(CI,AB)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 7, 11, 7, 0, "F(CI,AB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); two_energy -= dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); two_energy -= dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 5, "F(cI,Ba)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(cI,Ba)"); dpd_buf4_sort(&FInts, CC_TMP1, pqsr, 11, 5, "F(cI,aB)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP1, 0, 11, 5, 11, 5, 0, "F(cI,aB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "Gabcd"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_close(&B); total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/energy_UHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000026063�11027503542�016035� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Calculates the one- and two-electron CC energies using the coresponding one- and two-particle density matrices. */ #include <stdio.h> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ENERGY_UHF(): Compute the UHF CC energy using the one- and two-particle ** density matrices. */ void energy_UHF(struct RHO_Params rho_params) { dpdfile2 D, F; dpdbuf4 G, A, B, C, DInts, E, FInts; double one_energy=0.0, two_energy=0.0, total_two_energy = 0.0; double this_energy, test_energy; fprintf(outfile, "\n\tEnergies re-computed from CC density:\n"); fprintf(outfile, "\t-------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIJ = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 2, "fij"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDij = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAB = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDab = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIA = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDia = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAI = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDai = %20.15f\n", this_energy); */ one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); if (params.onepdm) return; total_two_energy = 0.0; two_energy = 0.0; dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 2, 2, 2, 0, "GIJKL"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 12, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 12, 12, 12, 0, "Gijkl"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); two_energy += dpd_buf4_dot(&G, &A); dpd_buf4_close(&G); dpd_buf4_close(&A); total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); two_energy += dpd_buf4_dot(&G, &E); dpd_buf4_close(&G); dpd_buf4_close(&E); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&DInts, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); /* ** Compute the Gibja contribution to the two-electron energy. By ** spin-case this contribution looks like: ** ** E(AA) <-- sum_IBJA G(IB,JA) <JA||IB> ** E(BB) <-- sum_ibja G(ib,ja) <ja||ib> ** E(AB) <-- sum_IbJa ( G(Ib,Ja) <Ja|Ib> + G(iB,jA) <jA|iB> - ** G(Ib,jA) <jA|bI> - G(iB,Ja) <Ja|Bi> ) ** ** See Gibja.c for the definition of G here. */ two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); two_energy += dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_close(&C); dpd_buf4_init(&DInts, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&FInts, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 17, 17, 17, 17, 0, "Gabcd"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); two_energy += dpd_buf4_dot(&G, &B); dpd_buf4_close(&G); dpd_buf4_close(&B); total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\t%-7s correlation energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy); fprintf(outfile, "\tTotal %-7s energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/file_build.cc����������������������������������������������������������������0000644�0001015�0000765�00000013554�10757640026�016151� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <ccfiles.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void idx_permute(dpdfile4 *File, struct iwlbuf *OutBuf, int **bucket_map, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile); int file_build(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep) { struct iwlbuf InBuf; int lastbuf; long int memoryb, memoryd; int h, nirreps, n, row, col, nump, numq, row_length, core_left, nbuckets; int **bucket_map, **bucket_offset, **bucket_rowdim, **bucket_size, offset; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; struct iwlbuf *SortBuf, *OutBuf; psio_address next; nirreps = File->params->nirreps; fndcor(&memoryb, infile, outfile); memoryd = memoryb/sizeof(double); /* It's annoying that I have to compute this here */ for(h=0,nump=0,numq=0; h < File->params->nirreps; h++) { nump += File->params->ppi[h]; numq += File->params->qpi[h]; } bucket_map = init_int_matrix(nump,numq); /* Room for one bucket to begin with */ bucket_offset = (int **) malloc(sizeof(int *)); bucket_offset[0] = init_int_array(nirreps); bucket_rowdim = (int **) malloc(sizeof(int *)); bucket_rowdim[0] = init_int_array(nirreps); bucket_size = (int **) malloc(sizeof(int *)); bucket_size[0] = init_int_array(nirreps); /* Figure out how many buckets we need and where each p,q goes */ for(h=0,core_left=memoryd,nbuckets=1; h < nirreps; h++) { row_length = File->params->coltot[h^(File->my_irrep)]; for(row=0; row < File->params->rowtot[h]; row++) { if((core_left - row_length) >= 0) { core_left -= row_length; bucket_rowdim[nbuckets-1][h]++; bucket_size[nbuckets-1][h] += row_length; } else { nbuckets++; core_left = memoryd - row_length; /* Make room for another bucket */ bucket_offset = (int **) realloc((void *) bucket_offset, nbuckets * sizeof(int *)); bucket_offset[nbuckets-1] = init_int_array(nirreps); bucket_offset[nbuckets-1][h] = row; bucket_rowdim = (int **) realloc((void *) bucket_rowdim, nbuckets * sizeof(int *)); bucket_rowdim[nbuckets-1] = init_int_array(nirreps); bucket_rowdim[nbuckets-1][h] = 1; bucket_size = (int **) realloc((void *) bucket_size, nbuckets * sizeof(int *)); bucket_size[nbuckets-1] = init_int_array(nirreps); bucket_size[nbuckets-1][h] = row_length; } p = File->params->roworb[h][row][0]; q = File->params->roworb[h][row][1]; bucket_map[p][q] = nbuckets - 1; } } fprintf(outfile, "\tSorting File: %s nbuckets = %d\n", File->label, nbuckets); /* Set up IWL buffers for sorting */ SortBuf = (struct iwlbuf *) malloc(nbuckets * sizeof(struct iwlbuf)); for(n=0; n < nbuckets; n++) iwl_buf_init(&SortBuf[n], CC_MAX+1+n, tolerance, 0, 0); iwl_buf_init(&InBuf, inputfile, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute(File,SortBuf,bucket_map,p,q,r,s, perm_pr,perm_qs,perm_prqs,value,outfile); } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute(File,SortBuf,bucket_map,p,q,r,s, perm_pr,perm_qs,perm_prqs,value,outfile); } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, keep); for(n=0; n < nbuckets; n++) { iwl_buf_flush(&SortBuf[n], 1); iwl_buf_close(&SortBuf[n], 1); } free_int_matrix(bucket_map); /* Now sort each buffer and send it to the final target */ next = PSIO_ZERO; for(n=0; n < nbuckets; n++) { iwl_buf_init(&SortBuf[n], CC_MAX+1+n, tolerance, 1, 0); lastbuf = 0; for(h=0; h < nirreps; h++) { File->matrix[h] = block_matrix(bucket_rowdim[n][h], File->params->coltot[h]); } while(!lastbuf) { iwl_buf_fetch(&SortBuf[n]); lastbuf = SortBuf[n].lastbuf; for(idx=4*SortBuf[n].idx; SortBuf[n].idx < SortBuf[n].inbuf; SortBuf[n].idx++) { p = (int) SortBuf[n].labels[idx++]; q = (int) SortBuf[n].labels[idx++]; r = (int) SortBuf[n].labels[idx++]; s = (int) SortBuf[n].labels[idx++]; value = (double) SortBuf[n].values[SortBuf[n].idx]; h = File->params->psym[p] ^ File->params->qsym[q]; row = File->params->rowidx[p][q]; col = File->params->colidx[r][s]; offset = bucket_offset[n][h]; File->matrix[h][row-offset][col] = value; } } for(h=0; h < nirreps;h++) { if(bucket_size[n][h]) psio_write(File->filenum, File->label, (char *) File->matrix[h][0], bucket_size[n][h]*sizeof(double), next, &next); free_block(File->matrix[h]); } iwl_buf_close(&SortBuf[n], 0); } for(n=0; n < nbuckets; n++) { free(bucket_offset[n]); free(bucket_rowdim[n]); } free(bucket_offset); free(bucket_rowdim); free(SortBuf); return 0; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/fold.cc����������������������������������������������������������������������0000644�0001015�0000765�00000002534�11027011315�014753� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* FOLD(): Fold the Fock matrix contributions to the energy (or energy ** derivative) into the two-particle density matrix. Here we are ** trying to convert from an energy expression of the form: ** ** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** to the form: ** ** E = sum_pq Dpq hpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** We do this by shifting some one-particle density matrix components ** into appropriate two-particle density matrix components: ** ** G'pmrm = Dpr + 4 * Gpmrm ** ** One problem is that we need to make sure the resulting density, ** G'pqrs, is still antisymmetric to permutation of p and q or r and ** s. So, for example, for the Gimkm component we compute: ** ** G'pmrm = Dpr + Gpmrm ** G'mprm = Dpr - Gmprm ** G'pmmr = Dpr - Gpmmr ** G'mpmr = Dpr + Gmpmr ** */ void fold_RHF(struct RHO_Params rho_params); void fold_ROHF(struct RHO_Params rho_params); void fold_UHF(struct RHO_Params rho_params); void fold(struct RHO_Params rho_params) { if(params.ref == 0) fold_RHF(rho_params); else if(params.ref == 1) fold_ROHF(rho_params); else if(params.ref == 2) fold_UHF(rho_params); } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/fold_RHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000027056�11027011315�015460� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* FOLD_RHF(): Fold the RHF Fock matrix contributions to the energy ** (or energy derivative) into the two-particle density matrix. Here ** we are trying to convert from an energy expression of the form: ** ** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** to the form: ** ** E = sum_pq Dpq hpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** We do this by shifting some one-particle density matrix components ** into appropriate two-particle density matrix components: ** ** G'pmrm = Dpr + 4 * Gpmrm ** ** One problem is that we need to make sure the resulting density, ** G'pqrs, is still antisymmetric to permutation of p and q or r and ** s. So, for example, for the Gimkm component we compute: ** ** G'pmrm = Dpr + Gpmrm ** G'mprm = Dpr - Gmprm ** G'pmmr = Dpr - Gpmmr ** G'mpmr = Dpr + Gmpmr ** */ void fold_RHF(struct RHO_Params rho_params) { int h, nirreps; int i, j, k, l, m, a, b; int I, J, K, L, M, A, B; int IM, JM, MI, MJ, MK, ML, MA, MB; int Gi, Gj, Gk, Gl, Gm, Ga, Gb; int *occpi, *virtpi; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi; dpdfile2 D, D1, D2, F; dpdbuf4 G, Aints, E, C, DInts, FInts, BInts, G1, G2; double one_energy=0.0, two_energy=0.0, total_two_energy=0.0; double test_energy = 0.0, tmp; double this_energy; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; if(!params.aobasis) { fprintf(outfile, "\n\tEnergies re-computed from Fock-adjusted CC density:\n"); fprintf(outfile, "\t---------------------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = 2.0 * dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); } dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; MI = G.params->rowidx[M][I]; MJ = G.params->colidx[M][J]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; G.matrix[h][MI][MJ] += D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* Generate spin-adapted Gijkl just for the energy calculation */ dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijkl - Gijlk", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 0, "2 Gijkl - Gijlk", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "2 Gijkl - Gijlk"); if(!params.aobasis) { dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); two_energy += dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); } dpd_buf4_close(&G); if(!params.aobasis) { total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MI = G.params->rowidx[M][I]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* Generate spin-adapted Gijka just for the energy calculation */ dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); /* The factor of 4 here is necessary because Gijka is multiplied by 1/2 in Gijka.cc */ two_energy = 4 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); } dpd_buf4_close(&G); if(!params.aobasis) { total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); if(!params.aobasis) { /* Generate spin-adapted Gijab jut for energy calculation */ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); two_energy = 2 * dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) { B = vir_off[Gb] + b; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); two_energy += 2.0 * dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); two_energy += 2.0 * dpd_buf4_dot(&G, &C); dpd_buf4_close(&G); dpd_buf4_init(&DInts, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); two_energy -= 2.0 * dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); } if(!params.aobasis) { /* Generate spin-adapted Gciab just for energy calculation */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_FINTS, qpsr, 11, 5, "F <ai|bc>"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); /* The factor of 4 here is necessary because Gciab is multiplied by 1/2 in Gciab.cc */ two_energy = 4*dpd_buf4_dot(&FInts, &G); dpd_buf4_close(&FInts); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); } if(!params.aobasis) { dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gabcd - Gabdc", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 5, 5, "2 Gabcd - Gabdc", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "2 Gabcd - Gabdc"); dpd_buf4_init(&BInts, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); two_energy = dpd_buf4_dot(&BInts, &G); dpd_buf4_close(&BInts); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); } if(!params.aobasis) { fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/fold_ROHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000053473�10757640026�015621� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* FOLD_ROHF(): Fold the ROHF Fock matrix contributions to the energy ** (or energy derivative) into the two-particle density matrix. Here ** we are trying to convert from an energy expression of the form: ** ** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** to the form: ** ** E = sum_pq Dpq hpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** We do this by shifting some one-particle density matrix components ** into appropriate two-particle density matrix components: ** ** G'pmrm = Dpr + 4 * Gpmrm ** ** One problem is that we need to make sure the resulting density, ** G'pqrs, is still antisymmetric to permutation of p and q or r and ** s. So, for example, for the Gimkm component we compute: ** ** G'pmrm = Dpr + Gpmrm ** G'mprm = Dpr - Gmprm ** G'pmmr = Dpr - Gpmmr ** G'mpmr = Dpr + Gmpmr ** */ void fold_ROHF(struct RHO_Params rho_params) { int h, nirreps; int i, j, k, l, m, a, b; int I, J, K, L, M, A, B; int IM, JM, MI, MJ, MK, ML, MA, MB; int Gi, Gj, Gk, Gl, Gm, Ga, Gb; int *occpi, *virtpi; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi; dpdfile2 D, D1, D2, F; dpdbuf4 G, Aints, E, C, DInts, FInts, BInts, G1, G2; double one_energy=0.0, two_energy=0.0, total_two_energy=0.0; double test_energy = 0.0, tmp; double this_energy; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; if(!params.aobasis) { fprintf(outfile, "\n\tEnergies re-computed from Fock-adjusted CC density:\n"); fprintf(outfile, "\t---------------------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIJ = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDij = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAB = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDab = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIA = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDia = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAI = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDai = %20.15f\n", this_energy); */ one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); } dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; MI = G.params->rowidx[M][I]; MJ = G.params->colidx[M][J]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j]; G.matrix[h][MI][MJ] += D.matrix[Gi][i][j]; G.matrix[h][MI][JM] -= D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); two_energy += 0.25 * dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "Gijkl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) { J = occ_off[Gj] + j; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; MI = G.params->rowidx[M][I]; MJ = G.params->colidx[M][J]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; G.matrix[h][MI][JM] -= D.matrix[Gi][i][j]; G.matrix[h][MI][MJ] += D.matrix[Gi][i][j]; G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); two_energy += 0.25 * dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gk = Gl = h^Gm; for(k=0; k < (occpi[Gk] - openpi[Gk]); k++) { K = occ_off[Gk] + k; for(l=0; l < (occpi[Gl] - openpi[Gl]); l++) { L = occ_off[Gl] + l; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MK = G.params->rowidx[M][K]; ML = G.params->colidx[M][L]; G.matrix[h][MK][ML] += D.matrix[Gk][k][l]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); two_energy += dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); } dpd_buf4_close(&G); if(!params.aobasis) { total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MI = G.params->rowidx[M][I]; IM = G.params->rowidx[I][M]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); two_energy += dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); } dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MI = G.params->rowidx[M][I]; IM = G.params->rowidx[I][M]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); two_energy += dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); } dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MI = G.params->rowidx[M][I]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); two_energy += 2 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); } dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MI = G.params->rowidx[M][I]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); two_energy += 2 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); } dpd_buf4_close(&G); if(!params.aobasis) { total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&DInts, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); } dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) { B = vir_off[Gb] + b; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) { B = vir_off[Gb] + b; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } if(!params.aobasis) { dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); if(!params.aobasis) { dpd_buf4_init(&DInts, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); } if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 7, "F(CI,AB)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 7, 11, 7, 0, "F(CI,AB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); two_energy = -1.0 * dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); two_energy -= dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 5, "F(cI,Ba)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(cI,Ba)"); dpd_buf4_sort(&FInts, CC_TMP1, pqsr, 11, 5, "F(cI,aB)"); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_TMP1, 0, 11, 5, 11, 5, 0, "F(cI,aB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); } if(!params.aobasis) { two_energy = 0.0; dpd_buf4_init(&BInts, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "Gabcd"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_close(&BInts); dpd_buf4_init(&BInts, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_close(&BInts); } if(!params.aobasis) { total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); if (params.ground) { fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tTotal CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } else { fprintf(outfile, "\tTotal EOM CCSD correlation energy = %20.15f\n", one_energy + total_two_energy); fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n", moinfo.ecc + params.cceom_energy); fprintf(outfile, "\tTotal EOM CCSD energy = %20.15f\n", one_energy + total_two_energy + moinfo.eref); } } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/fold_UHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000051353�11027503542�015470� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* FOLD_UHF(): Fold the UHF Fock matrix contributions to the energy ** (or energy derivative) into the two-particle density matrix. Here ** we are trying to convert from an energy expression of the form: ** ** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** to the form: ** ** E = sum_pq Dpq hpq + 1/4 sum_pqrs Gpqrs <pq||rs> ** ** We do this by shifting some one-particle density matrix components ** into appropriate two-particle density matrix components: ** ** G'pmrm = Dpr + 4 * Gpmrm ** ** One problem is that we need to make sure the resulting density, ** G'pqrs, is still antisymmetric to permutation of p and q or r and ** s. So, for example, for the Gimkm component we compute: ** ** G'pmrm = Dpr + Gpmrm ** G'mprm = Dpr - Gmprm ** G'pmmr = Dpr - Gpmmr ** G'mpmr = Dpr + Gmpmr ** */ void fold_UHF(struct RHO_Params rho_params) { int h, nirreps; int i, j, k, l, m, a, b; int I, J, K, L, M, A, B; int IM, JM, MI, MJ, MK, ML, MA, MB; int Gi, Gj, Gk, Gl, Gm, Ga, Gb; int *aoccpi, *avirtpi; int *boccpi, *bvirtpi; int *aocc_off, *avir_off; int *bocc_off, *bvir_off; int *aocc_sym, *avir_sym; int *bocc_sym, *bvir_sym; dpdfile2 D, D1, D2, F; dpdbuf4 G, Aints, E, C, DInts, FInts, BInts, G1, G2; double one_energy=0.0, two_energy=0.0, total_two_energy=0.0; double this_energy; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; avir_sym = moinfo.avir_sym; bocc_sym = moinfo.bocc_sym; bvir_sym = moinfo.bvir_sym; fprintf(outfile, "\n\tEnergies re-computed from Fock-adjusted CC density:\n"); fprintf(outfile, "\t---------------------------------------------------\n"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(I,J)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIJ = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 2, "h(i,j)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDij = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(A,B)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAB = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "h(a,b)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDab = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(I,A)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDIA = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDia = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(I,A)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDAI = %20.15f\n", this_energy); */ one_energy += this_energy; dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "h(i,a)"); this_energy = dpd_file2_dot(&D, &F); dpd_file2_close(&F); dpd_file2_close(&D); /* fprintf(outfile, "\tDai = %20.15f\n", this_energy); */ one_energy += this_energy; fprintf(outfile, "\tOne-electron energy = %20.15f\n", one_energy); fflush(outfile); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; MI = G.params->rowidx[M][I]; MJ = G.params->colidx[M][J]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j]; G.matrix[h][MI][MJ] += D.matrix[Gi][i][j]; G.matrix[h][MI][JM] -= D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } two_energy = 0.0; dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <IJ|KL>"); two_energy += 0.25 * dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 12, 12, 0, "Gijkl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; MI = G.params->rowidx[M][I]; MJ = G.params->colidx[M][J]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; G.matrix[h][MI][JM] -= D.matrix[Gi][i][j]; G.matrix[h][MI][MJ] += D.matrix[Gi][i][j]; G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&Aints, CC_AINTS, 0, 10, 10, 10, 10, 1, "A <ij|kl>"); two_energy += 0.25 * dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Gj = h^Gm; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; IM = G.params->rowidx[I][M]; JM = G.params->colidx[J][M]; G.matrix[h][IM][JM] += D.matrix[Gi][i][j]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gk = Gl = h^Gm; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; for(l=0; l < boccpi[Gl]; l++) { L = bocc_off[Gl] + l; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MK = G.params->rowidx[M][K]; ML = G.params->colidx[M][L]; G.matrix[h][MK][ML] += D.matrix[Gk][k][l]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); two_energy += dpd_buf4_dot(&Aints, &G); dpd_buf4_close(&Aints); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tIJKL energy = %20.15f\n", two_energy); fflush(outfile); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MI = G.params->rowidx[M][I]; IM = G.params->rowidx[I][M]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } two_energy = 0.0; dpd_buf4_init(&E, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); two_energy += dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; MI = G.params->rowidx[M][I]; IM = G.params->rowidx[I][M]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&E, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); two_energy += dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; MI = G.params->rowidx[M][I]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); two_energy += 2 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); dpd_file2_init(&D1, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_mat_init(&D1); dpd_file2_mat_rd(&D1); dpd_file2_init(&D2, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_mat_init(&D2); dpd_file2_mat_rd(&D2); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Gi = Ga = h^Gm; for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MI = G.params->rowidx[M][I]; MA = G.params->colidx[M][A]; G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] + D2.matrix[Gi][i][a]); } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); two_energy += 2 * dpd_buf4_dot(&E, &G); dpd_buf4_close(&E); dpd_buf4_close(&G); total_two_energy += two_energy; fprintf(outfile, "\tIJKA energy = %20.15f\n", two_energy); fflush(outfile); dpd_file2_mat_close(&D1); dpd_file2_close(&D1); dpd_file2_mat_close(&D2); dpd_file2_close(&D2); two_energy = 0.0; dpd_buf4_init(&DInts, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); two_energy += dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tIJAB energy = %20.15f\n", two_energy); fflush(outfile); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < avirtpi[Gb]; b++) { B = avir_off[Gb] + b; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } two_energy = 0.0; dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < bvirtpi[Gb]; b++) { B = bvir_off[Gb] + b; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < bvirtpi[Gb]; b++) { B = bvir_off[Gb] + b; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(Gm=0; Gm < nirreps; Gm++) { Ga = Gb = h^Gm; for(b=0; b < avirtpi[Gb]; b++) { B = avir_off[Gb] + b; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; MB = G.params->rowidx[M][B]; MA = G.params->colidx[M][A]; G.matrix[h][MB][MA] += D.matrix[Ga][a][b]; } } } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); two_energy += dpd_buf4_dot(&C, &G); dpd_buf4_close(&C); dpd_buf4_close(&G); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_buf4_init(&DInts, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); dpd_buf4_init(&DInts, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); two_energy -= dpd_buf4_dot(&G, &DInts); dpd_buf4_close(&G); dpd_buf4_close(&DInts); total_two_energy += two_energy; fprintf(outfile, "\tIBJA energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&FInts, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); dpd_buf4_init(&FInts, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); two_energy += dpd_buf4_dot(&G, &FInts); dpd_buf4_close(&G); dpd_buf4_close(&FInts); two_energy *= 2; total_two_energy += two_energy; fprintf(outfile, "\tCIAB energy = %20.15f\n", two_energy); fflush(outfile); two_energy = 0.0; dpd_buf4_init(&BInts, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_close(&BInts); dpd_buf4_init(&BInts, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 17, 17, 17, 17, 0, "Gabcd"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_close(&BInts); dpd_buf4_init(&BInts, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); two_energy += dpd_buf4_dot(&G, &BInts); dpd_buf4_close(&G); dpd_buf4_close(&BInts); total_two_energy += two_energy; fprintf(outfile, "\tABCD energy = %20.15f\n", two_energy); fprintf(outfile, "\tTotal two-electron energy = %20.15f\n", total_two_energy); fprintf(outfile, "\t%7s correlation energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy); fprintf(outfile, "\tTotal %7s energy = %20.15f\n", !strcmp(params.wfn,"CCSD_T") ? "CCSD(T)" : params.wfn, one_energy + total_two_energy + moinfo.eref); } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Frozen.h���������������������������������������������������������������������0000644�0001015�0000765�00000004235�10754663017�015156� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ /*! \defgroup CCDENSITY ccdensity: Computes the Coupled-Cluster Density */ namespace psi { namespace ccdensity { struct Frozen { int nfzc; /* total no. of frozen core orbitals */ int nfzv; /* total no. of frozen virtual orbitals */ int *occ_sym; /* occupied index symmetry */ int *aocc_sym; /* alpha occupied index symmetry */ int *bocc_sym; /* beta occupied index symmetry */ int *vir_sym; /* virtual index symmetry */ int *avir_sym; /* alpha virtual index symmetry */ int *bvir_sym; /* beta virtual index symmetry */ int *occpi; /* no. of occ. orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occ. orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occ. orbs. (incl. open) per irrep */ int *virtpi; /* no. of virt. orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virt. orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virt. orbs. (incl. open) per irrep */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* occupied alpha orbital offsets within each irrep */ int *bocc_off; /* occupied beta orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* virtual alpha orbital offsets within each irrep */ int *bvir_off; /* virtual beta orbital offsets within each irrep */ int *allcc_occ; /* QT->CC occupied reordering array */ int *allcc_vir; /* QT->CC virtiual reordering array */ int *qt_occ; /* CC->QT occupied reordering array */ int *qt_vir; /* CC->QT virtiual reordering array */ int *cc_occ; /* QT->CC active occupied reordering array */ int *cc_vir; /* QT->CC active virtiual reordering array */ int *occ; /* boolean array for occ. orbs. */ int *vir; /* boolean array for virt. orbs. */ int *socc; /* boolean array for socc. orbs. */ }; }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/G.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000013454�10757640026�014240� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void G_build(void) { dpdbuf4 LIJAB, Lijab, LiJaB, LIjAb, LijAB, LIJab; dpdbuf4 tIJAB, tijab, tiJaB, tIjAb, tijAB, tIJab; dpdfile2 GAE, Gae, GMI, Gmi; int G_irr; G_irr = params.G_irr; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&GMI, CC_GLG, G_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_GLG, G_irr, 0, 0, "Gmi"); /* T2(MJ,AB) * L2(IJ,AB) --> G(M,I) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_GLG, G_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&tIJAB, &LIJAB, &GMI, 0, 0, 1.0, 0.0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Mj,Ab) * L2(Ij,Ab) --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&tIjAb, &LIjAb, &GMI, 0, 0, 1.0, 1.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(mj,ab) * L2(ij,ab) --> G(m,i) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&Lijab, CC_GLG, G_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&tijab, &Lijab, &Gmi, 0, 0, 1.0, 0.0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(mJ,aB) * L2(iJ,aB) --> G(m,i) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&tiJaB, &LiJaB, &Gmi, 0, 0, 1.0, 1.0); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); dpd_file2_init(&GAE, CC_GLG, G_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_GLG, G_irr, 1, 1, "Gae"); /* T2(IJ,AB) * L2(IJ,EB) --> G(A,E) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_GLG, G_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&LIJAB, &tIJAB, &GAE, 2, 2, -1.0, 0.0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Ij,Ab) * L2(Ij,Eb) --> G(A,E) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&LIjAb, &tIjAb, &GAE, 2, 2, -1.0, 1.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(ij,ab) * L2(ij,eb) --> G(a,e) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&Lijab, CC_GLG, G_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&Lijab, &tijab, &Gae, 2, 2, -1.0, 0.0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(iJ,aB) * L2(iJ,eB) --> G(a,e) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&LiJaB, &tiJaB, &Gae, 2, 2, -1.0, 1.0); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&GMI, CC_GLG, G_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_GLG, G_irr, 2, 2, "Gmi"); /* T2(MJ,AB) * L2(IJ,AB) --> G(M,I) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_GLG, G_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&tIJAB, &LIJAB, &GMI, 0, 0, 1, 0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Mj,Ab) * L2(Ij,Ab) --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&tIjAb, &LIjAb, &GMI, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(mj,ab) * L2(ij,ab) --> G(m,i) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&Lijab, CC_GLG, G_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&tijab, &Lijab, &Gmi, 0, 0, 1, 0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(mJ,aB) * L2(iJ,aB) --> G(m,i) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_GLG, G_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&tiJaB, &LiJaB, &Gmi, 0, 0, 1, 1); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); dpd_file2_init(&GAE, CC_GLG, G_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_GLG, G_irr, 3, 3, "Gae"); /* T2(JI,BA) * L2(JI,BE) --> G(A,E) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_GLG, G_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&LIJAB, &tIJAB, &GAE, 3, 3, -1, 0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(jI,bA) * L2(jI,bE) --> G(A,E) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&LIjAb, CC_GLG, G_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&LIjAb, &tIjAb, &GAE, 3, 3, -1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(ji,ba) * L2(ji,be) --> G(a,e) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Lijab, CC_GLG, G_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&Lijab, &tijab, &Gae, 3, 3, -1, 0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(Ji,Ba) * L2(Ji,Be) --> G(a,e) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&LiJaB, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&LiJaB, &tiJaB, &Gae, 3, 3, -1, 1); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/G_norm.cc��������������������������������������������������������������������0000644�0001015�0000765�00000010611�10757640026�015263� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void G_norm(void) { dpdfile2 G1; dpdbuf4 G; double value, value1, dot_IA, dot_ia, dot_AI, dot_ai; int G_irr = 0; fprintf(outfile,"Calculating overlaps of CC_OEI\n"); dpd_file2_init(&G1, CC_OEI, G_irr, 0, 1, "DIA"); dot_IA = dpd_file2_dot_self(&G1); dpd_file2_close(&G1); dpd_file2_init(&G1, CC_OEI, G_irr, 0, 1, "Dia"); dot_ia = dpd_file2_dot_self(&G1); dpd_file2_close(&G1); dpd_file2_init(&G1, CC_OEI, G_irr, 0, 1, "DAI"); dot_AI = dpd_file2_dot_self(&G1); dpd_file2_close(&G1); dpd_file2_init(&G1, CC_OEI, G_irr, 0, 1, "Dai"); dot_ai = dpd_file2_dot_self(&G1); dpd_file2_close(&G1); /* fprintf(outfile,"<DIA|DIA> = %15.10lf\n", dot_IA); fprintf(outfile,"<Dia|Dia> = %15.10lf\n", dot_ia); fprintf(outfile,"<DAI|DAI> = %15.10lf\n", dot_AI); fprintf(outfile,"<Dai|Dai> = %15.10lf\n", dot_ai); */ fprintf(outfile,"\t<Dpq|Dqp> = %15.10lf\n", dot_IA+dot_ia+dot_AI+dot_ai); fprintf(outfile,"Calculating overlaps of CC_GAMMA\n"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "Gijkl"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gijkl|Gijkl> = %15.10lf\n", value); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "GIJKA"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "Gijka"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GIjKa"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GiJkA"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gijka|Gijka> = %15.10lf\n",value); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gijab|Gijab> = %15.10lf\n", value); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIBJA"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "Gibja"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbJa"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBjA"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbjA"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBJa"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gibja|Gibja> = %15.10lf\n",value); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "GCIAB"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "Gciab"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GCiAb"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GcIaB"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gciab|Gciab> = %15.10lf\n",value); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); value = dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "Gabcd"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); value += dpd_buf4_dot_self(&G); dpd_buf4_close(&G); fprintf(outfile,"\t<Gabcd|Gabcd> = %15.10lf\n", value); return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gabcd.cc���������������������������������������������������������������������0000644�0001015�0000765�00000005621�11027011315�015027� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gabcd(void) { dpdbuf4 G, L, T; int G_irr; G_irr = params.G_irr; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&G, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_init(&L, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); if (params.ground) dpd_buf4_symm(&G); dpd_buf4_close(&G); } else if(params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); if (params.ground) dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "Gabcd"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); if (params.ground) dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_init(&L, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); if (params.ground) dpd_buf4_symm(&G); dpd_buf4_close(&G); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 17, 17, 17, 17, 0, "Gabcd"); dpd_buf4_init(&L, CC_GLG, G_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_init(&L, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&L, &T, &G, 1, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_symm(&G); dpd_buf4_close(&G); } } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gciab.cc���������������������������������������������������������������������0000644�0001015�0000765�00000107353�11027503542�015051� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gciab(void) { int h, nirreps, a, b, c, i, A, B, C, I, Asym, Bsym, Csym, Isym, row, col; double value; dpdfile2 L1, T1, g; dpdbuf4 G, L, T, Z, Z1, Z2, V; double factor=0.0; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); /* t(M,C) L(Mi,Ab) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(M,C) Tau(Mi,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(i,e) L(Mn,Ce) --> Z(Mn,Ci) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(Mn,Ci)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(Mn,Ci) Tau(Mn,Ab) --> G(Ci,Ab) */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(iA,mC) T(m,b) --> Z(iA,bC) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(iA,bC)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(iC,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(iC,bA)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 11, 5, "Z(Ci,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 11, 5, 11, 5, 0, "Z(Ci,bA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* V(ib,MC) T(M,A) --> Z(ib,AC) */ dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(ib,AC)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 5, "Z(iC,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(iC,Ab)"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* Z1(Ci,AB) + Z1(Ci,AB) --> G(Ci,AB) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(Ci,Ab)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(Ci,Ab)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* g(C,A) T(i,b) --> G(Ci,Ab) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); /* t(M,C) L(MI,AB) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(M,C) Tau(MI,AB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(I,E) L(MN,CE) --> Z(MN,CI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z(MN,CI)"); dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(MN,CI) Tau(MN,AB) --> G(CI,AB) */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(IA,MC) T(M,B) --> Z(IA,BC) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(IC,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(IC,BA)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 11, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 11, 5, 11, 5, 0, "Z(CI,BA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(CI,AB)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &Z1, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( g(C,A) T(I,B) - g(C,B) T(I,A) ) --> G(CI,AB) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; B = g.params->colidx[b]; A = T1.params->colidx[a]; Bsym = g.params->qsym[b]; Asym = T1.params->qsym[a]; if((Csym==Bsym) && (Isym==Asym)) value -= g.matrix[Csym][C][B] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); /* t(m,c) L(mi,ab) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(m,c) Tau(mi,ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(i,e) L(mn,ce) --> Z(mn,ci) */ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z(mn,ci)"); dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(mn,ci) Tau(mn,ab) --> G(ci,ab) */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(ia,mc) T(m,b) --> Z(ia,bc) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(ia,bc)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(ic,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(ic,ba)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 11, 5, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 11, 5, 11, 5, 0, "Z(ci,ba)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(ci,ab)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &Z1, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( g(c,a) T(i,b) - g(c,b) T(i,a) ) --> G(ci,ab) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "Gae"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; B = g.params->colidx[b]; A = T1.params->colidx[a]; Bsym = g.params->qsym[b]; Asym = T1.params->qsym[a]; if((Csym==Bsym) && (Isym==Asym)) value -= g.matrix[Csym][C][B] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); /* t(M,C) L(Mi,Ab) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(M,C) Tau(Mi,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(i,e) L(Mn,Ce) --> Z(Mn,Ci) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(Mn,Ci)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(Mn,Ci) Tau(Mn,Ab) --> G(Ci,Ab) */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(iA,mC) T(m,b) --> Z(iA,bC) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(iA,bC)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(iC,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(iC,bA)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 11, 5, "Z(Ci,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 11, 5, 11, 5, 0, "Z(Ci,bA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* V(ib,MC) T(M,A) --> Z(ib,AC) */ dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(ib,AC)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 5, "Z(iC,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(iC,Ab)"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* Z1(Ci,AB) + Z1(Ci,AB) --> G(Ci,AB) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(Ci,Ab)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(Ci,Ab)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* g(C,A) T(i,b) --> G(Ci,Ab) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); /* t(m,c) L(mI,aB) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(m,c) Tau(mI,aB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(I,E) L(mN,cE) --> Z(mN,cI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(mN,cI)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(mN,cI) Tau(mN,aB) --> G(cI,aB) */ dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(Ia,Mc) T(M,B) --> Z(Ia,Bc) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(Ia,Bc)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(Ic,Ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(Ic,Ba)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 11, 5, "Z(cI,Ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 11, 5, 11, 5, 0, "Z(cI,Ba)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(cI,aB)"); dpd_buf4_close(&Z); /* V(IB,mc) T(m,a) --> Z(IB,ac) */ dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(IB,ac)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 5, "Z(Ic,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(Ic,aB)"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(cI,aB)"); dpd_buf4_close(&Z); /* Z1(cI,aB) + Z2(cI,aB) --> G(cI,aB) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(cI,aB)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(cI,aB)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* g(c,a) T(I,B) --> G(cI,aB) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "Gae"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } else if(params.ref == 2) { /** UHF **/ if(!strcmp(params.wfn,"CCSD_T") && params.dertype==1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ dpd_buf4_init(&G, CC_GAMMA, 0, 20, 7, 20, 7, 0, "GIDAB"); dpd_buf4_sort(&G, CC_GAMMA, qprs, 21, 7, "GCIAB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 17, 30, 17, 0, "Gidab"); dpd_buf4_sort(&G, CC_GAMMA, qprs, 31, 17, "Gciab"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 28, 24, 28, 0, "GIdAb"); dpd_buf4_sort(&G, CC_GAMMA, qpsr, 25, 29, "GcIaB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 29, 27, 29, 0, "GiDaB"); dpd_buf4_sort(&G, CC_GAMMA, qpsr, 26, 28, "GCiAb"); dpd_buf4_close(&G); factor = 1.0; } dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); /* t(M,C) L(MI,AB) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, factor); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(M,C) Tau(MI,AB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(I,E) L(MN,CE) --> Z(MN,CI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 21, 2, 21, 0, "Z(MN,CI)"); dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(MN,CI) Tau(MN,AB) --> G(CI,AB) */ dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(IA,MC) T(M,B) --> Z(IA,BC) */ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 5, 20, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 20, 5, "Z(IC,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 20, 5, 20, 5, 0, "Z(IC,BA)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 21, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 21, 5, 21, 5, 0, "Z(CI,BA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 21, 5, "Z(CI,AB)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 21, 5, 21, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &Z1, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( g(C,A) T(I,B) - g(C,B) T(I,A) ) --> G(CI,AB) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; B = g.params->colidx[b]; A = T1.params->colidx[a]; Bsym = g.params->qsym[b]; Asym = T1.params->qsym[a]; if((Csym==Bsym) && (Isym==Asym)) value -= g.matrix[Csym][C][B] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); /* t(m,c) L(mi,ab) */ dpd_buf4_init(&L, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, factor); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(m,c) Tau(mi,ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tauijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(i,e) L(mn,ce) --> Z(mn,ci) */ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 31, 12, 31, 0, "Z(mn,ci)"); dpd_buf4_init(&L, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(mn,ci) Tau(mn,ab) --> G(ci,ab) */ dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(ia,mc) T(m,b) --> Z(ia,bc) */ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 15, 30, 15, 0, "Z(ia,bc)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 30, 15, "Z(ic,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 30, 15, 30, 15, 0, "Z(ic,ba)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 31, 15, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 31, 15, 31, 15, 0, "Z(ci,ba)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 31, 15, "Z(ci,ab)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 31, 15, 31, 15, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &Z1, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( g(c,a) T(i,b) - g(c,b) T(i,a) ) --> G(ci,ab) */ dpd_file2_init(&g, CC_GLG, 0, 3, 3, "Gae"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; B = g.params->colidx[b]; A = T1.params->colidx[a]; Bsym = g.params->qsym[b]; Asym = T1.params->qsym[a]; if((Csym==Bsym) && (Isym==Asym)) value -= g.matrix[Csym][C][B] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); /* t(M,C) L(Mi,Ab) */ dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, factor); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(M,C) Tau(Mi,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(i,e) L(Mn,Ce) --> Z(Mn,Ci) */ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z(Mn,Ci)"); dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(Mn,Ci) Tau(Mn,Ab) --> G(Ci,Ab) */ dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(iA,mC) T(m,b) --> Z(iA,bC) */ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 29, 27, 29, 0, "Z(iA,bC)"); dpd_buf4_init(&V, CC_MISC, 0, 27, 27, 27, 27, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 27, 29, "Z(iC,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 27, 29, 27, 29, 0, "Z(iC,bA)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 26, 29, "Z(Ci,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 26, 29, 26, 29, 0, "Z(Ci,bA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 26, 28, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* V(ib,MC) T(M,A) --> Z(ib,AC) */ dpd_buf4_init(&Z, CC_TMP1, 0, 30, 5, 30, 5, 0, "Z(ib,AC)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 20, 30, 20, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, psrq, 27, 28, "Z(iC,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 27, 28, 27, 28, 0, "Z(iC,Ab)"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 26, 28, "Z(Ci,Ab)"); dpd_buf4_close(&Z); /* Z1(Ci,AB) + Z1(Ci,AB) --> G(Ci,AB) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 28, 26, 28, 0, "Z(Ci,Ab)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 26, 28, 26, 28, 0, "Z(Ci,Ab)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* g(C,A) T(i,b) --> G(Ci,Ab) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); /* t(m,c) L(mI,aB) */ dpd_buf4_init(&L, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &L, &G, 0, 0, 0, 1.0, factor); dpd_file2_close(&T1); dpd_buf4_close(&L); /* l(m,c) Tau(mI,aB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract244(&L1, &T, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T); dpd_buf4_close(&G); /* t(I,E) L(mN,cE) --> Z(mN,cI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 25, 23, 25, 0, "Z(mN,cI)"); dpd_buf4_init(&L, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* -Z(mN,cI) Tau(mN,aB) --> G(cI,aB) */ dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_contract444(&Z, &T, &G, 1, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - V(Ia,Mc) T(M,B) --> Z(Ia,Bc) */ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 28, 24, 28, 0, "Z(Ia,Bc)"); dpd_buf4_init(&V, CC_MISC, 0, 24, 24, 24, 24, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, psrq, 24, 28, "Z(Ic,Ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 24, 28, 24, 28, 0, "Z(Ic,Ba)"); dpd_buf4_sort(&Z, CC_TMP2, qprs, 25, 28, "Z(cI,Ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 25, 28, 25, 28, 0, "Z(cI,Ba)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 25, 29, "Z(cI,aB)"); dpd_buf4_close(&Z); /* V(IB,mc) T(m,a) --> Z(IB,ac) */ dpd_buf4_init(&Z, CC_TMP1, 0, 20, 15, 20, 15, 0, "Z(IB,ac)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 30, 20, 30, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, psrq, 24, 29, "Z(Ic,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, 0, 24, 29, 24, 29, 0, "Z(Ic,aB)"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 25, 29, "Z(cI,aB)"); dpd_buf4_close(&Z); /* Z1(cI,aB) + Z2(cI,aB) --> G(cI,aB) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 25, 29, 25, 29, 0, "Z(cI,aB)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 25, 29, 25, 29, 0, "Z(cI,aB)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* g(c,a) T(I,B) --> G(cI,aB) */ dpd_file2_init(&g, CC_GLG, 0, 3, 3, "Gae"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; C = g.params->rowidx[c]; I = T1.params->rowidx[i]; Csym = g.params->psym[c]; Isym = T1.params->psym[i]; A = g.params->colidx[a]; B = T1.params->colidx[b]; Asym = g.params->qsym[a]; Bsym = T1.params->qsym[b]; if((Csym==Asym) && (Isym==Bsym)) value += g.matrix[Csym][C][A] * T1.matrix[Isym][I][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/get_frozen.cc����������������������������������������������������������������0000644�0001015�0000765�00000006430�10757640026�016210� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ** get_frozen(): Routine to get symmetry and orbital reordering arrays ** which include frozen orbitals. ** ** TDC, March 2000. */ void get_frozen(void) { int i, nfzc; frozen.nfzc = moinfo.nfzc; frozen.nfzv = moinfo.nfzv; nfzc = moinfo.nfzc; /* Get full orbital list occpi and virtpi arrays */ frozen.occpi = init_int_array(moinfo.nirreps); frozen.virtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "All Occ Orbs Per Irrep", (char *) frozen.occpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "All Virt Orbs Per Irrep", (char *) frozen.virtpi, sizeof(int)*moinfo.nirreps); /* Get CC->QT and QT->CC full occupied and virtual reordering arrays */ frozen.qt_occ = init_int_array(moinfo.nmo); frozen.qt_vir = init_int_array(moinfo.nmo); frozen.allcc_occ = init_int_array(moinfo.nmo); frozen.allcc_vir = init_int_array(moinfo.nmo); psio_read_entry(CC_INFO, "CC->QT All Occ Order", (char *) frozen.qt_occ, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "CC->QT All Virt Order", (char *) frozen.qt_vir, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "QT->CC All Occ Order", (char *) frozen.allcc_occ, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "QT->CC All Virt Order", (char *) frozen.allcc_vir, sizeof(int)*moinfo.nmo); /* Build active-only cc_occ and cc_vir, inserting -1s for frozen orbitals */ /* This is used in resort_gamma */ frozen.cc_occ = init_int_array(moinfo.nmo); frozen.cc_vir = init_int_array(moinfo.nmo); for(i=0; i < moinfo.nmo; i++) { frozen.cc_occ[i] = -1; frozen.cc_vir[i] = -1; } for(i=0; i < moinfo.nactive; i++) { frozen.cc_occ[i+nfzc] = moinfo.cc_occ[i]; frozen.cc_vir[i+nfzc] = moinfo.cc_vir[i]; } /* Get full orbital list symmetry arrays */ frozen.occ_sym = init_int_array(moinfo.nmo); frozen.vir_sym = init_int_array(moinfo.nmo); psio_read_entry(CC_INFO, "All Occ Orb Symmetry", (char *) frozen.occ_sym, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "All Virt Orb Symmetry", (char *) frozen.vir_sym, sizeof(int)*moinfo.nmo); /* Get full orbtial list offset arrays for occupied and virtual */ frozen.occ_off = init_int_array(moinfo.nirreps); frozen.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "All Occ Orb Offsets", (char *) frozen.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "All Virt Orb Offsets", (char *) frozen.vir_off, sizeof(int)*moinfo.nirreps); /* Get boolean arrays for orbital classification routines */ frozen.occ = init_int_array(moinfo.nmo); frozen.vir = init_int_array(moinfo.nmo); frozen.socc = init_int_array(moinfo.nmo); psio_read_entry(CC_INFO, "All Occ Orbital Boolean", (char *) frozen.occ, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "All Virt Orbital Boolean", (char *) frozen.vir, sizeof(int)*moinfo.nmo); psio_read_entry(CC_INFO, "All Socc Orbital Boolean", (char *) frozen.socc, sizeof(int)*moinfo.nmo); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/get_moinfo.cc����������������������������������������������������������������0000644�0001015�0000765�00000025102�11027011315�016151� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <string.h> #include <string.h> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996. ** Modified by TDC, March 1999. */ void get_moinfo(void) { int i, j, h, errcod; int nactive; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); chkpt_close(); moinfo.sym = 0; for (i=0;i<moinfo.nirreps;++i) for (j=0;j<moinfo.openpi[i];++j) moinfo.sym = moinfo.sym ^ i; /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(moinfo.nirreps); moinfo.fruocc = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); moinfo.nactive = nactive; if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ moinfo.occpi = init_int_array(moinfo.nirreps); moinfo.virtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*moinfo.nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } else if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(moinfo.nirreps); moinfo.boccpi = init_int_array(moinfo.nirreps); moinfo.avirtpi = init_int_array(moinfo.nirreps); moinfo.bvirtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < moinfo.nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < moinfo.nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; moinfo.nfzc = moinfo.nfzv = moinfo.nclsd = moinfo.nopen = moinfo.nuocc = 0; for(h=0; h < moinfo.nirreps; h++) { moinfo.nfzc += moinfo.frdocc[h]; moinfo.nfzv += moinfo.fruocc[h]; moinfo.nclsd += moinfo.clsdpi[h]; moinfo.nopen += moinfo.openpi[h]; moinfo.nuocc += moinfo.uoccpi[h]; } if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ /* Get CC->QT and QT->CC active occupied and virtual reordering arrays */ moinfo.qt_occ = init_int_array(nactive); moinfo.qt_vir = init_int_array(nactive); moinfo.cc_occ = init_int_array(nactive); moinfo.cc_vir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Active Occ Order", (char *) moinfo.qt_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Active Virt Order", (char *) moinfo.qt_vir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Active Occ Order", (char *) moinfo.cc_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Active Virt Order", (char *) moinfo.cc_vir, sizeof(int)*nactive); } else if(params.ref == 2) { /** UHF **/ /* Get CC->QT and QT->CC active occupied and virtual reordering arrays */ moinfo.qt_aocc = init_int_array(nactive); moinfo.qt_bocc = init_int_array(nactive); moinfo.qt_avir = init_int_array(nactive); moinfo.qt_bvir = init_int_array(nactive); moinfo.cc_aocc = init_int_array(nactive); moinfo.cc_bocc = init_int_array(nactive); moinfo.cc_avir = init_int_array(nactive); moinfo.cc_bvir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Occ Order", (char *) moinfo.qt_aocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Occ Order", (char *) moinfo.qt_bocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Virt Order", (char *) moinfo.qt_avir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Virt Order", (char *) moinfo.qt_bvir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Alpha Active Occ Order", (char *) moinfo.cc_aocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Beta Active Occ Order", (char *) moinfo.cc_bocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Alpha Active Virt Order", (char *) moinfo.cc_avir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Beta Active Virt Order", (char *) moinfo.cc_bvir, sizeof(int)*nactive); } psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n",moinfo.eref); if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { psio_read_entry(CC_INFO, "CC2 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCC2 energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CC2 energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } else if(!strcmp(params.wfn,"CCSD") || !strcmp(params.wfn,"EOM_CCSD")) { psio_read_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCCSD energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CCSD energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } else if(!strcmp(params.wfn,"CCSD_T")) { psio_read_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); psio_read_entry(CC_INFO, "(T) Energy", (char *) &(moinfo.et), sizeof(double)); fprintf(outfile, "\tCCSD energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\t(T) energy (CC_INFO) = %20.15f\n",moinfo.et); fprintf(outfile, "\tTotal CCSD(T) energy(CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc+moinfo.et); } else if(!strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3")) { psio_read_entry(CC_INFO, "CC3 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCC3 energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CC3 energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } fflush(outfile); } /* Frees memory allocated in get_moinfo(). */ void cleanup(void) { int i; free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.qt_occ); free(moinfo.qt_vir); free(moinfo.cc_occ); free(moinfo.cc_vir); } else if(params.ref == 2) { /** UHF **/ free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.qt_aocc); free(moinfo.qt_bocc); free(moinfo.qt_avir); free(moinfo.qt_bvir); free(moinfo.cc_aocc); free(moinfo.cc_bocc); free(moinfo.cc_avir); free(moinfo.cc_bvir); } } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/get_params.cc����������������������������������������������������������������0000644�0001015�0000765�00000010421�11027011315�016143� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void get_params() { int errcod, tol; char *junk; errcod = ip_string("WFN", &(params.wfn), 0); errcod = ip_string("REFERENCE", &(junk),0); if (errcod != IPE_OK) /* if no reference is given, assume rhf */ params.ref = 0; else { if(!strcmp(junk, "RHF")) params.ref = 0; else if(!strcmp(junk, "ROHF")) params.ref = 1; else if(!strcmp(junk, "UHF")) params.ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* For EOM-CCSD Zeta calcs to use ROHF refs for now */ if(!strcmp(params.wfn,"EOM_CCSD") && params.ref==0 && params.use_zeta) params.ref = 1; params.tolerance = 1e-14; errcod = ip_data("TOLERANCE","%d",&(tol),0); if(errcod == IPE_OK) params.tolerance = 1.0*pow(10.0,(double) -tol); fndcor(&(params.memory),infile,outfile); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.aobasis = 0; errcod = ip_boolean("AO_BASIS", &(params.aobasis),0); params.ael = 0; errcod = ip_boolean("AEL", &(params.ael),0); if(ip_exist("GAUGE",0)) { ip_string("GAUGE",&(params.gauge), 0); if(strcmp(params.gauge,"LENGTH") && strcmp(params.gauge,"VELOCITY")) { printf("Invalid choice of gauge: %s\n", params.gauge); exit(PSI_RETURN_FAILURE); } } else params.gauge = strdup("LENGTH"); /*** determine DERTYPE from input */ params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } else { /* infer DERTYPE from JOBTYPE */ errcod = ip_string("JOBTYPE", &(junk),0); if ( !strcmp(junk,"SP") ) params.dertype = 0; else if ( !strcmp(junk, "OEPROP") ) params.dertype = 0; else if ( !strcmp(junk, "OPT") ) params.dertype = 1; else { printf("Not sure what to do with missing DERTYPE and this JOBTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } if ( (params.dertype == 1) || (!strcmp(params.wfn, "CCSD_MVD")) ) params.relax_opdm = 1; /* default for gradients, or MVD correction */ else params.relax_opdm = 0; /* otherwise, default is relax_opdm off */ if(params.transition) params.relax_opdm = 0; errcod = ip_boolean("RELAX_OPDM", &(params.relax_opdm),0); if ( (params.onepdm) && (params.relax_opdm) ) { /* can't do relaxation without twopdm */ fprintf(outfile,"\tTurning orbital relaxation off since only onepdm is requested.\n"); params.relax_opdm = 0; } if ( (!strcmp(params.wfn,"EOM_CCSD")) && (params.dertype == 0) ) params.connect_xi = 0; else params.connect_xi = 1; errcod = ip_boolean("CONNECT_XI",&(params.connect_xi),0); fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tWave function = %6s\n", params.wfn); fprintf(outfile, "\tReference wfn = %5s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); fprintf(outfile, "\tTolerance = %3.1e\n", params.tolerance); fprintf(outfile, "\tCache Level = %1d\n", params.cachelev); fprintf(outfile, "\tAO Basis = %s\n", params.aobasis ? "Yes" : "No"); fprintf(outfile, "\tOPDM Only = %s\n", params.onepdm ? "Yes" : "No"); fprintf(outfile, "\tRelax OPDM = %s\n", params.relax_opdm ? "Yes" : "No"); fprintf(outfile, "\tCompute Xi = %s\n", (params.calc_xi) ? "Yes" : "No"); fprintf(outfile, "\tUse Zeta = %s\n", (params.use_zeta) ? "Yes" : "No"); fprintf(outfile, "\tXi connected = %s\n", (params.connect_xi) ? "Yes" : "No"); fflush(outfile); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/get_rho_params.cc������������������������������������������������������������0000644�0001015�0000765�00000022676�10757640026�017052� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <libchkpt/chkpt.h> #include <libipv1/ip_lib.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void get_rho_params(void) { int i,j,k,l,prop_sym,prop_root, lambda_and_Ls=0, errcod, prop_all,cnt; char lbl[32]; int *states_per_irrep; /* check WFN keyword in input */ errcod = ip_string("WFN", &(params.wfn), 0); if ( !cc_excited(params.wfn) ) params.ground = 1; else params.ground = 0; /* setup propery variables for excited states */ if (!params.ground) { chkpt_init(PSIO_OPEN_OLD); if (chkpt_rd_override_occ()) { states_per_irrep = chkpt_rd_statespi(); } else { ip_count("STATES_PER_IRREP", &i, 0); states_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int)); for (i=0;i<moinfo.nirreps;++i) errcod = ip_data("STATES_PER_IRREP","%d",&(states_per_irrep[i]),1,i); } chkpt_close(); prop_all = 0; if (ip_exist("PROP_ALL",0)) ip_boolean("PROP_ALL",&prop_all,0); /* can also be turned on by command-line (at least for now) */ if (params.prop_all) prop_all = 1; if (params.dertype == 1) prop_all = 0; /* don't do relaxed, multiple excited states */ params.prop_all = prop_all; if (ip_exist("PROP_SYM",0)) { /* read symmetry of state for properties */ ip_data("PROP_SYM","%d",&(prop_sym),0); prop_sym -= 1; prop_sym = moinfo.sym^prop_sym; } else { /* just use last irrep of states requested for symmetry of states */ for (i=0;i<moinfo.nirreps;++i) { if (states_per_irrep[i] > 0) prop_sym = i^moinfo.sym; } } if (ip_exist("PROP_ROOT",0)) { /* read prop_root */ ip_data("PROP_ROOT","%d",&(prop_root),0); prop_root -= 1; } else { /* just use highest root, if you need only one of them */ prop_root = states_per_irrep[prop_sym^moinfo.sym]; prop_root -= 1; } } /* setup density parameters */ if (params.ground) { /* just compute ground state density */ params.nstates = 1; rho_params = (struct RHO_Params *) malloc(params.nstates * sizeof(struct RHO_Params)); rho_params[0].L_irr = 0; rho_params[0].R_irr = 0; rho_params[0].L_root = -1; rho_params[0].R_root = -1; rho_params[0].L_ground = 1; rho_params[0].R_ground = 1; rho_params[0].R0 = 1; rho_params[0].L0 = 0; rho_params[0].cceom_energy = 0; } else if (params.calc_xi) { /* just compute Xi for excited-state density */ params.nstates = 1; rho_params = (struct RHO_Params *) malloc(params.nstates * sizeof(struct RHO_Params)); rho_params[0].L_irr = prop_sym; rho_params[0].R_irr = prop_sym; rho_params[0].L_root = prop_root; rho_params[0].R_root = prop_root; rho_params[0].L_ground = 0; rho_params[0].R_ground = 0; } else { /* excited state density(ies) are involved */ if (params.prop_all) { /* do all roots */ params.nstates = 1; for(i=0; i<moinfo.nirreps; i++) { // cnt = 0; // ip_data("STATES_PER_IRREP","%d",&cnt, 1, i); params.nstates += states_per_irrep[i]; } rho_params = (struct RHO_Params *) malloc(params.nstates * sizeof(struct RHO_Params)); rho_params[0].L_irr = 0; rho_params[0].R_irr = 0; rho_params[0].L_root = -1; rho_params[0].R_root = -1; rho_params[0].L_ground = 1; rho_params[0].R_ground = 1; cnt = 0; for(i=0; i<moinfo.nirreps; i++) { /* loop over irrep of R */ // ip_data("STATES_PER_IRREP","%d",&j, 1, i); // for (k=0; k<j; ++k) { for (k=0; k<states_per_irrep[i]; ++k) { ++cnt; rho_params[cnt].L_irr = i^moinfo.sym; rho_params[cnt].R_irr = i^moinfo.sym; rho_params[cnt].L_root = k; rho_params[cnt].R_root = k; rho_params[cnt].L_ground = 0; rho_params[cnt].R_ground = 0; } } } else { /* do only one root */ params.nstates = 1; rho_params = (struct RHO_Params *) malloc(params.nstates * sizeof(struct RHO_Params)); rho_params[0].L_irr = prop_sym; rho_params[0].R_irr = prop_sym; rho_params[0].L_root = prop_root; rho_params[0].R_root = prop_root; rho_params[0].L_ground = 0; rho_params[0].R_ground = 0; } if(params.onepdm) params.transition = 1; } /* for each state, determine G_irr, cceom_energy, R0, and labels for files */ for(i=0; i<params.nstates; i++) { rho_params[i].G_irr = (rho_params[i].L_irr) ^ (rho_params[i].R_irr); if (rho_params[i].R_ground) { rho_params[i].cceom_energy = 0.0; rho_params[i].R0 = 1.0; } else { if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d",rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d",rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d",rho_params[i].R_irr, rho_params[i].R_root); psio_read_entry(CC_INFO,lbl,(char*)&(rho_params[i].R0),sizeof(double)); } } if (rho_params[i].L_ground) rho_params[i].L0 = 1.0; else rho_params[i].L0 = 0.0; sprintf(rho_params[i].R1A_lbl, "RIA %d %d", rho_params[i].R_irr, rho_params[i].R_root); sprintf(rho_params[i].R1B_lbl, "Ria %d %d", rho_params[i].R_irr, rho_params[i].R_root); sprintf(rho_params[i].R2AA_lbl,"RIJAB %d %d",rho_params[i].R_irr, rho_params[i].R_root); sprintf(rho_params[i].R2BB_lbl,"Rijab %d %d",rho_params[i].R_irr, rho_params[i].R_root); sprintf(rho_params[i].R2AB_lbl,"RIjAb %d %d",rho_params[i].R_irr, rho_params[i].R_root); sprintf(rho_params[i].L1A_lbl, "LIA %d %d", rho_params[i].L_irr, rho_params[i].L_root); sprintf(rho_params[i].L1B_lbl, "Lia %d %d", rho_params[i].L_irr, rho_params[i].L_root); sprintf(rho_params[i].L2AA_lbl,"LIJAB %d %d",rho_params[i].L_irr, rho_params[i].L_root); sprintf(rho_params[i].L2BB_lbl,"Lijab %d %d",rho_params[i].L_irr, rho_params[i].L_root); sprintf(rho_params[i].L2AB_lbl,"LIjAb %d %d",rho_params[i].L_irr, rho_params[i].L_root); sprintf(rho_params[i].DIJ_lbl, "DIJ %d", i-1); /* change to a different label ? */ sprintf(rho_params[i].Dij_lbl, "Dij %d", i-1); sprintf(rho_params[i].DAB_lbl, "DAB %d", i-1); sprintf(rho_params[i].Dab_lbl, "Dab %d", i-1); sprintf(rho_params[i].DAI_lbl, "DAI %d", i-1); sprintf(rho_params[i].Dai_lbl, "Dai %d", i-1); sprintf(rho_params[i].DIA_lbl, "DIA %d", i-1); sprintf(rho_params[i].Dia_lbl, "Dia %d", i-1); if (params.ref == 0) { if (i == 0) sprintf(rho_params[i].opdm_lbl, "MO-basis OPDM"); else sprintf(rho_params[i].opdm_lbl, "MO-basis OPDM Root %d", i); } else if (params.ref == 1) { /* ROHF */ if (i == 0) sprintf(rho_params[i].opdm_lbl, "MO-basis OPDM"); else sprintf(rho_params[i].opdm_lbl, "MO-basis OPDM Root %d", i); } else if (params.ref == 2) { /* UHF */ if (i == 0) { sprintf(rho_params[i].opdm_a_lbl, "MO-basis Alpha OPDM"); sprintf(rho_params[i].opdm_b_lbl, "MO-basis Beta OPDM"); } else { sprintf(rho_params[i].opdm_a_lbl, "MO-basis Alpha OPDM Root %d", i); sprintf(rho_params[i].opdm_b_lbl, "MO-basis Beta OPDM Root %d", i); } } } psio_write_entry(CC_INFO, "Num. of CC densities", (char *) &(params.nstates), sizeof(int)); fprintf(outfile,"\tNumber of States = %-d\n",params.nstates); /* fprintf(outfile,"\n\tGround? L_root L_irr R_root R_irr G_irr EOM Energy R0\n"); for(i=0; i<params.nstates; i++) { fprintf(outfile,"\t%5s %6d %7s %4d %7s %4s %15.10lf %12.8lf\n", (rho_params[i].R_ground ? "Yes":"No"), rho_params[i].L_root+1, moinfo.labels[rho_params[i].L_irr], rho_params[i].R_root+1, moinfo.labels[rho_params[i].R_irr], moinfo.labels[rho_params[i].G_irr], rho_params[i].cceom_energy, rho_params[i].R0); } */ fprintf(outfile,"\n\tGround? State EOM Energy R0\n"); for(i=0; i<params.nstates; i++) { fprintf(outfile,"\t%5s %d%3s %15.10lf %12.8lf\n", (rho_params[i].R_ground ? "Yes":"No"), rho_params[i].L_root+1, moinfo.labels[rho_params[i].L_irr], rho_params[i].cceom_energy, rho_params[i].R0); } /* set variables for xi and twopdm code in the old non-state specific structure */ params.G_irr = rho_params[0].G_irr; params.R_irr = rho_params[0].R_irr; params.L_irr = rho_params[0].L_irr; params.R0 = rho_params[0].R0; params.L0 = rho_params[0].L0; params.cceom_energy = rho_params[0].cceom_energy; return; } }} // namespace psi::ccdensity ������������������������������������������������������������������psi3/src/bin/ccdensity/get_td_params.cc�������������������������������������������������������������0000644�0001015�0000765�00000013712�10757640026�016660� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <libipv1/ip_lib.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void get_td_params(void) { int i,j,k,l; char lbl[32]; params.nstates = 0; if(ip_exist("PROP_SYM",0) && ip_exist("PROP_ROOT",0)) { ip_data("PROP_SYM","%d",&(params.prop_sym),0); ip_data("PROP_ROOT","%d",&(params.prop_root),0); /*User input counts from 1*/ params.prop_sym -= 1; params.prop_root -= 1; params.nstates = 1; } else if(ip_exist("STATES_PER_IRREP",0)) { ip_count("STATES_PER_IRREP", &i, 0); if(i != moinfo.nirreps) { fprintf(outfile,"Dim. of states_per_irrep vector must be %d\n", moinfo.nirreps) ; exit(0); } for(i=0;i<moinfo.nirreps;++i) { ip_data("STATES_PER_IRREP","%d",&j,1,i); params.nstates += j; } } else { fprintf(outfile,"\nUse STATES_PER_IRREP or PROP_SYM and PROP_ROOT\n"); exit(0); } /* fprintf(outfile,"\tNumber of States = %d\n",params.nstates); fflush(outfile); */ td_params = (struct TD_Params *)malloc(params.nstates*sizeof(struct TD_Params)); l=0; if(ip_exist("PROP_SYM",0) && ip_exist("PROP_ROOT",0)) { td_params[0].irrep = params.prop_sym ^ moinfo.sym; k = td_params[0].root = params.prop_root; if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d",td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].R0),sizeof(double)); } else if(!strcmp(params.wfn,"CCSD") || !strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d",td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].R0),sizeof(double)); } else if(!strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d",td_params[0].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[0].R0),sizeof(double)); } sprintf(td_params[l].L1A_lbl,"LIA %d %d",td_params[0].irrep, k); sprintf(td_params[l].L1B_lbl,"Lia %d %d",td_params[0].irrep, k); sprintf(td_params[l].L2AA_lbl,"LIJAB %d %d",td_params[0].irrep, k); sprintf(td_params[l].L2BB_lbl,"Lijab %d %d",td_params[0].irrep, k); sprintf(td_params[l].L2AB_lbl,"LIjAb %d %d",td_params[0].irrep, k); sprintf(td_params[l].R1A_lbl,"RIA %d %d",td_params[0].irrep, k); sprintf(td_params[l].R1B_lbl,"Ria %d %d",td_params[0].irrep, k); sprintf(td_params[l].R2AA_lbl,"RIJAB %d %d",td_params[0].irrep, k); sprintf(td_params[l].R2BB_lbl,"Rijab %d %d",td_params[0].irrep, k); sprintf(td_params[l].R2AB_lbl,"RIjAb %d %d",td_params[0].irrep, k); } else if(ip_exist("STATES_PER_IRREP",0)) { for(i=0;i<moinfo.nirreps;++i) { ip_data("STATES_PER_IRREP","%d",&j,1,i); for (k=0;k<j;++k) { td_params[l].irrep = i^moinfo.sym; td_params[l].root = k; if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d",td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].R0),sizeof(double)); } else if(!strcmp(params.wfn,"CCSD") || !strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d",td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].R0),sizeof(double)); } else if(!strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].cceom_energy), sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d",td_params[l].irrep, k); psio_read_entry(CC_INFO,lbl,(char*)&(td_params[l].R0),sizeof(double)); } sprintf(td_params[l].L1A_lbl,"LIA %d %d",td_params[l].irrep, k); sprintf(td_params[l].L1B_lbl,"Lia %d %d",td_params[l].irrep, k); sprintf(td_params[l].L2AA_lbl,"LIJAB %d %d",td_params[l].irrep, k); sprintf(td_params[l].L2BB_lbl,"Lijab %d %d",td_params[l].irrep, k); sprintf(td_params[l].L2AB_lbl,"LIjAb %d %d",td_params[l].irrep, k); sprintf(td_params[l].R1A_lbl,"RIA %d %d",td_params[l].irrep, k); sprintf(td_params[l].R1B_lbl,"Ria %d %d",td_params[l].irrep, k); sprintf(td_params[l].R2AA_lbl,"RIJAB %d %d",td_params[l].irrep, k); sprintf(td_params[l].R2BB_lbl,"Rijab %d %d",td_params[l].irrep, k); sprintf(td_params[l].R2AB_lbl,"RIjAb %d %d",td_params[l].irrep, k); l++; } } } /* fprintf(outfile,"\n\tState\t EOM Energy\t R0\n"); for(i=0; i<params.nstates; i++) { fprintf(outfile,"\t %d%3s %15.10lf %12.8lf\n", td_params[i].root+1,moinfo.labels[td_params[i].irrep], td_params[i].cceom_energy,td_params[i].R0); } */ return; } }} // namespace psi::ccdensity ������������������������������������������������������psi3/src/bin/ccdensity/Gibja.cc���������������������������������������������������������������������0000644�0001015�0000765�00000063601�10757640026�015065� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ** Gibja(): Constructs the ibja block of the two-electron density ** matrix, defined based on the energy contribution: ** ** E(TWO) <-- sum_ibja G(ib,ja) <ja||ib> ** ** or by spin-case: ** ** E(AA) <-- G(IB,JA) <JA||IB> ** E(BB) <-- G(ib,ja) <ja||ib> ** E(AB) <-- G(Ib,Ja) <Ja|Ib> + G(iB,jA) <jA|iB> - G(Ib,jA) <jA|bI> - G(iB,Ja) <Ja|Bi> ** ** The (spin-orbital) equation for G(ib,ja) is: ** ** G(ib,ja) = -L(i,a) T(j,b) - L(im,ae) [ T(jm,be) - T(j,e) T(m,b) ] ** ** I actually build the negative of all the terms above for each spin ** case and then multiply each of these by -1. Hence the dpd_buf4_scm() ** calls you see in the code. ** ** Each Gibja spin-case is built here with the storage G(ia,jb) in ** CC_MISC, but finally resorted to a "proper" G(ib,ja) ordering at ** the end of this routine and placed in CC_GAMMA. In addition, all ** blocks are "bra-ket symmetrized" (as required by the ** backtransformation) after all contributions have been accounted ** for. */ void Gibja(void) { int h, nirreps, row, col; int i, j, a, b, I, J, A, B, Isym, Jsym, Asym, Bsym; dpdfile2 T1, L1, T1A, T1B, L1A, L1B; dpdbuf4 G, L, T, Z, Z1, V, G1, G2; nirreps = moinfo.nirreps; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ /* G(ia,jb) <-- L(im,ae) T(jm,be) */ dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "GIAJB"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "Giajb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "GIAjb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "GiaJB"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "GIaJb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_buf4_sort(&V, CC_MISC, rspq, 10, 10, "GiAjB"); dpd_buf4_close(&V); /* G(IA,JB) <-- - L(IM,AE) T(J,E) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(IM,AJ)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(IB,AJ)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 10, 11, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 10, 10, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(ia,jb) <-- - L(im,ae) T(j,e) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(im,aj)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(ib,aj)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 10, 11, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 10, 10, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(IA,jb) <-- - L(Im,Ae) T(j,e) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(Im,Aj)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 10, 11, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(ia,JB) <-- - L(iM,aE) T(J,E) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(iM,aJ)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 10, 11, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 10, 10, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(ia,JB)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(Ia,Jb) <-- - L(Im,Ea) T(J,E) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(Im,Ja)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &Z, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(Ib,Ja)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, psrq, 10, 10, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(iA,jB) <-- - L(iM,eA) T(j,e) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(iM,jA)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &L, &Z, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(iB,jA)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, psrq, 10, 10, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(iA,jB)"); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_file2_init(&L1A, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_mat_init(&L1A); dpd_file2_mat_rd(&L1A); dpd_file2_init(&L1B, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_mat_init(&L1B); dpd_file2_mat_rd(&L1B); /* G(IA,JB) <-- L(I,A) T(J,B) */ dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(ia,jb) <-- L(i,a) T(j,b) */ dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "Giajb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(IA,jb) <-- L(I,A) T(j,b) */ dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAjb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(ia,JB) <-- L(i,a) T(J,B) */ dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GiaJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_mat_close(&L1A); dpd_file2_close(&L1A); dpd_file2_mat_close(&L1B); dpd_file2_close(&L1B); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* Sort all spin cases to correct ordering */ dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAJB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "GIBJA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "Giajb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "Gibja"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIAjb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "GIbjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GiaJB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "GiBJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GIaJb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "GIbJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 10, 10, 10, 10, 0, "GiAjB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 10, 10, "GiBjA"); dpd_buf4_close(&G); if (params.ground) { /* otherwise, sort in x_Gibja */ dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G1, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_init(&G2, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_symm2(&G1, &G2); dpd_buf4_close(&G2); dpd_buf4_sort(&G1, CC_GAMMA, rspq, 10, 10, "GiBJa"); dpd_buf4_close(&G1); } } else if(params.ref == 2) { /** UHF **/ /* G(ia,jb) <-- L(im,ae) T(jm,be) */ dpd_buf4_init(&V, CC_MISC, 0, 20, 20, 20, 20, 0, "VIAJB"); dpd_buf4_sort(&V, CC_MISC, rspq, 20, 20, "GIAJB"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 30, 30, 30, 30, 0, "Viajb"); dpd_buf4_sort(&V, CC_MISC, rspq, 30, 30, "Giajb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 30, 20, 30, 20, 0, "ViaJB"); dpd_buf4_sort(&V, CC_MISC, rspq, 20, 30, "GIAjb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 20, 30, 20, 30, 0, "VIAjb"); dpd_buf4_sort(&V, CC_MISC, rspq, 30, 20, "GiaJB"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 24, 24, 24, 24, 0, "VIaJb"); dpd_buf4_sort(&V, CC_MISC, rspq, 24, 24, "GIaJb"); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, 0, 27, 27, 27, 27, 0, "ViAjB"); dpd_buf4_sort(&V, CC_MISC, rspq, 27, 27, "GiAjB"); dpd_buf4_close(&V); /* G(IA,JB) <-- - L(IM,AE) T(J,E) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 21, 0, 21, 0, "Z(IM,AJ)"); dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 20, 21, 20, 21, 0, "Z(IB,AJ)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 20, 21, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 20, 20, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&G, CC_MISC, 0, 20, 20, 20, 20, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(ia,jb) <-- - L(im,ae) T(j,e) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 31, 10, 31, 0, "Z(im,aj)"); dpd_buf4_init(&L, CC_GLG, 0, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 30, 31, 30, 31, 0, "Z(ib,aj)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 30, 31, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 30, 30, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&G, CC_MISC, 0, 30, 30, 30, 30, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(IA,jb) <-- - L(Im,Ae) T(j,e) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z(Im,Aj)"); dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 20, 31, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 20, 30, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&G, CC_MISC, 0, 20, 30, 20, 30, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(ia,JB) <-- - L(iM,aE) T(J,E) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 25, 23, 25, 0, "Z(iM,aJ)"); dpd_buf4_init(&L, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_init(&Z1, CC_TMP1, 0, 27, 25, 27, 25, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 30, 21, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 21, 30, 21, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 30, 20, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 30, 20, 30, 20, 0, "Z(ia,JB)"); dpd_buf4_init(&G, CC_MISC, 0, 30, 20, 30, 20, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* G(Ia,Jb) <-- - L(Im,Ea) T(J,E) T(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 24, 22, 24, 0, "Z(Im,Ja)"); dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &Z, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Z1, CC_TMP1, 0, 24, 24, 24, 24, 0, "Z(Ib,Ja)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, psrq, 24, 24, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, CC_MISC, 0, 24, 24, 24, 24, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(iA,jB) <-- - L(iM,eA) T(j,e) T(M,B) */ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 27, 23, 27, 0, "Z(iM,jA)"); dpd_buf4_init(&L, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &L, &Z, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z1, CC_TMP1, 0, 27, 27, 27, 27, 0, "Z(iB,jA)"); dpd_contract424(&Z, &T1, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort(&Z1, CC_TMP0, psrq, 27, 27, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z(iA,jB)"); dpd_buf4_init(&G, CC_MISC, 0, 27, 27, 27, 27, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_file2_init(&L1A, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_mat_init(&L1A); dpd_file2_mat_rd(&L1A); dpd_file2_init(&L1B, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_mat_init(&L1B); dpd_file2_mat_rd(&L1B); /* G(IA,JB) <-- L(I,A) T(J,B) */ dpd_buf4_init(&G, CC_MISC, 0, 20, 20, 20, 20, 0, "GIAJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(ia,jb) <-- L(i,a) T(j,b) */ dpd_buf4_init(&G, CC_MISC, 0, 30, 30, 30, 30, 0, "Giajb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(IA,jb) <-- L(I,A) T(j,b) */ dpd_buf4_init(&G, CC_MISC, 0, 20, 30, 20, 30, 0, "GIAjb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* G(ia,JB) <-- L(i,a) T(J,B) */ dpd_buf4_init(&G, CC_MISC, 0, 30, 20, 30, 20, 0, "GiaJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h]; col++) { j = G.params->colorb[h][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_mat_close(&L1A); dpd_file2_close(&L1A); dpd_file2_mat_close(&L1B); dpd_file2_close(&L1B); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* Sort all spin cases to correct ordering */ dpd_buf4_init(&G, CC_MISC, 0, 20, 20, 20, 20, 0, "GIAJB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 20, 20, "GIBJA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 30, 30, 30, 30, 0, "Giajb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 30, 30, "Gibja"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 20, 30, 20, 30, 0, "GIAjb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 24, 27, "GIbjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 30, 20, 30, 20, 0, "GiaJB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 27, 24, "GiBJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 24, 24, 24, 24, 0, "GIaJb"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 24, 24, "GIbJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_MISC, 0, 27, 27, 27, 27, 0, "GiAjB"); dpd_buf4_sort(&G, CC_GAMMA, psrq, 27, 27, "GiBjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G1, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_init(&G2, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_symm2(&G1, &G2); dpd_buf4_close(&G2); dpd_buf4_sort(&G1, CC_GAMMA, rspq, 27, 24, "GiBJa"); dpd_buf4_close(&G1); } } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gijab.cc���������������������������������������������������������������������0000644�0001015�0000765�00000000712�11027011315�015037� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijab_RHF(void); void Gijab_ROHF(void); void Gijab_UHF(void); void Gijab(void) { if(params.ref == 0) Gijab_RHF(); else if(params.ref == 1) Gijab_ROHF(); else if(params.ref == 2) Gijab_UHF(); } }} // namespace psi::ccdensity ������������������������������������������������������psi3/src/bin/ccdensity/Gijab_RHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000046057�11027011315�015552� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijab_RHF(void) { int h, nirreps, i, a, m, e, I, A, M, E, Isym, Asym, Msym, Esym, row, col; int j, b, J, B, Jsym, Bsym; double value; dpdfile2 T1, L1, g, ZZ, ZZ2, T1A, T1B; dpdbuf4 G, L, T, V, Z, Z1, Z2; nirreps = moinfo.nirreps; /* ( g(I,M) + L(M,E) T(I,E) ) --> Z(I,M)(TMP0) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_copy(&g, CC_TMP0, "Z(I,M)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(i,m) + L(m,e) T(i,e) ) --> Z(i,m)(TMP1) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "Gmi"); dpd_file2_copy(&g, CC_TMP1, "Z(i,m)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP1, 0, 0, 0, "Z(i,m)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(E,A) - L(M,E) T(M,A) ) --> Z(E,A)(TMP2) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_copy(&g, CC_TMP2, "Z(E,A)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(e,a) - L(m,e) T(m,a) ) --> Z(e,a)(TMP3) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "Gae"); dpd_file2_copy(&g, CC_TMP3, "Z(e,a)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP3, 0, 1, 1, "Z(e,a)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); /* ( - T(IA,ME) + 2 * T(I,E) T(M,A) ) --> Z(IA,ME) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_copy(&T, CC_TMP4, "Z(IA,ME)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(ia,me) + 2 * T(i,e) T(m,a) ) --> Z(ia,me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_copy(&T, CC_TMP5, "Z(ia,me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(iA,Me) + 2 * T(i,e) T(M,A) ) --> Z(iA,Me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_copy(&T, CC_TMP6, "Z(iA,Me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP6, 0, 10, 10, 10, 10, 0, "Z(iA,Me)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(Ia,mE) + 2 * T(I,E) T(m,a) ) --> Z(Ia,mE) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_copy(&T, CC_TMP7, "Z(Ia,mE)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP7, 0, 10, 10, 10, 10, 0, "Z(Ia,mE)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* L(Ij,Ab) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&L, CC_GAMMA, "GIjAb"); dpd_buf4_close(&L); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); /* Tau(Ij,Ab) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(Ij,Mn) Tau(Mn,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&V, CC_MISC, 0, 0, 0, 0, 0, 0, "VMnIj"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(I,M) Tau(Mj,Ab) - Z(j,m) Tau(mI,bA) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 5, 0, 5, 0, "Z1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP1, 0, 0, 0, "Z(i,m)"); dpd_contract244(&ZZ, &T, &Z2, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 0, 5, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 0, 5, 0, 5, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 0, 5, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(E,A) Tau(Ij,bE) - Z(e,b) Tau(Ij,Ae) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 5, 0, 5, 0, "ZZ1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP3, 0, 1, 1, "Z(e,a)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_contract424(&T, &ZZ, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 0, 5, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 0, 5, 0, 5, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 0, 5, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(Ij) P(Ab) ( T'(IA,me) (T2) V(jb,me) + T'(IA,ME) (TMP4) V(jb,ME) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); /* T'(jA,Me) V(Ib,Me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(jA,Ib)"); dpd_buf4_init(&T, CC_TMP6, 0, 10, 10, 10, 10, 0, "Z(iA,Me)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, rqps, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(Ib,mE) V(jA,mE) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&T, CC_TMP7, 0, 10, 10, 10, 10, 0, "Z(Ia,mE)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, psrq, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(jb,ME) (T2) V(IA,ME) + T'(jb,me) (TMP5) V(IA,me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_contract444(&V, &T, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_contract444(&V, &T, &Z1, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); /* - Z(IA,jb) --> G(Ij,Ab) */ dpd_buf4_sort(&Z, CC_TMP9, prqs, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&Z, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(IA,me) (T2) L(m,e) + T'(IA,ME) (TMP4) L(M,E) --> ZZ(I,A) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(I,A) T(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T'(jb,ME) (T2) L(M,E) + T'(jb,me) (TMP5) L(m,e) --> ZZ(j,b) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(j,b)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(j,b) T(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(j,e) L(m,e) --> ZZ(j,m) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(j,m)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(j,m) T(m,b) --> ZZ2(j,b) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(I,A) ZZ(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(I,E) L(M,E) --> ZZ(I,M) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(I,M) T(M,A) --> ZZ2(I,A) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(j,b) ZZ(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gijab_ROHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000107031�10757640026�015677� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijab_ROHF(void) { int h, nirreps, i, a, m, e, I, A, M, E, Isym, Asym, Msym, Esym, row, col; int j, b, J, B, Jsym, Bsym; double value; dpdfile2 T1, L1, g, ZZ, ZZ2, T1A, T1B; dpdbuf4 G, L, T, V, Z, Z1, Z2; nirreps = moinfo.nirreps; /* ( g(I,M) + L(M,E) T(I,E) ) --> Z(I,M)(TMP0) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_copy(&g, CC_TMP0, "Z(I,M)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(i,m) + L(m,e) T(i,e) ) --> Z(i,m)(TMP1) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "Gmi"); dpd_file2_copy(&g, CC_TMP1, "Z(i,m)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP1, 0, 0, 0, "Z(i,m)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(E,A) - L(M,E) T(M,A) ) --> Z(E,A)(TMP2) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_copy(&g, CC_TMP2, "Z(E,A)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(e,a) - L(m,e) T(m,a) ) --> Z(e,a)(TMP3) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "Gae"); dpd_file2_copy(&g, CC_TMP3, "Z(e,a)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP3, 0, 1, 1, "Z(e,a)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); /* ( - T(IA,ME) + 2 * T(I,E) T(M,A) ) --> Z(IA,ME) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_copy(&T, CC_TMP4, "Z(IA,ME)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(ia,me) + 2 * T(i,e) T(m,a) ) --> Z(ia,me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_copy(&T, CC_TMP5, "Z(ia,me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(iA,Me) + 2 * T(i,e) T(M,A) ) --> Z(iA,Me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_copy(&T, CC_TMP6, "Z(iA,Me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP6, 0, 10, 10, 10, 10, 0, "Z(iA,Me)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(Ia,mE) + 2 * T(I,E) T(m,a) ) --> Z(Ia,mE) */ dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_copy(&T, CC_TMP7, "Z(Ia,mE)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP7, 0, 10, 10, 10, 10, 0, "Z(Ia,mE)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); 0, dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* L(IJ,AB) */ dpd_buf4_init(&L, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_copy(&L, CC_GAMMA, "GIJAB"); dpd_buf4_close(&L); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); /* Tau(IJ,AB) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(IJ,MN) Tau(MN,AB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&V, CC_MISC, 0, 2, 2, 2, 2, 0, "VMNIJ"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(I,M) Tau(MJ,AB) - Z(J,M) Tau(MI,AB) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 7, 0, 7, 0, "Z1(IJ,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, qprs, 0, 7, "Z2(JI,AB)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 7, 0, 7, 0, "Z2(JI,AB)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(E,A) Tau(IJ,BE) - Z(E,B) Tau(IJ,AE) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 2, 5, 2, 5, 0, "ZZ1(IJ,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, pqsr, 2, 5, "Z2(IJ,BA)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 2, 5, 2, 5, 0, "Z2(IJ,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(IJ) P(AB) ( T'(IA,ME) (TMP4) V(JB,ME) + T(IA,me) (T2) V(JB,me) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z, CC_TMP9, rqps, 10, 10, "Z(JA,IB)"); dpd_buf4_sort(&Z, CC_TMP10, psrq, 10, 10, "Z(IB,JA)"); dpd_buf4_sort(&Z, CC_TMP11, rspq, 10, 10, "Z(JB,IA)"); dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(JA,IB)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(IB,JA)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP11, 0, 10, 10, 10, 10, 0, "Z(JB,IA)"); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP9, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z(IJ,AB)"); /* I don't understand this factor of 1/2 that shows up here */ dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(IA,ME) (TMP4) L(M,E) + T'(IA,me) (T2) L(m,e) --> ZZ(I,A) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - P(IJ) P(AB) ZZ(I,A) T(J,B) --> G(IJ,AB) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= ZZ.matrix[Jsym][J][A] * T1.matrix[Isym][I][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= ZZ.matrix[Isym][I][B] * T1.matrix[Jsym][J][A]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(J,E) L(M,E) --> ZZ(J,M) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(J,M)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(J,M) T(M,B) --> ZZ2(J,B) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(J,B)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 P(IJ) P(AB) T(I,A) ZZ(J,B) --> G(IJ,AB) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(J,B)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= T1.matrix[Jsym][J][A] * ZZ.matrix[Isym][I][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= T1.matrix[Isym][I][B] * ZZ.matrix[Jsym][J][A]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* L(ij,ab) */ dpd_buf4_init(&L, CC_GLG, 0, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_copy(&L, CC_GAMMA, "Gijab"); dpd_buf4_close(&L); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); /* Tau(ij,ab) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(ij,mn) Tau(mn,ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&V, CC_MISC, 0, 2, 2, 2, 2, 0, "Vmnij"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(i,m) Tau(mj,ab) - Z(j,m) Tau(mi,ab) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 7, 0, 7, 0, "Z1(ij,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauijab"); dpd_file2_init(&ZZ, CC_TMP1, 0, 0, 0, "Z(i,m)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, qprs, 0, 7, "Z2(ji,ab)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 7, 0, 7, 0, "Z2(ji,ab)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(e,a) Tau(ij,be) - Z(e,b) Tau(ij,ae) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 2, 5, 2, 5, 0, "ZZ1(ij,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); dpd_file2_init(&ZZ, CC_TMP3, 0, 1, 1, "Z(e,a)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, pqsr, 2, 5, "Z2(ij,ba)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 2, 5, 2, 5, 0, "Z2(ij,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(ij) P(ab) ( T'(ia,me) (TMP5) V(jb,me) + T(ia,ME) (T2) V(jb,ME) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z, CC_TMP9, rqps, 10, 10, "Z(ja,ib)"); dpd_buf4_sort(&Z, CC_TMP10, psrq, 10, 10, "Z(ib,ja)"); dpd_buf4_sort(&Z, CC_TMP11, rspq, 10, 10, "Z(jb,ia)"); dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(ja,ib)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(ib,ja)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP11, 0, 10, 10, 10, 10, 0, "Z(jb,ia)"); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP9, prqs, 0, 5, "Z(ij,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 2, 7, 0, "Gijab"); dpd_buf4_init(&Z, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z(ij,ab)"); /* I don't understand this factor of 1/2 that shows up here */ dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(ia,me) (TMP5) L(m,e) + T'(ia,ME) (T2) L(M,E) --> ZZ(i,a) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(i,a)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - P(ij) P(ab) ZZ(i,a) T(j,b) --> G(ij,ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(i,a)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= ZZ.matrix[Jsym][J][A] * T1.matrix[Isym][I][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= ZZ.matrix[Isym][I][B] * T1.matrix[Jsym][J][A]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(j,e) L(m,e) --> ZZ(j,m) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(j,m)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(j,m) T(m,b) --> ZZ2(j,b) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 P(ij) P(ab) T(i,a) ZZ(j,b) --> G(ij,ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= T1.matrix[Jsym][J][A] * ZZ.matrix[Isym][I][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= T1.matrix[Isym][I][B] * ZZ.matrix[Jsym][J][A]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* L(Ij,Ab) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&L, CC_GAMMA, "GIjAb"); dpd_buf4_close(&L); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); /* Tau(Ij,Ab) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(Ij,Mn) Tau(Mn,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&V, CC_MISC, 0, 0, 0, 0, 0, 0, "VMnIj"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(I,M) Tau(Mj,Ab) - Z(j,m) Tau(mI,bA) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 5, 0, 5, 0, "Z1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP1, 0, 0, 0, "Z(i,m)"); dpd_contract244(&ZZ, &T, &Z2, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 0, 5, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 0, 5, 0, 5, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 0, 5, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(E,A) Tau(Ij,bE) - Z(e,b) Tau(Ij,Ae) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 5, 0, 5, 0, "ZZ1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP3, 0, 1, 1, "Z(e,a)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_contract424(&T, &ZZ, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 0, 5, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 0, 5, 0, 5, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 0, 5, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(Ij) P(Ab) ( T'(IA,me) (T2) V(jb,me) + T'(IA,ME) (TMP4) V(jb,ME) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); /* T'(jA,Me) V(Ib,Me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(jA,Ib)"); dpd_buf4_init(&T, CC_TMP6, 0, 10, 10, 10, 10, 0, "Z(iA,Me)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, rqps, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(Ib,mE) V(jA,mE) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&T, CC_TMP7, 0, 10, 10, 10, 10, 0, "Z(Ia,mE)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, psrq, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(jb,ME) (T2) V(IA,ME) + T'(jb,me) (TMP5) V(IA,me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_contract444(&V, &T, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_contract444(&V, &T, &Z1, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); /* - Z(IA,jb) --> G(Ij,Ab) */ dpd_buf4_sort(&Z, CC_TMP9, prqs, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&Z, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(IA,me) (T2) L(m,e) + T'(IA,ME) (TMP4) L(M,E) --> ZZ(I,A) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TMP4, 0, 10, 10, 10, 10, 0, "Z(IA,ME)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(I,A) T(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T'(jb,ME) (T2) L(M,E) + T'(jb,me) (TMP5) L(m,e) --> ZZ(j,b) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(j,b)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_buf4_init(&T, CC_TMP5, 0, 10, 10, 10, 10, 0, "Z(ia,me)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(j,b) T(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(j,e) L(m,e) --> ZZ(j,m) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(j,m)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(j,m) T(m,b) --> ZZ2(j,b) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(I,A) ZZ(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(I,E) L(M,E) --> ZZ(I,M) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(I,M) T(M,A) --> ZZ2(I,A) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(j,b) ZZ(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gijab_UHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000116377�11027503542�015570� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijab_UHF(void) { int h, nirreps, i, a, m, e, I, A, M, E, Isym, Asym, Msym, Esym, row, col; int j, b, J, B, Jsym, Bsym; double value; dpdfile2 T1, L1, g, ZZ, ZZ2, T1A, T1B; dpdbuf4 G, L, T, V, Z, Z1, Z2; nirreps = moinfo.nirreps; /* ( g(I,M) + L(M,E) T(I,E) ) --> Z(I,M)(TMP0) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_copy(&g, CC_TMP0, "Z(I,M)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(i,m) + L(m,e) T(i,e) ) --> Z(i,m)(TMP1) */ dpd_file2_init(&g, CC_GLG, 0, 2, 2, "Gmi"); dpd_file2_copy(&g, CC_TMP1, "Z(i,m)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP1, 0, 2, 2, "Z(i,m)"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(E,A) - L(M,E) T(M,A) ) --> Z(E,A)(TMP2) */ dpd_file2_init(&g, CC_GLG, 0, 1, 1, "GAE"); dpd_file2_copy(&g, CC_TMP2, "Z(E,A)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* ( g(e,a) - L(m,e) T(m,a) ) --> Z(e,a)(TMP3) */ dpd_file2_init(&g, CC_GLG, 0, 3, 3, "Gae"); dpd_file2_copy(&g, CC_TMP3, "Z(e,a)"); dpd_file2_close(&g); dpd_file2_init(&ZZ, CC_TMP3, 0, 3, 3, "Z(e,a)"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &ZZ, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&ZZ); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); /* ( - T(IA,ME) + 2 * T(I,E) T(M,A) ) --> Z(IA,ME) */ dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_copy(&T, CC_TMP4, "Z(IA,ME)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP4, 0, 20, 20, 20, 20, 0, "Z(IA,ME)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(ia,me) + 2 * T(i,e) T(m,a) ) --> Z(ia,me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_copy(&T, CC_TMP5, "Z(ia,me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP5, 0, 30, 30, 30, 30, 0, "Z(ia,me)"); dpd_buf4_scm(&Z, -1.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(iA,Me) + 2 * T(i,e) T(M,A) ) --> Z(iA,Me) */ dpd_buf4_init(&T, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_buf4_copy(&T, CC_TMP6, "Z(iA,Me)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP6, 0, 27, 24, 27, 24, 0, "Z(iA,Me)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1A.params->rowidx[m]; Msym = T1A.params->psym[m]; E = T1B.params->colidx[e]; Esym = T1B.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1B.matrix[Isym][I][E] * T1A.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); /* ( - T(Ia,mE) + 2 * T(I,E) T(m,a) ) --> Z(Ia,mE) */ dpd_buf4_init(&T, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_copy(&T, CC_TMP7, "Z(Ia,mE)"); dpd_buf4_close(&T); dpd_buf4_init(&Z, CC_TMP7, 0, 24, 27, 24, 27, 0, "Z(Ia,mE)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); dpd_buf4_mat_irrep_rd(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; M = T1B.params->rowidx[m]; Msym = T1B.params->psym[m]; E = T1A.params->colidx[e]; Esym = T1A.params->qsym[e]; if((Isym==Esym) && (Msym==Asym)) Z.matrix[h][row][col] += (2* T1A.matrix[Isym][I][E] * T1B.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* L(IJ,AB) */ if(!strcmp(params.wfn,"CCSD_T") && params.dertype==1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&L, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&L, &G, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&G); } else { dpd_buf4_init(&L, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_copy(&L, CC_GAMMA, "GIJAB"); dpd_buf4_close(&L); } dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); /* Tau(IJ,AB) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(IJ,MN) Tau(MN,AB) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&V, CC_MISC, 0, 2, 2, 2, 2, 0, "VMNIJ"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(I,M) Tau(MJ,AB) - Z(J,M) Tau(MI,AB) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 0, 7, 0, 7, 0, "Z1(IJ,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, qprs, 0, 7, "Z2(JI,AB)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 0, 7, 0, 7, 0, "Z2(JI,AB)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(E,A) Tau(IJ,BE) - Z(E,B) Tau(IJ,AE) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 2, 5, 2, 5, 0, "ZZ1(IJ,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, pqsr, 2, 5, "Z2(IJ,BA)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 2, 5, 2, 5, 0, "Z2(IJ,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(IJ) P(AB) ( T'(IA,ME) (TMP4) V(JB,ME) + T(IA,me) (T2) V(JB,me) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&T, CC_TMP4, 0, 20, 20, 20, 20, 0, "Z(IA,ME)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 20, 20, 20, 0, "VIAJB"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&V, CC_MISC, 0, 20, 30, 20, 30, 0, "VIAjb"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z, CC_TMP9, rqps, 20, 20, "Z(JA,IB)"); dpd_buf4_sort(&Z, CC_TMP10, psrq, 20, 20, "Z(IB,JA)"); dpd_buf4_sort(&Z, CC_TMP11, rspq, 20, 20, "Z(JB,IA)"); dpd_buf4_init(&Z1, CC_TMP9, 0, 20, 20, 20, 20, 0, "Z(JA,IB)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 20, 20, 20, 20, 0, "Z(IB,JA)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP11, 0, 20, 20, 20, 20, 0, "Z(JB,IA)"); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP9, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, CC_TMP9, 0, 0, 5, 0, 5, 0, "Z(IJ,AB)"); /* I don't understand this factor of 1/2 that shows up here */ dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(IA,ME) (TMP4) L(M,E) + T'(IA,me) (T2) L(m,e) --> ZZ(I,A) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TMP4, 0, 20, 20, 20, 20, 0, "Z(IA,ME)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - P(IJ) P(AB) ZZ(I,A) T(J,B) --> G(IJ,AB) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= ZZ.matrix[Jsym][J][A] * T1.matrix[Isym][I][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= ZZ.matrix[Isym][I][B] * T1.matrix[Jsym][J][A]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(J,E) L(M,E) --> ZZ(J,M) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(J,M)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(J,M) T(M,B) --> ZZ2(J,B) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(J,B)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 P(IJ) P(AB) T(I,A) ZZ(J,B) --> G(IJ,AB) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(J,B)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= T1.matrix[Jsym][J][A] * ZZ.matrix[Isym][I][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= T1.matrix[Isym][I][B] * ZZ.matrix[Jsym][J][A]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* L(ij,ab) */ if(!strcmp(params.wfn,"CCSD_T") && params.dertype==1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_init(&L, CC_GLG, 0, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_axpy(&L, &G, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&G); } else { dpd_buf4_init(&L, CC_GLG, 0, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_copy(&L, CC_GAMMA, "Gijab"); dpd_buf4_close(&L); } dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); /* Tau(ij,ab) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(ij,mn) Tau(mn,ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&V, CC_MISC, 0, 12, 12, 12, 12, 0, "Vmnij"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(i,m) Tau(mj,ab) - Z(j,m) Tau(mi,ab) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 10, 17, 10, 17, 0, "Z1(ij,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tauijab"); dpd_file2_init(&ZZ, CC_TMP1, 0, 2, 2, "Z(i,m)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, qprs, 10, 17, "Z2(ji,ab)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 10, 17, 10, 17, 0, "Z2(ji,ab)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 17, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(e,a) Tau(ij,be) - Z(e,b) Tau(ij,ae) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 12, 15, 12, 15, 0, "ZZ1(ij,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tauijab"); dpd_file2_init(&ZZ, CC_TMP3, 0, 3, 3, "Z(e,a)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP9, pqsr, 12, 15, "Z2(ij,ba)"); dpd_buf4_init(&Z2, CC_TMP9, 0, 12, 15, 12, 15, 0, "Z2(ij,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 15, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(ij) P(ab) ( T'(ia,me) (TMP5) V(jb,me) + T(ia,ME) (T2) V(jb,ME) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&T, CC_TMP5, 0, 30, 30, 30, 30, 0, "Z(ia,me)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 30, 30, 30, 0, "Viajb"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&V, CC_MISC, 0, 30, 20, 30, 20, 0, "ViaJB"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z, CC_TMP9, rqps, 30, 30, "Z(ja,ib)"); dpd_buf4_sort(&Z, CC_TMP10, psrq, 30, 30, "Z(ib,ja)"); dpd_buf4_sort(&Z, CC_TMP11, rspq, 30, 30, "Z(jb,ia)"); dpd_buf4_init(&Z1, CC_TMP9, 0, 30, 30, 30, 30, 0, "Z(ja,ib)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 30, 30, 30, 30, 0, "Z(ib,ja)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP11, 0, 30, 30, 30, 30, 0, "Z(jb,ia)"); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP9, prqs, 10, 15, "Z(ij,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 15, 12, 17, 0, "Gijab"); dpd_buf4_init(&Z, CC_TMP9, 0, 10, 15, 10, 15, 0, "Z(ij,ab)"); /* I don't understand this factor of 1/2 that shows up here */ dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(ia,me) (TMP5) L(m,e) + T'(ia,ME) (T2) L(M,E) --> ZZ(i,a) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 3, "ZZ(i,a)"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_buf4_init(&T, CC_TMP5, 0, 30, 30, 30, 30, 0, "Z(ia,me)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - P(ij) P(ab) ZZ(i,a) T(j,b) --> G(ij,ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 3, "ZZ(i,a)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= ZZ.matrix[Jsym][J][A] * T1.matrix[Isym][I][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= ZZ.matrix[Isym][I][B] * T1.matrix[Jsym][J][A]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(j,e) L(m,e) --> ZZ(j,m) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 2, "Z(j,m)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(j,m) T(m,b) --> ZZ2(j,b) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 2, 3, "ZZ2(j,b)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 P(ij) P(ab) T(i,a) ZZ(j,b) --> G(ij,ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 2, 3, "ZZ2(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 17, 12, 17, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Jsym==Asym) && (Isym==Bsym)) value -= T1.matrix[Jsym][J][A] * ZZ.matrix[Isym][I][B]; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Bsym) && (Jsym==Asym)) value -= T1.matrix[Isym][I][B] * ZZ.matrix[Jsym][J][A]; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* L(Ij,Ab) */ if(!strcmp(params.wfn,"CCSD_T") && params.dertype==1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_axpy(&L, &G, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&G); } else { dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_copy(&L, CC_GAMMA, "GIjAb"); dpd_buf4_close(&L); } dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); /* Tau(Ij,Ab) * (L0*R0 = 1, ground or 0, excited */ if (params.ground) { dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_axpy(&T, &G, 1.0); dpd_buf4_close(&T); } /* V(Ij,Mn) Tau(Mn,Ab) */ dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&V, CC_MISC, 0, 22, 22, 22, 22, 0, "VMnIj"); dpd_contract444(&V, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_close(&G); /* - ( Z(I,M) Tau(Mj,Ab) - Z(j,m) Tau(mI,bA) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 22, 28, 22, 28, 0, "Z1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract244(&ZZ, &T, &Z1, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 23, 29, 23, 29, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP1, 0, 2, 2, "Z(i,m)"); dpd_contract244(&ZZ, &T, &Z2, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 22, 29, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 22, 29, 22, 29, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 22, 28, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 22, 28, 22, 28, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - ( Z(E,A) Tau(Ij,bE) - Z(e,b) Tau(Ij,Ae) ) */ dpd_buf4_init(&Z1, CC_TMP8, 0, 22, 28, 22, 28, 0, "ZZ1(Ij,Ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&ZZ, CC_TMP3, 0, 3, 3, "Z(e,a)"); dpd_contract424(&T, &ZZ, &Z1, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_init(&Z2, CC_TMP9, 0, 23, 29, 23, 29, 0, "Z2(jI,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&ZZ, CC_TMP2, 0, 1, 1, "Z(E,A)"); dpd_contract424(&T, &ZZ, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&ZZ); dpd_buf4_close(&T); dpd_buf4_sort(&Z2, CC_TMP10, qprs, 22, 29, "Z2(Ij,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP10, 0, 22, 29, 22, 29, 0, "Z2(Ij,bA)"); dpd_buf4_sort(&Z2, CC_TMP9, pqsr, 22, 28, "Z2(Ij,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP9, 0, 22, 28, 22, 28, 0, "Z2(Ij,Ab)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* - P(Ij) P(Ab) ( T'(IA,me) (T2) V(jb,me) + T'(IA,ME) (TMP4) V(jb,ME) ) */ dpd_buf4_init(&Z, CC_TMP8, 0, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP4, 0, 20, 20, 20, 20, 0, "Z(IA,ME)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 20, 30, 20, 0, "ViaJB"); dpd_contract444(&T, &V, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&V, CC_MISC, 0, 30, 30, 30, 30, 0, "Viajb"); dpd_contract444(&T, &V, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); /* T'(jA,Me) V(Ib,Me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 27, 24, 27, 24, 0, "Z(jA,Ib)"); dpd_buf4_init(&T, CC_TMP6, 0, 27, 24, 27, 24, 0, "Z(iA,Me)"); dpd_buf4_init(&V, CC_MISC, 0, 24, 24, 24, 24, 0, "VIaJb"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, rqps, 20, 30, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(Ib,mE) V(jA,mE) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 24, 27, 24, 27, 0, "Z(Ib,jA)"); dpd_buf4_init(&T, CC_TMP7, 0, 24, 27, 24, 27, 0, "Z(Ia,mE)"); dpd_buf4_init(&V, CC_MISC, 0, 27, 27, 27, 27, 0, "ViAjB"); dpd_contract444(&T, &V, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_sort(&Z1, CC_TMP10, psrq, 20, 30, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP10, 0, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_axpy(&Z1, &Z, -1.0); dpd_buf4_close(&Z1); /* T'(jb,ME) (T2) V(IA,ME) + T'(jb,me) (TMP5) V(IA,me) */ dpd_buf4_init(&Z1, CC_TMP9, 0, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&T, CC_TMP5, 0, 30, 30, 30, 30, 0, "Z(ia,me)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 30, 20, 30, 0, "VIAjb"); dpd_contract444(&V, &T, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&V, CC_MISC, 0, 20, 20, 20, 20, 0, "VIAJB"); dpd_contract444(&V, &T, &Z1, 0, 0, -1.0, 1.0); dpd_buf4_close(&V); dpd_buf4_close(&T); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); /* - Z(IA,jb) --> G(Ij,Ab) */ dpd_buf4_sort(&Z, CC_TMP9, prqs, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&Z, CC_TMP9, 0, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -0.5); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* T'(IA,me) (T2) L(m,e) + T'(IA,ME) (TMP4) L(M,E) --> ZZ(I,A) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TMP4, 0, 20, 20, 20, 20, 0, "Z(IA,ME)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(I,A) T(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 1, "ZZ(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T'(jb,ME) (T2) L(M,E) + T'(jb,me) (TMP5) L(m,e) --> ZZ(j,b) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 3, "ZZ(j,b)"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract422(&T, &L1, &ZZ, 0, 0, -1.0, 0.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_buf4_init(&T, CC_TMP5, 0, 30, 30, 30, 30, 0, "Z(ia,me)"); dpd_contract422(&T, &L1, &ZZ, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&L1); dpd_file2_close(&ZZ); /* - ZZ(j,b) T(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 3, "ZZ(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(j,e) L(m,e) --> ZZ(j,m) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 2, 2, "Z(j,m)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(j,m) T(m,b) --> ZZ2(j,b) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 2, 3, "ZZ2(j,b)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(I,A) ZZ(j,b) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 2, 3, "ZZ2(j,b)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = T1.params->rowidx[i]; Isym = T1.params->psym[i]; J = ZZ.params->rowidx[j]; Jsym = ZZ.params->psym[j]; A = T1.params->colidx[a]; Asym = T1.params->qsym[a]; B = ZZ.params->colidx[b]; Bsym = ZZ.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += T1.matrix[Isym][I][A] * ZZ.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); /* T(I,E) L(M,E) --> ZZ(I,M) */ dpd_file2_init(&ZZ, CC_TMP8, 0, 0, 0, "Z(I,M)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &ZZ, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_file2_close(&T1); /* ZZ(I,M) T(M,A) --> ZZ2(I,A) */ dpd_file2_init(&ZZ2, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&ZZ, &T1, &ZZ2, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&ZZ); dpd_file2_close(&ZZ2); /* 3 T(j,b) ZZ(I,A) --> G(Ij,Ab) */ dpd_file2_init(&ZZ, CC_TMP9, 0, 0, 1, "ZZ2(I,A)"); dpd_file2_mat_init(&ZZ); dpd_file2_mat_rd(&ZZ); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; value = 0.0; I = ZZ.params->rowidx[i]; Isym = ZZ.params->psym[i]; J = T1.params->rowidx[j]; Jsym = T1.params->psym[j]; A = ZZ.params->colidx[a]; Asym = ZZ.params->qsym[a]; B = T1.params->colidx[b]; Bsym = T1.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) value += ZZ.matrix[Isym][I][A] * T1.matrix[Jsym][J][B]; G.matrix[h][row][col] += 3.0 * value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&ZZ); dpd_file2_close(&ZZ); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gijka.cc���������������������������������������������������������������������0000644�0001015�0000765�00000076025�11027503542�015072� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijka(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; double value; dpdfile2 L1, T1, g; dpdbuf4 G, V, T, L, Z, Z1, Z2; double factor=0.0; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); /* - tau(Ij,Ea) l(K,E) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(Ij,Ea) t(K,E) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(Ij,Km) t(m,a) */ dpd_buf4_init(&V, CC_MISC, 0, 0, 0, 0, 0, 0, "VMnIj"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(Ia,Kf) T(j,f) --> Z(Ka,Ij) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(Ia,Kj)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 0, "Z(Ka,Ij)"); dpd_buf4_close(&Z); /* V(ja,KF) T(I,F) --> Z(Ka,jI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ja,KI)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, rqps, 10, 0, "Z(Ka,jI)"); dpd_buf4_close(&Z); /* Z(Ka,Ij) - Z(Ka,jI) --> G(Ij,Ka) */ dpd_buf4_init(&Z2, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(Ka,jI)"); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 10, 0, "Z(Ka,Ij)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(Ka,Ij)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(Ka,Ij)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 10, "Z(Ij,Ka)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(Ij,Ka)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - g(I,K) T(j,a) --> G(Ij,Ka) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); /* - tau(IJ,EA) l(K,E) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T); /* - L(IJ,EA) t(K,E) */ dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(IJ,KM) t(M,A) */ dpd_buf4_init(&V, CC_MISC, 0, 2, 0, 2, 2, 0, "VMNIJ"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(IA,KF) T(J,F) --> Z(KA,IJ) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(IA,KJ)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 0, "Z(KA,IJ)"); dpd_buf4_close(&Z); /* Z(KA,IJ) - Z(KA,JI) --> G(IJ,KA) */ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(KA,IJ)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 10, 0, "Z(KA,JI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(KA,JI)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 10, "Z(IJ,KA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(IJ,KA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - ( g(I,K) T(J,A) - g(J,K) T(I,A) ) --> G(IJ,KA) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; J = g.params->rowidx[j]; I = T1.params->rowidx[i]; Jsym = g.params->psym[j]; Isym = T1.params->psym[i]; if((Jsym==Ksym) && (Isym==Asym)) value -= g.matrix[Jsym][J][K] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); /* - tau(ij,ea) l(k,e) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(ij,ea) t(k,e) */ dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(ij,km) t(m,a) */ dpd_buf4_init(&V, CC_MISC, 0, 2, 0, 2, 2, 0, "Vmnij"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(ia,kf) T(j,f) --> Z(ka,ij) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ia,kj)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 0, "Z(ka,ij)"); dpd_buf4_close(&Z); /* Z(ka,ij) - Z(ka,ji) --> G(ij,ka) */ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(ka,ij)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 10, 0, "Z(ka,ji)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ka,ji)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 10, "Z(ij,ka)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(ij,ka)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - ( g(i,k) T(j,a) - g(j,k) T(i,a) ) --> G(ij,ka) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "Gmi"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; J = g.params->rowidx[j]; I = T1.params->rowidx[i]; Jsym = g.params->psym[j]; Isym = T1.params->psym[i]; if((Jsym==Ksym) && (Isym==Asym)) value -= g.matrix[Jsym][J][K] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); /* - tau(Ij,Ea) l(K,E) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(Ij,Ea) t(K,E) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(Ij,Km) t(m,a) */ dpd_buf4_init(&V, CC_MISC, 0, 0, 0, 0, 0, 0, "VMnIj"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(Ia,Kf) T(j,f) --> Z(Ka,Ij) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(Ia,Kj)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 0, "Z(Ka,Ij)"); dpd_buf4_close(&Z); /* V(ja,KF) T(I,F) --> Z(Ka,jI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ja,KI)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, rqps, 10, 0, "Z(Ka,jI)"); dpd_buf4_close(&Z); /* Z(Ka,Ij) - Z(Ka,jI) --> G(Ij,Ka) */ dpd_buf4_init(&Z2, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(Ka,jI)"); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 10, 0, "Z(Ka,Ij)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(Ka,Ij)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(Ka,Ij)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 10, "Z(Ij,Ka)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(Ij,Ka)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - g(I,K) T(j,a) --> G(Ij,Ka) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); /* - tau(iJ,eA) l(k,e) */ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(iJ,eA) t(k,e) */ dpd_buf4_init(&L, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_close(&G); /* V(iJ,kM) t(M,A) */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(Ji,Ak)"); dpd_buf4_init(&V, CC_MISC, 0, 0, 0, 0, 0, 0, "VMnIj"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, qprs, 0, 11, "Z(iJ,Ak)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 11, 0, 11, 0, "Z(iJ,Ak)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 0, 10, "Z(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(iJ,kA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* V(iA,kF) T(J,F) --> Z(kA,iJ) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(iA,kJ)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 0, "Z(kA,iJ)"); dpd_buf4_close(&Z); /* V(iA,kf) T(i,f) --> Z(kA,Ji) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(JA,ki)"); dpd_buf4_init(&V, CC_MISC, 0, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, rqps, 10, 0, "Z(kA,Ji)"); dpd_buf4_close(&Z); /* Z(kA,iJ) - Z(kA,Ji) --> G(iJ,kA) */ dpd_buf4_init(&Z2, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(kA,Ji)"); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 10, 0, "Z(kA,iJ)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(kA,iJ)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(kA,iJ)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 10, "Z(iJ,kA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(iJ,kA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - g(i,k) T(J,A) --> G(iJ,kA) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "Gmi"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); 0, dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } else if(params.ref == 2) { /** UHF **/ if(!strcmp(params.wfn,"CCSD_T") && params.dertype==1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ factor = 1.0; } dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); /* - tau(IJ,EA) l(K,E) */ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, factor); dpd_file2_close(&L1); dpd_buf4_close(&T); /* - L(IJ,EA) t(K,E) */ dpd_buf4_init(&L, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(IJ,KM) t(M,A) */ dpd_buf4_init(&V, CC_MISC, 0, 2, 0, 2, 2, 0, "VMNIJ"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(IA,KF) T(J,F) --> Z(KA,IJ) */ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z(IA,KJ)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 20, 0, "Z(KA,IJ)"); dpd_buf4_close(&Z); /* Z(KA,IJ) - Z(KA,JI) --> G(IJ,KA) */ dpd_buf4_init(&Z1, CC_TMP1, 0, 20, 0, 20, 0, 0, "Z(KA,IJ)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 20, 0, "Z(KA,JI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z(KA,JI)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 20, "Z(IJ,KA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 20, 0, 20, 0, "Z(IJ,KA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - ( g(I,K) T(J,A) - g(J,K) T(I,A) ) --> G(IJ,KA) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; J = g.params->rowidx[j]; I = T1.params->rowidx[i]; Jsym = g.params->psym[j]; Isym = T1.params->psym[i]; if((Jsym==Ksym) && (Isym==Asym)) value -= g.matrix[Jsym][J][K] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); /* - tau(ij,ea) l(k,e) */ dpd_buf4_init(&T, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tauijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, factor); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(ij,ea) t(k,e) */ dpd_buf4_init(&L, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(ij,km) t(m,a) */ dpd_buf4_init(&V, CC_MISC, 0, 12, 10, 12, 12, 0, "Vmnij"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(ia,kf) T(j,f) --> Z(ka,ij) */ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z(ia,kj)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 30, 10, "Z(ka,ij)"); dpd_buf4_close(&Z); /* Z(ka,ij) - Z(ka,ji) --> G(ij,ka) */ dpd_buf4_init(&Z1, CC_TMP1, 0, 30, 10, 30, 10, 0, "Z(ka,ij)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 30, 10, "Z(ka,ji)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z(ka,ji)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 10, 30, "Z(ij,ka)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 30, 10, 30, 0, "Z(ij,ka)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - ( g(i,k) T(j,a) - g(j,k) T(i,a) ) --> G(ij,ka) */ dpd_file2_init(&g, CC_GLG, 0, 2, 2, "Gmi"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; J = g.params->rowidx[j]; I = T1.params->rowidx[i]; Jsym = g.params->psym[j]; Isym = T1.params->psym[i]; if((Jsym==Ksym) && (Isym==Asym)) value -= g.matrix[Jsym][J][K] * T1.matrix[Isym][I][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); /* - tau(Ij,Ea) l(K,E) */ dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, factor); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(Ij,Ea) t(K,E) */ dpd_buf4_init(&L, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); /* V(Ij,Km) t(m,a) */ dpd_buf4_init(&V, CC_MISC, 0, 22, 22, 22, 22, 0, "VMnIj"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_close(&G); /* V(Ia,Kf) T(j,f) --> Z(Ka,Ij) */ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z(Ia,Kj)"); dpd_buf4_init(&V, CC_MISC, 0, 24, 24, 24, 24, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 24, 22, "Z(Ka,Ij)"); dpd_buf4_close(&Z); /* V(ja,KF) T(I,F) --> Z(Ka,jI) */ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 0, 30, 0, 0, "Z(ja,KI)"); dpd_buf4_init(&V, CC_MISC, 0, 30, 20, 30, 20, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, rqps, 24, 23, "Z(Ka,jI)"); dpd_buf4_close(&Z); /* Z(Ka,Ij) - Z(Ka,jI) --> G(Ij,Ka) */ dpd_buf4_init(&Z2, CC_TMP2, 0, 24, 23, 24, 23, 0, "Z(Ka,jI)"); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 24, 22, "Z(Ka,Ij)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP1, 0, 24, 22, 24, 22, 0, "Z(Ka,Ij)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z(Ka,Ij)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 22, 24, "Z(Ij,Ka)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&Z, CC_TMP0, 0, 22, 24, 22, 24, 0, "Z(Ij,Ka)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - g(I,K) T(j,a) --> G(Ij,Ka) */ dpd_file2_init(&g, CC_GLG, 0, 0, 0, "GMI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); /* - tau(iJ,eA) l(k,e) */ dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract244(&L1, &T, &G, 1, 2, 1, -1.0, factor); dpd_file2_close(&L1); dpd_buf4_close(&T); /* -L(iJ,eA) t(k,e) */ dpd_buf4_init(&L, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &L, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_close(&G); /* V(iJ,kM) t(M,A) */ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z(Ji,Ak)"); dpd_buf4_init(&V, CC_MISC, 0, 22, 22, 22, 22, 0, "VMnIj"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, qprs, 23, 26, "Z(iJ,Ak)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 23, 26, 23, 26, 0, "Z(iJ,Ak)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 23, 27, "Z(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Z, CC_TMP0, 0, 23, 27, 23, 27, 0, "Z(iJ,kA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* V(iA,kF) T(J,F) --> Z(kA,iJ) */ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z(iA,kJ)"); dpd_buf4_init(&V, CC_MISC, 0, 27, 27, 27, 27, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP1, rqps, 27, 23, "Z(kA,iJ)"); dpd_buf4_close(&Z); /* V(iA,kf) T(i,f) --> Z(kA,Ji) */ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 10, 20, 10, 0, "Z(JA,ki)"); dpd_buf4_init(&V, CC_MISC, 0, 20, 30, 20, 30, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&V); dpd_buf4_sort(&Z, CC_TMP2, rqps, 27, 22, "Z(kA,Ji)"); dpd_buf4_close(&Z); /* Z(kA,iJ) - Z(kA,Ji) --> G(iJ,kA) */ dpd_buf4_init(&Z2, CC_TMP2, 0, 27, 22, 27, 22, 0, "Z(kA,Ji)"); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 27, 23, "Z(kA,iJ)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP1, 0, 27, 23, 27, 23, 0, "Z(kA,iJ)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z(kA,iJ)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 23, 27, "Z(iJ,kA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Z, CC_TMP0, 0, 23, 27, 23, 27, 0, "Z(iJ,kA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* - g(i,k) T(J,A) --> G(iJ,kA) */ dpd_file2_init(&g, CC_GLG, 0, 2, 2, "Gmi"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; for(col=0; col < G.params->coltot[h]; col++) { k = G.params->colorb[h][col][0]; a = G.params->colorb[h][col][1]; value = 0.0; I = g.params->rowidx[i]; J = T1.params->rowidx[j]; Isym = g.params->psym[i]; Jsym = T1.params->psym[j]; K = g.params->colidx[k]; A = T1.params->colidx[a]; Ksym = g.params->qsym[k]; Asym = T1.params->qsym[a]; if((Isym==Ksym) && (Jsym==Asym)) value += g.matrix[Isym][I][K] * T1.matrix[Jsym][J][A]; G.matrix[h][row][col] -= value; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_scm(&G, 0.5); dpd_buf4_close(&G); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Gijkl.cc���������������������������������������������������������������������0000644�0001015�0000765�00000004450�11027011315�015066� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void Gijkl(void) { dpdbuf4 V, G; int G_irr; G_irr = params.G_irr; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&V, CC_MISC, G_irr, 0, 0, 0, 0, 0, "VMnIj"); dpd_buf4_copy(&V, CC_GAMMA, "GIjKl"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "VMNIJ"); dpd_buf4_copy(&V, CC_GAMMA, "GIJKL"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "Vmnij"); dpd_buf4_copy(&V, CC_GAMMA, "Gijkl"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "Gijkl"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } dpd_buf4_init(&V, CC_MISC, G_irr, 0, 0, 0, 0, 0, "VMnIj"); dpd_buf4_copy(&V, CC_GAMMA, "GIjKl"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "VMNIJ"); dpd_buf4_copy(&V, CC_GAMMA, "GIJKL"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } dpd_buf4_init(&V, CC_MISC, G_irr, 12, 12, 12, 12, 0, "Vmnij"); dpd_buf4_copy(&V, CC_GAMMA, "Gijkl"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 12, 12, 12, 12, 0, "Gijkl"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } dpd_buf4_init(&V, CC_MISC, G_irr, 22, 22, 22, 22, 0, "VMnIj"); dpd_buf4_copy(&V, CC_GAMMA, "GIjKl"); dpd_buf4_close(&V); if (params.ground) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_symm(&G); dpd_buf4_close(&G); } } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/globals.h��������������������������������������������������������������������0000644�0001015�0000765�00000001070�10754663017�015330� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace ccdensity { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif /* #define DEBUG_XI (1)*/ extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Frozen frozen; EXTERN struct Params params; EXTERN struct RHO_Params *rho_params; EXTERN struct TD_Params *td_params; }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Iab.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000071552�11027011315�014530� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* Iab(): Build the virtual-virtual block of the orbital Lagrangian ** using the expression given in lag.c. ** ** Note that the code currently produces only the unique I_AB terms, ** but the actual contractions still need to be spin-adapted for ** greater efficiency. ** ** TDC, 2/2008 */ void Iab(struct RHO_Params rho_params) { int a, b, c, A, B, C, Ga, Gb, Gc, Gac, Gbc; int *vir_off, *virtpi, nirreps, length, col; dpdfile2 F, D, I; dpdbuf4 G, Bints, Cints, Dints, Eints, Fints; vir_off = moinfo.vir_off; virtpi = moinfo.virtpi; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ /* I'AB <-- sum_I fAI (DBI + DIB) + sum_C fAC (DBC + DCB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- sum_I fAI (DBI + DIB) + sum_C fAC (DBC + DCB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ab <-- sum_i fai (Dbi + Dib) + sum_c fac (Dbc + Dcb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- sum_I fAI (DBI + DIB) + sum_C fAC (DBC + DCB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ab <-- sum_i fai (Dbi + Dib) + sum_c fac (Dbc + Dcb) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- sum_JKI <JK||IA> G(JK,IB) + 2 sum_jKi <jK|iA> G(jK,iB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- sum_JKI <JK||IA> G(JK,IB) + 2 sum_jKi <jK|iA> G(jK,iB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ab <-- sum_jki <jk||ia> G(jk,ib) + 2 sum_JkI <Jk|Ia> G(Jk,Ib) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- sum_JKI <JK||IA> G(JK,IB) + 2 sum_jKi <jK|iA> G(jK,iB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ab <-- sum_jki <jk||ia> G(jk,ib) + 2 sum_JkI <Jk|Ia> G(Jk,Ib) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Eints, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- sum_CDE <AC||DE> G(BC,DE) + 2 sum_cDe <Ac|De> G(Bc,De) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gabcd - Gabdc", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 5, 5, "2 Gabcd - Gabdc", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "2 Gabcd - Gabdc"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- sum_CDE <AC||DE> G(BC,DE) + 2 sum_cDe <Ac|De> G(Bc,De) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "GABCD"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); /* dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); replaced with 2(V**3) memory code*/ dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(Gac=0; Gac < nirreps; Gac++) { Gbc = Gac; for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gc = Ga ^ Gac; Bints.matrix[Gac] = dpd_block_matrix(virtpi[Gc], Bints.params->coltot[Gac]); G.matrix[Gbc] = dpd_block_matrix(virtpi[Gc], G.params->coltot[Gbc]); for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; dpd_buf4_mat_irrep_rd_block(&Bints, Gac, Bints.row_offset[Gac][A], virtpi[Gc]); dpd_buf4_mat_irrep_rd_block(&G, Gbc, G.row_offset[Gbc][B], virtpi[Gc]); length = virtpi[Gc] * Bints.params->coltot[Gac]; if(length) I.matrix[Ga][a][b] += 2.0 * C_DDOT(length, Bints.matrix[Gac][0], 1, G.matrix[Gbc][0], 1); } } dpd_free_block(Bints.matrix[Gac], virtpi[Gc], Bints.params->coltot[Gac]); dpd_free_block(G.matrix[Gbc], virtpi[Gc], G.params->coltot[Gbc]); } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_file2_close(&I); /* I'ab <-- sum_cde <ac||de> G(bc,de) + 2 sum_CdE <Ed|Ca> G(Ed,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "Gabcd"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); /* dpd_contract442(&Bints, &G, &I, 3, 3, 2.0, 1.0); replaced with 2(V**3) memory code*/ dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(Gac=0; Gac < nirreps; Gac++) { Gbc = Gac; for(Gc=0; Gc < nirreps; Gc++) { Ga = Gc ^ Gac; Gb = Ga; Bints.matrix[Gac] = dpd_block_matrix(virtpi[Ga], Bints.params->coltot[Gac]); G.matrix[Gbc] = dpd_block_matrix(virtpi[Gb], G.params->coltot[Gbc]); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; dpd_buf4_mat_irrep_rd_block(&Bints, Gac, Bints.row_offset[Gac][C], virtpi[Ga]); dpd_buf4_mat_irrep_rd_block(&G, Gbc, G.row_offset[Gbc][C], virtpi[Gb]); for(a=0; a < virtpi[Ga]; a++) { for(b=0; b < virtpi[Gb]; b++) { for (col=0; col< Bints.params->coltot[Gac]; ++col) I.matrix[Ga][a][b] += 2.0 * Bints.matrix[Gac][a][col]*G.matrix[Gbc][b][col] ; } } } dpd_free_block(Bints.matrix[Gac], virtpi[Ga], Bints.params->coltot[Gac]); dpd_free_block(G.matrix[Gbc], virtpi[Gb], G.params->coltot[Gbc]); } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- sum_CDE <AC||DE> G(BC,DE) + 2 sum_cDe <Ac|De> G(Bc,De) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <AB|CD>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "GABCD"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_buf4_init(&Bints, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_file2_close(&I); /* I'ab <-- sum_cde <ac||de> G(bc,de) + 2 sum_CdE <Ed|Ca> G(Ed,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Bints, CC_BINTS, 0, 15, 17, 15, 15, 1, "B <ab|cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 15, 17, 17, 17, 0, "Gabcd"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_buf4_init(&Bints, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); dpd_contract442(&Bints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Bints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- sum_ICD <AI||CD> G(BI,CD) + 2 sum_iCd <Ai|Cd> G(Bi,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_FINTS, qpsr, 11, 5, "F <ai|bc>"); dpd_buf4_close(&Fints); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&Fints, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- sum_ICD <AI||CD> G(BI,CD) + 2 sum_iCd <Ai|Cd> G(Bi,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qprs, 11, 7, "F(CI,AB)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 7, 11, 7, 0, "F(CI,AB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qpsr, 11, 5, "F(Ai,Cd)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(Ai,Cd)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ab <-- sum_icd <ai||cd> G(bi,cd) + 2 sum_IcD <aI|cD> G(bI,cD) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qprs, 11, 7, "F(ci,ab)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 7, 11, 7, 0, "F(ci,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qpsr, 11, 5, "F(aI,cD)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(aI,cD)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- sum_ICD <AI||CD> G(BI,CD) + 2 sum_iCd <Ai|Cd> G(Bi,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ab <-- sum_icd <ai||cd> G(bi,cd) + 2 sum_IcD <aI|cD> G(bI,cD) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- 2 sum_CDI <DI||CA> G(DI,CB) + 2 sum_cDi <Di|Ac> G(Di,Bc) + 2 sum_cdI <dI|cA> G(dI,cB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_FINTS, qpsr, 11, 5, "F <ai|bc>"); dpd_buf4_close(&Fints); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&Fints, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- 2 sum_CDI <DI||CA> G(DI,CB) + 2 sum_cDi <Di|Ac> G(Di,Bc) + 2 sum_cdI <dI|cA> G(dI,cB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qprs, 11, 5, "F (DI,CA)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F (DI,CA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "GCIAB"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, qpsr, 11, 5, "F (Di,Ac)"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F (Di,Ac)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ab <-- 2 sum_cdi <di||ca> G(di,cb) + 2 sum_CdI <dI|aC> G(dI,bC) + 2 sum_CDi <Di|Ca> G(Di,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); /* Both sorted F-blocks used here were generated above */ dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F (DI,CA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "Gciab"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 11, 5, 11, 5, 0, "F (Di,Ac)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- 2 sum_CDI <DI||CA> G(DI,CB) + 2 sum_cDi <Di|Ac> G(Di,Bc) + 2 sum_cdI <dI|cA> G(dI,cB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 21, 5, 21, 5, 1, "F <AI|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 5, 21, 7, 0, "GCIAB"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ab <-- 2 sum_cdi <di||ca> G(di,cb) + 2 sum_CdI <dI|aC> G(dI,bC) + 2 sum_CDi <Di|Ca> G(Di,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 31, 15, 31, 15, 1, "F <ai|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 15, 31, 17, 0, "Gciab"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- 2 sum_IJC <JC||IA> G(JC,IB) + 2 sum_jCi <jC|iA> G(jC,iB) - 2 sum_Jci <Jc|Ai> G(Jc,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rpqs, 0, 5, "GIbjA (jI,bA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIbjA (jI,bA)"); dpd_contract442(&Dints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- 2 sum_IJC <JC||IA> G(JC,IB) + 2 sum_jCi <jC|iA> G(jC,iB) - 2 sum_Jci <Jc|Ai> G(Jc,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rpqs, 0, 5, "GIbjA (jI,bA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIbjA (jI,bA)"); dpd_contract442(&Dints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ab <-- 2 sum_jci <jc||ia> G(jc,ib) + 2 sum_JcI <Jc|Ia> G(Jc,Ib) - 2 sum_jCI <Ij|Ca> GjCbI (IC,jb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, rpqs, 0, 5, "GiBJa (Ji,Ba)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GiBJa (Ji,Ba)"); dpd_contract442(&Dints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- 2 sum_IJC <JC||IA> G(JC,IB) + 2 sum_jCi <jC|iA> G(jC,iB) - 2 sum_Jci <Jc|Ai> G(Jc,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rpqs, 23, 29, "GIbjA (jI,bA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 23, 29, 23, 29, 0, "GIbjA (jI,bA)"); dpd_contract442(&Dints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ab <-- 2 sum_jci <jc||ia> G(jc,ib) + 2 sum_JcI <Jc|Ia> G(Jc,Ib) - 2 sum_jCI <Ij|Ca> GjCbI (IC,jb) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, rpqs, 22, 28, "GiBJa (Ji,Ba)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 22, 28, 22, 28, 0, "GiBJa (Ji,Ba)"); dpd_contract442(&Dints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AB <-- sum_CIJ <IJ||CA> G(IJ,CB) + 2 sum_Ijc <Ij|Ac> G(Ij,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Dints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AB <-- sum_CIJ <IJ||CA> G(IJ,CB) + 2 sum_Ijc <Ij|Ac> G(Ij,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ab <-- sum_cij <ij||ca> G(ij,cb) + 2 sum_IjC <Ij|Ca> G(Ij,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "Gijab"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AB <-- sum_CIJ <IJ||CA> G(IJ,CB) + 2 sum_Ijc <Ij|Ac> G(Ij,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ab <-- sum_cij <ij||ca> G(ij,cb) + 2 sum_IjC <Ij|Ca> G(Ij,Cb) */ dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_buf4_init(&Dints, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 15, 12, 17, 0, "Gijab"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Iai.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000127455�11027011315�014543� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* Iai(): Build the virtual-occupied block of the orbital Lagrangian ** using the expression given in lag.c. Note that we include an ** additional term here referred to as the reference contribution, ** 2*fai. This comes from the general spin-orbital SCF gradient ** expression, but for unperturbed canonical Hartree-Fock orbitals ** (i.e., RHF and UHF only) this contribution is zero. However, since ** the code to include the terms is trivial, we go ahead and do the ** work for all reference types. ** ** Note that the code currently produces only the unique I_IJ terms, ** but the actual contractions still need to be spin-adapted for ** greater efficiency. ** ** TDC, 2/2008 */ void Iai(struct RHO_Params rho_params) { dpdfile2 F, D, I; dpdbuf4 G, Eints, Dints, Cints, Fints, Bints; if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_J fAJ (DIJ + DJI) + sum_B fAB (DIB + DBI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 1, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'AI <-- 2 fAI */ dpd_file2_axpy(&F, &I, 2.0, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_J fAJ (DIJ + DJI) + sum_B fAB (DIB + DBI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 1, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'AI <-- 2 fAI */ dpd_file2_axpy(&F, &I, 2.0, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ai <-- sum_j faj (Dij + Dji) + sum_b fab (Dib + Dbi) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_contract222(&F, &D, &I, 1, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'ai <-- 2 fai */ dpd_file2_axpy(&F, &I, 2.0, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_J fAJ (DIJ + DJI) + sum_B fAB (DIB + DBI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 1, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'AI <-- 2 fAI */ dpd_file2_axpy(&F, &I, 2.0, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ai <-- sum_j faj (Dij + Dji) + sum_b fab (Dib + Dbi) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_contract222(&F, &D, &I, 1, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'ai <-- 2 fai */ dpd_file2_axpy(&F, &I, 2.0, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_JK <AJ||IK> (D_JK + D_KJ) + sum_jk <Aj|Ik> (D_jk + D_kj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_JK <AJ||IK> (D_JK + D_KJ) + sum_jk <Aj|Ik> (D_jk + D_kj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ai <-- sum_jk <aj||ik> (D_jk + D_kj) + sum_jk <aJ|iK> (D_JK + D_KJ) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_JK <AJ||IK> (D_JK + D_KJ) + sum_jk <Aj|Ik> (D_jk + D_kj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ai <-- sum_jk <aj||ik> (D_jk + D_kj) + sum_jk <aJ|iK> (D_JK + D_KJ) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Eints, CC_EINTS, 0, 24, 22, 24, 22, 0, "E <Ia|Jk>"); dpd_dot13(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_dot13(&D, &Eints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Eints); dpd_file2_close(&D); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- - sum_JB <JA||IB> (D_JB + D_BJ) + sum_jb <Ij|Ab> (D_jb + D_bj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- - sum_JB <JA||IB> (D_JB + D_BJ) + sum_jb <Ij|Ab> (D_jb + D_bj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- - sum_jb <ja||ib> (D_jb + D_bj) + sum_JB <iJ|aB> (D_JB + D_BJ) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- - sum_JB <JA||IB> (D_JB + D_BJ) + sum_jb <Ij|Ab> (D_jb + D_bj) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- - sum_jb <ja||ib> (D_jb + D_bj) + sum_JB <iJ|aB> (D_JB + D_BJ) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot14(&D, &Cints, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_BJ <IJ||AB> (D_BJ + D_JB) + sum_bj <Ij|Ab> (D_bj + D_jb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_BJ <IJ||AB> (D_BJ + D_JB) + sum_bj <Ij|Ab> (D_bj + D_jb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- sum_bj <ij||ab> (D_bj + D_jb) + sum_BJ <iJ|aB> (D_BJ + D_JB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_BJ <IJ||AB> (D_BJ + D_JB) + sum_bj <Ij|Ab> (D_bj + D_jb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- sum_bj <ij||ab> (D_bj + D_jb) + sum_BJ <iJ|aB> (D_BJ + D_JB) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Dints, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Dints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_BC <IC||AB> (D_BC + D_CB) + sum_bc <Ib|Ac>(D_bc + D_cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_BC <IC||AB> (D_BC + D_CB) + sum_bc <Ib|Ac>(D_bc + D_cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ai <-- sum_bc <ic||ab> (D_bc + D_cb) + sum_BC <iB|aC>(D_BC + D_CB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_BC <IC||AB> (D_BC + D_CB) + sum_bc <Ib|Ac>(D_bc + D_cb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ai <-- sum_bc <ic||ab> (D_bc + D_cb) + sum_BC <iB|aC>(D_BC + D_CB) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_dot24(&D, &Fints, &I, 0, 1, 1.0, 1.0); dpd_dot24(&D, &Fints, &I, 1, 1, 1.0, 1.0); dpd_buf4_close(&Fints); dpd_file2_close(&D); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_JKL <AJ||KL> G(IJ,KL) + 2 sum_jKl <Aj|Kl> G(Ij,Kl) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijkl - Gijlk", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 0, "2 Gijkl - Gijlk", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "2 Gijkl - Gijlk"); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_JKL <AJ||KL> G(IJ,KL) + 2 sum_jKl <Aj|Kl> G(Ij,Kl) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "GIJKL"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ai <-- sum_jkl <aj||kl> G(ij,kl) + 2 sum_JkL <Lk|Ja> G(Lk,Ji) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Eints, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "Gijkl"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_JKL <AJ||KL> G(IJ,KL) + 2 sum_jKl <Aj|Kl> G(Ij,Kl) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Eints, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "GIJKL"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ai <-- sum_jkl <aj||kl> G(ij,kl) + 2 sum_JkL <Lk|Ja> G(Lk,Ji) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Eints, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 12, 12, 12, 0, "Gijkl"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- 2 sum_JKB <JA||KB> G(JI,KB) + 2 sum_jkB <jA|kB> G(jI,kB) + 2 sum_jKb <Kj|Ab> (Aj,Kb) G(Ij,Kb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 11, 10, 11, 10, 0, "D <ij|ab> (aj,ib)"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- 2 sum_JKB <JA||KB> G(JI,KB) + 2 sum_jkB <jA|kB> G(jI,kB) + 2 sum_jKb <Kj|Ab> (Aj,Kb) G(Ij,Kb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&Dints, CC_TMP0, rqps, 11, 10, "D <ij|ab> (aj,ib)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 11, 10, 11, 10, 0, "D <ij|ab> (aj,ib)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- 2 sum_jkb <ja||kb> G(ji,kb) + 2 sum_JKb <jA|Kb> G(Ji,Kb) + 2 sum_JkB <kJ|aB> (aJ,kB) G(iJ,kB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); /* This sorted D-group is formed in the last code block */ dpd_buf4_init(&Dints, CC_TMP0, 0, 11, 10, 11, 10, 0, "D <ij|ab> (aj,ib)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- 2 sum_JKB <JA||KB> G(JI,KB) + 2 sum_jkB <jA|kB> G(jI,kB) + 2 sum_jKb <Kj|Ab> (Aj,Kb) G(Ij,Kb) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_sort(&Dints, CC_TMP0, rqps, 26, 24, "D <Ij|Ab> (Aj,Ib)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 26, 24, 26, 24, 0, "D <Ij|Ab> (Aj,Ib)"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- 2 sum_jkb <ja||kb> G(ji,kb) + 2 sum_JKb <Ja|Kb> G(Ji,Kb) + 2 sum_JkB <kJ|aB> (aJ,kB) G(iJ,kB) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Cints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_sort(&Dints, CC_TMP0, rqps, 25, 27, "D <iJ|aB> (aJ,iB)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 25, 27, 25, 27, 0, "D <iJ|aB> (aJ,iB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_BJK <JK||AB> G(JK,IB) + 2 sum_Jkb <Jk|Ab> G(Jk,Ib) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Dints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_BJK <JK||AB> G(JK,IB) + 2 sum_Jkb <Jk|Ab> G(Jk,Ib) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- sum_bjk <jk||ab> G(jk,ib) + 2 sum_jKB <jK|aB> G(jK,iB) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_BJK <JK||AB> G(JK,IB) + 2 sum_Jkb <Jk|Ab> G(Jk,Ib) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Dints, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ai <-- sum_bjk <jk||ab> G(jk,ib) + 2 sum_jKB <jK|aB> G(jK,iB) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Dints, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_JBC <JA||BC> G(JI,BC) + 2 sum_jbC <jA|bC> G(jI,bC) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_JBC <JA||BC> G(JI,BC) + 2 sum_jbC <jA|bC> G(jI,bC) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 0, 5, "GiJaB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GiJaB"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ai <-- sum_jbc <ja||bc> G(ji,bc) + 2 sum_JBc <Ja|Bc> G(Ji,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "Gijab"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_JBC <JA||BC> G(JI,BC) + 2 sum_jbC <jA|bC> G(jI,bC) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 23, 29, "GiJaB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 23, 29, 23, 29, 0, "GiJaB"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ai <-- sum_jbc <ja||bc> G(ji,bc) + 2 sum_JBc <Ja|Bc> G(Ji,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 17, 12, 17, 0, "Gijab"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Fints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- 2 sum_BJC <JC||AB> G(JC,IB) + 2 sum_bJc <Jc||Ab> G(Jc,Ib) + 2 sum_bjC <jC|bA> GjCIb(jC,bI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rsqp, 10, 11, "GIbjA (jA,bI)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 11, 10, 11, 0, "GIbjA (jA,bI)"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- 2 sum_BJC <JC||AB> G(JC,IB) + 2 sum_bJc <Jc||Ab> G(Jc,Ib) + 2 sum_bjC <jC|bA> GjCIb(jC,bI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rsqp, 10, 11, "GIbjA (jA,bI)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 11, 10, 11, 0, "GIbjA (jA,bI)"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ai <-- 2 sum_bjc <jc||ab> G(jc,ib) + 2 sum_BjC <jC||aB> G(jC,iB) + 2 sum_BJc <Jc|Ba> GJciB(Jc,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, rsqp, 10, 11, "GiBJa (Ja,Bi)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 11, 10, 11, 0, "GiBJa (Ja,Bi)"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- 2 sum_BJC <JC||AB> G(JC,IB) + 2 sum_bJc <Jc||Ab> G(Jc,Ib) + 2 sum_bjC <jC|bA> GjCIb(jC,bI) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, rsqp, 27, 25, "GIbjA (jA,bI)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 27, 25, 27, 25, 0, "GIbjA (jA,bI)"); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ai <-- 2 sum_bjc <jc||ab> G(jc,ib) + 2 sum_BjC <jC||aB> G(jC,iB) + 2 sum_BJc <Jc|Ba> GJciB(Jc,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract442(&Fints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, rsqp, 24, 26, "GiBJa (Ja,Bi)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 24, 26, 24, 26, 0, "GiBJa (Ja,Bi)"); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract442(&Fints, &G, &I, 3, 3, -2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'AI <-- sum_BCD <AB||CD> G(IB,CD) + 2 sum_bCd <Ab|Cd> G(Ib,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_sort(&G, CC_GAMMA, qpsr, 10, 5, "2 Giabc - Giacb"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 5, 10, 5, 0, "2 Giabc - Giacb"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'AI <-- sum_BCD <AB||CD> G(IB,CD) + 2 sum_bCd <Ab|Cd> G(Ib,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qprs, 10, 7, "GICAB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 7, 10, 7, 0, "GICAB"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GIcAb"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GIcAb"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ai <-- sum_bcd <ab||cd> G(ib,cd) + 2 sum_BcD <aB|cD> G(iB,cD) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qprs, 10, 7, "Gicab"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 7, 10, 7, 0, "Gicab"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GiCaB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GiCaB"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'AI <-- sum_BCD <AB||CD> G(IB,CD) + 2 sum_bCd <Ab|Cd> G(Ib,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qprs, 20, 7, "GICAB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 20, 7, 20, 7, 0, "GICAB"); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 7, 5, 5, 1, "B <AB|CD>"); dpd_contract442(&Bints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 24, 28, "GIcAb"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 24, 28, 24, 28, 0, "GIcAb"); dpd_buf4_init(&Bints, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ai <-- sum_bcd <ab||cd> G(ib,cd) + 2 sum_BcD <Cd|Ba> G(Cd,Bi) */ dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qprs, 30, 17, "Gicab"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 30, 17, 30, 17, 0, "Gicab"); dpd_buf4_init(&Bints, CC_BINTS, 0, 15, 17, 15, 15, 1, "B <ab|cd>"); dpd_contract442(&Bints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, rspq, 28, 26, "GAbCi"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 28, 26, 28, 26, 0, "GAbCi"); dpd_buf4_init(&Bints, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract442(&Bints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&Bints); dpd_buf4_close(&G); dpd_file2_close(&I); } } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/idx_error.cc�����������������������������������������������������������������0000644�0001015�0000765�00000001323�11112564564�016035� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <psifiles.h> namespace psi { namespace ccdensity { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile) { fprintf(outfile, "\n\tDPD Parameter Error in %s\n", message); fprintf(outfile, "\t-------------------------------------------------\n"); fprintf(outfile, "\t p q r s [ pq] [ rs] pq_symm rs_symm\n"); fprintf(outfile,"\t%5d %5d %5d %5d [%5d] [%5d] %1d %1d\n", p,q,r,s, pq,rs,pq_sym,rs_sym); exit(PSI_RETURN_FAILURE); } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/idx_permute.cc���������������������������������������������������������������0000644�0001015�0000765�00000010510�11112564564�016363� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libiwl/iwl.h> #include <libdpd/dpd.h> namespace psi { namespace ccdensity { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile); void idx_permute(dpdfile4 *File, struct iwlbuf *OutBuf, int **bucket_map, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile) { int p_sym, q_sym, r_sym, s_sym; int pq_sym, rs_sym, rq_sym, ps_sym, qp_sym, sp_sym, sr_sym, qr_sym; int pq, rs, rq, ps, qp, sr, qr, sp; int perm_pq, perm_rs; dpdparams4 *Params; int this_bucket; Params = File->params; perm_pq = Params->perm_pq; perm_rs = Params->perm_rs; /* Get the orbital symmetries */ p_sym = Params->psym[p]; q_sym = Params->qsym[q]; r_sym = Params->rsym[r]; s_sym = Params->ssym[s]; /* Go through the allowed permutations --- NB these are Dirac permutations */ /* Get the left and right symmetry blocks */ pq_sym = p_sym^q_sym; rs_sym = r_sym^s_sym; /* Get the row and column indices and assign the value */ pq = Params->rowidx[p][q]; rs = Params->colidx[r][s]; if((pq >= Params->rowtot[pq_sym]) || (rs >= Params->coltot[rs_sym])) idx_error("Params_make: pq, rs", p,q,r,s,pq,rs,pq_sym,rs_sym,outfile); this_bucket = bucket_map[p][q]; iwl_buf_wrt_val(&OutBuf[this_bucket], p, q, r, s, value, 0, outfile, 0); if(perm_pr) { rq_sym = r_sym^q_sym; ps_sym = p_sym^s_sym; rq = Params->rowidx[r][q]; ps = Params->colidx[p][s]; if((rq >= Params->rowtot[rq_sym]) || (ps >= Params->coltot[ps_sym])) idx_error("Params_make: rq, ps", p,q,r,s,rq,ps,rq_sym,ps_sym,outfile); this_bucket = bucket_map[r][q]; iwl_buf_wrt_val(&OutBuf[this_bucket], r, q, p, s, value, 0, outfile, 0); } if(perm_qs) { ps_sym = p_sym^s_sym; rq_sym = r_sym^q_sym; ps = Params->rowidx[p][s]; rq = Params->colidx[r][q]; if((ps >= Params->rowtot[ps_sym]) || (rq >= Params->coltot[rq_sym])) idx_error("Params_make: ps, rq", p,q,r,s,ps,rq,ps_sym,rq_sym,outfile); this_bucket = bucket_map[p][s]; iwl_buf_wrt_val(&OutBuf[this_bucket], p, s, r, q, value, 0, outfile, 0); } if(perm_pr && perm_qs) { rs_sym = r_sym^s_sym; pq_sym = p_sym^q_sym; rs = Params->rowidx[r][s]; pq = Params->colidx[p][q]; if((rs >= Params->rowtot[rs_sym]) || (pq >= Params->coltot[pq_sym])) idx_error("Params_make: rs, pq", p,q,r,s,rs,pq,rs_sym,pq_sym,outfile); this_bucket = bucket_map[r][s]; iwl_buf_wrt_val(&OutBuf[this_bucket], r, s, p, q, value, 0, outfile, 0); } if(perm_prqs) { qp_sym = q_sym^p_sym; sr_sym = s_sym^r_sym; qp = Params->rowidx[q][p]; sr = Params->colidx[s][r]; if((qp >= Params->rowtot[qp_sym]) || (sr >= Params->coltot[sr_sym])) idx_error("Params_make: qp, sr", p,q,r,s,qp,sr,qp_sym,sr_sym,outfile); this_bucket = bucket_map[q][p]; iwl_buf_wrt_val(&OutBuf[this_bucket], q, p, s, r, value, 0, outfile, 0); if(perm_pr) { qr_sym = q_sym^r_sym; sp_sym = s_sym^p_sym; qr = Params->rowidx[q][r]; sp = Params->colidx[s][p]; if((qr >= Params->rowtot[qr_sym])||(sp >= Params->coltot[sp_sym])) idx_error("Params_make: qr, sp", p,q,r,s,qr,sp,qr_sym,sp_sym, outfile); this_bucket = bucket_map[q][r]; iwl_buf_wrt_val(&OutBuf[this_bucket], q, r, s, p, value, 0, outfile, 0); } if(perm_qs) { sp_sym = s_sym^p_sym; qr_sym = q_sym^r_sym; sp = Params->rowidx[s][p]; qr = Params->colidx[q][r]; if((sp >= Params->rowtot[sp_sym])||(qr >= Params->coltot[qr_sym])) idx_error("Params_make: sp, qr", p,q,r,s,sp,qr,sp_sym,qr_sym, outfile); this_bucket = bucket_map[s][p]; iwl_buf_wrt_val(&OutBuf[this_bucket], s, p, q, r, value, 0, outfile, 0); } if(perm_pr && perm_qs) { sr_sym = s_sym^r_sym; qp_sym = q_sym^p_sym; sr = Params->rowidx[s][r]; qp = Params->colidx[q][p]; if((sr >= Params->rowtot[sr_sym])||(qp >= Params->coltot[qp_sym])) idx_error("Params_make: sr, qp", p,q,r,s,sr,qp,sr_sym,qp_sym, outfile); this_bucket = bucket_map[s][r]; iwl_buf_wrt_val(&OutBuf[this_bucket], s, r, q, p, value, 0, outfile, 0); } } } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Iia.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000067651�11027011315�014544� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* Iia(): Build the occupied-virtual block of the orbital Lagrangian ** using the expression given in lag.c. ** ** Note that the code currently produces only the unique I_IJ terms, ** but the actual contractions still need to be spin-adapted for ** greater efficiency. ** ** TDC, 2/2008 ** */ void Iia(struct RHO_Params rho_params) { dpdfile2 F, D, I; dpdbuf4 G, Aints, Fints, Eints, Dints, Cints; if(params.ref == 0) { /** RHF **/ /* I'IA <-- sum_J fIJ (DAJ + DJA) + sum_B fIB (DAB + DBA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- sum_J fIJ (DAJ + DJA) + sum_B fIB (DAB + DBA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ia <-- sum_j fij (Daj + Dja) + sum_b fib (Dab + Dba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- sum_J fIJ (DAJ + DJA) + sum_B fIB (DAB + DBA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ia <-- sum_j fij (Daj + Dja) + sum_b fib (Dab + Dba) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_file2_init(&F, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- sum_JKL <LK||JI> G(LK,JA) + 2 sum_jKl <lK|jI> G(lK,jA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&Aints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- sum_JKL <LK||JI> G(LK,JA) + 2 sum_jKl <lK|jI> G(lK,jA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Aints, CC_AINTS, 0, 2, 0, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); /* I'ia <-- sum_jkl <lk||ji> G(lk,ja) + 2 sum_JkL <Lk|Ji> G(Lk,Ja) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&Aints, CC_AINTS, 0, 2, 0, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- sum_JKL <LK||JI> G(LK,JA) + 2 sum_jKl <lK|jI> G(lK,jA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Aints, CC_AINTS, 0, 2, 0, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_sort(&Aints, CC_AINTS, qpsr, 23, 23, "A <iJ|kL>"); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 23, 23, 23, 23, 0, "A <iJ|kL>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); /* I'ia <-- sum_jkl <lk||ji> G(lk,ja) + 2 sum_JkL <Lk|Ji> G(Lk,Ja) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&Aints, CC_AINTS, 0, 12, 10, 10, 10, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Aints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- sum_BCD <IB||CD> G(AB,CD) + 2 sum_bCd <Ib|Cd> G(Ab,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gabcd - Gabdc", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 5, 5, "2 Gabcd - Gabdc", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "2 Gabcd - Gabdc"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- sum_BCD <IB||CD> G(AB,CD) + 2 sum_bCd <Ib|Cd> G(Ab,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "GABCD"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ia <-- sum_bcd <ib||cd> G(ab,cd) + 2 sum_BcD <Dc|Bi> G(Dc,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "Gabcd"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&Fints, CC_TMP0, srqp, 5, 11, "F <cb|ai>"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 5, 11, 5, 11, 0, "F <cb|ai>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- sum_BCD <IB||CD> G(AB,CD) + 2 sum_bCd <Ib|Cd> G(Ab,Cd) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 7, 7, 7, 0, "GABCD"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ia <-- sum_bcd <ib||cd> G(ab,cd) + 2 sum_BcD <Dc|Bi> G(Dc,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 15, 17, 17, 17, 0, "Gabcd"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_sort(&Fints, CC_TMP0, srqp, 28, 26, "F <Cb|Ai>"); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_TMP0, 0, 28, 26, 28, 26, 0, "F <Cb|Ai>"); dpd_buf4_init(&G, CC_GAMMA, 0, 28, 28, 28, 28, 0, "GAbCd"); dpd_contract442(&Fints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- 2 sum_JKB <JI||KB> G(JA,KB) + 2 sum_jKb <Ij|Kb> G(Aj,Kb) + 2 sum_jkB <jI|kB> G(jA,kB) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, qprs, 11, 10, "GiBJa (Bi,Ja)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 11, 10, 11, 10, 0, "GiBJa (Bi,Ja)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- 2 sum_JKB <JI||KB> G(JA,KB) + 2 sum_jKb <Ij|Kb> G(Aj,Kb) + 2 sum_jkB <jI|kB> G(jA,kB) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, qprs, 11, 10, "GiBJa (Bi,Ja)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 11, 10, 11, 10, 0, "GiBJa (Bi,Ja)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ia <-- 2 sum_jkb <ji||kb> G(ja,kb) + 2 sum_JkB <iJ|kB> G(aJ,kB) + 2 sum_JKb <Ji|kB> G(Ja,Kb) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, qprs, 11, 10, "GIbjA (bI,jA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 11, 10, 11, 10, 0, "GIbjA (bI,jA)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- 2 sum_JKB <JI||KB> G(JA,KB) + 2 sum_jKb <Ij|Kb> G(Aj,Kb) + 2 sum_jkB <jI|kB> G(jA,kB) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, qprs, 26, 24, "GiBJa (Bi,Ja)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 26, 24, 26, 24, 0, "GiBJa (Bi,Ja)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract442(&Eints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); /* I'ia <-- 2 sum_jkb <ji||kb> G(ja,kb) + 2 sum_JkB <iJ|kB> G(aJ,kB) + 2 sum_JKb <Ji|Kb> G(Ja,Kb) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, qprs, 25, 27, "GIbjA (bI,jA)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 25, 27, 25, 27, 0, "GIbjA (bI,jA)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract442(&Eints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- sum_BJK <JK||IB> G(JK,AB) + 2 sum_bJk <Jk|Ib> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- sum_BJK <JK||IB> G(JK,AB) + 2 sum_bJk <Jk|Ib> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ia <-- sum_bjk <jk||ib> G(jk,ab) + 2 sum_BjK <Kj|Bi> G(Kj,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "Gijab"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 0, 5, "GjIbA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GjIbA"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- sum_BJK <JK||IB> G(JK,AB) + 2 sum_bJk <Jk|Ib> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 5, 2, 7, 0, "GIJAB"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ia <-- sum_bjk <jk||ib> G(jk,ab) + 2 sum_BjK <Kj|Bi> G(Kj,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&Eints, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 15, 12, 17, 0, "Gijab"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Eints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- sum_JBC <IJ||BC> G(AJ,BC) + 2 sum_jBc <Ij|Bc> G(Aj,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Dints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- sum_JBC <IJ||BC> G(AJ,BC) + 2 sum_jBc <Ij|Bc> G(Aj,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ia <-- sum_jbc <ij||bc> G(aj,bc) + 2 sum_JbC <iJ|bC> G(aJ,bC) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- sum_JBC <IJ||BC> G(AJ,BC) + 2 sum_jBc <Ij|Bc> G(Aj,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ia <-- sum_jbc <ij||bc> G(aj,bc) + 2 sum_JbC <iJ|bC> G(aJ,bC) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&Dints, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IA <-- 2 sum_BJC <JC||IB> G(JC,AB) + 2 sum_bJc <Jc|Ib> G(Jc,Ab) + 2 sum_bjC <Cj|Ib> G(Cj,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_init(&Cints, CC_CINTS, 0, 11, 11, 11, 11, 0, "C <ai|bj>"); dpd_contract442(&Cints, &G, &I, 3, 3, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 11, 10, 11, 10, 0, "D <ij|ab> (aj,ib)"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Dints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IA <-- 2 sum_BJC <JC||IB> G(JC,AB) + 2 sum_bJc <Jc|Ib> G(Jc,Ab) + 2 sum_bjC <Cj|Ib> G(Cj,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GICBA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GICBA"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GIcBa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GIcBa"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&Dints, CC_TMP0, spqr, 11, 10, "D <ij|ab> (bi,ja)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 11, 10, 11, 10, 0, "D <ij|ab> (bi,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ia <-- 2 sum_bjc <jc||ib> G(jc,ab) + 2 sum_BjC <jC|iB> G(jC,aB) + 2 sum_BJc <cJ|iB> G(cJ,aB) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "Gicba"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "Gicba"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GiCbA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GiCbA"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); /* This set of sorted D-integrals is generated in the previous code block */ dpd_buf4_init(&Dints, CC_TMP0, 0, 11, 10, 11, 10, 0, "D <ij|ab> (bi,ja)"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IA <-- 2 sum_BJC <JC||IB> G(JC,AB) + 2 sum_bJc <Jc|Ib> G(Jc,Ab) + 2 sum_bjC <Cj|Ib> G(Cj,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 20, 5, "GICBA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 20, 5, 20, 5, 0, "GICBA"); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 24, 28, "GIcBa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 24, 28, 24, 28, 0, "GIcBa"); dpd_buf4_init(&Cints, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_sort(&Dints, CC_TMP0, rqps, 26, 24, "D <Ij|Ab> (Aj,Ib)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 26, 24, 26, 24, 0, "D <Ij|Ab> (Aj,Ib)"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ia <-- 2 sum_bjc <jc||ib> G(jc,ab) + 2 sum_BjC <jC|iB> G(jC,aB) + 2 sum_BJc <cJ|iB> G(cJ,aB) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 30, 15, "Gicba"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 30, 15, 30, 15, 0, "Gicba"); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 27, 29, "GiCbA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 27, 29, 27, 29, 0, "GiCbA"); dpd_buf4_init(&Cints, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract442(&Cints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Cints); dpd_buf4_close(&G); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_sort(&Dints, CC_TMP0, rqps, 25, 27, "D <iJ|aB> (aJ,iB)"); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_TMP0, 0, 25, 27, 25, 27, 0, "D <iJ|aB> (aJ,iB)"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_contract442(&Dints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Iij.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000125641�11027011315�014547� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* Iij(): Build the occupied-occupied block of the orbital Lagrangian ** using the expression given in lag.c. Note that we include an ** addition term here referred to as the reference contribution, ** 2*fij. This comes from the general spin-orbital SCF gradient ** expression and is present for all reference types (though for ** canonical unperturbed orbitals, only the diagonal elements ** contribute, of course). ** ** Note that the code currently produces only the unique I_IJ terms, ** but the actual contractions still need to be spin-adapted for ** greater efficiency. ** ** TDC, 2/2008 */ void Iij(struct RHO_Params rho_params) { dpdfile2 I, F, D; dpdbuf4 G, Aints, Fints, Dints, Cints, Eints; if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_K fIK (DJK + DKJ) + sum_A fIA (DJA + DAJ) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'IJ <-- 2 fIJ */ dpd_file2_axpy(&F, &I, 2.0, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_K fIK (DJK + DKJ) + sum_A fIA (DJA + DAJ) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'IJ <-- 2 fIJ */ dpd_file2_axpy(&F, &I, 2.0, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ij <-- sum_k fik (Djk + Dkj) + sum_a fia (Dja + Daj) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'ij <-- 2 fij */ dpd_file2_axpy(&F, &I, 2.0, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_K fIK (DJK + DKJ) + sum_A fIA (DJA + DAJ) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'IJ <-- 2 fIJ */ dpd_file2_axpy(&F, &I, 2.0, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); /* I'ij <-- sum_k fik (Djk + Dkj) + sum_a fia (Dja + Daj) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_file2_init(&F, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 0.0); dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); /* Add reference contribution: I'ij <-- 2 fij */ dpd_file2_axpy(&F, &I, 2.0, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_close(&F); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_KL <IK||JL> (D_KL + D_LK) + sum_kl <Ik|Jl> (D_kl + D_lk) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_KL <IK||JL> (D_KL + D_LK) + sum_kl <Ik|Jl> (D_kl + D_lk) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ij <-- sum_kl <ik||jl> (D_kl + D_lk) + sum_KL <iK|jL> (D_KL + D_LK) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_KL <IK||JL> (D_KL + D_LK) + sum_kl <Ik|Jl> (D_kl + D_lk) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <IJ|KL>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ij <-- sum_kl <ik||jl> (D_kl + D_lk) + sum_KL <iK|jL> (D_KL + D_LK) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 10, 10, 10, 10, 1, "A <ij|kl>"); dpd_dot24(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_dot13(&D, &Aints, &I, 0, 0, 1.0, 1.0); dpd_dot13(&D, &Aints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Aints); dpd_file2_close(&D); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_KA <IK||JA> (D_KA + D_AK) + sum_ka <Ik|Ja> (D_ka + D_ak) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_KA <IK||JA> (D_KA + D_AK) + sum_ka <Ik|Ja> (D_ka + D_ak) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- sum_ka <ik||ja> (D_ka + D_ak) + sum_KA <iK|jA> (D_KA + D_AK) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_KA <IK||JA> (D_KA + D_AK) + sum_ka <Ik|Ja> (D_ka + D_ak) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- sum_ka <ik||ja> (D_ka + D_ak) + sum_KA <iK|jA> (D_KA + D_AK) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_AK <JK||IA> (D_AK + D_KA) + sum_ak <Jk|Ia> (D_ak + D_ka) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_AK <JK||IA> (D_AK + D_KA) + sum_ak <Jk|Ia> (D_ak + D_ka) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- sum_ak <jk||ia> (D_ak + D_ka) + sum_AK <jK|iA> (D_AK + D_KA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_AK <JK||IA> (D_AK + D_KA) + sum_ak <Jk|Ia> (D_ak + D_ka) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- sum_ak <jk||ia> (D_ak + D_ka) + sum_AK <jK|iA> (D_AK + D_KA) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_dot24(&D, &Eints, &I, 0, 1, 1.0, 1.0); dpd_file2_close(&D); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_AB <IA||JB> (D_AB + D_BA) + sum_ab <Ia|Jb> (D_ab + D_ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_AB <IA||JB> (D_AB + D_BA) + sum_ab <Ia|Jb> (D_ab + D_ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ij <-- sum_ab <ia||jb> (D_ab + D_ba) + sum_AB <iA|jB> (D_AB + D_BA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_AB <IA||JB> (D_AB + D_BA) + sum_ab <Ia|Jb> (D_ab + D_ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_close(&I); /* I'ij <-- sum_ab <ia||jb> (D_ab + D_ba) + sum_AB <iA|jB> (D_AB + D_BA) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&Cints, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_dot24(&D, &Cints, &I, 0, 0, 1.0, 1.0); dpd_dot24(&D, &Cints, &I, 1, 0, 1.0, 1.0); dpd_buf4_close(&Cints); dpd_file2_close(&D); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- 2 [ 2 (Gjklm - Gjkml) <ik|lm>] */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijkl - Gijlk", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 0, "2 Gijkl - Gijlk", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "2 Gijkl - Gijlk"); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Aints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_KLM <IK||LM> G(JK,LM) + 2 sum_kLm <Ik|Lm> G(Jk,Lm) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "GIJKL"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); /* I'ij <-- sum_klm <ik||lm> G(jk,lm) + 2 sum_KlM <Ki|Ml> G(Kj,Ml) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "Gijkl"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_contract442(&Aints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_KLM <IK||LM> G(JK,LM) + 2 sum_kLm <Ik|Lm> G(Jk,Lm) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 2, 2, 2, 0, "GIJKL"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); /* I'ij <-- sum_klm <ik||lm> G(jk,lm) + 2 sum_KlM <Ki|Ml> G(Kj,Ml) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Aints, CC_AINTS, 0, 10, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 12, 12, 12, 0, "Gijkl"); dpd_contract442(&Aints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_buf4_init(&Aints, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 22, 22, 22, 0, "GIjKl"); dpd_contract442(&Aints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Aints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_ABC <IA||BC> G(JA,BC) + 2 sum_AbC <aI|bC> G(aJ,bC) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gciab - Gciba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 11, 5, "2 Gciab - Gciba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "2 Gciab - Gciba"); dpd_buf4_sort(&G, CC_GAMMA, qpsr, 10, 5, "2 Giabc - Giacb"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 5, 10, 5, 0, "2 Giabc - Giacb"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Fints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_ABC <IA||BC> G(JA,BC) + 2 sum_AbC <aI|bC> G(aJ,bC) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qprs, 10, 7, "GICAB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 7, 10, 7, 0, "GICAB"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GIcBa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GIcBa"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ij <-- sum_abc <ia||bcC> G(ja,bc) + 2 sum_AbC <Ai|Bc> G(Aj,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qprs, 10, 7, "Gicab"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 7, 10, 7, 0, "Gicab"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 10, 5, "GiCbA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 10, 5, 10, 5, 0, "GiCbA"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_ABC <IA||BC> G(JA,BC) + 2 sum_AbC <aI|bC> G(aJ,bC) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_sort(&G, CC_TMP0, qprs, 20, 7, "GICAB"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 20, 7, 20, 7, 0, "GICAB"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 24, 28, "GIcBa"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 24, 28, 24, 28, 0, "GIcBa"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); /* I'ij <-- sum_abc <ia||bc> G(ja,bc) + 2 sum_AbC <Ai|Bc> G(Aj,Bc) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&G, CC_GAMMA, 0, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_sort(&G, CC_TMP0, qprs, 30, 17, "Gicab"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 30, 17, 30, 17, 0, "Gicab"); dpd_contract442(&Fints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_buf4_init(&Fints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&G, CC_GAMMA, 0, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_sort(&G, CC_TMP0, qpsr, 27, 29, "GiCbA"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 27, 29, 27, 29, 0, "GiCbA"); dpd_contract442(&Fints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Fints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- sum_KAB <IK||AB> G(JK,AB) + 2 sum_kAb <Ik|Ab> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijab - Gijba", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, pqsr, 0, 5, "2 Gijab - Gijba", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "2 Gijab - Gijba"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&Dints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- sum_KAB <IK||AB> G(JK,AB) + 2 sum_kAb <Ik|Ab> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ij <-- sum_kab <ik||ab> G(jk,ab) + 2 sum_KaB <iK|aB> G(jK,aB) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "Gijab"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- sum_KAB <IK||AB> G(JK,AB) + 2 sum_kAb <Ik|Ab> G(Jk,Ab) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 7, 2, 7, 0, "GIJAB"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ij <-- sum_kab <ik||ab> G(jk,ab) + 2 sum_KaB <iK|aB> G(jK,aB) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Dints, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 17, 12, 17, 0, "Gijab"); dpd_contract442(&Dints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); dpd_contract442(&Dints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- 2 sum_AKB <IA||KB> G(JA,KB) + 2 sum_aKb <Ia|Kb> G(Ja,Kb) - 2 sum_akB <Ik|Ba> GJakB(Jk,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, prsq, 0, 5, "GIbjA (Ij,Ab)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIbjA (Ij,Ab)"); dpd_contract442(&Dints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- 2 sum_AKB <IA||KB> G(JA,KB) + 2 sum_aKb <Ia|Kb> G(Ja,Kb) - 2 sum_akB <Ik|Ba> GJakB(Jk,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, prsq, 0, 5, "GIbjA (Ij,Ab)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GIbjA (Ij,Ab)"); dpd_contract442(&Dints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ij <-- 2 sum_akb <ia||kb> G(ja,kb) + 2 sum_AkB <iA|kB> G(jA,kB) + 2 sum_AKb <iK|bA> GjAKb(jK,bA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, prsq, 0, 5, "GiBJa (iJ,aB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 0, 5, 0, 5, 0, "GiBJa (iJ,aB)"); dpd_contract442(&Dints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- 2 sum_AKB <IA||KB> G(JA,KB) + 2 sum_aKb <Ia|Kb> G(Ja,Kb) - 2 sum_akB <Ik|Ba> GJakB(Jk,Ba) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Cints, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 20, 20, 20, 20, 0, "GIBJA"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 24, 24, 24, 0, "GIbJa"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&G, CC_GAMMA, 0, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_sort(&G, CC_TMP0, prsq, 22, 28, "GIbjA (Ij,Ab)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 22, 28, 22, 28, 0, "GIbjA (Ij,Ab)"); dpd_contract442(&Dints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); /* I'ij <-- 2 sum_akb <ia||kb> G(ja,kb) + 2 sum_AkB <iA|kB> G(jA,kB) + 2 sum_AKb <iK|bA> GjAKb(jK,bA) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Cints, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_init(&G, CC_GAMMA, 0, 30, 30, 30, 30, 0, "Gibja"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Cints, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 27, 27, 27, 0, "GiBjA"); dpd_contract442(&Cints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Cints); dpd_buf4_init(&Dints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&G, CC_GAMMA, 0, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_sort(&G, CC_TMP0, prsq, 23, 29, "GiBJa (iJ,aB)"); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_TMP0, 0, 23, 29, 23, 29, 0, "GiBJa (iJ,aB)"); dpd_contract442(&Dints, &G, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Dints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- 2 sum_KLA <IK||LA> G(JK,LA) + 2 sum_kLa <Ik|La> G(Jk,La) + 2 sum_kAl <kI|lA> G(kJ,lA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- 2 sum_KLA <IK||LA> G(JK,LA) + 2 sum_kLa <Ik|La> G(Jk,La) + 2 sum_kAl <kI|lA> G(kJ,lA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- 2 sum_kla <ik||la> G(jk,la) + 2 sum_KlA <iK|lA> G(jK,lA) + 2 sum_KaL <Ki|La> G(Kj,La) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- 2 sum_KLA <IK||LA> G(JK,LA) + 2 sum_kLa <Ik|La> G(Jk,La) + 2 sum_kAl <kI|lA> G(kJ,lA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- 2 sum_kla <ik||la> G(jk,la) + 2 sum_KlA <iK|lA> G(jK,lA) + 2 sum_KaL <Ki|La> G(Kj,La) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 0, 0, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 1, 1, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } if(params.ref == 0) { /** RHF **/ /* I'IJ <-- 2 sum_AKL <K>L||IA> G(K>L,JA) + 2 sum_aKl <Kl|Ia> G(Kl,Ja) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scmcopy(&G, CC_GAMMA, "2 Gijka - Gjika", 2); dpd_buf4_sort_axpy(&G, CC_GAMMA, qprs, 0, 10, "2 Gijka - Gjika", -1); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "2 Gijka - Gjika"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&Eints); dpd_buf4_close(&G); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ /* I'IJ <-- 2 sum_AKL <K>L||IA> G(K>L,JA) + 2 sum_aKl <Kl|Ia> G(Kl,Ja) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- 2 sum_akl <k>l||ia> G(k>l,ja) + 2 sum_AkL <kL|iA> G(kL,jA) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ /* I'IJ <-- 2 sum_AKL <K>L||IA> G(K>L,JA) + 2 sum_aKl <Kl|Ia> G(Kl,Ja) */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_buf4_init(&Eints, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 20, 2, 20, 0, "GIJKA"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&G, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); /* I'ij <-- 2 sum_akl <k>l||ia> G(k>l,ja) + 2 sum_AkL <kL|iA> G(kL,jA) */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_buf4_init(&Eints, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&G, CC_GAMMA, 0, 12, 30, 12, 30, 0, "Gijka"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_buf4_init(&Eints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&G, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); dpd_contract442(&Eints, &G, &I, 2, 2, 2.0, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Eints); dpd_file2_close(&I); } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/kinetic.cc�������������������������������������������������������������������0000644�0001015�0000765�00000007045�11027011315�015457� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Computes the kinetic energy and the virial ratio for CC wave functions. */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #define IOFF_MAX 32641 #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void kinetic(void) { int nmo, noei, stat, i, I, h, j, nclsd; int *order, *doccpi, *ioff; double junk, tcorr, vcorr, tref, vref, ttot, vtot; double *s, *t, **T, **S, **scf_pitzer, **scf_qt, **X; /* RHF/ROHF only for now */ if(params.ref == 2) return; /*** Build ioff ***/ ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; nmo = moinfo.nmo; noei = nmo * (nmo + 1)/2; /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); /* doccpi array must include frozen orbitals for reorder_qt() */ doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); /*** Reorder the SCF eigenvectors to QT ordering */ chkpt_init(PSIO_OPEN_OLD); scf_pitzer = chkpt_rd_scf(); chkpt_close(); scf_qt = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt[j][I] = scf_pitzer[j][i]; } /*** Transform the kinetic energy integrals to the MO basis ***/ t = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_SO_T,t,noei,0,0,outfile); s = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_SO_S,s,noei,0,0,outfile); T = block_matrix(nmo,nmo); S = block_matrix(nmo,nmo); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { T[i][j] = t[INDEX(i,j)]; S[i][j] = s[INDEX(i,j)]; } X = block_matrix(nmo,nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(T[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(T[0][0]),nmo); /*** Contract the correlated kinetic energy ***/ tcorr = 0.0; for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) tcorr += T[i][j] * moinfo.opdm[i][j]; /*** Compute the SCF kinetic energy ***/ tref = 0.0; nclsd = moinfo.nfzc + moinfo.nclsd; for(i=0; i < nclsd; i++) tref += T[i][i] * 2; for(i=nclsd; i < nclsd+moinfo.nopen; i++) tref += T[i][i]; /*** Compute the virial ratios ***/ ttot = tcorr + tref; vtot = moinfo.eref + moinfo.ecc - ttot; vref = moinfo.eref - tref; vcorr = moinfo.ecc - tcorr; fprintf(outfile,"\n\tVirial Theorem Data:\n"); fprintf(outfile, "\t--------------------\n"); fprintf(outfile,"\tKinetic energy (ref) = %20.15f\n", tref); fprintf(outfile,"\tKinetic energy (corr) = %20.15f\n", tcorr); fprintf(outfile,"\tKinetic energy (total) = %20.15f\n", ttot); fprintf(outfile,"\t-V/T (ref) = %20.15f\n", -vref/tref); fprintf(outfile,"\t-V/T (corr) = %20.15f\n", -vcorr/tcorr); fprintf(outfile,"\t-V/T (total) = %20.15f\n", -vtot/ttot); fflush(outfile); /*** Release memory ***/ free_block(X); free_block(T); free(t); free_block(scf_qt); free_block(scf_pitzer); free(doccpi); free(order); free(ioff); } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/lag.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000015735�11027011315�014601� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* lag(): Build the orbital Lagrangian, I'pq, defined in spin-orbitals ** as: ** ** I'pq = sum_r fpr (Dqr + Drq) + sum_rs <pr||qs> (Drs + Dsr) (q,occ) ** + sum_rst <pr||st> Gqrst + 2 fpq (q,occ) ** ** The orbital-response component of the gradient (for non-correlated ** orbitals) is defined as ** ** dE/dx <--- sum_pq I'pq U(x)pq ** ** where U(x)pq is the usual CPHF coefficient. Note, however, that ** the final expression we want involves not CPHF coefficients, but ** overlap derivatives. For example, in the occupied-occupied and ** virtual-virtual blocks, a choice of non-canonical perturbed ** orbitals allows the assignments ** ** U(x)ij = -1/2 S(x)ij and U(x)ab = -1/2 S(x)ab ** ** to be made. We also choose to incorporate the -1/2 prefactor ** into the Largrangian itself so the final orbital response ** expression will appear as ** ** dE/dx <--- sum_pq Ipq S(x)pq ** ** where Ipq is the "relaxed" Lagrangian (see relax_I.c). ** ** The final set of loops force the appropriate open-shell terms to ** zero for ROHF refs. (See the description of the treatment of ** open-shells in the ROHF-CCSD code as discussed in CCSORT for an ** explanation of why this is necessary.) */ void Iij(struct RHO_Params rho_params); void Iab(struct RHO_Params rho_params); void Iai(struct RHO_Params rho_params); void Iia(struct RHO_Params rho_params); void lag(struct RHO_Params rho_params) { int h, nirreps, i, j, a, b; int *occpi, *virtpi, *openpi; dpdfile2 I; Iij(rho_params); Iab(rho_params); Iai(rho_params); Iia(rho_params); /* Multiply all I'pq components by -1/2 for compatibility with the final gradient expression */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 3, 2, "I'ai"); dpd_file2_scm(&I, -0.5); dpd_file2_close(&I); } /* Now go through all terms involving open-shell orbitals and force the appropriate spin cases to zero. */ if(params.ref == 1) { /** ROHF **/ nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(i=(occpi[h]-openpi[h]); i < occpi[h]; i++) { for(j=(occpi[h]-openpi[h]); j < occpi[h]; j++) { I.matrix[h][i][j] = 0.0; } } for(i=(occpi[h]-openpi[h]); i < occpi[h]; i++) { for(j=0; j < occpi[h]; j++) { I.matrix[h][i][j] = 0.0; } } for(i=0; i < occpi[h]; i++) { for(j=(occpi[h]-openpi[h]); j < occpi[h]; j++) { I.matrix[h][i][j] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(a=(virtpi[h]-openpi[h]); a < virtpi[h]; a++) { for(b=(virtpi[h]-openpi[h]); b < virtpi[h]; b++) { I.matrix[h][a][b] = 0.0; } } for(a=(virtpi[h]-openpi[h]); a < virtpi[h]; a++) { for(b=0; b < virtpi[h]; b++) { I.matrix[h][a][b] = 0.0; } } for(a=0; a < virtpi[h]; a++) { for(b=(virtpi[h]-openpi[h]); b < virtpi[h]; b++) { I.matrix[h][a][b] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'AI"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(a=(virtpi[h]-openpi[h]); a < virtpi[h]; a++) { for(i=0; i < occpi[h]; i++) { I.matrix[h][a][i] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 1, 0, "I'ai"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { for(i=(occpi[h] - openpi[h]); i < occpi[h]; i++) { I.matrix[h][a][i] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { for(a=(virtpi[h] - openpi[h]); a < virtpi[h]; a++) { I.matrix[h][i][a] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) { for(i=(occpi[h] - openpi[h]); i < occpi[h]; i++) { for(a=0; a < virtpi[h]; a++) { I.matrix[h][i][a] = 0.0; } } } dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); } } }} // namespace psi::ccdensity �����������������������������������psi3/src/bin/ccdensity/ltdensity.cc�����������������������������������������������������������������0000644�0001015�0000765�00000071711�10757640026�016071� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void ltdensity_rohf(struct TD_Params S); void ltdensity_uhf(struct TD_Params S); void ltdensity_intermediates(struct TD_Params S); void sort_ltd_rohf(struct TD_Params S); void sort_ltd_uhf(struct TD_Params S); void ltdensity_rohf(struct TD_Params S) { dpdfile2 DAI, Dai, DIA, Dia, DIJ, DAB, Dij, Dab, TIA, Tia; dpdfile2 LIA, Lia, RIA, Ria, Int, XIJ, Xij, R1; dpdbuf4 T2, L2, R2, I2; dpdfile2 D, T1, L1, Z; if(S.irrep == 0) { dpd_file2_init(&D, CC_TMP, 0, 0, 0, "LTDIJ"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 0, 0, "LTDij"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 1, 1, "LTDAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 1, 1, "LTDab"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); } /* R_I^A */ dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_file2_copy(&R1, CC_TMP, "LTDIA"); dpd_file2_close(&R1); if(S.irrep == 0) { dpd_file2_init(&D, CC_TMP, 0, 0, 1, "LTDIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); } /* R_i^a */ dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "Ria"); dpd_file2_copy(&R1, CC_TMP, "LTDia"); dpd_file2_close(&R1); if(S.irrep == 0) { dpd_file2_init(&D, CC_TMP, 0, 0, 1, "LTDia"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(i,m)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_TMP, "LTDAI"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_copy(&L1, CC_TMP, "LTDai"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_scm(&L1, (1/S.R0)); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_scm(&L1, (1/S.R0)); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); } ltdensity_intermediates(S); dpd_file2_init(&TIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&RIA, CC_GR, S.irrep, 0, 1, "RIA"); dpd_file2_init(&Ria, CC_GR, S.irrep, 0, 1, "Ria"); dpd_file2_init(&LIA, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_GLG, 0, 0, 1, "Lia"); /* D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] */ dpd_file2_init(&DIJ, CC_TMP, S.irrep, 0, 0, "LTDIJ"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_OO"); dpd_file2_axpy(&Int, &DIJ, -1.0, 1); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_contract222(&TIA, &Int, &DIJ, 0, 0, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&DIJ); dpd_file2_init(&Dij, CC_TMP, S.irrep, 0, 0, "LTDij"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_oo"); dpd_file2_axpy(&Int, &Dij, -1.0, 1); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_contract222(&Tia, &Int, &Dij, 0, 0, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&Dij); /* D[a][b] = +LR_vv[a][b] + L2R1_ov[n][a] * t1[n][b] */ dpd_file2_init(&DAB, CC_TMP, S.irrep, 1, 1, "LTDAB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_VV"); dpd_file2_axpy(&Int, &DAB, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_contract222(&Int, &TIA, &DAB, 1, 1, 1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&DAB); dpd_file2_init(&Dab, CC_TMP, S.irrep, 1, 1, "LTDab"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_vv"); dpd_file2_axpy(&Int, &Dab, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_contract222(&Int, &Tia, &Dab, 1, 1, 1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&Dab); /* D[a][i] = +L2R1_ov[i][a] */ dpd_file2_init(&DAI, CC_TMP, S.irrep, 0, 1, "LTDAI"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_file2_axpy(&Int, &DAI, 1.0, 0); dpd_file2_close(&Int); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_TMP, S.irrep, 0, 1, "LTDai"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_file2_axpy(&Int, &Dai, 1.0, 0); dpd_file2_close(&Int); dpd_file2_close(&Dai); dpd_file2_init(&DIA, CC_TMP, S.irrep, 0, 1, "LTDIA"); dpd_file2_init(&Dia, CC_TMP, S.irrep, 0, 1, "LTDia"); /* D[i][a] = L1R2_ov[i][a] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L1R2_OV"); dpd_file2_axpy(&Int, &DIA, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L1R2_ov"); dpd_file2_axpy(&Int, &Dia, 1.0, 0); dpd_file2_close(&Int); /* - LR_OO[M][I] * t1[M][A] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_OO"); dpd_contract222(&Int, &TIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_oo"); dpd_contract222(&Int, &Tia, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - t1[I][E] * LR_vv[E][A] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_VV"); dpd_contract222(&TIA, &Int, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_vv"); dpd_contract222(&Tia, &Int, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - LT2_OO[M][I] * r1[M][A] */ dpd_file2_init(&Int, EOM_TMP, 0, 0, 0, "LT2_OO"); dpd_contract222(&Int, &RIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, 0, 0, 0, "LT2_oo"); dpd_contract222(&Int, &Ria, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - r1[I][E] * LT2_VV[E][A] */ dpd_file2_init(&Int, EOM_TMP, 0, 1, 1, "LT2_VV"); dpd_contract222(&RIA, &Int, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, 0, 1, 1, "LT2_vv"); dpd_contract222(&Ria, &Int, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); /* + L2R1_ov[M][E] * t2[i][m][a][e] */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_dot24(&Int, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_dot24(&Int, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_dot24(&Int, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_dot24(&Int, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); /* - (t1[i][e] * L2R1_ov[M][E]) * t1[m][a] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_file2_init(&XIJ, EOM_TMP, S.irrep, 0, 0, "XIJ"); dpd_contract222(&TIA, &Int, &XIJ, 0, 0, 1.0, 0.0); dpd_file2_close(&Int); dpd_file2_init(&XIJ, EOM_TMP, S.irrep, 0, 0, "XIJ"); dpd_contract222(&XIJ, &TIA, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&XIJ); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_file2_init(&Xij, EOM_TMP, S.irrep, 0, 0, "Xij"); dpd_contract222(&Tia, &Int, &Xij, 0, 0, 1.0, 0.0); dpd_file2_close(&Int); dpd_file2_init(&Xij, EOM_TMP, S.irrep, 0, 0, "Xij"); dpd_contract222(&Xij, &Tia, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Xij); dpd_file2_close(&DIA); dpd_file2_close(&Dia); dpd_file2_close(&TIA); dpd_file2_close(&Tia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); return; } void ltdensity_uhf(struct TD_Params S) { dpdfile2 DAI, Dai, DIA, Dia, DIJ, DAB, Dij, Dab, TIA, Tia; dpdfile2 LIA, Lia, RIA, Ria, Int, XIJ, Xij, R1; dpdbuf4 T2, L2, R2, I2; dpdfile2 D, T1, L1, Z; if(S.irrep == 0 ) { /* Symmetric Transition */ dpd_file2_init(&D, CC_TMP, 0, 0, 0, "LTDIJ"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 2, 2, "LTDij"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 1, 1, "LTDAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, 0, 3, 3, "LTDab"); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); } /* R_I^A */ dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_file2_copy(&R1, CC_TMP, "LTDIA"); dpd_file2_close(&R1); if(S.irrep == 0) { // Symmetric Transitions dpd_file2_init(&D, CC_TMP, 0, 0, 1, "LTDIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); } /* R_i^a */ dpd_file2_init(&R1, CC_GR, S.irrep, 2, 3, "Ria"); dpd_file2_copy(&R1, CC_TMP, "LTDia"); dpd_file2_close(&R1); if(S.irrep == 0) { /* Symmetric Transitions */ dpd_file2_init(&D, CC_TMP, 0, 2, 3, "LTDia"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Z, CC_TMP0, 0, 2, 2, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, 0, 2, 2, "Z(i,m)"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, 0, 3, 3, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_TMP, "LTDAI"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_copy(&L1, CC_TMP, "LTDai"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_scm(&L1, (1/S.R0)); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_scm(&L1, (1/S.R0)); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_scm(&L2, (1/S.R0)); dpd_buf4_close(&L2); } ltdensity_intermediates(S); dpd_file2_init(&TIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&RIA, CC_GR, S.irrep, 0, 1, "RIA"); dpd_file2_init(&Ria, CC_GR, S.irrep, 2, 3, "Ria"); dpd_file2_init(&LIA, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_GL, S.irrep, 2, 3, "Lia"); /* D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] */ dpd_file2_init(&DIJ, CC_TMP, S.irrep, 0, 0, "LTDIJ"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_OO"); dpd_file2_axpy(&Int, &DIJ, -1.0, 1); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_contract222(&TIA, &Int, &DIJ, 0, 0, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&DIJ); dpd_file2_init(&Dij, CC_TMP, S.irrep, 2, 2, "LTDij"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 2, "LR_oo"); dpd_file2_axpy(&Int, &Dij, -1.0, 1); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_contract222(&Tia, &Int, &Dij, 0, 0, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&Dij); /* D[a][b] = +LR_vv[a][b] + L2R1_ov[n][a] * t1[n][b] */ dpd_file2_init(&DAB, CC_TMP, S.irrep, 1, 1, "LTDAB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_VV"); dpd_file2_axpy(&Int, &DAB, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_contract222(&Int, &TIA, &DAB, 1, 1, 1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&DAB); dpd_file2_init(&Dab, CC_TMP, S.irrep, 3, 3, "LTDab"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 3, 3, "LR_vv"); dpd_file2_axpy(&Int, &Dab, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_contract222(&Int, &Tia, &Dab, 1, 1, 1.0, 1.0); dpd_file2_close(&Int); dpd_file2_close(&Dab); /* D[a][i] = +L2R1_ov[i][a] */ dpd_file2_init(&DAI, CC_TMP, S.irrep, 0, 1, "LTDAI"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_file2_axpy(&Int, &DAI, 1.0, 0); dpd_file2_close(&Int); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_TMP, S.irrep, 2, 3, "LTDai"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_file2_axpy(&Int, &Dai, 1.0, 0); dpd_file2_close(&Int); dpd_file2_close(&Dai); dpd_file2_init(&DIA, CC_TMP, S.irrep, 0, 1, "LTDIA"); dpd_file2_init(&Dia, CC_TMP, S.irrep, 2, 3, "LTDia"); /* D[i][a] = L1R2_ov[i][a] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L1R2_OV"); dpd_file2_axpy(&Int, &DIA, 1.0, 0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L1R2_ov"); dpd_file2_axpy(&Int, &Dia, 1.0, 0); dpd_file2_close(&Int); /* - LR_OO[M][I] * t1[M][A] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 0, "LR_OO"); dpd_contract222(&Int, &TIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 2, "LR_oo"); dpd_contract222(&Int, &Tia, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - t1[I][E] * LR_vv[E][A] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 1, 1, "LR_VV"); dpd_contract222(&TIA, &Int, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, S.irrep, 3, 3, "LR_vv"); dpd_contract222(&Tia, &Int, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - LT2_OO[M][I] * r1[M][A] */ dpd_file2_init(&Int, EOM_TMP, 0, 0, 0, "LT2_OO"); dpd_contract222(&Int, &RIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, 0, 2, 2, "LT2_oo"); dpd_contract222(&Int, &Ria, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&Int); /* - r1[I][E] * LT2_vv[E][A] */ dpd_file2_init(&Int, EOM_TMP, 0, 1, 1, "LT2_VV"); dpd_contract222(&RIA, &Int, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); dpd_file2_init(&Int, EOM_TMP, 0, 3, 3, "LT2_vv"); dpd_contract222(&Ria, &Int, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Int); /* + L2R1_ov[M][E] * t2[i][m][a][e] */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_dot24(&Int, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_dot24(&Int, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_dot24(&Int, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_dot24(&Int, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&Int); dpd_buf4_close(&T2); /* - (t1[i][e] * L2R1_ov[M][E]) * t1[m][a] */ dpd_file2_init(&Int, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_file2_init(&XIJ, EOM_TMP, S.irrep, 0, 0, "XIJ"); dpd_contract222(&TIA, &Int, &XIJ, 0, 0, 1.0, 0.0); dpd_file2_close(&Int); dpd_file2_init(&XIJ, EOM_TMP, S.irrep, 0, 0, "XIJ"); dpd_contract222(&XIJ, &TIA, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&XIJ); dpd_file2_init(&Int, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_file2_init(&Xij, EOM_TMP, S.irrep, 2, 2, "Xij"); dpd_contract222(&Tia, &Int, &Xij, 0, 0, 1.0, 0.0); dpd_file2_close(&Int); dpd_file2_init(&Xij, EOM_TMP, S.irrep, 2, 2, "Xij"); dpd_contract222(&Xij, &Tia, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Xij); dpd_file2_close(&DIA); dpd_file2_close(&Dia); dpd_file2_close(&TIA); dpd_file2_close(&Tia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); return; } }} // namespace psi::ccdensity �������������������������������������������������������psi3/src/bin/ccdensity/ltdensity_intermediates.cc���������������������������������������������������0000644�0001015�0000765�00000060671�10754663017�021013� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build left transition moment for oscillator strengths and rotational strengths */ /* LR1_OO = LIE * RJE */ /* LR1_oo = Lie * Rje */ /* LR1_VV = LMA * RMB */ /* LR1_vv = Lma * Rmb */ /* LT1_OO = LIE * TJE */ /* LT1_oo = Lie * Tje */ /* LT1_VV = LMA * TMB */ /* LT1_vv = Lma * Tmb */ /* L2R1_OV = RME * LIMAE + Rme + LImAe */ /* L2R1_ov = Rme * Limae + RME + LiMaE */ /* L1R2_OV = LME * RIMAE + Lme * RImAe */ /* L1R2_ov = Lme * Rimae + LME * RiMaE */ /* L1T2_OV = LME * TIMAE + Lme * TImAe */ /* L1T2_ov = Lme * Timae + LME * TiMaE */ /* LR2_OO = 0.5 * LIMEF * RJMEF + LImEf * RJmEf */ /* LR2_oo = 0.5 * Limef * Rjmef + LiMeF * RjMeF */ /* LR2_VV = 0.5 * LMNEA * RMNEB + LmNeA * RmNeB */ /* LR2_vv = 0.5 * Lmnea * Rmneb + LMnEa * RMnEb */ /* LT2_OO = 0.5 * LIMEF * TJMEF + LImEf * TJmEf */ /* LT2_oo = 0.5 * Limef * Tjmef + LiMeF * TjMeF */ /* LT2_VV = 0.5 * LMNEA * TMNEB + LmNeA * TmNeB */ /* LT2_vv = 0.5 * Lmnea * Tmneb + LMnEa * TMnEb */ /* LR_OO = LR1_OO + LR2_OO */ /* LR_oo = LR1_oo + LR2_oo */ /* LR_VV = LR1_VV + LR2_VV */ /* LR_vv = LR1_vv + LR2_vv */ /* LT_OO = LT1_OO + LT2_OO */ /* LT_oo = LT1_oo + LT2_oo */ void ltdensity_intermediates(struct TD_Params S) { dpdfile2 L1, R1, T1, I, LR1, LR2, LT1, LT2; dpdbuf4 L2, T2, R2; int rohf = 0; if ( (params.ref == 0) || (params.ref == 1) ) rohf = 1; /* LR1_OO(I,J) = LIE * RJE */ dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR1_OO"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR1_oo"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 2, 2, "LR1_oo"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, S.irrep, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LR1_VV(A,B) = LMA * RMB */ dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR1_VV"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_vv(a,b) = Lma * Rmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR1_vv"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 3, 3, "LR1_vv"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, S.irrep, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_OO(I,J) = LIE * TJE */ dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT1_OO"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT1_oo"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 2, 2, "LT1_oo"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_VV(A,B) = LMA * TMB */ dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT1_VV"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_vv(a,b) = Lma * Tmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT1_vv"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 3, 3, "LT1_vv"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* L2R1_OV(I,A) = RME * LIMAE + Rme + LImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, S.irrep, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L2R1_OV(i,a) = Rme * Limae + RME + LiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L2R1_ov"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 2, 3, "L2R1_ov"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, S.irrep, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, S.irrep, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L1R2_OV(I,A) = LME * RIMAE + Lme * RImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1R2_ov(i,a) = Lme * Rimae + LME * RiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 1, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 2, 3, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, S.irrep, 10, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 23, 29, 23, 29, 0, "RiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1T2_OV = LME * TIMAE + Lme * TImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* L1T2_ov = Lme * Timae + LME * TiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 1, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 2, 3, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* LR2_OO(I,J) = 0.5 * LIMEF * RJMEF + LImEf * RJmEf */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, S.irrep, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_oo(i,j) = 0.5 * Limef * Rjmef + LiMeF * RjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR2_oo"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 7, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 2, 2, "LR2_oo"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, S.irrep, 10, 17, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_VV(A,B) = 0.5 * LMNEA * RMNEB + LmNeA * RmNeB */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, S.irrep, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_vv(a,b) = 0.5 * Lmnea * Rmneb + LMnEa * RMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR2_vv"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, S.irrep, 2, 5, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 3, 3, "LR2_vv"); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, S.irrep, 12, 15, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, S.irrep, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_OO(I,J) = 0.5 * LIMEF * TJMEF + LImEf * TJmEf */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_oo(i,j) = 0.5 * Limef * Tjmef + LiMeF * TjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT2_oo"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 2, 2, "LT2_oo"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_VV(A,B) = 0.5 * LMNEA * TMNEB + LmNeA * TmNeB */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_vv(a,b) = 0.5 * Lmnea * Tmneb + LMnEa * TMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT2_vv"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 3, 3, "LT2_vv"); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR_OO = LR1_OO + LR2_OO */ /* LR_oo = LR1_oo + LR2_oo */ /* LR_VV = LR1_VV + LR2_VV */ /* LR_vv = LR1_vv + LR2_vv */ dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR_OO"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 0, 0, "LR1_OO"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 0, 0, "LR2_OO"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 0, 0, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 0, 0, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 0, 0, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 2, 2, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 2, 2, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 2, 2, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR_VV"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 1, 1, "LR1_VV"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 1, 1, "LR2_VV"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, S.irrep, 1, 1, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 1, 1, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 1, 1, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, S.irrep, 3, 3, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, S.irrep, 3, 3, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, S.irrep, 3, 3, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } /* LT_OO = LT1_OO + LT2_OO */ /* LT_oo = LT1_oo + LT2_oo */ dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT_OO"); dpd_file2_init(<1, EOM_TMP, 0, 0, 0, "LT1_OO"); dpd_file2_init(<2, EOM_TMP, 0, 0, 0, "LT2_OO"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 0, 0, "LT_oo"); dpd_file2_init(<1, EOM_TMP, 0, 0, 0, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, 0, 0, 0, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 2, 2, "LT_oo"); dpd_file2_init(<1, EOM_TMP, 0, 2, 2, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, 0, 2, 2, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } /* LT_VV = LT1_VV + LT2_VV */ /* LT_vv = LT1_vv + LT2_vv */ dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT_VV"); dpd_file2_init(<1, EOM_TMP, 0, 1, 1, "LT1_VV"); dpd_file2_init(<2, EOM_TMP, 0, 1, 1, "LT2_VV"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, 0, 1, 1, "LT_vv"); dpd_file2_init(<1, EOM_TMP, 0, 1, 1, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, 0, 1, 1, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, 0, 3, 3, "LT_vv"); dpd_file2_init(<1, EOM_TMP, 0, 3, 3, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, 0, 3, 3, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������psi3/src/bin/ccdensity/Makefile.in������������������������������������������������������������������0000644�0001015�0000765�00000005332�11027011315�015564� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ G.cc energy.cc sortone_UHF.cc \ G_norm.cc file_build.cc td_cleanup.cc \ Gabcd.cc fold.cc td_print.cc \ Gciab.cc fold_ROHF.cc td_setup.cc \ Gibja.cc fold_UHF.cc tdensity.cc \ Gijab.cc get_frozen.cc transL.cc \ Gijab_ROHF.cc get_moinfo.cc transdip.cc \ Gijab_UHF.cc get_params.cc transp.cc \ Gijka.cc get_rho_params.cc twopdm.cc \ Gijkl.cc get_td_params.cc x_Gabcd.cc \ Iab.cc idx_error.cc x_Gciab.cc \ Iai.cc idx_permute.cc x_Gciab_uhf.cc \ Iia.cc kinetic.cc x_Gibja.cc \ Iij.cc lag.cc x_Gibja_uhf.cc \ V.cc ltdensity.cc x_Gijab.cc \ add_core_ROHF.cc ltdensity_intermediates.cc x_Gijab_uhf.cc \ add_core_UHF.cc norm.cc x_Gijka.cc \ add_ref.cc onepdm.cc x_Gijka_uhf.cc \ add_ref_ROHF.cc oscillator_strength.cc x_Gijkl.cc \ add_ref_UHF.cc relax_D.cc x_V.cc \ build_A.cc relax_I.cc x_oe_intermediates.cc \ build_A_ROHF.cc relax_I_ROHF.cc x_oe_intermediates_rhf.cc \ build_A_UHF.cc relax_I_UHF.cc x_onepdm.cc \ build_X.cc resort_gamma.cc x_onepdm_uhf.cc \ build_Z.cc resort_tei.cc x_te_intermediates.cc \ build_Z_ROHF.cc rotational_strength.cc x_te_intermediates_rhf.cc \ build_Z_UHF.cc rtdensity.cc x_xi1.cc \ cache.cc setup_LR.cc x_xi1_connected.cc \ ccdensity.cc sortI.cc x_xi1_rhf.cc \ classify.cc sortI_ROHF.cc x_xi1_uhf.cc \ deanti.cc sortI_UHF.cc x_xi2.cc \ deanti_ROHF.cc sort_ltd_rohf.cc x_xi2_rhf.cc \ deanti_UHF.cc sort_ltd_uhf.cc x_xi2_uhf.cc \ dipole.cc sort_rtd_rohf.cc x_xi_check.cc \ distribute.cc sort_rtd_uhf.cc x_xi_intermediates.cc \ dump_ROHF.cc sortone.cc zero_pdm.cc \ dump_UHF.cc sortone_ROHF.cc \ dump_RHF.cc add_ref_RHF.cc deanti_RHF.cc fold_RHF.cc sortI_RHF.cc sortone_RHF.cc \ relax_I_RHF.cc build_Z_RHF.cc build_A_RHF.cc energy_RHF.cc energy_ROHF.cc energy_UHF.cc \ Gijab_RHF.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/MOInfo.h���������������������������������������������������������������������0000644�0001015�0000765�00000011054�11027011315�015015� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ namespace psi { namespace ccdensity { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nactive; /* no. of active orbitals */ int iopen; /* 0=closed shell; >0=open shell */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep excl. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ char **labels; /* irrep labels */ int nfzc; /* total no. of frozen core orbitals */ int nfzv; /* total no. of frozen virtual orbitals */ int nclsd; /* total no. of closd shells excl. frdocc */ int nopen; /* total no. of open shells */ int nuocc; /* total no. of unoccupied shells excl. fruocc */ int *occ_sym; /* active occupied index symmetry */ int *aocc_sym; /* alpha active occupied index symmetry */ int *bocc_sym; /* beta active occupied index symmetry */ int *vir_sym; /* active virtual index symmetry */ int *avir_sym; /* alpha active virtual index symmetry */ int *bvir_sym; /* beta active virtual index symmetry */ int sym; /* symmetry of converged CCSD state */ int *occpi; /* no. of active occ. orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha active occ. orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta active occ. orbs. (incl. open) per irrep */ int *virtpi; /* no. of active virt. orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha active virt. orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta active virt. orbs. (incl. open) per irrep */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* alpha occupied orbital offsets within each irrep */ int *bocc_off; /* beta occupied orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* alpha virtual orbital offsets within each irrep */ int *bvir_off; /* beta virtual orbital offsets within each irrep */ int *cc_occ; /* QT->CC active occupied reordering array */ int *cc_aocc; /* QT->CC alpha active occupied reordering array */ int *cc_bocc; /* QT->CC beta active occupied reordering array */ int *cc_vir; /* QT->CC active virtiual reordering array */ int *cc_avir; /* QT->CC alpha active virtiual reordering array */ int *cc_bvir; /* QT->CC beta active virtiual reordering array */ int *qt_occ; /* CC->QT active occupied reordering array */ int *qt_aocc; /* CC->QT alpha active occupied reordering array */ int *qt_bocc; /* CC->QT beta active occupied reordering array */ int *qt_vir; /* CC->QT active virtiual reordering array */ int *qt_avir; /* CC->QT alpha active virtiual reordering array */ int *qt_bvir; /* CC->QT beta active virtiual reordering array */ double enuc; /* Nuclear repulsion energy */ double escf; /* SCF energy from chkpt */ double eref; /* Reference energy */ double ecc; /* CC energy (CC2, CCSD, or CC3) from ccenergy */ double et; /* (T) energy from cctriples */ double **opdm; /* Onepdm in the full (fzc+clsd+socc+uocc) space */ double **opdm_a; /* Alpha Onepdm in the full (fzc+clsd+socc+uocc) space */ double **opdm_b; /* Beta Onepdm in the full (fzc+clsd+socc+uocc) space */ double **I; /* Lagrangian matrix in the full space */ double **I_a; /* Alpha Lagrangian matrix in the full space */ double **I_b; /* Beta Lagrangian matrix in the full space */ double **ltd; /* <0|O|n> Left transition density */ double **ltd_a; /* <0|O|n> Left transition alpha density */ double **ltd_b; /* <0|O|n> Left transition beta density */ double **rtd; /* <n|O|0> Right transition density */ double **rtd_a; /* <n|O|0> Right transition alpha density */ double **rtd_b; /* <n|O|0> Right transition beta density */ double ***L; double ***nabla; double ***dip; }; }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/norm.cc����������������������������������������������������������������������0000644�0001015�0000765�00000015536�10757640026�015030� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme); void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); return norm; } double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE) { double norm = 0.0; norm = 2.0 * dpd_file2_dot_self(CME); norm += 2.0 * dpd_buf4_dot_self(CMnEf); norm -= dpd_buf4_dot(CMnEf, CMnfE); return norm; } double norm_C1(dpdfile2 *CME, dpdfile2 *Cme) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); return norm; } double norm_C1_rhf(dpdfile2 *CME) { double norm = 0.0; norm = 2*dpd_file2_dot_self(CME); return norm; } void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a) { dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); dpd_buf4_scm(CMNEF,a); dpd_buf4_scm(Cmnef,a); dpd_buf4_scm(CMnEf,a); return; } void scm_C2(dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a) { dpd_buf4_scm(CMNEF,a); dpd_buf4_scm(Cmnef,a); dpd_buf4_scm(CMnEf,a); return; } void scm_C1(dpdfile2 *CME, dpdfile2 *Cme, double a) { dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); return; } void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f, h, M, N, E, F; int msym, nsym, esym, fsym; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMNEF, h); dpd_buf4_mat_irrep_rd(CMNEF, h); for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) { for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) { e = CMNEF->params->colorb[h^C_irr][ef][0]; f = CMNEF->params->colorb[h^C_irr][ef][1]; esym = CMNEF->params->rsym[e]; fsym = CMNEF->params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) CMNEF->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMNEF, h); dpd_buf4_mat_irrep_close(CMNEF, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(Cmnef, h); dpd_buf4_mat_irrep_rd(Cmnef, h); for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) { m = Cmnef->params->roworb[h][mn][0]; n = Cmnef->params->roworb[h][mn][1]; msym = Cmnef->params->psym[m]; nsym = Cmnef->params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) { if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) Cmnef->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(Cmnef, h); dpd_buf4_mat_irrep_close(Cmnef, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMnEf, h); dpd_buf4_mat_irrep_rd(CMnEf, h); for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) { n = CMnEf->params->roworb[h][mn][1]; nsym = CMnEf->params->qsym[n]; N = n - occ_off[nsym]; for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) { e = CMnEf->params->colorb[h^C_irr][ef][0]; esym = CMnEf->params->rsym[e]; E = e - vir_off[esym]; if ((N >= (occpi[nsym] - openpi[nsym])) || (E >= (virtpi[esym] - openpi[esym])) ) CMnEf->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMnEf, h); dpd_buf4_mat_irrep_close(CMnEf, h); } return; } void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f; int h, M, N, E, F; int msym, nsym, esym, fsym, C_irr; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); return; } void c_clean_CIJAB(dpdbuf4 *CMNEF) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f, h, M, N, E, F; int msym, nsym, esym, fsym; C_irr = CMNEF->file.my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMNEF, h); dpd_buf4_mat_irrep_rd(CMNEF, h); for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) { for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) { e = CMNEF->params->colorb[h^C_irr][ef][0]; f = CMNEF->params->colorb[h^C_irr][ef][1]; esym = CMNEF->params->rsym[e]; fsym = CMNEF->params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) CMNEF->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMNEF, h); dpd_buf4_mat_irrep_close(CMNEF, h); } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/onepdm.cc��������������������������������������������������������������������0000644�0001015�0000765�00000047345�11027503542�015332� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <strings.h> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* onepdm(): Computes the one-particle density matrix for CC wave functions. ** ** The spin-orbital expressions for the onepdm components are: ** ** D_ij = -1/2 t_im^ef L^jm_ef - t_i^e L^j_e ** ** D_ab = 1/2 L^mn_ae t_mn^be + L^m_a t_m^b ** ** D_ia = t_i^a + (t_im^ae - t_i^e t_m^a) L^m_e ** - 1/2 L^mn_ef (t_in^ef t_m^a + t_i^e t_mn^af) ** ** D_ai = L^i_a ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).] ** ** TDC, July 2002 */ void onepdm(struct RHO_Params rho_params) { dpdfile2 D, T1, L1, Z; dpdbuf4 T2, L2; double trace=0.0, dot_AI, dot_IA, dot_ai, dot_ia; double factor=0.0; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); /*fprintf(outfile, "\n\tTrace of onepdm = %20.15f\n", trace);*/ /* This term is * L0 = 0 for excited states */ if (rho_params.L_ground) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_OEI, rho_params.DIA_lbl); dpd_file2_close(&T1); } dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* This term is * L0 = 0 for excited states */ if (rho_params.L_ground) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_copy(&T1, CC_OEI, rho_params.Dia_lbl); dpd_file2_close(&T1); } dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(i,m)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_OEI, rho_params.DAI_lbl); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_copy(&L1, CC_OEI, rho_params.Dai_lbl); dpd_file2_close(&L1); /* Check overlaps */ /* dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dot_IA = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dot_ia = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, rho_params.DAI_lbl); dot_AI = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, rho_params.Dai_lbl); dot_ai = dpd_file2_dot_self(&D); dpd_file2_close(&D); fprintf(outfile,"\tOverlaps of onepdm after ground-state parts added.\n"); fprintf(outfile,"\t<DIA|DIA> = %15.10lf <Dia|Dia> = %15.10lf\n", dot_IA, dot_ia); fprintf(outfile,"\t<DAI|DAI> = %15.10lf <Dai|Dai> = %15.10lf\n", dot_AI, dot_ai); fprintf(outfile,"\t<Dpq|Dqp> = %15.10lf\n", dot_IA+dot_ia+dot_AI+dot_ai); */ } else if(params.ref == 2) { /** UHF **/ if(!strcmp(params.wfn,"CCSD_T") && params.dertype == 1) { /* For CCSD(T) gradients, some density contributions are calculated in cctriples */ factor = 1.0; dpd_file2_init(&D, CC_OEI, 0, 0, 0, "DIJ"); dpd_file2_copy(&D, CC_OEI, rho_params.DIJ_lbl); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, "Dij"); dpd_file2_copy(&D, CC_OEI, rho_params.Dij_lbl); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB"); dpd_file2_copy(&D, CC_OEI, rho_params.DAB_lbl); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, "Dab"); dpd_file2_copy(&D, CC_OEI, rho_params.Dab_lbl); dpd_file2_close(&D); } else factor = 0.0; dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, factor); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, factor); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, factor); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, factor); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); trace += dpd_file2_trace(&D); dpd_file2_close(&D); /*fprintf(outfile, "\n\tTrace of onepdm = %20.15f\n", trace);*/ /* This term is * L0 = 0 for excited states */ if (rho_params.L_ground) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_OEI, rho_params.DIA_lbl); dpd_file2_close(&T1); } dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, 0, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GLG, 0, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, 0, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GLG, 0, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* This term is * L0 = 0 for excited states */ if (rho_params.L_ground) { dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_copy(&T1, CC_OEI, rho_params.Dia_lbl); dpd_file2_close(&T1); } dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Z, CC_TMP0, 0, 2, 2, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, 0, 2, 2, "Z(i,m)"); dpd_buf4_init(&L2, CC_GLG, 0, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, 0, 3, 3, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GLG, 0, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_OEI, rho_params.DAI_lbl); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_copy(&L1, CC_OEI, rho_params.Dai_lbl); dpd_file2_close(&L1); /* Check overlaps */ /* dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dot_IA = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dot_ia = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dot_AI = dpd_file2_dot_self(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dot_ai = dpd_file2_dot_self(&D); dpd_file2_close(&D); fprintf(outfile,"\tOverlaps of onepdm after ground-state parts added.\n"); fprintf(outfile,"\t<DIA|DIA> = %15.10lf <Dia|Dia> = %15.10lf\n", dot_IA, dot_ia); fprintf(outfile,"\t<DAI|DAI> = %15.10lf <Dai|Dai> = %15.10lf\n", dot_AI, dot_ai); fprintf(outfile,"\t<Dpq|Dqp> = %15.10lf\n", dot_IA+dot_ia+dot_AI+dot_ai); */ } } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/oscillator_strength.cc�������������������������������������������������������0000644�0001015�0000765�00000024272�10757640026�020143� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <physconst.h> #define IOFF_MAX 32641 #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void oscillator_strength(struct TD_Params *S) { int nmo, nso, nao, noei, stat, i, I, h, j, nirreps, *ioff; int *order, *order_A, *order_B, *doccpi, natom, *clsdpi, *openpi, *orbspi; double **scf_pitzer, **scf_pitzer_A, **scf_pitzer_B; double **scf_qt, **scf_qt_A, **scf_qt_B, **X, **usotao; double *zvals, **geom; double *mu_x_ints, *mu_y_ints, *mu_z_ints; double **MUX_AO, **MUY_AO, **MUZ_AO; double **MUX_MO, **MUY_MO, **MUZ_MO; double **MUX_MO_A, **MUY_MO_A, **MUZ_MO_A; double **MUX_MO_B, **MUY_MO_B, **MUZ_MO_B; double lt_x, lt_y, lt_z; double rt_x, rt_y, rt_z; double ds_x, ds_y, ds_z; double f_x, f_y, f_z; double f; chkpt_init(PSIO_OPEN_OLD); if ((params.ref == 0) || (params.ref == 1)) scf_pitzer = chkpt_rd_scf(); else if(params.ref == 2) { scf_pitzer_A = chkpt_rd_alpha_scf(); scf_pitzer_B = chkpt_rd_beta_scf(); } nso = chkpt_rd_nso(); nao = chkpt_rd_nao(); nmo = chkpt_rd_nmo(); usotao = chkpt_rd_usotao(); clsdpi = chkpt_rd_clsdpi(); openpi = chkpt_rd_openpi(); orbspi = chkpt_rd_orbspi(); nirreps = chkpt_rd_nirreps(); natom = chkpt_rd_natom(); zvals = chkpt_rd_zvals(); geom = chkpt_rd_geom(); chkpt_close(); lt_x = lt_y = lt_z = 0.0; rt_x = rt_y = rt_z = 0.0; ds_x = ds_y = ds_z = 0.0; f_x = f_y = f_z = 0.0; f = 0; ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; if((params.ref == 0) || (params.ref == 1)) { order = init_int_array(nmo); reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); scf_qt = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt[j][I] = scf_pitzer[j][i]; } free(order); free_block(scf_pitzer); } else if(params.ref == 2) { order_A = init_int_array(nmo); order_B = init_int_array(nmo); reorder_qt_uhf(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order_A,order_B, moinfo.orbspi, moinfo.nirreps); scf_qt_A = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order_A[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt_A[j][I] = scf_pitzer_A[j][i]; } scf_qt_B = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order_B[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt_B[j][I] = scf_pitzer_B[j][i]; } free(order_A); free(order_B); free_block(scf_pitzer_A); free_block(scf_pitzer_B); } free(doccpi); /*** Read in dipole moment integrals in the AO basis ***/ noei = nao * (nao + 1)/2; mu_x_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MX,mu_x_ints,noei,0,0,outfile); mu_y_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MY,mu_y_ints,noei,0,0,outfile); mu_z_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MZ,mu_z_ints,noei,0,0,outfile); MUX_AO = block_matrix(nao,nao); MUY_AO = block_matrix(nao,nao); MUZ_AO = block_matrix(nao,nao); for(i=0; i < nao; i++) for(j=0; j < nao; j++) { MUX_AO[i][j] = mu_x_ints[INDEX(i,j)]; MUY_AO[i][j] = mu_y_ints[INDEX(i,j)]; MUZ_AO[i][j] = mu_z_ints[INDEX(i,j)]; } /* fprintf(outfile, "MUX_AOs\n"); */ /* print_mat(MUX_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUY_AOs\n"); */ /* print_mat(MUY_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUZ_AOs\n"); */ /* print_mat(MUZ_AO, nao, nao, outfile); */ MUX_MO = block_matrix(nso,nso); MUY_MO = block_matrix(nso,nso); MUZ_MO = block_matrix(nso,nso); /*** Transform the AO dipole integrals to the SO basis ***/ X = block_matrix(nso,nao); /* just a temporary matrix */ C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUX_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUX_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUY_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUY_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUZ_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUZ_MO[0][0]),nso); free(mu_x_ints); free(mu_y_ints); free(mu_z_ints); free_block(X); free_block(usotao); free_block(MUX_AO); free_block(MUY_AO); free_block(MUZ_AO); /*** Transform the SO dipole integrals to the MO basis ***/ X = block_matrix(nmo,nmo); /* just a temporary matrix */ if((params.ref == 0) || (params.ref == 1)) { C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUX_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUX_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUY_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUY_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUZ_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUZ_MO[0][0]),nmo); free_block(scf_qt); } else if((params.ref == 2)) { MUX_MO_A = block_matrix(nso,nso); MUY_MO_A = block_matrix(nso,nso); MUZ_MO_A = block_matrix(nso,nso); MUX_MO_B = block_matrix(nso,nso); MUY_MO_B = block_matrix(nso,nso); MUZ_MO_B = block_matrix(nso,nso); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_A[0][0]),nmo,&(MUX_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_A[0][0]),nmo, 0,&(MUX_MO_A[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_B[0][0]),nmo,&(MUX_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_B[0][0]),nmo, 0,&(MUX_MO_B[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_A[0][0]),nmo,&(MUY_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_A[0][0]),nmo, 0,&(MUY_MO_A[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_B[0][0]),nmo,&(MUY_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_B[0][0]),nmo, 0,&(MUY_MO_B[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_A[0][0]),nmo,&(MUZ_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_A[0][0]),nmo, 0,&(MUZ_MO_A[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt_B[0][0]),nmo,&(MUZ_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt_B[0][0]),nmo, 0,&(MUZ_MO_B[0][0]),nmo); free_block(MUX_MO); free_block(MUY_MO); free_block(MUZ_MO); free_block(scf_qt_A); free_block(scf_qt_B); } free_block(X); /* fprintf(outfile, "MUX_MOs\n"); */ /* print_mat(MUX_MO, nmo, nmo, outfile); */ /* fprintf(outfile, "MUY_MOs\n"); */ /* print_mat(MUY_MO, nmo, nmo, outfile); */ /* fprintf(outfile, "MUZ_MOs\n"); */ /* print_mat(MUZ_MO, nmo, nmo, outfile); */ fprintf(outfile,"\n\tOscillator Strength for %d%3s\n",S->root+1, moinfo.labels[S->irrep]); fprintf(outfile,"\t X \t Y \t Z\n"); if((params.ref == 0) || (params.ref == 1)) { for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += MUX_MO[i][j] * moinfo.ltd[i][j]; lt_y += MUY_MO[i][j] * moinfo.ltd[i][j]; lt_z += MUZ_MO[i][j] * moinfo.ltd[i][j]; } for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += MUX_MO[i][j] * moinfo.rtd[i][j]; rt_y += MUY_MO[i][j] * moinfo.rtd[i][j]; rt_z += MUZ_MO[i][j] * moinfo.rtd[i][j]; } } else if(params.ref == 2) { for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += MUX_MO_A[i][j] * moinfo.ltd_a[i][j]; lt_y += MUY_MO_A[i][j] * moinfo.ltd_a[i][j]; lt_z += MUZ_MO_A[i][j] * moinfo.ltd_a[i][j]; } for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += MUX_MO_A[i][j] * moinfo.rtd_a[i][j]; rt_y += MUY_MO_A[i][j] * moinfo.rtd_a[i][j]; rt_z += MUZ_MO_A[i][j] * moinfo.rtd_a[i][j]; } for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += MUX_MO_B[i][j] * moinfo.ltd_b[i][j]; lt_y += MUY_MO_B[i][j] * moinfo.ltd_b[i][j]; lt_z += MUZ_MO_B[i][j] * moinfo.ltd_b[i][j]; } for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += MUX_MO_B[i][j] * moinfo.rtd_b[i][j]; rt_y += MUY_MO_B[i][j] * moinfo.rtd_b[i][j]; rt_z += MUZ_MO_B[i][j] * moinfo.rtd_b[i][j]; } } ds_x = lt_x * rt_x; ds_y = lt_y * rt_y; ds_z = lt_z * rt_z; f_x = (2*S->cceom_energy*ds_x)/3; f_y = (2*S->cceom_energy*ds_y)/3; f_z = (2*S->cceom_energy*ds_z)/3; f = f_x + f_y + f_z; S->OS = f; fprintf(outfile,"\t<0|mu_e|n> %11.8lf \t %11.8lf \t %11.8lf\n", lt_x,lt_y,lt_z); fprintf(outfile,"\t<n|mu_e|0> %11.8lf \t %11.8lf \t %11.8lf\n", rt_x,rt_y,rt_z); fprintf(outfile,"\tDipole Strength %11.8lf \n",ds_x+ds_y+ds_z); fprintf(outfile,"\tOscillator Strength %11.8lf \n",f_x+f_y+f_z); fflush(outfile); if((params.ref == 0) || (params.ref == 1)) { free_block(MUX_MO); free_block(MUY_MO); free_block(MUZ_MO); } else if(params.ref == 2) { free_block(MUX_MO_A); free_block(MUY_MO_A); free_block(MUZ_MO_A); free_block(MUX_MO_B); free_block(MUY_MO_B); free_block(MUZ_MO_B); } return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/Params.h���������������������������������������������������������������������0000644�0001015�0000765�00000003617�10754663017�015141� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ namespace psi { namespace ccdensity { /* Input parameters for cclambda */ struct Params { double tolerance; long int memory; int cachelev; int aobasis; int ref; int onepdm; /* produce ONLY the onepdm for properties */ int relax_opdm; int use_zeta; int calc_xi; int connect_xi; int restart; int ground; int transition; int dertype; char *wfn; int nstates; int prop_sym; int prop_root; int prop_all; char *gauge; /* these are used by Xi and twopdm code */ int G_irr; int R_irr; int L_irr; double R0; double L0; int ael; double cceom_energy; double overlap1; /* <L1|R1> */ double overlap2; /* <L2|R2> */ double RD_overlap; /* Rmnef <mn||ef> */ double RZ_overlap; /* <R|zeta> */ }; struct RHO_Params { int L_irr; int R_irr; int G_irr; int L_root; int R_root; int L_ground; int R_ground; double R0; double L0; char L1A_lbl[32]; char L1B_lbl[32]; char L2AA_lbl[32]; char L2BB_lbl[32]; char L2AB_lbl[32]; char R1A_lbl[32]; char R1B_lbl[32]; char R2AA_lbl[32]; char R2BB_lbl[32]; char R2AB_lbl[32]; double cceom_energy; double overlap1; /* <L1|R1> */ double overlap2; /* <L2|R2> */ double RD_overlap; /* Rmnef <mn||ef> */ char DIJ_lbl[10]; char Dij_lbl[10]; char DAB_lbl[10]; char Dab_lbl[10]; char DIA_lbl[10]; char Dia_lbl[10]; char DAI_lbl[10]; char Dai_lbl[10]; char opdm_lbl[32]; char opdm_a_lbl[32]; char opdm_b_lbl[32]; }; struct TD_Params { int irrep; int root; double R0; double cceom_energy; char L1A_lbl[32]; char L1B_lbl[32]; char L2AA_lbl[32]; char L2BB_lbl[32]; char L2AB_lbl[32]; char R1A_lbl[32]; char R1B_lbl[32]; char R2AA_lbl[32]; char R2BB_lbl[32]; char R2AB_lbl[32]; double OS; double RS_length; double RS_velocity; }; }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/relax_D.cc�������������������������������������������������������������������0000644�0001015�0000765�00000005266�11027011315�015412� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* relax_D(): Add the orbital-response contributions to the Dia block ** of the one-electron density matrix: ** ** D(A,I) = D(amp)(A,I) + D(orb)(A,I) ** ** D(I,A) = D(amp)(I,A) + D(orb)(A,I) ** ** */ void relax_D(struct RHO_Params rho_params) { dpdfile2 D1, D2; if(params.ref == 0) { dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); } else if(params.ref == 1) { dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); } else if(params.ref == 2) { dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_init(&D2, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_init(&D2, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); dpd_file2_init(&D1, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_init(&D2, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_file2_axpy(&D2, &D1, 1.0, 1); dpd_file2_close(&D2); dpd_file2_close(&D1); } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/relax_I.cc�������������������������������������������������������������������0000644�0001015�0000765�00000001440�11027011315�015405� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* relax_I(): Add the orbital-response contributions from the ** one-electron density matrix to the I(I,J) and I(I,A) blocks of the ** Lagrangian. These terms arise from the first-order CPHF ** equations. I *think* the following code is general enough to deal ** with both RHF and ROHF cases. ** */ void relax_I_RHF(void); void relax_I_ROHF(void); void relax_I_UHF(void); void relax_I(void) { if(params.ref == 0) relax_I_RHF(); else if(params.ref == 1) relax_I_ROHF(); else if(params.ref == 2) relax_I_UHF(); } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/relax_I_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000004004�11027011315�016103� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* relax_I_RHF(): Add the ROHF orbital-response contributions from ** the one-electron density matrix to the I(I,J) and I(I,A) blocks of ** the Lagrangian. These terms arise from the first-order CPHF ** equations. I *think* the following code is general enough to deal ** with both RHF and ROHF cases. */ void relax_I_RHF(void) { dpdfile2 I, D, f; dpdbuf4 E; int h, nirreps, i, j, e, *occpi, *virtpi, *openpi; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; /* I(I,A) = I'(I,A) - sum_M f(I,M) D(orb)(A,M) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_copy(&I, CC_OEI, "I(I,A)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_init(&f, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract222(&f, &D, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&f); dpd_file2_close(&D); dpd_file2_close(&I); /* RHF Case: I(i,j) = I'(i,j) - D(orb)(e,c) [4 <ei|mj> - <ei|jm> - <ej|im>] */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_copy(&I, CC_OEI, "I(I,J)"); dpd_file2_close(&I); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_scmcopy(&E, CC_EINTS, "4 <ei|mj> - <ei|jm> - <ej|im>", 4); dpd_buf4_sort_axpy(&E, CC_EINTS, pqsr, 11, 0, "4 <ei|mj> - <ei|jm> - <ej|im>", -1); dpd_buf4_sort_axpy(&E, CC_EINTS, psqr, 11, 0, "4 <ei|mj> - <ei|jm> - <ej|im>", -1); dpd_buf4_close(&E); dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "4 <ei|mj> - <ei|jm> - <ej|im>"); dpd_dot13(&D, &E, &I, 0, 0, -1.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_close(&I); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/relax_I_ROHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000010626�10754663017�016253� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* relax_I_ROHF(): Add the ROHF orbital-response contributions from ** the one-electron density matrix to the I(I,J) and I(I,A) blocks of ** the Lagrangian. These terms arise from the first-order CPHF ** equations. I *think* the following code is general enough to deal ** with both RHF and ROHF cases. */ void relax_I_ROHF(void) { dpdfile2 I, D, f; dpdbuf4 E; int h, nirreps, i, j, e, *occpi, *virtpi, *openpi; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; /*** occupied-virtual relaxation terms */ /* I(I,A) = I'(I,A) - sum_M f(I,M) D(orb)(A,M) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_copy(&I, CC_OEI, "I(I,A)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_init(&f, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract222(&f, &D, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&f); dpd_file2_close(&D); dpd_file2_close(&I); /* I(i,a) = I'(i,a) - sum_m f(i,m) D(orb)(a,m) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'ia"); dpd_file2_copy(&I, CC_OEI, "I(i,a)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I(i,a)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_file2_init(&f, CC_OEI, 0, 0, 0, "fij"); dpd_contract222(&f, &D, &I, 0, 0, -1.0, 1.0); dpd_file2_close(&f); dpd_file2_close(&D); dpd_file2_close(&I); /*** occupied-occupied relaxtion terms */ /* I(I,J) <-- I'(I,J) - sum_E,M D(orb)(E,M) [<EI||MJ> + <EJ||MI>] - 2 sum_e,m D(orb)(e,m) <eI|mJ> */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_copy(&I, CC_OEI, "I(I,J)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_dot13(&D, &E, &I, 0, 0, -1.0, 1.0); dpd_dot13(&D, &E, &I, 0, 1, -1.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_dot13(&D, &E, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); /* I(I,J) <-- - 2 sum_E f(E,I) D(orb)(E,J) (J,socc) Note that this same term is not needed in the I(i,j) block since J is required to be a singly occupied orbital */ dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); dpd_file2_init(&f, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&f); dpd_file2_mat_rd(&f); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(j=(occpi[h] - openpi[h]); j < occpi[h]; j++) for(e=0; e < virtpi[h]; e++) I.matrix[h][i][j] -= 2 * f.matrix[h][i][e] * D.matrix[h][e][j]; } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_mat_close(&f); dpd_file2_close(&f); dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); /* I(i,j) <-- I'(i,j) - sum_e,m D(orb)(e,m) [<ei||mj> + <ej||mi>] - 2 sum_E,M D(orb)(E,M) <Ei|Mj> */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'ij"); dpd_file2_copy(&I, CC_OEI, "I(i,j)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I(i,j)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(a,i)"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_dot13(&D, &E, &I, 0, 0, -1.0, 1.0); dpd_dot13(&D, &E, &I, 0, 1, -1.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_dot13(&D, &E, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_close(&I); /* Clean the I(i,j) block yet again */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I(i,j)"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); for(h=0; h < nirreps; h++) for(i=0; i < occpi[h]; i++) for(j=0; j < occpi[h]; j++) if((i >= (occpi[h] - openpi[h])) || (j >= (occpi[h] - openpi[h])) ) I.matrix[h][i][j] = 0.0; dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/relax_I_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000007526�10754663017�016144� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* relax_I_UHF(): Add the UHF orbital-response contributions from the ** one-electron density matrix to the I(I,J) and I(I,A) blocks of the ** Lagrangian. These terms arise from the first-order CPHF equations. */ void relax_I_UHF(void) { dpdfile2 I, D, f; dpdbuf4 E; int h, nirreps, i, a; int *aoccpi, *avirtpi; int *boccpi, *bvirtpi; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; /*** occupied-virtual relaxation terms */ /* I(I,A) = I'(I,A) - f(I,I) D(orb)(A,I) */ dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I'IA"); dpd_file2_copy(&I, CC_OEI, "I(I,A)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_file2_init(&f, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&f); dpd_file2_mat_rd(&f); for(h=0; h < nirreps; h++) for(i=0; i < aoccpi[h]; i++) for(a=0; a < avirtpi[h]; a++) I.matrix[h][i][a] -= D.matrix[h][a][i] * f.matrix[h][i][i]; dpd_file2_mat_close(&f); dpd_file2_close(&f); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); /* I(i,a) = I'(i,a) - f(i,i) D(orb)(a,i) */ dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I'ia"); dpd_file2_copy(&I, CC_OEI, "I(i,a)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 2, 3, "I(i,a)"); dpd_file2_mat_init(&I); dpd_file2_mat_rd(&I); dpd_file2_init(&D, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); dpd_file2_init(&f, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&f); dpd_file2_mat_rd(&f); for(h=0; h < nirreps; h++) for(i=0; i < boccpi[h]; i++) for(a=0; a < bvirtpi[h]; a++) I.matrix[h][i][a] -= D.matrix[h][a][i] * f.matrix[h][i][i]; dpd_file2_mat_close(&f); dpd_file2_close(&f); dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_mat_wrt(&I); dpd_file2_mat_close(&I); dpd_file2_close(&I); /*** occupied-occupied relaxtion terms */ /* I(I,J) <-- I'(I,J) - sum_A,K D(orb)(A,K) [<AI||KJ> + <AJ||KI>] - 2 sum_a,k D(orb)(a,k) <aI|kJ> */ dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I'IJ"); dpd_file2_copy(&I, CC_OEI, "I(I,J)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_buf4_init(&E, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_dot13(&D, &E, &I, 0, 0, -1.0, 1.0); dpd_dot13(&D, &E, &I, 0, 1, -1.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_buf4_init(&E, CC_EINTS, 0, 24, 22, 24, 22, 0, "E <Ia|Jk>"); dpd_dot24(&D, &E, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_close(&I); /* I(i,j) <-- I'(i,j) - sum_a,k D(orb)(a,k) [<ai||kj> + <aj||ki>] - 2 sum_A,K D(orb)(A,K) <Ai|Kj> */ dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I'ij"); dpd_file2_copy(&I, CC_OEI, "I(i,j)"); dpd_file2_close(&I); dpd_file2_init(&I, CC_OEI, 0, 2, 2, "I(i,j)"); dpd_file2_init(&D, CC_OEI, 0, 3, 2, "D(orb)(a,i)"); dpd_buf4_init(&E, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_dot13(&D, &E, &I, 0, 0, -1.0, 1.0); dpd_dot13(&D, &E, &I, 0, 1, -1.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 0, "D(orb)(A,I)"); dpd_buf4_init(&E, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_dot13(&D, &E, &I, 0, 0, -2.0, 1.0); dpd_buf4_close(&E); dpd_file2_close(&D); dpd_file2_close(&I); } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/resort_gamma.cc��������������������������������������������������������������0000644�0001015�0000765�00000104121�10757640026�016522� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* ** NB dpd_list[0] contains only active orbitals and dpd_list[1] contains ** all orbitals. */ void resort_gamma(void) { int h, nirreps, row, col, nfzc, nfzv; int i,j,k,l,I,J,K,L, ij, kl, ib, ja, ci; int a,b,c,d,A,B,C,D, ab, cd; int ka; int *qt_occ, *qt_vir; int *cc_occ, *cc_vir; dpdfile2 g, gnew; dpdbuf4 G, Gnew; nirreps = moinfo.nirreps; qt_occ = frozen.qt_occ; qt_vir = frozen.qt_vir; cc_occ = frozen.cc_occ; cc_vir = frozen.cc_vir; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; /* G(I,J) --> G'(I,J) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 0, "DIJ"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 0, "DIJ"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { j = gnew.params->colorb[h][col]; J = qt_occ[j]; j = cc_occ[J]; if(i<0 || j<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; j = g.params->colidx[j]; gnew.matrix[h][row][col] = g.matrix[h][i][j]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(i,j) --> G'(i,j) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 0, "Dij"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 0, "Dij"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { j = gnew.params->colorb[h][col]; J = qt_occ[j]; j = cc_occ[J]; if(i<0 || j<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; j = g.params->colidx[j]; gnew.matrix[h][row][col] = g.matrix[h][i][j]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(A,B) --> G'(A,B) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 1, 1, "DAB"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 1, 1, "DAB"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { a = gnew.params->roworb[h][row]; A = qt_vir[a]; a = cc_vir[A]; for(col=0; col < gnew.params->coltot[h]; col++) { b = gnew.params->colorb[h][col]; B = qt_vir[b]; b = cc_vir[B]; if(a<0 || b<0) gnew.matrix[h][row][col] = 0.0; else { a = g.params->rowidx[a]; b = g.params->colidx[b]; gnew.matrix[h][row][col] = g.matrix[h][a][b]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(a,b) --> G'(a,b) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 1, 1, "Dab"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 1, 1, "Dab"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { a = gnew.params->roworb[h][row]; A = qt_vir[a]; a = cc_vir[A]; for(col=0; col < gnew.params->coltot[h]; col++) { b = gnew.params->colorb[h][col]; B = qt_vir[b]; b = cc_vir[B]; if(a<0 || b<0) gnew.matrix[h][row][col] = 0.0; else { a = g.params->rowidx[a]; b = g.params->colidx[b]; gnew.matrix[h][row][col] = g.matrix[h][a][b]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(A,I) --> G'(A,I) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 1, "DAI"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 1, "DAI"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { a = gnew.params->colorb[h][col]; A = qt_vir[a]; a = cc_vir[A]; if(i<0 || a<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; a = g.params->colidx[a]; gnew.matrix[h][row][col] = g.matrix[h][i][a]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(a,i) --> G'(a,i) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 1, "Dai"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 1, "Dai"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { a = gnew.params->colorb[h][col]; A = qt_vir[a]; a = cc_vir[A]; if(i<0 || a<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; a = g.params->colidx[a]; gnew.matrix[h][row][col] = g.matrix[h][i][a]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(I,A) --> G'(I,A) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 1, "DIA"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 1, "DIA"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { a = gnew.params->colorb[h][col]; A = qt_vir[a]; a = cc_vir[A]; if(i<0 || a<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; a = g.params->colidx[a]; gnew.matrix[h][row][col] = g.matrix[h][i][a]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(i,a) --> G'(i,a) */ dpd_set_default(0); dpd_file2_init(&g, CC_OEI, 0, 0, 1, "Dia"); dpd_set_default(1); dpd_file2_init(&gnew, CC_OEI_NEW, 0, 0, 1, "Dia"); dpd_file2_mat_init(&g); dpd_file2_mat_rd(&g); dpd_file2_mat_init(&gnew); for(h=0; h < nirreps; h++) { for(row=0; row < gnew.params->rowtot[h]; row++) { i = gnew.params->roworb[h][row]; I = qt_occ[i]; i = cc_occ[I]; for(col=0; col < gnew.params->coltot[h]; col++) { a = gnew.params->colorb[h][col]; A = qt_vir[a]; a = cc_vir[A]; if(i<0 || a<0) gnew.matrix[h][row][col] = 0.0; else { i = g.params->rowidx[i]; a = g.params->colidx[a]; gnew.matrix[h][row][col] = g.matrix[h][i][a]; } } } } dpd_file2_mat_wrt(&gnew); dpd_file2_mat_close(&gnew); dpd_file2_mat_close(&g); dpd_file2_close(&g); dpd_file2_close(&gnew); /* G(IJ,KL) --> G'(IJ,KL) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 2, 2, 2, 0, "GIJKL"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 2, 2, 2, 0, "GIJKL"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; l = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; L = qt_occ[l]; k = cc_occ[K]; l = cc_occ[L]; if(i<0 || j<0 || k<0 || l<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; kl = G.params->colidx[k][l]; Gnew.matrix[h][row][col] = G.matrix[h][ij][kl]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ij,kl) --> G'(ij,kl) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 2, 2, 2, 0, "Gijkl"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 2, 2, 2, 0, "Gijkl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; l = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; L = qt_occ[l]; k = cc_occ[K]; l = cc_occ[L]; if(i<0 || j<0 || k<0 || l<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; kl = G.params->colidx[k][l]; Gnew.matrix[h][row][col] = G.matrix[h][ij][kl]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ij,Kl) --> G'(Ij,Kl) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 0, 0, 0, 0, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; l = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; L = qt_occ[l]; k = cc_occ[K]; l = cc_occ[L]; if(i<0 || j<0 || k<0 || l<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; kl = G.params->colidx[k][l]; Gnew.matrix[h][row][col] = G.matrix[h][ij][kl]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(IJ,KA) --> G'(IJ,KA) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "GIJKA"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 10, 2, 10, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; A = qt_vir[a]; k = cc_occ[K]; a = cc_vir[A]; if(i<0 || j<0 || k<0 || a<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ka = G.params->colidx[k][a]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ka]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ij,ka) --> G'(ij,ka) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 10, 2, 10, 0, "Gijka"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 10, 2, 10, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; A = qt_vir[a]; k = cc_occ[K]; a = cc_vir[A]; if(i<0 || j<0 || k<0 || a<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ka = G.params->colidx[k][a]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ka]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ij,Ka) --> G'(Ij,Ka) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { k = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ K = qt_occ[k]; A = qt_vir[a]; k = cc_occ[K]; a = cc_vir[A]; if(i<0 || j<0 || k<0 || a<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ka = G.params->colidx[k][a]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ka]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(IJ,AB) --> G'(IJ,AB) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ij,ab) --> G'(ij,ab) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ij,Ab) --> G'(Ij,Ab) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; j = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; J = qt_occ[j]; i = cc_occ[I]; j = cc_occ[J]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ij = G.params->rowidx[i][j]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ij][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(IB,JA) --> G'(IB,JA) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "GIBJA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ib,ja) --> G'(ib,ja) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "Gibja"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ib,Ja) --> G'(Ib,Ja) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "GIbJa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(iB,jA) --> G'(iB,jA) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "GiBjA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(iB,Ja) --> G'(iB,Ja) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "GiBJa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ib,jA) --> G'(Ib,jA) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 10, 10, 10, 10, 0, "GIbjA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { i = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ I = qt_occ[i]; B = qt_vir[b]; i = cc_occ[I]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { j = Gnew.params->colorb[h][col][0]; a = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ J = qt_occ[j]; A = qt_vir[a]; j = cc_occ[J]; a = cc_vir[A]; if(i<0 || j<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ib = G.params->rowidx[i][b]; ja = G.params->colidx[j][a]; Gnew.matrix[h][row][col] = G.matrix[h][ib][ja]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(CI,AB) --> G'(CI,AB) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 11, 7, 11, 7, 0, "GCIAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { c = Gnew.params->roworb[h][row][0]; i = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ C = qt_vir[c]; I = qt_occ[i]; c = cc_vir[C]; i = cc_occ[I]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(c<0 || i<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ci = G.params->rowidx[c][i]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ci][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ci,ab) --> G'(ci,ab) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 11, 7, 11, 7, 0, "Gciab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { c = Gnew.params->roworb[h][row][0]; i = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ C = qt_vir[c]; I = qt_occ[i]; c = cc_vir[C]; i = cc_occ[I]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(c<0 || i<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ci = G.params->rowidx[c][i]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ci][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(cI,aB) --> G'(cI,aB) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 11, 5, 11, 5, 0, "GcIaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { c = Gnew.params->roworb[h][row][0]; i = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ C = qt_vir[c]; I = qt_occ[i]; c = cc_vir[C]; i = cc_occ[I]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(c<0 || i<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ci = G.params->rowidx[c][i]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ci][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ci,Ab) --> G'(Ci,Ab) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 11, 5, 11, 5, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { c = Gnew.params->roworb[h][row][0]; i = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ C = qt_vir[c]; I = qt_occ[i]; c = cc_vir[C]; i = cc_occ[I]; for(col=0; col < Gnew.params->coltot[h]; col++) { a = Gnew.params->colorb[h][col][0]; b = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; if(c<0 || i<0 || a<0 || b<0) Gnew.matrix[h][row][col] = 0.0; else { ci = G.params->rowidx[c][i]; ab = G.params->colidx[a][b]; Gnew.matrix[h][row][col] = G.matrix[h][ci][ab]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(AB,CD) --> G'(AB,CD) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 7, 7, 7, 7, 0, "GABCD"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { a = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { c = Gnew.params->colorb[h][col][0]; d = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ C = qt_vir[c]; D = qt_vir[d]; c = cc_vir[C]; d = cc_vir[D]; if(a<0 || b<0 || c<0 || d<0) Gnew.matrix[h][row][col] = 0.0; else { ab = G.params->rowidx[a][b]; cd = G.params->colidx[c][d]; Gnew.matrix[h][row][col] = G.matrix[h][ab][cd]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(ab,cd) --> G'(ab,cd) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "Gabcd"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 7, 7, 7, 7, 0, "Gabcd"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { a = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { c = Gnew.params->colorb[h][col][0]; d = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ C = qt_vir[c]; D = qt_vir[d]; c = cc_vir[C]; d = cc_vir[D]; if(a<0 || b<0 || c<0 || d<0) Gnew.matrix[h][row][col] = 0.0; else { ab = G.params->rowidx[a][b]; cd = G.params->colidx[c][d]; Gnew.matrix[h][row][col] = G.matrix[h][ab][cd]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); /* G(Ab,Cd) --> G'(Ab,Cd) */ dpd_set_default(0); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); dpd_set_default(1); dpd_buf4_init(&Gnew, CC_GAMMA_NEW, 0, 5, 5, 5, 5, 0, "GAbCd"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&Gnew, h); for(row=0; row < Gnew.params->rowtot[h]; row++) { a = Gnew.params->roworb[h][row][0]; b = Gnew.params->roworb[h][row][1]; /* Compute the active CC row index */ A = qt_vir[a]; B = qt_vir[b]; a = cc_vir[A]; b = cc_vir[B]; for(col=0; col < Gnew.params->coltot[h]; col++) { c = Gnew.params->colorb[h][col][0]; d = Gnew.params->colorb[h][col][1]; /* Compute the active CC column index */ C = qt_vir[c]; D = qt_vir[d]; c = cc_vir[C]; d = cc_vir[D]; if(a<0 || b<0 || c<0 || d<0) Gnew.matrix[h][row][col] = 0.0; else { ab = G.params->rowidx[a][b]; cd = G.params->colidx[c][d]; Gnew.matrix[h][row][col] = G.matrix[h][ab][cd]; } } } dpd_buf4_mat_irrep_wrt(&Gnew, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_close(&Gnew); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/resort_tei.cc����������������������������������������������������������������0000644�0001015�0000765�00000002622�10757640026�016224� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void distribute(void); int file_build(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep); void resort_tei(void) { double tolerance; dpdfile4 A, B, C, D, E, F; tolerance = params.tolerance; distribute(); dpd_file4_init_nocache(&A, CC_AINTS_NEW, 0, 0, 0, "A <ij|kl>"); file_build(&A, 90, tolerance, 1, 1, 1, 0); dpd_file4_close(&A); dpd_file4_init_nocache(&B, CC_BINTS_NEW, 0, 5, 5, "B <ab|cd>"); file_build(&B, 91, tolerance, 1, 1, 1, 0); dpd_file4_close(&B); dpd_file4_init_nocache(&C, CC_CINTS_NEW, 0, 10, 10, "C <ia|jb>"); file_build(&C, 92, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&D, CC_DINTS_NEW, 0, 0, 5, "D <ij|ab>"); file_build(&D, 93, tolerance, 0, 0, 1, 0); dpd_file4_close(&D); dpd_file4_init_nocache(&E, CC_EINTS_NEW, 0, 11, 0, "E <ai|jk>"); file_build(&E, 94, tolerance, 0, 1, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&F, CC_FINTS_NEW, 0, 10, 5, "F <ia|bc>"); file_build(&F, 95, tolerance, 0, 1, 0, 0); dpd_file4_close(&F); fflush(outfile); } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/rotational_strength.cc�������������������������������������������������������0000644�0001015�0000765�00000013355�10757640026�020144� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include <physconst.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #define _au2cgs 471.44353920 void transdip(void); void transp(double sign); void transL(double sign); void rotational_strength(struct TD_Params *S) { int i, j, k; int no, nv, nt; double lt_x, lt_y, lt_z; double rt_x, rt_y, rt_z; double rs_lx, rs_ly, rs_lz; double rs_rx, rs_ry, rs_rz; double rs_x, rs_y, rs_z; double rs; double conv; int nmo = moinfo.nmo; transdip(); fprintf(outfile,"\n\tLength-Gauge Rotational Strength for %d%3s\n",S->root+1, moinfo.labels[S->irrep]); fprintf(outfile,"\t X \t Y \t Z\n"); lt_x = lt_y = lt_z = 0.0; rt_x = rt_y = rt_z = 0.0; rs_lx = rs_ly = rs_lz = 0.0; rs_rx = rs_ry = rs_rz = 0.0; rs_x = rs_y = rs_z = 0.0; for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += moinfo.ltd[i][j] * moinfo.dip[0][i][j]; lt_y += moinfo.ltd[i][j] * moinfo.dip[1][i][j]; lt_z += moinfo.ltd[i][j] * moinfo.dip[2][i][j]; } transL(+1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += moinfo.rtd[i][j] * moinfo.L[0][i][j]; rt_y += moinfo.rtd[i][j] * moinfo.L[1][i][j]; rt_z += moinfo.rtd[i][j] * moinfo.L[2][i][j]; } rs_lx = lt_x * rt_x; rs_ly = lt_y * rt_y; rs_lz = lt_z * rt_z; fprintf(outfile,"\t<0|mu_e|n> %11.8lf \t %11.8lf \t %11.8lf\n", lt_x,lt_y,lt_z); fprintf(outfile,"\t<n|mu_m|0> %11.8lf \t %11.8lf \t %11.8lf\n", rt_x,rt_y,rt_z); // Complex Conjugate lt_x = lt_y = lt_z = 0.0; rt_x = rt_y = rt_z = 0.0; for(i=0; i < 3 ; i++) for(j=0; j < nmo; j++) for(k=0; k < nmo; k++) moinfo.L[i][j][k] = 0.0; transL(-1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += moinfo.ltd[i][j] * moinfo.L[0][i][j]; lt_y += moinfo.ltd[i][j] * moinfo.L[1][i][j]; lt_z += moinfo.ltd[i][j] * moinfo.L[2][i][j]; } for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += moinfo.rtd[i][j] * moinfo.dip[0][i][j]; rt_y += moinfo.rtd[i][j] * moinfo.dip[1][i][j]; rt_z += moinfo.rtd[i][j] * moinfo.dip[2][i][j]; } rs_rx = lt_x * rt_x; rs_ry = lt_y * rt_y; rs_rz = lt_z * rt_z; fprintf(outfile,"\t<0|mu_m|n>* %11.8lf \t %11.8lf \t %11.8lf\n", lt_x,lt_y,lt_z); fprintf(outfile,"\t<n|mu_e|0>* %11.8lf \t %11.8lf \t %11.8lf\n", rt_x,rt_y,rt_z); rs_x = 0.5 * ( rs_lx + rs_rx); rs_y = 0.5 * ( rs_ly + rs_ry); rs_z = 0.5 * ( rs_lz + rs_rz); rs = rs_x + rs_y + rs_z; S->RS_length = rs; fprintf(outfile,"\n"); fprintf(outfile,"\tRotational Strength (au) %11.8lf\n",rs); fprintf(outfile,"\tRotational Strength (10^-40 esu^2 cm^2) %11.8lf\n",rs*_au2cgs); fflush(outfile); fprintf(outfile,"\n\tVelocity-Gauge Rotational Strength for %d%3s\n",S->root+1, moinfo.labels[S->irrep]); fprintf(outfile,"\t X \t Y \t Z\n"); lt_x = lt_y = lt_z = 0.0; rt_x = rt_y = rt_z = 0.0; rs_lx = rs_ly = rs_lz = 0.0; rs_rx = rs_ry = rs_rz = 0.0; rs_x = rs_y = rs_z = 0.0; transp(+1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += moinfo.ltd[i][j] * moinfo.nabla[0][i][j]; lt_y += moinfo.ltd[i][j] * moinfo.nabla[1][i][j]; lt_z += moinfo.ltd[i][j] * moinfo.nabla[2][i][j]; } transL(+1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += moinfo.rtd[i][j] * moinfo.L[0][i][j]; rt_y += moinfo.rtd[i][j] * moinfo.L[1][i][j]; rt_z += moinfo.rtd[i][j] * moinfo.L[2][i][j]; } rs_lx = lt_x * rt_x; rs_ly = lt_y * rt_y; rs_lz = lt_z * rt_z; fprintf(outfile,"\t<0|mu_e|n> %11.8lf \t %11.8lf \t %11.8lf\n", lt_x,lt_y,lt_z); fprintf(outfile,"\t<n|mu_m|0> %11.8lf \t %11.8lf \t %11.8lf\n", rt_x,rt_y,rt_z); // Complex Conjugate lt_x = lt_y = lt_z = 0.0; rt_x = rt_y = rt_z = 0.0; for(i=0; i < 3 ; i++) for(j=0; j < nmo; j++) for(k=0; k < nmo; k++) { moinfo.nabla[i][j][k] = 0.0; moinfo.L[i][j][k] = 0.0; } transL(-1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { lt_x += moinfo.ltd[i][j] * moinfo.L[0][i][j]; lt_y += moinfo.ltd[i][j] * moinfo.L[1][i][j]; lt_z += moinfo.ltd[i][j] * moinfo.L[2][i][j]; } transp(-1.0); for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) { rt_x += moinfo.rtd[i][j] * moinfo.nabla[0][i][j]; rt_y += moinfo.rtd[i][j] * moinfo.nabla[1][i][j]; rt_z += moinfo.rtd[i][j] * moinfo.nabla[2][i][j]; } rs_rx = lt_x * rt_x; rs_ry = lt_y * rt_y; rs_rz = lt_z * rt_z; rs_x = 0.5 * ( rs_lx + rs_rx); rs_y = 0.5 * ( rs_ly + rs_ry); rs_z = 0.5 * ( rs_lz + rs_rz); fprintf(outfile,"\t<0|mu_m|n>* %11.8lf \t %11.8lf \t %11.8lf\n", lt_x,lt_y,lt_z); fprintf(outfile,"\t<n|mu_e|0>* %11.8lf \t %11.8lf \t %11.8lf\n", rt_x,rt_y,rt_z); rs_x = rs_x / S->cceom_energy; rs_y = rs_y / S->cceom_energy; rs_z = rs_z / S->cceom_energy; rs = rs_x + rs_y + rs_z; S->RS_velocity = rs; fprintf(outfile,"\n"); fprintf(outfile,"\tRotational Strength (au) %11.8lf\n",rs); fprintf(outfile,"\tRotational Strength (10^-40 esu^2 cm^2) %11.8lf\n",rs*_au2cgs); fflush(outfile); return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/rtdensity.cc�����������������������������������������������������������������0000644�0001015�0000765�00000037356�11001635115�016070� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void rtdensity(struct TD_Params S) { dpdfile2 D, T1, L1, Z; dpdbuf4 T2, L2; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDIJ"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDij"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, S.irrep, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDia"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(i,m)"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, S.irrep, 1, 1, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_TMP, "RTDAI"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "Lia"); dpd_file2_copy(&L1, CC_TMP, "RTDai"); dpd_file2_close(&L1); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDIJ"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 2, "RTDij"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &D, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_contract222(&T1, &L1, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 3, 3, "RTDab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &D, 3, 3, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &D, 1, 1, 1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(I,M)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); /* D(I,A) << L2(MN,EF) T2(IN,EF) T(M,A) + L2(Mn,Ef) T2(In,Ef) T(M,A) */ dpd_file2_init(&Z, CC_TMP0, S.irrep, 0, 0, "Z(I,M)"); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); /* T2(MN,AF) L2(MN,EF) T(I,E) + T2(Mn,Af) L2(Mn,Ef) T(I,E) */ dpd_file2_init(&Z, CC_TMP0, S.irrep, 1, 1, "Z(A,E)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 3, "RTDia"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &D, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Z, CC_TMP0, S.irrep, 2, 2, "Z(i,m)"); dpd_contract222(&T1, &L1, &Z, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_init(&Z, CC_TMP0, S.irrep, 2, 2, "Z(i,m)"); dpd_buf4_init(&L2, CC_GL, S.irrep, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&T2, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&Z, &T1, &D, 0, 1, -1.0, 1.0); dpd_file2_close(&Z); dpd_file2_close(&T1); dpd_file2_init(&Z, CC_TMP0, S.irrep, 3, 3, "Z(a,e)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&L2, CC_GL, S.irrep, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&L2, CC_GL, S.irrep, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&T2, &L2, &Z, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1, &Z, &D, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&Z); dpd_file2_close(&D); /* Note that these blocks are still stored occ/vir */ dpd_file2_init(&L1, CC_GL, S.irrep, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_TMP, "RTDAI"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, S.irrep, 2, 3, "Lia"); dpd_file2_copy(&L1, CC_TMP, "RTDai"); dpd_file2_close(&L1); } return; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/setup_LR.cc������������������������������������������������������������������0000644�0001015�0000765�00000050327�10757640026�015607� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void setup_LR(struct RHO_Params rho_params) { dpdfile2 L1,R1,Z1,F; dpdbuf4 L2,R2,Z2; int i,j,L_irr, R_irr, G_irr, L_root, R_root; char L1A_lbl[32], L1B_lbl[32], L2AA_lbl[32], L2BB_lbl[32], L2AB_lbl[32], L2RHF_lbl[32]; char R1A_lbl[32], R1B_lbl[32], R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32], R2RHF_lbl[32]; char lbl[32]; double tval, one_energy, this_energy, total_two_energy, two_energy, R0; L_irr = rho_params.L_irr; R_irr = rho_params.R_irr; G_irr = rho_params.G_irr; L_root = rho_params.L_root; R_root = rho_params.R_root; R0 = rho_params.R0; /* fprintf(outfile,"\n"); if(L_root+1 == 0) fprintf(outfile,"\tDensity for GS %3s\n",moinfo.labels[L_irr]); else fprintf(outfile,"\tDensity for ES %d%3s\n",L_root+1,moinfo.labels[L_irr]); fflush(outfile); */ /* fprintf(outfile,"\n\tSetting up L and R to compute density\n"); fprintf(outfile,"\tLeft-hand eigenvector: symmetry %s and excited root %d\n", moinfo.labels[L_irr], L_root+1); fprintf(outfile,"\tRight-hand eigenvector: symmetry %s and excited root %d\n", moinfo.labels[R_irr], R_root+1); fprintf(outfile,"\tR0 = %15.10lf\n",params.R0); */ /* form labels for the L to be copied */ sprintf(L1A_lbl,"LIA %d %d", L_irr, L_root); sprintf(L1B_lbl,"Lia %d %d", L_irr, L_root); sprintf(L2AA_lbl,"LIJAB %d %d", L_irr, L_root ); sprintf(L2BB_lbl,"Lijab %d %d", L_irr, L_root ); sprintf(L2AB_lbl,"LIjAb %d %d", L_irr, L_root ); sprintf(L2RHF_lbl,"2LIjAb - LIjbA %d %d", L_irr, L_root ); /*** GLG is used by the ground state density code and contains R0*L + Zeta */ /*** the first term disappears if L_irr != G_irr (excitation is asymmetric) */ if ( (L_irr == G_irr) && (!params.calc_xi) ) { if (params.ref == 0) { dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2RHF_lbl); dpd_buf4_copy(&L2, CC_GLG, "2LIjAb - LIjbA"); dpd_buf4_close(&L2); } if ( (params.ref == 0) || (params.ref == 1) ) { dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1A_lbl); dpd_file2_copy(&L1, CC_GLG, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1B_lbl); dpd_file2_copy(&L1, CC_GLG, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_copy(&L2, CC_GLG, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2BB_lbl); dpd_buf4_copy(&L2, CC_GLG, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_copy(&L2, CC_GLG, "LIjAb"); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1A_lbl); dpd_file2_copy(&L1, CC_GLG, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, L_irr, 2, 3, L1B_lbl); dpd_file2_copy(&L1, CC_GLG, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_copy(&L2, CC_GLG, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 12, 17, 12, 17, 0, L2BB_lbl); dpd_buf4_copy(&L2, CC_GLG, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 22, 28, 22, 28, 0, L2AB_lbl); dpd_buf4_copy(&L2, CC_GLG, "LIjAb"); dpd_buf4_close(&L2); } } /* put copy of L in CC_GL for excited state parts of density */ if (!params.ground) { if (params.ref == 0) { dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2RHF_lbl); dpd_buf4_copy(&L2, CC_GL, "2LIjAb - LIjbA"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "2LIjAb - LIjbA (IA,jb)"); dpd_buf4_close(&L2); } if ( (params.ref==0) || (params.ref==1) ) { dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1A_lbl); dpd_file2_copy(&L1, CC_GL, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1B_lbl); dpd_file2_copy(&L1, CC_GL, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_copy(&L2, CC_GL, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2BB_lbl); dpd_buf4_copy(&L2, CC_GL, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_copy(&L2, CC_GL, "LIjAb"); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1A_lbl); dpd_file2_copy(&L1, CC_GL, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, L_irr, 2, 3, L1B_lbl); dpd_file2_copy(&L1, CC_GL, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_copy(&L2, CC_GL, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 12, 17, 12, 17, 0, L2BB_lbl); dpd_buf4_copy(&L2, CC_GL, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 22, 28, 22, 28, 0, L2AB_lbl); dpd_buf4_copy(&L2, CC_GL, "LIjAb"); dpd_buf4_close(&L2); } } /* for ground-state density contributions L <- R0 L + Zeta */ /* symmetry of L must be same as density */ if ( (!rho_params.L_ground) && (!params.calc_xi)) { if (params.connect_xi) rho_params.R0 = 0.0; if ( (params.ref==0) || (params.ref==1) ) { if (L_irr == G_irr) { dpd_file2_init(&L1, CC_GLG, L_irr, 0, 1, "LIA"); dpd_file2_scm(&L1, rho_params.R0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, L_irr, 0, 1, "Lia"); dpd_file2_scm(&L1, rho_params.R0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); } else { dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); dpd_file2_scm(&L1, 0.0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "Lia"); dpd_file2_scm(&L1, 0.0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); } if (params.use_zeta) { dpd_file2_init(&Z1, CC_LAMPS, G_irr, 0, 1, "ZIA"); dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); dpd_file2_axpy(&Z1, &L1, 1.0, 0); dpd_file2_close(&L1); dpd_file2_close(&Z1); dpd_file2_init(&Z1, CC_LAMPS, G_irr, 0, 1, "Zia"); dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "Lia"); dpd_file2_axpy(&Z1, &L1, 1.0, 0); dpd_file2_close(&L1); dpd_file2_close(&Z1); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 2, 7, 2, 7, 0, "ZIJAB"); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 2, 7, 2, 7, 0, "Zijab"); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 0, 5, 0, 5, 0, "ZIjAb"); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); } } else if (params.ref==2) { if (L_irr == G_irr) { dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); dpd_file2_scm(&L1, rho_params.R0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, G_irr, 2, 3, "Lia"); dpd_file2_scm(&L1, rho_params.R0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_scm(&L2, rho_params.R0); dpd_buf4_close(&L2); } else { dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); dpd_file2_scm(&L1, 0.0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, G_irr, 2, 3, "Lia"); dpd_file2_scm(&L1, 0.0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_scm(&L2, 0.0); dpd_buf4_close(&L2); } /* check magnitude */ dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); tval = dpd_file2_dot_self(&L1); dpd_file2_close(&L1); fprintf(outfile,"Ro*L+Zeta in CC_GLG, LIA before zeta: %15.10lf\n",tval); if (params.use_zeta) { dpd_file2_init(&Z1, CC_LAMPS, G_irr, 0, 1, "ZIA"); dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); dpd_file2_axpy(&Z1, &L1, 1.0, 0); dpd_file2_close(&L1); dpd_file2_close(&Z1); dpd_file2_init(&Z1, CC_LAMPS, G_irr, 2, 3, "Zia"); dpd_file2_init(&L1, CC_GLG, G_irr, 2, 3, "Lia"); dpd_file2_axpy(&Z1, &L1, 1.0, 0); dpd_file2_close(&L1); dpd_file2_close(&Z1); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 2, 7, 2, 7, 0, "ZIJAB"); dpd_buf4_init(&L2, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 12, 17, 12, 17, 0, "Zijab"); dpd_buf4_init(&L2, CC_GLG, G_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_LAMPS, G_irr, 22, 28, 22, 28, 0, "ZIjAb"); dpd_buf4_init(&L2, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_axpy(&Z2, &L2, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); /* check magnitude */ dpd_file2_init(&L1, CC_GLG, G_irr, 0, 1, "LIA"); tval = dpd_file2_dot_self(&L1); dpd_file2_close(&L1); fprintf(outfile,"Ro*L+Zeta in CC_GLG, LIA: %15.10lf\n",tval); } } } /* now sort entries in CC_GLG */ if (!params.calc_xi) { if( (params.ref==0) || (params.ref==1) ) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, qpsr, 0, 5, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GLG, psrq, 10, 10, "LIbjA"); dpd_buf4_sort(&L2, CC_GLG, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, qpsr, 23, 29, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 20, 20, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GLG, prqs, 30, 30, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, prqs, 20, 30, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 30, 20, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, G_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GLG, psrq, 24, 27, "LIbjA"); dpd_buf4_sort(&L2, CC_GLG, rqps, 27, 24, "LjAIb"); dpd_buf4_close(&L2); } } if (!params.ground) { /* sort entries in CC_GL */ if ( (params.ref==0) || (params.ref==1) ) { /** RHF/ROHF **/ /* Build L2iJaB list */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, qpsr, 0, 5, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, pqsr, 0, 5, "LIjaB"); dpd_buf4_sort(&L2, CC_GL, qprs, 0, 5, "LiJAb"); dpd_buf4_close(&L2); /* Build L2IAJB List */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LIAJB"); dpd_buf4_close(&L2); /* Build L2iajb List */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "Liajb"); dpd_buf4_close(&L2); /* Build L2IAjb List */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LIAjb"); dpd_buf4_close(&L2); /* Build L2iaJB List */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); /* Build L2IbjA and L2 jAIb Lists */ dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GL, psrq, 10, 10, "LIbjA"); dpd_buf4_sort(&L2, CC_GL, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, qpsr, 23, 29, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, pqsr, 22, 29, "LIjaB"); dpd_buf4_sort(&L2, CC_GL, qprs, 23, 28, "LiJAb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GL, prqs, 20, 20, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GL, prqs, 30, 30, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, prqs, 20, 30, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, prqs, 30, 20, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GL, psrq, 24, 27, "LIbjA"); dpd_buf4_sort(&L2, CC_GL, rqps, 27, 24, "LjAIb"); dpd_buf4_close(&L2); } } if (!rho_params.R_ground) { /* put copy of R into CC_GR */ sprintf(R1A_lbl,"RIA %d %d", R_irr, R_root); sprintf(R1B_lbl,"Ria %d %d", R_irr, R_root); sprintf(R2AA_lbl,"RIJAB %d %d", R_irr, R_root ); sprintf(R2BB_lbl,"Rijab %d %d", R_irr, R_root ); sprintf(R2AB_lbl,"RIjAb %d %d", R_irr, R_root ); sprintf(R2RHF_lbl,"2RIjAb - RIjbA %d %d", R_irr, R_root ); if (params.ref == 0) { dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 0, 5, 0, R2RHF_lbl); dpd_buf4_copy(&R2, CC_GR, "2RIjAb - RIjbA"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "2RIjAb - RIjbA (IA,jb)"); dpd_buf4_close(&R2); } if ( (params.ref == 0) || (params.ref == 1) ) { dpd_file2_init(&R1, CC_RAMPS, R_irr, 0, 1, R1A_lbl); dpd_file2_copy(&R1, CC_GR, "RIA"); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, R_irr, 0, 1, R1B_lbl); dpd_file2_copy(&R1, CC_GR, "Ria"); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 2, 7, 2, 7, 0, R2AA_lbl); dpd_buf4_copy(&R2, CC_GR, "RIJAB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 2, 7, 2, 7, 0, R2BB_lbl); dpd_buf4_copy(&R2, CC_GR, "Rijab"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 0, 5, 0, R2AB_lbl); dpd_buf4_copy(&R2, CC_GR, "RIjAb"); dpd_buf4_close(&R2); } else if (params.ref == 2) { dpd_file2_init(&R1, CC_RAMPS, R_irr, 0, 1, R1A_lbl); dpd_file2_copy(&R1, CC_GR, "RIA"); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, R_irr, 2, 3, R1B_lbl); dpd_file2_copy(&R1, CC_GR, "Ria"); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 2, 7, 2, 7, 0, R2AA_lbl); dpd_buf4_copy(&R2, CC_GR, "RIJAB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 12, 17, 12, 17, 0, R2BB_lbl); dpd_buf4_copy(&R2, CC_GR, "Rijab"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 22, 28, 22, 28, 0, R2AB_lbl); dpd_buf4_copy(&R2, CC_GR, "RIjAb"); dpd_buf4_close(&R2); } /* Now sort copy of R in CC_GR */ if( (params.ref==0) || (params.ref==1) ) { /** RHF/ROHF **/ /* Build R2iJaB list */ dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, qpsr, 0, 5, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, pqsr, 0, 5, "RIjaB"); dpd_buf4_sort(&R2, CC_GR, qprs, 0, 5, "RiJAb"); dpd_buf4_close(&R2); /* Build R2IAJB List */ dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RIAJB"); dpd_buf4_close(&R2); /* Build R2iajb List */ dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "Rijab"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "Riajb"); dpd_buf4_close(&R2); /* Build R2IAjb List */ dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RIAjb"); dpd_buf4_close(&R2); /* Build R2iaJB List */ dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RiaJB"); dpd_buf4_close(&R2); /* Build R2IbjA and R2 jAIb Lists */ dpd_buf4_init(&R2, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_GR, psrq, 10, 10, "RIbjA"); dpd_buf4_sort(&R2, CC_GR, rqps, 10, 10, "RjAIb"); dpd_buf4_close(&R2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, qpsr, 23, 29, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, pqsr, 22, 29, "RIjaB"); dpd_buf4_sort(&R2, CC_GR, qprs, 23, 28, "RiJAb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_GR, prqs, 20, 20, "RIAJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 15, 12, 17, 0, "Rijab"); dpd_buf4_sort(&R2, CC_GR, prqs, 30, 30, "Riajb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, prqs, 20, 30, "RIAjb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, prqs, 30, 20, "RiaJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_GR, psrq, 24, 27, "RIbjA"); dpd_buf4_sort(&R2, CC_GR, rqps, 27, 24, "RjAIb"); dpd_buf4_close(&R2); } } return; } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sort_ltd_rohf.cc�������������������������������������������������������������0000644�0001015�0000765�00000011000�10757640026�016703� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void sort_ltd_rohf(struct TD_Params S) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double chksum, value; psio_address next; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; moinfo.ltd = block_matrix(nmo, nmo); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "LTDIJ"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h^S.irrep]; j++) { J = qt_occ[occ_off[h^S.irrep] + j]; moinfo.ltd[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "LTDAB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < (virtpi[h^S.irrep] - openpi[h^S.irrep]); b++) { B = qt_vir[vir_off[h^S.irrep] + b]; moinfo.ltd[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDAI"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h^S.irrep] - openpi[h^S.irrep]); a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.ltd[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDIA"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h^S.irrep] - openpi[h^S.irrep]); a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.ltd[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "LTDij"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < (occpi[h^S.irrep] - openpi[h^S.irrep]); j++) { J = qt_occ[occ_off[h^S.irrep] + j]; moinfo.ltd[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "LTDab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h^S.irrep]; b++) { B = qt_vir[vir_off[h^S.irrep] + b]; moinfo.ltd[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDai"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h^S.irrep]; a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.ltd[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDia"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h^S.irrep]; a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.ltd[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /*mat_print(moinfo.ltd,nmo,nmo,outfile);*/ return; } }} // namespace psi::ccdensity psi3/src/bin/ccdensity/sort_ltd_uhf.cc��������������������������������������������������������������0000644�0001015�0000765�00000011362�10757640026�016542� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void sort_ltd_uhf(struct TD_Params S) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; int *aocc_sym, *avir_sym; int *bocc_sym, *bvir_sym; int *qt_aocc, *qt_avir; int *qt_bocc, *qt_bvir; double chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; avir_sym = moinfo.avir_sym; qt_aocc = moinfo.qt_aocc; qt_avir = moinfo.qt_avir; qt_bocc = moinfo.qt_bocc; qt_bvir = moinfo.qt_bvir; moinfo.ltd_a = block_matrix(nmo,nmo); moinfo.ltd_b = block_matrix(nmo,nmo); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "LTDIJ"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(j=0; j < aoccpi[h^S.irrep]; j++) { J = qt_aocc[aocc_off[h^S.irrep] + j]; moinfo.ltd_a[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "LTDAB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; for(b=0; b < avirtpi[h^S.irrep]; b++) { B = qt_avir[avir_off[h^S.irrep] + b]; moinfo.ltd_a[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDAI"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h^S.irrep]; a++) { A = qt_avir[avir_off[h^S.irrep] + a]; moinfo.ltd_a[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "LTDIA"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h^S.irrep]; a++) { A = qt_avir[avir_off[h^S.irrep] + a]; moinfo.ltd_a[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 2, "LTDij"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(j=0; j < boccpi[h^S.irrep]; j++) { J = qt_bocc[bocc_off[h^S.irrep] + j]; moinfo.ltd_b[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 3, 3, "LTDab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; for(b=0; b < bvirtpi[h^S.irrep]; b++) { B = qt_bvir[bvir_off[h^S.irrep] + b]; moinfo.ltd_b[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 2, 3, "LTDai"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h^S.irrep]; a++) { A = qt_bvir[bvir_off[h^S.irrep] + a]; moinfo.ltd_b[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 3, "LTDia"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h^S.irrep]; a++) { A = qt_bvir[bvir_off[h^S.irrep] + a]; moinfo.ltd_b[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /*mat_print(moinfo.ltd_a,nmo,nmo,outfile);*/ /*mat_print(moinfo.ltd_b,nmo,nmo,outfile);*/ return; } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sort_rtd_rohf.cc�������������������������������������������������������������0000644�0001015�0000765�00000010752�10757640026�016726� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void sort_rtd_rohf(struct TD_Params S) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; moinfo.rtd = block_matrix(nmo, nmo); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDIJ"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h^S.irrep]; j++) { J = qt_occ[occ_off[h^S.irrep] + j]; moinfo.rtd[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDAB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < (virtpi[h^S.irrep] - openpi[h^S.irrep]); b++) { B = qt_vir[vir_off[h^S.irrep] + b]; moinfo.rtd[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDAI"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h^S.irrep] - openpi[h^S.irrep]); a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.rtd[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDIA"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h^S.irrep] - openpi[h^S.irrep]); a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.rtd[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDij"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < (occpi[h^S.irrep] - openpi[h^S.irrep]); j++) { J = qt_occ[occ_off[h^S.irrep] + j]; moinfo.rtd[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h^S.irrep]; b++) { B = qt_vir[vir_off[h^S.irrep] + b]; moinfo.rtd[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDai"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h^S.irrep]; a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.rtd[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDia"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h^S.irrep]; a++) { A = qt_vir[vir_off[h^S.irrep] + a]; moinfo.rtd[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /*print_mat(moinfo.rtd,nmo,nmo,outfile);*/ return; } }} // namespace psi::ccdensity ����������������������psi3/src/bin/ccdensity/sort_rtd_uhf.cc��������������������������������������������������������������0000644�0001015�0000765�00000011455�10757640026�016553� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void sort_rtd_uhf(struct TD_Params S) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; int *aocc_sym, *avir_sym; int *bocc_sym, *bvir_sym; int *qt_aocc, *qt_avir; int *qt_bocc, *qt_bvir; double chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; avir_sym = moinfo.avir_sym; bocc_sym = moinfo.bocc_sym; bvir_sym = moinfo.bvir_sym; qt_aocc = moinfo.qt_aocc; qt_avir = moinfo.qt_avir; qt_bocc = moinfo.qt_bocc; qt_bvir = moinfo.qt_bvir; moinfo.rtd_a = block_matrix(nmo,nmo); moinfo.rtd_b = block_matrix(nmo,nmo); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 0, "RTDIJ"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(j=0; j < aoccpi[h^S.irrep]; j++) { J = qt_aocc[aocc_off[h^S.irrep] + j]; moinfo.rtd_a[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 1, 1, "RTDAB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; for(b=0; b < avirtpi[h^S.irrep]; b++) { B = qt_avir[avir_off[h^S.irrep] + b]; moinfo.rtd_a[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDAI"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h^S.irrep]; a++) { A = qt_avir[avir_off[h^S.irrep] + a]; moinfo.rtd_a[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 0, 1, "RTDIA"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h^S.irrep]; a++) { A = qt_avir[avir_off[h^S.irrep] + a]; moinfo.rtd_a[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 2, "RTDij"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(j=0; j < boccpi[h^S.irrep]; j++) { J = qt_bocc[bocc_off[h^S.irrep] + j]; moinfo.rtd_b[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 3, 3, "RTDab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; for(b=0; b < bvirtpi[h^S.irrep]; b++) { B = qt_bvir[bvir_off[h^S.irrep] + b]; moinfo.rtd_b[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_TMP, S.irrep, 2, 3, "RTDai"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h^S.irrep]; a++) { A = qt_bvir[bvir_off[h^S.irrep] + a]; moinfo.rtd_b[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_TMP, S.irrep, 2, 3, "RTDia"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h^S.irrep]; a++) { A = qt_bvir[bvir_off[h^S.irrep] + a]; moinfo.rtd_b[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /*print_mat(moinfo.rtd_a,nmo,nmo,outfile);*/ /*print_mat(moinfo.rtd_b,nmo,nmo,outfile);*/ return; } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortI.cc���������������������������������������������������������������������0000644�0001015�0000765�00000001665�11027011315�015133� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* SORTI(): Place all the components of the Lagrangian into a large ** matrix, I (moinfo.I), which we also symmetrize by computing Ipq = ** 1/2 (Ipq + Iqp). This matrix is later written to disk in dump() ** for subsequent backtransformation. Note that some of the ** components of the Lagrangian computed into the IIJ, Iij, IIA, and ** Iia matrices remain non-symmetric (e.g., IIJ neq IJI). I re-used ** my sortone.c code here, so don't let some of the variable names ** confuse you. */ void sortI_RHF(void); void sortI_ROHF(void); void sortI_UHF(void); void sortI(void) { if(params.ref == 0) sortI_RHF(); else if(params.ref == 1) sortI_ROHF(); else if(params.ref == 2) sortI_UHF(); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������psi3/src/bin/ccdensity/sortI_RHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000006570�11027011315�015632� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libdpd/dpd.h> #include <math.h> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* SORTI_RHF(): Place all the components of the RHF Lagrangian into ** a large matrix, I (moinfo.I), which we also symmetrize by computing ** Ipq = 1/2 (Ipq + Iqp). This matrix is later written to disk in ** dump() for subsequent backtransformation. Note that some of the ** components of the Lagrangian computed into the IIJ, Iij, IIA, and ** Iia matrices remain non-symmetric (e.g., IIJ neq IJI). I re-used ** my sortone.c code here, so don't let some of the variable names ** confuse you. ** ** NB: For now, I just multiply the components by two to account for ** spin adaptation. The factors of two should later move into the I ** build itself. ** ** TDC, 2/2008 */ void sortI_RHF(void) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double **O, chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; O = block_matrix(nmo,nmo); /* Sort alpha components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h]; j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += 2.0 * D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h]; b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += 2.0 * D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += 2.0 * D.matrix[h][i][a]; O[I][A] += 2.0 * D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Symmetrize the Lagrangian */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < p; q++) { value = 0.5*(O[p][q] + O[q][p]); O[p][q] = O[q][p] = value; } } /* Multiply the Lagrangian by -2.0 for the final energy derivative expression */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < (nmo-nfzv); q++) { O[p][q] *= -2.0; } } moinfo.I = O; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortI_ROHF.cc����������������������������������������������������������������0000644�0001015�0000765�00000011034�10757640026�015760� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* SORTI_ROHF(): Place all the components of the ROHF Lagrangian into ** a large matrix, I (moinfo.I), which we also symmetrize by computing ** Ipq = 1/2 (Ipq + Iqp). This matrix is later written to disk in ** dump() for subsequent backtransformation. Note that some of the ** components of the Lagrangian computed into the IIJ, Iij, IIA, and ** Iia matrices remain non-symmetric (e.g., IIJ neq IJI). I re-used ** my sortone.c code here, so don't let some of the variable names ** confuse you. */ void sortI_ROHF(void) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double **O, chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; O = block_matrix(nmo,nmo); /* Sort alpha components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h]; j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < (virtpi[h] - openpi[h]); b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += D.matrix[h][i][a]; O[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Sort beta components */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, "I(i,j)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < (occpi[h] - openpi[h]); j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, "I'ab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h]; b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, "I(i,a)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += D.matrix[h][i][a]; O[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Symmetrize the Lagrangian */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < p; q++) { value = 0.5*(O[p][q] + O[q][p]); O[p][q] = O[q][p] = value; } } /* Multiply the Lagrangian by -2.0 for the final energy derivative expression */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < (nmo-nfzv); q++) { O[p][q] *= -2.0; } } moinfo.I = O; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortI_UHF.cc�����������������������������������������������������������������0000644�0001015�0000765�00000011516�10757640026�015651� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* SORTI_UHF(): Place all the components of the UHF Lagrangian into a ** large matrix, I (moinfo.I), which we also symmetrize by computing ** Ipq = 1/2 (Ipq + Iqp). This matrix is later written to disk in ** dump() for subsequent backtransformation. Note that some of the ** components of the Lagrangian computed into the IIJ, Iij, IIA, and ** Iia matrices remain non-symmetric (e.g., IIJ neq IJI). I re-used ** my sortone.c code here, so don't let some of the variable names ** confuse you. */ void sortI_UHF(void) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; int *aocc_sym, *avir_sym; int *bocc_sym, *bvir_sym; int *qt_aocc, *qt_avir; int *qt_bocc, *qt_bvir; double **O_a, **O_b; double chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; avir_sym = moinfo.avir_sym; bocc_sym = moinfo.bocc_sym; bvir_sym = moinfo.bvir_sym; qt_aocc = moinfo.qt_aocc; qt_avir = moinfo.qt_avir; qt_bocc = moinfo.qt_bocc; qt_bvir = moinfo.qt_bvir; O_a = block_matrix(nmo,nmo); O_b = block_matrix(nmo,nmo); /* Sort alpha components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, "I(I,J)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(j=0; j < aoccpi[h]; j++) { J = qt_aocc[aocc_off[h] + j]; O_a[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, "I'AB"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; for(b=0; b < avirtpi[h]; b++) { B = qt_avir[avir_off[h] + b]; O_a[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, "I(I,A)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; O_a[A][I] += D.matrix[h][i][a]; O_a[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Sort beta components */ dpd_file2_init(&D, CC_OEI, 0, 2, 2, "I(i,j)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(j=0; j < boccpi[h]; j++) { J = qt_bocc[bocc_off[h] + j]; O_b[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, "I'ab"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; for(b=0; b < bvirtpi[h]; b++) { B = qt_bvir[bvir_off[h] + b]; O_b[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, "I(i,a)"); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; O_b[A][I] += D.matrix[h][i][a]; O_b[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Symmetrize the Lagrangians */ for(p=0; p < nmo; p++) { for(q=0; q < p; q++) { value = 0.5*(O_a[p][q] + O_a[q][p]); O_a[p][q] = O_a[q][p] = value; value = 0.5*(O_b[p][q] + O_b[q][p]); O_b[p][q] = O_b[q][p] = value; } } /* fprintf(outfile, "\n\tAlpha MO Lag:\n"); mat_print(O_a, nmo, nmo, outfile); fprintf(outfile, "\n\tBeta MO Lag:\n"); mat_print(O_b, nmo, nmo, outfile); */ /* Multiply the Lagrangian by -2.0 for the final energy derivative expression */ for(p=0; p < nmo; p++) { for(q=0; q < nmo; q++) { O_a[p][q] *= -2.0; O_b[p][q] *= -2.0; } } moinfo.I_a = O_a; moinfo.I_b = O_b; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortone.cc�������������������������������������������������������������������0000644�0001015�0000765�00000001126�11027011315�015514� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void sortone_RHF(struct RHO_Params rho_params); void sortone_ROHF(struct RHO_Params rho_params); void sortone_UHF(struct RHO_Params rho_params); void sortone(struct RHO_Params rho_params) { if(params.ref == 0) sortone_RHF(rho_params); else if(params.ref == 1) sortone_ROHF(rho_params); else if(params.ref == 2) sortone_UHF(rho_params); } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortone_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000007443�11027011315�016223� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <stdio.h> #include <libdpd/dpd.h> #include <math.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <psifiles.h> /* ** sortone_rhf(): Place all the components of the 1pdm into a large ** matrix, O (moinfo.opdm), which we also symmetrize by computing Opq ** = 1/2 (Opq + Oqp). This matrix is later written to disk in dump() ** for subsequent backtransformation. Note that the components of the ** 1pdm computed into the DIJ, Dij, DAB, Dab, DAI, Dai, DIA, and Dia ** matrices remain non-symmetric (e.g., DIJ neq DJI). ** ** This version doesn't work with frozen orbitals yet. ** ** TDC, 1/03 ** ** NB: For now, I just multiply the components by two to account for ** spin adaptation. The factors of two should later move into the I ** build itself. ** ** TDC, 2/2008 */ void sortone_RHF(struct RHO_Params rho_params) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double **O, chksum, value; dpdfile2 D; psio_address next; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; /* O = block_matrix(nmo-nfzc,nmo-nfzc); */ O = block_matrix(nmo-nfzv, nmo-nfzv); /* Sort A components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h]; j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += 2.0 * D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h]; b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += 2.0 * D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += 2.0 * D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[I][A] += 2.0 * D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Symmetrize the onepdm */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < p; q++) { value = 0.5 * (O[p][q] + O[q][p]); O[p][q] = O[q][p] = value; } } moinfo.opdm = O; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortone_ROHF.cc��������������������������������������������������������������0000644�0001015�0000765�00000013463�10757640026�016361� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <psifiles.h> /* ** sortone_rohf(): Place all the components of the 1pdm into a large ** matrix, O (moinfo.opdm), which we also symmetrize by computing Opq ** = 1/2 (Opq + Oqp). This matrix is later written to disk in dump() ** for subsequent backtransformation. Note that the components of the ** 1pdm computed into the DIJ, Dij, DAB, Dab, DAI, Dai, DIA, and Dia ** matrices remain non-symmetric (e.g., DIJ neq DJI). ** ** This version doesn't work with frozen orbitals yet. ** ** TDC, 1/03 */ void sortone_ROHF(struct RHO_Params rho_params) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *occpi, *virtpi, *occ_off, *vir_off; int *occ_sym, *vir_sym, *openpi; int *qt_occ, *qt_vir; double **O, chksum, value; dpdfile2 D; psio_address next; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; qt_occ = moinfo.qt_occ; qt_vir = moinfo.qt_vir; /* O = block_matrix(nmo-nfzc,nmo-nfzc); */ O = block_matrix(nmo-nfzv, nmo-nfzv); /* Sort A components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < occpi[h]; j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < (virtpi[h] - openpi[h]); b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < (virtpi[h] - openpi[h]); a++) { A = qt_vir[vir_off[h] + a]; O[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Sort B components */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(j=0; j < (occpi[h] - openpi[h]); j++) { J = qt_occ[occ_off[h] + j]; O[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; for(b=0; b < virtpi[h]; b++) { B = qt_vir[vir_off[h] + b]; O[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { I = qt_occ[occ_off[h] + i]; for(a=0; a < virtpi[h]; a++) { A = qt_vir[vir_off[h] + a]; O[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Symmetrize the onepdm */ for(p=0; p < (nmo-nfzv); p++) { for(q=0; q < p; q++) { value = 0.5 * (O[p][q] + O[q][p]); O[p][q] = O[q][p] = value; } } /* for (i=0;i<(nmo-nfzv);++i) { for (j=0;j<(nmo-nfzv); ++j) { fprintf(outfile,"%15.10lf\n", O[i][j]); } fprintf(outfile,"\n"); } fprintf(outfile,"End of sortone\n"); */ /* for (i=0;i<2;++i) { for (j=0;j<5;++j) fprintf(outfile,"%15.10lf",O[i][j]); fprintf(outfile,"\n"); } print_mat(O,nmo-nfzv,nmo-nfzv,outfile); */ moinfo.opdm = O; } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/sortone_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000014004�10757640026�016235� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <psifiles.h> /* ** sortone_uhf(): Place all the components of the 1pdm into two ** spin-factored matrices, O_a (moinfo.opdm_a) and O_b ** (moinfo.opdm_b), which we also symmetrize by computing Opq = 1/2 ** (Opq + Oqp). These matrices are later written to disk in dump() ** for subsequent backtransformation. Note that the components of the ** 1pdm computed into the DIJ, Dij, DAB, Dab, DAI, Dai, DIA, and Dia ** matrices remain non-symmetric (e.g., DIJ neq DJI). ** ** This will not work at present for frozen orbitals! ** ** TDC, 1/03 */ void sortone_UHF(struct RHO_Params rho_params) { int h, nirreps, nmo, nfzv, nfzc, nclsd, nopen; int row, col, i, j, I, J, a, b, A, B, p, q; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; int *aocc_sym, *avir_sym; int *bocc_sym, *bvir_sym; int *qt_aocc, *qt_avir; int *qt_bocc, *qt_bvir; double **O_a, **O_b; double chksum, value; dpdfile2 D; nmo = moinfo.nmo; nfzc = moinfo.nfzc; nfzv = moinfo.nfzv; nclsd = moinfo.nclsd; nopen = moinfo.nopen; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; avir_sym = moinfo.avir_sym; bocc_sym = moinfo.bocc_sym; bvir_sym = moinfo.bvir_sym; qt_aocc = moinfo.qt_aocc; qt_avir = moinfo.qt_avir; qt_bocc = moinfo.qt_bocc; qt_bvir = moinfo.qt_bvir; O_a = block_matrix(nmo,nmo); O_b = block_matrix(nmo,nmo); /* Sort A components first */ dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(j=0; j < aoccpi[h]; j++) { J = qt_aocc[aocc_off[h] + j]; O_a[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; for(b=0; b < avirtpi[h]; b++) { B = qt_avir[avir_off[h] + b]; O_a[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; O_a[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { I = qt_aocc[aocc_off[h] + i]; for(a=0; a < avirtpi[h]; a++) { A = qt_avir[avir_off[h] + a]; O_a[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Sort B components */ dpd_file2_init(&D, CC_OEI, 0, 2, 2, rho_params.Dij_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(j=0; j < boccpi[h]; j++) { J = qt_bocc[bocc_off[h] + j]; O_b[I][J] += D.matrix[h][i][j]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; for(b=0; b < bvirtpi[h]; b++) { B = qt_bvir[bvir_off[h] + b]; O_b[A][B] += D.matrix[h][a][b]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* Note that this component of the density is stored occ-vir */ dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; O_b[A][I] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl); dpd_file2_mat_init(&D); dpd_file2_mat_rd(&D); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { I = qt_bocc[bocc_off[h] + i]; for(a=0; a < bvirtpi[h]; a++) { A = qt_bvir[bvir_off[h] + a]; O_b[I][A] += D.matrix[h][i][a]; } } } dpd_file2_mat_close(&D); dpd_file2_close(&D); /* fprintf(outfile, "\n\tAlpha MO OPDM:\n"); mat_print(O_a, nmo, nmo, outfile); fprintf(outfile, "\n\tBeta MO OPDM:\n"); mat_print(O_b, nmo, nmo, outfile); */ /* Symmetrize the onepdm's */ for(p=0; p < nmo; p++) { for(q=0; q < p; q++) { value = 0.5 * (O_a[p][q] + O_a[q][p]); O_a[p][q] = O_a[q][p] = value; value = 0.5 * (O_b[p][q] + O_b[q][p]); O_b[p][q] = O_b[q][p] = value; } } moinfo.opdm_a = O_a; moinfo.opdm_b = O_b; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/td_cleanup.cc����������������������������������������������������������������0000644�0001015�0000765�00000002002�10757640026�016153� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void td_cleanup(void) { psio_close(CC_TMP,0); psio_close(EOM_TMP,0); psio_close(EOM_TMP0,0); psio_close(EOM_TMP1,0); psio_close(CC_GLG,0); psio_close(CC_GL,0); psio_close(CC_GR,0); psio_open(CC_TMP,PSIO_OPEN_NEW); psio_open(EOM_TMP,PSIO_OPEN_NEW); psio_open(EOM_TMP0,PSIO_OPEN_NEW); psio_open(EOM_TMP1,PSIO_OPEN_NEW); psio_open(CC_GLG,PSIO_OPEN_NEW); psio_open(CC_GL,PSIO_OPEN_NEW); psio_open(CC_GR,PSIO_OPEN_NEW); if((params.ref==0) || (params.ref==1)) { free_block(moinfo.ltd); free_block(moinfo.rtd); } else if(params.ref==2) { free_block(moinfo.ltd_a); free_block(moinfo.ltd_b); free_block(moinfo.rtd_a); free_block(moinfo.rtd_b); } return; } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/td_print.cc������������������������������������������������������������������0000644�0001015�0000765�00000002115�10757640026�015665� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #include <physconst.h> #define _hartree2nm 0.02194746313710 void td_print(void) { int i; fprintf(outfile,"\n\t Excitation Energy OS RS RS\n"); fprintf(outfile,"\tState (eV) (cm^-1) (nm) (au) (l,au) (v,au)\n"); for(i=0; i<params.nstates; i++) { fprintf(outfile,"\t %d%3s %7.3lf %9.1lf %7.1lf %10.6lf %8.4lf %8.4lf %8.4lf\n", td_params[i].root+1,moinfo.labels[td_params[i].irrep], td_params[i].cceom_energy*_hartree2ev, td_params[i].cceom_energy*_hartree2wavenumbers, 1/(td_params[i].cceom_energy*_hartree2nm), td_params[i].cceom_energy, td_params[i].OS, td_params[i].RS_length,td_params[i].RS_velocity); } fprintf(outfile,"\n"); } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/td_setup.cc������������������������������������������������������������������0000644�0001015�0000765�00000027567�10757640026�015713� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void td_setup(struct TD_Params S) { dpdfile2 L1,R1; dpdbuf4 L2,R2; if((params.ref == 0) || (params.ref == 1)) { dpd_file2_init(&L1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); dpd_file2_copy(&L1, CC_GLG, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, 0, 0, 1, "Lia 0 -1"); dpd_file2_copy(&L1, CC_GLG, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, 0, 2, 7, 2, 7, 0, "LIJAB 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, 0, 2, 7, 2, 7, 0, "Lijab 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LIjAb 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "LIjAb"); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_file2_init(&L1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); dpd_file2_copy(&L1, CC_GLG, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, 0, 2, 3, "Lia 0 -1"); dpd_file2_copy(&L1, CC_GLG, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, 0, 2, 7, 2, 7, 0, "LIJAB 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, 0, 12, 17, 12, 17, 0, "Lijab 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, 0, 22, 28, 22, 28, 0, "LIjAb 0 -1"); dpd_buf4_copy(&L2, CC_GLG, "LIjAb"); dpd_buf4_close(&L2); } if((params.ref==0) || (params.ref==1)) { dpd_file2_init(&L1, CC_LAMPS, S.irrep, 0, 1, S.L1A_lbl); dpd_file2_copy(&L1, CC_GL, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, S.irrep, 0, 1, S.L1B_lbl); dpd_file2_copy(&L1, CC_GL, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 2, 7, 2, 7, 0, S.L2AA_lbl); dpd_buf4_copy(&L2, CC_GL, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 2, 7, 2, 7, 0, S.L2BB_lbl); dpd_buf4_copy(&L2, CC_GL, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 0, 5, 0, 5, 0, S.L2AB_lbl); dpd_buf4_copy(&L2, CC_GL, "LIjAb"); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_file2_init(&L1, CC_LAMPS, S.irrep, 0, 1, S.L1A_lbl); dpd_file2_copy(&L1, CC_GL, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMPS, S.irrep, 2, 3, S.L1B_lbl); dpd_file2_copy(&L1, CC_GL, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 2, 7, 2, 7, 0, S.L2AA_lbl); dpd_buf4_copy(&L2, CC_GL, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 12, 17, 12, 17, 0, S.L2BB_lbl); dpd_buf4_copy(&L2, CC_GL, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, S.irrep, 22, 28, 22, 28, 0, S.L2AB_lbl); dpd_buf4_copy(&L2, CC_GL, "LIjAb"); dpd_buf4_close(&L2); } if((params.ref == 0) || (params.ref == 1)) { dpd_file2_init(&R1, CC_RAMPS, S.irrep, 0, 1, S.R1A_lbl); dpd_file2_copy(&R1, CC_GR, "RIA"); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, S.irrep, 0, 1, S.R1B_lbl); dpd_file2_copy(&R1, CC_GR, "Ria"); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 2, 7, 2, 7, 0, S.R2AA_lbl); dpd_buf4_copy(&R2, CC_GR, "RIJAB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 2, 7, 2, 7, 0, S.R2BB_lbl); dpd_buf4_copy(&R2, CC_GR, "Rijab"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 0, 5, 0, 5, 0, S.R2AB_lbl); dpd_buf4_copy(&R2, CC_GR, "RIjAb"); dpd_buf4_close(&R2); } else if (params.ref == 2) { dpd_file2_init(&R1, CC_RAMPS, S.irrep, 0, 1, S.R1A_lbl); dpd_file2_copy(&R1, CC_GR, "RIA"); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, S.irrep, 2, 3, S.R1B_lbl); dpd_file2_copy(&R1, CC_GR, "Ria"); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 2, 7, 2, 7, 0, S.R2AA_lbl); dpd_buf4_copy(&R2, CC_GR, "RIJAB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 12, 17, 12, 17, 0, S.R2BB_lbl); dpd_buf4_copy(&R2, CC_GR, "Rijab"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, S.irrep, 22, 28, 22, 28, 0, S.R2AB_lbl); dpd_buf4_copy(&R2, CC_GR, "RIjAb"); dpd_buf4_close(&R2); } if((params.ref==0) || (params.ref==1)) { if((S.irrep == 0)) { dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_scm(&L1, S.R0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "Lia"); dpd_file2_scm(&L1, S.R0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, 0, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); } dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, qpsr, 0, 5, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GLG, psrq, 10, 10, "LIbjA"); dpd_buf4_sort(&L2, CC_GLG, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { if((S.irrep == 0)) { dpd_file2_init(&L1, CC_GLG, 0, 0, 1, "LIA"); dpd_file2_scm(&L1, S.R0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GLG, 0, 2, 3, "Lia"); dpd_file2_scm(&L1, S.R0); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_scm(&L2, S.R0); dpd_buf4_close(&L2); } dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, qpsr, 23, 29, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 20, 20, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GLG, prqs, 30, 30, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GLG, prqs, 20, 30, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GLG, prqs, 30, 20, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GLG, 0, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GLG, psrq, 24, 27, "LIbjA"); dpd_buf4_sort(&L2, CC_GLG, rqps, 27, 24, "LjAIb"); dpd_buf4_close(&L2); } if((params.ref==0) || (params.ref==1)) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, qpsr, 0, 5, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, pqsr, 0, 5, "LIjaB"); dpd_buf4_sort(&L2, CC_GL, qprs, 0, 5, "LiJAb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 2, 7, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GL, psrq, 10, 10, "LIbjA"); dpd_buf4_sort(&L2, CC_GL, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, qpsr, 23, 29, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, pqsr, 22, 29, "LIjaB"); dpd_buf4_sort(&L2, CC_GL, qprs, 23, 28, "LiJAb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_GL, prqs, 20, 20, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_sort(&L2, CC_GL, prqs, 30, 30, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_GL, prqs, 20, 30, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_GL, prqs, 30, 20, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, S.irrep, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_GL, psrq, 24, 27, "LIbjA"); dpd_buf4_sort(&L2, CC_GL, rqps, 27, 24, "LjAIb"); dpd_buf4_close(&L2); } if((params.ref==0) || (params.ref==1)) { /** RHF/ROHF **/ dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, qpsr, 0, 5, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, pqsr, 0, 5, "RIjaB"); dpd_buf4_sort(&R2, CC_GR, qprs, 0, 5, "RiJAb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RIAJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "Rijab"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "Riajb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RIAjb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, prqs, 10, 10, "RiaJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_GR, psrq, 10, 10, "RIbjA"); dpd_buf4_sort(&R2, CC_GR, rqps, 10, 10, "RjAIb"); dpd_buf4_close(&R2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&R2, CC_GR, S.irrep, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, qpsr, 23, 29, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, pqsr, 22, 29, "RIjaB"); dpd_buf4_sort(&R2, CC_GR, qprs, 23, 28, "RiJAb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_GR, prqs, 20, 20, "RIAJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 10, 15, 12, 17, 0, "Rijab"); dpd_buf4_sort(&R2, CC_GR, prqs, 30, 30, "Riajb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_GR, prqs, 20, 30, "RIAjb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_GR, prqs, 30, 20, "RiaJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, S.irrep, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_GR, psrq, 24, 27, "RIbjA"); dpd_buf4_sort(&R2, CC_GR, rqps, 27, 24, "RjAIb"); dpd_buf4_close(&R2); } return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/tdensity.cc������������������������������������������������������������������0000644�0001015�0000765�00000001627�10757640026�015714� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void ltdensity_rohf(struct TD_Params S); void ltdensity_uhf(struct TD_Params S); void ltdensity_intermediates(struct TD_Params S); void sort_ltd_rohf(struct TD_Params S); void sort_ltd_uhf(struct TD_Params S); void rtdensity(struct TD_Params S); void sort_rtd_rohf(struct TD_Params S); void sort_rtd_uhf(struct TD_Params S); void tdensity(struct TD_Params S) { if(params.ref == 0 || params.ref == 1) { ltdensity_rohf(S); sort_ltd_rohf(S); rtdensity(S); sort_rtd_rohf(S); } else if(params.ref == 2) { ltdensity_uhf(S); sort_ltd_uhf(S); rtdensity(S); sort_rtd_uhf(S); } return; } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/TODO�������������������������������������������������������������������������0000644�0001015�0000765�00000002154�11027011315�014206� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Spin-adaptation and general clean-up of CCDENSITY: X (1) dump X (2) add_ref X (3) add_core (nothing to be done here) X (4) deanti -- still need to make the energy calculation optional and account for all factors of 2 X (5) fold -- Still need to make energy calculation optional. X (6) sortI X (7) sortone X (8) relax_D X (9) relax_I X (10) build_Z X (11) build_A X (12) build_X X (13) lag -- Still need proper spin adaptation of each term to minimize contractions X (a) Iij X (b) Iab X (c) Iia X (d) Iai X (14) energy -- Still need to make energy calc optional (15) twopdm X (a) Gijkl X (b) Gabcd X (c) Gijka X (d) Gaibc X (e) Gijab (f) Giajb -- save until after (T) density code is finished (16) V_build -- save until later (17) G_build -- save until later (18) onepdm -- must first fully spin-adapt Lagrangian Other tasks: (1) Make use of swap23 option to dpd_buf4_dump() to save disk space? (2) Modify get_params.c and get_moinfo.c so that the former is always called first in the CC codes. X (3) In EOM-CCSD gradient cases, force params.ref=1 (ROHF) to avoid having the spin-adapt the Xi and Zeta codes for now. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/transdip.cc������������������������������������������������������������������0000644�0001015�0000765�00000011740�10757640026�015672� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { #define IOFF_MAX 32641 #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void transdip(void) { int nmo, nso, nao, noei, stat, i, I, h, j; int *order, *doccpi, *ioff; double **scf_pitzer, **scfA, **scfB; double **scf_qt, **X, **usotao; double *zvals, **geom; double *mu_x_ints, *mu_y_ints, *mu_z_ints; double **MUX_AO, **MUY_AO, **MUZ_AO; double **MUX_MO, **MUY_MO, **MUZ_MO; chkpt_init(PSIO_OPEN_OLD); if ((params.ref == 0) || (params.ref == 1)) scf_pitzer = chkpt_rd_scf(); else if(params.ref == 2) { scfA = chkpt_rd_alpha_scf(); scfB = chkpt_rd_beta_scf(); } nao = chkpt_rd_nao(); nso = chkpt_rd_nso(); usotao = chkpt_rd_usotao(); chkpt_close(); nmo = moinfo.nmo; /*** Build ioff ***/ ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); /* doccpi array must include frozen orbitals for reorder_qt() */ doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); /*** Reorder the SCF eigenvectors to QT ordering */ scf_qt = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf_qt[j][I] = scf_pitzer[j][i]; } free(order); free(doccpi); free_block(scf_pitzer); /*** Read in dipole moment integrals in the AO basis ***/ noei = nao * (nao + 1)/2; mu_x_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MX,mu_x_ints,noei,0,0,outfile); mu_y_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MY,mu_y_ints,noei,0,0,outfile); mu_z_ints = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MZ,mu_z_ints,noei,0,0,outfile); MUX_AO = block_matrix(nao,nao); MUY_AO = block_matrix(nao,nao); MUZ_AO = block_matrix(nao,nao); for(i=0; i < nao; i++) for(j=0; j < nao; j++) { MUX_AO[i][j] = mu_x_ints[INDEX(i,j)]; MUY_AO[i][j] = mu_y_ints[INDEX(i,j)]; MUZ_AO[i][j] = mu_z_ints[INDEX(i,j)]; } /* fprintf(outfile, "MUX_AOs\n"); */ /* print_mat(MUX_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUY_AOs\n"); */ /* print_mat(MUY_AO, nao, nao, outfile); */ /* fprintf(outfile, "MUZ_AOs\n"); */ /* print_mat(MUZ_AO, nao, nao, outfile); */ MUX_MO = block_matrix(nso,nso); MUY_MO = block_matrix(nso,nso); MUZ_MO = block_matrix(nso,nso); /*** Transform the AO dipole integrals to the SO basis ***/ X = block_matrix(nso,nao); /* just a temporary matrix */ C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUX_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUX_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUY_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUY_MO[0][0]),nso); C_DGEMM('n','n',nso,nao,nao,1,&(usotao[0][0]),nao,&(MUZ_AO[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','t',nso,nso,nao,1,&(X[0][0]),nao,&(usotao[0][0]),nao, 0,&(MUZ_MO[0][0]),nso); free(mu_x_ints); free(mu_y_ints); free(mu_z_ints); free_block(X); free_block(usotao); free_block(MUX_AO); free_block(MUY_AO); free_block(MUZ_AO); /*** Transform the SO dipole integrals to the MO basis ***/ X = block_matrix(nmo,nmo); /* just a temporary matrix */ C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUX_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUX_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUY_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUY_MO[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nmo,1,&(scf_qt[0][0]),nmo,&(MUZ_MO[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(X[0][0]),nmo,&(scf_qt[0][0]),nmo, 0,&(MUZ_MO[0][0]),nmo); free_block(scf_qt); free_block(X); moinfo.dip = (double ***) malloc(3 * sizeof(double **)); moinfo.dip[0] = block_matrix(nao, nao); moinfo.dip[1] = block_matrix(nao, nao); moinfo.dip[2] = block_matrix(nao, nao); for(i=0; i<nmo; i++) for(j=0; j<nmo; j++) { moinfo.dip[0][i][j] = MUX_MO[i][j]; moinfo.dip[1][i][j] = MUY_MO[i][j]; moinfo.dip[2][i][j] = MUZ_MO[i][j]; } free(ioff); free_block(MUX_MO); free_block(MUY_MO); free_block(MUZ_MO); return; } }} // namespace psi::ccdensity ��������������������������������psi3/src/bin/ccdensity/transL.cc��������������������������������������������������������������������0000644�0001015�0000765�00000011333�10757640026�015307� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void transL(double sign) { int nao, nso, nmo, noei_ao, nt; double **scfp; double **scf; double **usotao; double **TMP, **X, *scratch; int stat, i, j, ij, p, q; int I, h; int errcod; int *doccpi; int *order; double **LX_MO, **LY_MO, **LZ_MO; chkpt_init(PSIO_OPEN_OLD); if(params.ref == 0 || params.ref == 1) { scfp = chkpt_rd_scf(); } usotao = chkpt_rd_usotao(); nao = chkpt_rd_nao(); nso = chkpt_rd_nso(); chkpt_close(); nmo = moinfo.nmo; noei_ao = nao * (nao+1)/2; /* doccpi array must include frozen orbitals for reorder_qt() */ doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); /*** Reorder the SCF eigenvectors to QT ordering */ scf = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; for(j=0; j < nmo; j++) scf[j][I] = scfp[j][i]; } free(order); free(doccpi); free_block(scfp); scratch = init_array(noei_ao); TMP = block_matrix(nao, nao); X = block_matrix(nao, nao); /* NB: (a|m|b) = -1/2 (a|L|b) */ /* NB: The angular momentum integrals are antisymmetric! */ iwl_rdone(PSIF_OEI, PSIF_AO_LX, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -0.5 * sign * scratch[ij]; TMP[j][i] = +0.5 * sign * scratch[ij]; } LX_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(LX_MO[0][0]),nmo); } else if(params.ref == 2) { } zero_arr(scratch, noei_ao); zero_mat(TMP, nao, nao); zero_mat(X, nao, nao); iwl_rdone(PSIF_OEI, PSIF_AO_LY, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -0.5 * sign * scratch[ij]; TMP[j][i] = +0.5 * sign * scratch[ij]; } LY_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(LY_MO[0][0]),nmo); } else if(params.ref == 2) { } zero_arr(scratch, noei_ao); zero_mat(TMP, nao, nao); zero_mat(X, nao, nao); iwl_rdone(PSIF_OEI, PSIF_AO_LZ, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -0.5 * sign * scratch[ij]; TMP[j][i] = +0.5 * sign * scratch[ij]; } LZ_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(LZ_MO[0][0]),nmo); } else if(params.ref == 2) { } moinfo.L = (double ***) malloc(3 * sizeof(double **)); moinfo.L[0] = block_matrix(nmo, nmo); moinfo.L[1] = block_matrix(nmo, nmo); moinfo.L[2] = block_matrix(nmo, nmo); for(i=0; i<nmo; i++) for(j=0; j<nmo; j++) { moinfo.L[0][i][j] = LX_MO[i][j]; moinfo.L[1][i][j] = LY_MO[i][j]; moinfo.L[2][i][j] = LZ_MO[i][j]; } free(scratch); free_block(X); free_block(TMP); if(params.ref == 0 || params.ref == 1) { free_block(scf); } else if(params.ref == 2) { } free_block(usotao); free_block(LX_MO); free_block(LY_MO); free_block(LZ_MO); } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/transp.cc��������������������������������������������������������������������0000644�0001015�0000765�00000011240�10757640026�015350� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void transp(double sign) { int nao, nso, nmo, noei_ao; double **scfp; double **scf; double **nabla; double **usotao; double **TMP, **X, *scratch; int stat, i, j, ij, p, q; int I, h; int errcod; int *doccpi; int *order; double **NX_MO, **NY_MO, **NZ_MO; chkpt_init(PSIO_OPEN_OLD); if(params.ref == 0 || params.ref == 1) { scfp = chkpt_rd_scf(); } nao = chkpt_rd_nao(); nso = chkpt_rd_nso(); usotao = chkpt_rd_usotao(); chkpt_close(); nmo = moinfo.nmo; noei_ao = nao * (nao+1)/2; /* doccpi array must include frozen orbitals for reorder_qt() */ doccpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) doccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); reorder_qt(doccpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, order, moinfo.orbspi, moinfo.nirreps); /*** Reorder the SCF eigenvectors to QT ordering */ scf = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; for(j=0; j < nmo; j++) scf[j][I] = scfp[j][i]; } free(order); free(doccpi); free_block(scfp); moinfo.nabla = (double ***) malloc(3 * sizeof(double **)); moinfo.nabla[0] = block_matrix(nmo, nmo); moinfo.nabla[1] = block_matrix(nmo, nmo); moinfo.nabla[2] = block_matrix(nmo, nmo); scratch = init_array(noei_ao); TMP = block_matrix(nao, nao); X = block_matrix(nao, nao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_NablaX, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -sign * scratch[ij]; TMP[j][i] = +sign * scratch[ij]; } NX_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(NX_MO[0][0]),nmo); } else if(params.ref == 2) { } zero_arr(scratch, noei_ao); zero_mat(TMP, nao, nao); zero_mat(X, nao, nao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_NablaY, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -sign * scratch[ij]; TMP[j][i] = +sign * scratch[ij]; } NY_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(NY_MO[0][0]),nmo); } else if(params.ref == 2) { } zero_arr(scratch, noei_ao); zero_mat(TMP, nao, nao); zero_mat(X, nao, nao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_NablaZ, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = -sign * scratch[ij]; TMP[j][i] = +sign * scratch[ij]; } NZ_MO = block_matrix(nmo, nmo); C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); if(params.ref == 0 || params.ref == 1) { C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(NZ_MO[0][0]),nmo); } else if(params.ref == 2) { } free(scratch); free_block(X); free_block(TMP); for(i=0; i<nmo; i++) for(j=0; j<nmo; j++) { moinfo.nabla[0][i][j] = NX_MO[i][j]; moinfo.nabla[1][i][j] = NY_MO[i][j]; moinfo.nabla[2][i][j] = NZ_MO[i][j]; } if(params.ref == 0 || params.ref == 1) { free_block(scf); } else if(params.ref == 2) { } free_block(usotao); free_block(NX_MO); free_block(NY_MO); free_block(NZ_MO); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/twopdm.cc��������������������������������������������������������������������0000644�0001015�0000765�00000001466�10754663017�015366� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ namespace psi { namespace ccdensity { void V_build(void); void Gijkl(void); void Gabcd(void); void Gibja(void); void Gijka(void); void Gciab(void); void Gijab(void); /* twopdm(): Computes all contributions to the two-particle density ** matrix for CC-like wave functions. ** ** Note that the contractions evaluated in the functions below ** actually build the bra-ket symmetrized two-particle density: ** ** Gamma'(pq,rs) = 1/2 [Gamma(pq,rs) + Gamma(rs,pq)], ** ** where Gamma(pq,rs) is the original, non-bra-ket-symmetric ** expression. This is done to satisfy the ** ** TDC, July 2002 */ void twopdm(void) { /* V_build(); */ Gijkl(); Gabcd(); Gijka(); Gciab(); Gibja(); Gijab(); } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/V.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000017505�10757640026�014260� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void V_build(void) { dpdbuf4 V, L, T; int G_irr; G_irr = params.G_irr; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "VMNIJ"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "Vmnij"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 0, 0, 0, 0, 0, "VMnIj"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GLG, G_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_buf4_init(&L, CC_GLG, G_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&V, CC_MISC, G_irr, 2, 2, 2, 2, 0, "VMNIJ"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GLG, G_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 12, 12, 12, 12, 0, "Vmnij"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&L, CC_GLG, G_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 22, 22, 22, 22, 0, "VMnIj"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GLG, G_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&L, CC_GLG, G_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GLG, G_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&L, CC_GLG, G_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_buf4_init(&L, CC_GLG, G_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&T, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_MISC, G_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_buf4_init(&L, CC_GLG, G_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&T, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); } } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gabcd.cc�������������������������������������������������������������������0000644�0001015�0000765�00000015636�10757640026�015405� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* x_Gabcd(): computes non-R0 parts of Gijkl 2pdm */ /* Gabcd = 0.5 Lmnab * Rmncd + P(cd) Lmnab * Rmc * Tnd */ /* Gabcd = 0.5 Lmnab * Rmncd + Lmnab (Rmc * Tnd + tmc * Rnd) */ void x_Gabcd(void) { dpdfile2 R1, T1; dpdbuf4 L2, I2, I3, R2, GABCD, Gabcd, GAbCd; int L_irr, R_irr, G_irr; double value; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; if (params.ref == 0 || params.ref == 1) { /* GABCD += 0.5 * Lmnab * Rmncd */ dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&L2, &R2, &GABCD, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&GABCD); dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "Gabcd"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_contract444(&L2, &R2, &Gabcd, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&Gabcd); dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract444(&L2, &R2, &GAbCd, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&GAbCd); } else { /* GABCD += 0.5 * Lmnab * Rmncd */ dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&L2, &R2, &GABCD, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&GABCD); dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 17, 17, 17, 17, 0, "Gabcd"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_contract444(&L2, &R2, &Gabcd, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&Gabcd); dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract444(&L2, &R2, &GAbCd, 1, 1, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_close(&GAbCd); } if (params.ref == 0 || params.ref == 1) { /* GABCD = LMNAB (RMC * TND + tMC * RND) */ dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 5, 7, 7, 0, "GABCD"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "L2R1_VVOV(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I2, &T1, &GABCD, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_VVOV"); dpd_contract244(&T1, &I2, &GABCD, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GABCD); /* Gabcd = Lmnab (Rmc * Tnd + tmc * Rnd) */ dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 7, 5, 7, 7, 0, "Gabcd"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "L2R1_vvov(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I2, &T1, &Gabcd, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_vvov"); dpd_contract244(&T1, &I2, &Gabcd, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&Gabcd); /* GAbCd = LMnAb (RMC * Tnd + TMC * Rnd) */ dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 5, 11, 5, 11, 0, "L2R1_VvoV(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I2, &T1, &GAbCd, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvOv"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GAbCd, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GAbCd); } else { /* GABCD = LMNAB (RMC * TND + tMC * RND) */ dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 5, 7, 7, 0, "GABCD"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 21, 7, 21, 0, "L2R1_VVOV(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I2, &T1, &GABCD, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "L2R1_VVOV"); dpd_contract244(&T1, &I2, &GABCD, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GABCD); /* Gabcd = Lmnab (Rmc * Tnd + tmc * Rnd) */ dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 17, 15, 17, 17, 0, "Gabcd"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 17, 31, 17, 31, 0, "L2R1_vvov(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I2, &T1, &Gabcd, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "L2R1_vvov"); dpd_contract244(&T1, &I2, &Gabcd, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&Gabcd); /* GAbCd = LMnAb (RMC * Tnd + TMC * Rnd) */ dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 28, 26, 28, 26, 0, "L2R1_VvoV(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I2, &T1, &GAbCd, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "L2R1_VvOv"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GAbCd, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GAbCd); } /* bra-ket symmetrize */ if (params.ref == 0 || params.ref == 1) { dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_symm(&GABCD); dpd_buf4_close(&GABCD); dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "Gabcd"); dpd_buf4_symm(&Gabcd); dpd_buf4_close(&Gabcd); dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_symm(&GAbCd); dpd_buf4_close(&GAbCd); } else { dpd_buf4_init(&GABCD, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_symm(&GABCD); dpd_buf4_close(&GABCD); dpd_buf4_init(&Gabcd, CC_GAMMA, G_irr, 17, 17, 17, 17, 0, "Gabcd"); dpd_buf4_symm(&Gabcd); dpd_buf4_close(&Gabcd); dpd_buf4_init(&GAbCd, CC_GAMMA, G_irr, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_symm(&GAbCd); dpd_buf4_close(&GAbCd); } return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gciab.cc�������������������������������������������������������������������0000644�0001015�0000765�00000110517�10757640026�015404� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_Gciab_rohf(void); void x_Gciab_6(void); void x_Gciab_7(void); void x_Gciab_8_rohf(void); extern void x_Gciab_uhf(void); /* This function computes the non-R0 parts of the 2pdm density matrix Gciab = 0.5 *(rho_abci + rho_ciab) */ void x_Gciab(void) { if (params.ref == 0 || params.ref == 1) x_Gciab_rohf(); else x_Gciab_uhf(); } void x_Gciab_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1, T1, R1, I1; dpdbuf4 G, V, T, L, Z, Z2, R, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 1, rho_abci += Lmiab * Rmc */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "L2R1_VVOV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 11, 7, "GCIAB"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "L2R1_vvov(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 11, 7, "Gciab"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 5, 11, 5, 11, 0, "L2R1_VvoV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 11, 5, "GCiAb"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 5, 11, 5, 11, 0, "L2R1_VvOv(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rsqp, 11, 5, "GcIaB"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); /* term 2, rho_ciab += Rmiab * Lmc */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "R2L1_VVOV(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 11, 7, "GCIAB",-1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 11, 7, 11, 0, "R2L1_vvov(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 11, 7, "Gciab",-1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 5, 11, 5, 11, 0, "R2L1_VvoV(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 11, 5, "GCiAb", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 5, 11, 5, 11, 0, "R2L1_VvOv(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rsqp, 11, 5, "GcIaB", 1.0); dpd_buf4_close(&Z); /* same in two-steps, perhaps suggestive of future out-of-core approach dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); */ /* term 3, rho_CIAB -= 0.5 LMNCE RMNAB tIE */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 2, 11, 2, 0, "Z(CI,MN)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_ciab -= 0.5 Lmnce Rmnab tie */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 2, 11, 2, 0, "Z(ci,mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_CiAb -= 0.5 LMnCe RMnAb tie */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 0, 11, 0, 0, "Z(Ci,Mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_cIaB -= 0.5 LmNcE RmNaB tIE */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 0, 11, 0, 0, "Z(cI,mN)"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 4, rho_CIAB -= 0.5 LMNCE TauMNAB RIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 2, 11, 2, 0, "Z(CI,MN)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_ciab -= 0.5 Lmnce Taumnab Rie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 2, 11, 2, 0, "Z(ci,mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_CiAb -= 0.5 LMnCe TauMnAb Rie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 0, 11, 0, 0, "Z(Ci,Mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_cIaB -= 0.5 LmNcE TaumNaB RIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 0, 11, 0, 0, "Z(cI,mN)"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 5, rho_ciab += - (Lmnec Rme) (Tniab + P(ij) Tna Tib) */ if (!params.connect_xi) { dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); } /* +P(ab) LR_VV(c,a) t(i,b) */ x_Gciab_6(); /* +P(ab) LR_TT(c,a) R(i,b) */ x_Gciab_7(); /* -P(ab) Lmnce Rinae Tmb, term 8 */ /* -P(ab) Lmnce Tinae Rmb, term 9 */ x_Gciab_8_rohf(); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 10, -P(AB) LNMCE TIE TNA RMB */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 2, 11, 2, 11, 0, "Z(NM,CI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 2, 11, 0, "Z(NM,CI)"); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(CI,AM)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,AB)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, -P(ab) lmnce tie tna rmb */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 2, 11, 2, 11, 0, "Z(nm,ci)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 2, 11, 0, "Z(nm,ci)"); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(ci,am)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ab)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GCiAb -= P(AB) LNmCe Tie TNA Rmb */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(Nm,Ci)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(Ci,Am)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z2, &R1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(nM,Ci)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJAb"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(Ci,bM)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(Ci,bA)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(Ci,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(Ci,Ab)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GcIaB - LnMcE TIE Tna RMB + LNmcE TIE TNB Rma */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(nM,cI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(cI,aM)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(Nm,cI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjaB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(cI,Bm)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(cI,Ba)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(cI,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(cI,aB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* add 1/2 to ground-state parts of density */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* clear out temporary files */ psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0, PSIO_OPEN_NEW); /* dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "GCIAB"); value = dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "Gciab"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GCiAb"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GcIaB"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); fprintf(outfile,"<Gciab|Gciab> = %15.10lf\n",value); */ } /* This function computes term 6, rho_ciab += P(ab) LR1_VV(c,a) T(i,b) */ void x_Gciab_6(void) { int h, nirreps, c, i, a, b, C, I, A, B, Csym, Isym, Asym, Bsym, row, col; int AA, BB, AAsym, BBsym; int L_irr, R_irr, G_irr; dpdfile2 LR1A, LR1B, T1A, T1B; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(&LR1A, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); if (params.ref == 0 || params.ref == 1) { dpd_file2_init(&LR1B, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); } else { dpd_file2_init(&LR1B, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); } dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_init(&LR1A); dpd_file2_mat_init(&LR1B); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); dpd_file2_mat_rd(&LR1A); dpd_file2_mat_rd(&LR1B); /* rho_CIAB += LR1_VV(C,A) T(I,B) - LR1_VV(C,B) T(I,A) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "GCIAB"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 5, 21, 7, 0, "GCIAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LR1A.params->rowidx[c]; Csym = LR1A.params->psym[c]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LR1A.params->colidx[a]; Asym = LR1A.params->qsym[a]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; AA = T1A.params->colidx[a]; AAsym = T1A.params->qsym[a]; BB = LR1A.params->colidx[b]; BBsym = LR1A.params->qsym[b]; if( ((Csym^Asym)==G_irr) && (Isym==Bsym)) G.matrix[h][row][col] += LR1A.matrix[Csym][C][A] * T1A.matrix[Isym][I][B]; if( ((Csym^BBsym)==G_irr) && (Isym==AAsym)) G.matrix[h][row][col] -= LR1A.matrix[Csym][C][BB] * T1A.matrix[Isym][I][AA]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ciab += LR1_vv(c,a) T(i,b) - LR1_vv(c,b) T(i,a) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "Gciab"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 15, 31, 17, 0, "Gciab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LR1B.params->rowidx[c]; Csym = LR1B.params->psym[c]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LR1B.params->colidx[a]; Asym = LR1B.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; AA = T1B.params->colidx[a]; AAsym = T1B.params->qsym[a]; BB = LR1B.params->colidx[b]; BBsym = LR1B.params->qsym[b]; if( ((Csym^Asym)==G_irr) && (Isym==Bsym)) G.matrix[h][row][col] += LR1B.matrix[Csym][C][A] * T1B.matrix[Isym][I][B]; if( ((Csym^BBsym)==G_irr) && (Isym==AAsym)) G.matrix[h][row][col] -= LR1B.matrix[Csym][C][BB] * T1B.matrix[Isym][I][AA]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_CiAb += LR1_VV(C,A) T(i,b) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LR1A.params->rowidx[c]; Csym = LR1A.params->psym[c]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LR1A.params->colidx[a]; Asym = LR1A.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if( ((Csym^Asym)==G_irr) && (Isym==Bsym)) G.matrix[h][row][col] += LR1A.matrix[Csym][C][A] * T1B.matrix[Isym][I][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_cIaB += LR1_vv(c,a) T(I,B) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LR1B.params->rowidx[c]; Csym = LR1B.params->psym[c]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LR1B.params->colidx[a]; Asym = LR1B.params->qsym[a]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if( ((Csym^Asym)==G_irr) && (Isym==Bsym)) G.matrix[h][row][col] += LR1B.matrix[Csym][C][A] * T1A.matrix[Isym][I][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&LR1A); dpd_file2_mat_close(&LR1B); dpd_file2_close(&LR1A); dpd_file2_close(&LR1B); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); return; } /* This function computes term 7, rho_ciab += P(ab) LT_VV(c,a) R(i,b) */ void x_Gciab_7(void) { int h, nirreps, c, i, a, b, C, I, A, B, Csym, Isym, Asym, Bsym, row, col; int AA, BB, AAsym, BBsym; int L_irr, R_irr, G_irr; dpdfile2 LT1A, LT1B, R1A, R1B; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(<1A, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); if (params.ref == 0 || params.ref == 1) { dpd_file2_init(<1B, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); } else { dpd_file2_init(<1B, EOM_TMP, L_irr, 3, 3, "LT_vv"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); } dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_init(<1A); dpd_file2_mat_init(<1B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); dpd_file2_mat_rd(<1A); dpd_file2_mat_rd(<1B); /* rho_CIAB += LT_VV(C,A) R(I,B) - LT_VV(C,B) R(I,A) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "GCIAB"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 5, 21, 7, 0, "GCIAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LT1A.params->rowidx[c]; Csym = LT1A.params->psym[c]; I = R1A.params->rowidx[i]; Isym = R1A.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LT1A.params->colidx[a]; Asym = LT1A.params->qsym[a]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; AA = R1A.params->colidx[a]; AAsym = R1A.params->qsym[a]; BB = LT1A.params->colidx[b]; BBsym = LT1A.params->qsym[b]; if( ((Csym^Asym)==L_irr) && ((Isym^Bsym)==R_irr) ) G.matrix[h][row][col] += LT1A.matrix[Csym][C][A] * R1A.matrix[Isym][I][B]; if( ((Csym^BBsym)==L_irr) && ((Isym^AAsym)==R_irr) ) G.matrix[h][row][col] -= LT1A.matrix[Csym][C][BB] * R1A.matrix[Isym][I][AA]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ciab += LT_vv(c,a) R(i,b) - LT_vv(c,b) R(i,a) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "Gciab"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 15, 31, 17, 0, "Gciab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LT1B.params->rowidx[c]; Csym = LT1B.params->psym[c]; I = R1B.params->rowidx[i]; Isym = R1B.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LT1B.params->colidx[a]; Asym = LT1B.params->qsym[a]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; AA = R1B.params->colidx[a]; AAsym = R1B.params->qsym[a]; BB = LT1B.params->colidx[b]; BBsym = LT1B.params->qsym[b]; if( ((Csym^Asym)==L_irr) && ((Isym^Bsym)==R_irr) ) G.matrix[h][row][col] += LT1B.matrix[Csym][C][A] * R1B.matrix[Isym][I][B]; if( ((Csym^BBsym)==L_irr) && ((Isym^AAsym)==R_irr) ) G.matrix[h][row][col] -= LT1B.matrix[Csym][C][BB] * R1B.matrix[Isym][I][AA]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_CiAb += LT_VV(C,A) R(i,b) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LT1A.params->rowidx[c]; Csym = LT1A.params->psym[c]; I = R1B.params->rowidx[i]; Isym = R1B.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LT1A.params->colidx[a]; Asym = LT1A.params->qsym[a]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; if( ((Csym^Asym)==L_irr) && ((Isym^Bsym)==R_irr) ) G.matrix[h][row][col] += LT1A.matrix[Csym][C][A] * R1B.matrix[Isym][I][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_cIaB += LT_vv(c,a) R(I,B) */ if (params.ref == 0 || params.ref == 1) dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); else dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { c = G.params->roworb[h][row][0]; i = G.params->roworb[h][row][1]; C = LT1B.params->rowidx[c]; Csym = LT1B.params->psym[c]; I = R1A.params->rowidx[i]; Isym = R1A.params->psym[i]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { a = G.params->colorb[h^G_irr][col][0]; b = G.params->colorb[h^G_irr][col][1]; A = LT1B.params->colidx[a]; Asym = LT1B.params->qsym[a]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; if( ((Csym^Asym)==L_irr) && ((Isym^Bsym)==R_irr) ) G.matrix[h][row][col] += LT1B.matrix[Csym][C][A] * R1A.matrix[Isym][I][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(<1A); dpd_file2_mat_close(<1B); dpd_file2_close(<1A); dpd_file2_close(<1B); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); return; } /* This function computes terms of excited Gciab term 8 +P(ab) Lmnce Rinae Tmb term 9, +P(AB) LMNCE TINAE RMB */ void x_Gciab_8_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 8, +P(AB) LMNCE RINAE TMB */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 5, 10, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 11, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,BA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(CI,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, +P(ab) Lmnce Rinae Tmb */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 5, 10, 5, 0, "Z(ia,bc)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 11, 5, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ba)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(ci,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GCiAb -= LmNCe RiNAe tmb */ dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 11, 11, "Z(Ci,Am)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 11, 11, 11, 0, "Z(Ci,Am)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GCiAb -= (LMnCe Rinbe + LMNCE RiNbE) TMA */ dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 11, 10, "Z(Ci,Mb)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(Ci,Mb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GcIaB -= LMncE RInaE tMB */ dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 11, 11, "Z(cI,aM)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 11, 11, 11, 0, "Z(cI,aM)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GcIaB -= (LmNcE RINBE + Lmnce RInBe) Tma */ dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 11, 10, "Z(cI,mB)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(cI,mB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1B, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 9, +P(AB) LMNCE TINAE RMB */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 5, 10, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 11, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,BA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(CI,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, +P(ab) Lmnce Tinae Rmb */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 5, 10, 5, 0, "Z(ia,bc)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1B, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 11, 5, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ba)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 7, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 11, 5, "Z(ci,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 11, 5, 11, 5, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GCiAb -= LmNCe TiNAe Rmb */ dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 11, 11, "Z(Ci,Am)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(Ci,Am)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GCiAb -= (LMnCe Tinbe + LMNCE TiNbE) RMA */ dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 11, 10, "Z(Ci,Mb)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 10, 11, 10, 0, "Z(Ci,Mb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1A, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GcIaB -= LMncE TInaE RMB */ dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 11, 11, "Z(cI,aM)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 11, 11, 11, 0, "Z(cI,aM)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GcIaB -= (LmNcE TINBE + Lmnce TInBe) Rma */ dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 11, 10, "Z(cI,mB)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 11, 10, 11, 10, 0, "Z(cI,mB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1B, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); return; } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gciab_uhf.cc���������������������������������������������������������������0000644�0001015�0000765�00000061235�10757640026�016250� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_Gciab_uhf(void); extern void x_Gciab_6(void); extern void x_Gciab_7(void); void x_Gciab_8_uhf(void); /* This function computes the non-R0 parts of the 2pdm density matrix Gciab = 0.5 *(rho_abci + rho_ciab) */ void x_Gciab_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1, T1, R1, I1; dpdbuf4 G, V, T, L, Z, Z2, R, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 1, rho_abci += Lmiab * Rmc */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 21, 7, 21, 0, "L2R1_VVOV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 21, 7, "GCIAB"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 17, 31, 17, 31, 0, "L2R1_vvov(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 31, 17, "Gciab"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 26, 28, 26, 0, "L2R1_VvoV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rspq, 26, 28, "GCiAb"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 25, 28, 25, 0, "L2R1_VvOv(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP0, rsqp, 25, 29, "GcIaB"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); /* change to sort_axpy */ /* term 2, rho_ciab += Rmiab * Lmc */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 21, 7, 21, 0, "R2L1_VVOV(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 21, 7, "GCIAB", -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 17, 31, 17, 31, 0, "R2L1_vvov(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 31, 17, "Gciab", -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 26, 28, 26, 0, "R2L1_VvoV(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rspq, 26, 28, "GCiAb", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 25, 28, 25, 0, "R2L1_VvOv(pqsr)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, rsqp, 25, 29, "GcIaB", 1.0); dpd_buf4_close(&Z); /* two step code - perhaps suggestive of future out of core approach dpd_buf4_init(&Z, EOM_TMP, G_irr, 7, 21, 7, 21, 0, "R2L1_VVOV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP1, rspq, 21, 7, "GCIAB"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 17, 31, 17, 31, 0, "R2L1_vvov(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP1, rspq, 31, 17, "Gciab"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 26, 28, 26, 0, "R2L1_VvoV(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP1, rspq, 26, 28, "GCiAb"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 28, 25, 28, 25, 0, "R2L1_VvOv(pqsr)"); dpd_buf4_sort(&Z, EOM_TMP1, rsqp, 25, 29, "GcIaB"); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); */ /* term 3, rho_CIAB -= 0.5 LMNCE RMNAB tIE */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 21, 2, 21, 2, 0, "Z(CI,MN)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_ciab -= 0.5 Lmnce Rmnab tie */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 31, 12, 31, 12, 0, "Z(ci,mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_CiAb -= 0.5 LMnCe RMnAb tie */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 26, 22, 26, 22, 0, "Z(Ci,Mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 3, rho_cIaB -= 0.5 LmNcE RmNaB tIE */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 25, 23, 25, 23, 0, "Z(cI,mN)"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&R, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract444(&Z, &R, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&G); dpd_buf4_close(&Z); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 4, rho_CIAB -= 0.5 LMNCE TauMNAB RIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 2, 21, 2, 0, "Z(CI,MN)"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_ciab -= 0.5 Lmnce Taumnab Rie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 12, 31, 12, 0, "Z(ci,mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_CiAb -= 0.5 LMnCe TauMnAb Rie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 22, 26, 22, 0, "Z(Ci,Mn)"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 4, rho_cIaB -= 0.5 LmNcE TaumNaB RIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 23, 25, 23, 0, "Z(cI,mN)"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_contract444(&Z, &T, &G, 0, 1, -1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 5, rho_ciab += - (Lmnec Rme) (Tniab + P(ij) Tna Tib) */ if (!params.connect_xi) { dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tauijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract244(&I1, &Tau, &G, 0, 0, 0, 1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&Tau); dpd_buf4_close(&G); } /* +P(ab) LR_VV(c,a) t(i,b) */ x_Gciab_6(); /* +P(ab) LR_TT(c,a) R(i,b) */ x_Gciab_7(); /* -P(ab) Lmnce Rinae Tmb, term 8 */ /* -P(ab) Lmnce Tinae Rmb, term 9 */ x_Gciab_8_uhf(); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 10, -P(AB) LNMCE TIE TNA RMB */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 2, 21, 2, 21, 0, "Z(NM,CI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 21, 2, 21, 0, "Z(NM,CI)"); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 21, 21, 21, 21, 0, "Z(CI,AM)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,AB)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 21, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, -P(ab) lmnce tie tna rmb */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 12, 31, 12, 31, 0, "Z(nm,ci)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 31, 12, 31, 0, "Z(nm,ci)"); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 31, 31, 31, 31, 0, "Z(ci,am)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ab)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 31, 15, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GCiAb -= P(AB) LNmCe Tie TNA Rmb */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 22, 26, 22, 26, 0, "Z(Nm,Ci)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 26, 26, 26, 26, 0, "Z(Ci,Am)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z2, &R1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 23, 26, 23, 26, 0, "Z(nM,Ci)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 28, 23, 28, 0, "LiJAb"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 26, 25, 26, 25, 0, "Z(Ci,bM)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 29, 26, 29, 0, "Z(Ci,bA)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 26, 28, "Z(Ci,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 28, 26, 28, 0, "Z(Ci,Ab)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GcIaB - LnMcE TIE Tna RMB + LNmcE TIE TNB Rma */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 23, 25, 23, 25, 0, "Z(nM,cI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 25, 25, 25, 25, 0, "Z(cI,aM)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z2, &R1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 22, 25, 22, 25, 0, "Z(Nm,cI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 29, 22, 29, 0, "LIjaB"); dpd_contract424(&L, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_file2_close(&T1); dpd_buf4_init(&Z2, EOM_TMP1, L_irr, 25, 26, 25, 26, 0, "Z(cI,Bm)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 28, 25, 28, 0, "Z(cI,Ba)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z2, &R1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 25, 29, "Z(cI,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 29, 25, 29, 0, "Z(cI,aB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* add 1/2 to ground-state parts of density */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* clear out temporary files */ psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0, PSIO_OPEN_NEW); /* dpd_buf4_init(&V, CC_GAMMA, G_irr, 21, 7, 21, 7, 0, "GCIAB"); value = dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 31, 17, 31, 17, 0, "Gciab"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 26, 28, 26, 28, 0, "GCiAb"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 25, 29, 25, 29, 0, "GcIaB"); value += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); fprintf(outfile,"<Gciab|Gciab> = %15.10lf\n",value); */ } /* This function computes terms of excited Gciab term 8 +P(ab) Lmnce Rinae Tmb term 9, +P(AB) LMNCE TINAE RMB */ void x_Gciab_8_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 8, +P(AB) LMNCE RINAE TMB */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 5, 20, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 21, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,BA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 21, 5, "Z(CI,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, +P(ab) Lmnce Rinae Tmb */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 15, 30, 15, 0, "Z(ia,bc)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_file2_init(&T1A, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 31, 15, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ba)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 31, 15, "Z(ci,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GCiAb -= LmNCe RiNAe tmb */ dpd_buf4_init(&V, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 26, 26, "Z(Ci,Am)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 26, 26, 26, 0, "Z(Ci,Am)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GCiAb -= (LMnCe Rinbe + LMNCE RiNbE) TMA */ dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 26, 24, "Z(Ci,Mb)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 26, 24, 26, 24, 0, "Z(Ci,Mb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GcIaB -= LMncE RInaE tMB */ dpd_buf4_init(&V, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 25, 25, "Z(cI,aM)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 25, 25, 25, 0, "Z(cI,aM)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 8, GcIaB -= (LmNcE RINBE + Lmnce RInBe) Tma */ dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 25, 27, "Z(cI,mB)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 25, 27, 25, 27, 0, "Z(cI,mB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1B, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 9, +P(AB) LMNCE TINAE RMB */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 5, 20, 5, 0, "Z(IA,BC)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1A, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 21, 5, "Z(CI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,BA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 21, 5, 21, 7, 0, "GCIAB"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 21, 5, "Z(CI,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 21, 5, 21, 5, 0, "Z(CI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, +P(ab) Lmnce Tinae Rmb */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 15, 30, 15, 0, "Z(ia,bc)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1B, &V, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, sprq, 31, 15, "Z(ci,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ba)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 31, 15, 31, 17, 0, "Gciab"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 31, 15, "Z(ci,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 31, 15, 31, 15, 0, "Z(ci,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GCiAb -= LmNCe TiNAe Rmb */ dpd_buf4_init(&V, EOM_TMP, L_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 26, 26, "Z(Ci,Am)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 26, 26, 26, 26, 0, "Z(Ci,Am)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GCiAb -= (LMnCe Tinbe + LMNCE TiNbE) RMA */ dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 26, 24, "Z(Ci,Mb)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 26, 24, 26, 24, 0, "Z(Ci,Mb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1A, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GcIaB -= LMncE TInaE RMB */ dpd_buf4_init(&V, EOM_TMP, L_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_buf4_sort(&V, EOM_TMP1, spqr, 25, 25, "Z(cI,aM)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 25, 25, 25, 25, 0, "Z(cI,aM)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* term 9, GcIaB -= (LmNcE TINBE + Lmnce TInBe) Rma */ dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_buf4_sort(&V, EOM_TMP1, sprq, 25, 27, "Z(cI,mB)"); dpd_buf4_close(&V); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 25, 27, 25, 27, 0, "Z(cI,mB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1B, &Z, &G, 0, 2, 1, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&G); dpd_buf4_close(&Z); return; } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gibja.cc�������������������������������������������������������������������0000644�0001015�0000765�00000063010�10757640026�015406� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_Gibja_rohf(void); extern void x_Gibja_uhf(void); void x_Gibja(void) { if (params.ref == 0 || params.ref == 1) x_Gibja_rohf(); else x_Gibja_uhf(); return; } /* x_Gibja(): computes non-R0 parts of Gibja 2pdm really Dajib = Djabi, then * -1 to get Djaib and arranged as G(ia,jb) until final sort */ void x_Gibja_rohf(void) { int h, nirreps, row, col, L_irr, R_irr, G_irr; int i, j, a, b, I, J, A, B, Isym, Jsym, Asym, Bsym; dpdfile2 L1, T1A, T1B, L1A, L1B, R1A, R1B, I1A, I1B; dpdbuf4 I2, L2, R2, T2, Z, Z1, V2, G, GIBJA, Gibja, GIbJa, GiBjA, GIbjA, GiBJa; double value; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Gajib = lia rjb + limae (rjmbe - rmb tje - rje tmb + rme tjb) */ /* term 3 Gibja += L(im,ae) R(jm,be) */ dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "GIAJB"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "Giajb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "GIaJb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "GiAjB"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "GIAjb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 10, 10, "GiaJB"); dpd_buf4_close(&V2); /* term 4, G(IA,JB) <-- - L(IM,AE) T(J,E) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(IM,AJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IB,AJ)"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(ia,jb) <-- - L(im,ae) T(j,e) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(im,aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L2, &T1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ib,aj)"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(Ia,Jb) <-- - L(Im,aE) T(J,E) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(Im,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,aJ)"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(Ia,bJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ia,bJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(iA,jB) <-- - L(iM,Ae) T(j,e) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(iM,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJAb"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iB,Aj)"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(iA,Bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iA,Bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(iA,jB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(IA,jb) <-- - L2(Im,Ae) T(j,e) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(Im,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&L2, &T1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&T1B); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&R1B); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&G, EOM_TMP0, 0, 10, 10, 10, 10, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(ia,JB) <-- - L(iM,aE) T(J,E) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z(iM,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&T1A); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&R1A); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(ia,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* term 5, G(IA,JB) <-- - (L(IM,AE)*R(J,E)) * T(M,B) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IB,AJ)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(ia,jb) <-- - (L(im,ae)*R(j,e)) * T(m,b) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ib,aj)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(Ia,Jb) <-- - (L2(Im,Ea)*R(J,E)) * T(m,b) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,aJ)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(Ia,bJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ia,bJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(iA,jB) <-- - (L2(iM,eA)*R(j,e)) * T(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(iM,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJAb"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L2, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iB,Aj)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(iA,Bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iA,Bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(iA,jB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z1); /* term 5, G(IA,jb) <-- - L2(Im,Ae) R(j,e) T(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(Im,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L2, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&R1B); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1B); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&G, EOM_TMP0, 0, 10, 10, 10, 10, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(ia,JB) <-- - L(iM,aE) R(J,E) T(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(iM,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L2, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&R1A); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &T1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1A); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 10, 11, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 10, 10, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(ia,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_mat_init(&R1A); dpd_file2_mat_rd(&R1A); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_mat_init(&R1B); dpd_file2_mat_rd(&R1B); dpd_file2_init(&L1A, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L1A); dpd_file2_mat_rd(&L1A); dpd_file2_init(&L1B, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_mat_init(&L1B); dpd_file2_mat_rd(&L1B); if (!params.connect_xi) { dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_mat_init(&I1A); dpd_file2_mat_rd(&I1A); dpd_file2_init(&I1B, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_mat_init(&I1B); dpd_file2_mat_rd(&I1B); } dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); /* term 1, G(IA,JB) <-- + L(I,A) R(J,B) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * R1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(IA,JB) <-- + (L(IM,AE) R(M,E)) T(J,B) = L2R1_OV(I,A) * T(J,B) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1A.params->rowidx[i]; Isym = I1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1A.params->colidx[a]; Asym = I1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym) ) G.matrix[h][row][col] += I1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(ia,jb) <-- + L(i,a) R(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Giajb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * R1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(ia,jb) <-- + (L(im,ae) R(m,e))*T(j,b) = L2R1_ov(i,a) * T(j,b) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1B.params->rowidx[i]; Isym = I1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1B.params->colidx[a]; Asym = I1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(IA,jb) <-- L(I,A) R(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAjb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr) ) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * R1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(IA,jb) <-- L2R1_OV(I,A) * T(j,b) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1A.params->rowidx[i]; Isym = I1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1A.params->colidx[a]; Asym = I1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(ia,JB) <-- L(i,a) R(J,B) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiaJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * R1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(ia,JB) <-- L2R1_ov(i,a) T(J,B) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1B.params->rowidx[i]; Isym = I1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1B.params->colidx[a]; Asym = I1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1B.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_mat_close(&R1A); dpd_file2_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1B); dpd_file2_mat_close(&L1A); dpd_file2_close(&L1A); dpd_file2_mat_close(&L1B); dpd_file2_close(&L1B); if (!params.connect_xi) { dpd_file2_mat_close(&I1A); dpd_file2_close(&I1A); dpd_file2_mat_close(&I1B); dpd_file2_close(&I1B); } dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* Sort all spin cases to correct ordering (ib,ja) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAJB"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "GIBJA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Giajb"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "Gibja"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIaJb"); dpd_buf4_scm(&G,-1.0); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "GIbJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiAjB"); dpd_buf4_scm(&G,-1.0); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "GiBjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIAjb"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "GIbjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiaJB"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 10, 10, "GiBJa"); dpd_buf4_close(&G); /* Add to ground state terms in CC_GAMMA */ dpd_buf4_init(&GIBJA, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_axpy(&GIBJA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIBJA); dpd_buf4_init(&Gibja, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_axpy(&Gibja, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Gibja); dpd_buf4_init(&GIbJa, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_axpy(&GIbJa, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIbJa); dpd_buf4_init(&GiBjA, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_axpy(&GiBjA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GiBjA); dpd_buf4_init(&GIbjA, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_axpy(&GIbjA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIbjA); dpd_buf4_init(&GiBJa, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_axpy(&GiBJa, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GiBJa); /* symmetrize after adding to CC_GAMMA */ dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&GIbjA, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_init(&GiBJa, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_symm2(&GIbjA, &GiBJa); dpd_buf4_close(&GiBJa); dpd_buf4_sort(&GIbjA, CC_GAMMA, rspq, 10, 10, "GiBJa"); dpd_buf4_close(&GIbjA); psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0,PSIO_OPEN_NEW); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gibja_uhf.cc���������������������������������������������������������������0000644�0001015�0000765�00000062614�10757640026�016261� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* x_Gibja_uhf(): computes non-R0 parts of Gibja 2pdm really Dajib = Djabi, then * -1 to get Djaib and arranged as G(ia,jb) until final sort */ void x_Gibja_uhf(void) { int h, nirreps, row, col, L_irr, R_irr, G_irr; int i, j, a, b, I, J, A, B, Isym, Jsym, Asym, Bsym; dpdfile2 L1, T1A, T1B, L1A, L1B, R1A, R1B, I1A, I1B; dpdbuf4 I2, L2, R2, T2, Z, Z1, V2, G, GIBJA, Gibja, GIbJa, GiBjA, GIbjA, GiBJa; double value; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Gajib = lia rjb + limae (rjmbe - rmb tje - rje tmb + rme tjb) */ /* term 3 Gibja += L(im,ae) R(jm,be) */ dpd_buf4_init(&V2, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 20, 20, "GIAJB"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 30, 30, "Giajb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 24, 24, "GIaJb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 27, 27, "GiAjB"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 20, 30, "GIAjb"); dpd_buf4_close(&V2); dpd_buf4_init(&V2, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_sort(&V2, EOM_TMP0, rspq, 30, 20, "GiaJB"); dpd_buf4_close(&V2); /* term 4, G(IA,JB) <-- - L(IM,AE) T(J,E) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 21, 0, 21, 0, "Z(IM,AJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 21, 20, 21, 0, "Z(IB,AJ)"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 20, 21, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 21, 20, 21, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 20, 20, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(ia,jb) <-- - L(im,ae) T(j,e) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 31, 10, 31, 0, "Z(im,aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L2, &T1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 31, 30, 31, 0, "Z(ib,aj)"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 30, 31, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 31, 30, 31, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 30, 30, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(Ia,Jb) <-- - L(Im,aE) T(J,E) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 22, 25, 22, 25, 0, "Z(Im,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 29, 22, 29, 0, "LIjaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 25, 24, 25, 0, "Z(Ib,aJ)"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 24, 25, "Z(Ia,bJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 25, 24, 25, 0, "Z(Ia,bJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 24, 24, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 24, 24, 24, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 24, 24, 24, 24, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(iA,jB) <-- - L(iM,Ae) T(j,e) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 23, 26, 23, 26, 0, "Z(iM,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 28, 23, 28, 0, "LiJAb"); dpd_file2_init(&T1A, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 26, 27, 26, 0, "Z(iB,Aj)"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 27, 26, "Z(iA,Bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 26, 27, 26, 0, "Z(iA,Bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 27, 27, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 27, 27, 27, 0, "Z(iA,jB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 27, 27, 27, 27, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(IA,jb) <-- - L2(Im,Ae) T(j,e) R(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 22, 26, 22, 26, 0, "Z(Im,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&L2, &T1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&T1B); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &R1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&R1B); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 20, 31, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 20, 30, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&G, EOM_TMP0, 0, 20, 30, 20, 30, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 4, G(ia,JB) <-- - L(iM,aE) T(J,E) R(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 23, 25, 23, 25, 0, "Z(iM,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&L2, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&T1A); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 25, 27, 25, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &R1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&R1A); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 30, 21, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 21, 30, 21, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 30, 20, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 20, 30, 20, 0, "Z(ia,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 20, 30, 20, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* term 5, G(IA,JB) <-- - (L(IM,AE)*R(J,E)) * T(M,B) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 21, 20, 21, 0, "Z(IB,AJ)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 20, 21, "Z(IA,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 21, 20, 21, 0, "Z(IA,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 20, 20, "Z(IA,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "GIAJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(ia,jb) <-- - (L(im,ae)*R(j,e)) * T(m,b) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 10, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 31, 30, 31, 0, "Z(ib,aj)"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 30, 31, "Z(ia,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 31, 30, 31, 0, "Z(ia,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 30, 30, "Z(ia,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Giajb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(Ia,Jb) <-- - (L2(Im,Ea)*R(J,E)) * T(m,b) */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 25, 24, 25, 0, "Z(Ib,aJ)"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 24, 25, "Z(Ia,bJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 25, 24, 25, 0, "Z(Ia,bJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 24, 24, "Z(Ia,Jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 24, 24, 24, 0, "Z(Ia,Jb)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 24, 24, 24, 24, 0, "GIaJb"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(iA,jB) <-- - (L2(iM,eA)*R(j,e)) * T(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 26, 23, 26, 0, "Z(iM,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 28, 23, 28, 0, "LiJAb"); dpd_file2_init(&R1A, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L2, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&L2); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 26, 27, 26, 0, "Z(iB,Aj)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 27, 26, "Z(iA,Bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 26, 27, 26, 0, "Z(iA,Bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 27, 27, "Z(iA,jB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 27, 27, 27, 0, "Z(iA,jB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 27, 27, 27, 27, 0, "GiAjB"); dpd_buf4_axpy(&Z1, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z1); /* term 5, G(IA,jb) <-- - L2(Im,Ae) R(j,e) T(m,b) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 26, 22, 26, 0, "Z(Im,Aj)"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L2, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&R1B); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_contract424(&Z, &T1B, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1B); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 20, 31, "Z(IA,bj)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 20, 30, "Z(IA,jb)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&G, EOM_TMP0, 0, 20, 30, 20, 30, 0, "GIAjb"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); /* term 5, G(ia,JB) <-- - L(iM,aE) R(J,E) T(M,B) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 25, 23, 25, 0, "Z(iM,aJ)"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L2, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&R1A); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 27, 25, 27, 25, 0, "Z(iB,aJ)"); dpd_contract424(&Z, &T1A, &Z1, 1, 0, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_file2_close(&T1A); dpd_buf4_sort(&Z1, EOM_TMP1, prqs, 30, 21, "Z(ia,BJ)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 21, 30, 21, 0, "Z(ia,BJ)"); dpd_buf4_sort(&Z1, EOM_TMP1, pqsr, 30, 20, "Z(ia,JB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, EOM_TMP1, G_irr, 30, 20, 30, 20, 0, "Z(ia,JB)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 20, 30, 20, 0, "GiaJB"); dpd_buf4_axpy(&Z1, &G, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_mat_init(&R1A); dpd_file2_mat_rd(&R1A); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_mat_init(&R1B); dpd_file2_mat_rd(&R1B); dpd_file2_init(&L1A, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L1A); dpd_file2_mat_rd(&L1A); dpd_file2_init(&L1B, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_mat_init(&L1B); dpd_file2_mat_rd(&L1B); if (!params.connect_xi) { dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_mat_init(&I1A); dpd_file2_mat_rd(&I1A); dpd_file2_init(&I1B, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_mat_init(&I1B); dpd_file2_mat_rd(&I1B); } dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); /* term 1, G(IA,JB) <-- + L(I,A) R(J,B) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "GIAJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * R1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(IA,JB) <-- + (L(IM,AE) R(M,E)) T(J,B) = L2R1_OV(I,A) * T(J,B) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1A.params->rowidx[i]; Isym = I1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1A.params->colidx[a]; Asym = I1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym) ) G.matrix[h][row][col] += I1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(ia,jb) <-- + L(i,a) R(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Giajb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * R1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(ia,jb) <-- + (L(im,ae) R(m,e))*T(j,b) = L2R1_ov(i,a) * T(j,b) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1B.params->rowidx[i]; Isym = I1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1B.params->colidx[a]; Asym = I1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(IA,jb) <-- L(I,A) R(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 30, 20, 30, 0, "GIAjb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1A.params->rowidx[i]; Isym = L1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1A.params->colidx[a]; Asym = L1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1B.params->colidx[b]; Bsym = R1B.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr) ) G.matrix[h][row][col] += L1A.matrix[Isym][I][A] * R1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(IA,jb) <-- L2R1_OV(I,A) * T(j,b) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1A.params->rowidx[i]; Isym = I1A.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1A.params->colidx[a]; Asym = I1A.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); /* term 1, G(ia,JB) <-- L(i,a) R(J,B) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 20, 30, 20, 0, "GiaJB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = L1B.params->rowidx[i]; Isym = L1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = L1B.params->colidx[a]; Asym = L1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = R1A.params->colidx[b]; Bsym = R1A.params->qsym[b]; if( ((Isym^Asym)==L_irr) && ((Jsym^Bsym)==R_irr)) G.matrix[h][row][col] += L1B.matrix[Isym][I][A] * R1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } /* term 2, G(ia,JB) <-- L2R1_ov(i,a) T(J,B) */ if (!params.connect_xi) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; I = I1B.params->rowidx[i]; Isym = I1B.params->psym[i]; a = G.params->roworb[h][row][1]; A = I1B.params->colidx[a]; Asym = I1B.params->qsym[a]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { j = G.params->colorb[h^G_irr][col][0]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; b = G.params->colorb[h^G_irr][col][1]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if( ((Isym^Asym)==G_irr) && (Jsym==Bsym)) G.matrix[h][row][col] += I1B.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } } dpd_buf4_scm(&G, -1.0); dpd_buf4_close(&G); dpd_file2_mat_close(&R1A); dpd_file2_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1B); dpd_file2_mat_close(&L1A); dpd_file2_close(&L1A); dpd_file2_mat_close(&L1B); dpd_file2_close(&L1B); if (!params.connect_xi) { dpd_file2_mat_close(&I1A); dpd_file2_close(&I1A); dpd_file2_mat_close(&I1B); dpd_file2_close(&I1B); } dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* Sort all spin cases to correct ordering (ib,ja) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "GIAJB"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 20, 20, "GIBJA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Giajb"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 30, 30, "Gibja"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 24, 24, 24, 24, 0, "GIaJb"); dpd_buf4_scm(&G,-1.0); dpd_buf4_sort(&G, EOM_TMP0, psrq, 24, 24, "GIbJa"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 27, 27, 27, 27, 0, "GiAjB"); dpd_buf4_scm(&G,-1.0); dpd_buf4_sort(&G, EOM_TMP0, psrq, 27, 27, "GiBjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 20, 30, 20, 30, 0, "GIAjb"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 24, 27, "GIbjA"); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 30, 20, 30, 20, 0, "GiaJB"); dpd_buf4_sort(&G, EOM_TMP0, psrq, 27, 24, "GiBJa"); dpd_buf4_close(&G); /* Add to ground state terms in CC_GAMMA */ dpd_buf4_init(&GIBJA, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_axpy(&GIBJA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIBJA); dpd_buf4_init(&Gibja, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_axpy(&Gibja, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&Gibja); dpd_buf4_init(&GIbJa, EOM_TMP0, G_irr, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_axpy(&GIbJa, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIbJa); dpd_buf4_init(&GiBjA, EOM_TMP0, G_irr, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_axpy(&GiBjA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GiBjA); dpd_buf4_init(&GIbjA, EOM_TMP0, G_irr, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_axpy(&GIbjA, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GIbjA); dpd_buf4_init(&GiBJa, EOM_TMP0, G_irr, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_init(&G, CC_GAMMA, G_irr, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_axpy(&GiBJa, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_close(&GiBJa); /* symmetrize after adding to CC_GAMMA */ dpd_buf4_init(&G, CC_GAMMA, G_irr, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_symm(&G); dpd_buf4_close(&G); dpd_buf4_init(&GIbjA, CC_GAMMA, G_irr, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_init(&GiBJa, CC_GAMMA, G_irr, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_symm2(&GIbjA, &GiBJa); dpd_buf4_close(&GiBJa); dpd_buf4_sort(&GIbjA, CC_GAMMA, rspq, 27, 24, "GiBJa"); dpd_buf4_close(&GIbjA); psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0,PSIO_OPEN_NEW); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gijab.cc�������������������������������������������������������������������0000644�0001015�0000765�00000157264�10757640026�015425� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* computes non R0 parts of EOM CCSD Gijab */ extern void x_Gijab_uhf(void); void x_Gijab_rohf(void); void x_Gijab_rohf_2(void); void x_Gijab_rohf_3(void); void x_Gijab(void) { if (params.ref == 0 || params.ref == 1) x_Gijab_rohf(); else x_Gijab_uhf(); return; } void x_Gijab_rohf(void) { int h, nirreps; int R_irr, L_irr, G_irr; double value, tval; dpdfile2 T1, L1, I1, T1A, T1B, Z1, R1; dpdbuf4 R, I, G, L, T, V, Z, Z2; nirreps = moinfo.nirreps; R_irr = params.R_irr; L_irr = params.L_irr; G_irr = params.G_irr; /* term 1,2: (L*R) * Tau(IJ,AB), see comments in xi_connected */ if (G_irr == 0) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_copy(&T, EOM_TMP0, "GIJAB"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_copy(&T, EOM_TMP0, "Gijab"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_copy(&T, EOM_TMP0, "GIjAb"); dpd_buf4_close(&T); } else { dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); } /* -P(ij) LR_OO(M,I) Tau(MJ,AB); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_OV(M,F) T(I,F) Tau(MJ,AB); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ij) LR_oo(m,i) Tau(mj,ab); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_ov(m,f) T(i,f) Tau(mj,ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauijab"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* GIjAb += -P(Ij) LR_OO(M,I) Tau(Mj,Ab); terms 4,5,8,9 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(Ij) L2R1_OV(M,F) T(I,F) Tau(Nm,Ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract244(&Z1, &T, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* -P(ab) LR_VV(F,A) Tau(IJ,FB); terms 6,7,10,11 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ab) LR_vv(f,a) Tau(ij,fb); */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GIjAb += - LR_VV(F,A) Tau(Ij,Fb) + LR_VV(f,a) Tau(Ij,fA) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 1/4 Lmnef Rmnab Tau_ijef, terms 13, 15 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); /* - 0.5 P(ij) (Lmnfe Rie) Tjf (taumnab), terms 24, 26 */ /* + 1/4 Lmnef Rijef Tau_mnab, terms 12, 14 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z(IJ,M>N)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z(ij,m>n)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_axpy(&I, &Z, 1.0); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 0.5 P(AB) (tau_IJEF LMNEF) RMA TNB ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(I>J,AN)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_OOOO"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + 0.5 P(ab) (tau_ijef Lmnef) Rma Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(i>j,an)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_oooo"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + tau_IjEf LMnEf RMA Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); /* + tau_IjEf LNmEf Rmb TNA ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z2(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* terms combined to P(ij)P(ab) Z(i,a) T(j,b), 3,22,23,33 */ x_Gijab_rohf_2(); /* terms combined to P(ij)P(ab) Z(i,a) R(j,b), 18,32,34,19 */ x_Gijab_rohf_3(); /* -P(ij)(Lme Tie + 0.5 Lmnef Tinef) Rmjab, term 16, 30 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(jI,Ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab)(Lme Tmb + 0.5 Lmnfe Tmnfb) Rijae, term 17, 31 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_contract424(&R, &I1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab) lmnef rme tijfb tna, term 37 */ if (!params.connect_xi) { dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(I>J,AN)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(i>j,an)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(Ij,An)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(Ij,Nb)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &T, &Z, 1, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); } /* compute Z(IA,JB) Z(ia,jb) and Z(IA,jb) for terms 20, 28, 29, 21 then permute and add in */ /* + P(ij) P(ab) (Rimae Lnmfe) Tnjfb, term 20 */ dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_sort_axpy(&Z, EOM_TMP0, psrq, 10, 10, "Z(IA,jb)", 1.0); dpd_buf4_close(&Z); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Tif Rna, term 28 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Rif Tna, term 29 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Rjmbe Lnmfe) Tif Tna, term 21 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* Now permute Z(IA,JB) and Z(ia,jb) and add them in along with Z(IA,jb) */ dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,AB)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(IJ,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,BA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z(ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 2, 7, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(ji,ab)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(ij,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ji,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ij,ba)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(ji,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ji,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, prqs, 0, 5, "GIjAb", 1.0); dpd_buf4_close(&Z); /* add to ground state parts */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); tval = dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); fprintf(outfile,"<Gijab|Gijab> = %15.10lf\n", tval); */ return; } /* This function computes the following EOM Gijab terms Z(i,a) += Rimae Lme ; term 3 Z(i,a) -= 0.5 Lmnef Tmnea Rif ; term 22 Z(i,a) -= 0.5 Lmnef Timef Rna; term 23 Z(i,a) += lmnef rme tinaf; term 33 P(ij) P(ab) [ Z(i,a) * T(j,b) ] */ void x_Gijab_rohf_2(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1R2A, L1R2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1R2_OV, term 3 */ dpd_file2_init(&L1R2A, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_file2_init(&L1R2B, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_file2_copy(&L1R2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1R2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1R2A); dpd_file2_close(&L1R2B); dpd_file2_init(&Z1A, EOM_TMP1, G_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, G_irr, 0, 1, "Zia"); /* Z(I,A) += 0.5 (lmnef tmnea) rif, term 22 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&R1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&R1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (timef lnmef) rna; term 23 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&I1A, &R1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&I1B, &R1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) += lmnef rme tinaf; term 33 */ if (!params.connect_xi) { dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_dot24(&I1A, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_dot24(&I1B, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_dot24(&I1B, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_dot24(&I1A, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&I1A); dpd_file2_close(&I1B); } /* open one-electron files for the nasty permutations */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); /* + Z(I,A) T(J,B) */ /* - Z(I,B) T(J,A) */ /* + T(I,A) Z(J,B) */ /* - T(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1A.params->rowidx[i]; I3sym = T1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1A.params->rowidx[j]; J1sym = T1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1A.params->colidx[b]; B1sym = T1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) T(J,B) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1A.matrix[J1sym][J1][B1]; /* - Z(I,B) T(J,A) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * T1A.matrix[J2sym][J2][A2]; /* + T(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * T1A.matrix[I3sym][I3][A3]; /* - T(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * T1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1B.params->rowidx[i]; I3sym = T1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1B.params->colidx[a]; A2sym = T1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* - Z(i,b) T(j,a) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * T1B.matrix[J2sym][J2][A2]; /* + T(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * T1B.matrix[I3sym][I3][A3]; /* - T(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * T1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) T(j,b) */ /* + T(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = T1A.params->rowidx[i]; I2sym = T1A.params->psym[i]; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* + T(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==G_irr) && (I2sym==A2sym) ) G.matrix[h][row][col] += T1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } /* This function computes the following EOM Gijab terms P(ij) P(ab) [ Z(i,a) * R(j,b) ] Z(i,a) += Timae Lme, term 18 Z(i,a) -= 0.5 (Lmnef Tmnea) Tif, term 32 Z(i,a) -= 0.5 (Lmnef Tmief) Tna; term 34 Z(i,a) += Lme Tma Tie ; term 19 */ void x_Gijab_rohf_3(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1T2A, L1T2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1T2_OV, term 18 */ dpd_file2_init(&L1T2A, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_file2_init(&L1T2B, EOM_TMP, L_irr, 0, 1, "L1T2_ov"); dpd_file2_copy(&L1T2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1T2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1T2A); dpd_file2_close(&L1T2B); dpd_file2_init(&Z1A, EOM_TMP1, L_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, L_irr, 0, 1, "Zia"); /* Z(I,A) -= 0.5 Lmnef Tmnea Tif, term 32 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (Lmnef Tmief ) Tna; term 34 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1A, &T1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1B, &T1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) += Lme Tma Tie ; term 19 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* open one-electron files for the nasty terms */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); /* + Z(I,A) R(J,B) */ /* - Z(I,B) R(J,A) */ /* + R(I,A) Z(J,B) */ /* - R(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1A.params->rowidx[i]; I3sym = R1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1A.params->rowidx[j]; J1sym = R1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1A.params->colidx[b]; B1sym = R1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) R(J,B) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1A.matrix[J1sym][J1][B1]; /* - Z(I,B) R(J,A) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * R1A.matrix[J2sym][J2][A2]; /* + R(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * R1A.matrix[I3sym][I3][A3]; /* - R(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * R1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1B.params->rowidx[i]; I3sym = R1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1B.params->colidx[a]; A2sym = R1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* - Z(i,b) R(j,a) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * R1B.matrix[J2sym][J2][A2]; /* + R(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * R1B.matrix[I3sym][I3][A3]; /* - R(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * R1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) R(j,b) */ /* + R(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = R1A.params->rowidx[i]; I2sym = R1A.params->psym[i]; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* + R(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==L_irr) && ((I2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] += R1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gijab_ROHF.c���������������������������������������������������������������0000644�0001015�0000765�00000156570�10757640026�016077� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #define EXTERN #include "globals.h" void x_Gijab_ROHF_2(void); void x_Gijab_ROHF_3(void); void x_Gijab_ROHF(void) { int h, nirreps; int R_irr, L_irr, G_irr; double value, tval; dpdfile2 T1, L1, I1, T1A, T1B, Z1, R1; dpdbuf4 R, I, G, L, T, V, Z, Z2; nirreps = moinfo.nirreps; R_irr = params.R_irr; L_irr = params.L_irr; G_irr = params.G_irr; /* term 1,2: (L*R) * Tau(IJ,AB), see comments in xi_connected */ if (G_irr == 0) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_copy(&T, EOM_TMP0, "GIJAB"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_copy(&T, EOM_TMP0, "Gijab"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_copy(&T, EOM_TMP0, "GIjAb"); dpd_buf4_close(&T); } else { dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); } /* -P(ij) LR_OO(M,I) Tau(MJ,AB); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_OV(M,F) T(I,F) Tau(MJ,AB); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ij) LR_oo(m,i) Tau(mj,ab); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_ov(m,f) T(i,f) Tau(mj,ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauijab"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* GIjAb += -P(Ij) LR_OO(M,I) Tau(Mj,Ab); terms 4,5,8,9 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(Ij) L2R1_OV(M,F) T(I,F) Tau(Nm,Ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract244(&Z1, &T, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* -P(ab) LR_VV(F,A) Tau(IJ,FB); terms 6,7,10,11 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ab) LR_vv(f,a) Tau(ij,fb); */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GIjAb += - LR_VV(F,A) Tau(Ij,Fb) + LR_VV(f,a) Tau(Ij,fA) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 1/4 Lmnef Rmnab Tau_ijef, terms 13, 15 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); /* - 0.5 P(ij) (Lmnfe Rie) Tjf (taumnab), terms 24, 26 */ /* + 1/4 Lmnef Rijef Tau_mnab, terms 12, 14 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z(IJ,M>N)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z(ij,m>n)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_axpy(&I, &Z, 1.0); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 0.5 P(AB) (tau_IJEF LMNEF) RMA TNB ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(I>J,AN)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_OOOO"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + 0.5 P(ab) (tau_ijef Lmnef) Rma Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(i>j,an)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_oooo"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + tau_IjEf LMnEf RMA Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); /* + tau_IjEf LNmEf Rmb TNA ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 0, 11, 0, 11, 0, "Z2(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* terms combined to P(ij)P(ab) Z(i,a) T(j,b), 3,22,23,33 */ x_Gijab_ROHF_2(); /* terms combined to P(ij)P(ab) Z(i,a) R(j,b), 18,32,34,19 */ x_Gijab_ROHF_3(); /* -P(ij)(Lme Tie + 0.5 Lmnef Tinef) Rmjab, term 16, 30 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(jI,Ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab)(Lme Tmb + 0.5 Lmnfe Tmnfb) Rijae, term 17, 31 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_contract424(&R, &I1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab) lmnef rme tijfb tna, term 37 */ if (!params.connect_xi) { dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(I>J,AN)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 11, 2, 11, 0, "Z(i>j,an)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 11, 0, 11, 0, "Z(Ij,An)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(Ij,Nb)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &T, &Z, 1, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); } /* compute Z(IA,JB) Z(ia,jb) and Z(IA,jb) for terms 20, 28, 29, 21 then permute and add in */ /* + P(ij) P(ab) (Rimae Lnmfe) Tnjfb, term 20 */ dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_sort_axpy(&Z, EOM_TMP0, psrq, 10, 10, "Z(IA,jb)", 1.0); dpd_buf4_close(&Z); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Tif Rna, term 28 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Rif Tna, term 29 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Rjmbe Lnmfe) Tif Tna, term 21 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 11, 10, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 10, 10, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 11, 10, 11, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 10, 10, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* Now permute Z(IA,JB) and Z(ia,jb) and add them in along with Z(IA,jb) */ dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,AB)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(IJ,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,BA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z(ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 2, 7, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(ji,ab)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(ij,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ji,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ij,ba)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(ji,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(ji,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, prqs, 0, 5, "GIjAb", 1.0); dpd_buf4_close(&Z); /* add to ground state parts */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); tval = dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); fprintf(outfile,"<Gijab|Gijab> = %15.10lf\n", tval); */ return; } /* This function computes the following EOM Gijab terms Z(i,a) += Rimae Lme ; term 3 Z(i,a) -= 0.5 Lmnef Tmnea Rif ; term 22 Z(i,a) -= 0.5 Lmnef Timef Rna; term 23 Z(i,a) += lmnef rme tinaf; term 33 P(ij) P(ab) [ Z(i,a) * T(j,b) ] */ void x_Gijab_ROHF_2(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1R2A, L1R2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1R2_OV, term 3 */ dpd_file2_init(&L1R2A, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_file2_init(&L1R2B, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_file2_copy(&L1R2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1R2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1R2A); dpd_file2_close(&L1R2B); dpd_file2_init(&Z1A, EOM_TMP1, G_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, G_irr, 0, 1, "Zia"); /* Z(I,A) += 0.5 (lmnef tmnea) rif, term 22 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&R1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&R1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (timef lnmef) rna; term 23 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&I1A, &R1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&I1B, &R1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) += lmnef rme tinaf; term 33 */ if (!params.connect_xi) { dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_dot24(&I1A, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_dot24(&I1B, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_dot24(&I1B, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_dot24(&I1A, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&I1A); dpd_file2_close(&I1B); } /* open one-electron files for the nasty permutations */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); /* + Z(I,A) T(J,B) */ /* - Z(I,B) T(J,A) */ /* + T(I,A) Z(J,B) */ /* - T(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1A.params->rowidx[i]; I3sym = T1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1A.params->rowidx[j]; J1sym = T1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1A.params->colidx[b]; B1sym = T1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) T(J,B) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1A.matrix[J1sym][J1][B1]; /* - Z(I,B) T(J,A) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * T1A.matrix[J2sym][J2][A2]; /* + T(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * T1A.matrix[I3sym][I3][A3]; /* - T(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * T1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1B.params->rowidx[i]; I3sym = T1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1B.params->colidx[a]; A2sym = T1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* - Z(i,b) T(j,a) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * T1B.matrix[J2sym][J2][A2]; /* + T(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * T1B.matrix[I3sym][I3][A3]; /* - T(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * T1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) T(j,b) */ /* + T(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = T1A.params->rowidx[i]; I2sym = T1A.params->psym[i]; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* + T(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==G_irr) && (I2sym==A2sym) ) G.matrix[h][row][col] += T1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } /* This function computes the following EOM Gijab terms P(ij) P(ab) [ Z(i,a) * R(j,b) ] Z(i,a) += Timae Lme, term 18 Z(i,a) -= 0.5 (Lmnef Tmnea) Tif, term 32 Z(i,a) -= 0.5 (Lmnef Tmief) Tna; term 34 Z(i,a) += Lme Tma Tie ; term 19 */ void x_Gijab_ROHF_3(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1T2A, L1T2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1T2_OV, term 18 */ dpd_file2_init(&L1T2A, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_file2_init(&L1T2B, EOM_TMP, L_irr, 0, 1, "L1T2_ov"); dpd_file2_copy(&L1T2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1T2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1T2A); dpd_file2_close(&L1T2B); dpd_file2_init(&Z1A, EOM_TMP1, L_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, L_irr, 0, 1, "Zia"); /* Z(I,A) -= 0.5 Lmnef Tmnea Tif, term 32 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (Lmnef Tmief ) Tna; term 34 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1A, &T1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&I1B, &T1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) += Lme Tma Tie ; term 19 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* open one-electron files for the nasty terms */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); /* + Z(I,A) R(J,B) */ /* - Z(I,B) R(J,A) */ /* + R(I,A) Z(J,B) */ /* - R(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1A.params->rowidx[i]; I3sym = R1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1A.params->rowidx[j]; J1sym = R1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1A.params->colidx[b]; B1sym = R1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) R(J,B) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1A.matrix[J1sym][J1][B1]; /* - Z(I,B) R(J,A) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * R1A.matrix[J2sym][J2][A2]; /* + R(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * R1A.matrix[I3sym][I3][A3]; /* - R(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * R1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1B.params->rowidx[i]; I3sym = R1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1B.params->colidx[a]; A2sym = R1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* - Z(i,b) R(j,a) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * R1B.matrix[J2sym][J2][A2]; /* + R(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * R1B.matrix[I3sym][I3][A3]; /* - R(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * R1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) R(j,b) */ /* + R(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = R1A.params->rowidx[i]; I2sym = R1A.params->psym[i]; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* + R(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==L_irr) && ((I2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] += R1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } ����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gijab_uhf.cc���������������������������������������������������������������0000644�0001015�0000765�00000160173�10757640026�016260� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* computes non R0 parts of EOM CCSD Gijab */ void x_Gijab_uhf_2(void); void x_Gijab_uhf_3(void); void x_Gijab_uhf(void) { int h, nirreps, II; int R_irr, L_irr, G_irr; double value, tval; dpdfile2 T1, L1, I1, T1A, T1B, Z1, R1; dpdbuf4 R, I, G, L, T, V, Z, Z2; nirreps = moinfo.nirreps; R_irr = params.R_irr; L_irr = params.L_irr; G_irr = params.G_irr; /* term 1,2: (L*R) * Tau(IJ,AB), see comments in xi1_connected */ if (G_irr == 0) { dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_copy(&T, EOM_TMP0, "GIJAB"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_copy(&T, EOM_TMP0, "Gijab"); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_copy(&T, EOM_TMP0, "GIjAb"); dpd_buf4_close(&T); } else { dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_scm(&G,0.0); dpd_buf4_close(&G); } /* -P(ij) LR_OO(M,I) Tau(MJ,AB); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_OV(M,F) T(I,F) Tau(MJ,AB); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tauIJAB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ij) LR_oo(m,i) Tau(mj,ab); terms 4,5,8,9 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 2, 2, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(ij) L2R1_ov(m,f) T(i,f) Tau(mj,ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tauijab"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 17, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 17, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* GIjAb += -P(Ij) LR_OO(M,I) Tau(Mj,Ab); terms 4,5,8,9 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 0, 0, "Z(N,I)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); /* -P(Ij) L2R1_OV(M,F) T(I,F) Tau(Nm,Ab); terms 35, 36 */ if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract244(&Z1, &T, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 29, 23, 29, 0, "Z(jI,bA)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_init(&Z1, EOM_TMP1, G_irr, 2, 2, "Z(n,i)"); dpd_file2_axpy(&I1, &Z1, 1.0, 0); dpd_file2_close(&I1); if (!params.connect_xi) { dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&I1, &T1, &Z1, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_file2_close(&I1); } dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_contract244(&Z1, &T, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&Z1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* -P(ab) LR_VV(F,A) Tau(IJ,FB); terms 6,7,10,11 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* -P(ab) LR_vv(f,a) Tau(ij,fb); */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tauijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 15, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 12, 15, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GIjAb += - LR_VV(F,A) Tau(Ij,Fb) + LR_VV(f,a) Tau(Ij,fA) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract244(&I1, &T, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 29, 22, 29, 0, "Z(Ij,bA)"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 29, 22, 29, 0, "tauIjbA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_contract244(&I1, &T, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 1/4 Lmnef Rmnab Tau_ijef, terms 13, 15 */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_init(&I, EOM_TMP, L_irr, 12, 12, 12, 12, 0, "Tau2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&I, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract444(&I, &R, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&R); dpd_buf4_close(&I); dpd_buf4_close(&G); /* - 0.5 P(ij) (Lmnfe Rie) Tjf (taumnab), terms 24, 26 */ /* + 1/4 Lmnef Rijef Tau_mnab, terms 12, 14 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z(IJ,M>N)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 2, 20, 2, 20, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 0, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 12, 10, 12, 0, "Z(ij,m>n)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 12, 30, 12, 30, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 10, 12, 12, 12, 0, "R2L2_oooo"); dpd_buf4_axpy(&I, &Z, -0.5); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ij,a>b)"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&Z, &T, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 17, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 10, 17, "Z(ji,a>b)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 22, 22, 22, 0, "Z(Ij,Mn)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 22, 24, 22, 24, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&I, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I); /* add terms 12, 14 */ dpd_buf4_init(&I, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_buf4_axpy(&I, &Z, 1.0); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&Z, &T, &G, 0, 1, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* + 0.5 P(AB) (tau_IJEF LMNEF) RMA TNB ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 21, 2, 21, 0, "Z(I>J,AN)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_OOOO"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + 0.5 P(ab) (tau_ijef Lmnef) Rma Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 31, 12, 31, 0, "Z(i>j,an)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 12, 10, 12, 12, 0, "Tau2L2_oooo"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 15, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_sort(&Z2, EOM_TMP1, pqsr, 12, 15, "Z(i>j,ba)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* + tau_IjEf LMnEf RMA Tnb ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 26, 22, 26, 0, "Z(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); /* + tau_IjEf LNmEf Rmb TNA ; terms 25, 27 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 22, 26, 22, 26, 0, "Z2(Ij,An)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I, &Z, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* terms combined to P(ij)P(ab) Z(i,a) T(j,b), 3,22,23,33 */ x_Gijab_uhf_2(); /* terms combined to P(ij)P(ab) Z(i,a) R(j,b), 18,32,34,19 */ x_Gijab_uhf_3(); /* -P(ij)(Lme Tie + 0.5 Lmnef Tinef) Rmjab, term 16, 30 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 7, "Z(JI,A>B)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ij,a>b)"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 2, 2, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 17, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 17, "Z(ji,a>b)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_contract244(&I1, &R, &G, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 28, 23, 28, 0, "Z(jI,Ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 23, 28, 23, 28, 0, "RiJAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 2, 2, "LT_oo"); dpd_contract244(&I1, &R, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab)(Lme Tmb + 0.5 Lmnfe Tmnfb) Rijae, term 17, 31 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&I1, EOM_TMP, L_irr, 3, 3, "LT_vv"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 15, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 12, 15, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&I1, EOM_TMP, L_irr, 3, 3, "LT_vv"); dpd_contract424(&R, &I1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 29, 22, 29, 0, "Z(Ij,bA)"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 29, 22, 29, 0, "RIjaB"); dpd_file2_init(&I1, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_contract424(&R, &I1, &Z, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&R); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* -P(ab) lmnef rme tijfb tna, term 37 */ if (!params.connect_xi) { dpd_buf4_init(&Z, EOM_TMP1, G_irr, 2, 21, 2, 21, 0, "Z(I>J,AN)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 2, 5, "Z(I>J,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z(I>J,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 31, 12, 31, 0, "Z(i>j,an)"); dpd_buf4_init(&T, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 15, 12, 17, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 12, 15, "Z(i>j,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z(i>j,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 26, 22, 26, 0, "Z(Ij,An)"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract424(&T, &I1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &G, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 24, 22, 24, 0, "Z(Ij,Nb)"); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1, &T, &Z, 1, 2, 1, 1.0, 0.0); dpd_file2_close(&I1); dpd_buf4_close(&T); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &G, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&G); } /* compute Z(IA,JB) Z(ia,jb) and Z(IA,jb) for terms 20, 28, 29, 21 then permute and add in */ /* + P(ij) P(ab) (Rimae Lnmfe) Tnjfb, term 20 */ dpd_buf4_init(&Z, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 27, 24, 27, 0, "Z(Ib,jA)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_init(&T, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&T, &I, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_init(&I, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_init(&T, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&I, &T, &Z, 0, 1, 1.0, 1.0); dpd_buf4_close(&I); dpd_buf4_close(&T); dpd_buf4_sort_axpy(&Z, EOM_TMP0, psrq, 20, 30, "Z(IA,jb)", 1.0); dpd_buf4_close(&Z); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Tif Rna, term 28 */ dpd_buf4_init(&Z, EOM_TMP1, L_irr, 20, 0, 20, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 20, 21, 20, 0, "Z(AI,JB)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 20, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 30, 10, 30, 10, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 31, 30, 31, 30, 0, "Z(ai,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 30, 30, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 30, 0, 30, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 24, 22, 24, 22, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 27, 23, 27, 23, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 25, 27, 25, 27, 0, "Z(bI,jA)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 21, 30, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, L_irr, 20, 10, 20, 10, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Tjmbe Lnmfe) Rif Tna, term 29 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 0, 20, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 20, 21, 20, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 20, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 10, 30, 10, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 31, 30, 31, 30, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 30, 30, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 0, 30, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 22, 24, 22, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 27, 23, 27, 23, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 25, 27, 25, 27, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 21, 30, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 10, 20, 10, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, L_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&I, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* - P(ij) P(ab) (Rjmbe Lnmfe) Tif Tna, term 21 */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 0, 20, 0, 0, "Z(JB,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 20, 21, 20, 0, "Z(AI,JB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 20, "Z(IA,JB)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 10, 30, 10, 0, "Z(jb,ni)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 31, 30, 31, 30, 0, "Z(ai,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 30, 30, "Z(ia,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 0, 30, 0, 0, "Z(jb,NI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 22, 24, 22, 0, "Z(Ib,Nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 24, 26, 24, 26, 0, "Z(Ib,Aj)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, prsq, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 27, 23, 27, 23, 0, "Z(jA,nI)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 25, 27, 25, 27, 0, "Z(bI,jA)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, sqrp, 21, 30, "Z(AI,jb)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 21, 30, 21, 30, 0, "Z(AI,jb)"); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, qprs, 20, 30, "Z(IA,jb)", +1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 10, 20, 10, 0, "Z(IA,nj)"); dpd_buf4_init(&I, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&I); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 31, 20, 31, 0, "Z(IA,bj)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_TMP0, pqsr, 20, 30, "Z(IA,jb)", -1.0); dpd_buf4_close(&Z2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); /* Now permute Z(IA,JB) and Z(ia,jb) and add them in along with Z(IA,jb) */ dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,AB)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 0, 5, "Z(IJ,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,AB)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(IJ,BA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 5, "Z(JI,BA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z(JI,BA)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z2, EOM_TMP0, G_irr, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 10, 15, "Z(ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 15, 12, 17, 0, "Gijab"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 15, "Z(ji,ab)"); dpd_buf4_sort(&Z, EOM_TMP1, pqsr, 10, 15, "Z(ij,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z(ji,ab)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z(ij,ba)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 15, "Z(ji,ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z(ji,ba)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_sort_axpy(&Z, EOM_TMP0, prqs, 22, 28, "GIjAb", 1.0); dpd_buf4_close(&Z); /* add to ground state parts */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 22, 28, 22, 28, 0, "GIjAb"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); tval = dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 12, 17, 12, 17, 0, "Gijab"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); dpd_buf4_init(&V, CC_GAMMA, G_irr, 22, 28, 22, 28, 0, "GIjAb"); tval += dpd_buf4_dot_self(&V); dpd_buf4_close(&V); fprintf(outfile,"<Gijab|Gijab> = %15.10lf\n", tval); */ return; } /* This function computes the following EOM Gijab terms Z(i,a) += Rimae Lme ; term 3 Z(i,a) -= 0.5 Lmnef Tmnea Rif ; term 22 Z(i,a) -= 0.5 Lmnef Timef Rna; term 23 Z(i,a) += lmnef rme tinaf; term 33 P(ij) P(ab) [ Z(i,a) * T(j,b) ] */ void x_Gijab_uhf_2(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1R2A, L1R2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1R2_OV, term 3 */ dpd_file2_init(&L1R2A, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_file2_init(&L1R2B, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_file2_copy(&L1R2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1R2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1R2A); dpd_file2_close(&L1R2B); dpd_file2_init(&Z1A, EOM_TMP1, G_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, G_irr, 2, 3, "Zia"); /* Z(I,A) += 0.5 (lmnef tmnea) rif, term 22 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&R1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&R1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (timef lnmef) rna; term 23 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&I1A, &R1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&R1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&I1B, &R1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&R1B); dpd_file2_close(&I1B); /* Z(i,a) += lmnef rme tinaf; term 33 */ if (!params.connect_xi) { dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_dot24(&I1A, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_dot24(&I1B, &T, &Z1A, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_dot24(&I1B, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_dot24(&I1A, &T, &Z1B, 0, 0, 1.0, 1.0); dpd_buf4_close(&T); dpd_file2_close(&I1A); dpd_file2_close(&I1B); } /* open one-electron files for the nasty permutations */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); /* + Z(I,A) T(J,B) */ /* - Z(I,B) T(J,A) */ /* + T(I,A) Z(J,B) */ /* - T(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1A.params->rowidx[i]; I3sym = T1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1A.params->rowidx[j]; J1sym = T1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1A.params->colidx[b]; B1sym = T1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) T(J,B) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1A.matrix[J1sym][J1][B1]; /* - Z(I,B) T(J,A) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * T1A.matrix[J2sym][J2][A2]; /* + T(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * T1A.matrix[I3sym][I3][A3]; /* - T(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * T1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 17, 12, 17, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = T1B.params->rowidx[i]; I3sym = T1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = T1B.params->colidx[a]; A2sym = T1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* - Z(i,b) T(j,a) */ if ( ((I2sym^B2sym)==G_irr) && (J2sym==A2sym) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * T1B.matrix[J2sym][J2][A2]; /* + T(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==G_irr) && (I3sym==A3sym) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * T1B.matrix[I3sym][I3][A3]; /* - T(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==G_irr) && (I4sym==B4sym) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * T1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) T(j,b) */ /* + T(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = T1A.params->rowidx[i]; I2sym = T1A.params->psym[i]; J1 = T1B.params->rowidx[j]; J1sym = T1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = T1A.params->colidx[a]; A2sym = T1A.params->qsym[a]; B1 = T1B.params->colidx[b]; B1sym = T1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) T(j,b) */ if ( ((I1sym^A1sym)==G_irr) && (J1sym==B1sym) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * T1B.matrix[J1sym][J1][B1]; /* + T(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==G_irr) && (I2sym==A2sym) ) G.matrix[h][row][col] += T1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } /* This function computes the following EOM Gijab terms P(ij) P(ab) [ Z(i,a) * R(j,b) ] Z(i,a) += Timae Lme, term 18 Z(i,a) -= 0.5 (Lmnef Tmnea) Tif, term 32 Z(i,a) -= 0.5 (Lmnef Tmief) Tna; term 34 Z(i,a) += Lme Tma Tie ; term 19 */ void x_Gijab_uhf_3(void) { int h, nirreps, row, col; int i,j,a,b; int I1, I2, I3, I4, J1, J2, J3, J4, A1, A2, A3, A4, B1, B2, B3, B4; int I1sym, I2sym, I3sym, I4sym, J1sym, J2sym, J3sym, J4sym; int A1sym, A2sym, A3sym, A4sym, B1sym, B2sym, B3sym, B4sym; int L_irr, R_irr, G_irr; dpdfile2 L1T2A, L1T2B, T1A, T1B, Z1A, Z1B, I1A, I1B, R1A, R1B; dpdbuf4 G, I, Z, Z2, T, L; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* Z(I,A) += L1T2_OV, term 18 */ dpd_file2_init(&L1T2A, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_file2_init(&L1T2B, EOM_TMP, L_irr, 2, 3, "L1T2_ov"); dpd_file2_copy(&L1T2A, EOM_TMP1, "ZIA"); dpd_file2_copy(&L1T2B, EOM_TMP1, "Zia"); dpd_file2_close(&L1T2A); dpd_file2_close(&L1T2B); dpd_file2_init(&Z1A, EOM_TMP1, L_irr, 0, 1, "ZIA"); dpd_file2_init(&Z1B, EOM_TMP1, L_irr, 2, 3, "Zia"); /* Z(I,A) -= 0.5 Lmnef Tmnea Tif, term 32 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) -= 0.5 (Lmnef Tmief ) Tna; term 34 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&I1A, &T1A, &Z1A, 1, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&I1B, &T1B, &Z1B, 1, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* Z(i,a) += Lme Tma Tie ; term 19 */ dpd_file2_init(&I1A, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&T1A, &I1A, &Z1A, 0, 1, -1.0, 1.0); dpd_file2_close(&T1A); dpd_file2_close(&I1A); dpd_file2_init(&I1B, EOM_TMP, L_irr, 3, 3, "LT1_vv"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&T1B, &I1B, &Z1B, 0, 1, -1.0, 1.0); dpd_file2_close(&T1B); dpd_file2_close(&I1B); /* open one-electron files for the nasty terms */ dpd_file2_mat_init(&Z1A); dpd_file2_mat_init(&Z1B); dpd_file2_mat_rd(&Z1A); dpd_file2_mat_rd(&Z1B); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); /* + Z(I,A) R(J,B) */ /* - Z(I,B) R(J,A) */ /* + R(I,A) Z(J,B) */ /* - R(I,B) Z(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 7, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1A.params->rowidx[i]; I3sym = R1A.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1A.params->rowidx[j]; J1sym = R1A.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1A.params->rowidx[j]; J3sym = Z1A.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1A.params->colidx[b]; B1sym = R1A.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1A.params->colidx[b]; B2sym = Z1A.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(I,A) R(J,B) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1A.matrix[J1sym][J1][B1]; /* - Z(I,B) R(J,A) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[I2sym][I2][B2] * R1A.matrix[J2sym][J2][A2]; /* + R(I,A) Z(J,B) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr) ) G.matrix[h][row][col] += Z1A.matrix[J3sym][J3][B3] * R1A.matrix[I3sym][I3][A3]; /* - R(I,B) Z(J,A) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr) ) G.matrix[h][row][col] -= Z1A.matrix[J4sym][J4][A4] * R1A.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 17, 12, 17, 0, "Gijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1B.params->rowidx[i]; I1sym = Z1B.params->psym[i]; I2 = I1; I2sym = I1sym; I3 = R1B.params->rowidx[i]; I3sym = R1B.params->psym[i]; I4 = I3; I4sym = I3sym; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = J1; J2sym=J1sym; J3 = Z1B.params->rowidx[j]; J3sym = Z1B.params->psym[j]; J4 = J3; J4sym=J3sym; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1B.params->colidx[a]; A1sym = Z1B.params->qsym[a]; A4 = A1; A4sym = A1sym; A2 = R1B.params->colidx[a]; A2sym = R1B.params->qsym[a]; A3 = A2; A3sym = A2sym; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B4 = B1; B4sym = B1sym; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; B3 = B2; B3sym = B2sym; /* + Z(i,a) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* - Z(i,b) R(j,a) */ if ( ((I2sym^B2sym)==L_irr) && ((J2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[I2sym][I2][B2] * R1B.matrix[J2sym][J2][A2]; /* + R(i,a) Z(j,b) */ if ( ((J3sym^B3sym)==L_irr) && ((I3sym^A3sym)==R_irr ) ) G.matrix[h][row][col] += Z1B.matrix[J3sym][J3][B3] * R1B.matrix[I3sym][I3][A3]; /* - R(i,b) Z(j,a) */ if ( ((J4sym^A4sym)==L_irr) && ((I4sym^B4sym)==R_irr ) ) G.matrix[h][row][col] -= Z1B.matrix[J4sym][J4][A4] * R1B.matrix[I4sym][I4][B4]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* + Z(I,A) R(j,b) */ /* + R(I,A) Z(j,b) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I1 = Z1A.params->rowidx[i]; I1sym = Z1A.params->psym[i]; I2 = R1A.params->rowidx[i]; I2sym = R1A.params->psym[i]; J1 = R1B.params->rowidx[j]; J1sym = R1B.params->psym[j]; J2 = Z1B.params->rowidx[j]; J2sym = Z1B.params->psym[j]; for(col=0; col < G.params->coltot[h]; col++) { a = G.params->colorb[h][col][0]; b = G.params->colorb[h][col][1]; A1 = Z1A.params->colidx[a]; A1sym = Z1A.params->qsym[a]; A2 = R1A.params->colidx[a]; A2sym = R1A.params->qsym[a]; B1 = R1B.params->colidx[b]; B1sym = R1B.params->qsym[b]; B2 = Z1B.params->colidx[b]; B2sym = Z1B.params->qsym[b]; /* + Z(I,A) R(j,b) */ if ( ((I1sym^A1sym)==L_irr) && ((J1sym^B1sym)==R_irr ) ) G.matrix[h][row][col] += Z1A.matrix[I1sym][I1][A1] * R1B.matrix[J1sym][J1][B1]; /* + R(I,A) Z(j,b) */ if ( ((J2sym^B2sym)==L_irr) && ((I2sym^A2sym)==R_irr ) ) G.matrix[h][row][col] += R1A.matrix[I2sym][I2][A2] * Z1B.matrix[J2sym][J2][B2]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); dpd_file2_mat_close(&Z1A); dpd_file2_mat_close(&Z1B); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1,PSIO_OPEN_NEW); return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gijka.cc�������������������������������������������������������������������0000644�0001015�0000765�00000075760�10757640026�015436� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_Gijka_rohf(void); void x_Gijka_6_rohf(void); void x_Gijka_7_rohf(void); void x_Gijka_8_rohf(void); extern void x_Gijka_uhf(void); void x_Gijka(void) { if (params.ref == 0 || params.ref == 1) x_Gijka_rohf(); else x_Gijka_uhf(); return; } /* This function computes the non-R0 parts of the 2pdm density matrix Gijka = 0.5 *(rho_kaij + rho_Gijka) */ void x_Gijka_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 1, rho_kaij += Lijae * Rke */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_OOVO(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GIJKA"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_oovo(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "Gijka"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OovO(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GIjKa"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OoVo(qpsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GiJkA"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); /* term 2, rho_ijka += Rijae * Lke */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L1R2_OOVO(pqsr)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L1R2_oovo(pqsr)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L1R2_OovO(pqsr)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L1R2_OoVo(qpsr)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 3, rho_ijka += 0.5 Rijef Lkmef tma */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_OOOO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_oooo"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_oOoO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 4, rho_ijka += 0.5 [Tijef + P(ij) Tie Tjf] Lkmef Rma */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_OOOO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_oooo"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_oOoO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 5, rho_ijka += - (Lkmef Rmf) (Tijea - P(ij) Tie Tja) */ if (!params.connect_xi) { dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1A, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1A); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract244(&I1B, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1B); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1A, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1A); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract244(&I1B, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1B); dpd_buf4_close(&Tau); dpd_buf4_close(&G); } x_Gijka_6_rohf(); x_Gijka_7_rohf(); /* term 8, +P(ij) Lkmfe rimae tjf */ /* term 9, +P(ij) Lkmfe Timae Rjf, uses Z3, Z4 */ x_Gijka_8_rohf(); /* term 10, +P(IJ) LKMEF RJF TMA TIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z5(JI,KM)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 1, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 2, 0, "Z5(JI,KM)"); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z5(JI,KA)"); dpd_contract424(&Z, &T1A, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "GIJKA"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 10, "Z5(IJ,KA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z5(IJ,KA)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* term 10, +P(ij) lkmef rjf tma tie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z5(ji,km)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1B, &Z, 3, 1, 1, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 2, 0, "Z5(ji,km)"); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z5(ji,ka)"); dpd_contract424(&Z, &T1B, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "Gijka"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 10, "Z5(ij,ka)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z5(ij,ka)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* term 10, GIjKa += LKmEf Rjf TIE tma */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 0, 0, "Z(Ij,Km)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &V, &Z, 1, 2, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1B, &Z, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&V); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GiJkA += P(ij) LkMeF RJF Tie tMA */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 0, 0, "Z(iJ,kM)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO(qprs)"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1B, &V, &Z, 1, 2, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OoVo(qpsr)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* add 1/2 to ground-state parts of density */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* clear out temporary files */ psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0, PSIO_OPEN_NEW); return; } /* This function computes term 6, rho_ijka -= P(ij) lke rie tja or rho_ijka -= P(ij) LR1_OO(k,i) T(j,a) */ void x_Gijka_6_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; dpdfile2 LR1A, LR1B, T1A, T1B; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(&LR1A, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&LR1B, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_init(&LR1A); dpd_file2_mat_init(&LR1B); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); dpd_file2_mat_rd(&LR1A); dpd_file2_mat_rd(&LR1B); /* rho_IJKA += - LR1_OO(K,I) T(J,A) + LR1_OO(K,J) T(I,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LR1A.params->colidx[i]; Isym = LR1A.params->qsym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; II = T1A.params->rowidx[i]; IIsym = T1A.params->psym[i]; JJ = LR1A.params->colidx[j]; JJsym = LR1A.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LR1A.params->rowidx[k]; Ksym = LR1A.params->psym[k]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LR1A.matrix[Ksym][K][I] * T1A.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==G_irr) && (IIsym==Asym)) G.matrix[h][row][col] += LR1A.matrix[Ksym][K][JJ] * T1A.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ijka += - LR1_oo(k,i) T(j,a) + LR1_oo(k,j) T(i,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LR1B.params->colidx[i]; Isym = LR1B.params->qsym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; II = T1B.params->rowidx[i]; IIsym = T1B.params->psym[i]; JJ = LR1B.params->colidx[j]; JJsym = LR1B.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LR1B.params->rowidx[k]; Ksym = LR1B.params->psym[k]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LR1B.matrix[Ksym][K][I] * T1B.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==G_irr) && (IIsym==Asym)) G.matrix[h][row][col] += LR1B.matrix[Ksym][K][JJ] * T1B.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_IjKa += - LR1_OO(K,I) T(j,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LR1A.params->colidx[i]; Isym = LR1A.params->qsym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LR1A.params->rowidx[k]; Ksym = LR1A.params->psym[k]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LR1A.matrix[Ksym][K][I] * T1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_iJkA += - LR1_oo(k,i) T(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LR1B.params->colidx[i]; Isym = LR1B.params->qsym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LR1B.params->rowidx[k]; Ksym = LR1B.params->psym[k]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LR1B.matrix[Ksym][K][I] * T1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&LR1A); dpd_file2_mat_close(&LR1B); dpd_file2_close(&LR1A); dpd_file2_close(&LR1B); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); return; } /* This function computes Gijka -= P(ij) LT_OO(k,i) * R(j,a) */ void x_Gijka_7_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; dpdfile2 R1A, R1B, LTA, LTB; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(<A, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_file2_init(<B, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_init(<A); dpd_file2_mat_init(<B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); dpd_file2_mat_rd(<A); dpd_file2_mat_rd(<B); /* rho_IJKA += - LT_OO(K,I) R(J,A) + LT_OO(K,J) R(I,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTA.params->colidx[i]; Isym = LTA.params->qsym[i]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; II = R1A.params->rowidx[i]; IIsym = R1A.params->psym[i]; JJ = LTA.params->colidx[j]; JJsym = LTA.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTA.params->rowidx[k]; Ksym = LTA.params->psym[k]; A = R1A.params->colidx[a]; Asym = R1A.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTA.matrix[Ksym][K][I] * R1A.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==L_irr) && ((IIsym^Asym)==R_irr) ) G.matrix[h][row][col] += LTA.matrix[Ksym][K][JJ] * R1A.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ijka += - LT_oo(k,i) R(j,a) + LT_oo(k,j) R(i,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTB.params->colidx[i]; Isym = LTB.params->qsym[i]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; II = R1B.params->rowidx[i]; IIsym = R1B.params->psym[i]; JJ = LTB.params->colidx[j]; JJsym = LTB.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTB.params->rowidx[k]; Ksym = LTB.params->psym[k]; A = R1B.params->colidx[a]; Asym = R1B.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTB.matrix[Ksym][K][I] * R1B.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==L_irr) && ((IIsym^Asym)==R_irr) ) G.matrix[h][row][col] += LTB.matrix[Ksym][K][JJ] * R1B.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_IjKa += - LT_OO(K,I) R(j,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTA.params->colidx[i]; Isym = LTA.params->qsym[i]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTA.params->rowidx[k]; Ksym = LTA.params->psym[k]; A = R1B.params->colidx[a]; Asym = R1B.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTA.matrix[Ksym][K][I] * R1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_iJkA += - LT_oo(k,i) R(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTB.params->colidx[i]; Isym = LTB.params->qsym[i]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTB.params->rowidx[k]; Ksym = LTB.params->psym[k]; A = R1A.params->colidx[a]; Asym = R1A.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTB.matrix[Ksym][K][I] * R1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(<A); dpd_file2_mat_close(<B); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(<A); dpd_file2_close(<B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); return; } /* This function computes term 8 and term 9 of Gijka */ /* term 8, +P(ij) Lkmfe rimae tjf */ /* term 9, +P(ij) Lkmfe rimae tjf */ void x_Gijka_8_rohf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 8, +P(ij) Lkmfe rimae tjf */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(IA,KJ)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z(IJ,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(IJ,KA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "GIJKA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z(JI,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(JI,KA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(ia,kj)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z(ij,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(ij,ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "Gijka"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z(ji,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(ji,ka)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* GIjKa += R2L2_OvOv(Ia,Kf) T(j,f) */ /* GIjKa -= R2L2_OvOv(ja,KF) T(I,F) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(Ia,Kj)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z2(ja,KI)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z2(jI,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z2(jI,Ka)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z2(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z2(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GiJkA += R2L2_oVoV(iA,kF) T(J,F) */ /* GiJkA += R2L2_OVov(JA,kf) T(i,f) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z(iA,kJ)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z2(JA,ki)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z2(Ji,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z2(Ji,kA)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z2(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z2(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 9, +P(ij) Lkmfe rimae tjf */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z3(IA,KJ)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z3(IJ,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(IJ,KA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "GIJKA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z3(JI,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(JI,KA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z3(ia,kj)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z3(ij,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(ij,ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 2, 10, 0, "Gijka"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z3(ji,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(ji,ka)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* GIjKa += R2L2_OvOv(Ia,Kf) T(j,f) */ /* GIjKa -= R2L2_OvOv(ja,KF) T(I,F) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z3(Ia,Kj)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z3(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z4(ja,KI)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z4(jI,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z4(jI,Ka)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z4(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z4(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GiJkA += R2L2_oVoV(iA,kF) T(J,F) */ /* GiJkA += R2L2_OVov(JA,kf) T(i,f) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z3(iA,kJ)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z3(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z3(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 0, 10, 0, 0, "Z4(JA,ki)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_file2_init(&R1B, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 10, "Z4(Ji,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z4(Ji,kA)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 10, "Z4(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 10, 0, 10, 0, "Z4(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); return; } }} // namespace psi::ccdensity ����������������psi3/src/bin/ccdensity/x_Gijka_uhf.cc���������������������������������������������������������������0000644�0001015�0000765�00000076053�10757640026�016274� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_Gijka_6_uhf(void); void x_Gijka_7_uhf(void); void x_Gijka_8_uhf(void); /* This function computes the non-R0 parts of the 2pdm density matrix Gijka = 0.5 *(rho_kaij + rho_Gijka) */ void x_Gijka_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 1, rho_kaij += Lijae * Rke */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 20, 2, 20, 0, "L2R1_OOVO(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GIJKA"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 12, 30, 12, 30, 0, "L2R1_oovo(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "Gijka"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 22, 24, 22, 24, 0, "L2R1_OovO(pqsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GIjKa"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, G_irr, 23, 27, 23, 27, 0, "L2R1_OoVo(qpsr)"); dpd_buf4_copy(&Z, EOM_TMP0, "GiJkA"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_scm(&Z, -1.0); dpd_buf4_close(&Z); /* term 2, rho_ijka += Rijae * Lke */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 20, 2, 20, 0, "L1R2_OOVO(pqsr)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 12, 30, 12, 30, 0, "L1R2_oovo(pqsr)"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 22, 24, 22, 24, 0, "L1R2_OovO(pqsr)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 23, 27, 23, 27, 0, "L1R2_OoVo(qpsr)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 3, rho_ijka += 0.5 Rijef Lkmef tma */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_OOOO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 12, 10, 12, 12, 0, "R2L2_oooo"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 23, 23, 23, 23, 0, "R2L2_oOoO"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 4, rho_ijka += 0.5 [Tijef + P(ij) Tie Tjf] Lkmef Rma */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 2, 0, 2, 2, 0, "Tau2L2_OOOO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 12, 10, 12, 12, 0, "Tau2L2_oooo"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&Z, &R1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Z, EOM_TMP, L_irr, 23, 23, 23, 23, 0, "Tau2L2_oOoO"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&Z, &R1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&R1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 5, rho_ijka += - (Lkmef Rmf) (Tijea - P(ij) Tie Tja) */ if (!params.connect_xi) { dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1A, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1A); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tauijab"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract244(&I1B, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1B); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_file2_init(&I1A, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract244(&I1A, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1A); dpd_buf4_close(&Tau); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_file2_init(&I1B, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract244(&I1B, &Tau, &G, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1B); dpd_buf4_close(&Tau); dpd_buf4_close(&G); } x_Gijka_6_uhf(); x_Gijka_7_uhf(); /* term 8, +P(ij) Lkmfe rimae tjf */ /* term 9, +P(ij) Lkmfe Timae Rjf, uses Z3, Z4 */ x_Gijka_8_uhf(); /* term 10, +P(IJ) LKMEF RJF TMA TIE */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 2, 0, 2, 0, "Z5(JI,KM)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 20, 2, 20, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 1, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 0, 0, 2, 0, "Z5(JI,KM)"); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z5(JI,KA)"); dpd_contract424(&Z, &T1A, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 0, 20, "Z5(IJ,KA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z5(IJ,KA)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* term 10, +P(ij) lkmef rjf tma tie */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 12, 10, 12, 0, "Z5(ji,km)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 30, 12, 30, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1B, &Z, 3, 1, 1, 1.0, 0.0); dpd_buf4_close(&V); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 12, 0, "Z5(ji,km)"); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z5(ji,ka)"); dpd_contract424(&Z, &T1B, &Z2, 3, 0, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_axpy(&Z2, &G, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qprs, 10, 30, "Z5(ij,ka)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z5(ij,ka)"); dpd_buf4_axpy(&Z2, &G, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&G); /* term 10, GIjKa += LKmEf Rjf TIE tma */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 22, 22, 22, 0, "Z(Ij,Km)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1A, &V, &Z, 1, 2, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 24, 22, 24, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1B, &Z, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&V); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1B, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1B); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* term 10, GiJkA += P(ij) LkMeF RJF Tie tMA */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 23, 23, 23, 0, "Z(iJ,kM)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 23, 25, 23, 25, 0, "L2R1_OovO(qprs)"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1B, &V, &Z, 1, 2, 0, 1.0, 0.0); dpd_file2_close(&T1B); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 23, 27, 23, 27, 0, "L2R1_OoVo(qpsr)"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1A, &G, 3, 0, 0, 1.0, 1.0); dpd_file2_close(&T1A); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* add 1/2 to ground-state parts of density */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_init(&V, CC_GAMMA, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_axpy(&G, &V, 0.5); dpd_buf4_close(&V); dpd_buf4_close(&G); /* clear out temporary files */ psio_close(EOM_TMP0, 0); psio_open(EOM_TMP0, PSIO_OPEN_NEW); return; } /* This function computes term 6, rho_ijka -= P(ij) Lke Rie Tja + P(ij) Lmkef Rmief Tja or rho_ijka -= P(ij) LR_OO(k,i) T(j,a) */ void x_Gijka_6_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; dpdfile2 LRA, LRB, T1A, T1B; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(&LRA, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&LRB, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_init(&LRA); dpd_file2_mat_init(&LRB); dpd_file2_mat_rd(&T1A); dpd_file2_mat_rd(&T1B); dpd_file2_mat_rd(&LRA); dpd_file2_mat_rd(&LRB); /* rho_IJKA += - LR_OO(K,I) T(J,A) + LR_OO(K,J) T(I,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 20, 2, 20, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LRA.params->colidx[i]; Isym = LRA.params->qsym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; II = T1A.params->rowidx[i]; IIsym = T1A.params->psym[i]; JJ = LRA.params->colidx[j]; JJsym = LRA.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LRA.params->rowidx[k]; Ksym = LRA.params->psym[k]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LRA.matrix[Ksym][K][I] * T1A.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==G_irr) && (IIsym==Asym)) G.matrix[h][row][col] += LRA.matrix[Ksym][K][JJ] * T1A.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ijka += - LR_oo(k,i) T(j,a) + LR_oo(k,j) T(i,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 30, 12, 30, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LRB.params->colidx[i]; Isym = LRB.params->qsym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; II = T1B.params->rowidx[i]; IIsym = T1B.params->psym[i]; JJ = LRB.params->colidx[j]; JJsym = LRB.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LRB.params->rowidx[k]; Ksym = LRB.params->psym[k]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LRB.matrix[Ksym][K][I] * T1B.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==G_irr) && (IIsym==Asym)) G.matrix[h][row][col] += LRB.matrix[Ksym][K][JJ] * T1B.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_IjKa += - LR_OO(K,I) T(j,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LRA.params->colidx[i]; Isym = LRA.params->qsym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LRA.params->rowidx[k]; Ksym = LRA.params->psym[k]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LRA.matrix[Ksym][K][I] * T1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_iJkA += - LR_oo(k,i) T(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LRB.params->colidx[i]; Isym = LRB.params->qsym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LRB.params->rowidx[k]; Ksym = LRB.params->psym[k]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; if( ((Ksym^Isym)==G_irr) && (Jsym==Asym)) G.matrix[h][row][col] -= LRB.matrix[Ksym][K][I] * T1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(&LRA); dpd_file2_mat_close(&LRB); dpd_file2_close(&LRA); dpd_file2_close(&LRB); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); return; } /* This function computes Gijka -= P(ij) Lke Tie Rja + Lmkef Tmief Rja or -= P(ij) LT_OO(k,i) * R(j,a) */ void x_Gijka_7_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; dpdfile2 R1A, R1B, LTA, LTB; dpdbuf4 G; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* open one-electron files for the nasty terms */ dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(<A, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_file2_init(<B, EOM_TMP, L_irr, 2, 2, "LT_oo"); dpd_file2_mat_init(&R1A); dpd_file2_mat_init(&R1B); dpd_file2_mat_init(<A); dpd_file2_mat_init(<B); dpd_file2_mat_rd(&R1A); dpd_file2_mat_rd(&R1B); dpd_file2_mat_rd(<A); dpd_file2_mat_rd(<B); /* rho_IJKA += - LT_OO(K,I) R(J,A) + LT_OO(K,J) R(I,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 20, 2, 20, 0, "GIJKA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTA.params->colidx[i]; Isym = LTA.params->qsym[i]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; II = R1A.params->rowidx[i]; IIsym = R1A.params->psym[i]; JJ = LTA.params->colidx[j]; JJsym = LTA.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTA.params->rowidx[k]; Ksym = LTA.params->psym[k]; A = R1A.params->colidx[a]; Asym = R1A.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTA.matrix[Ksym][K][I] * R1A.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==L_irr) && ((IIsym^Asym)==R_irr) ) G.matrix[h][row][col] += LTA.matrix[Ksym][K][JJ] * R1A.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_ijka += - LT_oo(k,i) R(j,a) + LT_oo(k,j) R(i,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 30, 12, 30, 0, "Gijka"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTB.params->colidx[i]; Isym = LTB.params->qsym[i]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; II = R1B.params->rowidx[i]; IIsym = R1B.params->psym[i]; JJ = LTB.params->colidx[j]; JJsym = LTB.params->qsym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTB.params->rowidx[k]; Ksym = LTB.params->psym[k]; A = R1B.params->colidx[a]; Asym = R1B.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTB.matrix[Ksym][K][I] * R1B.matrix[Jsym][J][A]; if( ((Ksym^JJsym)==L_irr) && ((IIsym^Asym)==R_irr) ) G.matrix[h][row][col] += LTB.matrix[Ksym][K][JJ] * R1B.matrix[IIsym][II][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_IjKa += - LT_OO(K,I) R(j,a) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTA.params->colidx[i]; Isym = LTA.params->qsym[i]; J = R1B.params->rowidx[j]; Jsym = R1B.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTA.params->rowidx[k]; Ksym = LTA.params->psym[k]; A = R1B.params->colidx[a]; Asym = R1B.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTA.matrix[Ksym][K][I] * R1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); /* rho_iJkA += - LT_oo(k,i) R(J,A) */ dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { i = G.params->roworb[h][row][0]; j = G.params->roworb[h][row][1]; I = LTB.params->colidx[i]; Isym = LTB.params->qsym[i]; J = R1A.params->rowidx[j]; Jsym = R1A.params->psym[j]; for(col=0; col < G.params->coltot[h^G_irr]; col++) { k = G.params->colorb[h^G_irr][col][0]; a = G.params->colorb[h^G_irr][col][1]; K = LTB.params->rowidx[k]; Ksym = LTB.params->psym[k]; A = R1A.params->colidx[a]; Asym = R1A.params->qsym[a]; if( ((Ksym^Isym)==L_irr) && ((Jsym^Asym)==R_irr) ) G.matrix[h][row][col] -= LTB.matrix[Ksym][K][I] * R1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_wrt(&G, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_file2_mat_close(<A); dpd_file2_mat_close(<B); dpd_file2_mat_close(&R1A); dpd_file2_mat_close(&R1B); dpd_file2_close(<A); dpd_file2_close(<B); dpd_file2_close(&R1A); dpd_file2_close(&R1B); return; } /* This function computes term 8 and term 9 of Gijka */ /* term 8, +P(ij) Lkmfe Rimae Tjf */ /* term 9, +P(ij) Lkmfe Timae Rjf */ void x_Gijka_8_uhf(void) { int h, nirreps, i, j, k, a, I, J, K, A, Isym, Jsym, Ksym, Asym, row, col; int II,JJ,IIsym,JJsym; int L_irr, R_irr, G_irr; double value; dpdfile2 L1A, T1A, L1B, T1B, R1A, R1B, I1A, I1B; dpdbuf4 G, V, T, L, Z, Z1, Z2, Tau; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* term 8, +P(ij) Lkmfe Rimae Tjf */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 0, 20, 0, 0, "Z(IA,KJ)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 20, "Z(IJ,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z(IJ,KA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 20, "Z(JI,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z(JI,KA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 10, 30, 10, 0, "Z(ia,kj)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_file2_init(&T1A, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 30, "Z(ij,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z(ij,ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 30, "Z(ji,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z(ji,ka)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* GIjKa += R2L2_OvOv(Ia,Kf) T(j,f) */ /* GIjKa -= R2L2_OvOv(ja,KF) T(I,F) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 22, 24, 22, 0, "Z(Ia,Kj)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_file2_init(&T1A, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 22, 24, "Z(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 24, 22, 24, 0, "Z(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 0, 30, 0, 0, "Z2(ja,KI)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 23, 24, "Z2(jI,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 24, 23, 24, 0, "Z2(jI,Ka)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 22, 24, "Z2(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 24, 22, 24, 0, "Z2(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GiJkA += R2L2_oVoV(iA,kF) T(J,F) */ /* GiJkA += R2L2_OVov(JA,kf) T(i,f) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 27, 23, 27, 23, 0, "Z(iA,kJ)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 23, 27, "Z(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 27, 23, 27, 0, "Z(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 10, 20, 10, 0, "Z2(JA,ki)"); dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_file2_init(&T1A, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&V, &T1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 22, 27, "Z2(Ji,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 27, 22, 27, 0, "Z2(Ji,kA)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 23, 27, "Z2(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 27, 23, 27, 0, "Z2(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); psio_close(EOM_TMP1, 0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 9, +P(ij) Lkmfe Timae Rjf */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 0, 20, 0, 0, "Z3(IA,KJ)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 0, 20, "Z3(IJ,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z3(IJ,KA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 0, 20, "Z3(JI,KA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 20, 0, 20, 0, "Z3(JI,KA)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 10, 30, 10, 0, "Z3(ia,kj)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 30, "Z3(ij,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z3(ij,ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 30, "Z3(ji,ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 30, 10, 30, 0, "Z3(ji,ka)"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&G); dpd_buf4_close(&Z); /* GIjKa += L2T2_OvOv(Ia,Kf) R(j,f) */ /* GIjKa -= L2T2_OvOv(ja,KF) R(I,F) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 22, 24, 22, 0, "Z3(Ia,Kj)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 22, 24, "Z3(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 24, 22, 24, 0, "Z3(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 0, 30, 0, 0, "Z4(ja,KI)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 23, 24, "Z4(jI,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 24, 23, 24, 0, "Z4(jI,Ka)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 22, 24, "Z4(Ij,Ka)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 24, 22, 24, 0, "Z4(Ij,Ka)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); /* GiJkA += L2T2_oVoV(iA,kF) R(J,F) */ /* GiJkA += L2T2_OVov(JA,kf) R(i,f) */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 27, 23, 27, 23, 0, "Z3(iA,kJ)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_file2_init(&R1A, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&V, &R1A, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1A); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 23, 27, "Z3(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 27, 23, 27, 0, "Z3(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 10, 20, 10, 0, "Z4(JA,ki)"); dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_file2_init(&R1B, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&V, &R1B, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1B); dpd_buf4_close(&V); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 22, 27, "Z4(Ji,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 22, 27, 22, 27, 0, "Z4(Ji,kA)"); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 23, 27, "Z4(iJ,kA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 23, 27, 23, 27, 0, "Z4(iJ,kA)"); dpd_buf4_init(&G, EOM_TMP0, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_axpy(&Z, &G, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&G); return; } }} // namespace psi::ccdensity �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_Gijkl.cc�������������������������������������������������������������������0000644�0001015�0000765�00000014566�10757640026�015446� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* Gijkl(): computes non-R0 parts of Gijkl 2pdm */ /* Dijkl = 0.5 Lklef * Rijef + P(ij) Lklef * Rie * tjf */ /* Dijkl = R2L2_OOOO + P(ij) Lklef * Rie * tjf */ void x_Gijkl(void) { dpdfile2 R1, T1; dpdbuf4 L2, I2, GIJKL, Gijkl, GIjKl; int L_irr, R_irr, G_irr; double value; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; if (params.ref == 0 || params.ref == 1) { /* Gijkl += R2L2_OOOO */ dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_axpy(&I2, &GIJKL, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "Gijkl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_axpy(&I2, &Gijkl, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_axpy(&I2, &GIjKl, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&GIjKl); } else { /* Gijkl += R2L2_OOOO */ dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_axpy(&I2, &GIJKL, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 12, 12, 12, 12, 0, "Gijkl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 12, 12, 12, 0, "R2L2_oooo"); dpd_buf4_axpy(&I2, &Gijkl, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_buf4_axpy(&I2, &GIjKl, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&GIjKl); } if (params.ref == 0 || params.ref == 1) { /* GIJKL += - (Lklfe rie) tjf */ dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 0, 2, 2, 2, 0, "GIJKL"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I2, &T1, &GIJKL, 3, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GIJKL, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 0, 2, 2, 2, 0, "Gijkl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 10, 2, 10, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I2, &T1, &Gijkl, 3, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &I2, &Gijkl, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&I2, &T1, &GIjKl, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GIjKl, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GIjKl); } else { /* GIJKL += - (Lklfe rie) tjf */ dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 0, 2, 2, 2, 0, "GIJKL"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 20, 2, 20, 0, "L2R1_OOVO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&I2, &T1, &GIJKL, 3, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GIJKL, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 10, 12, 12, 12, 0, "Gijkl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 30, 12, 30, 0, "L2R1_oovo(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I2, &T1, &Gijkl, 3, 1, 1, -1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &I2, &Gijkl, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 24, 22, 24, 0, "L2R1_OovO(pqsr)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&I2, &T1, &GIjKl, 3, 1, 1, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &I2, &GIjKl, 1, 2, 0, 1.0, 1.0); dpd_file2_close(&T1); dpd_buf4_close(&I2); dpd_buf4_close(&GIjKl); } /* Now bra-ket symmetrize Gijkl */ if (params.ref == 0 || params.ref == 1) { dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_symm(&GIJKL); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "Gijkl"); dpd_buf4_symm(&Gijkl); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_symm(&GIjKl); dpd_buf4_close(&GIjKl); } else { dpd_buf4_init(&GIJKL, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_symm(&GIJKL); dpd_buf4_close(&GIJKL); dpd_buf4_init(&Gijkl, CC_GAMMA, G_irr, 12, 12, 12, 12, 0, "Gijkl"); dpd_buf4_symm(&Gijkl); dpd_buf4_close(&Gijkl); dpd_buf4_init(&GIjKl, CC_GAMMA, G_irr, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_symm(&GIjKl); dpd_buf4_close(&GIjKl); } return; } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_oe_intermediates.cc��������������������������������������������������������0000644�0001015�0000765�00000061620�10754663017�017721� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build one-electron intermediates for construction of excited state density matrices - all contractions but L1*T2 are needed just to make the excited state onepdm */ /* LR1_OO = LIE * RJE */ /* LR1_oo = Lie * Rje */ /* LR1_VV = LMA * RMB */ /* LR1_vv = Lma * Rmb */ /* LT1_OO = LIE * TJE */ /* LT1_oo = Lie * Tje */ /* LT1_VV = LMA * TMB */ /* LT1_vv = Lma * Tmb */ /* L2R1_OV = RME * LIMAE + Rme + LImAe */ /* L2R1_ov = Rme * Limae + RME + LiMaE */ /* L1R2_OV = LME * RIMAE + Lme * RImAe */ /* L1R2_ov = Lme * Rimae + LME * RiMaE */ /* L1T2_OV = LME * TIMAE + Lme * TImAe */ /* L1T2_ov = Lme * Timae + LME * TiMaE */ /* LR2_OO = 0.5 * LIMEF * RJMEF + LImEf * RJmEf */ /* LR2_oo = 0.5 * Limef * Rjmef + LiMeF * RjMeF */ /* LR2_VV = 0.5 * LMNEA * RMNEB + LmNeA * RmNeB */ /* LR2_vv = 0.5 * Lmnea * Rmneb + LMnEa * RMnEb */ /* LT2_OO = 0.5 * LIMEF * TJMEF + LImEf * TJmEf */ /* LT2_oo = 0.5 * Limef * Tjmef + LiMeF * TjMeF */ /* LT2_VV = 0.5 * LMNEA * TMNEB + LmNeA * TmNeB */ /* LT2_vv = 0.5 * Lmnea * Tmneb + LMnEa * TMnEb */ /* LR_OO = LR1_OO + LR2_OO */ /* LR_oo = LR1_oo + LR2_oo */ /* LR_VV = LR1_VV + LR2_VV */ /* LR_vv = LR1_vv + LR2_vv */ /* LT_OO = LT1_OO + LT2_OO */ /* LT_oo = LT1_oo + LT2_oo */ /* and in CC_TAMPS tauIJAB = tIJAB + 1.0 * (TIA * TJB - TIB * TJA) tautIJAB = tIJAB + 0.5 * (TIA * TJB - TIB * TJA) */ void x_oe_intermediates(struct RHO_Params rho_params) { dpdfile2 L1, R1, T1, I, LR1, LR2, LT1, LT2; dpdbuf4 L2, T2, R2; int L_irr, R_irr, G_irr; int rohf = 0; L_irr = rho_params.L_irr; R_irr = rho_params.R_irr; G_irr = rho_params.G_irr; if ( (params.ref == 0) || (params.ref == 1) ) rohf = 1; /* LR1_OO(I,J) = LIE * RJE */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR1_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LR1_VV(A,B) = LMA * RMB */ dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR1_VV"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_vv(a,b) = Lma * Rmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_OO(I,J) = LIE * TJE */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT1_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_VV(A,B) = LMA * TMB */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_vv(a,b) = Lma * Tmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* L2R1_OV(I,A) = RME * LIMAE + Rme + LImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L2R1_OV(i,a) = Rme * Limae + RME + LiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L1R2_OV(I,A) = LME * RIMAE + Lme * RImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1R2_ov(i,a) = Lme * Rimae + LME * RiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1T2_OV = LME * TIMAE + Lme * TImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* L1T2_ov = Lme * Timae + LME * TiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 3, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* LR2_OO(I,J) = 0.5 * LIMEF * RJMEF + LImEf * RJmEf */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_oo(i,j) = 0.5 * Limef * Rjmef + LiMeF * RjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_VV(A,B) = 0.5 * LMNEA * RMNEB + LmNeA * RmNeB */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_vv(a,b) = 0.5 * Lmnea * Rmneb + LMnEa * RMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_OO(I,J) = 0.5 * LIMEF * TJMEF + LImEf * TJmEf */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_oo(i,j) = 0.5 * Limef * Tjmef + LiMeF * TjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_VV(A,B) = 0.5 * LMNEA * TMNEB + LmNeA * TmNeB */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_vv(a,b) = 0.5 * Lmnea * Tmneb + LMnEa * TMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR_OO = LR1_OO + LR2_OO */ /* LR_oo = LR1_oo + LR2_oo */ /* LR_VV = LR1_VV + LR2_VV */ /* LR_vv = LR1_vv + LR2_vv */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 0, 0, "LR1_OO"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 0, 0, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 2, 2, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 1, 1, "LR1_VV"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 1, 1, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 3, 3, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } /* LT_OO = LT1_OO + LT2_OO */ /* LT_oo = LT1_oo + LT2_oo */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_file2_init(<1, EOM_TMP, L_irr, 0, 0, "LT1_OO"); dpd_file2_init(<2, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_file2_init(<1, EOM_TMP, L_irr, 0, 0, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT_oo"); dpd_file2_init(<1, EOM_TMP, L_irr, 2, 2, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } /* LT_VV = LT1_VV + LT2_VV */ /* LT_vv = LT1_vv + LT2_vv */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_file2_init(<1, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(<2, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_file2_init(<1, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT_vv"); dpd_file2_init(<1, EOM_TMP, L_irr, 3, 3, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } return; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_oe_intermediates_rhf.cc����������������������������������������������������0000644�0001015�0000765�00000063006�10754663017�020560� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* this function builds only RHF one-electron intermediates if params.ref == 0 these are used for xi amplitude construction. These quantities will have to be overwritten by x_oe_intermediates() until the excited state density code gets spin-adapted for RHF functions as well. At that time, x_oe_intermediates() should be replaced by only this function. */ void x_oe_intermediates_rhf(struct RHO_Params rho_params) { dpdfile2 L1, R1, T1, I, LR1, LR2, LT1, LT2; dpdbuf4 L2, T2, R2; int L_irr, R_irr, G_irr; int rhf, rohf, uhf; rhf = rohf = uhf = 0; L_irr = rho_params.L_irr; R_irr = rho_params.R_irr; G_irr = rho_params.G_irr; if (params.ref == 0) rhf = 1; else if (params.ref == 1) rohf = 1; else if (params.ref == 2) uhf = 1; /* LR1_OO(I,J) = LIE * RJE */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR1_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LR1_VV(A,B) = LMA * RMB */ dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR1_VV"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LR1_vv(a,b) = Lma * Rmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&L1, &R1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_OO(I,J) = LIE * TJE */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT1_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_oo(i,j) = Lia * Rje */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT1_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* LT1_VV(A,B) = LMA * TMB */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); /* LT1_vv(a,b) = Lma * Tmb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT1_vv"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&L1, &T1, &I, 1, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_file2_close(&L1); dpd_file2_close(&I); } /* L2R1_OV(I,A) = RME * LIMAE + Rme + LImAe */ if (rhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L2R1_OV(i,a) = Rme * Limae + RME + LiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* L1R2_OV(I,A) = LME * RIMAE + Lme * RImAe */ if (rhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1R2_ov(i,a) = Lme * Rimae + LME * RiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &R2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&R2); dpd_file2_close(&I); } /* L1T2_OV = LME * TIMAE + Lme * TImAe */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_OV"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* L1T2_ov = Lme * Timae + LME * TiMaE */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 1, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 3, "L1T2_ov"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_dot24(&L1, &T2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&L1); dpd_buf4_close(&T2); dpd_file2_close(&I); } /* LR2_OO(I,J) = 0.5 * LIMEF * RJMEF + LImEf * RJmEf */ if (rhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_oo(i,j) = 0.5 * Limef * Rjmef + LiMeF * RjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_VV(A,B) = 0.5 * LMNEA * RMNEB + LmNeA * RmNeB */ if (rhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR2_vv(a,b) = 0.5 * Lmnea * Rmneb + LMnEa * RMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_contract442(&L2, &R2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_OO(I,J) = 0.5 * LIMEF * TJMEF + LImEf * TJmEf */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_oo(i,j) = 0.5 * Limef * Tjmef + LiMeF * TjMeF */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_VV(A,B) = 0.5 * LMNEA * TMNEB + LmNeA * TmNeB */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LT2_vv(a,b) = 0.5 * Lmnea * Tmneb + LMnEa * TMnEb */ if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&L2, &T2, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_close(&I); } /* LR_OO = LR1_OO + LR2_OO */ /* LR_oo = LR1_oo + LR2_oo */ /* LR_VV = LR1_VV + LR2_VV */ /* LR_vv = LR1_vv + LR2_vv */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 0, 0, "LR1_OO"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 0, 0, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 2, 2, "LR1_oo"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 1, 1, "LR1_VV"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 1, 1, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_file2_init(&LR1, EOM_TMP, G_irr, 3, 3, "LR1_vv"); dpd_file2_init(&LR2, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_file2_axpbycz(&LR1, &LR2, &I, 1.0, 1.0, 0.0); dpd_file2_close(&LR2); dpd_file2_close(&LR1); dpd_file2_close(&I); } /* LT_OO = LT1_OO + LT2_OO */ /* LT_oo = LT1_oo + LT2_oo */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT_OO"); dpd_file2_init(<1, EOM_TMP, L_irr, 0, 0, "LT1_OO"); dpd_file2_init(<2, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT_oo"); dpd_file2_init(<1, EOM_TMP, L_irr, 0, 0, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT_oo"); dpd_file2_init(<1, EOM_TMP, L_irr, 2, 2, "LT1_oo"); dpd_file2_init(<2, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } /* LT_VV = LT1_VV + LT2_VV */ /* LT_vv = LT1_vv + LT2_vv */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT_VV"); dpd_file2_init(<1, EOM_TMP, L_irr, 1, 1, "LT1_VV"); dpd_file2_init(<2, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); if (rohf) { dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT_vv"); dpd_file2_init(<1, EOM_TMP, L_irr, 1, 1, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } else if (uhf) { dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT_vv"); dpd_file2_init(<1, EOM_TMP, L_irr, 3, 3, "LT1_vv"); dpd_file2_init(<2, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_file2_axpbycz(<1, <2, &I, 1.0, 1.0, 0.0); dpd_file2_close(<2); dpd_file2_close(<1); dpd_file2_close(&I); } return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_onepdm.cc������������������������������������������������������������������0000644�0001015�0000765�00000021633�10757640026�015661� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_onepdm_rohf(struct RHO_Params rho_params); extern void x_onepdm_uhf(struct RHO_Params rho_params); void x_onepdm(struct RHO_Params rho_params) { if (params.ref == 0 || params.ref == 1) x_onepdm_rohf(rho_params); else x_onepdm_uhf(rho_params); return; } /* onepdm(): Computes the non-R0 parts of the unrelaxed EOM 1pdm * intermediates are defined in x_oe_intermediates.c * * D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] * * D[a][b] = +LR_vv[a][b] + t1[n][b] * L2R1_ov[n][a] * * D[a][i] = +L2R1_ov[i][a] * * D[i][a] = + L1R2_ov[i][a] * - t1[m][a] * LR_oo[m][i] * - t1[i][e] * LR_vv[e][a] * - r1[m][a] * LT2_oo[m][i] * - r1[i][e] * LT2_vv[e][a] * + L2R1_ov[M][E] * (t2[i][m][a][e] - t1[i][e] * t1[m][a]) * * RAK 2003 */ void x_onepdm_rohf(struct RHO_Params rho_params) { dpdfile2 DAI, Dai, DIA, Dia, DIJ, DAB, Dij, Dab, TIA, Tia; dpdfile2 LIA, Lia, RIA, Ria, I, XIJ, Xij; dpdbuf4 T2, L2, R2, I2; int L_irr, R_irr, G_irr; double dot_IA, dot_ia, dot_AI, dot_ai; double dot_IJ; L_irr = rho_params.L_irr; R_irr = rho_params.R_irr; G_irr = rho_params.G_irr; dpd_file2_init(&TIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&RIA, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&Ria, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&LIA, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_GL, L_irr, 0, 1, "Lia"); /* D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] */ dpd_file2_init(&DIJ, CC_OEI, G_irr, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_axpy(&I, &DIJ, -1.0, 1); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract222(&TIA, &I, &DIJ, 0, 0, -1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&DIJ); dpd_file2_init(&Dij, CC_OEI, G_irr, 0, 0, rho_params.Dij_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_file2_axpy(&I, &Dij, -1.0, 1); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract222(&Tia, &I, &Dij, 0, 0, -1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&Dij); /* D[a][b] = +LR_vv[a][b] + L2R1_ov[n][a] * t1[n][b] */ dpd_file2_init(&DAB, CC_OEI, G_irr, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_file2_axpy(&I, &DAB, 1.0, 0); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract222(&I, &TIA, &DAB, 1, 1, 1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&DAB); dpd_file2_init(&Dab, CC_OEI, G_irr, 1, 1, rho_params.Dab_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_file2_axpy(&I, &Dab, 1.0, 0); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_contract222(&I, &Tia, &Dab, 1, 1, 1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&Dab); /* D[a][i] = +L2R1_ov[i][a] */ if (!params.connect_xi) { dpd_file2_init(&DAI, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_axpy(&I, &DAI, 1.0, 0); dpd_file2_close(&I); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_OEI, G_irr, 0, 1, rho_params.Dai_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_axpy(&I, &Dai, 1.0, 0); dpd_file2_close(&I); dpd_file2_close(&Dai); } /* D[I][A] = (1-R0)*tIA + L1R2_OV[I][A] - LR_OO[M][I] * t1[M][A] - t1[I][E] * LR_vv[E][A] - LT2_OO[M][I] * r1[M][A] - r1[I][E] * LT2_vv[E][A] + L2R1_ov[M][E] * (t2[i][m][a][e] - t1[i][e] * t1[m][a]) */ /* (1-R0) * tIA */ dpd_file2_init(&DIA, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); if ( (G_irr == 0) /* && (!params.connect_xi)*/ ) { dpd_file2_init(&I, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_axpy(&I, &DIA, 1.0, 0); dpd_file2_close(&I); } dpd_file2_init(&Dia, CC_OEI, G_irr, 0, 1, rho_params.Dia_lbl); if ( (G_irr == 0) /* && (!params.connect_xi)*/ ) { dpd_file2_init(&I, CC_OEI, 0, 0, 1, "tia"); dpd_file2_axpy(&I, &Dia, 1.0, 0); dpd_file2_close(&I); } /* D[i][a] = L1R2_ov[i][a] */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_file2_axpy(&I, &DIA, 1.0, 0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_file2_axpy(&I, &Dia, 1.0, 0); dpd_file2_close(&I); /* - LR_OO[M][I] * t1[M][A] */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_contract222(&I, &TIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_contract222(&I, &Tia, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&I); /* - t1[I][E] * LR_vv[E][A] */ dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract222(&TIA, &I, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract222(&Tia, &I, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&I); /* - LT2_OO[M][I] * r1[M][A] */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_contract222(&I, &RIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_oo"); dpd_contract222(&I, &Ria, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&I); /* - r1[I][E] * LT2_vv[E][A] */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_contract222(&RIA, &I, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_vv"); dpd_contract222(&Ria, &I, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&I); /* term 6, + L2R1_ov[M][E] * t2[i][m][a][e] */ if (!params.connect_xi) { dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_dot24(&I, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_dot24(&I, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_dot24(&I, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_dot24(&I, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); } /* term 7, - (t1[i][e] * L2R1_ov[M][E]) * t1[m][a] */ if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&XIJ, EOM_TMP, G_irr, 0, 0, "XIJ"); dpd_contract222(&TIA, &I, &XIJ, 0, 0, 1.0, 0.0); dpd_file2_close(&I); dpd_file2_init(&XIJ, EOM_TMP, G_irr, 0, 0, "XIJ"); dpd_contract222(&XIJ, &TIA, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&XIJ); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&Xij, EOM_TMP, G_irr, 0, 0, "Xij"); dpd_contract222(&Tia, &I, &Xij, 0, 0, 1.0, 0.0); dpd_file2_close(&I); dpd_file2_init(&Xij, EOM_TMP, G_irr, 0, 0, "Xij"); dpd_contract222(&Xij, &Tia, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Xij); } dpd_file2_close(&DIA); dpd_file2_close(&Dia); dpd_file2_close(&TIA); dpd_file2_close(&Tia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); /* check overlaps */ /* dpd_file2_init(&DIA, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); dot_IA = dpd_file2_dot_self(&DIA); dpd_file2_close(&DIA); dpd_file2_init(&Dia, CC_OEI, G_irr, 0, 1, rho_params.Dia_lbl); dot_ia = dpd_file2_dot_self(&Dia); dpd_file2_close(&Dia); dpd_file2_init(&DAI, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dot_AI = dpd_file2_dot_self(&DAI); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_OEI, G_irr, 0, 1, rho_params.Dai_lbl); dot_ai = dpd_file2_dot_self(&Dai); dpd_file2_close(&Dai); dpd_file2_init(&DIJ, CC_OEI, G_irr, 0, 0, rho_params.DIJ_lbl); dot_IJ = dpd_file2_dot_self(&DIJ); dpd_file2_close(&DIJ); dpd_file2_init(&DIJ, CC_OEI, G_irr, 0, 0, rho_params.Dij_lbl); dot_IJ += dpd_file2_dot_self(&DIJ); dpd_file2_close(&DIJ); fprintf(outfile,"\tOverlaps of onepdm after excited-state parts added.\n"); fprintf(outfile,"\t<DIA|DIA> = %15.10lf <Dia|Dia> = %15.10lf\n", dot_IA, dot_ia); fprintf(outfile,"\t<DAI|DAI> = %15.10lf <Dai|Dai> = %15.10lf\n", dot_AI, dot_ai); fprintf(outfile,"\t<Dpq|Dqp> = %15.10lf\n", dot_IA+dot_ia+dot_AI+dot_ai); */ return; } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_onepdm_uhf.cc��������������������������������������������������������������0000644�0001015�0000765�00000020570�10757640026�016522� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* onepdm_uhf(): Computes the non-R0 parts of the unrelaxed EOM 1pdm * intermediates are defined in x_oe_intermediates.c * * D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] * * D[a][b] = +LR_vv[a][b] + t1[n][b] * L2R1_ov[n][a] * * D[a][i] = +L2R1_ov[i][a] * * D[i][a] = + L1R2_ov[i][a] * - t1[m][a] * LR_oo[m][i] * - t1[i][e] * LR_vv[e][a] * - r1[m][a] * LT2_oo[m][i] * - r1[i][e] * LT2_vv[e][a] * + L2R1_ov[M][E] * (t2[i][m][a][e] - t1[i][e] * t1[m][a]) * * RAK 2003 */ void x_onepdm_uhf(struct RHO_Params rho_params) { dpdfile2 DAI, Dai, DIA, Dia, DIJ, DAB, Dij, Dab, TIA, Tia; dpdfile2 LIA, Lia, RIA, Ria, I, XIJ, Xij; dpdbuf4 T2, L2, R2, I2; int L_irr, R_irr, G_irr; double dot_IA, dot_ia, dot_AI, dot_ai; L_irr = rho_params.L_irr; R_irr = rho_params.R_irr; G_irr = rho_params.G_irr; dpd_file2_init(&TIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&Tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&RIA, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&Ria, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&LIA, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_GL, L_irr, 2, 3, "Lia"); /* D[i][j] = -LR_oo[j][i] - t1[i][f] * L2R1_ov[j][f] */ dpd_file2_init(&DIJ, CC_OEI, G_irr, 0, 0, rho_params.DIJ_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_file2_axpy(&I, &DIJ, -1.0, 1); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract222(&TIA, &I, &DIJ, 0, 0, -1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&DIJ); dpd_file2_init(&Dij, CC_OEI, G_irr, 2, 2, rho_params.Dij_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_file2_axpy(&I, &Dij, -1.0, 1); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract222(&Tia, &I, &Dij, 0, 0, -1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&Dij); /* D[a][b] = +LR_vv[a][b] + L2R1_ov[n][a] * t1[n][b] */ dpd_file2_init(&DAB, CC_OEI, G_irr, 1, 1, rho_params.DAB_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_file2_axpy(&I, &DAB, 1.0, 0); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_contract222(&I, &TIA, &DAB, 1, 1, 1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&DAB); dpd_file2_init(&Dab, CC_OEI, G_irr, 3, 3, rho_params.Dab_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_file2_axpy(&I, &Dab, 1.0, 0); dpd_file2_close(&I); if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_contract222(&I, &Tia, &Dab, 1, 1, 1.0, 1.0); dpd_file2_close(&I); } dpd_file2_close(&Dab); /* D[a][i] = +L2R1_ov[i][a] */ if (!params.connect_xi) { dpd_file2_init(&DAI, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_axpy(&I, &DAI, 1.0, 0); dpd_file2_close(&I); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_OEI, G_irr, 2, 3, rho_params.Dai_lbl); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_axpy(&I, &Dai, 1.0, 0); dpd_file2_close(&I); dpd_file2_close(&Dai); } /* D[I][A] = (1-R0)*tIA + L1R2_OV[I][A] - LR_OO[M][I] * t1[M][A] - t1[I][E] * LR_vv[E][A] - LT2_OO[M][I] * r1[M][A] - r1[I][E] * LT2_vv[E][A] + L2R1_ov[M][E] * (t2[i][m][a][e] - t1[i][e] * t1[m][a]) */ /* (1-R0) * tIA */ dpd_file2_init(&DIA, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); if ( (G_irr == 0) /* && (!params.connect_xi)*/ ) { dpd_file2_init(&I, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_axpy(&I, &DIA, 1.0, 0); dpd_file2_close(&I); } dpd_file2_init(&Dia, CC_OEI, G_irr, 2, 3, rho_params.Dia_lbl); if ( (G_irr == 0) /* && (!params.connect_xi)*/ ) { dpd_file2_init(&I, CC_OEI, 0, 2, 3, "tia"); dpd_file2_axpy(&I, &Dia, 1.0, 0); dpd_file2_close(&I); } /* D[i][a] = L1R2_ov[i][a] */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_file2_axpy(&I, &DIA, 1.0, 0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_file2_axpy(&I, &Dia, 1.0, 0); dpd_file2_close(&I); /* - LR_OO[M][I] * t1[M][A] */ dpd_file2_init(&I, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_contract222(&I, &TIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_contract222(&I, &Tia, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&I); /* - t1[I][E] * LR_vv[E][A] */ dpd_file2_init(&I, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_contract222(&TIA, &I, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_contract222(&Tia, &I, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&I); /* - LT2_OO[M][I] * r1[M][A] */ dpd_file2_init(&I, EOM_TMP, L_irr, 0, 0, "LT2_OO"); dpd_contract222(&I, &RIA, &DIA, 1, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, L_irr, 2, 2, "LT2_oo"); dpd_contract222(&I, &Ria, &Dia, 1, 1, -1.0, 1.0); dpd_file2_close(&I); /* - r1[I][E] * LT2_vv[E][A] */ dpd_file2_init(&I, EOM_TMP, L_irr, 1, 1, "LT2_VV"); dpd_contract222(&RIA, &I, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, L_irr, 3, 3, "LT2_vv"); dpd_contract222(&Ria, &I, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&I); /* term 6, + L2R1_ov[M][E] * t2[i][m][a][e] */ if (!params.connect_xi) { dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_dot24(&I, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_dot24(&I, &T2, &DIA, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_dot24(&I, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_dot24(&I, &T2, &Dia, 0, 0, 1.0, 1.0); dpd_file2_close(&I); dpd_buf4_close(&T2); } /* term 7, - (t1[i][e] * L2R1_ov[M][E]) * t1[m][a] */ if (!params.connect_xi) { dpd_file2_init(&I, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&XIJ, EOM_TMP, G_irr, 0, 0, "XIJ"); dpd_contract222(&TIA, &I, &XIJ, 0, 0, 1.0, 0.0); dpd_file2_close(&I); dpd_file2_init(&XIJ, EOM_TMP, G_irr, 0, 0, "XIJ"); dpd_contract222(&XIJ, &TIA, &DIA, 0, 1, -1.0, 1.0); dpd_file2_close(&XIJ); dpd_file2_init(&I, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&Xij, EOM_TMP, G_irr, 2, 2, "Xij"); dpd_contract222(&Tia, &I, &Xij, 0, 0, 1.0, 0.0); dpd_file2_close(&I); dpd_file2_init(&Xij, EOM_TMP, G_irr, 2, 2, "Xij"); dpd_contract222(&Xij, &Tia, &Dia, 0, 1, -1.0, 1.0); dpd_file2_close(&Xij); } dpd_file2_close(&DIA); dpd_file2_close(&Dia); dpd_file2_close(&TIA); dpd_file2_close(&Tia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); /* compute overlaps */ dpd_file2_init(&DIA, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); dot_IA = dpd_file2_dot_self(&DIA); dpd_file2_close(&DIA); dpd_file2_init(&Dia, CC_OEI, G_irr, 2, 3, rho_params.Dia_lbl); dot_ia = dpd_file2_dot_self(&Dia); dpd_file2_close(&Dia); dpd_file2_init(&DAI, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dot_AI = dpd_file2_dot_self(&DAI); dpd_file2_close(&DAI); dpd_file2_init(&Dai, CC_OEI, G_irr, 2, 3, rho_params.Dai_lbl); dot_ai = dpd_file2_dot_self(&Dai); dpd_file2_close(&Dai); fprintf(outfile,"\tOverlaps of onepdm after excited-state parts added.\n"); fprintf(outfile,"\t<DIA|DIA> = %15.10lf <Dia|Dia> = %15.10lf\n", dot_IA, dot_ia); fprintf(outfile,"\t<DAI|DAI> = %15.10lf <Dai|Dai> = %15.10lf\n", dot_AI, dot_ai); fprintf(outfile,"\t<Dpq|Dqp> = %15.10lf\n", dot_IA+dot_ia+dot_AI+dot_ai); return; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_te_intermediates.cc��������������������������������������������������������0000644�0001015�0000765�00000062121�10757640026�017721� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* replace R2L2_oOoO and tau2l2_oOoO with sort later */ /* just removed cleaning - shouldn't need this */ extern void c_clean_CIJAB(dpdbuf4 *CMNEF); void x_te_intermediates(void) { dpdfile2 R1, L1; dpdbuf4 V, L, R, T2; int G_irr, L_irr, R_irr; G_irr = params.G_irr; L_irr = params.L_irr; R_irr = params.R_irr; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ /* R2L2_OOOO = 0.5 Rijef Lklef */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, 0, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, qpsr, 0, 0, "R2L2_oOoO"); dpd_buf4_close(&V); /* Tau2L2_OOOO = 0.5 Tau_ijef Lklef */ dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_oooo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_sort(&V, EOM_TMP, qpsr, 0, 0, "Tau2L2_oOoO"); dpd_buf4_close(&V); /* R2L2_OVOV = Rimae Ljmbe */ dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RjAIb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIbjA"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); /* L2R1_OOVO = Lijae Rke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L2R1_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L2R1_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 11, "L2R1_OoVo(qprs)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 10, "L2R1_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L2R1_OovO(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 11, "L2R1_OovO(qprs)"); dpd_buf4_close(&V); /* L1R2_OOVO = Rijae Lke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_OOVO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_oovo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OoVo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OovO"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L1R2_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L1R2_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L1R2_OoVo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L1R2_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 10, "L1R2_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L1R2_OovO(pqsr)"); dpd_buf4_close(&V); /* L2R1_VVOV = Limab Rmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_VVOV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "L2R1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_vvov"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "L2R1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "L2R1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvoV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "L2R1_VvoV(pqsr)"); dpd_buf4_close(&V); /* R2L1_VVOV = Rimab Lmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "R2L1_VVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "R2L1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "R2L1_vvov"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "R2L1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "R2L1_VvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "R2L1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "R2L1_VvoV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "R2L1_VvoV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_sort(&T2, CC_TAMPS, qprs, 0, 5, "taujIAb"); dpd_buf4_close(&T2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 12, 12, 12, 0, "R2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, qpsr, 23, 23, "R2L2_oOoO"); dpd_buf4_close(&V); /* Tau2L2_OOOO = 0.5 Tau_ijef Lklef */ dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 12, 12, 12, 12, 0, "Tau2L2_oooo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_sort(&V, EOM_TMP, qpsr, 23, 23, "Tau2L2_oOoO"); dpd_buf4_close(&V); /* R2L2_OVOV = Rimae Ljmbe */ dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 20, 20, 20, 20, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_init(&R, CC_GR, R_irr, 30, 30, 30, 30, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 20, 20, 20, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_init(&R, CC_GR, R_irr, 30, 20, 30, 20, 0, "RiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 30, 30, 30, 30, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_init(&L, CC_GL, L_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&R, CC_GR, R_irr, 27, 24, 27, 24, 0, "RjAIb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&R); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&R, CC_GR, R_irr, 24, 27, 24, 27, 0, "RIbjA"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&R); dpd_buf4_close(&L); dpd_buf4_close(&V); /* L2R1_OOVO = Lijae Rke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 29, 22, 29, 0, "LIjaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 20, "L2R1_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 12, 30, "L2R1_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 27, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 26, "L2R1_OoVo(qprs)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 27, 22, 27, 0, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 27, "L2R1_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 24, "L2R1_OovO(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 25, "L2R1_OovO(qprs)"); dpd_buf4_close(&V); /* L1R2_OOVO = Rijae Lke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L1R2_OOVO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L1R2_oovo"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L1R2_OoVo"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L1R2_OovO"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 29, 22, 29, 0, "RIjaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L1R2_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 20, "L1R2_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L1R2_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 12, 30, "L1R2_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L1R2_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 27, "L1R2_OoVo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 27, 22, 27, 0, "L1R2_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 27, "L1R2_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L1R2_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 24, "L1R2_OovO(pqsr)"); dpd_buf4_close(&V); /* L2R1_VVOV = Limab Rmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "L2R1_VVOV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 21, "L2R1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "L2R1_vvov"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 17, 31, "L2R1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "L2R1_VvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 25, "L2R1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 27, 28, 27, 0, "L2R1_VvoV"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 28, 23, 28, 0, "LiJAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 26, "L2R1_VvoV(pqsr)"); dpd_buf4_close(&V); /* R2L1_VVOV = Rimab Lmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "R2L1_VVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 21, "R2L1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "R2L1_vvov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 17, 31, "R2L1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "R2L1_VvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 25, "R2L1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 27, 28, 27, 0, "R2L1_VvoV"); dpd_buf4_init(&R, CC_GR, R_irr, 23, 28, 23, 28, 0, "RiJAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 26, "R2L1_VvoV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_sort(&T2, CC_TAMPS, qprs, 23, 28, "taujIAb"); dpd_buf4_close(&T2); } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_te_intermediates_rhf.cc����������������������������������������������������0000644�0001015�0000765�00000066566�10757640026�020601� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* this file is intended to replace x_te_intermediates.c when the density code gets spin-adapted */ void x_te_intermediates_rhf(void) { dpdfile2 R1, L1; dpdbuf4 V, L, R, T2; int G_irr, L_irr, R_irr; int rhf, rohf, uhf; rhf = rohf = uhf = 0; G_irr = params.G_irr; L_irr = params.L_irr; R_irr = params.R_irr; if (params.ref == 0) rhf = 1; else if (params.ref == 1) rohf = 1; else if (params.ref == 2) uhf = 1; /* R2L2_OOOO = 0.5 Rijef Lklef */ if (rhf) { dpd_buf4_init(&V, EOM_TMP, 0, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); } else if (rohf) { dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, 0, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, qpsr, 0, 0, "R2L2_oOoO"); dpd_buf4_close(&V); } if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ /* Tau2L2_OOOO = 0.5 Tau_ijef Lklef */ dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_oooo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 0, 0, 0, 0, 0, "Tau2L2_OoOo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_sort(&V, EOM_TMP, qpsr, 0, 0, "Tau2L2_oOoO"); dpd_buf4_close(&V); /* R2L2_OVOV = Rimae Ljmbe */ if (rhf) { dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "2LIjAb - LIjbA (IA,jb)"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIbjA"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 1, -1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIbjA"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); } else if (rohf) { dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RjAIb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 10, 10, 10, 0, "RIbjA"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); } /* L2R1_OOVO = Lijae Rke */ if (rhf) { dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); } else if (rohf) { dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L2R1_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L2R1_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 11, "L2R1_OoVo(qprs)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 10, "L2R1_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L2R1_OovO(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 11, "L2R1_OovO(qprs)"); dpd_buf4_close(&V); } /* L1R2_OOVO = Rijae Lke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_OOVO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_oovo"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OoVo"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OovO"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L1R2_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L1R2_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 10, "L1R2_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L1R2_OoVo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 10, 0, 10, 0, "L1R2_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 0, 10, "L1R2_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L1R2_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 0, 10, "L1R2_OovO(pqsr)"); dpd_buf4_close(&V); /* L2R1_VVOV = Limab Rmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_VVOV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "L2R1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_vvov"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "L2R1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "L2R1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvoV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "L2R1_VvoV(pqsr)"); dpd_buf4_close(&V); /* R2L1_VVOV = Rimab Lmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "R2L1_VVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "R2L1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "R2L1_vvov"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 11, "R2L1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "R2L1_VvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "R2L1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "R2L1_VvoV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 5, 11, "R2L1_VvoV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_sort(&T2, CC_TAMPS, qprs, 0, 5, "taujIAb"); dpd_buf4_close(&T2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 12, 12, 12, 0, "R2L2_oooo"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, qpsr, 23, 23, "R2L2_oOoO"); dpd_buf4_close(&V); /* Tau2L2_OOOO = 0.5 Tau_ijef Lklef */ dpd_buf4_init(&V, EOM_TMP, L_irr, 2, 2, 2, 2, 0, "Tau2L2_OOOO"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 12, 12, 12, 12, 0, "Tau2L2_oooo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 22, 22, 22, 22, 0, "Tau2L2_OoOo"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&T2, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T2); dpd_buf4_sort(&V, EOM_TMP, qpsr, 23, 23, "Tau2L2_oOoO"); dpd_buf4_close(&V); /* R2L2_OVOV = Rimae Ljmbe */ dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 20, 20, 20, 20, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_init(&R, CC_GR, R_irr, 30, 30, 30, 30, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_init(&R, CC_GR, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 20, 20, 20, 20, 0, "RIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_init(&R, CC_GR, R_irr, 30, 20, 30, 20, 0, "RiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_init(&R, CC_GR, R_irr, 30, 30, 30, 30, 0, "Riajb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&R, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_init(&L, CC_GL, L_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&R, CC_GR, R_irr, 27, 24, 27, 24, 0, "RjAIb"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&R); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&R, CC_GR, R_irr, 24, 27, 24, 27, 0, "RIbjA"); dpd_contract444(&R, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&R); dpd_buf4_close(&L); dpd_buf4_close(&V); /* L2R1_OOVO = Lijae Rke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_init(&L, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_init(&L, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 29, 22, 29, 0, "LIjaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 20, "L2R1_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 12, 30, "L2R1_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 27, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 26, "L2R1_OoVo(qprs)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 27, 22, 27, 0, "L2R1_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 27, "L2R1_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 24, "L2R1_OovO(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 25, "L2R1_OovO(qprs)"); dpd_buf4_close(&V); /* L1R2_OOVO = Rijae Lke */ dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L1R2_OOVO"); dpd_buf4_init(&R, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L1R2_oovo"); dpd_buf4_init(&R, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L1R2_OoVo"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L1R2_OovO"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 29, 22, 29, 0, "RIjaB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L1R2_OOVO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 2, 20, "L1R2_OOVO(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L1R2_oovo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 12, 30, "L1R2_oovo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L1R2_OoVo"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 27, "L1R2_OoVo(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 27, 22, 27, 0, "L1R2_OoVo(pqsr)"); dpd_buf4_sort(&V, EOM_TMP, qprs, 23, 27, "L1R2_OoVo(qpsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L1R2_OovO"); dpd_buf4_sort(&V, EOM_TMP, pqsr, 22, 24, "L1R2_OovO(pqsr)"); dpd_buf4_close(&V); /* L2R1_VVOV = Limab Rmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "L2R1_VVOV"); dpd_buf4_init(&L, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 21, "L2R1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "L2R1_vvov"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 17, 31, "L2R1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "L2R1_VvOv"); dpd_buf4_init(&L, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 25, "L2R1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 27, 28, 27, 0, "L2R1_VvoV"); dpd_buf4_init(&L, CC_GL, L_irr, 23, 28, 23, 28, 0, "LiJAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&L, &R1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 26, "L2R1_VvoV(pqsr)"); dpd_buf4_close(&V); /* R2L1_VVOV = Rimab Lmc */ dpd_buf4_init(&V, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "R2L1_VVOV"); dpd_buf4_init(&R, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 7, 21, "R2L1_VVOV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "R2L1_vvov"); dpd_buf4_init(&R, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 17, 31, "R2L1_vvov(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "R2L1_VvOv"); dpd_buf4_init(&R, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 25, "R2L1_VvOv(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, G_irr, 28, 27, 28, 27, 0, "R2L1_VvoV"); dpd_buf4_init(&R, CC_GR, R_irr, 23, 28, 23, 28, 0, "RiJAb"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract424(&R, &L1, &V, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&L1); dpd_buf4_close(&R); dpd_buf4_sort(&V, EOM_TMP, pqsr, 28, 26, "R2L1_VvoV(pqsr)"); dpd_buf4_close(&V); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_sort(&T2, CC_TAMPS, qprs, 23, 28, "taujIAb"); dpd_buf4_close(&T2); } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_V.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000014113�10757640026�014577� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* compute intermediates for excited state pdm that look like ground state intermediates, only use GL */ void V_build_x(void) { int L_irr; dpdbuf4 V, L, T; L_irr = params.L_irr; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "Viajb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIAjb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViaJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "ViAjB"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 10, 10, 10, 10, 0, "VIaJb"); dpd_buf4_init(&L, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_buf4_init(&T, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 20, 20, 20, 0, "VIAJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 30, 30, 30, 0, "Viajb"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 1, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 20, 30, 20, 30, 0, "VIAjb"); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&L, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 30, 20, 30, 20, 0, "ViaJB"); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 0.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_init(&T, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&L, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_contract444(&T, &L, &V, 0, 0, 1.0, 1.0); dpd_buf4_close(&L); dpd_buf4_close(&T); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 27, 27, 27, 27, 0, "ViAjB"); dpd_buf4_init(&L, CC_GL, L_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&T, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); dpd_buf4_init(&V, EOM_TMP, L_irr, 24, 24, 24, 24, 0, "VIaJb"); dpd_buf4_init(&L, CC_GL, L_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&T, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&T, &L, &V, 0, 1, 1.0, 0.0); dpd_buf4_close(&T); dpd_buf4_close(&L); dpd_buf4_close(&V); } } }} // namespace psi::ccdensity �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi1.cc���������������������������������������������������������������������0000644�0001015�0000765�00000055763�10757640026�015113� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_xi1_rohf(void); extern void x_xi_check(char *term_lbl); extern void x_xi1_connected(void); extern void x_xi1_uhf(void); extern void x_xi1_rhf(void); /* compute xi_1 amplitudes for zeta equations */ void x_xi1(void) { if (params.ref == 0) x_xi1_rhf(); else if (params.ref == 1) x_xi1_rohf(); else x_xi1_uhf(); } void x_xi1_rohf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; dpdbuf4 D, R2, L2, H2, I2; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; /* dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "WMNIE"); dpd_buf4_print(&H2,outfile,1); dpd_buf4_close(&H2); */ #ifdef DEBUG_XI x_xi_check("begin xi1"); #endif /* term 1, XIA += 0.25 LIA Rmnef <mn||ef> */ if ((R_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); params.RD_overlap = 0.5 * dpd_file2_trace(&I1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_oo"); params.RD_overlap += 0.5 * dpd_file2_trace(&I1); dpd_file2_close(&I1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_copy(&L1, EOM_XI, "XIA"); dpd_file2_close(&L1); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, params.RD_overlap); dpd_file2_close(&XIA); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_copy(&L1, EOM_XI, "Xia"); dpd_file2_close(&L1); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_scm(&Xia, params.RD_overlap); dpd_file2_close(&Xia); } #ifdef DEBUG_XI x_xi_check("term 1"); #endif /* term 2, Xia -= (Rmnef <in||ef>) * Lma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract222(&I1, &L1, &XIA, 1, 1, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_contract222(&I1, &L1, &Xia, 1, 1, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 2"); #endif /* term 3, XIA -= 0.5 LIE (Rmnfe <mn||fa>) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_contract222(&L1, &I1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_vv"); dpd_contract222(&L1, &I1, &Xia, 0, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_close(&L1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 3"); #endif /* term 4, XIA += (Lme Rmnef) <in||af> */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_dot24(&I1, &D, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_dot24(&I1, &D, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_ov"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_dot24(&I1, &D, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_dot24(&I1, &D, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 4"); #endif /* XIA += (Lmnef * Rmnef) FIA */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); params.overlap1 = dpd_file2_dot(&R1, &L1); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); params.overlap1 += dpd_file2_dot(&R1, &L1); dpd_file2_close(&R1); dpd_file2_close(&L1); params.overlap2 = 1.0e0 - params.overlap1 - (params.R0 * params.L0); /* When (connect_xi), we still include the following term, even though Hbar is not connected to R. The <Rmnef|Lmnef> Fia term here along with the <Rme|Lme> Fia term which is _not_ substracted out in xi_connected add up to (1)*Fia. This constant term causes cclambda to be solving the ground-state lambda equations implicitly as well. */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_axpy(&F1, &XIA, params.overlap2, 0); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_file2_axpy(&F1, &Xia, params.overlap2, 0); dpd_file2_close(&F1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 5"); #endif /* term 6, -0.5 (Linef Rmnef) Fma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&I1, &F1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&I1, &F1, &Xia, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 6"); #endif /* term 7, -0.5 (Lmnaf Rmnef) Fie */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&F1, &I1, &XIA, 0, 0, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&F1, &I1, &Xia, 0, 0, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 7"); #endif if (!params.connect_xi) { /* term 8, (Fme Rmnef) Linaf) */ dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(N,F)"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(n,f)"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "Rijab"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(N,F)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(n,f)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 8"); #endif } dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_dot24(&I1, &H2, &XIA, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_dot14(&I1, &H2, &XIA, 1, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_dot24(&I1, &H2, &Xia, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_dot14(&I1, &H2, &Xia, 1, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 9"); #endif /* term 11 XIA -= Rmnef Lmoea Winof */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); /* this would be easier if it would work but 13 and 31 shifts are incompatible when symmetry is on dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_contract442(&H2, &I2, &XIA, 0, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); */ /* if I could do a 442(0,3) I could avoid these sorts */ dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "W (NF,OI)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "W (nf,oi)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "WMnIe qrsp"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "WmNiE qrsp"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&H2, EOM_TMP1, prsq, 10, 0, "WmNiE prsq"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, prsq, 10, 0, "WMnIe prsq"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "W (NF,OI)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "WMnIe qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "WmNiE prsq"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "W (nf,oi)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_contract442(&H2, &I2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "WmNiE qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_contract442(&H2, &I2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "WMnIe prsq"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_contract442(&H2, &I2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 11"); #endif /* term 14, +0.25 * (Rmnef Loief) * Wmnoa */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "WMNIE"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_OOOO"); dpd_contract442(&I2, &H2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WmNiE"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_oOoO"); dpd_contract442(&I2, &H2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "Wmnie"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_oooo"); dpd_contract442(&I2, &H2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_contract442(&I2, &H2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 14"); #endif if (!params.connect_xi) { /* term 16 XIA += 0.5 Lioaf (Rmnef Wmnoe) */ dpd_file2_init(&Z1A, EOM_TMP1, R_irr, 0, 1, "Z(O,F)"); dpd_file2_init(&Z1B, EOM_TMP1, R_irr, 0, 1, "Z(o,f)"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&H2, &R2, &Z1A, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_contract442(&H2, &R2, &Z1A, 3, 3, -1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_contract442(&H2, &R2, &Z1B, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_contract442(&H2, &R2, &Z1B, 3, 3, -1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&Z1A, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_dot24(&Z1B, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_dot24(&Z1B, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_dot24(&Z1A, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 16"); #endif } /* term 10 XIA += 0.5 (Lmnef Rmneg) Wfiga */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "WAMEF"); dpd_dot13(&I1, &H2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_dot13(&I1, &H2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "Wamef"); dpd_dot13(&I1, &H2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_dot13(&I1, &H2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 10"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 12, + (Rmnef Lmieg) Wgnaf */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 11, 10, "Z (GN,IF)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "WAMEF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z (GN,IF)"); dpd_contract442(&I2, &H2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 11, 10, "Z (Gn,If)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z (Gn,If)"); dpd_contract442(&I2, &H2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_sort(&I2, EOM_TMP1, spqr, 11, 11, "Z (gN,fI)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 11, 11, 11, 0, "Z (gN,fI)"); dpd_contract442(&I2, &H2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 11, 10, "Z (gn,if)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "Wamef"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z (gn,if)"); dpd_contract442(&I2, &H2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 11, 10, "Z (gN,iF)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "Z (gN,iF)"); dpd_contract442(&I2, &H2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_sort(&I2, EOM_TMP1, spqr, 11, 11, "Z (Gn,Fi)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 11, 11, 11, 0, "Z (Gn,Fi)"); dpd_contract442(&I2, &H2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 12"); #endif /* term 13 -0.25 (Rmnfg Weifg) Lmnea */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&I2, EOM_TMP, R_irr, 2, 10, 2, 10, 0, "R2Wamef_OOOV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&I2, &L2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 0, 10, 0, 10, 0, "R2Wamef_OoOv"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&I2, &L2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 2, 10, 2, 10, 0, "R2Wamef_ooov"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&I2, &L2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 0, 10, 0, 10, 0, "R2Wamef_oOoV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&I2, &L2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 13"); #endif if (!params.connect_xi) { /* term 15 Linag (Rnmef Wgmef) */ dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 15"); #endif } if (params.connect_xi) x_xi1_connected(); return; } void x_xi_zero(void) { dpdfile2 XIA, Xia; dpdbuf4 XIJAB, Xijab, XIjAb; int G_irr; G_irr = params.G_irr; if (params.ref == 0) { dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, 0.0); dpd_file2_close(&XIA); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_scm(&XIjAb, 0.0); dpd_buf4_close(&XIjAb); } else if (params.ref == 1) { dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, 0.0); dpd_file2_close(&XIA); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_scm(&Xia, 0.0); dpd_file2_close(&Xia); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_scm(&XIJAB, 0.0); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_scm(&Xijab, 0.0); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_scm(&XIjAb, 0.0); dpd_buf4_close(&XIjAb); } else { dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, 0.0); dpd_file2_close(&XIA); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_scm(&Xia, 0.0); dpd_file2_close(&Xia); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_scm(&XIJAB, 0.0); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_scm(&Xijab, 0.0); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_scm(&XIjAb, 0.0); dpd_buf4_close(&XIjAb); } return; } }} // namespace psi::ccdensity �������������psi3/src/bin/ccdensity/x_xi1_connected.cc�����������������������������������������������������������0000644�0001015�0000765�00000045506�10757640026�017127� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* In the case (xi_connected == 0) only diagrams that involve intermediate states that are at least triply excited are included,e.g., xi1 += <0|L Hbar|T,Q><T,Q|R|S,D> However, if (xi_connected), then Hbar must be connected to R and to the density, but triply excited intermediate states are not required. Additional terms to xi_1 look like xi_1 += <0|L Hbar R|g> with Hbar connected to both R and g The new terms all have doubly excited intermediate states, xi1 += <0|L Hbar|D><D|R|S> (Hbar connected to R and S) We remove all terms from the xi_1 and xi_2 equations that do not have Hbar connected to R and to S,D. The exceptions are that we keep <ij||ab> in xi_2 and Fia in xi_1. See below. The new terms may be beautifully evaluted by: xi_1 += (E <0|L|D><D|R|S>) => E*<Limae|Rme> minus all the diagrams of <0|L Hbar R|S> where Hbar is not connected to S and R. We do _not_ substract <Lme|Rme> Fia, because this term adds to the normal xi_1 term <Lmnef|Rmnef> to make (1)Fia. This constant term (along with <ij||ab> in xi_2) causes cclambda to solve the ground-state lambda equations implicitly at the same time as zeta. We set R0=0, in the sense that the ground state density code now acts on only zeta, spat out by cclambda, not some linear combination (like R0 * L + Zeta). We remove all terms in the excited state density code that do not have R connected to the density (many of these terms involve L2R1_OV). This trick was provided compliments of Dr. John Stanton. RAK 4/04 */ /* double aug_xi_check(dpdfile2 *HIA, dpdfile2 *Hia); */ void x_xi1_connected(void) { dpdfile2 L1, XIA, Xia, HIA, Hia, I1, R1, F1, IME, Ime; int L_irr, R_irr, G_irr; dpdbuf4 D, R2, L2, H2, I2; double dot, tval; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; if (params.ref == 0) { /* RHF */ dpd_file2_init(&HIA, EOM_TMP0, G_irr, 0, 1, "HIA"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &HIA, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); tval = params.cceom_energy; /* fprintf(outfile,"\nenergy: %15.10lf\n",tval); */ dpd_file2_scm(&HIA, tval); /* -= (Fme Rme) Lia */ if (R_irr == 0) { dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dot = 2.0 * dpd_file2_dot(&F1, &R1); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_axpy(&L1, &HIA, -dot, 0); dpd_file2_close(&L1); } /* -= - (Rme Lmnea) Fin */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&F1, &I1, &HIA, 0, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmief Ffa */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&I1, &F1, &HIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmnef Wifan */ dpd_buf4_init(&H2, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "2 W(ME,jb) + W(Me,Jb) (Mj,Eb)"); dpd_buf4_close(&H2); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "2 W(ME,jb) + W(Me,Jb) (Mj,Eb)"); dpd_dot24(&I1, &H2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); /* -= Limae ( Rmf Fef - Rne Fnm + Rnf Wnefm ) */ dpd_file2_init(&IME, EOM_TMP_XI, R_irr, 0, 1, "IME"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&R1, &F1, &IME, 0, 0, 1.0, 0.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&F1, &R1, &IME, 1, 1, -1.0, 1.0); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "2 W(ME,jb) + W(Me,Jb) (Mj,Eb)"); dpd_dot13(&R1, &H2, &IME, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); /* HIA -= LIAME IME + LIAme Ime */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_dot24(&IME, &L2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&IME); /* add to Xi1 */ /* aug_xi_check(&HIA, &Hia); */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_axpy(&HIA, &XIA, 1.0, 0); dpd_file2_close(&XIA); dpd_file2_close(&HIA); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&HIA, EOM_TMP0, G_irr, 0, 1, "HIA"); dpd_file2_init(&Hia, EOM_TMP0, G_irr, 0, 1, "Hia"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &HIA, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &HIA, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &L2, &Hia, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &Hia, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); tval = params.cceom_energy; fprintf(outfile,"\nenergy: %15.10lf\n",tval); dpd_file2_scm(&HIA, tval); dpd_file2_scm(&Hia, tval); /* -= (Fme Rme) Lia */ if (R_irr == 0) { dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dot = dpd_file2_dot(&F1, &R1); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dot += dpd_file2_dot(&F1, &R1); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_axpy(&L1, &HIA, -dot, 0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_axpy(&L1, &Hia, -dot, 0); dpd_file2_close(&L1); } /* -= - (Rme Lmnea) Fin */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&F1, &I1, &HIA, 0, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "Fmi"); dpd_contract222(&F1, &I1, &Hia, 0, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmief Ffa */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&I1, &F1, &HIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "Fae"); dpd_contract222(&I1, &F1, &Hia, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmnef Wifan */ dpd_buf4_init(&H2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "WMBEJ (MJ,EB)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "Wmbej (mj,eb)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "WMbEj (Mj,Eb)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "WmBeJ (mJ,eB)"); dpd_buf4_close(&H2); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMBEJ (MJ,EB)"); dpd_dot24(&I1, &H2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WmBeJ (mJ,eB)"); dpd_dot24(&I1, &H2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "Wmbej (mj,eb)"); dpd_dot24(&I1, &H2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMbEj (Mj,Eb)"); dpd_dot24(&I1, &H2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); /* -= Limae ( Rmf Fef - Rne Fnm + Rnf Wnefm ) */ dpd_file2_init(&IME, EOM_TMP_XI, R_irr, 0, 1, "IME"); dpd_file2_init(&Ime, EOM_TMP_XI, R_irr, 0, 1, "Ime"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&R1, &F1, &IME, 0, 0, 1.0, 0.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "Fae"); dpd_contract222(&R1, &F1, &Ime, 0, 0, 1.0, 0.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&F1, &R1, &IME, 1, 1, -1.0, 1.0); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract222(&F1, &R1, &Ime, 1, 1, -1.0, 1.0); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMBEJ (MJ,EB)"); dpd_dot13(&R1, &H2, &IME, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMbEj (Mj,Eb)"); dpd_dot13(&R1, &H2, &Ime, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "Wmbej (mj,eb)"); dpd_dot13(&R1, &H2, &Ime, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WmBeJ (mJ,eB)"); dpd_dot13(&R1, &H2, &IME, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); /* HIA -= LIAME IME + LIAme Ime */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&IME, &L2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_dot24(&Ime, &L2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_dot24(&Ime, &L2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_dot24(&IME, &L2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&IME); dpd_file2_close(&Ime); /* add to Xi1 */ /* aug_xi_check(&HIA, &Hia); */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); dpd_file2_axpy(&HIA, &XIA, 1.0, 0); dpd_file2_axpy(&Hia, &Xia, 1.0, 0); dpd_file2_close(&XIA); dpd_file2_close(&Xia); dpd_file2_close(&HIA); dpd_file2_close(&Hia); } else { /* UHF */ dpd_file2_init(&HIA, EOM_TMP0, G_irr, 0, 1, "HIA"); dpd_file2_init(&Hia, EOM_TMP0, G_irr, 2, 3, "Hia"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &HIA, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &HIA, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &L2, &Hia, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &L2, &Hia, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&L2); tval = params.cceom_energy; fprintf(outfile,"\nenergy: %15.10lf\n",tval); dpd_file2_scm(&HIA, tval); dpd_file2_scm(&Hia, tval); /* -= (Fme Rme) Lia */ if (R_irr == 0) { dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dot = dpd_file2_dot(&F1, &R1); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dot += dpd_file2_dot(&F1, &R1); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_axpy(&L1, &HIA, -dot, 0); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_axpy(&L1, &Hia, -dot, 0); dpd_file2_close(&L1); } /* -= - (Rme Lmnea) Fin */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&F1, &I1, &HIA, 0, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&F1, CC_OEI, 0, 2, 2, "Fmi"); dpd_contract222(&F1, &I1, &Hia, 0, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmief Ffa */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&I1, &F1, &HIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&F1, CC_OEI, 0, 3, 3, "Fae"); dpd_contract222(&I1, &F1, &Hia, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); /* -= Rme Lmnef Wifan */ dpd_buf4_init(&H2, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 0, 5, "WMBEJ (MJ,EB)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 10, 15, "Wmbej (mj,eb)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 22, 28, "WMbEj (Mj,Eb)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_buf4_sort(&H2, EOM_TMP_XI, prqs, 23, 29, "WmBeJ (mJ,eB)"); dpd_buf4_close(&H2); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMBEJ (MJ,EB)"); dpd_dot24(&I1, &H2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 23, 29, 23, 29, 0, "WmBeJ (mJ,eB)"); dpd_dot24(&I1, &H2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 10, 15, 10, 15, 0, "Wmbej (mj,eb)"); dpd_dot24(&I1, &H2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 22, 28, 22, 28, 0, "WMbEj (Mj,Eb)"); dpd_dot24(&I1, &H2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); /* -= Limae ( Rmf Fef - Rne Fnm + Rnf Wnefm ) */ dpd_file2_init(&IME, EOM_TMP_XI, R_irr, 0, 1, "IME"); dpd_file2_init(&Ime, EOM_TMP_XI, R_irr, 2, 3, "Ime"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&R1, &F1, &IME, 0, 0, 1.0, 0.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 3, 3, "Fae"); dpd_contract222(&R1, &F1, &Ime, 0, 0, 1.0, 0.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&F1, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract222(&F1, &R1, &IME, 1, 1, -1.0, 1.0); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract222(&F1, &R1, &Ime, 1, 1, -1.0, 1.0); dpd_file2_close(&R1); dpd_file2_close(&F1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 0, 5, 0, 5, 0, "WMBEJ (MJ,EB)"); dpd_dot13(&R1, &H2, &IME, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 22, 28, 22, 28, 0, "WMbEj (Mj,Eb)"); dpd_dot13(&R1, &H2, &Ime, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 10, 15, 10, 15, 0, "Wmbej (mj,eb)"); dpd_dot13(&R1, &H2, &Ime, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP_XI, 0, 23, 29, 23, 29, 0, "WmBeJ (mJ,eB)"); dpd_dot13(&R1, &H2, &IME, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); /* HIA -= LIAME IME + LIAme Ime */ dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&IME, &L2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_dot24(&Ime, &L2, &HIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_dot24(&Ime, &L2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_dot24(&IME, &L2, &Hia, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&IME); dpd_file2_close(&Ime); /* aug_xi_check(&HIA, &Hia); */ /* add to Xi1 */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_axpy(&HIA, &XIA, 1.0, 0); dpd_file2_axpy(&Hia, &Xia, 1.0, 0); dpd_file2_close(&XIA); dpd_file2_close(&Xia); dpd_file2_close(&HIA); dpd_file2_close(&Hia); } } /* double aug_xi_check(dpdfile2 *HIA, dpdfile2 *Hia) { double tvalA, tvalB; tvalA = tvalB = 0.0; if (params.ref == 0) { tvalA = dpd_file2_dot_self(HIA); fprintf(outfile, "<HIA|HIA> = %15.10lf\n", tvalA); } else { tvalB = dpd_file2_dot_self(Hia); fprintf(outfile, "<HIA|HIA> = %15.10lf\n", tvalA); } fprintf(outfile, "<H1|H1> = %15.10lf\n", tvalA + tvalB); return; } */ }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi1_rhf.cc�����������������������������������������������������������������0000644�0001015�0000765�00000023166�10757640026�015742� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { extern void x_xi_check(char *term_lbl); extern void x_xi1_connected(void); /* compute xi_1 amplitudes for zeta equations */ void x_xi1_rhf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; dpdbuf4 D, R2, L2, H2, I2, Z2; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; #ifdef DEBUG_XI x_xi_check("begin xi1"); #endif /* term 1, XIA += 0.25 LIA Rmnef <mn||ef> */ if ((R_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); params.RD_overlap = dpd_file2_trace(&I1); dpd_file2_close(&I1); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_copy(&L1, EOM_XI, "XIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&L1, params.RD_overlap); dpd_file2_close(&L1); } #ifdef DEBUG_XI x_xi_check("term 1"); #endif /* term 2, Xia -= (Rmnef <in||ef>) * Lma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract222(&I1, &L1, &XIA, 1, 1, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 2"); #endif /* term 3, XIA -= 0.5 LIE (Rmnfe <mn||fa>) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_contract222(&L1, &I1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_close(&L1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 3"); #endif /* term 4, XIA += (Lme Rmnef) <in||af> */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot24(&I1, &D, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 4"); #endif /* term 5, XIA += (Lmnef * Rmnef) FIA */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); params.overlap1 = 2.0 * dpd_file2_dot(&R1, &L1); dpd_file2_close(&R1); dpd_file2_close(&L1); params.overlap2 = 1.0e0 - params.overlap1 - (params.R0 * params.L0); /* When (connect_xi), we still include the following term, even though Hbar is not connected to R. The <Rmnef|Lmnef> Fia term here along with the <Rme|Lme> Fia term which is _not_ substracted out in xi_connected add up to (1)*Fia. This constant term causes cclambda to be solving the ground-state lambda equations implicitly when it solves for zeta. */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_axpy(&F1, &XIA, params.overlap2, 0); dpd_file2_close(&F1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 5"); #endif /* term 6, XIA -= (0.5 Linef Rmnef) Fma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&I1, &F1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 6"); #endif /* term 7, XIA -= (0.5 Lmnaf Rmnef) Fie */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&F1, &I1, &XIA, 0, 0, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 7"); #endif if (!params.connect_xi) { /* term 8, XIA += (Fme Rmnef) Linaf) */ dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(N,F)"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&XIA); dpd_file2_close(&I1); #ifdef DEBUG_XI x_xi_check("term 8"); #endif } /* term 9, XIA -= (0.5 Lmnef Rmoef) Woina */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_dot14(&I1, &H2, &XIA, 1, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 9"); #endif /* term 10 XIA += (0.5 Lmnef Rmneg) Wfiga */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); dpd_dot13(&I1, &H2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 10"); #endif /* term 11 XIA -= Rmnef Lmoea Winof */ dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "WMnIe - 2WnMIe qrsp"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 10, 0, "2WMnIe - WnMIe qrsp"); dpd_buf4_close(&H2); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "2WMnIe - WnMIe qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 10, 0, 10, 0, 0, "WMnIe - 2WnMIe qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 11"); #endif /* term 12, + (Rmnef Lmieg) Wgnaf */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_copy(&I2, EOM_TMP1, "R2L2 2OVov + OvOv"); dpd_buf4_close(&I2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "R2L2 2OVov + OvOv"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_axpy(&I2, &Z2, 2.0); dpd_buf4_close(&I2); dpd_buf4_sort(&Z2, EOM_TMP1, sprq, 11, 10, "2OVov + OvOv (Gn,If)"); dpd_buf4_close(&Z2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_copy(&I2, EOM_TMP1, "R2L2 OVov + 2OvOv"); dpd_buf4_close(&I2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "R2L2 OVov + 2OvOv"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_axpy(&I2, &Z2, 2.0); dpd_buf4_close(&I2); dpd_buf4_sort(&Z2, EOM_TMP1, spqr, 11, 11, "OVov + 2OvOv (Gn,fI)"); dpd_buf4_close(&Z2); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 10, 11, 10, 0, "2OVov + OvOv (Gn,If)"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract442(&I2, &H2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 11, 11, 11, 11, 0, "OVov + 2OvOv (Gn,fI)"); dpd_contract442(&I2, &H2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 12"); #endif /* term 13 -0.25 (Rmnfg Weifg) Lmnea */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&I2, EOM_TMP, R_irr, 0, 10, 0, 10, 0, "R2Wamef_OoOv"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_contract442(&I2, &L2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 13"); #endif /* term 14, +0.25 * (Rmnef Loief) * Wmnoa */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "2WMnIe - WnMIe"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_contract442(&I2, &H2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 14"); #endif /* term 15 Linag (Rnmef Wgmef) */ if (!params.connect_xi) { dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_close(&XIA); #ifdef DEBUG_XI x_xi_check("term 15"); #endif } /* term 16 XIA += 0.5 Lioaf (Rmnef Wmnoe) */ if (!params.connect_xi) { dpd_file2_init(&Z1A, EOM_TMP1, R_irr, 0, 1, "Z(O,F)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_contract442(&H2, &R2, &Z1A, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA"); dpd_dot24(&Z1A, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&XIA); dpd_file2_close(&Z1A); #ifdef DEBUG_XI x_xi_check("term 16"); #endif } if (params.connect_xi) x_xi1_connected(); return; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi1_uhf.cc�����������������������������������������������������������������0000644�0001015�0000765�00000053475�10757640026�015753� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { extern void x_xi_check(char *term_lbl); extern void x_xi1_connected(void); void x_xi1_uhf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; dpdbuf4 D, R2, L2, H2, I2; double tval; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; #ifdef DEBUG_XI x_xi_check("begin xi1"); #endif /* term 1, XIA += 0.25 LIA Rmnef <mn||ef> */ if ((R_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); params.RD_overlap = 0.5 * dpd_file2_trace(&I1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 2, 2, "RD_oo"); params.RD_overlap += 0.5 * dpd_file2_trace(&I1); dpd_file2_close(&I1); /*fprintf(outfile,"RD overlap %15.10lf\n", params.RD_overlap);*/ dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_copy(&L1, EOM_XI, "XIA"); dpd_file2_close(&L1); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, params.RD_overlap); dpd_file2_close(&XIA); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_copy(&L1, EOM_XI, "Xia"); dpd_file2_close(&L1); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_scm(&Xia, params.RD_overlap); dpd_file2_close(&Xia); } /* unnecessary else { dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_scm(&XIA, 0.0); dpd_file2_close(&XIA); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_scm(&Xia, 0.0); dpd_file2_close(&Xia); } */ #ifdef DEBUG_XI x_xi_check("term 1"); #endif /* term 2, Xia -= (Rmnef <in||ef>) * Lma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_contract222(&I1, &L1, &XIA, 1, 1, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 2, 2, "RD_oo"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_contract222(&I1, &L1, &Xia, 1, 1, -1.0, 1.0); dpd_file2_close(&L1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 2"); #endif /* term 3, XIA -= 0.5 LIE (Rmnfe <mn||fa>) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_contract222(&L1, &I1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 3, 3, "RD_vv"); dpd_contract222(&L1, &I1, &Xia, 0, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_close(&L1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 3"); #endif /* term 4, XIA += (Lme Rmnef) <in||af> */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); /* = OV(N,f) <IN||AF> + ov(nf) <In||Af> */ dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_dot24(&I1, &D, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_dot24(&I1, &D, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); /* = ov(n,f) <in||af> + OV(NF) <iN||aF> */ dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L1R2_ov"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_dot24(&I1, &D, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L1R2_OV"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_dot24(&I1, &D, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 4"); #endif /* XIA += (Lmnef * Rmnef) FIA */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&L1, CC_GL, L_irr, 0, 1, "LIA"); params.overlap1 = dpd_file2_dot(&R1, &L1); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&L1, CC_GL, L_irr, 2, 3, "Lia"); params.overlap1 += tval = dpd_file2_dot(&R1, &L1); dpd_file2_close(&R1); dpd_file2_close(&L1); params.overlap2 = 1.0e0 - params.overlap1; /* explanation in xi1_connected and ROHF code */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_file2_axpy(&F1, &XIA, params.overlap2, 0); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_axpy(&F1, &Xia, params.overlap2, 0); dpd_file2_close(&F1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 5"); #endif /* term 6, -0.5 (Linef Rmnef) Fma */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&I1, &F1, &XIA, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&I1, &F1, &Xia, 0, 1, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 6"); #endif /* term 7, -0.5 (Lmnaf Rmnef) Fie */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&F1, &I1, &XIA, 0, 0, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&F1, &I1, &Xia, 0, 0, -1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 7"); #endif if (!params.connect_xi) { /* term 8, (Fme Rmnef) Linaf) */ dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(N,F)"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 2, 3, "Z(n,f)"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 15, 12, 17, 0, "Rijab"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_dot13(&F1, &R2, &I1, 0, 0, 1.0, 1.0); dpd_buf4_close(&R2); dpd_file2_close(&F1); dpd_file2_close(&I1); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 1, "Z(N,F)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 2, 3, "Z(n,f)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 8"); #endif } dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_dot24(&I1, &H2, &XIA, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_dot14(&I1, &H2, &XIA, 1, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR2_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_dot24(&I1, &H2, &Xia, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR2_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_dot14(&I1, &H2, &Xia, 1, 0, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 9"); #endif /* term 11 XIA -= Rmnef Lmoea Winof */ dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); /* this would be easier if it would work but 13 and 31 shifts are incompatible when symmetry is on dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_contract442(&H2, &I2, &XIA, 0, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); */ /* if I could do a 442(0,3) I could avoid these sorts */ dpd_buf4_init(&H2, CC_HBAR, 0, 0, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 20, 0, "W (NF,OI)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 30, 10, "W (nf,oi)"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 30, 0, "WMnIe qrsp"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&H2, EOM_TMP1, qrsp, 20, 10, "WmNiE qrsp"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&H2, EOM_TMP1, prsq, 27, 23, "WmNiE prsq"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&H2, EOM_TMP1, prsq, 24, 22, "WMnIe prsq"); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 20, 0, 20, 0, 0, "W (NF,OI)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 30, 0, 30, 0, 0, "WMnIe qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 27, 23, 27, 23, 0, "WmNiE prsq"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_contract442(&H2, &I2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 30, 10, 30, 10, 0, "W (nf,oi)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_contract442(&H2, &I2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 20, 10, 20, 10, 0, "WmNiE qrsp"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_contract442(&H2, &I2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, EOM_TMP1, 0, 24, 22, 24, 22, 0, "WMnIe prsq"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_contract442(&H2, &I2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 11"); #endif /* term 14, +0.25 * (Rmnef Loief) * Wmnoa */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 20, 2, 20, 0, "WMNIE"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 0, 2, 2, 0, "R2L2_OOOO"); dpd_contract442(&I2, &H2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 27, 23, 27, 0, "WmNiE"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 23, 23, 23, 23, 0, "R2L2_oOoO"); dpd_contract442(&I2, &H2, &XIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 12, 30, 12, 30, 0, "Wmnie"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 10, 12, 12, 0, "R2L2_oooo"); dpd_contract442(&I2, &H2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 24, 22, 24, 0, "WMnIe"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_contract442(&I2, &H2, &Xia, 3, 3, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 14"); #endif if (!params.connect_xi) { /* term 16 XIA += 0.5 Lioaf (Rmnef Wmnoe) */ dpd_file2_init(&Z1A, EOM_TMP1, R_irr, 0, 1, "Z(O,F)"); dpd_file2_init(&Z1B, EOM_TMP1, R_irr, 2, 3, "Z(o,f)"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_contract442(&H2, &R2, &Z1A, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 29, 22, 29, 0, "RIjaB"); dpd_contract442(&H2, &R2, &Z1A, 3, 3, -1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 12, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_contract442(&H2, &R2, &Z1B, 3, 3, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 28, 23, 28, 0, "RiJAb"); dpd_contract442(&H2, &R2, &Z1B, 3, 3, -1.0, 1.0); dpd_buf4_close(&R2); dpd_buf4_close(&H2); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&Z1A, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_dot24(&Z1B, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_dot24(&Z1B, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_dot24(&Z1A, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&Z1A); dpd_file2_close(&Z1B); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 16"); #endif } /* term 10 XIA += 0.5 (Lmnef Rmneg) = VV(f,g) Wfiga */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 5, 21, 7, 0, "WAMEF"); dpd_dot13(&I1, &H2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_dot13(&I1, &H2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR2_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 15, 31, 17, 0, "Wamef"); dpd_dot13(&I1, &H2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR2_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_dot13(&I1, &H2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 10"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 12, + (Rmnef Lmieg) Wgnaf = OVOV(nf,ig) W(gn,af) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); /* + OVOV(NF,IG) WGNAF = OVOV(GN,IF) WGNAF(GN,AF) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 21, 20, "Z (GN,IF)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 5, 21, 7, 0, "WAMEF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 21, 20, 21, 20, 0, "Z (GN,IF)"); dpd_contract442(&I2, &H2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); /* + OVOV(nf,IG) WGnAf = +OVOV(Gn,If) WGnIf(Gn,Af) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 26, 24, "Z (Gn,If)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 26, 24, 26, 24, 0, "Z (Gn,If)"); dpd_contract442(&I2, &H2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); /* + OVOV(Nf,Ig) WgNIf = - OVOV(Nf,Ig) WgNfI = -OVOV(gN,If) WaMeF(gN,Af) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_sort(&I2, EOM_TMP1, spqr, 25, 25, "Z (gN,fI)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 25, 25, 25, 25, 0, "Z (gN,fI)"); dpd_contract442(&I2, &H2, &XIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); /* + OVOV(nf,ig) Wgnif = +OVOV(gn,if) W(gn,af) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 31, 30, "Z (gn,if)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 15, 31, 17, 0, "Wamef"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 31, 30, 31, 30, 0, "Z (gn,if)"); dpd_contract442(&I2, &H2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); /* + OVOV(NF,ig) WgNaF = +OVOV(gN,iF) W(gN,aF) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_sort(&I2, EOM_TMP1, sprq, 25, 27, "Z (gN,iF)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 25, 27, 25, 27, 0, "Z (gN,iF)"); dpd_contract442(&I2, &H2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); /* + OVOV(nF,iG) WGnaF (-WGnFi) = -OVOV(Gn,Fi) WAmEf(Gn,Fi) */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_sort(&I2, EOM_TMP1, spqr, 26, 26, "Z (Gn,Fi)"); dpd_buf4_close(&I2); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 26, 26, 26, 26, 0, "Z (Gn,Fi)"); dpd_contract442(&I2, &H2, &Xia, 3, 3, -1.0, 1.0); dpd_buf4_close(&I2); dpd_buf4_close(&H2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 12"); #endif /* term 13 -0.25 (Rmnfg Weifg) Lmnea = +OOOV(MN,IE) L(MN,EA) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_buf4_init(&I2, EOM_TMP, R_irr, 2, 20, 2, 20, 0, "R2Wamef_OOOV"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&I2, &L2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 22, 24, 22, 24, 0, "R2Wamef_OoOv"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&I2, &L2, &XIA, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 12, 30, 12, 30, 0, "R2Wamef_ooov"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&I2, &L2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, R_irr, 23, 27, 23, 27, 0, "R2Wamef_oOoV"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&I2, &L2, &Xia, 2, 2, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&I2); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 13"); #endif if (!params.connect_xi) { /* term 15 Linag (Rnmef Wgmef) */ dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 2, 3, "R2Wamef_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_dot24(&I1, &L2, &XIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 2, 3, "R2Wamef_ov"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&L2, CC_GL, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_dot24(&I1, &L2, &Xia, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_file2_close(&XIA); dpd_file2_close(&Xia); #ifdef DEBUG_XI x_xi_check("term 15"); #endif } if (params.connect_xi) x_xi1_connected(); #ifdef DEBUG_XI x_xi_check("extra doubles terms"); #endif return; } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000140332�10757640026�015077� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "math.h" #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_xi2_4_rohf(void); void x_xi2_14(void); void x_xi2_rohf(void); extern void x_xi_check(char *term_lbl); extern void x_xi2_uhf(void); extern void x_xi2_rhf(void); /* compute xi_2 amplitudes for zeta equations */ void x_xi2(void) { if (params.ref == 0) x_xi2_rhf(); else if (params.ref == 1) x_xi2_rohf(); else x_xi2_uhf(); return; } void x_xi2_rohf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; double tval; dpdbuf4 D2, R2, L2, H2, I2, Z, Z2, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; #ifdef DEBUG_XI x_xi_check("reset"); #endif /* terms 1 and 5, Xijab += (Lme Rme + 0.25 Lmnef Rmnef) <ij||eb> */ /* overlaps in params are assigned in x_xi1.c */ /* see comments in xi1_connected.c */ dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_scmcopy(&D2, EOM_XI, "XIJAB", params.overlap1+params.overlap2); dpd_buf4_scmcopy(&D2, EOM_XI, "Xijab", params.overlap1+params.overlap2); dpd_buf4_close(&D2); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_scmcopy(&D2, EOM_XI, "XIjAb", params.overlap1+params.overlap2); dpd_buf4_close(&D2); #ifdef DEBUG_XI x_xi_check("terms 1 and 5"); #endif /* terms 2 and 9, Xijab -= P(ab) (Lma Rme + Lmnfa Rmnfe) <ij||eb */ dpd_buf4_init(&Z2, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract244(&I1, &D2, &Z2, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract244(&I1, &D2, &Z2, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&I1, &D2, &XIjAb, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_vv"); dpd_contract424(&D2, &I1, &XIjAb, 3, 1, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&D2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 2 and 9"); #endif /* terms 3 and 10, Xijab -= P(ij) (Lie Rme + 0.5 Linef Rmnef) <mj||ab> */ dpd_buf4_init(&Z2, EOM_TMP1, 0, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&I1, &D2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, 0, 0, 7, 0, 7, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&I1, &D2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 0, 7, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&I1, &D2, &XIjAb, 1, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_oo"); dpd_contract424(&D2, &I1, &XIjAb, 1, 1, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&D2); dpd_buf4_close(&XIjAb); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("terms 3 and 10"); #endif x_xi2_4_rohf(); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("terms 4 and 6"); #endif /* term 7, Xijab += 0.25 Lmnab Rmnef <ij||ef> */ dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 2, 2, 2, 2, 0, "Z (I>J,M>N)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&Z2, &L2, &XIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 2, 2, 2, 2, 0, "Z (i>j,m>n)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&Z2, &L2, &Xijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&Xijab); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 0, 0, 0, 0, 0, "Z (Ij,Mn)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&Z2, &L2, &XIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&XIjAb); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("term 7"); #endif /* term 8, Xijab += 0.25 Rmnef Lijef <mn||ab> */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&I2, &D2, &XIJAB, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_oooo"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&I2, &D2, &Xijab, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&I2, &D2, &XIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 8"); #endif /* term 11, Xijab -= 0.5 P(ab) Lijfb (Rmnef <mn||ea>) */ /* term 17 -= P(ab) Lijfb (Rmf Fma) */ /* term 20 += P(ab) Lijfb (Rme Wfmae) */ /* build 1-e intermediates to include term 17 */ /* for term 11: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_file2_copy(&I1, EOM_TMP1, "Z (F,A)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); /* for term 20: */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_file2_axpy(&Z1A, &I1, -1.0, 0); dpd_file2_close(&Z1A); /* for term 17: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 1, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); /* for term 11: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_vv"); dpd_file2_copy(&I1, EOM_TMP1, "Z (f,a)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (f,a)"); /* for term 20: */ dpd_file2_init(&Z1B, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_vv"); dpd_file2_axpy(&Z1B, &I1, -1.0, 0); dpd_file2_close(&Z1B); /* for term 17: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&R1, &F1, &I1, 1, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract244(&I1, &L2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (f,a)"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract244(&I1, &L2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract244(&I1, &L2, &XIjAb, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (f,a)"); dpd_contract424(&L2, &I1, &XIjAb, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 11, 17 and 20"); #endif /* term 12, Xijab -= 0.5 P(ij) Lmjab (Rmnef <in||ef>) */ /* term 16, -= P(ij) Lmjab (Rme Fie) */ /* term 21, -= P(ij) Lmjab (Rne Winme) */ /* make 1-electron intermediates to include terms 16 and 21 as well */ /* for term 12: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_copy(&I1, EOM_TMP1, "Z (M,I)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); /* for term 21 */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_file2_axpy(&Z1A, &I1, 1.0, 1); dpd_file2_close(&Z1A); /* for term 16: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 0, 0, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); /* for term 12 */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_oo"); dpd_file2_copy(&I1, EOM_TMP1, "Z (m,i)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (m,i)"); /* for term 21 */ dpd_file2_init(&Z1B, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_oo"); dpd_file2_axpy(&Z1B, &I1, 1.0, 1); dpd_file2_close(&Z1B); /* for term 16 */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&R1, &F1, &I1, 0, 0, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract244(&I1, &L2, &Z2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (m,i)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_contract244(&I1, &L2, &Z2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract244(&I1, &L2, &XIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (m,i)"); dpd_contract424(&L2, &I1, &XIjAb, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 12, 16 and 21"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 13 + 15, (0.25 Rmnef <mn||ef> + Rme Fme) Lijab */ if ( (L_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); tval = dpd_file2_dot(&R1, &F1); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "Fme"); tval += dpd_file2_dot(&R1, &F1); dpd_file2_close(&F1); dpd_file2_close(&R1); tval += params.RD_overlap; dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&L2, &XIJAB, tval); dpd_buf4_close(&L2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_axpy(&L2, &Xijab, tval); dpd_buf4_close(&L2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_axpy(&L2, &XIjAb, tval); dpd_buf4_close(&L2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 13 (ijab) and 15 (Fme)"); #endif } /* term 14, +P(ij) P(ab) Lmjeb Rme Fia */ if (!params.connect_xi) { x_xi2_14(); #ifdef DEBUG_XI x_xi_check("term 14 (Fme)"); #endif } psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 22, +P(ij) (Limfe Rme) Wfjab */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 0, 7, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, 1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "Xijab", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract244(&I1, &H2, &XIjAb, 1, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (jI,bA)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 22 (Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); } /* term 23, -P(ab) (Lmnea Rme) Wijnb */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "WMNIE"); dpd_contract244(&I1, &H2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "Wmnie"); dpd_contract244(&I1, &H2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_contract244(&I1, &H2, &XIjAb, 0, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (jI,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_contract424(&H2, &I1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 23 (Wmnie)"); #endif } /* term 25, Xijab += (Lnmab Rme) Wijne */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_VVOV"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "WMNIE"); dpd_contract444(&H2, &I2, &XIJAB, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 10, 7, 10, 0, "L2R1_vvov"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 10, 2, 10, 0, "Wmnie"); dpd_contract444(&H2, &I2, &Xijab, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvOv"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_contract444(&H2, &I2, &XIjAb, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (jI,Ab)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 5, 10, 5, 10, 0, "L2R1_VvoV"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WmNiE"); dpd_contract444(&H2, &I2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 25 (Wmnie)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 24, Xijab -= (Lijfe Rme) Wfmab */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_OOVO"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_contract444(&I2, &H2, &XIJAB, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 11, 2, 11, 0, "L2R1_oovo"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_contract444(&I2, &H2, &Xijab, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract444(&I2, &H2, &XIjAb, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (Ij,bA)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OovO"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract444(&I2, &H2, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 24 (Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* terms 18, 19: Xijab -= P(ij) P(ab) Linae (Rme Wmjnb + Rnf Wejbf) */ /* construct Z(JB,NE) = RME WMJNB + RNF WEJBF */ dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 11, 11, 11, 0, "Z (EJ,BN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "WAMEF"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 10, 10, "Z (JE,NB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (JE,NB)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (JB,NE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 10, 11, 10, 0, "Z (eJ,nB)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WmNiE"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract244(&R1, &H2, &Z, 1, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 10, "Z (Je,nB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Je,nB)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (JB,ne)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 11, 11, 11, 0, "Z (ej,bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "Wamef"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 10, 10, "Z (je,nb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (je,nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (jb,ne)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 10, 11, 10, 0, "Z (Ej,Nb)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract244(&R1, &H2, &Z, 1, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 10, "Z (jE,Nb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jE,Nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (jb,NE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 11, 10, 11, 0, "Z (Je,bN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&H2, &R1, &Z, 1, 0, 1, -1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort(&Z, EOM_TMP1, prsq, 10, 10, "Z (Jb,Ne)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 11, 11, 11, 0, "Z2 (eJ,bN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort_axpy(&Z, EOM_TMP1, qrsp, 10, 10, "Z (Jb,Ne)", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 11, 10, 11, 0, "Z (jE,Bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 1, 0, 1, -1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort(&Z, EOM_TMP1, prsq, 10, 10, "Z (jB,nE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 11, 11, 11, 0, "Z2 (Ej,Bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort_axpy(&Z, EOM_TMP1, qrsp, 10, 10, "Z (jB,nE)", 1.0); dpd_buf4_close(&Z); /* XIJAB -= P(IJ) P(AB) L(IA,NE) Z(NE,JB) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (IA,JB)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (JB,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (JB,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (IJ,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (IJ,AB)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "XIJAB", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("terms 18, 19 (Wmnie, Wamef)"); #endif /* Xijab -= P(ij) P(ab) L(ia,ne) Z(ne,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (ia,jb)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jb,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LiaJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jb,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (ij,ab)"); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 0, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "Xijab", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "Xijab", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "Xijab", -1.0); dpd_buf4_close(&Z2); /* XIjAb += - L(IA,NE) Z(jb,NE) - L(IA,ne) Z(jb,ne) */ /* - L(jb,ne) Z(IA,ne) - L(jb,NE) Z(IA,NE) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (IA,jb)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jb,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jb,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (JB,ne)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_contract444(&Z, &L2, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (JB,NE)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LiaJB"); dpd_contract444(&Z, &L2, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_XI, prqs, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); /* XIjAb += + L(jA,Ne) Z(Ib,Ne) + L(Ib,nE) Z(jA,nE) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (Ib,jA)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Jb,Ne)"); dpd_contract444(&Z, &L2, &Z2, 0, 0, -1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jB,nE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, -1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&Z2, EOM_XI, prsq, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("terms 18, 19 (Wmnie, Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* Write irrep of XI amplitudes to CC_INFO */ psio_write_entry(CC_INFO, "XI Irrep", (char *) &G_irr,sizeof(int)); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); tval = dpd_file2_dot_self(&XIA); dpd_file2_close(&XIA); fprintf(outfile,"XIA amplitudes: norm=%20.15lf dot=%20.15lf\n", sqrt(tval), tval ); dpd_file2_init(&Xia, EOM_XI, G_irr, 0, 1, "Xia"); tval += dpd_file2_dot_self(&Xia); fprintf(outfile,"X1 amplitudes: norm=%20.15lf dot=%20.15lf\n", sqrt(tval), tval ); dpd_file2_close(&Xia); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); tval += dpd_buf4_dot_self(&XIJAB); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 2, 7, 2, 7, 0, "Xijab"); tval += dpd_buf4_dot_self(&Xijab); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); tval += dpd_buf4_dot_self(&XIjAb); dpd_buf4_close(&XIjAb); fprintf(outfile,"Norm of Xi: %20.15lf\n", sqrt(tval) ); return; } /* compute terms 4 and 6 of xi2 amplitudes */ /* Xijab += P(ij) P(ab) (Rme Lia + Rmnef Linaf) <mj||eb> */ void x_xi2_4_rohf(void) { dpdfile2 RIA, Ria, LIA, Lia; int L_irr, R_irr, G_irr, nirreps; int I, A, M, E, i, a, m, e, h, row, col, Isym, Esym, Asym, Msym; dpdbuf4 D, R2, L2, H2, I2, Z, Z2, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* construct RL = Rme Lia + Rmnef Linaf */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVOV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OVOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovov"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_ovov"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OVov"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_ovOV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_ovOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_oVoV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_oVoV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OvOv"); dpd_buf4_close(&I2); /* RL_OVOV(me,ia) += Rme Lia */ dpd_file2_init(&RIA, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&LIA, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&Ria, CC_GR, R_irr, 0, 1, "Ria"); dpd_file2_init(&Lia, CC_GL, L_irr, 0, 1, "Lia"); dpd_file2_mat_init(&RIA); dpd_file2_mat_init(&Ria); dpd_file2_mat_init(&LIA); dpd_file2_mat_init(&Lia); dpd_file2_mat_rd(&RIA); dpd_file2_mat_rd(&Ria); dpd_file2_mat_rd(&LIA); dpd_file2_mat_rd(&Lia); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVOV"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = RIA.params->rowidx[m]; Msym = RIA.params->psym[m]; E = RIA.params->colidx[e]; Esym = RIA.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += RIA.matrix[Msym][M][E] * LIA.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovov"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = Ria.params->rowidx[m]; Msym = Ria.params->psym[m]; E = Ria.params->colidx[e]; Esym = Ria.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += Ria.matrix[Msym][M][E] * Lia.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVov"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = RIA.params->rowidx[m]; Msym = RIA.params->psym[m]; E = RIA.params->colidx[e]; Esym = RIA.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += RIA.matrix[Msym][M][E] * Lia.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovOV"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = Ria.params->rowidx[m]; Msym = Ria.params->psym[m]; E = Ria.params->colidx[e]; Esym = Ria.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += Ria.matrix[Msym][M][E] * LIA.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_file2_mat_close(&RIA); dpd_file2_mat_close(&Ria); dpd_file2_mat_close(&LIA); dpd_file2_mat_close(&Lia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); /* Z2(ME,IA) <MJ|EB>(ME,JB) + Z2(me,IA) <mJ|eB>(me,JB) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (IA,JB)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVOV"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovOV"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (IJ,AB)"); dpd_buf4_close(&Z2); /* add in Z2(IJ,AB) permutations */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (IJ,AB)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); /* Z2(me,ia) <mj|eb>(me,jb) + Z2(ME,ia) <Mj|Eb>(ME,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (ia,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovov"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVov"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (ij,ab)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z2); /* Z2(ME,IA) <Mj|Eb>(ME,jb) + Z2(me,IA) <mj|eb>(me,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVOV"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovOV"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); /* XIjAb += ZMjEb <MI|EA> + Zmjeb <mI|eA> */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVov"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_ovov"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z2, EOM_XI, prqs, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); /* XIjAb += ZmjEA <mI|bE> + ZMIeb <Mj|Ae> */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (Ib,jA)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_oVoV"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OvOv"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z2, EOM_XI, prsq, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); return; } /* compute term 14 of Xi2 amplitudes for all spin cases */ /* Xijab += P(ij) P(ab) (Lmjeb Rme) Fia */ void x_xi2_14(void) { dpdfile2 IIA, Iia, FME, Fme; int L_irr, R_irr, G_irr, nirreps; int I, A, J, B, i, a, j, b, h, row, col, Isym, Asym, Jsym, Bsym; int II, AA, JJ, BB, ii, aa, jj, bb, IIsym, AAsym, JJsym, BBsym; dpdbuf4 Z, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; dpd_file2_init(&IIA, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&IIA); dpd_file2_mat_init(&FME); dpd_file2_mat_rd(&IIA); dpd_file2_mat_rd(&FME); if (params.ref == 1) { dpd_file2_init(&Iia, EOM_TMP, G_irr, 0, 1, "L2R1_ov"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); } else if (params.ref == 2) { dpd_file2_init(&Iia, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); } if (params.ref != 0) { dpd_file2_mat_init(&Iia); dpd_file2_mat_rd(&Iia); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); } /* build Z(IJ,AB) = FME(I,A) L2R1_OV(J,B) */ if (params.ref != 0) { /* ROHF or UHF for XIJAB */ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (IJ,AB)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; j = Z.params->roworb[h][row][1]; I = FME.params->rowidx[i]; Isym = FME.params->psym[i]; J = IIA.params->rowidx[j]; Jsym = IIA.params->psym[j]; for(col=0; col < Z.params->coltot[h^G_irr]; col++) { a = Z.params->colorb[h^G_irr][col][0]; b = Z.params->colorb[h^G_irr][col][1]; A = FME.params->colidx[a]; Asym = FME.params->qsym[a]; B = IIA.params->colidx[b]; Bsym = IIA.params->qsym[b]; if( (Isym==Asym) && ((Jsym^Bsym)==G_irr) ) Z.matrix[h][row][col] += FME.matrix[Isym][I][A] * IIA.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } /* XIJAB += P(IJ) P(AB) Z(IJ,AB) */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z, EOM_XI, qprs, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, pqsr, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, qpsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z); } /* build Z(ij,ab) = Fme(i,a) L2R1_ov(j,b) */ if (params.ref != 0) { /* ROHF or UHF for Xijab */ if (params.ref == 1) dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z (ij,ab)"); else if (params.ref == 2) dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z (ij,ab)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; j = Z.params->roworb[h][row][1]; I = Fme.params->rowidx[i]; Isym = Fme.params->psym[i]; J = Iia.params->rowidx[j]; Jsym = Iia.params->psym[j]; for(col=0; col < Z.params->coltot[h^G_irr]; col++) { a = Z.params->colorb[h^G_irr][col][0]; b = Z.params->colorb[h^G_irr][col][1]; A = Fme.params->colidx[a]; Asym = Fme.params->qsym[a]; B = Iia.params->colidx[b]; Bsym = Iia.params->qsym[b]; if( (Isym==Asym) && ((Jsym^Bsym)==G_irr) ) Z.matrix[h][row][col] += Fme.matrix[Isym][I][A] * Iia.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } /* Xijab += P(ij) P(ab) Z(ij,ab) */ if (params.ref == 1) { dpd_buf4_init(&Xijab, EOM_XI, G_irr, 0, 5, 2, 7, 0, "Xijab"); dpd_buf4_axpy(&Z, &Xijab, 1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z, EOM_XI, qprs, 2, 7, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, pqsr, 2, 7, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, qpsr, 2, 7, "Xijab", 1.0); dpd_buf4_close(&Z); } else if (params.ref == 2) { dpd_buf4_init(&Xijab, EOM_XI, G_irr, 10, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z, &Xijab, 1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z, EOM_XI, qprs, 12, 17, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, pqsr, 12, 17, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z, EOM_XI, qpsr, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z); } } /* XIjAb += FME(I,A) L2R1_ov(j,b) + IIA(I,A) F(j,b) */ if (params.ref == 0) { /* RHF XIjAb */ dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&XIjAb, h); dpd_buf4_mat_irrep_rd(&XIjAb, h); for(row=0; row < XIjAb.params->rowtot[h]; row++) { i = XIjAb.params->roworb[h][row][0]; j = XIjAb.params->roworb[h][row][1]; I = FME.params->rowidx[i]; Isym = FME.params->psym[i]; J = IIA.params->rowidx[j]; Jsym = IIA.params->psym[j]; II = IIA.params->rowidx[i]; IIsym = IIA.params->psym[i]; JJ = FME.params->rowidx[j]; JJsym = FME.params->psym[j]; for(col=0; col < XIjAb.params->coltot[h^G_irr]; col++) { a = XIjAb.params->colorb[h^G_irr][col][0]; b = XIjAb.params->colorb[h^G_irr][col][1]; A = FME.params->colidx[a]; Asym = FME.params->qsym[a]; B = IIA.params->colidx[b]; Bsym = IIA.params->qsym[b]; AA = IIA.params->colidx[a]; AAsym = IIA.params->qsym[a]; BB = FME.params->colidx[b]; BBsym = FME.params->qsym[b]; if( (Isym==Asym) && ((Jsym^Bsym)==G_irr) ) XIjAb.matrix[h][row][col] += FME.matrix[Isym][I][A] * IIA.matrix[Jsym][J][B]; if( ((IIsym^AAsym)==G_irr) && (JJsym==BBsym) ) XIjAb.matrix[h][row][col] += IIA.matrix[IIsym][II][AA] * FME.matrix[JJsym][JJ][BB]; } } dpd_buf4_mat_irrep_wrt(&XIjAb, h); dpd_buf4_mat_irrep_close(&XIjAb, h); } dpd_buf4_close(&XIjAb); dpd_file2_mat_close(&IIA); dpd_file2_close(&IIA); dpd_file2_mat_close(&FME); dpd_file2_close(&FME); } else { /* ROHF and UHF XIjAb */ if (params.ref == 1) dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); else if (params.ref == 2) dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&XIjAb, h); dpd_buf4_mat_irrep_rd(&XIjAb, h); for(row=0; row < XIjAb.params->rowtot[h]; row++) { i = XIjAb.params->roworb[h][row][0]; j = XIjAb.params->roworb[h][row][1]; I = FME.params->rowidx[i]; Isym = FME.params->psym[i]; J = Iia.params->rowidx[j]; Jsym = Iia.params->psym[j]; II = IIA.params->rowidx[i]; IIsym = IIA.params->psym[i]; JJ = Fme.params->rowidx[j]; JJsym = Fme.params->psym[j]; for(col=0; col < XIjAb.params->coltot[h^G_irr]; col++) { a = XIjAb.params->colorb[h^G_irr][col][0]; b = XIjAb.params->colorb[h^G_irr][col][1]; A = FME.params->colidx[a]; Asym = FME.params->qsym[a]; B = Iia.params->colidx[b]; Bsym = Iia.params->qsym[b]; AA = IIA.params->colidx[a]; AAsym = IIA.params->qsym[a]; BB = Fme.params->colidx[b]; BBsym = Fme.params->qsym[b]; if( (Isym==Asym) && ((Jsym^Bsym)==G_irr) ) XIjAb.matrix[h][row][col] += FME.matrix[Isym][I][A] * Iia.matrix[Jsym][J][B]; if( ((IIsym^AAsym)==G_irr) && (JJsym==BBsym) ) XIjAb.matrix[h][row][col] += IIA.matrix[IIsym][II][AA] * Fme.matrix[JJsym][JJ][BB]; } } dpd_buf4_mat_irrep_wrt(&XIjAb, h); dpd_buf4_mat_irrep_close(&XIjAb, h); } dpd_buf4_close(&XIjAb); dpd_file2_mat_close(&IIA); dpd_file2_mat_close(&Iia); dpd_file2_close(&IIA); dpd_file2_close(&Iia); dpd_file2_mat_close(&FME); dpd_file2_mat_close(&Fme); dpd_file2_close(&FME); dpd_file2_close(&Fme); } return; } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi2_rhf.cc�����������������������������������������������������������������0000644�0001015�0000765�00000042742�10757640026�015744� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "math.h" #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void x_xi2_4_rhf(void); extern void x_xi2_14(void); extern void x_xi_check(char *term_lbl); extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); /* compute xi_2 amplitudes for RHF wavefunctions for zeta equations */ void x_xi2_rhf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; double tval; dpdbuf4 D2, R2, L2, H2, I2, Z, Z2, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; #ifdef DEBUG_XI x_xi_check("reset"); #endif /* terms 1 and 5, Xijab += (Lme Rme + 0.25 Lmnef Rmnef) <ij||eb> */ /* overlaps in params are assigned in x_xi1.c */ /* see comments in xi1_connected.c */ dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_scmcopy(&D2, EOM_XI, "XIjAb", params.overlap1+params.overlap2); dpd_buf4_close(&D2); #ifdef DEBUG_XI x_xi_check("terms 1 and 5"); #endif /* terms 2 and 9, Xijab -= P(ab) (Lma Rme + Lmnfa Rmnfe) <ij||eb */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (Ij,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D2, &I1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qpsr, 0, 5, "X (jI,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (jI,bA)"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 2 and 9"); #endif /* terms 3 and 10, Xijab -= P(ij) (Lie Rme + 0.5 Linef Rmnef) <mj||ab> */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (Ij,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&I1, &D2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_sort(&Z2, EOM_TMP1, qpsr, 0, 5, "X (jI,bA)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (jI,bA)"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 3 and 10"); #endif x_xi2_4_rhf(); #ifdef DEBUG_XI x_xi_check("terms 4 and 6"); #endif /* term 7, Xijab += 0.25 Lmnab Rmnef <ij||ef> */ dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 0, 0, 0, 0, 0, "Z (Ij,Mn)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&Z2, &L2, &XIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 7"); #endif /* term 8, Xijab += 0.25 Rmnef Lijef <mn||ab> */ dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 0, 0, 0, 0, "R2L2_OoOo"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&I2, &D2, &XIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 8"); #endif /* term 11, Xijab -= 0.5 P(ab) Lijfb (Rmnef <mn||ea>) */ /* term 17 -= P(ab) Lijfb (Rmf Fma) */ /* term 20 += P(ab) Lijfb (Rme Wfmae) */ /* build 1-e intermediates to include term 17 */ /* for term 11: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_file2_copy(&I1, EOM_TMP1, "X1 (F,A)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "X1 (F,A)"); /* for term 20: */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_file2_axpy(&Z1A, &I1, -1.0, 0); dpd_file2_close(&Z1A); /* for term 17: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 1, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "X1 (F,A)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract244(&I1, &L2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("terms 11, 17 and 20"); #endif /* term 12, Xijab -= 0.5 P(ij) Lmjab (Rmnef <in||ef>) */ /* term 16, -= P(ij) Lmjab (Rme Fie) */ /* term 21, -= P(ij) Lmjab (Rne Winme) */ /* make 1-electron intermediates to include terms 16 and 21 as well */ /* for term 12: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_copy(&I1, EOM_TMP1, "X1 (M,I)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "X1 (M,I)"); /* for term 21 */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_file2_axpy(&Z1A, &I1, 1.0, 1); dpd_file2_close(&Z1A); /* for term 16: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 0, 0, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "X1 (M,I)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract244(&I1, &L2, &Z2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 12, 16 and 21"); #endif /* term 13 + 15, (0.25 Rmnef <mn||ef> + Rme Fme) Lijab */ if ( (L_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); tval = 2.0 * dpd_file2_dot(&R1, &F1); dpd_file2_close(&F1); dpd_file2_close(&R1); tval += params.RD_overlap; dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_axpy(&L2, &XIjAb, tval); dpd_buf4_close(&L2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 13 (ijab) and 15 (Fme)"); #endif } /* term 14, +P(ij) P(ab) Lmjeb Rme Fia */ if (!params.connect_xi) { x_xi2_14(); #ifdef DEBUG_XI x_xi_check("term 14 (Fme)"); #endif } /* term 22, +P(ij) (Limfe Rme) Wfjab */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (Ij,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, 1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 22 (Wamef)"); #endif } /* term 23, -P(ab) (Lmnea Rme) Wijnb */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (Ij,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_contract244(&I1, &H2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 23 (Wmnie)"); #endif } /* term 25, Xijab += (Lnmab Rme) Wijne */ dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 0, 0, 0, 0, 0, "X (Ij,Nm)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&Z2, &L2, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z, &XIjAb, 1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z, EOM_XI, qpsr, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z); #ifdef DEBUG_XI x_xi_check("term 25 (Wmnie)"); #endif /* term 24, Xijab -= (Lijfe Rme) Wfmab */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "X (Ij,Ab)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 0, 11, 0, 11, 0, "L2R1_OoVo"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract444(&I2, &H2, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, -1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 24 (Wamef)"); #endif /* terms 18, 19: Xijab -= P(ij) P(ab) Linae (Rme Wmjnb + Rnf Wejbf) */ /* construct Z(JB,NE) = RME WMJNB + RNF WEJBF */ dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 10, 11, 10, 0, "Z (Ej,Nb)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract244(&R1, &H2, &Z, 1, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 10, 10, "Z (jE,Nb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jE,Nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (jb,NE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Je,Nb)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 1, 0, 1, -1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 11, 11, 11, 11, 0, "Z (eJ,bN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort_axpy(&Z, EOM_TMP1, qpsr, 10, 10, "Z (Je,Nb)", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Je,Nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 10, 10, "Z (Jb,Ne)"); dpd_buf4_close(&Z); /* XIjAb += - L(IA,NE) Z(jb,NE) - L(IA,ne) Z(jb,ne) */ /* - L(jb,ne) Z(IA,ne) - L(jb,NE) Z(IA,NE) transpose of line above */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "XIjAb (IA,jb)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "2LIjAb - LIjbA (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (jb,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, -1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Jb,Ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, -1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, rspq, 10, 10, "XIjAb (jb,IA)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "XIjAb (jb,IA)"); dpd_buf4_axpy(&Z, &Z2, 1.0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_XI, prqs, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); /* XIjAb += + L(jA,Ne) Z(Ib,Ne) + L(Ib,nE) Z(jA,nE) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (Ib,jA)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 10, 10, 10, 10, 0, "Z (Jb,Ne)"); dpd_contract444(&Z, &L2, &Z2, 0, 0, -1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, rspq, 10, 10, "Z2 (jA,Ib)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "Z2 (jA,Ib)"); dpd_buf4_axpy(&Z, &Z2, 1.0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_XI, prsq, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("terms 18, 19 (Wmnie, Wamef)"); #endif /* Write irrep of XI amplitudes to CC_INFO */ psio_write_entry(CC_INFO, "XI Irrep", (char *) &G_irr,sizeof(int)); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); tval = 2.0 * dpd_file2_dot_self(&XIA); dpd_file2_close(&XIA); fprintf(outfile,"XI_IA amplitudes: Norm=%15.10lf, Dot=%15.10lf\n", sqrt(tval), tval ); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_sort(&XIjAb, EOM_TMP1, pqsr, 0, 5, "XIjbA"); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjbA"); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); tval = norm_C_rhf(&XIA, &XIjAb, &Z2); dpd_file2_close(&XIA); dpd_buf4_close(&XIjAb); dpd_buf4_close(&Z2); fprintf(outfile,"XI amplitudes : Norm=%15.10lf, Dot=%15.10lf\n", sqrt(tval), tval ); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); return; } /* compute terms 4 and 6 of xi2 amplitudes */ /* Xijab += P(ij) P(ab) (Rme Lia + Rmnef Linaf) <mj||eb> */ void x_xi2_4_rhf(void) { dpdfile2 RIA, LIA; int L_irr, R_irr, G_irr, nirreps; int I, A, M, E, i, a, m, e, h, row, col, Isym, Esym, Asym, Msym; dpdbuf4 D, R2, L2, H2, I2, Z, Z2, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; /* construct RL = Rme Lia + Rmnef Linaf */ dpd_buf4_init(&I2, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OVov"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OVov"); dpd_buf4_close(&I2); /* RL_OVOV(me,ia) += Rme Lia */ dpd_file2_init(&RIA, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&LIA, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&RIA); dpd_file2_mat_init(&LIA); dpd_file2_mat_rd(&RIA); dpd_file2_mat_rd(&LIA); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVov"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = RIA.params->rowidx[m]; Msym = RIA.params->psym[m]; E = RIA.params->colidx[e]; Esym = RIA.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += RIA.matrix[Msym][M][E] * LIA.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); /* XIjAb += RL_OVov(me,IA) * (2<Mj|Eb> - <Mj|Be>) for the ZOVOV alpha case and the reverse of this multiplication for the Zovov beta case */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "X2 (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 10, 10, 10, 10, 0, "RL_OVov"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); /* XIjAb += RL_OvOv(Me,Ia) * (<Mj|Eb> (ME,jb) and the reverse of this to finish the all beta and all alpha spin orbital components */ dpd_buf4_init(&Z, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "XIjAb"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, 1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); /* Now do Z alpha beta parts */ /* XIjAb += ZmEjA <mI|bE> (mE,Ib) + ZMeIb <Mj|Ae> (Me,jA) */ dpd_buf4_init(&Z2, EOM_TMP1, 0, 10, 10, 10, 10, 0, "X2 (Ib,jA)"); dpd_buf4_init(&Z, EOM_TMP, G_irr, 10, 10, 10, 10, 0, "R2L2_OvOv"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort(&Z2, EOM_TMP1, prsq, 0, 5, "XIjAb"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_axpy(&Z2, &XIjAb, 1.0); dpd_buf4_close(&XIjAb); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 0, 5, "XIjAb", 1.0); dpd_buf4_close(&Z2); return; } }} // namespace psi::ccdensity ������������������������������psi3/src/bin/ccdensity/x_xi2_uhf.cc�����������������������������������������������������������������0000644�0001015�0000765�00000122170�10757640026�015741� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "math.h" #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { extern void x_xi_check(char *term_lbl); extern void x_xi2_14(void); /* in x_xi2.c */ void x_xi2_4_uhf(void); /* in x_xi2.c */ /* compute UHF xi_2 amplitudes for zeta equations */ void x_xi2_uhf(void) { dpdfile2 L1, XIA, Xia, I1, R1, F1, Z1A, Z1B; int L_irr, R_irr, G_irr; double tval; dpdbuf4 D2, R2, L2, H2, I2, Z, Z2, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; #ifdef DEBUG_XI x_xi_check("reset"); #endif /* terms 1 and 5, Xijab += (Lme Rme + 0.25 Lmnef Rmnef) <ij||eb> */ /* overlaps in params are assigned in x_xi1.c */ dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_scmcopy(&D2, EOM_XI, "XIJAB", params.overlap1+params.overlap2); dpd_buf4_close(&D2); dpd_buf4_init(&D2, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_scmcopy(&D2, EOM_XI, "Xijab", params.overlap1+params.overlap2); dpd_buf4_close(&D2); dpd_buf4_init(&D2, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_scmcopy(&D2, EOM_XI, "XIjAb", params.overlap1+params.overlap2); dpd_buf4_close(&D2); #ifdef DEBUG_XI x_xi_check("terms 1 and 5"); #endif /* terms 2 and 9, XIJAB -= P(AB) (LMA RME + LMNFA RMNFE) <IJ||EB> */ dpd_buf4_init(&Z2, EOM_TMP1, 0, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract244(&I1, &D2, &Z2, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, 0, 12, 15, 12, 15, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_buf4_init(&D2, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract244(&I1, &D2, &Z2, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); /* -LR_VV(A,E) <Ij||Eb> + LR_vv(b,e) <Ij||eA> */ dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 1, 1, "LR_VV"); dpd_buf4_init(&D2, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&I1, &D2, &XIjAb, 1, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 3, 3, "LR_vv"); dpd_contract424(&D2, &I1, &XIjAb, 3, 1, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&D2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 2 and 9"); #endif /* terms 3 and 10, Xijab -= P(ij) (Lie Rme + 0.5 Linef Rmnef) <mj||ab> */ dpd_buf4_init(&Z2, EOM_TMP1, 0, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_buf4_init(&D2, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract244(&I1, &D2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, 0, 10, 17, 10, 17, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_buf4_init(&D2, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&I1, &D2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&D2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 10, 17, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); /* - LR_OO(I,M) <Mj||Ab> + LR_OO(j,m) <mI||Ab> */ dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 0, "LR_OO"); dpd_buf4_init(&D2, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&I1, &D2, &XIjAb, 1, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 2, "LR_oo"); dpd_contract424(&D2, &I1, &XIjAb, 1, 1, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_buf4_close(&D2); dpd_buf4_close(&XIjAb); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("terms 3 and 10"); #endif x_xi2_4_uhf(); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("terms 4 and 6"); #endif /* term 7, Xijab += (0.25 Lmnab Rmnef) <ij||ef> */ dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 2, 2, 2, 2, 0, "Z (I>J,M>N)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&Z2, &L2, &XIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&D2, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 12, 12, 12, 12, 0, "Z (i>j,m>n)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&Z2, &L2, &Xijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&Xijab); dpd_buf4_init(&D2, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&Z2, EOM_TMP1, R_irr, 22, 22, 22, 22, 0, "Z (Ij,Mn)"); dpd_contract444(&D2, &R2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&R2); dpd_buf4_close(&D2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract444(&Z2, &L2, &XIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z2); dpd_buf4_close(&XIjAb); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); #ifdef DEBUG_XI x_xi_check("term 7"); #endif /* term 8, Xijab += (0.25 Rmnef Lijef) <mn||ab> */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 2, 2, 2, 0, "R2L2_OOOO"); dpd_buf4_init(&D2, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract444(&I2, &D2, &XIJAB, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 12, 12, 12, 0, "R2L2_oooo"); dpd_buf4_init(&D2, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&I2, &D2, &Xijab, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 22, 22, 22, 0, "R2L2_OoOo"); dpd_buf4_init(&D2, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract444(&I2, &D2, &XIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&D2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 8"); #endif /* term 11, Xijab -= 0.5 P(ab) Lijfb (Rmnef <mn||ea>) */ /* term 17 -= P(ab) Lijfb (Rmf Fma) */ /* term 20 += P(ab) Lijfb (Rme Wfmae) */ /* build 1-e intermediate in parentheses above */ /* for term 11: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_file2_copy(&I1, EOM_TMP1, "Z (F,A)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); /* for term 20: */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_file2_axpy(&Z1A, &I1, -1.0, 0); dpd_file2_close(&Z1A); /* for term 17: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 1, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); /* for term 11: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 3, 3, "RD_vv"); dpd_file2_copy(&I1, EOM_TMP1, "Z (f,a)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 3, 3, "Z (f,a)"); /* for term 20: */ dpd_file2_init(&Z1B, EOM_TMP_XI, R_irr, 3, 3, "R1Wamef_vv"); dpd_file2_axpy(&Z1B, &I1, -1.0, 0); dpd_file2_close(&Z1B); /* for term 17: */ dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&R1, &F1, &I1, 1, 1, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract244(&I1, &L2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 3, 3, "Z (f,a)"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract244(&I1, &L2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 1, 1, "Z (F,A)"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract244(&I1, &L2, &XIjAb, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 3, 3, "Z (f,a)"); dpd_contract424(&L2, &I1, &XIjAb, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("terms 11, 17 and 20"); #endif /* term 12, Xijab -= 0.5 P(ij) Lmjab (Rmnef <in||ef>) */ /* term 16, -= P(ij) Lmjab (Rme Fie) */ /* term 21, -= P(ij) Lmjab (Rne Winme) */ /* make 1-electron intermediate in parentheses above */ /* for term 12: */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_file2_copy(&I1, EOM_TMP1, "Z (M,I)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); /* for term 21 */ dpd_file2_init(&Z1A, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_file2_axpy(&Z1A, &I1, 1.0, 1); dpd_file2_close(&Z1A); /* for term 16: */ dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&R1, &F1, &I1, 0, 0, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); /* for term 12 */ dpd_file2_init(&I1, EOM_TMP_XI, R_irr, 2, 2, "RD_oo"); dpd_file2_copy(&I1, EOM_TMP1, "Z (m,i)"); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 2, 2, "Z (m,i)"); /* for term 21 */ dpd_file2_init(&Z1B, EOM_TMP_XI, R_irr, 2, 2, "R1Wmnie_oo"); dpd_file2_axpy(&Z1B, &I1, 1.0, 1); dpd_file2_close(&Z1B); /* for term 16 */ dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&R1, &F1, &I1, 0, 0, 1.0, 1.0); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_close(&I1); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); dpd_buf4_init(&L2, CC_GL, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract244(&I1, &L2, &Z2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 2, 2, "Z (m,i)"); dpd_buf4_init(&L2, CC_GL, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract244(&I1, &L2, &Z2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 10, 17, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP1, R_irr, 0, 0, "Z (M,I)"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract244(&I1, &L2, &XIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&I1); dpd_file2_init(&I1, EOM_TMP1, R_irr, 2, 2, "Z (m,i)"); dpd_contract424(&L2, &I1, &XIjAb, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&L2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 12, 16 and 21"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 13 + 15, (0.25 Rmnef <mn||ef> + Rme Fme) Lijab */ if ( (L_irr == 0) && (!params.connect_xi)) { dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&F1, CC_OEI, 0, 0, 1, "FME"); tval = dpd_file2_dot(&R1, &F1); dpd_file2_close(&F1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&F1, CC_OEI, 0, 2, 3, "Fme"); tval += dpd_file2_dot(&R1, &F1); dpd_file2_close(&F1); dpd_file2_close(&R1); tval += params.RD_overlap; dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&L2, CC_GL, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&L2, &XIJAB, tval); dpd_buf4_close(&L2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&L2, CC_GL, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_axpy(&L2, &Xijab, tval); dpd_buf4_close(&L2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_init(&L2, CC_GL, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_axpy(&L2, &XIjAb, tval); dpd_buf4_close(&L2); dpd_buf4_close(&XIjAb); #ifdef DEBUG_XI x_xi_check("term 13 (ijab) and 15 (Fme)"); #endif } /* term 14, +P(ij) P(ab) Lmjeb Rme Fia */ if (!params.connect_xi) { x_xi2_14(); #ifdef DEBUG_XI x_xi_check("term 14 (Fme)"); #endif } psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 22, +P(ij) (Limfe Rme) Wfjab = +P(ij) L2R1(I,F) WFJAB */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 7, 0, 7, 0, "Z (IJ,A>B)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 7, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 17, 10, 17, 0, "Z (ij,a>b)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 10, 17, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, 1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 12, 17, "Xijab", -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract244(&I1, &H2, &XIjAb, 1, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 23, 29, 23, 29, 0, "Z (jI,bA)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract244(&I1, &H2, &Z2, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 22, 28, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 22 (Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); } /* term 23, -P(ab) (Lmnea Rme) Wijnb */ if (!params.connect_xi) { dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 2, 5, 2, 5, 0, "Z (I>J,AB)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 20, 2, 20, 0, "WMNIE"); dpd_contract244(&I1, &H2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 12, 15, 12, 15, 0, "Z (i>j,ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 12, 30, 12, 30, 0, "Wmnie"); dpd_contract244(&I1, &H2, &Z2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 12, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_file2_init(&I1, EOM_TMP, G_irr, 0, 1, "L2R1_OV"); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 24, 22, 24, 0, "WMnIe"); dpd_contract244(&I1, &H2, &XIjAb, 0, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 23, 28, 23, 28, 0, "Z (jI,Ab)"); dpd_file2_init(&I1, EOM_TMP, G_irr, 2, 3, "L2R1_ov"); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_contract424(&H2, &I1, &Z2, 3, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_file2_close(&I1); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 22, 28, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 23 (Wmnie)"); #endif } /* term 25, Xijab += (Lnmab Rme) Wijne */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 7, 20, 7, 20, 0, "L2R1_VVOV"); dpd_buf4_init(&H2, CC_HBAR, 0, 2, 20, 2, 20, 0, "WMNIE"); dpd_contract444(&H2, &I2, &XIJAB, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 17, 30, 17, 30, 0, "L2R1_vvov"); dpd_buf4_init(&H2, CC_HBAR, 0, 12, 30, 12, 30, 0, "Wmnie"); dpd_contract444(&H2, &I2, &Xijab, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 28, 24, 28, 24, 0, "L2R1_VvOv"); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 24, 22, 24, 0, "WMnIe"); dpd_contract444(&H2, &I2, &XIjAb, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 23, 28, 23, 28, 0, "Z (jI,Ab)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 28, 27, 28, 27, 0, "L2R1_VvoV"); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 27, 23, 27, 0, "WmNiE"); dpd_contract444(&H2, &I2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 22, 28, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 25 (Wmnie)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* term 24, Xijab -= (Lijfe Rme) Wfmab */ dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 2, 21, 2, 21, 0, "L2R1_OOVO"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_contract444(&I2, &H2, &XIJAB, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 12, 31, 12, 31, 0, "L2R1_oovo"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_contract444(&I2, &H2, &Xijab, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 26, 22, 26, 0, "L2R1_OoVo"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract444(&I2, &H2, &XIjAb, 0, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_close(&XIjAb); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 22, 29, 22, 29, 0, "Z (Ij,bA)"); dpd_buf4_init(&I2, EOM_TMP, G_irr, 22, 25, 22, 25, 0, "L2R1_OovO"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract444(&I2, &H2, &Z2, 0, 1, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&I2); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 22, 28, "XIjAb", -1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("term 24 (Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* terms 18, 19: Xijab -= P(ij) P(ab) Linae (Rme Wmjnb + Rnf Wejbf) */ /* construct Z(JB,NE) = RME WMJNB + RNF WEJBF */ dpd_buf4_init(&Z, EOM_TMP1, R_irr, 21, 21, 21, 21, 0, "Z (EJ,BN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 5, 21, 7, 0, "WAMEF"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 20, 20, "Z (JE,NB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 20, 20, 20, 20, 0, "Z (JE,NB)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 20, 20, "Z (JB,NE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 25, 27, 25, 27, 0, "Z (eJ,nB)"); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 27, 23, 27, 0, "WmNiE"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract244(&R1, &H2, &Z, 1, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 24, 27, "Z (Je,nB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 24, 27, 24, 27, 0, "Z (Je,nB)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 20, 30, "Z (JB,ne)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 31, 31, 31, 31, 0, "Z (ej,bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 15, 31, 17, 0, "Wamef"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qpsr, 30, 30, "Z (je,nb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 30, 30, 30, 30, 0, "Z (je,nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 30, 30, "Z (jb,ne)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 26, 24, 26, 24, 0, "Z (Ej,Nb)"); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 24, 22, 24, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract244(&R1, &H2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract244(&R1, &H2, &Z, 1, 2, 1, -1.0, 1.0); dpd_buf4_close(&H2); dpd_file2_close(&R1); dpd_buf4_sort(&Z, EOM_TMP1, qprs, 27, 24, "Z (jE,Nb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 27, 24, 27, 24, 0, "Z (jE,Nb)"); dpd_buf4_sort(&Z, EOM_TMP1, psrq, 30, 20, "Z (jb,NE)"); dpd_buf4_close(&Z); /* construct Z(Jb,Ne) <= Z(Je,bN) = - Rme WJmNb + WeJbF RNF */ dpd_buf4_init(&Z, EOM_TMP1, R_irr, 24, 25, 24, 25, 0, "Z (Je,bN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&H2, &R1, &Z, 1, 0, 1, -1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 25, 25, 25, 25, 0, "Z (eJ,bN)"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort_axpy(&Z, EOM_TMP1, qprs, 24, 25, "Z (Je,bN)", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 24, 25, 24, 25, 0, "Z (Je,bN)"); dpd_buf4_sort(&Z, EOM_TMP1, prsq, 24, 24, "Z (Jb,Ne)"); dpd_buf4_close(&Z); /* construct Z(jB,nE) <= Z(jE,Bn) = - RME WjMnB + WEjBf Rnf */ dpd_buf4_init(&Z, EOM_TMP1, R_irr, 27, 26, 27, 26, 0, "Z (jE,Bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_contract424(&H2, &R1, &Z, 1, 0, 1, -1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 26, 26, 26, 26, 0, "Z (Ej,Bn)"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_contract424(&H2, &R1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_sort_axpy(&Z, EOM_TMP1, qprs, 27, 26, "Z (jE,Bn)", 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 27, 26, 27, 26, 0, "Z (jE,Bn)"); dpd_buf4_sort(&Z, EOM_TMP1, prsq, 27, 27, "Z (jB,nE)"); dpd_buf4_close(&Z); /* XIJAB -= P(IJ) P(AB) L(IA,NE) Z(NE,JB) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "Z2 (IA,JB)"); dpd_buf4_init(&L2, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 20, 20, 20, 20, 0, "Z (JB,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 20, 30, 20, 30, 0, "Z (JB,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (IJ,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (IJ,AB)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, -1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "XIJAB", -1.0); dpd_buf4_close(&Z2); /* Xijab -= P(ij) P(ab) L(ia,ne) Z(ne,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "Z2 (ia,jb)"); dpd_buf4_init(&L2, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 30, 30, 30, 30, 0, "Z (jb,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 30, 20, 30, 20, 0, "LiaJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 30, 20, 30, 20, 0, "Z (jb,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 10, 15, "Z2 (ij,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z2 (ij,ab)"); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 10, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &Xijab, -1.0); dpd_buf4_close(&Xijab); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 12, 17, "Xijab", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 12, 17, "Xijab", 1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 12, 17, "Xijab", -1.0); dpd_buf4_close(&Z2); /* XIjAb += - L(IA,NE) Z(jb,NE) - L(IA,ne) Z(jb,ne) */ /* - L(jb,ne) Z(IA,ne) - L(jb,NE) Z(IA,NE) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "Z2 (IA,jb)"); dpd_buf4_init(&L2, CC_GL, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 30, 20, 30, 20, 0, "Z (jb,NE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 30, 30, 30, 30, 0, "Z (jb,ne)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 20, 30, 20, 30, 0, "Z (JB,ne)"); dpd_buf4_init(&L2, CC_GL, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_contract444(&Z, &L2, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 20, 20, 20, 20, 0, "Z (JB,NE)"); dpd_buf4_init(&L2, CC_GL, L_irr, 30, 20, 30, 20, 0, "LiaJB"); dpd_contract444(&Z, &L2, &Z2, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z2, EOM_XI, prqs, 22, 28, "XIjAb", -1.0); dpd_buf4_close(&Z2); /* XIjAb += + L(jA,Ne) Z(Ib,Ne) + L(Ib,nE) Z(jA,nE) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 24, 27, 24, 27, 0, "Z2 (Ib,jA)"); dpd_buf4_init(&L2, CC_GL, L_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 24, 24, 24, 24, 0, "Z (Jb,Ne)"); dpd_contract444(&Z, &L2, &Z2, 0, 0, -1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_GL, L_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&Z, EOM_TMP1, R_irr, 27, 27, 27, 27, 0, "Z (jB,nE)"); dpd_contract444(&L2, &Z, &Z2, 0, 0, -1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&Z2, EOM_XI, prsq, 22, 28, "XIjAb", 1.0); dpd_buf4_close(&Z2); #ifdef DEBUG_XI x_xi_check("terms 18, 19 (Wmnie, Wamef)"); #endif psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* Write irrep of XI amplitudes to CC_INFO */ psio_write_entry(CC_INFO, "XI Irrep", (char *) &G_irr,sizeof(int)); dpd_file2_init(&XIA, EOM_XI, G_irr, 0, 1, "XIA"); tval = dpd_file2_dot_self(&XIA); dpd_file2_close(&XIA); fprintf(outfile,"XIA amplitudes: norm=%20.15lf dot=%20.15lf\n", sqrt(tval), tval ); dpd_file2_init(&Xia, EOM_XI, G_irr, 2, 3, "Xia"); tval += dpd_file2_dot_self(&Xia); fprintf(outfile,"X1 amplitudes: norm=%20.15lf dot=%20.15lf\n", sqrt(tval), tval ); dpd_file2_close(&Xia); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 2, 7, 2, 7, 0, "XIJAB"); tval += dpd_buf4_dot_self(&XIJAB); dpd_buf4_close(&XIJAB); dpd_buf4_init(&Xijab, EOM_XI, G_irr, 12, 17, 12, 17, 0, "Xijab"); tval += dpd_buf4_dot_self(&Xijab); dpd_buf4_close(&Xijab); dpd_buf4_init(&XIjAb, EOM_XI, G_irr, 22, 28, 22, 28, 0, "XIjAb"); tval += dpd_buf4_dot_self(&XIjAb); dpd_buf4_close(&XIjAb); fprintf(outfile,"Norm of Xi: %20.15lf\n", sqrt(tval) ); return; } /* compute terms 4 and 6 of xi2 amplitudes */ /* Xijab += P(ij) P(ab) (Rme Lia + Rmnef Linaf) <mj||eb> */ /* Xijab += P(ij) P(ab) Z2(me,ia) <mj||eb>(me,jb) */ void x_xi2_4_uhf(void) { dpdfile2 RIA, Ria, LIA, Lia; int L_irr, R_irr, G_irr, nirreps; int I, A, M, E, i, a, m, e, h, row, col, Isym, Esym, Asym, Msym; dpdbuf4 D, R2, L2, H2, I2, Z, Z2, XIJAB, Xijab, XIjAb; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; nirreps = moinfo.nirreps; dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 20, 20, 20, 0, "R2L2_OVOV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OVOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 30, 30, 30, 0, "R2L2_ovov"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_ovov"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 20, 30, 20, 30, 0, "R2L2_OVov"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OVov"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 30, 20, 30, 20, 0, "R2L2_ovOV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_ovOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 27, 27, 27, 27, 0, "R2L2_oVoV"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_oVoV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP, G_irr, 24, 24, 24, 24, 0, "R2L2_OvOv"); dpd_buf4_copy(&I2, EOM_TMP1, "RL_OvOv"); dpd_buf4_close(&I2); /* RL_OVOV(me,ia) += Rme Lia */ dpd_file2_init(&RIA, CC_GR, R_irr, 0, 1, "RIA"); dpd_file2_init(&LIA, CC_GL, L_irr, 0, 1, "LIA"); dpd_file2_init(&Ria, CC_GR, R_irr, 2, 3, "Ria"); dpd_file2_init(&Lia, CC_GL, L_irr, 2, 3, "Lia"); dpd_file2_mat_init(&RIA); dpd_file2_mat_init(&Ria); dpd_file2_mat_init(&LIA); dpd_file2_mat_init(&Lia); dpd_file2_mat_rd(&RIA); dpd_file2_mat_rd(&Ria); dpd_file2_mat_rd(&LIA); dpd_file2_mat_rd(&Lia); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "RL_OVOV"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = RIA.params->rowidx[m]; Msym = RIA.params->psym[m]; E = RIA.params->colidx[e]; Esym = RIA.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += RIA.matrix[Msym][M][E] * LIA.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "RL_ovov"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = Ria.params->rowidx[m]; Msym = Ria.params->psym[m]; E = Ria.params->colidx[e]; Esym = Ria.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += Ria.matrix[Msym][M][E] * Lia.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "RL_OVov"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = RIA.params->rowidx[m]; Msym = RIA.params->psym[m]; E = RIA.params->colidx[e]; Esym = RIA.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += RIA.matrix[Msym][M][E] * Lia.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, G_irr, 30, 20, 30, 20, 0, "RL_ovOV"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&I2, h); dpd_buf4_mat_irrep_rd(&I2, h); for(row=0; row < I2.params->rowtot[h]; row++) { m = I2.params->roworb[h][row][0]; e = I2.params->roworb[h][row][1]; M = Ria.params->rowidx[m]; Msym = Ria.params->psym[m]; E = Ria.params->colidx[e]; Esym = Ria.params->qsym[e]; for(col=0; col < I2.params->coltot[h^G_irr]; col++) { i = I2.params->colorb[h^G_irr][col][0]; a = I2.params->colorb[h^G_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; if( ((Msym^Esym)==R_irr) && ((Isym^Asym)==L_irr) ) I2.matrix[h][row][col] += Ria.matrix[Msym][M][E] * LIA.matrix[Isym][I][A]; } } dpd_buf4_mat_irrep_wrt(&I2, h); dpd_buf4_mat_irrep_close(&I2, h); } dpd_buf4_close(&I2); dpd_file2_mat_close(&RIA); dpd_file2_mat_close(&Ria); dpd_file2_mat_close(&LIA); dpd_file2_mat_close(&Lia); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_file2_close(&LIA); dpd_file2_close(&Lia); /* Z2(IA,JB) = RL(ME,IA) <MJ|EB>(ME,JB) + Z2(me,IA) <mJ|eB>(me,JB) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "Z2 (IA,JB)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "RL_OVOV"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 20, 30, 20, 0, "RL_ovOV"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 0, 5, "Z2 (IJ,AB)"); dpd_buf4_close(&Z2); /* XIJAB += P(IJ) P(AB) Z2(IJ,AB) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 0, 5, 0, 5, 0, "Z2 (IJ,AB)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 0, 5, 2, 7, 0, "XIJAB"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 2, 7, "XIJAB", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 2, 7, "XIJAB", 1.0); dpd_buf4_close(&Z2); /* Z2(ia,jb) = RL(me,ia) <mj|eb>(me,jb) + Z2(ME,ia) <Mj|Eb>(ME,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "Z2 (ia,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "RL_ovov"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "RL_OVov"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort(&Z2, EOM_TMP1, prqs, 10, 15, "Z2 (ij,ab)"); dpd_buf4_close(&Z2); /* Xijab += P(ij) P(ab) Z2(ij,ab) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 10, 15, 10, 15, 0, "Z2 (ij,ab)"); dpd_buf4_init(&XIJAB, EOM_XI, G_irr, 10, 15, 12, 17, 0, "Xijab"); dpd_buf4_axpy(&Z2, &XIJAB, 1.0); dpd_buf4_close(&XIJAB); dpd_buf4_sort_axpy(&Z2, EOM_XI, qprs, 12, 17, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, pqsr, 12, 17, "Xijab", -1.0); dpd_buf4_sort_axpy(&Z2, EOM_XI, qpsr, 12, 17, "Xijab", 1.0); dpd_buf4_close(&Z2); /* Z2 (IA,jb) += RL(ME,IA) <Mj|Eb>(ME,jb) + Z2(me,IA) <mj|eb>(me,jb) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "Z2 (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 20, 20, 20, 0, "RL_OVOV"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 20, 30, 20, 0, "RL_ovOV"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); /* Z2 (IA,jb) += RL(ME,jb) <MI||EA>(ME,IA) + <mI|eA>(me,IA) RL(me,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 20, 30, 20, 30, 0, "RL_OVov"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 30, 30, 30, 30, 0, "RL_ovov"); dpd_contract444(&D, &Z, &Z2, 0, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z2, EOM_XI, prqs, 22, 28, "XIjAb", 1.0); dpd_buf4_close(&Z2); /* Z2 (Ib,jA) += - <mI||Eb>(mE,Ib) RL(mE,jA) = + <mI|bE>(mE,Ib) RL(mE,jA) */ dpd_buf4_init(&Z2, EOM_TMP1, G_irr, 24, 27, 24, 27, 0, "Z2 (Ib,jA)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&Z, EOM_TMP1, G_irr, 27, 27, 27, 27, 0, "RL_oVoV"); dpd_contract444(&D, &Z, &Z2, 1, 1, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); /* Z2 (Ib,jA) += - <Mj||eA>(Me,jA) RL(Me,Ia) = + <Mj|Ae>(Me,jA) RL(Me,Ia)*/ dpd_buf4_init(&Z, EOM_TMP1, G_irr, 24, 24, 24, 24, 0, "RL_OvOv"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract444(&Z, &D, &Z2, 1, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z2, EOM_XI, prsq, 22, 28, "XIjAb", 1.0); dpd_buf4_close(&Z2); return; } }} // namespace psi::ccdensity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi_check.cc����������������������������������������������������������������0000644�0001015�0000765�00000005271�10757640026�016154� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ /* ** X_XI_CHECK: check sum for xi */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); extern void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme); void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); void x_xi_check(char *term_lbl) { dpdfile2 Xia, XIA; dpdbuf4 XIJAB, Xijab, XIjAb, XIjbA; static double old_norm=0; double norm,dotval; char lbl[80]; int irrep; irrep = params.G_irr; /* if (!strcmp(term_lbl,"reset")) { fprintf(outfile,"resetting norm\n"); old_norm = 0; return; } */ if (params.ref == 0) { dpd_file2_init(&XIA, EOM_XI, irrep, 0, 1, "XIA"); dpd_buf4_init(&XIjAb, EOM_XI, irrep, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_sort(&XIjAb, EOM_XI, pqsr, 0, 5, "XIjbA"); dpd_buf4_init(&XIjbA, EOM_XI, irrep, 0, 5, 0, 5, 0, "XIjbA"); norm = norm_C_rhf(&XIA, &XIjAb, &XIjbA); dpd_file2_close(&XIA); dpd_buf4_close(&XIjAb); dpd_buf4_close(&XIjbA); } else if (params.ref == 1) { dpd_file2_init(&XIA, EOM_XI, irrep, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, irrep, 0, 1, "Xia"); dpd_buf4_init(&XIJAB, EOM_XI, irrep, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&Xijab, EOM_XI, irrep, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_init(&XIjAb, EOM_XI, irrep, 0, 5, 0, 5, 0, "XIjAb"); c_clean(&XIA, &Xia, &XIJAB, &Xijab, &XIjAb); norm = norm_C(&XIA, &Xia, &XIJAB, &Xijab, &XIjAb); dpd_file2_close(&XIA); dpd_file2_close(&Xia); dpd_buf4_close(&XIJAB); dpd_buf4_close(&Xijab); dpd_buf4_close(&XIjAb); } else if (params.ref == 2) { dpd_file2_init(&XIA, EOM_XI, irrep, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, irrep, 2, 3, "Xia"); dpd_buf4_init(&XIJAB, EOM_XI, irrep, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_init(&Xijab, EOM_XI, irrep, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_init(&XIjAb, EOM_XI, irrep, 22, 28, 22, 28, 0, "XIjAb"); norm = norm_C(&XIA, &Xia, &XIJAB, &Xijab, &XIjAb); dpd_file2_close(&XIA); dpd_file2_close(&Xia); dpd_buf4_close(&XIJAB); dpd_buf4_close(&Xijab); dpd_buf4_close(&XIjAb); } fprintf(outfile,"%7s, D(norm sigma)=%15.10lf\n", term_lbl, norm - old_norm); fflush(outfile); old_norm = norm; return; } }} // namespace psi::ccdensity ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/x_xi_intermediates.cc��������������������������������������������������������0000644�0001015�0000765�00000044072�10754663017�017740� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { /* build one-electron intermediates for the construction of the xi amplitudes */ void x_xi_intermediates(void) { dpdfile2 L1, R1, T1, I, LR1, LR2, LT1, LT2; dpdbuf4 L2, T2, R2, D, H2, I2; int L_irr, R_irr, G_irr; L_irr = params.L_irr; R_irr = params.R_irr; G_irr = params.G_irr; if (params.ref == 0) { /* RD_OO(I,J) = (2RImEf - RImFe) <jm|ef> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_VV(E,A) = (2RMnFe - RMnEf) <mn|fa> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R2Wamef_OV(n,g) = Rnmef Wgmef */ dpd_file2_init(&I, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "2RIjAb - RIjbA"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R2Wamef_OOOV = Rmnfg Weifg */ dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract444(&R2, &H2, &I2, 0, 0, -1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(Mn,eI)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 0, 10, "R2Wamef_OoOv"); dpd_buf4_close(&I2); /* R1Wamef_VV (a,e) = Rmf Wamef */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); /* R1Wmnie_OO (M,I) = Rne Wmnie */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "2WMnIe - WnMIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); } else if (params.ref == 1) { /* RD_OO(I,J) = RIMEF * <JM||EF> + RImEf <Jm|Ef> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_oo(i,j) = Rimef * <jm||ef> + RiMeF <jM|eF> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "RD_oo"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_VV(E,A) = RMNFE * <MN||FA> + RmNfE <mN|fA> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_vv(e,a) = Rmnfe * <mn||fa> + RMnFe <Mn|Fa> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "RD_vv"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "Rijab"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R2Wamef_OOVO = Rmnfg Weifg -> OOOV (mn,ie) */ dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 11, 2, 11, 0, "Z(M>N,EI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_contract444(&R2, &H2, &I2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 11, 2, 11, 0, "Z(M>N,EI)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 2, 10, "R2Wamef_OOOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjaB"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract444(&R2, &H2, &I2, 0, 0, -1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(Mn,eI)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 0, 10, "R2Wamef_OoOv"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(mN,Ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJAb"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract444(&R2, &H2, &I2, 0, 0, -1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 0, 11, 0, 11, 0, "Z(mN,Ei)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 0, 10, "R2Wamef_oOoV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 11, 2, 11, 0, "Z(m>n,ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_contract444(&R2, &H2, &I2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 11, 2, 11, 0, "Z(m>n,ei)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 2, 10, "R2Wamef_ooov"); dpd_buf4_close(&I2); /* R2Wamef_OV(n,g) = Rnmef Wgmef */ dpd_file2_init(&I, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, R_irr, 0, 1, "R2Wamef_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R1Wmnie_OO (M,I) = Rne Wmnie */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 2, 10, 0, "WMNIE"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 2, 10, 0, "Wmnie"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 10, 0, 10, 0, "WmNiE"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); /* R1Wamef_VV (a,e) = Rmf Wamef */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "WAMEF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 7, 0, "Wamef"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); } else { /* UHF */ /* RD_OO(I,J) = RIMEF * <JM||EF> + RImEf <Jm|Ef> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "RD_OO"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_oo(i,j) = Rimef * <jm||ef> + RiMeF <jM|eF> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 2, 2, "RD_oo"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract442(&R2, &D, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_VV(E,A) = RMNFE * <MN||FA> + RmNfE <mN|fA> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "RD_VV"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 5, 2, 7, 0, "RIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* RD_vv(e,a) = Rmnfe * <mn||fa> + RMnFe <Mn|Fa> */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 3, 3, "RD_vv"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 15, 12, 17, 0, "Rijab"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract442(&R2, &D, &I, 3, 3, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R2Wamef_OOVO = Rmnfg W(eifg) -> Z(mn,ei) -> OOOV (mn,ie) */ /* make using (AM,EF) so we can avoid making the (MA,EF) at all*/ dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 21, 2, 21, 0, "Z(M>N,EI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_contract444(&R2, &H2, &I2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 2, 21, 2, 21, 0, "Z(M>N,EI)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 2, 20, "R2Wamef_OOOV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 22, 25, 22, 25, 0, "Z(Mn,eI)"); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 29, 22, 29, 0, "RIjaB"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract444(&R2, &H2, &I2, 0, 0, -1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 22, 25, 22, 25, 0, "Z(Mn,eI)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 22, 24, "R2Wamef_OoOv"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 23, 26, 23, 26, 0, "Z(mN,Ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 28, 23, 28, 0, "RiJAb"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract444(&R2, &H2, &I2, 0, 0, -1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 23, 26, 23, 26, 0, "Z(mN,Ei)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 23, 27, "R2Wamef_oOoV"); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 12, 31, 12, 31, 0, "Z(m>n,ei)"); dpd_buf4_init(&R2, CC_GR, R_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_contract444(&R2, &H2, &I2, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_close(&I2); dpd_buf4_init(&I2, EOM_TMP1, R_irr, 12, 31, 12, 31, 0, "Z(m>n,ei)"); dpd_buf4_sort(&I2, EOM_TMP, pqsr, 12, 30, "R2Wamef_ooov"); dpd_buf4_close(&I2); psio_close(EOM_TMP1,0); psio_open(EOM_TMP1, PSIO_OPEN_NEW); /* R2Wamef_OV(n,g) = Rnmef Wgmef */ dpd_file2_init(&I, EOM_TMP, R_irr, 0, 1, "R2Wamef_OV"); dpd_buf4_init(&R2, CC_GR, R_irr, 0, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP, R_irr, 2, 3, "R2Wamef_ov"); dpd_buf4_init(&R2, CC_GR, R_irr, 10, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 0.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_GR, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract442(&R2, &H2, &I, 0, 0, 1.0, 1.0); dpd_buf4_close(&H2); dpd_buf4_close(&R2); dpd_file2_close(&I); /* R1Wmnie_OO (M,I) = Rne Wmnie */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 0, 0, "R1Wmnie_OO"); dpd_buf4_init(&H2, CC_HBAR, 0, 0, 20, 2, 20, 0, "WMNIE"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 22, 24, 22, 24, 0, "WMnIe"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP_XI, R_irr, 2, 2, "R1Wmnie_oo"); dpd_buf4_init(&H2, CC_HBAR, 0, 10, 30, 12, 30, 0, "Wmnie"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 23, 27, 23, 27, 0, "WmNiE"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); /* R1Wamef_VV (a,e) = Rmf Wamef */ dpd_file2_init(&I, EOM_TMP_XI, R_irr, 1, 1, "R1Wamef_VV"); dpd_buf4_init(&H2, CC_HBAR, 0, 21, 5, 21, 7, 0, "WAMEF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); dpd_file2_init(&I, EOM_TMP_XI, R_irr, 3, 3, "R1Wamef_vv"); dpd_buf4_init(&H2, CC_HBAR, 0, 31, 15, 31, 17, 0, "Wamef"); dpd_file2_init(&R1, CC_GR, R_irr, 2, 3, "Ria"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 0.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_buf4_init(&H2, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_file2_init(&R1, CC_GR, R_irr, 0, 1, "RIA"); dpd_dot24(&R1, &H2, &I, 0, 0, 1.0, 1.0); dpd_file2_close(&R1); dpd_buf4_close(&H2); dpd_file2_close(&I); } return; } }} // namespace psi::ccdensity ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccdensity/zero_pdm.cc������������������������������������������������������������������0000644�0001015�0000765�00000017450�10757640026�015671� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCDENSITY \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Frozen.h" #define EXTERN #include "globals.h" namespace psi { namespace ccdensity { void zero_onepdm(struct RHO_Params rho_params) { dpdfile2 D; int G_irr; G_irr = params.G_irr; if ( (params.ref == 0) || (params.ref == 1) ) { dpd_file2_init(&D, CC_OEI, G_irr, 0, 0, rho_params.DIJ_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 0, rho_params.Dij_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 1, 1, rho_params.DAB_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 1, 1, rho_params.Dab_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.Dia_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.Dai_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); } else if (params.ref == 2) { dpd_file2_init(&D, CC_OEI, G_irr, 0, 0, rho_params.DIJ_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 2, 2, rho_params.Dij_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 1, 1, rho_params.DAB_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 3, 3, rho_params.Dab_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.DIA_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 2, 3, rho_params.Dia_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 0, 1, rho_params.DAI_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); dpd_file2_init(&D, CC_OEI, G_irr, 2, 3, rho_params.Dai_lbl); dpd_file2_scm(&D, 0.0); dpd_file2_close(&D); } } void zero_twopdm(void) { dpdbuf4 G; int G_irr; G_irr = params.G_irr; if ( (params.ref == 0) || (params.ref == 1) ) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "Gijkl"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 0, 0, 0, 0, "GIjKl"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "Gabcd"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 5, 5, 5, 5, 0, "GAbCd"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "GIJKA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 10, 2, 10, 0, "Gijka"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GIjKa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 10, 0, 10, 0, "GiJkA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIBJA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "Gibja"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbJa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBjA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GIbjA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 10, 10, 10, 10, 0, "GiBJa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "GCIAB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 7, 11, 7, 0, "Gciab"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GCiAb"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 11, 5, 11, 5, 0, "GcIaB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "Gijab"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 0, 5, 0, 5, 0, "GIjAb"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); } else if (params.ref == 2) { dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 2, 2, 2, 0, "GIJKL"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 12, 12, 12, 12, 0, "Gijkl"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 22, 22, 22, 22, 0, "GIjKl"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 7, 7, 7, 7, 0, "GABCD"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 17, 17, 17, 17, 0, "Gabcd"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 28, 28, 28, 28, 0, "GAbCd"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 20, 2, 20, 0, "GIJKA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 12, 30, 12, 30, 0, "Gijka"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 23, 27, 23, 27, 0, "GiJkA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 20, 20, 20, 20, 0, "GIBJA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 30, 30, 30, 30, 0, "Gibja"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 24, 24, 24, 0, "GIbJa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 27, 27, 27, 27, 0, "GiBjA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 27, 24, 27, 0, "GIbjA"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 27, 24, 27, 24, 0, "GiBJa"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 21, 7, 21, 7, 0, "GCIAB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 31, 17, 31, 17, 0, "Gciab"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 26, 28, 26, 28, 0, "GCiAb"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 25, 29, 25, 29, 0, "GcIaB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 2, 7, 2, 7, 0, "GIJAB"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 12, 17, 12, 17, 0, "Gijab"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, G_irr, 24, 28, 24, 28, 0, "GIjAb"); dpd_buf4_scm(&G, 0.0); dpd_buf4_close(&G); } } }} // namespace psi::ccdensity ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111664�013340� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/amp_write.cc������������������������������������������������������������������0000644�0001015�0000765�00000015637�11112564564�015656� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Write the amplitudes from ccenergy */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { struct onestack { double value; int i; int a; }; struct twostack { double value; int i; int j; int a; int b; }; void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen); void amp_write_T1(dpdfile2 *T1, int length, const char *label, FILE *outfile); void amp_write_T2(dpdbuf4 *T2, int length, const char *label, FILE *outfile); void amp_write(void) { dpdfile2 T1; dpdbuf4 T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); amp_write_T1(&T1, params.num_amps, "\n\tLargest TIA Amplitudes:\n", outfile); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); amp_write_T2(&T2, params.num_amps, "\n\tLargest TIjAb Amplitudes:\n", outfile); dpd_buf4_close(&T2); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); amp_write_T1(&T1, params.num_amps, "\n\tLargest TIA Amplitudes:\n", outfile); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); amp_write_T1(&T1, params.num_amps, "\n\tLargest Tia Amplitudes:\n", outfile); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); amp_write_T2(&T2, params.num_amps, "\n\tLargest TIJAB Amplitudes:\n", outfile); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); amp_write_T2(&T2, params.num_amps, "\n\tLargest Tijab Amplitudes:\n", outfile); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); amp_write_T2(&T2, params.num_amps, "\n\tLargest TIjAb Amplitudes:\n", outfile); dpd_buf4_close(&T2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); amp_write_T1(&T1, params.num_amps, "\n\tLargest TIA Amplitudes:\n", outfile); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); amp_write_T1(&T1, params.num_amps, "\n\tLargest Tia Amplitudes:\n", outfile); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); amp_write_T2(&T2, params.num_amps, "\n\tLargest TIJAB Amplitudes:\n", outfile); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); amp_write_T2(&T2, params.num_amps, "\n\tLargest Tijab Amplitudes:\n", outfile); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); amp_write_T2(&T2, params.num_amps, "\n\tLargest TIjAb Amplitudes:\n", outfile); dpd_buf4_close(&T2); } } void amp_write_T1(dpdfile2 *T1, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gia; int i, I, a, A, numt1; int num2print=0; double value; struct onestack *t1stack; nirreps = T1->params->nirreps; Gia = T1->my_irrep; t1stack = (struct onestack *) malloc(length * sizeof(struct onestack)); for(m=0; m < length; m++) { t1stack[m].value = 0; t1stack[m].i = 0; t1stack[m].a = 0; } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); numt1 = 0; for(h=0; h < nirreps; h++) { numt1 += T1->params->rowtot[h] * T1->params->coltot[h^Gia]; for(i=0; i < T1->params->rowtot[h]; i++) { I = T1->params->roworb[h][i]; for(a=0; a < T1->params->coltot[h^Gia]; a++) { A = T1->params->colorb[h][a]; value = T1->matrix[h][i][a]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t1stack[m].value)) > 1e-12) { onestack_insert(t1stack, value, I, A, m, length); break; } } } } } dpd_file2_mat_close(T1); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) fprintf(outfile, "\t %3d %3d %20.10f\n", t1stack[m].i, t1stack[m].a, t1stack[m].value); free(t1stack); } void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } void amp_write_T2(dpdbuf4 *T2, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gijab, numt2; int ij, ab, i, j, a, b; int num2print=0; double value; struct twostack *t2stack; nirreps = T2->params->nirreps; Gijab = T2->file.my_irrep; t2stack = (struct twostack *) malloc(length * sizeof(struct twostack)); for(m=0; m < length; m++) { t2stack[m].value = 0; t2stack[m].i = 0; t2stack[m].j = 0; t2stack[m].a = 0; t2stack[m].b = 0; } numt2 = 0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2, h); dpd_buf4_mat_irrep_rd(T2, h); numt2 += T2->params->rowtot[h] * T2->params->coltot[h^Gijab]; for(ij=0; ij < T2->params->rowtot[h]; ij++) { i = T2->params->roworb[h][ij][0]; j = T2->params->roworb[h][ij][1]; for(ab=0; ab < T2->params->coltot[h^Gijab]; ab++) { a = T2->params->colorb[h^Gijab][ab][0]; b = T2->params->colorb[h^Gijab][ab][1]; value = T2->matrix[h][ij][ab]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t2stack[m].value)) > 1e-12) { twostack_insert(t2stack, value, i, j, a, b, m, length); break; } } } } dpd_buf4_mat_irrep_close(T2, h); } for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) fprintf(outfile, "\t%3d %3d %3d %3d %20.10f\n", t2stack[m].i, t2stack[m].j, t2stack[m].a, t2stack[m].b, t2stack[m].value); free(t2stack); } void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen) { int l; struct twostack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].j = j; stack[level].a = a; stack[level].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].j = j; stack[l+1].a = a; stack[l+1].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; } } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/analyze.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006761�10757640026�015332� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { double **Build_R(void); double **Build_U(void); void analyze(void) { int nirreps, h, i, j, a, b, ij, ab, u, v; int position, num_div, tot1, tot2, nvir, nso, nocc; double width, max, min, value, value2; double *amp_array; double **tmp, **T2trans, **T1trans; FILE *efile; dpdfile2 T1; dpdbuf4 I, T2, D; nirreps = moinfo.nirreps; num_div = 500; max = 9; min = 0; width = (max-min) / (num_div); ffile(&efile, "tamps.dat", 1); amp_array = init_array(num_div); nvir = moinfo.virtpi[0]; nocc = moinfo.occpi[0]; nso = moinfo.nso; dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_mat_irrep_init(&T2, 0); dpd_buf4_mat_irrep_rd(&T2, 0); T2trans = block_matrix(nocc*nocc, nso*nso); tmp = block_matrix(nvir, nso); tot1 = 0; tot2 = 0; for(ij=0; ij<T2.params->rowtot[0]; ij++) { C_DGEMM('n', 't', nvir, nso, nvir, 1.0, &(T2.matrix[0][ij][0]), nvir, &(moinfo.C[0][0][0]), nvir, 0.0, &(tmp[0][0]), nso); C_DGEMM('n', 'n', nso, nso, nvir, 1.0, &(moinfo.C[0][0][0]), nvir, tmp[0], nso, 0.0, T2trans[ij], nso); for(ab=0; ab<nso*nso; ab++) { value = fabs(log10(fabs(T2trans[ij][ab]))); tot2++; if ((value >= max) && (value <= (max+width))) { amp_array[num_div-1]++; tot1++; } else if ((value <= min) && (value >= (min-width))) { amp_array[0]++; tot1++; } else if ((value < max) && (value > min)) { position = (int) floor((value-min)/width); amp_array[position]++; tot1++; } } } dpd_buf4_mat_irrep_close(&T2, 0); dpd_buf4_close(&T2); free_block(tmp); free_block(T2trans); value2 = 0; for (i = num_div-1; i >= 0; i--) { value = amp_array[i] / tot1; value2 += value; fprintf(efile, "%10.5lf %lf\n", -((i)*width)-min, value); } free(amp_array); printf("Total number of converged T2 amplitudes = %d\n", tot2); printf("Number of T2 amplitudes in analysis= %d\n", tot1); fclose(efile); num_div = 40; max = 2; min = -5; width = (max-min) / (num_div); ffile(&efile, "t1amps.dat", 1); amp_array = init_array(num_div); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_print(&T1, outfile); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); /* T1trans = block_matrix(nocc, nso); C_DGEMM('n','t', nocc, nso, nvir, 1.0, &(T1.matrix[0][0][0]), nvir, &(moinfo.C[0][0][0]), nvir, 0.0, &(T1trans[0][0]), nso); */ tot1 = tot2 = 0; for(i=0; i < nocc; i++) { for(a=0; a < nso; a++) { /* value = fabs(log10(fabs(T1trans[i][a]))); */ value = log10(fabs(T1.matrix[0][i][a])); tot2++; if ((value >= max) && (value <= (max+width))) { amp_array[num_div-1]++; tot1++; } else if ((value <= min) && (value >= (min-width))) { amp_array[0]++; tot1++; } else if ((value < max) && (value > min)) { position = (int) floor((value-min)/width); amp_array[position]++; tot1++; } } } /* free_block(T1trans); */ dpd_file2_mat_close(&T1); dpd_file2_close(&T1); value2 = 0; for (i = num_div-1; i >= 0; i--) { value = amp_array[i] / tot1; value2 += value; fprintf(efile, "%10.5lf %lf\n", ((i)*width)-min, value); } free(amp_array); fclose(efile); } }} // namespace psi::ccenergy ���������������psi3/src/bin/ccenergy/AO_contribute.cc��������������������������������������������������������������0000644�0001015�0000765�00000011524�10757640026�016415� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ /*! \defgroup CCENERGY ccenergy: Compute the Coupled-Cluster Energy */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libqt/qt.h> #include <libdpd/dpd.h> namespace psi { namespace ccenergy { int AO_contribute(struct iwlbuf *InBuf, dpdbuf4 *tau1_AO, dpdbuf4 *tau2_AO) { int idx, p, q, r, s; double value; Value *valptr; Label *lblptr; int Gp, Gq, Gr, Gs, Gpr, Gps, Gqr, Gqs, Grp, Gsp, Grq, Gsq; int pr, ps, qr, qs, rp, rq, sp, sq, pq, rs; int count=0; lblptr = InBuf->labels; valptr = InBuf->values; for(idx=4*InBuf->idx; InBuf->idx < InBuf->inbuf; InBuf->idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf->idx]; /* if(fabs(value) > 1e-8) fprintf(stdout, "%d %d %d %d %20.14f\n", p, q, r, s, value); */ count++; Gp = tau1_AO->params->psym[p]; Gq = tau1_AO->params->psym[q]; Gr = tau1_AO->params->psym[r]; Gs = tau1_AO->params->psym[s]; Gpr = Grp = Gp^Gr; Gps = Gsp = Gp^Gs; Gqr = Grq = Gq^Gr; Gqs = Gsq = Gq^Gs; pq = tau1_AO->params->rowidx[p][q]; rs = tau1_AO->params->rowidx[r][s]; pr = tau1_AO->params->rowidx[p][r]; rp = tau1_AO->params->rowidx[r][p]; ps = tau1_AO->params->rowidx[p][s]; sp = tau1_AO->params->rowidx[s][p]; qr = tau1_AO->params->rowidx[q][r]; rq = tau1_AO->params->rowidx[r][q]; qs = tau1_AO->params->rowidx[q][s]; sq = tau1_AO->params->rowidx[s][q]; /* (pq|rs) */ if(tau1_AO->params->coltot[Gpr]) C_DAXPY(tau1_AO->params->coltot[Gpr], value, tau1_AO->matrix[Gpr][qs], 1, tau2_AO->matrix[Gpr][pr], 1); if(p!=q && r!=s && pq != rs) { /* (pq|sr) */ if(tau1_AO->params->coltot[Gps]) C_DAXPY(tau1_AO->params->coltot[Gps], value, tau1_AO->matrix[Gps][qr], 1, tau2_AO->matrix[Gps][ps], 1); /* (qp|rs) */ if(tau1_AO->params->coltot[Gqr]) C_DAXPY(tau1_AO->params->coltot[Gqr], value, tau1_AO->matrix[Gqr][ps], 1, tau2_AO->matrix[Gqr][qr], 1); /* (qp|sr) */ if(tau1_AO->params->coltot[Gqs]) C_DAXPY(tau1_AO->params->coltot[Gqs], value, tau1_AO->matrix[Gqs][pr], 1, tau2_AO->matrix[Gqs][qs], 1); /* (rs|pq) */ if(tau1_AO->params->coltot[Grp]) C_DAXPY(tau1_AO->params->coltot[Grp], value, tau1_AO->matrix[Grp][sq], 1, tau2_AO->matrix[Grp][rp], 1); /* (sr|pq) */ if(tau1_AO->params->coltot[Gsp]) C_DAXPY(tau1_AO->params->coltot[Gsp], value, tau1_AO->matrix[Gsp][rq], 1, tau2_AO->matrix[Gsp][sp], 1); /* (rs|qp) */ if(tau1_AO->params->coltot[Grq]) C_DAXPY(tau1_AO->params->coltot[Grq], value, tau1_AO->matrix[Grq][sp], 1, tau2_AO->matrix[Grq][rq], 1); /* (sr|qp) */ if(tau1_AO->params->coltot[Gsq]) C_DAXPY(tau1_AO->params->coltot[Gsq], value, tau1_AO->matrix[Gsq][rp], 1, tau2_AO->matrix[Gsq][sq],1 ); } else if(p!=q && r!=s && pq==rs) { /* (pq|sr) */ if(tau1_AO->params->coltot[Gps]) C_DAXPY(tau1_AO->params->coltot[Gps], value, tau1_AO->matrix[Gps][qr], 1, tau2_AO->matrix[Gps][ps], 1); /* (qp|rs) */ if(tau1_AO->params->coltot[Gqr]) C_DAXPY(tau1_AO->params->coltot[Gqr], value, tau1_AO->matrix[Gqr][ps], 1, tau2_AO->matrix[Gqr][qr], 1); /* (qp|sr) */ if(tau1_AO->params->coltot[Gqs]) C_DAXPY(tau1_AO->params->coltot[Gqs], value, tau1_AO->matrix[Gqs][pr], 1, tau2_AO->matrix[Gqs][qs], 1); } else if(p!=q && r==s) { /* (qp|rs) */ if(tau1_AO->params->coltot[Gqr]) C_DAXPY(tau1_AO->params->coltot[Gqr], value, tau1_AO->matrix[Gqr][ps], 1, tau2_AO->matrix[Gqr][qr], 1); /* (rs|pq) */ if(tau1_AO->params->coltot[Grp]) C_DAXPY(tau1_AO->params->coltot[Grp], value, tau1_AO->matrix[Grp][sq], 1, tau2_AO->matrix[Grp][rp], 1); /* (rs|qp) */ if(tau1_AO->params->coltot[Grq]) C_DAXPY(tau1_AO->params->coltot[Grq], value, tau1_AO->matrix[Grq][sp], 1, tau2_AO->matrix[Grq][rq], 1); } else if(p==q && r!=s) { /* (pq|sr) */ if(tau1_AO->params->coltot[Gps]) C_DAXPY(tau1_AO->params->coltot[Gps], value, tau1_AO->matrix[Gps][qr], 1, tau2_AO->matrix[Gps][ps], 1); /* (rs|pq) */ if(tau1_AO->params->coltot[Grp]) C_DAXPY(tau1_AO->params->coltot[Grp], value, tau1_AO->matrix[Grp][sq], 1, tau2_AO->matrix[Grp][rp], 1); /* (sr|pq) */ if(tau1_AO->params->coltot[Gsp]) C_DAXPY(tau1_AO->params->coltot[Gsp], value, tau1_AO->matrix[Gsp][rq], 1, tau2_AO->matrix[Gsp][sp], 1); } else if(p==q && r==s && pq != rs) { /* (rs|pq) */ if(tau1_AO->params->coltot[Grp]) C_DAXPY(tau1_AO->params->coltot[Grp], value, tau1_AO->matrix[Grp][sq], 1, tau2_AO->matrix[Grp][rp], 1); } } return count; } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/BT2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000022470�10757640026�014251� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void BT2(void) { int h; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 B_anti, B; dpdbuf4 tauIJAB, tauijab, tauIjAb; dpdbuf4 Z1,Z2; dpdbuf4 tau_a, tau_s, tau; dpdbuf4 B_a, B_s; dpdbuf4 S, A; double **B_diag, **tau_diag; int ij, Gc, C, c, cc; int nbuckets, rows_per_bucket, rows_left, m, row_start, ab, cd, dc, d; int nrows, ncols, nlinks; psio_address next; if(params.ref == 0) { /** RHF **/ if(!strcmp(params.abcd,"OLD")) { #ifdef TIME_CCENERGY timer_on("ABCD:old"); #endif dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort_axpy(&Z1, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z1); dpd_buf4_close(&B); dpd_buf4_close(&tauIjAb); #ifdef TIME_CCENERGY timer_off("ABCD:old"); #endif } else if(!strcmp(params.abcd,"NEW")) { #ifdef TIME_CCENERGY timer_on("ABCD:new"); #endif /* tau(-)(ij,ab) (i>j, a>b) = tau(ij,ab) - tau(ij,ba) */ dpd_buf4_init(&tau_a, CC_TAMPS, 0, 4, 9, 0, 5, 1, "tauIjAb"); dpd_buf4_copy(&tau_a, CC_TAMPS, "tau(-)(ij,ab)"); dpd_buf4_close(&tau_a); /* tau_s(+)(ij,ab) (i>=j, a>=b) = tau(ij,ab) + tau(ij,ba) */ dpd_buf4_init(&tau_a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_copy(&tau_a, CC_TMP0, "tau(+)(ij,ab)"); dpd_buf4_sort_axpy(&tau_a, CC_TMP0, pqsr, 0, 5, "tau(+)(ij,ab)", 1); dpd_buf4_close(&tau_a); dpd_buf4_init(&tau_a, CC_TMP0, 0, 3, 8, 0, 5, 0, "tau(+)(ij,ab)"); dpd_buf4_copy(&tau_a, CC_TAMPS, "tau(+)(ij,ab)"); dpd_buf4_close(&tau_a); #ifdef TIME_CCENERGY timer_on("ABCD:S"); #endif dpd_buf4_init(&tau_s, CC_TAMPS, 0, 3, 8, 3, 8, 0, "tau(+)(ij,ab)"); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, CC_TMP0, 0, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_contract444(&B_s, &tau_s, &S, 0, 0, 0.5, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_buf4_close(&tau_s); #ifdef TIME_CCENERGY timer_off("ABCD:S"); #endif /* tau_diag(ij,c) = 2 * tau(ij,cc)*/ dpd_buf4_init(&tau, CC_TAMPS, 0, 3, 8, 3, 8, 0, "tau(+)(ij,ab)"); dpd_buf4_mat_irrep_init(&tau, 0); dpd_buf4_mat_irrep_rd(&tau, 0); tau_diag = dpd_block_matrix(tau.params->rowtot[0], moinfo.nvirt); for(ij=0; ij < tau.params->rowtot[0]; ij++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = C + moinfo.vir_off[Gc]; cc = tau.params->colidx[c][c]; tau_diag[ij][c] = tau.matrix[0][ij][cc]; } dpd_buf4_mat_irrep_close(&tau, 0); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, CC_TMP0, 0, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_buf4_mat_irrep_init(&S, 0); dpd_buf4_mat_irrep_rd(&S, 0); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + moinfo.nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; B_diag = dpd_block_matrix(rows_per_bucket, moinfo.nvirt); next = PSIO_ZERO; ncols = tau.params->rowtot[0]; nlinks = moinfo.nvirt; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; nrows = rows_per_bucket; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } if(rows_left) { row_start = m * rows_per_bucket; nrows = rows_left; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } dpd_buf4_mat_irrep_wrt(&S, 0); dpd_buf4_mat_irrep_close(&S, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_free_block(B_diag, rows_per_bucket, moinfo.nvirt); dpd_free_block(tau_diag, tau.params->rowtot[0], moinfo.nvirt); dpd_buf4_close(&tau); #ifdef TIME_CCENERGY timer_on("ABCD:A"); #endif dpd_buf4_init(&tau_a, CC_TAMPS, 0, 4, 9, 4, 9, 0, "tau(-)(ij,ab)"); dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_init(&A, CC_TMP0, 0, 9, 4, 9, 4, 0, "A(ab,ij)"); dpd_contract444(&B_a, &tau_a, &A, 0, 0, 0.5, 0); dpd_buf4_close(&A); dpd_buf4_close(&B_a); dpd_buf4_close(&tau_a); #ifdef TIME_CCENERGY timer_off("ABCD:A"); #endif #ifdef TIME_CCENERGY timer_on("ABCD:axpy"); #endif dpd_buf4_init(&S, CC_TMP0, 0, 5, 0, 8, 3, 0, "S(ab,ij)"); dpd_buf4_sort_axpy(&S, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_close(&S); dpd_buf4_init(&A, CC_TMP0, 0, 5, 0, 9, 4, 0, "A(ab,ij)"); dpd_buf4_sort_axpy(&A, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_close(&A); #ifdef TIME_CCENERGY timer_off("ABCD:axpy"); timer_off("ABCD:new"); #endif } } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&B_anti, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); /* AA and BB terms */ dpd_buf4_init(&Z1, CC_TMP0, 0, 7, 2, 7, 2, 0, "Z(ab,ij)"); dpd_contract444(&B_anti, &tauIJAB, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtIJAB, 1); dpd_buf4_close(&Z2); dpd_contract444(&B_anti, &tauijab, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtijab, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /* AB term */ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 5, "Z(Ij,Ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z2, &newtIjAb, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_close(&B_anti); dpd_buf4_close(&B); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 7, 2, 7, 2, 0, "Z(AB,IJ)"); dpd_contract444(&B, &tauIJAB, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(IJ,AB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(IJ,AB)"); dpd_buf4_axpy(&Z2, &newtIJAB, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 17, 12, 17, 12, 0, "Z(ab,ij)"); dpd_contract444(&B, &tauijab, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 12, 17, "Z(ij,ab)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 12, 17, 12, 17, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtijab, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 22, 28, 22, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z2, &newtIjAb, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/BT2_AO.cc���������������������������������������������������������������������0000644�0001015�0000765�00000050365�10757640026�014634� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void halftrans(dpdbuf4 *Buf1, int dpdnum1, dpdbuf4 *Buf2, int dpdnum2, double ***C1, double ***C2, int nirreps, int **mo_row, int **so_row, int *mospi_left, int *mospi_right, int *sospi, int type, double alpha, double beta); int AO_contribute(struct iwlbuf *InBuf, dpdbuf4 *tau1_AO, dpdbuf4 *tau2_AO); void BT2_AO(void) { int h, nirreps, i, Gc, Gd, Ga, Gb, ij; double ***C, **X; double ***Ca, ***Cb; int *sopi, *virtpi; int *avirtpi, *bvirtpi; int **T2_cd_row_start, **T2_pq_row_start, offset, cd, pq; int **T2_CD_row_start, **T2_Cd_row_start; dpdbuf4 tau, t2, tau1_AO, tau2_AO; dpdfile4 T; psio_address next; struct iwlbuf InBuf; int lastbuf; double tolerance=1e-14; double **integrals; int **tau1_cols, **tau2_cols, *num_ints; int counter=0, counterAA=0, counterBB=0, counterAB=0; nirreps = moinfo.nirreps; sopi = moinfo.sopi; T2_pq_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_pq_row_start[h][Gc] = offset; offset += sopi[Gc] * sopi[Gd]; } } if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ virtpi = moinfo.virtpi; C = moinfo.C; T2_cd_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_cd_row_start[h][Gc] = offset; offset += virtpi[Gc] * virtpi[Gd]; } } } else if(params.ref == 2) { /** UHF **/ avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; Ca = moinfo.Ca; Cb = moinfo.Cb; T2_CD_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_CD_row_start[h][Gc] = offset; offset += avirtpi[Gc] * avirtpi[Gd]; } } T2_cd_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_cd_row_start[h][Gc] = offset; offset += bvirtpi[Gc] * bvirtpi[Gd]; } } T2_Cd_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_Cd_row_start[h][Gc] = offset; offset += avirtpi[Gc] * bvirtpi[Gd]; } } } if(params.ref == 0) { /** RHF **/ if(!strcmp(params.aobasis,"DISK")) { dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); halftrans(&tau, 0, &tau1_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 5, 0, "tauPqIj (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counter += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counter += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <ab||cd> --> T2\n", counter); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 0, 5, "tauIjPq (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); halftrans(&t2, 0, &tau2_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 1, 1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); } else if(!strcmp(params.aobasis,"DIRECT")) { dpd_file4_init(&T, CC_TAMPS, 0, 0, 5, "tauIjAb"); dpd_file4_cache_del(&T); dpd_file4_close(&T); dpd_file4_init(&T, CC_TAMPS, 0, 0, 5, "New tIjAb"); dpd_file4_cache_del(&T); dpd_file4_close(&T); /* close the CC_TAMPS file for cints to use it */ psio_close(CC_TAMPS, 1); system("cints --cc_bt2"); /* re-open CCC_TAMPS for remaining terms */ psio_open(CC_TAMPS, PSIO_OPEN_OLD); } } else if(params.ref == 1) { /** ROHF **/ /************************************* AA *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauIJPQ (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); halftrans(&tau, 0, &tau1_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 1, "tauIJPQ (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 5, 2, "tauPQIJ (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterAA += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterAA += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <AB||CD> --> T2\n", counterAA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 2, 5, "tauIJPQ (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauIJPQ (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); halftrans(&t2, 0, &tau2_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* BB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauijpq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauijab"); halftrans(&tau, 0, &tau1_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 1, "tauijpq (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 5, 2, "taupqij (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "taupqij (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "taupqij (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterBB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterBB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <ab||cd> --> T2\n", counterBB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "taupqij (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 2, 5, "tauijpq (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauijpq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); halftrans(&t2, 0, &tau2_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* AB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); halftrans(&tau, 0, &tau1_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 5, 0, "tauPqIj (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterAB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterAB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <Ab|Cd> --> T2\n", counterAB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 0, 5, 0, 0, "tauPqIj (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 0, 5, "tauIjPq (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjPq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); halftrans(&t2, 0, &tau2_AO, 1, C, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, virtpi, sopi, 1, 1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ /************************************* AA *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauIJPQ (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tauIJAB"); halftrans(&tau, 0, &tau1_AO, 1, Ca, Ca, nirreps, T2_CD_row_start, T2_pq_row_start, avirtpi, avirtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 2, 5, 2, 5, 1, "tauIJPQ (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 5, 2, "tauPQIJ (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterAA += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterAA += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <AB||CD> --> T2\n", counterAA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 5, 2, 5, 2, 0, "tauPQIJ (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 2, 5, "tauIJPQ (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 2, 5, 2, 5, 0, "tauIJPQ (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); halftrans(&t2, 0, &tau2_AO, 1, Ca, Ca, nirreps, T2_CD_row_start, T2_pq_row_start, avirtpi, avirtpi, sopi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* BB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 12, 15, 12, 15, 0, "tauijpq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tauijab"); halftrans(&tau, 0, &tau1_AO, 1, Cb, Cb, nirreps, T2_cd_row_start, T2_pq_row_start, bvirtpi, bvirtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 12, 15, 12, 15, 1, "tauijpq (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 15, 12, "taupqij (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 15, 12, 15, 12, 0, "taupqij (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 15, 12, 15, 12, 0, "taupqij (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterBB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterBB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <ab||cd> --> T2\n", counterBB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 15, 12, 15, 12, 0, "taupqij (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 12, 15, "tauijpq (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 12, 15, 12, 15, 0, "tauijpq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); halftrans(&t2, 0, &tau2_AO, 1, Cb, Cb, nirreps, T2_cd_row_start, T2_pq_row_start, bvirtpi, bvirtpi, sopi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* AB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjPq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); halftrans(&tau, 0, &tau1_AO, 1, Ca, Cb, nirreps, T2_Cd_row_start, T2_pq_row_start, avirtpi, bvirtpi, sopi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); /* Transpose tau1_AO for better memory access patterns */ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjPq (1)"); dpd_buf4_sort(&tau1_AO, CC_TMP0, rspq, 28, 22, "tauPqIj (1)"); dpd_buf4_close(&tau1_AO); dpd_buf4_init(&tau1_AO, CC_TMP0, 0, 28, 22, 28, 22, 0, "tauPqIj (1)"); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 28, 22, 28, 22, 0, "tauPqIj (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lastbuf = InBuf.lastbuf; counterAB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; counterAB += AO_contribute(&InBuf, &tau1_AO, &tau2_AO); } iwl_buf_close(&InBuf, 1); if(params.print & 2) fprintf(outfile, " *** Processed %d SO integrals for <Ab|Cd> --> T2\n", counterAB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); /* Transpose tau2_AO for the half-backtransformation */ dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_TMP0, 0, 28, 22, 28, 22, 0, "tauPqIj (2)"); dpd_buf4_sort(&tau2_AO, CC_TAMPS, rspq, 22, 28, "tauIjPq (2)"); dpd_buf4_close(&tau2_AO); dpd_buf4_init(&tau2_AO, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjPq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); halftrans(&t2, 0, &tau2_AO, 1, Ca, Cb, nirreps, T2_Cd_row_start, T2_pq_row_start, avirtpi, bvirtpi, sopi, 1, 1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); } /** UHF **/ if(params.ref == 0 || params.ref == 1) free_int_matrix(T2_cd_row_start); else if(params.ref ==2) { free_int_matrix(T2_CD_row_start); free_int_matrix(T2_cd_row_start); free_int_matrix(T2_Cd_row_start); } free_int_matrix(T2_pq_row_start); /* Reset the default dpd back to 0 --- this stuff gets really ugly */ dpd_set_default(0); } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cache.cc����������������������������������������������������������������������0000644�0001015�0000765�00000037532�10757640026�014732� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace ccenergy { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_faeT2.cc������������������������������������������������������������������0000644�0001015�0000765�00000012031�10757640026�015342� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc2_faeT2(void) { dpdfile2 fme, fME, Fae, FAE, fAE, tIA, tia; dpdbuf4 tIjAb, tIJAB, tijab, t2; dpdbuf4 newtIjAb, newtIJAB, newtijab; dpdbuf4 Zijab; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fAE, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&Zijab, CC_TMP0, 0, 0, 5, 0, 5, 0, "CC2 ZIjAb"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&tIjAb, &fAE, &Zijab, 3, 1, 0, 1, 0); dpd_buf4_close(&tIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&Zijab, &newtIjAb, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_sort_axpy(&Zijab, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Zijab); dpd_file2_close(&fAE); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&fME, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&FAE, CC2_HET1, 0, 1, 1, "CC2 FAE"); dpd_contract222(&tIA, &fME, &FAE, 1, 1, -1, 0); dpd_file2_close(&FAE); dpd_file2_close(&fME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&fme, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&Fae, CC2_HET1, 0, 1, 1, "CC2 Fae"); dpd_contract222(&tia, &fme, &Fae, 1, 1, -1, 0); dpd_file2_close(&Fae); dpd_file2_close(&fme); dpd_file2_close(&tia); /** F -> tijab **/ dpd_file2_init(&FAE, CC2_HET1, 0, 1, 1, "CC2 FAE"); dpd_file2_init(&Fae, CC2_HET1, 0, 1, 1, "CC2 Fae"); /*** AA ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAE, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAE, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&t2); dpd_buf4_close(&tIJAB); /*** BB ***/ dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tijab, &Fae, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Fae, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&newtijab); dpd_buf4_close(&t2); dpd_buf4_close(&tijab); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_contract424(&tIjAb, &Fae, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAE, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&tIjAb); dpd_file2_close(&FAE); dpd_file2_close(&Fae); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&fME, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&FAE, CC2_HET1, 0, 1, 1, "CC2 FAE"); dpd_contract222(&tIA, &fME, &FAE, 1, 1, -1, 0); dpd_file2_close(&FAE); dpd_file2_close(&fME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&fme, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&Fae, CC2_HET1, 0, 3, 3, "CC2 Fae"); dpd_contract222(&tia, &fme, &Fae, 1, 1, -1, 0); dpd_file2_close(&Fae); dpd_file2_close(&fme); dpd_file2_close(&tia); /** F -> tijab **/ dpd_file2_init(&FAE, CC2_HET1, 0, 1, 1, "CC2 FAE"); dpd_file2_init(&Fae, CC2_HET1, 0, 3, 3, "CC2 Fae"); /*** AA ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAE, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAE, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&t2); /*** BB ***/ dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&tijab, &Fae, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Fae, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_close(&tijab); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&newtijab); dpd_buf4_close(&t2); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_contract424(&tIjAb, &Fae, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAE, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&tIjAb); dpd_file2_close(&FAE); dpd_file2_close(&Fae); } } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_fmiT2.cc������������������������������������������������������������������0000644�0001015�0000765�00000012037�10757640026�015370� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc2_fmiT2(void) { dpdfile2 fia, fIA, Fmi, FMI, fMI, tIA, tia; dpdbuf4 tIjAb, tIJAB, tijab, t2; dpdbuf4 newtIjAb, newtIJAB, newtijab; dpdbuf4 Zijab; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fMI, CC_OEI, 0, 0, 0, "fIJ"); dpd_buf4_init(&Zijab, CC_TMP0, 0, 0, 5, 0, 5, 0, "CC2 ZIjAb"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&fMI, &tIjAb, &Zijab, 0, 0, 0, -1, 0); dpd_buf4_close(&tIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&Zijab, &newtIjAb, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_sort_axpy(&Zijab, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Zijab); dpd_file2_close(&fMI); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&FMI, CC2_HET1, 0, 0, 0, "CC2 FMI"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 1, 0); dpd_file2_close(&FMI); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&Fmi, CC2_HET1, 0, 0, 0, "CC2 Fmi"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 1, 0); dpd_file2_close(&Fmi); dpd_file2_close(&fia); dpd_file2_close(&tia); /** F -> tijab **/ dpd_file2_init(&FMI, CC2_HET1, 0, 0, 0, "CC2 FMI"); dpd_file2_init(&Fmi, CC2_HET1, 0, 0, 0, "CC2 Fmi"); /*** AA ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMI, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMI, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&t2); dpd_buf4_close(&tIJAB); /*** BB ***/ dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tijab, &Fmi, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmi, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&newtijab); dpd_buf4_close(&t2); dpd_buf4_close(&tijab); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_contract424(&tIjAb, &Fmi, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMI, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&tIjAb); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&FMI, CC2_HET1, 0, 0, 0, "CC2 FMI"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 1, 0); dpd_file2_close(&FMI); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&Fmi, CC2_HET1, 0, 2, 2, "CC2 Fmi"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 1, 0); dpd_file2_close(&Fmi); dpd_file2_close(&fia); dpd_file2_close(&tia); /** tijab <- Fmi **/ dpd_file2_init(&FMI, CC2_HET1, 0, 0, 0, "CC2 FMI"); dpd_file2_init(&Fmi, CC2_HET1, 0, 2, 2, "CC2 Fmi"); /*** AA ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMI, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMI, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&t2); /*** BB ***/ dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract424(&tijab, &Fmi, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmi, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_close(&tijab); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&newtijab); dpd_buf4_close(&t2); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_contract424(&tIjAb, &Fmi, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMI, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&tIjAb); dpd_file2_close(&Fmi); dpd_file2_close(&FMI); } } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_t2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000002204�11112564564�014725� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void dijabT2(void); void cc2_faeT2(void); void cc2_fmiT2(void); void cc2_WmbijT2(void); void cc2_WabeiT2(void); void DT2(void); void status(const char *s, FILE *out); void cc2_t2_build(void) { DT2(); if((params.ref == 0) || params.t2_coupled) { /** RHF or ROHF with coupled T2's **/ #ifdef TIME_CCENERGY timer_on("fT2", outfile); #endif cc2_faeT2(); cc2_fmiT2(); if(params.print & 2) status("f -> T2", outfile); #ifdef TIME_CCENERGY timer_off("fT2", outfile); #endif } #ifdef TIME_CCENERGY timer_on("WmbijT2", outfile); #endif cc2_WmbijT2(); if(params.print & 2) status("Wmbij -> T2", outfile); #ifdef TIME_CCENERGY timer_off("WmbijT2", outfile); #endif #ifdef TIME_CCENERGY timer_on("WabeiT2", outfile); #endif cc2_WabeiT2(); if(params.print & 2) status("Wabei -> T2", outfile); #ifdef TIME_CCENERGY timer_off("WabeiT2", outfile); #endif } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_Wabei.cc������������������������������������������������������������������0000644�0001015�0000765�00000033400�10754663017�015435� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc2_Wabei(): Compute the Wabei matrix from CC2 theory, which is ** given in spin orbitals as: ** ** Wabei = <ab||ei> - P(ab) t_m^a <mb||ei> + t_i^f <ab||ef> ** - P(ab) t_i^f t_m^b <am||ef> + t_m^a t_n^b <mn||ei> ** + t_m^a t_i^f t_n^b <mn||ef> ** ** The basic strategy for this code is to generate two intermediate ** quantities, Z1(Ab,EI) and Z2(Ei,Ab), which are summed in the final ** step to give the complete W(Ei,Ab) intermediate. This is sorted ** to W(iE,bA) storage for use in the triples equations. ** ** TDC, Feb 2004 */ void purge_cc2_Wabei(void); void cc2_Wabei_build(void) { int omit = 0; int e, E; int Gef, Gab, Gei, Ge, Gf, Gi; int nrows, ncols, nlinks; dpdfile2 t1, tIA, tia; dpdbuf4 Z, Z1, Z2, Z3; dpdbuf4 B, C, D, F, W; #ifdef TIME_CCENERGY timer_on("F->Wabei"); #endif if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&F); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* W(A>B,EI) <--- <AB||EI> */ /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WaBeI (aB,eI)"); dpd_buf4_close(&F); } else if (params.ref == 2) { /* UHF */ /* W(A>B,EI) <--- <AB||EI> */ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 7, 21, "CC2 WABEI (A>B,EI)"); dpd_buf4_close(&F); /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31,15, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 17, 31, "CC2 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_close(&F); /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_sort(&F, CC_TMP0, psrq, 29, 25, "CC2 WaBeI (aB,eI)"); dpd_buf4_close(&F); } #ifdef TIME_CCENERGY timer_off("F->Wabei"); timer_on("B->Wabei"); #endif if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&t1); dpd_file2_mat_rd(&t1); /* WEbEi <-- <Ab|Ef> * t(i,f) */ /* Plus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 8, 11, 8, 0, "Z1(ei,a>=b)"); dpd_buf4_scm(&Z1, 0); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z1.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z1.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z1.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z1.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z1, Gei, Z1.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z1.matrix[Gef], moinfo.occpi[Gi], Z1.params->coltot[Gei]); } } dpd_buf4_close(&Z1); dpd_buf4_close(&B); /* Minus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 9, 11, 9, 0, "Z2(ei,a>=b)"); dpd_buf4_scm(&Z2, 0); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z2.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z2.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z2.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z2.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z2, Gei, Z2.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z2.matrix[Gef], moinfo.occpi[Gi], Z2.params->coltot[Gei]); } } dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_file2_mat_close(&t1); dpd_file2_close(&t1); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 8, 0, "Z1(ei,a>=b)"); dpd_buf4_axpy(&Z1, &W, 0.5); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 9, 0, "Z2(ei,a>=b)"); dpd_buf4_axpy(&Z2, &W, 0.5); dpd_buf4_close(&Z2); dpd_buf4_close(&W); } else if (params.ref == 1) { /* ROHF */ /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 28, 24, 28, 24, 0, "CC2 ZBaIe (Ba,Ie)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract244(&tIA, &B, &Z, 1, 2, 1, 0.5, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 29, 25, "CC2 WaBeI (aB,eI)", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } #ifdef TIME_CCENERGY timer_off("B->Wabei"); timer_on("Wabei_sort"); #endif if (params.ref == 0) { /* RHF */ dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_buf4_scm(&W, 0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_sort_axpy(&W, CC2_HET1, rspq, 5, 11, "CC2 WAbEi", 1); dpd_buf4_close(&W); } if (params.ref == 1) { /* ROHF */ /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WaBeI (eI,aB)"); dpd_buf4_close(&W); /* purge before final sort */ /* purge_cc2_Wabei(); */ } else if (params.ref == 2) { /* UHF */ /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 21, 7, "CC2 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 31, 17, "CC2 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 26, 28, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 25, 29, "CC2 WaBeI (eI,aB)"); dpd_buf4_close(&W); } #ifdef TIME_CCENERGY timer_off("Wabei_sort"); #endif } void purge_cc2_Wabei(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wabei matrix elements */ dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 WABEI (EI,A>B)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; esym = W.params->psym[e]; E = e - vir_off[esym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 Wabei (ei,a>b)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { i = W.params->roworb[h][ei][1]; isym = W.params->qsym[i]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { if (I >= (occpi[isym] - openpi[isym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WAbEi (Ei,Ab)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; i = W.params->roworb[h][ei][1]; esym = W.params->psym[e]; isym = W.params->qsym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; if ((E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) || (A >= (virtpi[asym] - openpi[asym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WaBeI (eI,aB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { for(ab=0; ab<W.params->coltot[h]; ab++) { b = W.params->colorb[h][ab][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_WabeiT2.cc����������������������������������������������������������������0000644�0001015�0000765�00000012137�10757640026�015645� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc2_WabeiT2(void) { int rowx, colx, rowz, colz, ab; int GX, GZ, Ge, Gi, Gj, hxbuf, hzbuf; dpdfile2 t1, tia, tIA; dpdbuf4 Z, W, X; dpdbuf4 t2, t2a, t2b, tIJAB, tijab, tIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 5, 0, 5, 0, 0, "CC2 ZAbIj"); dpd_buf4_init(&X, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_contract244(&t1, &X, &Z, 1, 2, 1, 1, 0); dpd_buf4_sort_axpy(&Z, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_sort_axpy(&Z, CC_TAMPS, srqp, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 11, 7, 11, 7, 0, "CC2 WABEI (EI,A>B)"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract244(&tIA, &W, &t2, 1, 0, 0, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2a, &tIJAB, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&W); /*** BB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 11, 7, 11, 7, 0, "CC2 Wabei (ei,a>b)"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract244(&tia, &W, &t2, 1, 0, 0, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&t2a, &tijab, 1); dpd_buf4_close(&tijab); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&W); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&W, CC2_HET1, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_contract244(&tIA, &W, &tIjAb, 1, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&tIjAb); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "CC2 ZjIbA"); dpd_buf4_init(&W, CC2_HET1, 0, 11, 5, 11, 5, 0, "CC2 WaBeI (eI,aB)"); dpd_contract244(&tia, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 21, 7, 21, 7, 0, "CC2 WABEI (EI,A>B)"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract244(&tIA, &W, &t2, 1, 0, 0, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2a, &tIJAB, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&W); dpd_buf4_close(&tIJAB); /*** BB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 31, 17, 31, 17, 0, "CC2 Wabei (ei,a>b)"); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract244(&tia, &W, &t2, 1, 0, 0, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 10, 17, "T (ji,a>b)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ji,a>b)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&t2a, &tijab, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&W); dpd_buf4_close(&tijab); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&W, CC2_HET1, 0, 26, 28, 26, 28, 0, "CC2 WAbEi (Ei,Ab)"); dpd_contract244(&tIA, &W, &tIjAb, 1, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&tIjAb); dpd_buf4_init(&Z, CC_TMP0, 0, 23, 29, 23, 29, 0, "CC2 ZjIbA"); dpd_buf4_init(&W, CC2_HET1, 0, 25, 29, 25, 29, 0, "CC2 WaBeI (eI,aB)"); dpd_contract244(&tia, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 22, 28, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_WabijT2.cc����������������������������������������������������������������0000644�0001015�0000765�00000002534�10757640026�015652� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc2_WabijT2(void) { dpdbuf4 W; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&W, CC2_HET1, 0, 0, 5, 0, 5, 0, "CC2 WAbIj (Ij,Ab)"); dpd_buf4_copy(&W, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&W); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&W, CC2_HET1, 0, 2, 7, 2, 7, 0, "CC2 Wabij (i>j,a>b)"); dpd_buf4_copy(&W, CC_TAMPS, "New tIJAB"); dpd_buf4_copy(&W, CC_TAMPS, "New tijab"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 0, 5, 0, 5, 0, "CC2 WAbIj (Ij,Ab)"); dpd_buf4_copy(&W, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&W); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&W, CC2_HET1, 0, 2, 7, 2, 7, 0, "CC2 WABIJ (I>J,A>B)"); dpd_buf4_copy(&W, CC_TAMPS, "New tIJAB"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 12, 17, 12, 17, 0, "CC2 Wabij (i>j,a>b)"); dpd_buf4_copy(&W, CC_TAMPS, "New tijab"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 22, 28, 22, 28, 0, "CC2 WAbIj (Ij,Ab)"); dpd_buf4_copy(&W, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&W); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_Wmbij.cc������������������������������������������������������������������0000644�0001015�0000765�00000051360�10757640026�015461� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void purge_cc2_Wmbij(void); void cc2_Wmbij_build(void) { dpdfile2 t1, tIA, tia; dpdbuf4 E, D, C, F; dpdbuf4 W, W1; dpdbuf4 Z, Z1; dpdbuf4 X; if(params.ref == 0) { /** RHF **/ /* W(Mb,Ij) <-- <Mb|Ij> */ dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_buf4_copy(&E, CC2_HET1, "CC2 WMbIj"); dpd_buf4_close(&E); } else if(params.ref == 1) { /** ROHF **/ /** W(MB,I>J) <--- <MB||IJ> **/ /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 2, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 2, "CC2 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 0, "CC2 WMbIj"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); } else if(params.ref == 2) { /*** UHF ***/ /** W(MB,I>J) <--- <MB||IJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 20, 2, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_close(&E); /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 30, 12, "CC2 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 24, 22, "CC2 WMbIj"); dpd_buf4_close(&E); /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 27, 23, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* W(Mb,Ij) <-- -t(n,b) * W(Mn,Ij) */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&W1, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract424(&W1, &t1, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&W1); dpd_buf4_close(&W); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 20, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 20, 0, 20, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 20, 0, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 30, 10, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 30, 10, 30, 10, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 30, 10, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* W(Mb,Ij) <-- +P(ij) t(I,E) * <Mb||Ej> */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &t1, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "CC2 ZMbIj (jM,bI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z, CC2_HET1, qrsp, 10, 0, "CC2 WMbIj", 1); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 0, 11, 0, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -0.5, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 10, 0, "CC2 WmBiJ (mB,iJ)", 1); dpd_buf4_close(&Z1); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC2_HET1, 0, 10, 12, 12, 12, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&Z, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 22, 26, 22, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -0.5, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 27, 23, "CC2 WmBiJ (mB,iJ)", 1); dpd_buf4_close(&Z1); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* Z(Mb,Ej) = <Mb|Ej> + t(j,f) * <Mb|Ef> */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj (Mb,Ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_close(&Z); /* W(Mb,Ij) <-- t(I,E) * Z(Mb,Ej) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "CC2 ZMbIj"); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj (Mb,Ej)"); dpd_contract244(&t1, &Z1, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 20, 0, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 30, 10, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 1) { /** ROHF **/ /* do purge before sort */ purge_cc2_Wmbij(); /* do final sort to get (Ij,Mb) */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 10, "CC2 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 10, "CC2 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_sort(&W, CC2_HET1, rspq, 0, 10, "CC2 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 0, 10, "CC2 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&W, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 20, "CC2 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 12, 30, "CC2 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_sort(&W, CC2_HET1, rspq, 22, 24, "CC2 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 23, 27, "CC2 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); } } void purge_cc2_Wmbij(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC2_HET1, 0, 10, 2,"CC2 WMBIJ (MB,I>J)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { b = W.params->roworb[h][mb][1]; bsym = W.params->qsym[b]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 2,"CC2 Wmbij (mb,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 0,"CC2 WMbIj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { for(ij=0; ij<W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if (J >= (occpi[jsym] - openpi[jsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 0,"CC2 WmBiJ (mB,iJ)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; b = W.params->roworb[h][mb][1]; msym = W.params->psym[m]; bsym = W.params->qsym[b]; M = m - occ_off[msym]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; isym = W.params->rsym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc2_WmbijT2.cc����������������������������������������������������������������0000644�0001015�0000765�00000011760�10757640026�015667� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc2_WmbijT2(void) { dpdfile2 t1, tia, tIA; dpdbuf4 Z, W; dpdbuf4 t2, t2a, t2b, tIJAB, tijab, tIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 5, 0, 5, 0, 0, "CC2 ZAbIj"); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_contract244(&t1, &W, &Z, 0, 0, 0, -1, 0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_sort_axpy(&Z, CC_TAMPS, srqp, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract244(&tIA, &W, &t2, 0, 0, 1, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2a, &tIJAB, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&t2a); dpd_buf4_close(&W); /*** BB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract244(&tia, &W, &t2, 0, 0, 1, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&t2a, &tijab, 1); dpd_buf4_close(&tijab); dpd_buf4_close(&t2a); dpd_buf4_close(&W); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_contract244(&tIA, &W, &tIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&tIjAb); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "CC2 ZjIbA"); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_contract244(&tia, &W, &Z, 0, 0, 1, -1, 0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract244(&tIA, &W, &t2, 0, 0, 1, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&t2a, &tIJAB, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&W); dpd_buf4_close(&tIJAB); /*** BB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract244(&tia, &W, &t2, 0, 0, 1, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 12, 15, "T (i>j,ba)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ba)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&t2a, &tijab, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&W); dpd_buf4_close(&tijab); /*** AB ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_contract244(&tIA, &W, &tIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&tIjAb); dpd_buf4_init(&Z, CC_TMP0, 0, 23, 29, 23, 29, 0, "CC2 ZjIbA"); dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_contract244(&tia, &W, &Z, 0, 0, 1, -1, 0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 22, 28, "New tIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } } }} // namespace psi::ccenergy ����������������psi3/src/bin/ccenergy/cc2_Wmnij.cc������������������������������������������������������������������0000644�0001015�0000765�00000030625�10754663017�015500� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "MOInfo.h" #include "globals.h" namespace psi { namespace ccenergy { /* cc2_Wmnij(): Compute the Wmnij matrix from CC2 theory, which is ** given in spin-orbitals as: ** ** Wmnij = <mn||ij> + P(ij) t_j^e <mn||ie> + t_i^e t_j^f <mn||ef> ** ** TDC, Feb 2004 */ void purge_cc2_Wmnij(void); void cc2_Wmnij_build(void) { dpdbuf4 A, E, D, Z, W, Z1, X; dpdfile2 t1, tIA, tia; timer_on("A->Wmnij"); if(params.ref == 0) { /** RHF **/ /* Wmnij <- <mn||ij> */ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 WMnIj"); dpd_buf4_close(&A); } else if (params.ref == 1) { /** ROHF **/ /** W(M>N,I>J) <--- <MN||IJ> **/ /** W(m>n,i>j) <--- <mn||ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 WMNIJ (M>N,I>J)"); dpd_buf4_copy(&A, CC2_HET1, "CC2 Wmnij (m>n,i>j)"); dpd_buf4_close(&A); /** W(Mn,Ij) <--- <Mn|Ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 WMnIj"); dpd_buf4_close(&A); } else if (params.ref == 2) { /** UHF **/ /** W(M>N,I>J) <--- <MN||IJ> **/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 WMNIJ (M>N,I>J)"); dpd_buf4_close(&A); /** W(m>n,i>j) <--- <mn||ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 12, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 Wmnij (m>n,i>j)"); dpd_buf4_close(&A); /** W(Mn,Ij) <--- <Mn|Ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_copy(&A, CC2_HET1, "CC2 WMnIj"); dpd_buf4_close(&A); } timer_off("A->Wmnij"); timer_on("E->Wmnij"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* Wmnij <- + P(ij) t(j,e) * <mn||ie> */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 0, 0, 0, 0, "CC2 ZMnIj"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&E, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC2_HET1, qpsr, 0, 0, "CC2 WMnIj", 1); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if (params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(M>N,I>J) <-- ZMNIJ <-- P(I/J)( <MN||IE> * t1[J][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,IJ)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (M>N,JI)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,JI)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(m>n,i>j) <-- Zmnij <-- P(i/j)( <mn||ie> * t1[j][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (m>n,ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (m>n,ji)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (m>n,ji)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 Wmnij (m>n,i>j)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ie> * t1[j][e] ****/ dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&E, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ej> * t1[I][E] ****/ dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract244(&tIA, &E, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if (params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(M>N,I>J) <-- ZMNIJ <-- P(I/J)( <MN||IE> * t1[J][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,IJ)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_contract424(&E, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (M>N,JI)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,JI)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(m>n,i>j) <-- Zmnij <-- P(i/j)( <mn||ie> * t1[j][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 10, 12, 10, 0, "Z (m>n,ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 12, 10, "Z (m>n,ji)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 12, 10, 12, 10, 0, "Z (m>n,ji)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 12, 10, 12, 12, 0, "CC2 Wmnij (m>n,i>j)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ie> * t1[j][e] ****/ dpd_buf4_init(&W, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ej> * t1[I][E] ****/ dpd_buf4_init(&W, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract244(&tIA, &E, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("E->Wmnij"); timer_on("D->Wmnij"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* Wmnij<- +1/2 P(ij) t(i,e) t(j,f) * <mn||ef> */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "CC2 ZMnIf (Mn,If)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&t1, &D, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 0, 0, 0, 0, "CC2 ZMnIj"); dpd_contract424(&Z, &t1, &Z1, 3, 1, 0, 0.5, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_buf4_axpy(&Z1, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 0, 0, "CC2 WMnIj", 1); dpd_buf4_close(&Z1); dpd_file2_close(&t1); } else if (params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z (M>N,EJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z (m>n,ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(Mn,Ij) <-- tIE tjf <Mn|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (Mn,Ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); purge_cc2_Wmnij(); } else if (params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 21, 2, 21, 0, "Z (M>N,EJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 2, 0, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 31, 12, 31, 0, "Z (m>n,ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 12, 10, 12, 12, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(Mn,Ij) <-- tIE tjf <Mn|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z (Mn,Ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("D->Wmnij"); } void purge_cc2_Wmnij(void) { dpdfile2 FAE, Fmi, FME, Fme; dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n, omit; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wmnij matrix elements */ dpd_file4_init(&W, CC2_HET1, 0, 2, 2,"CC2 Wmnij (m>n,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) || (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 0, 0,"CC2 WMnIj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if ((J >= (occpi[jsym] - openpi[jsym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3.cc������������������������������������������������������������������������0000644�0001015�0000765�00000023164�10757640026�014333� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3(): calls libdpd functions to compute the triples contributions * to t1 and t2, * <S| H <T| (Uhat T2)c |0> |T> -> t1 * <D| Hhat <T| (Uhat T2)c |0> |T> -> t2 * Denominators are subsequently applied in denom() */ void cc3(void) { dpdfile2 TIA_new, Tia_new, FME, Fme; dpdbuf4 TIJAB_new, Tijab_new, TIjAb_new; dpdbuf4 TIJAB, Tijab, TIjAb, TiJaB; dpdbuf4 WABEI, WAbEi, Wabei, WaBeI; dpdbuf4 WMBIJ, WMbIj, Wmbij, WmBiJ; dpdbuf4 Dints, DIJAB_anti, Dijab_anti, DIjAb, DiJaB; dpdbuf4 WAMEF, WAmEf, Wamef, WaMeF; dpdbuf4 WMNIE, WMnIe, Wmnie, WmNiE; if(params.ref == 0) { /* RHF */ dpd_file2_init(&TIA_new, CC_OEI, 0, 0, 1, "New tIA"); dpd_buf4_init(&TIjAb_new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); if (params.t3_Ws_incore) cc3_sigma_RHF_ic(&TIjAb, &WAbEi, &WMbIj, 1, &Dints, &TIA_new, 1, &FME, &WAmEf, &WMnIe, &TIjAb_new, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, 0.0, outfile, params.nthreads); else cc3_sigma_RHF(&TIjAb, &WAbEi, &WMbIj, 1, &Dints, &TIA_new, 1, &FME, &WAmEf, &WMnIe, &TIjAb_new, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, 0.0, outfile); dpd_buf4_close(&TIjAb); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_buf4_close(&Dints); dpd_file2_close(&FME); dpd_buf4_close(&WAmEf); dpd_buf4_close(&WMnIe); dpd_file2_close(&TIA_new); dpd_buf4_close(&TIjAb_new); } else if(params.ref == 2) { /* UHF */ dpd_file2_init(&TIA_new, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&Tia_new, CC_OEI, 0, 2, 3, "New tia"); dpd_buf4_init(&TIJAB_new, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&Tijab_new, CC_TAMPS, 0, 10, 15, 12, 17, 0, "New tijab"); dpd_buf4_init(&TIjAb_new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); /*** alpha-alpha-alpha */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); cc3_sigma_UHF_AAA(&TIJAB, &WABEI, &WMBIJ, 1, &DIJAB_anti, &TIA_new, 1, &FME, &WAMEF, &WMNIE, &TIJAB_new, moinfo.aoccpi, moinfo.aocc_off, moinfo.avirtpi, moinfo.avir_off, 0.0, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&DIJAB_anti); dpd_file2_close(&FME); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WMNIE); /*** beta-beta-beta */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Wabei, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&Wmbij, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); cc3_sigma_UHF_BBB(&Tijab, &Wabei, &Wmbij, 1, &Dijab_anti, &Tia_new, 1, &Fme, &Wamef, &Wmnie, &Tijab_new, moinfo.boccpi, moinfo.bocc_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&Wabei); dpd_buf4_close(&Wmbij); dpd_buf4_close(&Dijab_anti); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&Wmnie); /*** alpha-alpha-beta */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DIjAb, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); cc3_sigma_UHF_AAB(&TIJAB, &TIjAb, &TiJaB, &WABEI, &WaBeI, &WAbEi, &WMBIJ, &WMbIj, &WmBiJ, 1, &DIJAB_anti, &DIjAb, &TIA_new, &Tia_new, 1, &FME, &Fme, &WAMEF, &WaMeF, &WAmEf, &WMNIE, &WMnIe, &WmNiE, &TIJAB_new, &TIjAb_new, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&DIJAB_anti); dpd_buf4_close(&DIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); /*** beta-beta-alpha term 1 */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&Wabei, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&Wmbij, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DiJaB, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); cc3_sigma_UHF_BBA(&Tijab, &TIjAb, &TiJaB, &Wabei, &WaBeI, &WAbEi, &Wmbij, &WMbIj, &WmBiJ, 1, &Dijab_anti, &DiJaB, &TIA_new, &Tia_new, 1, &FME, &Fme, &Wamef, &WaMeF, &WAmEf, &Wmnie, &WMnIe, &WmNiE, &Tijab_new, &TIjAb_new, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&Wabei); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&Wmbij); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&Dijab_anti); dpd_buf4_close(&DiJaB); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&Wmnie); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); /* dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_print(&t1, outfile); dpd_file2_close(&t1); dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_print(&t1, outfile); dpd_file2_close(&t1); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_print(&T2, outfile, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_print(&T2, outfile, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_print(&T2, outfile, 1); dpd_buf4_close(&T2); */ } } }} // namespace psi::ccenergy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_RHF.cc��������������������������������������������������������������������0000644�0001015�0000765�00000046261�10757640026�015035� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc3_RHF_obsolete(void) { int h, nirreps; int *occpi, *virtpi, *occ_off, *vir_off; int Gi, Gj, Gk, Gl, Ga, Gb, Gc, Gd; int i, j, k, l, a, b, c, d; int I, J, K, L, A, B, C, D; int kj, jk, ji, ij, ik, ki; int Gkj, Gjk, Gji, Gij, Gik, Gki; int Gijk; int ab, ba, ac, ca, bc, cb; int Gab, Gba, Gac, Gca, Gbc, Gcb; int id, jd, kd, ad, bd, cd; int il, jl, kl, la, lb, lc, li, lk; int da, di, dj, dk; int Gad, Gdi, Gdj, Gdk, Glc, Gli, Glk; double value, F_val, t_val, E_val; double dijk, denom; double value_ia, value_ka, denom_ia, denom_ka; dpdfile2 fIJ, fIJ2, fAB, fAB2, t1, t1new, Fme; dpdbuf4 T2, T2new, F, E, Dints, Wamef, Wmnie; double t2norm, t3norm; double ***T3, ***W3; int nv; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; /* these are sent to T3 function */ dpd_file2_init(&fIJ2, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB2, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_init(&t1new, CC_OEI, 0, 0, 1, "CC3 tIA"); /* T3->T1 increment */ dpd_file2_mat_init(&t1new); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&T2new, CC_MISC, 0, 0, 5, 0, 5, 0, "CC3 tIjAb"); dpd_buf4_scm(&T2new, 0); dpd_buf4_init(&F, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&E, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); dpd_buf4_mat_irrep_init(&Wamef, h); dpd_buf4_mat_irrep_rd(&Wamef, h); dpd_buf4_mat_irrep_init(&Wmnie, h); dpd_buf4_mat_irrep_rd(&Wmnie, h); dpd_buf4_mat_irrep_init(&T2new, h); } for(h=0,nv=0; h < nirreps; h++) nv += virtpi[h]; W3 = (double ***) malloc(nirreps * sizeof(double **)); T3 = init_3d_array(nv, nv, nv); t3norm = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; /* allocate memory for all irrep blocks of (ab,c) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; W3[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; Gkj = Gjk = Gk ^ Gj; Gji = Gij = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; ij = T2.params->rowidx[I][J]; ji = T2.params->rowidx[J][I]; ik = T2.params->rowidx[I][K]; ki = T2.params->rowidx[K][I]; jk = T2.params->rowidx[J][K]; kj = T2.params->rowidx[K][J]; /* T3_RHF(W3, nirreps, I, Gi, J, Gj, K, Gk, &T2, &F, &E, &fIJ2, &fAB2, occpi, occ_off, virtpi, vir_off, 0.0); */ /* sort (ab,c) into T3[A][B][C] */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for (ab=0; ab < F.params->coltot[Gab]; ++ab) { A = F.params->colorb[Gab][ab][0]; B = F.params->colorb[Gab][ab][1]; Ga = F.params->rsym[A]; Gb = Ga ^ Gab; /* a = A - vir_off[Ga]; b = B - vir_off[Gb]; */ for (c=0; c<virtpi[Gc]; ++c) { C = c + vir_off[Gc]; T3[A][B][C] = W3[Gab][ab][c]; } } } /* if (!I && !J && !K) { fprintf(outfile,"T3[0][0][0][a][b][c] fast code\n"); for (a=0;a<nv;++a) for (b=0;b<nv;++b) for (c=0;c<nv;++c) if ( fabs(T3[a][b][c]) > 1.0E-10 ) fprintf(outfile,"A: %d B: %d C: %d -> %15.10lf\n", a,b,c,T3[a][b][c]); } */ /*** T3 --> T1 Contributions ***/ for(Ga=0; Ga < nirreps; Ga++) { for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; value_ia = 0.0; value_ka = 0.0; for(Gb=0; Gb < nirreps; Gb++) { for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; Gc = Gijk ^ Ga ^ Gb; Gbc = Gb ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; if(Gi == Ga && Gjk == Gbc) { if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) value_ia += T3[A][B][C] * Dints.matrix[Gjk][jk][bc]; } if(Gk == Ga && Gji == Gbc) { if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) value_ka -= T3[A][B][C] * Dints.matrix[Gji][ji][bc]; } } /* c */ } /* b */ } /* Gb */ denom_ia = denom_ka = 0.0; if(fIJ.params->rowtot[Gi]) denom_ia += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gk]) denom_ka += fIJ.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) { denom_ia -= fAB.matrix[Ga][a][a]; denom_ka -= fAB.matrix[Ga][a][a]; } value_ia /= denom_ia; value_ka /= denom_ka; if(t1new.params->rowtot[Gi] && t1new.params->coltot[Gi]) t1new.matrix[Gi][i][a] += value_ia; if(t1new.params->rowtot[Gk] && t1new.params->coltot[Gk]) t1new.matrix[Gk][k][a] += value_ka; } /* a */ } /* Ga */ /*** T3 --> T2 Contributions ***/ for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gc = Gijk ^ Ga ^ Gb; Gab = Ga ^ Gb; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; ab = T2new.params->colidx[A][B]; ba = T2new.params->colidx[B][A]; if(Gij == Gab && Gk == Gc) { denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; value = 0.0; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; if(Fme.params->rowtot[Gk] && Fme.params->coltot[Gc]) value += T3[A][B][C] * Fme.matrix[Gk][k][c]; } value /= denom; if(T2new.params->rowtot[Gij] && T2new.params->coltot[Gab]) { T2new.matrix[Gij][ij][ab] += value; T2new.matrix[Gij][ji][ba] += value; } } if(Gjk == Gab && Gi == Gc) { denom = 0.0; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; value = 0.0; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; if(Fme.params->rowtot[Gi] && Fme.params->coltot[Gc]) value -= T3[A][B][C] * Fme.matrix[Gi][i][c]; } value /= denom; if(T2new.params->rowtot[Gjk] && T2new.params->coltot[Gab]) { T2new.matrix[Gjk][kj][ab] += value; T2new.matrix[Gjk][jk][ba] += value; } } } /* b */ } /* a */ } /* Gb */ } /* Ga */ for(Gd=0; Gd < nirreps; Gd++) { Gdi = Gd ^ Gi; Gdj = Gd ^ Gj; Gdk = Gd ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { Gad = Ga ^ Gd; for(d=0; d < virtpi[Gd]; d++) { D = vir_off[Gd] + d; di = Wamef.params->rowidx[D][I]; dj = Wamef.params->rowidx[D][J]; dk = Wamef.params->rowidx[D][K]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; ad = T2new.params->colidx[A][D]; da = T2new.params->colidx[D][A]; if(Gij == Gad) { value = 0.0; for(Gb=0; Gb < nirreps; Gb++) { Gc = Gijk ^ Ga ^ Gb; Gbc = Gb ^ Gc; if(Gdk == Gbc) { for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Wamef.params->colidx[B][C]; if(Wamef.params->rowtot[Gdk] && Wamef.params->coltot[Gdk]) value += 2.0 * T3[A][B][C] * Wamef.matrix[Gdk][dk][bc]; } } } } denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gd]) denom -= fAB.matrix[Gd][d][d]; value /= denom; if(T2new.params->rowtot[Gij] && T2new.params->coltot[Gij]) { T2new.matrix[Gij][ij][ad] += value; T2new.matrix[Gij][ji][da] += value; } } if(Gjk == Gad) { value = 0.0; for(Gb=0; Gb < nirreps; Gb++) { Gc = Gijk ^ Ga ^ Gb; Gbc = Gb ^ Gc; if(Gdi == Gbc) { for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Wamef.params->colidx[B][C]; if(Wamef.params->rowtot[Gdi] && Wamef.params->coltot[Gdi]) value -= T3[A][B][C] * Wamef.matrix[Gdi][di][bc]; } } } } denom = 0.0; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gd]) denom -= fAB.matrix[Gd][d][d]; value /= denom; if(T2new.params->rowtot[Gjk] && T2new.params->coltot[Gjk]) { T2new.matrix[Gjk][kj][ad] += value; T2new.matrix[Gjk][jk][da] += value; } } if(Gik == Gad) { value = 0.0; for(Gb=0; Gb < nirreps; Gb++) { Gc = Gijk ^ Ga ^ Gb; Gbc = Gb ^ Gc; if(Gdj == Gbc) { for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Wamef.params->colidx[B][C]; if(Wamef.params->rowtot[Gdj] && Wamef.params->coltot[Gdj]) value -= T3[A][B][C] * Wamef.matrix[Gdj][dj][bc]; } } } } denom = 0.0; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gd]) denom -= fAB.matrix[Gd][d][d]; value /= denom; if(T2new.params->rowtot[Gik] && T2new.params->coltot[Gik]) { T2new.matrix[Gki][ki][da] += value; T2new.matrix[Gki][ik][ad] += value; } } } /* a */ } /* d */ } /* Ga */ } /* Gd */ for(Gl=0; Gl < nirreps; Gl++) { Gli = Gl ^ Gi; Glk = Gl ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gab = Ga ^ Gb; if(Gli == Gab) { for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; li = T2new.params->rowidx[L][I]; il = T2new.params->rowidx[I][L]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; ab = T2new.params->colidx[A][B]; ba = T2new.params->colidx[B][A]; denom = 0.0; if(fIJ.params->rowtot[Gl]) denom += fIJ.matrix[Gl][l][l]; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; value = 0.0; for(Gc=0; Gc < nirreps; Gc++) { Glc = Gl ^ Gc; if(Gjk == Glc) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; lc = Wmnie.params->colidx[L][C]; if(Wmnie.params->rowtot[Gjk] && Wmnie.params->coltot[Gjk]) value -= T3[A][B][C] * Wmnie.matrix[Gjk][jk][lc]; } } } /* Gc */ value *= 2.0; value /= denom; if(T2new.params->rowtot[Gli] && T2new.params->coltot[Gli]) { T2new.matrix[Gli][li][ba] += value; T2new.matrix[Gli][il][ab] += value; } } /* b */ } /* a */ } /* l */ } /* if(Gli == Gab) */ if(Glk == Gab) { for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; lk = T2new.params->rowidx[L][K]; kl = T2new.params->rowidx[K][L]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; ab = T2new.params->colidx[A][B]; ba = T2new.params->colidx[B][A]; denom = 0.0; if(fIJ.params->rowtot[Gl]) denom += fIJ.matrix[Gl][l][l]; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; value = 0.0; for(Gc=0; Gc < nirreps; Gc++) { Glc = Gl ^ Gc; if(Gji == Glc) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; lc = Wmnie.params->colidx[L][C]; if(Wmnie.params->rowtot[Gji] && Wmnie.params->coltot[Gji]) value += T3[A][B][C] * Wmnie.matrix[Gji][ji][lc]; } } } /* Gc */ value /= denom; if(T2new.params->rowtot[Glk] && T2new.params->coltot[Glk]) { T2new.matrix[Glk][lk][ba] += value; T2new.matrix[Glk][kl][ab] += value; } } /* b */ } /* a */ } /* l */ } /* if(Glk==Gab) */ if(Gli == Gab) { for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; li = T2new.params->rowidx[L][I]; il = T2new.params->rowidx[I][L]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; ab = T2new.params->colidx[A][B]; ba = T2new.params->colidx[B][A]; denom = 0.0; if(fIJ.params->rowtot[Gl]) denom += fIJ.matrix[Gl][l][l]; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; value = 0.0; for(Gc=0; Gc < nirreps; Gc++) { Glc = Gl ^ Gc; if(Gjk == Glc) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; lc = Wmnie.params->colidx[L][C]; if(Wmnie.params->rowtot[Gjk] && Wmnie.params->coltot[Gjk]) value += T3[A][B][C] * Wmnie.matrix[Gjk][kj][lc]; } } } /* Gc */ value /= denom; if(T2new.params->rowtot[Gli] && T2new.params->coltot[Gli]) { T2new.matrix[Gli][li][ba] += value; T2new.matrix[Gli][il][ab] += value; } } /* b */ } /* a */ } /* l */ } /* if(Gli==Gab) */ } /* Gb */ } /* Ga */ } /* Gl */ } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; dpd_free_block(W3[Gab], F.params->coltot[Gab], virtpi[Gc]); } } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "t3norm = %20.10f\n", sqrt(t3norm)); */ free_3d_array(T3, nv, nv); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&Dints, h); dpd_buf4_mat_irrep_close(&Wamef, h); dpd_buf4_mat_irrep_close(&Wmnie, h); dpd_buf4_mat_irrep_wrt(&T2new, h); dpd_buf4_mat_irrep_close(&T2new, h); } dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&E); dpd_buf4_close(&Dints); dpd_buf4_close(&Wamef); dpd_buf4_close(&Wmnie); dpd_file2_mat_wrt(&t1new); dpd_file2_mat_close(&t1new); /* fprintf(outfile, "triples t1norm = %20.10f\n", sqrt(dpd_file2_dot_self(&t1new))); fprintf(outfile, "triples t2norm = %20.10f\n", sqrt(dpd_buf4_dot_self(&T2new))); */ /* Update the amplitudes */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_axpy(&t1new, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1new); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIJ2); dpd_file2_close(&fAB2); } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_UHF.cc��������������������������������������������������������������������0000644�0001015�0000765�00000137751�10757640026�015045� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void cc3_UHF_AAA_obsolete(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc; int i, j, k, I, J, K; int a, b, c, A, B, C; int Gij, ij, Gab, ab, Gjk, jk; double ***W1; dpdbuf4 T2, E, F; dpdfile2 fIJ, fAB; dpdfile2 t1new, t1, d1; dpdbuf4 D; int nrows, ncols, nlinks; dpdbuf4 T2new, D2; dpdfile2 Fme; dpdbuf4 WMAFE, WMNIE; int Gd, d, cd, dc, Gid, id, DD; int Gm, m, Gmi, mi, im, mc, M; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.aoccpi; occ_off = moinfo.aocc_off; virtpi = moinfo.avirtpi; vir_off = moinfo.avir_off; dpd_file2_init(&t1new, CC_OEI, 0, 0, 1, "CC3 tIA"); dpd_file2_mat_init(&t1new); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&D, h); dpd_buf4_mat_irrep_rd(&D, h); } dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&T2new, CC_MISC, 0, 0, 5, 0, 5, 0, "CC3 tIJAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&T2new, h); dpd_buf4_init(&WMAFE, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WMNIE, h); dpd_buf4_mat_irrep_rd(&WMNIE, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&F, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&E, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; W1[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; /* T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &F, &E, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); */ /* t_KC <-- 1/4 t_IJKABC <IJ||AB> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = D.params->rowidx[I][J]; nrows = D.params->coltot[Gij]; ncols = virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, D.matrix[Gij][ij], 1, 1.0, t1new.matrix[Gk][k], 1); /* t_IJAB <-- t_IJKABC F_KC */ Gc = Gk; /* assumes Fme is totally symmetric */ Gab = Gij; /* Assumes tIJAB is totally symmetric */ nrows = T2new.params->coltot[Gij]; ncols = virtpi[Gc]; ij = T2new.params->rowidx[I][J]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme.matrix[Gk][k], 1, 1.0, T2new.matrix[Gij][ij], 1); /* t_JKDC <-- +1/2 t_IJKABC W_IDAB */ /* t_JKCD <-- -1/2 t_IJKABC W_IDAB */ jk = T2new.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes Wieab is totally symmetric */ Gc = Gab ^ Gijk; /* assumes T3 is totally symmetric */ id = WMAFE.row_offset[Gid][I]; Z = block_matrix(virtpi[Gc],virtpi[Gd]); WMAFE.matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMAFE, Gid, id, virtpi[Gd]); nrows = virtpi[Gc]; ncols = virtpi[Gd]; nlinks = WMAFE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, WMAFE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; cd = T2new.params->colidx[C][DD]; dc = T2new.params->colidx[DD][C]; T2new.matrix[Gjk][jk][dc] += Z[c][d]; T2new.matrix[Gjk][jk][cd] += -Z[c][d]; } } dpd_free_block(WMAFE.matrix[Gid], virtpi[Gd], WMAFE.params->coltot[Gid]); free_block(Z); } /* t_MIAB <-- +1/2 t_IJKABC W_JKMC */ /* t_IMAB <-- -1/2 t_IJKABC W_JKMC */ jk = WMNIE.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WMNIE.col_offset[Gjk][Gm]; nrows = F.params->coltot[Gab]; ncols = occpi[Gm]; nlinks = virtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks, &(WMNIE.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = occ_off[Gm] + m; mi = T2new.params->rowidx[M][I]; im = T2new.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { T2new.matrix[Gmi][mi][ab] += Z[ab][m]; T2new.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; dpd_free_block(W1[Gab], F.params->coltot[Gab], virtpi[Gc]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); dpd_buf4_close(&E); dpd_buf4_close(&F); dpd_buf4_close(&T2); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_mat_wrt(&t1new); dpd_file2_mat_close(&t1new); /* divide T1 contributions by denominators and add to T1 */ dpd_file2_init(&d1, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&d1, &t1new); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_axpy(&t1new, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1new); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&D, h); } dpd_buf4_close(&D); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); dpd_buf4_close(&WMAFE); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WMNIE, h); dpd_buf4_close(&WMNIE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2new, h); dpd_buf4_mat_irrep_close(&T2new, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 0, 5, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&D2, &T2new); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } void cc3_UHF_BBB_obsolete(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc; int i, j, k, I, J, K; int a, b, c, A, B, C; int Gij, ij, Gab, ab, Gjk, jk; double ***W1; dpdbuf4 T2, E, F; dpdfile2 fIJ, fAB; dpdfile2 t1new, t1, d1; dpdbuf4 D; int nrows, ncols, nlinks; dpdbuf4 T2new, D2; dpdfile2 Fme; dpdbuf4 WMAFE, WMNIE; int Gd, d, cd, dc, Gid, id, DD; int Gm, m, Gmi, mi, im, mc, M; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.boccpi; occ_off = moinfo.bocc_off; virtpi = moinfo.bvirtpi; vir_off = moinfo.bvir_off; dpd_file2_init(&t1new, CC_OEI, 0, 2, 3, "CC3 tia"); dpd_file2_mat_init(&t1new); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&D, h); dpd_buf4_mat_irrep_rd(&D, h); } dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&T2new, CC_MISC, 0, 10, 15, 10, 15, 0, "CC3 tijab"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&T2new, h); dpd_buf4_init(&WMAFE, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WMNIE, h); dpd_buf4_mat_irrep_rd(&WMNIE, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 3, 3, "fab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&F, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&E, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; W1[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; /* T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &F, &E, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); */ /* t_kc <-- 1/4 t_ijkabc <ij||ab> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = D.params->rowidx[I][J]; nrows = D.params->coltot[Gij]; ncols = virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, D.matrix[Gij][ij], 1, 1.0, t1new.matrix[Gk][k], 1); /* t_ijab <-- t_ijkabc F_kc */ Gc = Gk; /* assumes Fme is totally symmetric */ Gab = Gij; /* Assumes tijab is totally symmetric */ nrows = T2new.params->coltot[Gij]; ncols = virtpi[Gc]; ij = T2new.params->rowidx[I][J]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme.matrix[Gk][k], 1, 1.0, T2new.matrix[Gij][ij], 1); /* t_jkdc <-- 1/2 t_ijkabc W_idab */ /* t_jkcd <-- -1/2 t_ijkabc W_idab */ jk = T2new.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes Wieab is totally symmetric */ Gc = Gab ^ Gijk; /* assumes T3 is totally symmetric */ id = WMAFE.row_offset[Gid][I]; Z = block_matrix(virtpi[Gc],virtpi[Gd]); WMAFE.matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMAFE, Gid, id, virtpi[Gd]); nrows = virtpi[Gc]; ncols = virtpi[Gd]; nlinks = WMAFE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, WMAFE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; cd = T2new.params->colidx[C][DD]; dc = T2new.params->colidx[DD][C]; T2new.matrix[Gjk][jk][dc] += Z[c][d]; T2new.matrix[Gjk][jk][cd] += -Z[c][d]; } } dpd_free_block(WMAFE.matrix[Gid], virtpi[Gd], WMAFE.params->coltot[Gid]); free_block(Z); } /* t_miab <-- +1/2 t_ijkabc W_jkmc */ /* t_imab <-- -1/2 t_ijkabc W_jkmc */ jk = WMNIE.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WMNIE.col_offset[Gjk][Gm]; nrows = F.params->coltot[Gab]; ncols = occpi[Gm]; nlinks = virtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks, &(WMNIE.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = occ_off[Gm] + m; mi = T2new.params->rowidx[M][I]; im = T2new.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { T2new.matrix[Gmi][mi][ab] += Z[ab][m]; T2new.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; dpd_free_block(W1[Gab], F.params->coltot[Gab], virtpi[Gc]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); dpd_buf4_close(&E); dpd_buf4_close(&F); dpd_buf4_close(&T2); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_mat_wrt(&t1new); dpd_file2_mat_close(&t1new); /* divide T1 contributions by denominators and add to T1 */ dpd_file2_init(&d1, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&d1, &t1new); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_axpy(&t1new, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1new); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&D, h); } dpd_buf4_close(&D); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); dpd_buf4_close(&WMAFE); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WMNIE, h); dpd_buf4_close(&WMNIE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2new, h); dpd_buf4_mat_irrep_close(&T2new, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 10, 15, 11, 16, 0, "dijab"); dpd_buf4_dirprd(&D2, &T2new); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } void cc3_UHF_AAB_obsolete(void) { int h, nirreps; int *aocc_off, *aoccpi; int *avir_off, *avirtpi; int *bocc_off, *boccpi; int *bvir_off, *bvirtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb; int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1, ***W2, ***W3; dpdbuf4 T2AA, T2AB, T2BA, EAA, EAB, EBA, FAA, FAB, FBA; dpdfile2 fIJ, fAB, fij, fab; dpdfile2 t1newA, t1newB; dpdfile2 t1, d1; dpdbuf4 DAA, DAB; int nrows, ncols, nlinks; int **W_offset, offset; dpdfile2 FME, Fme; dpdbuf4 T2AAnew, D2, T2; dpdbuf4 T2ABnew; dpdbuf4 WmAfE, WMAFE, WMaFe; double **Z; dpdbuf4 WMnIe, WMNIE, WmNiE; int Gm, m, Gmi, mi, im, mc, M; int Gmk, mk, ma, kj, Gim; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; aocc_off = moinfo.aocc_off; boccpi = moinfo.boccpi; bocc_off = moinfo.bocc_off; avirtpi = moinfo.avirtpi; avir_off = moinfo.avir_off; bvirtpi = moinfo.bvirtpi; bvir_off = moinfo.bvir_off; W_offset = init_int_matrix(nirreps, nirreps); for(Gab=0; Gab < nirreps; Gab++) { for(Ga=0,offset=0; Ga < nirreps; Ga++) { Gb = Ga ^ Gab; W_offset[Gab][Ga] = offset; offset += avirtpi[Ga] * avirtpi[Gb]; } } dpd_file2_init(&t1newA, CC_OEI, 0, 0, 1, "CC3 tIA"); dpd_file2_mat_init(&t1newA); dpd_file2_init(&t1newB, CC_OEI, 0, 2, 3, "CC3 tia"); dpd_file2_mat_init(&t1newB); dpd_buf4_init(&DAA, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DAB, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DAA, h); dpd_buf4_mat_irrep_rd(&DAA, h); dpd_buf4_mat_irrep_init(&DAB, h); dpd_buf4_mat_irrep_rd(&DAB, h); } dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&FME); dpd_file2_mat_rd(&FME); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&WmAfE, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&WMAFE, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WMaFe, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WMnIe, h); dpd_buf4_mat_irrep_rd(&WMnIe, h); dpd_buf4_mat_irrep_init(&WMNIE, h); dpd_buf4_mat_irrep_rd(&WMNIE, h); dpd_buf4_mat_irrep_init(&WmNiE, h); dpd_buf4_mat_irrep_rd(&WmNiE, h); } dpd_buf4_init(&T2AAnew, CC_MISC, 0, 0, 5, 0, 5, 0, "CC3 tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2AAnew, h); } dpd_buf4_init(&T2ABnew, CC_MISC, 0, 22, 28, 22, 28, 0, "CC3 tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2ABnew, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FAA, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&FAB, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&FBA, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&EAA, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&EAB, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&EBA, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); W3 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ W1[Gab] = dpd_block_matrix(FAA.params->coltot[Gab], bvirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; /* assumes totally symmetric */ W2[Ga] = dpd_block_matrix(avirtpi[Ga], WmAfE.params->coltot[Gcb]); /* alpha-beta-alpha */ } for(Gb=0; Gb < nirreps; Gb++) { Gac = Gb ^ Gijk; /* assumes totally symmetric */ W3[Gb] = dpd_block_matrix(avirtpi[Gb], WMaFe.params->coltot[Gac]); /* alpha-alpha-beta */ } for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; /* T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2AA, &T2AB, &T2BA, &FAA, &FAB, &FBA, &EAA, &EAB, &EBA, &fIJ, &fij, &fAB, &fab, aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, 0.0); */ /* t_kc <-- 1/4 t_IJkABc <IJ||AB> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = DAA.params->rowidx[I][J]; nrows = DAA.params->coltot[Gij]; ncols = bvirtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DAA.matrix[Gij][ij], 1, 1.0, t1newB.matrix[Gk][k], 1); /* t_IA <-- t_IJkABc <Jk|Bc> */ Ga = Gi; /* assumes T1 is totally symmetric */ Gbc = Gjk; /* assumes <jk|bc> is totally symmetric */ jk = DAB.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gb = Ga ^ Gab; Gc = Gb ^ Gbc; ab = W_offset[Gab][Ga]; bc = DAB.col_offset[Gjk][Gb]; nrows = avirtpi[Ga]; ncols = avirtpi[Gb] * bvirtpi[Gc]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DAB.matrix[Gjk][jk][bc]), 1, 1.0, t1newA.matrix[Gi][i], 1); } /* t_IJAB <-- t_IJkABc F_kc */ Gc = Gk; /* assumes Fme is totally symmetric */ Gab = Gij; /* Assumes tIJAB is totally symmetric */ nrows = T2AAnew.params->coltot[Gij]; ncols = bvirtpi[Gc]; ij = T2AAnew.params->rowidx[I][J]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme.matrix[Gk][k], 1, 1.0, T2AAnew.matrix[Gij][ij], 1); /* t_JkBc <-- t_IJkABc F_IA */ Ga = Gi; /* assumes Fia is totally symmetric */ Gbc = Gjk; /* assumes t_jKbC is totally symmetric */ jk = T2AB.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gb = Ga ^ Gab; Gc = Gb ^ Gbc; ab = W_offset[Gab][Ga]; bc = T2ABnew.col_offset[Gjk][Gb]; nrows = avirtpi[Ga]; ncols = avirtpi[Gb] * bvirtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, FME.matrix[Gi][i], 1, 1.0, &(T2ABnew.matrix[Gjk][jk][bc]), 1); } /* t_JIDA <-- t_IJkABc W_kDcB */ /* sort W1(AB,c) to W2(A,cB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; cb = WmAfE.params->colidx[C][B]; W2[Ga][a][cb] = W1[Gab][ab][c]; } } } ji = T2AAnew.params->rowidx[J][I]; for(Gd=0; Gd < nirreps; Gd++) { Gcb = Gkd = Gk ^ Gd; /* assumes totally symmetric */ Ga = Gd ^ Gij; /* assumes totally symmetric */ kd = WmAfE.row_offset[Gkd][K]; WmAfE.matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], WmAfE.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&WmAfE, Gkd, kd, avirtpi[Gd]); Z = block_matrix(avirtpi[Ga], avirtpi[Gd]); nrows = avirtpi[Ga]; ncols = avirtpi[Gd]; nlinks = WmAfE.params->coltot[Gkd]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks, WmAfE.matrix[Gkd][0], nlinks, 0.0, Z[0], ncols); for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(d=0; d < avirtpi[Gd]; d++) { DD = avir_off[Gd] + d; ad = T2AAnew.params->colidx[A][DD]; da = T2AAnew.params->colidx[DD][A]; T2AAnew.matrix[Gij][ji][ad] += -Z[a][d]; T2AAnew.matrix[Gij][ji][da] += Z[a][d]; } } dpd_free_block(WmAfE.matrix[Gkd], avirtpi[Gd], WmAfE.params->coltot[Gkd]); free_block(Z); } /* t_JkDc <-- 1/2 t_IJkABc W_IDAB */ jk = T2ABnew.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ id = WMAFE.row_offset[Gid][I]; WMAFE.matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WMAFE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMAFE, Gid, id, avirtpi[Gd]); Z = block_matrix(bvirtpi[Gc], avirtpi[Gd]); nrows = bvirtpi[Gc]; ncols = avirtpi[Gd]; nlinks = WMAFE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, WMAFE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; for(d=0; d < avirtpi[Gd]; d++) { DD = avir_off[Gd] + d; dc = T2ABnew.params->colidx[DD][C]; T2ABnew.matrix[Gjk][jk][dc] += Z[c][d]; } } free_block(Z); dpd_free_block(WMAFE.matrix[Gid], avirtpi[Gd], WMAFE.params->coltot[Gid]); } /* t_JkBd <-- t_IJkABc W_IdAc */ /* sort W1(AB,c) to W3(B,Ac) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - avir_off[Gb]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; ac = WMaFe.params->colidx[A][C]; W3[Gb][b][ac] = W1[Gab][ab][c]; } } } jk = T2ABnew.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gac = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gb = Gac ^ Gijk; /* assumes totally symmetric */ id = WMaFe.row_offset[Gid][I]; WMaFe.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], WMaFe.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMaFe, Gid, id, bvirtpi[Gd]); Z = block_matrix(avirtpi[Gb], bvirtpi[Gd]); nrows = avirtpi[Gb]; ncols = bvirtpi[Gd]; nlinks = WMaFe.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks, WMaFe.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(b=0; b < avirtpi[Gb]; b++) { B = avir_off[Gb] + b; for(d=0; d < bvirtpi[Gd]; d++) { DD = bvir_off[Gd] + d; bd = T2ABnew.params->colidx[B][DD]; T2ABnew.matrix[Gjk][jk][bd] += Z[b][d]; } } dpd_free_block(WMaFe.matrix[Gid], bvirtpi[Gd], WMaFe.params->coltot[Gid]); free_block(Z); } /* t_MIAB <--- +t_IJkABc W_JkMc */ /* t_IMAB <--- -t_IJkABc W_JkMc */ jk = WMnIe.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WMnIe.col_offset[Gjk][Gm]; nrows = FAA.params->coltot[Gab]; ncols = aoccpi[Gm]; nlinks = bvirtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks, &(WMnIe.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = aocc_off[Gm] + m; mi = T2AAnew.params->rowidx[M][I]; im = T2AAnew.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { T2AAnew.matrix[Gmi][mi][ab] += Z[ab][m]; T2AAnew.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } /* t_MkBc <-- 1/2 t_IJkABc W_IJMA */ /* sort W(AB,c) to W(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = T2ABnew.params->colidx[B][C]; W3[Ga][a][bc] = W1[Gab][ab][c]; } } } ij = WMNIE.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = WMNIE.col_offset[Gij][Gm]; nrows = T2ABnew.params->coltot[Gmk]; ncols = aoccpi[Gm]; nlinks = avirtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows, &(WMNIE.matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; mk = T2ABnew.params->rowidx[M][K]; for(bc=0; bc < nrows; bc++) { T2ABnew.matrix[Gmk][mk][bc] += Z[bc][m]; } } dpd_free_block(Z, nrows, ncols); } /* t_ImBc <-- t_IJkABc W_kJmA */ /* sort W(AB,c) to W(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = T2ABnew.params->colidx[B][C]; W3[Ga][a][bc] = W1[Gab][ab][c]; } } } kj = WmNiE.params->rowidx[K][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gim = Gi ^ Gm; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = WmNiE.col_offset[Gjk][Gm]; nrows = T2ABnew.params->coltot[Gim]; ncols = boccpi[Gm]; nlinks = avirtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows, &(WmNiE.matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; im = T2ABnew.params->rowidx[I][M]; for(bc=0; bc < nrows; bc++) { T2ABnew.matrix[Gim][im][bc] += Z[bc][m]; } } dpd_free_block(Z, nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; dpd_free_block(W1[Gab], FAA.params->coltot[Gab], bvirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; /* assumes totally symmetric */ dpd_free_block(W2[Ga], avirtpi[Ga], WmAfE.params->coltot[Gcb]); } for(Gb=0; Gb < nirreps; Gb++) { Gac = Gb ^ Gijk; /* assumes totally symmetric */ dpd_free_block(W3[Gb], avirtpi[Gb], WMaFe.params->coltot[Gac]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); free(W3); dpd_buf4_close(&EAA); dpd_buf4_close(&EAB); dpd_buf4_close(&EBA); dpd_buf4_close(&FAA); dpd_buf4_close(&FAB); dpd_buf4_close(&FBA); dpd_buf4_close(&T2AA); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fij); dpd_file2_close(&fab); dpd_file2_mat_wrt(&t1newA); dpd_file2_init(&d1, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&d1, &t1newA); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_axpy(&t1newA, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1newA); dpd_file2_mat_wrt(&t1newB); dpd_file2_init(&d1, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&d1, &t1newB); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_axpy(&t1newB, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1newB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&DAA, h); dpd_buf4_mat_irrep_close(&DAB, h); } dpd_buf4_close(&DAA); dpd_buf4_close(&DAB); free_int_matrix(W_offset); dpd_file2_mat_close(&FME); dpd_file2_close(&FME); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); dpd_buf4_close(&WmAfE); dpd_buf4_close(&WMAFE); dpd_buf4_close(&WMaFe); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&WMnIe, h); dpd_buf4_mat_irrep_close(&WMNIE, h); dpd_buf4_mat_irrep_close(&WmNiE, h); } dpd_buf4_close(&WMnIe); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WmNiE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2AAnew, h); dpd_buf4_mat_irrep_close(&T2AAnew, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 0, 5, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&D2, &T2AAnew); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2AAnew, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2AAnew); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2ABnew, h); dpd_buf4_mat_irrep_close(&T2ABnew, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&D2, &T2ABnew); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2ABnew, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2ABnew); } void cc3_UHF_BBA_obsolete(void) { int h, nirreps; int *aocc_off, *aoccpi; int *avir_off, *avirtpi; int *bocc_off, *boccpi; int *bvir_off, *bvirtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb; int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1, ***W2, ***W3; dpdbuf4 T2BB, T2AB, T2BA, EBB, EAB, EBA, FBB, FAB, FBA; dpdfile2 fIJ, fAB, fij, fab; dpdfile2 t1newA, t1newB; dpdfile2 t1, d1; dpdbuf4 DBB, DBA; int nrows, ncols, nlinks; int **W_offset, offset; dpdfile2 FME, Fme; dpdbuf4 T2BBnew, D2, T2; dpdbuf4 T2BAnew; dpdbuf4 WMaFe, Wmafe, WmAfE; double **Z; dpdbuf4 WmNiE, Wmnie, WMnIe; int Gm, m, Gmi, mi, im, mc, M; int Gmk, mk, ma, kj, Gim; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; aocc_off = moinfo.aocc_off; boccpi = moinfo.boccpi; bocc_off = moinfo.bocc_off; avirtpi = moinfo.avirtpi; avir_off = moinfo.avir_off; bvirtpi = moinfo.bvirtpi; bvir_off = moinfo.bvir_off; W_offset = init_int_matrix(nirreps, nirreps); for(Gab=0; Gab < nirreps; Gab++) { for(Ga=0,offset=0; Ga < nirreps; Ga++) { Gb = Ga ^ Gab; W_offset[Gab][Ga] = offset; offset += bvirtpi[Ga] * bvirtpi[Gb]; } } dpd_file2_init(&t1newA, CC_OEI, 0, 0, 1, "CC3 tIA"); dpd_file2_mat_init(&t1newA); dpd_file2_init(&t1newB, CC_OEI, 0, 2, 3, "CC3 tia"); dpd_file2_mat_init(&t1newB); dpd_buf4_init(&DBB, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DBA, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DBB, h); dpd_buf4_mat_irrep_rd(&DBB, h); dpd_buf4_mat_irrep_init(&DBA, h); dpd_buf4_mat_irrep_rd(&DBA, h); } dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&FME); dpd_file2_mat_rd(&FME); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&WMaFe, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&Wmafe, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&WmAfE, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WmNiE, h); dpd_buf4_mat_irrep_rd(&WmNiE, h); dpd_buf4_mat_irrep_init(&Wmnie, h); dpd_buf4_mat_irrep_rd(&Wmnie, h); dpd_buf4_mat_irrep_init(&WMnIe, h); dpd_buf4_mat_irrep_rd(&WMnIe, h); } dpd_buf4_init(&T2BBnew, CC_MISC, 0, 10, 15, 10, 15, 0, "CC3 tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2BBnew, h); } dpd_buf4_init(&T2BAnew, CC_MISC, 0, 23, 29, 23, 29, 0, "CC3 tiJaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2BAnew, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_buf4_init(&T2BB, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FBB, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&FAB, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&FBA, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&EBB, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&EAB, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&EBA, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); W3 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; W1[Gab] = dpd_block_matrix(FBB.params->coltot[Gab], avirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; W2[Ga] = dpd_block_matrix(bvirtpi[Ga], WMaFe.params->coltot[Gcb]); } for(Gb=0; Gb < nirreps; Gb++) { Gac = Gb ^ Gijk; /* assumes totally symmetric */ W3[Gb] = dpd_block_matrix(bvirtpi[Gb], WmAfE.params->coltot[Gac]); } for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < aoccpi[Gk]; k++) { K = aocc_off[Gk] + k; /* T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2BB, &T2BA, &T2AB, &FBB, &FBA, &FAB, &EBB, &EBA, &EAB, &fij, &fIJ, &fab, &fAB, boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, 0.0); */ /* t_KC <-- 1/4 t_ijKabC <ij||ab> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = DBB.params->rowidx[I][J]; nrows = DBB.params->coltot[Gij]; ncols = avirtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DBB.matrix[Gij][ij], 1, 1.0, t1newA.matrix[Gk][k], 1); /* t_ia <-- t_ijKabC <jK|bC> */ Ga = Gi; /* assumes T1 is totally symmetric */ Gbc = Gjk; /* assumes <jk|bc> is totally symmetric */ jk = DBA.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gb = Ga ^ Gab; Gc = Gb ^ Gbc; ab = W_offset[Gab][Ga]; bc = DBA.col_offset[Gjk][Gb]; nrows = bvirtpi[Ga]; ncols = bvirtpi[Gb] * avirtpi[Gc]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DBA.matrix[Gjk][jk][bc]), 1, 1.0, t1newB.matrix[Gi][i], 1); } /* t_ijab <-- t_ijKabC F_KC */ Gc = Gk; /* assumes Fme is totally symmetric */ Gab = Gij; /* Assumes tIJAB is totally symmetric */ nrows = T2BBnew.params->coltot[Gij]; ncols = avirtpi[Gc]; ij = T2BBnew.params->rowidx[I][J]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, FME.matrix[Gk][k], 1, 1.0, T2BBnew.matrix[Gij][ij], 1); /* t_jKbC <-- t_ijKabC F_ia */ Ga = Gi; /* assumes Fia is totally symmetric */ Gbc = Gjk; /* assumes t_jKbC is totally symmetric */ jk = T2BA.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gb = Ga ^ Gab; Gc = Gb ^ Gbc; ab = W_offset[Gab][Ga]; bc = T2BAnew.col_offset[Gjk][Gb]; nrows = bvirtpi[Ga]; ncols = bvirtpi[Gb] * avirtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, Fme.matrix[Gi][i], 1, 1.0, &(T2BAnew.matrix[Gjk][jk][bc]), 1); } /* t_jida <-- t_ijKabC W_KdCb */ /* sort W1(ab,C) to W2(a,Cb) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBB.params->coltot[Gab]; ab++) { A = FBB.params->colorb[Gab][ab][0]; B = FBB.params->colorb[Gab][ab][1]; Ga = FBB.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; cb = WMaFe.params->colidx[C][B]; W2[Ga][a][cb] = W1[Gab][ab][c]; } } } ji = T2BBnew.params->rowidx[J][I]; for(Gd=0; Gd < nirreps; Gd++) { Gcb = Gkd = Gk ^ Gd; /* assumes totally symmetric */ Ga = Gd ^ Gij; /* assumes totally symmetric */ kd = WMaFe.row_offset[Gkd][K]; WMaFe.matrix[Gkd] = dpd_block_matrix(bvirtpi[Gd], WMaFe.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&WMaFe, Gkd, kd, bvirtpi[Gd]); Z = block_matrix(bvirtpi[Ga], bvirtpi[Gd]); nrows = bvirtpi[Ga]; ncols = bvirtpi[Gd]; nlinks = WMaFe.params->coltot[Gkd]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks, WMaFe.matrix[Gkd][0], nlinks, 0.0, Z[0], ncols); for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(d=0; d < bvirtpi[Gd]; d++) { DD = bvir_off[Gd] + d; ad = T2BBnew.params->colidx[A][DD]; da = T2BBnew.params->colidx[DD][A]; T2BBnew.matrix[Gij][ji][ad] += -Z[a][d]; T2BBnew.matrix[Gij][ji][da] += Z[a][d]; } } dpd_free_block(WMaFe.matrix[Gkd], bvirtpi[Gd], WMaFe.params->coltot[Gkd]); free_block(Z); } /* t_jKcD <-- 1/2 t_ijKabC W_idab */ jk = T2BAnew.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ id = Wmafe.row_offset[Gid][I]; Wmafe.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], Wmafe.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Wmafe, Gid, id, bvirtpi[Gd]); Z = block_matrix(avirtpi[Gc], bvirtpi[Gd]); nrows = avirtpi[Gc]; ncols = bvirtpi[Gd]; nlinks = Wmafe.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, Wmafe.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; for(d=0; d < bvirtpi[Gd]; d++) { DD = bvir_off[Gd] + d; dc = T2BAnew.params->colidx[DD][C]; T2BAnew.matrix[Gjk][jk][dc] += Z[c][d]; } } free_block(Z); dpd_free_block(Wmafe.matrix[Gid], bvirtpi[Gd], Wmafe.params->coltot[Gid]); } /* t_jKbD <-- t_ijKabC W_iDaC */ /* sort W1(ab,C) to W3(b,aC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBB.params->coltot[Gab]; ab++) { A = FBB.params->colorb[Gab][ab][0]; B = FBB.params->colorb[Gab][ab][1]; Gb = FBB.params->ssym[B]; b = B - bvir_off[Gb]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; ac = WmAfE.params->colidx[A][C]; W3[Gb][b][ac] = W1[Gab][ab][c]; } } } jk = T2BAnew.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gac = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gb = Gac ^ Gijk; /* assumes totally symmetric */ id = WmAfE.row_offset[Gid][I]; WmAfE.matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WmAfE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WmAfE, Gid, id, avirtpi[Gd]); Z = block_matrix(bvirtpi[Gb], avirtpi[Gd]); nrows = bvirtpi[Gb]; ncols = avirtpi[Gd]; nlinks = WmAfE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks, WmAfE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(b=0; b < bvirtpi[Gb]; b++) { B = bvir_off[Gb] + b; for(d=0; d < avirtpi[Gd]; d++) { DD = avir_off[Gd] + d; bd = T2BAnew.params->colidx[B][DD]; T2BAnew.matrix[Gjk][jk][bd] += Z[b][d]; } } dpd_free_block(WmAfE.matrix[Gid], avirtpi[Gd], WmAfE.params->coltot[Gid]); free_block(Z); } /* t_miab <--- +t_ijKabC W_jKmC */ /* t_imab <--- -t_ijKabC W_jKmC */ jk = WmNiE.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WmNiE.col_offset[Gjk][Gm]; nrows = FBB.params->coltot[Gab]; ncols = boccpi[Gm]; nlinks = avirtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks, &(WmNiE.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = bocc_off[Gm] + m; mi = T2BBnew.params->rowidx[M][I]; im = T2BBnew.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { T2BBnew.matrix[Gmi][mi][ab] += Z[ab][m]; T2BBnew.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } /* t_mKbC <-- 1/2 t_ijKabC W_ijma */ /* sort W(ab,C) to W(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FBB.params->coltot[Gab]; ab++ ){ A = FBB.params->colorb[Gab][ab][0]; B = FBB.params->colorb[Gab][ab][1]; Ga = FBB.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = T2BAnew.params->colidx[B][C]; W3[Ga][a][bc] = W1[Gab][ab][c]; } } } ij = Wmnie.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = Wmnie.col_offset[Gij][Gm]; nrows = T2BAnew.params->coltot[Gmk]; ncols = boccpi[Gm]; nlinks = bvirtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows, &(Wmnie.matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; mk = T2BAnew.params->rowidx[M][K]; for(bc=0; bc < nrows; bc++) { T2BAnew.matrix[Gmk][mk][bc] += Z[bc][m]; } } dpd_free_block(Z, nrows, ncols); } /* t_iMbC <-- t_ijKabC W_KjMa */ /* sort W(ab,C) to W(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FBB.params->coltot[Gab]; ab++ ){ A = FBB.params->colorb[Gab][ab][0]; B = FBB.params->colorb[Gab][ab][1]; Ga = FBB.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = T2BAnew.params->colidx[B][C]; W3[Ga][a][bc] = W1[Gab][ab][c]; } } } kj = WMnIe.params->rowidx[K][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gim = Gi ^ Gm; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = WMnIe.col_offset[Gjk][Gm]; nrows = T2BAnew.params->coltot[Gim]; ncols = aoccpi[Gm]; nlinks = bvirtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows, &(WMnIe.matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; im = T2BAnew.params->rowidx[I][M]; for(bc=0; bc < nrows; bc++) { T2BAnew.matrix[Gim][im][bc] += Z[bc][m]; } } dpd_free_block(Z, nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { /* This will need to change for non-totally-symmetric cases */ Gc = Gab ^ Gijk; dpd_free_block(W1[Gab], FBB.params->coltot[Gab], avirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; /* assumes totally symmetric */ dpd_free_block(W2[Ga], bvirtpi[Ga], WMaFe.params->coltot[Gcb]); } for(Gb=0; Gb < nirreps; Gb++) { Gac = Gb ^ Gijk; /* assumes totally symmetric */ dpd_free_block(W3[Gb], bvirtpi[Gb], WmAfE.params->coltot[Gac]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); free(W3); dpd_buf4_close(&EBB); dpd_buf4_close(&EAB); dpd_buf4_close(&EBA); dpd_buf4_close(&FBB); dpd_buf4_close(&FAB); dpd_buf4_close(&FBA); dpd_buf4_close(&T2BB); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fij); dpd_file2_close(&fab); dpd_file2_mat_wrt(&t1newA); dpd_file2_init(&d1, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&d1, &t1newA); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_axpy(&t1newA, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1newA); dpd_file2_mat_wrt(&t1newB); dpd_file2_init(&d1, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&d1, &t1newB); dpd_file2_close(&d1); dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_axpy(&t1newB, &t1, 1, 0); dpd_file2_close(&t1); dpd_file2_close(&t1newB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&DBB, h); dpd_buf4_mat_irrep_close(&DBA, h); } dpd_buf4_close(&DBB); dpd_buf4_close(&DBA); free_int_matrix(W_offset); dpd_file2_mat_close(&FME); dpd_file2_close(&FME); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); dpd_buf4_close(&WMaFe); dpd_buf4_close(&Wmafe); dpd_buf4_close(&WmAfE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&WmNiE, h); dpd_buf4_mat_irrep_close(&Wmnie, h); dpd_buf4_mat_irrep_close(&WMnIe, h); } dpd_buf4_close(&WmNiE); dpd_buf4_close(&Wmnie); dpd_buf4_close(&WMnIe); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2BBnew, h); dpd_buf4_mat_irrep_close(&T2BBnew, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 10, 15, 11, 16, 0, "dijab"); dpd_buf4_dirprd(&D2, &T2BBnew); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&T2BBnew, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2BBnew); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&T2BAnew, h); dpd_buf4_mat_irrep_close(&T2BAnew, h); } dpd_buf4_sort(&T2BAnew, CC_MISC, qpsr, 22, 28, "CC3 tIjAb"); dpd_buf4_close(&T2BAnew); dpd_buf4_init(&T2BAnew, CC_MISC, 0, 22, 28, 22, 28, 0, "CC3 tIjAb"); dpd_buf4_init(&D2, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&D2, &T2BAnew); dpd_buf4_close(&D2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2BAnew, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2BAnew); } }} // namespace psi::ccenergy �����������������������psi3/src/bin/ccenergy/cc3_Wabei.cc������������������������������������������������������������������0000644�0001015�0000765�00000112377�10754663017�015451� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3_Wabei(): Compute the Wabei matrix from CC3 theory, which is ** given in spin orbitals as: ** ** Wabei = <ab||ei> - P(ab) t_m^a <mb||ei> + t_i^f <ab||ef> ** - P(ab) t_i^f t_m^b <am||ef> + t_m^a t_n^b <mn||ei> ** + t_m^a t_i^f t_n^b <mn||ef> ** ** The basic strategy for this code is to generate two intermediate ** quantities, Z1(Ab,EI) and Z2(Ei,Ab), which are summed in the final ** step to give the complete W(Ei,Ab) intermediate. This is sorted ** to W(iE,bA) storage for use in the triples equations. ** ** TDC, Feb 2004 */ void purge_Wabei(void); void cc3_Wabei(void) { int omit = 0; dpdfile2 t1, tIA, tia; dpdbuf4 Z, Z1, Z2, Z3; dpdbuf4 B, C, D, E, F, W; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC_TMP0, "CC3 Z(Ei,Ab)"); dpd_buf4_close(&F); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "CC3 Z(Ab,Ei)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC3 Z(Ei,Ab)"); /* Z1(Ab,Ei) <-- <Ab|Ef> * t(i,f) */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &t1, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&B); /* Z(Mb,Ei) <-- <Mb|Ei> + <Mb|Ef> t(i,f) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC3 Z(Mb,Ei)"); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC3 Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &t1, &Z, 3, 1, 0, 1, 1); dpd_buf4_close(&F); /* Z1(Ab,Ei) <-- - t(M,A) * Z(Mb,Ei) */ dpd_contract244(&t1, &Z, &Z1, 0, 0, 0, -1, 1); dpd_buf4_close(&Z); /* Z(Ei,Am) <-- <Ei|Am> + <Am|Ef> t(i,f) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_TMP0, qpsr, 11, 11, "CC3 Z(Ei,Am)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC3 Z(Am,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract424(&F, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_sort_axpy(&Z, CC_TMP0, rspq, 11, 11, "CC3 Z(Ei,Am)", 1); dpd_buf4_close(&Z); /* Z2(Ei,Ab) <-- - Z(Ei,Am) t(m,b) */ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC3 Z(Ei,Am)"); dpd_contract424(&Z, &t1, &Z2, 3, 0, 0, -1, 1); dpd_buf4_close(&Z); /* Z(Mn,Ei) = <Mn|Ei> + <Mn|Ef> t_i^f */ dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_buf4_copy(&E, CC_TMP0, "CC3 Z(Mn,Ei)"); dpd_buf4_close(&E); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "CC3 Z(Mn,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &t1, &Z, 3, 1, 0, 1, 1); dpd_buf4_close(&D); /* Z'(An,Ei) = t_M^A Z(Mn,Ei) */ dpd_buf4_init(&Z3, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC3 Z(An,Ei)"); dpd_contract244(&t1, &Z, &Z3, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); /* Z2(Ei,Ab) <-- Z'(An,Ei) t_n^b */ dpd_contract424(&Z3, &t1, &Z2, 1, 0, 0, 1, 1); dpd_buf4_close(&Z3); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /* W(Ab,Ei) = Z1(Ab,Ei) + Z2(Ei,Ab) */ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "CC3 Z(Ab,Ei)"); dpd_buf4_sort_axpy(&Z1, CC_TMP0, rspq, 11, 5, "CC3 Z(Ei,Ab)", 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC3 Z(Ei,Ab)"); dpd_buf4_sort(&Z2, CC3_HET1, qpsr, 10, 5, "CC3 WAbEi (iE,bA)"); dpd_buf4_close(&Z2); dpd_file2_close(&t1); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /** term 1 **/ /* W(A>B,EI) <--- <AB||EI> */ /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC3 WABEI (A>B,EI)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC3 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC3 WaBeI (aB,eI)"); dpd_buf4_close(&F); /** term 2 **/ /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&W); /** term 3 **/ /** W(A>B,EI) <--- P(A/B)( -<BM||IE> * t1[M][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 11, 5, 11, 0, "CC3 ZABEI (AB,EI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&tIA, &C, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&C); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TMP2, qprs, 7, 11, "CC3 WABEI (A>B,EI)", -1); dpd_buf4_close(&Z); /** W(a>b,ei) <--- P(a/b)( -<bm||ie> * t1[m][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 11, 5, 11, 0, "CC3 Zabei (ab,ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&tia, &C, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&C); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TMP2, qprs, 7, 11, "CC3 Wabei (a>b,ei)", -1); dpd_buf4_close(&Z); /** W(Ab,Ei) <--- -t1[M][A] * <Mb|Ei> - <mA|iE> * t1[m][b] **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); /* sort the C integrals */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia|jb> (ia,bj)"); dpd_buf4_sort(&C, CC_CINTS, qprs, 11, 11, "C <ia|jb> (ai,bj)"); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 11, 11, 11, 11, 0, "C <ia|jb> (ai,bj)"); dpd_contract424(&C, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /** W(aB,eI) <--- - t1[m][a] * <mB|eI> - <aM|eI> * t1[M][B] **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC3 ZaBeI (eI,aB)"); dpd_buf4_init(&C, CC_CINTS, 0, 11, 11, 11, 11, 0, "C <ia|jb> (ai,bj)"); dpd_contract424(&C, &tIA, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z, CC_TMP2, rspq, 5, 11, "CC3 WaBeI (aB,eI)",1); dpd_buf4_close(&Z); /** term 4 **/ /** W(A>B,EI) <--- -P(A/B)( <BM||FE>*t1[I][F]*t1[M][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(MB,EI)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(BA,EI)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP2, qprs, 7, 11, "CC3 WABEI (A>B,EI)", 1); dpd_buf4_close(&Z1); /** W(a>b,ei) <--- -P(a/b)( <bm||fe>*t1[i][f]*t1[m][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(mb,ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(ba,ei)"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP2, qprs, 7, 11, "CC3 Wabei (a>b,ei)", 1); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- -<bM|fE>*t1[i][f]*t1[M][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(Ab,Ei)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- -<Am|Ef>*t1[i][f]*t1[m][b] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 5, 5, 5, 0, "Z(Ef,Ab)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract424(&F, &tia, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(Ab,Ei)"); dpd_contract424(&Z, &tia, &Z1, 1, 1, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /** W(aB,eI) <--- -<Bm|Fe>*t1[I][F]*t1[m][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(mB,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(aB,eI)"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /** W(aB,eI) <--- -<aM|eF>*t1[I][F]*t1[M][B] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(aM,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z1(eI,aB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP2, rspq, 5, 11, "CC3 WaBeI (aB,eI)", -1); dpd_buf4_close(&Z1); /** term 5 **/ /** W(A>B,EI) <--- 0.5 * P(A/B)( <NM||EI>*t1[M][B]*t1[N][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(EI,NB)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&E); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(AB,EI)"); dpd_contract244(&tIA, &Z, &Z1, 0, 2, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, 0.5); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP2, qprs, 7, 11, "CC3 WABEI (A>B,EI)", -0.5); dpd_buf4_close(&Z1); /** W(a>b,ei) <--- 0.5 * P(a/b)( <nm||ei>*t1[m][b]*t1[n][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(ei,nb)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&E); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(ab,ei)"); dpd_contract244(&tia, &Z, &Z1, 0, 2, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, 0.5); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP2, qprs, 7, 11, "CC3 Wabei (a>b,ei)", -0.5); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- 0.5 * ( <Nm|Ei>*t1[m][b]*t1[N][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(Ei,Nb)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(Ab,Ei) <--- 0.5 * ( <Mn|Ei>*t1[M][A]*t1[n][b] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(Ei,Mb)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- 0.5 * ( <nM|eI>*t1[M][B]*t1[n][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(eI,nB)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- 0.5 * ( <mN|eI>*t1[m][a]*t1[N][B] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(eI,mB)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** term 6 **/ /** W(A>B,EI) <--- 0.5 * P(A/B) <NM||EF> * t1[M][B]*t1[I][F]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (NM,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z1 (EI,NB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Z2, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z2 (AB,EI)"); dpd_contract244(&tIA, &Z1, &Z2, 0, 2, 0, 0.5, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z2, CC_TMP2, qprs, 7, 11, "CC3 WABEI (A>B,EI)", -1); dpd_buf4_close(&Z2); /** W(a>b,ei) <--- 0.5 * P(a/b) <nm||ef> * t1[m][b]*t1[i][f]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (nm,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z1 (ei,nb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Z2, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z2 (ab,ei)"); dpd_contract244(&tia, &Z1, &Z2, 0, 2, 0, 0.5, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z2, CC_TMP2, qprs, 7, 11, "CC3 Wabei (a>b,ei)", -1); dpd_buf4_close(&Z2); /** W(Ab,Ei) <--- <Nm|Ef> * t1[m][b]*t1[i][f]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z1 (Ei,Nb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z1, &W, 0, 2, 0, 1, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- <nM|eF> * t1[M][B]*t1[I][F]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z1 (eI,nB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z1, &W, 0, 2, 0, 1, 1); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 11, 7, "CC3 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 11, 7, "CC3 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 11, 5, "CC3 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 11, 5, "CC3 WaBeI (eI,aB)"); dpd_buf4_close(&W); /* purge before final sort */ purge_Wabei(); /* sort to Wabei (ie,ba) */ dpd_buf4_init(&W, CC_TMP2, 0, 11, 7, 11, 7, 0, "CC3 WABEI (EI,A>B)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 WABEI (IE,B>A)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 11, 7, 11, 7, 0, "CC3 Wabei (ei,a>b)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 Wabei (ie,b>a)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 11, 5, 11, 5, 0, "CC3 WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WAbEi (iE,bA)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 11, 5, 11, 5, 0, "CC3 WaBeI (eI,aB)"); dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_close(&W); } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /** term 1 **/ /* W(A>B,EI) <--- <AB||EI> */ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 7, 21, "CC3 WABEI (A>B,EI)"); dpd_buf4_close(&F); /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31,15, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 17, 31, "CC3 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_copy(&F, CC_TMP0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_close(&F); /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_sort(&F, CC_TMP0, psrq, 29, 25, "CC3 WaBeI (aB,eI)"); dpd_buf4_close(&F); /** term 2 **/ /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 28, 24, 28, 0, "CC3 ZIeBa (Ie,Ba)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract244(&tIA, &B, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_TMP0, srqp, 29, 25, "CC3 WaBeI (aB,eI)", 1); dpd_buf4_close(&Z); /** term 3 **/ /** W(A>B,EI) <--- P(A/B)( -<BM||IE> * t1[M][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "CC3 ZABEI (AB,EI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_contract244(&tIA, &C, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&C); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TMP0, qprs, 7, 21, "CC3 WABEI (A>B,EI)", -1); dpd_buf4_close(&Z); /** W(a>b,ei) <--- P(a/b)( -<bm||ie> * t1[m][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "CC3 Zabei (ab,ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&tia, &C, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&C); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_TMP0, qprs, 17, 31, "CC3 Wabei (a>b,ei)", -1); dpd_buf4_close(&Z); /** W(Ab,Ei) <--- -t1[M][A] * <Mb|Ei> - <mA|iE> * t1[m][b] **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 26, 26, 26, 26, 0, "C <Ai|Bj>"); dpd_contract424(&C, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /** W(aB,eI) <--- - t1[m][a] * <mB|eI> - <aM|eI> * t1[M][B] **/ dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /* sort the C integrals */ dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_sort(&C, CC_CINTS, qpsr, 25, 25, "C <aI|bJ>"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 25, 29, 25, 29, 0, "CC3 ZaBeI (eI,aB)"); dpd_buf4_init(&C, CC_CINTS, 0, 25, 25, 25, 25, 0, "C <aI|bJ>"); dpd_contract424(&C, &tIA, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z, CC_TMP0, rspq, 29, 25, "CC3 WaBeI (aB,eI)",1); dpd_buf4_close(&Z); /** term 4 **/ /** W(A>B,EI) <--- -P(A/B)( <BM||FE>*t1[I][F]*t1[M][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(MB,EI)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z1(BA,EI)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 7, 21, "CC3 WABEI (A>B,EI)", 1); dpd_buf4_close(&Z1); /** W(a>b,ei) <--- -P(a/b)( <bm||fe>*t1[i][f]*t1[m][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(mb,ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z1(ba,ei)"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 17, 31, "CC3 Wabei (a>b,ei)", 1); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- -<bM|fE>*t1[i][f]*t1[M][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 26, 28, 26, 0, "Z1(Ab,Ei)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- -<Am|Ef>*t1[i][f]*t1[m][b] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 28, 26, 28, 0, "Z1(Ei,Ab)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, rspq, 28, 26, "CC3 WAbEi (Ab,Ei)", -1); dpd_buf4_close(&Z1); /** W(aB,eI) <--- -<Bm|Fe>*t1[I][F]*t1[m][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "Z(mB,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 29, 25, 29, 25, 0, "Z1(aB,eI)"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_axpy(&Z1, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /** W(aB,eI) <--- -<aM|eF>*t1[I][F]*t1[M][B] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, 0, 25, 29, 25, 29, 0, "Z1(eI,aB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, rspq, 29, 25, "CC3 WaBeI (aB,eI)", -1); dpd_buf4_close(&Z1); /** term 5 **/ /** W(A>B,EI) <--- 0.5 * P(A/B)( <NM||EI>*t1[M][B]*t1[N][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 21, 20, 21, 20, 0, "Z(EI,NB)"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&E); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z1(AB,EI)"); dpd_contract244(&tIA, &Z, &Z1, 0, 2, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, 0.5); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 7, 21, "CC3 WABEI (A>B,EI)", -0.5); dpd_buf4_close(&Z1); /** W(a>b,ei) <--- 0.5 * P(a/b)( <nm||ei>*t1[m][b]*t1[n][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 31, 30, 31, 30, 0, "Z(ei,nb)"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, -1, 0); dpd_buf4_close(&E); dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z1(ab,ei)"); dpd_contract244(&tia, &Z, &Z1, 0, 2, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, 0.5); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 17, 31, "CC3 Wabei (a>b,ei)", -0.5); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- 0.5 * ( <Nm|Ei>*t1[m][b]*t1[N][A] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 26, 24, 26, 24, 0, "Z(Ei,Nb)"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(Ab,Ei) <--- 0.5 * ( <Mn|Ei>*t1[M][A]*t1[n][b] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 26, 24, 26, 24, 0, "Z(Ei,Mb)"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- 0.5 * ( <nM|eI>*t1[M][B]*t1[n][a] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 25, 27, 25, 27, 0, "Z(eI,nB)"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- 0.5 * ( <mN|eI>*t1[m][a]*t1[N][B] ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 25, 27, 25, 27, 0, "Z(eI,mB)"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z, &W, 0, 2, 0, 0.5, 1); dpd_buf4_close(&W); /** term 6 **/ /** W(A>B,EI) <--- 0.5 * P(A/B) <NM||EF> * t1[M][B]*t1[I][F]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 21, 0, 21, 0, "Z (NM,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 21, 20, 21, 20, 0, "Z1 (EI,NB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Z2, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z2 (AB,EI)"); dpd_contract244(&tIA, &Z1, &Z2, 0, 2, 0, 0.5, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z2, CC_TMP0, qprs, 7, 21, "CC3 WABEI (A>B,EI)", -1); dpd_buf4_close(&Z2); /** W(a>b,ei) <--- 0.5 * P(a/b) <nm||ef> * t1[m][b]*t1[i][f]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 31, 10, 31, 0, "Z (nm,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 31, 30, 31, 30, 0, "Z1 (ei,nb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Z2, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z2 (ab,ei)"); dpd_contract244(&tia, &Z1, &Z2, 0, 2, 0, 0.5, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z2, CC_TMP0, qprs, 17, 31, "CC3 Wabei (a>b,ei)", -1); dpd_buf4_close(&Z2); /** W(Ab,Ei) <--- <Nm|Ef> * t1[m][b]*t1[i][f]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z (Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 24, 26, 24, 0, "Z1 (Ei,Nb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z1, &W, 0, 2, 0, 1, 1); dpd_buf4_close(&W); /** W(aB,eI) <--- <nM|eF> * t1[M][B]*t1[I][F]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 25, 23, 25, 0, "Z (nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 25, 27, 25, 27, 0, "Z1 (eI,nB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_contract244(&tia, &Z1, &W, 0, 2, 0, 1, 1); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC3 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 21, 7, "CC3 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC3 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 31, 17, "CC3 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC3 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 26, 28, "CC3 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC3 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 25, 29, "CC3 WaBeI (eI,aB)"); dpd_buf4_close(&W); /* sort to Wabei (ie,ab) */ dpd_buf4_init(&W, CC_TMP2, 0, 21, 7, 21, 7, 0, "CC3 WABEI (EI,A>B)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 20, 7, "CC3 WABEI (IE,B>A)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 20, 7, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 31, 17, 31, 17, 0, "CC3 Wabei (ei,a>b)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 30, 17, "CC3 Wabei (ie,b>a)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 30, 17, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 26, 28, 26, 28, 0, "CC3 WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HET1, qpsr, 27, 29, "CC3 WAbEi (iE,bA)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 25, 29, 25, 29, 0, "CC3 WaBeI (eI,aB)"); dpd_buf4_sort(&W, CC3_HET1, qpsr, 24, 28, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_close(&W); } } void purge_Wabei(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wabei matrix elements */ dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC3 WABEI (EI,A>B)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; esym = W.params->psym[e]; E = e - vir_off[esym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC3 Wabei (ei,a>b)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { i = W.params->roworb[h][ei][1]; isym = W.params->qsym[i]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { if (I >= (occpi[isym] - openpi[isym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC3 WAbEi (Ei,Ab)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; i = W.params->roworb[h][ei][1]; esym = W.params->psym[e]; isym = W.params->qsym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; if ((E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) || (A >= (virtpi[asym] - openpi[asym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC3 WaBeI (eI,aB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { for(ab=0; ab<W.params->coltot[h]; ab++) { b = W.params->colorb[h][ab][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_Wamef.cc������������������������������������������������������������������0000644�0001015�0000765�00000022602�10754663017�015450� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3_Wamef(): Compute the Wamef matrix from CC3 theory, which is ** given in spin-orbitals as: ** ** Wamef = <am||ef> - t_n^a <nm||ef> ** ** TDC, Feb 2004 */ void purge_Wamef(void); void cc3_Wamef(void) { dpdbuf4 F, D, W; dpdfile2 t1,tia,tIA; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC3_HET1, qpsr, 11, 5, "CC3 WAmEf (Am,Ef)"); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&t1, &D, &W, 0, 0, 0, -1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 5, "CC3 WAmEf (mA,Ef)"); dpd_buf4_close(&W); } else if (params.ref == 1) { /** ROHF **/ /** W(AM,E>F) <--- <AM||EF> **/ /** W(am,e>f) <--- <am||ef> **/ dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WAMEF (AM,E>F)"); dpd_buf4_copy(&F, CC3_HET1, "CC3 Wamef (am,e>f)"); dpd_buf4_close(&F); /** W(Am,Ef) <--- <Am|Ef> **/ /** W(aM,eF) <--- <aM|eF> **/ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WAmEf (Am,Ef)"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WaMeF (aM,eF)"); dpd_buf4_close(&F); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* t(N,A) <NM||EF> --> W(AM,E>F) */ dpd_buf4_init(&W, CC3_HET1, 0, 11, 7, 11, 7, 0, "CC3 WAMEF (AM,E>F)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 WAMEF (MA,F>E)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /* t(n,a) <nm||ef> --> W(am,e>f) */ dpd_buf4_init(&W, CC3_HET1, 0, 11, 7, 11, 7, 0, "CC3 Wamef (am,e>f)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 Wamef (ma,f>e)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /* t(N,A) <Nm|Ef> --> W(Am,Ef) */ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WAmEf (mA,fE)"); dpd_buf4_close(&W); /* t(n,a) <nM|eF> --> W(aM,eF) */ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WaMeF (aM,eF)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_close(&W); dpd_file2_close(&tia); dpd_file2_close(&tIA); purge_Wamef(); } else if (params.ref == 2) { dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /** W(AM,E>F) <--- <AM||EF> **/ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WAMEF (AM,E>F)"); dpd_buf4_close(&F); /** W(am,e>f) <--- <am||ef> **/ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 Wamef (am,e>f)"); dpd_buf4_close(&F); /** W(Am,Ef) <--- <Am|Ef> **/ dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WAmEf (Am,Ef)"); dpd_buf4_close(&F); /** W(aM,eF) <--- <aM|eF> **/ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_copy(&F, CC3_HET1, "CC3 WaMeF (aM,eF)"); dpd_buf4_close(&F); /** W(AM,E>F) <--- tNA * <NM||EF> **/ dpd_buf4_init(&W, CC3_HET1, 0, 21, 7, 21, 7, 0, "CC3 WAMEF (AM,E>F)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qprs, 20, 7, "CC3 WAMEF (MA,F>E)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 20, 7, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /** W(am,e>f) <--- tna * <nm||ef> **/ dpd_buf4_init(&W, CC3_HET1, 0, 31, 17, 31, 17, 0, "CC3 Wamef (am,e>f)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qprs, 30, 17, "CC3 Wamef (ma,f>e)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 30, 17, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /** W(Am,Ef) <--- tNA * <Nm|Ef> **/ dpd_buf4_init(&W, CC3_HET1, 0, 26, 28, 26, 28, 0, "CC3 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qpsr, 27, 29, "CC3 WAmEf (mA,fE)"); dpd_buf4_close(&W); /** W(aM,eF) <--- tna * <nM|eF> **/ dpd_buf4_init(&W, CC3_HET1, 0, 25, 29, 25, 29, 0, "CC3 WaMeF (aM,eF)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HET1, qpsr, 24, 28, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_close(&W); dpd_file2_close(&tia); dpd_file2_close(&tIA); } } void purge_Wamef(void) { dpdfile2 FAE, Fmi, FME, Fme; dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n, omit; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wamef matrix elements */ dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 WAMEF (AM,E>F)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; asym = W.params->psym[a]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; f = W.params->colorb[h][ef][1]; esym = W.params->rsym[e]; fsym = W.params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((A >= (virtpi[asym] - openpi[asym])) || (E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 Wamef (am,e>f)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { m = W.params->roworb[h][ma][1]; msym = W.params->qsym[m]; M = m - occ_off[msym]; for(ef=0; ef< W.params->coltot[h]; ef++) { if (M >= (occpi[msym] - openpi[msym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WAmEf (Am,Ef)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; m = W.params->roworb[h][ma][1]; asym = W.params->psym[a]; msym = W.params->qsym[m]; M = m - occ_off[msym]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if ((A >= (virtpi[asym] - openpi[asym])) || (M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WaMeF (aM,eF)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { for(ef=0; ef< W.params->coltot[h]; ef++) { f = W.params->colorb[h][ef][1]; fsym = W.params->ssym[f]; F = f - vir_off[fsym]; if (F >= (virtpi[fsym] - openpi[fsym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } }} // namespace psi::ccenergy ������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_Wmbij.cc������������������������������������������������������������������0000644�0001015�0000765�00000047465�10754663017�015477� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3_Wmbij(): Compute the Wmbij components of the ** T1-similarity-transformed Hamiltonian matrix, which is given in ** spin-orbitals as: ** ** Wmbij = <mb||ij> + P(ij) t_i^e <mb||ej> - t_n^b Wmnij + t_i^e t_j^f <mb||ef> ** ** where the Wmnij intermediate is described in cc3_Wmnij.c. ** ** TDC, Feb 2004 */ void purge_Wmbij(void); void cc3_Wmbij(void) { dpdbuf4 C, D, E, F, W, W1, Z, X, Z1; dpdfile2 t1, tia, tIA; if(params.ref == 0) { /** RHF **/ /* W(Mb,Ij) <-- <Mb|Ij> */ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0,"E <ij|ka>"); dpd_buf4_sort(&E, CC3_HET1, rspq, 10, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_close(&E); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* W(Mb,Ij) <-- - t(n,b) W(Mn,Ij) */ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&W1, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&W1, &t1, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&W1); dpd_buf4_close(&W); /* W(Mb,Ij) <-- + t(j,e) <Mb|Ie) */ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &t1, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /* Z(Mb,Ej) = <Mb|Ej> + t(j,f) * <Mb|Ef> */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC3 ZMbEj (Mb,Ej)"); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC3 ZMbEj (Mb,Ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &t1, &Z, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /* W(Mb,Ij) <-- t(I,E) * Z(Mb,Ej) */ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC3 ZMbEj (Mb,Ej)"); dpd_contract244(&t1, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_sort(&W, CC3_HET1, rspq, 0, 10, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_file2_close(&t1); } else if (params.ref == 1) { /** W(MB,I>J) <--- <MB||IJ> **/ /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC3_HET1, rspq, 10, 2, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_sort(&E, CC3_HET1, rspq, 10, 2, "CC3 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC3_HET1, rspq, 10, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_sort(&E, CC3_HET1, rspq, 10, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); /**** Term II ****/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1.0, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** Term III ****/ /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 2, 10, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC3_HET1, 0, 0, 2, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 2, 10, 2, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC3_HET1, 0, 0, 2, 2, 2, 0, "CC3 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&Z, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 0, 11, 0, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC3_HET1, qpsr, 10, 0, "CC3 WmBiJ (mB,iJ)", 1.0); dpd_buf4_close(&Z1); /**** Term IV ****/ /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 Wmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /* do purge before sort */ purge_Wmbij(); /* do final sort to get (Ij,Mb) */ dpd_buf4_init(&W, CC3_HET1, 0, 10, 2, 10, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 2, 10, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 2, 10, 2, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 2, 10, "CC3 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 0, 10, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 0, 10, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if (params.ref == 2) { /** W(MB,I>J) <--- <MB||IJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC3_HET1, rspq, 20, 2, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_close(&E); /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC3_HET1, rspq, 30, 12, "CC3 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC3_HET1, rspq, 24, 22, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_close(&E); /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC3_HET1, rspq, 27, 23, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); /**** Term II ****/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 20, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 20, 0, 20, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC3_HET1, 0, 20, 0, 20, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 30, 10, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 30, 10, 30, 10, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC3_HET1, 0, 30, 10, 30, 12, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 27, 23, 27, 23, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 27, 23, 27, 23, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1.0, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** Term III ****/ /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 20, 2, 20, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC3_HET1, 0, 0, 2, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 30, 12, 30, 12, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC3_HET1, 0, 10, 12, 12, 12, 0, "CC3 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_init(&Z, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 22, 26, 22, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC3_HET1, qpsr, 27, 23, "CC3 WmBiJ (mB,iJ)", 1.0); dpd_buf4_close(&Z1); /**** Term IV ****/ /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 20, 0, 20, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 30, 10, 30, 12, 0, "CC3 Wmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC3_HET1, 0, 27, 23, 27, 23, 0, "CC3 WmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&W, CC3_HET1, 0, 20, 2, 20, 2, 0, "CC3 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 2, 20, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 30, 12, 30, 12, 0, "CC3 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 12, 30, "CC3 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 22, 24, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 27, 23, 27, 23, 0, "CC3 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC3_HET1, rspq, 23, 27, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); } } void purge_Wmbij(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC3_HET1, 0, 10, 2,"CC3 WMBIJ (MB,I>J)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { b = W.params->roworb[h][mb][1]; bsym = W.params->qsym[b]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 2,"CC3 Wmbij (mb,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 0,"CC3 WMbIj (Mb,Ij)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { for(ij=0; ij<W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if (J >= (occpi[jsym] - openpi[jsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 0,"CC3 WmBiJ (mB,iJ)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; b = W.params->roworb[h][mb][1]; msym = W.params->psym[m]; bsym = W.params->qsym[b]; M = m - occ_off[msym]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; isym = W.params->rsym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_Wmnie.cc������������������������������������������������������������������0000644�0001015�0000765�00000024157�10754663017�015477� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3_Wmnie(): Compute the Wmnie matrix from CC3 theory, which is ** given in spin-orbitals as: ** ** Wmnie = <mn||ie> + t_i^f <mn||fe> ** ** TDC, Feb 2004 */ void purge_Wmnie(void); void cc3_Wmnie(void) { dpdbuf4 E, D, W, Z; dpdfile2 tIA, tia; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_copy(&E, CC3_HET1, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_close(&E); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_file2_close(&tIA); dpd_buf4_close(&D); dpd_buf4_close(&W); } else if (params.ref == 1) { /* ROHF */ /** W(M>N,IE) <--- <MN||IE> **/ /** W(m>n,ie) <--- <mn||ie> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 2, 11, "CC3 WMNIE (M>N,EI)"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 2, 11, "CC3 Wmnie (m>n,ei)"); dpd_buf4_close(&E); /** W(Mn,Ie) <--- <Mn|Ie> **/ /** W(mN,iE) <--- <mN|iE> **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 0, 11, "CC3 WMnIe (Mn,eI)"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 0, 11, "CC3 WmNiE (mN,Ei)"); dpd_buf4_close(&E); /**** Term 2 ****/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* <M>N||EF> T(I,F) --> W(M>N,EI) */ /* <m>n||ef> T(i,f) --> W(m>n,ei) */ dpd_buf4_init(&W, CC3_HET1, 0, 2, 11, 2, 11, 0, "CC3 WMNIE (M>N,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &tIA, &W, 3, 1, 0, -1, 1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 2, 11, 2, 11, 0, "CC3 Wmnie (m>n,ei)"); dpd_contract424(&D, &tia, &W, 3, 1, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* Z(nM,eI) = <nM|eF> T(I,F) */ dpd_buf4_init(&Z, CC_TMP1, 0, 0, 11, 0, 11, 0, "Z(nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(nM,eI) --> W(Mn,eI) */ dpd_buf4_sort_axpy(&Z, CC3_HET1, qprs, 0, 11, "CC3 WMnIe (Mn,eI)", 1); dpd_buf4_close(&Z); /* Z(Nm,Ei) = <Nm|Ef> T(i,f) */ dpd_buf4_init(&Z, CC_TMP1, 0, 0, 11, 0, 11, 0, "Z(Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(Nm,Ei) --> W(mN,Ei) */ dpd_buf4_sort_axpy(&Z, CC3_HET1, qprs, 0, 11, "CC3 WmNiE (mN,Ei)", 1); dpd_buf4_close(&Z); /* purge (mn,ei)'s before sorting */ purge_Wmnie(); /* also put "normal" sorted versions in CC3_HET1 */ dpd_buf4_init(&W, CC3_HET1, 0, 2, 11, 2, 11, 0, "CC3 WMNIE (M>N,EI)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 2, 10, "CC3 WMNIE (M>N,IE)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 2, 11, 2, 11, 0, "CC3 Wmnie (m>n,ei)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 2, 10, "CC3 Wmnie (m>n,ie)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 0, 11, 0, "CC3 WMnIe (Mn,eI)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 0, 10, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 0, 11, 0, "CC3 WmNiE (mN,Ei)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 0, 10, "CC3 WmNiE (mN,iE)"); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if (params.ref == 2) { /** W(M>N,IE) <--- <MN||IE> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 2, 21, "CC3 WMNIE (M>N,EI)"); dpd_buf4_close(&E); /** W(m>n,ie) <--- <mn||ie> **/ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 12, 31, "CC3 Wmnie (m>n,ei)"); dpd_buf4_close(&E); /** W(Mn,Ie) <--- <Mn|Ie> **/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 22, 25, "CC3 WMnIe (Mn,eI)"); dpd_buf4_close(&E); /** W(mN,iE) <--- <mN|iE> **/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC3_HET1, pqsr, 23, 26, "CC3 WmNiE (mN,Ei)"); dpd_buf4_close(&E); /**** Term 2 ****/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /* <M>N||EF> T(I,F) --> W(M>N,EI) */ dpd_buf4_init(&W, CC3_HET1, 0, 2, 21, 2, 21, 0, "CC3 WMNIE (M>N,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &tIA, &W, 3, 1, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* <m>n||ef> T(i,f) --> W(m>n,ei) */ dpd_buf4_init(&W, CC3_HET1, 0, 12, 31, 12, 31, 0, "CC3 Wmnie (m>n,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &tia, &W, 3, 1, 0, -1, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* Z(nM,eI) = <nM|eF> T(I,F) */ dpd_buf4_init(&Z, CC_TMP1, 0, 23, 25, 23, 25, 0, "Z(nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(nM,eI) --> W(Mn,eI) */ dpd_buf4_sort_axpy(&Z, CC3_HET1, qprs, 22, 25, "CC3 WMnIe (Mn,eI)", 1); dpd_buf4_close(&Z); /* Z(Nm,Ei) = <Nm|Ef> T(i,f) */ dpd_buf4_init(&Z, CC_TMP1, 0, 22, 26, 22, 26, 0, "Z(Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(Nm,Ei) --> W(mN,Ei) */ dpd_buf4_sort_axpy(&Z, CC3_HET1, qprs, 23, 26, "CC3 WmNiE (mN,Ei)", 1); dpd_buf4_close(&Z); /* also put "normal" sorted versions in CC3_HET1 */ dpd_buf4_init(&W, CC3_HET1, 0, 2, 21, 2, 21, 0, "CC3 WMNIE (M>N,EI)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 2, 20, "CC3 WMNIE (M>N,IE)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 12, 31, 12, 31, 0, "CC3 Wmnie (m>n,ei)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 12, 30, "CC3 Wmnie (m>n,ie)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 22, 25, 22, 25, 0, "CC3 WMnIe (Mn,eI)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 22, 24, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 23, 26, 23, 26, 0, "CC3 WmNiE (mN,Ei)"); dpd_buf4_sort(&W, CC3_HET1, pqsr, 23, 27, "CC3 WmNiE (mN,iE)"); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } } /* Purge Wmnie matrix elements */ void purge_Wmnie(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC3_HET1, 0, 0, 11,"CC3 WMnIe (Mn,eI)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { if (N >= (occpi[nsym] - openpi[nsym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_init(&W, CC3_HET1, 0, 2, 11, "CC3 WMNIE (M>N,EI)"); for(h=0; h < W.params->nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if (E >= (virtpi[esym] - openpi[esym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 2, 11,"CC3 Wmnie (m>n,ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { i = W.params->colorb[h][ei][1]; isym = W.params->ssym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 0, 11,"CC3 WmNiE (mN,Ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; i = W.params->colorb[h][ei][1]; esym = W.params->rsym[e]; isym = W.params->ssym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/cc3_Wmnij.cc������������������������������������������������������������������0000644�0001015�0000765�00000027007�10754663017�015501� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* cc3_Wmnij(): Compute the Wmnij components of the ** T1-similarity-transformed Hamiltonian matrix, which is given in ** spin-orbitals as: ** ** Wmnij = <mn||ij> + P(ij) t_j^e <mn||ie> + t_i^e t_j^f <mn||ef> ** ** TDC, Feb 2004 */ void purge_Wmnij(void); void cc3_Wmnij(void) { dpdbuf4 A, E, D, Z, W, Z1, X; dpdfile2 t1, tIA, tia; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_close(&A); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 0, 0, 0, 0, "CC3 ZMnIj (Mn,Ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&E, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HET1, qpsr, 0, 0, "CC3 WMnIj (Mn,Ij)", 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "CC3 ZMnIf (Mn,If)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&t1, &D, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&Z, &t1, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if (params.ref == 1) { /** W(M>N,I>J) <--- <MN||IJ> **/ /** W(m>n,i>j) <--- <mn||ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 WMNIJ (M>N,I>J)"); dpd_buf4_copy(&A, CC3_HET1, "CC3 Wmnij (m>n,i>j)"); dpd_buf4_close(&A); /** W(Mn,Ij) <--- <Mn|Ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_close(&A); /** term 2 **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(M>N,I>J) <-- ZMNIJ <-- P(I/J)( <MN||IE> * t1[J][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,IJ)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (M>N,JI)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,JI)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(m>n,i>j) <-- Zmnij <-- P(i/j)( <mn||ie> * t1[j][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (m>n,ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (m>n,ji)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (m>n,ji)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 Wmnij (m>n,i>j)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ie> * t1[j][e] ****/ dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&E, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ej> * t1[I][E] ****/ dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_contract244(&tIA, &E, &W, 1, 2, 1, 1.0, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /** term 3 **/ /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z (M>N,EJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z (m>n,ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 Wmnij (m>n,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(Mn,Ij) <-- tIE tjf <Mn|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z (Mn,Ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); purge_Wmnij(); } else if (params.ref == 2) { /** W(M>N,I>J) <--- <MN||IJ> **/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 WMNIJ (M>N,I>J)"); dpd_buf4_close(&A); /** W(m>n,i>j) <--- <mn||ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 12, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 Wmnij (m>n,i>j)"); dpd_buf4_close(&A); /** W(Mn,Ij) <--- <Mn|Ij> **/ dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_copy(&A, CC3_HET1, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_close(&A); /** term 2 **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(M>N,I>J) <-- ZMNIJ <-- P(I/J)( <MN||IE> * t1[J][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,IJ)"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_contract424(&E, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 2, 0, "Z (M>N,JI)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 2, 0, 2, 0, 0, "Z (M>N,JI)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(m>n,i>j) <-- Zmnij <-- P(i/j)( <mn||ie> * t1[j][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 10, 12, 10, 0, "Z (m>n,ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_contract424(&E, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&E); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 12, 10, "Z (m>n,ji)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 12, 10, 12, 10, 0, "Z (m>n,ji)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HET1, 0, 12, 10, 12, 12, 0, "CC3 Wmnij (m>n,i>j)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ie> * t1[j][e] ****/ dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /**** W(Mn,Ij) <-- <Mn|Ej> * t1[I][E] ****/ dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract244(&tIA, &E, &W, 1, 2, 1, 1.0, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /** term 3 **/ /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 21, 2, 21, 0, "Z (M>N,EJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 2, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(M>N,I>J) <-- tIE tJF <MN||EF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 31, 12, 31, 0, "Z (m>n,ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 12, 10, 12, 12, 0, "CC3 Wmnij (m>n,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** W(Mn,Ij) <-- tIE tjf <Mn|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z (Mn,Ej)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1.0, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } } void purge_Wmnij(void) { dpdfile2 FAE, Fmi, FME, Fme; dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n, omit; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wmnij matrix elements */ dpd_file4_init(&W, CC3_HET1, 0, 2, 2,"CC3 Wmnij (m>n,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) || (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 0, 0,"CC3 WMnIj (Mn,Ij)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if ((J >= (occpi[jsym] - openpi[jsym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/ccenergy.1��������������������������������������������������������������������0000644�0001015�0000765�00000017661�10166351612�015234� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH ccenergy 1 " 18 June, 2002" "" "" . \" . \" Notice of Document Modification . \" . \" man page created by Daniel Crawford, 18 June 2002 . \" . \" .SH NAME ccenergy \- Coupled cluster singles and doubles energy program .SH DESCRIPTION .LP The program .B ccenergy solves the coupled cluster singles and doubles amplitude equations. This code will work for spin-restricted closed-shell Hartree-Fock (RHF), spin-restricted open-shell Hartree-Fock (ROHF), spin-unrestricted Hartree-Fock (UHF), and Brueckner references. The algorithm makes use of spatial symmetry (D2h and its subgroups) and matrix algebra techniques for efficiency. In addition, the program can be used to simulate local correlation methods. .SH REFERENCES .LP .IP "1." An introduction to coupled cluster theory for computational chemists, T.D. Crawford and H.F. Schaefer, Rev. Comp. Chem. .B 14 33-136 (2000). .IP "2." A direct product decomposition approach for symmetry exploitation in many-body methods. I. Energy calculations, J.F. Stanton, J. Gauss, J.D. Watts, and R.J. Bartlett, J. Chem. Phys. .B 94 4334 (1991). .SH INPUT FORMAT .LP Input for this program is read from the file input.dat. The following keywords are valid: .IP "\fBWFN =\fP \fIstring\fP" Specifies the type of coupled cluster calculation desired. Valid entries at present are \fICCSD\fP, \fICCSD_T\fP, \fIBCCD\fP, and \fIBCCD_T\fP. There is no default. .IP "\fBREFERENCE =\fP \fIstring\fP" Specifies the type of orbitals used for the single-determinant reference function. Valied entries at present are \fIRHF\fP, \fIUHF\fP, and \fIROHF\fP. There is no default. .IP "\fBMEMORY =\fP (\fIreal\fP MB)" The maximum amount of core memory to be used, in megabytes. See also the \fBCACHETYPE\fP and \fBCACHELEV\fP keywords below. .IP "\fBCONVERGENCE =\fP \fIinteger\fP" Convergence desired on the CC amplitudes. Convergence is achieved when the RMS of the error in the CC wave function is less than 10**(-n). The default is 7. .IP "\fBBRUECKNER_CONV =\fP \fIinteger\fP" Convergence desired for the orbitals in Brueckner-CC calculations. Convergence is achieved when the largest absolute value of a single T1 ampltiudes is is less than 10**(-n). The default is 5. .IP "\fBMAXITER =\fP \fIinteger\fP" Maximum number of iterations to solve the coupled cluster equations. Defaults to 50. .IP "\fBFREEZE_CORE =\fP \fIstring\fP" Specifes whether core orbitals should be automatically frozen in the CC wave function. If this option is set (preferably in the "default" section of input), then the .B cscf program will identify the core orbitals. Subsequent codes starting with .B transqt will freeze these orbitals. Note that this keyword usually makes the additional specification of FROZEN_DOCC unnecessary, but it may still be required in some special cases. Allowed values are true, false, yes, no, 1, 0, large and small. .IP "\fBFROZEN_DOCC =\fP \fIinteger_array\fP" The number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. The Cotton ordering of the irredicible representations is used. The default is the zero vector. .B NB: This keyword is actually read by the integral transformation program .B transqt and the integral sorting program .B ccsort. See also the FREEZE_CORE keyword. .IP "\fBFROZEN_UOCC =\fP \fIinteger_vector\fP" The number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. The default is the zero vector. .B NB: This keyword is actually read by the integral transformation program .B transqt and the integral sorting program .B ccsort. .IP "\fBPRINT =\fP \fIinteger\fP" Determines the verbosity of the output. A value of 0 (the default) specifies minimal printing and a value of 2 will give output updates as each term of the CC equations is complete. No other values have yet been used. .IP "\fBNUM_AMPS =\fP \fIinteger\fP" Specifies the number of largest T1 and T2 amplitudes to print at the end of the CC procedure. Default is 10. .IP "\fBPRINT_MP2_AMPS =\fP \fIboolean\fP" Indicates if the MP2 amplitudes (which are starting guesses for RHF and UHF reference functions) should be printed. Default is false. .IP "\fBRESTART =\fP \fIboolean\fP" Allows the program to use old T1 and T2 vectors from previous calculations as the initial guesses for a new calculation. This is particularly useful for geometry optimizations. The default is \fITRUE\fP. .B NB: The ability to restart a calculation is also controlled by the phases of the molecular orbitals. If the parameter \fBPHASE\fP from the chkpt file (cf. libchkpt) is set to \fIFALSE\fP, then the user's \fBRESTART\fP input will be ignored. This behavior can be overriden, however with the \fBFORCE_RESTART\fP option. .IP "\fBFORCE_RESTART=\fP \fIboolean\fP" Forces possible restart of the CC equations from previous T1 and T2 amplitudes. This option should be used only by experts. .IP "\fBAO_BASIS=\fP \fIstring\fP" Compute contributions from four virtual-index integrals, <ab|cd>, from the atomic-orbital basis integrals. This option slows the calculation somewhat, but greatly reduces disk-space requirements. Allowed values are NONE (default), DISK (use the AO-basis integrals stored on disk), or DIRECT (use .B cints to compute the AO-integrals on the fly in each CC iteration). The DIRECT option is still experimental and should be used only by experts. .IP "\fBCACHETYPE=\fP \fIstring\fP" Selects the priority type for maintaining the automatic memory cache used by the DPD codes. (See libdpd.html for further details.) A value of \fILOW\fP (the default) selects a "low priority" scheme in which the deletion of items from the cache is based on pre-programmed priorities. A value of \fILRU\fP selects a "least recently used" scheme in which the oldest item in the cache will be the first one deleted. .IP "\fBCACHELEV=\fP \fIinteger\fP" Selects the level of automatic cacheing desired in the storage of various amplitudes, integrals, and intermediates in the coupled cluster procedure. A value of 0 retains no quantities in cache, while a level of 6 attempts to store all quantities in cache. For particularly large calculations, a value of 0 may help with certain types of memory problems. The default is 2, which means that all four-index quantites with up to two virtual-orbital indices (e.g., <ij|ab> integrals) may be held in the cache. .IP "\fBDIIS=\fP \fIboolean\fP" Selects the use of the direct-inversion in the iterative subspace (DIIS) technique of Pulay for convergence acceleration. The default is \fITRUE\fP. .IP "\fBLOCAL=\fP \fIboolean\fP" Simluate the effects of local correlation techniques. The default is \fIFALSE\fP. .IP "\fBLOCAL_CUTOFF=\fP \fIreal\fP" The tolerance value (always between one and zero) for the Broughton-Pulay completeness check used to contruct orbital domains for local-CC calculations. The default is 0.02. See J. Broughton and P. Pulay, J. Comp. Chem. \fB14\fP, 736-740 (1993) and C. Hampel and H.-J. Werner, J. Chem. Phys. \fB104\fP, 6286-6297 (1996). .IP "\fBLOCAL_METHOD=\fP \fIstring\fP" Selects the type of local-CCSD scheme to be simulated. Valid entries are \fIWERNER\fP for the method develop by H.-J. Werner and co-workers or \fIAOBASIS\fP for the method developed by G.E. Scuseria and co-workers (currently inoperative). The default is \fIWERNER\fP. .IP "\fBLOCAL_WEAKP=\fP \fIstring\fP" Selects the desired treatment of "weak pairs" in the local-CCSD method. A value of \fINEGLECT\fP ignores weak pairs entirely. A value of \fINONE\fP treats weak pairs in the same manner as strong pairs. A value of \fIMP2\fP (the default) uses second-order perturbation theory to correct the local-CCSD energy computed with weak pairs ignored. .IP "\fBPRINT_PAIR_ENERGIES =\fP \fIboolean\fP" Indicates if the MP2 and CCSD pair energies should be printed. This is only possible for RHF references. Default is false. .IP "\fBSPINADAPT_ENERGIES =\fP \fIboolean\fP" Indicates if spin-adapted pair energies should be printed. Default is false. �������������������������������������������������������������������������������psi3/src/bin/ccenergy/ccenergy.cc�������������������������������������������������������������������0000644�0001015�0000765�00000043434�11112564564�015462� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ /* ** CCENERGY: Program to calculate coupled cluster energies. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <sys/types.h> #include <unistd.h> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libint/libint.h> #include <sys/types.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #include "Local.h" #include "globals.h" namespace psi { namespace ccenergy { #define IOFF_MAX 32641 void init_io(int argc, char *argv[]); void init_ioff(void); void title(void); void get_moinfo(void); void get_params(void); void init_amps(void); void tau_build(void); void taut_build(void); double energy(void); double mp2_energy(void); void sort_amps(void); void Fae_build(void); void Fmi_build(void); void Fme_build(void); void t1_build(void); void Wmnij_build(void); void Z_build(void); void Y_build(void); void X_build(void); void Wmbej_build(void); void t2_build(void); void tsave(void); int converged(void); double diagnostic(void); double d1diag(void); double new_d1diag(void); void exit_io(void); void cleanup(void); void update(void); void diis(int iter); void ccdump(void); int **cacheprep_uhf(int level, int *cachefiles); int **cacheprep_rhf(int level, int *cachefiles); void cachedone_rhf(int **cachelist); void cachedone_uhf(int **cachelist); void memchk(void); struct dpd_file4_cache_entry *priority_list(void); void spinad_amps(void); void status(const char *, FILE *); void lmp2(void); void amp_write(void); void amp_write(void); int rotate(void); double **fock_build(double **D); void analyze(void); void cc3_Wmnie(void); void cc3_Wamef(void); void cc3_Wmnij(void); void cc3_Wmbij(void); void cc3_Wabei(void); void cc3(void); void cc2_Wmnij_build(void); void cc2_Wmbij_build(void); void cc2_Wabei_build(void); void cc2_t2_build(void); void one_step(void); void denom(void); void pair_energies(double** epair_aa, double** epair_ab); void print_pair_energies(double* emp2_aa, double* emp2_ab, double* ecc_aa, double* ecc_ab); void checkpoint(void); /* local correlation functions */ void local_init(void); void local_done(void); }} //namespace psi::ccenergy using namespace psi::ccenergy; int main(int argc, char *argv[]) { int done=0, brueckner_done=0; int h, i, j, a, b, row, col, natom; double **geom, *zvals, value; FILE *efile; int **cachelist, *cachefiles; struct dpd_file4_cache_entry *priority; dpdfile2 t1; dpdbuf4 t2; double *emp2_aa, *emp2_ab, *ecc_aa, *ecc_ab, tval; moinfo.iter=0; init_io(argc,argv); init_ioff(); title(); #ifdef TIME_CCENERGY timer_init(); timer_on("CCEnergy"); #endif get_moinfo(); get_params(); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 2) { /** UHF **/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); if(strcmp(params.aobasis,"NONE")) { /* Set up new DPD's for AO-basis algorithm */ dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.sopi, moinfo.sosym, moinfo.boccpi, moinfo.bocc_sym, moinfo.sopi, moinfo.sosym); dpd_set_default(0); } } else { /** RHF or ROHF **/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); priority = priority_list(); dpd_init(0, moinfo.nirreps, params.memory, params.cachetype, cachefiles, cachelist, priority, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); if(strcmp(params.aobasis,"NONE")) { /* Set up new DPD for AO-basis algorithm */ dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.sopi, moinfo.sosym); dpd_set_default(0); } } if ( (params.just_energy) || (params.just_residuals) ) { one_step(); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } if(params.local) { local_init(); if(!strcmp(local.weakp,"MP2")) lmp2(); } init_amps(); /* Compute the MP2 energy while we're here */ if(params.ref == 0 || params.ref == 2) { moinfo.emp2 = mp2_energy(); psio_write_entry(CC_INFO, "MP2 Energy", (char *) &(moinfo.emp2),sizeof(double)); } if(params.print_mp2_amps) amp_write(); tau_build(); taut_build(); fprintf(outfile, "\t Solving CC Amplitude Equations\n"); fprintf(outfile, "\t ------------------------------\n"); fprintf(outfile, " Iter Energy RMS T1Diag D1Diag New D1Diag\n"); fprintf(outfile, " ---- --------------------- --------- ---------- ---------- ----------\n"); moinfo.ecc = energy(); pair_energies(&emp2_aa, &emp2_ab); moinfo.t1diag = diagnostic(); moinfo.d1diag = d1diag(); moinfo.new_d1diag = new_d1diag(); update(); checkpoint(); for(moinfo.iter=1; moinfo.iter <= params.maxiter; moinfo.iter++) { sort_amps(); #ifdef TIME_CCENERGY timer_on("F build"); #endif Fme_build(); Fae_build(); Fmi_build(); if(params.print & 2) status("F intermediates", outfile); #ifdef TIME_CCENERGY timer_off("F build"); #endif t1_build(); if(params.print & 2) status("T1 amplitudes", outfile); if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { cc2_Wmnij_build(); if(params.print & 2) status("Wmnij", outfile); #ifdef TIME_CCENERGY timer_on("Wmbij build"); #endif cc2_Wmbij_build(); if(params.print & 2) status("Wmbij", outfile); #ifdef TIME_CCENERGY timer_off("Wmbij build"); #endif #ifdef TIME_CCENERGY timer_on("Wabei build"); #endif cc2_Wabei_build(); if(params.print & 2) status("Wabei", outfile); #ifdef TIME_CCENERGY timer_off("Wabei build"); #endif #ifdef TIME_CCENERGY timer_on("T2 Build"); #endif cc2_t2_build(); if(params.print & 2) status("T2 amplitudes", outfile); #ifdef TIME_CCENERGY timer_off("T2 Build"); #endif } else { #ifdef TIME_CCENERGY timer_on("Wmbej build"); #endif Wmbej_build(); if(params.print & 2) status("Wmbej", outfile); #ifdef TIME_CCENERGY timer_off("Wmbej build"); #endif Z_build(); if(params.print & 2) status("Z", outfile); Wmnij_build(); if(params.print & 2) status("Wmnij", outfile); #ifdef TIME_CCENERGY timer_on("T2 Build"); #endif t2_build(); if(params.print & 2) status("T2 amplitudes", outfile); #ifdef TIME_CCENERGY timer_off("T2 Build"); #endif if( (!strcmp(params.wfn,"CC3")) || (!strcmp(params.wfn,"EOM_CC3"))) { /* step1: build cc3 intermediates, Wabei, Wmnie, Wmbij, Wamef */ cc3_Wmnij(); cc3_Wmbij(); cc3_Wmnie(); cc3_Wamef(); cc3_Wabei(); /* step2: loop over T3's and add contributions to T1 and T2 as you go */ cc3(); } } if (!params.just_residuals) denom(); /* apply denominators to T1 and T2 */ if(converged()) { done = 1; tsave(); tau_build(); taut_build(); moinfo.ecc = energy(); moinfo.t1diag = diagnostic(); moinfo.d1diag = d1diag(); moinfo.new_d1diag = new_d1diag(); sort_amps(); update(); fprintf(outfile, "\n\tIterations converged.\n"); fflush(outfile); fprintf(outfile, "\n"); amp_write(); if (params.analyze != 0) analyze(); break; } if(params.diis) diis(moinfo.iter); tsave(); tau_build(); taut_build(); moinfo.ecc = energy(); moinfo.t1diag = diagnostic(); moinfo.d1diag = d1diag(); moinfo.new_d1diag = new_d1diag(); update(); checkpoint(); } fprintf(outfile, "\n"); if(!done) { fprintf(outfile, "\t ** Wave function not converged to %2.1e ** \n", params.convergence); fflush(outfile); if(strcmp(params.aobasis,"NONE")) dpd_close(1); dpd_close(0); cleanup(); #ifdef TIME_CCENERGY timer_off("CCEnergy"); timer_done(); #endif exit_io(); exit(PSI_RETURN_FAILURE); } fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n", moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n", moinfo.eref); if(params.ref == 0 || params.ref == 2) { fprintf(outfile, "\n\tScaled_OS MP2 correlation energy = %20.15f\n", moinfo.escsmp2_os); fprintf(outfile, "\tScaled_SS MP2 correlation energy = %20.15f\n", moinfo.escsmp2_ss); fprintf(outfile, "\tSCS-MP2 correlation energy = %20.15f\n", moinfo.escsmp2_os + moinfo.escsmp2_ss); fprintf(outfile, " * SCS-MP2 total energy = %20.15f\n", moinfo.eref + moinfo.escsmp2_os + moinfo.escsmp2_ss); fprintf(outfile, "\n\tOpposite-spin MP2 correlation energy = %20.15f\n", moinfo.emp2_os); fprintf(outfile, "\tSame-spin MP2 correlation energy = %20.15f\n", moinfo.emp2_ss); fprintf(outfile, "\tMP2 correlation energy = %20.15f\n", moinfo.emp2); fprintf(outfile, " * MP2 total energy = %20.15f\n", moinfo.eref + moinfo.emp2); } if( (!strcmp(params.wfn,"CC3")) || (!strcmp(params.wfn,"EOM_CC3"))) { fprintf(outfile, "\tCC3 correlation energy = %20.15f\n", moinfo.ecc); fprintf(outfile, " * CC3 total energy = %20.15f\n", moinfo.eref + moinfo.ecc); } else if( (!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { fprintf(outfile, "\tCC2 correlation energy = %20.15f\n", moinfo.ecc); fprintf(outfile, " * CC2 total energy = %20.15f\n", moinfo.eref + moinfo.ecc); if(params.local && !strcmp(local.weakp,"MP2")) fprintf(outfile, " * LCC2 (+LMP2) total energy = %20.15f\n", moinfo.eref + moinfo.ecc + local.weak_pair_energy); } else { fprintf(outfile, "\n\tScaled_OS CCSD correlation energy = %20.15f\n", moinfo.escscc_os); fprintf(outfile, "\tScaled_SS CCSD correlation energy = %20.15f\n", moinfo.escscc_ss); fprintf(outfile, "\tSCS-CCSD correlation energy = %20.15f\n", moinfo.escscc_os + moinfo.escscc_ss); fprintf(outfile, " * SCS-CCSD total energy = %20.15f\n", moinfo.eref + moinfo.escscc_os + moinfo.escscc_ss); fprintf(outfile, "\n\tOpposite-spin CCSD correlation energy = %20.15f\n", moinfo.ecc_os); fprintf(outfile, "\tSame-spin CCSD correlation energy = %20.15f\n", moinfo.ecc_ss); fprintf(outfile, "\tCCSD correlation energy = %20.15f\n", moinfo.ecc); fprintf(outfile, " * CCSD total energy = %20.15f\n", moinfo.eref + moinfo.ecc); if(params.local && !strcmp(local.weakp,"MP2")) fprintf(outfile, " * LCCSD (+LMP2) total energy = %20.15f\n", moinfo.eref + moinfo.ecc + local.weak_pair_energy); } fprintf(outfile, "\n"); /* Write total energy to the checkpoint file */ chkpt_init(PSIO_OPEN_OLD); chkpt_wt_etot(moinfo.ecc+moinfo.eref); chkpt_close(); /* Write pertinent data to energy.dat for Dr. Yamaguchi */ if(!strcmp(params.wfn,"CCSD") || !strcmp(params.wfn, "BCCD")) { chkpt_init(PSIO_OPEN_OLD); natom = chkpt_rd_natom(); geom = chkpt_rd_geom(); zvals = chkpt_rd_zvals(); chkpt_close(); ffile(&efile, "energy.dat",1); fprintf(efile, "*\n"); for(i=0; i < natom; i++) fprintf(efile, " %4d %5.2f %13.10f %13.10f %13.10f\n", i+1, zvals[i], geom[i][0], geom[i][1], geom[i][2]); free_block(geom); free(zvals); fprintf(efile, "SCF(30) %22.12f\n", moinfo.escf); fprintf(efile, "REF(100) %22.12f\n", moinfo.eref); if(!strcmp(params.wfn,"CCSD")) fprintf(efile, "CCSD %22.12f\n", (moinfo.ecc+moinfo.eref)); else if(!strcmp(params.wfn,"BCCD")) fprintf(efile, "BCCD %22.12f\n", (moinfo.ecc+moinfo.eref)); fclose(efile); } /* Generate the spin-adapted RHF amplitudes for later codes */ if(params.ref == 0) spinad_amps(); /* Compute pair energies */ if(params.print_pair_energies) { pair_energies(&ecc_aa, &ecc_ab); print_pair_energies(emp2_aa, emp2_ab, ecc_aa, ecc_ab); } if( ((!strcmp(params.wfn,"CC3")) || (!strcmp(params.wfn,"EOM_CC3"))) && (params.dertype == 1 || params.dertype == 3) && params.ref == 0) { params.ref = 1; /* generate the ROHF versions of the He^T1 intermediates */ cc3_Wmnij(); cc3_Wmbij(); cc3_Wmnie(); cc3_Wamef(); cc3_Wabei(); params.ref == 0; } if(params.local) { /* local_print_T1_norm(); */ local_done(); } if(params.brueckner) brueckner_done = rotate(); if(strcmp(params.aobasis,"NONE")) dpd_close(1); dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); #ifdef TIME_CCENERGY timer_off("CCEnergy"); timer_done(); #endif exit_io(); if(params.brueckner && brueckner_done) exit(PSI_RETURN_ENDLOOP); else exit(PSI_RETURN_SUCCESS); } extern "C" { const char *gprgid() { const char *prgid = "CCENERGY"; return(prgid); } } namespace psi { namespace ccenergy { void init_io(int argc, char *argv[]) { int i, num_unparsed; char *progid, *argv_unparsed[100]; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); params.just_energy = 0; params.just_residuals = 0; for (i=1, num_unparsed=0; i<argc; ++i) { if (!strcmp(argv[i],"--just_energy")) { /* just read T's on disk and compute energy */ params.just_energy = 1; } else if (!strcmp(argv[i],"--just_residuals")) { params.just_residuals = 1; /* just read T's on disk and compute residual matrix elements */ } else { argv_unparsed[num_unparsed++] = argv[i]; } } psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed, argv_unparsed, 0); ip_cwk_add(":INPUT"); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void title(void) { fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCENERGY *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); } void exit_io(void) { int i; for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); /* delete CC_TMP files */ for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } void memchk(void) { pid_t mypid; FILE *memdat; char comm[80]; mypid = getpid(); memdat = freopen("output.dat","a",stdout); sprintf(comm, "grep \"VmSize\" /proc/%d/status", (int) mypid); system(comm); } void init_ioff(void) { int i; ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; } void checkpoint(void) { int i; for(i=CC_MIN; i <= CC_MAX; i++) psio_close(i,1); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } /* just use T's on disk and don't iterate */ void one_step(void) { dpdfile2 t1; dpdbuf4 t2; double tval; moinfo.ecc = energy(); fprintf(outfile,"\n\tValues computed from T amplitudes on disk.\n"); fprintf(outfile,"Reference expectation value computed: %20.15lf\n", moinfo.ecc); psio_write_entry(CC_HBAR, "Reference expectation value", (char *) &(moinfo.ecc), sizeof(double)); if (params.just_residuals) { Fme_build(); Fae_build(); Fmi_build(); t1_build(); Wmbej_build(); Z_build(); Wmnij_build(); t2_build(); if ( (params.ref == 0) || (params.ref == 1) ) { dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_copy(&t1, CC_OEI, "FAI residual"); dpd_file2_close(&t1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "FAI residual"); tval = dpd_file2_dot_self(&t1); dpd_file2_close(&t1); fprintf(outfile,"\tNorm squared of <Phi_I^A|Hbar|0> = %20.15lf\n",tval); } if (params.ref == 1) { dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_copy(&t1, CC_OEI, "Fai residual"); dpd_file2_close(&t1); } else if (params.ref == 2) { dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_copy(&t1, CC_OEI, "Fai residual"); dpd_file2_close(&t1); } if (params.ref == 0) { dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); tval = dpd_buf4_dot_self(&t2); fprintf(outfile,"\tNorm squared of <Phi^Ij_Ab|Hbar|0>: %20.15lf\n",tval); dpd_buf4_close(&t2); } else if (params.ref == 1) { dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_copy(&t2, CC_HBAR, "WABIJ residual"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_copy(&t2, CC_HBAR, "Wabij residual"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&t2); } else if(params.ref ==2) { dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_copy(&t2, CC_HBAR, "WABIJ residual"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_copy(&t2, CC_HBAR, "Wabij residual"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&t2); } } return; } }} // namespace psi::ccenergy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/converged.cc������������������������������������������������������������������0000644�0001015�0000765�00000020524�10757640026�015634� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libipv1/ip_lib.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { int converged(void) { int row,col,h,nirreps; double rms=0.0; dpdfile2 T1, T1old; dpdbuf4 T2, T2old; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&T1old, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1old); dpd_file2_mat_rd(&T1old); for(h=0; h < nirreps; h++) for(row=0; row < T1.params->rowtot[h]; row++) for(col=0; col < T1.params->coltot[h]; col++) rms += (T1.matrix[h][row][col] - T1old.matrix[h][row][col]) * (T1.matrix[h][row][col] - T1old.matrix[h][row][col]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&T1old); dpd_file2_close(&T1old); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&T1old, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1old); dpd_file2_mat_rd(&T1old); for(h=0; h < nirreps; h++) for(row=0; row < T1.params->rowtot[h]; row++) for(col=0; col < T1.params->coltot[h]; col++) rms += (T1.matrix[h][row][col] - T1old.matrix[h][row][col]) * (T1.matrix[h][row][col] - T1old.matrix[h][row][col]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&T1old); dpd_file2_close(&T1old); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&T1old, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1old); dpd_file2_mat_rd(&T1old); for(h=0; h < nirreps; h++) for(row=0; row < T1.params->rowtot[h]; row++) for(col=0; col < T1.params->coltot[h]; col++) rms += (T1.matrix[h][row][col] - T1old.matrix[h][row][col]) * (T1.matrix[h][row][col] - T1old.matrix[h][row][col]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&T1old); dpd_file2_close(&T1old); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&T1old, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1old); dpd_file2_mat_rd(&T1old); for(h=0; h < nirreps; h++) for(row=0; row < T1.params->rowtot[h]; row++) for(col=0; col < T1.params->coltot[h]; col++) rms += (T1.matrix[h][row][col] - T1old.matrix[h][row][col]) * (T1.matrix[h][row][col] - T1old.matrix[h][row][col]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&T1old); dpd_file2_close(&T1old); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&T1old, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1old); dpd_file2_mat_rd(&T1old); for(h=0; h < nirreps; h++) for(row=0; row < T1.params->rowtot[h]; row++) for(col=0; col < T1.params->coltot[h]; col++) rms += (T1.matrix[h][row][col] - T1old.matrix[h][row][col]) * (T1.matrix[h][row][col] - T1old.matrix[h][row][col]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&T1old); dpd_file2_close(&T1old); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&T2old, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&T2old, h); dpd_buf4_mat_irrep_rd(&T2old, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) rms += (T2.matrix[h][row][col] - T2old.matrix[h][row][col]) * (T2.matrix[h][row][col] - T2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&T2old, h); } dpd_buf4_close(&T2old); dpd_buf4_close(&T2); } rms = sqrt(rms); moinfo.conv = rms; if(rms < params.convergence) return 1; else return 0; } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/CT2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000042334�10757640026�014253� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* CT2(): Contributions of C-class integrals to T2. ** ** t(ij,ab) <--- P(ij) P(ab) t(m,a) t(i,e) <mb||je> ** ** This term is evaluated in two N^5 steps: ** (1) Y(mb,ji) = t(i,e) <mb||je> (o^3 v^2) ** (2) t(ij,ab) <--- P(ij) P(ab) t(m,a) Y(mb,ji) (4 * o^3 v^2) ** ** Spin cases for UHF or ROHF orbitals: ** ------------------------------------ ** *** AA *** ** + t(M,A) t(I,E) <MB||JE> - t(M,B) t(I,E) <MA||JE> ** - t(M,A) t(J,E) <MB||IE> + t(M,B) t(J,E) <MA||IE> ** ** *** BB *** ** + t(m,a) t(i,e) <mb||je> - t(m,b) t(i,e) <ma||je> ** - t(m,a) t(j,e) <me||ie> + t(m,b) t(j,e) <ma||ie> ** ** *** AB *** ** - t(M,A) t(I,E) <Mj|Eb> - t(m,b) t(I,E) <mA|jE> ** - t(M,A) t(j,e) <Mb|Ie> - t(m,b) t(j,e) <mI|eA> ** ** For the AA and BB spin cases, only the first term needs to be evaluated, ** while for the AB case, all four terms are different. ** ** This code was rewritten to eliminate all buf4_sort calls involving ** mixing indices between bra and ket (i.e., a "complex" sort). ** The current version requires six pairs of contractions (one each for AA ** and BB and four for AB) and twelve simple sorts (four each for AA, BB, ** and AB). ** TDC ** May 2000 */ void CT2(void) { dpdfile2 tIA, tia; dpdbuf4 Y, C, D, T2new, T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ /* C(MB||JE) * T(I,E) --> Y(MB,JI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(MB,JI) --> T(AB,JI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(AB,JI) --> T(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IJ,AB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IJ,AB) - T2(JI,AB) - T2(IJ,BA) - T2(JI,BA) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> T2new (IJ,AB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* C(mb||je) * T(i,e) --> Y(mb,ji) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,a) * Y(mb,ji) --> T(ab,ji) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(ab,ji) --> T(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ij,ab) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) - T2(ji,ba) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(ij,ab) --> T2new (ij,ab) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ /* C(MB||JE) * T(I,E) --> Y(MB,JI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(MB,JI) --> T(AB,JI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(AB,JI) --> T(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IJ,AB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IJ,AB) - T2(JI,AB) - T2(IJ,BA) - T2(JI,BA) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> T2new (IJ,AB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* C(mb||je) * T(i,e) --> Y(mb,ji) */ dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,a) * Y(mb,ji) --> T(ab,ji) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 15, 10, 15, 10, 0, "X(15,10)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(ab,ji) --> T(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 10, 15, "X(10,15) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ij,ab) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 10, 15, "X(10,15) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 10, 15, "X(10,15) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 10, 15, "X(10,15) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) - T2(ji,ba) */ dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(ij,ab) --> T2new (ij,ab) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 29, 23, 29, 23, 0, "X(29,23)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 28, 22, 28, 22, 0, "X(28,22)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 24, 23, 24, 23, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 28, 23, 28, 23, 0, "X(28,23)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 27, 22, 27, 22, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 29, 22, 29, 22, 0, "X(29,22)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /*** UHF ***/ } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/d1diag.cc���������������������������������������������������������������������0000644�0001015�0000765�00000011104�10757640026�015003� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* Computes the D1 diagnostic as defined in: * * C.L. Janssen and I.M.B. Nielsen, Chem. Phys. Lett. 290, 423 (1998). [RHF * version] * * I.M.B. Nielsen and C.L. Janssen, Chem. Phys. Lett. 310, 568 (1999). * * M.L. Leininger, I.M.B. Nielsen, T.D. Crawford, and C.L. Janssen, * Chem. Phys. Lett. 328, 431-436 (2000). [ROHF version] * * */ double d1diag_t1_rhf(void) { int h, nirreps, i; double **T, **C, *E, max; dpdfile2 T1; nirreps = moinfo.nirreps; max = 0.0; dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) { if(T1.params->rowtot[h]) { T = block_matrix(T1.params->rowtot[h], T1.params->rowtot[h]); if(T1.params->rowtot[h] && T1.params->coltot[h]) { C_DGEMM('n','t',T1.params->rowtot[h],T1.params->rowtot[h], T1.params->coltot[h],1.0,T1.matrix[h][0],T1.params->coltot[h], T1.matrix[h][0],T1.params->coltot[h], 0.0, T[0], T1.params->rowtot[h]); } /* newmm(T1.matrix[h], 0, T1.matrix[h], 1, T, T1.params->rowtot[h], T1.params->coltot[h], T1.params->rowtot[h], 1.0, 0.0); */ E = init_array(T1.params->rowtot[h]); C = block_matrix(T1.params->rowtot[h], T1.params->rowtot[h]); sq_rsp(T1.params->rowtot[h], T1.params->rowtot[h], T, E, 0, C, 1e-12); /* Find maximum eigenvalue of T */ for(i=0; i < T1.params->rowtot[h]; i++) if(E[i] > max) max = E[i]; free_block(T); free_block(C); free(E); } } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); max = sqrt(max); return max; } static double d1diag_subblock(double **Tave, int row0, int rown, int col0, int coln) { int i,j; int nrow = rown - row0; int ncol = coln - col0; double max = 0.; double **Tsub; double **Tsq; double *E, **C; if (nrow && ncol) { Tsub = block_matrix(nrow, ncol); Tsq = block_matrix(nrow, nrow); for (i=row0; i<rown; i++) { for (j=col0; j<coln; j++) { Tsub[i-row0][j-col0] = Tave[i][j]; } } C_DGEMM('n','t',nrow,nrow,ncol,1.0,Tsub[0],ncol,Tsub[0],ncol, 0.0,Tsq[0],nrow); /* newmm(Tsub, 0, Tsub, 1, Tsq, nrow, ncol, nrow, 1.0, 0.0); */ E = init_array(nrow); C = block_matrix(nrow, nrow); sq_rsp(nrow, nrow, Tsq, E, 0, C, 1e-12); /* Find maximum eigenvalue of T */ for(i=0; i < nrow; i++) if(E[i] > max) max = E[i]; free_block(C); free(E); free_block(Tsq); free_block(Tsub); } return max; } static double d1diag_t1_rohf() { int h, nirreps, i, j; double **Tave, tmp, max; double max_ph=0.0, max_xp=0.0, max_hx=0.0; dpdfile2 T1_a, T1_b; nirreps = moinfo.nirreps; dpd_file2_init(&T1_a, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1_a); dpd_file2_mat_rd(&T1_a); dpd_file2_init(&T1_b, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1_b); dpd_file2_mat_rd(&T1_b); for(h=0; h < nirreps; h++) { int nrow = T1_a.params->rowtot[h]; int ncol = T1_a.params->coltot[h]; int nopen = moinfo.openpi[h]; if(nrow && ncol) { Tave = block_matrix(nrow, ncol); for (i=0; i<nrow; i++) { for (j=0; j<ncol; j++) { Tave[i][j] = (T1_a.matrix[h][i][j] + T1_b.matrix[h][i][j])/2.; } } tmp = d1diag_subblock(Tave, 0, nrow-nopen, 0, ncol-nopen); if (tmp > max_ph) max_ph = tmp; tmp = d1diag_subblock(Tave, 0, nrow-nopen, ncol-nopen, ncol); if (tmp > max_hx) max_hx = tmp; tmp = d1diag_subblock(Tave, nrow-nopen, nrow, 0, ncol-nopen); if (tmp > max_xp) max_xp = tmp; free_block(Tave); } } dpd_file2_mat_close(&T1_a); dpd_file2_close(&T1_a); dpd_file2_mat_close(&T1_b); dpd_file2_close(&T1_b); max_ph = sqrt(max_ph); max_hx = sqrt(max_hx); max_xp = sqrt(max_xp); /* fprintf(outfile, "D1: hp=%8.6f hx=%8.6f xp=%8.6f\n", max_ph, max_hx, max_xp); */ max = max_ph; if (max_hx > max) max = max_hx; if (max_xp > max) max = max_xp; return max; } double d1diag(void) { double norm = 0.0; if(params.ref == 0) { /** RHF **/ norm = d1diag_t1_rhf(); } else if (params.ref == 1) { /** ROHF **/ norm = d1diag_t1_rohf(); } return norm; } }} // namespace psi::ccenergy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/denom.cc����������������������������������������������������������������������0000644�0001015�0000765�00000004321�10757640026�014757� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void local_filter_T1(dpdfile2 *T1); void dijabT2(void); /* apply denominators to t1 and t2 */ void denom(void) { dpdfile2 newtIA, dIA, tIA, newtia, dia, tia; if (params.ref == 0) { dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_copy(&newtIA, CC_OEI, "New tIA Increment"); dpd_file2_close(&newtIA); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA Increment"); if(params.local && local.filter_singles) { local_filter_T1(&newtIA); } else { dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); } dpd_file2_close(&newtIA); /* Add the new increment to the old tIA to get the New tIA */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&tIA, CC_OEI, "New tIA"); dpd_file2_close(&tIA); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "New tIA Increment"); dpd_file2_axpy(&tIA, &newtIA, 1, 0); dpd_file2_close(&tIA); dpd_file2_close(&newtIA); } else if (params.ref == 1) { dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); dpd_file2_close(&newtIA); dpd_file2_init(&newtia, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_init(&dia, CC_OEI, 0, 0, 1, "dia"); dpd_file2_dirprd(&dia, &newtia); dpd_file2_close(&dia); dpd_file2_close(&newtia); } else if (params.ref == 2) { dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); dpd_file2_close(&newtIA); dpd_file2_init(&newtia, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_init(&dia, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&dia, &newtia); dpd_file2_close(&dia); dpd_file2_close(&newtia); } dijabT2(); return; } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/diagnostic.cc�����������������������������������������������������������������0000644�0001015�0000765�00000006267�10757640026�016014� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { double diagnostic(void) { int h, nirreps, Gi, Ga; int i, a, I, A, row, col; int num_elec, num_elec_a, num_elec_b; int *occpi, *virtpi; int *occ_sym, *vir_sym; int *clsdpi, *uoccpi; int *openpi; double t1diag, t1diag_a, t1diag_b; dpdfile2 T1A, T1B; nirreps = moinfo.nirreps; clsdpi = moinfo.clsdpi; uoccpi = moinfo.uoccpi; openpi = moinfo.openpi; if(params.ref != 2) { occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; } /* Compute the number of electrons */ for(h=0,num_elec_a=0,num_elec_b=0; h < nirreps; h++) { num_elec_a += clsdpi[h] + openpi[h]; num_elec_b += clsdpi[h]; } num_elec = num_elec_a + num_elec_b; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); t1diag = dpd_file2_dot_self(&T1A); dpd_file2_close(&T1A); t1diag /= num_elec; t1diag = sqrt(t1diag); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); t1diag = 0.0; for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) { t1diag += (T1A.matrix[h][i][a] + T1B.matrix[h][i][a]) * (T1A.matrix[h][i][a] + T1B.matrix[h][i][a]); } } for(i=0; i < (occpi[h] - openpi[h]); i++) { for(a=0; a < openpi[h]; a++) { A = a + uoccpi[h]; t1diag += 2 * T1B.matrix[h][i][A] * T1B.matrix[h][i][A]; } } for(i=0; i < openpi[h]; i++) { I = i + clsdpi[h]; for(a=0; a < (virtpi[h] - openpi[h]); a++) { t1diag += 2 * T1A.matrix[h][I][a] * T1A.matrix[h][I][a]; } } } t1diag /= num_elec; t1diag = sqrt(t1diag); t1diag *= 0.5; dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); t1diag_a = 0.0; t1diag_b = 0.0; for(h=0; h < nirreps; h++) { for(row=0; row < T1A.params->rowtot[h]; row++) for(col=0; col < T1A.params->coltot[h]; col++) t1diag_a += (T1A.matrix[h][row][col] * T1A.matrix[h][row][col]); for(row=0; row < T1B.params->rowtot[h]; row++) for(col=0; col < T1B.params->coltot[h]; col++) t1diag_b += (T1B.matrix[h][row][col] * T1B.matrix[h][row][col]); } t1diag = sqrt((t1diag_a + t1diag_b)/(num_elec_a + num_elec_b)); dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1A); dpd_file2_close(&T1B); } return t1diag; } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/diis.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000002043�10757640026�014604� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** Substantially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** -TDC 12/22/01 ** -Modifications for ROHF and UHF, TDC, 6/03 */ void diis_RHF(int); void diis_ROHF(int); void diis_UHF(int); void diis(int iter) { if(params.ref == 0) diis_RHF(iter); else if(params.ref == 1) diis_ROHF(iter); else if(params.ref == 2) diis_UHF(iter); return; } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/diis_RHF.cc�������������������������������������������������������������������0000644�0001015�0000765�00000017060�10757640026�015310� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** Substantially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** These improvements have been applied only to RHF cases so far. ** ** -TDC 12/22/01 */ void diis_RHF(int iter) { int nvector=8; /* Number of error vectors to keep */ int h, nirreps; int row, col, word, t1_word, p, q; int diis_cycle; int vector_length=0; int errcod, *ipiv; dpdfile2 T1, T1a, T1b; dpdbuf4 T2, T2a, T2b, T2c; psio_address start, end, next; double **error; double **B, *C, **vector; double product, determinant, maximum; nirreps = moinfo.nirreps; /* Compute the length of a single error vector */ dpd_file2_init(&T1, CC_TAMPS, 0, 0, 1, "tIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { vector_length += T1.params->rowtot[h] * T1.params->coltot[h]; vector_length += T2.params->rowtot[h] * T2.params->coltot[h]; } dpd_file2_close(&T1); dpd_buf4_close(&T2); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); dpd_file2_init(&T1b, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); t1_word = word; dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); word = t1_word; dpd_buf4_init(&T2b, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2b.params->rowtot[h]; row++) for(col=0; col < T2b.params->coltot[h]; col++) error[0][word++] -= T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ dpd_free_block(error, 1, vector_length); return; } nvector = iter; } /* Build B matrix of error vector products */ vector = dpd_block_matrix(2, vector_length); B = block_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); dot_arr(vector[0], vector[0], vector_length, &product); B[p][p] = product; for(q=0; q < p; q++) { start = psio_get_address(PSIO_ZERO, q*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[1], vector_length*sizeof(double), start, &end); dot_arr(vector[1], vector[0], vector_length, &product); B[p][q] = B[q][p] = product; } } dpd_free_block(vector, 2, vector_length); for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ ipiv = init_int_array(nvector+1); errcod = C_DGESV(nvector+1, 1, &(B[0][0]), nvector+1, &(ipiv[0]), &(C[0]), nvector+1); if(errcod) { fprintf(outfile, "\nError in DGESV return in diis.\n"); exit(PSI_RETURN_FAILURE); } /* Build a new amplitude vector from the old ones */ vector = dpd_block_matrix(1, vector_length); for(p=0; p < vector_length; p++) error[0][p] = 0.0; for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); for(q=0; q < vector_length; q++) error[0][q] += C[p] * vector[0][q]; } dpd_free_block(vector, 1, vector_length); /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); /* Release memory and return */ /* free_matrix(vector, nvector); */ free_block(B); free(C); free(ipiv); dpd_free_block(error, 1, vector_length); return; } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/diis_ROHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000026535�10757640026�015436� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** Substantially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** These improvements have been applied only to RHF cases so far. ** ** -TDC 12/22/01 */ void diis_ROHF(int iter) { int nvector=8; /* Number of error vectors to keep */ int h, nirreps; int row, col, word, p, q; int diis_cycle; int vector_length=0; int errcod, *ipiv; dpdfile2 T1, T1a, T1b; dpdbuf4 T2, T2a, T2b, T2c; psio_address start, end, next; double **error; double **B, *C, **vector; double product, determinant, maximum; nirreps = moinfo.nirreps; /* Compute the length of a single error vector */ dpd_file2_init(&T1, CC_TMP0, 0, 0, 1, "tIA"); dpd_buf4_init(&T2a, CC_TMP0, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2b, CC_TMP0, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { vector_length += 2 * T1.params->rowtot[h] * T1.params->coltot[h]; vector_length += 2 * T2a.params->rowtot[h] * T2a.params->coltot[h]; vector_length += T2b.params->rowtot[h] * T2b.params->coltot[h]; } dpd_file2_close(&T1); dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); dpd_file2_init(&T1b, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); dpd_file2_init(&T1b, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ dpd_free_block(error, 1, vector_length); return; } nvector = iter; } /* Build B matrix of error vector products */ vector = dpd_block_matrix(2, vector_length); B = block_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); dot_arr(vector[0], vector[0], vector_length, &product); B[p][p] = product; for(q=0; q < p; q++) { start = psio_get_address(PSIO_ZERO, q*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[1], vector_length*sizeof(double), start, &end); dot_arr(vector[1], vector[0], vector_length, &product); B[p][q] = B[q][p] = product; } } dpd_free_block(vector, 2, vector_length); for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ ipiv = init_int_array(nvector+1); errcod = C_DGESV(nvector+1, 1, &(B[0][0]), nvector+1, &(ipiv[0]), &(C[0]), nvector+1); if(errcod) { fprintf(outfile, "\nError in DGESV return in diis.\n"); exit(PSI_RETURN_FAILURE); } /* Build the new amplitude vector from the old ones */ vector = dpd_block_matrix(1, vector_length); for(p=0; p < vector_length; p++) error[0][p] = 0.0; for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); for(q=0; q < vector_length; q++) error[0][q] += C[p] * vector[0][q]; } dpd_free_block(vector, 1, vector_length); /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); /* Release memory and return */ free_block(B); free(C); free(ipiv); dpd_free_block(error, 1, vector_length); return; } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/diis_UHF.cc�������������������������������������������������������������������0000644�0001015�0000765�00000027230�10757640026�015313� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** Substantially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** -TDC 12/22/01 ** ** Updated for UHF refs, TDC, 6/03 */ void diis_UHF(int iter) { int nvector=8; /* Number of error vectors to keep */ int h, nirreps; int row, col, word, p, q; int diis_cycle; int vector_length=0; int errcod, *ipiv; dpdfile2 T1, T1a, T1b; dpdbuf4 T2, T2a, T2b, T2c; psio_address start, end, next; double **error; double **B, *C, **vector; double product, determinant, maximum; nirreps = moinfo.nirreps; /* Compute the length of a single error vector */ dpd_file2_init(&T1a, CC_TMP0, 0, 0, 1, "tIA"); dpd_file2_init(&T1b, CC_TMP0, 0, 2, 3, "tIA"); dpd_buf4_init(&T2a, CC_TMP0, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2b, CC_TMP0, 0, 12, 17, 12, 17, 0, "tIJAB"); dpd_buf4_init(&T2c, CC_TMP0, 0, 22, 28, 22, 28, 0, "tIjAb"); for(h=0; h < nirreps; h++) { vector_length += T1a.params->rowtot[h] * T1a.params->coltot[h]; vector_length += T1b.params->rowtot[h] * T1b.params->coltot[h]; vector_length += T2a.params->rowtot[h] * T2a.params->coltot[h]; vector_length += T2b.params->rowtot[h] * T2b.params->coltot[h]; vector_length += T2c.params->rowtot[h] * T2c.params->coltot[h]; } dpd_file2_close(&T1a); dpd_file2_close(&T1b); dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); dpd_buf4_close(&T2c); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); dpd_file2_init(&T1b, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); dpd_file2_init(&T1a, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); dpd_file2_init(&T1b, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); dpd_buf4_init(&T2a, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&T2b, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_init(&T1a, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ dpd_free_block(error, 1, vector_length); return; } nvector = iter; } /* Now grab the full set of error[0] vectors from the file */ vector = dpd_block_matrix(2, vector_length); B = block_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); dot_arr(vector[0], vector[0], vector_length, &product); B[p][p] = product; for(q=0; q < p; q++) { start = psio_get_address(PSIO_ZERO, q*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[1], vector_length*sizeof(double), start, &end); dot_arr(vector[1], vector[0], vector_length, &product); B[p][q] = B[q][p] = product; } } dpd_free_block(vector, 2, vector_length); for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ ipiv = init_int_array(nvector+1); errcod = C_DGESV(nvector+1, 1, &(B[0][0]), nvector+1, &(ipiv[0]), &(C[0]), nvector+1); if(errcod) { fprintf(outfile, "\nError in DGESV return in diis.\n"); exit(PSI_RETURN_FAILURE); } /* Build the new amplitude vector from the old ones */ vector = dpd_block_matrix(1, vector_length); for(p=0; p < vector_length; p++) error[0][p] = 0.0; for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); for(q=0; q < vector_length; q++) error[0][q] += C[p] * vector[0][q]; } dpd_free_block(vector, 1, vector_length); /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&T1a, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_init(&T1a, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); dpd_buf4_init(&T2a, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); /* Release memory and return */ free_block(B); free(C); free(ipiv); dpd_free_block(error, 1, vector_length); return; } }} // namespace psi::ccenergy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/dijabT2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006012�10757640026�015133� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void local_filter_T2(dpdbuf4 *T2); void dijabT2(void) { dpdbuf4 newtIJAB, newtijab, newtIjAb, tIjAb; dpdbuf4 dIJAB, dijab, dIjAb; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_copy(&newtIjAb, CC_TAMPS, "New tIjAb Increment"); dpd_buf4_close(&newtIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb Increment"); if(params.local) { local_filter_T2(&newtIjAb); } else { dpd_buf4_init(&dIjAb, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &newtIjAb); dpd_buf4_close(&dIjAb); } dpd_buf4_close(&newtIjAb); /* Add the new increment to the old tIjAb to get the new tIjAb */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&tIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb Increment"); dpd_buf4_axpy(&tIjAb, &newtIjAb, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&dIJAB, &newtIJAB); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&dijab, CC_DENOM, 0, 1, 6, 1, 6, 0, "dijab"); dpd_buf4_dirprd(&dijab, &newtijab); dpd_buf4_close(&newtijab); dpd_buf4_close(&dijab); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&dIjAb, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &newtIjAb); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&dIjAb); } else if(params.ref ==2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&dIJAB, &newtIJAB); dpd_buf4_close(&dIJAB); /* dpd_buf4_print(&newtIJAB, outfile, 1); */ dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&dijab, CC_DENOM, 0, 11, 16, 11, 16, 0, "dijab"); dpd_buf4_dirprd(&dijab, &newtijab); dpd_buf4_close(&dijab); /* dpd_buf4_print(&newtijab, outfile, 1); */ dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&dIjAb, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &newtIjAb); dpd_buf4_close(&dIjAb); /* dpd_buf4_print(&newtIjAb, outfile, 1); */ dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/DT2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000002471�10757640026�014252� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void DT2(void) { dpdbuf4 D; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&D); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_TAMPS, "New tIJAB"); dpd_buf4_copy(&D, CC_TAMPS, "New tijab"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&D); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_copy(&D, CC_TAMPS, "New tIJAB"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_TAMPS, "New tijab"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_copy(&D, CC_TAMPS, "New tIjAb"); dpd_buf4_close(&D); } } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/energy.cc���������������������������������������������������������������������0000644�0001015�0000765�00000012176�11101665400�015140� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" #include "MOInfo.h" namespace psi { namespace ccenergy { double rhf_energy(void); double rohf_energy(void); double uhf_energy(void); double energy(void) { if(params.ref == 0) return(rhf_energy()); else if(params.ref == 1) return(rohf_energy()); else if(params.ref == 2) return(uhf_energy()); } double rhf_energy(void) { double tauIjAb_energy, tIA_energy; dpdfile2 fIA, tIA; dpdbuf4 tauIjAb, D, E; dpdbuf4 S; double os_energy, ss_energy, Energy; dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* dpd_file2_print(&tIA, outfile); */ tIA_energy = 2.0 * dpd_file2_dot(&fIA, &tIA); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); tauIjAb_energy = dpd_buf4_dot(&D, &tauIjAb); dpd_buf4_init(&S, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); os_energy = dpd_buf4_dot(&S, &tauIjAb); ss_energy = (tauIjAb_energy - os_energy); moinfo.ecc_ss = ss_energy; moinfo.ecc_os = os_energy; if (params.scs == 1) { os_energy = params.scscc_scale_os * os_energy; ss_energy = params.scscc_scale_ss * ss_energy; } else { os_energy = 1.27 * os_energy; ss_energy = 1.13 * ss_energy; } moinfo.escscc_os = os_energy; moinfo.escscc_ss = ss_energy; dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); /* fprintf(outfile, "Two AB Energy = %20.14f\n", tauIjAb_energy); */ return (tauIjAb_energy+tIA_energy); } double rohf_energy(void) { double tIA_energy, tia_energy, tauIJAB_energy, tauijab_energy, tauIjAb_energy; dpdfile2 tIA, tia, fIA, fia; dpdbuf4 tauIJAB, tauijab, tauIjAb, D; dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* dpd_file2_print(&tIA, outfile); */ tIA_energy = dpd_file2_dot(&fIA, &tIA); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* dpd_file2_print(&tia, outfile); */ tia_energy = dpd_file2_dot(&fia, &tia); dpd_file2_close(&fia); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); /* dpd_buf4_print(&tauIJAB, outfile); */ tauIJAB_energy = dpd_buf4_dot(&D, &tauIJAB); dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); /* dpd_buf4_print(&tauijab, outfile); */ tauijab_energy = dpd_buf4_dot(&D, &tauijab); dpd_buf4_close(&tauijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); /* dpd_buf4_print(&tauIjAb, outfile); */ tauIjAb_energy = dpd_buf4_dot(&D, &tauIjAb); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); /* fprintf(outfile, "One A Energy = %20.14f\n", tIA_energy); fprintf(outfile, "One B Energy = %20.14f\n", tia_energy); fprintf(outfile, "Two AA Energy = %20.14f\n", tauIJAB_energy); fprintf(outfile, "Two BB Energy = %20.14f\n", tauijab_energy); fprintf(outfile, "Two AB Energy = %20.14f\n", tauIjAb_energy); */ return (tIA_energy + tia_energy + tauIJAB_energy + tauijab_energy + tauIjAb_energy); } double uhf_energy(void) { double E2AA, E2BB, E2AB, T1A, T1B; dpdbuf4 T2, D; dpdfile2 T1, F; dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); /* dpd_file2_print(&tIA, outfile); */ T1A = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); /* dpd_file2_print(&tIA, outfile); */ T1B = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); E2AA = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); E2BB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); E2AB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); /* fprintf(outfile, "One A Energy = %20.14f\n", T1A); fprintf(outfile, "One B Energy = %20.14f\n", T1B); fprintf(outfile, "Two AA Energy = %20.14f\n", E2AA); fprintf(outfile, "Two BB Energy = %20.14f\n", E2BB); fprintf(outfile, "Two AB Energy = %20.14f\n", E2AB); */ fprintf(outfile,"\n\tOpposite-spin energy = %20.15f\n",E2AB); fprintf(outfile,"\tSame-spin energy = %20.15f\n",E2AA+E2BB); return(T1A + T1B + E2AA + E2BB + E2AB); } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/ET2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000011407�10757640026�014252� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void ET2(void) { dpdfile2 tIA, tia; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 E, t2, t2a, t2b; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract424(&E, &tIA, &newtIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tIA, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** BB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tia, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** AB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract424(&E, &tia, &newtIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tIA, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** BB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&E, &tia, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 12, 15, "T (i>j,ba)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ba)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** AB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 24, 22, 24, 22, 0, "E <Ia|Jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Fae.cc������������������������������������������������������������������������0000644�0001015�0000765�00000027372�10757640026�014363� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void Fae_build(void) { int h,a,e,nirreps; int ma,fe,ef,m,f,M,A,Gm,Ga,Ge,Gf,Gma,nrows,ncols; double *X; dpdfile2 tIA, tia; dpdfile2 FME, Fme; dpdfile2 fAB, fab, fIA, fia; dpdfile2 FAE, Fae; dpdfile2 FAEt, Faet; dpdbuf4 F_anti, F, D_anti, D; dpdbuf4 tautIJAB, tautijab, tautIjAb, taut; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); /* for(h=0; h < moinfo.nirreps; h++) { for(a=0; a < FAE.params->rowtot[h]; a++) FAE.matrix[h][a][a] = 0; } */ dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_mat_init(&Fae); dpd_file2_mat_rd(&Fae); for(h=0; h < moinfo.nirreps; h++) { for(a=0; a < FAE.params->rowtot[h]; a++) for(e=0; e < FAE.params->coltot[h]; e++) FAE.matrix[h][a][e] *= (1 - (a==e)); for(a=0; a < Fae.params->rowtot[h]; a++) for(e=0; e < Fae.params->coltot[h]; e++) Fae.matrix[h][a][e] *= (1 - (a==e)); } dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_mat_wrt(&Fae); dpd_file2_mat_close(&Fae); dpd_file2_close(&FAE); dpd_file2_close(&Fae); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_mat_init(&Fae); dpd_file2_mat_rd(&Fae); for(h=0; h < moinfo.nirreps; h++) { for(a=0; a < FAE.params->rowtot[h]; a++) for(e=0; e < FAE.params->coltot[h]; e++) FAE.matrix[h][a][e] *= (1 - (a==e)); for(a=0; a < Fae.params->rowtot[h]; a++) for(e=0; e < Fae.params->coltot[h]; e++) Fae.matrix[h][a][e] *= (1 - (a==e)); } dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_mat_wrt(&Fae); dpd_file2_mat_close(&Fae); dpd_file2_close(&FAE); dpd_file2_close(&Fae); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_close(&FAE); /* dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &F_anti, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &F, &FAE, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_file2_close(&FAE); */ /* Out-of-core algorithm for F->FAE added 3/20/05 - TDC */ /* Fae <-- t(m,f) [2 <ma|fe> - <ma|ef>] */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); for(Gma=0; Gma < nirreps; Gma++) { dpd_buf4_mat_irrep_row_init(&F, Gma); X = init_array(F.params->coltot[Gma]); for(ma=0; ma < F.params->rowtot[Gma]; ma++) { dpd_buf4_mat_irrep_row_rd(&F, Gma, ma); m = F.params->roworb[Gma][ma][0]; a = F.params->roworb[Gma][ma][1]; Gm = F.params->psym[m]; Ga = Ge = Gm ^ Gma; /* Fae is totally symmetric */ Gf = Gm; /* T1 is totally symmetric */ M = m - F.params->poff[Gm]; A = a - F.params->qoff[Ga]; zero_arr(X, F.params->coltot[Gma]); /* build spin-adapted F-integrals for current ma */ for(fe=0; fe < F.params->coltot[Gma]; fe++) { f = F.params->colorb[Gma][fe][0]; e = F.params->colorb[Gma][fe][1]; ef = F.params->colidx[e][f]; X[fe] = 2.0 * F.matrix[Gma][0][fe] - F.matrix[Gma][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows && ncols) C_DGEMV('t',nrows,ncols,1.0,&X[F.col_offset[Gma][Gf]],ncols, tIA.matrix[Gm][M],1,1.0, FAE.matrix[Ga][A],1); } free(X); dpd_buf4_mat_irrep_row_close(&F, Gma); } dpd_buf4_close(&F); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &FAE, 3, 3, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_close(&FAE); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_close(&FAEt); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &F_anti, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F_anti, &Fae, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_buf4_init(&D_anti, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautijab"); dpd_contract442(&tautIJAB, &D_anti, &FAE, 2, 2, -1, 1); dpd_contract442(&tautijab, &D_anti, &Fae, 2, 2, -1, 1); dpd_buf4_close(&D_anti); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &Fae, 3, 3, -1, 1); dpd_contract442(&tautIjAb, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 1, 1, "Faet"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&tia, &Fme, &Faet, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_dot13(&tIA, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_dot13(&tia, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_dot13(&tia, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_contract442(&taut, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tautijab"); dpd_contract442(&taut, &D, &Fae, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &Fae, 3, 3, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 3, 3, "Faet"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&tia, &Fme, &Faet, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); } } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/FaetT2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000007311�10757640026�014744� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void FaetT2(void) { dpdfile2 FAEt, Faet; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 tIJAB, tijab, tIjAb; dpdbuf4 t2, Z; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Zijab"); dpd_contract424(&tIjAb, &FAEt, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&FAEt); dpd_buf4_close(&tIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&Z, &newtIjAb, 1); dpd_buf4_close(&newtIjAb); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 1, 1, "Faet"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAEt, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAEt, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tijab, &Faet, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Faet, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Faet, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAEt, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 3, 3, "Faet"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAEt, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAEt, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&tijab, &Faet, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Faet, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Faet, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAEt, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Fme.cc������������������������������������������������������������������������0000644�0001015�0000765�00000006116�10757640026�014370� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void Fme_build(void) { dpdfile2 FME, Fme, fIA, fia, tIA, tia; dpdbuf4 D_anti, D; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &D_anti, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &D, &FME, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &D_anti, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D_anti, &Fme, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &D, &Fme, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&Fme); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract422(&D, &tIA, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract422(&D, &tia, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract422(&D, &tia, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract422(&D, &tIA, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_close(&FME); dpd_file2_close(&Fme); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Fmi.cc������������������������������������������������������������������������0000644�0001015�0000765�00000023203�10757640026�014370� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void Fmi_build(void) { int h,m,i; dpdfile2 FMI, Fmi, FMIt, Fmit, fIJ, fij, fIA, fia; dpdfile2 tIA, tia, FME, Fme; dpdbuf4 E_anti, E, D_anti, D; dpdbuf4 tautIJAB, tautijab, tautIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); /* for(h=0; h < moinfo.nirreps; h++) { for(m=0; m < FMI.params->rowtot[h]; m++) FMI.matrix[h][m][m] = 0; } */ dpd_file2_mat_wrt(&FMI); dpd_file2_mat_close(&FMI); dpd_file2_close(&FMI); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&Fmi); for(h=0; h < moinfo.nirreps; h++) { for(m=0; m < FMI.params->rowtot[h]; m++) FMI.matrix[h][m][m] = 0; for(m=0; m < Fmi.params->rowtot[h]; m++) Fmi.matrix[h][m][m] = 0; } dpd_file2_mat_wrt(&FMI); dpd_file2_mat_close(&FMI); dpd_file2_mat_wrt(&Fmi); dpd_file2_mat_close(&Fmi); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&Fmi); for(h=0; h < moinfo.nirreps; h++) { for(m=0; m < FMI.params->rowtot[h]; m++) FMI.matrix[h][m][m] = 0; for(m=0; m < Fmi.params->rowtot[h]; m++) Fmi.matrix[h][m][m] = 0; } dpd_file2_mat_wrt(&FMI); dpd_file2_mat_close(&FMI); dpd_file2_mat_wrt(&Fmi); dpd_file2_mat_close(&Fmi); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tIA, &E, &FMI, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&E_anti); dpd_buf4_close(&E); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_close(&FMI); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_close(&FMIt); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1.0, 1.0); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&E_anti); dpd_buf4_close(&E); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautijab"); dpd_contract442(&D_anti, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_contract442(&D_anti, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_close(&D_anti); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_contract442(&D, &tautIjAb, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 0, 0, "Fmit"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&Fme, &tia, &Fmit, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&E_anti, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1, 1); dpd_dot24(&tia, &E, &FMI, 0, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_buf4_init(&E_anti, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1, 1); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_contract442(&D, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tautijab"); dpd_contract442(&D, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tautiJaB"); dpd_contract442(&D, &tautIjAb, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 2, 2, "Fmit"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&Fme, &tia, &Fmit, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); } } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/FmitT2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000007344�10757640026�014772� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void FmitT2(void) { dpdfile2 FMIt, Fmit; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 tIJAB, tijab, tIjAb; dpdbuf4 t2; dpdbuf4 Z; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_contract244(&FMIt, &tIjAb, &Z, 0, 0, 0, 1, 0); dpd_file2_close(&FMIt); dpd_buf4_close(&tIjAb); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&Z, &newtIjAb, -1); dpd_buf4_close(&newtIjAb); dpd_buf4_sort_axpy(&Z, CC_TAMPS, qpsr, 0, 5, "New tIjAb", -1); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 0, 0, "Fmit"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMIt, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMIt, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tijab, &Fmit, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmit, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Fmit, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMIt, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 2, 2, "Fmit"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMIt, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMIt, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract424(&tijab, &Fmit, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmit, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Fmit, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMIt, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/fock_build.cc�����������������������������������������������������������������0000644�0001015�0000765�00000021017�10757640026�015757� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void rhf_fock_build(double **fock, double **D) { int i, j, ij; int nso, ntri, stat; double *scratch; int lastbuf, idx, p, q, r, s, pq, rs; double value; Value *valptr; Label *lblptr; struct iwlbuf InBuf; nso = moinfo.nso; ntri = nso * (nso+1)/2; /* one-electron contributions */ scratch = init_array(ntri); stat = iwl_rdone(PSIF_OEI, PSIF_SO_T, scratch, ntri, 0, 0, outfile); for(i=0, ij=0; i < nso; i++) for(j=0; j <= i; j++, ij++) fock[i][j] = fock[j][i] = scratch[ij]; stat = iwl_rdone(PSIF_OEI, PSIF_SO_V, scratch, ntri, 0, 0, outfile); for(i=0, ij=0; i < nso; i++) for(j=0; j <= i; j++, ij++) { fock[i][j] += scratch[ij]; if(i!=j) fock[j][i] += scratch[ij]; } free(scratch); iwl_buf_init(&InBuf, PSIF_SO_TEI, 0.0, 1, 1); do { lastbuf = InBuf.lastbuf; lblptr = InBuf.labels; valptr = InBuf.values; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; pq = INDEX(p,q); rs = INDEX(r,s); /* fprintf(outfile, "%d %d %d %d [%d] [%d] %20.15f\n", p, q, r, s, pq, rs, value); */ /* (pq|rs) */ fock[p][q] += 2.0 * D[r][s] * value; fock[p][r] -= D[q][s] * value; if(p!=q && r!=s && pq != rs) { /* (pq|sr) */ fock[p][q] += 2.0 * D[s][r] * value; fock[p][s] -= D[q][r] * value; /* (qp|rs) */ fock[q][p] += 2.0 * D[r][s] * value; fock[q][r] -= D[p][s] * value; /* (qp|sr) */ fock[q][p] += 2.0 * D[s][r] * value; fock[q][s] -= D[p][r] * value; /* (rs|pq) */ fock[r][s] += 2.0 * D[p][q] * value; fock[r][p] -= D[s][q] * value; /* (rs|qp) */ fock[r][s] += 2.0 * D[q][p] * value; fock[r][q] -= D[s][p] * value; /* (sr|pq) */ fock[s][r] += 2.0 * D[p][q] * value; fock[s][p] -= D[r][q] * value; /* (sr|qp) */ fock[s][r] += 2.0 * D[q][p] * value; fock[s][q] -= D[r][p] * value; } else if(p!=q && r!=s && pq==rs) { /* (pq|sr) */ fock[p][q] += 2.0 * D[s][r] * value; fock[p][s] -= D[q][r] * value; /* (qp|rs) */ fock[q][p] += 2.0 * D[r][s] * value; fock[q][r] -= D[p][s] * value; /* (qp|sr) */ fock[q][p] += 2.0 * D[s][r] * value; fock[q][s] -= D[p][r] * value; } else if(p!=q && r==s) { /* (qp|rs) */ fock[q][p] += 2.0 * D[r][s] * value; fock[q][r] -= D[p][s] * value; /* (rs|pq) */ fock[r][s] += 2.0 * D[p][q] * value; fock[r][p] -= D[s][q] * value; /* (rs|qp) */ fock[r][s] += 2.0 * D[q][p] * value; fock[r][q] -= D[s][p] * value; } else if(p==q && r!=s) { /* (pq|sr) */ fock[p][q] += 2.0 * D[s][r] * value; fock[p][s] -= D[q][r] * value; /* (rs|pq) */ fock[r][s] += 2.0 * D[p][q] * value; fock[r][p] -= D[s][q] * value; /* (sr|pq) */ fock[s][r] += 2.0 * D[p][q] * value; fock[s][p] -= D[r][q] * value; } else if(p==q && r==s && pq!=rs) { /* (rs|pq) */ fock[r][s] += 2.0 * D[p][q] * value; fock[r][p] -= D[s][q] * value; } } if(!lastbuf) iwl_buf_fetch(&InBuf); } while (!lastbuf); iwl_buf_close(&InBuf, 1); } void uhf_fock_build(double **fock_a, double **fock_b, double **D_a, double **D_b) { int i, j, ij; int nso, ntri, ntei, stat; double *scratch; int lastbuf, idx, p, q, r, s, pq, rs; double value; Value *valptr; Label *lblptr; struct iwlbuf InBuf; double **Dt; nso = moinfo.nso; ntri = nso * (nso+1)/2; ntei = ntri * (ntri+1)/2; Dt = block_matrix(nso, nso); for(p=0; p < nso; p++) for(q=0; q < nso; q++) Dt[p][q] = D_a[p][q] + D_b[p][q]; /* one-electron contributions */ scratch = init_array(ntri); stat = iwl_rdone(PSIF_OEI, PSIF_SO_T, scratch, ntri, 0, 0, outfile); for(i=0, ij=0; i < nso; i++) for(j=0; j <= i; j++, ij++) { fock_a[i][j] = fock_a[j][i] = scratch[ij]; fock_b[i][j] = fock_b[j][i] = scratch[ij]; } stat = iwl_rdone(PSIF_OEI, PSIF_SO_V, scratch, ntri, 0, 0, outfile); for(i=0, ij=0; i < nso; i++) for(j=0; j <= i; j++, ij++) { fock_a[i][j] += scratch[ij]; if(i!=j) fock_a[j][i] += scratch[ij]; fock_b[i][j] += scratch[ij]; if(i!=j) fock_b[j][i] += scratch[ij]; } free(scratch); iwl_buf_init(&InBuf, PSIF_SO_TEI, 0.0, 1, 1); do { lastbuf = InBuf.lastbuf; lblptr = InBuf.labels; valptr = InBuf.values; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; pq = INDEX(p,q); rs = INDEX(r,s); /* fprintf(outfile, "%d %d %d %d [%d] [%d] %20.15f\n", p, q, r, s, pq, rs, value); */ /* (pq|rs) */ fock_a[p][q] += Dt[r][s] * value; fock_a[p][r] -= D_a[q][s] * value; fock_b[p][q] += Dt[r][s] * value; fock_b[p][r] -= D_b[q][s] * value; if(p!=q && r!=s && pq != rs) { /* (pq|sr) */ fock_a[p][q] += Dt[s][r] * value; fock_a[p][s] -= D_a[q][r] * value; fock_b[p][q] += Dt[s][r] * value; fock_b[p][s] -= D_b[q][r] * value; /* (qp|rs) */ fock_a[q][p] += Dt[r][s] * value; fock_a[q][r] -= D_a[p][s] * value; fock_b[q][p] += Dt[r][s] * value; fock_b[q][r] -= D_b[p][s] * value; /* (qp|sr) */ fock_a[q][p] += Dt[s][r] * value; fock_a[q][s] -= D_a[p][r] * value; fock_b[q][p] += Dt[s][r] * value; fock_b[q][s] -= D_b[p][r] * value; /* (rs|pq) */ fock_a[r][s] += Dt[p][q] * value; fock_a[r][p] -= D_a[s][q] * value; fock_b[r][s] += Dt[p][q] * value; fock_b[r][p] -= D_b[s][q] * value; /* (rs|qp) */ fock_a[r][s] += Dt[q][p] * value; fock_a[r][q] -= D_a[s][p] * value; fock_b[r][s] += Dt[q][p] * value; fock_b[r][q] -= D_b[s][p] * value; /* (sr|pq) */ fock_a[s][r] += Dt[p][q] * value; fock_a[s][p] -= D_a[r][q] * value; fock_b[s][r] += Dt[p][q] * value; fock_b[s][p] -= D_b[r][q] * value; /* (sr|qp) */ fock_a[s][r] += Dt[q][p] * value; fock_a[s][q] -= D_a[r][p] * value; fock_b[s][r] += Dt[q][p] * value; fock_b[s][q] -= D_b[r][p] * value; } else if(p!=q && r!=s && pq==rs) { /* (pq|sr) */ fock_a[p][q] += Dt[s][r] * value; fock_a[p][s] -= D_a[q][r] * value; fock_b[p][q] += Dt[s][r] * value; fock_b[p][s] -= D_b[q][r] * value; /* (qp|rs) */ fock_a[q][p] += Dt[r][s] * value; fock_a[q][r] -= D_a[p][s] * value; fock_b[q][p] += Dt[r][s] * value; fock_b[q][r] -= D_b[p][s] * value; /* (qp|sr) */ fock_a[q][p] += Dt[s][r] * value; fock_a[q][s] -= D_a[p][r] * value; fock_b[q][p] += Dt[s][r] * value; fock_b[q][s] -= D_b[p][r] * value; } else if(p!=q && r==s) { /* (qp|rs) */ fock_a[q][p] += Dt[r][s] * value; fock_a[q][r] -= D_a[p][s] * value; fock_b[q][p] += Dt[r][s] * value; fock_b[q][r] -= D_b[p][s] * value; /* (rs|pq) */ fock_a[r][s] += Dt[p][q] * value; fock_a[r][p] -= D_a[s][q] * value; fock_b[r][s] += Dt[p][q] * value; fock_b[r][p] -= D_b[s][q] * value; /* (rs|qp) */ fock_a[r][s] += Dt[q][p] * value; fock_a[r][q] -= D_a[s][p] * value; fock_b[r][s] += Dt[q][p] * value; fock_b[r][q] -= D_b[s][p] * value; } else if(p==q && r!=s) { /* (pq|sr) */ fock_a[p][q] += Dt[s][r] * value; fock_a[p][s] -= D_a[q][r] * value; fock_b[p][q] += Dt[s][r] * value; fock_b[p][s] -= D_b[q][r] * value; /* (rs|pq) */ fock_a[r][s] += Dt[p][q] * value; fock_a[r][p] -= D_a[s][q] * value; fock_b[r][s] += Dt[p][q] * value; fock_b[r][p] -= D_b[s][q] * value; /* (sr|pq) */ fock_a[s][r] += Dt[p][q] * value; fock_a[s][p] -= D_a[r][q] * value; fock_b[s][r] += Dt[p][q] * value; fock_b[s][p] -= D_b[r][q] * value; } else if(p==q && r==s && pq!=rs) { /* (rs|pq) */ fock_a[r][s] += Dt[p][q] * value; fock_a[r][p] -= D_a[s][q] * value; fock_b[r][s] += Dt[p][q] * value; fock_b[r][p] -= D_b[s][q] * value; } } if(!lastbuf) iwl_buf_fetch(&InBuf); } while (!lastbuf); iwl_buf_close(&InBuf, 1); free_block(Dt); } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/FT2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000015174�10757640026�014260� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void FT2(void) { dpdfile2 tIA, tia, t1; dpdbuf4 newtIJAB, newtijab, newtIjAb, t2, t2a, t2b; dpdbuf4 F_anti, F; dpdbuf4 Z, X; int Gie, Gij, Gab, nrows, ncols, nlinks, Gi, Ge, Gj, i, I; if(params.ref == 0) { /** RHF **/ /* dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); */ /* dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z1(ij,ab)"); */ /* dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); */ /* dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); */ /* dpd_contract244(&tIA, &F, &Z, 1, 0, 0, 1, 0); */ /* dpd_file2_close(&tIA); */ /* dpd_buf4_close(&F); */ /* dpd_buf4_sort(&Z, CC_TMP0, qpsr, 0, 5, "Z2(ji,ba)"); */ /* dpd_buf4_axpy(&Z, &newtIjAb, 1.0); */ /* dpd_buf4_close(&Z); */ /* dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z2(ji,ba)"); */ /* dpd_buf4_axpy(&Z, &newtIjAb, 1.0); */ /* dpd_buf4_close(&Z); */ /* dpd_buf4_close(&newtIjAb); */ /* t(ij,ab) <-- t(j,e) * <ie|ab> + t(i,e) * <je|ba> */ /* OOC code added 3/23/05, TDC */ dpd_buf4_init(&X, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&t1); dpd_file2_mat_rd(&t1); for(Gie=0; Gie < moinfo.nirreps; Gie++) { Gab = Gie; /* F is totally symmetric */ Gij = Gab; /* T2 is totally symmetric */ dpd_buf4_mat_irrep_init(&X, Gij); ncols = F.params->coltot[Gie]; for(Gi=0; Gi < moinfo.nirreps; Gi++) { Gj = Ge = Gi^Gie; /* T1 is totally symmetric */ nlinks = moinfo.virtpi[Ge]; nrows = moinfo.occpi[Gj]; dpd_buf4_mat_irrep_init_block(&F, Gie, nlinks); for(i=0; i < moinfo.occpi[Gi]; i++) { I = F.params->poff[Gi] + i; dpd_buf4_mat_irrep_rd_block(&F, Gie, F.row_offset[Gie][I], nlinks); if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,1.0,t1.matrix[Gj][0],nlinks,F.matrix[Gie][0],ncols, 0.0,X.matrix[Gij][X.row_offset[Gij][I]],ncols); } dpd_buf4_mat_irrep_close_block(&F, Gie, nlinks); } dpd_buf4_mat_irrep_wrt(&X, Gij); dpd_buf4_mat_irrep_close(&X, Gij); } dpd_file2_mat_close(&t1); dpd_file2_close(&t1); dpd_buf4_close(&F); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_axpy(&X, &t2, 1); dpd_buf4_close(&t2); dpd_buf4_sort_axpy(&X, CC_TAMPS, qpsr, 0, 5, "New tIjAb", 1); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F_anti, &tIA, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F_anti); /*** BB ***/ dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F_anti, &tia, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F_anti); /*** AB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &tia, &newtIjAb, 1, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract244(&tIA, &F, &newtIjAb, 1, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F, &tIA, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F); /*** BB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract424(&F, &tia, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 10, 17, "T (ji,a>b)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ji,a>b)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F); /*** AB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &newtIjAb, 1, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_contract244(&tIA, &F, &newtIjAb, 1, 2, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/FT2_cc2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000007250�10754663017�015005� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void FT2_CC2(void) { dpdbuf4 newT2, T2, Z; dpdfile2 F; if(params.ref == 0) { /* RHF */ dpd_buf4_init(&newT2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract424(&T2, &F, &newT2, 3, 1, 0, 1, 1); dpd_contract244(&F, &T2, &newT2, 1, 2, 1, 1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract424(&T2, &F, &newT2, 1, 0, 1, -1, 1); dpd_contract244(&F, &T2, &newT2, 0, 0, 0, -1, 1); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); } else if(params.ref == 1) { /* ROHF */ dpd_buf4_init(&newT2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&Z, CC_TMP0, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_contract424(&T2, &F, &Z, 3, 1, 0, 1, 0); dpd_contract244(&F, &T2, &Z, 1, 2, 1, 1, 1); dpd_buf4_axpy(&Z, &newT2, 1); dpd_buf4_close(&Z); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab"); dpd_buf4_init(&Z, CC_TMP0, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_contract424(&T2, &F, &Z, 3, 1, 0, 1, 0); dpd_contract244(&F, &T2, &Z, 1, 2, 1, 1, 1); dpd_buf4_axpy(&Z, &newT2, 1); dpd_buf4_close(&Z); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab"); dpd_contract424(&T2, &F, &newT2, 3, 1, 0, 1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract244(&F, &T2, &newT2, 1, 2, 1, 1, 1); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); } else if(params.ref == 2) { /* UHF */ dpd_buf4_init(&newT2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&Z, CC_TMP0, 0, 2, 5, 2, 5, 0, "Z(I>J,AB)"); dpd_contract424(&T2, &F, &Z, 3, 1, 0, 1, 0); dpd_contract244(&F, &T2, &Z, 1, 2, 1, 1, 1); dpd_buf4_axpy(&Z, &newT2, 1); dpd_buf4_close(&Z); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab"); dpd_buf4_init(&Z, CC_TMP0, 0, 12, 15, 12, 15, 0, "Z(i>j,ab)"); dpd_contract424(&T2, &F, &Z, 3, 1, 0, 1, 0); dpd_contract244(&F, &T2, &Z, 1, 2, 1, 1, 1); dpd_buf4_axpy(&Z, &newT2, 1); dpd_buf4_close(&Z); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab"); dpd_contract424(&T2, &F, &newT2, 3, 1, 0, 1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract244(&F, &T2, &newT2, 1, 2, 1, 1, 1); dpd_file2_close(&F); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/get_moinfo.cc�����������������������������������������������������������������0000644�0001015�0000765�00000031356�10757640026�016013� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libchkpt/chkpt.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996 ** Modified by TDC, March 1999 */ void get_moinfo(void) { int i, j, h, p, q, errcod, nactive, nirreps; double ***C, ***Ca, ***Cb; psio_address next; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.nao = chkpt_rd_nao(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.sopi = chkpt_rd_sopi(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.phase = chkpt_rd_phase_check(); chkpt_close(); nirreps = moinfo.nirreps; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(nirreps); moinfo.fruocc = init_int_array(nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); /* Get CC->QT and QT->CC active occupied and virtual reordering arrays */ moinfo.qt_aocc = init_int_array(nactive); moinfo.qt_bocc = init_int_array(nactive); moinfo.qt_avir = init_int_array(nactive); moinfo.qt_bvir = init_int_array(nactive); moinfo.cc_aocc = init_int_array(nactive); moinfo.cc_bocc = init_int_array(nactive); moinfo.cc_avir = init_int_array(nactive); moinfo.cc_bvir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Occ Order", (char *) moinfo.qt_aocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Occ Order", (char *) moinfo.qt_bocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Virt Order", (char *) moinfo.qt_avir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Virt Order", (char *) moinfo.qt_bvir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Alpha Active Occ Order", (char *) moinfo.cc_aocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Beta Active Occ Order", (char *) moinfo.cc_bocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Alpha Active Virt Order", (char *) moinfo.cc_avir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Beta Active Virt Order", (char *) moinfo.cc_bvir, sizeof(int)*nactive); } else { /** RHF or ROHF **/ moinfo.occpi = init_int_array(nirreps); moinfo.virtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); /* Get CC->QT and QT->CC active occupied and virtual reordering arrays */ moinfo.qt_occ = init_int_array(nactive); moinfo.qt_vir = init_int_array(nactive); moinfo.cc_occ = init_int_array(nactive); moinfo.cc_vir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Active Occ Order", (char *) moinfo.qt_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Active Virt Order", (char *) moinfo.qt_vir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Active Occ Order", (char *) moinfo.cc_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Active Virt Order", (char *) moinfo.cc_vir, sizeof(int)*nactive); } /* Build sosym array (for AO-basis BT2) */ moinfo.sosym = init_int_array(moinfo.nso); for(h=0,q=0; h < nirreps; h++) for(p=0; p < moinfo.sopi[h]; p++) moinfo.sosym[q++] = h; /* Get the active virtual orbitals */ if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ C = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.virtpi[h]) { C[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); psio_read(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) C[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); } } moinfo.C = C; } else if(params.ref == 2) { /** UHF **/ Ca = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.avirtpi[h]) { Ca[h] = block_matrix(moinfo.sopi[h],moinfo.avirtpi[h]); psio_read(CC_INFO, "UHF Active Alpha Virtual Orbs", (char *) Ca[h][0], moinfo.sopi[h]*moinfo.avirtpi[h]*sizeof(double), next, &next); } } moinfo.Ca = Ca; Cb = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.bvirtpi[h]) { Cb[h] = block_matrix(moinfo.sopi[h],moinfo.bvirtpi[h]); psio_read(CC_INFO, "UHF Active Beta Virtual Orbs", (char *) Cb[h][0], moinfo.sopi[h]*moinfo.bvirtpi[h]*sizeof(double), next, &next); } } moinfo.Cb = Cb; } /* Compute spatial-orbital reordering arrays */ if(params.ref == 0 || params.ref == 1) { moinfo.pitzer2qt = init_int_array(moinfo.nmo); moinfo.qt2pitzer = init_int_array(moinfo.nmo); reorder_qt(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitzer2qt, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) { j = moinfo.pitzer2qt[i]; moinfo.qt2pitzer[j] = i; } } else if(params.ref == 2) { moinfo.pitzer2qt_a = init_int_array(moinfo.nmo); moinfo.qt2pitzer_a = init_int_array(moinfo.nmo); moinfo.pitzer2qt_b = init_int_array(moinfo.nmo); moinfo.qt2pitzer_b = init_int_array(moinfo.nmo); reorder_qt_uhf(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitzer2qt_a, moinfo.pitzer2qt_b, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) { j = moinfo.pitzer2qt_a[i]; moinfo.qt2pitzer_a[j] = i; j = moinfo.pitzer2qt_b[i]; moinfo.qt2pitzer_b[j] = i; } } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; if(params.ref == 0) { moinfo.nvirt = 0; for(h=0; h < nirreps; h++) moinfo.nvirt += moinfo.virtpi[h]; } psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n",moinfo.eref); } /* Frees memory allocated in get_moinfo() and dumps out the energy. */ void cleanup(void) { int i, h; char *keyw=NULL; /* Save the energy to PSIF_CHKPT as well */ chkpt_init(PSIO_OPEN_OLD); if( (!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { psio_write_entry(CC_INFO, "CC2 Energy", (char *) &(moinfo.ecc), sizeof(double)); keyw = chkpt_build_keyword("CC2 Energy"); psio_write_entry(PSIF_CHKPT, keyw, (char *) &(moinfo.ecc), sizeof(double)); free(keyw); } else if( (!strcmp(params.wfn,"CC3")) || (!strcmp(params.wfn,"EOM_CC3"))) { psio_write_entry(CC_INFO, "CC3 Energy", (char *) &(moinfo.ecc), sizeof(double)); keyw = chkpt_build_keyword("CC3 Energy"); psio_write_entry(PSIF_CHKPT, keyw, (char *) &(moinfo.ecc), sizeof(double)); free(keyw); } else { psio_write_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); keyw = chkpt_build_keyword("CCSD Energy"); psio_write_entry(PSIF_CHKPT, keyw, (char *) &(moinfo.ecc), sizeof(double)); free(keyw); } chkpt_close(); if(params.ref == 0 || params.ref == 1) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.virtpi[h]) free_block(moinfo.C[h]); free(moinfo.C); } else if(params.ref == 2) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.avirtpi[h]) free_block(moinfo.Ca[h]); free(moinfo.Ca); for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.bvirtpi[h]) free_block(moinfo.Cb[h]); free(moinfo.Cb); } free(moinfo.sopi); free(moinfo.sosym); free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); free(moinfo.qt_aocc); free(moinfo.qt_bocc); free(moinfo.qt_avir); free(moinfo.qt_bvir); free(moinfo.cc_aocc); free(moinfo.cc_bocc); free(moinfo.cc_avir); free(moinfo.cc_bvir); } else { free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.qt_occ); free(moinfo.qt_vir); free(moinfo.cc_occ); free(moinfo.cc_vir); } } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/get_params.cc�����������������������������������������������������������������0000644�0001015�0000765�00000027212�11101665400�015766� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include "Params.h" #include "Local.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void get_params() { int errcod, iconv, forceit; char *cachetype = NULL; char *junk; int *mu_irreps; errcod = ip_string("WFN", &(params.wfn), 0); if(strcmp(params.wfn, "CCSD") && strcmp(params.wfn, "CCSD_T") && strcmp(params.wfn, "EOM_CCSD") && strcmp(params.wfn, "LEOM_CCSD") && strcmp(params.wfn, "BCCD") && strcmp(params.wfn,"BCCD_T") && strcmp(params.wfn, "CC2") && strcmp(params.wfn,"CC3") && strcmp(params.wfn, "EOM_CC3") && strcmp(params.wfn,"EOM_CC2") && strcmp(params.wfn, "CCSD_MVD")) { fprintf(outfile, "Invalid value of input keyword WFN: %s\n", params.wfn); exit(PSI_RETURN_FAILURE); } if(!strcmp(params.wfn,"BCCD") || !strcmp(params.wfn,"BCCD_T")) params.brueckner = 1; else params.brueckner = 0; params.semicanonical = 0; errcod = ip_string("REFERENCE", &(junk),0); /* if no reference is given, assume rhf */ if (errcod != IPE_OK) { params.ref = 0; } else { if(!strcmp(junk, "RHF")) params.ref = 0; else if(!strcmp(junk,"ROHF") && (!strcmp(params.wfn,"MP2") || !strcmp(params.wfn,"CCSD_T") || !strcmp(params.wfn, "CC3") || !strcmp(params.wfn,"EOM_CC3") || !strcmp(params.wfn, "CC2") || !strcmp(params.wfn,"EOM_CC2"))) { params.ref = 2; params.semicanonical = 1; } else if(!strcmp(junk, "ROHF")) params.ref = 1; else if(!strcmp(junk, "UHF")) params.ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } errcod = ip_string("ANALYZE", &(junk),0); /* if no analyze parameter assume canonical */ if (errcod != IPE_OK) { params.analyze = 0; } else { if(!strcmp(junk, "CANONICAL")) params.analyze = 2; else if(!strcmp(junk, "LOCAL")) params.analyze = 1; else { printf("Invalid value of input keyword ANALYZE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(errcod != IPE_OK) params.dertype = 0; else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; /* linear response */ else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } params.print = 0; errcod = ip_data("PRINT", "%d", &(params.print),0); params.maxiter = 50; errcod = ip_data("MAXITER","%d",&(params.maxiter),0); params.convergence = 1e-7; errcod = ip_data("CONVERGENCE","%d",&(iconv),0); if(errcod == IPE_OK) params.convergence = 1.0*pow(10.0,(double) -iconv); params.restart = 1; errcod = ip_boolean("RESTART", &(params.restart),0); /* If the MO orbital phases are screwed up, don't restart */ if(!moinfo.phase) params.restart = 0; /* BUT, the user can force an override of the phase problem */ forceit = 0; errcod = ip_boolean("FORCE_RESTART", &forceit,0); if(forceit) params.restart = 1; fndcor(&(params.memory),infile,outfile); if(ip_exist("AO_BASIS",0)) { errcod = ip_string("AO_BASIS", &(params.aobasis),0); } else params.aobasis = strdup("NONE"); if(strcmp(params.aobasis,"DISK") && strcmp(params.aobasis,"DIRECT") && strcmp(params.aobasis,"NONE")) { fprintf(outfile, "Error in input: invalid AO_BASIS = %s\n", params.aobasis); exit(PSI_RETURN_FAILURE); } params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.cachetype = 1; errcod = ip_string("CACHETYPE", &(cachetype),0); if(cachetype != NULL && strlen(cachetype)) { if(!strcmp(cachetype,"LOW")) params.cachetype = 1; else if(!strcmp(cachetype,"LRU")) params.cachetype = 0; else { fprintf(outfile, "Error in input: invalid CACHETYPE = %s\n", cachetype); exit(PSI_RETURN_FAILURE); } free(cachetype); } if(params.ref == 2) /* No LOW cacheing yet for UHF references */ params.cachetype = 0; params.nthreads = 1; errcod = ip_data("NTHREADS","%d",&(params.nthreads),0); params.diis = 1; errcod = ip_boolean("DIIS", &(params.diis),0); params.t2_coupled = 0; errcod = ip_boolean("T2_COUPLED", &(params.t2_coupled),0); if(ip_exist("PROPERTY",0)) { errcod = ip_string("PROPERTY", &(params.prop), 0); if(strcmp(params.prop,"POLARIZABILITY") && strcmp(params.prop,"ROTATION") && strcmp(params.prop,"ALL") && strcmp(params.prop,"MAGNETIZABILITY")) { fprintf(outfile, "Invalid choice of response property: %s\n", params.prop); exit(PSI_RETURN_FAILURE); } } else params.prop = strdup("POLARIZABILITY"); if(ip_exist("ABCD",0)) { errcod = ip_string("ABCD", &(params.abcd), 0); if(strcmp(params.abcd,"NEW") && strcmp(params.abcd,"OLD")) { fprintf(outfile, "Invalid ABCD algorithm: %s\n", params.abcd); exit(PSI_RETURN_FAILURE); } } else params.abcd = strdup("NEW"); params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); params.local_mos = 0; errcod = ip_boolean("LOCAL_MOS", &(params.local_mos),0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "Invalid local correlation method: %s\n", local.method); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.weakp = (char *) malloc(4 * sizeof(char)); sprintf(local.weakp, "%s", "NONE"); } if(params.dertype == 3) local.filter_singles = 0; else local.filter_singles = 1; ip_boolean("LOCAL_FILTER_SINGLES", &(local.filter_singles), 0); local.cphf_cutoff = 0.10; ip_data("LOCAL_CPHF_CUTOFF", "%lf", &(local.cphf_cutoff), 0); local.freeze_core = NULL; ip_string("FREEZE_CORE", &local.freeze_core, 0); if(local.freeze_core == NULL) local.freeze_core = strdup("FALSE"); if(ip_exist("LOCAL_PAIRDEF",0)){ errcod = ip_string("LOCAL_PAIRDEF", &(local.pairdef), 0); if(strcmp(local.pairdef,"BP") && strcmp(local.pairdef,"RESPONSE")) { fprintf(outfile, "Invalid keyword for strong/weak pair definition: %s\n", local.pairdef); exit(PSI_RETURN_FAILURE); } } else if(params.local && params.dertype == 3) local.pairdef = strdup("RESPONSE"); else if(params.local) local.pairdef = strdup("BP"); params.num_amps = 10; if(ip_exist("NUM_AMPS",0)) { errcod = ip_data("NUM_AMPS", "%d", &(params.num_amps), 0); } params.bconv = 1e-5; errcod = ip_data("BRUECKNER_CONV", "%d", &(iconv), 0); if(errcod == IPE_OK) params.bconv = 1.0*pow(10.0,(double) -iconv); params.print_mp2_amps = 0; errcod = ip_boolean("PRINT_MP2_AMPS", &(params.print_mp2_amps), 0); params.print_pair_energies = 0; errcod = ip_boolean("PRINT_PAIR_ENERGIES", &(params.print_pair_energies), 0); params.spinadapt_energies = 0; errcod = ip_boolean("SPINADAPT_ENERGIES", &(params.spinadapt_energies), 0); params.t3_Ws_incore = 0; errcod = ip_boolean("T3_WS_INCORE", &(params.t3_Ws_incore),0); /* get parameters related to SCS-MP2 or SCS-N-MP2 */ /* see papers by S. Grimme or J. Platz */ params.scs = 0; params.scsmp2_scale_os = 6.0/5.0; params.scsmp2_scale_ss = 1.0/3.0; errcod = ip_boolean("SCS_N_MP2",&(params.scs),0); if (params.scs == 1) { params.scsmp2_scale_os = 0.0; params.scsmp2_scale_ss = 1.76; } errcod = ip_boolean("SCS",&(params.scs),0); if (params.scs == 1) { errcod = ip_data("MP2_SCALE_OS","%lf",&(params.scsmp2_scale_os),0); errcod = ip_data("MP2_SCALE_SS","%lf",&(params.scsmp2_scale_ss),0); } /* see paper by T. Takatani*/ params.scs = 0; params.scscc_scale_os = 1.27; params.scscc_scale_ss = 1.13; errcod = ip_boolean("SCS",&(params.scs),0); if (params.scs == 1) { errcod = ip_data("CC_SCALE_OS","%lf",&(params.scscc_scale_os),0); errcod = ip_data("CC_SCALE_SS","%lf",&(params.scscc_scale_ss),0); } fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tWave function = %6s\n", params.wfn); if(params.semicanonical) { fprintf(outfile, "\tReference wfn = ROHF changed to UHF for Semicanonical Orbitals\n"); } else { fprintf(outfile, "\tReference wfn = %5s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); } if(params.brueckner) fprintf(outfile, "\tBrueckner conv. = %3.1e\n", params.bconv); fprintf(outfile, "\tMemory (Mbytes) = %5.1f\n",params.memory/1e6); fprintf(outfile, "\tMaxiter = %4d\n", params.maxiter); fprintf(outfile, "\tConvergence = %3.1e\n", params.convergence); fprintf(outfile, "\tRestart = %s\n", params.restart ? "Yes" : "No"); fprintf(outfile, "\tDIIS = %s\n", params.diis ? "Yes" : "No"); fprintf(outfile, "\tAO Basis = %s\n", params.aobasis); fprintf(outfile, "\tABCD = %s\n", params.abcd); fprintf(outfile, "\tCache Level = %1d\n", params.cachelev); fprintf(outfile, "\tCache Type = %4s\n", params.cachetype ? "LOW" : "LRU"); fprintf(outfile, "\tPrint Level = %1d\n", params.print); fprintf(outfile, "\tNum. of threads = %d\n", params.nthreads); fprintf(outfile, "\t# Amps to Print = %1d\n", params.num_amps); fprintf(outfile, "\tPrint MP2 Amps? = %s\n", params.print_mp2_amps ? "Yes" : "No" ); fprintf(outfile, "\tAnalyze T2 Amps = %s\n", params.analyze ? "Yes" : "No" ); fprintf(outfile, "\tPrint Pair Ener = %s\n", params.print_pair_energies ? "Yes" : "No" ); if (params.print_pair_energies) fprintf(outfile, "\tSpinadapt Ener. = %s\n", params.spinadapt_energies ? "Yes" : "No" ); fprintf(outfile, "\tLocal CC = %s\n", params.local ? "Yes" : "No"); if ( !strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3") ) fprintf(outfile, "\tT3 Ws incore = %s\n", params.t3_Ws_incore ? "Yes" : "No"); if(params.local) { fprintf(outfile, "\tLocal Cutoff = %3.1e\n", local.cutoff); fprintf(outfile, "\tLocal Method = %s\n", local.method); fprintf(outfile, "\tWeak pairs = %s\n", local.weakp); fprintf(outfile, "\tFilter singles = %s\n", local.filter_singles ? "Yes" : "No"); fprintf(outfile, "\tLocal pairs = %s\n", local.pairdef); fprintf(outfile, "\tLocal CPHF cutoff = %3.1e\n", local.cphf_cutoff); } fprintf(outfile, "\tSCS = %s\n", (params.scs == 1) ? "True" : "False"); fprintf(outfile, "\tMP2_SCALE_OS = %.6f\n",params.scsmp2_scale_os); fprintf(outfile, "\tMP2_SCALE_SS = %.6f\n",params.scsmp2_scale_ss); fprintf(outfile, "\tCC_SCALE_OS = %.6f\n",params.scscc_scale_os); fprintf(outfile, "\tCC_SCALE_SS = %.6f\n",params.scscc_scale_ss); fprintf(outfile, "\n"); } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/globals.h���������������������������������������������������������������������0000644�0001015�0000765�00000001216�10754663017�015144� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #ifndef _psi_src_bin_ccenergy_globals_h #define _psi_src_bin_ccenergy_globals_h #include <ccfiles.h> namespace psi { namespace ccenergy { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } #ifdef DMALLOC #include <dmalloc.h> #endif /* #define TIME_CCENERGY */ EXTERN int *ioff; EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct Local local; }} // namespace psi::ccenergy #endif // _psi_src_bin_ccenergy_globals_h ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/halftrans.cc������������������������������������������������������������������0000644�0001015�0000765�00000007501�10754663017�015644� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* halftrans(): Routine to transform the last two indices of a dpdbuf4 ** between the MO and SO bases. ** ** dpdbuf4 *Buf1: Pointer to the MO dpdbuf4 (already initialized) ** dpdbuf4 *Buf2: Pointer to the SO dpdbuf4 (already initialized). ** double ***C1: Pointer to the left transformation matrix (symmetry blocked, SO x MO) ** double ***C2: Pointer to the right transformation matrix (symmetry blocked, SO x MO) ** int nirreps: The number of irreps in the point group ** int **mo_row: A lookup array. For a dpdbuf4 with MO indices (ij,ab), ** given the irrep h of ij (= ab) and the irrep of orbital a, the ** array returns the offset of the start of the set of b molecular ** orbitals. ** int **so_row: Like mo_row, but for a dpdbuf4 with the last two ** indices in the SO basis. ** int *mospi_left: The number of MO's per irrep for the left upper index. ** int *mospi_right: The number of MO's per irrep for the right upper index. ** int *sospi: The number of SO's per irrep. ** int type: 0 = MO --> SO; 1 = SO --> MO ** double alpha: Multiplicative factor for the transformation ** double beta: Multiplicative factor for the target */ void halftrans(dpdbuf4 *Buf1, int dpdnum1, dpdbuf4 *Buf2, int dpdnum2, double ***C1, double ***C2, int nirreps, int **mo_row, int **so_row, int *mospi_left, int *mospi_right, int *sospi, int type, double alpha, double beta) { int h, Gc, Gd, cd, pq, ij; double **X; for(h=0; h < nirreps; h++) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_init(Buf1, h); dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_init(Buf2, h); if(type==0) { /* alpha * Buf1 --> beta * Buf2 */ if(alpha != 0.0) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_rd(Buf1, h); } if(beta != 0.0) { dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_rd(Buf2, h); } } if(type==1) { /* alpha * Buf2 --> beta * Buf1 */ if(alpha != 0.0) { dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_rd(Buf2, h); } if(beta != 0.0) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_rd(Buf1, h); } } for(Gc=0; Gc < nirreps; Gc++) { Gd = h^Gc; cd = mo_row[h][Gc]; pq = so_row[h][Gc]; if(mospi_left[Gc] && mospi_right[Gd] && sospi[Gc] && sospi[Gd]) { if(type == 0) { X = block_matrix(mospi_left[Gc],sospi[Gd]); for(ij=0; ij < Buf1->params->rowtot[h]; ij++) { C_DGEMM('n','t', mospi_left[Gc], sospi[Gd], mospi_right[Gd], 1.0, &(Buf1->matrix[h][ij][cd]), mospi_right[Gd], &(C2[Gd][0][0]), mospi_right[Gd], 0.0, &(X[0][0]), sospi[Gd]); C_DGEMM('n','n', sospi[Gc], sospi[Gd], mospi_left[Gc], alpha, &(C1[Gc][0][0]), mospi_left[Gc], &(X[0][0]), sospi[Gd], beta, &(Buf2->matrix[h][ij][pq]), sospi[Gd]); } } else { X = block_matrix(sospi[Gc],mospi_right[Gd]); for(ij=0; ij < Buf1->params->rowtot[h]; ij++) { C_DGEMM('n','n', sospi[Gc], mospi_right[Gd], sospi[Gd], 1.0, &(Buf2->matrix[h][ij][pq]), sospi[Gd], &(C2[Gd][0][0]), mospi_right[Gd], 0.0, &(X[0][0]), mospi_right[Gd]); C_DGEMM('t','n', mospi_left[Gc], mospi_right[Gd], sospi[Gc], alpha, &(C1[Gc][0][0]), mospi_left[Gc], &(X[0][0]), mospi_right[Gd], beta, &(Buf1->matrix[h][ij][cd]), mospi_right[Gd]); } } free_block(X); } } dpd_set_default(dpdnum1); if(type==1) dpd_buf4_mat_irrep_wrt(Buf1, h); dpd_buf4_mat_irrep_close(Buf1, h); dpd_set_default(dpdnum2); if(type==0) dpd_buf4_mat_irrep_wrt(Buf2, h); dpd_buf4_mat_irrep_close(Buf2, h); } } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/init_amps.cc������������������������������������������������������������������0000644�0001015�0000765�00000013775�10757640026�015655� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void local_filter_T2(dpdbuf4 *T2); void init_amps(void) { dpdfile2 tIA, tia, fIA, fia, dIA, dia; dpdbuf4 tIJAB, tijab, tIjAb, D, dIJAB, dijab, dIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); if(!params.restart || !psio_tocscan(CC_OEI, "tIA")) dpd_file2_scm(&tIA, 0); else fprintf(outfile, "\tUsing old T1 amplitudes.\n"); dpd_file2_close(&tIA); if(!params.restart || !psio_tocscan(CC_TAMPS, "tIjAb")) { dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); if(params.local) { local_filter_T2(&tIjAb); } else { dpd_buf4_init(&dIjAb, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &tIjAb); dpd_buf4_close(&dIjAb); } dpd_buf4_close(&tIjAb); } else fprintf(outfile, "\tUsing old T2 amplitudes.\n\n"); } else if(params.ref == 1) { /*** ROHF ***/ if(!params.restart || !psio_tocscan(CC_OEI, "tIA") || !psio_tocscan(CC_OEI, "tia")) { dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "tIA"); dpd_file2_close(&fIA); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* dpd_oe_scm(&tIA, 0); */ dpd_file2_close(&tIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "tia"); dpd_file2_close(&fia); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* dpd_oe_scm(&tia, 0); */ dpd_file2_close(&tia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &tIA); dpd_file2_close(&tIA); dpd_file2_close(&dIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&dia, CC_OEI, 0, 0, 1, "dia"); dpd_file2_dirprd(&dia, &tia); dpd_file2_close(&tia); dpd_file2_close(&dia); } else fprintf(outfile, "\tUsing old T1 amplitudes.\n"); if(!params.restart || !psio_tocscan(CC_TAMPS, "tIjAb") || !psio_tocscan(CC_TAMPS, "tIJAB") || !psio_tocscan(CC_TAMPS, "tijab")) { dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_TAMPS, "tIJAB"); dpd_buf4_copy(&D, CC_TAMPS, "tijab"); dpd_buf4_close(&D); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_dirprd(&dIJAB, &tIJAB); dpd_buf4_close(&tIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_init(&dijab, CC_DENOM, 0, 1, 6, 1, 6, 0, "dijab"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_dirprd(&dijab, &tijab); dpd_buf4_close(&tijab); dpd_buf4_close(&dijab); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&dIjAb, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_dirprd(&dIjAb, &tIjAb); dpd_buf4_close(&tIjAb); dpd_buf4_close(&dIjAb); } else fprintf(outfile, "\tUsing old T2 amplitudes.\n"); } else if(params.ref == 2) { /*** UHF ***/ if(!params.restart || !psio_tocscan(CC_OEI, "tIA") || !psio_tocscan(CC_OEI, "tia")) { dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "tIA"); dpd_file2_close(&fIA); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* dpd_file2_scm(&tIA, 0); */ dpd_file2_close(&tIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "tia"); dpd_file2_close(&fia); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /* dpd_file2_scm(&tia, 0); */ dpd_file2_close(&tia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &tIA); dpd_file2_close(&tIA); dpd_file2_close(&dIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&dia, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&dia, &tia); dpd_file2_close(&tia); dpd_file2_close(&dia); } else fprintf(outfile, "\tUsing old T1 amplitudes.\n"); if(!params.restart || !psio_tocscan(CC_TAMPS, "tIjAb") || !psio_tocscan(CC_TAMPS, "tIJAB") || !psio_tocscan(CC_TAMPS, "tijab")) { dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_copy(&D, CC_TAMPS, "tIJAB"); dpd_buf4_close(&D); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_dirprd(&dIJAB, &tIJAB); dpd_buf4_close(&tIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_TAMPS, "tijab"); dpd_buf4_close(&D); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 11, 16, 11, 16, 0, "dijab"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_dirprd(&dIJAB, &tIJAB); dpd_buf4_close(&tIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_copy(&D, CC_TAMPS, "tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&dIJAB, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_dirprd(&dIJAB, &tIJAB); dpd_buf4_close(&tIJAB); dpd_buf4_close(&dIJAB); } else fprintf(outfile, "\tUsing old T2 amplitudes.\n"); } else { /*** RHF/ROHF ***/ } } }} // namespace psi::ccenergy ���psi3/src/bin/ccenergy/lmp2.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000016510�10757640026�014532� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <psifiles.h> #include "Params.h" #include "Local.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void local_filter_T2(dpdbuf4 *T2); /* lmp2(): Computes the local-MP2 energy and the local-MP2 weak-pair energy. ** ** Given a set of non-canonical occupied orbitals and canonical virtual ** orbitals, this routine computes the local-MP2 energy as described originally ** by Saebo and Pulay, J. Chem. Phys. 86, 914 (1987). ** ** The primary purpose of this code is actually to compute the ** so-called "weak pair" energy for use in a subsequent local-CCSD ** calculation. Given a set of t_ij^ab doubles-excitation cluster ** amplitudes, a pair ij is considered weak if the domains of atoms ** belonging to occupied orbitals i and j contain no atoms in common. ** These pairs are originally identified in local_init(), which must ** be run prior to this routine. ** ** In this code, we first compute the LMP2 energy treating all pairs ** ij equivalently. Due to the fact that the occupied orbitals are ** non-canonical, the LMP2 amplitude equations must be solved ** iteratively (i.e., the amplitudes are coupled). The weak-pair ** energy is defined as the MP2 energy contribution associated with only ** the weak pairs. This energy is used later to correct the LCCSD ** energy in which all such pairs are completely neglected. ** ** TDC, June 2002 */ void lmp2(void) { int i, j, k, ij, ab, iter, conv, row, col, nocc, nvir, natom, weak; double energy, rms, weak_pair_energy; dpdbuf4 T2, newT2, D; dpdfile2 fij, fab; psio_address next; nocc = local.nocc; nvir = local.nvir; natom = local.natom; local.domain = (int **) malloc(local.nocc*sizeof(int *)); next = PSIO_ZERO; for(i=0; i<nocc; i++) { local.domain[i] = (int *) malloc(local.natom*sizeof(int)); psio_read(CC_INFO, "Local Domains", (char *) local.domain[i], natom*sizeof(int), next, &next); } /* First, turn on all weak pairs for the LMP2 */ for(ij=0; ij < nocc*nocc; ij++) local.weak_pairs[ij] = 0; /* Clean out diagonal element of occ-occ Fock matrix */ dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fij, CC_OEI, "fIJ (non-diagonal)"); dpd_file2_close(&fij); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fIJ (non-diagonal)"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); for(i=0; i < nocc; i++) fij.matrix[0][i][i] = 0.0; dpd_file2_mat_wrt(&fij); dpd_file2_close(&fij); /* Build initial LMP2 amplitudes */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "LMP2 tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "LMP2 tIjAb"); if(params.local) { local_filter_T2(&T2); } else { dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); } dpd_buf4_close(&T2); /* Compute the LMP2 energy */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "LMP2 tIjAb"); energy = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&D); fprintf(outfile, "\n\tComputing LMP2 amplitudes:\n"); fprintf(outfile, "\t--------------------------\n"); fprintf(outfile, "\titer = %d LMP2 Energy = %20.14f\n", 0, energy); conv = 0; for(iter=1; iter < 1000; iter++) { dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "New LMP2 tIjAb Increment"); dpd_buf4_close(&D); dpd_buf4_init(&newT2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb Increment"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "LMP2 tIjAb"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract424(&T2, &fij, &newT2, 1, 0, 1, -1, 1); dpd_contract244(&fij, &T2, &newT2, 0, 0, 0, -1, 1); dpd_file2_close(&fij); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fAB"); dpd_contract244(&fab, &T2, &newT2, 1, 2, 1, 1, 1); dpd_contract424(&T2, &fab, &newT2, 3, 1, 0, 1, 1); dpd_file2_close(&fab); dpd_buf4_copy(&T2, CC_TAMPS, "New LMP2 tIjAb"); dpd_buf4_close(&T2); if(params.local) { local_filter_T2(&newT2); } else { dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D, &newT2); dpd_buf4_close(&D); } dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb Increment"); dpd_buf4_axpy(&T2, &newT2, 1); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); energy = dpd_buf4_dot(&D, &newT2); dpd_buf4_close(&D); dpd_buf4_close(&newT2); /* Check for convergence */ dpd_buf4_init(&newT2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb"); dpd_buf4_mat_irrep_init(&newT2, 0); dpd_buf4_mat_irrep_rd(&newT2, 0); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "LMP2 tIjAb"); dpd_buf4_mat_irrep_init(&T2, 0); dpd_buf4_mat_irrep_rd(&T2, 0); rms = 0.0; for(row=0; row < T2.params->rowtot[0]; row++) for(col=0; col < T2.params->coltot[0]; col++) rms += (newT2.matrix[0][row][col] - T2.matrix[0][row][col]) * (newT2.matrix[0][row][col] - T2.matrix[0][row][col]); dpd_buf4_mat_irrep_close(&T2, 0); dpd_buf4_mat_irrep_close(&newT2, 0); dpd_buf4_close(&T2); dpd_buf4_close(&newT2); rms = sqrt(rms); fprintf(outfile, "\titer = %d LMP2 Energy = %20.14f RMS = %4.3e\n", iter, energy, rms); if(rms < params.convergence) { conv = 1; fprintf(outfile, "\n\tLMP2 Iterations converged.\n"); break; } else { dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb"); dpd_buf4_copy(&T2, CC_TAMPS, "LMP2 tIjAb"); dpd_buf4_close(&T2); } } if(!conv) { fprintf(outfile, "\n\tLMP2 Iterative procedure failed.\n"); exit(PSI_RETURN_FAILURE); } /* Turn off weak pairs again for the LCCSD */ for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) { weak = 1; for(k=0; k < natom; k++) if(local.domain[i][k] && local.domain[j][k]) weak = 0; if(weak) local.weak_pairs[ij] = 1; else local.weak_pairs[ij] = 0; } /* Compute the MP2 weak-pair energy */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_mat_irrep_init(&D, 0); dpd_buf4_mat_irrep_rd(&D, 0); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New LMP2 tIjAb"); dpd_buf4_mat_irrep_init(&T2, 0); dpd_buf4_mat_irrep_rd(&T2, 0); weak_pair_energy = 0.0; for(ij=0; ij < nocc*nocc; ij++) if(local.weak_pairs[ij]) for(ab=0; ab < nvir*nvir; ab++) weak_pair_energy += D.matrix[0][ij][ab] * T2.matrix[0][ij][ab]; dpd_buf4_mat_irrep_close(&T2, 0); dpd_buf4_close(&T2); dpd_buf4_mat_irrep_close(&D, 0); dpd_buf4_close(&D); fprintf(outfile, "\n\tLMP2 Weak Pair Energy = %20.14f\n", weak_pair_energy); fprintf(outfile, "\tLMP2 Correlation Energy = %20.14f\n", energy); fprintf(outfile, "\tLMP2 Total Energy = %20.14f\n\n", energy+moinfo.eref); fflush(outfile); local.weak_pair_energy = weak_pair_energy; for(i=0; i<nocc; i++) free(local.domain[i]); free(local.domain); } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/local.cc����������������������������������������������������������������������0000644�0001015�0000765�00000024161�10757640026�014753� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libint/libint.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "Local.h" #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void local_init(void) { int i, k, ij, nocc; chkpt_init(PSIO_OPEN_OLD); local.natom = chkpt_rd_natom(); chkpt_close(); local.nso = moinfo.nso; local.nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ local.nvir = moinfo.virtpi[0]; /* active virtual orbitals */ nocc = local.nocc; local.weak_pair_energy = 0.0; local.weak_pairs = init_int_array(nocc*nocc); psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, local.nocc*local.nocc*sizeof(int)); fprintf(outfile, "\tLocalization parameters ready.\n\n"); fflush(outfile); } void local_done(void) { fprintf(outfile, "\tLocal parameters free.\n"); fflush(outfile); } void local_filter_T1(dpdfile2 *T1) { int i, a, ij, ii; int nocc, nvir; double *T1tilde, *T1bar; psio_address next; nocc = local.nocc; nvir = local.nvir; /* local.weak_pairs = init_int_array(nocc*nocc); */ local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); /* psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, */ /* local.nocc*local.nocc*sizeof(int)); */ psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); for(i=0; i<nocc; i++) { ii = i*nocc + i; /* diagonal element of pair matrices */ if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(PSI_RETURN_FAILURE); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); /* Apply the denominators */ for(a=0; a < local.pairdom_nrlen[ii]; a++) T1bar[a] /= (local.eps_occ[i] - local.eps_vir[ii][a]); /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(T1->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(T1); dpd_file2_mat_close(T1); for(ij=0; ij<nocc*nocc; ij++) { free_block(local.W[ij]); free_block(local.V[ij]); free(local.eps_vir[ij]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); /* free(local.weak_pairs); */ } void local_filter_T2(dpdbuf4 *T2) { int ij, i, j, a, b; int nso, nocc, nvir; double **X1, **X2, **T2tilde, **T2bar; psio_address next; nso = local.nso; nocc = local.nocc; nvir = local.nvir; /* local.weak_pairs = init_int_array(nocc*nocc); */ local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); /* psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, */ /* local.nocc*local.nocc*sizeof(int)); */ psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i<nocc; i++) { for(j=0; j<nocc; j++,ij++) { if(!local.weak_pairs[ij]) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', local.pairdom_len[ij], nvir, nvir, 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < local.pairdom_nrlen[ij]; a++) for(b=0; b < local.pairdom_nrlen[ij]; b++) T2bar[a][b] /= (local.eps_occ[i] + local.eps_occ[j] - local.eps_vir[ij][a] - local.eps_vir[ij][b]); /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', local.pairdom_len[ij], local.pairdom_len[ij], local.pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } else /* This must be a neglected weak pair; force it to zero */ memset((void *) T2->matrix[0][ij], 0, nvir*nvir*sizeof(double)); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); for(i=0; i<nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); /* free(local.weak_pairs); */ } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Local.h�����������������������������������������������������������������������0000644�0001015�0000765�00000001264�10754663017�014556� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #ifndef _psi_src_bin_ccenergy_local_h #define _psi_src_bin_ccenergy_local_h namespace psi { namespace ccenergy { struct Local { int natom; int nso; int nocc; int nvir; int *aostart; int *aostop; int **domain; int **pairdomain; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; char *method; char *weakp; int filter_singles; double weak_pair_energy; double cphf_cutoff; char *freeze_core; char *pairdef; }; }} // namespace psi::ccenergy #endif // _psi_src_bin_ccenergy_local_h ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Makefile.in�������������������������������������������������������������������0000644�0001015�0000765�00000002740�10764260211�015406� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) -lpthread PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ AO_contribute.cc WmbejT2.cc cc2_faeT2.cc denom.cc local.cc\ BT2.cc Wmnij.cc cc2_fmiT2.cc diagnostic.cc new_d1diag.cc\ BT2_AO.cc WmnijT2.cc cc2_t2.cc diis.cc pair_energies.cc\ CT2.cc Z.cc cc3.cc diis_RHF.cc priority.cc\ DT2.cc ZT2.cc cc3_RHF.cc diis_ROHF.cc rotate.cc\ ET2.cc amp_write.cc cc3_UHF.cc diis_UHF.cc sort_amps.cc\ FT2.cc analyze.cc cc3_Wabei.cc dijabT2.cc spinad_amps.cc\ FT2_cc2.cc cache.cc cc3_Wamef.cc energy.cc status.cc\ Fae.cc cc2_Wabei.cc cc3_Wmbij.cc fock_build.cc t1.cc\ FaetT2.cc cc2_WabeiT2.cc cc3_Wmnie.cc get_moinfo.cc t2.cc\ Fme.cc cc2_WabijT2.cc cc3_Wmnij.cc get_params.cc tau.cc\ Fmi.cc cc2_Wmbij.cc ccenergy.cc halftrans.cc taut.cc\ FmitT2.cc cc2_WmbijT2.cc converged.cc init_amps.cc tsave.cc\ Wmbej.cc cc2_Wmnij.cc d1diag.cc lmp2.cc update.cc \ mp2_energy.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: ccenergy.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 ��������������������������������psi3/src/bin/ccenergy/MOInfo.h����������������������������������������������������������������������0000644�0001015�0000765�00000012350�11101665400�014632� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #ifndef _psi_src_bin_ccenergy_moinfo_h #define _psi_src_bin_ccenergy_moinfo_h namespace psi { namespace ccenergy { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; /* no. of symmetry orbitals */ int nao; /* no. of atomic orbitals */ int iopen; /* 0=closed shell; >0=open shell */ int phase; /* Boolean for consistency of orbital phases */ int *sopi; /* no. of SOs per irrep (only used in AO-based algorithm) */ int *sosym; /* SO symmetry (Pitzer) */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irr. ex. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ int nvirt; /* total no. of virtual orbitals */ char **labels; /* irrep labels */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* alpha occupied orbital offsets within each irrep */ int *bocc_off; /* beta occupied orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* alpha virtual orbital offsets within each irrep */ int *bvir_off; /* beta virtual orbital offsets within each irrep */ int *cc_occ; /* QT->CC active occupied reordering array */ int *cc_aocc; /* QT->CC alpha active occupied reordering array */ int *cc_bocc; /* QT->CC beta active occupied reordering array */ int *cc_vir; /* QT->CC active virtiual reordering array */ int *cc_avir; /* QT->CC alpha active virtiual reordering array */ int *cc_bvir; /* QT->CC beta active virtiual reordering array */ int *qt_occ; /* CC->QT active occupied reordering array */ int *qt_aocc; /* CC->QT alpha active occupied reordering array */ int *qt_bocc; /* CC->QT beta active occupied reordering array */ int *qt_vir; /* CC->QT active virtiual reordering array */ int *qt_avir; /* CC->QT alpha active virtiual reordering array */ int *qt_bvir; /* CC->QT beta active virtiual reordering array */ int *pitzer2qt; /* Pitzer -> QT translation array */ int *qt2pitzer; /* QT -> Pitzer translation array */ int *pitzer2qt_a; /* Pitzer -> QT translation array for alpha orbitals */ int *qt2pitzer_a; /* QT -> Pitzer translation array for alpha orbitals */ int *pitzer2qt_b; /* Pitzer -> QT translation array for beta orbitals */ int *qt2pitzer_b; /* QT -> Pitzer translation array for beta orbitals */ int iter; /* Current CCSD iteration */ double conv; /* Current convergence level */ double enuc; /* Nuclear repulsion energy */ double emp2; /* MP2 energy */ double emp2_ss; /* Same-spin MP2 correlation energy*/ double emp2_os; /* Opposite-spin MP2 correlation energy*/ double escsmp2_ss; /* Scaled-SS MP2 correlation energy*/ double escsmp2_os; /* Scaled-OS MP2 correlation energy*/ double escf; /* SCF energy (from chkpt) */ double eref; /* Reference energy (file100) */ double ecc; /* Current coupled cluster correlation energy */ double ecc_ss; /* Same-spin coupled cluster correlation energy*/ double ecc_os; /* Opposite-spin coupled cluster energy*/ double escscc_ss; /* Scaled-SS coupled cluster correlation energy*/ double escscc_os; /* Scaled-OS coupled cluster energy*/ double t1diag; /* Standard open- or closed-shell T1 diagnostic */ double d1diag; /* Janssen and Nielsen's D1 Diagnostic */ double new_d1diag; /* Lee's modified D1 Diagnostic */ double ***C; /* Virtual orbital transformation matrix (for AO-basis B terms) */ double ***Ca; /* UHF alpha virtual orbital transformation matrix (for AO-basis B terms) */ double ***Cb; /* UHF beta virtual orbital transformation matrix (for AO-basis B terms) */ }; }} // namespace psi::ccenergy #endif // _psi_src_bin_ccenergy_moinfo_h ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/mp2_energy.cc�����������������������������������������������������������������0000644�0001015�0000765�00000012431�11101665400�015710� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" #include "MOInfo.h" namespace psi { namespace ccenergy { double rhf_mp2_energy(void); double uhf_mp2_energy(void); double mp2_energy(void) { /* Note that if we reach this point and ref=1 (ROHF), then we aren't using * semicanonical orbitals and so we can't compute a non-iterative MBPT(2) * energy */ if(params.ref == 0) return(rhf_mp2_energy()); else if(params.ref == 2) return(uhf_mp2_energy()); else return 0.0; } double rhf_mp2_energy(void) { double T2_energy, T1_energy; dpdfile2 F, T1, D1; dpdbuf4 T2, D; dpdbuf4 S; double os_energy, ss_energy, scs_energy; /* Initialize MP2 T1 Amps (zero for true HF references) */ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&F, CC_OEI, "tIA (MP2)"); dpd_file2_close(&F); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)"); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&D1, &T1); dpd_file2_close(&D1); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)"); T1_energy = 2.0 * dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); /* Initialize MP2 T2 Amps */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_TAMPS, "tIjAb (MP2)"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb (MP2)"); dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb (MP2)"); T2_energy = dpd_buf4_dot(&D, &T2); dpd_buf4_init(&S, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); os_energy = dpd_buf4_dot(&S, &T2); dpd_buf4_close(&S); ss_energy = (T2_energy - os_energy); moinfo.emp2_ss = ss_energy; moinfo.emp2_os = os_energy; if (params.scs == 1) { os_energy = params.scsmp2_scale_os * os_energy; ss_energy = params.scsmp2_scale_ss * ss_energy; } else { os_energy = (6.0/5.6) * os_energy; ss_energy = (1.0/3.0) * ss_energy; } moinfo.escsmp2_ss = ss_energy; moinfo.escsmp2_os = os_energy; dpd_buf4_close(&T2); dpd_buf4_close(&D); return (T2_energy+T1_energy); } double uhf_mp2_energy(void) { double E2AA, E2BB, E2AB, T1A, T1B; dpdbuf4 T2, D; dpdfile2 T1, F, D1; /* Initialize MP2 T1 Amps (zero for true HF references) */ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&F, CC_OEI, "tIA (MP2)"); dpd_file2_close(&F); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)"); dpd_file2_init(&D1, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&D1, &T1); dpd_file2_close(&D1); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&F, CC_OEI, "tia (MP2)"); dpd_file2_close(&F); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia (MP2)"); dpd_file2_init(&D1, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&D1, &T1); dpd_file2_close(&D1); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)"); T1A = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia (MP2)"); T1B = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_copy(&D, CC_TAMPS, "tIJAB (MP2)"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB (MP2)"); dpd_buf4_init(&D, CC_DENOM, 0, 2, 7, 2, 7, 0, "dIJAB"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_TAMPS, "tijab (MP2)"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab (MP2)"); dpd_buf4_init(&D, CC_DENOM, 0, 12, 17, 12, 17, 0, "dijab"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_copy(&D, CC_TAMPS, "tIjAb (MP2)"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb (MP2)"); dpd_buf4_init(&D, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB (MP2)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); E2AA = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab (MP2)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); E2BB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb (MP2)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); E2AB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); return(T1A + T1B + E2AA + E2BB + E2AB); } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/new_d1diag.cc�����������������������������������������������������������������0000644�0001015�0000765�00000006742�10757640026�015670� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* Computes a modified D1 diagnostic developed by T.J. Lee, but not yet * published. * */ double d1diag_t1_rhf(void); static double new_d1diag_t1_rohf(void) { int h, nirreps, i, j; int nclsd, nuocc, nopen; double **T1_hp, **T1_hx, **T1_xp, **T1_sq; double *E, **C; double max_hp=0.0, max_xp=0.0, max_hx=0.0, max; dpdfile2 T1_a, T1_b; nirreps = moinfo.nirreps; dpd_file2_init(&T1_a, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1_a); dpd_file2_mat_rd(&T1_a); dpd_file2_init(&T1_b, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1_b); dpd_file2_mat_rd(&T1_b); for(h=0; h < nirreps; h++) { nclsd = moinfo.clsdpi[h]; nuocc = moinfo.uoccpi[h]; nopen = moinfo.openpi[h]; if(nclsd && nuocc) { T1_hp = block_matrix(nclsd, nuocc); for (i=0; i < nclsd; i++) for (j=0; j < nuocc; j++) T1_hp[i][j] = (T1_a.matrix[h][i][j] + T1_b.matrix[h][i][j])/2.; T1_sq = block_matrix(nclsd, nclsd); C_DGEMM('n','t',nclsd,nclsd,nuocc,1.0,&(T1_hp[0][0]),nuocc, &(T1_hp[0][0]),nuocc,0.0,&(T1_sq[0][0]),nclsd); E = init_array(nclsd); C = block_matrix(nclsd, nclsd); sq_rsp(nclsd, nclsd, T1_sq, E, 0, C, 1e-12); for(i=0; i < nclsd; i++) if(E[i] > max_hp) max_hp = E[i]; free(E); free_block(C); free_block(T1_sq); free_block(T1_hp); } if(nclsd && nopen) { T1_hx = block_matrix(nclsd, nopen); for (i=0; i < nclsd; i++) for (j=0; j < nopen; j++) T1_hx[i][j] = T1_b.matrix[h][i][nuocc+j]/sqrt(2.); T1_sq = block_matrix(nclsd, nclsd); C_DGEMM('n','t',nclsd,nclsd,nopen,1.0,&(T1_hx[0][0]),nopen, &(T1_hx[0][0]),nopen,0.0,&(T1_sq[0][0]),nclsd); E = init_array(nclsd); C = block_matrix(nclsd, nclsd); sq_rsp(nclsd, nclsd, T1_sq, E, 0, C, 1e-12); for(i=0; i < nclsd; i++) if(E[i] > max_hx) max_hx = E[i]; free(E); free_block(C); free_block(T1_sq); free_block(T1_hx); } if(nopen && nuocc) { T1_xp = block_matrix(nopen, nuocc); for (i=0; i < nopen; i++) for (j=0; j < nuocc; j++) T1_xp[i][j] = T1_a.matrix[h][nclsd+i][j]/sqrt(2.); T1_sq = block_matrix(nopen, nopen); C_DGEMM('n','t',nopen,nopen,nuocc,1.0,&(T1_xp[0][0]),nuocc, &(T1_xp[0][0]),nuocc,0.0,&(T1_sq[0][0]),nopen); E = init_array(nopen); C = block_matrix(nopen, nopen); sq_rsp(nopen, nopen, T1_sq, E, 0, C, 1e-12); for(i=0; i < nopen; i++) if(E[i] > max_xp) max_xp = E[i]; free(E); free_block(C); free_block(T1_sq); free_block(T1_xp); } } dpd_file2_mat_close(&T1_a); dpd_file2_close(&T1_a); dpd_file2_mat_close(&T1_b); dpd_file2_close(&T1_b); max_hp = sqrt(max_hp); max_hx = sqrt(max_hx); max_xp = sqrt(max_xp); /* fprintf(outfile, "ND1: hp=%8.6f hx=%8.6f xp=%8.6f\n", max_hp, max_hx, max_xp); */ max = max_hp; if (max_hx > max) max = max_hx; if (max_xp > max) max = max_xp; return max; } double new_d1diag(void) { double norm = 0.0; if(params.ref == 0) { /** RHF **/ norm = d1diag_t1_rhf(); } else if (params.ref == 1) { /** ROHF **/ norm = new_d1diag_t1_rohf(); } return norm; } }} // namespace psi::ccenergy ������������������������������psi3/src/bin/ccenergy/pair_energies.cc��������������������������������������������������������������0000644�0001015�0000765�00000016141�10757640026�016474� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <ccfiles.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* pair_energies(): For RHF references, compute pair energies. Spin-adapt ** pair energies if SPINADAPT_ENERGIES is set to true. ** ** E(IJ) = T2(IJ,AB) * (<ij|ab> - <ij|ba>) ** E(Ij) = T2(Ij,Ab) * <ij|ab> ** */ void pair_energies(double** epair_aa, double** epair_ab) { dpdbuf4 tau, D, E; if(params.ref == 0) { /** RHF **/ int i, j, ij; int irrep; int nocc_act = 0; int naa, nab; for(irrep=0; irrep<moinfo.nirreps; irrep++) nocc_act += moinfo.clsdpi[irrep]; naa = nocc_act * (nocc_act-1)/2; nab = nocc_act * nocc_act; /* Compute alpha-alpha pair energies */ if (naa) { double* eaa = init_array(naa); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 0, 5, 1, "D <ij|ab>"); dpd_buf4_init(&tau, CC_TAMPS, 0, 2, 5, 0, 5, 1, "tauIjAb"); dpd_buf4_init(&E, CC_TMP0, 0, 2, 2, 2, 2, 0, "E <ij|kl>"); dpd_contract444(&D, &tau, &E, 0, 0, 1.0, 0.0); //dpd_buf4_print(&E, outfile, 1); /* Extract diagonal elements (i.e. pair energies) and print them out nicely */ for(irrep=0; irrep<moinfo.nirreps; irrep++) { double **block; dpdparams4 *Params = E.params; int p; int np = Params->rowtot[irrep]; dpd_buf4_mat_irrep_init(&E, irrep); dpd_buf4_mat_irrep_rd(&E, irrep); block = E.matrix[irrep]; for(p=0; p<np; p++) { int i, j, ij; i = Params->roworb[irrep][p][0]; j = Params->roworb[irrep][p][1]; ij = (i > j) ? i*(i-1)/2 + j : j*(j-1)/2 + i; eaa[ij] = block[p][p]; } dpd_buf4_mat_irrep_close(&E, irrep); } *epair_aa = eaa; dpd_buf4_close(&tau); dpd_buf4_close(&D); dpd_buf4_close(&E); } /* Compute alpha-beta pair energies */ if (nab) { double* eab = init_array(nab); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&E, CC_TMP0, 0, 0, 0, 0, 0, 0, "E <ij|kl>"); dpd_contract444(&D, &tau, &E, 0, 0, 1.0, 0.0); //dpd_buf4_print(&E, outfile, 1); /* Extract diagonal elements (i.e. pair energies) and print them out nicely */ for(irrep=0; irrep<moinfo.nirreps; irrep++) { double **block; dpdparams4 *Params = E.params; int p; int np = Params->rowtot[irrep]; dpd_buf4_mat_irrep_init(&E, irrep); dpd_buf4_mat_irrep_rd(&E, irrep); block = E.matrix[irrep]; for(p=0; p<np; p++) { int i, j, ij; i = Params->roworb[irrep][p][0]; j = Params->roworb[irrep][p][1]; ij = i*nocc_act + j; eab[ij] = block[p][p]; } dpd_buf4_mat_irrep_close(&E, irrep); } *epair_ab = eab; dpd_buf4_close(&tau); dpd_buf4_close(&D); dpd_buf4_close(&E); } } } void print_pair_energies(double* emp2_aa, double* emp2_ab, double* ecc_aa, double* ecc_ab) { if(params.ref == 0) { /** RHF **/ int i, j, ij; int irrep; int nocc_act = 0; int naa, nab; for(irrep=0; irrep<moinfo.nirreps; irrep++) nocc_act += moinfo.clsdpi[irrep]; naa = nocc_act * (nocc_act-1)/2; nab = nocc_act * nocc_act; if (!params.spinadapt_energies) { double emp2_aa_tot = 0.0; double emp2_ab_tot = 0.0; double ecc_aa_tot = 0.0; double ecc_ab_tot = 0.0; fprintf(outfile, "\tAlpha-alpha pair energies\n"); fprintf(outfile, "\t i j MP2 %s\n",params.wfn); fprintf(outfile, "\t ----- ----- ------------ ------------\n"); if (naa) { ij = 0; for(i=0; i<nocc_act; i++) for(j=0; j<i; j++,ij++) { fprintf(outfile, "\t %3d %3d %12.9lf %12.9lf\n", i+1, j+1, emp2_aa[ij], ecc_aa[ij]); emp2_aa_tot += emp2_aa[ij]; ecc_aa_tot += ecc_aa[ij]; } } fprintf(outfile, "\t ------------- ------------ ------------\n"); fprintf(outfile, "\t Total %12.9lf %12.9lf\n\n", emp2_aa_tot, ecc_aa_tot); fprintf(outfile, "\tAlpha-beta pair energies\n"); fprintf(outfile, "\t i j MP2 %s\n",params.wfn); fprintf(outfile, "\t ----- ----- ------------ ------------\n"); if (nab) { ij = 0; for(i=0; i<nocc_act; i++) for(j=0; j<nocc_act; j++,ij++) { fprintf(outfile, "\t %3d %3d %12.9lf %12.9lf\n", i+1, j+1, emp2_ab[ij], ecc_ab[ij]); emp2_ab_tot += emp2_ab[ij]; ecc_ab_tot += ecc_ab[ij]; } } fprintf(outfile, "\t ------------- ------------ ------------\n"); fprintf(outfile, "\t Total %12.9lf %12.9lf\n", emp2_ab_tot, ecc_ab_tot); } else { /* Spin-adapt pair energies */ double emp2_s_tot = 0.0; double emp2_t_tot = 0.0; double ecc_s_tot = 0.0; double ecc_t_tot = 0.0; fprintf(outfile, "\tSinglet pair energies\n"); fprintf(outfile, "\t i j MP2 %s\n",params.wfn); fprintf(outfile, "\t ----- ----- ------------ ------------\n"); ij = 0; for(i=0; i<nocc_act; i++) for(j=0; j<=i; j++,ij++) { double emp2_s, ecc_s; int ij_ab = i*nocc_act + j; int ij_aa = i*(i-1)/2 + j; double eab, eaa; /* MP2 */ eab = emp2_ab[ij_ab]; if (i != j) eaa = emp2_aa[ij_aa]; else eaa = 0.0; emp2_s = (i != j ? 2.0 : 1.0) * eab - 0.5 * eaa; /* CC */ eab = ecc_ab[ij_ab]; if (i != j) eaa = ecc_aa[ij_aa]; else eaa = 0.0; ecc_s = (i != j ? 2.0 : 1.0) * eab - 0.5 * eaa; fprintf(outfile, "\t %3d %3d %12.9lf %12.9lf\n", i+1, j+1, emp2_s, ecc_s); emp2_s_tot += emp2_s; ecc_s_tot += ecc_s; } fprintf(outfile, "\t ------------- ------------ ------------\n"); fprintf(outfile, "\t Total %12.9lf %12.9lf\n\n", emp2_s_tot, ecc_s_tot); fprintf(outfile, "\tTriplet pair energies\n"); fprintf(outfile, "\t i j MP2 %s\n",params.wfn); fprintf(outfile, "\t ----- ----- ------------ ------------\n"); if (naa) { ij = 0; for(i=0; i<nocc_act; i++) for(j=0; j<i; j++,ij++) { fprintf(outfile, "\t %3d %3d %12.9lf %12.9lf\n", i+1, j+1, 1.5*emp2_aa[ij], 1.5*ecc_aa[ij]); emp2_t_tot += 1.5*emp2_aa[ij]; ecc_t_tot += 1.5*ecc_aa[ij]; } } fprintf(outfile, "\t ------------- ------------ ------------\n"); fprintf(outfile, "\t Total %12.9lf %12.9lf\n", emp2_t_tot, ecc_t_tot); } fprintf(outfile, "\n"); } } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Params.h����������������������������������������������������������������������0000644�0001015�0000765�00000002105�11101665400�014723� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #ifndef _psi_src_bin_ccenergy_params_h #define _psi_src_bin_ccenergy_params_h namespace psi { namespace ccenergy { /* Input parameters */ struct Params { int maxiter; double convergence; int restart; long int memory; char *aobasis; int cachelev; int cachetype; int ref; int diis; char *wfn; int print; int local; int num_amps; int print_mp2_amps; int brueckner; double bconv; int analyze; int print_pair_energies; int spinadapt_energies; int semicanonical; int local_mos; int dertype; int t2_coupled; char *prop; /* user-selected property */ int just_energy; /* just compute energy from T amplitudes on disk and quit */ int just_residuals; /* just compute residuals from T amplitudes on disk and quit */ char *abcd; int t3_Ws_incore; int nthreads; int scs; double scsmp2_scale_os; double scsmp2_scale_ss; double scscc_scale_os; double scscc_scale_ss; }; }} // namespace psi::ccenergy #endif // _psi_src_bin_ccenergy_params_h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/priority.cc�������������������������������������������������������������������0000644�0001015�0000765�00000065256�10757640026�015554� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace ccenergy { #define NUM_ENTRIES 113 struct dpd_file4_cache_entry list[NUM_ENTRIES]; struct dpd_file4_cache_entry *priority_list(void) { extern struct dpd_file4_cache_entry list[NUM_ENTRIES]; strcpy(list[ 0].label, "D <ij||ab> (i>j,a>b)"); list[ 0].filenum = 105; list[ 0].irrep = 0; list[ 0].pqnum = 2; list[ 0].rsnum = 7; list[ 0].priority = 231; list[ 0].next = &(list[ 0+1]); list[ 0].last = NULL; strcpy(list[ 1].label, "tIJAB"); list[ 1].filenum = 109; list[ 1].irrep = 0; list[ 1].pqnum = 2; list[ 1].rsnum = 7; list[ 1].priority = 1163; list[ 1].next = &(list[ 1+1]); list[ 1].last = &(list[ 1-1]); strcpy(list[ 2].label, "tijab"); list[ 2].filenum = 109; list[ 2].irrep = 0; list[ 2].pqnum = 2; list[ 2].rsnum = 7; list[ 2].priority = 1163; list[ 2].next = &(list[ 2+1]); list[ 2].last = &(list[ 2-1]); strcpy(list[ 3].label, "dIJAB"); list[ 3].filenum = 108; list[ 3].irrep = 0; list[ 3].pqnum = 1; list[ 3].rsnum = 6; list[ 3].priority = 77; list[ 3].next = &(list[ 3+1]); list[ 3].last = &(list[ 3-1]); strcpy(list[ 4].label, "dijab"); list[ 4].filenum = 108; list[ 4].irrep = 0; list[ 4].pqnum = 1; list[ 4].rsnum = 6; list[ 4].priority = 77; list[ 4].next = &(list[ 4+1]); list[ 4].last = &(list[ 4-1]); strcpy(list[ 5].label, "D <ij|ab>"); list[ 5].filenum = 105; list[ 5].irrep = 0; list[ 5].pqnum = 0; list[ 5].rsnum = 5; list[ 5].priority = 535; list[ 5].next = &(list[ 5+1]); list[ 5].last = &(list[ 5-1]); strcpy(list[ 6].label, "tIjAb"); list[ 6].filenum = 109; list[ 6].irrep = 0; list[ 6].pqnum = 0; list[ 6].rsnum = 5; list[ 6].priority = 1241; list[ 6].next = &(list[ 6+1]); list[ 6].last = &(list[ 6-1]); strcpy(list[ 7].label, "dIjAb"); list[ 7].filenum = 108; list[ 7].irrep = 0; list[ 7].pqnum = 0; list[ 7].rsnum = 5; list[ 7].priority = 77; list[ 7].next = &(list[ 7+1]); list[ 7].last = &(list[ 7-1]); strcpy(list[ 8].label, "tauIJAB"); list[ 8].filenum = 109; list[ 8].irrep = 0; list[ 8].pqnum = 2; list[ 8].rsnum = 7; list[ 8].priority = 1161; list[ 8].next = &(list[ 8+1]); list[ 8].last = &(list[ 8-1]); strcpy(list[ 9].label, "tauijab"); list[ 9].filenum = 109; list[ 9].irrep = 0; list[ 9].pqnum = 2; list[ 9].rsnum = 7; list[ 9].priority = 1161; list[ 9].next = &(list[ 9+1]); list[ 9].last = &(list[ 9-1]); strcpy(list[ 10].label, "tauIjAb"); list[ 10].filenum = 109; list[ 10].irrep = 0; list[ 10].pqnum = 0; list[ 10].rsnum = 5; list[ 10].priority = 1161; list[ 10].next = &(list[ 10+1]); list[ 10].last = &(list[ 10-1]); strcpy(list[ 11].label, "tauIjbA"); list[ 11].filenum = 109; list[ 11].irrep = 0; list[ 11].pqnum = 0; list[ 11].rsnum = 5; list[ 11].priority = 543; list[ 11].next = &(list[ 11+1]); list[ 11].last = &(list[ 11-1]); strcpy(list[ 12].label, "tauiJaB"); list[ 12].filenum = 109; list[ 12].irrep = 0; list[ 12].pqnum = 0; list[ 12].rsnum = 5; list[ 12].priority = 389; list[ 12].next = &(list[ 12+1]); list[ 12].last = &(list[ 12-1]); strcpy(list[ 13].label, "tautIJAB"); list[ 13].filenum = 109; list[ 13].irrep = 0; list[ 13].pqnum = 2; list[ 13].rsnum = 7; list[ 13].priority = 931; list[ 13].next = &(list[ 13+1]); list[ 13].last = &(list[ 13-1]); strcpy(list[ 14].label, "tautijab"); list[ 14].filenum = 109; list[ 14].irrep = 0; list[ 14].pqnum = 2; list[ 14].rsnum = 7; list[ 14].priority = 931; list[ 14].next = &(list[ 14+1]); list[ 14].last = &(list[ 14-1]); strcpy(list[ 15].label, "tautIjAb"); list[ 15].filenum = 109; list[ 15].irrep = 0; list[ 15].pqnum = 0; list[ 15].rsnum = 5; list[ 15].priority = 931; list[ 15].next = &(list[ 15+1]); list[ 15].last = &(list[ 15-1]); strcpy(list[ 16].label, "tiJaB"); list[ 16].filenum = 109; list[ 16].irrep = 0; list[ 16].pqnum = 0; list[ 16].rsnum = 5; list[ 16].priority = 541; list[ 16].next = &(list[ 16+1]); list[ 16].last = &(list[ 16-1]); strcpy(list[ 17].label, "tIAJB"); list[ 17].filenum = 109; list[ 17].irrep = 0; list[ 17].pqnum = 10; list[ 17].rsnum = 10; list[ 17].priority = 693; list[ 17].next = &(list[ 17+1]); list[ 17].last = &(list[ 17-1]); strcpy(list[ 18].label, "tiajb"); list[ 18].filenum = 109; list[ 18].irrep = 0; list[ 18].pqnum = 10; list[ 18].rsnum = 10; list[ 18].priority = 693; list[ 18].next = &(list[ 18+1]); list[ 18].last = &(list[ 18-1]); strcpy(list[ 19].label, "tIAjb"); list[ 19].filenum = 109; list[ 19].irrep = 0; list[ 19].pqnum = 10; list[ 19].rsnum = 10; list[ 19].priority = 849; list[ 19].next = &(list[ 19+1]); list[ 19].last = &(list[ 19-1]); strcpy(list[ 20].label, "tiaJB"); list[ 20].filenum = 109; list[ 20].irrep = 0; list[ 20].pqnum = 10; list[ 20].rsnum = 10; list[ 20].priority = 693; list[ 20].next = &(list[ 20+1]); list[ 20].last = &(list[ 20-1]); strcpy(list[ 21].label, "tIbjA"); list[ 21].filenum = 109; list[ 21].irrep = 0; list[ 21].pqnum = 10; list[ 21].rsnum = 10; list[ 21].priority = 619; list[ 21].next = &(list[ 21+1]); list[ 21].last = &(list[ 21-1]); strcpy(list[ 22].label, "tjAIb"); list[ 22].filenum = 109; list[ 22].irrep = 0; list[ 22].pqnum = 10; list[ 22].rsnum = 10; list[ 22].priority = 541; list[ 22].next = &(list[ 22+1]); list[ 22].last = &(list[ 22-1]); strcpy(list[ 23].label, "C <ia||jb> (ia,bj)"); list[ 23].filenum = 104; list[ 23].irrep = 0; list[ 23].pqnum = 10; list[ 23].rsnum = 11; list[ 23].priority = 75; list[ 23].next = &(list[ 23+1]); list[ 23].last = &(list[ 23-1]); strcpy(list[ 24].label, "WMBEJ"); list[ 24].filenum = 115; list[ 24].irrep = 0; list[ 24].pqnum = 10; list[ 24].rsnum = 11; list[ 24].priority = 1823; list[ 24].next = &(list[ 24+1]); list[ 24].last = &(list[ 24-1]); strcpy(list[ 25].label, "Wmbej"); list[ 25].filenum = 115; list[ 25].irrep = 0; list[ 25].pqnum = 10; list[ 25].rsnum = 11; list[ 25].priority = 1823; list[ 25].next = &(list[ 25+1]); list[ 25].last = &(list[ 25-1]); strcpy(list[ 26].label, "C <ia|jb>"); list[ 26].filenum = 104; list[ 26].irrep = 0; list[ 26].pqnum = 10; list[ 26].rsnum = 10; list[ 26].priority = 227; list[ 26].next = &(list[ 26+1]); list[ 26].last = &(list[ 26-1]); strcpy(list[ 27].label, "WmBEj"); list[ 27].filenum = 115; list[ 27].irrep = 0; list[ 27].pqnum = 10; list[ 27].rsnum = 10; list[ 27].priority = 1823; list[ 27].next = &(list[ 27+1]); list[ 27].last = &(list[ 27-1]); strcpy(list[ 28].label, "WMbeJ"); list[ 28].filenum = 115; list[ 28].irrep = 0; list[ 28].pqnum = 10; list[ 28].rsnum = 10; list[ 28].priority = 1823; list[ 28].next = &(list[ 28+1]); list[ 28].last = &(list[ 28-1]); strcpy(list[ 29].label, "D <ij|ab> (ib,aj)"); list[ 29].filenum = 105; list[ 29].irrep = 0; list[ 29].pqnum = 10; list[ 29].rsnum = 11; list[ 29].priority = 227; list[ 29].next = &(list[ 29+1]); list[ 29].last = &(list[ 29-1]); strcpy(list[ 30].label, "WMbEj"); list[ 30].filenum = 115; list[ 30].irrep = 0; list[ 30].pqnum = 10; list[ 30].rsnum = 11; list[ 30].priority = 1823; list[ 30].next = &(list[ 30+1]); list[ 30].last = &(list[ 30-1]); strcpy(list[ 31].label, "WmBeJ"); list[ 31].filenum = 115; list[ 31].irrep = 0; list[ 31].pqnum = 10; list[ 31].rsnum = 11; list[ 31].priority = 1823; list[ 31].next = &(list[ 31+1]); list[ 31].last = &(list[ 31-1]); strcpy(list[ 32].label, "F <ia||bc> (ia,b>c)"); list[ 32].filenum = 107; list[ 32].irrep = 0; list[ 32].pqnum = 10; list[ 32].rsnum = 7; list[ 32].priority = 455; list[ 32].next = &(list[ 32+1]); list[ 32].last = &(list[ 32-1]); strcpy(list[ 33].label, "F <ia|bc>"); list[ 33].filenum = 107; list[ 33].irrep = 0; list[ 33].pqnum = 10; list[ 33].rsnum = 5; list[ 33].priority = 379; list[ 33].next = &(list[ 33+1]); list[ 33].last = &(list[ 33-1]); strcpy(list[ 34].label, "E <ij||ka> (i>j,ak)"); list[ 34].filenum = 106; list[ 34].irrep = 0; list[ 34].pqnum = 2; list[ 34].rsnum = 11; list[ 34].priority = 75; list[ 34].next = &(list[ 34+1]); list[ 34].last = &(list[ 34-1]); strcpy(list[ 35].label, "E <ai|jk>"); list[ 35].filenum = 106; list[ 35].irrep = 0; list[ 35].pqnum = 11; list[ 35].rsnum = 0; list[ 35].priority = 759; list[ 35].next = &(list[ 35+1]); list[ 35].last = &(list[ 35-1]); strcpy(list[ 36].label, "E <ij|ka>"); list[ 36].filenum = 106; list[ 36].irrep = 0; list[ 36].pqnum = 0; list[ 36].rsnum = 10; list[ 36].priority = 151; list[ 36].next = &(list[ 36+1]); list[ 36].last = &(list[ 36-1]); strcpy(list[ 37].label, "WMBEJ"); list[ 37].filenum = 111; list[ 37].irrep = 0; list[ 37].pqnum = 10; list[ 37].rsnum = 10; list[ 37].priority = 1899; list[ 37].next = &(list[ 37+1]); list[ 37].last = &(list[ 37-1]); strcpy(list[ 38].label, "Wmbej"); list[ 38].filenum = 111; list[ 38].irrep = 0; list[ 38].pqnum = 10; list[ 38].rsnum = 10; list[ 38].priority = 1899; list[ 38].next = &(list[ 38+1]); list[ 38].last = &(list[ 38-1]); strcpy(list[ 39].label, "WMbEj"); list[ 39].filenum = 111; list[ 39].irrep = 0; list[ 39].pqnum = 10; list[ 39].rsnum = 10; list[ 39].priority = 1899; list[ 39].next = &(list[ 39+1]); list[ 39].last = &(list[ 39-1]); strcpy(list[ 40].label, "WmBeJ"); list[ 40].filenum = 111; list[ 40].irrep = 0; list[ 40].pqnum = 10; list[ 40].rsnum = 10; list[ 40].priority = 1899; list[ 40].next = &(list[ 40+1]); list[ 40].last = &(list[ 40-1]); strcpy(list[ 41].label, "WMbeJ"); list[ 41].filenum = 111; list[ 41].irrep = 0; list[ 41].pqnum = 10; list[ 41].rsnum = 10; list[ 41].priority = 1519; list[ 41].next = &(list[ 41+1]); list[ 41].last = &(list[ 41-1]); strcpy(list[ 42].label, "WmBEj"); list[ 42].filenum = 111; list[ 42].irrep = 0; list[ 42].pqnum = 10; list[ 42].rsnum = 10; list[ 42].priority = 1519; list[ 42].next = &(list[ 42+1]); list[ 42].last = &(list[ 42-1]); strcpy(list[ 43].label, "D <ij||ab> (ia,jb)"); list[ 43].filenum = 105; list[ 43].irrep = 0; list[ 43].pqnum = 10; list[ 43].rsnum = 10; list[ 43].priority = 303; list[ 43].next = &(list[ 43+1]); list[ 43].last = &(list[ 43-1]); strcpy(list[ 44].label, "D <ij|ab> (ia,jb)"); list[ 44].filenum = 105; list[ 44].irrep = 0; list[ 44].pqnum = 10; list[ 44].rsnum = 10; list[ 44].priority = 303; list[ 44].next = &(list[ 44+1]); list[ 44].last = &(list[ 44-1]); strcpy(list[ 45].label, "Y (ME,JN)"); list[ 45].filenum = 115; list[ 45].irrep = 0; list[ 45].pqnum = 10; list[ 45].rsnum = 0; list[ 45].priority = 4103; list[ 45].next = &(list[ 45+1]); list[ 45].last = &(list[ 45-1]); strcpy(list[ 46].label, "D <ij||ab> (ia,bj)"); list[ 46].filenum = 105; list[ 46].irrep = 0; list[ 46].pqnum = 10; list[ 46].rsnum = 11; list[ 46].priority = 151; list[ 46].next = &(list[ 46+1]); list[ 46].last = &(list[ 46-1]); strcpy(list[ 47].label, "D <ij|ab> (ia,bj)"); list[ 47].filenum = 105; list[ 47].irrep = 0; list[ 47].pqnum = 10; list[ 47].rsnum = 11; list[ 47].priority = 151; list[ 47].next = &(list[ 47+1]); list[ 47].last = &(list[ 47-1]); strcpy(list[ 48].label, "D <ij|ab> (ib,ja)"); list[ 48].filenum = 105; list[ 48].irrep = 0; list[ 48].pqnum = 10; list[ 48].rsnum = 10; list[ 48].priority = 303; list[ 48].next = &(list[ 48+1]); list[ 48].last = &(list[ 48-1]); strcpy(list[ 49].label, "D <ij||ab>"); list[ 49].filenum = 105; list[ 49].irrep = 0; list[ 49].pqnum = 0; list[ 49].rsnum = 5; list[ 49].priority = 75; list[ 49].next = &(list[ 49+1]); list[ 49].last = &(list[ 49-1]); strcpy(list[ 50].label, "D <ij||ab> (i>j,ab)"); list[ 50].filenum = 105; list[ 50].irrep = 0; list[ 50].pqnum = 2; list[ 50].rsnum = 5; list[ 50].priority = 75; list[ 50].next = &(list[ 50+1]); list[ 50].last = &(list[ 50-1]); strcpy(list[ 51].label, "D <ij||ab> (ij,a>b)"); list[ 51].filenum = 105; list[ 51].irrep = 0; list[ 51].pqnum = 0; list[ 51].rsnum = 7; list[ 51].priority = 75; list[ 51].next = &(list[ 51+1]); list[ 51].last = &(list[ 51-1]); strcpy(list[ 52].label, "C <ia||jb>"); list[ 52].filenum = 104; list[ 52].irrep = 0; list[ 52].pqnum = 10; list[ 52].rsnum = 10; list[ 52].priority = 227; list[ 52].next = &(list[ 52+1]); list[ 52].last = &(list[ 52-1]); strcpy(list[ 53].label, "A <ij|kl>"); list[ 53].filenum = 102; list[ 53].irrep = 0; list[ 53].pqnum = 0; list[ 53].rsnum = 0; list[ 53].priority = 151; list[ 53].next = &(list[ 53+1]); list[ 53].last = &(list[ 53-1]); strcpy(list[ 54].label, "WMNIJ"); list[ 54].filenum = 111; list[ 54].irrep = 0; list[ 54].pqnum = 2; list[ 54].rsnum = 2; list[ 54].priority = 8891; list[ 54].next = &(list[ 54+1]); list[ 54].last = &(list[ 54-1]); strcpy(list[ 55].label, "Wmnij"); list[ 55].filenum = 111; list[ 55].irrep = 0; list[ 55].pqnum = 2; list[ 55].rsnum = 2; list[ 55].priority = 8891; list[ 55].next = &(list[ 55+1]); list[ 55].last = &(list[ 55-1]); strcpy(list[ 56].label, "WMnIj"); list[ 56].filenum = 111; list[ 56].irrep = 0; list[ 56].pqnum = 0; list[ 56].rsnum = 0; list[ 56].priority = 2127; list[ 56].next = &(list[ 56+1]); list[ 56].last = &(list[ 56-1]); strcpy(list[ 57].label, "E <ij||ka> (i>j,ka)"); list[ 57].filenum = 106; list[ 57].irrep = 0; list[ 57].pqnum = 2; list[ 57].rsnum = 10; list[ 57].priority = 75; list[ 57].next = &(list[ 57+1]); list[ 57].last = &(list[ 57-1]); strcpy(list[ 58].label, "W (MN,IJ)"); list[ 58].filenum = 115; list[ 58].irrep = 0; list[ 58].pqnum = 2; list[ 58].rsnum = 0; list[ 58].priority = 2583; list[ 58].next = &(list[ 58+1]); list[ 58].last = &(list[ 58-1]); strcpy(list[ 59].label, "ZIJMA"); list[ 59].filenum = 113; list[ 59].irrep = 0; list[ 59].pqnum = 2; list[ 59].rsnum = 10; list[ 59].priority = 455; list[ 59].next = &(list[ 59+1]); list[ 59].last = &(list[ 59-1]); strcpy(list[ 60].label, "Zijma"); list[ 60].filenum = 113; list[ 60].irrep = 0; list[ 60].pqnum = 2; list[ 60].rsnum = 10; list[ 60].priority = 455; list[ 60].next = &(list[ 60+1]); list[ 60].last = &(list[ 60-1]); strcpy(list[ 61].label, "ZIjMa"); list[ 61].filenum = 113; list[ 61].irrep = 0; list[ 61].pqnum = 0; list[ 61].rsnum = 10; list[ 61].priority = 455; list[ 61].next = &(list[ 61+1]); list[ 61].last = &(list[ 61-1]); strcpy(list[ 62].label, "ZIjmA"); list[ 62].filenum = 113; list[ 62].irrep = 0; list[ 62].pqnum = 0; list[ 62].rsnum = 10; list[ 62].priority = 379; list[ 62].next = &(list[ 62+1]); list[ 62].last = &(list[ 62-1]); strcpy(list[ 63].label, "ZIJAM"); list[ 63].filenum = 113; list[ 63].irrep = 0; list[ 63].pqnum = 2; list[ 63].rsnum = 11; list[ 63].priority = 455; list[ 63].next = &(list[ 63+1]); list[ 63].last = &(list[ 63-1]); strcpy(list[ 64].label, "Zijam"); list[ 64].filenum = 113; list[ 64].irrep = 0; list[ 64].pqnum = 2; list[ 64].rsnum = 11; list[ 64].priority = 455; list[ 64].next = &(list[ 64+1]); list[ 64].last = &(list[ 64-1]); strcpy(list[ 65].label, "ZIjAm"); list[ 65].filenum = 113; list[ 65].irrep = 0; list[ 65].pqnum = 0; list[ 65].rsnum = 11; list[ 65].priority = 455; list[ 65].next = &(list[ 65+1]); list[ 65].last = &(list[ 65-1]); strcpy(list[ 66].label, "New tIJAB"); list[ 66].filenum = 109; list[ 66].irrep = 0; list[ 66].pqnum = 2; list[ 66].rsnum = 7; list[ 66].priority = 58571; list[ 66].next = &(list[ 66+1]); list[ 66].last = &(list[ 66-1]); strcpy(list[ 67].label, "New tijab"); list[ 67].filenum = 109; list[ 67].irrep = 0; list[ 67].pqnum = 2; list[ 67].rsnum = 7; list[ 67].priority = 58571; list[ 67].next = &(list[ 67+1]); list[ 67].last = &(list[ 67-1]); strcpy(list[ 68].label, "New tIjAb"); list[ 68].filenum = 109; list[ 68].irrep = 0; list[ 68].pqnum = 0; list[ 68].rsnum = 5; list[ 68].priority = 10843; list[ 68].next = &(list[ 68+1]); list[ 68].last = &(list[ 68-1]); strcpy(list[ 69].label, "T (I>J,AB)"); list[ 69].filenum = 115; list[ 69].irrep = 0; list[ 69].pqnum = 2; list[ 69].rsnum = 5; list[ 69].priority = 7295; list[ 69].next = &(list[ 69+1]); list[ 69].last = &(list[ 69-1]); strcpy(list[ 70].label, "T (IJ,A>B)"); list[ 70].filenum = 115; list[ 70].irrep = 0; list[ 70].pqnum = 0; list[ 70].rsnum = 7; list[ 70].priority = 4711; list[ 70].next = &(list[ 70+1]); list[ 70].last = &(list[ 70-1]); strcpy(list[ 71].label, "B <ab||cd> (a>b,c>d)"); list[ 71].filenum = 103; list[ 71].irrep = 0; list[ 71].pqnum = 7; list[ 71].rsnum = 7; list[ 71].priority = 75; list[ 71].next = &(list[ 71+1]); list[ 71].last = &(list[ 71-1]); strcpy(list[ 72].label, "B <ab|cd>"); list[ 72].filenum = 103; list[ 72].irrep = 0; list[ 72].pqnum = 5; list[ 72].rsnum = 5; list[ 72].priority = 75; list[ 72].next = &(list[ 72+1]); list[ 72].last = &(list[ 72-1]); strcpy(list[ 73].label, "Z(ab,ij)"); list[ 73].filenum = 115; list[ 73].irrep = 0; list[ 73].pqnum = 7; list[ 73].rsnum = 2; list[ 73].priority = 683; list[ 73].next = &(list[ 73+1]); list[ 73].last = &(list[ 73-1]); strcpy(list[ 74].label, "Z(ij,ab)"); list[ 74].filenum = 115; list[ 74].irrep = 0; list[ 74].pqnum = 2; list[ 74].rsnum = 7; list[ 74].priority = 911; list[ 74].next = &(list[ 74+1]); list[ 74].last = &(list[ 74-1]); strcpy(list[ 75].label, "Z(Ab,Ij)"); list[ 75].filenum = 115; list[ 75].irrep = 0; list[ 75].pqnum = 5; list[ 75].rsnum = 0; list[ 75].priority = 379; list[ 75].next = &(list[ 75+1]); list[ 75].last = &(list[ 75-1]); strcpy(list[ 76].label, "Z(Ij,Ab)"); list[ 76].filenum = 115; list[ 76].irrep = 0; list[ 76].pqnum = 0; list[ 76].rsnum = 5; list[ 76].priority = 455; list[ 76].next = &(list[ 76+1]); list[ 76].last = &(list[ 76-1]); strcpy(list[ 77].label, "T (JI,A>B)"); list[ 77].filenum = 115; list[ 77].irrep = 0; list[ 77].pqnum = 0; list[ 77].rsnum = 7; list[ 77].priority = 911; list[ 77].next = &(list[ 77+1]); list[ 77].last = &(list[ 77-1]); strcpy(list[ 78].label, "F <ai|bc>"); list[ 78].filenum = 107; list[ 78].irrep = 0; list[ 78].pqnum = 11; list[ 78].rsnum = 5; list[ 78].priority = 75; list[ 78].next = &(list[ 78+1]); list[ 78].last = &(list[ 78-1]); strcpy(list[ 79].label, "T (I>J,BA)"); list[ 79].filenum = 115; list[ 79].irrep = 0; list[ 79].pqnum = 2; list[ 79].rsnum = 5; list[ 79].priority = 911; list[ 79].next = &(list[ 79+1]); list[ 79].last = &(list[ 79-1]); strcpy(list[ 80].label, "E <ia|jk>"); list[ 80].filenum = 106; list[ 80].irrep = 0; list[ 80].pqnum = 10; list[ 80].rsnum = 0; list[ 80].priority = 75; list[ 80].next = &(list[ 80+1]); list[ 80].last = &(list[ 80-1]); strcpy(list[ 81].label, "T2 (IA,JB)"); list[ 81].filenum = 115; list[ 81].irrep = 0; list[ 81].pqnum = 10; list[ 81].rsnum = 10; list[ 81].priority = 683; list[ 81].next = &(list[ 81+1]); list[ 81].last = &(list[ 81-1]); strcpy(list[ 82].label, "T2 (IJ,AB)"); list[ 82].filenum = 115; list[ 82].irrep = 0; list[ 82].pqnum = 0; list[ 82].rsnum = 5; list[ 82].priority = 4103; list[ 82].next = &(list[ 82+1]); list[ 82].last = &(list[ 82-1]); strcpy(list[ 83].label, "T2 (JI,AB)"); list[ 83].filenum = 115; list[ 83].irrep = 0; list[ 83].pqnum = 0; list[ 83].rsnum = 5; list[ 83].priority = 1367; list[ 83].next = &(list[ 83+1]); list[ 83].last = &(list[ 83-1]); strcpy(list[ 84].label, "T2 (IJ,BA)"); list[ 84].filenum = 115; list[ 84].irrep = 0; list[ 84].pqnum = 0; list[ 84].rsnum = 5; list[ 84].priority = 1367; list[ 84].next = &(list[ 84+1]); list[ 84].last = &(list[ 84-1]); strcpy(list[ 85].label, "T2 (JI,BA)"); list[ 85].filenum = 115; list[ 85].irrep = 0; list[ 85].pqnum = 0; list[ 85].rsnum = 5; list[ 85].priority = 1367; list[ 85].next = &(list[ 85+1]); list[ 85].last = &(list[ 85-1]); strcpy(list[ 86].label, "T2 (ia,jb)"); list[ 86].filenum = 115; list[ 86].irrep = 0; list[ 86].pqnum = 10; list[ 86].rsnum = 10; list[ 86].priority = 683; list[ 86].next = &(list[ 86+1]); list[ 86].last = &(list[ 86-1]); strcpy(list[ 87].label, "T2 (ij,ab)"); list[ 87].filenum = 115; list[ 87].irrep = 0; list[ 87].pqnum = 0; list[ 87].rsnum = 5; list[ 87].priority = 1367; list[ 87].next = &(list[ 87+1]); list[ 87].last = &(list[ 87-1]); strcpy(list[ 88].label, "T2 (ji,ab)"); list[ 88].filenum = 115; list[ 88].irrep = 0; list[ 88].pqnum = 0; list[ 88].rsnum = 5; list[ 88].priority = 455; list[ 88].next = &(list[ 88+1]); list[ 88].last = &(list[ 88-1]); strcpy(list[ 89].label, "T2 (ij,ba)"); list[ 89].filenum = 115; list[ 89].irrep = 0; list[ 89].pqnum = 0; list[ 89].rsnum = 5; list[ 89].priority = 455; list[ 89].next = &(list[ 89+1]); list[ 89].last = &(list[ 89-1]); strcpy(list[ 90].label, "T2 (ji,ba)"); list[ 90].filenum = 115; list[ 90].irrep = 0; list[ 90].pqnum = 0; list[ 90].rsnum = 5; list[ 90].priority = 455; list[ 90].next = &(list[ 90+1]); list[ 90].last = &(list[ 90-1]); strcpy(list[ 91].label, "T2 (IA,jb)"); list[ 91].filenum = 115; list[ 91].irrep = 0; list[ 91].pqnum = 10; list[ 91].rsnum = 10; list[ 91].priority = 1291; list[ 91].next = &(list[ 91+1]); list[ 91].last = &(list[ 91-1]); strcpy(list[ 92].label, "T2 (Ij,Ab) 1"); list[ 92].filenum = 115; list[ 92].irrep = 0; list[ 92].pqnum = 0; list[ 92].rsnum = 5; list[ 92].priority = 455; list[ 92].next = &(list[ 92+1]); list[ 92].last = &(list[ 92-1]); strcpy(list[ 93].label, "T2 (Ib,jA)"); list[ 93].filenum = 115; list[ 93].irrep = 0; list[ 93].pqnum = 10; list[ 93].rsnum = 10; list[ 93].priority = 683; list[ 93].next = &(list[ 93+1]); list[ 93].last = &(list[ 93-1]); strcpy(list[ 94].label, "T2 (Ij,Ab) 2"); list[ 94].filenum = 115; list[ 94].irrep = 0; list[ 94].pqnum = 0; list[ 94].rsnum = 5; list[ 94].priority = 455; list[ 94].next = &(list[ 94+1]); list[ 94].last = &(list[ 94-1]); strcpy(list[ 95].label, "Y (MB,JI)"); list[ 95].filenum = 115; list[ 95].irrep = 0; list[ 95].pqnum = 10; list[ 95].rsnum = 0; list[ 95].priority = 1367; list[ 95].next = &(list[ 95+1]); list[ 95].last = &(list[ 95-1]); strcpy(list[ 96].label, "T2 (AB,JI)"); list[ 96].filenum = 115; list[ 96].irrep = 0; list[ 96].pqnum = 5; list[ 96].rsnum = 0; list[ 96].priority = 1367; list[ 96].next = &(list[ 96+1]); list[ 96].last = &(list[ 96-1]); strcpy(list[ 97].label, "Y (mA,jI)"); list[ 97].filenum = 115; list[ 97].irrep = 0; list[ 97].pqnum = 10; list[ 97].rsnum = 0; list[ 97].priority = 683; list[ 97].next = &(list[ 97+1]); list[ 97].last = &(list[ 97-1]); strcpy(list[ 98].label, "T2 (bA,jI)"); list[ 98].filenum = 115; list[ 98].irrep = 0; list[ 98].pqnum = 5; list[ 98].rsnum = 0; list[ 98].priority = 683; list[ 98].next = &(list[ 98+1]); list[ 98].last = &(list[ 98-1]); strcpy(list[ 99].label, "T2 (Ij,Ab)"); list[ 99].filenum = 115; list[ 99].irrep = 0; list[ 99].pqnum = 0; list[ 99].rsnum = 5; list[ 99].priority = 1823; list[ 99].next = &(list[ 99+1]); list[ 99].last = &(list[ 99-1]); strcpy(list[100].label, "Y (Mb,Ij)"); list[100].filenum = 115; list[100].irrep = 0; list[100].pqnum = 10; list[100].rsnum = 0; list[100].priority = 683; list[100].next = &(list[100+1]); list[100].last = &(list[100-1]); strcpy(list[101].label, "T2 (Ab,Ij)"); list[101].filenum = 115; list[101].irrep = 0; list[101].pqnum = 5; list[101].rsnum = 0; list[101].priority = 683; list[101].next = &(list[101+1]); list[101].last = &(list[101-1]); strcpy(list[102].label, "Y(Mb,jI)"); list[102].filenum = 115; list[102].irrep = 0; list[102].pqnum = 10; list[102].rsnum = 0; list[102].priority = 683; list[102].next = &(list[102+1]); list[102].last = &(list[102-1]); strcpy(list[103].label, "T2 (Ab,jI)"); list[103].filenum = 115; list[103].irrep = 0; list[103].pqnum = 5; list[103].rsnum = 0; list[103].priority = 683; list[103].next = &(list[103+1]); list[103].last = &(list[103-1]); strcpy(list[104].label, "Y(mA,Ij)"); list[104].filenum = 115; list[104].irrep = 0; list[104].pqnum = 10; list[104].rsnum = 0; list[104].priority = 683; list[104].next = &(list[104+1]); list[104].last = &(list[104-1]); strcpy(list[105].label, "T2 (bA,Ij)"); list[105].filenum = 115; list[105].irrep = 0; list[105].pqnum = 5; list[105].rsnum = 0; list[105].priority = 683; list[105].next = &(list[105+1]); list[105].last = &(list[105-1]); strcpy(list[106].label, "T2(IJ,AB) DIIS"); list[106].filenum = 115; list[106].irrep = 0; list[106].pqnum = 2; list[106].rsnum = 7; list[106].priority = 73; list[106].next = &(list[106+1]); list[106].last = &(list[106-1]); strcpy(list[107].label, "T2(Ij,Ab) DIIS"); list[107].filenum = 115; list[107].irrep = 0; list[107].pqnum = 0; list[107].rsnum = 5; list[107].priority = 73; list[107].next = &(list[107+1]); list[107].last = &(list[107-1]); /* Hand-coded entries follow */ strcpy(list[108].label, "X(5,0)"); list[108].filenum = 115; list[108].irrep = 0; list[108].pqnum = 5; list[108].rsnum = 0; list[108].priority = 99999; list[108].next = &(list[109]); list[108].last = &(list[107]); strcpy(list[109].label, "X(0,5) 1"); list[109].filenum = 115; list[109].irrep = 0; list[109].pqnum = 0; list[109].rsnum = 5; list[109].priority = 99999; list[109].next = &(list[110]); list[109].last = &(list[108]); strcpy(list[110].label, "X(0,5) 2"); list[110].filenum = 115; list[110].irrep = 0; list[110].pqnum = 0; list[110].rsnum = 5; list[110].priority = 99999; list[110].next = &(list[111]); list[110].last = &(list[109]); strcpy(list[111].label, "X(0,5) 3"); list[111].filenum = 115; list[111].irrep = 0; list[111].pqnum = 0; list[111].rsnum = 5; list[111].priority = 99999; list[111].next = &(list[112]); list[111].last = &(list[110]); strcpy(list[112].label, "X(0,5) 4"); list[112].filenum = 115; list[112].irrep = 0; list[112].pqnum = 0; list[112].rsnum = 5; list[112].priority = 99999; list[112].next = NULL; list[112].last = &(list[111]); return(&(list[0])); } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/rotate.cc���������������������������������������������������������������������0000644�0001015�0000765�00000055615�10757640026�015167� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libiwl/iwl.h> #include <libqt/qt.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void rhf_fock_build(double **fock, double **D); void uhf_fock_build(double **fock_a, double **fock_b, double **D_a, double **D_b); /* rotate(): Rotate the orbitals using a linear transformation matrix ** built from converged T1 amplitudes. I still need to add spin-restricted ** Brueckner rotations from my 1997 paper. ** ** TDC, 5/03 */ int rotate(void) { int i, a, ii, aa, j, ij, b, p, q, I, J, A, B; int h, nirreps, nso, nmo, ntri, stat; dpdfile2 T1; double **U, **S, **X, *scratch; double *evals, *work, **SO_S, **MO_S; double **scf, **scf_new, **scf_a, **scf_b; double **scf_orig, **scf_a_orig, **scf_b_orig; double max; double **D, **D_a, **D_b; /* SCF densities */ double **fock, **fock_a, **fock_b; /* Fock matrices (SO or MO basis) */ double ***Foo, ***Fvv; /* occ-occ and vir-vir block of Fock matrix */ int *offset; int phase_ok=1, max_col; chkpt_init(PSIO_OPEN_OLD); nirreps = moinfo.nirreps; nso = moinfo.nso; nmo = moinfo.nmo; offset = init_int_array(nirreps); for(h=1; h < nirreps; h++) offset[h] = offset[h-1] + moinfo.orbspi[h-1]; /* First check to see if we've already converged the orbitals */ max = 0.0; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) for(i=0; i < moinfo.occpi[h]; i++) for(a=0; a < moinfo.virtpi[h]; a++) if(fabs(T1.matrix[h][i][a]) > max) max = fabs(T1.matrix[h][i][a]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) for(i=0; i < moinfo.aoccpi[h]; i++) for(a=0; a < moinfo.avirtpi[h]; a++) if(fabs(T1.matrix[h][i][a]) > max) max = fabs(T1.matrix[h][i][a]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) for(i=0; i < moinfo.boccpi[h]; i++) for(a=0; a < moinfo.bvirtpi[h]; a++) if(fabs(T1.matrix[h][i][a]) > max) max = fabs(T1.matrix[h][i][a]); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); } if(fabs(max) <= params.bconv) { fprintf(outfile, "\tBrueckner orbitals converged. Maximum T1 = %15.12f\n", fabs(max)); chkpt_close(); return(1); } else fprintf(outfile, "\tRotating orbitals. Maximum T1 = %15.12f\n", fabs(max)); /* grab the SO-basis overlap integrals for later use */ SO_S = block_matrix(nso, nso); ntri = nso * (nso+1)/2; scratch = init_array(ntri); stat = iwl_rdone(PSIF_OEI, PSIF_SO_S, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nso; i++) for(j=0; j <= i; j++,ij++) { SO_S[i][j] = SO_S[j][i] = scratch[ij]; } free(scratch); if(params.ref == 0) { /* RHF */ U = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) U[i][i] = 1.0; max = 0.0; dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) { for(i=0; i < moinfo.occpi[h]; i++) { ii = moinfo.qt2pitzer[moinfo.qt_occ[i] + moinfo.occ_off[h]]; for(a=0; a < moinfo.virtpi[h]; a++) { aa = moinfo.qt2pitzer[moinfo.qt_vir[a] + moinfo.vir_off[h]]; U[ii][aa] = T1.matrix[h][i][a]; U[aa][ii] = -T1.matrix[h][i][a]; } } } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); scf = chkpt_rd_scf(); scf_orig = chkpt_rd_scf(); scf_new = block_matrix(nso, nmo); C_DGEMM('n','t',nso,nmo,nmo,1,&(scf[0][0]),nmo,&(U[0][0]),nmo, 0,&(scf_new[0][0]),nmo); free_block(U); free_block(scf); /* transform the overlap into the new MO basis */ MO_S = block_matrix(nmo, nmo); X = block_matrix(nso, nso); C_DGEMM('t','n',nmo, nso, nso, 1, &(scf_new[0][0]), nmo, &(SO_S[0][0]), nso, 0, &(X[0][0]), nso); C_DGEMM('n','n',nmo, nmo, nso, 1, &(X[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); /* build S^-1/2 for this basis */ evals = init_array(nmo); work = init_array(nmo*3); if((stat = C_DSYEV('v','u', nmo,&(MO_S[0][0]),nmo,evals,work,nmo*3))) { fprintf(outfile, "rotate(): Error in overlap diagonalization. stat = %d\n", stat); exit(PSI_RETURN_FAILURE); } S = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { if(fabs(evals[i]) > 1e-8) S[i][i] = 1/sqrt(evals[i]); else S[i][i] = 0.0; } free(evals); free(work); X = block_matrix(nmo, nmo); C_DGEMM('t','n',nmo, nmo, nmo, 1, &(MO_S[0][0]), nso, &(S[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('n','n', nmo, nmo, nmo, 1, &(X[0][0]), nmo, &(MO_S[0][0]), nso, 0, &(S[0][0]), nmo); free_block(X); /* orthogonalize the new MO basis */ scf = block_matrix(nso, nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(scf_new[0][0]),nmo,&(S[0][0]),nmo, 0,&(scf[0][0]),nmo); free_block(S); free_block(MO_S); free_block(scf_new); /* build the SO-basis density for the new MOs */ D = block_matrix(nso,nso); for(h=0; h < nirreps; h++) for(p=offset[h]; p < offset[h]+moinfo.orbspi[h]; p++) for(q=offset[h]; q < offset[h]+moinfo.orbspi[h]; q++) for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]+moinfo.occpi[h]; i++) D[p][q] += scf[p][i] * scf[q][i]; /* build the SO-basis Fock matrix */ fock = block_matrix(nso, nso); rhf_fock_build(fock, D); free_block(D); /* fprintf(outfile, "\n\tSO-basis Fock matrix:\n"); mat_print(fock, nso, nso, outfile); */ /* transform the fock matrix to the new MO basis */ X = block_matrix(nso,nso); C_DGEMM('n','n',nso,nmo,nso,1.0,&(fock[0][0]),nso,&(scf[0][0]),nmo, 0,&(X[0][0]),nso); C_DGEMM('t','n',nmo,nmo,nso,1.0,&(scf[0][0]),nmo,&(X[0][0]),nso, 0,&(fock[0][0]),nso); free_block(X); /* fprintf(outfile, "\n\tMO-basis Fock matrix:\n"); mat_print(fock, nmo, nmo, outfile); */ /* extract the occ-occ and vir-vir block of the Fock matrix */ Foo = (double ***) malloc(nirreps * sizeof(double **)); Fvv = (double ***) malloc(nirreps * sizeof(double **)); X = block_matrix(nmo, nmo); for(h=0; h < nirreps; h++) { /* leave the frozen core orbitals alone */ for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]; i++) X[i][i] = 1.0; Foo[h] = block_matrix(moinfo.occpi[h], moinfo.occpi[h]); Fvv[h] = block_matrix(moinfo.virtpi[h], moinfo.virtpi[h]); for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.occpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.occpi[h]; j++,J++) Foo[h][I][J] = fock[i][j]; for(a=offset[h]+moinfo.frdocc[h]+moinfo.occpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.occpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) Fvv[h][A][B] = fock[a][b]; /* fprintf(outfile, "\n\tOcc-occ Fock matrix for irrep %d:\n", h); mat_print(Foo[h], moinfo.occpi[h], moinfo.occpi[h], outfile); fprintf(outfile, "\n\tVir-vir Fock matrix for irrep %d:\n", h); mat_print(Fvv[h], moinfo.virtpi[h], moinfo.virtpi[h], outfile); */ if(moinfo.occpi[h]) { evals = init_array(moinfo.occpi[h]); work = init_array(3*moinfo.occpi[h]); if((stat = C_DSYEV('v','u', moinfo.occpi[h], &(Foo[h][0][0]), moinfo.occpi[h], evals, work, moinfo.occpi[h]*3))) { fprintf(outfile, "rotate(): Error in Foo[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); /* fprintf(outfile, "\n\tEigenfunctions of Occ-occ Fock matrix for irrep %1d:\n", h); mat_print(Foo[h], moinfo.occpi[h], moinfo.occpi[h], outfile); */ for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.occpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.occpi[h]; j++,J++) X[i][j] = Foo[h][J][I]; } if(moinfo.virtpi[h]) { evals = init_array(moinfo.virtpi[h]); work = init_array(3*moinfo.virtpi[h]); if((stat = C_DSYEV('v','u', moinfo.virtpi[h], &(Fvv[h][0][0]), moinfo.virtpi[h], evals, work, moinfo.virtpi[h]*3))) { fprintf(outfile, "rotate(): Error in Fvv[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); /* fprintf(outfile, "\n\tEigenfunctions of Vir-vir Fock matrix for irrep %1d:\n", h); mat_print(Fvv[h], moinfo.virtpi[h], moinfo.virtpi[h], outfile); */ for(a=offset[h]+moinfo.frdocc[h]+moinfo.occpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.occpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) X[a][b] = Fvv[h][B][A]; } free_block(Foo[h]); free_block(Fvv[h]); } free(Foo); free(Fvv); free_block(fock); /* semicanonicalization of the basis */ /* fprintf(outfile, "\n\tSemicanonical transformation matrix:\n"); mat_print(X, nmo, nmo, outfile); */ scf_new = block_matrix(nso, nmo); C_DGEMM('n','n', nso, nmo, nmo, 1, &(scf[0][0]), nmo, &(X[0][0]), nmo, 0, &(scf_new[0][0]), nmo); free_block(X); free_block(scf); /* Reorder new MO's to Pitzer and write to chkpt */ /* fprintf(outfile, "\n\tSemicanonical Brueckner orbitals (Pitzer order):\n"); mat_print(scf_new, nso, nmo, outfile); */ /* correct orbital phases for amplitude restarts */ MO_S = block_matrix(nmo, nmo); X = block_matrix(nso, nmo); C_DGEMM('n','n',nso, nmo, nso, 1, &(SO_S[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('t','n',nmo, nmo, nso, 1, &(scf_orig[0][0]), nmo, &(X[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); for(p=0; p < nmo; p++) { max = 0.0; for(q=0; q < nmo; q++) { if(fabs(MO_S[p][q]) > max) { max = fabs(MO_S[p][q]); max_col = q; } } if(max_col != p) phase_ok = 0; } if(phase_ok) { for(p=0; p < nmo; p++) { if(MO_S[p][p] < 0.0) { for(q=0; q < nso; q++) scf_new[q][p] *= -1.0; } } } free_block(MO_S); /* fprintf(outfile, "\n\tOriginal SCF MOs:\n"); mat_print(scf_orig, nso, nmo, outfile); fprintf(outfile, "\n\tNew SCF MOs:\n"); mat_print(scf_new, nso, nmo, outfile); */ chkpt_wt_scf(scf_new); free_block(scf_new); free_block(scf_orig); } else if(params.ref == 2) { /* UHF */ /* AA block */ U = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) U[i][i] = 1.0; dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) { for(i=0; i < moinfo.aoccpi[h]; i++) { ii = moinfo.qt2pitzer_a[moinfo.qt_aocc[i] + moinfo.aocc_off[h]]; for(a=0; a < moinfo.avirtpi[h]; a++) { aa = moinfo.qt2pitzer_a[moinfo.qt_avir[a] + moinfo.avir_off[h]]; U[ii][aa] = T1.matrix[h][i][a]; U[aa][ii] = -T1.matrix[h][i][a]; } } } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); scf = chkpt_rd_alpha_scf(); scf_a_orig = chkpt_rd_alpha_scf(); scf_new = block_matrix(nso, nmo); C_DGEMM('n','t',nso,nmo,nmo,1,&(scf[0][0]),nmo,&(U[0][0]),nmo, 0,&(scf_new[0][0]),nmo); free_block(U); free_block(scf); MO_S = block_matrix(nmo, nmo); /* transform the overlap into the new alpha MO basis */ X = block_matrix(nso, nso); C_DGEMM('t','n',nmo, nso, nso, 1, &(scf_new[0][0]), nmo, &(SO_S[0][0]), nso, 0, &(X[0][0]), nso); C_DGEMM('n','n',nmo, nmo, nso, 1, &(X[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); evals = init_array(nmo); work = init_array(nmo*3); if((stat = C_DSYEV('v','u', nmo,&(MO_S[0][0]),nmo,evals,work,nmo*3))) { fprintf(outfile, "rotate(): Error in overlap diagonalization. stat = %d\n", stat); exit(PSI_RETURN_FAILURE); } /* build S^-1/2 for this basis */ S = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { if(fabs(evals[i]) > 1e-8) S[i][i] = 1/sqrt(evals[i]); else S[i][i] = 0.0; } free(evals); free(work); X = block_matrix(nmo, nmo); C_DGEMM('t','n',nmo, nmo, nmo, 1, &(MO_S[0][0]), nso, &(S[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('n','n', nmo, nmo, nmo, 1, &(X[0][0]), nmo, &(MO_S[0][0]), nso, 0, &(S[0][0]), nmo); free_block(X); /* orthogonalize the basis */ scf_a = block_matrix(nso, nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(scf_new[0][0]),nmo,&(S[0][0]),nmo, 0,&(scf_a[0][0]),nmo); free_block(S); free_block(MO_S); free_block(scf_new); /* BB block */ U = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) U[i][i] = 1.0; dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(h=0; h < nirreps; h++) { for(i=0; i < moinfo.boccpi[h]; i++) { ii = moinfo.qt2pitzer_b[moinfo.qt_bocc[i] + moinfo.bocc_off[h]]; for(a=0; a < moinfo.bvirtpi[h]; a++) { aa = moinfo.qt2pitzer_b[moinfo.qt_bvir[a] + moinfo.bvir_off[h]]; U[ii][aa] = T1.matrix[h][i][a]; U[aa][ii] = -T1.matrix[h][i][a]; } } } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); scf = chkpt_rd_beta_scf(); scf_b_orig = chkpt_rd_beta_scf(); scf_new = block_matrix(nso, nmo); C_DGEMM('n','t',nso,nmo,nmo,1,&(scf[0][0]),nmo,&(U[0][0]),nmo, 0,&(scf_new[0][0]),nmo); free_block(U); free_block(scf); MO_S = block_matrix(nmo, nmo); /* transform the overlap into the new beta MO basis */ X = block_matrix(nso, nso); C_DGEMM('t','n',nmo, nso, nso, 1, &(scf_new[0][0]), nmo, &(SO_S[0][0]), nso, 0, &(X[0][0]), nso); C_DGEMM('n','n',nmo, nmo, nso, 1, &(X[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); evals = init_array(nmo); work = init_array(nmo*3); if((stat = C_DSYEV('v','u', nmo,&(MO_S[0][0]),nmo,evals,work,nmo*3))) { fprintf(outfile, "rotate(): Error in overlap diagonalization. stat = %d\n", stat); exit(PSI_RETURN_FAILURE); } /* build S^-1/2 for this basis */ S = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { if(fabs(evals[i]) > 1e-8) S[i][i] = 1/sqrt(evals[i]); else S[i][i] = 0.0; } free(evals); free(work); X = block_matrix(nmo, nmo); C_DGEMM('t','n',nmo, nmo, nmo, 1, &(MO_S[0][0]), nso, &(S[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('n','n', nmo, nmo, nmo, 1, &(X[0][0]), nmo, &(MO_S[0][0]), nso, 0, &(S[0][0]), nmo); free_block(X); /* orthogonalize the basis */ scf_b = block_matrix(nso, nmo); C_DGEMM('n','n',nmo,nmo,nmo,1,&(scf_new[0][0]),nmo,&(S[0][0]),nmo, 0,&(scf_b[0][0]),nmo); free_block(S); free_block(MO_S); free_block(scf_new); /* build the SO-basis alpha and beta densities for the new MOs */ D_a = block_matrix(nso, nso); D_b = block_matrix(nso, nso); for(h=0; h < nirreps; h++) for(p=offset[h]; p < offset[h]+moinfo.orbspi[h]; p++) for(q=offset[h]; q < offset[h]+moinfo.orbspi[h]; q++) { for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h]; i++) D_a[p][q] += scf_a[p][i] * scf_a[q][i]; for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h]; i++) D_b[p][q] += scf_b[p][i] * scf_b[q][i]; } /* build the alpha and beta SO-basis Fock matrices */ fock_a = block_matrix(nso, nso); fock_b = block_matrix(nso, nso); uhf_fock_build(fock_a, fock_b, D_a, D_b); free_block(D_a); free_block(D_b); /* transform the fock matrices to the new alpha and beta MO bases */ X = block_matrix(nso,nso); C_DGEMM('n','n',nso,nmo,nso,1.0,&(fock_a[0][0]),nso,&(scf_a[0][0]),nmo, 0,&(X[0][0]),nso); C_DGEMM('t','n',nmo,nmo,nso,1.0,&(scf_a[0][0]),nmo,&(X[0][0]),nso, 0,&(fock_a[0][0]),nso); C_DGEMM('n','n',nso,nmo,nso,1.0,&(fock_b[0][0]),nso,&(scf_b[0][0]),nmo, 0,&(X[0][0]),nso); C_DGEMM('t','n',nmo,nmo,nso,1.0,&(scf_b[0][0]),nmo,&(X[0][0]),nso, 0,&(fock_b[0][0]),nso); free_block(X); /** alpha Fock semicanonicalization **/ Foo = (double ***) malloc(nirreps * sizeof(double **)); Fvv = (double ***) malloc(nirreps * sizeof(double **)); X = block_matrix(nmo, nmo); for(h=0; h < nirreps; h++) { /* leave the frozen core orbitals alone */ for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]; i++) X[i][i] = 1.0; Foo[h] = block_matrix(moinfo.aoccpi[h], moinfo.aoccpi[h]); Fvv[h] = block_matrix(moinfo.avirtpi[h], moinfo.avirtpi[h]); for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h]; j++,J++) Foo[h][I][J] = fock_a[i][j]; for(a=offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) Fvv[h][A][B] = fock_a[a][b]; if(moinfo.aoccpi[h]) { evals = init_array(moinfo.aoccpi[h]); work = init_array(3*moinfo.aoccpi[h]); if((stat = C_DSYEV('v','u', moinfo.aoccpi[h], &(Foo[h][0][0]), moinfo.aoccpi[h], evals, work, moinfo.aoccpi[h]*3))) { fprintf(outfile, "rotate(): Error in alpha Foo[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h]; j++,J++) X[i][j] = Foo[h][J][I]; } if(moinfo.avirtpi[h]) { evals = init_array(moinfo.avirtpi[h]); work = init_array(3*moinfo.avirtpi[h]); if((stat = C_DSYEV('v','u', moinfo.avirtpi[h], &(Fvv[h][0][0]), moinfo.avirtpi[h], evals, work, moinfo.avirtpi[h]*3))) { fprintf(outfile, "rotate(): Error in alpha Fvv[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); for(a=offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.aoccpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) X[a][b] = Fvv[h][B][A]; } free_block(Foo[h]); free_block(Fvv[h]); } free(Foo); free(Fvv); free_block(fock_a); scf_new = block_matrix(nso, nmo); C_DGEMM('n','n', nso, nmo, nmo, 1, &(scf_a[0][0]), nmo, &(X[0][0]), nmo, 0, &(scf_new[0][0]), nmo); free_block(X); free_block(scf_a); /* correct orbital phases for amplitude restarts */ MO_S = block_matrix(nmo, nmo); X = block_matrix(nso, nmo); C_DGEMM('n','n',nso, nmo, nso, 1, &(SO_S[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('t','n',nmo, nmo, nso, 1, &(scf_a_orig[0][0]), nmo, &(X[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); for(p=0; p < nmo; p++) { max = 0.0; for(q=0; q < nmo; q++) { if(fabs(MO_S[p][q]) > max) { max = fabs(MO_S[p][q]); max_col = q; } } if(max_col != p) phase_ok = 0; } if(phase_ok) { for(p=0; p < nmo; p++) { if(MO_S[p][p] < 0.0) { for(q=0; q < nso; q++) scf_new[q][p] *= -1.0; } } } free_block(MO_S); chkpt_wt_alpha_scf(scf_new); free_block(scf_new); free_block(scf_a_orig); /** beta Fock semicanonicalization **/ Foo = (double ***) malloc(nirreps * sizeof(double **)); Fvv = (double ***) malloc(nirreps * sizeof(double **)); X = block_matrix(nmo, nmo); for(h=0; h < nirreps; h++) { /* leave the frozen core orbitals alone */ for(i=offset[h]; i < offset[h]+moinfo.frdocc[h]; i++) X[i][i] = 1.0; Foo[h] = block_matrix(moinfo.boccpi[h], moinfo.boccpi[h]); Fvv[h] = block_matrix(moinfo.bvirtpi[h], moinfo.bvirtpi[h]); for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h]; j++,J++) Foo[h][I][J] = fock_b[i][j]; for(a=offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) Fvv[h][A][B] = fock_b[a][b]; if(moinfo.boccpi[h]) { evals = init_array(moinfo.boccpi[h]); work = init_array(3*moinfo.boccpi[h]); if((stat = C_DSYEV('v','u', moinfo.boccpi[h], &(Foo[h][0][0]), moinfo.boccpi[h], evals, work, moinfo.boccpi[h]*3))) { fprintf(outfile, "rotate(): Error in alpha Foo[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); for(i=offset[h]+moinfo.frdocc[h],I=0; i < offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h]; i++,I++) for(j=offset[h]+moinfo.frdocc[h],J=0; j < offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h]; j++,J++) X[i][j] = Foo[h][J][I]; } if(moinfo.bvirtpi[h]) { evals = init_array(moinfo.bvirtpi[h]); work = init_array(3*moinfo.bvirtpi[h]); if((stat = C_DSYEV('v','u', moinfo.bvirtpi[h], &(Fvv[h][0][0]), moinfo.bvirtpi[h], evals, work, moinfo.bvirtpi[h]*3))) { fprintf(outfile, "rotate(): Error in alpha Fvv[%1d] diagonalization. stat = %d\n", h, stat); exit(PSI_RETURN_FAILURE); } free(evals); free(work); for(a=offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h],A=0; a < offset[h]+moinfo.orbspi[h]; a++,A++) for(b=offset[h]+moinfo.frdocc[h]+moinfo.boccpi[h],B=0; b < offset[h]+moinfo.orbspi[h]; b++,B++) X[a][b] = Fvv[h][B][A]; } free_block(Foo[h]); free_block(Fvv[h]); } free(Foo); free(Fvv); free_block(fock_b); scf_new = block_matrix(nso, nmo); C_DGEMM('n','n', nso, nmo, nmo, 1, &(scf_b[0][0]), nmo, &(X[0][0]), nmo, 0, &(scf_new[0][0]), nmo); free_block(X); free_block(scf_b); /* correct orbital phases for amplitude restarts */ MO_S = block_matrix(nmo, nmo); X = block_matrix(nso, nmo); C_DGEMM('n','n',nso, nmo, nso, 1, &(SO_S[0][0]), nso, &(scf_new[0][0]), nmo, 0, &(X[0][0]), nmo); C_DGEMM('t','n',nmo, nmo, nso, 1, &(scf_b_orig[0][0]), nmo, &(X[0][0]), nmo, 0, &(MO_S[0][0]), nmo); free_block(X); for(p=0; p < nmo; p++) { max = 0.0; for(q=0; q < nmo; q++) { if(fabs(MO_S[p][q]) > max) { max = fabs(MO_S[p][q]); max_col = q; } } if(max_col != p) phase_ok = 0; } if(phase_ok) { for(p=0; p < nmo; p++) { if(MO_S[p][p] < 0.0) { for(q=0; q < nso; q++) scf_new[q][p] *= -1.0; } } } free_block(MO_S); chkpt_wt_beta_scf(scf_new); free_block(scf_new); free_block(scf_b_orig); } free_block(SO_S); free(offset); chkpt_wt_phase_check(phase_ok); chkpt_close(); return 0; } }} // namespace psi::ccenergy �������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/sort_amps.cc������������������������������������������������������������������0000644�0001015�0000765�00000010261�10757640026�015664� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void sort_amps(void) { dpdbuf4 t2, t2B; if(params.ref == 0) { /** RHF **/ /* T(iJ,aB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, qpsr, 0, 5, "tiJaB"); dpd_buf4_close(&t2); /* TIjAb (IA,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tIAjb"); dpd_buf4_close(&t2); /* TIjAb (ij,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tiaJB"); dpd_buf4_close(&t2); /* TIjAb (Ib,jA) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, psrq, 10, 10, "tIbjA"); dpd_buf4_close(&t2); /* TIjAb (jA,Ib) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tjAIb"); dpd_buf4_close(&t2); /* 2 tIjAb - tIjBa */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_scmcopy(&t2, CC_TAMPS, "2 tIjAb - tIjBa", 2); dpd_buf4_sort_axpy(&t2, CC_TAMPS, pqsr, 0, 5, "2 tIjAb - tIjBa", -1); dpd_buf4_close(&t2); /* 2 T(IA,jb) - t(IB,ja) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_scmcopy(&t2, CC_TAMPS, "2 tIAjb - tIBja", 2); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_buf4_init(&t2B, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_axpy(&t2B, &t2, -1); dpd_buf4_close(&t2B); dpd_buf4_close(&t2); } else if(params.ref == 1) { /** ROHF **/ /* T(iJ,aB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, qpsr, 0, 5, "tiJaB"); dpd_buf4_close(&t2); /* TIJAB (IA,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tIAJB"); dpd_buf4_close(&t2); /* Tijab (ia,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tiajb"); dpd_buf4_close(&t2); /* TIjAb (IA,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tIAjb"); dpd_buf4_close(&t2); /* TIjAb (ij,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tiaJB"); dpd_buf4_close(&t2); /* TIjAb (Ib,jA) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, psrq, 10, 10, "tIbjA"); dpd_buf4_close(&t2); /* TIjAb (jA,Ib) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tjAIb"); dpd_buf4_close(&t2); } else if(params.ref == 2) { /*** UHF ***/ /* TIJAB (IA,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 20, 20, "tIAJB"); dpd_buf4_close(&t2); /* Tijab (ia,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 30, 30, "tiajb"); dpd_buf4_close(&t2); /* TIjAb (IA,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 20, 30, "tIAjb"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); /* TIjAb (jb,IA) */ dpd_buf4_sort(&t2, CC_TAMPS, rspq, 30, 20, "tiaJB"); /* TIjAb (Ib,jA) (Wmbej.c) */ dpd_buf4_sort(&t2, CC_TAMPS, psrq, 24, 27, "tIbjA"); dpd_buf4_close(&t2); /* TiJaB (iB,Ja) (Wmbej.c) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 27, 24, "tiBJa"); dpd_buf4_close(&t2); /* T(iJ,aB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, qpsr, 23, 29, "tiJaB"); dpd_buf4_close(&t2); } } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/spinad_amps.cc����������������������������������������������������������������0000644�0001015�0000765�00000006515�10757640026�016162� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <ccfiles.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* spinad_amps(): For RHF references, build the T2 AA and BB amplitudes from ** the existing T2 AB amplitudes and copy the existing T1 A amplitudes ** into B. Also build the remaining W and F spin cases. ** ** T2(IJ,AB) = T2(ij,ab) = T2(Ij,Ab) - T2(Ij,Ba) ** ** T1(I,A) = T1(i,a) ** ** WMbEj = WmBeJ ** WMbeJ = WmBEj ** WMBEJ = Wmbej = WMbeJ + WMbEj ** ** WMNIJ = Wmnij = WMnIj - WMnJi ** ** FMI = Fmi ** FAE = Fae ** FME = Fme */ void spinad_amps(void) { dpdfile2 T1, F; dpdbuf4 T2AB1, T2AB2, T2, W, W1, W2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_OEI, "tia"); dpd_file2_close(&T1); dpd_buf4_init(&T2AB1, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&T2AB1, CC_TMP0, "tIjAb"); dpd_buf4_sort(&T2AB1, CC_TMP0, pqsr, 0, 5, "tIjBa"); dpd_buf4_close(&T2AB1); dpd_buf4_init(&T2AB1, CC_TMP0, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&T2AB2, CC_TMP0, 0, 0, 5, 0, 5, 0, "tIjBa"); dpd_buf4_axpy(&T2AB2, &T2AB1, -1.0); dpd_buf4_close(&T2AB2); dpd_buf4_close(&T2AB1); dpd_buf4_init(&T2AB1, CC_TMP0, 0, 2, 7, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&T2AB1, CC_TAMPS, "tIJAB"); dpd_buf4_copy(&T2AB1, CC_TAMPS, "tijab"); dpd_buf4_close(&T2AB1); if(!(!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { /*** Wmbej intermediates ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W, CC_HBAR, "WmBEj"); dpd_buf4_copy(&W, CC_HBAR, "WMBEJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_copy(&W, CC_HBAR, "WmBeJ"); dpd_buf4_close(&W); /* WMBEJ = WMbeJ + WMbEj */ dpd_buf4_init(&W1, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_init(&W2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 1); dpd_buf4_close(&W2); dpd_buf4_close(&W1); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_copy(&W, CC_HBAR, "Wmbej"); dpd_buf4_close(&W); /*** Wmnij intermediates ***/ dpd_buf4_init(&W, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_copy(&W, CC_TMP0, "WMnIj"); dpd_buf4_sort(&W, CC_TMP0, pqsr, 0, 0, "WMnJi"); dpd_buf4_close(&W); dpd_buf4_init(&W1, CC_TMP0, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&W2, CC_TMP0, 0, 0, 0, 0, 0, 0, "WMnJi"); dpd_buf4_axpy(&W2, &W1, -1); dpd_buf4_close(&W2); dpd_buf4_close(&W1); dpd_buf4_init(&W, CC_TMP0, 0, 2, 2, 0, 0, 0, "WMnIj"); dpd_buf4_copy(&W, CC_HBAR, "WMNIJ"); dpd_buf4_copy(&W, CC_HBAR, "Wmnij"); dpd_buf4_close(&W); } /*** FMI and FAE intermediates ***/ dpd_file2_init(&F, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_copy(&F, CC_OEI, "Fmit"); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_copy(&F, CC_OEI, "Faet"); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&F, CC_OEI, "Fme"); dpd_file2_close(&F); } } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/status.cc���������������������������������������������������������������������0000644�0001015�0000765�00000000422�11112564564�015174� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> namespace psi { namespace ccenergy { void status(const char *s, FILE *out) { fprintf(out, " %-15s...complete\n", s); fflush(out); } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/t1.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000032467�10757640026�014215� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void local_filter_T1(dpdfile2 *T1); void t1_build(void) { dpdfile2 newtIA, newtia, tIA, tia, fIA, fia; dpdfile2 FAE, Fae, FMI, Fmi, FME, Fme; dpdfile2 dIA, dia; dpdbuf4 tIJAB, tijab, tIjAb, tiJaB, T2; dpdbuf4 C, C_anti, D, F_anti, F, E_anti, E, Z; int Gma, Gmi, Gm, Gi, Ga, ma, m, a, A, nrows, ncols; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "New tIA"); dpd_file2_close(&fIA); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_close(&tIA); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&tIjAb, &FME, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_buf4_init(&C_anti, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot14(&tIA, &C_anti, &newtIA, 0, 1, -1, 1); dpd_dot13(&tIA, &D, &newtIA, 0, 0, 1, 1); dpd_file2_close(&tIA); dpd_buf4_close(&C_anti); dpd_buf4_close(&D); /* dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ma,mi)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F 2<ia|bc> - <ia|cb>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract444(&F, &tIjAb, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_trace42_13(&Z, &newtIA, 1, 1.0, 1.0); dpd_buf4_close(&Z); */ /* t(i,a) <-- (2 t(mi,ef) - t(mi,fe)) <ma|ef> */ /* out-of-core version replacing the *stupid* code above 3/22/05, TDC */ dpd_file2_mat_init(&newtIA); dpd_file2_mat_rd(&newtIA); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "2 tIjAb - tIjBa"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); for(Gma=0; Gma < moinfo.nirreps; Gma++) { Gmi = Gma; /* T1 is totally symmetric */ dpd_buf4_mat_irrep_row_init(&F, Gma); dpd_buf4_mat_irrep_init(&T2, Gmi); dpd_buf4_mat_irrep_rd(&T2, Gmi); for(ma=0; ma < F.params->rowtot[Gma]; ma++) { dpd_buf4_mat_irrep_row_rd(&F, Gma, ma); m = F.params->roworb[Gma][ma][0]; a = F.params->roworb[Gma][ma][1]; Gm = F.params->psym[m]; Ga = F.params->qsym[a]; Gi = Ga; /* T1 is totally symmetric */ A = a - F.params->qoff[Ga]; nrows = moinfo.occpi[Gi]; ncols = F.params->coltot[Gma]; if(nrows && ncols && moinfo.virtpi[Ga]) C_DGEMV('n',nrows,ncols,1.0,T2.matrix[Gmi][T2.row_offset[Gmi][m]],ncols, F.matrix[Gma][0],1,1.0,&newtIA.matrix[Gi][0][A],moinfo.virtpi[Ga]); } dpd_buf4_mat_irrep_close(&T2, Gmi); dpd_buf4_mat_irrep_row_close(&F, Gma); } dpd_buf4_close(&F); dpd_buf4_close(&T2); dpd_file2_mat_wrt(&newtIA); dpd_file2_mat_close(&newtIA); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&E, &tIjAb, &newtIA, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); if (params.just_residuals) { dpd_file2_close(&newtIA); return; } // dpd_file2_copy(&newtIA, CC_OEI, "New tIA Increment"); dpd_file2_close(&newtIA); /* dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA Increment"); if(params.local && local.filter_singles) { local_filter_T1(&newtIA); } else { dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); } dpd_file2_close(&newtIA); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&tIA, CC_OEI, "New tIA"); dpd_file2_close(&tIA); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "New tIA Increment"); dpd_file2_axpy(&tIA, &newtIA, 1, 0); dpd_file2_close(&tIA); dpd_file2_close(&newtIA); */ } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "New tIA"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "New tia"); dpd_file2_close(&fia); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&newtia, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_contract222(&tia, &Fae, &newtia, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_contract222(&Fmi, &tia, &newtia, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_dot13(&FME, &tIJAB, &newtIA, 0, 0, 1, 1); dpd_dot13(&Fme, &tijab, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_dot24(&Fme, &tIjAb, &newtIA, 0, 0, 1, 1); dpd_dot13(&FME, &tIjAb, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_init(&C_anti, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot14(&tIA, &C_anti, &newtIA, 0, 1, -1, 1); dpd_dot13(&tia, &D, &newtIA, 0, 0, 1, 1); dpd_dot14(&tia, &C_anti, &newtia, 0, 1, -1, 1); dpd_dot13(&tIA, &D, &newtia, 0, 0, 1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&C_anti); dpd_buf4_close(&D); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&tIJAB, &F_anti, &newtIA, 1, 1, 1, 1); dpd_contract442(&tijab, &F_anti, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&F_anti); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&tiJaB, &F, &newtIA, 1, 1, 1, 1); dpd_contract442(&tIjAb, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&tIjAb); dpd_buf4_close(&tiJaB); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&E_anti, &tIJAB, &newtIA, 1, 3, -1, 1); dpd_contract442(&E_anti, &tijab, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E_anti); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&E, &tiJaB, &newtIA, 1, 3, -1, 1); dpd_contract442(&E, &tIjAb, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dpd_buf4_close(&tiJaB); /* dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); dpd_file2_init(&dia, CC_OEI, 0, 0, 1, "dia"); dpd_file2_dirprd(&dia, &newtia); dpd_file2_close(&dia); */ dpd_file2_close(&newtIA); dpd_file2_close(&newtia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "New tIA"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "New tia"); dpd_file2_close(&fia); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_init(&newtia, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_contract222(&tia, &Fae, &newtia, 0, 0, 1, 1); dpd_file2_close(&Fae); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_contract222(&Fmi, &tia, &newtia, 1, 1, -1, 1); dpd_file2_close(&Fmi); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_dot13(&FME, &tIJAB, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_dot13(&Fme, &tijab, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_dot24(&Fme, &tIjAb, &newtIA, 0, 0, 1, 1); dpd_dot13(&FME, &tIjAb, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_dot14(&tIA, &C, &newtIA, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_dot14(&tia, &C, &newtia, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_dot13(&tia, &D, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_dot13(&tIA, &D, &newtia, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&tIJAB, &F, &newtIA, 1, 1, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&tijab, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tijab); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&tIjAb, &F, &newtIA, 0, 2, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&tIjAb, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_buf4_init(&E, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&E, &tIJAB, &newtIA, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&E, &tijab, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&E, &tIjAb, &newtIA, 2, 2, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&E, &tIjAb, &newtia, 2, 2, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); /* dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newtIA); dpd_file2_close(&dIA); dpd_file2_init(&dia, CC_OEI, 0, 2, 3, "dia"); dpd_file2_dirprd(&dia, &newtia); dpd_file2_close(&dia); */ dpd_file2_close(&newtIA); dpd_file2_close(&newtia); } } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/t2.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000003671�11112564564�014207� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void DT2(void), FaetT2(void), FmitT2(void), WmnijT2(void), WmbejT2(void); void BT2(void), ZT2(void), FT2(void), ET2(void), CT2(void), dijabT2(void); void BT2_AO(void); void status(const char *, FILE *); void FT2_CC2(void); void t2_build(void) { dpdbuf4 tIjAb; double dotval; DT2(); if(params.print & 2) status("<ij||ab> -> T2", outfile); if(strcmp(params.wfn,"CC2") || strcmp(params.wfn,"EOM_CC2")) { /* skip all this is wfn=CC2 */ FaetT2(); FmitT2(); if(params.print & 2) status("F -> T2", outfile); WmnijT2(); if(params.print & 2) status("Wmnij -> T2", outfile); #ifdef TIME_CCENERGY timer_on("BT2", outfile); #endif if(!strcmp(params.aobasis,"DISK") || !strcmp(params.aobasis,"DIRECT")) BT2_AO(); else BT2(); if(params.print & 2) status("<ab||cd> -> T2", outfile); #ifdef TIME_CCENERGY timer_off("BT2", outfile); #endif ZT2(); if(params.print & 2) status("Z -> T2", outfile); #ifdef TIME_CCENERGY timer_on("FT2", outfile); #endif FT2(); if(params.print & 2) status("<ia||bc> -> T2", outfile); #ifdef TIME_CCENERGY timer_off("FT2", outfile); #endif ET2(); if(params.print & 2) status("<ij||ka> -> T2", outfile); #ifdef TIME_CCENERGY timer_on("WmbejT2", outfile); #endif WmbejT2(); if(params.print & 2) status("Wmbej -> T2", outfile); #ifdef TIME_CCENERGY timer_off("WmbejT2", outfile); #endif #ifdef TIME_CCENERGY timer_on("CT2", outfile); #endif CT2(); if(params.print & 2) status("<ia||jb> -> T2", outfile); #ifdef TIME_CCENERGY timer_off("CT2", outfile); #endif } else { /* For CC2, just include (FT2)c->T2 */ FT2_CC2(); } } }} // namespace psi::ccenergy �����������������������������������������������������������������������psi3/src/bin/ccenergy/tau.cc������������������������������������������������������������������������0000644�0001015�0000765�00000024461�10757640026�014455� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void tau_build(void) { int h, ij, ab, i, j, a, b, I, J, A, B; int Isym, Jsym, Asym, Bsym; int nirreps; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauiJaB, tauIjbA; dpdbuf4 tIJAB, tijab, tIjAb; dpdfile2 tIA, tia; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tauIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } /* This will generate the tauIjbA file from tauIjAb */ dpd_buf4_sort(&tauIjAb, CC_TAMPS, pqsr, 0, 5, "tauIjbA"); dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tauIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tauijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tauIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } /* This will generate the tauBA and tauIjbA files from tauIjAb */ dpd_buf4_sort(&tauIjAb, CC_TAMPS, pqsr, 0, 5, "tauIjbA"); dpd_buf4_close(&tauIjAb); dpd_buf4_init(&tauIjbA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_buf4_sort(&tauIjbA, CC_TAMPS, qprs, 0, 5, "tauiJaB"); dpd_buf4_close(&tauIjbA); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tauIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tauijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tauIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); /* Resort IjAb to IjbA (used in Z.c) and iJaB */ dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_sort(&tauIjAb, CC_TAMPS, pqsr, 22, 29, "tauIjbA"); dpd_buf4_close(&tauIjAb); dpd_buf4_init(&tauIjbA, CC_TAMPS, 0, 22, 29, 22, 29, 0, "tauIjbA"); dpd_buf4_sort(&tauIjbA, CC_TAMPS, qprs, 23, 29, "tauiJaB"); dpd_buf4_close(&tauIjbA); } /*** UHF ***/ } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/taut.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000023250�10757640026�014634� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void taut_build(void) { int h, ij, ab, i, j, a, b, I, J, A, B; int Isym, Jsym, Asym, Bsym; int nirreps; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauiJaB, tauIjbA; dpdbuf4 tIJAB, tijab, tIjAb; dpdfile2 tIA, tia; nirreps = moinfo.nirreps; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tautIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tautijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= 0.5 * (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += 0.5 * (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= 0.5 * (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tautIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tautijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= 0.5 * (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tautijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += 0.5 * (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= 0.5 * (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_sort(&tauIjAb, CC_TAMPS, qpsr, 23, 29, "tautiJaB"); dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } /*** UHF ***/ } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/tsave.cc����������������������������������������������������������������������0000644�0001015�0000765�00000003716�10757640026�015006� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void tsave(void) { dpdfile2 t1; dpdbuf4 t2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_copy(&t1, CC_OEI, "tIA"); dpd_file2_close(&t1); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_TAMPS, "tIjAb"); dpd_buf4_close(&t2); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_copy(&t1, CC_OEI, "tIA"); dpd_file2_close(&t1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tia"); dpd_file2_copy(&t1, CC_OEI, "tia"); dpd_file2_close(&t1); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_copy(&t2, CC_TAMPS, "tIJAB"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_copy(&t2, CC_TAMPS, "tijab"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_TAMPS, "tIjAb"); dpd_buf4_close(&t2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "New tIA"); dpd_file2_copy(&t1, CC_OEI, "tIA"); dpd_file2_close(&t1); dpd_file2_init(&t1, CC_OEI, 0, 2, 3, "New tia"); dpd_file2_copy(&t1, CC_OEI, "tia"); dpd_file2_close(&t1); dpd_buf4_init(&t2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_copy(&t2, CC_TAMPS, "tIJAB"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_copy(&t2, CC_TAMPS, "tijab"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_copy(&t2, CC_TAMPS, "tIjAb"); dpd_buf4_close(&t2); } } }} // namespace psi::ccenergy ��������������������������������������������������psi3/src/bin/ccenergy/update.cc���������������������������������������������������������������������0000644�0001015�0000765�00000000667�10757640026�015150� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void update(void) { fprintf(outfile," %4d %20.15f %4.3e %7.6f %7.6f %7.6f\n", moinfo.iter,moinfo.ecc,moinfo.conv,moinfo.t1diag,moinfo.d1diag,moinfo.new_d1diag); fflush(outfile); } }} // namespace psi::ccenergy �������������������������������������������������������������������������psi3/src/bin/ccenergy/Wmbej.cc����������������������������������������������������������������������0000644�0001015�0000765�00000064237�10757640026�014735� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* Wmbej_build(): Build the Wmbej intermediate. ** ** Wmbej = <mb||ej> + t(j,f) <mb||ef> - t(n,b) <mn||ej> ** - [1/2 t(jn,fb) + t(j,f) t(n,b)] <mn||ef> ** ** Spin cases for UHF and ROHF orbitals: ** ------------------------------------- ** ** ** TDC ** May 2000 */ void Wmbej_build(void) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ, W; dpdbuf4 C, D, E, F, X, tIAjb, tiaJB, t2, Y, Z; dpdfile2 tIA, tia; int Gmb, mb, Gj, Ge, Gf, nrows, ncols, nlinks; #ifdef TIME_CCENERGY timer_on("C->Wmbej"); #endif /* W(mb,je) <-- <mb||ej> */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_close(&D); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_copy(&D, CC_TMP0, "WmBeJ"); dpd_buf4_close(&D); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WMbEj", 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WmBeJ", 1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); } #ifdef TIME_CCENERGY timer_off("C->Wmbej"); timer_on("F->Wmbej"); #endif if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); /* should be OOC-capable in libdpd */ dpd_buf4_close(&WMbEj); dpd_buf4_close(&F); /* dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_axpy(&Z, &WMbeJ, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); */ /* W(Mb,Je) <-- t(J,F) <Mb|Fe> */ /* OOC code added to replace above on 3/23/05, TDC */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) { dpd_buf4_mat_irrep_row_init(&W, Gmb); dpd_buf4_mat_irrep_row_init(&F, Gmb); for(mb=0; mb < F.params->rowtot[Gmb]; mb++) { dpd_buf4_mat_irrep_row_rd(&W, Gmb, mb); dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Gf = Gj; /* T1 is totally symmetric */ Ge = Gmb ^ Gf; /* <mb|fe> is totally symmetric */ nrows = moinfo.occpi[Gj]; ncols = moinfo.virtpi[Ge]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,-1.0,tIA.matrix[Gj][0],nlinks, &F.matrix[Gmb][0][F.col_offset[Gmb][Gf]],ncols,1.0, &W.matrix[Gmb][0][W.col_offset[Gmb][Gj]],ncols); } dpd_buf4_mat_irrep_row_wrt(&W, Gmb, mb); } dpd_buf4_mat_irrep_row_close(&F, Gmb); dpd_buf4_mat_irrep_row_close(&W, Gmb); } dpd_file2_mat_close(&tIA); dpd_buf4_close(&W); dpd_buf4_close(&F); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&F, &tIA, &WMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&F, &tia, &Wmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tia, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&F, &tIA, &WmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract244(&tIA, &F, &WMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract244(&tia, &F, &WmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } #ifdef TIME_CCENERGY timer_off("F->Wmbej"); timer_on("E->Wmbej"); #endif if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&E, &tIA, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&E, &tia, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tia, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&E, &tIA, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tia, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&E, &tIA, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } #ifdef TIME_CCENERGY timer_off("E->Wmbej"); #endif /* Convert to (ME,JB) for remaining terms */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_buf4_sort(&WMBEJ, CC_HBAR, prsq, 10, 10, "WMBEJ"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_buf4_sort(&Wmbej, CC_HBAR, prsq, 10, 10, "Wmbej"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_buf4_sort(&WmBeJ, CC_HBAR, prsq, 10, 10, "WmBeJ"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_sort(&WmBEj, CC_HBAR, psrq, 10, 10, "WmBEj"); dpd_buf4_close(&WmBEj); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 20, "WMBEJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 30, "Wmbej"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 30, "WMbEj"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 20, "WmBeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_sort(&W, CC_HBAR, psrq, 24, 24, "WMbeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_sort(&W, CC_HBAR, psrq, 27, 27, "WmBEj"); dpd_buf4_close(&W); } #ifdef TIME_CCENERGY timer_on("X->Wmbej"); #endif if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 1, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 1, -0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 1, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 21, 20, 21, 0, "D <IJ||AB> (IA,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (me,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 31, 30, 31, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 10, 20, 10, 0, "Y (ME,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 31, 20, 31, 0, "D <Ij|Ab> (IA,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 0, 30, 0, 0, "Y (me,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 21, 30, 21, 0, "D <Ij|Ab> (ia,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Me,Jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mE,jN)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); } #ifdef TIME_CCENERGY timer_off("X->Wmbej"); #endif } }} // namespace psi::ccenergy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/WmbejT2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000041430�10757640026�015131� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { /* WmbejT2(): Contributions of Wmbej intermediates to T2. ** ** t(ij,ab) <--- P(ij) P(ab) t(im,ae) Wmbej ** ** Spin cases for UHF or ROHF orbitals: ** ------------------------------------ ** *** AA *** ** + T(IA,ME) W(ME,JB) + T(IA,me) W(me,JB) ** - T(JA,ME) W(ME,IB) - T(JA,me) W(me,IB) ** - T(IB,ME) W(ME,JA) - T(IB,me) W(me,JA) ** + T(JB,ME) W(ME,IA) + T(JB,me) W(me,IA) ** ** *** BB *** ** + T(ia,me) W(me,jb) + T(ia,ME) W(ME,jb) ** - T(ja,me) W(me,ib) - T(ja,ME) W(ME,ib) ** - T(ib,me) W(me,ja) - T(ib,ME) W(ME,ja) ** + T(jb,me) W(me,ia) + T(jb,ME) W(ME,ia) ** ** *** AB *** ** + T(IA,ME) W(ME,jb) + T(IA,me) W(me,jb) ** + T(MA,je) W(Me,Ib) + T(IE,mb) W(mE,jA) ** + T(jb,ME) W(ME,IA) + T(jb,me) W(me,IA) ** ** For the AA and BB spin cases, only the first two terms of each need to ** be evaluated, while for AB, all six terms are different. ** ** The current version of this code requires ten contractions (two each for ** AA and BB and six for AB), one complex sort each for AA and BB, two ** complex sorts for AB, and three simple sorts each for AA and BB. ** ** For RHF orbitals: ** ----------------- ** For RHF orbitals, we have two convenient identities: ** ** T(IJ,AB) = T(ij,ab) = T(Ij,Ab) - T(Ij,Ba) ** ** and ** ** W(MB,EJ) = W(mb,ej) = W(Mb,Ej) + W(Mb,eJ) ** ** so that only the AB T2's and the ABAB and ABBA W intermediates are ** necessary. ** ** Therefore, only the AB spin case from above is required for RHF ** orbtials. ** ** + T(IA,ME) W(ME,jb) + T(IA,me) W(me,jb) I ** + T(MA,je) W(Me,Ib) + T(IE,mb) W(mE,jA) II + III ** + T(jb,ME) W(ME,IA) + T(jb,me) W(me,IA) IV ** ** The AB T2 term labelled I above may be rewritten as: ** ** 1/2 [ (2 T(IA,me) - T(Ia,mE)) (2 W(ME,jb) + W(Me,Jb))] + 1/2 T(Ia,mE) W(Me,Jb) ** ** Term III from the AB case above is actually the same as the last ** term in the expression above, apart from the 1/2 and swapping of a ** and b indices. So, for RHF orbitals, we need only evaluate the two ** contractions: ** ** X(IA,jb) = 1/2 [ (2 T(IA,me) - T(Ia,mE)) (2 W(ME,jb) + W(Me,Jb))] ** ** and ** ** Z(Ia,Jb) = T(Ia,mE) W(Me,Jb) ** ** Then, I = X(IA,jb) + 1/2 Z(Ia,Jb) ** and III = Z(Ib,Ja) (i.e., we have to sort Z to get III) ** ** Finally, we obtain II + IV by summing I and III and swapping I<-->j ** and A<-->b. ** ** TDC ** May 2000 ** Revised August 2001 ** Last revised October 2001 */ void WmbejT2(void) { dpdbuf4 T2new, T2, W, T2B, W1, W2, Z; if(params.ref == 0) { /** RHF **/ /*** AB ***/ /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W, CC_TMP0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W1, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_close(&W1); /* T2(Ib,mE) * W(mE,jA) --> Z(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(IA,jb) (part III) */ dpd_buf4_sort(&T2new, CC_TMP0, psrq, 10, 10, "T2 (IA,jb) 3"); dpd_buf4_close(&T2new); /* 1/2 [ (2 T2(IA,me) - T2(IE,ma)) * (2 W(ME,jb) + W(Me,Jb)] --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 1"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_contract444(&T2, &W, &T2new, 0, 1, 0.5, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* 1/2 Z(Ib,jA) + T2(IA,jb) --> T2(IA,jb) (Part I) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_axpy(&Z, &T2new, 0.5); dpd_buf4_close(&Z); dpd_buf4_close(&T2new); /* T2(IA,jb) (I) + T2(IA,jb) (III) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 1"); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 3"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "T2 (Ij,Ab) (1+3)"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (1+3)"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "T2 (Ij,Ab) (2+4)"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) <--- I + II + III + IV */ dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (1+3)"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (2+4)"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } else if(params.ref == 1) { /** ROHF **/ /*** AA ***/ /* T2(IA,ME) * W(ME,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,JB) --> T2(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IA,JB) - T2(JA,IB) - T2(IB,JA) + T2(JB,IA) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> New T2(IJ,AB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* T2(ia,me) * W(me,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,ME) * W(ME,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,jb) --> T2(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) + T2(ji,ba) --> T2(ij,ab) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(ij,ab) --> New T2(ij,ab) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tijab"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* T2(IA,ME) * W(ME,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(ME,IA) * T2(jb,ME) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(me,IA) * T2(jb,me) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,jb) --> T2(Ij,Ab) (part 1) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "T2 (Ij,Ab) 1"); dpd_buf4_close(&T2new); /* T2(Ib,mE) * W(mE,jA) --> T2(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(Me,Ib) * T2(jA,Me) --> T2(Ib,jA) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(Ij,Ab) (part 2) */ dpd_buf4_sort(&T2new, CC_TMP0, prsq, 0, 5, "T2 (Ij,Ab) 2"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) (part 1) + T2(Ij,Ab) (part 2) --> New T2(Ij,Ab) */ dpd_buf4_init(&T2new, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) 1"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) 2"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } /*** ROHF ***/ else if(params.ref == 2) { /*** UHF ***/ /*** AA ***/ /* T2(IA,ME) * W(ME,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 20, 20, 20, 20, 0, "T2 (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,JB) --> T2(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IA,JB) - T2(JA,IB) - T2(IB,JA) + T2(JB,IA) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> New T2(IJ,AB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* T2(ia,me) * W(me,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 30, 30, 30, 30, 0, "T2 (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,ME) * W(ME,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,jb) --> T2(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 10, 15, "X(10,15) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 10, 15, "X(10,15) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 10, 15, "X(10,15) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 10, 15, "X(10,15) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) + T2(ji,ba) --> T2(ij,ab) */ dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(ij,ab) --> New T2(ij,ab) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "New tijab"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* T2(IA,ME) * W(ME,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 20, 30, 20, 30, 0, "T2 (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(ME,IA) * T2(jb,ME) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(me,IA) * T2(jb,me) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,jb) --> T2(Ij,Ab) (part 1) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 22, 28, "T2 (Ij,Ab) 1"); dpd_buf4_close(&T2new); /* T2(Ib,mE) * W(mE,jA) --> T2(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 24, 27, 24, 27, 0, "T2 (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(Me,Ib) * T2(jA,Me) --> T2(Ib,jA) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(Ij,Ab) (part 2) */ dpd_buf4_sort(&T2new, CC_TMP0, prsq, 22, 28, "T2 (Ij,Ab) 2"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) (part 1) + T2(Ij,Ab) (part 2) --> New T2(Ij,Ab) */ dpd_buf4_init(&T2new, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "T2 (Ij,Ab) 1"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "T2 (Ij,Ab) 2"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } /*** UHF ***/ } }} // namespace psi::ccenergy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/Wmnij.cc����������������������������������������������������������������������0000644�0001015�0000765�00000016763�10757640026�014756� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void Wmnij_build(void) { dpdbuf4 A_anti, A; dpdbuf4 WMNIJ, Wmnij, WMnIj, W; dpdfile2 tIA, tia; dpdbuf4 Eijka, Eijka_anti, Eaijk, Eaijk_anti; dpdbuf4 D_anti, D, tauIJAB, tauijab, tauIjAb; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&A_anti, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_copy(&A_anti, CC_HBAR, "WMNIJ"); dpd_buf4_copy(&A_anti, CC_HBAR, "Wmnij"); dpd_buf4_close(&A_anti); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_copy(&A, CC_HBAR, "WMNIJ"); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 12, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "Wmnij"); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&Eijka, &tIA, &WMnIj, 3, 1, 0, 1, 1); dpd_buf4_close(&Eijka); dpd_file2_close(&tIA); dpd_buf4_close(&WMnIj); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 0, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 0, 2, 2, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Eijka_anti, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Eaijk_anti, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka_anti, &tIA, &W, 3, 1, 0, 1, 0); dpd_contract244(&tIA, &Eaijk_anti, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &WMNIJ, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka_anti, &tia, &W, 3, 1, 0, 1, 0); dpd_contract244(&tia, &Eaijk_anti, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &Wmnij, 1); dpd_buf4_close(&W); dpd_contract424(&Eijka, &tia, &WMnIj, 3, 1, 0, 1, 1); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eijka_anti); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk_anti); dpd_buf4_close(&Eaijk); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 0, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 10, 12, 12, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka, &tIA, &W, 3, 1, 0, 1, 0); dpd_contract244(&tIA, &Eaijk, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &WMNIJ, 1); dpd_buf4_close(&W); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&W, CC_TMP0, 0, 12, 10, 12, 10, 0, "W (mn,ij)"); dpd_contract424(&Eijka, &tia, &W, 3, 1, 0, 1, 0); dpd_contract244(&tia, &Eaijk, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &Wmnij, 1); dpd_buf4_close(&W); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_contract424(&Eijka, &tia, &WMnIj, 3, 1, 0, 1, 1); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); dpd_buf4_close(&WMnIj); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 2, 2, 2, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&D_anti, &tauIJAB, &WMNIJ, 0, 0, 1, 1); dpd_contract444(&D_anti, &tauijab, &Wmnij, 0, 0, 1, 1); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 12, 12, 12, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&D, &tauIJAB, &WMNIJ, 0, 0, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&D, &tauijab, &Wmnij, 0, 0, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } } }} // namespace psi::ccenergy �������������psi3/src/bin/ccenergy/WmnijT2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000005762�10757640026�015161� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void WmnijT2(void) { dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 WMNIJ, Wmnij, WMnIj; dpdbuf4 tauIJAB, tauijab, tauIjAb; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&WMNIJ, &tauIJAB, &newtIJAB, 1, 1, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tijab"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 2, 2, 2, 0, "Wmnij"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Wmnij, &tauijab, &newtijab, 1, 1, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&Wmnij); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&WMNIJ, &tauIJAB, &newtIJAB, 1, 1, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "New tijab"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 12, 12, 12, 0, "Wmnij"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&Wmnij, &tauijab, &newtijab, 1, 1, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&Wmnij); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } } }} // namespace psi::ccenergy ��������������psi3/src/bin/ccenergy/Z.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000011153�10757640026�014067� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void Z_build(void) { dpdbuf4 ZIJMA, Zijma, ZIjMa, ZIjmA, ZIjAm, ZMaIj, ZmAIj, Z; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauIjbA, F_anti, F, tau; int Gmb, Gij, mb, nrows, ncols; #ifdef TIME_CCENERGY timer_on("Z"); #endif if(params.ref == 0) { /** RHF **/ /* ZMbIj = <Mb|Ef> * tau(Ij,Ef) */ /* OOC code added 3/23/05 -TDC */ dpd_buf4_init(&Z, CC_MISC, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&F, &tau, &Z, 0, 0, 1, 0); /* for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) { */ /* Gij = Gmb; /\* tau is totally symmetric *\/ */ /* dpd_buf4_mat_irrep_init(&tau, Gij); */ /* dpd_buf4_mat_irrep_rd(&tau, Gij); */ /* dpd_buf4_mat_irrep_init(&Z, Gmb); */ /* dpd_buf4_mat_irrep_row_init(&F, Gmb); */ /* for(mb=0; mb < F.params->rowtot[Gmb]; mb++) { */ /* dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb); */ /* nrows = tau.params->rowtot[Gij]; */ /* ncols = tau.params->coltot[Gij]; */ /* if(nrows && ncols) */ /* C_DGEMV('n',nrows,ncols,1.0,tau.matrix[Gij][0],ncols,F.matrix[Gmb][0],1, */ /* 0.0,Z.matrix[Gmb][mb],1); */ /* } */ /* dpd_buf4_mat_irrep_row_close(&F, Gmb); */ /* dpd_buf4_mat_irrep_wrt(&Z, Gmb); */ /* dpd_buf4_mat_irrep_close(&Z, Gmb); */ /* dpd_buf4_mat_irrep_close(&tau, Gij); */ /* } */ dpd_buf4_close(&tau); dpd_buf4_close(&F); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 10, 2, 10, 0, "ZIJMA"); dpd_buf4_init(&Zijma, CC_MISC, 0, 2, 10, 2, 10, 0, "Zijma"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjMa"); dpd_buf4_init(&ZIjmA, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjmA"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&tauIjbA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&tauIJAB, &F_anti, &ZIJMA, 0, 0, 1, 0); dpd_contract444(&tauijab, &F_anti, &Zijma, 0, 0, 1, 0); dpd_contract444(&tauIjAb, &F, &ZIjMa, 0, 0, 1, 0); dpd_contract444(&tauIjbA, &F, &ZIjmA, 0, 0, 1, 0); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&tauIjbA); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_buf4_sort(&ZIJMA, CC_MISC, pqsr, 2, 11, "ZIJAM"); dpd_buf4_sort(&Zijma, CC_MISC, pqsr, 2, 11, "Zijam"); dpd_buf4_sort(&ZIjmA, CC_MISC, pqsr, 0, 11, "ZIjAm"); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&Zijma); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjmA); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 20, 2, 20, 0, "ZIJMA"); dpd_buf4_init(&Zijma, CC_MISC, 0, 12, 30, 12, 30, 0, "Zijma"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 22, 24, 22, 24, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 22, 26, 22, 26, 0, "ZIjAm"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_contract444(&tauIJAB, &F, &ZIJMA, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_contract444(&tauijab, &F, &Zijma, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract444(&tauIjAb, &F, &ZIjMa, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_contract444(&tauIjAb, &F, &ZIjAm, 0, 1, 1, 0); dpd_buf4_close(&F); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_sort(&ZIJMA, CC_MISC, pqsr, 2, 21, "ZIJAM"); dpd_buf4_sort(&Zijma, CC_MISC, pqsr, 12, 31, "Zijam"); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&Zijma); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } #ifdef TIME_CCENERGY timer_off("Z"); #endif } }} // namespace psi::ccenergy ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccenergy/ZT2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000010300�10757640026�014266� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCENERGY \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccenergy { void ZT2(void) { dpdbuf4 ZIJMA, ZIJAM, Zijma, Zijam, ZIjMa, ZIjAm, Z; dpdbuf4 newtIJAB, newtijab, newtIjAb, T2; dpdfile2 tIA, tia, T1; dpdbuf4 t2, X; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(Ab,Ij)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_MISC, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_contract244(&T1, &Z, &X, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort_axpy(&X, CC_TAMPS, rspq, 0, 5, "New tIjAb", 1); dpd_buf4_sort_axpy(&X, CC_TAMPS, srqp, 0, 5, "New tIjAb", 1); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 10, 2, 10, 0, "ZIJMA"); dpd_buf4_init(&ZIJAM, CC_MISC, 0, 2, 11, 2, 11, 0, "ZIJAM"); dpd_buf4_init(&Zijma, CC_MISC, 0, 2, 10, 2, 10, 0, "Zijma"); dpd_buf4_init(&Zijam, CC_MISC, 0, 2, 11, 2, 11, 0, "Zijam"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 0, 11, 0, 11, 0, "ZIjAm"); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&ZIJAM, &tIA, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tIA, &ZIJMA, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&Zijam, &tia, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tia, &Zijma, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&ZIjAm, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_contract244(&tIA, &ZIjMa, &newtIjAb, 0, 2, 1, -1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&ZIJAM); dpd_buf4_close(&Zijma); dpd_buf4_close(&Zijam); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 20, 2, 20, 0, "ZIJMA"); dpd_buf4_init(&ZIJAM, CC_MISC, 0, 2, 21, 2, 21, 0, "ZIJAM"); dpd_buf4_init(&Zijma, CC_MISC, 0, 12, 30, 12, 30, 0, "Zijma"); dpd_buf4_init(&Zijam, CC_MISC, 0, 12, 31, 12, 31, 0, "Zijam"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 22, 24, 22, 24, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 22, 26, 22, 26, 0, "ZIjAm"); dpd_buf4_init(&newtIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "New tIJAB"); dpd_buf4_init(&newtijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "New tijab"); dpd_buf4_init(&newtIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "New tIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&ZIJAM, &tIA, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tIA, &ZIJMA, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&Zijam, &tia, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tia, &Zijma, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&ZIjAm, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_contract244(&tIA, &ZIjMa, &newtIjAb, 0, 2, 1, -1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&ZIJAM); dpd_buf4_close(&Zijma); dpd_buf4_close(&Zijam); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } } }} // namespace psi::ccenergy ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/���������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111661�012624� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/amp_write.cc���������������������������������������������������������������������0000644�0001015�0000765�00000010304�10757640026�015131� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> namespace psi { namespace cceom { struct onestack { double value; int i; int a; }; struct twostack { double value; int i; int j; int a; int b; }; void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen); void amp_write_T1(dpdfile2 *T1, int length, FILE *outfile) { int m, h, nirreps, Gia; int i, I, a, A, numt1; double value; struct onestack *t1stack; nirreps = T1->params->nirreps; Gia = T1->my_irrep; t1stack = (struct onestack *) malloc(length * sizeof(struct onestack)); for(m=0; m < length; m++) { t1stack[m].value = 0; t1stack[m].i = 0; t1stack[m].a = 0; } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); numt1 = 0; for(h=0; h < nirreps; h++) { numt1 += T1->params->rowtot[h] * T1->params->coltot[h^Gia]; for(i=0; i < T1->params->rowtot[h]; i++) { I = T1->params->roworb[h][i]; for(a=0; a < T1->params->coltot[h^Gia]; a++) { A = T1->params->colorb[h^Gia][a]; value = T1->matrix[h][i][a]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t1stack[m].value)) > 1e-12) { onestack_insert(t1stack, value, I, A, m, length); break; } } } } } dpd_file2_mat_close(T1); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-6) fprintf(outfile, "\t %3d %3d %20.10f\n", t1stack[m].i, t1stack[m].a, t1stack[m].value); free(t1stack); } void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } void amp_write_T2(dpdbuf4 *T2, int length, FILE *outfile) { int m, h, nirreps, Gijab, numt2; int ij, ab, i, j, a, b; double value; struct twostack *t2stack; nirreps = T2->params->nirreps; Gijab = T2->file.my_irrep; t2stack = (struct twostack *) malloc(length * sizeof(struct twostack)); for(m=0; m < length; m++) { t2stack[m].value = 0; t2stack[m].i = 0; t2stack[m].j = 0; t2stack[m].a = 0; t2stack[m].b = 0; } numt2 = 0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2, h); dpd_buf4_mat_irrep_rd(T2, h); numt2 += T2->params->rowtot[h] * T2->params->coltot[h^Gijab]; for(ij=0; ij < T2->params->rowtot[h]; ij++) { i = T2->params->roworb[h][ij][0]; j = T2->params->roworb[h][ij][1]; for(ab=0; ab < T2->params->coltot[h^Gijab]; ab++) { a = T2->params->colorb[h^Gijab][ab][0]; b = T2->params->colorb[h^Gijab][ab][1]; value = T2->matrix[h][ij][ab]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t2stack[m].value)) > 1e-12) { twostack_insert(t2stack, value, i, j, a, b, m, length); break; } } } } dpd_buf4_mat_irrep_close(T2, h); } for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-6) fprintf(outfile, "\t%3d %3d %3d %3d %20.10f\n", t2stack[m].i, t2stack[m].j, t2stack[m].a, t2stack[m].b, t2stack[m].value); free(t2stack); } void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen) { int l; struct twostack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].j = j; stack[level].a = a; stack[level].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].j = j; stack[l+1].a = a; stack[l+1].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; } } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/c_clean.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000010773�10757640026�014540� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /*** This function removes incorrectly non-zero elements from *** *** a vector. The non-zero elements are due to the *** *** specification of open-shell orbitals as both occupied *** *** and virtual orbitals. ***/ void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f, h, M, N, E, F; int msym, nsym, esym, fsym; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMNEF, h); dpd_buf4_mat_irrep_rd(CMNEF, h); for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) { for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) { e = CMNEF->params->colorb[h^C_irr][ef][0]; f = CMNEF->params->colorb[h^C_irr][ef][1]; esym = CMNEF->params->rsym[e]; fsym = CMNEF->params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) CMNEF->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMNEF, h); dpd_buf4_mat_irrep_close(CMNEF, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(Cmnef, h); dpd_buf4_mat_irrep_rd(Cmnef, h); for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) { m = Cmnef->params->roworb[h][mn][0]; n = Cmnef->params->roworb[h][mn][1]; msym = Cmnef->params->psym[m]; nsym = Cmnef->params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) { if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) Cmnef->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(Cmnef, h); dpd_buf4_mat_irrep_close(Cmnef, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMnEf, h); dpd_buf4_mat_irrep_rd(CMnEf, h); for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) { n = CMnEf->params->roworb[h][mn][1]; nsym = CMnEf->params->qsym[n]; N = n - occ_off[nsym]; for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) { e = CMnEf->params->colorb[h^C_irr][ef][0]; esym = CMnEf->params->rsym[e]; E = e - vir_off[esym]; if ((N >= (occpi[nsym] - openpi[nsym])) || (E >= (virtpi[esym] - openpi[esym])) ) CMnEf->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMnEf, h); dpd_buf4_mat_irrep_close(CMnEf, h); } return; } void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f; int h, M, N, E, F; int msym, nsym, esym, fsym, C_irr; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); return; } }} // namespace psi::cceom �����psi3/src/bin/cceom/cache.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000037435�10757640026�014223� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> namespace psi { namespace cceom { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; // cachefiles[EOM_TMP] = 1; // cachefiles[EOM_CMnEf] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(1); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; cachefiles[EOM_CMnEf] = 1; cachefiles[EOM_TMP] = 1; cachefiles[EOM_SIjAb] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(1); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/cc2_hbar_extra.cc����������������������������������������������������������������0000644�0001015�0000765�00000002545�10757640026�016020� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void cc2_hbar_extra(void) { dpdbuf4 W1, W2, W; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Me,Jb)"); dpd_buf4_copy(&W1, CC2_HET1, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W1); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj (ME,jb)"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_close(&W1); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_sort(&W1, CC2_HET1, rspq, 10, 10, "CC2 2 W(jb,ME) + W(Jb,Me)"); dpd_buf4_close(&W1); /* dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_buf4_scmcopy(&W, CC_HBAR, "WAmEf 2(Am,Ef) - (Am,fE)", 2); dpd_buf4_sort_axpy(&W, CC_HBAR, pqsr, 11, 5, "WAmEf 2(Am,Ef) - (Am,fE)", -1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); */ } } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/cc2_sigma.cc���������������������������������������������������������������������0000644�0001015�0000765�00000022704�10757640026�015000� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void cc2_sigmaSS(int i, int C_irr); void cc2_sigma(int i, int C_irr) { dpdfile2 SIA; dpdbuf4 SIjAb; dpdfile2 CME; dpdbuf4 CMnEf; dpdfile2 FAE; dpdfile2 FMI; dpdfile2 FME; dpdbuf4 W; dpdbuf4 C; dpdfile2 S; dpdbuf4 WMbEj; dpdbuf4 WAmEf; dpdbuf4 WMnIe; dpdbuf4 WAbEi; dpdbuf4 WMbIj; dpdbuf4 Z; dpdbuf4 Z2; char lbl[32]; char CME_lbl[32]; char CMnEf_lbl[32]; char SIjAb_lbl[32]; int Gej, Gab, Gij, Gj, Gi, Ge, nrows, length, E, e, I; int Gam, Gef, Gim, Ga, Gm, ncols, A, a, am; if (params.eom_ref == 0) { /* RHF */ cc2_sigmaSS(i,C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_dot24(&FME,&CMnEf,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_file2_close(&FME); dpd_file2_close(&SIA); /* sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); dpd_contract442(&CMnEf, &WAmEf, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&WAmEf); dpd_buf4_close(&CMnEf); dpd_file2_close(&SIA); */ dpd_buf4_init(&C, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&S, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_mat_init(&S); dpd_file2_mat_rd(&S); for(Gam=0; Gam < moinfo.nirreps; Gam++) { Gef = Gam ^ H_IRR; Gim = Gef ^ C_irr; dpd_buf4_mat_irrep_init(&C, Gim); dpd_buf4_mat_irrep_rd(&C, Gim); dpd_buf4_mat_irrep_shift13(&C, Gim); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Ga = Gi ^ C_irr; Gm = Ga ^ Gam; W.matrix[Gam] = dpd_block_matrix(moinfo.occpi[Gm], W.params->coltot[Gef]); nrows = moinfo.occpi[Gi]; ncols = moinfo.occpi[Gm] * W.params->coltot[Gef]; for(A=0; A < moinfo.virtpi[Ga]; A++) { a = moinfo.vir_off[Ga] + A; am = W.row_offset[Gam][a]; dpd_buf4_mat_irrep_rd_block(&W, Gam, am, moinfo.occpi[Gm]); if(nrows && ncols && moinfo.virtpi[Ga]) C_DGEMV('n',nrows,ncols,1,C.shift.matrix[Gim][Gi][0],ncols,W.matrix[Gam][0], 1, 1, &(S.matrix[Gi][0][A]), moinfo.virtpi[Ga]); } dpd_free_block(W.matrix[Gam], moinfo.occpi[Gm], W.params->coltot[Gef]); } dpd_buf4_mat_irrep_close(&C, Gim); } dpd_file2_mat_wrt(&S); dpd_file2_mat_close(&S); dpd_file2_close(&S); dpd_buf4_close(&C); dpd_buf4_close(&W); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_contract442(&WMnIe, &CMnEf, &SIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WMnIe); dpd_file2_close(&SIA); sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmaijDS Z(Ij,Ab)"); dpd_buf4_init(&WMbIj, CC2_HET1, H_IRR, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMbIj, &Z, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WMbIj); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WmaijDS Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmaijDS Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WabejDS Z(Ij,Ab)"); dpd_buf4_scm(&Z,0); dpd_buf4_init(&W, CC2_HET1, H_IRR, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); /*dpd_contract244(&CME, &WAbEi, &Z, 1, 0, 0, 1.0, 0.0);*/ dpd_file2_mat_init(&CME); dpd_file2_mat_rd(&CME); for(Gej=0; Gej < moinfo.nirreps; Gej++) { Gab = Gej ^ H_IRR; Gij = Gab ^ C_irr; dpd_buf4_mat_irrep_init(&Z, Gij); dpd_buf4_mat_irrep_shift13(&Z, Gij); for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gj = Ge ^ Gej; Gi = Gj ^ Gij; nrows = moinfo.occpi[Gj]; length = nrows * W.params->coltot[Gab]; dpd_buf4_mat_irrep_init_block(&W, Gej, nrows); for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&W, Gej, W.row_offset[Gej][e], nrows); for(I=0; I < moinfo.occpi[Gi]; I++) { if(length) C_DAXPY(length, CME.matrix[Gi][I][E], W.matrix[Gej][0], 1, Z.shift.matrix[Gij][Gi][I], 1); } } dpd_buf4_mat_irrep_close_block(&W, Gej, nrows); } dpd_buf4_mat_irrep_wrt(&Z, Gij); dpd_buf4_mat_irrep_close(&Z, Gij); } dpd_file2_mat_close(&CME); dpd_file2_close(&CME); dpd_buf4_close(&W); /* dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WabejDS Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WabejDS Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); */ dpd_buf4_sort_axpy(&Z, EOM_SIjAb, qpsr, 0, 5, SIjAb_lbl, 1); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_close(&SIjAb); dpd_buf4_close(&Z); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fbe Z(Ij,Ab)"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "fAB"); dpd_contract424(&CMnEf, &FAE, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "FDD_Fbe Z(jI,bA)"); dpd_buf4_init(&Z2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fbe Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_axpy(&Z2, &SIjAb, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_close(&SIjAb); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fmj Z(Ij,Ab)"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "fIJ"); dpd_contract244(&FMI, &CMnEf, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "FDD_Fmj Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fmj Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ printf("ROHF EOM_CC2 is not currently implemented\n"); exit(PSI_RETURN_FAILURE); } else { /* UHF */ printf("UHF EOM_CC2 is not currently implemented\n"); exit(PSI_RETURN_FAILURE); } } void cc2_sigmaSS(int i, int C_irr) { dpdfile2 SIA; dpdfile2 CME; dpdfile2 FAE; dpdfile2 FMI; dpdbuf4 WMbEj; dpdfile2 Xme; dpdbuf4 T2; dpdbuf4 D; char lbl[32]; if (params.eom_ref == 0) { /* RHF */ /* sigmaSS */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract222(&CME, &FAE, &SIA, 0, 0, 1.0, 0.0); dpd_file2_close(&FAE); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract222(&FMI, &CME, &SIA, 1, 1, -1.0, 1.0); dpd_file2_close(&FMI); dpd_buf4_init(&WMbEj, CC2_HET1, H_IRR, 10, 10, 10, 10, 0, "CC2 2 W(jb,ME) + W(Jb,Me)"); dpd_contract422(&WMbEj, &CME, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMbEj); dpd_file2_init(&Xme, CC_OEI, C_irr, 0, 1, "XME"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract422(&D, &CME, &Xme, 0, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&T2, &Xme, &SIA, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&Xme); dpd_file2_close(&CME); dpd_file2_close(&SIA); } else if (params.eom_ref == 1) { /* ROHF */ printf("ROHF CC2-LR is not currently implemented\n"); exit(PSI_RETURN_FAILURE); } else { /* UHF */ printf("UHF CC2-LR is not currently implemented\n"); exit(PSI_RETURN_FAILURE); } } }} // namespace psi::cceom ������������������������������������������������������������psi3/src/bin/cceom/cc3_HC1.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000206741�10757640026�014261� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void HC1_F(int i, int C_irr); void HC1_Wamef(int i, int C_irr); void HC1_Wmnie(int i, int C_irr); void HC1_Wmnij(int i, int C_irr); void HC1_Wmbij(int i, int C_irr); void HC1_Wmbej(int i, int C_irr); void HC1_Wabei(int i, int C_irr); void purge_HC1(int C_irr); void purge_Wmnie(int C_irr); void purge_Wmbij(int C_irr); void purge_Wabei(int C_irr); void cc3_HC1 (int i, int C_irr) { HC1_F(i, C_irr); HC1_Wamef(i, C_irr); HC1_Wmnie(i, C_irr); /* HC1_Wmnij(i, C_irr); */ /* HC1_Wmbij(i, C_irr); */ /* HC1_Wmbej(i, C_irr); */ HC1_Wabei(i, C_irr); if (params.ref == 1) purge_HC1(C_irr); return; } /* constructs matrix elements of [H, C1] for CC3 EOM code */ void HC1_F(int i, int C_irr) { dpdfile2 FME, Fme, Cme, CME; dpdbuf4 D_anti, D; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); double tval; if(params.ref == 0) { /* HC1_F() Fme = +C_n^f <mn||ef> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot13(&CME, &D, &FME, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&CME); } else if(params.ref == 1) { /** ROHF **/ /* HC1_F() Fme = +C_n^f <mn||ef> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_file2_init(&Fme, CC3_HC1, C_irr, 0, 1, "HC1 Fme"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_dot13(&CME, &D_anti, &FME, 0, 0, 1.0, 0.0); dpd_dot13(&Cme, &D, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&Cme, &D_anti, &Fme, 0, 0, 1.0, 0.0); dpd_dot13(&CME, &D, &Fme, 0, 0, 1.0, 1.0); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_file2_close(&CME); dpd_file2_close(&Cme); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /* HC1_F() Fme = +C_n^f <mn||ef> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_file2_init(&Fme, CC3_HC1, C_irr, 2, 3, "HC1 Fme"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract422(&D, &CME, &FME, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract422(&D, &Cme, &FME, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract422(&D, &Cme, &Fme, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract422(&D, &CME, &Fme, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_file2_close(&CME); dpd_file2_close(&Cme); } return; } void HC1_Wamef(int i, int C_irr) { dpdbuf4 Wamef, WAMEF, WAmEf, WaMeF, W, D_a, D; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ /* HC1_Wamef(): Wamef = -Cna <nm||ef> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&W, CC3_HC1, C_irr, 11, 5, 11, 5, 0, "HC1 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&CME, &D, &W, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HC1, qprs, 10, 5, "HC1 WAmEf (mA,Ef)"); dpd_buf4_close(&W); dpd_file2_close(&CME); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); /* C(N,A) <NM||EF> --> W(AM,E>F) */ dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 11, 7, 11, 7, 0, "HC1 WAMEF (AM,E>F)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&CME, &D, &WAMEF, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WAMEF); /* C(n,a) <nm||ef> --> W(am,e>f) */ dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 11, 7, 11, 7, 0, "HC1 Wamef (am,e>f)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&Cme, &D, &Wamef, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Wamef); /* C(N,A) <Nm|Ef> --> W(Am,Ef) */ dpd_buf4_init(&WAmEf, CC3_HC1, C_irr, 11, 5, 11, 5, 0, "HC1 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&CME, &D, &WAmEf, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WAmEf); /* C(n,a) <nM|eF> --> W(aM,eF) */ dpd_buf4_init(&WaMeF, CC3_HC1, C_irr, 11, 5, 11, 5, 0, "HC1 WaMeF (aM,eF)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&Cme, &D, &WaMeF, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WaMeF); dpd_file2_close(&CME); dpd_file2_close(&Cme); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); /* T(N,A) <NM||EF> --> W(AM,E>F) */ dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 21, 7, 21, 7, 0, "HC1 WAMEF (AM,E>F)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract244(&CME, &D, &WAMEF, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WAMEF); /* T(n,a) <nm||ef> --> W(am,e>f) */ dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 31, 17, 31, 17, 0, "HC1 Wamef (am,e>f)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&Cme, &D, &Wamef, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Wamef); /* T(N,A) <Nm|Ef> --> W(Am,Ef) */ dpd_buf4_init(&WAmEf, CC3_HC1, C_irr, 26, 28, 26, 28, 0, "HC1 WAmEf (Am,Ef)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&CME, &D, &WAmEf, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WAmEf); /* T(n,a) <nM|eF> --> W(aM,eF) */ dpd_buf4_init(&WaMeF, CC3_HC1, C_irr, 25, 29, 25, 29, 0, "HC1 WaMeF (aM,eF)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract244(&Cme, &D, &WaMeF, 0, 0, 0, -1, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&WaMeF); /* Do final sort */ dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 21, 7, 21, 7, 0, "HC1 WAMEF (AM,E>F)"); dpd_buf4_sort(&WAMEF, CC3_HC1, qprs, 20, 7, "HC1 WAMEF (MA,F>E)"); dpd_buf4_close(&WAMEF); dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 20, 7, 20, 7, 0, "HC1 WAMEF (MA,F>E)"); dpd_buf4_scm(&WAMEF, -1.0); dpd_buf4_close(&WAMEF); dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 31, 17, 31, 17, 0, "HC1 Wamef (am,e>f)"); dpd_buf4_sort(&Wamef, CC3_HC1, qprs, 30, 17, "HC1 Wamef (ma,f>e)"); dpd_buf4_close(&Wamef); dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 30, 17, 30, 17, 0, "HC1 Wamef (ma,f>e)"); dpd_buf4_scm(&Wamef, -1.0); dpd_buf4_close(&Wamef); dpd_buf4_init(&WAmEf, CC3_HC1, C_irr, 26, 28, 26, 28, 0, "HC1 WAmEf (Am,Ef)"); dpd_buf4_sort(&WAmEf, CC3_HC1, qpsr, 27, 29, "HC1 WAmEf (mA,fE)"); dpd_buf4_close(&WAmEf); dpd_buf4_init(&WaMeF, CC3_HC1, C_irr, 25, 29, 25, 29, 0, "HC1 WaMeF (aM,eF)"); dpd_buf4_sort(&WaMeF, CC3_HC1, qpsr, 24, 28, "HC1 WaMeF (Ma,Fe)"); dpd_buf4_close(&WaMeF); dpd_file2_close(&CME); dpd_file2_close(&Cme); } /** UHF **/ return; } void HC1_Wmnie(int i, int C_irr) { dpdbuf4 W, Wmnie, WMNIE, WMnIe, WmNiE, WMniE, WmNIe; dpdbuf4 D, D_a, Z; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ /* HC1_Wmnie(): Wmnie = + Cif <mn||fe> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); /* C(I,F) * D(Mn,Fe) --> W(Mn,Ie) */ dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&CME, &D, &WMnIe, 1, 2, 1, 1, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&D); /* W(Mn,Ie) --> W(Mn,eI) */ /* dpd_buf4_sort(&WMnIe, CC3_HC1, pqsr, 0, 11, "HC1 WMnIe (Mn,eI)"); */ dpd_buf4_close(&WMnIe); } else if(params.ref == 1) { /** ROHF **/ /* HC1_Wmnie(): Wmnie = + Cif <mn||fe> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); /* D(M>N,EF) * C(I,F) --> W(M>N,EI) */ dpd_buf4_init(&WMNIE, CC3_HC1, C_irr, 2, 11, 2, 11, 0, "HC1 WMNIE (M>N,EI)"); dpd_buf4_init(&D_a, CC_DINTS, 0, 2, 5, 2, 5,0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D_a,&CME,&WMNIE, 3, 1, 0, -1, 0); dpd_buf4_close(&D_a); dpd_buf4_close(&WMNIE); /* D(m>n,ef) * C(i,f) --> W(m>n,ei) */ dpd_buf4_init(&Wmnie, CC3_HC1, C_irr, 2, 11, 2, 11, 0, "HC1 Wmnie (m>n,ei)"); dpd_buf4_init(&D_a, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D_a, &Cme, &Wmnie, 3, 1, 0, -1, 0); dpd_buf4_close(&D_a); dpd_buf4_close(&Wmnie); /* D(Mn,Fe) * C(I,F) --> W(Mn,Ie) */ dpd_buf4_init(&WMnIe, CC_TMP0, C_irr, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&CME, &D, &WMnIe, 1, 2, 1, 1, 0); dpd_buf4_close(&D); /* W(Mn,Ie) --> W(Mn,eI) */ dpd_buf4_sort(&WMnIe, CC3_HC1, pqsr, 0, 11, "HC1 WMnIe (Mn,eI)"); dpd_buf4_close(&WMnIe); /* D(mN,fE) * C(i,f) --> W(mN,iE) */ dpd_buf4_init(&WmNiE, CC_TMP1, C_irr, 0, 10, 0, 10, 0, "HC1 WmNiE (mN,iE)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&Cme,&D,&WmNiE, 1, 2, 1, 1, 0); dpd_buf4_close(&D); /* W(mN,iE) --> W(mN,Ei) */ dpd_buf4_sort(&WmNiE, CC3_HC1, pqsr, 0, 11, "HC1 WmNiE (mN,Ei)"); dpd_buf4_close(&WmNiE); dpd_file2_close(&CME); dpd_file2_close(&Cme); purge_Wmnie(C_irr); /* before sorting here */ /* also put "normal" sorted versions in CC_HBAR */ dpd_buf4_init(&WMNIE, CC3_HC1, C_irr, 2, 11, 2, 11, 0, "HC1 WMNIE (M>N,EI)"); dpd_buf4_sort(&WMNIE, CC3_HC1, pqsr, 2, 10, "HC1 WMNIE (M>N,IE)"); dpd_buf4_close(&WMNIE); dpd_buf4_init(&Wmnie, CC3_HC1, C_irr, 2, 11, 2, 11, 0, "HC1 Wmnie (m>n,ei)"); dpd_buf4_sort(&Wmnie, CC3_HC1, pqsr, 2, 10, "HC1 Wmnie (m>n,ie)"); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 0, 11, 0, 11, 0, "HC1 WMnIe (Mn,eI)"); dpd_buf4_sort(&WMnIe, CC3_HC1, pqsr, 0, 10, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WmNiE, CC3_HC1, C_irr, 0, 11, 0, 11, 0, "HC1 WmNiE (mN,Ei)"); dpd_buf4_sort(&WmNiE, CC3_HC1, pqsr, 0, 10, "HC1 WmNiE (mN,iE)"); dpd_buf4_close(&WmNiE); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); /* <M>N||EF> T(I,F) --> W(M>N,EI) */ dpd_buf4_init(&W, CC3_HC1, C_irr, 2, 21, 2, 21, 0, "HC1 WMNIE (M>N,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &CME, &W, 3, 1, 0, -1, 0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* <m>n||ef> T(i,f) --> W(m>n,ei) */ dpd_buf4_init(&W, CC3_HC1, C_irr, 12, 31, 12, 31, 0, "HC1 Wmnie (m>n,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &Cme, &W, 3, 1, 0, -1, 0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* Z(nM,eI) = <nM|eF> T(I,F) */ dpd_buf4_init(&Z, CC_TMP1, C_irr, 23, 25, 23, 25, 0, "Z(nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(nM,eI) --> W(Mn,eI) */ dpd_buf4_sort(&Z, CC3_HC1, qprs, 22, 25, "HC1 WMnIe (Mn,eI)"); dpd_buf4_close(&Z); /* Z(Nm,Ei) = <Nm|Ef> T(i,f) */ dpd_buf4_init(&Z, CC_TMP1, C_irr, 22, 26, 22, 26, 0, "Z(Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(Nm,Ei) --> W(mN,Ei) */ dpd_buf4_sort(&Z, CC3_HC1, qprs, 23, 26, "HC1 WmNiE (mN,Ei)"); dpd_buf4_close(&Z); dpd_file2_close(&CME); dpd_file2_close(&Cme); /* also put "normal" sorted versions in CC3_HC1 */ dpd_buf4_init(&WMNIE, CC3_HC1, C_irr, 2, 21, 2, 21, 0, "HC1 WMNIE (M>N,EI)"); dpd_buf4_sort(&WMNIE, CC3_HC1, pqsr, 2, 20, "HC1 WMNIE (M>N,IE)"); dpd_buf4_close(&WMNIE); dpd_buf4_init(&Wmnie, CC3_HC1, C_irr, 12, 31, 12, 31, 0, "HC1 Wmnie (m>n,ei)"); dpd_buf4_sort(&Wmnie, CC3_HC1, pqsr, 12, 30, "HC1 Wmnie (m>n,ie)"); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 22, 25, 22, 25, 0, "HC1 WMnIe (Mn,eI)"); dpd_buf4_sort(&WMnIe, CC3_HC1, pqsr, 22, 24, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WmNiE, CC3_HC1, C_irr, 23, 26, 23, 26, 0, "HC1 WmNiE (mN,Ei)"); dpd_buf4_sort(&WmNiE, CC3_HC1, pqsr, 23, 27, "HC1 WmNiE (mN,iE)"); dpd_buf4_close(&WmNiE); } return; } void HC1_Wmnij(int i, int C_irr) { dpdbuf4 WMNIJ, Wmnij, WMnIj, W; dpdbuf4 Eijka, Eijka_anti, Eaijk, Eaijk_anti; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ /** HC1_Wmnij(): Wmnij = + P(ij) Cje <mn||ie> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WMnIj, CC3_HC1, C_irr, 0, 0, 0, 0, 0, "HC1 WMnIj (Mn,Ij)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract244(&CME, &Eaijk, &WMnIj, 1, 0, 1, 1, 0.0); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&Eijka, &CME, &WMnIj, 3, 1, 0, 1, 1.0); dpd_buf4_close(&Eijka); dpd_buf4_close(&WMnIj); dpd_file2_close(&CME); } else if(params.ref == 1) { /** ROHF **/ /** HC1_Wmnij(): Wmnij = + P(ij) Cje <mn||ie> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&Eijka_anti, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Eaijk_anti, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMNIJ, CC3_HC1, C_irr, 2, 0, 2, 2, 0, "HC1 WMNIJ (M>N,I>J)"); dpd_contract424(&Eijka_anti, &CME, &WMNIJ, 3, 1, 0, 1, 0.0); dpd_contract244(&CME, &Eaijk_anti, &WMNIJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMNIJ); dpd_buf4_init(&Wmnij, CC3_HC1, C_irr, 2, 0, 2, 2, 0, "HC1 Wmnij (m>n,i>j)"); dpd_contract424(&Eijka_anti, &Cme, &Wmnij, 3, 1, 0, 1, 0.0); dpd_contract244(&Cme, &Eaijk_anti, &Wmnij, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmnij); dpd_buf4_init(&WMnIj, CC3_HC1, C_irr, 0, 0, 0, 0, 0, "HC1 WMnIj (Mn,Ij)"); dpd_contract424(&Eijka, &Cme, &WMnIj, 3, 1, 0, 1, 0.0); dpd_contract244(&CME, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&WMnIj); dpd_buf4_close(&Eijka_anti); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk_anti); dpd_buf4_close(&Eaijk); dpd_file2_close(&CME); dpd_file2_close(&Cme); } else if(params.ref == 2) { /*** UHF ***/ /** HC1_Wmnij(): Wmnij = + P(ij) Cje <mn||ie> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&WMNIJ, CC3_HC1, C_irr, 2, 0, 2, 2, 0, "HC1 WMNIJ (M>N,I>J)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_contract424(&Eijka, &CME, &WMNIJ, 3, 1, 0, 1, 0.0); dpd_contract244(&CME, &Eaijk, &WMNIJ, 1, 0, 1, 1, 1.0); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_close(&WMNIJ); dpd_buf4_init(&Wmnij, CC3_HC1, C_irr, 12, 10, 12, 12, 0, "HC1 Wmnij (m>n,i>j)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_contract424(&Eijka, &Cme, &Wmnij, 3, 1, 0, 1, 0.0); dpd_contract244(&Cme, &Eaijk, &Wmnij, 1, 0, 1, 1, 1.0); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_close(&Wmnij); dpd_buf4_init(&WMnIj, CC3_HC1, C_irr, 22, 22, 22, 22, 0, "HC1 WMnIj (Mn,Ij)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_contract424(&Eijka, &Cme, &WMnIj, 3, 1, 0, 1, 0.0); dpd_contract244(&CME, &Eaijk, &WMnIj, 1, 0, 1, 1, 1.0); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_close(&WMnIj); dpd_file2_close(&CME); dpd_file2_close(&Cme); } } void HC1_Wmbij(int i, int C_irr) { dpdbuf4 W, Wmnij, I, Z, Z1, Z2, C, D; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ /* HC1_Wmbij = +P(ij) Cie <mb||ej> - Cnb <mn||ij> */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); /** - C_n^b <Mn|Ij> -> W(Mb,Ij) **/ dpd_buf4_init(&I, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_contract424(&I, &CME, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&I); /* <Mb||Ie> Cje -> W(Mb,Ij) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &CME, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&C); /* CIE <Mb|Ej> -> W(Mb,Ij) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&CME, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_sort(&W, CC3_HC1, rspq, 0, 10, "HC1 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_file2_close(&CME); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); /** - C_N^B <MN||IJ> --> W(MB,IJ) **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 2, 10, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_contract424(&Wmnij, &CME, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_n^b <mn||ij> **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 2, 10, 2, 0, "HC1 Wmbij (mb,i>j)"); dpd_contract424(&Wmnij, &Cme, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_n^b <Mn|Ij> **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); dpd_contract424(&Wmnij, &Cme, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_N^B <mN|iJ> **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WmBiJ (mB,iJ)"); dpd_contract424(&Wmnij, &CME, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /* term 2: - P(ij) <mb||ei> Cje -> Wmbij */ /** + P(IJ) C_J^E <MB||IE> -> WMBIJ **/ dpd_buf4_init(&Z2, CC_TMP0, C_irr, 10, 0, 10, 0, 0, "Z1(MB,IJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &CME, &Z2, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 10, 0, "Z2(MB,JI)"); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 10, 0, 10, 0, 0, "Z2(MB,JI)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** - P(ij) C_j^e ( <mb||ie> ) -> WMBIJ **/ dpd_buf4_init(&Z2, CC_TMP0, C_irr, 10, 0, 10, 0, 0, "Z1(mb,ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &Cme, &Z2, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 10, 0, "Z2(mb,ji)"); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 10, 0, 10, 0, 0, "Z2(mb,ji)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 2, 0, "HC1 Wmbij (mb,i>j)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /* <Mb||Ie> Cje -> W(Mb,Ij) */ dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &Cme, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&C); /* CIE <Mb|Ej> -> W(Mb,Ij) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&CME, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /** C_J^E <mB||iE> = Cje <mB|iE> **/ dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &CME, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&C); /** -C_i^e <mB||Je> = +Cie <mB|eJ> = +Cie <mJ|eB> **/ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&Cme, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /* do purge before sort */ purge_Wmbij(C_irr); /* do final sort to get (Ij,Mb) */ dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 2, 10, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 2, 10, "HC1 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 2, 10, 2, 0, "HC1 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 2, 10, "HC1 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 0, 10, "HC1 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 10, 0, 10, 0, 0, "HC1 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 0, 10, "HC1 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); dpd_file2_close(&CME); dpd_file2_close(&Cme); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); /** - C_N^B W_MNIJ --> W(MB,IJ) **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 0, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 20, 2, 20, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_contract424(&Wmnij, &CME, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_n^b W_mnij **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 10, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 30, 12, 30, 12, 0, "HC1 Wmbij (mb,i>j)"); dpd_contract424(&Wmnij, &Cme, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_n^b W_MnIj **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 24, 22, 24, 22, 0, "HC1 WMbIj (Mb,Ij)"); dpd_contract424(&Wmnij, &Cme, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /** - C_N^B W_mNiJ **/ dpd_buf4_init(&Wmnij, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_sort(&Wmnij, CC_TMP0, qpsr, 23, 23, "A <iJ|kL>"); dpd_buf4_close(&Wmnij); dpd_buf4_init(&Wmnij, CC_TMP0, 0, 23, 23, 23, 23, 0, "A <iJ|kL>"); dpd_buf4_init(&W, CC3_HC1, C_irr, 27, 23, 27, 23, 0, "HC1 WmBiJ (mB,iJ)"); dpd_contract424(&Wmnij, &CME, &W, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); /* term 2: - P(ij) <mb||ei> Cje -> Wmbij */ /** + P(IJ) C_J^E <MB||IE> -> WMBIJ **/ dpd_buf4_init(&Z2, CC_TMP0, C_irr, 20, 0, 20, 0, 0, "Z1(MB,IJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &CME, &Z2, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 20, 0, "Z2(MB,JI)"); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 20, 0, 20, 0, 0, "Z2(MB,JI)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HC1, C_irr, 20, 0, 20, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** - P(ij) C_j^e ( <mb||ie> ) -> WMBIJ **/ dpd_buf4_init(&Z2, CC_TMP0, C_irr, 30, 10, 30, 10, 0, "Z1(mb,ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &Cme, &Z2, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 30, 10, "Z2(mb,ji)"); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 30, 10, 30, 10, 0, "Z2(mb,ji)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC3_HC1, C_irr, 30, 10, 30, 12, 0, "HC1 Wmbij (mb,i>j)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /* <Mb||Ie> Cje -> W(Mb,Ij) */ dpd_buf4_init(&W, CC3_HC1, C_irr, 24, 22, 24, 22, 0, "HC1 WMbIj (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &Cme, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&C); /* CIE <Mb|Ej> -> W(Mb,Ij) */ dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&CME, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /** C_J^E <mB||iE> = C^J_E <mB|iE> **/ dpd_buf4_init(&W, CC3_HC1, C_irr, 27, 23, 27, 23, 0, "HC1 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &CME, &W, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&C); /** -C_i^e <mB||Je> = +Cie <mB|eJ> = +Cie <mJ|eB> **/ dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&Cme, &D, &W, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&W); /** do final sort to (Ij,Mb) **/ dpd_buf4_init(&W, CC3_HC1, C_irr, 20, 2, 20, 2, 0, "HC1 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 2, 20, "HC1 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 30, 12, 30, 12, 0, "HC1 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 12, 30, "HC1 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 24, 22, 24, 22, 0, "HC1 WMbIj (Mb,Ij)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 22, 24, "HC1 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 27, 23, 27, 23, 0, "HC1 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC3_HC1, rspq, 23, 27, "HC1 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); dpd_file2_close(&CME); dpd_file2_close(&Cme); } } void HC1_Wmbej(int i, int C_irr) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ; dpdbuf4 D, C, F, E, X, Y, W, Z; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ /* Cjf <mb||ef> -> Wmbej */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &CME, &WMbEj, 3, 1, 0, 1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&WMbEj); dpd_buf4_init(&Z, CC_TMP0, C_irr, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, -1, 0); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "WMbeJ"); /* (Mb,Je) */ dpd_buf4_close(&Z); /* - Cnb <mn||ej> -> Wmbej */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &CME, &WMbEj, 3, 0, 1, -1, 1.0); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &CME, &WMbeJ, 1, 0, 1, 1, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&CME); /* Sort to (ME,JB) */ dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC3_HC1, prsq, 10, 10, "HC1 WMbEj (ME,jb)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC3_HC1, psrq, 10, 10, "HC1 WMbeJ (Me,Jb)"); dpd_buf4_close(&WMbeJ); } else if(params.ref == 1) { /** ROHF **/ /* + Cjf <mb||ef> -> Wmbej*/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&F, &CME, &WMBEJ, 3, 1, 0, 1, 0); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&F, &Cme, &Wmbej, 3, 1, 0, 1, 0); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &Cme, &WMbEj, 3, 1, 0, 1, 0); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&F, &CME, &WmBeJ, 3, 1, 0, 1, 0); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract244(&CME, &F, &WMbeJ, 1, 2, 1, -1, 0); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract244(&Cme, &F, &WmBEj, 1, 2, 1, -1, 0); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); /* - Cnb <mn||ej> -> Wmbej */ dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&E, &CME, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&E, &Cme, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &Cme, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&E, &CME, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &Cme, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&E, &CME, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&WMBEJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMBEJ"); dpd_buf4_sort(&WMBEJ, CC3_HC1, prsq, 10, 10, "HC1 WMBEJ (ME,JB)"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "Wmbej"); dpd_buf4_sort(&Wmbej, CC3_HC1, prsq, 10, 10, "HC1 Wmbej (me,jb)"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC3_HC1, prsq, 10, 10, "HC1 WMbEj (ME,jb)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "WmBeJ"); dpd_buf4_sort(&WmBeJ, CC3_HC1, prsq, 10, 10, "HC1 WmBeJ (me,JB)"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC3_HC1, psrq, 10, 10, "HC1 WMbeJ (Me,Jb)"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, C_irr, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_sort(&WmBEj, CC3_HC1, psrq, 10, 10, "HC1 WmBEj (mE,jB)"); dpd_buf4_close(&WmBEj); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ /* F -> Wmbej */ /* + Cjf <mb||ef> -> Wmbej*/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&W, CC_TMP0, C_irr, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &CME, &W, 3, 1, 0, 1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &Cme, &W, 3, 1, 0, 1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &Cme, &W, 3, 1, 0, 1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &CME, &W, 3, 1, 0, 1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&CME, &F, &W, 1, 2, 1, -1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&Cme, &F, &W, 1, 2, 1, -1, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&W); /* - Cnb <mn||ej> -> Wmbej */ dpd_buf4_init(&W, CC_TMP0, C_irr, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &CME, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &Cme, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &Cme, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &CME, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &Cme, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract424(&E, &CME, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&W, CC_TMP0, C_irr, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_sort(&W, CC3_HC1, prsq, 20, 20, "HC1 WMBEJ (ME,JB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_sort(&W, CC3_HC1, prsq, 30, 30, "HC1 Wmbej (me,jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_sort(&W, CC3_HC1, prsq, 20, 30, "HC1 WMbEj (ME,jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_sort(&W, CC3_HC1, prsq, 30, 20, "HC1 WmBeJ (me,JB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_sort(&W, CC3_HC1, psrq, 24, 24, "HC1 WMbeJ (Me,Jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_sort(&W, CC3_HC1, psrq, 27, 27, "HC1 WmBEj (mE,jB)"); dpd_buf4_close(&W); } return; } void HC1_Wabei(int i, int C_irr) { dpdbuf4 Z, Z1, Z2, Z3; dpdbuf4 B, C, D, E, F, W; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "CC3 Z(Ab,Ei)"); dpd_buf4_init(&Z2, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "CC3 Z(Ei,Ab)"); /* Z1(Ab,Ei) <-- <Ab|Ef> * C(i,f) */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &CME, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&B); /* Z1(Ab,Ei) <-- - C(M,A) * <Mb|Ei> */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&CME, &D, &Z1, 0, 0, 0, -1, 1); dpd_buf4_close(&D); /* Z2(Ei,Ab) <-- - <mA,iE> C(m,b) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_TMP0, qpsr, 11, 11, "CC3 Z(Ei,Am)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC3 Z(Ei,Am)"); dpd_contract424(&Z, &CME, &Z2, 3, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); /* W(Ab,Ei) = Z1(Ab,Ei) + Z2(Ei,Ab) */ dpd_buf4_sort_axpy(&Z1, CC_TMP0, rspq, 11, 5, "CC3 Z(Ei,Ab)", 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "CC3 Z(Ei,Ab)"); dpd_buf4_sort(&Z2, CC3_HC1, qpsr, 10, 5, "CC3 WAbEi (Ie,Ab)"); dpd_file2_close(&CME); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 7, 11, 7, 11, 0, "WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_contract424(&B, &CME, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 7, 11, 7, 11, 0, "Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_contract424(&B, &Cme, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &Cme, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WaBeI (aB,eI)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &CME, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); /** -CMA <MI||EB> + CMB <MI||EA> **/ dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "Z (AB,EI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&CME, &C, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 5, 11, "Z (BA,EI)"); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 7, 11, 0, "WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "Z (BA,EI)"); dpd_buf4_axpy(&Z1, &W, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** -Cma <mi||eb> + Cmb <mi||ea> **/ dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "Z (ab,ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&Cme, &C, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 5, 11, "Z (ba,ei)"); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 7, 11, 0, "Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "Z (ba,ei)"); dpd_buf4_axpy(&Z1, &W, -1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** -CMA <Mi||Eb> - Cmb <mA||iE> **/ dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WAbEi (Ab,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&CME, &D, &Z1, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "WAbEi (bA,Ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia|jb> (ia,bj)"); dpd_contract244(&Cme, &C, &Z1, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 5, 11, "WAbEi (Ab,Ei)", 1.0); dpd_buf4_close(&Z1); /** **/ dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WaBeI (aB,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&Cme, &D, &Z1, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 11, 5, 11, 0, "WaBeI (Ba,eI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia|jb> (ia,bj)"); dpd_contract244(&CME, &C, &Z1, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 5, 11, "WaBeI (aB,eI)", 1.0); dpd_buf4_close(&Z1); dpd_file2_close(&CME); dpd_file2_close(&Cme); /* final sort to (EI,AB) */ dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 7, 11, 0, "WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 11, 7, "WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 7, 11, 0, "Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 11, 7, "Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 11, 5, "WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 11, 5, "WaBeI (eI,aB)"); dpd_buf4_close(&W); purge_Wabei(C_irr); /* final sort to Wabei (IE,AB) */ dpd_buf4_init(&W, CC_TMP0, C_irr, 11, 7, 11, 7, 0, "WABEI (EI,A>B)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 10, 7, "HC1 WABEI (IE,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 11, 7, 11, 7, 0, "Wabei (ei,a>b)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 10, 7, "HC1 Wabei (ie,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 10, 5, "HC1 WAbEi (iE,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "WaBeI (eI,aB)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 10, 5, "HC1 WaBeI (Ie,aB)"); dpd_buf4_close(&W); } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); /* term 1, Cif <ab||ef> */ dpd_buf4_init(&Z1, CC_TMP0, C_irr, 7, 21, 7, 21, 0, "WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_contract424(&B, &CME, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 17, 31, 17, 31, 0, "Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_contract424(&B, &Cme, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract424(&B, &Cme, &Z1, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, C_irr, 24, 28, 24, 28, 0, "Z(Ie,Ba)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract244(&CME, &B, &Z, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&B); /** Z(Ie,Ba) --> W'(aB,eI) **/ /* srqp seems to have a bug dpd_buf4_sort(&Z, CC_TMP0, srqp, 29, 25, "WaBeI (aB,eI)"); */ dpd_buf4_sort(&Z, CC_TMP0, rspq, 28, 24, "WaBeI (Ba,Ie) 1"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, C_irr, 28, 24, 28, 24, 0, "WaBeI (Ba,Ie)"); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 29, 25, "WaBeI (aB,eI)"); dpd_buf4_close(&Z); /** UHF term 2 **/ /* -CMA <MI||EB> + CMB <MI||EA> **/ dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 21, 5, 21, 0, "Z (AB,EI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_contract244(&CME, &C, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 5, 21, "Z (BA,EI)"); dpd_buf4_init(&W, CC_TMP0, C_irr, 5, 21, 7, 21, 0, "WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 5, 21, 5, 21, 0, "Z (BA,EI)"); dpd_buf4_axpy(&Z1, &W, -1.0); dpd_buf4_close(&Z1); /** -Cma <mi||eb> + Cmb <mi||ea> **/ dpd_buf4_init(&Z1, CC_TMP1, C_irr, 15, 31, 15, 31, 0, "Z (ab,ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_contract244(&Cme, &C, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 15, 31, "Z (ba,ei)"); dpd_buf4_init(&W, CC_TMP0, C_irr, 15, 31, 17, 31, 0, "Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 15, 31, 15, 31, 0, "Z (ba,ei)"); dpd_buf4_axpy(&Z1, &W, -1.0); dpd_buf4_close(&Z1); /** -CMA <Mi||Eb> - Cmb <mA|iE> **/ dpd_buf4_init(&Z1, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "WAbEi (Ab,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&CME, &D, &Z1, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 29, 26, 29, 26, 0, "WAbEi (bA,Ei)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 26, 27, 26, 0, "C <Ai|Bj> (iA,Bj)"); dpd_contract244(&Cme, &C, &Z1, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 28, 26, "WAbEi (Ab,Ei)", 1.0); dpd_buf4_close(&Z1); /** **/ dpd_buf4_init(&Z1, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "WaBeI (aB,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&Cme, &D, &Z1, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, C_irr, 28, 25, 28, 25, 0, "WaBeI (Ba,eI)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 25, 24, 25, 0, "C <Ia|Jb> (Ia,bJ)"); dpd_contract244(&CME, &C, &Z1, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&C); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 29, 25, "WaBeI (aB,eI)", 1.0); dpd_buf4_close(&Z1); /* final sort and storage */ dpd_buf4_init(&W, CC_TMP0, C_irr, 7, 21, 7, 21, 0, "WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 21, 7, "WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 21, 7, 21, 7, 0, "WABEI (EI,A>B)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 20, 7, "HC1 WABEI (IE,B>A)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 20, 7, 20, 7, 0, "HC1 WABEI (IE,B>A)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /* final sort and storage */ dpd_buf4_init(&W, CC_TMP0, C_irr, 17, 31, 17, 31, 0, "Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 31, 17, "Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 31, 17, 31, 17, 0, "Wabei (ei,a>b)"); dpd_buf4_sort(&W, CC3_HC1, qprs, 30, 17, "HC1 Wabei (ie,b>a)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1, C_irr, 30, 17, 30, 17, 0, "HC1 Wabei (ie,b>a)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); /* final sort and storage */ dpd_buf4_init(&W, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 26, 28, "WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 26, 28, 26, 28, 0, "WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HC1, qpsr, 27, 29, "HC1 WAbEi (iE,bA)"); dpd_buf4_close(&W); /* final sort and storage */ dpd_buf4_init(&W, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC_TMP0, rspq, 25, 29, "WaBeI (eI,aB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 25, 29, 25, 29, 0, "WaBeI (eI,aB)"); dpd_buf4_sort(&W, CC3_HC1, qpsr, 24, 28, "HC1 WaBeI (Ie,Ba)"); dpd_buf4_close(&W); dpd_file2_close(&CME); dpd_file2_close(&Cme); } } void purge_HC1(int C_irr) { dpdfile2 FAE, Fmi, FME, Fme; dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge FME matrix elements */ dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_file2_mat_init(&FME); dpd_file2_mat_rd(&FME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h]-openpi[h]); e<virtpi[h]; e++) FME.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&FME); dpd_file2_mat_close(&FME); dpd_file2_close(&FME); /* Purge Fme matrix elements */ dpd_file2_init(&Fme, CC3_HC1, C_irr, 0, 1, "HC1 Fme"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); for(h=0; h < nirreps; h++) { for(e=0; e<virtpi[h]; e++) for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) Fme.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&Fme); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); /* Purge Wmnij matrix elements */ dpd_file4_init(&W, CC3_HC1, C_irr, 2, 2,"HC1 Wmnij (m>n,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) || (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 0, 0,"HC1 WMnIj (Mn,Ij)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if ((J >= (occpi[jsym] - openpi[jsym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wmbej matrix elements */ dpd_file4_init(&W, CC3_HC1, C_irr, 10, 10,"HC1 WMBEJ (ME,JB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 10,"HC1 Wmbej (me,jb)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 10,"HC1 WMbEj (ME,jb)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 10,"HC1 WmBeJ (me,JB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 10,"HC1 WmBEj (mE,jB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; e = W.params->roworb[h][me][1]; msym = W.params->psym[m]; esym = W.params->qsym[e]; M = m - occ_off[msym]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; b = W.params->colorb[h][jb][1]; jsym = W.params->rsym[j]; bsym = W.params->ssym[b]; J = j - occ_off[jsym]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wamef matrix elements */ dpd_file4_init(&W, CC3_HC1, C_irr, 11, 7,"HC1 WAMEF (AM,E>F)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; asym = W.params->psym[a]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; f = W.params->colorb[h][ef][1]; esym = W.params->rsym[e]; fsym = W.params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((A >= (virtpi[asym] - openpi[asym])) || (E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 11, 7,"HC1 Wamef (am,e>f)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { m = W.params->roworb[h][ma][1]; msym = W.params->qsym[m]; M = m - occ_off[msym]; for(ef=0; ef< W.params->coltot[h]; ef++) { if (M >= (occpi[msym] - openpi[msym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 11, 5,"HC1 WAmEf (Am,Ef)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; m = W.params->roworb[h][ma][1]; asym = W.params->psym[a]; msym = W.params->qsym[m]; M = m - occ_off[msym]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if ((A >= (virtpi[asym] - openpi[asym])) || (M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 11, 5,"HC1 WaMeF (aM,eF)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { for(ef=0; ef< W.params->coltot[h]; ef++) { f = W.params->colorb[h][ef][1]; fsym = W.params->ssym[f]; F = f - vir_off[fsym]; if (F >= (virtpi[fsym] - openpi[fsym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } /* Purge Wmnie matrix elements */ void purge_Wmnie(int C_irr) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC3_HC1, C_irr, 0, 11,"HC1 WMnIe (Mn,eI)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { if (N >= (occpi[nsym] - openpi[nsym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_init(&W, CC3_HC1, C_irr, 2, 11, "HC1 WMNIE (M>N,EI)"); for(h=0; h < W.params->nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if (E >= (virtpi[esym] - openpi[esym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 2, 11,"HC1 Wmnie (m>n,ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { i = W.params->colorb[h][ei][1]; isym = W.params->ssym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 0, 11,"HC1 WmNiE (mN,Ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; i = W.params->colorb[h][ei][1]; esym = W.params->rsym[e]; isym = W.params->ssym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } /* Purge WMBIJ matrix elements */ void purge_Wmbij(int C_irr) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC3_HC1, C_irr, 10, 2,"HC1 WMBIJ (MB,I>J)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { b = W.params->roworb[h][mb][1]; bsym = W.params->qsym[b]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 2,"HC1 Wmbij (mb,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 0,"HC1 WMbIj (Mb,Ij)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { for(ij=0; ij<W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if (J >= (occpi[jsym] - openpi[jsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HC1, C_irr, 10, 0,"HC1 WmBiJ (mB,iJ)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; b = W.params->roworb[h][mb][1]; msym = W.params->psym[m]; bsym = W.params->qsym[b]; M = m - occ_off[msym]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; isym = W.params->rsym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } /* Purge Wabei matrix elements */ void purge_Wabei(int C_irr) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC_TMP0, C_irr, 11, 7,"WABEI (EI,A>B)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; esym = W.params->psym[e]; E = e - vir_off[esym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP0, C_irr, 11, 7,"Wabei (ei,a>b)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { i = W.params->roworb[h][ei][1]; isym = W.params->qsym[i]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { if (I >= (occpi[isym] - openpi[isym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP0, C_irr, 11, 5,"WAbEi (Ei,Ab)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; i = W.params->roworb[h][ei][1]; esym = W.params->psym[e]; isym = W.params->qsym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; if ((E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) || (A >= (virtpi[asym] - openpi[asym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP0, C_irr, 11, 5,"WaBeI (eI,aB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { for(ab=0; ab<W.params->coltot[h]; ab++) { b = W.params->colorb[h][ab][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::cceom �������������������������������psi3/src/bin/cceom/cc3_HC1ET1.cc��������������������������������������������������������������������0000644�0001015�0000765�00000060234�10754663017�014570� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* compute [ [H,eT1] , C1 ] * * [H,eT^1] matrix elements are in CC3_HET1 * * C1 has symmetry C_irr and is read from EOM_CME with name "CME i" * * illustrative code that computes [H,C1] is in cc3_HC1.c * * output matrix elements are written to CC_HC1ET1 * */ void HC1ET1_Wmbij(int i, int C_irr); void HC1ET1_Wabei(int i, int C_irr); void HC1ET1_Wmbij_rhf(int i, int C_irr); void HC1ET1_Wabei_rhf(int i, int C_irr); void cc3_HC1ET1 (int i, int C_irr) { /* only need new Wmbij and Wabei for CC3 EOM energies */ if (params.ref == 0) { HC1ET1_Wmbij_rhf(i, C_irr); HC1ET1_Wabei_rhf(i, C_irr); } else { HC1ET1_Wmbij(i, C_irr); HC1ET1_Wabei(i, C_irr); } return; } void HC1ET1_Wmbij(int i, int C_irr) { double dot; dpdbuf4 C, D, E, F, Ht, W, W1, X, Z; dpdfile2 CME, Cme; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if (params.ref == 1) { /** ROHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_file2_close(&CME); dpd_file2_close(&Cme); } else if (params.ref == 2) { /** UHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); /**** Term I ****/ /***** Ht (MB,I>J) <--- -WMNIJ * CNB *****/ dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 20, 2, 20, 2, 0, "Ht_WMBIJ (MB,I>J)"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 2, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_contract424(&W, &CME, &Ht, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht (mb,i>j) <--- -Wmnij * Cnb *****/ dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 30, 12, 30, 12, 0, "Ht_Wmbij (mb,i>j)"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 12, 12, 12, 0, "CC3 Wmnij (m>n,i>j)"); dpd_contract424(&W, &Cme, &Ht, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht (Mb,Ij) <--- -WMnIj * Cnb *****/ dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 24, 22, 24, 22, 0, "Ht_WMbIj (Mb,Ij)"); dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&W, &Cme, &Ht, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht (mB,iJ) <--- ZBmJi <--- CNB * WNmJi *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 26, 22, 26, 22, 0, "Z (Bm,Ji)"); dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract244(&CME, &W, &Z, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC3_HC1ET1, qpsr, 27, 23, "Ht_WmBiJ (mB,iJ)"); dpd_buf4_close(&Z); /**** Term II ****/ /***** Ht (MB,I>J) <--- -P(I/J) X (MB,JI) <--- WMBEJ(ME,JB) * CIE *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 20, 0, 20, 0, "Z (MI,JB)"); dpd_buf4_init(&W, CC3_HET1, 0, 20, 20, 20, 20, 0, "CC3 WMBEJ (ME,JB)"); dpd_contract424(&W, &CME, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP0, psrq, 20, 0, "X (MB,JI)"); dpd_buf4_close(&Z); dpd_buf4_init(&X, CC_TMP0, C_irr, 20, 0, 20, 0, 0, "X (MB,JI)"); dpd_buf4_sort_axpy(&X, CC3_HC1ET1, pqsr, 20, 2, "Ht_WMBIJ (MB,I>J)", 1); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 20, 0, 20, 2, 0, "Ht_WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &Ht, -1); dpd_buf4_close(&X); dpd_buf4_close(&Ht); /***** Ht (mb,i>j) <--- -P(i/j) X (mb,ij) <--- Wmbej (me,jb) * Cie *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 10, 30, 10, 30, 0, "Z (mi,jb)"); dpd_buf4_init(&W, CC3_HET1, 0, 30, 30, 30, 30, 0, "CC3 Wmbej (me,jb)"); dpd_contract424(&W, &Cme, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP0, psrq, 30, 10, "X (mb,ji)"); dpd_buf4_close(&Z); dpd_buf4_init(&X, CC_TMP0, C_irr, 30, 10, 30, 10, 0, "X (mb,ji)"); dpd_buf4_sort_axpy(&X, CC3_HC1ET1, pqsr, 30, 12, "Ht_Wmbij (mb,i>j)", 1); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 30, 10, 30, 12, 0, "Ht_Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &Ht, -1); dpd_buf4_close(&X); dpd_buf4_close(&Ht); /***** Ht (Mb,Ij) <--- CIE * WMbEj *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 30, 0, 30, 0, "Z (MI,jb)"); dpd_buf4_init(&W, CC3_HET1, 0, 20, 30, 20, 30, 0, "CC3 WMbEj (ME,jb)"); dpd_contract424(&W, &CME, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psqr, 24, 22, "Ht_WMbIj (Mb,Ij)", 1); dpd_buf4_close(&Z); /***** Ht (Mb,Ij) <--- Cje * WMbeI *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 22, 24, 22, 24, 0, "Z (Mj,Ib)"); dpd_buf4_init(&W, CC3_HET1, 0, 24, 24, 24, 24, 0, "CC3 WMbeJ (Me,Jb)"); dpd_contract424(&W, &Cme, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psrq, 24, 22, "Ht_WMbIj (Mb,Ij)", -1); dpd_buf4_close(&Z); /***** Ht (mB,iJ) <--- Cie * WmBiJ *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 10, 20, 10, 20, 0, "Z (mi,JB)"); dpd_buf4_init(&W, CC3_HET1, 0, 30, 20, 30, 20, 0, "CC3 WmBeJ (me,JB)"); dpd_contract424(&W, &Cme, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psqr, 27, 23, "Ht_WmBiJ (mB,iJ)", 1); dpd_buf4_close(&Z); /***** Ht (mB,iJ) <--- CJE * WmEiB *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 23, 27, 23, 27, 0, "Z (mJ,iB)"); dpd_buf4_init(&W, CC3_HET1, 0, 27, 27, 27, 27, 0, "CC3 WmBEj (mE,jB)"); dpd_contract424(&W, &CME, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psrq, 27, 23, "Ht_WmBiJ (mB,iJ)", -1); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 20, 2, 20, 2, 0, "Ht_WMBIJ (MB,I>J)"); dpd_buf4_sort(&Ht, CC3_HC1ET1, rspq, 2, 20, "Ht_WMBIJ (I>J,MB)"); dpd_buf4_close(&Ht); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 30, 12, 30, 12, 0, "Ht_Wmbij (mb,i>j)"); dpd_buf4_sort(&Ht, CC3_HC1ET1, rspq, 12, 30, "Ht_Wmbij (i>j,mb)"); dpd_buf4_close(&Ht); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 24, 22, 24, 22, 0, "Ht_WMbIj (Mb,Ij)"); dpd_buf4_sort(&Ht, CC3_HC1ET1, rspq, 22, 24, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_close(&Ht); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 27, 23, 27, 23, 0, "Ht_WmBiJ (mB,iJ)"); dpd_buf4_sort(&Ht, CC3_HC1ET1, rspq, 23, 27, "Ht_WmBiJ (iJ,mB)"); dpd_buf4_close(&Ht); /************ TEST *************/ /* dpd_buf4_init(&W, CC3_HC1ET1, 0, 0, 20, 2, 20, 0, "Ht_WMBIJ (I>J,MB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (I>J,MB)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 10, 30, 12, 30, 0, "Ht_Wmbij (i>j,mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (i>j,mb)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 22, 24, 22, 24, 0, "Ht_WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 23, 27, 23, 27, 0, "Ht_WmBiJ (iJ,mB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (iJ,mB)|WmBiJ> = %15.10lf\n", dot); */ dpd_file2_close(&CME); dpd_file2_close(&Cme); } return; } void HC1ET1_Wabei(int i, int C_irr) { double dot; dpdfile2 CME, Cme, tIA, tia; dpdbuf4 Ht, Z, Z1, Z2, Z3, B, C, D, E, F, W, X; char CME_lbl[32], Cme_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); if (params.ref == 1) { /** ROHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_file2_close(&CME); dpd_file2_close(&Cme); } else if (params.ref == 2) { /** UHF **/ dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** Term I ****/ /***** Ht_WABEI <--- -P(A/B) CMA * WMBEI *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 5, 21, 5, 21, 0, "Z (AB,EI)"); dpd_buf4_init(&W, CC3_HET1, 0, 20, 21, 20, 21, 0, "CC3 WMBEJ (MB,EJ)"); dpd_contract244(&CME, &W, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP0, qprs, 7, 21, "Ht_WABEI (A>B,EI)"); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 21, 7, 21, 0, "Ht_WABEI (A>B,EI)"); dpd_buf4_axpy(&Z, &Ht, -1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /***** Ht_Wabei <--- Xbaei <--- -P(a/b) Zabei <-- Cma * Wmbei *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 15, 31, 15, 31, 0, "Z (ab,ei)"); dpd_buf4_init(&W, CC3_HET1, 0, 30, 31, 30, 31, 0, "CC3 Wmbej (mb,ej)"); dpd_contract244(&Cme, &W, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP0, qprs, 17, 31, "Ht_Wabei (a>b,ei)"); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 15, 31, 17, 31, 0, "Ht_Wabei (a>b,ei)"); dpd_buf4_axpy(&Z, &Ht, -1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /***** Ht_WAbEi <--- -CMA * WMbEi *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_init(&W, CC3_HET1, 0, 24, 26, 24, 26, 0, "CC3 WMbEj (Mb,Ej)"); dpd_contract244(&CME, &W, &Ht, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht_WAbEi <--- WAmEi * Cmb *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 26, 28, 26, 28, 0, "Ht_WAbEi (Ei,Ab)"); dpd_buf4_init(&W, CC3_HET1, 0, 26, 26, 26, 26, 0, "CC3 WmBEj (Bm,Ej)"); dpd_contract424(&W, &Cme, &Ht, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht_WaBeI <--- -Cma * WmBeI *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "Ht_WaBeI (aB,eI)"); dpd_buf4_init(&W, CC3_HET1, 0, 27, 25, 27, 25, 0, "CC3 WmBeJ (mB,eJ)"); dpd_contract244(&Cme, &W, &Ht, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht_WaBeI <--- WaMeI * CMB *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 25, 29, 25, 29, 0, "Ht_WaBeI (eI,aB)"); dpd_buf4_init(&W, CC3_HET1, 0, 25, 25, 25, 25, 0, "CC3 WMbeJ (bM,eJ)"); dpd_contract424(&W, &CME, &Ht, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /**** Term II ****/ /***** Ht_WABEI <--- <AB||EF> * CIF *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 7, 21, 7, 21, 0, "Ht_WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_contract424(&B, &CME, &Ht, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Ht); /***** Ht_Wabei <--- <ab||ef> * Cif *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 17, 31, 17, 31, 0, "Ht_Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_contract424(&B, &Cme, &Ht, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Ht); /***** HAbEi <--- <Ab|Ef> * Cif *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract424(&B, &Cme, &Ht, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Ht); /***** HaBeI <--- C[I][F] * <aB|eF> *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 24, 28, 24, 28, 0, "Z (Ie,Ba)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract244(&CME, &B, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 25, 29, "Ht_WaBeI (eI,aB)", 1); dpd_buf4_close(&Z); /** term III **/ /** H( A>B,EI) <--- -P(A/B)( <AM||EF>*C[I][F]*t1[M][B] ) **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 20, 21, 20, 21, 0, "Z (MA,EI)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 5, 21, 5, 21, 0, "Z1(BA,EI)"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 7, 21, "Ht_WABEI (A>B,EI)", 1); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 21, 7, 21, 0, "Ht_WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &Ht, -1); dpd_buf4_close(&Ht); dpd_buf4_close(&Z1); /** H(a>b,ei) <--- -P(a/b)( <am||ef>*C[i][f]*t1[m][b] ) **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 30, 31, 30, 31, 0, "Z (ma,ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 15, 31, 15, 31, 0, "Z1(ba,ei)"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 17, 31, "Ht_Wabei (a>b,ei)", 1); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 15, 31, 17, 31, 0, "Ht_Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &Ht, -1); dpd_buf4_close(&Ht); dpd_buf4_close(&Z1); /** H(Ab,Ei) <--- -<Am|Ef>*C[i][f]*t1[m][b] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_contract424(&F, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 26, 28, 26, 28, 0, "Ht_WAbEi (Ei,Ab)"); dpd_contract424(&Z, &tia, &Ht, 1, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** Ht(Ab,Ei) <--- -<Mb|Ef>*C[i][f]*t1[M][A] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 24, 26, 24, 26, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "Ht_WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &Ht, 0, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** Ht(aB,eI) <--- -<aM|eF>*C[I][F]*t1[M][B] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 25, 29, 25, 29, 0, "Ht_WaBeI (eI,aB)"); dpd_contract424(&Z, &tIA, &Ht, 1, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** Ht(aB,eI) <--- -C[I][F] * <mB|eF> * t1[m][a] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 27, 25, 27, 25, 0, "Z(mB,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "Ht_WaBeI (aB,eI)"); dpd_contract244(&tia, &Z, &Ht, 0, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** term 6 **/ /** Ht(A>B,EI) <--- 0.5 * P(A/B) <MN||EF> * t1[M][A]*C[I][F]*t1[N][B] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 2, 21, 2, 21, 0, "Z (M>N,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 21, 2, 21, 0, "Z (M>N,EI)"); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 21, 20, 21, 20, 0, "Z1 (EI,MB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 21, 7, 21, 0, "Ht_WABEI (A>B,EI)"); dpd_contract244(&tIA, &Z1, &Ht, 0, 2, 0, 1, 1); dpd_buf4_close(&Ht); dpd_buf4_close(&Z1); /** W(a>b,ei) <--- 0.5 * P(a/b) <nm||ef> * t1[m][b]*C[i][f]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 12, 31, 12, 31, 0, "Z (m>n,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, C_irr, 10, 31, 12, 31, 0, "Z (m>n,ei)"); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 31, 30, 31, 30, 0, "Z1 (ei,mb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 15, 31, 17, 31, 0, "Ht_Wabei (a>b,ei)"); dpd_contract244(&tia, &Z1, &Ht, 0, 2, 0, 1, 1); dpd_buf4_close(&Ht); dpd_buf4_close(&Z1); /** W(Ab,Ei) <--- <Nm|Ef> * t1[m][b]*C[i][f]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 22, 26, 22, 26, 0, "Z (Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &Cme, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 26, 24, 26, 24, 0, "Z1 (Ei,Nb)"); dpd_contract424(&Z, &tia, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "Ht_WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z1, &Ht, 0, 2, 0, 1, 1); dpd_buf4_close(&Ht); /** W(aB,eI) <--- <nM|eF> * t1[M][B]*C[I][F]*t1[n][a] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 23, 25, 23, 25, 0, "Z (nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 25, 27, 25, 27, 0, "Z1 (eI,nB)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "Ht_WaBeI (aB,eI)"); dpd_contract244(&tia, &Z1, &Ht, 0, 2, 0, 1, 1); dpd_buf4_close(&Ht); dpd_file2_close(&CME); dpd_file2_close(&Cme); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* combine W(Ab,Ei) and W(Ei,Ab) */ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 28, 26, 28, 26, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_sort_axpy(&Ht, CC_TMP0, rspq, 26, 28, "Ht_WAbEi (Ei,Ab)", 1); dpd_buf4_close(&Ht); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 29, 25, 29, 25, 0, "Ht_WaBeI (aB,eI)"); dpd_buf4_sort_axpy(&Ht, CC_TMP0, rspq, 25, 29, "Ht_WaBeI (eI,aB)", 1); dpd_buf4_close(&Ht); /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP0, C_irr, 7, 21, 7, 21, 0, "Ht_WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 21, 7, "Ht_WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 17, 31, 17, 31, 0, "Ht_Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC_TMP2, rspq, 31, 17, "Ht_Wabei (ei,a>b)"); dpd_buf4_close(&W); /* sort to Wabei (ie,ba) */ dpd_buf4_init(&W, CC_TMP2, C_irr, 21, 7, 21, 7, 0, "Ht_WABEI (EI,A>B)"); dpd_buf4_sort(&W, CC3_HC1ET1, qprs, 20, 7, "Ht_WABEI (IE,B>A)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1ET1, C_irr, 20, 7, 20, 7, 0, "Ht_WABEI (IE,B>A)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, C_irr, 31, 17, 31, 17, 0, "Ht_Wabei (ei,a>b)"); dpd_buf4_sort(&W, CC3_HC1ET1, qprs, 30, 17, "Ht_Wabei (ie,b>a)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HC1ET1, C_irr, 30, 17, 30, 17, 0, "Ht_Wabei (ie,b>a)"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 26, 28, 26, 28, 0, "Ht_WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HC1ET1, qpsr, 27, 29, "Ht_WAbEi (iE,bA)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, C_irr, 25, 29, 25, 29, 0, "Ht_WaBeI (eI,aB)"); dpd_buf4_sort(&W, CC3_HC1ET1, qpsr, 24, 28, "Ht_WaBeI (Ie,Ba)"); dpd_buf4_close(&W); /************ TEST *************/ /* dpd_buf4_init(&W, CC3_HC1ET1, 0, 20, 5, 20, 7, 0, "Ht_WABEI (IE,B>A)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WABEI(IE,B>A)|WABEI> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 30, 15, 30, 17, 0, "Ht_Wabei (ie,b>a)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wabei (ie,b>a)|Wabei> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 27, 29, 27, 29, 0, "Ht_WAbEi (iE,bA)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,bA)|WAbEi> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1ET1, 0, 24, 28, 24, 28, 0, "Ht_WaBeI (Ie,Ba)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaBeI (Ie,Ba)|WaBeI> = %15.10lf\n", dot); */ } return; } void HC1ET1_Wmbij_rhf(int i, int C_irr) { double dot; dpdbuf4 C, D, E, F, Ht, W, W1, X, Z; dpdfile2 CME; char CME_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); /***** Ht (Mb,Ij) <--- -WMnIj * Cnb *****/ dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 10, 0, 10, 0, 0, "Ht_WMbIj (Mb,Ij)"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_contract424(&W, &CME, &Ht, 1, 0, 1, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht (Mb,Ij) <--- CIE * WMbEj *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 10, 0, 10, 0, "Z (MI,jb)"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dpd_contract424(&W, &CME, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psqr, 10, 0, "Ht_WMbIj (Mb,Ij)", 1); dpd_buf4_close(&Z); /***** Ht (Mb,Ij) <--- Cje * WMbeI *****/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 10, 0, 10, 0, "Z (Mj,Ib)"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dpd_contract424(&W, &CME, &Z, 1, 1, 1, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC3_HC1ET1, psrq, 10, 0, "Ht_WMbIj (Mb,Ij)", -1); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC3_HC1ET1, C_irr, 10, 0, 10, 0, 0, "Ht_WMbIj (Mb,Ij)"); dpd_buf4_sort(&Ht, CC3_HC1ET1, rspq, 0, 10, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_close(&Ht); dpd_file2_close(&CME); return; } void HC1ET1_Wabei_rhf(int i, int C_irr) { double dot; dpdfile2 CME, tIA; dpdbuf4 Ht, Z, Z1, Z2, Z3, B, C, D, E, F, W, X; char CME_lbl[32]; sprintf(CME_lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /***** Ht_WAbEi <--- -CMA * WMbEi *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 11, 10, 11, 0, "CC3 WMbEj (Mb,Ej)"); dpd_contract244(&CME, &W, &Ht, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** Ht_WAbEi <--- WAmEi * Cmb *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "Ht_WAbEi (Ei,Ab)"); dpd_buf4_init(&W, CC3_HET1, 0, 11, 11, 11, 11, 0, "CC3 WMbeJ (bM,eJ)"); dpd_contract424(&W, &CME, &Ht, 1, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&Ht); /***** HAbEi <--- <Ab|Ef> * Cif *****/ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &CME, &Ht, 3, 1, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Ht); /** H(Ab,Ei) <--- -<Am|Ef>*C[i][f]*t1[m][b] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 11, 11, 11, 11, 0, "Z(Am,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "Ht_WAbEi (Ei,Ab)"); dpd_contract424(&Z, &tIA, &Ht, 1, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** Ht(Ab,Ei) <--- -<Mb|Ef>*C[i][f]*t1[M][A] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 10, 11, 10, 11, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "Ht_WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z, &Ht, 0, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Ht); /** W(Ab,Ei) <--- <Nm|Ef> * t1[m][b]*C[i][f]*t1[N][A] **/ dpd_buf4_init(&Z, CC_TMP0, C_irr, 0, 11, 0, 11, 0, "Z (Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &CME, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, C_irr, 11, 10, 11, 10, 0, "Z1 (Ei,Nb)"); dpd_contract424(&Z, &tIA, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "Ht_WAbEi (Ab,Ei)"); dpd_contract244(&tIA, &Z1, &Ht, 0, 2, 0, 1, 1); dpd_buf4_close(&Ht); dpd_file2_close(&CME); dpd_file2_close(&tIA); /* combine W(Ab,Ei) and W(Ei,Ab) */ dpd_buf4_init(&Ht, CC_TMP0, C_irr, 5, 11, 5, 11, 0, "Ht_WAbEi (Ab,Ei)"); dpd_buf4_sort_axpy(&Ht, CC_TMP0, rspq, 11, 5, "Ht_WAbEi (Ei,Ab)", 1); dpd_buf4_close(&Ht); /* sort to Wabei (ie,ba) */ dpd_buf4_init(&W, CC_TMP0, C_irr, 11, 5, 11, 5, 0, "Ht_WAbEi (Ei,Ab)"); dpd_buf4_sort(&W, CC3_HC1ET1, qpsr, 10, 5, "Ht_WAbEi (iE,bA)"); dpd_buf4_close(&W); return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/cceom.1��������������������������������������������������������������������������0000644�0001015�0000765�00000004557�07570254042�014016� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH optking 1 "Sept 2002" "" "" . \" . \" Notice of Document Modification . \" . \" man page created by Rollin King, Sept 2002 . \" . \" .LP NAME cceom \- equation of motion coupled cluster energy program .LP \fBDESCRIPTION\fP .LP The program .B cceom calculates EOM-CCSD energies using a Davidson algorithm to solve for the right-hand eigenvectors of the CC Hamiltonian. .LP \fBCOMMAND LINE ARGUMENTS\fP .LP After internal coordinates are detected or generated, optking will enter a run-time mode dependent on command line arguments. .LP .nf --dot_with_Lg \- check the orthogonality of the excited right-hand eigenvector with \- the ground state left eigenvector, lambda. cclambda must be run \- first for this to work .fi .LP \fBREFERENCES\fP .IP "1." The equation of motion coupled-cluster method. A systematic biorthogonal approach to molecular excitation energies, transition probabilities, and excited state properties, J. F. Stanton and R. J. Bartlett, J. Chem. Phys. 98, 7029 (1993). .IP "\fBEOM_REFERENCE =\fP \fIinteger\fP" specifies the algorithm used by cceom. useful for debugging. also must currently be set to ROHF, if you want to get triplet excited states from a singlet ground state. The default is whatever "REFERENCE" is. .IP "\fBSTATES_PER_IRREP =\fP \fIarray of integers\fP" specifies the number of states of each irreducible representation desired. For example, in C2v symmetry, (0 2 0 0) specifies two excited states of A2 symmetry to be solved, regardless of the symmetry of the ground state. .IP "\fBPROP_SYM =\fP \fIinteger\fP" specifies the symmetry of the state that should be used to compute properties. defaults to the last irrep for which states are requested. .IP "\fBPROP_ROOT =\fP \fIinteger\fP" specifies the number of the root (within its irrep) that should be used to compute properties. defaults to the highest root requested. .IP "\fBEXCITATION_RANGE =\fP \fIexcitation_range\fP" used to generate initial guesses. the larger the value, the more initial guesses are made in the Davidson algorithm. .IP "\fBRESIDUAL_TOL =\fP \fIinteger\fP" Davidson algorithm will converge until the norm of the residual vector is less than 10^(-integer). default if 4. .IP "\fBEVAL_TOL =\fP \fIinteger\fP" Davidson algorithm will converge until the change in the excitation energy is less than 10^(-integer). default if 6. �������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/cceom.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000011066�11112564564�014234� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* ** CCEOM: Program to calculate the EOM CCSD right-hand eigenvector and energy */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include "Params.h" #include "MOInfo.h" #include "Local.h" #include "globals.h" namespace psi { namespace cceom { void init_io(int argc, char *argv[]); void get_moinfo(void); void cleanup(void); void exit_io(void); void diag(void); void get_params(void); void get_eom_params(void); void form_dpd_dp(void); int **cacheprep_uhf(int level, int *cachefiles); int **cacheprep_rhf(int level, int *cachefiles); void sort_amps(void); void hbar_norms(void); /* local correlation functions */ void local_init(void); void local_done(void); }} // namespace psi::cceom using namespace psi::cceom; int main(int argc, char *argv[]) { int i, h, done=0, *cachefiles, **cachelist; init_io(argc, argv); fprintf(outfile,"\n\t**********************************************************\n"); fprintf(outfile,"\t* CCEOM: An Equation of Motion Coupled Cluster Program *\n"); fprintf(outfile,"\t**********************************************************\n"); get_moinfo(); fflush(outfile); get_params(); get_eom_params(); #ifdef TIME_CCEOM timer_init(); timer_on("CCEOM"); #endif form_dpd_dp(); cachefiles = init_int_array(PSIO_MAXUNIT); if (params.ref == 2) { /* UHF */ cachelist = cacheprep_uhf(params.cachelev, cachefiles); /* cachelist = init_int_matrix(32,32); */ dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } else { /* RHF or ROHF */ cachelist = cacheprep_rhf(params.cachelev, cachefiles); /* cachelist = init_int_matrix(12,12); */ dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } if(params.local) local_init(); diag(); dpd_close(0); if(params.local) local_done(); cleanup(); #ifdef TIME_CCEOM timer_off("CCEOM"); timer_done(); #endif exit_io(); exit(0); } extern "C" {const char *gprgid() { const char *prgid = "CCEOM"; return(prgid); }} namespace psi { namespace cceom { void init_io(int argc, char *argv[]) { int i, num_unparsed; char *progid, *argv_unparsed[100]; eom_params.dot_with_L = 0; eom_params.guess = NULL; for (i=1, num_unparsed=0; i<argc; ++i) { if (!strcmp(argv[i],"--dot_with_L")) eom_params.dot_with_L = 1; else if(!strcmp(argv[i], "--reuse")) eom_params.guess = strdup("DISK"); else argv_unparsed[num_unparsed++] = argv[i]; } progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed, argv_unparsed, 0); ip_cwk_add(":INPUT"); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); /* for(i=CC_MIN; i <= CC_MISC; i++) psio_open(i,1); for(i=CC_TMP; i <= EOM_D; i++) psio_open(i,0); for(i=EOM_Cme; i <= CC_MAX; i++) psio_open(i,0); */ /* it will read it anyway if its there ? if(eom_params.guess != NULL) { if(!strcmp(eom_params.guess,"DISK")) psio_open(EOM_CME,1); } else psio_open(EOM_CME,0); */ if (eom_params.dot_with_L) { psio_read_entry(CC_INFO,"EOM L0",(char *) &eom_params.L0, sizeof(double)); psio_read_entry(CC_INFO,"EOM L Irrep",(char *) &eom_params.L_irr, sizeof(int)); } } void exit_io(void) { int i; /* for(i=CC_MIN; i <= CC_MISC; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_MAX; i++) psio_close(i,1); */ for(i=CC_MIN; i <= CC_DIIS_AMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } void form_dpd_dp(void) { int h, h0, h1, cnt, nirreps; nirreps = moinfo.nirreps; dpd_dp = (int ***) malloc(nirreps * sizeof(int **)); for(h=0; h < nirreps; h++) { dpd_dp[h] = init_int_matrix(nirreps,2); cnt=0; for(h0=0; h0 < nirreps; h0++) { for(h1=0; h1 < nirreps; h1++) { if((h0^h1)==h) { dpd_dp[h][cnt][0] = h0; dpd_dp[h][cnt++][1] = h1; } } } } } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/check_sum.cc���������������������������������������������������������������������0000644�0001015�0000765�00000006556�10757640026�015121� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <cstring> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); extern double norm_C_rhf_full(double C0, dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); void check_sum(char *term_lbl, int index, int irrep) { int save_params_ref; dpdfile2 Sia, SIA; dpdbuf4 SIJAB, Sijab, SIjAb, SIjbA; static double old_norm=0; double norm,dotval,S0; char lbl[80]; if (!strcmp(term_lbl,"reset")) { fprintf(outfile,"resetting norm\n"); old_norm = 0; return; } /* save_params_ref = params.ref; params.ref = 0; */ if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIA", index); dpd_file2_init(&SIA, EOM_SIA, irrep, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", index); dpd_buf4_init(&SIjAb, EOM_SIjAb, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_sort(&SIjAb, EOM_SIjAb, pqsr, 0, 5, "SIjbA"); dpd_buf4_init(&SIjbA, EOM_SIjAb, irrep, 0, 5, 0, 5, 0, "SIjbA"); if (!params.full_matrix) { norm = norm_C_rhf(&SIA, &SIjAb, &SIjbA); } else { sprintf(lbl, "%s %d", "S0", index); psio_read_entry(EOM_SIA, lbl, (char *) &S0, sizeof(double)); norm = norm_C_rhf_full(S0, &SIA, &SIjAb, &SIjbA); } dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); dpd_buf4_close(&SIjbA); } else if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "SIA", index); dpd_file2_init(&SIA, EOM_SIA, irrep, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", index); dpd_file2_init(&Sia, EOM_Sia, irrep, 0, 1, lbl); sprintf(lbl, "%s %d", "SIJAB", index); dpd_buf4_init(&SIJAB, EOM_SIJAB, irrep, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", index); dpd_buf4_init(&Sijab, EOM_Sijab, irrep, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", index); dpd_buf4_init(&SIjAb, EOM_SIjAb, irrep, 0, 5, 0, 5, 0, lbl); norm = norm_C(&SIA, &Sia, &SIJAB, &Sijab, &SIjAb); dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "SIA", index); dpd_file2_init(&SIA, EOM_SIA, irrep, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", index); dpd_file2_init(&Sia, EOM_Sia, irrep, 2, 3, lbl); sprintf(lbl, "%s %d", "SIJAB", index); dpd_buf4_init(&SIJAB, EOM_SIJAB, irrep, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", index); dpd_buf4_init(&Sijab, EOM_Sijab, irrep, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", index); dpd_buf4_init(&SIjAb, EOM_SIjAb, irrep, 22, 28, 22, 28, 0, lbl); norm = norm_C(&SIA, &Sia, &SIJAB, &Sijab, &SIjAb); dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); } fprintf(outfile,"%7s, D(norm sigma)=%15.10lf\n", term_lbl, norm - old_norm); fflush(outfile); old_norm = norm; /* params.ref = save_params_ref; */ return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/dgeev_eom.cc���������������������������������������������������������������������0000644�0001015�0000765�00000003026�10757640026�015077� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void cleanup(void); /* This routine transposes matrices and calls lapack dgeev() in libqt * * to diagonalize a square nonsymmetric matrix. The eigenvalues * * are returned in random order. */ void dgeev_eom(int L, double **G, double *lambda, double **alpha) { int i, j, lwork, info; double *evals_i, *work, **left_evects, tval, temp; evals_i = init_array(L); left_evects = block_matrix(L,L); work = init_array(20*L); lwork = 20*L; for (i=0; i<L; ++i) for (j=0; j<i; ++j) { temp = G[i][j]; G[i][j] = G[j][i]; G[j][i] = temp; } i = C_DGEEV(L, G, L, lambda, evals_i, left_evects, L, alpha, L, work, lwork, info); for (i=0; i<L; ++i) for (j=0; j<i; ++j) { temp = alpha[i][j]; alpha[i][j] = alpha[j][i]; alpha[j][i] = temp; } free(work); tval = 0.0; for (i=0; i<L; ++i) { tval += fabs(evals_i[i]); } if (tval > (eom_params.complex_tol)) { fprintf(outfile,"\nSum of complex part of HBar eigenvalues %20.15f, %10.2e\n", tval, eom_params.complex_tol); fflush(outfile); /* exit(1); */ } free(evals_i); free_block(left_evects); return; } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/diag.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000137650�11111155754�014056� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* * diag() diagonalized Hbar with Davidson-Liu algorithm to obtain * right-hand eigenvector and eigenvalue */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { #include <physconst.h> #include <psifiles.h> extern void test_dpd(); extern void rzero(int C_irr, int *converged); extern void rzero_rhf(int C_irr, int *converged); void init_S1(int index, int irrep); void init_S2(int index, int irrep); void init_C1(int i, int C_irr); void init_C0(int i); void init_S0(int i); void init_C2(int index, int irrep); extern void write_Rs(int C_irr, double *energies, int *converged); extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); extern double norm_C_rhf_full(double C0, dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); extern void scm_C1(dpdfile2 *CME, dpdfile2 *Cme, double a); extern void scm_C1_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, double a); extern void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a); extern void scm_C_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a); extern void scm_C2(dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a); extern void restart(double **alpha, int L, int num, int irrep, int ortho, double **alpha_old, int L_old, int use_alpha_old); extern void precondition(dpdfile2 *RIA, dpdfile2 *Ria, dpdbuf4 *RIJAB, dpdbuf4 *Rijab, dpdbuf4 *RIjAb, double eval); extern void precondition_RHF(dpdfile2 *RIA, dpdbuf4 *RIjAb, double eval); void form_diagonal(int irrep); extern void schmidt_add(dpdfile2 *RIA, dpdfile2 *Ria, dpdbuf4 *RIJAB, dpdbuf4 *Rijab, dpdbuf4 *RIjAb, int *numCs, int irrep); extern void schmidt_add_RHF(dpdfile2 *RIA, dpdbuf4 *RIjAb, int *numCs, int irrep); void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); void sigmaSS(int index, int irrep); void sigmaSD(int index, int irrep); void sigmaDS(int index, int irrep); void sigmaDD(int index, int irrep); void sigma00(int index, int irrep); void sigma0S(int index, int irrep); void sigma0D(int index, int irrep); void sigmaS0(int index, int irrep); void sigmaSS_full(int index, int irrep); void sigmaD0(int index, int irrep); void sigmaDS_full(int index, int irrep); void sigmaDD_full(int index, int irrep); void sigmaCC3(int i, int C_irr, double omega); void diagSS(int irrep); void hbar_extra(void); void hbar_norms(void); extern void sort_C(int index, int irrep); void dgeev_eom(int L, double **G, double *evals, double **alpha); double local_G1_dot(dpdfile2 *, dpdfile2 *); double local_G2_dot(dpdbuf4 *, dpdbuf4 *); void local_filter_T1_nodenom(dpdfile2 *); void local_filter_T2_nodenom(dpdbuf4 *); void local_guess(void); void read_guess(int); void read_guess_init(void); extern double norm_C1_rhf(dpdfile2 *C1A); void cc3_HC1(int i, int C_irr); /* compute [H,C1] */ void cc3_HC1ET1 (int i, int C_irr); void norm_HC1(int i, int C_irr); /* compute norms for [H,C1] */ extern void restart_with_root(int i, int C_irr); extern void save_C_ccsd(int i, int C_irr); extern int follow_root(int L, double **alpha, int C_irr); void cc2_hbar_extra(void); void cc2_sigma(int index, int irrep); void amp_write_T1(dpdfile2 *T1, int length, FILE *outfile); void amp_write_T2(dpdbuf4 *T2, int length, FILE *outfile); void diag(void) { dpdfile2 CME, CME2, Cme, SIA, Sia, RIA, Ria, DIA, Dia, tIA, tia, LIA, Lia; dpdbuf4 CMNEF, Cmnef, CMnEf, SIJAB, Sijab, SIjAb, RIJAB, Rijab, RIjAb, RIjbA; dpdbuf4 CMnEf1, CMnfE1, CMnfE, CMneF, C2; char lbl[32]; int num_converged, num_converged_index=0, *converged, keep_going, already_sigma; int irrep, numCs, iter, lwork, info, vectors_per_root, nsigma_evaluations=0; int get_right_ev = 1, get_left_ev = 0, first_irrep=1; int L,h,i,j,k,a,nirreps,errcod,C_irr; double norm, tval, **G, *work, *evals_complex, **alpha, **evectors_left; double *lambda, *lambda_old, totalE, **G_old, **alpha_old; int num_vecs, cc3_index, num_cc3_restarts = 0, ignore_G_old=0; double ra, rb, r2aa, r2bb, r2ab, cc3_eval, cc3_last_converged_eval=0.0, C0, S0, R0; int cc3_stage; /* 0=eom_ccsd; 1=eom_cc3 (reuse sigmas), 2=recompute sigma */ int L_start_iter, L_old; char *keyw; #ifdef TIME_CCEOM timer_on("HBAR_EXTRA"); #endif if (!strcmp(params.wfn,"EOM_CC2")) cc2_hbar_extra(); else hbar_extra(); /* sort hbar matrix elements for sigma equations */ #ifdef TIME_CCEOM timer_off("HBAR_EXTRA"); #endif #ifdef EOM_DEBUG hbar_norms(); #endif if(!strcmp(eom_params.guess,"INPUT")) read_guess_init(); if (!strcmp(params.wfn,"EOM_CC3")) cc3_stage = 0; /* do EOM_CCSD first */ fprintf(outfile,"Symmetry of ground state: %s\n", moinfo.labels[moinfo.sym]); /* loop over symmetry of C's */ for (C_irr=0; C_irr<moinfo.nirreps; ++C_irr) { ignore_G_old = 1; already_sigma = 0; iter = 0; keep_going = 1; num_converged = 0; if (eom_params.cs_per_irrep[C_irr] == 0) continue; #ifdef TIME_CCEOM timer_on("INIT GUESS"); #endif fprintf(outfile,"Symmetry of excited state: %s\n", moinfo.labels[moinfo.sym ^ C_irr]); fprintf(outfile,"Symmetry of right eigenvector: %s\n",moinfo.labels[C_irr]); if (params.eom_ref == 0) fprintf(outfile,"Seeking states with multiplicity of %d\n", eom_params.mult); /* zero out files between irreps */ if (!first_irrep) { dpd_file2_cache_close(); dpd_file2_cache_init(); dpd_file4_cache_close(); dpd_file4_cache_init(); } for (i=EOM_D; i<=EOM_R; ++i) { if (eom_params.restart_eom_cc3 && (i >= EOM_CME) && (i<= EOM_CMnEf)) continue; psio_close(i,0); psio_open(i,0); } psio_close(EOM_TMP,0); psio_open(EOM_TMP,0); first_irrep = 0; /* used to zero out files for new irreps above */ /* Store approximate diagonal elements of Hbar */ form_diagonal(C_irr); if (eom_params.restart_eom_cc3) { } else if(params.local) { if(!strcmp(eom_params.guess,"DISK")) { /* only do this if we don't already have guesses on disk */ fprintf(outfile, "\n\tUsing C1 vectors on disk as initial guesses.\n"); } else { local_guess(); if(local.do_singles) diagSS(C_irr); } } else { if(!strcmp(eom_params.guess,"SINGLES")) { /* Diagonalize Hbar-SS to obtain initial CME and Cme guess */ fprintf(outfile,"Obtaining initial guess from singles-singles block of Hbar..."); diagSS(C_irr); if (!eom_params.print_singles) fprintf(outfile,"Done.\n\n"); } else if(!strcmp(eom_params.guess,"INPUT")) { read_guess(C_irr); } else if(!strcmp(eom_params.guess,"DISK") && params.ref == 0) { fprintf(outfile, "Using C1 vectors on disk as initial guesses.\n"); /* normalize first guess */ sprintf(lbl, "%s %d", "CME", 0); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); norm = norm_C1_rhf(&CME); dpd_file2_scm(&CME, 1.0/norm); dpd_file2_close(&CME); /* reorthoganalize and normalize other guesses */ for(i=1; i < eom_params.cs_per_irrep[C_irr]; i++) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); for(j=0; j < i; j++) { sprintf(lbl, "%s %d", "CME", j); dpd_file2_init(&CME2, EOM_CME, C_irr, 0, 1, lbl); norm = 2.0 * dpd_file2_dot(&CME, &CME2); dpd_file2_axpy(&CME2, &CME, -1.0*norm, 0); dpd_file2_close(&CME2); } norm = norm_C1_rhf(&CME); dpd_file2_scm(&CME, 1.0/norm); dpd_file2_close(&CME); } #ifdef EOM_DEBUG /* check initial guesses - overlap matrix */ fprintf(outfile,"Checking overlap of orthogonalized initial guesses\n"); for(i=0; i < eom_params.cs_per_irrep[C_irr]; i++) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); for(j=0; j < eom_params.cs_per_irrep[C_irr]; j++) { sprintf(lbl, "%s %d", "CME", j); dpd_file2_init(&CME2, EOM_CME, C_irr, 0, 1, lbl); fprintf(outfile,"C[%d][%d] = %15.10lf\n",i,j, 2.0 * dpd_file2_dot(&CME, &CME2)); dpd_file2_close(&CME2); } dpd_file2_close(&CME); } #endif } else { fprintf(outfile, "Invalid initial guess method.\n"); exit(PSI_RETURN_FAILURE); } } #ifdef TIME_CCEOM timer_off("INIT GUESS"); #endif #ifdef EOM_DEBUG /* printout initial guesses */ for (i=0;i<eom_params.cs_per_irrep[C_irr]; ++i) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_print(&CME,outfile); dpd_file2_close(&CME); if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_print(&Cme,outfile); dpd_file2_close(&Cme); } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_print(&Cme,outfile); dpd_file2_close(&Cme); } } fflush(outfile); #endif /* Setup and zero initial C2 and S2 vector to go with Hbar_SS */ for (i=0;i<eom_params.cs_per_irrep[C_irr];++i) { /* init_S1(i, C_irr); gets done at first iteration anyway */ init_S1(i, C_irr); if (!eom_params.restart_eom_cc3) init_C2(i, C_irr); if (params.full_matrix) { init_C0(i); init_S0(i); } /* init_S2(i, C_irr); */ } #ifdef EOM_DEBUG check_sum("reset", 0, 0); /* reset checksum */ #endif converged = init_int_array(eom_params.cs_per_irrep[C_irr]); lambda_old = init_array(eom_params.cs_per_irrep[C_irr]); L = eom_params.cs_per_irrep[C_irr]; /* allocate G_old just once */ i = (eom_params.vectors_per_root+1)*eom_params.cs_per_irrep[C_irr]; G_old = block_matrix(i,i); vectors_per_root = eom_params.vectors_per_root; /* used for CCSD */ while ((keep_going == 1) && (iter < eom_params.max_iter)) { fprintf(outfile,"Iter=%-4d L=%-4d", iter+1, L); fflush(outfile); keep_going = 0; numCs = L_start_iter = L; num_converged = 0; for (i=already_sigma;i<L;++i) { /* Form a zeroed S vector for each C vector SIA and Sia do get overwritten by sigmaSS so this may only be necessary for debugging */ ++nsigma_evaluations; if (params.full_matrix) init_S0(i); init_S1(i, C_irr); init_S2(i, C_irr); sort_C(i, C_irr); /* Computing sigma vectors */ #ifdef EOM_DEBUG check_sum("reset",0,0); #endif #ifdef TIME_CCEOM timer_on("SIGMA ALL"); if (!strcmp(params.wfn,"EOM_CC2")) { timer_on("sigmacc2"); cc2_sigma(i,C_irr); timer_off("sigmacc2"); } else { timer_on("sigmaSS"); sigmaSS(i,C_irr); timer_off("sigmaSS"); timer_on("sigmaSD"); sigmaSD(i,C_irr); timer_off("sigmaSD"); timer_on("sigmaDS"); sigmaDS(i,C_irr); timer_off("sigmaDS"); timer_on("sigmaDD"); sigmaDD(i,C_irr); timer_off("sigmaDD"); if ( ((!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0)) || eom_params.restart_eom_cc3) { timer_on("cc3_HC1"); cc3_HC1(i,C_irr); timer_off("cc3_HC1"); timer_on("cc3_HC1ET1"); cc3_HC1ET1(i,C_irr); timer_off("cc3_HC1ET1"); timer_on("sigmaCC3"); sigmaCC3(i,C_irr,cc3_eval); timer_off("sigmaCC3"); } } timer_off("SIGMA ALL"); #else if (!strcmp(params.wfn,"EOM_CC2")) cc2_sigma(i,C_irr); else { sigmaSS(i,C_irr); sigmaSD(i,C_irr); sigmaDS(i,C_irr); sigmaDD(i,C_irr); } if ( ((!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0)) || eom_params.restart_eom_cc3) { cc3_HC1(i,C_irr); cc3_HC1ET1(i,C_irr); sigmaCC3(i,C_irr,cc3_eval); } #endif if (params.full_matrix) { sigma00(i,C_irr); sigma0S(i,C_irr); sigma0D(i,C_irr); sigmaS0(i,C_irr); sigmaSS_full(i,C_irr); sigmaD0(i,C_irr); sigmaDS_full(i,C_irr); sigmaDD_full(i,C_irr); } #ifdef EOM_DEBUG check_sum("reset",0,0); #endif /* Cleaning out sigma vectors for open-shell cases */ if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); c_clean(&SIA, &Sia, &SIJAB, &Sijab, &SIjAb); #ifdef EOM_DEBUG check_sum("reset",0,0); sprintf(lbl, "Total sigma%d norm af clean", i); check_sum(lbl, i, C_irr); #endif dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); fflush(outfile); } } #ifdef TIME_CCEOM timer_on("BUILD G"); #endif /*timing*/ /* Form G = C'*S matrix */ G = block_matrix(L,L); /* reuse values from old G matrix */ /* if last step was restart, sigma is OK but recompute full G matrix */ if (ignore_G_old) already_sigma = 0; for (i=0; i<already_sigma; ++i) for (j=0; j<already_sigma; ++j) G[i][j] = G_old[i][j]; for (i=0;i<L;++i) { if(params.eom_ref == 0) { /* Spin-adapt C */ sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); if (params.full_matrix) { sprintf(lbl, "%s %d", "C0", i); psio_read_entry(EOM_CME, lbl, (char *) &C0, sizeof(double)); } sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, EOM_TMP, "CMnEf"); dpd_buf4_sort(&CMnEf, EOM_TMP, pqsr, 0, 5, "CMnfE"); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf1, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnEf"); dpd_buf4_scm(&CMnEf1, 2.0); dpd_buf4_init(&CMnfE1, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnfE"); dpd_buf4_axpy(&CMnfE1, &CMnEf1, -1.0); dpd_buf4_close(&CMnfE1); dpd_buf4_close(&CMnEf1); /* dpd_file2_init(&CME, EOM_TMP, C_irr, 0, 1, "CME");*/ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnEf"); } else if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); } /* Dot C's and sigma vectors together to form G matrix */ for (j=0;j<L;++j) { if (i<already_sigma && j<already_sigma) continue; /* fprintf(outfile,"Computing G[%d][%d].\n",i,j); */ if(params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); tval = 2.0 * dpd_file2_dot(&CME, &SIA); sprintf(lbl, "%s %d", "SIjAb", j); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); tval += dpd_buf4_dot(&CMnEf, &SIjAb); dpd_file2_close(&SIA); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", j); psio_read_entry(EOM_SIA, lbl, (char *) &S0, sizeof(double)); tval += C0 * S0; } dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); tval = dpd_file2_dot(&CME, &SIA); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "Sia", j); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); tval += dpd_file2_dot(&Cme, &Sia); dpd_file2_close(&Sia); sprintf(lbl, "%s %d", "SIJAB", j); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); tval += r2aa = dpd_buf4_dot(&CMNEF, &SIJAB); dpd_buf4_close(&SIJAB); sprintf(lbl, "%s %d", "Sijab", j); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, lbl); tval += r2bb = dpd_buf4_dot(&Cmnef, &Sijab); dpd_buf4_close(&Sijab); sprintf(lbl, "%s %d", "SIjAb", j); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); tval += r2ab = dpd_buf4_dot(&CMnEf, &SIjAb); dpd_buf4_close(&SIjAb); /* fprintf(outfile,"r2aa %12.7lf r2bb %12.7lf r2ab %12.7lf\n", r2aa, r2bb, r2ab); */ } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); tval = dpd_file2_dot(&CME, &SIA); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "Sia", j); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); tval += dpd_file2_dot(&Cme, &Sia); dpd_file2_close(&Sia); sprintf(lbl, "%s %d", "SIJAB", j); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); tval += dpd_buf4_dot(&CMNEF, &SIJAB); dpd_buf4_close(&SIJAB); sprintf(lbl, "%s %d", "Sijab", j); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, lbl); tval += dpd_buf4_dot(&Cmnef, &Sijab); dpd_buf4_close(&Sijab); sprintf(lbl, "%s %d", "SIjAb", j); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); tval += dpd_buf4_dot(&CMnEf, &SIjAb); dpd_buf4_close(&SIjAb); } G[i][j] = tval; } dpd_file2_close(&CME); dpd_buf4_close(&CMnEf); if (params.eom_ref > 0) { dpd_file2_close(&Cme); dpd_buf4_close(&CMNEF); dpd_buf4_close(&Cmnef); } } /* end build of G */ ignore_G_old = 0; already_sigma = L; #ifdef TIME_CCEOM timer_off("BUILD G"); #endif /* timing */ #ifdef EOM_DEBUG fprintf(outfile,"The G Matrix\n"); mat_print(G, L, L, outfile); #endif for (i=0;i<L;++i) { for (j=0;j<L;++j) G_old[i][j] = G[i][j]; } /* Diagonalize G Matrix */ lambda = init_array(L); /* holds real part of eigenvalues of G */ alpha = block_matrix(L,L); /* will hold eigenvectors of G */ dgeev_eom(L, G, lambda, alpha); eigsort(lambda, alpha, L); /* eivout(alpha, lambda, L, L, outfile);*/ free_block(G); /* Open up residual vector files */ if (params.eom_ref == 0) { dpd_file2_init(&RIA, EOM_R, C_irr, 0, 1, "RIA"); dpd_buf4_init(&RIjAb, EOM_R, C_irr, 0, 5, 0, 5, 0, "RIjAb"); } else if (params.eom_ref == 1) { dpd_file2_init(&RIA, EOM_R, C_irr, 0, 1, "RIA"); dpd_file2_init(&Ria, EOM_R, C_irr, 0, 1, "Ria"); dpd_buf4_init(&RIJAB, EOM_R, C_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&Rijab, EOM_R, C_irr, 2, 7, 2, 7, 0, "Rijab"); dpd_buf4_init(&RIjAb, EOM_R, C_irr, 0, 5, 0, 5, 0, "RIjAb"); } else if (params.eom_ref == 2) { dpd_file2_init(&RIA, EOM_R, C_irr, 0, 1, "RIA"); dpd_file2_init(&Ria, EOM_R, C_irr, 2, 3, "Ria"); dpd_buf4_init(&RIJAB, EOM_R, C_irr, 2, 7, 2, 7, 0, "RIJAB"); dpd_buf4_init(&Rijab, EOM_R, C_irr, 12, 17, 12, 17, 0, "Rijab"); dpd_buf4_init(&RIjAb, EOM_R, C_irr, 22, 28, 22, 28, 0, "RIjAb"); } fprintf(outfile," Root EOM Energy Delta E Res. Norm Conv?\n"); for (k=0;k<eom_params.cs_per_irrep[C_irr];++k) { #ifdef TIME_CCEOM timer_on("CALC RES"); #endif /* timing */ /* rezero residual vector for each root */ if (params.full_matrix) { R0 = 0.0; psio_write_entry(EOM_R, "R0", (char *) &R0, sizeof(double)); } dpd_file2_scm(&RIA, 0.0); dpd_buf4_scm(&RIjAb, 0.0); if (params.eom_ref > 0) { dpd_file2_scm(&Ria, 0.0); dpd_buf4_scm(&RIJAB, 0.0); dpd_buf4_scm(&Rijab, 0.0); } /* only one cc3 root can be sought */ if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0) && (eom_params.follow_root) ) { k = follow_root(L, alpha, C_irr); } converged[k] = 0; for (i=0;i<L;++i) { if (params.eom_ref == 0) { /* RHF residual */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpbycz(&CME, &SIA, &RIA, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&CME); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpbycz(&CMnEf, &SIjAb, &RIjAb, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", i); psio_read_entry(EOM_SIA, lbl, (char *) &(S0), sizeof(double)); sprintf(lbl, "%s %d", "C0", i); psio_read_entry(EOM_CME, lbl, (char *) &(C0), sizeof(double)); psio_read_entry(EOM_R, "R0", (char *) &(R0), sizeof(double)); R0 += -1.0*lambda[k]*alpha[i][k]*C0 + alpha[i][k]*S0; psio_write_entry(EOM_R, "R0", (char *) &(R0), sizeof(double)); } } else if (params.eom_ref == 1) { /* ROHF residual */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpbycz(&CME, &SIA, &RIA, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&CME); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpbycz(&CMnEf, &SIjAb, &RIjAb, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_axpbycz(&Cme, &Sia, &Ria, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&Cme); dpd_file2_close(&Sia); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_axpbycz(&CMNEF, &SIJAB, &RIJAB, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&SIJAB); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_axpbycz(&Cmnef, &Sijab, &Rijab, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Sijab); } else if (params.eom_ref == 2) { /* UHF residual */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpbycz(&CME, &SIA, &RIA, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&CME); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_axpbycz(&CMnEf, &SIjAb, &RIjAb, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_axpbycz(&Cme, &Sia, &Ria, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&Cme); dpd_file2_close(&Sia); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_axpbycz(&CMNEF, &SIJAB, &RIJAB, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&SIJAB); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, lbl); dpd_buf4_axpbycz(&Cmnef, &Sijab, &Rijab, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Sijab); } } #ifdef EOM_DEBUG if (params.eom_ref == 0) { dpd_buf4_sort(&RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&RIjbA, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA); dpd_buf4_close(&RIjbA); } else norm = norm_C(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb); fprintf(outfile,"Norm of residual vector %d before precondition %18.13lf\n",k,norm); #endif #ifdef TIME_CCEOM timer_off("CALC RES"); #endif /* timing */ /* moved back down 8-06 why was this ever before residual norm? if(params.eom_ref == 0) precondition_RHF(&RIA, &RIjAb, lambda[k]); else precondition(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb, lambda[k]); */ if (params.eom_ref == 0) { dpd_buf4_sort(&RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&RIjbA, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); if (!params.full_matrix) { norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA); } else { psio_read_entry(EOM_R, "R0", (char *) &R0, sizeof(double)); norm = norm_C_rhf_full(R0, &RIA, &RIjAb, &RIjbA); } } else norm = norm_C(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb); #ifdef EOM_DEBUG fprintf(outfile,"Norm of residual vector %d after precondition %18.13lf\n",k,norm); #endif fprintf(outfile,"%22d%15.10lf%11.2e%12.2e",k+1,lambda[k], lambda[k]-lambda_old[k], norm); /* Check for convergence and add new vector if not converged */ if ( (norm > eom_params.residual_tol) || (fabs(lambda[k]-lambda_old[k]) > eom_params.eval_tol) ) { fprintf(outfile,"%7s\n","N"); if(params.eom_ref == 0) precondition_RHF(&RIA, &RIjAb, lambda[k]); else precondition(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb, lambda[k]); if(params.eom_ref == 0) { /* if(params.local) { local_filter_T1(&RIA, 0); local_filter_T2(&RIjAb, 0); } */ /* Normalize R */ dpd_buf4_sort(&RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&RIjbA, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); if (!params.full_matrix) { norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA); } else { psio_read_entry(EOM_R, "R0", (char *) &R0, sizeof(double)); norm = norm_C_rhf_full(R0, &RIA, &RIjAb, &RIjbA); } dpd_buf4_close(&RIjbA); if (params.full_matrix) { R0 *= 1.0/norm; psio_write_entry(EOM_R, "R0", (char *) &R0, sizeof(double)); } dpd_file2_scm(&RIA, 1.0/norm); dpd_buf4_scm(&RIjAb, 1.0/norm); } else { norm = norm_C(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb); scm_C(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb, 1.0/norm); } #ifdef EOM_DEBUG fprintf(outfile,"Norm of residual vector af preconditioning %18.13lf\n",norm); #endif if(params.eom_ref == 0) schmidt_add_RHF(&RIA, &RIjAb, &numCs, C_irr); else schmidt_add(&RIA, &Ria, &RIJAB, &Rijab, &RIjAb, &numCs, C_irr); } else { fprintf(outfile,"%7s\n","Y"); ++num_converged; converged[k] = 1; } /* only one cc3 root can be sought */ if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0) ) { cc3_index = k; cc3_eval = lambda[k]; /* fprintf(outfile,"Setting CC3 eigenvalue to %15.10lf\n",cc3_eval); */ } } dpd_file2_close(&RIA); dpd_buf4_close(&RIjAb); if (params.eom_ref > 0) { dpd_file2_close(&Ria); dpd_buf4_close(&RIJAB); dpd_buf4_close(&Rijab); } for (i=0;i<eom_params.cs_per_irrep[C_irr];++i) lambda_old[i] = lambda[i]; free(lambda); if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0) ) { lambda_old[cc3_index] = cc3_eval; /* a hack to make Delta E work next iteration */ } /* restart with new B vectors if there are too many */ if (L >= vectors_per_root * eom_params.cs_per_irrep[C_irr]) { if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0) ) { restart(alpha, L, cc3_index+1, C_irr, 1, alpha_old, L_old, eom_params.collapse_with_last); L_old = L; L = cc3_index+1; if (eom_params.collapse_with_last) L *= 2; fprintf(outfile,"Collapsing to %d vector(s).\n",L); already_sigma = 0; ignore_G_old = 1; } else { restart(alpha, L, eom_params.cs_per_irrep[C_irr], C_irr, 1,alpha_old,L_old,eom_params.collapse_with_last); L_old = L; if (eom_params.collapse_with_last) L = 2 * eom_params.cs_per_irrep[C_irr]; else L = eom_params.cs_per_irrep[C_irr]; already_sigma = L; ignore_G_old = 1; } keep_going = 1; /* keep track of number of triples restarts */ if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage>0) ) { fprintf(outfile,"Change in CC3 energy from last iterated value %15.10lf\n", cc3_eval - cc3_last_converged_eval); cc3_last_converged_eval = cc3_eval; ++num_cc3_restarts; cc3_stage = 2; } } else { /* If any new vectors were added, then continue */ if (numCs > L) { keep_going = 1; L_old = L; L = numCs; } } ++iter; if (eom_params.restart_eom_cc3 && (cc3_stage==0)) { fprintf(outfile,"Jumping to EOM CC3 iterations\n"); keep_going = 0; } if ((keep_going == 0) && (iter < eom_params.max_iter)) { /* for CC3: done with EOM CCSD - now do EOM CC3 */ if ( (!strcmp(params.wfn,"EOM_CC3")) && (cc3_stage == 0) ) { fprintf(outfile, "Completed EOM_CCSD\n"); fprintf(outfile,"Collapsing to only %d vector(s).\n", eom_params.cs_per_irrep[C_irr]); if (!eom_params.restart_eom_cc3) { restart(alpha, L, eom_params.cs_per_irrep[C_irr], C_irr, 1,alpha_old,L_old,0); save_C_ccsd(eom_params.prop_root, C_irr); } cc3_last_converged_eval = cc3_eval = lambda_old[eom_params.prop_root]; fprintf(outfile,"Setting initial CC3 eigenvalue to %15.10lf\n",cc3_eval); L_old = L; L = eom_params.cs_per_irrep[C_irr]; eom_params.cs_per_irrep[C_irr] = 1; /* only get 1 CC3 solution */ keep_going = 1; already_sigma = 0; ignore_G_old = 1; iter = 0; cc3_stage = 1; vectors_per_root = eom_params.vectors_cc3; } else if( (!strcmp(params.wfn,"EOM_CC3")) && /* can't trust sigmas yet */ ( (cc3_stage == 1) || fabs(cc3_eval-cc3_last_converged_eval)>eom_params.eval_tol)) { /* for CC3: restart one time if no cc3_restarts have yet been done */ if (cc3_stage == 1) fprintf(outfile, "Forcing one restart with sigma recomputation.\n"); else fprintf(outfile,"Forcing restart to make sure new sigma vectors give same eigenvalue.\n"); fprintf(outfile,"Collapsing to only %d vector(s).\n", cc3_index+1); restart(alpha, L, cc3_index+1, C_irr, 1, alpha_old, L_old, 0); cc3_eval = lambda_old[cc3_index]; if (cc3_stage == 1) fprintf(outfile,"Change in CC3 energy from last iterated value %15.10lf\n", cc3_eval - 0.0); else fprintf(outfile,"Change in CC3 energy from last iterated value %15.10lf\n", cc3_eval-cc3_last_converged_eval); cc3_last_converged_eval = cc3_eval; fprintf(outfile,"Setting old CC3 eigenvalue to %15.10lf\n",cc3_eval); keep_going = 1; already_sigma = 0; ignore_G_old = 1; L_old = L; L = cc3_index+1; cc3_stage = 2; } else if (!strcmp(params.wfn,"EOM_CC3")) { /* for CC3: collapse to one final root and place in location 0 */ fprintf(outfile,"Collapsing to only %d vector(s).\n", cc3_index+1); restart(alpha, L, cc3_index+1, C_irr, 0, alpha_old, L_old, 0); if (cc3_index > 0) restart_with_root(cc3_index, C_irr); converged[0] = 1; cc3_eval = lambda_old[0] = lambda_old[cc3_index]; fprintf(outfile,"Change in CC3 energy from last iterated value %15.10lf\n", cc3_eval - cc3_last_converged_eval); } else { fprintf(outfile,"Collapsing to only %d vector(s).\n", eom_params.cs_per_irrep[C_irr]); restart(alpha, L, eom_params.cs_per_irrep[C_irr], C_irr, 0, alpha_old, L_old, 0); } } alpha_old = block_matrix(L_start_iter,L_start_iter); for (k=0;k<L_start_iter;++k) for (i=0;i<L_start_iter;++i) alpha_old[i][k] = alpha[i][k]; free_block(alpha); } free_block(G_old); fprintf(outfile,"\nProcedure converged for %d root(s).\n",num_converged); if (num_converged == eom_params.cs_per_irrep[C_irr]) { } else if (iter == eom_params.max_iter) { fprintf(outfile,"\nMaximum number of iterations exceeded, "); fprintf(outfile,"so not all roots converged!\n\n"); } else if ( (!strcmp(params.wfn,"EOM_CC3")) && (num_converged == 1) ) { } else { fprintf(outfile,"\nAlgorithm failure: No vectors could be added, "); fprintf(outfile,"though not all roots converged!\n\n"); } /* write Cs and energies to RAMPS file */ write_Rs(C_irr, lambda_old, converged); /* compute R0 and normalize - also do any orthogonality checks */ if (params.eom_ref == 0) rzero_rhf(C_irr, converged); else rzero(C_irr, converged); if (num_converged > 0) { fprintf(outfile,"\nFinal Energetic Summary for Converged Roots of Irrep %s\n", moinfo.labels[moinfo.sym^C_irr]); fprintf(outfile," Excitation Energy Total Energy\n"); fprintf(outfile," (eV) (cm^-1) (au) (au)\n"); for (i=0;i<eom_params.cs_per_irrep[C_irr];++i) { if (converged[i] == 1) { if (!params.full_matrix) totalE =lambda_old[i]+moinfo.eref+moinfo.ecc; else totalE =lambda_old[i]+moinfo.eref; /* save the state energy */ eom_params.state_energies[num_converged_index] = totalE; fprintf(outfile,"EOM State %d %10.3lf %10.1lf %14.10lf %17.12lf\n", ++num_converged_index, lambda_old[i]* _hartree2ev, lambda_old[i]* _hartree2wavenumbers, lambda_old[i], totalE); /* print out largest components of wavefunction */ if(params.eom_ref == 0) { fprintf(outfile, "\nLargest components of excited wave function #%d:\n", num_converged_index); sprintf(lbl, "%s %d %d", "RIA", C_irr, i); dpd_file2_init(&CME, CC_RAMPS, C_irr, 0, 1, lbl); amp_write_T1(&CME, 5, outfile); dpd_file2_close(&CME); sprintf(lbl, "%s %d %d", "RIjAb", C_irr, i); dpd_buf4_init(&CMnEf, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); amp_write_T2(&CMnEf, 5, outfile); dpd_buf4_close(&CMnEf); fprintf(outfile, "\n"); } else if (params.eom_ref == 1) { fprintf(outfile, "\nLargest components of excited wave function #%d:\n", num_converged_index); fprintf(outfile,"\tRIA alpha\n"); sprintf(lbl, "%s %d %d", "RIA", C_irr, i); dpd_file2_init(&CME, CC_RAMPS, C_irr, 0, 1, lbl); amp_write_T1(&CME, 5, outfile); dpd_file2_close(&CME); fprintf(outfile,"\tRia beta\n"); sprintf(lbl, "%s %d %d", "Ria", C_irr, i); dpd_file2_init(&Cme, CC_RAMPS, C_irr, 0, 1, lbl); amp_write_T1(&Cme, 5, outfile); dpd_file2_close(&Cme); fprintf(outfile,"\tRIJAB alpha\n"); sprintf(lbl, "%s %d %d", "RIJAB", C_irr, i); dpd_buf4_init(&CMNEF, CC_RAMPS, C_irr, 0, 5, 2, 7, 0, lbl); amp_write_T2(&CMNEF, 5, outfile); dpd_buf4_close(&CMNEF); fprintf(outfile,"\tRijab beta\n"); sprintf(lbl, "%s %d %d", "Rijab", C_irr, i); dpd_buf4_init(&Cmnef, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, lbl); amp_write_T2(&Cmnef, 5, outfile); dpd_buf4_close(&Cmnef); fprintf(outfile,"\tRIjAb alpha,beta\n"); sprintf(lbl, "%s %d %d", "RIjAb", C_irr, i); dpd_buf4_init(&CMnEf, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); amp_write_T2(&CMnEf, 5, outfile); dpd_buf4_close(&CMnEf); } else if (params.eom_ref == 2) { fprintf(outfile, "\nLargest components of excited wave function #%d:\n", num_converged_index); fprintf(outfile,"\tRIA alpha\n"); sprintf(lbl, "%s %d %d", "RIA", C_irr, i); dpd_file2_init(&CME, CC_RAMPS, C_irr, 0, 1, lbl); amp_write_T1(&CME, 5, outfile); dpd_file2_close(&CME); fprintf(outfile,"\tRia beta\n"); sprintf(lbl, "%s %d %d", "Ria", C_irr, i); dpd_file2_init(&Cme, CC_RAMPS, C_irr, 2, 3, lbl); amp_write_T1(&Cme, 5, outfile); dpd_file2_close(&Cme); fprintf(outfile,"\tRIJAB alpha\n"); sprintf(lbl, "%s %d %d", "RIJAB", C_irr, i); dpd_buf4_init(&CMNEF, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, lbl); amp_write_T2(&CMNEF, 5, outfile); dpd_buf4_close(&CMNEF); fprintf(outfile,"\tRijab beta\n"); sprintf(lbl, "%s %d %d", "Rijab", C_irr, i); dpd_buf4_init(&Cmnef, CC_RAMPS, C_irr, 12, 17, 12, 17, 0, lbl); amp_write_T2(&Cmnef, 5, outfile); dpd_buf4_close(&Cmnef); fprintf(outfile,"\tRIjAb alpha,beta\n"); sprintf(lbl, "%s %d %d", "RIjAb", C_irr, i); dpd_buf4_init(&CMnEf, CC_RAMPS, C_irr, 22, 28, 22, 28, 0, lbl); amp_write_T2(&CMnEf, 5, outfile); dpd_buf4_close(&CMnEf); } } /* for CC3 debugging */ /* sort_C(0, C_irr); init_S1(0, C_irr); init_S2(0, C_irr); sigmaSS(0, C_irr); sigmaSD(0, C_irr); sigmaDS(0, C_irr); sigmaDD(0, C_irr); cc3_HC1(0, C_irr); norm_HC1(0, C_irr); cc3_HC1ET1(0, C_irr); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, "SIA 0"); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, "Sia 0"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, "SIJAB 0"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, "Sijab 0"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, "SIjAb 0"); norm = norm_C(&SIA, &Sia, &SIJAB, &Sijab, &SIjAb); fprintf(outfile,"<Sigma(H CCSD)|Sigma(H CCSD)> = %15.10lf\n", norm*norm); dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); sigmaCC3(0, C_irr,lambda_old[0]); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, "SIA 0"); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, "Sia 0"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, "SIJAB 0"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, "Sijab 0"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, "SIjAb 0"); norm = norm_C(&SIA, &Sia, &SIJAB, &Sijab, &SIjAb); fprintf(outfile,"<Sigma(H CC3)|Sigma(H CC3)> = %15.10lf\n", norm*norm); dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); */ } /* psio_write_entry(CC_INFO, "CCEOM Energy", (char *) &(lambda_old[eom_params.prop_root-1]), sizeof(double)); i = moinfo.sym ^ C_irr; psio_write_entry(CC_INFO, "CCEOM State Irrep", (char *) &i, sizeof(int)); fprintf(outfile,"\nCCEOM energy %.10lf and state irrep %d written to CC_INFO.\n", lambda_old[eom_params.prop_root-1], i); */ } fprintf(outfile,"\n"); free(lambda_old); free_block(alpha_old); free(converged); /* I don't want to do this for local CC calculations -TDC */ /* if(!params.local) { for(i=CC_TMP; i<CC_RAMPS; i++) psio_close(i,0); for(i=CC_TMP; i<CC_RAMPS; i++) psio_open(i,0); } */ } /* Save the energy vector to checkpoint */ chkpt_init(PSIO_OPEN_OLD); keyw = chkpt_build_keyword("EOM Number of States"); psio_write_entry(PSIF_CHKPT, keyw, (char *) &(eom_params.number_of_states), sizeof(int)); free(keyw); keyw = chkpt_build_keyword("EOM State Energies"); psio_write_entry(PSIF_CHKPT, keyw, (char *) eom_params.state_energies, eom_params.number_of_states * sizeof(double)); free(keyw); chkpt_close(); fprintf(outfile,"\tTotal # of sigma evaluations: %d\n",nsigma_evaluations); return; } void init_C0(int i) { char lbl[32]; double zip = 0.0; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "C0", i); psio_write_entry(EOM_CME, lbl, (char *) &(zip), sizeof(double)); } } void init_S0(int i) { char lbl[32]; double zip = 0.0; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "S0", i); psio_write_entry(EOM_SIA, lbl, (char *) &(zip), sizeof(double)); } } /* zeroes ith CME (and Cme) vectors on disk */ void init_C1(int i, int C_irr ){ dpdfile2 CME, Cme; char lbl[32]; double zip = 0.0; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_scm(&CME, 0.0); dpd_file2_close(&CME); if (params.full_matrix) { sprintf(lbl, "%s %d", "C0", i); psio_write_entry(EOM_CME, lbl, (char *) &(zip), sizeof(double)); } } else { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); scm_C1(&CME, &Cme, 0.0); dpd_file2_close(&CME); dpd_file2_close(&Cme); } } /* zeroes ith SIA (and Sia) vectors on disk */ void init_S1(int i, int C_irr) { dpdfile2 SIA, Sia; char lbl[32]; double zip = 0.0; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_scm(&SIA, 0.0); dpd_file2_close(&SIA); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", i); psio_write_entry(EOM_SIA, lbl, (char *) &(zip), sizeof(double)); } } else { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); if (params.eom_ref == 1) dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); scm_C1(&SIA, &Sia, 0.0); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } } /* zeroes ith CMnEf (+ CMNEF + Cmnef) on disk */ void init_C2(int i, int C_irr) { dpdbuf4 CMNEF, Cmnef, CMnEf; char lbl[32]; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&CMnEf, 0.0); dpd_buf4_close(&CMnEf); } else { sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); if (params.eom_ref == 1) dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); else if (params.eom_ref == 2) dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); if (params.eom_ref == 1) dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); else if (params.eom_ref == 2) dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); /* scm_C2(&CMNEF, &Cmnef, &CMnEf, 0.0); */ dpd_buf4_scm(&CMNEF, 0.0); dpd_buf4_scm(&Cmnef, 0.0); dpd_buf4_scm(&CMnEf, 0.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&Cmnef); dpd_buf4_close(&CMnEf); } } void init_S2(int i, int C_irr) { dpdbuf4 SIJAB, Sijab, SIjAb; char lbl[32]; if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&SIjAb, 0.0); dpd_buf4_close(&SIjAb); } else { sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); if (params.eom_ref == 1) dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, lbl); else if (params.eom_ref == 2) dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); if (params.eom_ref == 1) dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); else if (params.eom_ref == 2) dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); scm_C2(&SIJAB, &Sijab, &SIjAb, 0.0); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); } } }} // namespace psi::cceom ����������������������������������������������������������������������������������������psi3/src/bin/cceom/diagSS.cc������������������������������������������������������������������������0000644�0001015�0000765�00000064160�10757640026�014325� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { #include <physconst.h> void sigmaSS(int index, int C_irr); void cc2_sigmaSS(int index, int C_irr); void precondition_SS(dpdfile2 *RIA, dpdfile2 *Ria, double eval); void schmidt_add_SS(dpdfile2 *RIA, dpdfile2 *Ria, int C_irr, int *numCs); void precondition_SS_RHF(dpdfile2 *RIA, double eval); void schmidt_add_SS_RHF(dpdfile2 *RIA, int C_irr, int *numCs); void restart_SS(double **alpha, int L, int num, int C_irr); void dgeev_eom(int L, double **G, double *evals, double **alpha); double norm_C1(dpdfile2 *C1A, dpdfile2 *C1B); double norm_C1_rhf(dpdfile2 *C1A); double scm_C1(dpdfile2 *C1A, dpdfile2 *C1B, double a); void diagSS(int C_irr) { dpdfile2 Fmi, FMI, Fae, FAE, Fme, FME; dpdfile2 CME, Cme, C, SIA, Sia, RIA, Ria; dpdbuf4 CMNEF, Cmnef, CMnEf, W; char lbl[32], lbl2[32]; int lwork, info, get_right_ev = 1, get_left_ev = 0; int L,h,i,j,k,a,C_index,errcod,keep_going=1,numCs,iter=0; double norm, tval, *lambda, *lambda_old, zero=0.0; double **G, *work, *evals_complex, **alpha, **evectors_left; int nirreps, *openpi, *occpi, *virtpi, range; int *aoccpi, *avirtpi, *boccpi, *bvirtpi; int *converged, num_converged, num_roots; int begin_occ, begin_virt, end_virt, dim_SS = 0; int pf, cnt, irr_occ, irr_virt; nirreps = moinfo.nirreps; openpi = moinfo.openpi; occpi = moinfo.occpi; virtpi = moinfo.virtpi; if (params.eom_ref == 2) { /* UHF */ aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; } range = eom_params.excitation_range; pf = eom_params.print_singles; if (pf) fprintf(outfile,"\n\n"); /* a bunch of tedious code to setup reasonable HOMO-LUMO guess vectors */ C_index=0; if (2 * range * range * nirreps < eom_params.cs_per_irrep[C_irr]) range = eom_params.cs_per_irrep[C_irr] / 2; if(!params.local) { /* guesses should already be built for local mode */ for (cnt=0; cnt<nirreps; ++cnt) { /* cnt loops over dp's to get C_irr */ irr_occ = dpd_dp[C_irr][cnt][0]; irr_virt = dpd_dp[C_irr][cnt][1]; /* C_irr = irr_occ * irr_virt */ if (params.eom_ref == 0) { /* ref = RHF; eom_ref = RHF */ begin_occ = MAX(occpi[irr_occ]-range, 0); end_virt = MIN(range, virtpi[irr_virt]); for (i=begin_occ; i < occpi[irr_occ]; ++i) for (a=0; a < end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); CME.matrix[cnt][i][a] = 1.0/sqrt(2.0); dpd_file2_mat_wrt(&CME); dpd_file2_mat_close(&CME); dpd_file2_close(&CME); } } /* eom_ref = ROHF, closed shell */ else if ((params.eom_ref < 2) && (moinfo.iopen == 0)) { begin_occ = MAX(occpi[irr_occ]-range, 0); end_virt = MIN(range, virtpi[irr_virt]); for (i=begin_occ; i < occpi[irr_occ]; ++i) for (a=0; a < end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); CME.matrix[cnt][i][a] = 1.0/sqrt(2.0); dpd_file2_mat_wrt(&CME); dpd_file2_mat_close(&CME); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_mat_init(&Cme); Cme.matrix[cnt][i][a] = 1.0/sqrt(2.0); dpd_file2_mat_wrt(&Cme); dpd_file2_mat_close(&Cme); dpd_file2_close(&Cme); ++C_index; sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); CME.matrix[cnt][i][a] = 1.0/sqrt(2.0); dpd_file2_mat_wrt(&CME); dpd_file2_mat_close(&CME); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_mat_init(&Cme); Cme.matrix[cnt][i][a] = -1.0/sqrt(2.0); dpd_file2_mat_wrt(&Cme); dpd_file2_mat_close(&Cme); dpd_file2_close(&Cme); } } else if (params.eom_ref == 1) { /* open-shell ROHF */ /* alpha excitations */ begin_occ = MAX(occpi[irr_occ]-range, 0); end_virt = MIN( virtpi[irr_virt]-openpi[irr_virt], range); for (i=begin_occ; i < occpi[irr_occ] ; ++i) for (a=0; a<end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); CME.matrix[cnt][i][a] = 1.0; dpd_file2_mat_wrt(&CME); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_mat_init(&Cme); dpd_file2_mat_wrt(&Cme); dpd_file2_close(&Cme); } /* beta excitations into open shells */ begin_occ = MAX(occpi[irr_occ]-openpi[irr_occ]-range, 0); begin_virt = virtpi[irr_virt] - openpi[irr_virt]; for (i=begin_occ; i < occpi[irr_occ]-openpi[irr_occ]; ++i) for (a=begin_virt; a < virtpi[irr_virt]; ++a, ++C_index) { sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_mat_init(&Cme); Cme.matrix[cnt][i][a] = 1.0; dpd_file2_mat_wrt(&Cme); dpd_file2_close(&Cme); sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); dpd_file2_mat_wrt(&CME); dpd_file2_close(&CME); } /* beta excitations into unoccupied orbitals */ begin_occ = MAX(occpi[irr_occ]-openpi[irr_occ]-range, 0); end_virt = MIN(range - openpi[irr_virt], 0); for (i=begin_occ; i < occpi[irr_occ]-openpi[irr_occ]; ++i) for (a=0; a < end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_mat_init(&Cme); Cme.matrix[cnt][i][a] = 1.0; dpd_file2_mat_wrt(&Cme); dpd_file2_close(&Cme); sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); dpd_file2_mat_wrt(&CME); dpd_file2_close(&CME); } } else { /* UHF */ /* alpha excitations */ begin_occ = MAX(aoccpi[irr_occ]-range, 0); end_virt = MIN(avirtpi[irr_virt], range); for (i=begin_occ; i < aoccpi[irr_occ] ; ++i) for (a=0; a<end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); CME.matrix[cnt][i][a] = 1.0; dpd_file2_mat_wrt(&CME); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_mat_init(&Cme); dpd_file2_mat_wrt(&Cme); dpd_file2_close(&Cme); } begin_occ = MAX(boccpi[irr_occ]-range, 0); end_virt = MIN(bvirtpi[irr_virt], range); for (i=begin_occ; i < boccpi[irr_occ] ; ++i) for (a=0; a<end_virt; ++a, ++C_index) { sprintf(lbl, "%s %d", "CME", C_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CME); dpd_file2_mat_wrt(&CME); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "Cme", C_index); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_mat_init(&Cme); Cme.matrix[cnt][i][a] = 1.0; dpd_file2_mat_wrt(&Cme); dpd_file2_close(&Cme); } } } if (pf) fprintf(outfile,"%d initial single excitation guesses\n",C_index); if (C_index == 0) { fprintf(outfile, "No intial guesses obtained for %s state \n", moinfo.labels[moinfo.sym^C_irr]); exit(1); } } else { C_index = eom_params.cs_per_irrep[0]; } /* end if(!params.local) */ /* show initial guesses */ /* for (i=0; i<C_index ;++i) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_print(&CME, outfile); dpd_file2_close(&CME); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_print(&Cme, outfile); dpd_file2_close(&Cme); } } */ if (eom_params.skip_diagSS) { fprintf(outfile,"\nSkipping diagonalization of Hbar SS block.\n"); return; } fflush(outfile); /* Setup residual vector file */ dpd_file2_init(&RIA, EOM_R, C_irr, 0, 1, "RIA"); dpd_file2_mat_init(&RIA); dpd_file2_mat_wrt(&RIA); dpd_file2_close(&RIA); if (params.eom_ref > 0) { if (params.eom_ref == 1) dpd_file2_init(&Ria, EOM_R, C_irr, 0, 1, "Ria"); else if (params.eom_ref == 2) dpd_file2_init(&Ria, EOM_R, C_irr, 2, 3, "Ria"); dpd_file2_mat_init(&Ria); dpd_file2_mat_wrt(&Ria); dpd_file2_close(&Ria); } /* arrays must be dimensioned with at least the final number of roots - even though num_roots may be limited until the first collapse by the number of good initial guesses obtained above. */ L = num_roots = C_index; i = MAX(eom_params.cs_per_irrep[C_irr], C_index); converged = init_int_array(i); lambda_old = init_array(i); if (pf) fprintf(outfile,"\n"); while ((keep_going == 1) && (iter < eom_params.max_iter_SS)) { if (pf) fprintf(outfile,"Iter=%-4d L=%-4d", iter+1, L); keep_going = 0; numCs = L; num_converged = 0; /* zero S vectors */ for (i=0;i<L;++i) { if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_scm(&SIA, 0.0); dpd_file2_close(&SIA); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", i); psio_write_entry(EOM_SIA, lbl, (char *) &zero, sizeof(double)); } } if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); if (params.eom_ref == 1) dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); scm_C1(&SIA, &Sia, 0.0); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } } if(!strcmp(params.wfn,"EOM_CC2")) { for (i=0;i<L;++i) cc2_sigmaSS(i,C_irr); } else { for (i=0;i<L;++i) sigmaSS(i,C_irr); } G = block_matrix(L,L); for (i=0;i<L;++i) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); } for (j=0;j<L;++j) { if(params.eom_ref == 0) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); tval = 2.0 * dpd_file2_dot(&CME, &SIA); dpd_file2_close(&SIA); } else if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", j); if (params.eom_ref == 1) dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); tval = dpd_file2_dot(&CME, &SIA); tval += dpd_file2_dot(&Cme, &Sia); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } G[i][j] = tval; } dpd_file2_close(&CME); if (params.eom_ref > 0) dpd_file2_close(&Cme); } /* print_mat(G, L, L, outfile); */ lambda = init_array(L); /* holds real part of eigenvalues of G */ alpha = block_matrix(L,L); /* will hold eigenvectors of G */ dgeev_eom(L, G, lambda, alpha); eigsort(lambda, alpha, L); /* eivout(alpha, lambda, L, L, outfile); */ free_block(G); if (pf) fprintf(outfile, " Root EOM Energy Delta E Res. Norm Conv?\n"); fflush(outfile); dpd_file2_init(&RIA, EOM_R, C_irr, 0, 1, "RIA"); if (params.eom_ref == 1) dpd_file2_init(&Ria, EOM_R, C_irr, 0, 1, "Ria"); else if (params.eom_ref == 2) dpd_file2_init(&Ria, EOM_R, C_irr, 2, 3, "Ria"); for (k=0;k<num_roots;++k) { dpd_file2_scm(&RIA, 0.0); if (params.eom_ref > 0) dpd_file2_scm(&Ria, 0.0); converged[k] = 0; for (i=0;i<L;++i) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpbycz(&CME, &SIA, &RIA, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&CME); dpd_file2_close(&SIA); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Sia", i); if (params.eom_ref == 1) dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "Cme", i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_axpbycz(&Cme, &Sia, &Ria, -1.0*lambda[k]*alpha[i][k], alpha[i][k], 1.0); dpd_file2_close(&Cme); dpd_file2_close(&Sia); } } if (params.eom_ref == 0) precondition_SS_RHF(&RIA, lambda[k]); else precondition_SS(&RIA, &Ria, lambda[k]); if (params.eom_ref == 0) norm = norm_C1_rhf(&RIA); else norm = norm_C1(&RIA, &Ria); if (pf) fprintf(outfile,"%6d%15.10lf%11.2e%12.2e",k+1,lambda[k], lambda[k]-lambda_old[k], norm); if ( (norm > eom_params.residual_tol_SS) || (fabs(lambda[k]-lambda_old[k]) > eom_params.eval_tol_SS) ) { if (pf) fprintf(outfile,"%7s\n","N"); /* if (params.eom_ref == 0) precondition_SS_RHF(&RIA, lambda[k]); else precondition_SS(&RIA, &Ria, lambda[k]); */ /* normalize preconditioned residual */ if (params.eom_ref == 0) { norm = norm_C1_rhf(&RIA); dpd_file2_scm(&RIA, 1.0/norm); } else { norm = norm_C1(&RIA, &Ria); dpd_file2_scm(&RIA, 1.0/norm); dpd_file2_scm(&Ria, 1.0/norm); } if(params.eom_ref == 0) schmidt_add_SS_RHF(&RIA, C_irr, &numCs); else schmidt_add_SS(&RIA, &Ria, C_irr, &numCs); } else { if (pf) fprintf(outfile,"%7s\n","Y"); ++num_converged; converged[k] = 1; } fflush(outfile); } dpd_file2_close(&RIA); if (params.eom_ref > 0) dpd_file2_close(&Ria); for (i=0;i<num_roots;++i) lambda_old[i] = lambda[i]; free(lambda); if ( (iter == 2) || (L > eom_params.vectors_per_root_SS * eom_params.cs_per_irrep[C_irr])) { restart_SS(alpha, L, eom_params.cs_per_irrep[C_irr], C_irr); L = num_roots = eom_params.cs_per_irrep[C_irr]; keep_going = 1; free_block(alpha); } else { if (numCs > L) { /* successfully added vectors */ keep_going = 1; free_block(alpha); L = numCs; } } ++iter; } if (pf) fprintf(outfile,"\nLowest eigenvalues of HBar Singles-Singles Block\n"); if (pf) fprintf(outfile,"Root Excitation Energy Total Energy\n"); if (pf) fprintf(outfile," (eV) (cm^-1) (au)\n"); if (pf) for (i=0;i<num_roots;++i) if (pf) fprintf(outfile,"%4d%12.3lf%12.2lf%20.10lf\n",i+1, lambda_old[i]* _hartree2ev, lambda_old[i]* _hartree2wavenumbers, lambda_old[i]+moinfo.eref+moinfo.ecc); free(lambda_old); free(converged); /* collapse solutions to one vector each */ restart_SS(alpha, L, eom_params.cs_per_irrep[C_irr], C_irr); free_block(alpha); if (pf) fprintf(outfile,"\n"); fflush(outfile); return; } void precondition_SS(dpdfile2 *RIA, dpdfile2 *Ria, double eval) { dpdfile2 DIA, Dia; int h, nirreps, i, j, a, b, ij, ab, C_irr; double tval; C_irr = RIA->my_irrep; nirreps = RIA->params->nirreps; dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); dpd_file2_mat_rd(&DIA); for(h=0; h < nirreps; h++) for(i=0; i < RIA->params->rowtot[h]; i++) for(a=0; a < RIA->params->coltot[h^C_irr]; a++) { tval = eval - DIA.matrix[h][i][a]; if (fabs(tval) > 0.0001) RIA->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); dpd_file2_close(&DIA); dpd_file2_mat_init(Ria); dpd_file2_mat_rd(Ria); if (params.eom_ref == 1) dpd_file2_init(&Dia, EOM_D, C_irr, 0, 1, "Dia"); else if (params.eom_ref == 2) dpd_file2_init(&Dia, EOM_D, C_irr, 2, 3, "Dia"); dpd_file2_mat_init(&Dia); dpd_file2_mat_rd(&Dia); for(h=0; h < nirreps; h++) for(i=0; i < Ria->params->rowtot[h]; i++) for(a=0; a < Ria->params->coltot[h^C_irr]; a++) { tval = eval - Dia.matrix[h][i][a]; if (fabs(tval) > 0.0001) Ria->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(Ria); dpd_file2_mat_close(Ria); dpd_file2_close(&Dia); return; } void precondition_SS_RHF(dpdfile2 *RIA, double eval) { dpdfile2 DIA; int C_irr, h, nirreps, i, j, a, b, ij, ii, ab; double tval; psio_address next; /* Local correlation decs */ int nso, nocc, nvir; double *T1tilde, *T1bar; nirreps = RIA->params->nirreps; C_irr = RIA->my_irrep; if(params.local && local.filter_singles) { nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); for(i=0; i < nocc; i++) { ii = i * nocc +i; if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(2); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(RIA->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); for(a=0; a < local.pairdom_nrlen[ii]; a++) { tval = eval + local.eps_occ[i] - local.eps_vir[ii][a]; if(fabs(tval) > 0.0001) T1bar[a] /= tval; /* else T1bar[a] = 0.0; */ } /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(RIA->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); /* Free Local Memory */ for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); } else { dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); dpd_file2_mat_rd(&DIA); for(h=0; h < nirreps; h++) for(i=0; i < RIA->params->rowtot[h]; i++) for(a=0; a < RIA->params->coltot[h^C_irr]; a++) { tval = eval - DIA.matrix[h][i][a]; if (fabs(tval) > 0.0001) RIA->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); dpd_file2_close(&DIA); } return; } void schmidt_add_SS(dpdfile2 *RIA, dpdfile2 *Ria, int C_irr, int *numCs) { double dotval, norm; int i, I; dpdfile2 Cme, CME; char CME_lbl[32], Cme_lbl[32], CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; for (i=0; i<*numCs; i++) { sprintf(CME_lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); sprintf(Cme_lbl, "%s %d", "Cme", i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dotval = dpd_file2_dot(RIA, &CME); dotval += dpd_file2_dot(Ria, &Cme); dpd_file2_axpy(&CME, RIA, -1.0*dotval, 0); dpd_file2_axpy(&Cme, Ria, -1.0*dotval, 0); dpd_file2_close(&CME); dpd_file2_close(&Cme); } norm = norm_C1(RIA, Ria); if (norm < eom_params.schmidt_add_residual_tol) { return; } else { scm_C1(RIA, Ria, 1.0/norm); sprintf(CME_lbl, "%s %d", "CME", *numCs); sprintf(Cme_lbl, "%s %d", "Cme", *numCs); dpd_file2_copy(RIA, EOM_CME, CME_lbl); dpd_file2_copy(Ria, EOM_Cme, Cme_lbl); ++(*numCs); } return; } void schmidt_add_SS_RHF(dpdfile2 *RIA, int C_irr, int *numCs) { double dotval, norm; int i, I; dpdfile2 CME; char CME_lbl[32], Cme_lbl[32]; for (i=0; i<*numCs; i++) { sprintf(CME_lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dotval = 2.0 * dpd_file2_dot(RIA, &CME); dpd_file2_axpy(&CME, RIA, -1.0*dotval, 0); dpd_file2_close(&CME); } norm = norm_C1_rhf(RIA); if (norm < eom_params.schmidt_add_residual_tol) { return; } else { dpd_file2_scm(RIA, 1.0/norm); sprintf(CME_lbl, "%s %d", "CME", *numCs); dpd_file2_copy(RIA, EOM_CME, CME_lbl); ++(*numCs); } return; } void restart_SS(double **alpha, int L, int num, int C_irr) { int i,j,I; char lbl[20]; dpdfile2 C1, CME, Cme, CME2, Cme2; dpdbuf4 C2, CMNEF, Cmnef, CMnEf; double norm, dotval; for (I=1;I<num;++I) { for (i=0; i<I; i++) { dotval = 0.0; for (j=0;j<L;++j) { dotval += alpha[j][i] * alpha[j][I]; } for (j=0; j<L; j++) alpha[j][I] -= dotval * alpha[j][i]; } dotval = 0.0; for (j=0;j<L;++j) dotval += alpha[j][I] * alpha[j][I]; norm = sqrt(dotval); for (j=0;j<L;++j) alpha[j][I] = alpha[j][I]/norm; } for (i=0; i<num; ++i) { sprintf(lbl, "%s %d", "CME", L+i); dpd_file2_init(&C1, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_scm(&C1, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "CME", j); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpy(&CME, &C1, alpha[j][i], 0); dpd_file2_close(&CME); } dpd_file2_close(&C1); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", L+i); if (params.eom_ref == 1) dpd_file2_init(&C1, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&C1, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_scm(&C1, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "Cme", j); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_axpy(&Cme, &C1, alpha[j][i],0); dpd_file2_close(&Cme); } dpd_file2_close(&C1); } } for (i=0; i<num; ++i) { sprintf(lbl, "%s %d", "CME", L+i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_copy(&CME, EOM_CME, lbl); dpd_file2_close(&CME); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", L+i); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_copy(&Cme, EOM_Cme, lbl); dpd_file2_close(&Cme); } } return; } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/FDD.cc���������������������������������������������������������������������������0000644�0001015�0000765�00000025653�10757640026�013554� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /*! \defgroup CCEOM cceom: Equation-of-Motion Coupled-Cluster */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-doubles block contribution to a Sigma vector stored at Sigma plus 'i' */ void FDD(int i, int C_irr) { dpdfile2 FAE, Fae, FMI, Fmi; dpdbuf4 SIJAB, Sijab, SIjAb, FP, FM; dpdbuf4 CMNEF, Cmnef, CMnEf, X, X2, Z, Z2, Z3; char CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32], CmNeF_lbl[32]; char SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIjAb += Fbe * CIjAe - FAE * CIjbE */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fbe Z(Ij,Ab)"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract424(&CMnEf, &FAE, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "FDD_Fbe Z(jI,bA)"); dpd_buf4_init(&Z2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fbe Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_axpy(&Z2, &SIjAb, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&Z2); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("FDD_Fbe",i,C_irr); #endif /* SIjAb -= FMJ * CImAb - FMI * CjMAb */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fmj Z(Ij,Ab)"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract244(&FMI, &CMnEf, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "FDD_Fmj Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "FDD_Fmj Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("FDD_Fmj",i,C_irr); #endif } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(CmNeF_lbl, "%s %d", "CmNeF", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += FBE * CIJAE - FAE * CIJBE */ dpd_buf4_init(&FP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEP"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, CMNEF_lbl); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract424(&CMNEF, &FAE, &FP, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMNEF); dpd_buf4_sort(&FP, EOM_TMP, pqsr, 2, 5, "FDD_FBEM"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&FP, &SIJAB, 1.0); dpd_buf4_close(&FP); dpd_buf4_init(&FM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEM"); dpd_buf4_axpy(&FM, &SIJAB, -1.0); dpd_buf4_close(&FM); dpd_buf4_close(&SIJAB); /* Sijab += Fbe * Cijae - Fae * Cijbe */ dpd_buf4_init(&FP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEP"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 5, 2, 7, 0, Cmnef_lbl); dpd_file2_init(&Fae, CC_OEI, H_IRR, 1, 1, "Fae"); dpd_contract424(&Cmnef, &Fae, &FP, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&Fae); dpd_buf4_close(&Cmnef); dpd_buf4_sort(&FP, EOM_TMP, pqsr, 2, 5, "FDD_FBEM"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&FP, &Sijab, 1.0); dpd_buf4_close(&FP); dpd_buf4_init(&FM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEM"); dpd_buf4_axpy(&FM, &Sijab, -1.0); dpd_buf4_close(&FM); dpd_buf4_close(&Sijab); /* SIjAb += Fbe * CIjAe - FAE * CIjbE */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&Fae, CC_OEI, H_IRR, 1, 1, "Fae"); dpd_contract424(&CMnEf, &Fae, &SIjAb, 3, 1, 0, 1.0, 1.0); dpd_file2_close(&Fae); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract244(&FAE, &CMnEf, &SIjAb, 1, 2, 1, 1.0, 1.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("Fbe_FDD ",i,C_irr); #endif /* SIJAB -= FMJ * CIMAB - FMI * CJMAB */ dpd_buf4_init(&FM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJM"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, CMNEF_lbl); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract424(&CMNEF, &FMI, &FM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMNEF); dpd_buf4_sort(&FM, EOM_TMP, qprs, 0, 7, "FDD_FMJP"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&FM, &SIJAB, -1.0); dpd_buf4_close(&FM); dpd_buf4_init(&FP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJP"); dpd_buf4_axpy(&FP, &SIJAB, 1.0); dpd_buf4_close(&FP); dpd_buf4_close(&SIJAB); /* Sijab -= Fmj * Cimab - Fmi * Cjmab */ dpd_buf4_init(&FM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJM"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 0, 7, 2, 7, 0, Cmnef_lbl); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 0, 0, "Fmi"); dpd_contract424(&Cmnef, &Fmi, &FM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&Fmi); dpd_buf4_close(&Cmnef); dpd_buf4_sort(&FM, EOM_TMP, qprs, 0, 7, "FDD_FMJP"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 0, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&FM, &Sijab, -1.0); dpd_buf4_close(&FM); dpd_buf4_init(&FP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJP"); dpd_buf4_axpy(&FP, &Sijab, 1.0); dpd_buf4_close(&FP); dpd_buf4_close(&Sijab); /* SIjAb -= Fmj * CImAb - FMI * CjMAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 0, 0, "Fmi"); dpd_contract424(&CMnEf, &Fmi, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_file2_close(&Fmi); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract244(&FMI, &CMnEf, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("Fmj_DD",i,C_irr); #endif } else if (params.eom_ref == 2) { /* UHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(CmNeF_lbl, "%s %d", "CmNeF", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += FBE * CIJAE - FAE * CIJBE */ dpd_buf4_init(&FP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEP"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, CMNEF_lbl); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract424(&CMNEF, &FAE, &FP, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMNEF); dpd_buf4_sort(&FP, EOM_TMP, pqsr, 2, 5, "FDD_FBEM"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&FP, &SIJAB, 1.0); dpd_buf4_close(&FP); dpd_buf4_init(&FM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "FDD_FBEM"); dpd_buf4_axpy(&FM, &SIJAB, -1.0); dpd_buf4_close(&FM); dpd_buf4_close(&SIJAB); /* Sijab += Fbe * Cijae - Fae * Cijbe */ dpd_buf4_init(&FP, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "FDD_FbePB"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 15, 12, 17, 0, Cmnef_lbl); dpd_file2_init(&Fae, CC_OEI, H_IRR, 3, 3, "Fae"); dpd_contract424(&Cmnef, &Fae, &FP, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&Fae); dpd_buf4_close(&Cmnef); dpd_buf4_sort(&FP, EOM_TMP, pqsr, 12, 15, "FDD_FbeMB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&FP, &Sijab, 1.0); dpd_buf4_close(&FP); dpd_buf4_init(&FM, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "FDD_FbeMB"); dpd_buf4_axpy(&FM, &Sijab, -1.0); dpd_buf4_close(&FM); dpd_buf4_close(&Sijab); /* SIjAb += Fbe * CIjAe - FAE * CIjbE */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_file2_init(&Fae, CC_OEI, H_IRR, 3, 3, "Fae"); dpd_contract424(&CMnEf, &Fae, &SIjAb, 3, 1, 0, 1.0, 1.0); dpd_file2_close(&Fae); dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract244(&FAE, &CMnEf, &SIjAb, 1, 2, 1, 1.0, 1.0); dpd_file2_close(&FAE); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("Fbe_FDD ",i,C_irr); #endif /* SIJAB -= FMJ * CIMAB - FMI * CJMAB */ dpd_buf4_init(&FM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJM"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, CMNEF_lbl); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract424(&CMNEF, &FMI, &FM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMNEF); dpd_buf4_sort(&FM, EOM_TMP, qprs, 0, 7, "FDD_FMJP"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&FM, &SIJAB, -1.0); dpd_buf4_close(&FM); dpd_buf4_init(&FP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "FDD_FMJP"); dpd_buf4_axpy(&FP, &SIJAB, 1.0); dpd_buf4_close(&FP); dpd_buf4_close(&SIJAB); /* Sijab -= Fmj * Cimab - Fmi * Cjmab */ dpd_buf4_init(&FM, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "FDD_FmjMB"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 17, 12, 17, 0, Cmnef_lbl); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 2, 2, "Fmi"); dpd_contract424(&Cmnef, &Fmi, &FM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&Fmi); dpd_buf4_close(&Cmnef); dpd_buf4_sort(&FM, EOM_TMP, qprs, 10, 17, "FDD_FmjPB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&FM, &Sijab, -1.0); dpd_buf4_close(&FM); dpd_buf4_init(&FP, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "FDD_FmjPB"); dpd_buf4_axpy(&FP, &Sijab, 1.0); dpd_buf4_close(&FP); dpd_buf4_close(&Sijab); /* SIjAb -= Fmj * CImAb - FMI * CjMAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 2, 2, "Fmi"); dpd_contract424(&CMnEf, &Fmi, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_file2_close(&Fmi); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract244(&FMI, &CMnEf, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&FMI); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("Fmj_DD",i,C_irr); #endif } return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������psi3/src/bin/cceom/follow_root.cc�������������������������������������������������������������������0000644�0001015�0000765�00000011220�10757640026�015505� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* root_following: returns index of vector in EOM_Cxxx with maximum overlap with vector "CCSD Cxxx" in CC3_MISC */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { int follow_root(int L, double **alpha, int C_irr) { dpdfile2 CME, Cme, RME, Rme; dpdbuf4 CMNEF, Cmnef, CMnEf, RMNEF, Rmnef, RMnEf; char lbl[32]; double *CR_overlap, tval; int i,j; CR_overlap = init_array(L); /* open CCSD vector "R" from CC3_MISC */ if (params.eom_ref == 0) { dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME"); dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 0, 5, 0, 5, 0, "CCSD CMnEf"); } else if (params.eom_ref == 1) { dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME"); dpd_file2_init(&Rme, CC3_MISC, C_irr, 0, 1, "CCSD Cme"); dpd_buf4_init(&RMNEF, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD CMNEF"); dpd_buf4_init(&Rmnef, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD Cmnef"); dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 0, 5, 0, 5, 0, "CCSD CMnEf"); } else if (params.eom_ref == 2) { dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME"); dpd_file2_init(&Rme, CC3_MISC, C_irr, 2, 3, "CCSD Cme"); dpd_buf4_init(&RMNEF, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD CMNEF"); dpd_buf4_init(&Rmnef, CC3_MISC, C_irr, 12, 17, 12, 17, 0, "CCSD Cmnef"); dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 22, 28, 22, 28, 0, "CCSD CMnEf"); } /* loop over trial C vectors */ for (i=0; i<L; ++i) { /* read C vector from EOM_Cxxx */ if (params.eom_ref == 0) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); } else if (params.eom_ref == 1) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); } /* dot C vector with R vector */ tval = 0.0; if (params.eom_ref == 0) { tval = 2.0 * dpd_file2_dot(&CME, &RME); tval += dpd_buf4_dot(&CMnEf, &RMnEf); } else if (params.eom_ref == 1) { tval = dpd_file2_dot(&CME, &RME); tval += dpd_file2_dot(&Cme, &Rme); tval += dpd_buf4_dot(&CMNEF, &RMNEF); tval += dpd_buf4_dot(&Cmnef, &Rmnef); tval += dpd_buf4_dot(&CMnEf, &RMnEf); } else if (params.eom_ref == 2) { tval = dpd_file2_dot(&CME, &RME); tval += dpd_file2_dot(&Cme, &Rme); tval += dpd_buf4_dot(&CMNEF, &RMNEF); tval += dpd_buf4_dot(&Cmnef, &Rmnef); tval += dpd_buf4_dot(&CMnEf, &RMnEf); } /* loop over roots and add in overlap */ for (j=0; j<L; ++j) CR_overlap[j] += alpha[i][j] * tval; if (params.eom_ref == 0) { dpd_file2_close(&CME); dpd_buf4_close(&CMnEf); } else { dpd_file2_close(&CME); dpd_file2_close(&Cme); dpd_buf4_close(&CMNEF); dpd_buf4_close(&Cmnef); dpd_buf4_close(&CMnEf); } } if (params.eom_ref == 0) { dpd_file2_close(&RME); dpd_buf4_close(&RMnEf); } else { dpd_file2_close(&RME); dpd_file2_close(&Rme); dpd_buf4_close(&RMNEF); dpd_buf4_close(&Rmnef); dpd_buf4_close(&RMnEf); } fprintf(outfile,"Overlaps of Rs with EOM CCSD eigenvector:\n"); for(i=0;i<L;++i) { fprintf(outfile,"\t %d %12.6lf\n", i, CR_overlap[i]); } /* return index with greatest overlap */ tval = -1.0; for(i=0;i<L;++i) { if ( fabs(CR_overlap[i]) > tval) { tval = fabs(CR_overlap[i]); j = i; } } fprintf(outfile,"follow_root returning: %d\n", j); return j; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/form_diagonal.cc�����������������������������������������������������������������0000644�0001015�0000765�00000030736�10757640026�015756� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void form_diagonal(int C_irr) { dpdfile2 DIA, Dia, FAE, FMI, Fae, Fmi; dpdbuf4 DIJAB, Dijab, DIjAb, Cmnef, CMnEf; int *openpi, nirreps; int *occpi, *virtpi, *occ_off, *vir_off, *occ_sym, *vir_sym; int *aoccpi, *avirtpi, *aocc_off, *avir_off, *aocc_sym, *avir_sym; int *boccpi, *bvirtpi, *bocc_off, *bvir_off, *bocc_sym, *bvir_sym; int ij, ab, i, j, a, b, h, I, J, A, B; int isym, jsym, asym, bsym; double tval; nirreps = moinfo.nirreps; openpi = moinfo.openpi; if(params.eom_ref == 0) { /** RHF **/ occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_mat_init(&FAE); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FAE); dpd_file2_mat_rd(&FMI); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(a=0; a < virtpi[h^C_irr]; a++) DIA.matrix[h][i][a] = FAE.matrix[h^C_irr][a][a] - FMI.matrix[h][i][i]; } dpd_file2_mat_wrt(&DIA); dpd_file2_close(&DIA); dpd_buf4_init(&DIjAb, EOM_D, C_irr, 0, 5, 0, 5, 0, "DIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DIjAb, h); for(ij=0; ij < DIjAb.params->rowtot[h]; ij++) { i = DIjAb.params->roworb[h][ij][0]; j = DIjAb.params->roworb[h][ij][1]; isym = DIjAb.params->psym[i]; jsym = DIjAb.params->qsym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; for(ab=0; ab < DIjAb.params->coltot[h^C_irr]; ab++) { a = DIjAb.params->colorb[h^C_irr][ab][0]; b = DIjAb.params->colorb[h^C_irr][ab][1]; asym = DIjAb.params->rsym[a]; bsym = DIjAb.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; DIjAb.matrix[h][ij][ab] = FAE.matrix[asym][A][A] + FAE.matrix[bsym][B][B] - FMI.matrix[isym][I][I] - FMI.matrix[jsym][J][J]; } } dpd_buf4_mat_irrep_wrt(&DIjAb, h); dpd_buf4_mat_irrep_close(&DIjAb, h); } dpd_buf4_close(&DIjAb); dpd_file2_mat_close(&FMI); dpd_file2_mat_close(&FAE); dpd_file2_close(&FMI); dpd_file2_close(&FAE); } else if (params.eom_ref == 1) { /* ROHF */ occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_init(&Fae, CC_OEI, H_IRR, 1, 1, "Fae"); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 0, 0, "Fmi"); dpd_file2_mat_init(&FAE); dpd_file2_mat_init(&FMI); dpd_file2_mat_init(&Fae); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&FAE); dpd_file2_mat_rd(&FMI); dpd_file2_mat_rd(&Fae); dpd_file2_mat_rd(&Fmi); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(a=0; a < (virtpi[h^C_irr]-openpi[h^C_irr]); a++) DIA.matrix[h][i][a] = FAE.matrix[h^C_irr][a][a] - FMI.matrix[h][i][i]; } dpd_file2_mat_wrt(&DIA); dpd_file2_close(&DIA); dpd_file2_init(&Dia, EOM_D, C_irr, 0, 1, "Dia"); dpd_file2_mat_init(&Dia); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h]-openpi[h]); i++) for(a=0; a < virtpi[h^C_irr]; a++) Dia.matrix[h][i][a] = Fae.matrix[h^C_irr][a][a] - Fmi.matrix[h][i][i]; } dpd_file2_mat_wrt(&Dia); dpd_file2_close(&Dia); dpd_buf4_init(&DIJAB, EOM_D, C_irr, 2, 7, 2, 7, 0, "DIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DIJAB, h); for(ij=0; ij < DIJAB.params->rowtot[h]; ij++) { i = DIJAB.params->roworb[h][ij][0]; j = DIJAB.params->roworb[h][ij][1]; isym = DIJAB.params->psym[i]; jsym = DIJAB.params->qsym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; for(ab=0; ab < DIJAB.params->coltot[h^C_irr]; ab++) { a = DIJAB.params->colorb[h^C_irr][ab][0]; b = DIJAB.params->colorb[h^C_irr][ab][1]; asym = DIJAB.params->rsym[a]; bsym = DIJAB.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; tval = FAE.matrix[asym][A][A] + FAE.matrix[bsym][B][B] - FMI.matrix[isym][I][I] - FMI.matrix[jsym][J][J]; DIJAB.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&DIJAB, h); dpd_buf4_mat_irrep_close(&DIJAB, h); } dpd_buf4_close(&DIJAB); dpd_buf4_init(&Dijab, EOM_D, C_irr, 2, 7, 2, 7, 0, "Dijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Dijab, h); for(ij=0; ij < Dijab.params->rowtot[h]; ij++) { i = Dijab.params->roworb[h][ij][0]; j = Dijab.params->roworb[h][ij][1]; isym = Dijab.params->psym[i]; jsym = Dijab.params->qsym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; for(ab=0; ab < Dijab.params->coltot[h^C_irr]; ab++) { a = Dijab.params->colorb[h^C_irr][ab][0]; b = Dijab.params->colorb[h^C_irr][ab][1]; asym = Dijab.params->rsym[a]; bsym = Dijab.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; tval = Fae.matrix[asym][A][A] + Fae.matrix[bsym][B][B] - Fmi.matrix[isym][I][I] - Fmi.matrix[jsym][J][J]; Dijab.matrix[h][ij][ab] = ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&Dijab, h); dpd_buf4_mat_irrep_close(&Dijab, h); } dpd_buf4_close(&Dijab); dpd_buf4_init(&DIjAb, EOM_D, C_irr, 0, 5, 0, 5, 0, "DIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DIjAb, h); for(ij=0; ij < DIjAb.params->rowtot[h]; ij++) { i = DIjAb.params->roworb[h][ij][0]; j = DIjAb.params->roworb[h][ij][1]; isym = DIjAb.params->psym[i]; jsym = DIjAb.params->qsym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; for(ab=0; ab < DIjAb.params->coltot[h^C_irr]; ab++) { a = DIjAb.params->colorb[h^C_irr][ab][0]; b = DIjAb.params->colorb[h^C_irr][ab][1]; asym = DIjAb.params->rsym[a]; bsym = DIjAb.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; tval = FAE.matrix[asym][A][A] + Fae.matrix[bsym][B][B] - FMI.matrix[isym][I][I] - Fmi.matrix[jsym][J][J]; DIjAb.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&DIjAb, h); dpd_buf4_mat_irrep_close(&DIjAb, h); } dpd_buf4_close(&DIjAb); dpd_file2_mat_close(&FMI); dpd_file2_mat_close(&Fmi); dpd_file2_mat_close(&FAE); dpd_file2_mat_close(&Fae); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_close(&Fae); dpd_file2_close(&FAE); } else if (params.eom_ref == 2) { /* UHF */ aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; aocc_sym = moinfo.aocc_sym; bocc_sym = moinfo.bocc_sym; avir_sym = moinfo.avir_sym; bvir_sym = moinfo.bvir_sym; dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_init(&Fae, CC_OEI, H_IRR, 3, 3, "Fae"); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 2, 2, "Fmi"); dpd_file2_mat_init(&FAE); dpd_file2_mat_init(&FMI); dpd_file2_mat_init(&Fae); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&FAE); dpd_file2_mat_rd(&FMI); dpd_file2_mat_rd(&Fae); dpd_file2_mat_rd(&Fmi); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) for(a=0; a < avirtpi[h^C_irr]; a++) DIA.matrix[h][i][a] = FAE.matrix[h^C_irr][a][a] - FMI.matrix[h][i][i]; } dpd_file2_mat_wrt(&DIA); dpd_file2_close(&DIA); dpd_file2_init(&Dia, EOM_D, C_irr, 2, 3, "Dia"); dpd_file2_mat_init(&Dia); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) for(a=0; a < bvirtpi[h^C_irr]; a++) Dia.matrix[h][i][a] = Fae.matrix[h^C_irr][a][a] - Fmi.matrix[h][i][i]; } dpd_file2_mat_wrt(&Dia); dpd_file2_close(&Dia); dpd_buf4_init(&DIJAB, EOM_D, C_irr, 2, 7, 2, 7, 0, "DIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DIJAB, h); for(ij=0; ij < DIJAB.params->rowtot[h]; ij++) { i = DIJAB.params->roworb[h][ij][0]; j = DIJAB.params->roworb[h][ij][1]; isym = DIJAB.params->psym[i]; jsym = DIJAB.params->qsym[j]; I = i - aocc_off[isym]; J = j - aocc_off[jsym]; for(ab=0; ab < DIJAB.params->coltot[h^C_irr]; ab++) { a = DIJAB.params->colorb[h^C_irr][ab][0]; b = DIJAB.params->colorb[h^C_irr][ab][1]; asym = DIJAB.params->rsym[a]; bsym = DIJAB.params->ssym[b]; A = a - avir_off[asym]; B = b - avir_off[bsym]; tval = FAE.matrix[asym][A][A] + FAE.matrix[bsym][B][B] - FMI.matrix[isym][I][I] - FMI.matrix[jsym][J][J]; DIJAB.matrix[h][ij][ab] = (((A >= avirtpi[asym]) || (B >= avirtpi[bsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&DIJAB, h); dpd_buf4_mat_irrep_close(&DIJAB, h); } dpd_buf4_close(&DIJAB); dpd_buf4_init(&Dijab, EOM_D, C_irr, 12, 17, 12, 17, 0, "Dijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Dijab, h); for(ij=0; ij < Dijab.params->rowtot[h]; ij++) { i = Dijab.params->roworb[h][ij][0]; j = Dijab.params->roworb[h][ij][1]; isym = Dijab.params->psym[i]; jsym = Dijab.params->qsym[j]; I = i - bocc_off[isym]; J = j - bocc_off[jsym]; for(ab=0; ab < Dijab.params->coltot[h^C_irr]; ab++) { a = Dijab.params->colorb[h^C_irr][ab][0]; b = Dijab.params->colorb[h^C_irr][ab][1]; asym = Dijab.params->rsym[a]; bsym = Dijab.params->ssym[b]; A = a - bvir_off[asym]; B = b - bvir_off[bsym]; tval = Fae.matrix[asym][A][A] + Fae.matrix[bsym][B][B] - Fmi.matrix[isym][I][I] - Fmi.matrix[jsym][J][J]; Dijab.matrix[h][ij][ab] = (((I >= boccpi[isym]) || (J >= boccpi[jsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&Dijab, h); dpd_buf4_mat_irrep_close(&Dijab, h); } dpd_buf4_close(&Dijab); dpd_buf4_init(&DIjAb, EOM_D, C_irr, 22, 28, 22, 28, 0, "DIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&DIjAb, h); for(ij=0; ij < DIjAb.params->rowtot[h]; ij++) { i = DIjAb.params->roworb[h][ij][0]; j = DIjAb.params->roworb[h][ij][1]; isym = DIjAb.params->psym[i]; jsym = DIjAb.params->qsym[j]; I = i - aocc_off[isym]; J = j - bocc_off[jsym]; for(ab=0; ab < DIjAb.params->coltot[h^C_irr]; ab++) { a = DIjAb.params->colorb[h^C_irr][ab][0]; b = DIjAb.params->colorb[h^C_irr][ab][1]; asym = DIjAb.params->rsym[a]; bsym = DIjAb.params->ssym[b]; A = a - avir_off[asym]; B = b - bvir_off[bsym]; tval = FAE.matrix[asym][A][A] + Fae.matrix[bsym][B][B] - FMI.matrix[isym][I][I] - Fmi.matrix[jsym][J][J]; DIjAb.matrix[h][ij][ab] = (((A >= avirtpi[asym]) || (J >= boccpi[jsym])) ? 0.0 : tval); } } dpd_buf4_mat_irrep_wrt(&DIjAb, h); dpd_buf4_mat_irrep_close(&DIjAb, h); } dpd_buf4_close(&DIjAb); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_close(&Fae); dpd_file2_close(&FAE); } return; } }} // namespace psi::cceom ����������������������������������psi3/src/bin/cceom/FSD.cc���������������������������������������������������������������������������0000644�0001015�0000765�00000007222�10757640026�013563� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar singles-doubles block contribution to a Sigma vector stored at Sigma plus 'i' */ void FSD(int i, int C_irr) { dpdfile2 Fme, FME; dpdfile2 SIA, Sia; dpdbuf4 CMNEF, Cmnef, CMnEf, CmNeF; char lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_dot24(&FME,&CMnEf,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_file2_close(&FME); dpd_file2_close(&SIA); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); /* SIA += FME*CIMAE + Fme*CImAe */ dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); dpd_dot24(&FME,&CMNEF,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_file2_close(&FME); dpd_file2_init(&Fme, CC_OEI, H_IRR, 0, 1, "Fme"); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_dot24(&Fme,&CMnEf,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_file2_close(&Fme); /* Sia += Fme*Cimae + FME*CiMaE */ dpd_file2_init(&Fme, CC_OEI, H_IRR, 0, 1, "Fme"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 0, 5, 2, 7, 0, lbl); dpd_dot24(&Fme,&Cmnef,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_file2_close(&Fme); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CmNeF"); dpd_dot24(&FME,&CmNeF,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&CmNeF); dpd_file2_close(&FME); dpd_file2_close(&Sia); dpd_file2_close(&SIA); } else { /* UHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); /* SIA += FME*CIMAE + Fme*CImAe */ dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); dpd_dot24(&FME,&CMNEF,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_file2_close(&FME); dpd_file2_init(&Fme, CC_OEI, H_IRR, 2, 3, "Fme"); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_dot24(&Fme,&CMnEf,&SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_file2_close(&Fme); /* Sia += Fme*Cimae + FME*CiMaE */ dpd_file2_init(&Fme, CC_OEI, H_IRR, 2, 3, "Fme"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 15, 12, 17, 0, lbl); dpd_dot24(&Fme,&Cmnef,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_file2_close(&Fme); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_dot24(&FME,&CmNeF,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&CmNeF); dpd_file2_close(&FME); dpd_file2_close(&Sia); dpd_file2_close(&SIA); } #ifdef EOM_DEBUG check_sum("FSD ",i,C_irr); #endif return; } }} // namespace psi::cceom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/get_eom_params.cc����������������������������������������������������������������0000644�0001015�0000765�00000015475�10757640026�016142� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void get_eom_params() { int errcod, i, j, sym, iconv,exist, state_irrep, c_irrep; chkpt_init(PSIO_OPEN_OLD); if (chkpt_rd_override_occ()) { eom_params.states_per_irrep = chkpt_rd_statespi(); } else if (ip_exist("STATES_PER_IRREP",0)) { eom_params.states_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int)); ip_count("STATES_PER_IRREP", &i, 0); if (i != moinfo.nirreps) { fprintf(outfile,"Dim. of states_per_irrep vector must be %d\n", moinfo.nirreps) ; exit(0); } for (i=0;i<moinfo.nirreps;++i) errcod = ip_data("STATES_PER_IRREP","%d",&(eom_params.states_per_irrep[i]),1,i); } else { fprintf(outfile,"Must have states_per_irrep vector in input.\n"); exit(PSI_RETURN_FAILURE); } chkpt_close(); eom_params.cs_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int)); eom_params.number_of_states = 0; for (state_irrep=0; state_irrep<moinfo.nirreps; ++state_irrep) { eom_params.cs_per_irrep[state_irrep^moinfo.sym] = eom_params.states_per_irrep[state_irrep]; eom_params.number_of_states += eom_params.states_per_irrep[state_irrep]; } eom_params.state_energies = (double*) malloc(eom_params.number_of_states * sizeof(double)); eom_params.max_iter = 80 * moinfo.nirreps; errcod = ip_data("MAX_ITER","%d",&(eom_params.max_iter),0); /* Use prop_sym and prop_root only to determine what energy to write the file32 */ if (ip_exist("PROP_SYM",0)) { ip_data("PROP_SYM","%d",&(eom_params.prop_sym),0); eom_params.prop_sym = (eom_params.prop_sym - 1)^moinfo.sym; } else { for (i=0;i<moinfo.nirreps;++i) if (eom_params.states_per_irrep[i]) eom_params.prop_sym = i^moinfo.sym; } if (ip_exist("PROP_ROOT",0)) { ip_data("PROP_ROOT","%d",&(eom_params.prop_root),0); if (eom_params.prop_root > eom_params.states_per_irrep[eom_params.prop_sym^moinfo.sym]) { fprintf(outfile,"prop_root is too big\n"); exit(1); } } else { eom_params.prop_root = eom_params.states_per_irrep[eom_params.prop_sym^moinfo.sym]; } --eom_params.prop_root; if ( (!strcmp(params.wfn,"EOM_CC3")) && (eom_params.prop_root != 0) ) { eom_params.follow_root = 1; } /* so far, all R's are always kept so this is not used */ eom_params.save_all = 0; eom_params.mult = 1; eom_params.rhf_triplets = 0; errcod = ip_data("RHF_TRIPLETS","%d",&(eom_params.rhf_triplets),0); if (eom_params.rhf_triplets != 0) eom_params.mult = 3; eom_params.excitation_range = 2; errcod = ip_data("EXCITATION_RANGE","%d",&(eom_params.excitation_range),0); eom_params.print_singles = 0; errcod = ip_data("PRINT_SINGLES","%d",&(eom_params.print_singles),0); eom_params.vectors_per_root_SS = 5; errcod = ip_data("VECTORS_PER_ROOT_SS","%d",&(eom_params.vectors_per_root_SS),0); eom_params.vectors_per_root = 12; errcod = ip_data("VECTORS_PER_ROOT","%d",&(eom_params.vectors_per_root),0); eom_params.vectors_cc3 = eom_params.prop_root + 7; errcod = ip_data("VECTORS_CC3","%d",&(eom_params.vectors_cc3),0); if (eom_params.vectors_cc3 > eom_params.vectors_per_root) eom_params.vectors_cc3 = eom_params.vectors_per_root; eom_params.collapse_with_last = 1; errcod = ip_boolean("COLLAPSE_WITH_LAST",&(eom_params.collapse_with_last),0); eom_params.complex_tol = 1E-12; errcod = ip_data("COMPLEX_TOL","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.complex_tol = 1.0*pow(10.0,(double) -iconv); eom_params.residual_tol = 1E-6; errcod = ip_data("RESIDUAL_TOL","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.residual_tol = 1.0*pow(10.0,(double) -iconv); eom_params.residual_tol_SS = 1E-6; errcod = ip_data("RESIDUAL_TOL_SS","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.residual_tol_SS = 1.0*pow(10.0,(double) -iconv); eom_params.eval_tol = 1E-8; errcod = ip_data("EVAL_TOL","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.eval_tol = 1.0*pow(10.0,(double) -iconv); eom_params.eval_tol_SS = 1E-6; errcod = ip_data("EVAL_TOL_SS","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.eval_tol_SS = 1.0*pow(10.0,(double) -iconv); eom_params.schmidt_add_residual_tol = 1E-3; errcod = ip_data("SCHMIDT_ADD_RESIDUAL_TOL","%d",&(iconv),0); if(errcod == IPE_OK) eom_params.schmidt_add_residual_tol = 1.0*pow(10.0,(double) -iconv); eom_params.skip_diagSS = 0; i = 0; errcod = ip_boolean("SKIP_DIAGSS",&(i),0); if (i) eom_params.skip_diagSS = 1; eom_params.restart_eom_cc3 = 0; i = 0; errcod = ip_boolean("RESTART_EOM_CC3",&(i),0); if (i) eom_params.restart_eom_cc3 = 1; eom_params.max_iter_SS = 500; if(eom_params.guess == NULL) { /* we didn't use the cmdline arg --reuse */ if(ip_exist("EOM_GUESS",0)) errcod = ip_string("EOM_GUESS", &(eom_params.guess), 0); else eom_params.guess = strdup("SINGLES"); } fprintf(outfile, "\n\tCCEOM parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tStates sought per irrep ="); if(strcmp(eom_params.guess,"INPUT")) { for (i=0;i<moinfo.nirreps;++i) fprintf(outfile, " %s %d,", moinfo.labels[i], eom_params.states_per_irrep[i]); } else fprintf(outfile, " USER INPUT"); fprintf(outfile,"\n"); fprintf(outfile, "\tMax. number of iterations = %5d\n", eom_params.max_iter); fprintf(outfile, "\tVectors stored per root = %5d\n", eom_params.vectors_per_root); fprintf(outfile, "\tPrint HbarSS iterations? = %5d\n", eom_params.print_singles); fprintf(outfile, "\tExcitation range for HBarSS = %5d\n", eom_params.excitation_range); fprintf(outfile, "\tEigenvalue tolerance = %5.1e\n", eom_params.eval_tol); fprintf(outfile, "\tEigenvalue toleranceSS = %5.1e\n", eom_params.eval_tol_SS); fprintf(outfile, "\tResidual vector tolerance = %5.1e\n", eom_params.residual_tol); fprintf(outfile, "\tResidual vector toleranceSS = %5.1e\n", eom_params.residual_tol_SS); fprintf(outfile, "\tComplex tolerance = %5.1e\n", eom_params.complex_tol); fprintf(outfile, "\tRoot for properties = %5d\n", eom_params.prop_root + 1); fprintf(outfile, "\tSym of state for properties = %6s\n", moinfo.labels[eom_params.prop_sym]); fprintf(outfile, "\tGuess vectors taken from = %s\n", eom_params.guess); fprintf(outfile, "\tRestart EOM CC3 = %s\n", eom_params.restart_eom_cc3?"YES":"NO"); fprintf(outfile, "\tCollapse with last vector = %s\n", eom_params.collapse_with_last ? "YES":"NO"); if (eom_params.follow_root) fprintf(outfile, "\tRoot following for CC3 turned on.\n"); fprintf(outfile, "\n\n"); } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/get_moinfo.cc��������������������������������������������������������������������0000644�0001015�0000765�00000020654�10757640026�015301� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libchkpt/chkpt.h> #include <libpsio/psio.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996 ** Modified by TDC, March 1999 */ void get_moinfo(void) { int i, j, h, p, q, errcod, nactive, nirreps, sym; double ***C, ***Ca, ***Cb; psio_address next; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.sopi = chkpt_rd_sopi(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.phase = chkpt_rd_phase_check(); chkpt_close(); sym = 0; for (i=0;i<moinfo.nirreps;++i) for (j=0;j<moinfo.openpi[i];++j) sym = sym ^ i; moinfo.sym = sym; nirreps = moinfo.nirreps; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(nirreps); moinfo.fruocc = init_int_array(nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if (params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ moinfo.occpi = init_int_array(nirreps); moinfo.virtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } else { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } /* Build sosym array (for AO-basis BT2) */ moinfo.sosym = init_int_array(moinfo.nso); for(h=0,q=0; h < nirreps; h++) for(p=0; p < moinfo.sopi[h]; p++) moinfo.sosym[q++] = h; /* Get the active virtual orbitals */ if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ C = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.virtpi[h]) { C[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); psio_read(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) C[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); } } moinfo.C = C; } else if(params.ref == 2) { /** UHF **/ Ca = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.avirtpi[h]) { Ca[h] = block_matrix(moinfo.sopi[h],moinfo.avirtpi[h]); psio_read(CC_INFO, "UHF Active Alpha Virtual Orbs", (char *) Ca[h][0], moinfo.sopi[h]*moinfo.avirtpi[h]*sizeof(double), next, &next); } } moinfo.Ca = Ca; Cb = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.bvirtpi[h]) { Cb[h] = block_matrix(moinfo.sopi[h],moinfo.bvirtpi[h]); psio_read(CC_INFO, "UHF Active Beta Virtual Orbs", (char *) Cb[h][0], moinfo.sopi[h]*moinfo.bvirtpi[h]*sizeof(double), next, &next); } } moinfo.Cb = Cb; } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; if(params.ref == 0) { moinfo.nvirt = 0; for(h=0; h < moinfo.nirreps; h++) moinfo.nvirt += moinfo.virtpi[h]; } psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n",moinfo.eref); fflush(outfile); } /* Frees memory allocated in get_moinfo() and dumps out the energy. */ void cleanup(void) { int i, h; if(params.ref == 0 || params.ref == 1) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.virtpi[h]) free_block(moinfo.C[h]); free(moinfo.C); } else if(params.ref == 2) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.avirtpi[h]) free_block(moinfo.Ca[h]); free(moinfo.Ca); for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.bvirtpi[h]) free_block(moinfo.Cb[h]); free(moinfo.Cb); } free(moinfo.orbspi); free(moinfo.sosym); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); } else { free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.occ_sym); free(moinfo.vir_sym); } } }} // namespace psi::cceom ������������������������������������������������������������������������������������psi3/src/bin/cceom/get_params.cc��������������������������������������������������������������������0000644�0001015�0000765�00000017251�10757640026�015274� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void get_params(void) { int errcod, iconv; char *cachetype = NULL; char *read_ref, *read_eom_ref; errcod = ip_string("WFN", &(params.wfn), 0); if(!strcmp(params.wfn,"EOM_CC2")) { psio_read_entry(CC_INFO, "CC2 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile,"\tCC2 energy (file100) = %20.15f\n",moinfo.ecc); } else if(!strcmp(params.wfn,"EOM_CCSD")) { psio_read_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile,"\tCCSD energy (file100) = %20.15f\n",moinfo.ecc); } else if(!strcmp(params.wfn,"EOM_CC3")) { psio_read_entry(CC_INFO, "CC3 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile,"\tCC3 energy (file100) = %20.15f\n",moinfo.ecc); } params.semicanonical = 0; errcod = ip_string("REFERENCE", &(read_ref),0); if(!strcmp(read_ref, "RHF")) params.ref = 0; else if(!strcmp(read_ref,"ROHF") && (!strcmp(params.wfn,"EOM_CC3"))) { params.ref = 2; params.semicanonical = 1; } else if(!strcmp(read_ref, "ROHF")) params.ref = 1; else if(!strcmp(read_ref, "UHF")) params.ref = 2; else { fprintf(outfile, "\nInvalid value of input keyword REFERENCE: %s\n", read_ref); exit(2); } if (params.ref == 0) { /* for RHF refs, allow CCEOM to do RHF, ROHF, UHF modes */ errcod = ip_string("EOM_REFERENCE", &(read_eom_ref),0); if (errcod == IPE_OK) { if(!strcmp(read_eom_ref, "RHF")) params.eom_ref = 0; else if(!strcmp(read_eom_ref, "ROHF")) params.eom_ref = 1; else if(!strcmp(read_eom_ref, "UHF")) params.eom_ref = 2; else { fprintf(outfile, "\nInvalid value of input keyword EOM_REFERENCE: %s\n", read_eom_ref); exit(2); } } else { params.eom_ref = 0; read_eom_ref = (char *) malloc(10*sizeof(char)); sprintf(read_eom_ref,"%s","RHF"); /* just for printing below */ } } else if (params.ref == 1) { /* for ROHF refs, allow CCEOM to do ROHF & UHF modes */ errcod = ip_string("EOM_REFERENCE", &(read_eom_ref),0); if (errcod == IPE_OK) { if(!strcmp(read_eom_ref, "ROHF")) params.eom_ref = 1; else if(!strcmp(read_eom_ref, "UHF")) params.eom_ref = 2; else { fprintf(outfile, "\nInvalid value of input keyword EOM_REFERENCE: %s\n", read_eom_ref); exit(2); } } else { params.eom_ref = 1; read_eom_ref = (char *) malloc(10*sizeof(char)); sprintf(read_eom_ref,"%s","ROHF"); /* just for printing below */ } } else { /* run in UHF mode - ignore EOM_REFERENCE */ params.eom_ref = 2; read_eom_ref = (char *) malloc(10*sizeof(char)); sprintf(read_eom_ref,"%s","UHF"); /* just for printing below */ } /* fprintf(outfile, "\nCCEOM not yet UHF capable\n"); */ fndcor(&(params.memory),infile,outfile); params.aobasis = 0; errcod = ip_boolean("AO_BASIS", &(params.aobasis),0); params.full_matrix = 0; errcod = ip_boolean("FULL_MATRIX", &(params.full_matrix),0); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.cachetype = 0; errcod = ip_string("CACHETYPE", &(cachetype),0); if(cachetype != NULL && strlen(cachetype)) { if(!strcmp(cachetype,"LOW")) params.cachetype = 1; else if(!strcmp(cachetype,"LRU")) params.cachetype = 0; else { fprintf(outfile, "Error in input: invalid CACHETYPE = %s\n", cachetype); exit(1); } free(cachetype); } if(params.ref == 2) /* No LRU cacheing yet for UHF references */ params.cachetype = 0; params.nthreads = 1; errcod = ip_data("NTHREADS", "%d", &(params.nthreads),0); if(ip_exist("ABCD",0)) { errcod = ip_string("ABCD", &(params.abcd), 0); if(strcmp(params.abcd,"NEW") && strcmp(params.abcd,"OLD")) { fprintf(outfile, "Invalid ABCD algorithm: %s\n", params.abcd); exit(PSI_RETURN_FAILURE); } } else params.abcd = strdup("NEW"); params.t3_Ws_incore = 0; errcod = ip_boolean("T3_WS_INCORE", &(params.t3_Ws_incore),0); params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "\nInvalid local correlation method: %s\n", local.method); exit(2); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(2); } } else if(params.local) { local.weakp = (char *) malloc(5 * sizeof(char)); sprintf(local.weakp, "%s", "NONE"); } if(ip_exist("LOCAL_PRECONDITIONER",0) && params.local) { errcod = ip_string("LOCAL_PRECONDITIONER", &(local.precon), 0); if(strcmp(local.precon,"FOCK") && strcmp(local.precon,"HBAR")) { fprintf(outfile, "Invalid choice of local-pair preconditioner: %s\n", local.precon); exit(2); } } else if(params.local){ local.precon = (char *) malloc(5 * sizeof(char)); sprintf(local.precon, "%s", "HBAR"); } local.ghost = -1; if(ip_exist("LOCAL_GHOST",0)) errcod = ip_data("LOCAL_GHOST", "%d", &(local.ghost), 0); local.do_singles = 1; errcod = ip_boolean("LOCAL_DO_SINGLES", &(local.do_singles), 0); local.filter_singles = 1; ip_boolean("LOCAL_FILTER_SINGLES", &(local.filter_singles), 0); fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); if(params.semicanonical) fprintf(outfile, "\tReference wfn = ROHF changed to UHF for Semicanonical Orbitals\n"); else fprintf(outfile, "\tReference wfn = %4s\n", read_ref); fprintf(outfile, "\tReference EOM wfn= %4s\n", read_eom_ref); fprintf(outfile, "\tMemory (Mbytes) = %5.1f\n",params.memory/1e6); fprintf(outfile, "\tAO Basis = %s\n", params.aobasis ? "Yes" : "No"); fprintf(outfile, "\tABCD = %s\n", params.abcd); fprintf(outfile, "\tCache Level = %1d\n", params.cachelev); fprintf(outfile, "\tCache Type = %4s\n", params.cachetype ? "LOW" : "LRU"); if ( !strcmp(params.wfn,"EOM_CC3") ) fprintf(outfile, "\tT3 Ws incore = %4s\n", params.t3_Ws_incore ? "Yes" : "No"); fprintf(outfile, "\tNum. of threads = %d\n",params.nthreads); fprintf(outfile, "\tLocal CC = %s\n", params.local ? "Yes" : "No"); if(params.local) { fprintf(outfile, "\tLocal Cutoff = %3.1e\n", local.cutoff); fprintf(outfile, "\tLocal Method = %s\n", local.method); fprintf(outfile, "\tWeak pairs = %s\n", local.weakp); fprintf(outfile, "\tLocal precon. = %s\n", local.precon); fprintf(outfile, "\tGhost atom = %d\n", local.ghost); fprintf(outfile, "\tLocal guess = %s\n", local.do_singles ? "HBAR_SS" : "UNIT VECTORS" ); fprintf(outfile, "\tFilter singles = %s\n", local.filter_singles ? "Yes" : "No"); } fprintf(outfile, "\n"); free(read_ref); free(read_eom_ref); } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/globals.h������������������������������������������������������������������������0000644�0001015�0000765�00000001304�11001405556�014415� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace cceom { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif EXTERN void check_sum(char *term_lbl, int index, int irrep); // #define EOM_DEBUG (0) #define TIME_CCEOM (1) #define H_IRR (0) #define MAX(I,J) ((I>J) ? I : J) #define MIN(I,J) ((I<J) ? I : J) extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct Eom_params eom_params; EXTERN struct Local local; EXTERN int ***dpd_dp; }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/hbar_extra.cc��������������������������������������������������������������������0000644�0001015�0000765�00000007322�10757640026�015267� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void hbar_extra(void) { dpdbuf4 W, W1, W2, WAmEf, WmBeJ, WmBEj, WmNIe, WMnIe; if (params.eom_ref == 2) { dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_sort(&W, CC_HBAR, rspq, 20, 20, "WMBEJ (JB,ME)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 20, 30, 20, 0, "WmBeJ"); /* (me,JB) */ dpd_buf4_sort(&W, CC_HBAR, rspq, 20, 30, "WmBeJ (JB,me)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_sort(&W, CC_HBAR, rspq, 30, 30, "Wmbej (jb,me)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 30, 20, 30, 0, "WMbEj"); /* (ME,jb) */ dpd_buf4_sort(&W, CC_HBAR, rspq, 30, 20, "WMbEj (jb,ME)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 27, 23, 27, 23, 0, "WmBiJ"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 27, 22, "WmBiJ (mB,Ji)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 27, 22, 27, 22, 0, "WmBiJ (mB,Ji)"); dpd_buf4_sort(&W, CC_HBAR, qprs, 26, 22, "WmBiJ (Bm,Ji)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 25, 29, 25, 29, 0, "WeIaB"); dpd_buf4_sort(&W, CC_HBAR, qprs, 24, 29, "WeIaB (Ie,aB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 24, 29, 24, 29, 0, "WeIaB (Ie,aB)"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 24, 28, "WeIaB (Ie,Ab)"); dpd_buf4_close(&W); } if(params.eom_ref == 1) { dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_sort(&W, CC_HBAR, rspq, 10, 10, "WMBEJ (JB,ME)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_sort(&W, CC_HBAR, rspq, 10, 10, "WmBeJ (JB,me)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_sort(&W, CC_HBAR, rspq, 10, 10, "Wmbej (jb,me)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_sort(&W, CC_HBAR, rspq, 10, 10, "WMbEj (jb,ME)"); dpd_buf4_close(&W); } if (params.eom_ref == 1) { /* ROHF */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 10, 0, "WmBiJ (mB,Ji)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 0, 10, 0, 0, "WmBiJ (mB,Ji)"); dpd_buf4_sort(&W, CC_HBAR, qprs, 11, 0, "WmBiJ (Bm,Ji)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_sort(&W, CC_HBAR, qprs, 10, 5, "WeIaB (Ie,aB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 5, 10, 5, 0, "WeIaB (Ie,aB)"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 10, 5, "WeIaB (Ie,Ab)"); dpd_buf4_close(&W); } if (params.eom_ref == 0 ) { /* RHF */ /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W, CC_HBAR, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W1, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_sort(&W1, CC_HBAR, rspq, 10, 10, "2 W(jb,ME) + W(Jb,Me)"); dpd_buf4_close(&W1); /* used in WamefSD */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); dpd_buf4_scmcopy(&W, CC_HBAR, "WAmEf 2(Am,Ef) - (Am,fE)", 2); dpd_buf4_sort_axpy(&W, CC_HBAR, pqsr, 11, 5, "WAmEf 2(Am,Ef) - (Am,fE)", -1); dpd_buf4_close(&W); } return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/hbar_norms.cc��������������������������������������������������������������������0000644�0001015�0000765�00000010250�10757640026�015274� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void hbar_norms() { double tval; dpdfile2 FAE, Fae, FMI, Fmi, FME, Fme; dpdbuf4 WMBIJ, Wmbij, WMbIj, WmBiJ, W; fprintf(outfile,"\n"); if ((params.eom_ref == 0) || (params.eom_ref == 1)) { dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, H_IRR, 1, 1, "Fae"); tval = dpd_file2_dot_self(&FAE); tval += dpd_file2_dot_self(&Fae); dpd_file2_close(&Fae); dpd_file2_close(&FAE); fprintf(outfile,"Fae dot Fae total %15.10lf\n", tval); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 0, 0, "Fmi"); tval = dpd_file2_dot_self(&FMI); tval += dpd_file2_dot_self(&Fmi); dpd_file2_close(&Fmi); dpd_file2_close(&FMI); fprintf(outfile,"Fmi dot Fmi total %15.10lf\n", tval); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, H_IRR, 0, 1, "Fme"); tval = dpd_file2_dot_self(&FME); tval += dpd_file2_dot_self(&Fme); dpd_file2_close(&Fme); dpd_file2_close(&FME); fprintf(outfile,"Fme dot Fme total %15.10lf\n", tval); dpd_buf4_init(&WMBIJ, CC_HBAR, H_IRR, 10, 2, 10, 2, 0, "WMBIJ"); tval = 2 * dpd_buf4_dot_self(&WMBIJ); dpd_buf4_close(&WMBIJ); fprintf(outfile,"WMBIJ dot WMBIJ total %15.10lf\n", tval); dpd_buf4_init(&Wmbij, CC_HBAR, H_IRR, 10, 2, 10, 2, 0, "Wmbij"); tval = 2 * dpd_buf4_dot_self(&Wmbij); dpd_buf4_close(&Wmbij); fprintf(outfile,"Wmbij dot Wmbij total %15.10lf\n", tval); dpd_buf4_init(&WMbIj, CC_HBAR, H_IRR, 10, 0, 10, 0, 0, "WMbIj"); tval = dpd_buf4_dot_self(&WMbIj); dpd_buf4_close(&WMbIj); fprintf(outfile,"WMbIj dot WMbIj total %15.10lf\n", tval); dpd_buf4_init(&WmBiJ, CC_HBAR, H_IRR, 11, 0, 11, 0, 0, "WmBiJ (Bm,Ji)"); tval = dpd_buf4_dot_self(&WmBiJ); dpd_buf4_close(&WmBiJ); fprintf(outfile,"WmBiJ dot WmBiJ total %15.10lf\n", tval); if (params.full_matrix) { dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FAI residual"); tval = dpd_file2_dot_self(&FME); dpd_file2_close(&FME); fprintf(outfile,"FAI residual dot FAI residual %15.10lf\n", tval); } } else if (params.eom_ref == 2) { dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, H_IRR, 3, 3, "Fae"); tval = dpd_file2_dot_self(&FAE); tval += dpd_file2_dot_self(&Fae); dpd_file2_close(&Fae); dpd_file2_close(&FAE); fprintf(outfile,"Fae dot Fae total %15.10lf\n", tval); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, H_IRR, 2, 2, "Fmi"); tval = dpd_file2_dot_self(&FMI); tval += dpd_file2_dot_self(&Fmi); dpd_file2_close(&Fmi); dpd_file2_close(&FMI); fprintf(outfile,"Fmi dot Fmi total %15.10lf\n", tval); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 30, 20, 30, 0, "WmBeJ (JB,me)"); /* (me,JB) */ tval = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 20, 30, 20, 0, "WMbEj (jb,ME)"); /* (ME,jb) */ tval += dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"WmBeJ and WMbEj dots %15.10lf\n",tval); /* dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, H_IRR, 0, 1, "Fme"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 2, 21, 2, 21, 0, "WMNIE"); tval = 2.0 * dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"WMNIE dot WMNIE total %15.10lf\n", tval); dpd_buf4_init(&W, CC_HBAR, H_IRR, 12, 31, 12, 31, 0, "Wmnie"); tval += 2.0 * dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"Wmnie dot Wmnie total %15.10lf\n", tval); dpd_buf4_init(&W, CC_HBAR, H_IRR, 22, 25, 22, 25, 0, "WMnIe"); tval += dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"WMnIe dot WMnIe total %15.10lf\n", tval); dpd_buf4_init(&W, CC_HBAR, H_IRR, 23, 26, 23, 26, 0, "WmNiE"); tval += dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"WmNiE dot WmNiE total %15.10lf\n", tval); */ } return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/local.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000032666�10757640026�014253� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libint/libint.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void local_init(void) { int i, ij, a; int nso, nocc, nvir; double **X, **Y; dpdfile2 FMI, FAE; psio_address next; chkpt_init(PSIO_OPEN_OLD); local.natom = chkpt_rd_natom(); chkpt_close(); local.nso = moinfo.nso; local.nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ local.nvir = moinfo.virtpi[0]; /* active virtual orbitals */ nocc = local.nocc; nvir = local.nvir; nso = local.nso; /* Build the occupied orbital energy list */ if(!strcmp(local.precon,"HBAR")) { /* Occupied Part */ local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); for(i=0; i < nocc; i++) local.eps_occ[i] = FMI.matrix[0][i][i]; dpd_file2_mat_close(&FMI); dpd_file2_close(&FMI); psio_write_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); free(local.eps_occ); /* Virtual Part */ local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); /* A couple of scratch arrays */ X = block_matrix(nso, nso); Y = block_matrix(nso, nso); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { C_DGEMM('t','n',local.pairdom_len[ij],nvir,nvir,1.0,&(local.V[ij][0][0]),local.pairdom_len[ij], &(FAE.matrix[0][0][0]),nvir,0.0,&(X[0][0]),nso); C_DGEMM('n','n',local.pairdom_len[ij],local.pairdom_len[ij],nvir,1.0,&(X[0][0]),nso, &(local.V[ij][0][0]),local.pairdom_len[ij],0.0,&(Y[0][0]),nso); C_DGEMM('t','n',local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(Y[0][0]), nso, 0.0, &(X[0][0]), nso); C_DGEMM('n','n',local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(Y[0][0]), nso); for(a=0; a < local.pairdom_nrlen[ij]; a++) local.eps_vir[ij][a] = Y[a][a]; psio_write(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } free_block(X); free_block(Y); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.pairdom_nrlen); free(local.pairdom_len); } fprintf(outfile, "\tLocalization parameters ready.\n\n"); fflush(outfile); } void local_done(void) { fprintf(outfile, "\tLocal parameters free.\n"); } void local_filter_T1(dpdfile2 *T1) { int i, a, ij, ii; int nocc, nvir; double *T1tilde, *T1bar; psio_address next; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); for(i=0; i < nocc; i++) { ii = i * nocc + i; /* diagonal element of pair matrices */ if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(PSI_RETURN_FAILURE); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); /* Apply the denominators */ for(a=0; a < local.pairdom_nrlen[ii]; a++) T1bar[a] /= (local.eps_occ[i] - local.eps_vir[ii][a]); /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(T1->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(T1); dpd_file2_mat_close(T1); /* Free Local Memory */ for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); } void local_filter_T2(dpdbuf4 *T2) { int ij, i, j, a, b; int nso, nocc, nvir; double **X1, **X2, **T2tilde, **T2bar; psio_address next; nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); local.weak_pairs = init_int_array(nocc*nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, nocc*nocc*sizeof(int)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { if(!local.weak_pairs[ij]) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', local.pairdom_len[ij], nvir, nvir, 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < local.pairdom_nrlen[ij]; a++) { for(b=0; b < local.pairdom_nrlen[ij]; b++) { T2bar[a][b] /= (local.eps_occ[i] + local.eps_occ[j] - local.eps_vir[ij][a] - local.eps_vir[ij][b]); } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', local.pairdom_len[ij], local.pairdom_len[ij], local.pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } else /* This must be a neglected weak pair; force it to zero */ memset((void *) T2->matrix[0][ij], 0, nvir*nvir*sizeof(double)); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); /* Free Local Memory */ for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); } }} // namespace psi::cceom ��������������������������������������������������������������������������psi3/src/bin/cceom/Local.h��������������������������������������������������������������������������0000644�0001015�0000765�00000001050�10754663017�014036� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ namespace psi { namespace cceom { struct Local { int natom; int nso; int nocc; int nvir; int *aostart; int *aostop; int **domain; int **pairdomain; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; int ghost; int do_singles; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; char *method; char *weakp; char *precon; int filter_singles; double weak_pair_energy; }; }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/local_guess.cc�������������������������������������������������������������������0000644�0001015�0000765�00000012141�10757640026�015443� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { struct onestack { int i; int a; double value; }; void stack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void local_guess(void) { int nso, nocc, nvir, nroot, i, ii, ij, a, m; double *T1bar, *T1tilde; double fii, value, norm; psio_address next; struct onestack *stack; char lbl[32]; dpdfile2 CME; nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } nroot = eom_params.states_per_irrep[0]; /* only C1 allowed */ stack = (struct onestack *) malloc(nroot * sizeof(struct onestack)); for(m=0; m < nroot; m++) { stack[m].i = -1; stack[m].a = -1; stack[m].value = 1e12; } /* find the nroot lowest excitations in the non-redunant, orthogonal (bar) space */ for(i=0; i < nocc; i++) { ii = i * nocc + i; fii = local.eps_occ[i]; for(a=0; a < local.pairdom_nrlen[ii]; a++) { value = local.eps_vir[ii][a] - fii; for(m=0; m < nroot; m++) { if((fabs(value) < fabs(stack[m].value)) ) { stack_insert(stack, value, i, a, m, nroot); break; } } } } T1bar = init_array(nso); T1tilde = init_array(nso); fprintf(outfile, "\n\tTransitions for local guesses:\n"); fprintf(outfile, "\t------------------------------\n"); for(m=0; m < nroot; m++) { fprintf(outfile, "\t%3d %3d %14.10f\n", stack[m].i, stack[m].a, stack[m].value); memset((void *) T1bar, 0, nso*sizeof(double)); memset((void *) T1tilde, 0, nso*sizeof(double)); i = stack[m].i; ii = i * nocc + i; /* Unit guess vector */ T1bar[stack[m].a] = 1.0; /* Transform this to the canonical MO basis */ sprintf(lbl, "%s %d", "CME", m); dpd_file2_init(&CME, EOM_CME, 0, 0, 1, lbl); dpd_file2_mat_init(&CME); C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(CME.matrix[0][i][0]), 1); /* normalize this guess in the MO basis */ norm = 0.0; for(a=0; a < nvir; a++) { norm += CME.matrix[0][i][a] * CME.matrix[0][i][a]; } norm = sqrt(2.0 * norm); fprintf(outfile, "Norm of guess vector %d = %20.14f\n", m, norm); for(a=0; a < nvir; a++) { CME.matrix[0][i][a] *= 1.0/norm; } dpd_file2_mat_wrt(&CME); dpd_file2_mat_close(&CME); dpd_file2_close(&CME); } fprintf(outfile, "\n"); free(T1bar); free(T1tilde); free(stack); eom_params.cs_per_irrep[0] = nroot; /* Free Local Memory */ for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); } void stack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/Makefile.in����������������������������������������������������������������������0000644�0001015�0000765�00000002460�10764260211�014674� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) -lpthread PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ FDD.cc c_clean.cc get_eom_params.cc rzero.cc \ FSD.cc cache.cc get_moinfo.cc schmidt_add.cc \ WabefDD.cc cc2_hbar_extra.cc get_params.cc sigmaCC3.cc \ WabejDS.cc cc2_sigma.cc hbar_extra.cc sigmaCC3_RHF.cc \ WamefSD.cc cc3_HC1.cc hbar_norms.cc sigmaDD.cc \ WbmfeDS.cc cc3_HC1ET1.cc local.cc sigmaDS.cc \ WmaijDS.cc cceom.cc local_guess.cc sigmaSD.cc \ WmbejDD.cc check_sum.cc norm.cc sigmaSS.cc \ WmnefDD.cc dgeev_eom.cc norm_HC1.cc sigma_full.cc \ WmnieSD.cc diag.cc precondition.cc sort_C.cc \ WmnijDD.cc diagSS.cc read_guess.cc sort_amps.cc \ WnmjeDS.cc follow_root.cc restart.cc write_Rs.cc \ amp_write.cc form_diagonal.cc restart_with_root.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: cceom.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/MOInfo.h�������������������������������������������������������������������������0000644�0001015�0000765�00000006314�10754663017�014143� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ namespace psi { namespace cceom { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; /* no. of symmetry orbitals */ int iopen; /* 0=closed shell; >0=open shell */ int phase; /* Boolean for consistency of orbital phases */ int *sopi; /* no. of SOs per irrep */ int *sosym; /* orbital symmetry (Pitzer/SO) */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irr. ex. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ int nvirt; /* total no. of (active) virtual orbitals */ char **labels; /* irrep labels */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int iter; /* Current CCSD iteration */ int sym; /* symmetry of converged CCSD state */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* alpha occupied orbital offsets within each irrep */ int *bocc_off; /* beta occupied orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* alpha virtual orbital offsets within each irrep */ int *bvir_off; /* beta virtual orbital offsets within each irrep */ double conv; /* Current convergence level */ double enuc; /* Nuclear repulsion energy */ double escf; /* SCF energy (from chkpt) */ double eref; /* Reference energy (file100) */ double ecc; /* Current coupled cluster energy */ double t1diag; /* Standard open- or closed-shell T1 diagnostic */ double d1diag; /* Janssen and Nielsen's D1 Diagnostic */ double ***C; /* Virtual orbital transformation matrix (for AO-basis B terms) */ double ***Ca; /* UHF alpha virtual orbital transformation matrix (for AO-basis B terms) */ double ***Cb; /* UHF beta virtual orbital transformation matrix (for AO-basis B terms) */ }; }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/norm.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000007330�10757640026�014122� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); norm = sqrt(norm); return norm; } double norm_C_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += C0 * C0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); norm = sqrt(norm); return norm; } double dot_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); return norm; } double dot_C_full(double C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += C0 * C0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); return norm; } double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE) { double norm = 0.0; norm = 2.0 * dpd_file2_dot_self(CME); norm += 2.0 * dpd_buf4_dot_self(CMnEf); norm -= dpd_buf4_dot(CMnEf, CMnfE); norm = sqrt(norm); return norm; } double norm_C_rhf_full(double C0, dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE) { double norm = 0.0; norm = C0 * C0; norm += 2.0 * dpd_file2_dot_self(CME); norm += 2.0 * dpd_buf4_dot_self(CMnEf); norm -= dpd_buf4_dot(CMnEf, CMnfE); norm = sqrt(norm); return norm; } double norm_C1(dpdfile2 *CME, dpdfile2 *Cme) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm = sqrt(norm); return norm; } double norm_C1_full(double C0, dpdfile2 *CME, dpdfile2 *Cme) { double norm = 0.0; norm += C0 * C0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm = sqrt(norm); return norm; } double norm_C1_rhf(dpdfile2 *CME) { double norm = 0.0; norm = 2*dpd_file2_dot_self(CME); norm = sqrt(norm); return norm; } double norm_C1_rhf_full(double C0, dpdfile2 *CME) { double norm = 0.0; norm += C0 * C0; norm += 2*dpd_file2_dot_self(CME); norm = sqrt(norm); return norm; } void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a) { dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); dpd_buf4_scm(CMNEF,a); dpd_buf4_scm(Cmnef,a); dpd_buf4_scm(CMnEf,a); return; } void scm_C_full(double *C0, dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a) { (*C0) *= a; dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); dpd_buf4_scm(CMNEF,a); dpd_buf4_scm(Cmnef,a); dpd_buf4_scm(CMnEf,a); return; } void scm_C2(dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a) { dpd_buf4_scm(CMNEF,a); dpd_buf4_scm(Cmnef,a); dpd_buf4_scm(CMnEf,a); return; } void scm_C1(dpdfile2 *CME, dpdfile2 *Cme, double a) { dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); return; } void scm_C1_full(double *C0, dpdfile2 *CME, dpdfile2 *Cme, double a) { (*C0) *= a; dpd_file2_scm(CME,a); dpd_file2_scm(Cme,a); return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/norm_HC1.cc����������������������������������������������������������������������0000644�0001015�0000765�00000041341�10757640026�014555� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void norm_HC1(int i, int C_irr) { double dot; dpdfile2 F; dpdbuf4 W; if (params.eom_ref == 0) { /* RHF */ /** FME **/ dpd_file2_init(&F, CC3_HC1, 0, 0, 1, "HC1 FME"); dot = dpd_file2_dot_self(&F); dpd_file2_close(&F); fprintf(outfile,"<FME|FME> = %15.10lf\n", dot); /** WAMEF **/ dpd_buf4_init(&W, CC3_HC1, 0, 11, 5, 11, 5, 0, "HC1 WAmEf (Am,Ef)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WAmEf (Am,Ef)|WAmEf> = %15.10lf\n", dot); /** WMNIE **/ dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMnIe (Mn,Ie)|WMnIe> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 2WMnIe - WnMIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<2WMnIe - WnMIe (Mn,Ie)|2WMnIe - WnMIe> = %15.10lf\n", dot); /** WMNIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 0, 0, 0, 0, "HC1 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMnIj (Mn,Ij)|WMnIj> = %15.10lf\n", dot); */ /** WMBIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbIj (Mb,Ij)|WMbIj> = %15.10lf\n", dot); */ /** WMBEJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbEj (ME,jb)|WMbEj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbeJ (Me,Jb)|WMbeJ> = %15.10lf\n", dot); */ /** WABEI **/ dpd_buf4_init(&W, CC3_HC1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (Ie,Ab)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WAbEi (Ie,Ab) | WAbEi (Ie,Ab)> = %15.10lf\n", dot); } else if (params.eom_ref == 1) { /* ROHF */ /** FME **/ dpd_file2_init(&F, CC3_HC1, 0, 0, 1, "HC1 FME"); dot = dpd_file2_dot_self(&F); dpd_file2_close(&F); fprintf(outfile,"\t<FME|FME> = %15.10lf\n", dot); /** Fme **/ dpd_file2_init(&F, CC3_HC1, 0, 0, 1, "HC1 Fme"); dot = dpd_file2_dot_self(&F); dpd_file2_close(&F); fprintf(outfile,"\t<Fme|Fme> = %15.10lf\n", dot); fprintf(outfile,"Wamef terms\n"); /** WAMEF **/ dpd_buf4_init(&W, CC3_HC1, 0, 11, 5, 11, 7, 0, "HC1 WAMEF (AM,E>F)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAMEF (AM,E>F)|WAMEF> = %15.10lf\n", dot); /** Wamef **/ dpd_buf4_init(&W, CC3_HC1, 0, 11, 5, 11, 7, 0, "HC1 Wamef (am,e>f)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wamef (am,e>f)|Wamef> = %15.10lf\n", dot); /** WAmEf **/ dpd_buf4_init(&W, CC3_HC1, 0, 11, 5, 11, 5, 0, "HC1 WAmEf (Am,Ef)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAmEf (Am,Ef)|WAmEf> = %15.10lf\n", dot); /** WaMeF **/ dpd_buf4_init(&W, CC3_HC1, 0, 11, 5, 11, 5, 0, "HC1 WaMeF (aM,eF)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaMeF (aM,eF)|WaMeF> = %15.10lf\n", dot); /** WMNIE **/ fprintf(outfile,"Wmnie terms\n"); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 2, 10, 0, "HC1 WMNIE (M>N,IE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE (M>N,IE)|WMNIE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 2, 10, 0, "HC1 Wmnie (m>n,ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie(m>n,ie)|Wmnie> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe (Mn,Ie)|WMnIe> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WmNiE (mN,iE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE (mN,iE)|WmNiE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 11, 2, 11, 0, "HC1 WMNIE (M>N,EI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE(M>N,EI)|WMNIE(M>N,EI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 11, 2, 11, 0, "HC1 Wmnie (m>n,ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie(m>n,ei)|Wmnie(m>n,ei)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 11, 0, 11, 0, "HC1 WMnIe (Mn,eI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe(Mn,eI)|WMnIe(Mn,eI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 11, 0, 11, 0, "HC1 WmNiE (mN,Ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE(mN,Ei)|WmNiE(mN,Ei)> = %15.10lf\n", dot); /** WMNIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 0, 2, 2, 0, "HC1 WMNIJ (M>N,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIJ (M>N,I>J)|WMNIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 0, 2, 2, 0, "HC1 Wmnij (m>n,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnij (m>n,i>j)|Wmnij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 0, 0, 0, 0, "HC1 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIj (Mn,Ij)|WMnIj> = %15.10lf\n", dot); */ /** WMBIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 10, 0, 10, 2, 0, "HC1 WMBIJ (MB,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (MB,I>J)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 2, 10, 0, "HC1 WMBIJ (I>J,MB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (I>J,MB)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 0, 10, 2, 0, "HC1 Wmbij (mb,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (mb,i>j)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 2, 10, 0, "HC1 Wmbij (i>j,mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (i>j,mb)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 0, 10, 0, 0, "HC1 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Mb,Ij)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 0, 10, 0, 0, "HC1 WmBiJ (mB,iJ)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (mB,iJ)|WmBiJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 0, 10, 0, 10, 0, "HC1 WmBiJ (iJ,mB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (iJ,mB)|WmBiJ> = %15.10lf\n", dot); */ /** WMBEJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WMBEJ (ME,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBEJ (ME,JB)|WMBEJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 Wmbej (me,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbej (me,jb)|Wmbej> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbEj (ME,jb)|WMbEj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WmBeJ (me,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBeJ (me,JB)|WmBeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbeJ (Me,Jb)|WMbeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 10, 10, 0, "HC1 WmBEj (mE,jB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBEj (mE,jB)|WmBEj> = %15.10lf\n", dot); */ /** WABEI **/ dpd_buf4_init(&W, CC3_HC1, 0, 10, 5, 10, 7, 0, "HC1 WABEI (IE,A>B)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WABEI (IE,A>B)|WABEI> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 5, 10, 7, 0, "HC1 Wabei (ie,a>b)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wabei (ie,a>b)|Wabei> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 5, 10, 5, 0, "HC1 WAbEi (iE,Ab)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,Ab)|WAbEi> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 5, 10, 5, 0, "HC1 WaBeI (Ie,aB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaBeI (Ie,aB)|WaBeI> = %15.10lf\n", dot); } else { /* UHF */ fprintf(outfile,"***** Norms of HC1 *****\n"); /** FME **/ dpd_file2_init(&F, CC3_HC1, 0, 0, 1, "HC1 FME"); dot = dpd_file2_dot_self(&F); dpd_file2_close(&F); fprintf(outfile,"\t<FME|FME> = %15.10lf\n", dot); /** Fme **/ dpd_file2_init(&F, CC3_HC1, 0, 2, 3, "HC1 Fme"); dot = dpd_file2_dot_self(&F); dpd_file2_close(&F); fprintf(outfile,"\t<Fme|Fme> = %15.10lf\n", dot); fprintf(outfile,"Wamef terms\n"); /** WAMEF **/ dpd_buf4_init(&W, CC3_HC1, 0, 20, 5, 20, 7, 0, "HC1 WAMEF (MA,F>E)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAMEF (MA,F>E)|WAMEF> = %15.10lf\n", dot); /** Wamef **/ dpd_buf4_init(&W, CC3_HC1, 0, 30, 15, 30, 17, 0, "HC1 Wamef (ma,f>e)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wamef (ma,f>e)|Wamef> = %15.10lf\n", dot); /** WAmEf **/ dpd_buf4_init(&W, CC3_HC1, 0, 27, 29, 27, 28, 0, "HC1 WAmEf (mA,fE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAmEf (mA,fE)|WAmEf> = %15.10lf\n", dot); /** WaMeF **/ dpd_buf4_init(&W, CC3_HC1, 0, 24, 28, 24, 28, 0, "HC1 WaMeF (Ma,Fe)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaMeF (Ma,Fe)|WaMeF> = %15.10lf\n", dot); /** WMNIE **/ fprintf(outfile,"Wmnie terms\n"); dpd_buf4_init(&W, CC3_HC1, 0, 0, 20, 2, 20, 0, "HC1 WMNIE (M>N,IE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE (M>N,IE)|WMNIE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 30, 12, 30, 0, "HC1 Wmnie (m>n,ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie (m>n,ie)|Wmnie> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 22, 24, 22, 24, 0, "HC1 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe (Mn,Ie)|WMnIe> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 23, 27, 23, 27, 0, "HC1 WmNiE (mN,iE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE (mN,iE)|WmNiE> = %15.10lf\n", dot); /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 21, 2, 21, 0, "HC1 WMNIE (M>N,EI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE(M>N,EI)|WMNIE(M>N,EI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 31, 12, 31, 0, "HC1 Wmnie (m>n,ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie(m>n,ei)|Wmnie(m>n,ei)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 22, 25, 22, 25, 0, "HC1 WMnIe (Mn,eI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe(Mn,eI)|WMnIe(Mn,eI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 23, 26, 23, 26, 0, "HC1 WmNiE (mN,Ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE(mN,Ei)|WmNiE(mN,Ei)> = %15.10lf\n", dot); */ /** WMNIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 0, 2, 2, 0, "HC1 WMNIJ (M>N,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIJ (M>N,I>J)|WMNIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 10, 12, 12, 0, "HC1 Wmnij (m>n,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnij (m>n,i>j)|Wmnij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 22, 22, 22, 22, 0, "HC1 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIj (Mn,Ij)|WMnIj> = %15.10lf\n", dot); */ /** WMBIJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 20, 0, 20, 2, 0, "HC1 WMBIJ (MB,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (MB,I>J)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 30, 10, 30, 12, 0, "HC1 Wmbij (mb,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (mb,i>j)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 24, 22, 24, 22, 0, "HC1 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Mb,Ij)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 27, 23, 27, 23, 0, "HC1 WmBiJ (mB,iJ)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (mB,iJ)|WmBiJ> = %15.10lf\n", dot); */ /* dpd_buf4_init(&W, CC3_HC1, 0, 0, 20, 2, 20, 0, "HC1 WMBIJ (I>J,MB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (I>J,MB)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 10, 30, 12, 30, 0, "HC1 Wmbij (i>j,mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (i>j,mb)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 22, 24, 22, 24, 0, "HC1 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 23, 27, 23, 27, 0, "HC1 WmBiJ (iJ,mB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (iJ,mB)|WmBiJ> = %15.10lf\n", dot); */ /** WMBEJ **/ /* dpd_buf4_init(&W, CC3_HC1, 0, 20, 20, 20, 20, 0, "HC1 WMBEJ (ME,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBEJ (ME,JB)|WMBEJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 30, 30, 30, 30, 0, "HC1 Wmbej (me,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbej (me,jb)|Wmbej> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 24, 26, 24, 26, 0, "HC1 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbEj (ME,jb)|WMbEj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 27, 25, 27, 25, 0, "HC1 WmBeJ (me,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBeJ (me,JB)|WmBeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 24, 24, 24, 24, 0, "HC1 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbeJ (Me,Jb)|WMbeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 27, 27, 27, 27, 0, "HC1 WmBEj (mE,jB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBEj (mE,jB)|WmBEj> = %15.10lf\n", dot); */ /** WABEI **/ dpd_buf4_init(&W, CC3_HC1, 0, 20, 5, 20, 7, 0, "HC1 WABEI (IE,B>A)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WABEI (IE,A>B)|WABEI> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 30, 15, 30, 17, 0, "HC1 Wabei (ie,b>a)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wabei (ie,a>b)|Wabei> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 27, 29, 27, 29, 0, "HC1 WAbEi (iE,bA)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,Ab)|WAbEi> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HC1, 0, 24, 28, 24, 28, 0, "HC1 WaBeI (Ie,Ba)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaBeI (Ie,aB)|WaBeI> = %15.10lf\n", dot); } return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/Params.h�������������������������������������������������������������������������0000644�0001015�0000765�00000002235�10754663017�014235� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ namespace psi { namespace cceom { /* Input parameters for ccenergy */ struct Params { long int memory; int aobasis; int cachelev; int cachetype; int ref; int eom_ref; int local; char *wfn; int semicanonical; int full_matrix; /* include reference rows/cols in diagonalization */ char *abcd; int t3_Ws_incore; int nthreads; }; struct Eom_params { int max_iter; int vectors_per_root; int *states_per_irrep; int *cs_per_irrep; double *state_energies; int number_of_states; double eval_tol; double eval_tol_SS; double residual_tol; int prop_root; int prop_sym; int save_all; int print_singles; double complex_tol; double schmidt_add_residual_tol; int max_iter_SS; int vectors_per_root_SS; int excitation_range; double residual_tol_SS; char *guess; int rhf_triplets; int mult; int follow_root; int collapse_with_last; int skip_diagSS; int vectors_cc3; int restart_eom_cc3; /* compute overlap of normalized R with L (must run cclambda first) */ int dot_with_L; double L0; int L_irr; }; }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/precondition.cc������������������������������������������������������������������0000644�0001015�0000765�00000027347�10757640026�015656� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdlib> #include <cstdio> #include <cmath> #include <cstring> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* for ROHF and UHF */ void precondition(dpdfile2 *RIA, dpdfile2 *Ria, dpdbuf4 *RIJAB, dpdbuf4 *Rijab, dpdbuf4 *RIjAb, double eval) { dpdfile2 DIA, Dia; dpdbuf4 DIJAB, Dijab, DIjAb; int h, nirreps, i, j, a, b, ij, ab, C_irr; double tval; C_irr = RIA->my_irrep; nirreps = RIA->params->nirreps; dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); dpd_file2_mat_rd(&DIA); for(h=0; h < nirreps; h++) for(i=0; i < RIA->params->rowtot[h]; i++) for(a=0; a < RIA->params->coltot[h^C_irr]; a++) { tval = eval - DIA.matrix[h][i][a]; if (fabs(tval) > 0.0001) RIA->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); dpd_file2_mat_close(&DIA); dpd_file2_close(&DIA); dpd_file2_mat_init(Ria); dpd_file2_mat_rd(Ria); if (params.eom_ref == 1) dpd_file2_init(&Dia, EOM_D, C_irr, 0, 1, "Dia"); else if (params.eom_ref == 2) dpd_file2_init(&Dia, EOM_D, C_irr, 2, 3, "Dia"); dpd_file2_mat_init(&Dia); dpd_file2_mat_rd(&Dia); for(h=0; h < nirreps; h++) for(i=0; i < Ria->params->rowtot[h]; i++) for(a=0; a < Ria->params->coltot[h^C_irr]; a++) { tval = eval - Dia.matrix[h][i][a]; if (fabs(tval) > 0.0001) Ria->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(Ria); dpd_file2_mat_close(Ria); dpd_file2_mat_close(&Dia); dpd_file2_close(&Dia); dpd_buf4_init(&DIJAB, EOM_D, C_irr, 2, 7, 2, 7, 0, "DIJAB"); for(h=0; h < RIJAB->params->nirreps; h++) { dpd_buf4_mat_irrep_init(RIJAB, h); dpd_buf4_mat_irrep_init(&DIJAB, h); dpd_buf4_mat_irrep_rd(RIJAB, h); dpd_buf4_mat_irrep_rd(&DIJAB, h); for(ij=0; ij < RIJAB->params->rowtot[h]; ij++) for(ab=0; ab < RIJAB->params->coltot[h^C_irr]; ab++) { tval = eval - DIJAB.matrix[h][ij][ab]; if (fabs(tval) > 0.0001) RIJAB->matrix[h][ij][ab] /= tval; } dpd_buf4_mat_irrep_wrt(RIJAB, h); dpd_buf4_mat_irrep_close(RIJAB, h); dpd_buf4_mat_irrep_close(&DIJAB, h); } dpd_buf4_close(&DIJAB); if (params.eom_ref == 1) dpd_buf4_init(&Dijab, EOM_D, C_irr, 2, 7, 2, 7, 0, "Dijab"); else if (params.eom_ref == 2) dpd_buf4_init(&Dijab, EOM_D, C_irr, 12, 17, 12, 17, 0, "Dijab"); for(h=0; h < Rijab->params->nirreps; h++) { dpd_buf4_mat_irrep_init(Rijab, h); dpd_buf4_mat_irrep_init(&Dijab, h); dpd_buf4_mat_irrep_rd(Rijab, h); dpd_buf4_mat_irrep_rd(&Dijab, h); for(ij=0; ij < Rijab->params->rowtot[h]; ij++) for(ab=0; ab < Rijab->params->coltot[h^C_irr]; ab++) { tval = eval - Dijab.matrix[h][ij][ab]; if (fabs(tval) > 0.0001) Rijab->matrix[h][ij][ab] /= tval; } dpd_buf4_mat_irrep_wrt(Rijab, h); dpd_buf4_mat_irrep_close(Rijab, h); dpd_buf4_mat_irrep_close(&Dijab, h); } dpd_buf4_close(&Dijab); if (params.eom_ref == 1) dpd_buf4_init(&DIjAb, EOM_D, C_irr, 0, 5, 0, 5, 0, "DIjAb"); else if (params.eom_ref == 2) dpd_buf4_init(&DIjAb, EOM_D, C_irr, 22, 28, 22, 28, 0, "DIjAb"); for(h=0; h < RIjAb->params->nirreps; h++) { dpd_buf4_mat_irrep_init(RIjAb, h); dpd_buf4_mat_irrep_init(&DIjAb, h); dpd_buf4_mat_irrep_rd(RIjAb, h); dpd_buf4_mat_irrep_rd(&DIjAb, h); for(ij=0; ij < RIjAb->params->rowtot[h]; ij++) for(ab=0; ab < RIjAb->params->coltot[h^C_irr]; ab++) { tval = eval - DIjAb.matrix[h][ij][ab]; if (fabs(tval) > 0.0001) RIjAb->matrix[h][ij][ab] /= tval; } dpd_buf4_mat_irrep_wrt(RIjAb, h); dpd_buf4_mat_irrep_close(RIjAb, h); dpd_buf4_mat_irrep_close(&DIjAb, h); } dpd_buf4_close(&DIjAb); return; } void precondition_RHF(dpdfile2 *RIA, dpdbuf4 *RIjAb, double eval) { dpdfile2 DIA; dpdbuf4 DIjAb; int h, nirreps, i, j, a, b, ij, ab, ii, C_irr; double tval; /* Local correlation decs */ int nso, nocc, nvir; double *T1tilde, *T1bar, **T2tilde, **T2bar, **X1, **X2; psio_address next; C_irr = RIA->my_irrep; nirreps = RIA->params->nirreps; if(params.local) { nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); local.weak_pairs = init_int_array(nocc*nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain Length (Non-redundant basis)", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, nocc*nocc*sizeof(int)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } if(local.filter_singles) { dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); for(i=0; i < nocc; i++) { ii = i * nocc +i; if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(2); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(RIA->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); for(a=0; a < local.pairdom_nrlen[ii]; a++) { tval = eval + local.eps_occ[i] - local.eps_vir[ii][a]; if(fabs(tval) > 0.0001) T1bar[a] /= tval; } /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(RIA->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); } } else { dpd_file2_mat_init(RIA); dpd_file2_mat_rd(RIA); dpd_file2_init(&DIA, EOM_D, C_irr, 0, 1, "DIA"); dpd_file2_mat_init(&DIA); dpd_file2_mat_rd(&DIA); for(h=0; h < nirreps; h++) for(i=0; i < RIA->params->rowtot[h]; i++) for(a=0; a < RIA->params->coltot[h^C_irr]; a++) { tval = eval - DIA.matrix[h][i][a]; if (fabs(tval) > 0.0001) RIA->matrix[h][i][a] /= tval; } dpd_file2_mat_wrt(RIA); dpd_file2_mat_close(RIA); dpd_file2_mat_close(&DIA); dpd_file2_close(&DIA); } if(params.local) { dpd_buf4_mat_irrep_init(RIjAb, 0); dpd_buf4_mat_irrep_rd(RIjAb, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { if(!local.weak_pairs[ij]) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', local.pairdom_len[ij], nvir, nvir, 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(RIjAb->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < local.pairdom_nrlen[ij]; a++) { for(b=0; b < local.pairdom_nrlen[ij]; b++) { tval = eval + local.eps_occ[i]+local.eps_occ[j]-local.eps_vir[ij][a]-local.eps_vir[ij][b]; if(fabs(tval) > 0.0001) T2bar[a][b] /= tval; } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', local.pairdom_len[ij], local.pairdom_len[ij], local.pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(RIjAb->matrix[0][ij][0]), nvir); } else /* This must be a neglected weak pair; force it to zero */ memset((void *) RIjAb->matrix[0][ij], 0, nvir*nvir*sizeof(double)); } } free_block(T2tilde); free_block(T2bar); free_block(X1); free_block(X2); dpd_buf4_mat_irrep_wrt(RIjAb, 0); dpd_buf4_mat_irrep_close(RIjAb, 0); /* Free Local Memory */ for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); } else { dpd_buf4_init(&DIjAb, EOM_D, C_irr, 0, 5, 0, 5, 0, "DIjAb"); for(h=0; h < RIjAb->params->nirreps; h++) { dpd_buf4_mat_irrep_init(RIjAb, h); dpd_buf4_mat_irrep_init(&DIjAb, h); dpd_buf4_mat_irrep_rd(RIjAb, h); dpd_buf4_mat_irrep_rd(&DIjAb, h); for(ij=0; ij < RIjAb->params->rowtot[h]; ij++) for(ab=0; ab < RIjAb->params->coltot[h^C_irr]; ab++) { tval = eval - DIjAb.matrix[h][ij][ab]; if (fabs(tval) > 0.0001) RIjAb->matrix[h][ij][ab] /= tval; } dpd_buf4_mat_irrep_wrt(RIjAb, h); dpd_buf4_mat_irrep_close(RIjAb, h); dpd_buf4_mat_irrep_close(&DIjAb, h); } dpd_buf4_close(&DIjAb); } return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/read_guess.cc��������������������������������������������������������������������0000644�0001015�0000765�00000012415�10757640026�015270� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libipv1/ip_lib.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* counts the number of states and Cs for each irrep based on the orbital numbers given * in input -- overrides the "states_per_irrep" keyword */ void read_guess_init(void) { int i, a, k, l, spin, errcod, C_irrep; int num_vectors, vector_len, this_irrep, useit; char lbl[32]; double norm, value; dpdfile2 CME; for (i=0;i<moinfo.nirreps;++i) { eom_params.cs_per_irrep[i] = 0; eom_params.states_per_irrep[i] = 0; } /* Read number of guess = number of final states to solve for */ errcod = ip_count("EOM_GUESS",&num_vectors,0); if(errcod != IPE_OK) { fprintf(outfile, "\nread_guess(): Unable to read number of guesses from input.\n"); exit(2); } for(k=0; k < num_vectors; k++) { ip_count("EOM_GUESS", &vector_len, 1, k); for(l=0; l < vector_len; l++) { errcod = ip_data("EOM_GUESS", "%d", &i, 3, k, l, 0); errcod = ip_data("EOM_GUESS", "%d", &a, 3, k, l, 1); errcod = ip_data("EOM_GUESS", "%lf", &value, 3, k, l, 2); errcod = ip_data("EOM_GUESS", "%d", &spin, 4, k, l, 3); if ((spin != 0) && (params.eom_ref == 0)) { fprintf(outfile,"only alpha guesses allowed for EOM_REF = RHF\n"); exit(1); } if(l==0) { /* check symmetry of first excitation */ if (spin == 0) this_irrep = moinfo.aocc_sym[i]^moinfo.avir_sym[a]; else this_irrep = moinfo.bocc_sym[i]^moinfo.bvir_sym[a]; eom_params.cs_per_irrep[this_irrep] += 1; eom_params.states_per_irrep[this_irrep^moinfo.sym] += 1; } else { /* check consistency of other excitations */ if (spin == 0) { if (moinfo.aocc_sym[i]^moinfo.avir_sym[a] != this_irrep) { fprintf(outfile, "\nInconsisent symmetries in components of guess %d.\n", k); exit(2); } } else { if (moinfo.bocc_sym[i]^moinfo.bvir_sym[a] != this_irrep) { fprintf(outfile, "\nInconsisent symmetries in components of guess %d.\n", k); exit(2); } } } } } fprintf(outfile,"EOM_GUESS implies states_per_irrep: \n\t"); for (i=0;i<moinfo.nirreps;++i) fprintf(outfile,"%s %d, ",moinfo.labels[i], eom_params.states_per_irrep[i]); fprintf(outfile,"\n"); fprintf(outfile,"and Rs_per_irrep: \n\t"); for (i=0;i<moinfo.nirreps;++i) fprintf(outfile,"%s %d, ",moinfo.labels[i], eom_params.cs_per_irrep[i]); fprintf(outfile,"These numbers should match those given by the states_per_irrep keyword\n"); fprintf(outfile,"\n\n"); return; } void read_guess(int C_irr) { int i, a, k, l, spin, errcod; int num_vectors, vector_len, this_irrep; char lbl[32]; double norm, value; dpdfile2 CME, Cme; errcod = ip_count("EOM_GUESS",&num_vectors,0); if(errcod != IPE_OK) { fprintf(outfile, "\nread_guess(): Unable to read number of guesses from input.\n"); exit(2); } /* loop over number of initial guess of this symmetry */ for(k=0; k < eom_params.cs_per_irrep[C_irr]; k++) { sprintf(lbl, "%s %d", "CME", k); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_scm(&CME, 0); dpd_file2_mat_init(&CME); if(params.eom_ref <= 1) { sprintf(lbl, "%s %d", "Cme", k); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_scm(&Cme, 0); dpd_file2_mat_init(&Cme); } else if (params.eom_ref == 2) { sprintf(lbl, "%s %d", "Cme", k); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_scm(&Cme, 0); dpd_file2_mat_init(&Cme); } norm = 0.0; ip_count("EOM_GUESS", &vector_len, 1, k); for(l=0; l < vector_len; l++) { errcod = ip_data("EOM_GUESS", "%d", &i, 3, k, l, 0); errcod = ip_data("EOM_GUESS", "%d", &a, 3, k, l, 1); errcod = ip_data("EOM_GUESS", "%lf", &value, 3, k, l, 2); errcod = ip_data("EOM_GUESS", "%d", &spin, 3, k, l, 3); if(l==0) { /* check symmetry of this state */ if (spin == 0) this_irrep = moinfo.aocc_sym[i]^moinfo.avir_sym[a]; else this_irrep = moinfo.bocc_sym[i]^moinfo.bvir_sym[a]; } else{ /* check other excitations for consistency */ if (spin == 0) { if (moinfo.aocc_sym[i]^moinfo.avir_sym[a] != this_irrep) { fprintf(outfile, "\nInconsisent symmetries in components of guess %d.\n", k); exit(2); } } else { if (moinfo.bocc_sym[i]^moinfo.bvir_sym[a] != this_irrep) { fprintf(outfile, "\nInconsisent symmetries in components of guess %d.\n", k); exit(2); } } } if (spin == 0) CME.matrix[C_irr][i][a] = value; else Cme.matrix[C_irr][i][a] = value; norm += value * value; } dpd_file2_mat_wrt(&CME); dpd_file2_mat_wrt(&Cme); dpd_file2_mat_close(&CME); dpd_file2_mat_close(&Cme); dpd_file2_scm(&CME,1.0/sqrt(norm)); dpd_file2_scm(&Cme,1.0/sqrt(norm)); dpd_file2_close(&CME); dpd_file2_close(&Cme); } return; } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/restart.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000024307�11001405556�014624� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* restart() collapses L vectors down to num vectors */ #include <cstdio> #include <cmath> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void restart(double **alpha, int L, int num, int C_irr, int ortho, double **alpha_old, int L_old, int use_alpha_old) { int i,I,j,h, A_OCC, B_OCC, A_VIR, B_VIR, cnt, L_tot; int AA_OCC, AA_VIR, BB_OCC, BB_VIR, AB_OCC, AB_VIR; char lbl[20]; dpdfile2 C1, CME, Cme, SIA, Sia; double C10, CME0, S0, **alpha_tot; dpdbuf4 C2, CMNEF, Cmnef, CMnEf, SIJAB, Sijab, SIjAb; double dotval, norm; #ifdef TIME_CCEOM timer_on("RESTART"); #endif A_OCC = 0; A_VIR = 1; AA_OCC = 2; AA_VIR = 7; if (params.eom_ref <= 1) { B_OCC = 0; B_VIR = 1; BB_OCC = 2; BB_VIR = 7; AB_OCC = 0; AB_VIR = 5; } else if (params.eom_ref == 2) { B_OCC = 2; B_VIR = 3; BB_OCC = 12; BB_VIR = 17; AB_OCC = 22; AB_VIR = 28; } if (use_alpha_old) L_tot = L + L_old; else L_tot = L; alpha_tot = block_matrix(L,L_tot); if (use_alpha_old) { cnt = 0; for (j=0;j<num;++j,++cnt) for (i=0; i<L; ++i) alpha_tot[i][cnt] = alpha[i][j]; for (j=0;j<num;++j,++cnt) for (i=0; i<L_old; ++i) alpha_tot[i][cnt] = alpha_old[i][j]; for (j=num;j<L;++j,++cnt) for (i=0; i<L; ++i) alpha_tot[i][cnt] = alpha[i][j]; for (j=num;j<L_old;++j,++cnt) for (i=0; i<L_old; ++i) alpha_tot[i][cnt] = alpha_old[i][j]; num *= 2; } else { for (i=0; i<L; ++i) for (j=0;j<L;++j) alpha_tot[i][j] = alpha[i][j]; } /* fprintf(outfile,"alpha\n"); print_mat(alpha,L,L,outfile); fprintf(outfile,"alpha_old\n"); print_mat(alpha_old,L_old,L_old,outfile); fprintf(outfile,"alpha_tot\n"); print_mat(alpha_tot,L,L_tot,outfile); */ /* Orthonormalize alpha[1] through alpha[num] */ if ((ortho) || (use_alpha_old)) { for (I=1;I<num;++I) { for (i=0; i<I; i++) { dotval = 0.0; for (j=0;j<L;++j) { dotval += alpha_tot[j][i] * alpha_tot[j][I]; } for (j=0; j<L; j++) alpha_tot[j][I] -= dotval * alpha_tot[j][i]; } dotval = 0.0; for (j=0;j<L;++j) dotval += alpha_tot[j][I] * alpha_tot[j][I]; norm = sqrt(dotval); for (j=0;j<L;++j) alpha_tot[j][I] = alpha_tot[j][I]/norm; } } /* Form restart vectors Ci = Sum_j(alpha[j][i]*Cj) */ for (i=0; i<num; ++i) { sprintf(lbl, "%s %d", "CME", L+i); dpd_file2_init(&C1, EOM_CME, C_irr, A_OCC, A_VIR, lbl); dpd_file2_scm(&C1, 0.0); C10 = 0.0; for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "CME", j); dpd_file2_init(&CME, EOM_CME, C_irr, A_OCC, A_VIR, lbl); dpd_file2_axpy(&CME, &C1, alpha_tot[j][i], 0); dpd_file2_close(&CME); if (params.full_matrix) { sprintf(lbl, "%s %d", "C0", j); psio_read_entry(EOM_CME, lbl, (char *) &CME0, sizeof(double)); C10 += alpha_tot[j][i] * CME0; } } if (params.full_matrix) { sprintf(lbl, "%s %d", "C0", L+i); psio_write_entry(EOM_CME, lbl, (char *) &C10, sizeof(double)); } dpd_file2_close(&C1); sprintf(lbl, "%s %d", "CMnEf", L+i); dpd_buf4_init(&C2, EOM_CMnEf, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "CMnEf", j); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); dpd_buf4_axpy(&CMnEf, &C2, alpha_tot[j][i]); dpd_buf4_close(&CMnEf); } dpd_buf4_close(&C2); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", L+i); dpd_file2_init(&C1, EOM_Cme, C_irr, B_OCC, B_VIR, lbl); dpd_file2_scm(&C1, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "Cme", j); dpd_file2_init(&Cme, EOM_Cme, C_irr, B_OCC, B_VIR, lbl); dpd_file2_axpy(&Cme, &C1, alpha_tot[j][i], 0); dpd_file2_close(&Cme); } dpd_file2_close(&C1); sprintf(lbl, "%s %d", "CMNEF", L+i); dpd_buf4_init(&C2, EOM_CMNEF, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "CMNEF", j); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); dpd_buf4_axpy(&CMNEF, &C2, alpha_tot[j][i]); dpd_buf4_close(&CMNEF); } dpd_buf4_close(&C2); sprintf(lbl, "%s %d", "Cmnef", L+i); dpd_buf4_init(&C2, EOM_Cmnef, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "Cmnef", j); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); dpd_buf4_axpy(&Cmnef, &C2, alpha_tot[j][i]); dpd_buf4_close(&Cmnef); } dpd_buf4_close(&C2); } sprintf(lbl, "%s %d", "SIA", L+i); dpd_file2_init(&C1, EOM_SIA, C_irr, A_OCC, A_VIR, lbl); dpd_file2_scm(&C1, 0.0); C10 = 0.0; for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "SIA", j); dpd_file2_init(&SIA, EOM_SIA, C_irr, A_OCC, A_VIR, lbl); dpd_file2_axpy(&SIA, &C1, alpha_tot[j][i], 0); dpd_file2_close(&SIA); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", j); psio_read_entry(EOM_SIA, lbl, (char *) &S0, sizeof(double)); C10 += alpha_tot[j][i] * S0; } } if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", L+i); psio_write_entry(EOM_SIA, lbl, (char *) &C10, sizeof(double)); } dpd_file2_close(&C1); sprintf(lbl, "%s %d", "SIjAb", L+i); dpd_buf4_init(&C2, EOM_SIjAb, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "SIjAb", j); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); dpd_buf4_axpy(&SIjAb, &C2, alpha_tot[j][i]); dpd_buf4_close(&SIjAb); } dpd_buf4_close(&C2); if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Sia", L+i); dpd_file2_init(&C1, EOM_Sia, C_irr, B_OCC, B_VIR, lbl); dpd_file2_scm(&C1, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "Sia", j); dpd_file2_init(&Sia, EOM_Sia, C_irr, B_OCC, B_VIR, lbl); dpd_file2_axpy(&Sia, &C1, alpha_tot[j][i], 0); dpd_file2_close(&Sia); } dpd_file2_close(&C1); sprintf(lbl, "%s %d", "SIJAB", L+i); dpd_buf4_init(&C2, EOM_SIJAB, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "SIJAB", j); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); dpd_buf4_axpy(&SIJAB, &C2, alpha_tot[j][i]); dpd_buf4_close(&SIJAB); } dpd_buf4_close(&C2); sprintf(lbl, "%s %d", "Sijab", L+i); dpd_buf4_init(&C2, EOM_Sijab, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); dpd_buf4_scm(&C2, 0.0); for (j=0;j<L;++j) { sprintf(lbl, "%s %d", "Sijab", j); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); dpd_buf4_axpy(&Sijab, &C2, alpha_tot[j][i]); dpd_buf4_close(&Sijab); } dpd_buf4_close(&C2); } } /* Copy restart vectors to beginning of file */ for (i=0; i<num; ++i) { sprintf(lbl, "%s %d", "CME", L+i); dpd_file2_init(&CME, EOM_CME, C_irr, A_OCC, A_VIR, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_copy(&CME, EOM_CME, lbl); dpd_file2_close(&CME); sprintf(lbl, "%s %d", "CMnEf", L+i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_copy(&CMnEf, EOM_CMnEf, lbl); dpd_buf4_close(&CMnEf); if (params.full_matrix) { sprintf(lbl, "%s %d", "C0", L+i); psio_read_entry(EOM_CME, lbl, (char *) &CME0, sizeof(double)); sprintf(lbl, "%s %d", "C0", i); psio_write_entry(EOM_CME, lbl, (char *) &CME0, sizeof(double)); } if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Cme", L+i); dpd_file2_init(&Cme, EOM_Cme, C_irr, B_OCC, B_VIR, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_copy(&Cme, EOM_Cme, lbl); dpd_file2_close(&Cme); sprintf(lbl, "%s %d", "CMNEF", L+i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_copy(&CMNEF, EOM_CMNEF, lbl); dpd_buf4_close(&CMNEF); sprintf(lbl, "%s %d", "Cmnef", L+i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_copy(&Cmnef, EOM_Cmnef, lbl); dpd_buf4_close(&Cmnef); } sprintf(lbl, "%s %d", "SIA", L+i); dpd_file2_init(&SIA, EOM_SIA, C_irr, A_OCC, A_VIR, lbl); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_copy(&SIA, EOM_SIA, lbl); dpd_file2_close(&SIA); sprintf(lbl, "%s %d", "SIjAb", L+i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_copy(&SIjAb, EOM_SIjAb, lbl); dpd_buf4_close(&SIjAb); if (params.full_matrix) { sprintf(lbl, "%s %d", "S0", L+i); psio_read_entry(EOM_SIA, lbl, (char *) &S0, sizeof(double)); sprintf(lbl, "%s %d", "S0", i); psio_write_entry(EOM_SIA, lbl, (char *) &S0, sizeof(double)); } if (params.eom_ref > 0) { sprintf(lbl, "%s %d", "Sia", L+i); dpd_file2_init(&Sia, EOM_Sia, C_irr, B_OCC, B_VIR, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_copy(&Sia, EOM_Sia, lbl); dpd_file2_close(&Sia); sprintf(lbl, "%s %d", "SIJAB", L+i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_copy(&SIJAB, EOM_SIJAB, lbl); dpd_buf4_close(&SIJAB); sprintf(lbl, "%s %d", "Sijab", L+i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_copy(&Sijab, EOM_Sijab, lbl); dpd_buf4_close(&Sijab); } } free_block(alpha_tot); #ifdef TIME_CCEOM timer_off("RESTART"); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/restart_with_root.cc�������������������������������������������������������������0000644�0001015�0000765�00000012323�10757640026�016727� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* restart_with_root: copies C's from position prop_root to position 0 in EOM_Cxxx files also put copy in CC3_MISC for root_following */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void restart_with_root(int prop_root, int C_irr) { dpdfile2 CME, Cme; dpdbuf4 CMNEF, Cmnef, CMnEf; char lbl[32]; fprintf(outfile,"Copying root %d to start of EOM_Cxxx files.\n",prop_root+1); if (params.eom_ref == 0) { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, EOM_CME, "CME 0"); dpd_file2_close(&CME); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, EOM_CMnEf, "CMnEf 0"); dpd_buf4_close(&CMnEf); } else if (params.eom_ref == 1) { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, EOM_CME, "CME 0"); dpd_file2_close(&CME); sprintf(lbl, "Cme %d", prop_root); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_copy(&Cme, EOM_Cme, "Cme 0"); dpd_file2_close(&Cme); sprintf(lbl, "CMNEF %d", prop_root); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&CMNEF, EOM_CMNEF, "CMNEF 0"); dpd_buf4_close(&CMNEF); sprintf(lbl, "Cmnef %d", prop_root); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&Cmnef, EOM_Cmnef, "Cmnef 0"); dpd_buf4_close(&Cmnef); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, EOM_CMnEf, "CMnEf 0"); dpd_buf4_close(&CMnEf); } else { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, EOM_CME, "CME 0"); dpd_file2_close(&CME); sprintf(lbl, "Cme %d", prop_root); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_copy(&Cme, EOM_Cme, "Cme 0"); dpd_file2_close(&Cme); sprintf(lbl, "CMNEF %d", prop_root); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&CMNEF, EOM_CMNEF, "CMNEF 0"); dpd_buf4_close(&CMNEF); sprintf(lbl, "Cmnef %d", prop_root); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); dpd_buf4_copy(&Cmnef, EOM_Cmnef, "Cmnef 0"); dpd_buf4_close(&Cmnef); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_copy(&CMnEf, EOM_CMnEf, "CMnEf 0"); dpd_buf4_close(&CMnEf); } return; } /* save_C_ccsd: copies C's from position prop_root to CC3_MISC file */ void save_C_ccsd(int prop_root, int C_irr) { dpdfile2 CME, Cme; dpdbuf4 CMNEF, Cmnef, CMnEf; char lbl[32]; fprintf(outfile,"Copying root %d to CC3_MISC file.\n",prop_root+1); if (params.eom_ref == 0) { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, CC3_MISC, "CCSD CME"); dpd_file2_close(&CME); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, CC3_MISC, "CCSD CMnEf"); dpd_buf4_close(&CMnEf); } else if (params.eom_ref == 1) { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, CC3_MISC, "CCSD CME"); dpd_file2_close(&CME); sprintf(lbl, "Cme %d", prop_root); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); dpd_file2_copy(&Cme, CC3_MISC, "CCSD Cme"); dpd_file2_close(&Cme); sprintf(lbl, "CMNEF %d", prop_root); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&CMNEF, CC3_MISC, "CCSD CMNEF"); dpd_buf4_close(&CMNEF); sprintf(lbl, "Cmnef %d", prop_root); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&Cmnef, CC3_MISC, "CCSD Cmnef"); dpd_buf4_close(&Cmnef); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, CC3_MISC, "CCSD CMnEf"); dpd_buf4_close(&CMnEf); } else { sprintf(lbl, "CME %d", prop_root); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_copy(&CME, CC3_MISC, "CCSD CME"); dpd_file2_close(&CME); sprintf(lbl, "Cme %d", prop_root); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); dpd_file2_copy(&Cme, CC3_MISC, "CCSD Cme"); dpd_file2_close(&Cme); sprintf(lbl, "CMNEF %d", prop_root); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl); dpd_buf4_copy(&CMNEF, CC3_MISC, "CCSD CMNEF"); dpd_buf4_close(&CMNEF); sprintf(lbl, "Cmnef %d", prop_root); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl); dpd_buf4_copy(&Cmnef, CC3_MISC, "CCSD Cmnef"); dpd_buf4_close(&Cmnef); sprintf(lbl, "CMnEf %d", prop_root); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_copy(&CMnEf, CC3_MISC, "CCSD CMnEf"); dpd_buf4_close(&CMnEf); } return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/rzero.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000047742�10757640026�014323� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <cstring> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double dot_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); extern void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a); /* this function determines R0, properly normalizes R, and checks orthogonality * with the ground state left eigenvector (1+lambda) */ /* for ROHF and UHF */ void rzero(int C_irr, int *converged) { double rzero=0.0, energy, norm, dotval; double dot_IA, dot_ia, dot_IJAB, dot_ijab, dot_IjAb; dpdfile2 RIA, Ria, RIA2, Ria2, FIA, Fia, LIA, Lia; dpdbuf4 RIJAB, Rijab, RIjAb, D, R2, LIJAB, Lijab, LIjAb; dpdbuf4 fRIJAB, fRijab, fRIjAb; int L_irr, i; int A_OCC, B_OCC, A_VIR, B_VIR; int AA_OCC, AA_VIR, BB_OCC, BB_VIR, AB_OCC, AB_VIR; char lbl[32], E_lbl[32], R1A_lbl[32], R1B_lbl[32]; char R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; int R_index = -1; A_OCC = 0; A_VIR = 1; AA_OCC = 2; AA_VIR = 7; if (params.eom_ref <= 1) { B_OCC = 0; B_VIR = 1; BB_OCC = 2; BB_VIR = 7; AB_OCC = 0; AB_VIR = 5; } else if (params.eom_ref == 2) { B_OCC = 2; B_VIR = 3; BB_OCC = 12; BB_VIR = 17; AB_OCC = 22; AB_VIR = 28; } L_irr = eom_params.L_irr; for(i=0; i < eom_params.cs_per_irrep[C_irr]; i++) { if (!converged[i]) continue; /* this root did not converged */ ++R_index; if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(E_lbl, "EOM CC2 Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CC2 Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(E_lbl, "EOM CC3 Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CC3 Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } sprintf(R1A_lbl, "RIA %d %d", C_irr, R_index); sprintf(R1B_lbl, "Ria %d %d", C_irr, R_index); sprintf(R2AA_lbl, "RIJAB %d %d", C_irr, R_index); sprintf(R2BB_lbl, "Rijab %d %d", C_irr, R_index); sprintf(R2AB_lbl, "RIjAb %d %d", C_irr, R_index); /* Calculate <0| Hbar R |0> */ if (C_irr == H_IRR) { dpd_file2_init(&FIA, CC_OEI, H_IRR, A_OCC, A_VIR, "FME"); dpd_file2_init(&RIA, CC_RAMPS, C_irr, A_OCC, A_VIR, R1A_lbl); dot_IA = dpd_file2_dot(&FIA, &RIA); dpd_file2_close(&RIA); dpd_file2_close(&FIA); dpd_file2_init(&Fia, CC_OEI, H_IRR, B_OCC, B_VIR, "Fme"); dpd_file2_init(&Ria, CC_RAMPS, C_irr, B_OCC, B_VIR, R1B_lbl); dot_ia = dpd_file2_dot(&Fia, &Ria); dpd_file2_close(&Ria); dpd_file2_close(&Fia); if (params.eom_ref == 1) { dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&RIJAB, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2AA_lbl); dot_IJAB = dpd_buf4_dot(&D, &RIJAB); dpd_buf4_close(&RIJAB); dpd_buf4_init(&Rijab, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2BB_lbl); dot_ijab = dpd_buf4_dot(&D, &Rijab); dpd_buf4_close(&Rijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); dot_IjAb = dpd_buf4_dot(&D, &RIjAb); dpd_buf4_close(&RIjAb); dpd_buf4_close(&D); } else if (params.eom_ref == 2) { dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&RIJAB, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2AA_lbl); dot_IJAB = dpd_buf4_dot(&D, &RIJAB); dpd_buf4_close(&RIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&Rijab, CC_RAMPS, C_irr, 12, 17, 12, 17, 0, R2BB_lbl); dot_ijab = dpd_buf4_dot(&D, &Rijab); dpd_buf4_close(&Rijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 22, 28, 22, 28, 0, R2AB_lbl); dot_IjAb = dpd_buf4_dot(&D, &RIjAb); dpd_buf4_close(&RIjAb); dpd_buf4_close(&D); } rzero = (dot_IA + dot_ia + dot_IJAB + dot_ijab + dot_IjAb)/energy; } else { /* C and H are different irreps */ rzero = 0.0; } /* Now normalize so that <R|R> = 1 */ dpd_file2_init(&RIA, CC_RAMPS, C_irr, A_OCC, A_VIR, R1A_lbl); dpd_file2_init(&Ria, CC_RAMPS, C_irr, B_OCC, B_VIR, R1B_lbl); dpd_buf4_init(&fRIJAB, CC_RAMPS, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, R2AA_lbl); dpd_buf4_init(&fRijab, CC_RAMPS, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, R2BB_lbl); dpd_buf4_init(&fRIjAb, CC_RAMPS, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, R2AB_lbl); /* make R0 a positive number */ /* if (rzero < 0.0) { rzero *= -1.0; dpd_file2_scm(&RIA,-1.0); dpd_file2_scm(&Ria,-1.0); dpd_buf4_scm(&fRIJAB,-1.0); dpd_buf4_scm(&fRijab,-1.0); dpd_buf4_scm(&fRIjAb,-1.0); } */ /* norm = norm_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb); norm *= norm; */ norm = dot_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb); norm += rzero * rzero; norm = sqrt(norm); rzero = rzero / norm; scm_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb, 1.0/norm); norm = dot_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb); norm += rzero * rzero; fprintf(outfile,"<R|R> = %20.16lf\n",norm); /* just debugging with converged solutions - also my need a sort_C() */ /* dpd_file2_copy(&RIA, EOM_CME, "CME 0"); dpd_file2_copy(&Ria, EOM_Cme, "Cme 0"); dpd_buf4_copy(&fRIJAB, EOM_CMNEF, "CMNEF 0"); dpd_buf4_copy(&fRijab, EOM_Cmnef, "Cmnef 0"); dpd_buf4_copy(&fRIjAb, EOM_CMnEf, "CMnEf 0"); */ /* end debugging stuff */ dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_buf4_close(&fRIJAB); dpd_buf4_close(&fRijab); dpd_buf4_close(&fRIjAb); if(!strcmp(params.wfn,"EOM_CC2")) { fprintf(outfile,"EOM CC2 R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CC2 R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { fprintf(outfile,"EOM CCSD R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { fprintf(outfile,"EOM CC3 R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CC3 R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } if (eom_params.dot_with_L) { /* evaluate check <R|L> == 0 */ if (C_irr == L_irr ) { dpd_file2_init(&RIA, CC_RAMPS, C_irr, A_OCC, A_VIR, R1A_lbl); dpd_file2_init(&Ria, CC_RAMPS, C_irr, B_OCC, B_VIR, R1B_lbl); dpd_buf4_init(&RIJAB, CC_RAMPS, C_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, R2AA_lbl); dpd_buf4_init(&Rijab, CC_RAMPS, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, R2BB_lbl); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, R2AB_lbl); dpd_file2_init(&LIA, CC_OEI, L_irr, A_OCC, A_VIR, "LIA"); dpd_file2_init(&Lia, CC_OEI, L_irr, B_OCC, B_VIR, "Lia"); dpd_buf4_init(&LIJAB, CC_LAMPS, L_irr, AA_OCC, AA_VIR, AA_OCC, AA_VIR, 0, "LIJAB"); dpd_buf4_init(&Lijab, CC_LAMPS, L_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, "LIjAb"); fprintf(outfile,"\nROHF orthogonality test\n"); fprintf(outfile,"<L0|R0> = %15.10lf\n", eom_params.L0 * rzero); dot_IA = dpd_file2_dot(&LIA, &RIA); fprintf(outfile,"<LIA|RIA> = %15.10lf\n", dot_IA); dot_ia = dpd_file2_dot(&Lia, &Ria); fprintf(outfile,"<Lia|Ria> = %15.10lf\n", dot_ia); dot_IJAB = dpd_buf4_dot(&LIJAB, &RIJAB); fprintf(outfile,"<LIJAB|RIJAB> = %15.10lf\n", dot_IJAB); dot_ijab = dpd_buf4_dot(&Lijab, &Rijab); fprintf(outfile,"<Lijab|Rijab> = %15.10lf\n", dot_ijab); dot_IjAb = dpd_buf4_dot(&LIjAb, &RIjAb); fprintf(outfile,"<LIjAb|RIjAb> = %15.10lf\n", dot_IjAb); fprintf(outfile,"<L|R> = %15.10lf\n", (eom_params.L0 * rzero) + dot_IA + dot_ia + dot_IJAB + dot_ijab + dot_IjAb); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_buf4_close(&RIJAB); dpd_buf4_close(&Rijab); dpd_buf4_close(&RIjAb); } else { fprintf(outfile,"\nOverlap <R|L> zero by symmetry\n"); } } /* end dot_with_L loop */ } return; } /* normalizes R and produces copies of R that are ROHF-like */ /* sort_amps then produces the others sorted versions of R */ void rzero_rhf(int C_irr, int *converged) { double r1, r2, rzero=0.0, energy, norm, dotval; double dot_IA, dot_ia, dot_IJAB, dot_ijab, dot_IjAb; dpdfile2 RIA, FIA, LIA, Lia, Ria; dpdbuf4 RIjAb, RIjbA, RIjAb1, RIjbA1, D, R2, LIjAb, RIJAB, Rijab; dpdbuf4 LIJAB, Lijab; int L_irr,i; char lbl[32], E_lbl[32], R1A_lbl[32], R1B_lbl[32], *blank; char R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; int R_index=-1; L_irr = eom_params.L_irr; for(i=0; i < eom_params.cs_per_irrep[C_irr]; i++) { if (!converged[i]) continue; /* this root did not converge */ ++R_index; if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(E_lbl, "EOM CC2 Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CC2 Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(E_lbl, "EOM CC3 Energy for root %d %d", C_irr, R_index); if(psio_tocscan(CC_INFO, E_lbl) == NULL) { fprintf(outfile,"No EOM CC3 Energy found in CC_INFO. Not normalizing R.\n"); return; } psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double)); } sprintf(R1A_lbl, "RIA %d %d", C_irr, R_index); sprintf(R1B_lbl, "Ria %d %d", C_irr, R_index); sprintf(R2AB_lbl, "RIjAb %d %d", C_irr, R_index); sprintf(R2AA_lbl, "RIJAB %d %d", C_irr, R_index); sprintf(R2BB_lbl, "Rijab %d %d", C_irr, R_index); /* produce RIjbA and 2RIjAb-RIjbA copies - not yet normalized */ dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); dpd_buf4_sort(&RIjAb, CC_TMP, pqsr, 0, 5, "RIjbA"); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_copy(&RIjAb, CC_RAMPS, lbl); dpd_buf4_close(&RIjAb); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&RIjAb, 2.0); dpd_buf4_init(&RIjbA, CC_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); dpd_buf4_axpy(&RIjbA, &RIjAb, -1.0); dpd_buf4_close(&RIjbA); dpd_buf4_close(&RIjAb); /* calculate <0| hbar | 0> */ if (!params.full_matrix) { if (C_irr == H_IRR) { dpd_file2_init(&FIA, CC_OEI, H_IRR, 0, 1, "FME"); dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); r1 = 2.0 * dpd_file2_dot(&FIA, &RIA); dpd_file2_close(&RIA); dpd_file2_close(&FIA); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); r2 = dpd_buf4_dot(&D, &RIjAb); dpd_buf4_close(&D); dpd_buf4_close(&RIjAb); rzero = (r1 + r2)/energy; } else { rzero = 0.0; } } else { /* full matrix */ sprintf(lbl, "%s %d %d", "R0", C_irr, R_index); psio_read_entry(CC_RAMPS, lbl, (char *) &rzero, sizeof(double)); } /* Now normalize R so that <R|R> = 1 */ dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); dpd_buf4_init(&RIjbA, CC_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); /* if (rzero < 0.0) { rzero *= -1.0; dpd_file2_scm(&RIA,-1.0); dpd_buf4_scm(&RIjAb,-1.0); dpd_buf4_scm(&RIjbA,-1.0); } */ norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA); norm *= norm; norm += rzero * rzero; norm = sqrt(norm); rzero = rzero / norm; dpd_file2_scm(&RIA, 1.0/norm); dpd_buf4_scm(&RIjAb, 1.0/norm); dpd_buf4_scm(&RIjbA, 1.0/norm); /* just for debugging cc3 put normalized vector back into C as well */ /* dpd_file2_copy(&RIA, EOM_CME, "CME 0"); dpd_buf4_copy(&RIjAb, EOM_CMnEf, "CMnEf 0"); */ /* end debugging stuff */ dpd_file2_close(&RIA); dpd_buf4_close(&RIjAb); dpd_buf4_close(&RIjbA); if(!strcmp(params.wfn,"EOM_CC2")) { fprintf(outfile,"EOM CC2 R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CC2 R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { fprintf(outfile,"EOM CCSD R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { fprintf(outfile,"EOM CC3 R0 for root %d = %15.11lf\n", R_index, rzero); sprintf(lbl, "EOM CC3 R0 for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double)); } /* produce ROHF like quantities and 2RIjAb-RIjbA */ dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); dpd_file2_copy(&RIA, CC_RAMPS, R1B_lbl); dpd_file2_close(&RIA); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_copy(&RIjAb, CC_RAMPS, lbl); dpd_buf4_close(&RIjAb); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 2, 7, 0, 5, 1, R2AB_lbl); dpd_buf4_copy(&RIjAb, CC_RAMPS, R2AA_lbl); dpd_buf4_copy(&RIjAb, CC_RAMPS, R2BB_lbl); dpd_buf4_close(&RIjAb); dpd_buf4_init(&RIjbA, CC_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA"); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&RIjAb, 2.0); dpd_buf4_axpy(&RIjbA, &RIjAb, -1.0); dpd_buf4_close(&RIjAb); dpd_buf4_close(&RIjbA); /* test normalization with produced ROHF-like quantities */ dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); norm = dpd_file2_dot_self(&RIA); dpd_file2_close(&RIA); dpd_file2_init(&Ria, CC_RAMPS, C_irr, 0, 1, R1B_lbl); norm += dpd_file2_dot_self(&Ria); dpd_file2_close(&Ria); dpd_buf4_init(&RIJAB, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2AA_lbl); norm += dpd_buf4_dot_self(&RIJAB); dpd_buf4_close(&RIJAB); dpd_buf4_init(&Rijab, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2BB_lbl); norm += dpd_buf4_dot_self(&Rijab); dpd_buf4_close(&Rijab); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); norm += dpd_buf4_dot_self(&RIjAb); dpd_buf4_close(&RIjAb); norm += rzero * rzero; #ifdef EOM_DEBUG fprintf(outfile,"Norm with produced ROHF-like quantities = %15.10lf\n", norm); dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); dpd_file2_print(&RIA, outfile); dpd_file2_close(&RIA); #endif /* check orthogonality with L */ if (eom_params.dot_with_L) { if (C_irr == L_irr) { dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "LIA"); dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); r1 = 2.0 * dpd_file2_dot(&LIA, &RIA); dpd_file2_close(&RIA); dpd_file2_close(&LIA); dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, "LIjAb"); sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl); r2 = dpd_buf4_dot(&LIjAb, &RIjAb); dpd_buf4_close(&RIjAb); dpd_buf4_close(&LIjAb); dotval = r1 + r2 + (eom_params.L0 * rzero); fprintf(outfile,"Performing RHF orthogonality test\n"); fprintf(outfile,"<L0|R0> = %15.10lf\n", eom_params.L0 * rzero); fprintf(outfile,"2*<LIA|RIA> = %15.10lf\n", r1); fprintf(outfile,"<LIjAb|2RIjAb-RIjbA> = %15.10lf\n", r2); fprintf(outfile,"<L|R> = %15.10lf\n", dotval); } else { fprintf(outfile,"<L|R> zero by symmetry\n"); } if (C_irr == L_irr ) { /* double check orthogonality rohf-like */ dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl); dpd_file2_init(&Ria, CC_RAMPS, C_irr, 0, 1, R1B_lbl); dpd_buf4_init(&RIJAB, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2AA_lbl); dpd_buf4_init(&Rijab, CC_RAMPS, C_irr, 2, 7, 2, 7, 0, R2BB_lbl); dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl); dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_OEI, L_irr, 0, 1, "Lia"); dpd_buf4_init(&LIJAB, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Lijab, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dot_IA = dpd_file2_dot(&LIA, &RIA); dot_ia = dpd_file2_dot(&Lia, &Ria); dot_IJAB = dpd_buf4_dot(&LIJAB, &RIJAB); dot_ijab = dpd_buf4_dot(&Lijab, &Rijab); dot_IjAb = dpd_buf4_dot(&LIjAb, &RIjAb); dpd_file2_close(&RIA); dpd_file2_close(&Ria); dpd_buf4_close(&RIJAB); dpd_buf4_close(&Rijab); dpd_buf4_close(&RIjAb); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); fprintf(outfile,"\nROHF-like orthogonality test\n"); fprintf(outfile,"<L0|R0> = %15.10lf\n", eom_params.L0 * rzero); fprintf(outfile,"<LIA|RIA> = %15.10lf\n", dot_IA); fprintf(outfile,"<Lia|Ria> = %15.10lf\n", dot_ia); fprintf(outfile,"<LIJAB|RIJAB> = %15.10lf\n", dot_IJAB); fprintf(outfile,"<Lijab|Rijab> = %15.10lf\n", dot_ijab); fprintf(outfile,"<LIjAb|RIjAb> = %15.10lf\n", dot_IjAb); fprintf(outfile,"<L|R> = %15.10lf\n", eom_params.L0 * rzero + dot_IA + dot_ia + dot_IJAB + dot_ijab + dot_IjAb); } } /* end dot with L, <L|R> overlap checks */ } /* end loop over Cs */ return; } }} // namespace psi::cceom ������������������������������psi3/src/bin/cceom/schmidt_add.cc�������������������������������������������������������������������0000644�0001015�0000765�00000015313�10757640026�015412� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function orthogonalizes the r residual vector with the set of numCs C vectors and adds the new vector to the C list if its norm is greater than params.residual_tol */ extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); extern void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a); /* use for ROHF and UHF */ void schmidt_add(dpdfile2 *RIA, dpdfile2 *Ria, dpdbuf4 *RIJAB, dpdbuf4 *Rijab, dpdbuf4 *RIjAb, int *numCs, int irrep) { double dotval; double norm; int i, I; dpdfile2 Cme, CME, Cme2, CME2; dpdbuf4 CMNEF, Cmnef, CMnEf, CMNEF2, Cmnef2, CMnEf2; dpdbuf4 CMnEf_buf; char CME_lbl[32], Cme_lbl[32], CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; for (i=0; i<*numCs; i++) { sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); dpd_file2_init(&CME, EOM_CME, irrep, 0, 1, CME_lbl); dpd_buf4_init(&CMNEF, EOM_CMNEF, irrep, 2, 7, 2, 7, 0, CMNEF_lbl); if (params.eom_ref == 1) { dpd_file2_init(&Cme, EOM_Cme, irrep, 0, 1, Cme_lbl); dpd_buf4_init(&Cmnef, EOM_Cmnef, irrep, 2, 7, 2, 7, 0, Cmnef_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, irrep, 0, 5, 0, 5, 0, CMnEf_lbl); } else if (params.eom_ref == 2) { dpd_file2_init(&Cme, EOM_Cme, irrep, 2, 3, Cme_lbl); dpd_buf4_init(&Cmnef, EOM_Cmnef, irrep, 12, 17, 12, 17, 0, Cmnef_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, irrep, 22, 28, 22, 28, 0, CMnEf_lbl); } dotval = dpd_file2_dot(RIA, &CME); dotval += dpd_file2_dot(Ria, &Cme); //fprintf(outfile, "OE Dotval for vector %d = %20.14f\n", i, dotval); dotval += dpd_buf4_dot(RIJAB, &CMNEF); dotval += dpd_buf4_dot(Rijab, &Cmnef); dotval += dpd_buf4_dot(RIjAb, &CMnEf); //fprintf(outfile, "Dotval for vector %d = %20.14f\n", i, dotval); dpd_file2_axpy(&CME, RIA, -1.0*dotval, 0); dpd_file2_axpy(&Cme, Ria, -1.0*dotval, 0); dpd_buf4_axpy(&CMNEF, RIJAB, -1.0*dotval); dpd_buf4_axpy(&Cmnef, Rijab, -1.0*dotval); dpd_buf4_axpy(&CMnEf, RIjAb, -1.0*dotval); dpd_file2_close(&CME); dpd_file2_close(&Cme); dpd_buf4_close(&CMNEF); dpd_buf4_close(&Cmnef); dpd_buf4_close(&CMnEf); } norm = norm_C(RIA, Ria, RIJAB, Rijab, RIjAb); //fprintf(outfile, "Norm of residual (TDC) = %20.14f\n", norm); if (norm < eom_params.schmidt_add_residual_tol) { return; } else { scm_C(RIA, Ria, RIJAB, Rijab, RIjAb, 1.0/norm); sprintf(CME_lbl, "%s %d", "CME", *numCs); sprintf(Cme_lbl, "%s %d", "Cme", *numCs); sprintf(CMNEF_lbl, "%s %d", "CMNEF", *numCs); sprintf(Cmnef_lbl, "%s %d", "Cmnef", *numCs); sprintf(CMnEf_lbl, "%s %d", "CMnEf", *numCs); dpd_file2_copy(RIA, EOM_CME, CME_lbl); dpd_file2_copy(Ria, EOM_Cme, Cme_lbl); dpd_buf4_copy(RIJAB, EOM_CMNEF, CMNEF_lbl); dpd_buf4_copy(Rijab, EOM_Cmnef, Cmnef_lbl); dpd_buf4_copy(RIjAb, EOM_CMnEf, CMnEf_lbl); ++(*numCs); } return; } void schmidt_add_RHF(dpdfile2 *RIA, dpdbuf4 *RIjAb, int *numCs, int irrep) { double dotval, norm, R0, C0; int i, I; dpdfile2 CME; dpdbuf4 CMnEf, CAB1, CAB2; dpdfile2 R1; dpdbuf4 R2a, R2b; char CME_lbl[32], Cme_lbl[32], CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32], C0_lbl[32]; if (params.full_matrix) psio_read_entry(EOM_R, "R0", (char *) &R0, sizeof(double)); for (i=0; i<*numCs; i++) { /* Spin-adapt the residual */ dpd_buf4_copy(RIjAb, EOM_TMP, "RIjAb"); dpd_buf4_sort(RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&R2a, EOM_TMP, irrep, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_init(&R2b, EOM_TMP, irrep, 0, 5, 0, 5, 0, "RIjbA"); dpd_buf4_scm(&R2a, 2.0); dpd_buf4_axpy(&R2b, &R2a, -1.0); dpd_buf4_close(&R2b); sprintf(CME_lbl, "%s %d", "CME", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); dpd_file2_init(&CME, EOM_CME, irrep, 0, 1, CME_lbl); dpd_buf4_init(&CMnEf, EOM_CMnEf, irrep, 0, 5, 0, 5, 0, CMnEf_lbl); dotval = 2.0 * dpd_file2_dot(RIA, &CME); //fprintf(outfile, "OE Dotval for vector %d = %20.14f\n", i, dotval); dotval += dpd_buf4_dot(&R2a, &CMnEf); dpd_buf4_close(&R2a); if (params.full_matrix) { sprintf(C0_lbl, "%s %d", "C0", i); psio_read_entry(EOM_CME, C0_lbl, (char *) &C0, sizeof(double)); dotval += C0 * R0; } //fprintf(outfile, "Dotval for vector %d = %20.14f\n", i, dotval); R0 = R0 - 1.0 * dotval * C0; dpd_file2_axpy(&CME, RIA, -1.0*dotval, 0); dpd_buf4_axpy(&CMnEf, RIjAb, -1.0*dotval); dpd_file2_close(&CME); dpd_buf4_close(&CMnEf); } dpd_buf4_sort(RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&R2b, EOM_TMP, irrep, 0, 5, 0, 5, 0, "RIjbA"); /* norm = norm_C_rhf(RIA, RIjAb, &R2b); */ norm = 2.0 * dpd_file2_dot_self(RIA); norm += 2.0 * dpd_buf4_dot_self(RIjAb); norm -= dpd_buf4_dot(RIjAb, &R2b); if (params.full_matrix) norm += R0 * R0; norm = sqrt(norm); dpd_buf4_close(&R2b); //fprintf(outfile, "Norm of residual (TDC) = %20.14f\n", norm); if (norm < eom_params.schmidt_add_residual_tol) { return; } else { if (params.full_matrix) R0 *= 1.0/norm; dpd_file2_scm(RIA, 1.0/norm); dpd_buf4_scm(RIjAb, 1.0/norm); #ifdef EOM_DEBUG dpd_buf4_sort(RIjAb, EOM_TMP, pqsr, 0, 5, "RIjbA"); dpd_buf4_init(&R2b, EOM_TMP, irrep, 0, 5, 0, 5, 0, "RIjbA"); norm = 2.0 * dpd_file2_dot_self(RIA); norm += 2.0 * dpd_buf4_dot_self(RIjAb); norm -= dpd_buf4_dot(RIjAb, &R2b); if (params.full_matrix) norm += R0 * R0; norm = sqrt(norm); fprintf(outfile,"Norm of final new C in schmidt_add(): %20.15lf\n", norm); dpd_buf4_close(&R2b); #endif sprintf(CME_lbl, "%s %d", "CME", *numCs); sprintf(CMnEf_lbl, "%s %d", "CMnEf", *numCs); dpd_file2_copy(RIA, EOM_CME, CME_lbl); dpd_buf4_copy(RIjAb, EOM_CMnEf, CMnEf_lbl); /* Generate AA and BB C2 vectors from AB vector */ /* C(IJ,AB) = C(ij,ab) = C(Ij,Ab) - C(Ij,bA) */ dpd_buf4_copy(RIjAb, EOM_TMP, "CMnEf"); dpd_buf4_sort(RIjAb, EOM_TMP, pqsr, 0, 5, "CMnfE"); dpd_buf4_init(&CAB1, EOM_TMP, irrep, 0, 5, 0, 5, 0, "CMnEf"); dpd_buf4_init(&CAB2, EOM_TMP, irrep, 0, 5, 0, 5, 0, "CMnfE"); dpd_buf4_axpy(&CAB2, &CAB1, -1.0); dpd_buf4_close(&CAB2); dpd_buf4_close(&CAB1); if (params.full_matrix) { sprintf(C0_lbl, "%s %d", "C0", *numCs); psio_write_entry(EOM_CME, C0_lbl, (char *) &R0, sizeof(double)); } ++(*numCs); } return; } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigma_full.cc��������������������������������������������������������������������0000644�0001015�0000765�00000017422�10757640026�015274� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar reference-singles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigma0S(int i, int C_irr) { dpdfile2 FME, Fme; dpdfile2 CME, Cme; dpdbuf4 W; char lbl[32]; double S0, S0_old; /* S0 += FME*CME */ if (params.eom_ref == 0) { /* RHF */ if (C_irr == H_IRR) { sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_init(&FME, CC_OEI, H_IRR, 0, 1, "FME"); S0 = dpd_file2_dot(&FME, &CME); dpd_file2_close(&FME); dpd_file2_close(&CME); } else { S0 = 0.0; } sprintf(lbl, "%s %d", "S0", i); psio_read_entry(EOM_SIA, lbl, (char *) &(S0_old), sizeof(double)); S0 += S0_old; psio_write_entry(EOM_SIA, lbl, (char *) &(S0), sizeof(double)); } #ifdef EOM_DEBUG check_sum("Sigma0S",i,C_irr); #endif return; } void sigma00(int i, int C_irr) { char lbl[32]; double C0, S0, S0_old, reference_expectation_value; psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(reference_expectation_value), sizeof(double)); sprintf(lbl, "%s %d", "C0", i); psio_read_entry(EOM_CME, lbl, (char *) &(C0), sizeof(double)); sprintf(lbl, "%s %d", "S0", i); psio_read_entry(EOM_SIA, lbl, (char *) &(S0_old), sizeof(double)); S0_old += C0 * reference_expectation_value; psio_write_entry(EOM_SIA, lbl, (char *) &(S0_old), sizeof(double)); #ifdef EOM_DEBUG check_sum("Sigma00",i,C_irr); #endif return; } /* This function computes the H-bar reference-doubles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigma0D(int i, int C_irr) { dpdbuf4 D; dpdbuf4 CMNEF, Cmnef, CMnEf, CmNeF; char lbl[32]; double S0, S0_old; /* S0 += Cijab <ij||ab> */ if (params.eom_ref == 0) { /* RHF */ if (C_irr == H_IRR) { sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); S0 = dpd_buf4_dot(&D, &CMnEf); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); } else { S0 = 0.0; } sprintf(lbl, "%s %d", "S0", i); psio_read_entry(EOM_SIA, lbl, (char *) &(S0_old), sizeof(double)); S0 += S0_old; psio_write_entry(EOM_SIA, lbl, (char *) &(S0), sizeof(double)); } #ifdef EOM_DEBUG check_sum("Sigma0D",i,C_irr); #endif return; } /* This function adds unconnected terms to the H-bar singles-singles block contributions to a sigma vector stored at Sigma plus 'i' */ void sigmaSS_full(int i, int C_irr) { dpdfile2 CME, SIA; char lbl[32]; double reference_expectation_value; psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(reference_expectation_value), sizeof(double)); if (params.eom_ref == 0) { /* RHF */ /* SIA += RIA * <0|Hbar|0> */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_axpy(&CME, &SIA, reference_expectation_value,0); dpd_file2_close(&CME); dpd_file2_close(&SIA); } #ifdef EOM_DEBUG check_sum("SigmaSS_full",i,C_irr); #endif return; } /* This function adds unconnected terms to the H-bar doubles-doubles block contributions to a sigma vector stored at Sigma plus 'i' */ void sigmaDD_full(int i, int C_irr) { dpdbuf4 CMnEf, SIjAb; char lbl[32]; double reference_expectation_value; psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(reference_expectation_value), sizeof(double)); if (params.eom_ref == 0) { /* RHF */ /* Sijab += Rijab * <0|Hbar|0> */ sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&CMnEf, &SIjAb, reference_expectation_value); dpd_buf4_close(&CMnEf); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("SigmaDD_full",i,C_irr); #endif return; } /* This function computes the unconnected terms to the <S|Hbar|0> contributions to the sigma vector stored at sigma i */ void sigmaS0(int i, int C_irr) { dpdfile2 FAI, SIA; double reference_expectation_value; char lbl[32]; psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(reference_expectation_value), sizeof(double)); if (C_irr == H_IRR) { sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_init(&FAI, CC_OEI, H_IRR, 0, 1, "FAI residual"); dpd_file2_axpy(&FAI, &SIA, reference_expectation_value, 0); dpd_file2_close(&FAI); dpd_file2_close(&SIA); } #ifdef EOM_DEBUG check_sum("SigmaS0",i,C_irr); #endif return; } /* This function computes the unconnected terms to the <D|Hbar|0> contributions to the sigma vector stored at sigma i */ void sigmaD0(int i, int C_irr) { dpdbuf4 WAbIj, SIjAb; double reference_expectation_value; char lbl[32]; psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(reference_expectation_value), sizeof(double)); if (C_irr == H_IRR) { sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WAbIj, CC_HBAR, H_IRR, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&WAbIj, &SIjAb, reference_expectation_value); dpd_buf4_close(&WAbIj); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("SigmaD0",i,C_irr); #endif return; } /* computes unconnected contributions of the <D|Hbar|S> block to the sigma vector stored at sigma i */ /* Sijab += P(ij) P(ab) Cia Fbj, that is, [<Phi_j^b|Hbar|0>] */ void sigmaDS_full(int i_root, int C_irr) { dpdbuf4 SIjAb; dpdfile2 FBJ, CIA; int h, nirreps; int row,col; int i,j,a,b,I,J,A,B,Isym,Jsym,Asym,Bsym; char lbl[32]; nirreps = moinfo.nirreps; /* SIjAb += CIA * Fjb + Cjb * FIA */ if (params.ref == 0) { sprintf(lbl, "%s %d", "CME", i_root); dpd_file2_init(&CIA, EOM_CME, C_irr, 0, 1, lbl); dpd_file2_mat_init(&CIA); dpd_file2_mat_rd(&CIA); dpd_file2_init(&FBJ, CC_OEI, H_IRR, 0, 1, "FAI residual"); dpd_file2_mat_init(&FBJ); dpd_file2_mat_rd(&FBJ); sprintf(lbl, "%s %d", "SIjAb", i_root); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&SIjAb, h); dpd_buf4_mat_irrep_rd(&SIjAb, h); for(row=0; row < SIjAb.params->rowtot[h]; row++) { i = SIjAb.params->roworb[h][row][0]; j = SIjAb.params->roworb[h][row][1]; for(col=0; col < SIjAb.params->coltot[h^C_irr]; col++) { a = SIjAb.params->colorb[h^C_irr][col][0]; b = SIjAb.params->colorb[h^C_irr][col][1]; I = CIA.params->rowidx[i]; Isym = CIA.params->psym[i]; J = FBJ.params->rowidx[j]; Jsym = FBJ.params->psym[j]; A = CIA.params->colidx[a]; Asym = CIA.params->qsym[a]; B = FBJ.params->colidx[b]; Bsym = FBJ.params->qsym[b]; if((Isym^Asym == C_irr) && (Jsym == Bsym)) SIjAb.matrix[h][row][col] += (CIA.matrix[Isym][I][A] * FBJ.matrix[Jsym][J][B]); if((Isym == Asym) && (Jsym^Bsym == C_irr)) SIjAb.matrix[h][row][col] += (CIA.matrix[Jsym][J][B] * FBJ.matrix[Isym][I][A]); } } dpd_buf4_mat_irrep_wrt(&SIjAb, h); dpd_buf4_mat_irrep_close(&SIjAb, h); } dpd_buf4_close(&SIjAb); dpd_file2_mat_close(&FBJ); dpd_file2_close(&FBJ); dpd_file2_mat_close(&CIA); dpd_file2_close(&CIA); } #ifdef EOM_DEBUG check_sum("SigmaDS_full",i_root,C_irr); #endif return; } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaCC3.cc����������������������������������������������������������������������0000644�0001015�0000765�00000072101�10754663017�014540� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the extra contributions to sigma_1 and sigma_2 for EOM_CC3 computations that are not normally present in a EOM_CCSD calculation */ /* The additional terms are: * Term 1: * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 * Term 2: * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 * Term 3: * <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 * * See Eqn. (83) in JCP, 103, 7429, 1995 * All three terms can be evaluated by the same functions in * cc3_sigma_UHF() and cc3_sigma_RHF() in libdpd given * different matrix elements. * * - RHF case added by generalizing ccenergy code RAK 2006 * * */ void sigmaCC3(int i, int C_irr, double omega) { dpdfile2 CME, Cme, SIA, Sia, FME, Fme; dpdbuf4 CMNEF, CMnEf, Cmnef, CmNeF, SIJAB, Sijab, SIjAb; dpdbuf4 WAMEF, WMNIE, WABEI, WMBIJ, DIJAB_anti, TIJAB; dpdbuf4 Wamef, Wmnie, Wabei, Wmbij, Dijab_anti, Tijab; dpdbuf4 WAmEf, WMnIe, WAbEi, WMbIj, DIjAb, TIjAb, tIjAb; dpdbuf4 WmAEf, WaMeF, WmNiE, WaBeI, WmBiJ, DiJaB, TiJaB, Dints; char lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); /*** alpha-alpha-beta term 1 ***/ /* quantities to compute X3 */ sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); /* quantities to compute sigma */ dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WmAEf, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ if (params.t3_Ws_incore) cc3_sigma_RHF_ic(&CMnEf, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile, params.nthreads); else cc3_sigma_RHF(&CMnEf, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_buf4_close(&Dints); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Uhat C2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif /* do alpha-alpha-beta term 2 */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&WAbEi, CC3_HC1ET1, C_irr, 10, 5, 10, 5, 0, "Ht_WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HC1ET1, C_irr, 0, 10, 0, 10, 0, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WmAEf, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ if (params.t3_Ws_incore) cc3_sigma_RHF_ic(&tIjAb, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile, params.nthreads); else cc3_sigma_RHF(&tIjAb, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile); dpd_buf4_close(&tIjAb); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_buf4_close(&Dints); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Utilde T2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif /* alpha-alpha-beta term 3 */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_buf4_init(&WmAEf, CC3_HC1, C_irr, 10, 5, 10, 5, 0, "HC1 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ if (params.t3_Ws_incore) cc3_sigma_RHF_ic(&tIjAb, &WAbEi, &WMbIj, 0, NULL, NULL, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, 0.0, outfile, params.nthreads); else cc3_sigma_RHF(&tIjAb, &WAbEi, &WMbIj, 0, NULL, NULL, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, 0.0, outfile); dpd_buf4_close(&tIjAb); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|H'<T|(Uhat T2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ } else if (params.eom_ref == 2) { /* UHF */ /* open all sigma (output) files */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 5, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 15, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); /*** alpha-alpha-alpha term 1 */ sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_AAA(&CMNEF, &WABEI, &WMBIJ, 1, &DIJAB_anti, &SIA, 1, &FME, &WAMEF, &WMNIE, &SIJAB, moinfo.aoccpi, moinfo.aocc_off, moinfo.avirtpi, moinfo.avir_off, omega, outfile); dpd_buf4_close(&CMNEF); dpd_buf4_close(&WABEI); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&DIJAB_anti); dpd_file2_close(&FME); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WMNIE); /*** beta-beta-beta term 1 */ sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 15, 12, 17, 0, lbl); dpd_buf4_init(&Wabei, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&Wmbij, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_BBB(&Cmnef, &Wabei, &Wmbij, 1, &Dijab_anti, &Sia, 1, &Fme, &Wamef, &Wmnie, &Sijab, moinfo.boccpi, moinfo.bocc_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Wabei); dpd_buf4_close(&Wmbij); dpd_buf4_close(&Dijab_anti); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&Wmnie); /*** alpha-alpha-beta term 1 */ sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DIjAb, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_AAB(&CMNEF, &CMnEf, &CmNeF, &WABEI, &WaBeI, &WAbEi, &WMBIJ, &WMbIj, &WmBiJ, 1, &DIJAB_anti, &DIjAb, &SIA, &Sia, 1, &FME, &Fme, &WAMEF, &WaMeF, &WAmEf, &WMNIE, &WMnIe, &WmNiE, &SIJAB, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&CMNEF); dpd_buf4_close(&CMnEf); dpd_buf4_close(&CmNeF); dpd_buf4_close(&WABEI); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&DIJAB_anti); dpd_buf4_close(&DIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); /*** beta-beta-alpha term 1 */ sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 15, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_buf4_init(&Wabei, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&Wmbij, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DiJaB, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_BBA(&Cmnef, &CMnEf, &CmNeF, &Wabei, &WaBeI, &WAbEi, &Wmbij, &WMbIj, &WmBiJ, 1, &Dijab_anti, &DiJaB, &SIA, &Sia, 1, &FME, &Fme, &Wamef, &WaMeF, &WAmEf, &Wmnie, &WMnIe, &WmNiE, &Sijab, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&Cmnef); dpd_buf4_close(&CMnEf); dpd_buf4_close(&CmNeF); dpd_buf4_close(&Wabei); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&Wmbij); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&Dijab_anti); dpd_buf4_close(&DiJaB); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&Wmnie); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Uhat C2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 5, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 15, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); #endif /*** alpha-alpha-alpha term 2 */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&WABEI, CC3_HC1ET1, C_irr, 20, 5, 20, 7, 0, "Ht_WABEI (IE,B>A)"); dpd_buf4_init(&WMBIJ, CC3_HC1ET1, C_irr, 0, 20, 2, 20, 0, "Ht_WMBIJ (I>J,MB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_AAA(&TIJAB, &WABEI, &WMBIJ, 1, &DIJAB_anti, &SIA, 1, &FME, &WAMEF, &WMNIE, &SIJAB, moinfo.aoccpi, moinfo.aocc_off, moinfo.avirtpi, moinfo.avir_off, omega, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&DIJAB_anti); dpd_file2_close(&FME); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WMNIE); /*** beta-beta-beta term 2 */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Wabei, CC3_HC1ET1, C_irr, 30, 15, 30, 17, 0, "Ht_Wabei (ie,b>a)"); dpd_buf4_init(&Wmbij, CC3_HC1ET1, C_irr, 10, 30, 12, 30, 0, "Ht_Wmbij (i>j,mb)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_BBB(&Tijab, &Wabei, &Wmbij, 1, &Dijab_anti, &Sia, 1, &Fme, &Wamef, &Wmnie, &Sijab, moinfo.boccpi, moinfo.bocc_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&Wabei); dpd_buf4_close(&Wmbij); dpd_buf4_close(&Dijab_anti); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&Wmnie); /*** do alpha-alpha-beta term 2 */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&WABEI, CC3_HC1ET1, C_irr, 20, 5, 20, 7, 0, "Ht_WABEI (IE,B>A)"); dpd_buf4_init(&WaBeI, CC3_HC1ET1, C_irr, 24, 28, 24, 28, 0, "Ht_WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HC1ET1, C_irr, 27, 29, 27, 29, 0, "Ht_WAbEi (iE,bA)"); dpd_buf4_init(&WMBIJ, CC3_HC1ET1, C_irr, 0, 20, 2, 20, 0, "Ht_WMBIJ (I>J,MB)"); dpd_buf4_init(&WMbIj, CC3_HC1ET1, C_irr, 22, 24, 22, 24, 0, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HC1ET1, C_irr, 23, 27, 23, 27, 0, "Ht_WmBiJ (iJ,mB)"); dpd_buf4_init(&DIJAB_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DIjAb, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&WAMEF, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_AAB(&TIJAB, &TIjAb, &TiJaB, &WABEI, &WaBeI, &WAbEi, &WMBIJ, &WMbIj, &WmBiJ, 1, &DIJAB_anti, &DIjAb, &SIA, &Sia, 1, &FME, &Fme, &WAMEF, &WaMeF, &WAmEf, &WMNIE, &WMnIe, &WmNiE, &SIJAB, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&DIJAB_anti); dpd_buf4_close(&DIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); /* beta-beta-alpha term 2 */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&Wabei, CC3_HC1ET1, C_irr, 30, 15, 30, 17, 0, "Ht_Wabei (ie,b>a)"); dpd_buf4_init(&WaBeI, CC3_HC1ET1, C_irr, 24, 28, 24, 28, 0, "Ht_WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HC1ET1, C_irr, 27, 29, 27, 29, 0, "Ht_WAbEi (iE,bA)"); dpd_buf4_init(&Wmbij, CC3_HC1ET1, C_irr, 10, 30, 12, 30, 0, "Ht_Wmbij (i>j,mb)"); dpd_buf4_init(&WMbIj, CC3_HC1ET1, C_irr, 22, 24, 22, 24, 0, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HC1ET1, C_irr, 23, 27, 23, 27, 0, "Ht_WmBiJ (iJ,mB)"); dpd_buf4_init(&Dijab_anti, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DiJaB, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&Wamef, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wamef (ma,f>e)"); dpd_buf4_init(&WaMeF, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&Wmnie, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_UHF_BBA(&Tijab, &TIjAb, &TiJaB, &Wabei, &WaBeI, &WAbEi, &Wmbij, &WMbIj, &WmBiJ, 1, &Dijab_anti, &DiJaB, &SIA, &Sia, 1, &FME, &Fme, &Wamef, &WaMeF, &WAmEf, &Wmnie, &WMnIe, &WmNiE, &Sijab, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, omega, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&Wabei); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&Wmbij); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_buf4_close(&Dijab_anti); dpd_buf4_close(&DiJaB); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&Wmnie); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Utilde T2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "SIJAB", i); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 5, 2, 7, 0, lbl); sprintf(lbl, "%s %d", "Sijab", i); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 15, 12, 17, 0, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, lbl); #endif /*** alpha-alpha-alpha term 3 */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 20, 5, 20, 7, 0, "HC1 WAMEF (MA,F>E)"); dpd_buf4_init(&WMNIE, CC3_HC1, C_irr, 0, 20, 2, 20, 0, "HC1 WMNIE (M>N,IE)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ cc3_sigma_UHF_AAA(&TIJAB, &WABEI, &WMBIJ, 0, NULL, NULL, 1, &FME, &WAMEF, &WMNIE, &SIJAB, moinfo.aoccpi, moinfo.aocc_off, moinfo.avirtpi, moinfo.avir_off, 0.0, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WMBIJ); dpd_file2_close(&FME); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WMNIE); /*** beta-beta-beta term 3 */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Wabei, CC3_HET1,0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&Wmbij, CC3_HET1,0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_file2_init(&Fme, CC3_HC1, C_irr, 2, 3, "HC1 Fme"); dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 30, 15, 30, 17, 0, "HC1 Wamef (ma,f>e)"); dpd_buf4_init(&Wmnie, CC3_HC1, C_irr, 10, 30, 12, 30, 0, "HC1 Wmnie (m>n,ie)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ cc3_sigma_UHF_BBB(&Tijab, &Wabei, &Wmbij, 0, NULL, NULL, 1, &Fme, &Wamef, &Wmnie, &Sijab, moinfo.boccpi, moinfo.bocc_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&Wabei); dpd_buf4_close(&Wmbij); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&Wmnie); /*** alpha-alpha-beta term 3 */ dpd_buf4_init(&TIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&WABEI, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMBIJ, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_file2_init(&Fme, CC3_HC1, C_irr, 2, 3, "HC1 Fme"); dpd_buf4_init(&WAMEF, CC3_HC1, C_irr, 20, 5, 20, 7, 0, "HC1 WAMEF (MA,F>E)"); dpd_buf4_init(&WaMeF, CC3_HC1, C_irr, 24, 28, 24, 28, 0, "HC1 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HC1, C_irr, 27, 29, 27, 29, 0, "HC1 WAmEf (mA,fE)"); dpd_buf4_init(&WMNIE, CC3_HC1, C_irr, 0, 20, 2, 20, 0, "HC1 WMNIE (M>N,IE)"); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 22, 24, 22, 24, 0, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HC1, C_irr, 23, 27, 23, 27, 0, "HC1 WmNiE (mN,iE)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ cc3_sigma_UHF_AAB(&TIJAB, &TIjAb, &TiJaB, &WABEI, &WaBeI, &WAbEi, &WMBIJ, &WMbIj, &WmBiJ, 0, NULL, NULL, NULL, NULL, 1, &FME, &Fme, &WAMEF, &WaMeF, &WAmEf, &WMNIE, &WMnIe, &WmNiE, &SIJAB, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&TIJAB); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&WABEI); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMBIJ); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&WAMEF); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); /*** beta-beta-alpha term 3 */ dpd_buf4_init(&Tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&TIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&TiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&Wabei, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dpd_buf4_init(&WaBeI, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&Wmbij, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WmBiJ, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_file2_init(&Fme, CC3_HC1, C_irr, 2, 3, "HC1 Fme"); dpd_buf4_init(&Wamef, CC3_HC1, C_irr, 30, 15, 30, 17, 0, "HC1 Wamef (ma,f>e)"); dpd_buf4_init(&WaMeF, CC3_HC1, C_irr, 24, 28, 24, 28, 0, "HC1 WaMeF (Ma,Fe)"); dpd_buf4_init(&WAmEf, CC3_HC1, C_irr, 27, 29, 27, 29, 0, "HC1 WAmEf (mA,fE)"); dpd_buf4_init(&Wmnie, CC3_HC1, C_irr, 10, 30, 12, 30, 0, "HC1 Wmnie (m>n,ie)"); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 22, 24, 22, 24, 0, "HC1 WMnIe (Mn,Ie)"); dpd_buf4_init(&WmNiE, CC3_HC1, C_irr, 23, 27, 23, 27, 0, "HC1 WmNiE (mN,iE)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ cc3_sigma_UHF_BBA(&Tijab, &TIjAb, &TiJaB, &Wabei, &WaBeI, &WAbEi, &Wmbij, &WMbIj, &WmBiJ, 0, NULL, NULL, NULL, NULL, 1, &FME, &Fme, &Wamef, &WaMeF, &WAmEf, &Wmnie, &WMnIe, &WmNiE, &Sijab, &SIjAb, moinfo.aoccpi, moinfo.aocc_off, moinfo.boccpi, moinfo.bocc_off, moinfo.avirtpi, moinfo.avir_off, moinfo.bvirtpi, moinfo.bvir_off, 0.0, outfile); dpd_buf4_close(&Tijab); dpd_buf4_close(&TIjAb); dpd_buf4_close(&TiJaB); dpd_buf4_close(&Wabei); dpd_buf4_close(&WaBeI); dpd_buf4_close(&WAbEi); dpd_buf4_close(&Wmbij); dpd_buf4_close(&WMbIj); dpd_buf4_close(&WmBiJ); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_close(&Wamef); dpd_buf4_close(&WaMeF); dpd_buf4_close(&WAmEf); dpd_buf4_close(&Wmnie); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WmNiE); dpd_file2_close(&SIA); dpd_file2_close(&Sia); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("<Psi|H'<T|(Uhat T2)c|0>|T>/(w-wt)", i, C_irr); #endif } return; } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaCC3_RHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000013271�10757640026�015240� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the extra contributions to sigma_1 and sigma_2 for EOM_CC3 computations that are not normally present in a EOM_CCSD calculation */ /* The additional terms are: * Term 1: * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 * Term 2: * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 * Term 3: * <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 * * See Eqn. (83) in JCP, 103, 7429, 1995 * All three terms can be evaluated by the same functions in * cc3_sigma_RHF given different matrix elements. * * - RHF case modifed from ccenergy cc3 code, RAK 2006 * */ /* extern void cc3_sigma_RHF(dpdbuf4 *CIjAb, dpdbuf4 *WAbEi, dpdbuf4 *WMbIj, int do_singles, dpdbuf4 *Dints, dpdfile2 *SIA, int do_doubles, dpdfile2 *FME, dpdbuf4 *WAmEf, dpdbuf4 *WMnIe, dpdbuf4 *SIjAb, double energy); */ void sigmaCC3_RHF_obsolete(int i, int C_irr, double omega) { int ii,j,a,b,A,B,Ga,Gb,Gij=0,ab,ab0,ab1; dpdfile2 SIA, FME; dpdbuf4 CMnEf, WAbEi, WMbIj, Dints, WmAEf, WMnIe, SIjAb; dpdbuf4 tIjAb; char lbl[32]; sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); /*** alpha-alpha-beta term 1 ***/ /* quantities to compute X3 */ sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); /* quantities to compute sigma */ dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WmAEf, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); /* * <S| H <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Uhat C2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_RHF(&CMnEf, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_buf4_close(&Dints); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Uhat C2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif /* do alpha-alpha-beta term 2 */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&WAbEi, CC3_HC1ET1, C_irr, 10, 5, 10, 5, 0, "Ht_WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HC1ET1, C_irr, 0, 10, 0, 10, 0, "Ht_WMbIj (Ij,Mb)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&WmAEf, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); /* * <S| H <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_1 * <D| Hhat <T| (Utilde T2)c |0> |T> / (w-wt) -> sigma_2 */ cc3_sigma_RHF(&tIjAb, &WAbEi, &WMbIj, 1, &Dints, &SIA, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, omega, outfile); dpd_buf4_close(&tIjAb); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_buf4_close(&Dints); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|Hhat<T|(Utilde T2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif /* alpha-alpha-beta term 3 */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&WAbEi, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMbIj, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_file2_init(&FME, CC3_HC1, C_irr, 0, 1, "HC1 FME"); dpd_buf4_init(&WmAEf, CC3_HC1, C_irr, 10, 5, 10, 5, 0, "HC1 WAmEf (mA,Ef)"); dpd_buf4_init(&WMnIe, CC3_HC1, C_irr, 0, 10, 0, 10, 0, "HC1 WMnIe (Mn,Ie)"); /* <D| H' <T| (Uhat T2)c |0> |T> / (-wt) -> sigma_2 */ cc3_sigma_RHF(&tIjAb, &WAbEi, &WMbIj, 0, NULL, NULL, 1, &FME, &WmAEf, &WMnIe, &SIjAb, moinfo.occpi, moinfo.occ_off, moinfo.virtpi, moinfo.vir_off, 0.0, outfile); dpd_buf4_close(&tIjAb); dpd_buf4_close(&WAbEi); dpd_buf4_close(&WMbIj); dpd_file2_close(&FME); dpd_buf4_close(&WmAEf); dpd_buf4_close(&WMnIe); #ifdef EOM_DEBUG dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); check_sum("<Psi|H'<T|(Uhat T2)c|0>|T>/(w-wt)", i, C_irr); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, lbl); #endif dpd_file2_close(&SIA); dpd_buf4_close(&SIjAb); return; } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaDD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000002044�10757640026�014454� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void FDD(int i, int C_irr); void WabefDD(int i, int C_irr); void WmnijDD(int i, int C_irr); void WmbejDD(int i, int C_irr); void WmnefDD(int i, int C_irr); /* This function computes the H-bar doubles-doubles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigmaDD(int i, int C_irr) { #ifdef TIME_CCEOM timer_on("FDD"); FDD(i, C_irr); timer_off("FDD"); timer_on("WmnijDD"); WmnijDD(i, C_irr); timer_off("WmnijDD"); timer_on("WabefDD"); WabefDD(i, C_irr); timer_off("WabefDD"); timer_on("WmbejDD"); WmbejDD(i, C_irr); timer_off("WmbejDD"); timer_on("WmnefDD"); WmnefDD(i, C_irr); timer_off("WmnefDD"); #else FDD(i, C_irr); WmnijDD(i, C_irr); WabefDD(i, C_irr); WmbejDD(i, C_irr); WmnefDD(i, C_irr); #endif return; } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaDS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000001661�10757640026�014477� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void WmaijDS(int i, int C_irr); void WabejDS(int i, int C_irr); void WbmfeDS(int i, int C_irr); void WnmjeDS(int i, int C_irr); /* This function computes the H-bar doubles-singles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigmaDS(int i, int C_irr) { #ifdef TIME_CCEOM timer_on("WmaijDS"); WmaijDS(i, C_irr); timer_off("WmaijDS"); timer_on("WabejDS"); WabejDS(i, C_irr); timer_off("WabejDS"); timer_on("WnmjeDS"); WnmjeDS(i, C_irr); timer_off("WnmjeDS"); timer_on("WbmfeDS"); WbmfeDS(i, C_irr); timer_off("WbmfeDS"); #else WmaijDS(i, C_irr); WabejDS(i, C_irr); WnmjeDS(i, C_irr); WbmfeDS(i, C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaSD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000001460�10757640026�014474� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void FSD(int i, int C_irr); void WamefSD(int i, int C_irr); void WmnieSD(int i, int C_irr); /* This function computes the H-bar singles-doubles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigmaSD(int i, int C_irr) { #ifdef TIME_CCEOM timer_on("FSD"); FSD(i, C_irr); timer_off("FSD"); timer_on("WamefSD"); WamefSD(i, C_irr); timer_off("WamefSD"); timer_on("WmnieSD"); WmnieSD(i, C_irr); timer_off("WmnieSD"); #else FSD(i, C_irr); WamefSD(i, C_irr); WmnieSD(i, C_irr); #endif return; } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sigmaSS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000012011�10757640026�014505� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar singles-singles block contribution to a Sigma vector stored at Sigma plus 'i' */ void sigmaSS(int i, int C_irr) { dpdfile2 FMI, Fmi, FAE, Fae, Cjunk; dpdfile2 CME, Cme, SIA, Sia; dpdbuf4 W; char lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); /* SIA = FAE*CIE */ dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract222(&CME, &FAE, &SIA, 0, 0, 1.0, 0.0); dpd_file2_close(&FAE); /* SIA -= FMI*CMA */ dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract222(&FMI, &CME, &SIA, 1, 1, -1.0, 1.0); dpd_file2_close(&FMI); /* SIA += WMAEI*CME */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "2 W(jb,ME) + W(Jb,Me)"); dpd_contract422(&W, &CME, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&CME); dpd_file2_close(&SIA); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl); /* SIA = FAE*CIE */ dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract222(&CME, &FAE, &SIA, 0, 0, 1.0, 0.0); dpd_file2_close(&FAE); /* SIA -= FMI*CMA */ dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract222(&FMI, &CME, &SIA, 1, 1, -1.0, 1.0); dpd_file2_close(&FMI); /* SIA += WMAEI*CME */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMBEJ (JB,ME)"); dpd_contract422(&W, &CME, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* SIA += WmAeI*Cme */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WmBeJ (JB,me)"); dpd_contract422(&W, &Cme, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* Sia = Fae*Cie */ dpd_file2_init(&Fae, CC_OEI, H_IRR, 1, 1, "Fae"); dpd_contract222(&Cme, &Fae, &Sia, 0, 0, 1.0, 0.0); dpd_file2_close(&Fae); /* Sia -= Fmi*Cma */ dpd_file2_init(&Fmi, CC_OEI, H_IRR, 0, 0, "Fmi"); dpd_contract222(&Fmi, &Cme, &Sia, 1, 1, -1.0, 1.0); dpd_file2_close(&Fmi); /* Sia += Wmaei*Cme */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "Wmbej (jb,me)"); dpd_contract422(&W,&Cme,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* Sia += WMaEi*CME */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbEj (jb,ME)"); dpd_contract422(&W,&CME,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Cme); dpd_file2_close(&Sia); dpd_file2_close(&CME); dpd_file2_close(&SIA); } else { /* UHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CME", i); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); sprintf(lbl, "%s %d", "Cme", i); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl); /* SIA = FAE*CIE */ dpd_file2_init(&FAE, CC_OEI, H_IRR, 1, 1, "FAE"); dpd_contract222(&CME, &FAE, &SIA, 0, 0, 1.0, 0.0); dpd_file2_close(&FAE); /* SIA -= FMI*CMA */ dpd_file2_init(&FMI, CC_OEI, H_IRR, 0, 0, "FMI"); dpd_contract222(&FMI, &CME, &SIA, 1, 1, -1.0, 1.0); dpd_file2_close(&FMI); /* SIA += WMAEI*CME */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 20, 20, 20, 0, "WMBEJ (JB,ME)"); dpd_contract422(&W, &CME, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* SIA += WmAeI*Cme */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 30, 20, 30, 0, "WmBeJ (JB,me)"); dpd_contract422(&W, &Cme, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* Sia = Fae*Cie */ dpd_file2_init(&Fae, CC_OEI, H_IRR, 3, 3, "Fae"); dpd_contract222(&Cme, &Fae, &Sia, 0, 0, 1.0, 0.0); dpd_file2_close(&Fae); /* Sia -= Fmi*Cma */ dpd_file2_init(&Fmi, CC_OEI, H_IRR, 2, 2, "Fmi"); dpd_contract222(&Fmi, &Cme, &Sia, 1, 1, -1.0, 1.0); dpd_file2_close(&Fmi); /* Sia += Wmaei*Cme */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 30, 30, 30, 0, "Wmbej (jb,me)"); dpd_contract422(&W,&Cme,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); /* Sia += WMaEi*CME */ dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 20, 30, 20, 0, "WMbEj (jb,ME)"); dpd_contract422(&W,&CME,&Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Cme); dpd_file2_close(&Sia); dpd_file2_close(&CME); dpd_file2_close(&SIA); } #ifdef EOM_DEBUG check_sum("SigmaSS",i,C_irr); #endif return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sort_amps.cc���������������������������������������������������������������������0000644�0001015�0000765�00000005342�10757640026�015157� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* copied from cclamba to make consistent copies of R and L changes should be made to sort_amps in both programs as cceom_density is written */ void sort_amps(void) { dpdbuf4 R2; int R_irr; /* calculate irrep of R, the irrep for root of interest. */ R_irr = eom_params.prop_sym^moinfo.sym; if(params.ref == 0 || params.ref == 1) { /* RHF/ROHF */ /* Build R2iJaB list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_RAMPS, qpsr, 0, 5, "RiJaB"); dpd_buf4_close(&R2); /* Build R2IAJB list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 10, 10, "RIAJB"); dpd_buf4_close(&R2); /* Build R2iajb list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 2, 7, 0, "Rijab"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 10, 10, "Riajb"); dpd_buf4_close(&R2); /* Build R2IAjb list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 0, 5, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 10, 10, "RIAjb"); dpd_buf4_close(&R2); /* Build R2iaJB list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 0, 5, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 10, 10, "RiaJB"); dpd_buf4_close(&R2); /* Build R2IbjA and R2 jAIb list */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 10, 10, 10, 10, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_RAMPS, psrq, 10, 10, "RIbjA"); dpd_buf4_sort(&R2, CC_RAMPS, rqps, 10, 10, "RjAIb"); dpd_buf4_close(&R2); } else if(params.ref == 2) { /* UHF */ dpd_buf4_init(&R2, CC_RAMPS, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_RAMPS, qpsr, 23, 29, "RiJaB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 0, 5, 2, 7, 0, "RIJAB"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 20, 20, "RIAJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 10, 15, 12, 17, 0, "Rijab"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 30, 30, "Riajb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 22, 28, 22, 28, 0, "RIjAb"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 20, 30, "RIAjb"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 23, 29, 23, 29, 0, "RiJaB"); dpd_buf4_sort(&R2, CC_RAMPS, prqs, 30, 20, "RiaJB"); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, R_irr, 20, 30, 20, 30, 0, "RIAjb"); dpd_buf4_sort(&R2, CC_RAMPS, psrq, 24, 27, "RIbjA"); dpd_buf4_sort(&R2, CC_RAMPS, rqps, 27, 24, "RjAIb"); dpd_buf4_close(&R2); } } }} // namespace psi::cceom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/sort_C.cc������������������������������������������������������������������������0000644�0001015�0000765�00000011176�10757640026�014403� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* sorts C vectors each iteration to prepare for hbar contractions */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { #include <physconst.h> void sort_C(int C_index, int C_irr) { dpdbuf4 CMNEF, Cmnef, CMnEf, CMnfE, CMneF, C2; char lbl[32]; /* Copy used in WmbejDD */ if (params.eom_ref == 1) { /* ROHF */ sprintf(lbl, "%s %d", "CMNEF", C_index); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); dpd_buf4_sort(&CMNEF, EOM_TMP, prqs, 10, 10, "CMENF"); dpd_buf4_close(&CMNEF); sprintf(lbl, "%s %d", "Cmnef", C_index); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 0, 5, 2, 7, 0, lbl); dpd_buf4_sort(&Cmnef, EOM_TMP, prqs, 10, 10, "Cmenf"); dpd_buf4_close(&Cmnef); } else if (params.eom_ref == 2) { /* UHF */ sprintf(lbl, "%s %d", "CMNEF", C_index); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 5, 2, 7, 0, lbl); dpd_buf4_sort(&CMNEF, EOM_TMP, prqs, 20, 20, "CMENF"); dpd_buf4_close(&CMNEF); sprintf(lbl, "%s %d", "Cmnef", C_index); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 15, 12, 17, 0, lbl); dpd_buf4_sort(&Cmnef, EOM_TMP, prqs, 30, 30, "Cmenf"); dpd_buf4_close(&Cmnef); } /* now do sorts of CMnEf */ if (params.eom_ref < 2) { /* Copy used in WmbejDD */ sprintf(lbl, "%s %d", "CMnEf", C_index); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 10, 10, "CMEnf"); /* Copy used in WmnieSD */ dpd_buf4_sort(&CMnEf, EOM_TMP, qprs, 0, 5, "CnMEf"); /* Copy of current C vector used in WmnieSD and WabefDD */ dpd_buf4_sort(&CMnEf, EOM_TMP, pqsr, 0, 5, "CMnfE"); dpd_buf4_close(&CMnEf); /* Copy used in WmbejDD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMEnf"); dpd_buf4_sort(&CMnEf, EOM_TMP, psrq, 10, 10, "CMfnE"); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CnMEf"); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 10, 10, "CnEMf"); dpd_buf4_close(&CMnEf); /* Copy used in FDD, FSD, WamefSD, WmnefDD, WmnieSD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CnMEf"); dpd_buf4_sort(&CMnEf, EOM_TMP, pqsr, 0, 5, "CmNeF"); dpd_buf4_close(&CMnEf); /* Copy used in WmbejDD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CmNeF"); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 10, 10, "CmeNF"); dpd_buf4_close(&CMnEf); } else { /* UHF CMnEf sorts */ sprintf(lbl, "%s %d", "CMnEf", C_index); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 20, 30, "CMEnf"); /* Copy used in WmnieSD */ dpd_buf4_sort(&CMnEf, EOM_TMP, qprs, 23, 28, "CnMEf"); /* Copy used in WmnieSD and WabefDD */ dpd_buf4_sort(&CMnEf, EOM_TMP, pqsr, 22, 29, "CMnfE"); dpd_buf4_close(&CMnEf); /* Copy used in WmbejDD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 20, 30, 20, 30, 0, "CMEnf"); dpd_buf4_sort(&CMnEf, EOM_TMP, psrq, 24, 27, "CMfnE"); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 28, 23, 28, 0, "CnMEf"); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 27, 24, "CnEMf"); dpd_buf4_close(&CMnEf); /* Copy used in FDD, FSD, WamefSD, WmnefDD, WmnieSD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 28, 23, 28, 0, "CnMEf"); dpd_buf4_sort(&CMnEf, EOM_TMP, pqsr, 23, 29, "CmNeF"); dpd_buf4_close(&CMnEf); /* Copy used in WmbejDD */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_buf4_sort(&CMnEf, EOM_TMP, prqs, 30, 20, "CmeNF"); dpd_buf4_close(&CMnEf); } if (params.eom_ref == 0) { /* special sorts for RHF */ sprintf(lbl, "%s %d", "CMnEf", C_index); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_copy(&CMnEf, EOM_TMP, "2CMnEf - CMnfE"); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_buf4_scm(&CMnEf, 2.0); dpd_buf4_init(&CMnfE, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnfE"); dpd_buf4_axpy(&CMnfE, &CMnEf, -1.0); dpd_buf4_close(&CMnfE); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMEnf"); dpd_buf4_scmcopy(&CMnEf, EOM_TMP, "2CMEnf-CMfnE", 2.0); dpd_buf4_close(&CMnEf); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "2CMEnf-CMfnE"); dpd_buf4_init(&C2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMfnE"); dpd_buf4_axpy(&C2, &CMnEf, -1.0); dpd_buf4_close(&C2); dpd_buf4_close(&CMnEf); } } }} // namespace psi::cceom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WabefDD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000051104�10757640026�014401� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); /* This function computes the H-bar doubles-doubles block contribution from Wabef to a Sigma vector stored at Sigma plus 'i' */ void WabefDD(int i, int C_irr) { dpdfile2 tIA, tia, SIA, Sia; dpdbuf4 SIJAB, Sijab, SIjAb, B; dpdbuf4 CMNEF, Cmnef, CMnEf, X, F, tau, D, WM, WP, Z; char CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; char SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32], SIA_lbl[32], Sia_lbl[32]; char lbl_a[32], lbl_s[32]; dpdbuf4 tau_a, tau_s; dpdbuf4 B_a, B_s; dpdbuf4 S, A; double **B_diag, **tau_diag; int ij, Gc, C, c, cc; int nbuckets, rows_per_bucket, rows_left, m, row_start, ab, cd, dc, d; int nrows, ncols, nlinks; psio_address next; if (params.eom_ref == 0) { /* RHF */ /* SIjAb += WAbEf*CIjEf */ sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); /* SIjAb += <Ab|Ef> CIjEf -- allow out of core algorithm */ #ifdef TIME_CCEOM timer_on("WabefDD Z"); #endif if(!strcmp(params.abcd,"OLD")) { dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&Z, EOM_TMP, C_irr, 5, 0, 5, 0, 0, "WabefDD Z(Ab,Ij)"); dpd_buf4_init(&B, CC_BINTS, H_IRR, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract444(&B, &CMnEf, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&B); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&Z, EOM_TMP, rspq, 0, 5, "WabefDD Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WabefDD Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &SIjAb, 1); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); } else if(!strcmp(params.abcd,"NEW")) { sprintf(lbl_a, "CMnEf(-)(mn,ef) %d", i); sprintf(lbl_s, "CMnEf(+)(mn,ef) %d", i); /* L_a(-)(ij,ab) (i>j, a>b) = L(ij,ab) - L(ij,ba) */ dpd_buf4_init(&tau_a, EOM_CMnEf, C_irr, 4, 9, 0, 5, 1, CMnEf_lbl); dpd_buf4_copy(&tau_a, EOM_CMnEf, lbl_a); dpd_buf4_close(&tau_a); /* L_s(+)(ij,ab) (i>=j, a>=b) = L(ij,ab) + L(ij,ba) */ dpd_buf4_init(&tau_a, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_copy(&tau_a, EOM_TMP, lbl_s); dpd_buf4_sort_axpy(&tau_a, EOM_TMP, pqsr, 0, 5, lbl_s, 1); dpd_buf4_close(&tau_a); dpd_buf4_init(&tau_a, EOM_TMP, C_irr, 3, 8, 0, 5, 0, lbl_s); dpd_buf4_copy(&tau_a, EOM_CMnEf, lbl_s); dpd_buf4_close(&tau_a); timer_on("ABCD:S"); dpd_buf4_init(&tau_s, EOM_CMnEf, C_irr, 3, 8, 3, 8, 0, lbl_s); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, EOM_TMP, C_irr, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_contract444(&B_s, &tau_s, &S, 0, 0, 0.5, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_buf4_close(&tau_s); timer_off("ABCD:S"); /* L_diag(ij,c) = 2 * L(ij,cc)*/ /* NB: Gcc = 0, and B is totally symmetric, so Gab = 0 */ /* But Gij = L_irr ^ Gab = L_irr */ dpd_buf4_init(&tau, EOM_CMnEf, C_irr, 3, 8, 3, 8, 0, lbl_s); dpd_buf4_mat_irrep_init(&tau, C_irr); dpd_buf4_mat_irrep_rd(&tau, C_irr); tau_diag = dpd_block_matrix(tau.params->rowtot[C_irr], moinfo.nvirt); for(ij=0; ij < tau.params->rowtot[C_irr]; ij++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = C + moinfo.vir_off[Gc]; cc = tau.params->colidx[c][c]; tau_diag[ij][c] = tau.matrix[C_irr][ij][cc]; } dpd_buf4_mat_irrep_close(&tau, C_irr); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, EOM_TMP, C_irr, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_buf4_mat_irrep_init(&S, 0); dpd_buf4_mat_irrep_rd(&S, 0); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + moinfo.nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; B_diag = dpd_block_matrix(rows_per_bucket, moinfo.nvirt); next = PSIO_ZERO; ncols = tau.params->rowtot[C_irr]; nlinks = moinfo.nvirt; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; nrows = rows_per_bucket; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } if(rows_left) { row_start = m * rows_per_bucket; nrows = rows_left; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } dpd_buf4_mat_irrep_wrt(&S, 0); dpd_buf4_mat_irrep_close(&S, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_free_block(B_diag, rows_per_bucket, moinfo.nvirt); dpd_free_block(tau_diag, tau.params->rowtot[C_irr], moinfo.nvirt); dpd_buf4_close(&tau); timer_on("ABCD:A"); dpd_buf4_init(&tau_a, EOM_CMnEf, C_irr, 4, 9, 4, 9, 0, lbl_a); dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_init(&A, EOM_TMP, C_irr, 9, 4, 9, 4, 0, "A(ab,ij)"); dpd_contract444(&B_a, &tau_a, &A, 0, 0, 0.5, 0); dpd_buf4_close(&A); dpd_buf4_close(&B_a); dpd_buf4_close(&tau_a); timer_off("ABCD:A"); timer_on("ABCD:axpy"); dpd_buf4_init(&S, EOM_TMP, C_irr, 5, 0, 8, 3, 0, "S(ab,ij)"); dpd_buf4_sort_axpy(&S, EOM_SIjAb, rspq, 0, 5, SIjAb_lbl, 1); dpd_buf4_close(&S); dpd_buf4_init(&A, EOM_TMP, C_irr, 5, 0, 9, 4, 0, "A(ab,ij)"); dpd_buf4_sort_axpy(&A, EOM_SIjAb, rspq, 0, 5, SIjAb_lbl, 1); dpd_buf4_close(&A); timer_off("ABCD:axpy"); } #ifdef TIME_CCEOM timer_off("WabefDD Z"); #endif /* construct XIjMb = CIjEf * <mb|ef> */ dpd_buf4_init(&X, EOM_TMP, C_irr, 10, 0, 10, 0, 0, "WabefDD X(Mb,Ij)"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&F, CC_FINTS, H_IRR, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&F, &CMnEf, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMnEf); dpd_buf4_init(&Z, EOM_TMP, C_irr, 5, 0, 5, 0, 0, "WabefDD Z(Ab,Ij)"); dpd_file2_init(&tIA, CC_OEI, H_IRR, 0, 1, "tIA"); /* fprintf(outfile,"\n begin contract244 in WabefDD\n"); */ dpd_contract244(&tIA, &X, &Z, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&tIA); /* dpd_buf4_print(&Z,outfile,1); */ dpd_buf4_close(&X); dpd_buf4_sort_axpy(&Z, EOM_SIjAb, rspq, 0, 5, SIjAb_lbl, -1); dpd_buf4_sort_axpy(&Z, EOM_SIjAb, srqp, 0, 5, SIjAb_lbl, -1); /* SIjAb += tau_MnAb <Mn||ef> CIjEf */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&X, EOM_TMP, C_irr, 0, 0, 0, 0, 0, "WabefDD XIjMn"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&CMnEf, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&X, &tau, &SIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&X); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WABEF*CIJEF */ dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&B, CC_BINTS, H_IRR, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract444(&CMNEF, &B, &SIJAB, 0, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&SIJAB); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 10, 2, 10, 0, "XIJMA"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_contract444(&CMNEF, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMNEF); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WabefDD_M"); dpd_file2_init(&tIA, CC_OEI, H_IRR, 0, 1, "tIA"); dpd_contract244(&tIA, &X, &WM, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&tIA); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WabefDD_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WabefDD_P"); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&SIJAB); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 2, 2, 2, 0, "XIJMN"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&CMNEF, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMNEF); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&X, &tau, &SIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&SIJAB); dpd_buf4_close(&X); /* Sijab += Wabef*Cijef */ dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, Cmnef_lbl); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_init(&B, CC_BINTS, H_IRR, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract444(&Cmnef, &B, &Sijab, 0, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Sijab); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 10, 2, 10, 0, "Xijma"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_contract444(&Cmnef, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&Cmnef); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WabefDD_M"); dpd_file2_init(&tia, CC_OEI, H_IRR, 0, 1, "tia"); dpd_contract244(&tia, &X, &WM, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&tia); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WabefDD_P"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WabefDD_P"); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&Sijab); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 2, 2, 2, 0, "XIJMN"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, Cmnef_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&Cmnef, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Cmnef); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&X, &tau, &Sijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&Sijab); dpd_buf4_close(&X); /* SIjAb += WAbEf*CIjEf */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); /* make use of a more efficient algorithm */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_buf4_init(&B, CC_BINTS, H_IRR, 5, 5, 5, 5, 0, "B <ab|cd>"); /* dpd_contract444(&CMnEf, &B, &SIjAb, 0, 0, 1.0, 1.0); */ dpd_contract444(&B, &CMnEf, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort(&Z, EOM_TMP, rspq, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &SIjAb, 1); dpd_buf4_close(&Z); dpd_buf4_close(&CMnEf); dpd_buf4_init(&X, EOM_TMP, C_irr, 0, 10, 0, 10, 0, "XIjMa"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnfE"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&CMnEf, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&X, EOM_TMP, pqsr, 0, 11, "XIjaM"); dpd_buf4_close(&X); dpd_buf4_init(&X, EOM_TMP, C_irr, 0, 11, 0, 11, 0, "XIjaM"); dpd_file2_init(&tia, CC_OEI, H_IRR, 0, 1, "tia"); dpd_contract424(&X, &tia, &SIjAb, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&tia); dpd_buf4_close(&X); dpd_buf4_init(&X, EOM_TMP, C_irr, 0, 10, 0, 10, 0, "XIjMb"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&F, CC_FINTS, H_IRR, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&CMnEf, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMnEf); dpd_file2_init(&tIA, CC_OEI, H_IRR, 0, 1, "tIA"); dpd_contract244(&tIA, &X, &SIjAb, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&X); dpd_buf4_init(&X, EOM_TMP, C_irr, 0, 0, 0, 0, 0, "XIjMn"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&CMnEf, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&X, &tau, &SIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&SIjAb); dpd_buf4_close(&X); sprintf(SIA_lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, SIA_lbl); sprintf(Sia_lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, Sia_lbl); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); c_clean(&SIA,&Sia,&SIJAB,&Sijab,&SIjAb); dpd_buf4_close(&SIJAB); dpd_buf4_close(&Sijab); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { /* UHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WABEF*CIJEF */ dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&B, CC_BINTS, H_IRR, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_contract444(&CMNEF, &B, &SIJAB, 0, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&SIJAB); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 20, 2, 20, 0, "XIJMA"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_contract444(&CMNEF, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMNEF); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WABEFDD_M"); dpd_file2_init(&tIA, CC_OEI, H_IRR, 0, 1, "tIA"); dpd_contract244(&tIA, &X, &WM, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&tIA); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WABEFDD_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WABEFDD_P"); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&SIJAB); dpd_buf4_init(&X, EOM_TMP, C_irr, 2, 2, 2, 2, 0, "XIJMN"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract444(&CMNEF, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMNEF); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&X, &tau, &SIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&SIJAB); dpd_buf4_close(&X); /* Sijab += Wabef*Cijef */ dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, Cmnef_lbl); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_init(&B, CC_BINTS, H_IRR, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_contract444(&Cmnef, &B, &Sijab, 0, 0, 1.0, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&Sijab); dpd_buf4_init(&X, EOM_TMP, C_irr, 12, 30, 12, 30, 0, "Xijma"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_contract444(&Cmnef, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&Cmnef); dpd_buf4_init(&WM, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WabefDD_M"); dpd_file2_init(&tia, CC_OEI, H_IRR, 2, 3, "tia"); dpd_contract244(&tia, &X, &WM, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&tia); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 12, 15, "WabefDD_P"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WabefDD_P"); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&Sijab); dpd_buf4_init(&X, EOM_TMP, C_irr, 12, 12, 12, 12, 0, "Xijmn"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, Cmnef_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&Cmnef, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&Cmnef); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&X, &tau, &Sijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&Sijab); dpd_buf4_close(&X); /* SIjAb += WAbEf*CIjEf */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); /* make use of a more efficient algorithm */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 28, 22, 28, 22, 0, "Z(Ab,Ij)"); dpd_buf4_init(&B, CC_BINTS, H_IRR, 28, 28, 28, 28, 0, "B <Ab|Cd>"); /* dpd_contract444(&CMnEf, &B, &SIjAb, 0, 0, 1.0, 1.0); */ dpd_contract444(&B, &CMnEf, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort(&Z, EOM_TMP, rspq, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z, &SIjAb, 1); dpd_buf4_close(&Z); dpd_buf4_close(&CMnEf); dpd_buf4_init(&X, EOM_TMP, C_irr, 22, 27, 22, 27, 0, "XIjmA"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 22, 29, 22, 29, 0, "CMnfE"); dpd_buf4_init(&F, CC_FINTS, H_IRR, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract444(&CMnEf, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMnEf); dpd_buf4_sort(&X, EOM_TMP, pqsr, 22, 26, "XIjAm"); dpd_buf4_close(&X); dpd_buf4_init(&X, EOM_TMP, C_irr, 22, 26, 22, 26, 0, "XIjAm"); dpd_file2_init(&tia, CC_OEI, H_IRR, 2, 3, "tia"); dpd_contract424(&X, &tia, &SIjAb, 3, 0, 0, -1.0, 1.0); dpd_file2_close(&tia); dpd_buf4_close(&X); dpd_buf4_init(&X, EOM_TMP, C_irr, 22, 24, 22, 24, 0, "XIjMb"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_buf4_init(&F, CC_FINTS, H_IRR, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract444(&CMnEf, &F, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&F); dpd_buf4_close(&CMnEf); dpd_file2_init(&tIA, CC_OEI, H_IRR, 0, 1, "tIA"); dpd_contract244(&tIA, &X, &SIjAb, 0, 2, 1, -1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&X); /* Sijab += tau_mneb <mn||ef> C_ijef */ dpd_buf4_init(&X, EOM_TMP, C_irr, 22, 22, 22, 22, 0, "XIjMn"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract444(&CMnEf, &D, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&tau, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&X, &tau, &SIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&tau); dpd_buf4_close(&SIjAb); dpd_buf4_close(&X); } #ifdef EOM_DEBUG check_sum("WabefDD",i,C_irr); #endif return; } }} // namespace psi::cceom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WabejDS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000015637�10757640026�014437� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-singles block contribution of Wabej to a Sigma vector stored at Sigma plus 'i' */ void WabejDS(int i, int C_irr) { dpdfile2 CME, Cme; dpdbuf4 SIJAB, Sijab, SIjAb; dpdbuf4 WABEI, Wabei, WAbEi, WaBeI, WM, WP, Z; char CME_lbl[32], Cme_lbl[32], SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; int Gej, Gab, Gij, Gj, Gi, Ge, nrows, length, E, e, I; dpdbuf4 W; if (params.eom_ref == 0) { /* RHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WabejDS Z(Ij,Ab)"); dpd_buf4_scm(&Z, 0); dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); /* dpd_contract244(&CME, &WAbEi, &Z, 1, 0, 0, 1.0, 0.0); */ dpd_file2_mat_init(&CME); dpd_file2_mat_rd(&CME); for(Gej=0; Gej < moinfo.nirreps; Gej++) { Gab = Gej ^ H_IRR; Gij = Gab ^ C_irr; dpd_buf4_mat_irrep_init(&Z, Gij); dpd_buf4_mat_irrep_shift13(&Z, Gij); for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gj = Ge ^ Gej; Gi = Gj ^ Gij; nrows = moinfo.occpi[Gj]; length = nrows * W.params->coltot[Gab]; dpd_buf4_mat_irrep_init_block(&W, Gej, nrows); for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&W, Gej, W.row_offset[Gej][e], nrows); for(I=0; I < moinfo.occpi[Gi]; I++) { if(length) C_DAXPY(length, CME.matrix[Gi][I][E], W.matrix[Gej][0], 1, Z.shift.matrix[Gij][Gi][I], 1); } } dpd_buf4_mat_irrep_close_block(&W, Gej, nrows); } dpd_buf4_mat_irrep_wrt(&Z, Gij); dpd_buf4_mat_irrep_close(&Z, Gij); } dpd_file2_mat_close(&CME); dpd_file2_close(&CME); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, EOM_SIjAb, qpsr, 0, 5, SIjAb_lbl, 1); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_close(&SIjAb); dpd_buf4_close(&Z); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WABEJ * CIE - WABEI * CJE */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_P"); dpd_buf4_init(&WABEI, CC_HBAR, H_IRR, 11, 7, 11, 7, 0, "WEIAB"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WABEI, &WP, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WABEI); dpd_buf4_sort(&WP, EOM_TMP, qprs, 0, 7, "WabejDS_M"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_M"); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&SIJAB); /* Sijab += Wabej * Cie - Wabei * Cje */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_P"); dpd_buf4_init(&Wabei, CC_HBAR, H_IRR, 11, 7, 11, 7, 0, "Weiab"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_contract244(&Cme, &Wabei, &WP, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&Wabei); dpd_buf4_sort(&WP, EOM_TMP, qprs, 0, 7, "WabejDS_M"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 0, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_M"); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&Sijab); /* SIjAb += WAbEj * CIE - WAbeI * Cje */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WAbEi, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WEiAb"); dpd_contract244(&CME, &WAbEi, &SIjAb, 1, 0, 0, 1.0, 1.0); dpd_file2_close(&CME); dpd_buf4_close(&WAbEi); dpd_buf4_init(&WaBeI, CC_HBAR, H_IRR, 10, 5, 10, 5, 0, "WeIaB (Ie,Ab)"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_contract424(&WaBeI, &Cme, &SIjAb, 1, 1, 1, 1.0, 1.0); dpd_file2_close(&Cme); dpd_buf4_close(&WaBeI); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WABEJ * CIE - WABEI * CJE */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_P"); dpd_buf4_init(&WABEI, CC_HBAR, H_IRR, 21, 7, 21, 7, 0, "WEIAB"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WABEI, &WP, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WABEI); dpd_buf4_sort(&WP, EOM_TMP, qprs, 0, 7, "WabejDS_M"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WabejDS_M"); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&SIJAB); /* Sijab += Wabej * Cie - Wabei * Cje */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "WabejDS_PB"); dpd_buf4_init(&Wabei, CC_HBAR, H_IRR, 31, 17, 31, 17, 0, "Weiab"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_contract244(&Cme, &Wabei, &WP, 1, 0, 0, 1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&Wabei); dpd_buf4_sort(&WP, EOM_TMP, qprs, 10, 17, "WabejDS_MB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "WabejDS_MB"); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&Sijab); /* SIjAb += WAbEj * CIE - WAbeI * Cje */ /* start here */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WAbEi, CC_HBAR, H_IRR, 26, 28, 26, 28, 0, "WEiAb"); dpd_contract244(&CME, &WAbEi, &SIjAb, 1, 0, 0, 1.0, 1.0); dpd_file2_close(&CME); dpd_buf4_close(&WAbEi); dpd_buf4_init(&WaBeI, CC_HBAR, H_IRR, 24, 28, 24, 28, 0, "WeIaB (Ie,Ab)"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_contract424(&WaBeI, &Cme, &SIjAb, 1, 1, 1, 1.0, 1.0); dpd_file2_close(&Cme); dpd_buf4_close(&WaBeI); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("WabejDS",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WamefSD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000013103�10757640026�014430� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar singles-doubles block contribution of Wamef to a Sigma vector stored at Sigma plus 'i' */ void WamefSD(int i, int C_irr) { dpdfile2 SIA, Sia; dpdbuf4 WAMEF, Wamef, WAmEf, WaMeF; dpdbuf4 CMNEF, Cmnef, CMnEf, CmNeF; dpdbuf4 C, W; dpdfile2 S; char lbl[32]; int Gam, Gef, Gim, Gi, Ga, Gm, nrows, ncols, A, a, am; if (params.eom_ref == 0) { /* RHF */ /* sprintf(lbl, "%s %d", "SIA", i); */ /* dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); */ /* sprintf(lbl, "%s %d", "CMnEf", i); */ /* dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); */ /* dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); */ /* dpd_contract442(&CMnEf, &WAmEf, &SIA, 0, 0, 1.0, 1.0); */ /* dpd_buf4_close(&WAmEf); */ /* dpd_buf4_close(&CMnEf); */ /* dpd_file2_close(&SIA); */ /* OOC code below added 7/27/05, -TDC */ /* S(i,a) += [ 2 C(im,ef) - C(im,fe) ] * W(am,ef) */ dpd_buf4_init(&C, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&S, EOM_SIA, C_irr, 0, 1, lbl); dpd_file2_mat_init(&S); dpd_file2_mat_rd(&S); for(Gam=0; Gam < moinfo.nirreps; Gam++) { Gef = Gam ^ H_IRR; Gim = Gef ^ C_irr; dpd_buf4_mat_irrep_init(&C, Gim); dpd_buf4_mat_irrep_rd(&C, Gim); dpd_buf4_mat_irrep_shift13(&C, Gim); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Ga = Gi ^ C_irr; Gm = Ga ^ Gam; W.matrix[Gam] = dpd_block_matrix(moinfo.occpi[Gm], W.params->coltot[Gef]); nrows = moinfo.occpi[Gi]; ncols = moinfo.occpi[Gm] * W.params->coltot[Gef]; for(A=0; A < moinfo.virtpi[Ga]; A++) { a = moinfo.vir_off[Ga] + A; am = W.row_offset[Gam][a]; dpd_buf4_mat_irrep_rd_block(&W, Gam, am, moinfo.occpi[Gm]); if(nrows && ncols && moinfo.virtpi[Ga]) C_DGEMV('n',nrows,ncols,1,C.shift.matrix[Gim][Gi][0],ncols,W.matrix[Gam][0], 1, 1, &(S.matrix[Gi][0][A]), moinfo.virtpi[Ga]); } dpd_free_block(W.matrix[Gam], moinfo.occpi[Gm], W.params->coltot[Gef]); } dpd_buf4_mat_irrep_close(&C, Gim); } dpd_file2_mat_wrt(&S); dpd_file2_mat_close(&S); dpd_file2_close(&S); dpd_buf4_close(&C); dpd_buf4_close(&W); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); /* SIA += 0.5 CIMEF* WAMEF + CImEf * WAmEf */ dpd_buf4_init(&WAMEF, CC_HBAR, H_IRR, 11, 7, 11, 7, 0, "WAMEF"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, lbl); dpd_contract442(&CMNEF, &WAMEF, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&WAMEF); dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_contract442(&CMnEf, &WAmEf, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WAmEf); /* Sia += 0.5 Cimef * Wamef + CiMeF * WaMeF */ dpd_buf4_init(&Wamef, CC_HBAR, H_IRR, 11, 7, 11, 7, 0, "Wamef"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 0, 7, 2, 7, 0, lbl); dpd_contract442(&Cmnef, &Wamef, &Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Wamef); dpd_buf4_init(&WaMeF, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WaMeF"); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CmNeF"); dpd_contract442(&CmNeF, &WaMeF, &Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&CmNeF); dpd_buf4_close(&WaMeF); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } else { /* UHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); /* SIA += 0.5 CIMEF* WAMEF + CImEf * WAmEf */ dpd_buf4_init(&WAMEF, CC_HBAR, H_IRR, 21, 7, 21, 7, 0, "WAMEF"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, lbl); dpd_contract442(&CMNEF, &WAMEF, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&WAMEF); dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 26, 28, 26, 28, 0, "WAmEf"); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl); dpd_contract442(&CMnEf, &WAmEf, &SIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WAmEf); /* Sia += 0.5 Cimef * Wamef + CiMeF * WaMeF */ dpd_buf4_init(&Wamef, CC_HBAR, H_IRR, 31, 17, 31, 17, 0, "Wamef"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 17, 12, 17, 0, lbl); dpd_contract442(&Cmnef, &Wamef, &Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Wamef); dpd_buf4_init(&WaMeF, CC_HBAR, H_IRR, 25, 29, 25, 29, 0, "WaMeF"); dpd_buf4_init(&CmNeF, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_contract442(&CmNeF, &WaMeF, &Sia, 0, 0, 1.0, 1.0); dpd_buf4_close(&CmNeF); dpd_buf4_close(&WaMeF); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } #ifdef EOM_DEBUG check_sum("WamefSD",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WbmfeDS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000024417�10757640026�014443� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-singles block contribution of Wbmfe to a Sigma vector stored at Sigma plus 'i' */ void WbmfeDS(int i, int C_irr) { dpdfile2 CME, Cme, XBF, Xbf; dpdbuf4 SIJAB, Sijab, SIjAb; dpdbuf4 WAMEF, Wamef, WAmEf, WaMeF, WM, WP, W, Z; dpdbuf4 TIJAB, TIjAb, Tijab; char CME_lbl[32], Cme_lbl[32], SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; int Gbm, Gfe, bm, b, m, Gb, Gm, Ge, Gf, B, M, f, e, fe, ef, nrows, ncols; dpdfile2 C; double *X; if (params.eom_ref == 0) { /* RHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form Xbf intermediates */ /* dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); */ /* dpd_file2_scm(&XBF, 0.0); */ /* dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); */ /* dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); */ /* dpd_dot24(&CME, &W, &XBF, 0, 0, 1.0, 1.0); */ /* dpd_buf4_close(&W); */ /* dpd_file2_close(&CME); */ /* OOC code below added 7/27/05, -TDC */ /* X(b,f) = [ 2 Wbmfe - Wbmef ] * C(m,e) */ dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_file2_scm(&XBF, 0.0); dpd_file2_mat_init(&XBF); dpd_file2_mat_rd(&XBF); dpd_file2_init(&C, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_file2_mat_init(&C); dpd_file2_mat_rd(&C); dpd_buf4_init(&W, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); for(Gbm=0; Gbm < moinfo.nirreps; Gbm++) { Gfe = Gbm ^ H_IRR; dpd_buf4_mat_irrep_row_init(&W, Gbm); X = init_array(W.params->coltot[Gfe]); for(bm=0; bm < W.params->rowtot[Gbm]; bm++) { dpd_buf4_mat_irrep_row_rd(&W, Gbm, bm); b = W.params->roworb[Gbm][bm][0]; m = W.params->roworb[Gbm][bm][1]; Gb = W.params->psym[b]; Gm = Gbm ^ Gb; Ge = Gm ^ C_irr; Gf = Ge ^ Gfe; B = b - moinfo.vir_off[Gb]; M = m - moinfo.occ_off[Gm]; zero_arr(X, W.params->coltot[Gfe]); for(fe=0; fe < W.params->coltot[Gfe]; fe++) { f = W.params->colorb[Gfe][fe][0]; e = W.params->colorb[Gfe][fe][1]; ef = W.params->colidx[e][f]; X[fe] = 2.0 * W.matrix[Gbm][0][fe] - W.matrix[Gbm][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows && ncols) C_DGEMV('n',nrows,ncols,1,&X[W.col_offset[Gfe][Gf]],ncols, C.matrix[Gm][M],1,1,XBF.matrix[Gb][B],1); } free(X); dpd_buf4_mat_irrep_row_close(&W, Gbm); } dpd_buf4_close(&W); dpd_file2_close(&C); dpd_file2_mat_wrt(&XBF); dpd_file2_mat_close(&XBF); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WbmfeDS Z(Ij,Ab)"); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&TIjAb, &XBF, &Z, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&TIjAb); dpd_buf4_sort_axpy(&Z, EOM_SIjAb, qpsr, 0, 5, SIjAb_lbl, 1); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); dpd_file2_close(&XBF); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form Xbf intermediates */ /* XBF = CME * WBMFE + Cme * WBmFe */ dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_file2_scm(&XBF, 0.0); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WAMEF, CC_HBAR, H_IRR, 11, 5, 11, 7, 0, "WAMEF"); dpd_dot24(&CME, &WAMEF, &XBF, 0, 0, 1.0, 1.0); dpd_buf4_close(&WAMEF); dpd_file2_close(&CME); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WAmEf"); dpd_dot24(&Cme, &WAmEf, &XBF, 0, 0, 1.0, 1.0); dpd_buf4_close(&WAmEf); dpd_file2_close(&Cme); dpd_file2_close(&XBF); /* Xbf = Cme * Wbmfe + CME * WbMfE */ dpd_file2_init(&Xbf, EOM_TMP, C_irr, 1, 1, "Xbf"); dpd_file2_scm(&Xbf, 0.0); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&Wamef, CC_HBAR, H_IRR, 11, 5, 11, 7, 0, "Wamef"); dpd_dot24(&Cme, &Wamef, &Xbf, 0, 0, 1.0, 1.0); dpd_buf4_close(&Wamef); dpd_file2_close(&Cme); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WaMeF, CC_HBAR, H_IRR, 11, 5, 11, 5, 0, "WaMeF"); dpd_dot24(&CME, &WaMeF, &Xbf, 0, 0, 1.0, 1.0); dpd_buf4_close(&WaMeF); dpd_file2_close(&CME); dpd_file2_close(&Xbf); /* SIJAB += XBF * TIJAF - XAF * TIJBF */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_P"); dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_buf4_init(&TIJAB, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract424(&TIJAB, &XBF, &WP, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&TIJAB); dpd_file2_close(&XBF); dpd_buf4_sort(&WP, EOM_TMP, pqsr, 2, 5, "WbmfeDS_M"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_M"); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&SIJAB); /* Sijab += Xbf * Tijaf - Xaf * Tijbf */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_P"); dpd_file2_init(&Xbf, EOM_TMP, C_irr, 1, 1, "Xbf"); dpd_buf4_init(&Tijab, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tijab"); dpd_contract424(&Tijab, &Xbf, &WP, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&Tijab); dpd_file2_close(&Xbf); dpd_buf4_sort(&WP, EOM_TMP, pqsr, 2, 5, "WbmfeDS_M"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_M"); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&Sijab); /* SIjAb += Xbf * tIjAf + XAF * TIjbF */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&Xbf, EOM_TMP, C_irr, 1, 1, "Xbf"); dpd_contract424(&TIjAb, &Xbf, &SIjAb, 3, 1, 0, 1.0, 1.0); dpd_file2_close(&Xbf); dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_contract244(&XBF, &TIjAb, &SIjAb, 1, 2, 1, 1.0, 1.0); dpd_file2_close(&XBF); dpd_buf4_close(&TIjAb); dpd_buf4_close(&SIjAb); } else { /* UHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form Xbf intermediates */ /* XBF = CME * WBMFE + Cme * WBmFe */ dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_file2_scm(&XBF, 0.0); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WAMEF, CC_HBAR, H_IRR, 21, 5, 21, 7, 0, "WAMEF"); dpd_dot24(&CME, &WAMEF, &XBF, 0, 0, 1.0, 1.0); dpd_buf4_close(&WAMEF); dpd_file2_close(&CME); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&WAmEf, CC_HBAR, H_IRR, 26, 28, 26, 28, 0, "WAmEf"); dpd_dot24(&Cme, &WAmEf, &XBF, 0, 0, 1.0, 1.0); dpd_buf4_close(&WAmEf); dpd_file2_close(&Cme); /* fprintf(outfile,"XBF self dot %15.10lf\n", dpd_file2_dot_self(&XBF)); */ dpd_file2_close(&XBF); /* Xbf = Cme * Wbmfe + CME * WbMfE */ dpd_file2_init(&Xbf, EOM_TMP, C_irr, 3, 3, "Xbf"); dpd_file2_scm(&Xbf, 0.0); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&Wamef, CC_HBAR, H_IRR, 31, 15, 31, 17, 0, "Wamef"); dpd_dot24(&Cme, &Wamef, &Xbf, 0, 0, 1.0, 1.0); dpd_buf4_close(&Wamef); dpd_file2_close(&Cme); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WaMeF, CC_HBAR, H_IRR, 25, 29, 25, 29, 0, "WaMeF"); dpd_dot24(&CME, &WaMeF, &Xbf, 0, 0, 1.0, 1.0); dpd_buf4_close(&WaMeF); dpd_file2_close(&CME); /* fprintf(outfile,"Xbf self dot %15.10lf\n", dpd_file2_dot_self(&Xbf)); */ dpd_file2_close(&Xbf); /* SIJAB += XBF * TIJAF - XAF * TIJBF */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_P"); dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_buf4_init(&TIJAB, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract424(&TIJAB, &XBF, &WP, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&TIJAB); dpd_file2_close(&XBF); dpd_buf4_sort(&WP, EOM_TMP, pqsr, 2, 5, "WbmfeDS_M"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WbmfeDS_M"); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&SIJAB); /* Sijab += Xbf * Tijaf - Xaf * Tijbf */ dpd_buf4_init(&WP, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WbmfeDS_PB"); dpd_file2_init(&Xbf, EOM_TMP, C_irr, 3, 3, "Xbf"); dpd_buf4_init(&Tijab, CC_TAMPS, H_IRR, 12, 15, 12, 17, 0, "tijab"); dpd_contract424(&Tijab, &Xbf, &WP, 3, 1, 0, 1.0, 0.0); dpd_buf4_close(&Tijab); dpd_file2_close(&Xbf); dpd_buf4_sort(&WP, EOM_TMP, pqsr, 12, 15, "WbmfeDS_MB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_init(&WM, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WbmfeDS_MB"); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_close(&Sijab); /* SIjAb += Xbf * tIjAf + XAF * TIjbF */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&Xbf, EOM_TMP, C_irr, 3, 3, "Xbf"); dpd_contract424(&TIjAb, &Xbf, &SIjAb, 3, 1, 0, 1.0, 1.0); dpd_file2_close(&Xbf); dpd_file2_init(&XBF, EOM_TMP, C_irr, 1, 1, "XBF"); dpd_contract244(&XBF, &TIjAb, &SIjAb, 1, 2, 1, 1.0, 1.0); dpd_file2_close(&XBF); dpd_buf4_close(&TIjAb); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("WbmfeDS",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WmaijDS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000014075�10757640026�014451� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-singles block contribution of Wmaij to a Sigma vector stored at Sigma plus 'i' */ void WmaijDS(int i, int C_irr) { dpdfile2 CME, Cme; dpdbuf4 SIJAB, Sijab, SIjAb, Z; dpdbuf4 W, WP, WM, WMBIJ, Wmbij, WMbIj, WmBiJ; char CME_lbl[32], Cme_lbl[32], SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIjAb += WmAIj * Cmb - WMbIj * CMA */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmaijDS Z(Ij,Ab)"); dpd_buf4_init(&WMbIj, CC_HBAR, H_IRR, 10, 0, 10, 0, 0, "WMbIj"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMbIj, &Z, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WMbIj); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WmaijDS Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmaijDS Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WMAIJ * CMB - WMBIJ * CMA */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_M"); dpd_buf4_init(&WMBIJ, CC_HBAR, H_IRR, 10, 2, 10, 2, 0, "WMBIJ"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMBIJ, &WM, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WMBIJ); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WmaijDS_P"); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&SIJAB); dpd_buf4_close(&WM); dpd_buf4_close(&WP); /* Sijab += Wmaij * Cmb - Wmbij * Cma */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_M"); dpd_buf4_init(&Wmbij, CC_HBAR, H_IRR, 10, 2, 10, 2, 0, "Wmbij"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_contract244(&Cme, &Wmbij, &WM, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&Wmbij); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WmaijDS_P"); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_P"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&Sijab); dpd_buf4_close(&WM); dpd_buf4_close(&WP); /* SIjAb += WmAIj * Cmb - WMbIj * CMA */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&WmBiJ, CC_HBAR, H_IRR, 11, 0, 11, 0, 0, "WmBiJ (Bm,Ji)"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_contract424(&WmBiJ, &Cme, &SIjAb, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&WmBiJ); dpd_buf4_init(&WMbIj, CC_HBAR, H_IRR, 10, 0, 10, 0, 0, "WMbIj"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMbIj, &SIjAb, 0, 0, 1, -1.0, 1.0); dpd_file2_close(&CME); dpd_buf4_close(&WMbIj); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { /* UHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WMAIJ * CMB - WMBIJ * CMA */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_M"); dpd_buf4_init(&WMBIJ, CC_HBAR, H_IRR, 20, 2, 20, 2, 0, "WMBIJ"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMBIJ, &WM, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&WMBIJ); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 2, 5, "WmaijDS_P"); dpd_buf4_init(&WP, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "WmaijDS_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&SIJAB); dpd_buf4_close(&WM); dpd_buf4_close(&WP); /* Sijab += Wmaij * Cmb - Wmbij * Cma */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WmaijDS_MB"); dpd_buf4_init(&Wmbij, CC_HBAR, H_IRR, 30, 12, 30, 12, 0, "Wmbij"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_contract244(&Cme, &Wmbij, &WM, 0, 0, 1, 1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&Wmbij); dpd_buf4_sort(&WM, EOM_TMP, pqsr, 12, 15, "WmaijDS_PB"); dpd_buf4_init(&WP, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "WmaijDS_PB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&Sijab); dpd_buf4_close(&WM); dpd_buf4_close(&WP); /* SIjAb += WmAIj * Cmb - WMbIj * CMA */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&WmBiJ, CC_HBAR, H_IRR, 26, 22, 26, 22, 0, "WmBiJ (Bm,Ji)"); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_contract424(&WmBiJ, &Cme, &SIjAb, 1, 0, 0, -1.0, 0.0); dpd_file2_close(&Cme); dpd_buf4_close(&WmBiJ); dpd_buf4_init(&WMbIj, CC_HBAR, H_IRR, 24, 22, 24, 22, 0, "WMbIj"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_contract244(&CME, &WMbIj, &SIjAb, 0, 0, 1, -1.0, 1.0); dpd_file2_close(&CME); dpd_buf4_close(&WMbIj); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("WmaijDS",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WmbejDD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000040615�10757640026�014426� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-doubles block contribution from P(ij)P(ab) Wmbej*Cimae to a Sigma vector stored at Sigma plus 'i' */ void WmbejDD(int i, int C_irr) { dpdbuf4 S2, S2temp, D; dpdbuf4 C2, C2temp; dpdbuf4 CMNEF, Cmnef, CMnEf, CmNeF, TIJAB, Tijab, TIjAb; dpdbuf4 SIJAB, Sijab, SIjAb, W, W1, W2, Z; char CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; char SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; if(params.eom_ref == 0) { /** RHF **/ /* RHF code adapted from WmbejT2.c 6-2002 */ sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* C2(Ib,mE) * W(mE,jA) --> Z(Ib,jA) */ dpd_buf4_init(&SIjAb, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_init(&C2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMfnE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract444(&C2, &W, &SIjAb, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&C2); /* C2(Ib,jA) --> C2(IA,jb) (part III) */ dpd_buf4_sort(&SIjAb, EOM_TMP, psrq, 10, 10, "C2 (IA,jb) 3"); dpd_buf4_close(&SIjAb); /* 1/2 [ (2 C2(IA,me) - C2(IE,ma)) * (2 W(ME,jb) + W(Me,Jb)] --> C2(IA,jb) */ dpd_buf4_init(&SIjAb, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "C2 (IA,jb) 1"); dpd_buf4_init(&C2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "2CMEnf-CMfnE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_contract444(&C2, &W, &SIjAb, 0, 1, 0.5, 0); dpd_buf4_close(&W); dpd_buf4_close(&C2); /* 1/2 Z(Ib,jA) + C2(IA,jb) --> C2(IA,jb) (Part I) */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_axpy(&Z, &SIjAb, 0.5); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); /* C2(IA,jb) (I) + C2(IA,jb) (III) --> C2(IA,jb) */ dpd_buf4_init(&SIjAb, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "C2 (IA,jb) 1"); dpd_buf4_init(&C2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "C2 (IA,jb) 3"); dpd_buf4_axpy(&C2, &SIjAb, 1); dpd_buf4_close(&C2); dpd_buf4_sort(&SIjAb, EOM_TMP, prqs, 0, 5, "C2 (Ij,Ab) (1+3)"); dpd_buf4_close(&SIjAb); dpd_buf4_init(&SIjAb, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "C2 (Ij,Ab) (1+3)"); dpd_buf4_sort(&SIjAb, EOM_TMP, qpsr, 0, 5, "C2 (Ij,Ab) (2+4)"); dpd_buf4_close(&SIjAb); /* C2(Ij,Ab) <--- I + II + III + IV */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&C2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "C2 (Ij,Ab) (1+3)"); dpd_buf4_axpy(&C2, &SIjAb, 1); dpd_buf4_close(&C2); dpd_buf4_init(&C2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "C2 (Ij,Ab) (2+4)"); dpd_buf4_axpy(&C2, &SIjAb, 1); dpd_buf4_close(&C2); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* C2(IA,ME) * W(ME,JB) --> S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SIAJB"); dpd_buf4_init(&CMNEF, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMENF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&CMNEF, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMNEF); /* C2(IA,me) * W(me,JB) --> S2(IA,JB) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMEnf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* P(IJ) S2(IA,JB) */ dpd_buf4_sort(&S2, EOM_TMP, rqps, 10, 10, "SJAIB"); /* P(AB) S2(IA,JB) */ dpd_buf4_sort(&S2, EOM_TMP, psrq, 10, 10, "SIBJA"); dpd_buf4_close(&S2); /* P(IJ) P(AB) S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SJAIB"); dpd_buf4_sort(&S2, EOM_TMP, psrq, 10, 10, "SJBIA"); dpd_buf4_close(&S2); /* S2(IA,JB) - S2(JA,IB) - S2(IB,JA) + S2(JB,IA) --> S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SIAJB"); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SJAIB"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SIBJA"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SJBIA"); dpd_buf4_axpy(&S2temp, &S2, 1); dpd_buf4_close(&S2temp); /* S2(IA,JB) --> S2(IJ,AB) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 0, 5, "SIJAB"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "SIJAB"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&SIJAB); dpd_buf4_close(&S2); /* C2(ia,me) * W(me,jb) --> S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Siajb"); dpd_buf4_init(&Cmnef, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Cmenf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&Cmnef, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&Cmnef); /* C2(ia,ME) * W(ME,jb) --> S2(ia,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CmeNF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* P(ij) S2(ia,jb) */ dpd_buf4_sort(&S2, EOM_TMP, rqps, 10, 10, "Sjaib"); /* P(ab) S2(ia,jb) */ dpd_buf4_sort(&S2, EOM_TMP, psrq, 10, 10, "Sibja"); dpd_buf4_close(&S2); /* P(ij) P(ab) S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Sjaib"); dpd_buf4_sort(&S2, EOM_TMP, psrq, 10, 10, "Sjbia"); dpd_buf4_close(&S2); /* S2(ia,jb) - S2(ja,ib) - S2(ib,ja) + S2(jb,ia) --> S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Siajb"); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Sjaib"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Sibja"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Sjbia"); dpd_buf4_axpy(&S2temp, &S2, 1); dpd_buf4_close(&S2temp); /* S2(ia,jb) --> S2(ij,ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 0, 5, "Sijab"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "Sijab"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 0, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&Sijab); dpd_buf4_close(&S2); /* C2(IA,ME) * W(ME,jb) --> S2(IA,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SIAjb"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMENF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* C2(IA,me) * W(me,jb) --> S2(IA,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMEnf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(ME,IA) * C2(jb,ME) --> S2(IA,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CmeNF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&W, &CMnEf, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(me,IA) * C2(jb,me) --> S2(IA,jb) */ dpd_buf4_init(&Cmnef, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "Cmenf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&W, &Cmnef, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Cmnef); /* C2(IA,jb) --> S2(Ij,Ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 0, 5, "SIjAb"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "SIjAb"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&S2, &SIjAb, 1); dpd_buf4_close(&SIjAb); dpd_buf4_close(&S2); /* C2(Ib,mE) * W(mE,jA) --> S2(Ib,jA) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "SIbjA"); /* dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMenF"); */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMfnE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(Me,Ib) * C2(jA,Me) --> S2(Ib,jA) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CnEMf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract444(&W, &CMnEf, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* C2(Ib,jA) --> S2(Ij,bA) --> S2(Ij,Ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 0, 5, "SIjbA"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "SIjbA"); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 0, 5, "SIjAb"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "SIjAb"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&S2, &SIjAb, 1); dpd_buf4_close(&SIjAb); dpd_buf4_close(&S2); } else if (params.eom_ref == 2) { /* UHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* C2(IA,ME) * W(ME,JB) --> S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SIAJB"); dpd_buf4_init(&CMNEF, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "CMENF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&CMNEF, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMNEF); /* C2(IA,me) * W(me,JB) --> S2(IA,JB) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 20, 30, 20, 30, 0, "CMEnf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* P(IJ) S2(IA,JB) */ dpd_buf4_sort(&S2, EOM_TMP, rqps, 20, 20, "SJAIB"); /* P(AB) S2(IA,JB) */ dpd_buf4_sort(&S2, EOM_TMP, psrq, 20, 20, "SIBJA"); dpd_buf4_close(&S2); /* P(IJ) P(AB) S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SJAIB"); dpd_buf4_sort(&S2, EOM_TMP, psrq, 20, 20, "SJBIA"); dpd_buf4_close(&S2); /* S2(IA,JB) - S2(JA,IB) - S2(IB,JA) + S2(JB,IA) --> S2(IA,JB) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SIAJB"); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SJAIB"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SIBJA"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "SJBIA"); dpd_buf4_axpy(&S2temp, &S2, 1); dpd_buf4_close(&S2temp); /* S2(IA,JB) --> S2(IJ,AB) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 0, 5, "SIJAB"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "SIJAB"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&SIJAB); dpd_buf4_close(&S2); /* C2(ia,me) * W(me,jb) --> S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Siajb"); dpd_buf4_init(&Cmnef, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Cmenf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&Cmnef, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&Cmnef); /* C2(ia,ME) * W(ME,jb) --> S2(ia,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 30, 20, 30, 20, 0, "CmeNF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* P(ij) S2(ia,jb) */ dpd_buf4_sort(&S2, EOM_TMP, rqps, 30, 30, "Sjaib"); /* P(ab) S2(ia,jb) */ dpd_buf4_sort(&S2, EOM_TMP, psrq, 30, 30, "Sibja"); dpd_buf4_close(&S2); /* P(ij) P(ab) S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Sjaib"); dpd_buf4_sort(&S2, EOM_TMP, psrq, 30, 30, "Sjbia"); dpd_buf4_close(&S2); /* S2(ia,jb) - S2(ja,ib) - S2(ib,ja) + S2(jb,ia) --> S2(ia,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Siajb"); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Sjaib"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Sibja"); dpd_buf4_axpy(&S2temp, &S2, -1); dpd_buf4_close(&S2temp); dpd_buf4_init(&S2temp, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Sjbia"); dpd_buf4_axpy(&S2temp, &S2, 1); dpd_buf4_close(&S2temp); /* S2(ia,jb) --> S2(ij,ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 10, 15, "Sijab"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 15, 10, 15, 0, "Sijab"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&Sijab); dpd_buf4_close(&S2); /* C2(IA,ME) * W(ME,jb) --> S2(IA,jb) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 20, 30, 20, 30, 0, "SIAjb"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 20, 20, 20, 20, 0, "CMENF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* C2(IA,me) * W(me,jb) --> S2(IA,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 20, 30, 20, 30, 0, "CMEnf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(ME,IA) * C2(jb,ME) --> S2(IA,jb) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 30, 20, 30, 20, 0, "CmeNF"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&W, &CMnEf, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(me,IA) * C2(jb,me) --> S2(IA,jb) */ dpd_buf4_init(&Cmnef, EOM_TMP, C_irr, 30, 30, 30, 30, 0, "Cmenf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&W, &Cmnef, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Cmnef); /* C2(IA,jb) --> S2(Ij,Ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 22, 28, "SIjAb"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 22, 28, 22, 28, 0, "SIjAb"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_axpy(&S2, &SIjAb, 1); dpd_buf4_close(&SIjAb); dpd_buf4_close(&S2); /* C2(Ib,mE) * W(mE,jA) --> S2(Ib,jA) */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 24, 27, 24, 27, 0, "SIbjA"); /* dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 10, 10, 10, 10, 0, "CMenF"); */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 24, 27, 24, 27, 0, "CMfnE"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract444(&CMnEf, &W, &S2, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* W(Me,Ib) * C2(jA,Me) --> S2(Ib,jA) */ dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 27, 24, 27, 24, 0, "CnEMf"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract444(&W, &CMnEf, &S2, 1, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&CMnEf); /* C2(Ib,jA) --> S2(Ij,bA) --> S2(Ij,Ab) */ dpd_buf4_sort(&S2, EOM_TMP, prqs, 22, 29, "SIjbA"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 22, 29, 22, 29, 0, "SIjbA"); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 22, 28, "SIjAb"); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 22, 28, 22, 28, 0, "SIjAb"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_axpy(&S2, &SIjAb, 1); dpd_buf4_close(&SIjAb); dpd_buf4_close(&S2); } #ifdef EOM_DEBUG check_sum("WmbejDD",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WmnefDD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000040201�10757640026�014425� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-doubles block contribution from -0.5*P(ab)*Wnmfe*Cmnea*tijfb and +0.5*Wnmfe*Cimfe*tjnab to a Sigma vector stored at Sigma plus 'i' */ void WmnefDD(int i, int C_irr) { dpdbuf4 C2, T2, S2, D; dpdfile2 X; dpdbuf4 SIJAB, Sijab, SIjAb, B; dpdbuf4 CMNEF, Cmnef, CMnEf, F, tau, Z; char CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; char SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; int l,I,a,f,h,nC_irrs,*occpi,*virtpi,*openpi; nC_irrs = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; if (params.eom_ref == 0) { /* RHF */ sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* XAF = CMNAE * WMNFE + CMnAe * WMnFe */ dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "XFA"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&D, &CMnEf, &X, 2, 2, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); /* SIjAb += -XFA * TIjFb - TIjAf * Xfb */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmnefDD Z(Ij,Ab)"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&T2, &X, &Z, 3, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WmnefDD Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmnefDD Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("WmnefDD XAF",i,C_irr); #endif /* XLI = WLMEF * CIMEF + WLmEf * CImEf */ dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "XLI"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "2CMnEf - CMnfE"); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&D, &CMnEf, &X, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); /* SIjAb += -XLI * TLjAb - Xli * TIlAb */ dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmnefDD Z(Ij,Ab)"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&X, &T2, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WmnefDD Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WmnefDD Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* XAF = CMNAE * WMNFE + CMnAe * WMnFe */ /* SIJAB -= P(ab) XAF * TIJFB */ dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "XFA"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, CMNEF_lbl); dpd_contract442(&D, &CMNEF, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_contract442(&D, &CMnEf, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&D); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "SIJAB"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract244(&X, &T2, &S2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 2, 5, "SIJBA"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "SIJBA"); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&SIJAB); /* Xaf = Cmnae * Wmnfe + CmNaE * WmNfE */ /* Sijab -= P(ab) Xfa * Tijfb */ dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "Xfa"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 5, 2, 7, 0, Cmnef_lbl); dpd_contract442(&D, &Cmnef, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CmNeF"); dpd_contract442(&D, &CMnEf, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&D); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "Sijab"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tijab"); dpd_contract244(&X, &T2, &S2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&X); dpd_buf4_close(&T2); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 2, 5, "Sijba"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 5, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "Sijba"); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&Sijab); /* SIjAb += -XFA * TIjFb - TIjAf * Xfb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "XFA"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&X, &T2, &SIjAb, 0, 2, 1, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "Xfa"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&T2, &X, &SIjAb, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("WmnefDD XAF",i,C_irr); #endif /* XLI = WLMEF * CIMEF + WLmEf * CImEf */ /* SIJAB += P(IJ) XLI * TLJAB */ dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "XLI"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&D, &CMNEF, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMNEF); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&D, &CMnEf, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); /* dpd_file2_mat_init(&X); dpd_file2_mat_rd(&X); for(h=0; h < nC_irrs; h++) { for(l=0; l<occpi[h]; l++) for(I=(occpi[h]-openpi[h]); I<occpi[h]; I++) X.matrix[h][l][I] = 0.0; for(I=0; I<occpi[h]; I++) for(l=(occpi[h]-openpi[h]); l<occpi[h]; l++) X.matrix[h][l][I] = 0.0; } dpd_file2_mat_wrt(&X); dpd_file2_mat_close(&X); */ dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "SIJAB"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract244(&X, &T2, &S2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, qprs, 0, 7, "SJIAB"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "SJIAB"); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&SIJAB); /* Xli = Wlmef * Cimef + WlMeF * CiMeF */ /* Sijab += P(ij) Xli * Tljab */ dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "Xli"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 0, 7, 2, 7, 0, Cmnef_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&D, &Cmnef, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Cmnef); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CmNeF"); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&D, &CMnEf, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "Sijab"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tijab"); dpd_contract244(&X, &T2, &S2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, qprs, 0, 7, "Sjiab"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 0, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "Sjiab"); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&Sijab); /* SIjAb += -XLI * TLjAb - Xli * TIlAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "XLI"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&X, &T2, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&X); dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "Xli"); dpd_contract424(&T2, &X, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* XAF = CMNAE * WMNFE + CMnAe * WMnFe */ /* SIJAB -= P(ab) XAF * TIJFB */ dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "XFA"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&D, CC_DINTS, H_IRR, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, CMNEF_lbl); dpd_contract442(&D, &CMNEF, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_contract442(&D, &CMnEf, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&D); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "SIJAB"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract244(&X, &T2, &S2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 2, 5, "SIJBA"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 5, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 2, 5, 2, 5, 0, "SIJBA"); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&SIJAB); /* Xaf = Cmnae * Wmnfe + CmNaE * WmNfE */ /* Sijab -= P(ab) Xfa * Tijfb */ dpd_file2_init(&X, EOM_TMP, C_irr, 3, 3, "Xfa"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&D, CC_DINTS, H_IRR, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 15, 12, 17, 0, Cmnef_lbl); dpd_contract442(&D, &Cmnef, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, H_IRR, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_contract442(&D, &CMnEf, &X, 2, 2, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&D); dpd_buf4_init(&S2, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "Sijab"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 12, 15, 12, 17, 0, "tijab"); dpd_contract244(&X, &T2, &S2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&X); dpd_buf4_close(&T2); dpd_buf4_sort(&S2, EOM_TMP, pqsr, 12, 15, "Sijba"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 15, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 12, 15, 12, 15, 0, "Sijba"); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&Sijab); /* SIjAb += -XFA * TIjFb - TIjAf * Xfb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_file2_init(&X, EOM_TMP, C_irr, 1, 1, "XFA"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract244(&X, &T2, &SIjAb, 0, 2, 1, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_file2_init(&X, EOM_TMP, C_irr, 3, 3, "Xfa"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract424(&T2, &X, &SIjAb, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_close(&SIjAb); #ifdef EOM_DEBUG check_sum("WmnefDD XAF",i,C_irr); #endif /* XLI = WLMEF * CIMEF + WLmEf * CImEf */ /* SIJAB += P(IJ) XLI * TLJAB */ dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "XLI"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 0, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract442(&D, &CMNEF, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMNEF); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract442(&D, &CMnEf, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "SIJAB"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract244(&X, &T2, &S2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, qprs, 0, 7, "SJIAB"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&S2, &SIJAB, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "SJIAB"); dpd_buf4_axpy(&S2, &SIJAB, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&SIJAB); /* Xli = Wlmef * Cimef + WlMeF * CiMeF */ /* Sijab += P(ij) Xli * Tljab */ dpd_file2_init(&X, EOM_TMP, C_irr, 2, 2, "Xli"); dpd_file2_scm(&X, 0.0); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 10, 17, 12, 17, 0, Cmnef_lbl); dpd_buf4_init(&D, CC_DINTS, H_IRR, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract442(&D, &Cmnef, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Cmnef); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 29, 23, 29, 0, "CmNeF"); dpd_buf4_init(&D, CC_DINTS, H_IRR, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract442(&D, &CMnEf, &X, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&CMnEf); dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "Sijab"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 10, 17, 12, 17, 0, "tijab"); dpd_contract244(&X, &T2, &S2, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_sort(&S2, EOM_TMP, qprs, 10, 17, "Sjiab"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&S2, &Sijab, -1.0); dpd_buf4_close(&S2); dpd_buf4_init(&S2, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "Sjiab"); dpd_buf4_axpy(&S2, &Sijab, 1.0); dpd_buf4_close(&S2); dpd_buf4_close(&Sijab); /* SIjAb += -XLI * TLjAb - Xli * TIlAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_file2_init(&X, EOM_TMP, C_irr, 0, 0, "XLI"); dpd_buf4_init(&T2, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract244(&X, &T2, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&X); dpd_file2_init(&X, EOM_TMP, C_irr, 2, 2, "Xli"); dpd_contract424(&T2, &X, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&T2); dpd_file2_close(&X); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("WmnefDD XLI",i,C_irr); #endif return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WmnieSD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000010275�10757640026�014457� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar singles-doubles block contribution of Wmnie to a Sigma vector stored at Sigma plus 'i' */ void WmnieSD(int i, int C_irr) { dpdfile2 SIA, Sia; dpdbuf4 CMNEF, Cmnef, CMnEf, CmNeF; dpdbuf4 WMNIE, Wmnie, WMnIe, WmNiE; char lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "CMnEf", i); dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); /* dpd_buf4_print(&WMnIe,outfile,1); dpd_buf4_print(&CMnEf,outfile,1); fprintf(stdout,"starting Wmnie*CMNEF ->SIA\n"); fprintf(outfile,"starting Wmnie*CMNEF ->SIA\n"); */ dpd_contract442(&WMnIe, &CMnEf, &SIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WMnIe); dpd_file2_close(&SIA); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 0, 1, lbl); /* SIA += 0.5 WMNIE * CMNAE + WMnIe * CMnAe */ dpd_buf4_init(&WMNIE, CC_HBAR, H_IRR, 2, 11, 2, 11, 0, "WMNIE (M>N,EI)"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, lbl); dpd_contract442(&WMNIE, &CMNEF, &SIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&WMNIE); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CMnfE"); dpd_contract442(&WMnIe, &CMnEf, &SIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WMnIe); /* Sia += 0.5 Wmnie * Cmnae + Wmnie * Cmnae */ dpd_buf4_init(&Wmnie, CC_HBAR, H_IRR, 2, 11, 2, 11, 0, "Wmnie (m>n,ei)"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 5, 2, 7, 0, lbl); dpd_contract442(&Wmnie, &Cmnef, &Sia, 3, 3, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WmNiE, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "CnMEf"); dpd_contract442(&WmNiE, &CMnEf, &Sia, 3, 3, -1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WmNiE); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } else { /* UHF */ sprintf(lbl, "%s %d", "SIA", i); dpd_file2_init(&SIA, EOM_SIA, C_irr, 0, 1, lbl); sprintf(lbl, "%s %d", "Sia", i); dpd_file2_init(&Sia, EOM_Sia, C_irr, 2, 3, lbl); /* SIA += 0.5 WMNIE * CMNAE + WMnIe * CMnAe */ dpd_buf4_init(&WMNIE, CC_HBAR, H_IRR, 2, 21, 2, 21, 0, "WMNIE (M>N,EI)"); sprintf(lbl, "%s %d", "CMNEF", i); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 5, 2, 7, 0, lbl); dpd_contract442(&WMNIE, &CMNEF, &SIA, 3, 3, 1.0, 1.0); dpd_buf4_close(&CMNEF); dpd_buf4_close(&WMNIE); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 22, 29, 22, 29, 0, "CMnfE"); dpd_contract442(&WMnIe, &CMnEf, &SIA, 3, 3, -1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WMnIe); /* Sia += 0.5 Wmnie * Cmnae + Wmnie * Cmnae */ dpd_buf4_init(&Wmnie, CC_HBAR, H_IRR, 12, 31, 12, 31, 0, "Wmnie (m>n,ei)"); sprintf(lbl, "%s %d", "Cmnef", i); dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 15, 12, 17, 0, lbl); dpd_contract442(&Wmnie, &Cmnef, &Sia, 3, 3, 1.0, 1.0); dpd_buf4_close(&Cmnef); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WmNiE, CC_HBAR, H_IRR, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_buf4_init(&CMnEf, EOM_TMP, C_irr, 23, 28, 23, 28, 0, "CnMEf"); dpd_contract442(&WmNiE, &CMnEf, &Sia, 3, 3, -1.0, 1.0); dpd_buf4_close(&CMnEf); dpd_buf4_close(&WmNiE); dpd_file2_close(&SIA); dpd_file2_close(&Sia); } #ifdef EOM_DEBUG check_sum("WmnieSD",i,C_irr); #endif return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WmnijDD.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000010201�10757640026�014432� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-doubles block contribution from Wmnij*Cmnab to a Sigma vector stored at Sigma plus 'i' */ void WmnijDD(int i, int C_irr) { dpdbuf4 SIJAB, Sijab, SIjAb; dpdbuf4 CMNEF, Cmnef, CMnEf; dpdbuf4 WMNIJ, Wmnij, WMnIj; char CMNEF_lbl[32], Cmnef_lbl[32], CMnEf_lbl[32]; char SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; if (params.eom_ref == 0) { /* RHF */ sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIjAb += WMnIj * CMnAb */ dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&WMnIj, CC_HBAR, H_IRR, 0, 0, 0, 0, 0, "WMnIj"); dpd_contract444(&WMnIj, &CMnEf, &SIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&WMnIj); dpd_buf4_close(&SIjAb); dpd_buf4_close(&CMnEf); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WMNIJ * CMNAB */ dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&WMNIJ, CC_HBAR, H_IRR, 2, 2, 2, 2, 0, "WMNIJ"); dpd_contract444(&WMNIJ, &CMNEF, &SIJAB, 1, 1, 1.0, 1.0); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&SIJAB); dpd_buf4_close(&CMNEF); /* Sijab += Wmnij * Cmnab */ dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, Cmnef_lbl); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 2, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_init(&Wmnij, CC_HBAR, H_IRR, 2, 2, 2, 2, 0, "Wmnij"); dpd_contract444(&Wmnij, &Cmnef, &Sijab, 1, 1, 1.0, 1.0); dpd_buf4_close(&Wmnij); dpd_buf4_close(&Sijab); dpd_buf4_close(&Cmnef); /* SIjAb += WMnIj * CMnAb */ dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, CMnEf_lbl); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&WMnIj, CC_HBAR, H_IRR, 0, 0, 0, 0, 0, "WMnIj"); dpd_contract444(&WMnIj, &CMnEf, &SIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&WMnIj); dpd_buf4_close(&SIjAb); dpd_buf4_close(&CMnEf); } else if (params.eom_ref == 2) { /* UHF */ sprintf(CMNEF_lbl, "%s %d", "CMNEF", i); sprintf(Cmnef_lbl, "%s %d", "Cmnef", i); sprintf(CMnEf_lbl, "%s %d", "CMnEf", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* SIJAB += WMNIJ * CMNAB */ dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, CMNEF_lbl); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 2, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_init(&WMNIJ, CC_HBAR, H_IRR, 2, 2, 2, 2, 0, "WMNIJ"); dpd_contract444(&WMNIJ, &CMNEF, &SIJAB, 1, 1, 1.0, 1.0); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&SIJAB); dpd_buf4_close(&CMNEF); /* Sijab += Wmnij * Cmnab */ dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, Cmnef_lbl); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 12, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_init(&Wmnij, CC_HBAR, H_IRR, 12, 12, 12, 12, 0, "Wmnij"); dpd_contract444(&Wmnij, &Cmnef, &Sijab, 1, 1, 1.0, 1.0); dpd_buf4_close(&Wmnij); dpd_buf4_close(&Sijab); dpd_buf4_close(&Cmnef); /* SIjAb += WMnIj * CMnAb */ dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, CMnEf_lbl); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&WMnIj, CC_HBAR, H_IRR, 22, 22, 22, 22, 0, "WMnIj"); dpd_contract444(&WMnIj, &CMnEf, &SIjAb, 1, 1, 1.0, 1.0); dpd_buf4_close(&WMnIj); dpd_buf4_close(&SIjAb); dpd_buf4_close(&CMnEf); } #ifdef EOM_DEBUG check_sum("WmnijDD",i,C_irr); #endif return; } }} // namespace psi::cceom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/WnmjeDS.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000021527�10757640026�014462� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { /* This function computes the H-bar doubles-singles block contribution of Wnmje to a Sigma vector stored at Sigma plus 'i' */ void WnmjeDS(int i, int C_irr) { dpdfile2 CME, Cme, XNJ, Xnj; dpdbuf4 SIJAB, Sijab, SIjAb, Z; dpdbuf4 WMNIE, Wmnie, WMnIe, WmNiE, WM, WP, W; dpdbuf4 TIJAB, TIjAb, Tijab; char CME_lbl[32], Cme_lbl[32], SIJAB_lbl[32], Sijab_lbl[32], SIjAb_lbl[32]; double tval; if (params.eom_ref == 0) { /* RHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form XNJ intermediates */ dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_buf4_init(&W, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_dot23(&CME, &W, &XNJ, 0, 0, 1.0, 0.0); dpd_file2_close(&CME); dpd_buf4_close(&W); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WnmjeDS Z(Ij,Ab)"); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&XNJ, &TIjAb, &Z, 0, 0, 0, 1.0, 0.0); dpd_buf4_close(&TIjAb); dpd_file2_close(&XNJ); dpd_buf4_sort(&Z, EOM_TMP, qpsr, 0, 5, "WnmjeDS Z(jI,bA)"); dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, EOM_TMP, C_irr, 0, 5, 0, 5, 0, "WnmjeDS Z(jI,bA)"); dpd_buf4_axpy(&Z, &SIjAb, -1.0); dpd_buf4_close(&Z); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 1) { /* ROHF */ sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form XNJ intermediates */ /* XNJ = CME * WNMJE + Cme * WNmJe */ dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_file2_scm(&XNJ, 0.0); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WMNIE, CC_HBAR, H_IRR, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_dot23(&CME, &WMNIE, &XNJ, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMNIE); dpd_file2_close(&CME); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_dot23(&Cme, &WMnIe, &XNJ, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMnIe); dpd_file2_close(&Cme); dpd_file2_close(&XNJ); /* Xnj = Cme * Wnmje + CME * WnMjE */ dpd_file2_init(&Xnj, EOM_TMP, C_irr, 0, 0, "Xnj"); dpd_file2_scm(&Xnj, 0.0); dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, Cme_lbl); dpd_buf4_init(&Wmnie, CC_HBAR, H_IRR, 0, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_dot23(&Cme, &Wmnie, &Xnj, 0, 0, 1.0, 1.0); dpd_buf4_close(&Wmnie); dpd_file2_close(&Cme); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WmNiE, CC_HBAR, H_IRR, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_dot23(&CME, &WmNiE, &Xnj, 0, 0, 1.0, 1.0); dpd_buf4_close(&WmNiE); dpd_file2_close(&CME); dpd_file2_close(&Xnj); /* SIJAB -= XNJ * TINAB + XNI * TJNAB */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_M"); dpd_buf4_init(&TIJAB, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tIJAB"); dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_contract424(&TIJAB, &XNJ, &WM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&XNJ); dpd_buf4_close(&TIJAB); dpd_buf4_sort(&WM, EOM_TMP, qprs, 0, 7, "WnmjeDS_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_P"); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&SIJAB); /* Sijab -= Xnj * Tinab + Xni * Tjnab */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_M"); dpd_buf4_init(&Tijab, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tijab"); dpd_file2_init(&Xnj, EOM_TMP, C_irr, 0, 0, "Xnj"); dpd_contract424(&Tijab, &Xnj, &WM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&Xnj); dpd_buf4_close(&Tijab); dpd_buf4_sort(&WM, EOM_TMP, qprs, 0, 7, "WnmjeDS_P"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 0, 7, 2, 7, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_P"); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&Sijab); /* SIjAb -= Xnj * tInAb + XNI * TjNAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 0, 5, 0, 5, 0, SIjAb_lbl); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&Xnj, EOM_TMP, C_irr, 0, 0, "Xnj"); dpd_contract424(&TIjAb, &Xnj, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_file2_close(&Xnj); dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_contract244(&XNJ, &TIjAb, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&XNJ); dpd_buf4_close(&TIjAb); dpd_buf4_close(&SIjAb); } else if (params.eom_ref == 2) { sprintf(CME_lbl, "%s %d", "CME", i); sprintf(Cme_lbl, "%s %d", "Cme", i); sprintf(SIJAB_lbl, "%s %d", "SIJAB", i); sprintf(Sijab_lbl, "%s %d", "Sijab", i); sprintf(SIjAb_lbl, "%s %d", "SIjAb", i); /* Form XNJ intermediates */ /* XNJ = CME * WNMJE + Cme * WNmJe */ dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_file2_scm(&XNJ, 0.0); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WMNIE, CC_HBAR, H_IRR, 0, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_dot23(&CME, &WMNIE, &XNJ, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMNIE); dpd_file2_close(&CME); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&WMnIe, CC_HBAR, H_IRR, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_dot23(&Cme, &WMnIe, &XNJ, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMnIe); dpd_file2_close(&Cme); /* tval = dpd_file2_dot_self(&XNJ); fprintf(outfile,"XNJ self dot %15.10lf\n",tval); */ dpd_file2_close(&XNJ); /* Xnj = Cme * Wnmje + CME * WnMjE */ dpd_file2_init(&Xnj, EOM_TMP, C_irr, 2, 2, "Xnj"); dpd_file2_scm(&Xnj, 0.0); dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, Cme_lbl); dpd_buf4_init(&Wmnie, CC_HBAR, H_IRR, 10, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_dot23(&Cme, &Wmnie, &Xnj, 0, 0, 1.0, 1.0); dpd_buf4_close(&Wmnie); dpd_file2_close(&Cme); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, CME_lbl); dpd_buf4_init(&WmNiE, CC_HBAR, H_IRR, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_dot23(&CME, &WmNiE, &Xnj, 0, 0, 1.0, 1.0); dpd_buf4_close(&WmNiE); dpd_file2_close(&CME); /* tval = dpd_file2_dot_self(&Xnj); fprintf(outfile,"Xnj self dot %15.10lf\n",tval); */ dpd_file2_close(&Xnj); /* SIJAB -= XNJ * TINAB + XNI * TJNAB */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_M"); dpd_buf4_init(&TIJAB, CC_TAMPS, H_IRR, 0, 7, 2, 7, 0, "tIJAB"); dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_contract424(&TIJAB, &XNJ, &WM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&XNJ); dpd_buf4_close(&TIJAB); dpd_buf4_sort(&WM, EOM_TMP, qprs, 0, 7, "WnmjeDS_P"); dpd_buf4_init(&SIJAB, EOM_SIJAB, C_irr, 0, 7, 2, 7, 0, SIJAB_lbl); dpd_buf4_axpy(&WM, &SIJAB, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 0, 7, 0, 7, 0, "WnmjeDS_P"); dpd_buf4_axpy(&WP, &SIJAB, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&SIJAB); /* Sijab -= Xnj * Tinab + Xni * Tjnab */ dpd_buf4_init(&WM, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "WnmjeDS_MB"); dpd_buf4_init(&Tijab, CC_TAMPS, H_IRR, 10, 17, 12, 17, 0, "tijab"); dpd_file2_init(&Xnj, EOM_TMP, C_irr, 2, 2, "Xnj"); dpd_contract424(&Tijab, &Xnj, &WM, 1, 0, 1, 1.0, 0.0); dpd_file2_close(&Xnj); dpd_buf4_close(&Tijab); dpd_buf4_sort(&WM, EOM_TMP, qprs, 10, 17, "WnmjeDS_PB"); dpd_buf4_init(&Sijab, EOM_Sijab, C_irr, 10, 17, 12, 17, 0, Sijab_lbl); dpd_buf4_axpy(&WM, &Sijab, -1.0); dpd_buf4_close(&WM); dpd_buf4_init(&WP, EOM_TMP, C_irr, 10, 17, 10, 17, 0, "WnmjeDS_PB"); dpd_buf4_axpy(&WP, &Sijab, 1.0); dpd_buf4_close(&WP); dpd_buf4_close(&Sijab); /* SIjAb -= Xnj * tInAb + XNI * TjNAb */ dpd_buf4_init(&SIjAb, EOM_SIjAb, C_irr, 22, 28, 22, 28, 0, SIjAb_lbl); dpd_buf4_init(&TIjAb, CC_TAMPS, H_IRR, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&Xnj, EOM_TMP, C_irr, 2, 2, "Xnj"); dpd_contract424(&TIjAb, &Xnj, &SIjAb, 1, 0, 1, -1.0, 1.0); dpd_file2_close(&Xnj); dpd_file2_init(&XNJ, EOM_TMP, C_irr, 0, 0, "XNJ"); dpd_contract244(&XNJ, &TIjAb, &SIjAb, 0, 0, 0, -1.0, 1.0); dpd_file2_close(&XNJ); dpd_buf4_close(&TIjAb); dpd_buf4_close(&SIjAb); } #ifdef EOM_DEBUG check_sum("WnmjeDS",i,C_irr); #endif return; } }} // namespace psi::cceom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cceom/write_Rs.cc����������������������������������������������������������������������0000644�0001015�0000765�00000007503�10757640026�014747� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCEOM \brief Enter brief description of file here */ /* * write_Rs writes out all of the converged R's to RAMPS for the current irrep */ #include <cstdio> #include <cstring> #include <cmath> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cceom { void write_Rs(int C_irr, double *evals, int *converged) { int i; dpdfile2 CME, Cme; dpdbuf4 CMNEF, Cmnef, CMnEf; int R_index = -1; char C_lbl[32], R_lbl[32], E_lbl[32]; double etot, expectation_val, C0; for (i=0; i<eom_params.cs_per_irrep[C_irr]; ++i) { if (!converged[i]) continue; /* this root did not converge */ ++R_index; if (C_irr == eom_params.prop_sym) { if (i == eom_params.prop_root) { chkpt_init(PSIO_OPEN_OLD); if (!params.full_matrix) { etot = evals[eom_params.prop_root]+moinfo.ecc+moinfo.eref; } else { etot = evals[eom_params.prop_root]+moinfo.eref; } chkpt_wt_etot(etot); fprintf(outfile,"Energy written to chkpt:Etot %15.10lf\n", etot); chkpt_close(); } } /* cclambda expects excitation energies */ if (!params.full_matrix) { etot = evals[i]; } else { psio_read_entry(CC_HBAR, "Reference expectation value", (char *) &(expectation_val), sizeof(double)); etot = evals[i] - expectation_val; } if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(E_lbl, "EOM CC2 Energy for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, E_lbl, (char *) &etot, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, E_lbl, (char *) &etot, sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(E_lbl, "EOM CC3 Energy for root %d %d", C_irr, R_index); psio_write_entry(CC_INFO, E_lbl, (char *) &etot, sizeof(double)); } sprintf(C_lbl, "CME %d", i); sprintf(R_lbl, "RIA %d %d", C_irr, R_index); dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, C_lbl); dpd_file2_copy(&CME, CC_RAMPS, R_lbl); dpd_file2_close(&CME); if (params.full_matrix) { sprintf(C_lbl, "C0 %d", i); psio_read_entry(EOM_CME, C_lbl, (char *) &C0, sizeof(double)); sprintf(R_lbl, "R0 %d %d", C_irr, R_index); psio_write_entry(CC_RAMPS, R_lbl, (char *) &C0, sizeof(double)); } sprintf(C_lbl, "CMnEf %d", i); sprintf(R_lbl, "RIjAb %d %d", C_irr, R_index); if (params.eom_ref <= 1) dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, C_lbl); else if (params.eom_ref == 2) dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, C_lbl); dpd_buf4_copy(&CMnEf, CC_RAMPS, R_lbl); dpd_buf4_close(&CMnEf); if(params.eom_ref > 0) { sprintf(C_lbl, "Cme %d", i); sprintf(R_lbl, "Ria %d %d", C_irr, R_index); if (params.eom_ref == 1) dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, C_lbl); else if (params.eom_ref == 2) dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, C_lbl); dpd_file2_copy(&Cme, CC_RAMPS, R_lbl); dpd_file2_close(&Cme); sprintf(C_lbl, "CMNEF %d", i); sprintf(R_lbl, "RIJAB %d %d", C_irr, R_index); dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, C_lbl); dpd_buf4_copy(&CMNEF, CC_RAMPS, R_lbl); dpd_buf4_close(&CMNEF); sprintf(C_lbl, "Cmnef %d", i); sprintf(R_lbl, "Rijab %d %d", C_irr, R_index); if (params.eom_ref == 1) dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, C_lbl); else if (params.eom_ref ==2) dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, C_lbl); dpd_buf4_copy(&Cmnef, CC_RAMPS, R_lbl); dpd_buf4_close(&Cmnef); } } } }} // namespace psi::cceom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/��������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111667�012766� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cache.cc������������������������������������������������������������������������0000644�0001015�0000765�00000037525�10757640026�014357� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace cchbar { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cc2_Wabei.cc��������������������������������������������������������������������0000644�0001015�0000765�00000042520�10757640026�015061� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* cc2_Wabei(): Compute the Wabei matrix from CC2 theory, which is ** given in spin orbitals as: ** ** Wabei = <ab||ei> - P(ab) t_m^a <mb||ei> + t_i^f <ab||ef> ** - P(ab) t_i^f t_m^b <am||ef> + t_m^a t_n^b <mn||ei> ** + t_m^a t_i^f t_n^b <mn||ef> ** ** The basic strategy for this code is to generate two intermediate ** quantities, Z1(Ab,EI) and Z2(Ei,Ab), which are summed in the final ** step to give the complete W(Ei,Ab) intermediate. This is sorted ** to W(iE,bA) storage for use in the triples equations. ** ** TDC, Feb 2004 */ void purge_cc2_Wabei(void); void cc2_Wabei_build(void) { int omit = 0; int e, E; int Gef, Gab, Gei, Ge, Gf, Gi; int nrows, ncols, nlinks; dpdfile2 t1, tIA, tia; dpdbuf4 Z, Z1, Z2, Z3; dpdbuf4 B, C, D, F, W; timer_on("F->Wabei"); if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&F); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* W(A>B,EI) <--- <AB||EI> */ /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WaBeI (aB,eI)"); dpd_buf4_close(&F); } else if (params.ref == 2) { /* UHF */ /* W(A>B,EI) <--- <AB||EI> */ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 7, 21, "CC2 WABEI (A>B,EI)"); dpd_buf4_close(&F); /* W(a>b,ei) <--- <ab||ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31,15, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_TMP0, rspq, 17, 31, "CC2 Wabei (a>b,ei)"); dpd_buf4_close(&F); /* W(Ab,Ei) <--- <Ab|Ei> */ dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_close(&F); /* W(aB,eI) <--- <aB|eI> */ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_sort(&F, CC_TMP0, psrq, 29, 25, "CC2 WaBeI (aB,eI)"); dpd_buf4_close(&F); } timer_off("F->Wabei"); timer_on("B->Wabei"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&t1); dpd_file2_mat_rd(&t1); /* WEbEi <-- <Ab|Ef> * t(i,f) */ /* Plus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 8, 11, 8, 0, "Z1(ei,a>=b)"); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z1.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z1.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z1.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z1.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z1, Gei, Z1.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z1.matrix[Gef], moinfo.occpi[Gi], Z1.params->coltot[Gei]); } } dpd_buf4_close(&Z1); dpd_buf4_close(&B); /* Minus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 9, 11, 9, 0, "Z2(ei,a>=b)"); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z2.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z2.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z2.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z2.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z2, Gei, Z2.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z2.matrix[Gef], moinfo.occpi[Gi], Z2.params->coltot[Gei]); } } dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_file2_mat_close(&t1); dpd_file2_close(&t1); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 8, 0, "Z1(ei,a>=b)"); dpd_buf4_axpy(&Z1, &W, 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 9, 0, "Z2(ei,a>=b)"); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&W); } else if (params.ref == 1) { /* ROHF */ /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1.0); dpd_buf4_close(&B); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_contract424(&B, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&B); dpd_buf4_close(&W); /** W(aB,eI) <--- t1[I][F] * <aB|eF> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 28, 24, 28, 24, 0, "CC2 ZBaIe (Ba,Ie)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract244(&tIA, &B, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 29, 25, "CC2 WaBeI (aB,eI)", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("B->Wabei"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "CC2 ZMbEj (Ej,Mb)"); dpd_contract244(&t1, &Z, &W, 0, 2, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC2 ZMbeJ (eJ,bM)"); dpd_contract424(&Z, &t1, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&t1); } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /** AAA ***/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "CC2 ZABEI (AB,EI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 ZMBEJ"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, qprs, 5, 21, "CC2 ZABEI (BA,EI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "CC2 ZABEI (BA,EI)"); dpd_buf4_axpy(&Z, &Z1, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_axpy(&Z1, &W, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** ABAB **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 ZAbEi (Ab,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 ZMbEj"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 29, 26, 29, 26, 0, "CC2 ZAbEi (bA,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 26, 27, 26, 0, "CC2 ZmBEj"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 28, 26, "CC2 ZAbEi (Ab,Ei)", 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 ZAbEi (Ab,Ei)"); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_axpy(&Z, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** BABA **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 ZaBeI (aB,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 ZmBeJ"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 25, 28, 25, 0, "CC2 ZaBeI (Ba,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 25, 24, 25, 0, "CC2 ZMbeJ"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 29, 25, "CC2 ZaBeI (aB,eI)", 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 ZaBeI (aB,eI)"); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_axpy(&Z, &W, -1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** BBBB **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "CC2 Zabei (ab,ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Zmbej"); dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, qprs, 15, 31, "CC2 Zabei (ba,ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "CC2 Zabei (ba,ei)"); dpd_buf4_axpy(&Z, &Z1, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_axpy(&Z1, &W, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_on("Wabei_sort"); if (params.ref == 0) { /* RHF */ dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_buf4_scm(&W, 0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_sort_axpy(&W, CC2_HET1, rspq, 5, 11, "CC2 WAbEi", 1); dpd_buf4_close(&W); if(!strcmp(params.wfn, "EOM_CC2")) { dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_copy(&W, CC2_HET1, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); } } if (params.ref == 1) { /* ROHF */ /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WaBeI (eI,aB)"); dpd_buf4_close(&W); /* purge before final sort */ /* purge_cc2_Wabei(); */ } else if (params.ref == 2) { /* UHF */ /* sort to Wabei (ei,ab) */ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 21, 7, "CC2 WABEI (EI,A>B)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 31, 17, "CC2 Wabei (ei,a>b)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 26, 28, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 WaBeI (aB,eI)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 25, 29, "CC2 WaBeI (eI,aB)"); dpd_buf4_close(&W); } timer_off("Wabei_sort"); } void purge_cc2_Wabei(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wabei matrix elements */ dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 WABEI (EI,A>B)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; esym = W.params->psym[e]; E = e - vir_off[esym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 Wabei (ei,a>b)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { i = W.params->roworb[h][ei][1]; isym = W.params->qsym[i]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { if (I >= (occpi[isym] - openpi[isym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WAbEi (Ei,Ab)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; i = W.params->roworb[h][ei][1]; esym = W.params->psym[e]; isym = W.params->qsym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; if ((E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) || (A >= (virtpi[asym] - openpi[asym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WaBeI (eI,aB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { for(ab=0; ab<W.params->coltot[h]; ab++) { b = W.params->colorb[h][ab][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::cchbar ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cc2_Wmbej.cc��������������������������������������������������������������������0000644�0001015�0000765�00000054060�10757640026�015100� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wmbej_build(): Computes all contributions to the Wmbej HBAR matrix ** elements. These are defined in terms of spin orbitals as: ** ** Wmbej = <mb||ej> + t_j^f <mb||ef> - t_n^b <mn||ej> ** - { t_jn^fb + t_j^f t_n^b } <mn||ef> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** There are Wmbej six spin cases, which are stored and named ** as follows: ** ** Spin Case Storage Name ** ---------- --------- ------- ** WMBEJ (ME,JB) "WMBEJ" ** Wmbej (me,jb) "Wmbej" ** WMbEj (ME,jb) "WMbEj" ** WmBeJ (me,JB) "WmBeJ" ** WMbeJ (Me,bJ) "WMbeJ" ** WmBEj (mE,Bj) "WmBEj" ** ------------------------------- ** ** TDC, June 2002 */ void cc2_Wmbej_build(void) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ; dpdbuf4 tIAJB, tjAIb, tiajb, tIAjb, tiaJB, tIbjA; dpdbuf4 D, C, F, E, X, Y, Y1, t2, W, Z; dpdfile2 tIA, tia; if(params.ref == 0) { /** RHF **/ /* <mb||ej> -> Wmbej */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 WMbeJ (Mb,Je)", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC2 WMbEj"); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* F -> Wmbej */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Mb,Je)"); dpd_buf4_axpy(&Z, &WMbeJ, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); /* E -> Wmbej */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Mb,Je)"); dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&tIA); /* Sort to (ME,JB) */ dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_buf4_sort(&WMbEj, CC2_HET1, prsq, 10, 10, "CC2 WMbEj (ME,jb)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Mb,Je)"); dpd_buf4_sort(&WMbeJ, CC2_HET1, psrq, 10, 10, "CC2 WMbeJ (Me,Jb)"); dpd_buf4_close(&WMbeJ); /* T1^2 -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** ABAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj (ME,jb)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Me,Jb)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 WMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 WmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC2 WMbEj"); dpd_buf4_copy(&D, CC_TMP0, "CC2 WmBeJ"); dpd_buf4_close(&D); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMBEJ"); dpd_contract424(&F, &tIA, &WMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Wmbej"); dpd_contract424(&F, &tia, &Wmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_contract424(&F, &tia, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WmBeJ"); dpd_contract424(&F, &tIA, &WmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_contract244(&tIA, &F, &WMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_contract244(&tia, &F, &WmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMBEJ"); dpd_contract424(&E, &tIA, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Wmbej"); dpd_contract424(&E, &tia, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_contract424(&E, &tia, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WmBeJ"); dpd_contract424(&E, &tIA, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_contract424(&E, &tia, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_contract424(&E, &tIA, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMBEJ"); dpd_buf4_sort(&WMBEJ, CC2_HET1, prsq, 10, 10, "CC2 WMBEJ"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Wmbej"); dpd_buf4_sort(&Wmbej, CC2_HET1, prsq, 10, 10, "CC2 Wmbej"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WMbEj"); dpd_buf4_sort(&WMbEj, CC2_HET1, prsq, 10, 10, "CC2 WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 WmBeJ"); dpd_buf4_sort(&WmBeJ, CC2_HET1, prsq, 10, 10, "CC2 WmBeJ"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_buf4_sort(&WMbeJ, CC2_HET1, psrq, 10, 10, "CC2 WMbeJ"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_buf4_sort(&WmBEj, CC2_HET1, psrq, 10, 10, "CC2 WmBEj"); dpd_buf4_close(&WmBEj); /* X -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D(me,nf) * T2(jb,nf) --> W(me,jb) */ dpd_buf4_init(&Wmbej, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); /* D(me,NF) * T2(jb,NF) --> W(me,jb) */ dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tiaJB, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); dpd_buf4_close(&Wmbej); /* D(ME,NF) * T2(JB,NF) --> W(ME,JB) */ dpd_buf4_init(&WMBEJ, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); /* D(ME,nf) * T2(JB,nf) --> W(ME,JB) */ dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tIAjb, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); dpd_buf4_close(&WMBEJ); /* D(me,nf) * T2(JB,nf) --> W(me,JB) */ dpd_buf4_init(&WmBeJ, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &tIAjb, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); /* D(me,NF) * T2(JB,NF) --> W(me,JB) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); dpd_buf4_close(&WmBeJ); /* D(ME,NF) * T2(jb,NF) --> W(ME,jb) */ dpd_buf4_init(&WMbEj, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &tiaJB, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); /* D(ME,nf) * T2(jb,nf) --> W(ME,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); dpd_buf4_close(&WMbEj); /* D(mE,Nf) * T2(jB,Nf) --> W(mE,jB) */ dpd_buf4_init(&WmBEj, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WmBEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tjAIb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&D, &tjAIb, &WmBEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tjAIb); dpd_buf4_close(&WmBEj); /* D(Me,nF) * T2(Jb,nF) --> W(Me,Jb) */ dpd_buf4_init(&WMbeJ, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tIbjA, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&D, &tIbjA, &WMbeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIbjA); dpd_buf4_close(&WMbeJ); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 WMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "CC2 WMbEj", -1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "CC2 WmBeJ", -1); dpd_buf4_close(&D); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D & E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_buf4_scmcopy(&E, CC_TMP0, "YMNEJ", -1); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 0, 21, 0, 21, 0, "YMNEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 WMBEJ"); dpd_contract424(&Y, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Y); dpd_buf4_close(&W); /*** BBBB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_scmcopy(&E, CC_TMP0, "Ymnej", -1); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 31, 10, 31, 0, "Ymnej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Wmbej"); dpd_contract424(&Y, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Y); dpd_buf4_close(&W); /*** ABAB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_buf4_copy(&E, CC_TMP0, "YMnEj"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 22, 26, 22, 26, 0, "YMnEj"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 WMbEj"); dpd_contract424(&Y, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&Y); dpd_buf4_close(&W); /*** BABA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_buf4_copy(&E, CC_TMP0, "YmNeJ"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 23, 25, 23, 25, 0, "YmNeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 WmBeJ"); dpd_contract424(&Y, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&Y); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /** Sort **/ dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 WMBEJ"); dpd_buf4_sort(&W, CC2_HET1, prqs, 20, 21, "CC2 WMBEJ (ME,BJ)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Wmbej"); dpd_buf4_sort(&W, CC2_HET1, prqs, 30, 31, "CC2 Wmbej (me,bj)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 WMbEj"); dpd_buf4_sort(&W, CC2_HET1, prqs, 20, 31, "CC2 WMbEj (ME,bj)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 WmBeJ"); dpd_buf4_sort(&W, CC2_HET1, prqs, 30, 21, "CC2 WmBeJ (me,BJ)"); dpd_buf4_close(&W); } /** UHF **/ return; } }} // namespace psi::cchbar ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cc2_Wmbij.cc��������������������������������������������������������������������0000644�0001015�0000765�00000053143�10757640026�015105� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void purge_cc2_Wmbij(void); void cc2_Wmbij_build(void) { dpdfile2 t1, tIA, tia; dpdbuf4 E, D, C, F; dpdbuf4 W, W1; dpdbuf4 Z, Z1; dpdbuf4 X; if(params.ref == 0) { /** RHF **/ /* W(Mb,Ij) <-- <Mb|Ij> */ dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_buf4_copy(&E, CC2_HET1, "CC2 WMbIj"); dpd_buf4_close(&E); } else if(params.ref == 1) { /** ROHF **/ /** W(MB,I>J) <--- <MB||IJ> **/ /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 2, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 2, "CC2 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 0, "CC2 WMbIj"); dpd_buf4_sort(&E, CC2_HET1, rspq, 10, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); } else if(params.ref == 2) { /*** UHF ***/ /** W(MB,I>J) <--- <MB||IJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 20, 2, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_close(&E); /** W(mb,i>j) <--- <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC2_HET1, rspq, 30, 12, "CC2 Wmbij (mb,i>j)"); dpd_buf4_close(&E); /** W(Mb,Ij) <--- <Mb|Ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 24, 22, "CC2 WMbIj"); dpd_buf4_close(&E); /** W(mB,iJ) <--- <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC2_HET1, rspq, 27, 23, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_close(&E); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* W(Mb,Ij) <-- -t(n,b) * W(Mn,Ij) */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&W1, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract424(&W1, &t1, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&W1); dpd_buf4_close(&W); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 0, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 10, 0, 10, 0, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- -ZMBJI <-- P(I/J)( -<JE||MB> * t1[I][E] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &tIA, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 20, 0, "X (MB,IJ)"); dpd_buf4_init(&X, CC_TMP0, 0, 20, 0, 20, 0, 0, "X (MB,IJ)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 20, 0, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(mb,i>j) <-- -Zmbji <-- P(i/j)( -<je||mb> * t1[i][e] ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&C); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 30, 10, "X (mb,ij)"); dpd_buf4_init(&X, CC_TMP0, 0, 30, 10, 30, 10, 0, "X (mb,ij)"); dpd_buf4_axpy(&Z, &X, -1); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC2_HET1, 0, 30, 10, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_axpy(&X, &W, 1); dpd_buf4_close(&X); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ej> * t1[I][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( <Mb|Ie> * t1[j][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|eJ> * t1[i][e] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( <mB|iE> * t1[J][E] ) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* W(Mb,Ij) <-- +P(ij) t(I,E) * <Mb||Ej> */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &t1, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&C); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "CC2 ZMbIj (jM,bI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z, CC2_HET1, qrsp, 10, 0, "CC2 WMbIj", 1); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 0, 11, 0, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -0.5, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 10, 0, "CC2 WmBiJ (mB,iJ)", 1); dpd_buf4_close(&Z1); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- ( t1[N][B] * W(MN,I>J) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&Z, CC2_HET1, 0, 0, 2, 2, 2, 0, "CC2 WMNIJ (M>N,I>J)"); dpd_contract424(&Z, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- ( t1[n][b] * W(mn,i>j) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&Z, CC2_HET1, 0, 10, 12, 12, 12, 0, "CC2 Wmnij (m>n,i>j)"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- ( t1[n][b] * W(Mn,Ij) ****/ dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&Z, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_contract424(&Z, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ( t1[N][B] * W(mN,iJ) ****/ dpd_buf4_init(&Z1, CC_TMP0, 0, 26, 22, 26, 22, 0, "Z (Bm,Ji)"); dpd_buf4_init(&Z, CC2_HET1, 0, 22, 22, 22, 22, 0, "CC2 WMnIj"); dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 27, 23, "CC2 WmBiJ (mB,iJ)", 1); dpd_buf4_close(&Z1); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); /* Z(Mb,Ej) = <Mb|Ej> + t(j,f) * <Mb|Ef> */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj (Mb,Ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &t1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_close(&Z); /* W(Mb,Ij) <-- t(I,E) * Z(Mb,Ej) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "CC2 ZMbIj"); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj (Mb,Ej)"); dpd_contract244(&t1, &Z1, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_file2_close(&t1); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /**** W(MB,I>J) <-- 0.5*P(I/J)XMBIJ <--- ( t1[I][E] * ZMBEJ ) <-- <MB||EF> * t1[J][F] ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z (MB,EJ)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_TMP0, 0, 20, 0, 20, 2, 0, "CC2 ZMBIJ (MB,I>J)"); dpd_contract244(&tIA, &Z, &W, 1, 2, 1, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 0, 20, 2, 0, "CC2 ZMBIJ (MB,I>J)"); dpd_buf4_init(&W, CC2_HET1, 0, 20, 0, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mb,i>j) <-- P(i/j) (Zmbif * t1[j][f]) <-- 0.5*( t1[i][e] * <mb||ef> ) ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z (mb,ej)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_TMP0, 0, 30, 10, 30, 12, 0, "CC2 Zmbij (mb,i>j)"); dpd_contract244(&tia, &Z, &W, 1, 2, 1, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 10, 30, 12, 0, "CC2 Zmbij (mb,i>j)"); dpd_buf4_init(&W, CC2_HET1, 0, 30, 10, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(Mb,Ij) <-- (ZIfMb * t1[j][f]) <-- t1[I][E] * <Mb|Ef> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z (If,Mb)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_TMP0, 0, 24, 22, 24, 22, 0, "CC2 ZMbIj"); dpd_contract424(&Z, &tia, &W, 1, 1, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 22, 24, 22, 0, "CC2 ZMbIj"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** W(mB,iJ) <-- ZiFmB * t1[J][F] <-- t1[i][e] * <mB|eF> ****/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z (iF,mB)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_TMP0, 0, 27, 23, 27, 23, 0, "CC2 ZmBiJ (mB,iJ)"); dpd_contract424(&Z, &tIA, &W, 1, 1, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 23, 27, 23, 0, "CC2 ZmBiJ (mB,iJ)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } if(params.ref == 1) { /** ROHF **/ /* do purge before sort */ purge_cc2_Wmbij(); /* do final sort to get (Ij,Mb) */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 10, "CC2 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 2, 10, 2, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 10, "CC2 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_sort(&W, CC2_HET1, rspq, 0, 10, "CC2 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 0, 10, "CC2 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&W, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 2, 20, "CC2 WMBIJ (I>J,MB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 12, 30, "CC2 Wmbij (i>j,mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj"); dpd_buf4_sort(&W, CC2_HET1, rspq, 22, 24, "CC2 WMbIj (Ij,Mb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_sort(&W, CC2_HET1, rspq, 23, 27, "CC2 WmBiJ (iJ,mB)"); dpd_buf4_close(&W); } } void purge_cc2_Wmbij(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC2_HET1, 0, 10, 2,"CC2 WMBIJ (MB,I>J)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { b = W.params->roworb[h][mb][1]; bsym = W.params->qsym[b]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 2,"CC2 Wmbij (mb,i>j)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 0,"CC2 WMbIj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { for(ij=0; ij<W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if (J >= (occpi[jsym] - openpi[jsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC2_HET1, 0, 10, 0,"CC2 WmBiJ (mB,iJ)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; b = W.params->roworb[h][mb][1]; msym = W.params->psym[m]; bsym = W.params->qsym[b]; M = m - occ_off[msym]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; isym = W.params->rsym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cc2_Zmbej.cc��������������������������������������������������������������������0000644�0001015�0000765�00000055407�10757640026�015111� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Zmbej_build(): Computes all contributions to the Zmbej HBAR matrix ** elements. These are defined in terms of spin orbitals as: ** ** Zmbej = <mb||ej> + t_j^f <mb||ef> - t_n^b <mn||ej> ** - { t_jn^fb + t_j^f t_n^b } <mn||ef> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** There are Zmbej six spin cases, which are stored and named ** as follows: ** ** Spin Case Storage Name ** ---------- --------- ------- ** ZMBEJ (ME,JB) "ZMBEJ" ** Zmbej (me,jb) "Zmbej" ** ZMbEj (ME,jb) "ZMbEj" ** ZmBeJ (me,JB) "ZmBeJ" ** ZMbeJ (Me,bJ) "ZMbeJ" ** ZmBEj (mE,Bj) "ZmBEj" ** ------------------------------- ** ** TDC, June 2002 */ void cc2_Zmbej_build(void) { dpdbuf4 ZMBEJ, Zmbej, ZMbEj, ZmBeJ, ZmBEj, ZMbeJ; dpdbuf4 tIAJB, tjAIb, tiajb, tIAjb, tiaJB, tIbjA; dpdbuf4 D, C, F, E, X, Y, Y1, t2, W, Z; dpdfile2 tIA, tia; if(params.ref == 0) { /** RHF **/ /* <mb||ej> -> Zmbej */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC2 ZMbEj"); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZMbeJ (Mb,Je)", 1); dpd_buf4_close(&C); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* F -> Zmbej */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj"); dpd_contract424(&F, &tIA, &ZMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&ZMbEj); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&ZMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ (Mb,Je)"); dpd_buf4_axpy(&Z, &ZMbeJ, -1.0); dpd_buf4_close(&ZMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); /* E -> Zmbej */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 11, 10, 11, 10, 0, "CC2 ZMbEj (Ej,Mb)"); dpd_contract424(&E, &tIA, &ZMbEj, 3, 0, 0, -1, 0); dpd_buf4_close(&ZMbEj); dpd_buf4_close(&E); /* T1^2 -> Zmbej */ /*** ABAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 0, 11, 0, 11, 0, "Y (Mn,Ej"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "CC2 ZMbEj (Ej,Mb)"); dpd_contract424(&Y, &tIA, &Z, 1, 0, 0, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Y); dpd_file2_close(&tIA); /* Copy to Hbar */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj"); dpd_buf4_sort_axpy(&Z, CC_TMP0, rspq, 11, 10, "CC2 ZMbEj (Ej,Mb)", 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ (Mb,Je)"); dpd_buf4_sort(&Z, CC_TMP0, srqp, 11, 11, "CC2 ZMbeJ (eJ,bM)"); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 Zmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "CC2 ZMbEj"); dpd_buf4_copy(&D, CC_TMP0, "CC2 ZmBeJ"); dpd_buf4_close(&D); /* F -> Zmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&ZMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMBEJ"); dpd_contract424(&F, &tIA, &ZMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&ZMBEJ); dpd_buf4_init(&Zmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Zmbej"); dpd_contract424(&F, &tia, &Zmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Zmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj"); dpd_contract424(&F, &tia, &ZMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&ZMbEj); dpd_buf4_init(&ZmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZmBeJ"); dpd_contract424(&F, &tIA, &ZmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&ZmBeJ); dpd_buf4_init(&ZMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_contract244(&tIA, &F, &ZMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&ZMbeJ); dpd_buf4_init(&ZmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_contract244(&tia, &F, &ZmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&ZmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Zmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&ZMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMBEJ"); dpd_contract424(&E, &tIA, &ZMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&ZMBEJ); dpd_buf4_init(&Zmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Zmbej"); dpd_contract424(&E, &tia, &Zmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Zmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj"); dpd_contract424(&E, &tia, &ZMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&ZMbEj); dpd_buf4_init(&ZmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZmBeJ"); dpd_contract424(&E, &tIA, &ZmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&ZmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&ZMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_contract424(&E, &tia, &ZMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&ZMbeJ); dpd_buf4_init(&ZmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_contract424(&E, &tIA, &ZmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&ZmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&ZMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMBEJ"); dpd_buf4_sort(&ZMBEJ, CC_TMP0, prsq, 10, 10, "CC2 ZMBEJ"); dpd_buf4_close(&ZMBEJ); dpd_buf4_init(&Zmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 Zmbej"); dpd_buf4_sort(&Zmbej, CC_TMP0, prsq, 10, 10, "CC2 Zmbej"); dpd_buf4_close(&Zmbej); dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZMbEj"); dpd_buf4_sort(&ZMbEj, CC_TMP0, prsq, 10, 10, "CC2 ZMbEj"); dpd_buf4_close(&ZMbEj); dpd_buf4_init(&ZmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "CC2 ZmBeJ"); dpd_buf4_sort(&ZmBeJ, CC_TMP0, prsq, 10, 10, "CC2 ZmBeJ"); dpd_buf4_close(&ZmBeJ); dpd_buf4_init(&ZMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_buf4_sort(&ZMbeJ, CC_TMP0, psrq, 10, 10, "CC2 ZMbeJ"); dpd_buf4_close(&ZMbeJ); dpd_buf4_init(&ZmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_buf4_sort(&ZmBEj, CC_TMP0, psrq, 10, 10, "CC2 ZmBEj"); dpd_buf4_close(&ZmBEj); /* X -> Zmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 Zmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 Zmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D(me,nf) * T2(jb,nf) --> W(me,jb) */ dpd_buf4_init(&Zmbej, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 Zmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &Zmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); /* D(me,NF) * T2(jb,NF) --> W(me,jb) */ dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tiaJB, &Zmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); dpd_buf4_close(&Zmbej); /* D(ME,NF) * T2(JB,NF) --> W(ME,JB) */ dpd_buf4_init(&ZMBEJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &ZMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); /* D(ME,nf) * T2(JB,nf) --> W(ME,JB) */ dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tIAjb, &ZMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); dpd_buf4_close(&ZMBEJ); /* D(me,nf) * T2(JB,nf) --> W(me,JB) */ dpd_buf4_init(&ZmBeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &tIAjb, &ZmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); /* D(me,NF) * T2(JB,NF) --> W(me,JB) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &ZmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); dpd_buf4_close(&ZmBeJ); /* D(ME,NF) * T2(jb,NF) --> W(ME,jb) */ dpd_buf4_init(&ZMbEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &tiaJB, &ZMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); /* D(ME,nf) * T2(jb,nf) --> W(ME,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &ZMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); dpd_buf4_close(&ZMbEj); /* D(mE,Nf) * T2(jB,Nf) --> W(mE,jB) */ dpd_buf4_init(&ZmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZmBEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tjAIb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&D, &tjAIb, &ZmBEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tjAIb); dpd_buf4_close(&ZmBEj); /* D(Me,nF) * T2(Jb,nF) --> W(Me,Jb) */ dpd_buf4_init(&ZMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "CC2 ZMbeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tIbjA, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&D, &tIbjA, &ZMbeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIbjA); dpd_buf4_close(&ZMbeJ); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /* C & D -> Zmbej */ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 Zmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "CC2 ZMbEj", -1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "CC2 ZmBeJ", -1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 27, 26, 27, 26, 0, "C <Ai|Bj> (iA,Bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZmBEj", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 25, 24, 25, 0, "C <Ia|Jb> (Ia,bJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "CC2 ZMbeJ", -1); dpd_buf4_close(&C); /* F -> Zmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 ZMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Zmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 ZMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &Z, 3, 1, 0, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 ZmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&Z); dpd_buf4_init(&Y, CC_TMP0, 0, 24, 24, 24, 24, 0, "CC2 YMbeJ (Mb,Je)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &Y, 1, 2, 1, -1, 0); dpd_buf4_close(&F); dpd_buf4_sort_axpy(&Y, CC_TMP0, pqsr, 24, 25, "CC2 ZMbeJ", 1); dpd_buf4_close(&Y); dpd_buf4_init(&Y, CC_TMP0, 0, 27, 27, 27, 27, 0, "CC2 YmBEj (mB,jE)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &Y, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_sort_axpy(&Y, CC_TMP0, pqsr, 27, 26, "CC2 ZmBEj", 1); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D & E -> Zmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_buf4_scmcopy(&E, CC_TMP0, "YMNEJ", -1); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 0, 21, 0, 21, 0, "YMNEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 ZMBEJ"); dpd_contract424(&Y, &tIA, &Z, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Y); dpd_buf4_close(&Z); /*** BBBB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_scmcopy(&E, CC_TMP0, "Ymnej", -1); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 31, 10, 31, 0, "Ymnej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Zmbej"); dpd_contract424(&Y, &tia, &Z, 1, 0, 1, -0.5, 1); dpd_buf4_close(&Y); dpd_buf4_close(&Z); /*** ABAB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_buf4_copy(&E, CC_TMP0, "YMnEj"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 22, 26, 22, 26, 0, "YMnEj"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 ZMbEj"); dpd_contract424(&Y, &tia, &Z, 1, 0, 1, 0.5, 1); dpd_buf4_close(&Y); dpd_buf4_close(&Z); /*** BABA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_buf4_copy(&E, CC_TMP0, "YmNeJ"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 23, 25, 23, 25, 0, "YmNeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 ZmBeJ"); dpd_contract424(&Y, &tIA, &Z, 1, 0, 1, 0.5, 1); dpd_buf4_close(&Y); dpd_buf4_close(&Z); /*** ABBA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_copy(&E, CC_TMP0, "YMneJ (Mn,Je)"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 22, 24, 22, 24, 0, "YMneJ (Mn,Je)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Y1, CC_TMP0, 0, 24, 24, 24, 24, 0, "CC2 YMbeJ (Mb,Je)"); dpd_contract424(&Y, &tia, &Y1, 1, 0, 1, 1, 0); dpd_buf4_close(&Y); dpd_buf4_sort_axpy(&Y1, CC_TMP0, pqsr, 24, 25, "CC2 ZMbeJ", 0.5); dpd_buf4_close(&Y1); /*** BAAB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_copy(&E, CC_TMP0, "YmNEj (mN,jE)"); dpd_buf4_close(&E); dpd_buf4_init(&Y, CC_TMP0, 0, 23, 27, 23, 27, 0, "YmNEj (mN,jE)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&Y1, CC_TMP0, 0, 27, 27, 27, 27, 0, "CC2 YmBEj (mB,jE)"); dpd_contract424(&Y, &tIA, &Y1, 1, 0, 1, 1, 0); dpd_buf4_close(&Y); dpd_buf4_sort_axpy(&Y1, CC_TMP0, pqsr, 27, 26, "CC2 ZmBEj", 0.5); dpd_buf4_close(&Y1); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /** UHF **/ return; } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cc3_HET1.cc���������������������������������������������������������������������0000644�0001015�0000765�00000061062�10757640026�014536� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* compute remaining matrix elements for [ H, e^T1 ] which are not needed by * ccenergy for CC3 but are needed for CC3 EOM and CC3 Lambda and CC3 response. * * Wmbej = <mb||ej> + t_j^f <mb||ef> - t_n^b <mn||ej> - t_j^f t_n^b <mn||ef> * */ void HET1_Wmbej(void); void purge_HET1_Wmbej(void); void HET1_Wabef(void); void cc3_HET1(void) { HET1_Wmbej(); if (params.ref == 1) purge_HET1_Wmbej(); HET1_Wabef(); return; } void HET1_Wmbej(void) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ; dpdbuf4 D, C, F, E, X, Y, t2, W, Z; dpdfile2 tIA, tia; int i; if(params.ref == 0) { /** RHF **/ /* <mb||ej> -> Wmbej */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* F -> Wmbej */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_axpy(&Z, &WMbeJ, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); dpd_file2_close(&tIA); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&tIA); /* Sort to (ME,JB) */ dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC3_HET1, prsq, 10, 10, "CC3 WMbEj (ME,jb)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC3_HET1, psrq, 10, 10, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_close(&WMbeJ); /* T1^2 -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); /* also store WMbEj (Mb,Ej) WMbeJ (bM,eJ)*/ dpd_buf4_init(&WMbEj, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dpd_buf4_sort(&WMbEj, CC3_HET1, psqr, 10, 11, "CC3 WMbEj (Mb,Ej)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbEj, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_sort(&WMbEj, CC3_HET1, spqr, 11, 11, "CC3 WMbeJ (bM,eJ)"); dpd_buf4_close(&WMbEj); } else if(params.ref == 1) { /** ROHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_copy(&D, CC_TMP0, "WmBeJ"); dpd_buf4_close(&D); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&F, &tIA, &WMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&F, &tia, &Wmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tia, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&F, &tIA, &WmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract244(&tIA, &F, &WMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract244(&tia, &F, &WmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&E, &tIA, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&E, &tia, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tia, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&E, &tIA, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tia, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&E, &tIA, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_buf4_sort(&WMBEJ, CC3_HET1, prsq, 10, 10, "CC3 WMBEJ (ME,JB)"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_buf4_sort(&Wmbej, CC3_HET1, prsq, 10, 10, "CC3 Wmbej (me,jb)"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC3_HET1, prsq, 10, 10, "CC3 WMbEj (ME,jb)"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_buf4_sort(&WmBeJ, CC3_HET1, prsq, 10, 10, "CC3 WmBeJ (me,JB)"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC3_HET1, psrq, 10, 10, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_sort(&WmBEj, CC3_HET1, psrq, 10, 10, "CC3 WmBEj (mE,jB)"); dpd_buf4_close(&WmBEj); /* X -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMBEJ (ME,JB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 WMBEJ (MB,EJ)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 Wmbej (me,jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 Wmbej (mb,ej)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 WMbEj (Mb,Ej)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WmBeJ (me,JB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 WmBeJ (mB,eJ)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 WMbeJ (Mb,eJ)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WmBEj (mE,jB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_sort(&W, CC3_HET1, psqr, 10, 11, "CC3 WmBEj (mB,Ej)"); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WMbEj", 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WmBeJ", 1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_sort(&W, CC3_HET1, prsq, 20, 20, "CC3 WMBEJ (ME,JB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_sort(&W, CC3_HET1, prsq, 30, 30, "CC3 Wmbej (me,jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_sort(&W, CC3_HET1, prsq, 20, 30, "CC3 WMbEj (ME,jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_sort(&W, CC3_HET1, prsq, 30, 20, "CC3 WmBeJ (me,JB)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_sort(&W, CC3_HET1, psrq, 24, 24, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_sort(&W, CC3_HET1, psrq, 27, 27, "CC3 WmBEj (mE,jB)"); dpd_buf4_close(&W); /* X -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 21, 20, 21, 0, "D <IJ||AB> (IA,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 20, 20, 20, 20, 0, "CC3 WMBEJ (ME,JB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (me,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 31, 30, 31, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 30, 30, 30, 30, 0, "CC3 Wmbej (me,jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 20, 10, 20, 10, 0, "Y (ME,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 31, 20, 31, 0, "D <Ij|Ab> (IA,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 20, 30, 20, 30, 0, "CC3 WMbEj (ME,jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 30, 0, 30, 0, 0, "Y (me,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 21, 30, 21, 0, "D <Ij|Ab> (ia,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 30, 20, 30, 20, 0, "CC3 WmBeJ (me,JB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Me,Jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 24, 24, 24, 24, 0, "CC3 WMbeJ (Me,Jb)"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mE,jN)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC3_HET1, 0, 27, 27, 27, 27, 0, "CC3 WmBEj (mE,jB)"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* also store lists as Wmbej (mb,ej) */ dpd_buf4_init(&W, CC3_HET1, 0, 20, 20, 20, 20, 0, "CC3 WMBEJ (ME,JB)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 20, 21, "CC3 WMBEJ (MB,EJ)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 30, 30, 30, 30, 0, "CC3 Wmbej (me,jb)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 30, 31, "CC3 Wmbej (mb,ej)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 20, 30, 20, 30, 0, "CC3 WMbEj (ME,jb)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 24, 26, "CC3 WMbEj (Mb,Ej)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 30, 20, 30, 20, 0, "CC3 WmBeJ (me,JB)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 27, 25, "CC3 WmBeJ (mB,eJ)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 24, 24, 24, 24, 0, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 24, 25, "CC3 WMbeJ (Mb,eJ)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 27, 27, 27, 27, 0, "CC3 WmBEj (mE,jB)"); dpd_buf4_sort(&W, CC3_HET1, psqr, 27, 26, "CC3 WmBEj (mB,Ej)"); dpd_buf4_close(&W); /* also make some Wmbej (bm,ej) */ dpd_buf4_init(&W, CC3_HET1, 0, 24, 25, 24, 25, 0, "CC3 WMbeJ (Mb,eJ)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 25, 25, "CC3 WMbeJ (bM,eJ)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 27, 26, 27, 26, 0, "CC3 WmBEj (mB,Ej)"); dpd_buf4_sort(&W, CC3_HET1, qprs, 26, 26, "CC3 WmBEj (Bm,Ej)"); dpd_buf4_close(&W); } /** UHF **/ return; } /* Purge Wmbej matrix elements for ROHF */ void purge_HET1_Wmbej(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC3_HET1, 0, 10, 10,"CC3 WMBEJ (ME,JB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 10,"CC3 Wmbej (me,jb)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 10,"CC3 WMbEj (ME,jb)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 10,"CC3 WmBeJ (me,JB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC3_HET1, 0, 10, 10,"CC3 WmBEj (mE,jB)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; e = W.params->roworb[h][me][1]; msym = W.params->psym[m]; esym = W.params->qsym[e]; M = m - occ_off[msym]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; b = W.params->colorb[h][jb][1]; jsym = W.params->rsym[j]; bsym = W.params->ssym[b]; J = j - occ_off[jsym]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } }} // namespace psi::cchbar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/cchbar.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000011577�11112564564�014533� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ /* ** CCHBAR: Program to calculate the elements of the CCSD HBAR matrix. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libpsio/psio.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "globals.h" namespace psi { namespace cchbar { void init_io(int argc, char *argv[]); void title(void); void get_moinfo(void); void get_params(void); void exit_io(void); void F_build(void); void Wmbej_build(void); void Wmnie_build(void); void Wmbij_build(void); void Wabij_build(void); void Wamef_build(void); void Wabei_build(void); void cc2_Zmbej_build(void); void cc2_Wmbej_build(void); void cc2_Wmbij_build(void); void cc2_Wabei_build(void); void purge(void); void cleanup(void); int **cacheprep_rhf(int level, int *cachefiles); int **cacheprep_uhf(int level, int *cachefiles); void cachedone_uhf(int **cachelist); void cachedone_rhf(int **cachelist); void sort_amps(void); void tau_build(void); void taut_build(void); void status(const char *, FILE *); void cc3_HET1(void); void Fai_build(void); void reference(void); void norm_HET1(void); }} // namespace psi::cchbar using namespace psi::cchbar; int main(int argc, char *argv[]) { int **cachelist, *cachefiles; init_io(argc, argv); title(); get_moinfo(); get_params(); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } else if(params.ref == 2) { /** UHF **/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } sort_amps(); tau_build(); taut_build(); if (params.Tamplitude) { reference(); Fai_build(); Wabij_build(); } F_build(); if(params.print & 2) status("F elements", outfile); Wamef_build(); if(params.print & 2) status("Wamef elements", outfile); Wmnie_build(); if(params.print & 2) status("Wmnie elements", outfile); if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { cc2_Wmbej_build(); if(params.print & 2) status("Wmbej elements", outfile); cc2_Zmbej_build(); if(params.print & 2) status("Zmbej elements", outfile); cc2_Wmbij_build(); if(params.print & 2) status("Wmbij elements", outfile); cc2_Wabei_build(); if(params.print & 2) status("Wabei elements", outfile); } else { Wabei_build(); if(params.print & 2) status("Wabei elements", outfile); Wmbej_build(); if(params.print & 2) status("Wmbej elements", outfile); Wmbij_build(); if(params.print & 2) status("Wmbij elements", outfile); if( (!strcmp(params.wfn,"CC3")) || (!strcmp(params.wfn,"EOM_CC3")) ) { /* switch to ROHF to generate all spin cases of He^T1 elements */ if((params.dertype == 3 || params.dertype == 1) && params.ref == 0) { params.ref = 1; cc3_HET1(); /* compute remaining Wmbej [H,eT1] */ norm_HET1(); params.ref = 0; } else { cc3_HET1(); /* compute remaining Wmbej [H,eT1] */ norm_HET1(); } } } if(params.ref == 1) purge(); /** ROHF only **/ dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCHBAR"; return(prgid); }} namespace psi { namespace cchbar { void init_io(int argc, char *argv[]) { int i; char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); /* Open all dpd data files */ for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void title(void) { fprintf(outfile, "\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCHBAR *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\n"); } void exit_io(void) { int i; /* Close all dpd data files here */ for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); /* get rid of TMP files */ for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } }} // namespace psi::chbar ���������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/F.cc����������������������������������������������������������������������������0000644�0001015�0000765�00000056113�10757640026�013473� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ /*! \defgroup CCHBAR cchbar: Compute the similarity-transformed Hamiltonian */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* F_build(): Constructs the one-electron HBAR matrix elements ** Fme, Fae, and Fmi. These are defined in spin-orbitals as ** ** Fme = f_me + t_n^f <mn||ef> ** ** Fae = f_ae - 1/2 f_me t_m^a + f_m^f <am||ef> - 1/2 taut_mn^af <mn||ef> ** ** Fmi = f_mi + 1/2 f_me t_i^e + t_n^e <mn||ie> + 1/2 taut_in^ef <mn||ef> ** ** where taut_ij^ab = t_ij^ab + 1/2 ( t_i^a t_j^b - t_i^b t_j^a ) ** ** The standard named FAE, Fae, FMI, and Fmi are used for the complete ** matrix elements, while the names FAEt, Faet, FMIt, and Fmit are used for ** matrices with the diagonal elements removed. ** ** TDC, revised June 2002 */ void F_build(void) { int h,e,a,m; dpdfile2 Faet, FAEt, Fmit, FMIt; dpdfile2 Fae, FAE, FMI, Fmi; dpdfile2 fab, fAB, fij, fIJ; dpdfile2 FME, Fme; dpdfile2 fIA, fia; dpdfile2 tIA, tia; dpdbuf4 F_anti, F, E_anti, E, D_anti, D; dpdbuf4 tautIJAB, tautijab, tautIjAb, taut; int Gma, Gm, Ga, Gf, Ge, ma, M, A, fe, ef, f, nrows, ncols; double *X; if(params.ref == 0) { /** FME **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &D, &FME, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&D); dpd_file2_close(&FME); /** FAE **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); /* dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F 2<ia|bc> - <ia|cb>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &F, &FAE, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&F); */ dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); for(Gma=0; Gma < moinfo.nirreps; Gma++) { dpd_buf4_mat_irrep_row_init(&F, Gma); X = init_array(F.params->coltot[Gma]); for(ma=0; ma < F.params->rowtot[Gma]; ma++) { dpd_buf4_mat_irrep_row_rd(&F, Gma, ma); m = F.params->roworb[Gma][ma][0]; a = F.params->roworb[Gma][ma][1]; Gm = F.params->psym[m]; Ga = Ge = Gm ^ Gma; /* Fae is totally symmetric */ Gf = Gm; /* T1 is totally symmetric */ M = m - F.params->poff[Gm]; A = a - F.params->qoff[Ga]; zero_arr(X, F.params->coltot[Gma]); /* build spin-adapted F-integrals for current ma */ for(fe=0; fe < F.params->coltot[Gma]; fe++) { f = F.params->colorb[Gma][fe][0]; e = F.params->colorb[Gma][fe][1]; ef = F.params->colidx[e][f]; X[fe] = 2.0 * F.matrix[Gma][0][fe] - F.matrix[Gma][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows && ncols) C_DGEMV('t',nrows,ncols,1.0,&X[F.col_offset[Gma][Gf]],ncols, tIA.matrix[Gm][M],1,1.0, FAE.matrix[Ga][A],1); } free(X); dpd_buf4_mat_irrep_row_close(&F, Gma); } dpd_buf4_close(&F); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &FAE, 3, 3, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_close(&FAE); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &E, &FMI, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&E); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_close(&FMI); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_mat_init(&FAEt); dpd_file2_mat_rd(&FAEt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FAEt.params->rowtot[h]; a++) FAEt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FAEt); dpd_file2_mat_close(&FAEt); dpd_file2_close(&FAEt); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_mat_init(&FMIt); dpd_file2_mat_rd(&FMIt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FMIt.params->rowtot[h]; a++) FMIt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FMIt); dpd_file2_mat_close(&FMIt); dpd_file2_close(&FMIt); } else if(params.ref == 1) { /** ROHF **/ /* FME and Fme */ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &D_anti, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D_anti, &Fme, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &D, &Fme, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&Fme); /* FAE and Fae */ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &F_anti, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F_anti, &Fae, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_buf4_init(&D_anti, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautijab"); dpd_contract442(&tautIJAB, &D_anti, &FAE, 2, 2, -1, 1); dpd_contract442(&tautijab, &D_anti, &Fae, 2, 2, -1, 1); dpd_buf4_close(&D_anti); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &Fae, 3, 3, -1, 1); dpd_contract442(&tautIjAb, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&tia, &Fme, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); /* Form Fae and FAE tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); /* FMI and Fmi */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1.0, 1.0); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&E_anti); dpd_buf4_close(&E); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautijab"); dpd_contract442(&D_anti, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_contract442(&D_anti, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_close(&D_anti); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_contract442(&D, &tautIjAb, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&Fme, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); /* FMI and Fmi tilde intermediates */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); /* remove diagonal elements from Ft's */ dpd_file2_init(&Faet, CC_OEI, 0, 1, 1, "Faet"); dpd_file2_mat_init(&Faet); dpd_file2_mat_rd(&Faet); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < Faet.params->rowtot[h]; a++) Faet.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&Faet); dpd_file2_mat_close(&Faet); dpd_file2_close(&Faet); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_mat_init(&FAEt); dpd_file2_mat_rd(&FAEt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FAEt.params->rowtot[h]; a++) FAEt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FAEt); dpd_file2_mat_close(&FAEt); dpd_file2_close(&FAEt); dpd_file2_init(&Fmit, CC_OEI, 0, 0, 0, "Fmit"); dpd_file2_mat_init(&Fmit); dpd_file2_mat_rd(&Fmit); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < Fmit.params->rowtot[h]; a++) Fmit.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&Fmit); dpd_file2_mat_close(&Fmit); dpd_file2_close(&Fmit); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_mat_init(&FMIt); dpd_file2_mat_rd(&FMIt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FMIt.params->rowtot[h]; a++) FMIt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FMIt); dpd_file2_mat_close(&FMIt); dpd_file2_close(&FMIt); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /* FME and Fme */ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract422(&D, &tIA, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract422(&D, &tia, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract422(&D, &tia, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract422(&D, &tIA, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_close(&FME); dpd_file2_close(&Fme); /* FAE and Fae */ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_mat_init(&Fae); dpd_file2_mat_rd(&Fae); for(h=0; h < moinfo.nirreps; h++) { for(e=0; e < FAE.params->coltot[h]; e++) FAE.matrix[h][e][e] = 0; for(e=0; e < Fae.params->coltot[h]; e++) Fae.matrix[h][e][e] = 0; } dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_mat_wrt(&Fae); dpd_file2_mat_close(&Fae); dpd_file2_close(&FAE); dpd_file2_close(&Fae); } dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_dot13(&tIA, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_dot13(&tia, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_dot13(&tia, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_contract442(&taut, &D, &FAE, 3, 3, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tautijab"); dpd_contract442(&taut, &D, &Fae, 3, 3, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &Fae, 3, 3, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&tia, &Fme, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); /* Fae and FAE tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); /* FMI and Fmi */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&Fmi); for(h=0; h < moinfo.nirreps; h++) { for(m=0; m < FMI.params->rowtot[h]; m++) FMI.matrix[h][m][m] = 0; for(m=0; m < Fmi.params->rowtot[h]; m++) Fmi.matrix[h][m][m] = 0; } dpd_file2_mat_wrt(&FMI); dpd_file2_mat_close(&FMI); dpd_file2_mat_wrt(&Fmi); dpd_file2_mat_close(&Fmi); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); } dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&E_anti, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1, 1); dpd_dot24(&tia, &E, &FMI, 0, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_buf4_init(&E_anti, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1, 1); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_contract442(&D, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tautijab"); dpd_contract442(&D, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tautiJaB"); dpd_contract442(&D, &tautIjAb, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&Fme, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); /* FMI and Fmi tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); /* remove diagonal elements from Ft's */ dpd_file2_init(&Faet, CC_OEI, 0, 3, 3, "Faet"); dpd_file2_mat_init(&Faet); dpd_file2_mat_rd(&Faet); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < Faet.params->rowtot[h]; a++) Faet.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&Faet); dpd_file2_mat_close(&Faet); dpd_file2_close(&Faet); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_mat_init(&FAEt); dpd_file2_mat_rd(&FAEt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FAEt.params->rowtot[h]; a++) FAEt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FAEt); dpd_file2_mat_close(&FAEt); dpd_file2_close(&FAEt); dpd_file2_init(&Fmit, CC_OEI, 0, 2, 2, "Fmit"); dpd_file2_mat_init(&Fmit); dpd_file2_mat_rd(&Fmit); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < Fmit.params->rowtot[h]; a++) Fmit.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&Fmit); dpd_file2_mat_close(&Fmit); dpd_file2_close(&Fmit); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_mat_init(&FMIt); dpd_file2_mat_rd(&FMIt); for(h=0; h < moinfo.nirreps; h++) for(a=0; a < FMIt.params->rowtot[h]; a++) FMIt.matrix[h][a][a] = 0.0; dpd_file2_mat_wrt(&FMIt); dpd_file2_mat_close(&FMIt); dpd_file2_close(&FMIt); } /** UHF **/ return; } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Fai.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000100361�10757640026�014000� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* This function computes <phi_i^a | Hbar | 0>. This will be zero as long as the T amplitudes were obtained from CCSD computation with the same Hbar. */ void Fme_for_Fai(); void Fae_for_Fai(); void Fmi_for_Fai(); void Fai_build(void) { dpdfile2 newtIA, newtia, tIA, tia, fIA, fia; dpdfile2 FAE, Fae, FMI, Fmi, FME, Fme; dpdfile2 dIA, dia; dpdbuf4 tIJAB, tijab, tIjAb, tiJaB, T2; dpdbuf4 C, C_anti, D, F_anti, F, E_anti, E, Z; int Gma, Gmi, Gm, Gi, Ga, ma, m, a, A, nrows, ncols, h, e, nirreps; int *occpi, *virtpi, *openpi; double dotval; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; Fme_for_Fai(); Fae_for_Fai(); Fmi_for_Fai(); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FAI residual"); dpd_file2_close(&fIA); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "FAI residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_close(&tIA); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&tIjAb, &FME, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_buf4_init(&C_anti, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot14(&tIA, &C_anti, &newtIA, 0, 1, -1, 1); dpd_dot13(&tIA, &D, &newtIA, 0, 0, 1, 1); dpd_file2_close(&tIA); dpd_buf4_close(&C_anti); dpd_buf4_close(&D); /* t(i,a) <-- (2 t(mi,ef) - t(mi,fe)) <ma|ef> */ /* out-of-core version replacing the *stupid* code above 3/22/05, TDC */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(ma,mi)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F 2<ia|bc> - <ia|cb>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract444(&F, &tIjAb, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_trace42_13(&Z, &newtIA, 1, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&E, &tIjAb, &newtIA, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dotval = dpd_file2_dot_self(&newtIA); fprintf(outfile,"\t Norm squared of <Phi_I^A|Hbar|0> = %20.15lf\n",dotval); dpd_file2_close(&newtIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FAI residual"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fai residual"); dpd_file2_close(&fia); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "FAI residual"); dpd_file2_init(&newtia, CC_OEI, 0, 0, 1, "Fai residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_contract222(&tia, &Fae, &newtia, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_contract222(&Fmi, &tia, &newtia, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_dot13(&FME, &tIJAB, &newtIA, 0, 0, 1, 1); dpd_dot13(&Fme, &tijab, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_dot24(&Fme, &tIjAb, &newtIA, 0, 0, 1, 1); dpd_dot13(&FME, &tIjAb, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_buf4_init(&C_anti, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot14(&tIA, &C_anti, &newtIA, 0, 1, -1, 1); dpd_dot13(&tia, &D, &newtIA, 0, 0, 1, 1); dpd_dot14(&tia, &C_anti, &newtia, 0, 1, -1, 1); dpd_dot13(&tIA, &D, &newtia, 0, 0, 1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&C_anti); dpd_buf4_close(&D); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_contract442(&tIJAB, &F_anti, &newtIA, 1, 1, 1, 1); dpd_contract442(&tijab, &F_anti, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&F_anti); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&tiJaB, &F, &newtIA, 1, 1, 1, 1); dpd_contract442(&tIjAb, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&tIjAb); dpd_buf4_close(&tiJaB); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_contract442(&E_anti, &tIJAB, &newtIA, 1, 3, -1, 1); dpd_contract442(&E_anti, &tijab, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E_anti); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_contract442(&E, &tiJaB, &newtIA, 1, 3, -1, 1); dpd_contract442(&E, &tIjAb, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dpd_buf4_close(&tiJaB); /* Purge FAI matrix elements */ dpd_file2_mat_init(&newtIA); dpd_file2_mat_rd(&newtIA); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h]-openpi[h]); e<virtpi[h]; e++) newtIA.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&newtIA); dpd_file2_mat_close(&newtIA); /* Purge Fai matrix elements */ dpd_file2_mat_init(&newtia); dpd_file2_mat_rd(&newtia); for(h=0; h < nirreps; h++) { for(e=0; e<virtpi[h]; e++) for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) newtia.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&newtia); dpd_file2_mat_close(&newtia); dotval = dpd_file2_dot_self(&newtIA); fprintf(outfile,"\t Norm squared of <Phi_I^A|Hbar|0> = %20.15lf\n",dotval); dotval = dpd_file2_dot_self(&newtia); fprintf(outfile,"\t Norm squared of <Phi_i^a|Hbar|0> = %20.15lf\n",dotval); dpd_file2_close(&newtIA); dpd_file2_close(&newtia); } else if(params.ref == 2) { /*** UHF ***/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FAI residual"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fai residual"); dpd_file2_close(&fia); dpd_file2_init(&newtIA, CC_OEI, 0, 0, 1, "FAI residual"); dpd_file2_init(&newtia, CC_OEI, 0, 2, 3, "Fai residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&tIA, &FAE, &newtIA, 0, 0, 1, 1); dpd_file2_close(&FAE); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_contract222(&tia, &Fae, &newtia, 0, 0, 1, 1); dpd_file2_close(&Fae); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&FMI, &tIA, &newtIA, 1, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_contract222(&Fmi, &tia, &newtia, 1, 1, -1, 1); dpd_file2_close(&Fmi); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_dot13(&FME, &tIJAB, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_dot13(&Fme, &tijab, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_dot24(&Fme, &tIjAb, &newtIA, 0, 0, 1, 1); dpd_dot13(&FME, &tIjAb, &newtia, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_dot14(&tIA, &C, &newtIA, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_dot14(&tia, &C, &newtia, 0, 1, -1, 1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_dot13(&tia, &D, &newtIA, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_dot13(&tIA, &D, &newtia, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&tIJAB, &F, &newtIA, 1, 1, 1, 1); dpd_buf4_close(&tIJAB); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_contract442(&tijab, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tijab); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&tIjAb, &F, &newtIA, 0, 2, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&tIjAb, &F, &newtia, 1, 1, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&F); dpd_buf4_init(&E, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_contract442(&E, &tIJAB, &newtIA, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_contract442(&E, &tijab, &newtia, 1, 3, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_contract442(&E, &tIjAb, &newtIA, 2, 2, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_contract442(&E, &tIjAb, &newtia, 2, 2, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&tIjAb); dotval = dpd_file2_dot_self(&newtIA); fprintf(outfile,"\t Norm squared of <Phi_I^A|Hbar|0> = %20.15lf\n",dotval); dotval = dpd_file2_dot_self(&newtia); fprintf(outfile,"\t Norm squared of <Phi_i^a|Hbar|0> = %20.15lf\n",dotval); dpd_file2_close(&newtIA); dpd_file2_close(&newtia); } } void Fae_for_Fai(void) { int h,a,e,nirreps; int ma,fe,ef,m,f,M,A,Gm,Ga,Ge,Gf,Gma,nrows,ncols; double *X; dpdfile2 tIA, tia; dpdfile2 FME, Fme; dpdfile2 fAB, fab, fIA, fia; dpdfile2 FAE, Fae; dpdfile2 FAEt, Faet; dpdbuf4 F_anti, F, D_anti, D; dpdbuf4 tautIJAB, tautijab, tautIjAb, taut; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_copy(&fAB, CC_OEI, "FAE"); dpd_file2_close(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_copy(&fab, CC_OEI, "Fae"); dpd_file2_close(&fab); } /* don't remove diagonal elements here */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_close(&FAE); /* Out-of-core algorithm for F->FAE added 3/20/05 - TDC */ /* Fae <-- t(m,f) [2 <ma|fe> - <ma|ef>] */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); for(Gma=0; Gma < nirreps; Gma++) { dpd_buf4_mat_irrep_row_init(&F, Gma); X = init_array(F.params->coltot[Gma]); for(ma=0; ma < F.params->rowtot[Gma]; ma++) { dpd_buf4_mat_irrep_row_rd(&F, Gma, ma); m = F.params->roworb[Gma][ma][0]; a = F.params->roworb[Gma][ma][1]; Gm = F.params->psym[m]; Ga = Ge = Gm ^ Gma; /* Fae is totally symmetric */ Gf = Gm; /* T1 is totally symmetric */ M = m - F.params->poff[Gm]; A = a - F.params->qoff[Ga]; zero_arr(X, F.params->coltot[Gma]); /* build spin-adapted F-integrals for current ma */ for(fe=0; fe < F.params->coltot[Gma]; fe++) { f = F.params->colorb[Gma][fe][0]; e = F.params->colorb[Gma][fe][1]; ef = F.params->colidx[e][f]; X[fe] = 2.0 * F.matrix[Gma][0][fe] - F.matrix[Gma][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows && ncols) C_DGEMV('t',nrows,ncols,1.0,&X[F.col_offset[Gma][Gf]],ncols, tIA.matrix[Gm][M],1,1.0, FAE.matrix[Ga][A],1); } free(X); dpd_buf4_mat_irrep_row_close(&F, Gma); } dpd_buf4_close(&F); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &FAE, 3, 3, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_close(&FAE); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_close(&FAEt); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 1, 1, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0,"F <ia|bc>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &F_anti, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F, &FAE, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &F_anti, &Fae, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_buf4_init(&D_anti, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautijab"); dpd_contract442(&tautIJAB, &D_anti, &FAE, 2, 2, -1, 1); dpd_contract442(&tautijab, &D_anti, &Fae, 2, 2, -1, 1); dpd_buf4_close(&D_anti); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&tautIjAb, &D, &Fae, 3, 3, -1, 1); dpd_contract442(&tautIjAb, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&tautIjAb); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 1, 1, "Faet"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&tia, &Fme, &Faet, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&tIA, &fIA, &FAE, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&tia, &fia, &Fae, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_dot13(&tIA, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_dot13(&tia, &F, &FAE, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_dot13(&tia, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_dot13(&tIA, &F, &Fae, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tautIJAB"); dpd_contract442(&taut, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &FAE, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&taut, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tautijab"); dpd_contract442(&taut, &D, &Fae, 2, 2, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&taut, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&taut, &D, &Fae, 3, 3, -1, 1); dpd_buf4_close(&taut); dpd_buf4_close(&D); /* Build the tilde intermediates */ dpd_file2_copy(&FAE, CC_OEI, "FAEt"); dpd_file2_copy(&Fae, CC_OEI, "Faet"); dpd_file2_close(&FAE); dpd_file2_close(&Fae); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 3, 3, "Faet"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&tIA, &FME, &FAEt, 1, 1, -0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&FME); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&tia, &Fme, &Faet, 1, 1, -0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&Fme); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); } } void Fme_for_Fai(void) { dpdfile2 FME, Fme, fIA, fia, tIA, tia; dpdbuf4 D_anti, D; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &D_anti, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &D, &FME, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &D_anti, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D, &FME, 0, 0, 1.0, 1.0); dpd_dot13(&tia, &D_anti, &Fme, 0, 0, 1.0, 1.0); dpd_dot13(&tIA, &D, &Fme, 0, 0, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_file2_close(&FME); dpd_file2_close(&Fme); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_copy(&fIA, CC_OEI, "FME"); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_copy(&fia, CC_OEI, "Fme"); dpd_file2_close(&fia); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract422(&D, &tIA, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract422(&D, &tia, &FME, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract422(&D, &tia, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract422(&D, &tIA, &Fme, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_file2_close(&FME); dpd_file2_close(&Fme); } } void Fmi_for_Fai(void) { int h,m,i; dpdfile2 FMI, Fmi, FMIt, Fmit, fIJ, fij, fIA, fia; dpdfile2 tIA, tia, FME, Fme; dpdbuf4 E_anti, E, D_anti, D; dpdbuf4 tautIJAB, tautijab, tautIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_copy(&fIJ, CC_OEI, "FMI"); dpd_file2_close(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_copy(&fij, CC_OEI, "Fmi"); dpd_file2_close(&fij); } /* don't remove diagonals */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tIA, &E, &FMI, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_buf4_close(&E_anti); dpd_buf4_close(&E); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_close(&FMI); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_close(&FMIt); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_buf4_init(&E_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E, &FMI, 1, 1, 1.0, 1.0); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1.0, 1.0); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1.0, 1.0); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&E_anti); dpd_buf4_close(&E); dpd_buf4_init(&D_anti, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautijab"); dpd_contract442(&D_anti, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_contract442(&D_anti, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&tautijab); dpd_buf4_close(&D_anti); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_contract442(&D, &tautIjAb, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 0, 0, "Fmit"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_contract222(&Fme, &tia, &Fmit, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&fIA, &tIA, &FMI, 0, 0, 0.5, 1); dpd_file2_close(&tIA); dpd_file2_close(&fIA); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_contract222(&fia, &tia, &Fmi, 0, 0, 0.5, 1); dpd_file2_close(&tia); dpd_file2_close(&fia); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&E_anti, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_dot13(&tIA, &E_anti, &FMI, 1, 1, 1, 1); dpd_dot24(&tia, &E, &FMI, 0, 0, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_buf4_init(&E_anti, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&E, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_dot13(&tia, &E_anti, &Fmi, 1, 1, 1, 1); dpd_dot13(&tIA, &E, &Fmi, 1, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&E_anti); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_init(&tautIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tautIJAB"); dpd_contract442(&D, &tautIJAB, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&tautijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tautijab"); dpd_contract442(&D, &tautijab, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); dpd_contract442(&D, &tautIjAb, &FMI, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_init(&tautIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tautiJaB"); dpd_contract442(&D, &tautIjAb, &Fmi, 0, 0, 1, 1); dpd_buf4_close(&tautIjAb); dpd_buf4_close(&D); /* Build the tilde intermediate */ dpd_file2_copy(&FMI, CC_OEI, "FMIt"); dpd_file2_copy(&Fmi, CC_OEI, "Fmit"); dpd_file2_close(&FMI); dpd_file2_close(&Fmi); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 2, 2, "Fmit"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&FME, &tIA, &FMIt, 0, 0, 0.5, 1); dpd_file2_close(&FME); dpd_file2_close(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_contract222(&Fme, &tia, &Fmit, 0, 0, 0.5, 1); dpd_file2_close(&Fme); dpd_file2_close(&tia); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); } } }} // namespace psi::cchbar �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/get_moinfo.cc�������������������������������������������������������������������0000644�0001015�0000765�00000013621�10757640026�015431� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996. ** Modified by TDC, March 1999. */ void get_moinfo(void) { int i, h, errcod, nactive, nirreps; char *read_eom_ref; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.phase = chkpt_rd_phase_check(); chkpt_close(); nirreps = moinfo.nirreps; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); /* allow ROHF EOM calculation after RHF energy */ errcod = ip_string("EOM_REFERENCE", &(read_eom_ref),0); if (errcod == IPE_OK) { if(!strcmp(read_eom_ref, "ROHF")) params.ref = 1; free(read_eom_ref); } /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(moinfo.nirreps); moinfo.fruocc = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ moinfo.occpi = init_int_array(moinfo.nirreps); moinfo.virtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*moinfo.nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } else if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < moinfo.nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < moinfo.nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; } /* Frees memory allocated in get_moinfo() and dumps some info. */ void cleanup(void) { int i; free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); } else { free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.occpi); free(moinfo.virtpi); } } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/get_params.cc�������������������������������������������������������������������0000644�0001015�0000765�00000002657�10757640026�015434� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void get_params() { int errcod; char *junk; fndcor(&(params.memory),infile,outfile); /* compute the Tamplitude equation matrix elements (usually 0) */ params.Tamplitude = 0; errcod = ip_boolean("TAMPLITUDE", &(params.Tamplitude),0); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.print = 0; errcod = ip_data("PRINT", "%d", &(params.print),0); errcod = ip_string("WFN", &(params.wfn), 0); params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(errcod != IPE_OK) params.dertype = 0; else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; /* linear response */ else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* Should we use the minimal-disk algorithm for Wabei? It's VERY slow! */ params.wabei_lowdisk = 0; errcod = ip_boolean("WABEI_LOWDISK", ¶ms.wabei_lowdisk, 0); } }} // namespace psi::cchbar ���������������������������������������������������������������������������������psi3/src/bin/cchbar/globals.h�����������������������������������������������������������������������0000644�0001015�0000765�00000000656�10754663017�014576� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace cchbar { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Params params; }} // namespace psi::cchbar ����������������������������������������������������������������������������������psi3/src/bin/cchbar/HET1_Wabef.cc�������������������������������������������������������������������0000644�0001015�0000765�00000015034�10757640026�015110� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* HET1_Wabef(): Builds an ROHF-like [H,e^T1] Wabef for use in CC3 * response codes. Eventually this function will go away, but it will * be useful for getting the first versions of the CC3 codes up and * running. * * Wabef = <ab||ef> - P(ab) t_n^b <an||ef> + 1/2 P(ab) t_m^a <mn||ef> t_n^b * * The last two terms may be factored together to give: * * Wabef = <ab||ef> - P(ab) t_n^b Z_anef * * where Z_anef = <an||ef> - 1/2 t_m^a <mn||ef> * * To avoid memory bottlenecks, which could be severe in this case, I * compute the Z_anef contributions out-of-core with a major loop over * rows ab of the target Wabef. With an inner loop over irreps of the * index n, I grab from disk all Z_anef for a given index a and * compute a DGEMV of this with the b-th column of T1. This algorithm * requires only one quantity of size OV^2, and up to three others of * size V^2, depending on the spin case. * * Note that, although this code runs in ROHF mode, it will really * only be used in RHF-based codes, so I only produce the ABEF and * AbEf spin cases. * * TDC, 7/04 */ void HET1_Wabef(void) { dpdbuf4 Bints, Fints, Z, D, W; dpdfile2 T1; int Gab, nirreps, ab, ba, A, B, Ga, Gb, a, b; int Gn, Gan, an, Gbn, bn; int ef, fe, E, F; int nrows, ncols; double *ZEf, *ZfE; nirreps = moinfo.nirreps; if(params.ref == 1) { dpd_buf4_init(&Bints, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_copy(&Bints, CC3_HET1, "CC3 WABEF"); dpd_buf4_close(&Bints); dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_copy(&Bints, CC3_HET1, "CC3 WAbEf"); dpd_buf4_close(&Bints); /* ZANEF = <AN||EF> - 1/2 t_M^A <MN||EF> */ dpd_buf4_init(&Fints, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_copy(&Fints, CC_TMP0, "ZANEF (AN,E>F)"); dpd_buf4_close(&Fints); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 7, 11, 7, 0, "ZANEF (AN,E>F)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&T1, &D, &Z, 0, 0, 0, -0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_file2_close(&T1); /* WABEF <-- -P(AB) t_N^B ZANEF */ dpd_buf4_init(&W, CC3_HET1, 0, 7, 7, 7, 7, 0, "CC3 WABEF"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 7, 11, 7, 0, "ZANEF (AN,E>F)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(Gab=0; Gab < nirreps; Gab++) { ncols = W.params->coltot[Gab]; W.matrix[Gab] = dpd_block_matrix(1, ncols); for(ab=0; ab < W.params->rowtot[Gab]; ab++) { A = W.params->roworb[Gab][ab][0]; B = W.params->roworb[Gab][ab][1]; Ga = W.params->psym[A]; Gb = W.params->qsym[B]; a = A - W.params->poff[Ga]; b = B - W.params->qoff[Gb]; dpd_buf4_mat_irrep_rd_block(&W, Gab, ab, 1); for(Gn=0; Gn < nirreps; Gn++) { nrows = Z.params->qpi[Gn]; if(Gn == Gb) { Gan = Ga ^ Gn; an = Z.row_offset[Gan][A]; Z.matrix[Gan] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&Z, Gan, an, nrows); if(nrows && ncols) C_DGEMV('t', nrows, ncols, -1.0, Z.matrix[Gan][0], ncols, &(T1.matrix[Gn][0][b]), T1.params->coltot[Gn], 1.0, W.matrix[Gab][0], 1); dpd_free_block(Z.matrix[Gan], nrows, ncols); } if(Gn == Ga) { Gbn = Gb ^ Gn; bn = Z.row_offset[Gbn][B]; Z.matrix[Gbn] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&Z, Gbn, bn, nrows); if(nrows && ncols) C_DGEMV('t', nrows, ncols, 1.0, Z.matrix[Gbn][0], ncols, &(T1.matrix[Gn][0][a]), T1.params->coltot[Gn], 1.0, W.matrix[Gab][0], 1); dpd_free_block(Z.matrix[Gbn], nrows, ncols); } } dpd_buf4_mat_irrep_wrt_block(&W, Gab, ab, 1); } dpd_free_block(W.matrix[Gab], 1, ncols); } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /* ZAnEf = <An|Ef> - 1/2 t_MA <Mn|Ef> */ dpd_buf4_init(&Fints, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&Fints, CC_TMP0, "ZAnEf"); dpd_buf4_close(&Fints); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "ZAnEf"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&T1, &D, &Z, 0, 0, 0, -0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_file2_close(&T1); /* WAbEf <-- P(Ab) t_n^b ZAnEf */ dpd_buf4_init(&W, CC3_HET1, 0, 5, 5, 5, 5, 0, "CC3 WAbEf"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "ZAnEf"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(Gab=0; Gab < nirreps; Gab++) { ncols = W.params->coltot[Gab]; W.matrix[Gab] = dpd_block_matrix(1, ncols); ZEf = init_array(ncols); ZfE = init_array(ncols); for(ab=0; ab < W.params->rowtot[Gab]; ab++) { A = W.params->roworb[Gab][ab][0]; B = W.params->roworb[Gab][ab][1]; Ga = W.params->psym[A]; Gb = W.params->qsym[B]; a = A - W.params->poff[Ga]; b = B - W.params->qoff[Gb]; ba = W.params->rowidx[B][A]; zero_arr(ZEf, ncols); zero_arr(ZfE, ncols); for(Gn=0; Gn < nirreps; Gn++) { nrows = Z.params->qpi[Gn]; if(Gn == Gb) { Gan = Ga ^ Gn; an = Z.row_offset[Gan][A]; Z.matrix[Gan] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&Z, Gan, an, nrows); if(nrows && ncols) C_DGEMV('t', nrows, ncols, -1.0, Z.matrix[Gan][0], ncols, &(T1.matrix[Gn][0][b]), T1.params->coltot[Gn], 1.0, ZEf, 1); dpd_free_block(Z.matrix[Gan], nrows, ncols); } } /* Sort Ef->fE */ for(ef=0; ef < W.params->coltot[Gab]; ef++) { E = W.params->colorb[Gab][ef][0]; F = W.params->colorb[Gab][ef][1]; fe = W.params->colidx[F][E]; ZfE[fe] = ZEf[ef]; } dpd_buf4_mat_irrep_rd_block(&W, Gab, ab, 1); C_DAXPY(ncols, 1.0, ZEf, 1, W.matrix[Gab][0], 1); dpd_buf4_mat_irrep_wrt_block(&W, Gab, ab, 1); dpd_buf4_mat_irrep_rd_block(&W, Gab, ba, 1); C_DAXPY(ncols, 1.0, ZfE, 1, W.matrix[Gab][0], 1); dpd_buf4_mat_irrep_wrt_block(&W, Gab, ba, 1); } free(ZEf); free(ZfE); dpd_free_block(W.matrix[Gab], 1, ncols); } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); } } }} // namespace psi::cchbar ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Makefile.in���������������������������������������������������������������������0000644�0001015�0000765�00000001522�10677315415�015040� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ F.cc Wabei_RHF.cc cache.cc get_params.cc \ Fai.cc Wabei_RHF_FT2_a.cc cc2_Wabei.cc norm_HET1.cc \ HET1_Wabef.cc Wabei_ROHF.cc cc2_Wmbej.cc purge.cc \ Wabei.cc Wabij.cc cc2_Wmbij.cc reference.cc \ Wabei_AAAA_UHF.cc Wamef.cc cc2_Zmbej.cc sort_amps.cc \ Wabei_ABAB_UHF.cc Wmbej.cc cc3_HET1.cc status.cc \ Wabei_BABA_UHF.cc Wmbij.cc cchbar.cc tau.cc \ Wabei_BBBB_UHF.cc Wmnie.cc get_moinfo.cc taut.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/MOInfo.h������������������������������������������������������������������������0000644�0001015�0000765�00000004126�10754663017�014276� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ namespace psi { namespace cchbar { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int iopen; /* 0=closed shell; >0=open shell */ int phase; /* Boolean for consistency of orbital phases */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep excl. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ char **labels; /* irrep labels */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* alpha occupied orbital offsets within each irrep */ int *bocc_off; /* beta occupied orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* alpha virtual orbital offsets within each irrep */ int *bvir_off; /* beta virtual orbital offsets within each irrep */ }; }} // namespace psi::cchbar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/norm_HET1.cc��������������������������������������������������������������������0000644�0001015�0000765�00000037637�10757640026�015054� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void norm_HET1(void) { int i; double dot; dpdfile2 F; dpdbuf4 W; fprintf(outfile,"Dots of (HeT1)c in names \"CC3 Wxxx\" in CC3_HET1 \n"); if (params.ref == 0) { /* RHF */ /** Wamef **/ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WAmEf (Am,Ef) | WAmEf (Am,Ef)> = %15.10lf\n", dot); /** Wmnie **/ dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMnIe (Mn,Ie) | WMnIe (Mn,Ie)> = %15.10lf\n", dot); /** Wmnij **/ dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMnIj (Mn,Ij) | WMnIj (Mn,Ij)> = %15.10lf\n", dot); /** Wmbij **/ dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbIj (Ij,Mb) | WMbIj (Ij,Mb)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbIj (Mb,Ij) | WMbIj (Mb,Ij)> = %15.10lf\n", dot); /** Wmbej **/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbEj (ME,jb) | WMbEj (ME,jb)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WMbeJ (Me,Jb) | WMbeJ (Me,Jb)> = %15.10lf\n", dot); /** WABEI **/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"<WAbEi (Ie,bA) | WAbEi (Ie,bA)> = %15.10lf\n", dot); } else if (params.ref == 1) { /* ROHF */ fprintf(outfile,"Wamef terms\n"); /** WAMEF **/ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 7, 0, "CC3 WAMEF (AM,E>F)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAMEF|WAMEF> = %15.10lf\n", dot); /** Wamef **/ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 7, 0, "CC3 Wamef (am,e>f)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wamef|Wamef> = %15.10lf\n", dot); /** WAmEf **/ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAmEf|WAmEf> = %15.10lf\n", dot); /** WaMeF **/ dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WaMeF (aM,eF)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaMeF|WaMeF> = %15.10lf\n", dot); /** WMNIE **/ fprintf(outfile,"Wmnie terms\n"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMNIE (M>N,IE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE|WMNIE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 Wmnie (m>n,ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie|Wmnie> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe|WMnIe> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WmNiE (mN,iE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE|WmNiE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 2, 11, 0, "CC3 WMNIE (M>N,EI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE(M>N,EI)|WMNIE(M>N,EI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 2, 11, 0, "CC3 Wmnie (m>n,ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie(m>n,ei)|Wmnie(m>n,ei)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 0, 11, 0, "CC3 WMnIe (Mn,eI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe(Mn,eI)|WMnIe(Mn,eI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 11, 0, 11, 0, "CC3 WmNiE (mN,Ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE(mN,Ei)|WmNiE(mN,Ei)> = %15.10lf\n", dot); /** WMNIJ **/ fprintf(outfile,"Doing Wmnij terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIJ (M>N,IJ)|WMNIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 2, 2, 0, "CC3 Wmnij (m>n,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnij (m>n,ij)|Wmnij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIj (Mn,Ij)|WMnIj> = %15.10lf\n", dot); fprintf(outfile,"Doing Wmbij terms.\n"); /** WMBIJ **/ dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 WMBIJ (MB,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (MB,I>J)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (I>J,MB)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 2, 0, "CC3 Wmbij (mb,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (mb,i>j)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 Wmbij (i>j,mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (i>j,mb)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Mb,Ij)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (mB,iJ)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (mB,iJ)|WmBiJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 0, 10, 0, 0, "CC3 WmBiJ (iJ,mB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (iJ,mB)|WmBiJ> = %15.10lf\n", dot); /** WMBEJ **/ fprintf(outfile,"Doing Wmbej terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMBEJ (ME,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBEJ (ME,JB)|WMBEJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 Wmbej (me,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbej (me,jb)|Wmbej> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbEj (ME,jb)|WMbEj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WmBeJ (me,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBeJ (me,JB)|WmBeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbeJ (Me,Jb)|WMbeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WmBEj (mE,jB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBEj (mE,jB)|WmBEj> = %15.10lf\n", dot); /** WABEI **/ fprintf(outfile,"Doing Wabei terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WABEI (IE,B>A) |WABEI> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 Wabei (ie,b>a)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wabei (ie,b>a) |Wabei> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,bA) |WAbEi> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WaBeI (Ie,Ba)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaBeI (Ie,Ba) |WaBeI> = %15.10lf\n", dot); } else { /******************** UHF */ fprintf(outfile,"Wamef terms\n"); /** WAMEF **/ dpd_buf4_init(&W, CC3_HET1, 0, 21, 5, 21, 7, 0, "CC3 WAMEF (AM,E>F)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAMEF|WAMEF> = %15.10lf\n", dot); /** Wamef **/ dpd_buf4_init(&W, CC3_HET1, 0, 31, 15, 31, 17, 0, "CC3 Wamef (am,e>f)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wamef|Wamef> = %15.10lf\n", dot); /** WAmEf **/ dpd_buf4_init(&W, CC3_HET1, 0, 26, 28, 26, 28, 0, "CC3 WAmEf (Am,Ef)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAmEf|WAmEf> = %15.10lf\n", dot); /** WaMeF **/ dpd_buf4_init(&W, CC3_HET1, 0, 25, 29, 25, 29, 0, "CC3 WaMeF (aM,eF)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WaMeF|WaMeF> = %15.10lf\n", dot); /** WMNIE **/ fprintf(outfile,"Wmnie terms\n"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMNIE (M>N,IE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE (M>N,IE)|WMNIE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmnie (m>n,ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie (m>n,ie)|Wmnie> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMnIe (Mn,Ie)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe (Mn,Ie)|WMnIe> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmNiE (mN,iE)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE (mN,iE)|WmNiE> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 21, 2, 21, 0, "CC3 WMNIE (M>N,EI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIE(M>N,EI)|WMNIE(M>N,EI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 31, 12, 31, 0, "CC3 Wmnie (m>n,ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnie(m>n,ei)|Wmnie(m>n,ei)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 22, 25, 22, 25, 0, "CC3 WMnIe (Mn,eI)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIe(Mn,eI)|WMnIe(Mn,eI)> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 23, 26, 23, 26, 0, "CC3 WmNiE (mN,Ei)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmNiE(mN,Ei)|WmNiE(mN,Ei)> = %15.10lf\n", dot); /** WMNIJ **/ fprintf(outfile,"Doing Wmnij terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMNIJ (M>N,I>J)|WMNIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 12, 12, 0, "CC3 Wmnij (m>n,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmnij (m>n,i>j)|Wmnij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 22, 22, 22, 22, 0, "CC3 WMnIj (Mn,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMnIj (Mn,Ij)|WMnIj> = %15.10lf\n", dot); fprintf(outfile,"Doing Wmbij terms.\n"); /** WMBIJ **/ dpd_buf4_init(&W, CC3_HET1, 0, 20, 0, 20, 2, 0, "CC3 WMBIJ (MB,I>J)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (MB,I>J)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 0, 20, 2, 20, 0, "CC3 WMBIJ (I>J,MB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBIJ (I>J,MB)|WMBIJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 30, 10, 30, 12, 0, "CC3 Wmbij (mb,i>j)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (mb,i>j)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 10, 30, 12, 30, 0, "CC3 Wmbij (i>j,mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbij (i>j,mb)|Wmbij> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 24, 22, 24, 22, 0, "CC3 WMbIj (Mb,Ij)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Mb,Ij)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 22, 24, 22, 24, 0, "CC3 WMbIj (Ij,Mb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbIj (Ij,Mb)|WMbIj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 27, 23, 27, 23, 0, "CC3 WmBiJ (mB,iJ)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (mB,iJ)|WmBiJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 23, 27, 23, 27, 0, "CC3 WmBiJ (iJ,mB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBiJ (iJ,mB)|WmBiJ> = %15.10lf\n", dot); /** WMBEJ **/ fprintf(outfile,"Doing Wmbej terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 20, 20, 20, 20, 0, "CC3 WMBEJ (ME,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMBEJ (all ME,JB)|WMBEJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 30, 30, 30, 30, 0, "CC3 Wmbej (me,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wmbej|Wmbej> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 24, 26, 24, 26, 0, "CC3 WMbEj (ME,jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbEj|WMbEj> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 27, 25, 27, 25, 0, "CC3 WmBeJ (me,JB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBeJ|WmBeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 24, 24, 24, 24, 0, "CC3 WMbeJ (Me,Jb)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WMbeJ|WMbeJ> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 27, 27, 27, 27, 0, "CC3 WmBEj (mE,jB)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WmBEj|WmBEj> = %15.10lf\n", dot); /** WABEI **/ fprintf(outfile,"Doing Wabei terms.\n"); dpd_buf4_init(&W, CC3_HET1, 0, 20, 5, 20, 7, 0, "CC3 WABEI (IE,B>A)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WABEI (IE,B>A) |WABEI> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 30, 15, 30, 17, 0, "CC3 Wabei (ie,b>a)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<Wabei (ie,b>a)|Wabei> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 27, 29, 27, 29, 0, "CC3 WAbEi (iE,bA)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,bA)|WAbEi> = %15.10lf\n", dot); dpd_buf4_init(&W, CC3_HET1, 0, 24, 28, 24, 28, 0, "CC3 WaBeI (Ie,Ba)"); dot = dpd_buf4_dot_self(&W); dpd_buf4_close(&W); fprintf(outfile,"\t<WAbEi (iE,Ba)|WAbEi> = %15.10lf\n", dot); } return; } }} // namespace psi::cchbar �������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Params.h������������������������������������������������������������������������0000644�0001015�0000765�00000000507�10754663017�014371� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ namespace psi { namespace cchbar { /* Input parameters for cchbar */ struct Params { long int memory; int cachelev; int ref; int print; char *wfn; int dertype; int Tamplitude; int wabei_lowdisk; }; }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/purge.cc������������������������������������������������������������������������0000644�0001015�0000765�00000054731�10757640026�014434� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void purge(void) { dpdfile2 FAE, Fmi, FME, Fme; dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge FME matrix elements */ dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&FME); dpd_file2_mat_rd(&FME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h]-openpi[h]); e<virtpi[h]; e++) FME.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&FME); dpd_file2_mat_close(&FME); dpd_file2_close(&FME); /* Purge Fme matrix elements */ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); for(h=0; h < nirreps; h++) { for(e=0; e<virtpi[h]; e++) for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) Fme.matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(&Fme); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); /* Purge Fmi matrix elements */ dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&Fmi); for(h=0; h < nirreps; h++) { for(i=0; i<occpi[h]; i++) for(j=(occpi[h]-openpi[h]); j<occpi[h]; j++) Fmi.matrix[h][i][j] = 0.0; for(i=(occpi[h]-openpi[h]); i<occpi[h]; i++) for(j=0; j<occpi[h]; j++) Fmi.matrix[h][i][j] = 0.0; } dpd_file2_mat_wrt(&Fmi); dpd_file2_mat_close(&Fmi); dpd_file2_close(&Fmi); /* Purge FAE matrix elements */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); for(h=0; h < nirreps; h++) { for(a=0; a<virtpi[h]; a++) for(b=(virtpi[h]-openpi[h]); b<virtpi[h]; b++) FAE.matrix[h][a][b] = 0.0; for(a=(virtpi[h]-openpi[h]); a<virtpi[h]; a++) for(b=0; b<virtpi[h]; b++) FAE.matrix[h][a][b] = 0.0; } dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); /* Purge Fmit (matrix elements with zero diagonal) */ dpd_file2_init(&Fmi, CC_OEI, 0, 0, 0, "Fmit"); dpd_file2_mat_init(&Fmi); dpd_file2_mat_rd(&Fmi); for(h=0; h < nirreps; h++) { for(i=0; i<occpi[h]; i++) for(j=(occpi[h]-openpi[h]); j<occpi[h]; j++) Fmi.matrix[h][i][j] = 0.0; for(i=(occpi[h]-openpi[h]); i<occpi[h]; i++) for(j=0; j<occpi[h]; j++) Fmi.matrix[h][i][j] = 0.0; } dpd_file2_mat_wrt(&Fmi); dpd_file2_mat_close(&Fmi); dpd_file2_close(&Fmi); /* Purge FAEt (matrix elements with zero diagonal) */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); for(h=0; h < nirreps; h++) { for(a=0; a<virtpi[h]; a++) for(b=(virtpi[h]-openpi[h]); b<virtpi[h]; b++) FAE.matrix[h][a][b] = 0.0; for(a=(virtpi[h]-openpi[h]); a<virtpi[h]; a++) for(b=0; b<virtpi[h]; b++) FAE.matrix[h][a][b] = 0.0; } dpd_file2_mat_wrt(&FAE); dpd_file2_mat_close(&FAE); dpd_file2_close(&FAE); /* Purge Wmnij matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 2, 2,"Wmnij"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) || (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 0, 0,"WMnIj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ij=0; ij < W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if ((J >= (occpi[jsym] - openpi[jsym])) || (N >= (occpi[nsym] - openpi[nsym])) ) W.matrix[h][mn][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wmbej matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 10, 10,"WMBEJ"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 10,"Wmbej"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 10,"WMbEj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { e = W.params->roworb[h][me][1]; esym = W.params->qsym[e]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; jsym = W.params->rsym[j]; J = j - occ_off[jsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 10,"WmBeJ"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(jb=0; jb < W.params->coltot[h]; jb++) { b = W.params->colorb[h][jb][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 10,"WmBEj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(me=0; me < W.params->rowtot[h]; me++) { m = W.params->roworb[h][me][0]; e = W.params->roworb[h][me][1]; msym = W.params->psym[m]; esym = W.params->qsym[e]; M = m - occ_off[msym]; E = e - vir_off[esym]; for(jb=0; jb < W.params->coltot[h]; jb++) { j = W.params->colorb[h][jb][0]; b = W.params->colorb[h][jb][1]; jsym = W.params->rsym[j]; bsym = W.params->ssym[b]; J = j - occ_off[jsym]; B = b - vir_off[bsym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (J >= (occpi[jsym] - openpi[jsym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][me][jb] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* WMbeJ is already OK */ /* Purge Wamef matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 11, 7,"WAMEF"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; asym = W.params->psym[a]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; f = W.params->colorb[h][ef][1]; esym = W.params->rsym[e]; fsym = W.params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((A >= (virtpi[asym] - openpi[asym])) || (E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 7,"Wamef"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { m = W.params->roworb[h][ma][1]; msym = W.params->qsym[m]; M = m - occ_off[msym]; for(ef=0; ef< W.params->coltot[h]; ef++) { if (M >= (occpi[msym] - openpi[msym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 5,"WAmEf"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { a = W.params->roworb[h][ma][0]; m = W.params->roworb[h][ma][1]; asym = W.params->psym[a]; msym = W.params->qsym[m]; M = m - occ_off[msym]; A = a - vir_off[asym]; for(ef=0; ef< W.params->coltot[h]; ef++) { e = W.params->colorb[h][ef][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if ((A >= (virtpi[asym] - openpi[asym])) || (M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) ) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 5,"WaMeF"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ma=0; ma < W.params->rowtot[h]; ma++) { for(ef=0; ef< W.params->coltot[h]; ef++) { f = W.params->colorb[h][ef][1]; fsym = W.params->ssym[f]; F = f - vir_off[fsym]; if (F >= (virtpi[fsym] - openpi[fsym])) W.matrix[h][ma][ef] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wmnie matrix elements */ /* moving to separate function dpd_file4_init(&W, CC_HBAR, 0, 2, 11,"WMNIE"); for(h=0; h < W.params->nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if (E >= (virtpi[esym] - openpi[esym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 2, 11,"Wmnie"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { i = W.params->colorb[h][ei][1]; isym = W.params->ssym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 0, 11,"WMnIe"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { if (N >= (occpi[nsym] - openpi[nsym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_init(&W, CC_HBAR, 0, 0, 11,"WmNiE"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; i = W.params->colorb[h][ei][1]; esym = W.params->rsym[e]; isym = W.params->ssym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); */ /* Purge WMBIJ matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 10, 2,"WMBIJ"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { b = W.params->roworb[h][mb][1]; bsym = W.params->qsym[b]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 2,"Wmbij"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; j = W.params->colorb[h][ij][1]; isym = W.params->rsym[i]; jsym = W.params->ssym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; if ((M >= (occpi[msym] - openpi[msym])) || (I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 0,"WMbIj"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { for(ij=0; ij<W.params->coltot[h]; ij++) { j = W.params->colorb[h][ij][1]; jsym = W.params->ssym[j]; J = j - occ_off[jsym]; if (J >= (occpi[jsym] - openpi[jsym])) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 10, 0,"WmBiJ"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mb=0; mb<W.params->rowtot[h]; mb++) { m = W.params->roworb[h][mb][0]; b = W.params->roworb[h][mb][1]; msym = W.params->psym[m]; bsym = W.params->qsym[b]; M = m - occ_off[msym]; B = b - vir_off[bsym]; for(ij=0; ij<W.params->coltot[h]; ij++) { i = W.params->colorb[h][ij][0]; isym = W.params->rsym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (B >= (virtpi[bsym] - openpi[bsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mb][ij] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wabei matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 11, 7,"WEIAB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; esym = W.params->psym[e]; E = e - vir_off[esym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 7,"Weiab"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { i = W.params->roworb[h][ei][1]; isym = W.params->qsym[i]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { if (I >= (occpi[isym] - openpi[isym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 5,"WEiAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { e = W.params->roworb[h][ei][0]; i = W.params->roworb[h][ei][1]; esym = W.params->psym[e]; isym = W.params->qsym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; for(ab=0; ab<W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; if ((E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) || (A >= (virtpi[asym] - openpi[asym])) ) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 11, 5,"WeIaB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(ei=0; ei<W.params->rowtot[h]; ei++) { for(ab=0; ab<W.params->coltot[h]; ab++) { b = W.params->colorb[h][ab][1]; bsym = W.params->ssym[b]; B = b - vir_off[bsym]; if (B >= (virtpi[bsym] - openpi[bsym])) W.matrix[h][ei][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } /* Purge Wmnie matrix elements */ void purge_Wmnie(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file4_init(&W, CC_HBAR, 0, 0, 11,"WMnIe (Mn,eI)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { n = W.params->roworb[h][mn][1]; nsym = W.params->qsym[n]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { if (N >= (occpi[nsym] - openpi[nsym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_init(&W, CC_HBAR, 0, 2, 11, "WMNIE (M>N,EI)"); for(h=0; h < W.params->nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; esym = W.params->rsym[e]; E = e - vir_off[esym]; if (E >= (virtpi[esym] - openpi[esym])) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 2, 11,"Wmnie (m>n,ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ei=0; ei<W.params->coltot[h]; ei++) { i = W.params->colorb[h][ei][1]; isym = W.params->ssym[i]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); dpd_file4_init(&W, CC_HBAR, 0, 0, 11,"WmNiE (mN,Ei)"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn<W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; msym = W.params->psym[m]; M = m - occ_off[msym]; for(ei=0; ei<W.params->coltot[h]; ei++) { e = W.params->colorb[h][ei][0]; i = W.params->colorb[h][ei][1]; esym = W.params->rsym[e]; isym = W.params->ssym[i]; E = e - vir_off[esym]; I = i - occ_off[isym]; if ((M >= (occpi[msym] - openpi[msym])) || (E >= (virtpi[esym] - openpi[esym])) || (I >= (occpi[isym] - openpi[isym])) ) W.matrix[h][mn][ei] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } }} // namespace psi::cchbar ���������������������������������������psi3/src/bin/cchbar/reference.cc��������������������������������������������������������������������0000644�0001015�0000765�00000010534�10757640026�015241� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { double rhf_energy(void); double rohf_energy(void); double uhf_energy(void); void reference(void) { double energy; if(params.ref == 0) energy = (rhf_energy()); else if(params.ref == 1) energy = (rohf_energy()); else if(params.ref == 2) energy = (uhf_energy()); psio_write_entry(CC_HBAR, "Reference expectation value", (char *) &energy, sizeof(double)); fprintf(outfile,"Reference expectation value computed: %20.15lf\n", energy); } double rhf_energy(void) { double tauIjAb_energy, tIA_energy; dpdfile2 fIA, tIA; dpdbuf4 tauIjAb, D, E; dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); tIA_energy = 2.0 * dpd_file2_dot(&fIA, &tIA); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); tauIjAb_energy = dpd_buf4_dot(&D, &tauIjAb); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); /* fprintf(outfile, "Two AB Energy = %20.14f\n", tauIjAb_energy); */ return (tauIjAb_energy+tIA_energy); } double rohf_energy(void) { double tIA_energy, tia_energy, tauIJAB_energy, tauijab_energy, tauIjAb_energy; dpdfile2 tIA, tia, fIA, fia; dpdbuf4 tauIJAB, tauijab, tauIjAb, D; dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); tIA_energy = dpd_file2_dot(&fIA, &tIA); dpd_file2_close(&fIA); dpd_file2_close(&tIA); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); tia_energy = dpd_file2_dot(&fia, &tia); dpd_file2_close(&fia); dpd_file2_close(&tia); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); tauIJAB_energy = dpd_buf4_dot(&D, &tauIJAB); dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); tauijab_energy = dpd_buf4_dot(&D, &tauijab); dpd_buf4_close(&tauijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); tauIjAb_energy = dpd_buf4_dot(&D, &tauIjAb); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); /* fprintf(outfile, "One A Energy = %20.14f\n", tIA_energy); fprintf(outfile, "One B Energy = %20.14f\n", tia_energy); fprintf(outfile, "Two AA Energy = %20.14f\n", tauIJAB_energy); fprintf(outfile, "Two BB Energy = %20.14f\n", tauijab_energy); fprintf(outfile, "Two AB Energy = %20.14f\n", tauIjAb_energy); */ return (tIA_energy + tia_energy + tauIJAB_energy + tauijab_energy + tauIjAb_energy); } double uhf_energy(void) { double E2AA, E2BB, E2AB, T1A, T1B; dpdbuf4 T2, D; dpdfile2 T1, F; dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); T1A = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); T1B = dpd_file2_dot(&F, &T1); dpd_file2_close(&F); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); E2AA = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); E2BB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); E2AB = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); /* fprintf(outfile, "One A Energy = %20.14f\n", T1A); fprintf(outfile, "One B Energy = %20.14f\n", T1B); fprintf(outfile, "Two AA Energy = %20.14f\n", E2AA); fprintf(outfile, "Two BB Energy = %20.14f\n", E2BB); fprintf(outfile, "Two AB Energy = %20.14f\n", E2AB); */ return(T1A + T1B + E2AA + E2BB + E2AB); } }} // namespace psi::cchbar ��������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/sort_amps.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006067�10757640026�015320� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void sort_amps(void) { dpdbuf4 t2; if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ /* T(iJ,aB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, qpsr, 0, 5, "tiJaB"); dpd_buf4_close(&t2); /* TIJAB (IA,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tIAJB"); dpd_buf4_close(&t2); /* Tijab (ia,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tiajb"); dpd_buf4_close(&t2); /* TIjAb (IA,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 10, 10, "tIAjb"); dpd_buf4_close(&t2); /* TIjAb (ij,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tiaJB"); dpd_buf4_close(&t2); /* TIjAb (Ib,jA) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, psrq, 10, 10, "tIbjA"); dpd_buf4_close(&t2); /* TIjAb (jA,Ib) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 10, 10, "tjAIb"); dpd_buf4_sort(&t2, CC_TAMPS, pqsr, 10, 11, "tIbAj"); dpd_buf4_close(&t2); } else if(params.ref == 2) { /** UHF **/ /* T(iJ,aB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, qpsr, 23, 29, "tiJaB"); dpd_buf4_close(&t2); /* TIJAB (IA,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 20, 20, "tIAJB"); dpd_buf4_close(&t2); /* Tijab (ia,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 30, 30, "tiajb"); dpd_buf4_close(&t2); /* TIjAb (IA,jb) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_sort(&t2, CC_TAMPS, prqs, 20, 30, "tIAjb"); dpd_buf4_close(&t2); /* TIjAb (ij,JB) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, rspq, 30, 20, "tiaJB"); dpd_buf4_close(&t2); /* TIjAb (Ib,jA) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_sort(&t2, CC_TAMPS, psrq, 24, 27, "tIbjA"); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); /* TIjAb (jA,Ib) */ dpd_buf4_sort(&t2, CC_TAMPS, rspq, 27, 24, "tjAIb"); /* TIjAb (Ib,Aj) */ dpd_buf4_sort(&t2, CC_TAMPS, pqsr, 24, 26, "tIbAj"); dpd_buf4_close(&t2); /* TiJaB (iB,aJ) */ dpd_buf4_init(&t2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_buf4_sort(&t2, CC_TAMPS, pqsr, 27, 25, "tiBaJ"); dpd_buf4_close(&t2); } } }} // namespace psi::cchbar �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/status.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000000415�11112564564�014621� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> namespace psi { namespace cchbar { void status(const char *s, FILE *out) { fprintf(out, " %-15s...complete\n", s); fflush(out); } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/tau.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000021655�10757640026�014102� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void tau_build(void) { int h, ij, ab, i, j, a, b, I, J, A, B; int Isym, Jsym, Asym, Bsym; int nirreps; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauiJaB, tauIjbA; dpdbuf4 tIJAB, tijab, tIjAb; dpdfile2 tIA, tia; nirreps = moinfo.nirreps; if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tauIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tauijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tauIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } /* This will generate the tauBA and tauIjbA files from tauIjAb */ dpd_buf4_sort(&tauIjAb, CC_TAMPS, pqsr, 0, 5, "tauIjbA"); dpd_buf4_sort(&tauIjAb, CC_TAMPS, psqr, 10, 10, "tauIjAb (Ib,jA)"); dpd_buf4_close(&tauIjAb); dpd_buf4_init(&tauIjbA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_buf4_sort(&tauIjbA, CC_TAMPS, qprs, 0, 5, "tauiJaB"); dpd_buf4_close(&tauIjbA); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tauIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tauijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tauIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); /* This will generate the tauBA and tauIjbA files from tauIjAb */ dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_sort(&tauIjAb, CC_TAMPS, pqsr, 22, 29, "tauIjbA"); dpd_buf4_sort(&tauIjAb, CC_TAMPS, qpsr, 23, 29, "tauiJaB"); dpd_buf4_close(&tauIjAb); } /** UHF **/ } }} // namespace psi::cchbar �����������������������������������������������������������������������������������psi3/src/bin/cchbar/taut.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000023214�10757640026�014257� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void taut_build(void) { int h, ij, ab, i, j, a, b, I, J, A, B; int Isym, Jsym, Asym, Bsym; int nirreps; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauiJaB, tauIjbA; dpdbuf4 tIJAB, tijab, tIjAb; dpdfile2 tIA, tia; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tautIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tautijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= 0.5 * (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += 0.5 * (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= 0.5 * (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&tIJAB, CC_TAMPS, "tautIJAB"); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_copy(&tijab, CC_TAMPS, "tautijab"); dpd_buf4_close(&tijab); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_copy(&tIjAb, CC_TAMPS, "tautIjAb"); dpd_buf4_close(&tIjAb); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&tia); dpd_file2_mat_rd(&tia); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tautIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIJAB, h); dpd_buf4_mat_irrep_rd(&tauIJAB, h); for(ij=0; ij < tauIJAB.params->rowtot[h]; ij++) { i = tauIJAB.params->roworb[h][ij][0]; j = tauIJAB.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tIA.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tIA.params->psym[j]; for(ab=0; ab < tauIJAB.params->coltot[h]; ab++) { a = tauIJAB.params->colorb[h][ab][0]; b = tauIJAB.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tIA.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tIA.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIJAB.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tIA.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauIJAB.matrix[h][ij][ab] -= 0.5 * (tIA.matrix[Isym][I][B] * tIA.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauIJAB, h); dpd_buf4_mat_irrep_close(&tauIJAB, h); } dpd_buf4_close(&tauIJAB); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tautijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauijab, h); dpd_buf4_mat_irrep_rd(&tauijab, h); for(ij=0; ij < tauijab.params->rowtot[h]; ij++) { i = tauijab.params->roworb[h][ij][0]; j = tauijab.params->roworb[h][ij][1]; I = tia.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tia.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauijab.params->coltot[h]; ab++) { a = tauijab.params->colorb[h][ab][0]; b = tauijab.params->colorb[h][ab][1]; A = tia.params->colidx[a]; B = tia.params->colidx[b]; Asym = tia.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauijab.matrix[h][ij][ab] += 0.5 * (tia.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); if((Isym==Bsym) && (Jsym==Asym)) tauijab.matrix[h][ij][ab] -= 0.5 * (tia.matrix[Isym][I][B] * tia.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&tauijab, h); dpd_buf4_mat_irrep_close(&tauijab, h); } dpd_buf4_close(&tauijab); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tautIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tauIjAb, h); dpd_buf4_mat_irrep_rd(&tauIjAb, h); for(ij=0; ij < tauIjAb.params->rowtot[h]; ij++) { i = tauIjAb.params->roworb[h][ij][0]; j = tauIjAb.params->roworb[h][ij][1]; I = tIA.params->rowidx[i]; J = tia.params->rowidx[j]; Isym = tIA.params->psym[i]; Jsym = tia.params->psym[j]; for(ab=0; ab < tauIjAb.params->coltot[h]; ab++) { a = tauIjAb.params->colorb[h][ab][0]; b = tauIjAb.params->colorb[h][ab][1]; A = tIA.params->colidx[a]; B = tia.params->colidx[b]; Asym = tIA.params->qsym[a]; Bsym = tia.params->qsym[b]; if((Isym==Asym) && (Jsym==Bsym)) tauIjAb.matrix[h][ij][ab] += 0.5 * (tIA.matrix[Isym][I][A] * tia.matrix[Jsym][J][B]); } } dpd_buf4_mat_irrep_wrt(&tauIjAb, h); dpd_buf4_mat_irrep_close(&tauIjAb, h); } dpd_buf4_sort(&tauIjAb, CC_TAMPS, qpsr, 23, 29, "tautiJaB"); dpd_buf4_close(&tauIjAb); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_file2_mat_close(&tia); dpd_file2_close(&tia); } /*** UHF ***/ } }} // namespace psi::cchbar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei.cc������������������������������������������������������������������������0000644�0001015�0000765�00000002573�10757640026�014336� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wabei(): Computes all contributions to the Wabei HBAR matrix ** elements, whose spin-orbital definition is: ** ** Wabei = <ab||ei> - Fme t(mi,ab) + t(i,f) <ab||ef> ** (I) (II) (IIIa) ** - P(ab) t(i,f) t(m,b) <am||ef> + 1/2 t(i,f) t(mn,ab) <mn||ef> ** (IIIb) (IIIc) ** + 1/2 P(ab) t(i,f) t(m,a) t(n,b) <mn||ef> ** (IIId) ** + 1/2 t(mn,ab) <mn||ei> + 1/2 P(ab) t(m,a) t(n,b) <mn||ei> ** (IVa) (IVb) ** + P(ab) t(mi,fb) <am||ef> - P(ab) t(m,a) <mb||ei> ** (V) (VI) ** - P(ab) t(m,a) t(ni,fb) <mn||ef> ** (VII) ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] */ void Wabei_RHF(void); void Wabei_ROHF(void); void WABEI_UHF(void); void Wabei_UHF(void); void WAbEi_UHF(void); void WaBeI_UHF(void); void Wabei_build(void) { if(params.ref == 0) Wabei_RHF(); else if(params.ref == 1) Wabei_ROHF(); else if(params.ref == 2) { WABEI_UHF(); Wabei_UHF(); WAbEi_UHF(); WaBeI_UHF(); } } }} // namespace psi::cchbar �������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_AAAA_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000023124�10757640026�015576� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* WABEI_UHF(): Computes all contributions to the ABEI spin case of ** the Wabei HBAR matrix elements. The final product is stored in ** (EI,AB) ordering and is referred to on disk as "WEIAB". ** ** The spin-orbital expression for the Wabei elements is: ** ** Wabei = <ab||ei> - Fme t_mi^ab + t_i^f <ab||ef> ** - P(ab) t_m^b <am||ef>t_i^f + 1/2 tau_mn^ab <mn||ef> t_i^f ** + 1/2 <mn||ei> tau_mn^ab - P(ab) <mb||ef> t_mi^af ** - P(ab) t_m^a { <mb||ei> - t_ni^bf <mn||ef> } ** ** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).) ** ** For the ABEI spin case, we evaluate these contractions with two ** target orderings, (AB,EI) and (EI,AB), depending on the term. ** After all terms have been evaluated, the (AB,EI) terms are sorted ** into (EI,AB) ordering and both groups arer added together. ** ** TDC, June 2002 */ void WABEI_UHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, E, C; /**** Term I ****/ /** W(EI,AB) <--- <EI||AB> **/ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_copy(&F, CC_HBAR, "WEIAB"); dpd_buf4_close(&F); /**** Term II ****/ /** W(EI,AB) <--- - F_ME t_MI^AB **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&W, CC_HBAR, 0, 21, 7, 21, 7, 0, "WEIAB"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /**** Term III ****/ /** W'(AB,EI) <--- <AB||EF> t_I^F **/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&B, &T1, &W, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_close(&W); /**** Term IV ****/ /** WABEI <-- t_M^B <MA||EF> t_I^F - t_M^A <MB||EF> t_I^F Evaluate in two steps: (1) Z_MBEI = <MB||EF> t_I^F (2) WABEI <-- t_M^B Z_MAEI - t_M^A Z_MBEI **/ /** Z(MB,EI) <-- - <MB||EF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(MB,EI)"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_M^A Z(MB,EI) --> Z1(AB,EI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z1(AB,EI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(MB,EI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, qprs, 5, 21, "Z2(BA,EI)"); dpd_buf4_close(&Z1); /** Z1(AB,EI) - Z2(BA,EI) --> W'(AB,EI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z1(AB,EI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z2(BA,EI)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /**** Term V ****/ /** WABEI <-- 1/2 tau_MN^AB <MN||EF> t_I^F Evaluate in two steps: (1) Z_MNEI = <MN||EF> t_I^F (2) WABEI <-- 1/2 tau_MN^AB Z_MNEI Store target in W'(AB,EI) **/ /** Z(MN,EI) <-- <MN||EF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 21, 2, 21, 0, "Z(MN,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** tau_MN^AB Z(MN,EI) --> W'(AB,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 21, 2, 21, 0, "Z(MN,EI)"); dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&T2, &Z, &W, 1, 1, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Term VI ****/ /** tau_MN^AB <MN||EI> --> W'(AB,EI) **/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&E, CC_EINTS, 0, 2, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract444(&T2, &E, &W, 1, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&T2); dpd_buf4_close(&W); /**** Term VII ****/ /** WABEI <-- <BM||EF> t_IM^AF + <Bm|Ef> t_Im^Af - <AM||EF> t_IM^BF - <Am|Ef> t_Im^Bf Evaluate in six steps: (1) Sort <BM||EF> and <Bm|Ef> to F(BE,MF) and F(BE,mf) ordering. (2) Z(BE,IA) = F(BE,MF) T(IA,MF) + F(BE,mf) T(IA,mf) (3) Sort Z(BE,IA) --> Z'(EI,AB) (4) Sort Z'(EI,AB) --> Z''(EI,BA) (5) AXPY: Z'(EI,AB) = Z'(EI,AB) - Z''(EI,BA) (6) AXPY: W(EI,AB) <-- Z'(EI,AB) NB: The storage for the sorts is expensive and will eventually require out-of-core codes. **/ /** <BM||EF> --> F(BE,MF) **/ dpd_buf4_init(&F, CC_FINTS, 0, 21, 5, 21, 5, 1, "F <AI|BC>"); dpd_buf4_sort(&F, CC_FINTS, prqs, 5, 20, "F <AI||BC> (AB,IC)"); dpd_buf4_close(&F); /** <Bm|Ef> --> (BE,mf) **/ dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_sort(&F, CC_FINTS, prqs, 5, 30, "F <Ai|Bc> (AB,ic)"); dpd_buf4_close(&F); /** <BM||EF> t_IM^AF --> Z(BE,IA) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 20, 5, 20, 0, "Z(BE,IA)"); dpd_buf4_init(&F, CC_FINTS, 0, 5, 20, 5, 20, 0, "F <AI||BC> (AB,IC)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** <Bm|Ef> t_Im^Af --> Z(BE,IA) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 20, 5, 20, 0, "Z(BE,IA)"); dpd_buf4_init(&F, CC_FINTS, 0, 5, 30, 5, 30, 0, "F <Ai|Bc> (AB,ic)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(BE,IA) --> Z'(EI,AB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 20, 5, 20, 0, "Z(BE,IA)"); dpd_buf4_sort(&Z, CC_TMP0, qrsp, 21, 5, "Z'(EI,AB)"); dpd_buf4_close(&Z); /** Z'(EI,AB) --> Z''(EI,BA) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 21, 5, 21, 5, 0, "Z'(EI,AB)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 21, 5, "Z''(EI,BA)"); dpd_buf4_close(&Z); /** Z'(EI,AB) = Z'(EI,AB) - Z''(EI,BA) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 21, 5, 21, 5, 0, "Z'(EI,AB)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 21, 5, 21, 5, 0, "Z''(EI,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /** W(EI,AB) <-- Z'(EI,AB) **/ dpd_buf4_init(&W, CC_HBAR, 0, 21, 5, 21, 7, 0, "WEIAB"); dpd_buf4_init(&Z, CC_TMP0, 0, 21, 5, 21, 5, 0, "Z'(EI,AB)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Terms VIII and IX ****/ /** WABEI <-- -P(AB) t_M^A { <MB||EI> + t_IN^BF <MN||EF> + t_In^Bf <Mn|Ef> } Evaluate in two steps: (1) Z_MBEI = <MB||EI> + t_IN^BF <MN||EF> + tIn^Bf <Mn|Ef> (2) WABEI <-- - t_M^A Z_MBEI + t_M^B Z_MAEI Store target in W'(AB,EI) **/ /** Z(MB,EI) <-- <MB||EI> **/ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_copy(&C, CC_TMP0, "Z(MB,EI)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(MB,EI)"); dpd_buf4_scm(&Z, -1); dpd_buf4_close(&Z); /** <MN||EF> t_IN^BF --> Z(ME,IB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 20, 20, 20, 0, "Z(ME,IB)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** <Mn|Ef> t_In^Bf --> Z(ME,IB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 20, 20, 20, 0, "Z(ME,IB)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(ME,IB) --> Z(MB,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 20, 20, 20, 0, "Z(ME,IB)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, psqr, 20, 21, "Z(MB,EI)", 1); dpd_buf4_close(&Z); /** Z(AB,EI) <-- -t_M^A Z(MB,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z(AB,EI)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 21, 20, 21, 0, "Z(MB,EI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z1, &Z, 0, 0, 0, -1, 0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); /** Z(AB,EI) --> Z'(BA,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z(AB,EI)"); dpd_buf4_sort(&Z, CC_TMP0, qprs, 5, 21, "Z'(BA,EI)"); dpd_buf4_close(&Z); /** Z(AB,EI) = Z(AB,EI) - Z'(BA,EI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z(AB,EI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z'(BA,EI)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /** Z(AB,EI) --> W'(AB,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "Z(AB,EI)"); dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Combine accumulated W'(AB,EI) and W(EI,AB) terms into WEIAB ****/ dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "W'(AB,EI)"); dpd_buf4_sort_axpy(&W, CC_HBAR, rspq, 21, 7, "WEIAB", 1); dpd_buf4_close(&W); } }} // namespace psi::cchbar ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_ABAB_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000024231�10757640026�015600� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* WAbEi_UHF(): Computes all contributions to the AbEi spin case of ** the Wabei HBAR matrix elements. The final product is stored in ** (Ei,Ab) ordering and is referred to on disk as "WAbEi". ** ** The spin-orbital expression for the Wabei elements is: ** ** Wabei = <ab||ei> - Fme t_mi^ab + t_i^f <ab||ef> ** - P(ab) t_m^b <am||ef>t_i^f + 1/2 tau_mn^ab <mn||ef> t_i^f ** + 1/2 <mn||ei> tau_mn^ab - P(ab) <mb||ef> t_mi^af ** - P(ab) t_m^a { <mb||ei> - t_ni^bf <mn||ef> } ** ** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).) ** ** For the AbEi spin case, we evaluate these contractions with two ** target orderings, (Ab,Ei) and (Ei,Ab), depending on the term. ** After all terms have been evaluated, the (Ab,Ei) terms are sorted ** into (Ei,Ab) ordering and both groups arer added together. ** ** TDC, June 2002 */ void WAbEi_UHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, E, C; /**** Term I ****/ /** W(Ei,Ab) <--- <Ei|Ab> **/ dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_copy(&F, CC_HBAR, "WEiAb"); dpd_buf4_close(&F); /**** Term II ****/ /** W(Ei,Ab) <--- - F_ME t_Mi^Ab **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WEiAb"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /**** Term III ****/ /** <Ab|Ef> t_i^f **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&B, &T1, &W, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_close(&W); /**** Term IV ****/ /** WAbEi <-- - t_m^b <mA|fE> t_i^f - t_M^A <Mb|Ef> t_i^f Evaluate in three steps: (1) Z_mAEi = - <Am|Ef> t_i^f [stored (Am,Ei)] (2) Z_MbEi = <Mb|Ef> t_i^f [stored (Mb,Ei)] (3) WAbEi <-- t_m^b Z_mAEi - t_M^A Z_MbEi Store targets in: W(Ei,Ab) and W'(Ab,Ei) **/ /** Z(Am,Ei) <-- - <Am|Ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, -1, 0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_m^b Z(Am,Ei) --> W(Ei,Ab) **/ dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WEiAb"); dpd_buf4_init(&Z, CC_TMP0, 0, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &W, 1, 0, 0, 1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Z(Mb,Ei) <-- <Mb|Ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** - t_M^A Z(Mb,Ei) --> W'(Ab,Ei) **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "Z(Mb,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &W, 0, 0, 0, -1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Term V ****/ /** WAbEi <-- tau_Mn^Ab <Mn|Ef> t_i^f Evaluate in two steps: (1) Z_MnEi = <Mn|Ef> t_i^f (2) WAbEi <-- tau_Mn^Ab Z_MnEi Store target in W'(Ab,Ei) **/ /** Z(Mn,Ei) <-- <Mn|Ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z(Mn,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** tau_Mn^Ab Z1(Mn,Ei) --> W'(Ab,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 26, 22, 26, 0, "Z(Mn,Ei)"); dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&T2, &Z, &W, 1, 1, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Term VI ****/ /** tau_Mn^Ab <Mn|Ei> --> Z(Ab,Ei) **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract444(&T2, &E, &W, 1, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&T2); dpd_buf4_close(&W); /**** Term VII ****/ /** WAbEi <-- <bM|fE> t_iM^fA - <AM||EF> t_iM^bF - <Am|Ef> t_im^bf Evaluate in five steps: (1) Sort <bM|fE> to F(bE,Mf) ordering. (** Note that we assume a sort has already been done for <AM||EF> and <Am|Ef> in the WABEI and Wabei terms. **) (2) Z'(bE,iA) = F(bE,Mf) T(iA,Mf) (3) Sort Z'(bE,iA) --> W(Ei,Ab) (4) Z''(AE,ib) = - F(AE,MF) T(ib,MF) - F(AE,mf) T(ib,mf) (5) Sort Z''(AE,ib) --> W(Ei,Ab) NB: The storage for the sorts is expensive and will eventually require out-of-core codes. **/ /** <bM|fE> --> F(bE,Mf) **/ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_sort(&F, CC_FINTS, psqr, 29, 24, "F <aI|bC> (aC,Ib)"); dpd_buf4_close(&F); /** <bM|fE> t_iM^fA --> Z(bE,iA) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 29, 27, 29, 27, 0, "Z(bE,iA)"); dpd_buf4_init(&F, CC_FINTS, 0, 29, 24, 29, 24, 0, "F <aI|bC> (aC,Ib)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(bE,iA) --> W(Ei,Ab) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 29, 27, 29, 27, 0, "Z(bE,iA)"); dpd_buf4_sort_axpy(&Z, CC_HBAR, qrsp, 26, 28, "WEiAb", 1); dpd_buf4_close(&Z); /** Z''(AE,ib) <-- - <AM||EF> t_iM^bF **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 30, 5, 30, 0, "Z(AE,ib)"); dpd_buf4_init(&F, CC_FINTS, 0, 5, 20, 5, 20, 0, "F <AI||BC> (AB,IC)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&F, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z''(AE,ib) <-- -<Am|Ef> t_im^bf **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 30, 5, 30, 0, "Z(AE,ib)"); dpd_buf4_init(&F, CC_FINTS, 0, 5, 30, 5, 30, 0, "F <Ai|Bc> (AB,ic)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&F, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z''(AE,ib) --> W(Ei,Ab) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 30, 5, 30, 0, "Z(AE,ib)"); dpd_buf4_sort_axpy(&Z, CC_HBAR, qrps, 26, 28, "WEiAb", 1); dpd_buf4_close(&Z); /**** Terms VIII and IX ****/ /** WAbEi <-- - t_M^A { <Mb|Ei> + t_iN^bF <MN||EF> + t_in^bf <Mn|Ef> } + t_m^b {-<mA|iE> + t_iN^fA <mN|fE> } Evaluate in three steps: (1) Z_MbEi = <Mb|Ei> + t_iN^bF <MN||EF> + tin^bf <Mn|Ef> [stored (Mb,Ei)] (2) Z_mAEi = -<mA|iE> + t_iN^fA <mN|fE> [stored (Am,Ei)] (3) WAbEi <-- - t_M^A Z_MbEi + t_m^b Z_mAEi Store targets in W'(Ab,Ei) and W(Ei,AB) **/ /** Z(Mb,Ei) <-- <Mb|Ei> **/ dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_copy(&D, CC_TMP0, "Z(Mb,Ei)"); dpd_buf4_close(&D); /** <MN||EF> t_iN^bF --> Z(ME,ib) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 30, 20, 30, 0, "Z(ME,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** <Mn|Ef> t_in^bf --> Z(ME,ib) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 30, 20, 30, 0, "Z(ME,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(ME,ib) --> Z(Mb,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 30, 20, 30, 0, "Z(ME,ib)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, psqr, 24, 26, "Z(Mb,Ei)", 1); dpd_buf4_close(&Z); /** W'(Ab,Ei) <-- - t_M^A Z(Mb,Ei) **/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "Z(Mb,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &W, 0, 0, 0, -1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Z(Am,Ei) <-- - <mA|iE> **/ dpd_buf4_init(&C, CC_CINTS, 0, 26, 26, 26, 26, 0, "C <Ai|Bj>"); dpd_buf4_copy(&C, CC_TMP0, "Z(Am,Ei)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_buf4_scm(&Z, -1); dpd_buf4_close(&Z); /** Z(mE,iA) <-- t_iN^fA <mN|fE> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z(mE,iA)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(mE,iA) --> Z(Am,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z(mE,iA)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, spqr, 26, 26, "Z(Am,Ei)", 1); dpd_buf4_close(&Z); /** W(Ei,AB) <-- t_m^b Z_mAEi **/ dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WEiAb"); dpd_buf4_init(&Z, CC_TMP0, 0, 26, 26, 26, 26, 0, "Z(Am,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &W, 1, 0, 0, 1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Combine accumulated W'(Ab,Ei) and W(Ei,Ab) terms into WEiAb ****/ dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "W'(Ab,Ei)"); dpd_buf4_sort_axpy(&W, CC_HBAR, rspq, 26, 28, "WEiAb", 1); dpd_buf4_close(&W); } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_BABA_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000024515�10757640026�015605� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* WaBeI_UHF(): Computes all contributions to the aBeI spin case of ** the Wabei HBAR matrix elements. The final product is stored in ** (eI,aB) ordering and is referred to on disk as "WaBeI". ** ** The spin-orbital expression for the Wabei elements is: ** ** Wabei = <ab||ei> - Fme t_mi^ab + t_i^f <ab||ef> ** - P(ab) t_m^b <am||ef>t_i^f + 1/2 tau_mn^ab <mn||ef> t_i^f ** + 1/2 <mn||ei> tau_mn^ab - P(ab) <mb||ef> t_mi^af ** - P(ab) t_m^a { <mb||ei> - t_ni^bf <mn||ef> } ** ** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).) ** ** For the aBeI spin case, we evaluate these contractions with two ** target orderings, (aB,eI) and (eI,aB), depending on the term. ** After all terms have been evaluated, the (aB,eI) terms are sorted ** into (eI,aB) ordering and both groups arer added together. ** ** TDC, June 2002 */ void WaBeI_UHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, E, C; /**** Term I ****/ /** W(eI,aB) <--- <eI|aB> **/ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_copy(&F, CC_HBAR, "WeIaB"); dpd_buf4_close(&F); /**** Term II ****/ /** W(eI,aB) <--- - F_me t_mI^aB **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WeIaB"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /**** Term III ****/ /** This will require special out-of-core code **/ /** Z(Ie,Ba) <--- t_I^F <Fe|Ba> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 28, 24, 28, 0, "Z(Ie,Ba)"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &B, &Z, 1, 0, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&B); /** Z(Ie,Ba) --> W'(aB,eI) **/ dpd_buf4_sort(&Z, CC_TMP0, srqp, 29, 25, "W'(aB,eI)"); dpd_buf4_close(&Z); /**** Term IV ****/ /** WaBeI <-- - t_M^B <Ma|Fe> t_I^F - t_m^a <mB|eF> t_I^F Evaluate in three steps: (1) Z_MaeI = - <aM|eF> t_I^F [stored (aM,eI)] (2) Z_mBeI = <mB|eF> t_I^F [stored (mB,eI)] (3) WaBeI <-- t_M^B Z_MaeI - t_m^a Z_mBeI Store targets in: W(eI,aB) and W'(aB,eI) **/ /** Z(aM,eI) <-- - <aM|eF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, -1, 0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_M^B Z(aM,eI) --> W(eI,aB) **/ dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WeIaB"); dpd_buf4_init(&Z, CC_TMP0, 0, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &W, 1, 0, 0, 1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Z(mB,eI) <-- <mB|eF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "Z(mB,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** - t_m^a Z(mB,eI) --> W'(aB,eI) **/ dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "W'(aB,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "Z(mB,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &W, 0, 0, 0, -1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Term V ****/ /** WaBeI <-- tau_mN^aB <mN|eF> t_I^F Evaluate in two steps: (1) Z_mNeI = <mN|eF> t_I^F (2) WaBeI <-- tau_mN^aB Z_mNeI Store target in W'(aB,eI) **/ /** Z(mN,eI) <-- <mN|eF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 25, 23, 25, 0, "Z(mN,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** tau_mN^aB Z(mN,eI) --> W'(aB,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 25, 23, 25, 0, "Z(mN,eI)"); dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "W'(aB,eI)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_contract444(&T2, &Z, &W, 1, 1, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Term VI ****/ /** tau_mN^aB <mN|eI> --> W'(aB,eI) **/ dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "W'(aB,eI)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract444(&T2, &E, &W, 1, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&T2); dpd_buf4_close(&W); /**** Term VII ****/ /** WaBeI <-- <Bm|Fe> t_Im^Fa - <am||ef> t_Im^Bf - <aM|eF> t_IM^BF Evaluate in five steps: (1) Sort <Bm|Fe> to F(Be,mF) ordering. (** Note that we assume a sort has already been done for <am||ef> and <aM|eF> in the WABEI and Wabei terms. **) (2) Z'(Be,Ia) = F(Be,mF) T(Ia,mF) (3) Sort Z'(Be,Ia) --> W(eI,aB) (4) Z''(ae,IB) = - F(ae,mf) T(IB,mf) - F(ae,MF) T(IB,MF) (5) Sort Z''(ae,IB) --> W(eI,aB) NB: The storage for the sorts is expensive and will eventually require out-of-core codes. **/ /** <Bm|Fe> --> F(Be,mF) **/ dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_sort(&F, CC_FINTS, psqr, 28, 27, "F <Ai|Bc> (Ac,iB)"); dpd_buf4_close(&F); /** <Bm|Fe> t_Im^Fa --> Z(Be,Ia) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 28, 24, 28, 24, 0, "Z(Be,Ia)"); dpd_buf4_init(&F, CC_FINTS, 0, 28, 27, 28, 27, 0, "F <Ai|Bc> (Ac,iB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(Be,Ia) --> W(eI,aB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 28, 24, 28, 24, 0, "Z(Be,Ia)"); dpd_buf4_sort_axpy(&Z, CC_HBAR, qrsp, 25, 29, "WeIaB", 1); dpd_buf4_close(&Z); /** Z''(ae,IB) <-- - <am||ef> t_Im^Bf **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 20, 15, 20, 0, "Z(ae,IB)"); dpd_buf4_init(&F, CC_FINTS, 0, 15, 30, 15, 30, 0, "F <ai||bc> (ab,ic)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&F, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z''(ae,IB) <-- -<aM|eF> t_IM^BF **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 20, 15, 20, 0, "Z(ae,IB)"); dpd_buf4_init(&F, CC_FINTS, 0, 15, 20, 15, 20, 0, "F <aI|bC> (ab,IC)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&F, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z''(ai,IB) --> W(eI,aB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 20, 15, 20, 0, "Z(ae,IB)"); dpd_buf4_sort_axpy(&Z, CC_HBAR, qrps, 25, 29, "WeIaB", 1); dpd_buf4_close(&Z); /**** Terms VIII and IX ****/ /** WaBeI <-- - t_m^a { <mB|eI> + t_In^Bf <mn||ef> + t_IN^BF <mN|eF> } + t_M^B {-<Ma|Ie> + t_In^Fa <Mn|Fe> } Evaluate in three steps: (1) Z_mBeI = <mB|eI> + t_In^Bf <mn||ef> + tIN^BF <mN|eF> [stored (mB,eI)] (2) Z_MaeI = -<Ma|Ie> + t_In^Fa <Mn|Fe> [stored (aM,eI)] (3) WaBeI <-- - t_m^a Z_mBeI + t_M^B Z_MaeI Store targets in W'(aB,eI) and W(eI,aB) **/ /** Z(mB,eI) <-- <mB|eI> **/ dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_copy(&D, CC_TMP0, "Z(mB,eI)"); dpd_buf4_close(&D); /** <mn||ef> t_In^Bf --> Z(me,IB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 20, 30, 20, 0, "Z(me,IB)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** <mN|eF> t_IN^BF --> Z(me,IB) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 20, 30, 20, 0, "Z(me,IB)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(me,IB) --> Z(mB,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 20, 30, 20, 0, "Z(me,IB)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, psqr, 27, 25, "Z(mB,eI)", 1); dpd_buf4_close(&Z); /** W'(aB,eI) <-- - t_m^a Z(mB,eI) **/ dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "W'(aB,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "Z(mB,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &W, 0, 0, 0, -1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Z(aM,eI) <-- - <Ma|Ie> **/ dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_sort(&C, CC_TMP0, qpsr, 25, 25, "Z(aM,eI)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_buf4_scm(&Z, -1); dpd_buf4_close(&Z); /** Z(Me,Ia) <-- t_In^Fa <Mn|Fe> **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z(Me,Ia)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(Me,Ia) --> Z(aM,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z(Me,Ia)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, spqr, 25, 25, "Z(aM,eI)", 1); dpd_buf4_close(&Z); /** W(eI,aB) <-- t_M^B Z_MaeI **/ dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WeIaB"); dpd_buf4_init(&Z, CC_TMP0, 0, 25, 25, 25, 25, 0, "Z(aM,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &W, 1, 0, 0, 1, 1); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Combine accumulated W'(aB,eI) and W(eI,aB) terms into WeIaB ****/ dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "W'(aB,eI)"); dpd_buf4_sort_axpy(&W, CC_HBAR, rspq, 25, 29, "WeIaB", 1); dpd_buf4_close(&W); } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_BBBB_UHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000023233�10757640026�015603� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wabei_UHF(): Computes all contributions to the abei spin case of ** the Wabei HBAR matrix elements. The final product is stored in ** (ei,ab) ordering and is referred to on disk as "Wabei". ** ** The spin-orbital expression for the Wabei elements is: ** ** Wabei = <ab||ei> - Fme t_mi^ab + t_i^f <ab||ef> ** - P(ab) t_m^b <am||ef>t_i^f + 1/2 tau_mn^ab <mn||ef> t_i^f ** + 1/2 <mn||ei> tau_mn^ab - P(ab) <mb||ef> t_mi^af ** - P(ab) t_m^a { <mb||ei> - t_ni^bf <mn||ef> } ** ** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).) ** ** For the abei spin case, we evaluate these contractions with two ** target orderings, (ab,ei) and (ei,ab), depending on the term. ** After all terms have been evaluated, the (ab,ei) terms are sorted ** into (ei,ab) ordering and both groups arer added together. ** ** TDC, June 2002 */ void Wabei_UHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, E, C; /**** Term I ****/ /** W(ei,ab) <--- <ei||ab> **/ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_copy(&F, CC_HBAR, "Weiab"); dpd_buf4_close(&F); /**** Term II ****/ /** W(ei,ab) <--- - F_me t_mi^ab **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&W, CC_HBAR, 0, 31, 17, 31, 17, 0, "Weiab"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /**** Term III ****/ /** <ab||ef> t_i^f **/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&B, &T1, &W, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_close(&W); /**** Term IV ****/ /** Wabei <-- t_m^b <ma||ef> t_i^f - t_m^a <mb||ef> t_i^f Evaluate in two steps: (1) Z_mbei = <mb||ef> t_i^f (2) Wabei <-- t_m^b Z_maei - t_m^a Z_mbei **/ /** Z(mb,ei) <-- - <mb||ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(mb,ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_m^a Z(mb,ei) --> Z1(ab,ei) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z1(ab,ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(mb,ei)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, qprs, 15, 31, "Z2(ba,ei)"); dpd_buf4_close(&Z1); /** Z1(ab,ei) - Z2(ba,ei) --> Z(ab,ei) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z1(ab,ei)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z2(ba,ei)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z1); /**** Term V ****/ /** Wabei <-- 1/2 tau_mn^ab <mn||ef> t_i^f Evaluate in two steps: (1) Z_mnei = <mn||ei> t_i^f (2) Wabei <-- 1/2 tau_mn^ab Z_mnei Store target in W'(ab,ei) **/ /** Z(mn,ei) <-- <mn||ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 31, 12, 31, 0, "Z(mn,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** tau_mn^ab Z(mn,ei) --> W'(ab,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 12, 31, 12, 31, 0, "Z(mn,ei)"); dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&T2, &Z, &W, 1, 1, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Term VI ****/ /** tau_mn^ab <mn||ei> --> W'(ab,ei) **/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&E, CC_EINTS, 0, 12, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract444(&T2, &E, &W, 1, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&T2); dpd_buf4_close(&W); /**** Term VII ****/ /** Wabei <-- <bm||ef> t_im^af + <bM|eF> t_iM^aF - <am||ef> t_im^bf - <aM|eF> t_iM^bF Evaluate in six steps: (1) Sort <bm||ef> and <bM|eF> to F(be,mf) and F(be,MF) ordering. (2) Z(be,ia) = F(be,mf) T(ia,mf) + F(be,MF) T(ia,MF) (3) Sort Z(be,ia) --> Z'(ei,ab) (4) Sort Z'(ei,ab) --> Z''(ei,ba) (5) AXPY: Z'(ei,ab) = Z'(ei,ab) - Z''(ei,ba) (6) AXPY: W(ei,ab) <-- Z'(ei,ab) NB: The storage for the sorts is expensive and will eventually require out-of-core codes. **/ /** <bm||ef> --> F(be,mf) **/ dpd_buf4_init(&F, CC_FINTS, 0, 31, 15, 31, 15, 1, "F <ai|bc>"); dpd_buf4_sort(&F, CC_FINTS, prqs, 15, 30, "F <ai||bc> (ab,ic)"); dpd_buf4_close(&F); /** <bM|eF> --> (be,MF) **/ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_sort(&F, CC_FINTS, prqs, 15, 20, "F <aI|bC> (ab,IC)"); dpd_buf4_close(&F); /** <bm||ef> t_im^af --> Z(be,ia) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 30, 15, 30, 0, "Z(be,ia)"); dpd_buf4_init(&F, CC_FINTS, 0, 15, 30, 15, 30, 0, "F <ai||bc> (ab,ic)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** <bm|eF> t_iM^aF --> Z(be,ia) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 30, 15, 30, 0, "Z(be,ia)"); dpd_buf4_init(&F, CC_FINTS, 0, 15, 20, 15, 20, 0, "F <aI|bC> (ab,IC)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&F, &T2, &Z, 0, 0, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(be,ia) --> Z'(ei,ab) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 30, 15, 30, 0, "Z(be,ia)"); dpd_buf4_sort(&Z, CC_TMP0, qrsp, 31, 15, "Z'(ei,ab)"); dpd_buf4_close(&Z); /** Z'(ei,ab) --> Z''(ei,ba) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 31, 15, 31, 15, 0, "Z'(ei,ab)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 31, 15, "Z''(ei,ba)"); dpd_buf4_close(&Z); /** Z'(ei,ab) = Z'(ei,ab) - Z''(ei,ba) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 31, 15, 31, 15, 0, "Z'(ei,ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 31, 15, 31, 15, 0, "Z''(ei,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /** W(ei,ab) <-- Z'(ei,ab) **/ dpd_buf4_init(&W, CC_HBAR, 0, 31, 15, 31, 17, 0, "Weiab"); dpd_buf4_init(&Z, CC_TMP0, 0, 31, 15, 31, 15, 0, "Z'(ei,ab)"); dpd_buf4_axpy(&Z, &W, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /**** Terms VIII and IX ****/ /** Wabei <-- -P(ab) t_m^a { <mb||ei> + t_in^bf <mn||ef> + t_iN^bF <mN|eF> } Evaluate in two steps: (1) Z_mbei = <mb||ei> + t_in^bf <mn||ef> + tiN^bF <mN|eF> (2) Wabei <-- - t_m^a Z_mbei + t_m^b Z_maei Store target in W'(ab,ei) **/ /** Z(mb,ei) <-- <mb||ei> **/ dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_copy(&C, CC_TMP0, "Z(mb,ei)"); dpd_buf4_close(&C); dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(mb,ei)"); dpd_buf4_scm(&Z, -1); dpd_buf4_close(&Z); /** <mn||ef> t_in^bf --> Z(me,ib) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 30, 30, 30, 0, "Z(me,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** <mN|eF> t_iN^bF --> Z(me,ib) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 30, 30, 30, 0, "Z(me,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); /** Z(me,ib) --> Z(mb,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 30, 30, 30, 0, "Z(me,ib)"); dpd_buf4_sort_axpy(&Z, CC_TMP0, psqr, 30, 31, "Z(mb,ei)", 1); dpd_buf4_close(&Z); /** Z(ab,ei) <-- -t_m^a Z(mb,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z(ab,ei)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 31, 30, 31, 0, "Z(mb,ei)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract244(&T1, &Z1, &Z, 0, 0, 0, -1, 0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); /** Z(ab,ei) --> Z'(ba,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z(ab,ei)"); dpd_buf4_sort(&Z, CC_TMP0, qprs, 15, 31, "Z'(ba,ei)"); dpd_buf4_close(&Z); /** Z(ab,ei) = Z(ab,ei) - Z'(ba,ei) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z(ab,ei)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z'(ba,ei)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /** Z(ab,ei) --> W'(ab,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "Z(ab,ei)"); dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /**** Combine accumulated W'(ab,ei) and W(ei,ab) terms into Weiab ****/ dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "W'(ab,ei)"); dpd_buf4_sort_axpy(&W, CC_HBAR, rspq, 31, 17, "Weiab", 1); dpd_buf4_close(&W); } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_RHF.cc��������������������������������������������������������������������0000644�0001015�0000765�00000060051�10757640026�015030� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { void build_Z1(void); void ZFW(dpdbuf4 *Z, dpdbuf4 *F, dpdbuf4 *W, double alpha, double beta); /* Wabei_RHF(): Builds the Wabei HBAR matrix elements for CCSD for ** spin-adapted, closed-shell cases. (Numbering of individual terms ** is given in Wabei.c.) This version produces a final storage of ** (Ei,Ab), uses only <ia|bc>-type F integrals, and avoids producing ** any intermediates of v^3 storage, beyond the final target. In ** addition, all memory bottlenecks larger than v^3. ** ** -TDC, 7/05 */ void Wabei_RHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, C, F1, F2, W1, W2, Tau; double value; int Gef, Gei, Gab, Ge, Gi, Gf, Gmi, Gm, nrows, ncols, nlinks, EE, e, row, Gnm; int Gma, ma, m, a, Ga, Gb, I, i, mi, E, ei, ab, ba, b, BB, fb, bf, fe, ef, mb, am; double ***WW1, ***WW2; int h, incore, core_total, rowtot, coltot, maxrows; /** Term I **/ /** <Ei|Ab> **/ if(params.print & 2) { fprintf(outfile, "\tF -> Wabei..."); fflush(outfile); } dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_HBAR, qpsr, 11, 5, "WAbEi (Ei,Ab)"); dpd_buf4_close(&F); if(params.print & 2) fprintf(outfile, "done.\n"); /** Term II **/ /** - F_ME t_Mi^Ab **/ if(params.print & 2) { fprintf(outfile, "\tFME*T2 -> Wabei..."); fflush(outfile); } dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&Fme); dpd_file2_mat_rd(&Fme); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); for(Gei=0; Gei < moinfo.nirreps; Gei++) { Gmi = Gab = Gei; /* W and T2 are totally symmetric */ dpd_buf4_mat_irrep_init(&T2, Gmi); dpd_buf4_mat_irrep_rd(&T2, Gmi); row = 0; for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gm = Ge; /* Fme is totally symmetric */ Gi = Gm ^ Gmi; W.matrix[Gei] = dpd_block_matrix(moinfo.occpi[Gi], W.params->coltot[Gei]); nrows = moinfo.occpi[Gm]; ncols = moinfo.occpi[Gi] * W.params->coltot[Gei]; if(nrows && ncols) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&W, Gei, W.row_offset[Gei][e], moinfo.occpi[Gi]); C_DGEMV('t',nrows,ncols,-1.0,&T2.matrix[Gmi][row][0],ncols,&Fme.matrix[Gm][0][E], moinfo.virtpi[Ge],1.0,W.matrix[Gei][0],1); dpd_buf4_mat_irrep_wrt_block(&W, Gei, W.row_offset[Gei][e], moinfo.occpi[Gi]); } } row += moinfo.occpi[Gm] * moinfo.occpi[Gi]; dpd_free_block(W.matrix[Gei], moinfo.occpi[Gi], W.params->coltot[Gei]); } dpd_buf4_mat_irrep_close(&T2, Gmi); } dpd_buf4_close(&W); dpd_file2_mat_close(&Fme); dpd_file2_close(&Fme); dpd_buf4_close(&T2); if(params.print & 2) fprintf(outfile, "done.\n"); /** Term IIIa **/ /** <Ab|Ef> t_i^f **/ if(params.print & 2) { fprintf(outfile, "\tB*T1 -> Wabei..."); fflush(outfile); } /* Term re-written to use only (Ei,Ab) ordering on the target, TDC, 5/11/05 */ /* Code modified to use only symmetric and antisymmetry <ab|cd> ints, TDC, 9/25/05 */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 8, 11, 8, 0, "Z1(ei,a>=b)"); dpd_buf4_scm(&Z1, 0.0); /* this scm is necessary for cases with empty occpi or virtpi irreps */ for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* T1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z1.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z1.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z1.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,T1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z1.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z1, Gei, Z1.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z1.matrix[Gef], moinfo.occpi[Gi], Z1.params->coltot[Gei]); } } dpd_buf4_close(&Z1); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 5, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 9, 11, 9, 0, "Z2(ei,a>=b)"); dpd_buf4_scm(&Z2, 0.0); /* this scm is necessary for cases with empty occpi or virtpi irreps */ for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gei = Gab = Gef; /* W and B are totally symmetric */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf; /* T1 is totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z2.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z2.params->coltot[Gei]); nrows = moinfo.occpi[Gi]; ncols = Z2.params->coltot[Gef]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,T1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z2.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z2, Gei, Z2.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z2.matrix[Gef], moinfo.occpi[Gi], Z2.params->coltot[Gei]); } } dpd_buf4_close(&Z2); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 8, 0, "Z1(ei,a>=b)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 9, 0, "Z2(ei,a>=b)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_buf4_axpy(&Z1, &W, 1); dpd_buf4_axpy(&Z2, &W, 1); dpd_buf4_close(&W); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); if(params.print & 2) fprintf(outfile, "done.\n"); /** Terms IIIc + IIId + IV **/ if(params.print & 2) { fprintf(outfile, "\tD*T1*T2 + E*T2 -> Wabei..."); fflush(outfile); } dpd_buf4_init(&Z, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (nM,eI)"); dpd_buf4_sort(&Z, CC_HBAR, rspq, 11, 0, "WMnIe (eI,nM)"); dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_buf4_init(&Z, CC_HBAR, 0, 11, 0, 11, 0, 0, "WMnIe (eI,nM)"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); /* dpd_contract444(&Z, &T, &W, 1, 1, 1, 1); */ for(Gei=0; Gei < moinfo.nirreps; Gei++) { Gab = Gnm = Gei; /* Everything is totally symmetric here */ nrows = T.params->rowtot[Gnm]; ncols = T.params->coltot[Gab]; if(nrows && ncols) { dpd_buf4_mat_irrep_init(&Z, Gei); dpd_buf4_mat_irrep_rd(&Z, Gei); dpd_buf4_mat_irrep_init(&T, Gnm); dpd_buf4_mat_irrep_rd(&T, Gnm); dpd_buf4_mat_irrep_row_init(&W, Gei); for(ei=0; ei < W.params->rowtot[Gei]; ei++) { dpd_buf4_mat_irrep_row_rd(&W, Gei, ei); C_DGEMV('t',nrows,ncols,1,T.matrix[Gei][0],ncols,Z.matrix[Gei][ei],1, 1,W.matrix[Gei][0],1); dpd_buf4_mat_irrep_row_wrt(&W, Gei, ei); } dpd_buf4_mat_irrep_row_close(&W, Gei); dpd_buf4_mat_irrep_close(&T, Gnm); dpd_buf4_mat_irrep_close(&Z, Gei); } } dpd_buf4_close(&T); dpd_buf4_close(&Z); dpd_buf4_close(&W); if(params.print & 2) fprintf(outfile, "done.\n"); /*** Terms IIIB + V ***/ /* Wabei <-- Z1(mi,fb) <ma|fe> - t(mi,fb) <ma|ef> - tau(mi,af) <mb|ef> */ if(params.print & 2) { fprintf(outfile, "\t(T2+T1*T1) * F -> Wabei..."); fflush(outfile); } build_Z1(); /* Z1(ib,mf) = 2 t(mi,fb) - t(mi,bf) - t(m,b) t(i,f) */ /* The default algorithm for terms IIIb+V requires storage of two additional ** ovvv quantities on disk besides the <ia|bc> integrals and the Wabei target. */ if(!params.wabei_lowdisk) { dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, prsq, 10, 5, "F <ia|bc> (ib,ca)"); dpd_buf4_close(&F); /* can we run these contractions fully in core? */ incore = 1; core_total = 0; for(h=0; h < moinfo.nirreps; h++) { coltot = F.params->coltot[h]; if(coltot) maxrows = DPD_BIGNUM/coltot; if(maxrows < 1) { fprintf(stderr, "\nWabei_RHF Error: A single row of ovvv > 2 GW.\n"); exit(PSI_RETURN_FAILURE); } else maxrows = DPD_BIGNUM; rowtot = F.params->rowtot[h]; for(; rowtot > maxrows; rowtot -= maxrows) { if(core_total > (core_total + 2*maxrows*coltot)) incore = 0; else core_total += 2*maxrows*coltot; } if(core_total > (core_total + 2*rowtot*coltot)) incore = 0; core_total += 2*rowtot*coltot; } if(core_total > dpd_memfree()) incore = 0; if(!incore && (params.print & 2)) fprintf(outfile, "\nUsing out-of-core algorithm for (T2+T1*T1)*F -> Wabei.\n"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 5, 10, 5, 0, "W(ib,ea)"); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F <ia|bc> (ib,ca)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z1(ib,mf)"); if(incore) dpd_contract444(&Z, &F, &W, 0, 1, 1, 0); else ZFW(&Z, &F, &W, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Z, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); if(incore) dpd_contract444(&Z, &F, &W, 0, 1, -1, 1); else ZFW(&Z, &F, &W, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&F); dpd_buf4_sort_axpy(&W, CC_HBAR, rpsq, 11, 5, "WAbEi (Ei,Ab)", 1); dpd_buf4_close(&W); psio_close(CC_TMP0, 0); /* delete the extra ovvv quantities on disk */ psio_open(CC_TMP0, PSIO_OPEN_NEW); dpd_buf4_init(&W, CC_TMP0, 0, 10, 5, 10, 5, 0, "W(ia,eb)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Z, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tauIjAb (Ib,jA)"); if(incore) dpd_contract444(&Z, &F, &W, 0, 1, -1, 0); else ZFW(&Z, &F, &W, -1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&F); dpd_buf4_sort_axpy(&W, CC_HBAR, rpqs, 11, 5, "WAbEi (Ei,Ab)", 1); dpd_buf4_close(&W); psio_close(CC_TMP0, 0); /* delete the extra ovvv quantity on disk */ psio_open(CC_TMP0, PSIO_OPEN_NEW); } /* This is an alternative algorithm for terms IIIb+V that stores no additional ** ovvv terms beyond <ia|bc> integrals and the WAbEi target, but it's very slow. */ else { if(params.print & 2) fprintf(outfile, "\nUsing low-disk algorithm for (T2+T1*T1)*F -> Wabei.\n"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); /* prepare rows of W in advance */ for(Gei=0; Gei < moinfo.nirreps; Gei++) dpd_buf4_mat_irrep_row_init(&W, Gei); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z1(ib,mf)"); dpd_buf4_sort(&Z, CC_TMP0, rpsq, 0, 5, "Z1(mi,fb)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z1(mi,fb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); WW1 = (double ***) malloc(moinfo.nirreps * sizeof(double **)); WW2 = (double ***) malloc(moinfo.nirreps * sizeof(double **)); for(Gma=0; Gma < moinfo.nirreps; Gma++) { dpd_buf4_mat_irrep_row_init(&F, Gma); for(ma=0; ma < F.params->rowtot[Gma]; ma++) { m = F.params->roworb[Gma][ma][0]; a = F.params->roworb[Gma][ma][1]; Gm = F.params->psym[m]; Ga = F.params->qsym[a]; dpd_buf4_mat_irrep_row_rd(&F, Gma, ma); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Gmi = Gm ^ Gi; dpd_buf4_mat_irrep_row_init(&Z, Gmi); dpd_buf4_mat_irrep_row_init(&T2, Gmi); dpd_buf4_mat_irrep_row_init(&Tau, Gmi); /* allocate space for WW1 target */ for(Gf=0; Gf < moinfo.nirreps; Gf++) { Gb = Gf ^ Gmi; /* Z is totally symmetric */ Ge = Gf ^ Gma; /* F is totally symmetric */ WW1[Gb] = dpd_block_matrix(moinfo.virtpi[Gb], moinfo.virtpi[Ge]); WW2[Gb] = dpd_block_matrix(moinfo.virtpi[Gb], moinfo.virtpi[Ge]); } for(I=0; I < moinfo.occpi[Gi]; I++) { i = moinfo.occ_off[Gi] + I; mi = Z.params->rowidx[m][i]; dpd_buf4_mat_irrep_row_rd(&Z, Gmi, mi); dpd_buf4_mat_irrep_row_rd(&T2, Gmi, mi); dpd_buf4_mat_irrep_row_rd(&Tau, Gmi, mi); for(Gf=0; Gf < moinfo.nirreps; Gf++) { Gb = Gf ^ Gmi; /* Z is totally symmetric */ Ge = Gf ^ Gma; /* F is totally symmetric */ Gei = Ge ^ Gi; nrows = moinfo.virtpi[Gb]; ncols = moinfo.virtpi[Ge]; nlinks = moinfo.virtpi[Gf]; fb = Z.col_offset[Gmi][Gf]; bf = Z.col_offset[Gmi][Gb]; fe = F.col_offset[Gma][Gf]; ef = F.col_offset[Gma][Ge]; if(nrows && ncols && nlinks) { C_DGEMM('t','n',nrows,ncols,nlinks,1,&(Z.matrix[Gmi][0][fb]),nrows, &(F.matrix[Gma][0][fe]),ncols,0,WW1[Gb][0],ncols); C_DGEMM('t','t',nrows,ncols,nlinks,-1,&(T2.matrix[Gmi][0][fb]),nrows, &(F.matrix[Gma][0][ef]),nlinks,1,WW1[Gb][0],ncols); C_DGEMM('n','t',nrows,ncols,nlinks,-1,&(Tau.matrix[Gmi][0][bf]),nlinks, &(F.matrix[Gma][0][ef]),nlinks,0,WW2[Gb][0],ncols); } for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; ei = W.params->rowidx[e][i]; dpd_buf4_mat_irrep_row_rd(&W, Gei, ei); for(BB=0; BB < moinfo.virtpi[Gb]; BB++) { b = moinfo.vir_off[Gb] + BB; ab = W.params->colidx[a][b]; ba = W.params->colidx[b][a]; W.matrix[Gei][0][ab] += WW1[Gb][BB][E]; W.matrix[Gei][0][ba] += WW2[Gb][BB][E]; } dpd_buf4_mat_irrep_row_wrt(&W, Gei, ei); } } /* Gf */ } /* I */ dpd_buf4_mat_irrep_row_close(&Z, Gmi); dpd_buf4_mat_irrep_row_close(&T2, Gmi); dpd_buf4_mat_irrep_row_close(&Tau, Gmi); } /* Gi */ /* free W1 target */ for(Gf=0; Gf < moinfo.nirreps; Gf++) { Gb = Gf ^ Gmi; /* Z is totally symmetric */ Ge = Gf ^ Gma; /* F is totally symmetric */ dpd_free_block(WW1[Gb],moinfo.virtpi[Gb], moinfo.virtpi[Ge]); dpd_free_block(WW2[Gb],moinfo.virtpi[Gb], moinfo.virtpi[Ge]); } } /* ma */ dpd_buf4_mat_irrep_row_close(&F, Gma); } /* Gma */ free(WW1); free(WW2); dpd_buf4_close(&Tau); dpd_buf4_close(&T2); dpd_buf4_close(&Z); dpd_buf4_close(&F); for(Gei=0; Gei < moinfo.nirreps; Gei++) dpd_buf4_mat_irrep_row_close(&W, Gei); dpd_buf4_close(&W); } if(params.print & 2) fprintf(outfile, "done.\n"); /** Terms VI and VII **/ /** t_in^bf <Mn|Ef> + t_iN^bF <MN||EF> --> Z1_MEib **/ if(params.print & 2) { fprintf(outfile, "\tT1*(C+D*T2) -> Wabei..."); fflush(outfile); } dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ME,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&D, &T2, &Z, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_sort(&Z, CC_TMP0, qrps, 11, 10, "Z(Ei,Mb)"); dpd_buf4_close(&Z); /** - t_M^A ( <Ei|Mb> + Z(Ei,Mb) ) --> W(Ei,Ab) **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort_axpy(&D, CC_TMP0, spqr, 11, 10, "Z(Ei,Mb)", 1); dpd_buf4_close(&D); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "Z(Ei,Mb)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); /* dpd_contract244(&T1, &Z, &W, 0, 2, 1, -1, 1); */ dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(Gei=0; Gei < moinfo.nirreps; Gei++) { dpd_buf4_mat_irrep_init(&Z, Gei); dpd_buf4_mat_irrep_rd(&Z, Gei); dpd_buf4_mat_irrep_row_init(&W, Gei); for(ei=0; ei < Z.params->rowtot[Gei]; ei++) { dpd_buf4_mat_irrep_row_rd(&W, Gei, ei); for(Gm=0; Gm < moinfo.nirreps; Gm++) { Ga = Gm; /* T1 is totally symmetric */ Gb = Gm ^ Gei; /* Z is totally symmetric */ nrows = moinfo.virtpi[Ga]; ncols = moinfo.virtpi[Gb]; nlinks = moinfo.occpi[Gm]; mb = Z.col_offset[Gei][Gm]; ab = W.col_offset[Gei][Ga]; if(nrows && ncols && nlinks) C_DGEMM('t','n',nrows,ncols,nlinks,-1,T1.matrix[Gm][0],nrows, &(Z.matrix[Gei][ei][mb]),ncols,1,&(W.matrix[Gei][0][ab]),ncols); } dpd_buf4_mat_irrep_row_wrt(&W, Gei, ei); } dpd_buf4_mat_irrep_close(&Z, Gei); } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** - t_Ni^Af <mN|fE> --> Z2_mEiA **/ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(mE,iA)"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, qrsp, 11, 11, "Z(Ei,Am)"); dpd_buf4_close(&Z); /** t_m^b ( - <mA|iE> + Z(mA,iE) ) --> Z2(Ab,Ei) **/ dpd_buf4_init(&C, CC_CINTS, 0, 11, 11, 11, 11, 0, "C <ai|bj>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(Ei,Am)"); dpd_buf4_axpy(&C, &Z, -1.0); dpd_buf4_close(&C); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); /* dpd_contract424(&Z, &T1, &W, 3, 0, 0, 1, 1); */ dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); for(Gei=0; Gei < moinfo.nirreps; Gei++) { dpd_buf4_mat_irrep_init(&Z, Gei); dpd_buf4_mat_irrep_rd(&Z, Gei); dpd_buf4_mat_irrep_row_init(&W, Gei); for(ei=0; ei < Z.params->rowtot[Gei]; ei++) { dpd_buf4_mat_irrep_row_rd(&W, Gei, ei); for(Gm=0; Gm < moinfo.nirreps; Gm++) { Gb = Gm; /* T1 is totally symmetric */ Ga = Gm ^ Gei; /* Z is totally symmetric */ nrows = moinfo.virtpi[Ga]; ncols = moinfo.virtpi[Gb]; nlinks = moinfo.occpi[Gm]; am = Z.col_offset[Gei][Ga]; ab = W.col_offset[Gei][Ga]; if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,1,&(Z.matrix[Gei][ei][am]),nlinks, T1.matrix[Gm][0],ncols,1,&(W.matrix[Gei][0][ab]),ncols); } dpd_buf4_mat_irrep_row_wrt(&W, Gei, ei); } dpd_buf4_mat_irrep_close(&Z, Gei); } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&W); dpd_buf4_close(&Z); if(params.print & 2) fprintf(outfile, "done.\n"); } /* ** Generate intermediate needed for efficient evaluation of ** <am||ef> contributions to Wabei HBAR elements: ** ** Z1(ib,mf) = 2 t(mi,fb) - t(im,fb) - t(i,f) * t(m,b) ** ** TDC, 7/10/05 */ void build_Z1(void) { dpdbuf4 T2, Z1; dpdfile2 T1; int h, row, col, p, q, r, s, P, Q, R, S, psym, qsym, rsym, ssym; dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_buf4_copy(&T2, CC_TMP0, "Z1(ib,mf)"); dpd_buf4_close(&T2); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z1(ib,mf)"); for(h=0; h < moinfo.nirreps; h++) { dpd_buf4_mat_irrep_init(&Z1, h); dpd_buf4_mat_irrep_rd(&Z1, h); for(row=0; row < Z1.params->rowtot[h]; row++) { p = Z1.params->roworb[h][row][0]; q = Z1.params->roworb[h][row][1]; P = T1.params->rowidx[p]; Q = T1.params->colidx[q]; psym = T1.params->psym[p]; qsym = T1.params->qsym[q]; for(col=0; col < Z1.params->coltot[h]; col++) { r = Z1.params->colorb[h][col][0]; s = Z1.params->colorb[h][col][1]; R = T1.params->rowidx[r]; S = T1.params->colidx[s]; rsym = T1.params->psym[r]; ssym = T1.params->qsym[s]; if(qsym == rsym && psym == ssym) Z1.matrix[h][row][col] -= T1.matrix[rsym][R][Q] * T1.matrix[psym][P][S]; } } dpd_buf4_mat_irrep_wrt(&Z1, h); dpd_buf4_mat_irrep_close(&Z1, h); } dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_buf4_close(&Z1); } /* ** ZFW(): Compute the product: ** ** W(ib,ea) = alpha * Z(ib,mf) * F(mf,ea) + beta * W(ib,ea) ** ** This algorithm uses all the available core by first storing all of ** Z(ib,mf) and splitting the remainder between F and W. It then ** makes a single pass through the W(ib,ea) file, but multiple passes ** through the F(mf,ea) file. ** ** Note that in this code, I think beta can be only 0 or 1. ** ** TDC, 8/05 ** */ void ZFW(dpdbuf4 *Z, dpdbuf4 *F, dpdbuf4 *W, double alpha, double beta) { int Gib, Gea, Gmf; int m, n; int rows_per_bucket, nbuckets, rows_left; int W_row_start, F_row_start; int nrows, ncols, nlinks; for(Gib=0; Gib < moinfo.nirreps; Gib++) { Gea = Gmf = Gib; /* F and W are totally symmetric */ dpd_buf4_mat_irrep_init(Z, Gib); dpd_buf4_mat_irrep_rd(Z, Gib); /* how many rows of F/W can we store in half the remaining core? */ rows_per_bucket = dpd_memfree()/(2 * F->params->coltot[Gea]); if(rows_per_bucket > F->params->rowtot[Gib]) rows_per_bucket = F->params->rowtot[Gib]; nbuckets = (int) ceil((double) F->params->rowtot[Gib]/(double) rows_per_bucket); rows_left = F->params->rowtot[Gib] % rows_per_bucket; /* allocate space for the full buckets */ dpd_buf4_mat_irrep_init_block(F, Gib, rows_per_bucket); dpd_buf4_mat_irrep_init_block(W, Gib, rows_per_bucket); ncols = W->params->coltot[Gea]; for(m=0; m < (rows_left ? nbuckets-1 : nbuckets); m++) { W_row_start = m*rows_per_bucket; zero_arr(W->matrix[Gib][0], rows_per_bucket*ncols); if(beta == 1.0) dpd_buf4_mat_irrep_rd_block(W, Gib, W_row_start, rows_per_bucket); for(n=0; n < (rows_left ? nbuckets-1 : nbuckets); n++) { F_row_start = n*rows_per_bucket; dpd_buf4_mat_irrep_rd_block(F, Gib, F_row_start, rows_per_bucket); nrows = rows_per_bucket; nlinks = rows_per_bucket; if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, alpha, &(Z->matrix[Gib][W_row_start][F_row_start]), Z->params->coltot[Gmf], F->matrix[Gmf][0], ncols, 1, W->matrix[Gib][0], ncols); } if(rows_left) { F_row_start = n*rows_per_bucket; dpd_buf4_mat_irrep_rd_block(F, Gib, F_row_start, rows_left); nrows = rows_per_bucket; nlinks = rows_left; if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, alpha, &(Z->matrix[Gib][W_row_start][F_row_start]), Z->params->coltot[Gmf], F->matrix[Gmf][0], ncols, 1, W->matrix[Gib][0], ncols); } dpd_buf4_mat_irrep_wrt_block(W, Gib, W_row_start, rows_per_bucket); } if(rows_left) { W_row_start = m*rows_per_bucket; zero_arr(W->matrix[Gib][0], rows_per_bucket*ncols); if(beta == 1.0) dpd_buf4_mat_irrep_rd_block(W, Gib, W_row_start, rows_left); for(n=0; n < (rows_left ? nbuckets-1 : nbuckets); n++) { F_row_start = n*rows_per_bucket; dpd_buf4_mat_irrep_rd_block(F, Gib, F_row_start, rows_per_bucket); nrows = rows_left; nlinks = rows_per_bucket; if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, alpha, &(Z->matrix[Gib][W_row_start][F_row_start]), Z->params->coltot[Gmf], F->matrix[Gmf][0], ncols, 1, W->matrix[Gib][0], ncols); } if(rows_left) { F_row_start = n*rows_per_bucket; dpd_buf4_mat_irrep_rd_block(F, Gib, F_row_start, rows_left); nrows = rows_left; nlinks = rows_left; if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, alpha, &(Z->matrix[Gib][W_row_start][F_row_start]), Z->params->coltot[Gmf], F->matrix[Gmf][0], ncols, 1, W->matrix[Gib][0], ncols); } dpd_buf4_mat_irrep_wrt_block(W, Gib, W_row_start, rows_left); } /* m */ dpd_buf4_mat_irrep_close_block(F, Gib, rows_per_bucket); dpd_buf4_mat_irrep_close_block(W, Gib, rows_per_bucket); dpd_buf4_mat_irrep_close(Z, Gib); } /* Gib */ } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_RHF_FT2_a.cc��������������������������������������������������������������0000644�0001015�0000765�00000010465�10757640026�016007� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wabei_RHF_FT2_a(): Computes the following contribution to the Wabei HBAR ** matrix elements for RHF references: ** ** Z_aeib = <am|ef> [ 2 t_mi^fb - t_mi^bf ] - <mf|ae> t_mi^fb ** ** This is the final term of the Wabef HBAR element's contribution to Wabei. ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).] ** ** TDC, March 2004 */ void Wabei_RHF_FT2_a(void) { int h, nirreps; int Gam, Ga, Gm; int Gef, Gmf, Ge, Gf, Gae; int a, A, e, E, m, M, f, FF; int mf, am , ef; int *virtpi, *vir_off, *occpi, *occ_off; double ***W; double value; dpdbuf4 F, T2, Z; nirreps = moinfo.nirreps; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; occpi = moinfo.occpi; occ_off = moinfo.occ_off; /* Zaeib <-- - <mf|ae> t_mi^fb */ /**** this contraction still requires storage of a full <ia|bc> set *****/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&Z, CC_TMP2, 0, 5, 10, 5, 10, 0, "Z(AE,ib)"); dpd_contract444(&F, &T2, &Z, 1, 1, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /* Zaeib <-- <am|ef> [ 2 t_mi^fb - t_mi^bf ] */ dpd_buf4_init(&Z, CC_TMP2, 0, 5, 10, 5, 10, 0, "Z(AE,ib)"); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); } W = (double ***) malloc(nirreps * sizeof(double **)); for(Ga=0; Ga < nirreps; Ga++) { /* allocate space for the input integrals */ for(Gm=0; Gm < nirreps; Gm++) { Gam = Ga^Gm; F.matrix[Gam] = dpd_block_matrix(occpi[Gm], F.params->coltot[Gam]); } /* allocate space for the reordered integrals, W[e][mf] and target, Z[e][ib] */ for(Ge=0; Ge < nirreps; Ge++) { Gae = Ga^Ge; Gmf = Gae; W[Ge] = dpd_block_matrix(virtpi[Ge], Z.params->coltot[Gmf]); Z.matrix[Gae] = dpd_block_matrix(virtpi[Ge], Z.params->coltot[Gmf]); } for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(Gm=0; Gm < nirreps; Gm++) { Gam = Ga^Gm; Gef = Gam; /* read all <am|ef> integrals for given orbital index a --> F[m][ef] */ dpd_buf4_mat_irrep_rd_block(&F, Gam, F.params->start13[Gam][A], occpi[Gm]); } for(Ge=0; Ge < nirreps; Ge++) { Gae = Ga^Ge; Gmf = Gae; /* sort F[m][ef] --> W[e][mf] */ for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; for(Gm=0; Gm < nirreps; Gm++) { Gf = Gmf^Gm; Gam = Ga^Gm; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; for(f=0; f < virtpi[Gf]; f++) { FF = vir_off[Gf] + f; mf = Z.params->colidx[M][FF]; am = F.params->rowidx[A][M]; ef = F.params->colidx[E][FF]; W[Ge][e][mf] = F.matrix[Gam][am-F.params->start13[Gam][A]][ef]; } /* f */ } /* m */ } /* Gm */ } /* e */ /* read all existing Z(ae,ib) for a given orbital index a --> Z[e][ib] */ dpd_buf4_mat_irrep_rd_block(&Z, Gae, Z.params->start13[Gae][A], virtpi[Ge]); /* contract W[e][mf] * T[mf][ib] -> Z[e][ib] */ if(virtpi[Ge] && Z.params->coltot[Gmf]) C_DGEMM('n','n', virtpi[Ge], Z.params->coltot[Gmf], Z.params->coltot[Gmf], 1.0, W[Ge][0], Z.params->coltot[Gmf], T2.matrix[Gmf][0], Z.params->coltot[Gmf], 1.0, Z.matrix[Gae][0], Z.params->coltot[Gmf]); /* write out the new Z(ae,ib) */ dpd_buf4_mat_irrep_wrt_block(&Z, Gae, Z.params->start13[Gae][A], virtpi[Ge]); } /* Ge */ } /* a */ for(Gm=0; Gm < nirreps; Gm++) { Gam = Ga^Gm; dpd_free_block(F.matrix[Gam], occpi[Gm], F.params->coltot[Gam]); } for(Ge=0; Ge < nirreps; Ge++) { Gae = Ga^Ge; Gmf = Gae; dpd_free_block(W[Ge], virtpi[Ge], Z.params->coltot[Gmf]); dpd_free_block(Z.matrix[Gae], virtpi[Ge], Z.params->coltot[Gmf]); } } /* Ga */ for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_close(&T2); dpd_buf4_sort_axpy(&Z, CC_HBAR, prqs, 11, 5, "WAbEi (Ei,Ab)", 1); dpd_buf4_close(&Z); dpd_buf4_close(&F); } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabei_ROHF.cc�������������������������������������������������������������������0000644�0001015�0000765�00000106654�10757640026�015161� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /** Wabei intermediates are stored here as (ei,ab) **/ void Wabei_ROHF(void) { dpdfile2 Fme, T1; dpdbuf4 F, W, T2, B, Z, Z1, Z2, D, T, E, C; dpd_buf4_init(&F, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); /** <EI||AB> **/ dpd_buf4_sort(&F, CC_HBAR, qprs, 11, 7, "WEIAB"); /** <ei||ab> **/ dpd_buf4_sort(&F, CC_HBAR, qprs, 11, 7, "Weiab"); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_buf4_scm(&W, -1.0); dpd_buf4_close(&W); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); /** <iE|bA> **/ dpd_buf4_sort(&F, CC_TMP0, qprs, 11, 5, "W(Ei,bA)"); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "W(Ei,bA)"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 11, 5, "WEiAb"); dpd_buf4_close(&W); /** <Ie|Ba> **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_copy(&W, CC_HBAR, "WeIaB"); dpd_buf4_close(&W); /** - F_ME t_MI^AB **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /** - F_me t_mi^ab **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /** - F_ME t_Mi^Ab **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /** - F_me t_mI^aB **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_contract244(&Fme, &T2, &W, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&Fme); dpd_buf4_close(&T2); /** <AB||EF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 7, 11, 7, 11, 0, "Z(AB,EI)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&B, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_sort(&Z, CC_TMP1, rspq, 11, 7, "Z(EI,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 7, 11, 7, 0, "Z(EI,AB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <ab||ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 7, 11, 7, 11, 0, "Z(ab,ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&B, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_sort(&Z, CC_TMP1, rspq, 11, 7, "Z(ei,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 7, 11, 7, 0, "Z(ei,ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <Ab|Ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z(Ab,Ei)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&B, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_sort(&Z, CC_TMP1, rspq, 11, 5, "Z(Ei,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(Ei,Ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** - <Fe|Ba> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z(aB,eI)"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&B, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&B); dpd_buf4_sort(&Z, CC_TMP1, rspq, 11, 5, "Z(eI,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(eI,aB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** Prepare intermediates for second Wabef contribution to Wabei **/ /** Z(MA,EI) <-- <MA||EF> t_I^F **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(MA,EI)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_M^B Z(MA,EI) --> Z'(BA,EI) --> Z1(AB,EI) **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(BA,EI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(MA,EI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP2, qprs, 5, 11, "Z(AB,EI)"); dpd_buf4_close(&Z1); /** t_M^A Z(MB,EI) --> Z2(AB,EI) **/ dpd_buf4_init(&Z2, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(AB,EI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(MA,EI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); /** Z1(AB,EI) + Z2(AB,EI) --> W(AB,EI) --> W(EI,AB) **/ dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(AB,EI)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, rspq, 11, 5, "Z(EI,AB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(EI,AB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z2); /** Z(ma,ei) <-- <ma||ef> t_i^f **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(ma,ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_m^b Z(ma,ei) --> Z'(ba,ei) --> Z1(ab,ei) **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(ba,ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(ma,ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP2, qprs, 5, 11, "Z(ab,ei)"); dpd_buf4_close(&Z1); /** t_m^a Z(mb,ei) --> Z2(ab,ei) **/ dpd_buf4_init(&Z2, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(ab,ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(ma,ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); /** Z1(ab,ei) + Z2(ab,ei) --> W(ab,ei) --> W(ie,ab) **/ dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(ab,ei)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, rspq, 11, 5, "Z(ei,ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(ei,ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z2); /** t_i^f <mA|fE> --> Z(mA,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(mA,iE)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &F, &Z, 1, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP1, pqsr, 10, 11, "Z(mA,Ei)"); dpd_buf4_close(&Z); /** <Mb|Ef> t_i^f --> Z(Mb,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(Mb,Ei)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** - T_M^A Z(Mb,Ei) --> Z(Ab,Ei) **/ dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(Ab,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(Mb,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); /** - t_m^b Z(mA,Ei) --> Z1(Ab,Ei) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(bA,Ei)"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(mA,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 5, 11, "Z(Ab,Ei)"); dpd_buf4_close(&Z1); /** Z1(Ab,Ei) + Z2(Ab,Ei) --> W(Ab,Ei) **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(Ab,Ei)"); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(Ab,Ei)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, rspq, 11, 5, "Z(Ei,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(Ei,Ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** t_I^F <Ma|Fe> --> Z(Ma,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Ma,Ie)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &F, &Z, 1, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP1, pqsr, 10, 11, "Z(Ma,eI)"); dpd_buf4_close(&Z); /** <mB|eF> t_I^F --> Z(mB,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(mB,eI)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&F, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** t_m^a Z(mB,eI) --> Z(aB,eI) **/ dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(aB,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(mB,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); /** t_M^B Z(Ma,eI) --> Z1(aB,eI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 11, 5, 11, 0, "Z1(Ba,eI)"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 11, 10, 11, 0, "Z(Ma,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP1, qprs, 5, 11, "Z(aB,eI)"); dpd_buf4_close(&Z1); /** Z1(aB,eI) + Z2(aB,eI) --> W(aB,eI) **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 5, 11, 5, 11, 0, "Z(aB,eI)"); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z(aB,eI)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, rspq, 11, 5, "Z(eI,aB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(eI,aB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Final term of Wabef contribution to Wabei **/ /** t_I^F <MN||EF> --> Z(MN,EI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z(MN,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** Z(MN,EI) Tau(MN,AB) --> W(EI,AB) **/ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_contract444(&Z, &T, &W, 1, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T); dpd_buf4_close(&Z); /** t_i^f <mn||ef> --> Z(mn,ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 2, 11, 2, 11, 0, "Z(mn,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** Z(mn,ei) Tau(mn,ab) --> W(ei,ab) **/ dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_contract444(&Z, &T, &W, 1, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T); dpd_buf4_close(&Z); /** t_i^f <Mn|Ef> --> Z(Mn,Ei) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(Mn,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** Z(Mn,Ei) Tau(Mn,Ab) --> W(Ei,Ab) **/ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_contract444(&Z, &T, &W, 1, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T); dpd_buf4_close(&Z); /** t_I^F <mN|eF> --> Z(mN,eI) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 11, 0, 11, 0, "Z(mN,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&D, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&D); /** Z(mN,eI) Tau(mN,aB) --> W(eI,aB) **/ dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_contract444(&Z, &T, &W, 1, 1, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T); dpd_buf4_close(&Z); /** <MN||EI> Tau(MN,AB) --> W(EI,AB) **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 7, 10, 7, 0, "Z(IE,AB)"); dpd_contract444(&E, &T, &Z, 1, 1, -1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 7, "Z(EI,AB)"); dpd_buf4_close(&Z); dpd_buf4_close(&T); dpd_buf4_close(&E); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 7, 11, 7, 0, "Z(EI,AB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <mn||ei> Tau(mn,ab) --> W(ei,ab) **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&T, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 7, 10, 7, 0, "Z(ie,ab)"); dpd_contract444(&E, &T, &Z, 1, 1, -1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 7, "Z(ei,ab)"); dpd_buf4_close(&Z); dpd_buf4_close(&T); dpd_buf4_close(&E); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 7, 11, 7, 0, "Z(ei,ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <Mn|Ei> Tau(Mn,Ab) --> W(Ei,Ab) **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(iE,bA)"); dpd_contract444(&E, &T, &Z, 1, 1, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(Ei,bA)"); dpd_buf4_close(&Z); dpd_buf4_close(&T); dpd_buf4_close(&E); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(Ei,bA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(Ei,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(Ei,Ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <mN|eI> Tau(mN,aB) --> W(eI,aB) **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&T, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(Ie,Ba)"); dpd_contract444(&E, &T, &Z, 1, 1, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(eI,Ba)"); dpd_buf4_close(&Z); dpd_buf4_close(&T); dpd_buf4_close(&E); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(eI,Ba)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(eI,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(eI,aB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** <MB||EF> t_IM^AF + <MA||FE> t_IM^BF --> W(EI,AB) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, prqs, 10, 5, "F(MF,AE)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(MF,AE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(IB,AE)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 5, "Z(IE,AB)2"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(IE,AB)2"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(EI,AB)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(EI,AB)2"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 11, 5, "Z(EI,BA)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(EI,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** -<mB|fE> t_Im^Af + <mA|fE> t_Im^Bf --> W(EI,AB) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, prqs, 10, 5, "F(mf,AE)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(mf,AE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(IB,AE)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 5, "Z(IE,AB)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(IE,AB)2"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(EI,AB)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(EI,AB)2"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 11, 5, "Z(EI,BA)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(EI,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** <mb||ef> t_im^af + <ma||fe> t_im^bf --> W(ei,ab) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, prqs, 10, 5, "F(mf,ae)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(mf,ae)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(ib,ae)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 5, "Z(ie,ab)2"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(ie,ab)2"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(ei,ab)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(ei,ab)2"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 11, 5, "Z(ei,ba)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(ei,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** -<Mb|Fe> t_iM^aF + <Ma|Fe> t_iM^bF --> W(ei,ab) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, prqs, 10, 5, "F(MF,ae)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(MF,ae)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(ib,ae)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 5, "Z(ie,ab)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(ie,ab)2"); dpd_buf4_sort(&Z, CC_TMP1, qprs, 11, 5, "Z(ei,ab)2"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(ei,ab)2"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 11, 5, "Z(ei,ba)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(ei,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** -<Mb|Ef> t_Mi^Af - <MA||EF> t_iM^bF + <mA|fE> t_im^bf --> W(Ei,Ab) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, psrq, 10, 5, "F(Mf,Eb)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(Mf,Eb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(iA,Eb)"); dpd_contract444(&T2, &F, &Z, 1, 1, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP0, prqs, 10, 5, "Z(iE,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP1, prqs, 10, 5, "F(mf,AE)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP1, 0, 10, 5, 10, 5, 0, "F(mf,AE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(ib,AE)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(iE,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP2, psrq, 10, 5, "F(MF,EA)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP2, 0, 10, 5, 10, 5, 0, "F(MF,EA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 5, 10, 5, 0, "Z(ib,EA)"); dpd_contract444(&T2, &F, &Z, 0, 1, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP4, prqs, 10, 5, "Z(iE,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 5, 10, 5, 0, "Z(iE,bA)"); dpd_buf4_sort(&Z, CC_TMP2, pqsr, 10, 5, "Z(iE,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(iE,Ab)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(iE,Ab)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(iE,Ab)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, qprs, 11, 5, "Z(Ei,Ab)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(Ei,Ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** -<mB|eF> t_mI^aF - <ma||ef> t_Im^Bf + <Ma|Fe> t_IM^BF --> W(eI,aB) **/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP0, psrq, 10, 5, "F(mF,eB)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "F(mF,eB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(Ia,eB)"); dpd_contract444(&T2, &F, &Z, 1, 1, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP0, prqs, 10, 5, "Z(Ie,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP1, prqs, 10, 5, "F(MF,ae)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP1, 0, 10, 5, 10, 5, 0, "F(MF,ae)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(IB,ae)"); dpd_contract444(&T2, &F, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 5, "Z(Ie,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_sort(&F, CC_TMP2, psrq, 10, 5, "F(mf,ea)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP2, 0, 10, 5, 10, 5, 0, "F(mf,ea)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 5, 10, 5, 0, "Z(IB,ea)"); dpd_contract444(&T2, &F, &Z, 0, 1, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&F); dpd_buf4_sort(&Z, CC_TMP4, prqs, 10, 5, "Z(Ie,Ba)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 5, 10, 5, 0, "Z(Ie,Ba)"); dpd_buf4_sort(&Z, CC_TMP2, pqsr, 10, 5, "Z(Ie,aB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z(Ie,aB)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 10, 5, 10, 5, 0, "Z(Ie,aB)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP2, 0, 10, 5, 10, 5, 0, "Z(Ie,aB)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, qprs, 11, 5, "Z(eI,aB)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(eI,aB)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** Final terms of Wabei **/ /** t_IN^BF <MN||EF> --> Z_IBME **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IB,ME)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_contract444(&T2, &D, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&T2, &D, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(IE,MB)"); dpd_buf4_close(&Z); /** t_M^A ( -<MB||IE> + Z1_IEMB ) --> Z2_EIAB **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(IE,MB)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z2(IE,AB)"); dpd_contract244(&T1, &Z1, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP1, qprs, 11, 5, "Z(EI,AB)2"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(EI,AB)2"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(EI,BA)"); dpd_buf4_close(&Z); /** Z1_EIAB - Z2_EIBA --> W_EIAB **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(EI,AB)2"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(EI,BA)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "WEIAB"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** t_in^bf <mn||ef> --> Z_ibme **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ib,me)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_contract444(&T2, &D, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&T2, &D, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(ie,mb)"); dpd_buf4_close(&Z); /** t_m^a ( -<mb||ie> + Z1_iemb ) --> Z2_eiab **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(ie,mb)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 5, 10, 5, 0, "Z2(ie,ab)"); dpd_contract244(&T1, &Z1, &Z2, 0, 2, 1, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP1, qprs, 11, 5, "Z(ei,ab)2"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(ei,ab)2"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 11, 5, "Z(ei,ba)"); dpd_buf4_close(&Z); /** - Z1_eiab + Z2_eiba --> W_eiab **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z(ei,ab)2"); dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z(ei,ba)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 7, 0, "Weiab"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** t_in^bf <Mn|Ef> + t_iN^bF <MN||EF> --> Z1_MEib **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ME,ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_close(&Z); /** - t_Ni^Af <mN|fE> --> Z2_mEiA **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP1, psrq, 10, 11, "D(mE,fN)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP1, 0, 10, 11, 10, 11, 0, "D(mE,fN)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_sort(&T2, CC_TMP2, psrq, 10, 11, "T2(iA,fN)"); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_TMP1, 0, 10, 11, 10, 11, 0, "D(mE,fN)"); dpd_buf4_init(&T2, CC_TMP2, 0, 10, 11, 10, 11, 0, "T2(iA,fN)"); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(mE,iA)"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ME,ib)"); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(Mb,iE)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(Mb,iE)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 11, "Z(Mb,Ei)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(mE,iA)"); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(mA,iE)"); dpd_buf4_close(&Z); /** - t_M^A ( <Mb|Ei> + Z(Mb,Ei) ) --> Z1(Ab,Ei) **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP2, psrq, 10, 11, "D(Mb,Ei)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP2, 0, 10, 11, 10, 11, 0, "D(Mb,Ei)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(Mb,Ei)"); dpd_buf4_axpy(&D, &Z, 1.0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z1(Ab,Ei)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 11, 5, "Z1(Ei,Ab)"); dpd_buf4_close(&Z1); /** t_m^b ( - <mA|iE> + Z(mA,iE) ) --> Z2(Ab,Ei) **/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(mA,iE)"); dpd_buf4_axpy(&C, &Z, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 10, 5, 10, 0, "Z2(bA,iE)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, CC_TMP1, qprs, 5, 10, "Z2(Ab,iE)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP1, 0, 5, 10, 5, 10, 0, "Z2(Ab,iE)"); dpd_buf4_sort(&Z2, CC_TMP2, pqsr, 5, 11, "Z2(Ab,Ei)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z2(Ab,Ei)"); dpd_buf4_sort(&Z2, CC_TMP1, rspq, 11, 5, "Z2(Ei,Ab)"); dpd_buf4_close(&Z2); /** Z1(Ei,Ab) + Z2(Ei,Ab) --> W(Ei,Ab) **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z1(Ei,Ab)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z2(Ei,Ab)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** t_IN^BF <mN|eF> + t_In^Bf <mn||ef> --> Z1_meIB **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(me,IB)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_close(&Z); /** - t_Ni^Af <mN|fE> --> Z2_mEiA **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP1, psrq, 10, 11, "D(Me,Fn)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP1, 0, 10, 11, 10, 11, 0, "D(Me,Fn)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&T2, CC_TMP2, psrq, 10, 11, "T2(Ia,Fn)"); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_TMP1, 0, 10, 11, 10, 11, 0, "D(Me,Fn)"); dpd_buf4_init(&T2, CC_TMP2, 0, 10, 11, 10, 11, 0, "T2(Ia,Fn)"); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(Me,Ia)"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(me,IB)"); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(mB,Ie)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(mB,Ie)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 10, 11, "Z(mB,eI)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(Me,Ia)"); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(Ma,Ie)"); dpd_buf4_close(&Z); /** - t_m^a ( <mB|eI> + Z(mB,eI) ) --> Z1(aB,eI) **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP2, psrq, 10, 11, "D(mB,eI)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP2, 0, 10, 11, 10, 11, 0, "D(mB,eI)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 11, 10, 11, 0, "Z(mB,eI)"); dpd_buf4_axpy(&D, &Z, 1.0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z1(aB,eI)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&T1, &Z, &Z1, 0, 0, 0, -1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 11, 5, "Z1(eI,aB)"); dpd_buf4_close(&Z1); /** t_M^B ( - <Ma|Ie> + Z(Ma,Ie) ) --> Z2(aB,eI) **/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_init(&Z, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(Ma,Ie)"); dpd_buf4_axpy(&C, &Z, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 10, 5, 10, 0, "Z2(Ba,Ie)"); dpd_contract244(&T1, &Z, &Z2, 0, 0, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z2, CC_TMP1, qprs, 5, 10, "Z2(aB,Ie)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP1, 0, 5, 10, 5, 10, 0, "Z2(aB,Ie)"); dpd_buf4_sort(&Z2, CC_TMP2, pqsr, 5, 11, "Z2(aB,eI)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, 0, 5, 11, 5, 11, 0, "Z2(aB,eI)"); dpd_buf4_sort(&Z2, CC_TMP1, rspq, 11, 5, "Z2(eI,aB)"); dpd_buf4_close(&Z2); /** Z1(eI,aB) + Z2(eI,aB) --> W(eI,aB) **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 5, 0, "Z1(eI,aB)"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP1, 0, 11, 5, 11, 5, 0, "Z2(eI,aB)"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); } }} // namespace psi::cchbar ������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wabij.cc������������������������������������������������������������������������0000644�0001015�0000765�00000317063�11112564564�014344� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* function to compute matrix element <Phi_ij^ab|Hbar|0> which equals zero as long as the T amplitudes were determined by ccenergy with the same H */ void DT2(void), FaetT2(void), FmitT2(void), WmnijT2(void), WmbejT2(void); void BT2(void), ZT2(void), FT2(void), ET2(void), CT2(void), dijabT2(void); void BT2_AO(void); void Z_build(void); void status(const char *, FILE *); void FT2_CC2(void); void Wmnij_for_Wabij(void); void Wmbej_for_Wabij(void); void purge_Wabij(void); void Wabij_build(void) { dpdbuf4 newtIJAB, newtijab, newtIjAb; double dotval; Wmbej_for_Wabij(); Z_build(); Wmnij_for_Wabij(); DT2(); if(params.print & 2) status("<ij||ab> -> T2", outfile); if(strcmp(params.wfn,"CC2")) { /* skip all this is wfn=CC2 */ FaetT2(); FmitT2(); if(params.print & 2) status("F -> T2", outfile); timer_on("WmnijT2"); WmnijT2(); if(params.print & 2) status("Wmnij -> T2", outfile); timer_off("WmnijT2"); timer_on("BT2"); /* didn't bother to put BT2_AO in here yet */ BT2(); if(params.print & 2) status("<ab||cd> -> T2", outfile); timer_off("BT2"); timer_on("ZT2"); ZT2(); if(params.print & 2) status("Z -> T2", outfile); timer_off("ZT2"); timer_on("FT2"); FT2(); if(params.print & 2) status("<ia||bc> -> T2", outfile); timer_off("FT2"); timer_on("ET2"); ET2(); if(params.print & 2) status("<ij||ka> -> T2", outfile); timer_off("ET2"); timer_on("WmbejT2"); WmbejT2(); if(params.print & 2) status("Wmbej -> T2", outfile); timer_off("WmbejT2"); timer_on("CT2"); CT2(); if(params.print & 2) status("<ia||jb> -> T2", outfile); timer_off("CT2"); } else { /* For CC2, just include (FT2)c->T2 */ /* didn't implement CC2 yet */ } if (params.ref == 1) purge_Wabij(); if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dotval = dpd_buf4_dot_self(&newtIjAb); fprintf(outfile,"Norm squared of <Phi^IJ_AB|Hbar|0>: %20.15lf\n",dotval); dpd_buf4_close(&newtIjAb); } else if (params.ref == 1) { dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_print(&newtIJAB,outfile,1); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 7, 2, 7, 0, "Wabij residual"); dpd_buf4_print(&newtijab,outfile,1); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_print(&newtIjAb,outfile,1); dpd_buf4_close(&newtIjAb); } else if (params.ref == 2) { dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_print(&newtIJAB,outfile,1); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 17, 12, 17, 0, "Wabij residual"); dpd_buf4_print(&newtijab,outfile,1); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_print(&newtIjAb,outfile,1); dpd_buf4_close(&newtIjAb); } } void DT2(void) { dpdbuf4 D; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&D); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_HBAR, "WABIJ residual"); dpd_buf4_copy(&D, CC_HBAR, "Wabij residual"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&D); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_copy(&D, CC_HBAR, "WABIJ residual"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_HBAR, "Wabij residual"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_copy(&D, CC_HBAR, "WAbIj residual"); dpd_buf4_close(&D); } } void FaetT2(void) { dpdfile2 FAEt, Faet; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 tIJAB, tijab, tIjAb; dpdbuf4 t2; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_contract424(&tIjAb, &FAEt, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAEt, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_file2_close(&FAEt); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 5, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 1, 1, "Faet"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAEt, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAEt, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tijab, &Faet, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Faet, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Faet, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAEt, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 15, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&FAEt, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&Faet, CC_OEI, 0, 3, 3, "Faet"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&tIJAB, &FAEt, &t2, 3, 1, 0, 1, 0); dpd_contract244(&FAEt, &tIJAB, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&tijab, &Faet, &t2, 3, 1, 0, 1, 0); dpd_contract244(&Faet, &tijab, &t2, 1, 2, 1, 1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Faet, &newtIjAb, 3, 1, 0, 1, 1); dpd_contract244(&FAEt, &tIjAb, &newtIjAb, 1, 2, 1, 1, 1); dpd_file2_close(&FAEt); dpd_file2_close(&Faet); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } void FmitT2(void) { dpdfile2 FMIt, Fmit; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 tIJAB, tijab, tIjAb; dpdbuf4 t2; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_contract424(&tIjAb, &FMIt, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMIt, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_file2_close(&FMIt); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 0, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 0, 7, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 0, 0, "Fmit"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMIt, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMIt, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tijab, &Fmit, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmit, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Fmit, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMIt, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 0, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 10, 17, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_file2_init(&FMIt, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&Fmit, CC_OEI, 0, 2, 2, "Fmit"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&tIJAB, &FMIt, &t2, 1, 0, 1, -1, 0); dpd_contract244(&FMIt, &tIJAB, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract424(&tijab, &Fmit, &t2, 1, 0, 1, -1, 0); dpd_contract244(&Fmit, &tijab, &t2, 0, 0, 0, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&tIjAb, &Fmit, &newtIjAb, 1, 0, 1, -1, 1); dpd_contract244(&FMIt, &tIjAb, &newtIjAb, 0, 0, 0, -1, 1); dpd_file2_close(&FMIt); dpd_file2_close(&Fmit); dpd_buf4_close(&tIJAB); dpd_buf4_close(&tijab); dpd_buf4_close(&tIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } void WmnijT2(void) { dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 WMNIJ, Wmnij, WMnIj; dpdbuf4 tauIJAB, tauijab, tauIjAb; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&WMNIJ, &tauIJAB, &newtIJAB, 1, 1, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 7, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 2, 2, 2, 0, "Wmnij"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_contract444(&Wmnij, &tauijab, &newtijab, 1, 1, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&Wmnij); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&WMNIJ, &tauIJAB, &newtIJAB, 1, 1, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&newtIJAB); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 17, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 12, 12, 12, 0, "Wmnij"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&Wmnij, &tauijab, &newtijab, 1, 1, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&Wmnij); dpd_buf4_close(&newtijab); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&WMnIj, &tauIjAb, &newtIjAb, 1, 1, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&WMnIj); dpd_buf4_close(&newtIjAb); } } void BT2(void) { int h; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 B_anti, B; dpdbuf4 tauIJAB, tauijab, tauIjAb; dpdbuf4 Z1,Z2; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 5, "Z(Ij,Ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z2, &newtIjAb, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_close(&B); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 7, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&B_anti, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); /* AA and BB terms */ dpd_buf4_init(&Z1, CC_TMP0, 0, 7, 2, 7, 2, 0, "Z(ab,ij)"); dpd_contract444(&B_anti, &tauIJAB, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtIJAB, 1); dpd_buf4_close(&Z2); dpd_contract444(&B_anti, &tauijab, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtijab, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); /* AB term */ dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 0, 5, "Z(Ij,Ab)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z2, &newtIjAb, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_close(&B_anti); dpd_buf4_close(&B); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 17, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 7, 2, 7, 2, 0, "Z(AB,IJ)"); dpd_contract444(&B, &tauIJAB, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 2, 7, "Z(IJ,AB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 2, 7, 2, 7, 0, "Z(IJ,AB)"); dpd_buf4_axpy(&Z2, &newtIJAB, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 17, 12, 17, 12, 0, "Z(ab,ij)"); dpd_contract444(&B, &tauijab, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 12, 17, "Z(ij,ab)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 12, 17, 12, 17, 0, "Z(ij,ab)"); dpd_buf4_axpy(&Z2, &newtijab, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 22, 28, 22, 0, "Z(Ab,Ij)"); dpd_contract444(&B, &tauIjAb, &Z1, 0, 0, 1, 0); dpd_buf4_sort(&Z1, CC_TMP0, rspq, 22, 28, "Z(Ij,Ab)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP0, 0, 22, 28, 22, 28, 0, "Z(Ij,Ab)"); dpd_buf4_axpy(&Z2, &newtIjAb, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } void ZT2(void) { dpdbuf4 ZIJMA, ZIJAM, Zijma, Zijam, ZIjMa, ZIjAm, Z; dpdbuf4 newtIJAB, newtijab, newtIjAb, T2; dpdfile2 tIA, tia, T1; dpdbuf4 t2, X; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(Ab,Ij)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_MISC, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_contract244(&T1, &Z, &X, 0, 0, 0, -1, 0); dpd_buf4_close(&Z); dpd_file2_close(&T1); dpd_buf4_sort_axpy(&X, CC_HBAR, rspq, 0, 5, "WAbIj residual", 1); dpd_buf4_sort_axpy(&X, CC_HBAR, srqp, 0, 5, "WAbIj residual", 1); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 10, 2, 10, 0, "ZIJMA"); dpd_buf4_init(&ZIJAM, CC_MISC, 0, 2, 11, 2, 11, 0, "ZIJAM"); dpd_buf4_init(&Zijma, CC_MISC, 0, 2, 10, 2, 10, 0, "Zijma"); dpd_buf4_init(&Zijam, CC_MISC, 0, 2, 11, 2, 11, 0, "Zijam"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 0, 11, 0, 11, 0, "ZIjAm"); dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 5, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&ZIJAM, &tIA, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tIA, &ZIJMA, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&Zijam, &tia, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tia, &Zijma, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&ZIjAm, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_contract244(&tIA, &ZIjMa, &newtIjAb, 0, 2, 1, -1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&ZIJAM); dpd_buf4_close(&Zijma); dpd_buf4_close(&Zijam); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 20, 2, 20, 0, "ZIJMA"); dpd_buf4_init(&ZIJAM, CC_MISC, 0, 2, 21, 2, 21, 0, "ZIJAM"); dpd_buf4_init(&Zijma, CC_MISC, 0, 12, 30, 12, 30, 0, "Zijma"); dpd_buf4_init(&Zijam, CC_MISC, 0, 12, 31, 12, 31, 0, "Zijam"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 22, 24, 22, 24, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 22, 26, 22, 26, 0, "ZIjAm"); dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 15, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&ZIJAM, &tIA, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tIA, &ZIJMA, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtIJAB, 1); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&Zijam, &tia, &t2, 3, 0, 0, 1, 0); dpd_contract244(&tia, &Zijma, &t2, 0, 2, 1, -1, 1); dpd_buf4_axpy(&t2, &newtijab, 1); dpd_buf4_close(&t2); dpd_contract424(&ZIjAm, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_contract244(&tIA, &ZIjMa, &newtIjAb, 0, 2, 1, -1, 1); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&ZIJAM); dpd_buf4_close(&Zijma); dpd_buf4_close(&Zijam); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } } void Z_build(void) { dpdbuf4 ZIJMA, Zijma, ZIjMa, ZIjmA, ZIjAm, ZMaIj, ZmAIj, Z; dpdbuf4 tauIJAB, tauijab, tauIjAb, tauIjbA, F_anti, F, tau; int Gmb, Gij, mb, nrows, ncols; timer_on("Z"); if(params.ref == 0) { /** RHF **/ /* ZMbIj = <Mb|Ef> * tau(Ij,Ef) */ /* OOC code added 3/23/05 -TDC */ dpd_buf4_init(&Z, CC_MISC, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); /* dpd_contract444(&F, &tau, &Z, 0, 0, 1, 0); */ for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) { Gij = Gmb; /* tau is totally symmetric */ dpd_buf4_mat_irrep_init(&tau, Gij); dpd_buf4_mat_irrep_rd(&tau, Gij); dpd_buf4_mat_irrep_init(&Z, Gmb); dpd_buf4_mat_irrep_row_init(&F, Gmb); for(mb=0; mb < F.params->rowtot[Gmb]; mb++) { dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb); nrows = tau.params->rowtot[Gij]; ncols = tau.params->coltot[Gij]; if(nrows && ncols) C_DGEMV('n',nrows,ncols,1.0,tau.matrix[Gij][0],ncols,F.matrix[Gmb][0],1, 0.0,Z.matrix[Gmb][mb],1); } dpd_buf4_mat_irrep_row_close(&F, Gmb); dpd_buf4_mat_irrep_wrt(&Z, Gmb); dpd_buf4_mat_irrep_close(&Z, Gmb); dpd_buf4_mat_irrep_close(&tau, Gij); } dpd_buf4_close(&tau); dpd_buf4_close(&F); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 10, 2, 10, 0, "ZIJMA"); dpd_buf4_init(&Zijma, CC_MISC, 0, 2, 10, 2, 10, 0, "Zijma"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjMa"); dpd_buf4_init(&ZIjmA, CC_MISC, 0, 0, 10, 0, 10, 0, "ZIjmA"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&tauIjbA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjbA"); dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&tauIJAB, &F_anti, &ZIJMA, 0, 0, 1, 0); dpd_contract444(&tauijab, &F_anti, &Zijma, 0, 0, 1, 0); dpd_contract444(&tauIjAb, &F, &ZIjMa, 0, 0, 1, 0); dpd_contract444(&tauIjbA, &F, &ZIjmA, 0, 0, 1, 0); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&tauIjbA); dpd_buf4_close(&F_anti); dpd_buf4_close(&F); dpd_buf4_sort(&ZIJMA, CC_MISC, pqsr, 2, 11, "ZIJAM"); dpd_buf4_sort(&Zijma, CC_MISC, pqsr, 2, 11, "Zijam"); dpd_buf4_sort(&ZIjmA, CC_MISC, pqsr, 0, 11, "ZIjAm"); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&Zijma); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjmA); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&ZIJMA, CC_MISC, 0, 2, 20, 2, 20, 0, "ZIJMA"); dpd_buf4_init(&Zijma, CC_MISC, 0, 12, 30, 12, 30, 0, "Zijma"); dpd_buf4_init(&ZIjMa, CC_MISC, 0, 22, 24, 22, 24, 0, "ZIjMa"); dpd_buf4_init(&ZIjAm, CC_MISC, 0, 22, 26, 22, 26, 0, "ZIjAm"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_contract444(&tauIJAB, &F, &ZIJMA, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_contract444(&tauijab, &F, &Zijma, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract444(&tauIjAb, &F, &ZIjMa, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_contract444(&tauIjAb, &F, &ZIjAm, 0, 1, 1, 0); dpd_buf4_close(&F); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_sort(&ZIJMA, CC_MISC, pqsr, 2, 21, "ZIJAM"); dpd_buf4_sort(&Zijma, CC_MISC, pqsr, 12, 31, "Zijam"); dpd_buf4_close(&ZIJMA); dpd_buf4_close(&Zijma); dpd_buf4_close(&ZIjMa); dpd_buf4_close(&ZIjAm); } timer_off("Z"); } void FT2(void) { dpdfile2 tIA, tia, t1; dpdbuf4 newtIJAB, newtijab, newtIjAb, t2, t2a, t2b; dpdbuf4 F_anti, F; dpdbuf4 Z, X; int Gie, Gij, Gab, nrows, ncols, nlinks, Gi, Ge, Gj, i, I; if(params.ref == 0) { /** RHF **/ /* t(ij,ab) <-- t(j,e) * <ie|ab> + t(i,e) * <je|ba> */ /* OOC code added 3/23/05, TDC */ dpd_buf4_init(&X, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&t1); dpd_file2_mat_rd(&t1); for(Gie=0; Gie < moinfo.nirreps; Gie++) { Gab = Gie; /* F is totally symmetric */ Gij = Gab; /* T2 is totally symmetric */ dpd_buf4_mat_irrep_init(&X, Gij); ncols = F.params->coltot[Gie]; for(Gi=0; Gi < moinfo.nirreps; Gi++) { Gj = Ge = Gi^Gie; /* T1 is totally symmetric */ nlinks = moinfo.virtpi[Ge]; nrows = moinfo.occpi[Gj]; dpd_buf4_mat_irrep_init_block(&F, Gie, nlinks); for(i=0; i < moinfo.occpi[Gi]; i++) { I = F.params->poff[Gi] + i; dpd_buf4_mat_irrep_rd_block(&F, Gie, F.row_offset[Gie][I], nlinks); if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,1.0,t1.matrix[Gj][0],nlinks,F.matrix[Gie][0],ncols, 0.0,X.matrix[Gij][X.row_offset[Gij][I]],ncols); } dpd_buf4_mat_irrep_close_block(&F, Gie, nlinks); } dpd_buf4_mat_irrep_wrt(&X, Gij); dpd_buf4_mat_irrep_close(&X, Gij); } dpd_file2_mat_close(&t1); dpd_file2_close(&t1); dpd_buf4_close(&F); dpd_buf4_init(&t2, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&X, &t2, 1); dpd_buf4_close(&t2); dpd_buf4_sort_axpy(&X, CC_HBAR, qpsr, 0, 5, "WAbIj residual", 1); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 0, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 0, 7, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F_anti, &tIA, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F_anti); /*** BB ***/ dpd_buf4_init(&F_anti, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F_anti, &tia, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F_anti); /*** AB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&F, &tia, &newtIjAb, 1, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_contract244(&tIA, &F, &newtIjAb, 1, 0, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 0, 7, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 10, 17, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&F, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&t2, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_contract424(&F, &tIA, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 0, 7, "T (JI,A>B)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (IJ,A>B)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 0, 7, 0, 7, 0, "T (JI,A>B)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F); /*** BB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&t2, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_contract424(&F, &tia, &t2, 1, 1, 1, 1, 0); dpd_buf4_sort(&t2, CC_TMP0, qprs, 10, 17, "T (ji,a>b)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ij,a>b)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 10, 17, 10, 17, 0, "T (ji,a>b)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2b); dpd_buf4_close(&t2a); dpd_buf4_close(&F); /*** AB ***/ dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &newtIjAb, 1, 1, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_contract244(&tIA, &F, &newtIjAb, 1, 2, 0, 1, 1); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } void ET2(void) { dpdfile2 tIA, tia; dpdbuf4 newtIJAB, newtijab, newtIjAb; dpdbuf4 E, t2, t2a, t2b; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract424(&E, &tIA, &newtIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_buf4_close(&newtIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 2, 5, 2, 7, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tIA, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** BB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tia, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** AB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract424(&E, &tia, &newtIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 10, 0, 10, 0, 0, "E <ia|jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&newtIJAB, CC_HBAR, 0, 2, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_init(&newtijab, CC_HBAR, 0, 12, 15, 12, 17, 0, "Wabij residual"); dpd_buf4_init(&newtIjAb, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ dpd_buf4_init(&E, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&t2, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_contract424(&E, &tIA, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 2, 5, "T (I>J,BA)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,AB)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 2, 5, 2, 5, 0, "T (I>J,BA)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtIJAB, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** BB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&t2, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_contract424(&E, &tia, &t2, 1, 0, 0, -1, 0); dpd_buf4_sort(&t2, CC_TMP0, pqsr, 12, 15, "T (i>j,ba)"); dpd_buf4_close(&t2); dpd_buf4_init(&t2a, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ab)"); dpd_buf4_init(&t2b, CC_TMP0, 0, 12, 15, 12, 15, 0, "T (i>j,ba)"); dpd_buf4_axpy(&t2b, &t2a, -1); dpd_buf4_close(&t2b); dpd_buf4_axpy(&t2a, &newtijab, 1); dpd_buf4_close(&t2a); dpd_buf4_close(&E); /*** AB ***/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &newtIjAb, 3, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 24, 22, 24, 22, 0, "E <Ia|Jk>"); dpd_contract244(&tIA, &E, &newtIjAb, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&newtIJAB); dpd_buf4_close(&newtijab); dpd_buf4_close(&newtIjAb); } } void WmbejT2(void) { dpdbuf4 T2new, T2, W, T2B, W1, W2, Z; if(params.ref == 0) { /** RHF **/ /*** AB ***/ /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W, CC_TMP0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W); dpd_buf4_init(&W1, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_close(&W1); /* T2(Ib,mE) * W(mE,jA) --> Z(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(IA,jb) (part III) */ dpd_buf4_sort(&T2new, CC_TMP0, psrq, 10, 10, "T2 (IA,jb) 3"); dpd_buf4_close(&T2new); /* 1/2 [ (2 T2(IA,me) - T2(IE,ma)) * (2 W(ME,jb) + W(Me,Jb)] --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 1"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 0.5, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* 1/2 Z(Ib,jA) + T2(IA,jb) --> T2(IA,jb) (Part I) */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z (Ib,jA)"); dpd_buf4_axpy(&Z, &T2new, 0.5); dpd_buf4_close(&Z); dpd_buf4_close(&T2new); /* T2(IA,jb) (I) + T2(IA,jb) (III) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 1"); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb) 3"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "T2 (Ij,Ab) (1+3)"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (1+3)"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "T2 (Ij,Ab) (2+4)"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) <--- I + II + III + IV */ dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (1+3)"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) (2+4)"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } else if(params.ref == 1) { /** ROHF **/ /*** AA ***/ /* T2(IA,ME) * W(ME,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,JB) --> T2(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IA,JB) - T2(JA,IB) - T2(IB,JA) + T2(JB,IA) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> New T2(IJ,AB) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* T2(ia,me) * W(me,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,ME) * W(ME,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,jb) --> T2(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) + T2(ji,ba) --> T2(ij,ab) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(ij,ab) --> New T2(ij,ab) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "Wabij residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* T2(IA,ME) * W(ME,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(ME,IA) * T2(jb,ME) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(me,IA) * T2(jb,me) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,jb) --> T2(Ij,Ab) (part 1) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "T2 (Ij,Ab) 1"); dpd_buf4_close(&T2new); /* T2(Ib,mE) * W(mE,jA) --> T2(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 10, 10, 10, 0, "T2 (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(Me,Ib) * T2(jA,Me) --> T2(Ib,jA) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(Ij,Ab) (part 2) */ dpd_buf4_sort(&T2new, CC_TMP0, prsq, 0, 5, "T2 (Ij,Ab) 2"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) (part 1) + T2(Ij,Ab) (part 2) --> New T2(Ij,Ab) */ dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) 1"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "T2 (Ij,Ab) 2"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } /*** ROHF ***/ else if(params.ref == 2) { /*** UHF ***/ /*** AA ***/ /* T2(IA,ME) * W(ME,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 20, 20, 20, 20, 0, "T2 (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,JB) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,JB) --> T2(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IA,JB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IA,JB) - T2(JA,IB) - T2(IB,JA) + T2(JB,IA) --> T2(IA,JB) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> New T2(IJ,AB) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* T2(ia,me) * W(me,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 30, 30, 30, 30, 0, "T2 (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,ME) * W(ME,jb) --> T2(ia,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(ia,jb) --> T2(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 10, 15, "X(10,15) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ia,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 10, 15, "X(10,15) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 10, 15, "X(10,15) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 10, 15, "X(10,15) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) + T2(ji,ba) --> T2(ij,ab) */ dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 4"); dpd_buf4_axpy(&T2, &T2new, +1); dpd_buf4_close(&T2); /* T2(ij,ab) --> New T2(ij,ab) */ dpd_buf4_init(&T2, CC_HBAR, 0, 10, 15, 12, 17, 0, "Wabij residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* T2(IA,ME) * W(ME,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 20, 30, 20, 30, 0, "T2 (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,me) * W(me,jb) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(ME,IA) * T2(jb,ME) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(me,IA) * T2(jb,me) --> T2(IA,jb) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(IA,jb) --> T2(Ij,Ab) (part 1) */ dpd_buf4_sort(&T2new, CC_TMP0, prqs, 22, 28, "T2 (Ij,Ab) 1"); dpd_buf4_close(&T2new); /* T2(Ib,mE) * W(mE,jA) --> T2(Ib,jA) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 24, 27, 24, 27, 0, "T2 (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); timer_on("WmbejT2 444"); dpd_contract444(&T2, &W, &T2new, 0, 1, 1, 0); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* W(Me,Ib) * T2(jA,Me) --> T2(Ib,jA) */ dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); timer_on("WmbejT2 444"); dpd_contract444(&W, &T2, &T2new, 1, 0, 1, 1); timer_off("WmbejT2 444"); dpd_buf4_close(&W); dpd_buf4_close(&T2); /* T2(Ib,jA) --> T2(Ij,Ab) (part 2) */ dpd_buf4_sort(&T2new, CC_TMP0, prsq, 22, 28, "T2 (Ij,Ab) 2"); dpd_buf4_close(&T2new); /* T2(Ij,Ab) (part 1) + T2(Ij,Ab) (part 2) --> New T2(Ij,Ab) */ dpd_buf4_init(&T2new, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "T2 (Ij,Ab) 1"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "T2 (Ij,Ab) 2"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); } /*** UHF ***/ } void CT2(void) { dpdfile2 tIA, tia; dpdbuf4 Y, C, D, T2new, T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AA ***/ /* C(MB||JE) * T(I,E) --> Y(MB,JI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(MB,JI) --> T(AB,JI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(AB,JI) --> T(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IJ,AB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IJ,AB) - T2(JI,AB) - T2(IJ,BA) - T2(JI,BA) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> T2new (IJ,AB) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* C(mb||je) * T(i,e) --> Y(mb,ji) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,a) * Y(mb,ji) --> T(ab,ji) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(ab,ji) --> T(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ij,ab) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) - T2(ji,ba) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(ij,ab) --> T2new (ij,ab) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "Wabij residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 0, 5, 0, 5, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AA ***/ /* C(MB||JE) * T(I,E) --> Y(MB,JI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (MB,JI)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(MB,JI) --> T(AB,JI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 5, 0, 5, 0, 0, "X(5,0)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(AB,JI) --> T(IJ,AB) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 0, 5, "X(0,5) 1"); dpd_buf4_close(&T2new); /* P(IJ) P(AB) T2(IJ,AB) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 0, 5, "X(0,5) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 0, 5, "X(0,5) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 0, 5, "X(0,5) 4"); /* T2(IJ,AB) - T2(JI,AB) - T2(IJ,BA) - T2(JI,BA) */ dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 0, 5, 0, 5, 0, "X(0,5) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(IJ,AB) --> T2new (IJ,AB) */ dpd_buf4_init(&T2, CC_HBAR, 0, 0, 5, 2, 7, 0, "WABIJ residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** BB ***/ /* C(mb||je) * T(i,e) --> Y(mb,ji) */ dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (mb,ji)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,a) * Y(mb,ji) --> T(ab,ji) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 15, 10, 15, 10, 0, "X(15,10)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(ab,ji) --> T(ij,ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 10, 15, "X(10,15) 1"); dpd_buf4_close(&T2new); /* P(ij) P(ab) T2(ij,ab) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 1"); dpd_buf4_sort(&T2new, CC_TMP0, qprs, 10, 15, "X(10,15) 2"); dpd_buf4_sort(&T2new, CC_TMP0, pqsr, 10, 15, "X(10,15) 3"); dpd_buf4_sort(&T2new, CC_TMP0, qpsr, 10, 15, "X(10,15) 4"); /* T2(ij,ab) - T2(ji,ab) - T2(ij,ba) - T2(ji,ba) */ dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 2"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 3"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 15, 10, 15, 0, "X(10,15) 4"); dpd_buf4_axpy(&T2, &T2new, 1); dpd_buf4_close(&T2); /* T2(ij,ab) --> T2new (ij,ab) */ dpd_buf4_init(&T2, CC_HBAR, 0, 10, 15, 12, 17, 0, "Wabij residual"); dpd_buf4_axpy(&T2new, &T2, 1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /*** AB ***/ /* C(mA|jE) * T(I,E) --> Y(mA,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mA,jI)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_contract424(&C, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(m,b) * Y(mA,jI) --> T2(bA,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 29, 23, 29, 23, 0, "X(29,23)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(bA,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srqp, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* C(Mb|Ie) * T(j,e) --> Y(Mb,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Mb,Ij)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_contract424(&C, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&C); /* T(M,A) * Y(Mb,Ij) --> T2(Ab,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 28, 22, 28, 22, 0, "X(28,22)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T(Ab,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rspq, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(Mb,jE) * T(I,E) --> Y(Mb,jI) */ dpd_buf4_init(&Y, CC_TMP0, 0, 24, 23, 24, 23, 0, "Y(Mb,jI)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract424(&D, &tIA, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(M,A) * Y(Mb,jI) --> T2(Ab,jI) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 28, 23, 28, 23, 0, "X(28,23)"); dpd_contract244(&tIA, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(Ab,jI) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, srpq, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); /* D(mA,Ie) * T(j,e) --> Y(mA,Ij) */ dpd_buf4_init(&Y, CC_TMP0, 0, 27, 22, 27, 22, 0, "Y(mA,Ij)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_contract424(&D, &tia, &Y, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* T(m,b) * Y(mA,Ij) --> T2(bA,Ij) */ dpd_buf4_init(&T2new, CC_TMP0, 0, 29, 22, 29, 22, 0, "X(29,22)"); dpd_contract244(&tia, &Y, &T2new, 0, 0, 0, 1, 0); dpd_buf4_close(&Y); /* T2(bA,Ij) --> Tnew(Ij,Ab) */ dpd_buf4_sort(&T2new, CC_TMP0, rsqp, 22, 28, "X(22,28) 1"); dpd_buf4_close(&T2new); dpd_buf4_init(&T2, CC_TMP0, 0, 22, 28, 22, 28, 0, "X(22,28) 1"); dpd_buf4_init(&T2new, CC_HBAR, 0, 22, 28, 22, 28, 0, "WAbIj residual"); dpd_buf4_axpy(&T2, &T2new, -1); dpd_buf4_close(&T2); dpd_buf4_close(&T2new); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /*** UHF ***/ } void Wmnij_for_Wabij(void) { dpdbuf4 A_anti, A; dpdbuf4 WMNIJ, Wmnij, WMnIj, W; dpdfile2 tIA, tia; dpdbuf4 Eijka, Eijka_anti, Eaijk, Eaijk_anti; dpdbuf4 D_anti, D, tauIJAB, tauijab, tauIjAb; timer_on("Wmnij"); if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&A_anti, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <ij|kl>"); dpd_buf4_copy(&A_anti, CC_HBAR, "WMNIJ"); dpd_buf4_copy(&A_anti, CC_HBAR, "Wmnij"); dpd_buf4_close(&A_anti); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&A, CC_AINTS, 0, 2, 2, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_copy(&A, CC_HBAR, "WMNIJ"); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 12, 12, 10, 10, 1, "A <ij|kl>"); dpd_buf4_copy(&A, CC_HBAR, "Wmnij"); dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); dpd_buf4_copy(&A, CC_HBAR, "WMnIj"); dpd_buf4_close(&A); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_contract424(&Eijka, &tIA, &WMnIj, 3, 1, 0, 1, 1); dpd_buf4_close(&Eijka); dpd_file2_close(&tIA); dpd_buf4_close(&WMnIj); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 0, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 0, 2, 2, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Eijka_anti, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Eaijk_anti, CC_EINTS, 0, 11, 2, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka_anti, &tIA, &W, 3, 1, 0, 1, 0); dpd_contract244(&tIA, &Eaijk_anti, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &WMNIJ, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka_anti, &tia, &W, 3, 1, 0, 1, 0); dpd_contract244(&tia, &Eaijk_anti, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &Wmnij, 1); dpd_buf4_close(&W); dpd_contract424(&Eijka, &tia, &WMnIj, 3, 1, 0, 1, 1); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eijka_anti); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk_anti); dpd_buf4_close(&Eaijk); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 0, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 10, 12, 12, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Eijka, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 21, 2, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&W, CC_TMP0, 0, 2, 0, 2, 0, 0, "W (MN,IJ)"); dpd_contract424(&Eijka, &tIA, &W, 3, 1, 0, 1, 0); dpd_contract244(&tIA, &Eaijk, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &WMNIJ, 1); dpd_buf4_close(&W); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 31, 12, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&W, CC_TMP0, 0, 12, 10, 12, 10, 0, "W (mn,ij)"); dpd_contract424(&Eijka, &tia, &W, 3, 1, 0, 1, 0); dpd_contract244(&tia, &Eaijk, &W, 1, 0, 1, 1, 1); dpd_buf4_axpy(&W, &Wmnij, 1); dpd_buf4_close(&W); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_buf4_init(&Eijka, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&Eaijk, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_contract424(&Eijka, &tia, &WMnIj, 3, 1, 0, 1, 1); dpd_contract244(&tIA, &Eaijk, &WMnIj, 1, 0, 1, 1, 1); dpd_buf4_close(&Eijka); dpd_buf4_close(&Eaijk); dpd_file2_close(&tIA); dpd_file2_close(&tia); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); dpd_buf4_close(&WMnIj); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 2, 2, 2, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&D_anti, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&D_anti, &tauIJAB, &WMNIJ, 0, 0, 1, 1); dpd_contract444(&D_anti, &tauijab, &Wmnij, 0, 0, 1, 1); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&tauijab); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D_anti); dpd_buf4_close(&D); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 12, 12, 12, 0, "Wmnij"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&tauIJAB, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_contract444(&D, &tauIJAB, &WMNIJ, 0, 0, 1, 1); dpd_buf4_close(&tauIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&tauijab, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_contract444(&D, &tauijab, &Wmnij, 0, 0, 1, 1); dpd_buf4_close(&tauijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&tauIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&D, &tauIjAb, &WMnIj, 0, 0, 1, 1); dpd_buf4_close(&tauIjAb); dpd_buf4_close(&D); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&Wmnij); dpd_buf4_close(&WMnIj); } timer_off("Wmnij"); } void Wmbej_for_Wabij(void) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ, W; dpdbuf4 C, D, E, F, X, tIAjb, tiaJB, t2, Y, Z; dpdfile2 tIA, tia; int Gmb, mb, Gj, Ge, Gf, nrows, ncols, nlinks; timer_on("C->Wmbej"); /* W(mb,je) <-- <mb||ej> */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_close(&D); } else if(params.ref == 1) { /*** ROHF ***/ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_copy(&D, CC_TMP0, "WmBeJ"); dpd_buf4_close(&D); } else if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WMbEj", 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WmBeJ", 1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); } timer_off("C->Wmbej"); timer_on("F->Wmbej"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); /* should be OOC-capable in libdpd */ dpd_buf4_close(&WMbEj); dpd_buf4_close(&F); /* dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_axpy(&Z, &WMbeJ, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); */ /* W(Mb,Je) <-- t(J,F) <Mb|Fe> */ /* OOC code added to replace above on 3/23/05, TDC */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) { dpd_buf4_mat_irrep_row_init(&W, Gmb); dpd_buf4_mat_irrep_row_init(&F, Gmb); for(mb=0; mb < F.params->rowtot[Gmb]; mb++) { dpd_buf4_mat_irrep_row_rd(&W, Gmb, mb); dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Gf = Gj; /* T1 is totally symmetric */ Ge = Gmb ^ Gf; /* <mb|fe> is totally symmetric */ nrows = moinfo.occpi[Gj]; ncols = moinfo.virtpi[Ge]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,-1.0,tIA.matrix[Gj][0],nlinks, &F.matrix[Gmb][0][F.col_offset[Gmb][Gf]],ncols,1.0, &W.matrix[Gmb][0][W.col_offset[Gmb][Gj]],ncols); } dpd_buf4_mat_irrep_row_wrt(&W, Gmb, mb); } dpd_buf4_mat_irrep_row_close(&F, Gmb); dpd_buf4_mat_irrep_row_close(&W, Gmb); } dpd_file2_mat_close(&tIA); dpd_buf4_close(&W); dpd_buf4_close(&F); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&F, &tIA, &WMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&F, &tia, &Wmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tia, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&F, &tIA, &WmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract244(&tIA, &F, &WMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract244(&tia, &F, &WmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("F->Wmbej"); timer_on("E->Wmbej"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&E, &tIA, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&E, &tia, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tia, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&E, &tIA, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tia, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&E, &tIA, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("E->Wmbej"); /* Convert to (ME,JB) for remaining terms */ timer_on("sort Wmbej"); if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_buf4_sort(&WMBEJ, CC_HBAR, prsq, 10, 10, "WMBEJ"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_buf4_sort(&Wmbej, CC_HBAR, prsq, 10, 10, "Wmbej"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_buf4_sort(&WmBeJ, CC_HBAR, prsq, 10, 10, "WmBeJ"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_sort(&WmBEj, CC_HBAR, psrq, 10, 10, "WmBEj"); dpd_buf4_close(&WmBEj); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 20, "WMBEJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 30, "Wmbej"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 30, "WMbEj"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 20, "WmBeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_sort(&W, CC_HBAR, psrq, 24, 24, "WMbeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_sort(&W, CC_HBAR, psrq, 27, 27, "WmBEj"); dpd_buf4_close(&W); } timer_off("sort Wmbej"); timer_on("X->Wmbej"); if(params.ref == 0) { /** RHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 0, -0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 21, 20, 21, 0, "D <IJ||AB> (IA,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (me,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 31, 30, 31, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 10, 20, 10, 0, "Y (ME,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 31, 20, 31, 0, "D <Ij|Ab> (IA,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 0, 30, 0, 0, "Y (me,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 21, 30, 21, 0, "D <Ij|Ab> (ia,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Me,Jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mE,jN)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); } timer_off("X->Wmbej"); } void purge_Wabij(void) { dpdfile4 W; int *occpi, *virtpi; int h, a, b, e, f, i, j, m, n; int A, B, E, F, I, J, M, N; int mn, ei, ma, ef, me, jb, mb, ij, ab; int asym, bsym, esym, fsym, isym, jsym, msym, nsym; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi, nirreps; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* Purge Wabij (ij,ab) matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 2, 7, "WABIJ residual"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ab=0; ab < W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ( (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][mn][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wabij (ij,ab) matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 2, 7, "Wabij residual"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ab=0; ab < W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ( (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][mn][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); /* Purge Wabij (ij,ab) matrix elements */ dpd_file4_init(&W, CC_HBAR, 0, 0, 5, "WAbIj residual"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&W, h); dpd_file4_mat_irrep_rd(&W, h); for(mn=0; mn < W.params->rowtot[h]; mn++) { m = W.params->roworb[h][mn][0]; n = W.params->roworb[h][mn][1]; msym = W.params->psym[m]; nsym = W.params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ab=0; ab < W.params->coltot[h]; ab++) { a = W.params->colorb[h][ab][0]; b = W.params->colorb[h][ab][1]; asym = W.params->rsym[a]; bsym = W.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; if ( (M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) || (A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ) W.matrix[h][mn][ab] = 0.0; } } dpd_file4_mat_irrep_wrt(&W, h); dpd_file4_mat_irrep_close(&W, h); } dpd_file4_close(&W); return; } }} // namespace psi::cchbar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wamef.cc������������������������������������������������������������������������0000644�0001015�0000765�00000015525�10757640026�014347� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wamef_build(): Computes all contributions to the Wamef HBAR matrix ** elements, whose spin-orbital definition is: ** ** Wamef = <am||ef> - t_n^a <nm||ef> ** ** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).) ** ** The storage and naming convention for each spin case are ** as follows: ** ** Spin Case Storage Name ** ---------- --------- -------- ** WAMEF (MA,E>F) "WAMEF" ** Wamef (ma,e>f) "Wamef" ** WAmEf (mA,Ef) "WAmEf" ** WaMeF (Ma,eF) "WaMeF" ** ----------------------------------- ** TDC, June 2002 ** ** RHF Cases: Note that only the WAmEf spin case is required, and ** we store it AS WRITTEN, (Am,Ef). ** TDC, March 2004 ** ** For all spin cases, we now use only the following ** WAMEF (AM,E>F) "WAMEF" ** Wamef (am,e>f) "Wamef" ** WAmEf (Am,Ef) "WAmEf" ** WaMeF (aM,eF) "WaMeF" ** RAK, April 2004 ** ** For CC3, these are computed by ccenergy in file CC_HET1 ** RAK, July 2006 */ void Wamef_build(void) { dpdbuf4 Wamef, WAMEF, WAmEf, WaMeF, W; dpdbuf4 F, D; dpdfile2 tia, tIA; int h, Ga, Gn, Gm, A, a, row, nrows, ncols; if(params.ref == 0) { dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_sort(&F, CC_HBAR, qpsr, 11, 5, "WAmEf"); dpd_buf4_close(&F); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); /* dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); */ /** OOC code below added 05/04/05, -TDC **/ for(h=0; h < moinfo.nirreps; h++) { /* h = Gam = Gnm = Gef */ dpd_buf4_mat_irrep_init(&D, h); dpd_buf4_mat_irrep_rd(&D, h); row = 0; for(Ga=0; Ga < moinfo.nirreps; Ga++) { Gm = Ga ^ h; Gn = Ga; /* T1 is totally symmetric */ W.matrix[h] = dpd_block_matrix(moinfo.occpi[Gm], W.params->coltot[h]); for(A=0; A < moinfo.virtpi[Ga]; A++) { a = moinfo.vir_off[Ga] + A; dpd_buf4_mat_irrep_rd_block(&W, h, W.row_offset[h][a], moinfo.occpi[Gm]); nrows = moinfo.occpi[Gn]; ncols = moinfo.occpi[Gm] * W.params->coltot[h]; if(nrows && ncols) C_DGEMV('t',nrows,ncols,-1.0,&(D.matrix[h][row][0]),ncols,&(tIA.matrix[Gn][0][A]), moinfo.virtpi[Ga],1.0, W.matrix[h][0],1); dpd_buf4_mat_irrep_wrt_block(&W, h, W.row_offset[h][a], moinfo.occpi[Gm]); } row += moinfo.occpi[Gn] * moinfo.occpi[Gm]; dpd_free_block(W.matrix[h], moinfo.occpi[Gm], W.params->coltot[h]); } dpd_buf4_mat_irrep_close(&D, h); } dpd_buf4_close(&D); dpd_file2_mat_close(&tIA); dpd_file2_close(&tIA); dpd_buf4_close(&W); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /* <AM||EF> --> W(AM,E>F) */ /* <am||ef> --> W(am,e>f) */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>"); dpd_buf4_copy(&F, CC_HBAR, "WAMEF"); dpd_buf4_copy(&F, CC_HBAR, "Wamef"); dpd_buf4_close(&F); /* T(N,A) <NM||EF> --> W(AM,E>F) */ dpd_buf4_init(&WAMEF, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tIA, &D, &WAMEF, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WAMEF); /* T(n,a) <nm||ef> --> W(am,e>f) */ dpd_buf4_init(&Wamef, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tia, &D, &Wamef, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&Wamef); /* <Am|Ef> --> W(Am,Ef) */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC_HBAR, "WAmEf"); dpd_buf4_close(&F); /* <aM|eF> --> W(aM,eF) */ dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_copy(&F, CC_HBAR, "WaMeF"); dpd_buf4_close(&F); /* T(N,A) <Nm|Ef> --> W(Am,Ef) */ dpd_buf4_init(&WAmEf, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&tIA, &D, &WAmEf, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WAmEf); /* T(n,a) <nM|eF> --> W(aM,eF) */ dpd_buf4_init(&WaMeF, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&tia, &D, &WaMeF, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WaMeF); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /* <AM||EF> --> W(AM,E>F) */ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_copy(&F, CC_HBAR, "WAMEF"); dpd_buf4_close(&F); /* <am||ef> --> W(am,e>f) */ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_copy(&F, CC_HBAR, "Wamef"); dpd_buf4_close(&F); /* T(N,A) <NM||EF> --> W(AM,E>F) */ dpd_buf4_init(&WAMEF, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract244(&tIA, &D, &WAMEF, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WAMEF); /* T(n,a) <nm||ef> --> W(am,e>f) */ dpd_buf4_init(&Wamef, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&tia, &D, &Wamef, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&Wamef); /* <Am|Ef> --> W(Am,Ef) */ dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_buf4_copy(&F, CC_HBAR, "WAmEf"); dpd_buf4_close(&F); /* <aM|eF> --> W(aM,eF) */ dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>"); dpd_buf4_copy(&F, CC_HBAR, "WaMeF"); dpd_buf4_close(&F); /* T(N,A) <Nm|Ef> --> W(Am,Ef) */ dpd_buf4_init(&WAmEf, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract244(&tIA, &D, &WAmEf, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WAmEf); /* T(n,a) <nM|eF> --> W(aM,eF) */ dpd_buf4_init(&WaMeF, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract244(&tia, &D, &WaMeF, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&WaMeF); dpd_file2_close(&tIA); dpd_file2_close(&tia); } /** UHF **/ return; } }} // namespace psi::cchbar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wmbej.cc������������������������������������������������������������������������0000644�0001015�0000765�00000102031�10757640026�014341� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wmbej_build(): Computes all contributions to the Wmbej HBAR matrix ** elements. These are defined in terms of spin orbitals as: ** ** Wmbej = <mb||ej> + t_j^f <mb||ef> - t_n^b <mn||ej> ** - { t_jn^fb + t_j^f t_n^b } <mn||ef> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** There are Wmbej six spin cases, which are stored and named ** as follows: ** ** Spin Case Storage Name ** ---------- --------- ------- ** WMBEJ (ME,JB) "WMBEJ" ** Wmbej (me,jb) "Wmbej" ** WMbEj (ME,jb) "WMbEj" ** WmBeJ (me,JB) "WmBeJ" ** WMbeJ (Me,bJ) "WMbeJ" ** WmBEj (mE,Bj) "WmBEj" ** ------------------------------- ** ** TDC, June 2002 */ void Wmbej_build(void) { dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ; dpdbuf4 tIAJB, tjAIb, tiajb, tIAjb, tiaJB, tIbjA; dpdbuf4 D, C, F, E, X, Y, t2, W, Z; dpdfile2 tIA, tia; int Gmb, mb, Gj, Ge, Gf, nrows, ncols, nlinks; if(params.ref == 0) { /** RHF **/ /* <mb||ej> -> Wmbej */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_close(&D); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /* F -> Wmbej */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); /* should run OOC, if needed */ dpd_buf4_close(&WMbEj); dpd_buf4_close(&F); /* dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>"); dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)"); dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_axpy(&Z, &WMbeJ, 1.0); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&Z); dpd_buf4_close(&F); */ /* W(Mb,Je) <-- t(J,F) <Mb|Fe> */ /* OOC code added to replace above on 3/26/05, TDC */ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_file2_mat_init(&tIA); dpd_file2_mat_rd(&tIA); for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) { dpd_buf4_mat_irrep_row_init(&W, Gmb); dpd_buf4_mat_irrep_row_init(&F, Gmb); for(mb=0; mb < F.params->rowtot[Gmb]; mb++) { dpd_buf4_mat_irrep_row_rd(&W, Gmb, mb); dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Gf = Gj; /* T1 is totally symmetric */ Ge = Gmb ^ Gf; /* <mb|fe> is totally symmetric */ nrows = moinfo.occpi[Gj]; ncols = moinfo.virtpi[Ge]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) C_DGEMM('n','n',nrows,ncols,nlinks,-1.0,tIA.matrix[Gj][0],nlinks, &F.matrix[Gmb][0][F.col_offset[Gmb][Gf]],ncols,1.0, &W.matrix[Gmb][0][W.col_offset[Gmb][Gj]],ncols); } dpd_buf4_mat_irrep_row_wrt(&W, Gmb, mb); } dpd_buf4_mat_irrep_row_close(&F, Gmb); dpd_buf4_mat_irrep_row_close(&W, Gmb); } dpd_file2_mat_close(&tIA); dpd_buf4_close(&W); dpd_buf4_close(&F); dpd_file2_close(&tIA); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_close(&E); dpd_file2_close(&tIA); /* Sort to (ME,JB) */ dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); /* T1^2 -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &t2, &W, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); } else if(params.ref == 1) { /** ROHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 11, 10, 11, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_buf4_copy(&D, CC_TMP0, "WMbEj"); dpd_buf4_copy(&D, CC_TMP0, "WmBeJ"); dpd_buf4_close(&D); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&F, &tIA, &WMBEJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&F, &tia, &Wmbej, 3, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&F, &tia, &WMbEj, 3, 1, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&F, &tIA, &WmBeJ, 3, 1, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract244(&tIA, &F, &WMbeJ, 1, 2, 1, -1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract244(&tia, &F, &WmBEj, 1, 2, 1, -1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&F); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 11, 2, 11, 0, "E <ij||ka> (i>j,ak)"); dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_contract424(&E, &tIA, &WMBEJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_contract424(&E, &tia, &Wmbej, 1, 0, 1, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_contract424(&E, &tia, &WMbEj, 3, 0, 1, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_contract424(&E, &tIA, &WmBeJ, 3, 0, 1, -1, 1); dpd_buf4_close(&WmBeJ); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&E, &tia, &WMbeJ, 1, 0, 1, 1, 1); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&E, &tIA, &WmBEj, 1, 0, 1, 1, 1); dpd_buf4_close(&WmBEj); dpd_buf4_close(&E); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&WMBEJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMBEJ"); dpd_buf4_sort(&WMBEJ, CC_HBAR, prsq, 10, 10, "WMBEJ"); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC_TMP0, 0, 10, 11, 10, 11, 0, "Wmbej"); dpd_buf4_sort(&Wmbej, CC_HBAR, prsq, 10, 10, "Wmbej"); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj"); dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj"); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC_TMP0, 0, 10, 11, 10, 11, 0, "WmBeJ"); dpd_buf4_sort(&WmBeJ, CC_HBAR, prsq, 10, 10, "WmBeJ"); dpd_buf4_close(&WmBeJ); dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ"); dpd_buf4_close(&WMbeJ); dpd_buf4_init(&WmBEj, CC_TMP0, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_sort(&WmBEj, CC_HBAR, psrq, 10, 10, "WmBEj"); dpd_buf4_close(&WmBEj); /* X -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D(me,nf) * T2(jb,nf) --> W(me,jb) */ dpd_buf4_init(&Wmbej, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); /* D(me,NF) * T2(jb,NF) --> W(me,jb) */ dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tiaJB, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); dpd_buf4_close(&Wmbej); /* D(ME,NF) * T2(JB,NF) --> W(ME,JB) */ dpd_buf4_init(&WMBEJ, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); /* D(ME,nf) * T2(JB,nf) --> W(ME,JB) */ dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_contract444(&D, &tIAjb, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); dpd_buf4_close(&WMBEJ); /* D(me,nf) * T2(JB,nf) --> W(me,JB) */ dpd_buf4_init(&WmBeJ, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &tIAjb, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); /* D(me,NF) * T2(JB,NF) --> W(me,JB) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); dpd_buf4_close(&WmBeJ); /* D(ME,NF) * T2(jb,NF) --> W(ME,jb) */ dpd_buf4_init(&WMbEj, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &tiaJB, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); /* D(ME,nf) * T2(jb,nf) --> W(ME,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &tiajb, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); dpd_buf4_close(&WMbEj); /* D(mE,Nf) * T2(jB,Nf) --> W(mE,jB) */ dpd_buf4_init(&WmBEj, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tjAIb, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&D, &tjAIb, &WmBEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tjAIb); dpd_buf4_close(&WmBEj); /* D(Me,nF) * T2(Jb,nF) --> W(Me,Jb) */ dpd_buf4_init(&WMbeJ, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&tIbjA, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&D, &tIbjA, &WMbeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIbjA); dpd_buf4_close(&WMbeJ); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /* W(mb,je) <-- <mb||ej> */ dpd_buf4_init(&C, CC_CINTS, 0, 20, 21, 20, 21, 0, "C <IA||JB> (IA,BJ)"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMBEJ", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 30, 31, 30, 31, 0, "C <ia||jb> (ia,bj)"); dpd_buf4_scmcopy(&C, CC_TMP0, "Wmbej", -1); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WMbEj", 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_scmcopy(&D, CC_TMP0, "WmBeJ", 1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WmBEj", -1); dpd_buf4_close(&C); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1); dpd_buf4_close(&C); /* F -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&F, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&F, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract424(&F, &tia, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract424(&F, &tIA, &W, 3, 1, 0, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract244(&tIA, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&F, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_contract244(&tia, &F, &W, 1, 2, 1, -1, 1); dpd_buf4_close(&F); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* E -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_init(&E, CC_EINTS, 0, 0, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_init(&E, CC_EINTS, 0, 10, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_contract424(&E, &tia, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_contract424(&E, &tIA, &W, 1, 0, 1, 1, 1); dpd_buf4_close(&E); dpd_buf4_close(&W); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* Convert to (ME,JB) for remaining terms */ dpd_buf4_init(&W, CC_TMP0, 0, 20, 21, 20, 21, 0, "WMBEJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 20, "WMBEJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 30, 31, 30, 31, 0, "Wmbej"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 30, "Wmbej"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 26, 24, 26, 0, "WMbEj"); dpd_buf4_sort(&W, CC_HBAR, prsq, 20, 30, "WMbEj"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 25, 27, 25, 0, "WmBeJ"); dpd_buf4_sort(&W, CC_HBAR, prsq, 30, 20, "WmBeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_sort(&W, CC_HBAR, psrq, 24, 24, "WMbeJ"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_TMP0, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_sort(&W, CC_HBAR, psrq, 27, 27, "WmBEj"); dpd_buf4_close(&W); /* X -> Wmbej */ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /*** AAAA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 0, 20, 0, 0, "Y (ME,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 21, 20, 21, 0, "D <IJ||AB> (IA,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BBBB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 10, 30, 10, 0, "Y (me,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 31, 30, 31, 0, "D <ij||ab> (ia,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 20, 10, 20, 10, 0, "Y (ME,jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 31, 20, 31, 0, "D <Ij|Ab> (IA,bj)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BABA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&t2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&t2); dpd_buf4_close(&D); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 30, 0, 30, 0, 0, "Y (me,JN)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 21, 30, 21, 0, "D <Ij|Ab> (ia,BJ)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** ABBA ***/ dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&t2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 24, 22, 24, 22, 0, "Y (Me,Jn)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract424(&Y, &tia, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); /*** BAAB ***/ dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&t2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tiBJa"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_contract444(&D, &t2, &W, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&t2); dpd_buf4_close(&W); dpd_buf4_init(&Y, CC_TMP0, 0, 27, 23, 27, 23, 0, "Y (mE,jN)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_contract244(&tia, &D, &Y, 1, 2, 1, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&Y); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* D(me,nf) * T2(jb,nf) --> W(me,jb) */ dpd_buf4_init(&Wmbej, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &tiajb, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); /* D(me,NF) * T2(jb,NF) --> W(me,jb) */ dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract444(&D, &tiaJB, &Wmbej, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); dpd_buf4_close(&Wmbej); /* D(ME,NF) * T2(JB,NF) --> W(ME,JB) */ dpd_buf4_init(&WMBEJ, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); /* D(ME,nf) * T2(JB,nf) --> W(ME,JB) */ dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract444(&D, &tIAjb, &WMBEJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); dpd_buf4_close(&WMBEJ); /* D(me,nf) * T2(JB,nf) --> W(me,JB) */ dpd_buf4_init(&WmBeJ, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&tIAjb, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &tIAjb, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAjb); /* D(me,NF) * T2(JB,NF) --> W(me,JB) */ dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&tIAJB, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &tIAJB, &WmBeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIAJB); dpd_buf4_close(&WmBeJ); /* D(ME,NF) * T2(jb,NF) --> W(ME,jb) */ dpd_buf4_init(&WMbEj, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&tiaJB, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &tiaJB, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiaJB); /* D(ME,nf) * T2(jb,nf) --> W(ME,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&tiajb, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &tiajb, &WMbEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tiajb); dpd_buf4_close(&WMbEj); /* D(mE,Nf) * T2(jB,Nf) --> W(mE,jB) */ dpd_buf4_init(&WmBEj, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&tjAIb, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_contract444(&D, &tjAIb, &WmBEj, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tjAIb); dpd_buf4_close(&WmBEj); /* D(Me,nF) * T2(Jb,nF) --> W(Me,Jb) */ dpd_buf4_init(&WMbeJ, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_init(&tIbjA, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&D, &tIbjA, &WMbeJ, 0, 0, 0.5, 1); dpd_buf4_close(&D); dpd_buf4_close(&tIbjA); dpd_buf4_close(&WMbeJ); } /** UHF **/ return; } }} // namespace psi::cchbar �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wmbij.cc������������������������������������������������������������������������0000644�0001015�0000765�00000137346�10757640026�014366� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /** Wmbij_build(): Constructs the Wmbij HBAR intermediate, defined in ** spin orbitals as: ** ** Wmbij = <mb||ij> - Fme t_ij^be - t_n^b Wmnij + 1/2 <mb||ef> tau_ij^ef ** + P(ij) <mn||ie> t_jn^be + P(ij) t_i^e { <mb||ej> - t_nj^bf <mn||ef> } ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** For RHF orbitals, there is only one unique spin case: WMbIj. ** ** TDC, March 2004 */ void Wmbij_build(void) { dpdfile2 Fme, T1; dpdbuf4 W, E, T2, Wmnij, I, Tau, Z, Z1, Z2, C, D; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC_HBAR, rspq, 10, 0, "WMbIj"); dpd_buf4_close(&E); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); /** <MB||IJ> **/ dpd_buf4_sort(&E, CC_HBAR, rspq, 10, 2, "WMBIJ"); /** <mb||ij> **/ dpd_buf4_sort(&E, CC_HBAR, rspq, 10, 2, "Wmbij"); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); /** <Mb|Ij> **/ dpd_buf4_sort(&E, CC_HBAR, rspq, 10, 0, "WMbIj"); /** <mB|iJ> **/ dpd_buf4_sort(&E, CC_HBAR, rspq, 10, 0, "WmBiJ"); dpd_buf4_close(&E); } else if(params.ref == 2) { /** UHF **/ /** <MB||IJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC_HBAR, rspq, 20, 2, "WMBIJ"); dpd_buf4_close(&E); /** <mb||ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC_HBAR, rspq, 30, 12, "Wmbij"); dpd_buf4_close(&E); /** <Mb|Ij> **/ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC_HBAR, rspq, 24, 22, "WMbIj"); dpd_buf4_close(&E); /** <mB|iJ> **/ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC_HBAR, rspq, 27, 23, "WmBiJ"); dpd_buf4_close(&E); } if(params.ref == 0) { /** RHF **/ /** F_ME t_Ij^Eb --> W(Mb,Ij) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); } else if(params.ref ==1) { /** ROHF **/ /** F_ME t_IJ^EB --> W(MB,IJ) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "WMBIJ"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_me t_ij^eb --> W(mb,ij) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "Wmbij"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_ME t_Ij^Eb --> W(Mb,Ij) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_me t_iJ^eB --> W(mB,iJ) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); } else if(params.ref == 2) { /** UHF **/ /** F_ME t_IJ^EB --> W(MB,IJ) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 2, 20, 2, 0, "WMBIJ"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_me t_ij^eb --> W(mb,ij) **/ dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 12, 30, 12, 0, "Wmbij"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_ME t_Ij^Eb --> W(Mb,Ij) **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "FME"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); /** F_me t_iJ^eB --> W(mB,iJ) **/ dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_buf4_init(&T2, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_contract244(&Fme, &T2, &W, 1, 2, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&T2); dpd_file2_close(&Fme); } if(params.ref == 0) { /** RHF **/ /** - t_n^b W_MnIj **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); } else if(params.ref == 1) { /** ROHF **/ /** - t_N^B W_MNIJ --> W(MB,IJ) **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "WMBIJ"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_n^b W_mnij **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 2, 2, 2, 0, "Wmnij"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "Wmbij"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_n^b W_MnIj **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_N^B W_mNiJ **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_buf4_sort(&Wmnij, CC_TMP0, qprs, 0, 0, "WnMIj"); dpd_buf4_close(&Wmnij); dpd_buf4_init(&Wmnij, CC_TMP0, 0, 0, 0, 0, 0, 0, "WnMIj"); dpd_buf4_sort(&Wmnij, CC_TMP1, pqsr, 0, 0, "WnMjI"); dpd_buf4_close(&Wmnij); dpd_buf4_init(&Wmnij, CC_TMP1, 0, 0, 0, 0, 0, 0, "WnMjI"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); } else if(params.ref == 2) { /** UHF **/ /** - t_N^B W_MNIJ --> W(MB,IJ) **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 0, 2, 2, 2, 0, "WMNIJ"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 2, 20, 2, 0, "WMBIJ"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_n^b W_mnij **/ dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 10, 12, 12, 12, 0, "Wmnij"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 12, 30, 12, 0, "Wmbij"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_n^b W_MnIj **/ dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); /** - t_N^B W_mNiJ **/ dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_buf4_sort(&Wmnij, CC_TMP0, qpsr, 23, 23, "WmNiJ"); dpd_buf4_close(&Wmnij); dpd_buf4_init(&Wmnij, CC_TMP0, 0, 23, 23, 23, 23, 0, "WmNiJ"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_contract424(&Wmnij, &T1, &W, 1, 0, 1, -1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Wmnij); dpd_file2_close(&T1); } if(params.ref == 0) { /** RHF **/ /** <Mb|Ef> tau_Ij^Ef **/ dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); /* should run OCC, if needed */ dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); } else if(params.ref == 1) { /** ROHF **/ /** <MB||EF> tau_IJ^EF **/ dpd_buf4_init(&I, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "WMBIJ"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); /* <mb||ef> tau_ij^ef **/ dpd_buf4_init(&I, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 2, 10, 2, 0, "Wmbij"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); /** <Mb|Ef> tau_Ij^Ef **/ dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); /** <mB|eF> tau_iJ^eF **/ dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauiJaB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); } else if(params.ref == 2) { /** UHF **/ /** <MB||EF> tau_IJ^EF **/ dpd_buf4_init(&I, CC_FINTS, 0, 20, 7, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 2, 20, 2, 0, "WMBIJ"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&Tau); dpd_buf4_close(&I); dpd_buf4_close(&W); /* <mb||ef> tau_ij^ef **/ dpd_buf4_init(&I, CC_FINTS, 0, 30, 17, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 12, 30, 12, 0, "Wmbij"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); /** <Mb|Ef> tau_Ij^Ef **/ dpd_buf4_init(&I, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); /** <mB|eF> tau_iJ^eF **/ dpd_buf4_init(&I, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tauiJaB"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_contract444(&I, &Tau, &W, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Tau); dpd_buf4_close(&I); } /* Sort <ij||ka> integrals for the E*T2 contributions */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&I, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&I, CC_TMP0, prqs, 0, 10, "<Mn|Ie> (MI,ne)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>"); dpd_buf4_sort(&I, CC_TMP0, sqrp, 0, 10, "2 <Mn|Ie> - <Nm|Ie> (MI,ne)"); dpd_buf4_close(&I); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&I, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&I, CC_TMP0, prqs, 0, 10, "I(MI,NE)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&I, CC_TMP1, prqs, 0, 10, "I(MI,NE)"); dpd_buf4_close(&I); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&I, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&I, CC_TMP0, prqs, 0, 20, "<MN||IE> (MI,NE)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&I, CC_TMP0, prqs, 10, 30, "<mn||ie> (mi,ne)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&I, CC_TMP0, prqs, 0, 30, "<Mn|Ie> (MI,ne)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&I, CC_TMP0, prqs, 10, 20, "<mN|iE> (mi,NE)"); dpd_buf4_close(&I); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(MI,jb)"); dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "2 <Mn|Ie> - <Nm|Ie> (MI,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "<Mn|Ie> (MI,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&I, &T2, &Z, 0, 1, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_sort_axpy(&Z, CC_HBAR, psqr, 10, 0, "WMbIj", 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(Mj,Ib)"); dpd_buf4_init(&I, CC_EINTS, 0, 0, 11, 0, 11, 0, "E <ij|ak>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 11, 10, 11, 0, "tIbAj"); dpd_contract444(&I, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_sort_axpy(&Z, CC_HBAR, psrq, 10, 0, "WMbIj", -1); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ /** <MN||IE> t_JN^BE **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(MI,JB)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <Mn||Ie> t_Jn^Be **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <MN||JE> t_IN^BE **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&Z, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(MJ,IB)"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <Mn||Je> t_In^Be **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(MI,JB)"); dpd_buf4_sort(&Z1, CC_TMP4, prqs, 0, 10, "Z(MJ,IB)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP4, 0, 0, 10, 0, 10, 0, "Z(MJ,IB)"); dpd_buf4_init(&Z2, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(MJ,IB)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(MJ,IB)"); dpd_buf4_sort(&Z2, CC_TMP4, psrq, 10, 0, "Z(MB,IJ)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(MB,IJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 2, 0, "WMBIJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** <mn||ie> t_jn^be **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(mi,jb)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <mN||iE> t_jN^bE **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <mn||je> t_in^be **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&Z, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(mj,ib)"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <mN||jE> t_iN^bE **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(mi,jb)"); dpd_buf4_sort(&Z1, CC_TMP4, prqs, 0, 10, "Z(mj,ib)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP4, 0, 0, 10, 0, 10, 0, "Z(mj,ib)"); dpd_buf4_init(&Z2, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(mj,ib)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP3, 0, 0, 10, 0, 10, 0, "Z(mj,ib)"); dpd_buf4_sort(&Z2, CC_TMP4, psrq, 10, 0, "Z(mb,ij)"); dpd_buf4_close(&Z2); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(mb,ij)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 2, 0, "Wmbij"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** <MN||IE> t_jN^bE **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(MI,jb)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP3, psrq, 10, 0, "Z(Mb,jI)"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 0, 10, 0, 0, "Z(Mb,jI)"); dpd_buf4_sort(&Z, CC_TMP4, pqsr, 10, 0, "Z(Mb,Ij)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** <Mn|Ie> t_jn^be **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(MI,jb)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP3, psrq, 10, 0, "Z(Mb,jI)"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 0, 10, 0, 0, "Z(Mb,jI)"); dpd_buf4_sort(&Z, CC_TMP4, pqsr, 10, 0, "Z(Mb,Ij)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** <mn||ie> t_Jn^Be **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(mi,JB)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP3, psrq, 10, 0, "Z(mB,Ji)"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 0, 10, 0, 0, "Z(mB,Ji)"); dpd_buf4_sort(&Z, CC_TMP4, pqsr, 10, 0, "Z(mB,iJ)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(mB,iJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** <mN|iE> t_JN^BE **/ dpd_buf4_init(&I, CC_TMP1, 0, 0, 10, 0, 10, 0, "I(MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(mi,JB)"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP3, psrq, 10, 0, "Z(mB,Ji)"); dpd_buf4_close(&Z); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_init(&Z, CC_TMP3, 0, 10, 0, 10, 0, 0, "Z(mB,Ji)"); dpd_buf4_sort(&Z, CC_TMP4, pqsr, 10, 0, "Z(mB,iJ)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP4, 0, 10, 0, 10, 0, 0, "Z(mB,iJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 20, 0, 20, 0, "Z(MI,JB)"); /** <MN||IE> t_JN^BE **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 20, 0, 20, 0, "<MN||IE> (MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <Mn|Ie> t_Jn^Be **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 30, 0, 30, 0, "<Mn|Ie> (MI,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** Z(MI,JB) --> Z(MB,IJ) **/ dpd_buf4_sort(&Z, CC_TMP0, psqr, 20, 0, "Z(MB,IJ)"); dpd_buf4_close(&Z); /** Z(MB,IJ) = Z(MB,IJ) - Z(MB,JI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z(MB,IJ)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 20, 0, "Z(MB,JI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z(MB,JI)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); /** Z(MB,IJ) --> W(MB,IJ) **/ dpd_buf4_init(&W, CC_HBAR, 0, 20, 0, 20, 2, 0, "WMBIJ"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 30, 10, 30, 0, "Z(mi,jb)"); /** <mn||ie> t_jn^be **/ dpd_buf4_init(&I, CC_TMP0, 0, 10, 30, 10, 30, 0, "<mn||ie> (mi,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <mN||iE> t_jN^bE **/ dpd_buf4_init(&I, CC_TMP0, 0, 10, 20, 10, 20, 0, "<mN|iE> (mi,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** Z(mi,jb) --> Z(mb,ij) **/ dpd_buf4_sort(&Z, CC_TMP0, psqr, 30, 10, "Z(mb,ij)"); dpd_buf4_close(&Z); /** Z(mb,ij) = Z(mb,ij) - Z(mb,ji) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z(mb,ij)"); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 30, 10, "Z(mb,ji)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z(mb,ji)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); /** Z(mb,ij) --> W(mb,ij) **/ dpd_buf4_init(&W, CC_HBAR, 0, 30, 10, 30, 12, 0, "Wmbij"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 30, 0, 30, 0, "Z(MI,jb)"); /** <MN||IE> t_jN^bE **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 20, 0, 20, 0, "<MN||IE> (MI,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <Mn|Ie> t_jn^be **/ dpd_buf4_init(&I, CC_TMP0, 0, 0, 30, 0, 30, 0, "<Mn|Ie> (MI,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** Z(MI,jb) --> Z(Mb,Ij) **/ dpd_buf4_sort(&Z, CC_TMP0, psqr, 24, 22, "Z(Mb,Ij)"); dpd_buf4_close(&Z); /** -<Mn|Ej> t_In^Eb **/ dpd_buf4_init(&Z, CC_TMP0, 0, 22, 24, 22, 24, 0, "Z(Mj,Ib)"); dpd_buf4_init(&I, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 26, 24, 26, 0, "tIbAj"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_sort(&Z, CC_TMP0, psrq, 24, 22, "Z1(Mb,Ij)"); dpd_buf4_close(&Z); /** Z(Mb,Ij) --> W(Mb,Ij) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z(Mb,Ij)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z1(Mb,Ij)"); dpd_buf4_axpy(&Z1, &Z, 1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 20, 10, 20, 0, "Z(mi,JB)"); /** <mn||ie> t_Jn^Be **/ dpd_buf4_init(&I, CC_TMP0, 0, 10, 30, 10, 30, 0, "<mn||ie> (mi,ne)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** <mN|iE> t_JN^BE **/ dpd_buf4_init(&I, CC_TMP0, 0, 10, 20, 10, 20, 0, "<mN|iE> (mi,NE)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&I, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); /** Z(mi,JB) --> Z(mB,iJ) **/ dpd_buf4_sort(&Z, CC_TMP0, psqr, 27, 23, "Z(mB,iJ)"); dpd_buf4_close(&Z); /** Z(mB,iJ) --> W(mB,iJ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z(mB,iJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); /** -<mN|eJ> t_iN^eB **/ dpd_buf4_init(&Z, CC_TMP0, 0, 23, 27, 23, 27, 0, "Z(mJ,iB)"); dpd_buf4_init(&I, CC_EINTS, 0, 23, 25, 23, 25, 0, "E <iJ|aK>"); dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 25, 27, 25, 0, "tiBaJ"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_sort(&Z, CC_TMP0, psrq, 27, 23, "Z(mB,iJ)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z(mB,iJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z); } /** UHF **/ if(params.ref == 1) { /** RHF or ROHF **/ /* Sort <ai||jk> integrals for remaining E*T2 contributions */ /** THIS IS NOT ACTUALLY NECESSARY! FIX THESE CONTRACTIONS! (11/14/01) **/ dpd_buf4_init(&I, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_sort(&I, CC_TMP0, rspq, 0, 11, "I(Mn,Ej)"); dpd_buf4_close(&I); dpd_buf4_init(&I, CC_TMP0, 0, 0, 11, 0, 11, 0, "I(Mn,Ej)"); dpd_buf4_sort(&I, CC_TMP1, psrq, 0, 11, "I(Mj,En)"); dpd_buf4_close(&I); /** -<Mn|Ej> t_In^EB **/ /** Can be written as: - <Mj|En> t_In^Eb !! **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&T2, CC_TMP0, psrq, 10, 11, "T2(Ib,En)"); dpd_buf4_close(&T2); dpd_buf4_init(&I, CC_TMP1, 0, 0, 11, 0, 11, 0, "I(Mj,En)"); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 11, 10, 11, 0, "T2(Ib,En)"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(Mj,Ib)"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 0, "Z(Mb,Ij)"); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); /** -<mN|eJ> t_iN^eB **/ /** Can be written as: -<mJ|eN> t_iN^Eb !! **/ dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_sort(&T2, CC_TMP0, psrq, 10, 11, "T2(iB,eN)"); dpd_buf4_close(&T2); dpd_buf4_init(&I, CC_TMP1, 0, 0, 11, 0, 11, 0, "I(Mj,En)"); dpd_buf4_init(&T2, CC_TMP0, 0, 10, 11, 10, 11, 0, "T2(iB,eN)"); dpd_buf4_init(&Z, CC_TMP2, 0, 0, 10, 0, 10, 0, "Z(mJ,iB)"); dpd_contract444(&I, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 0, "Z(mB,iJ)"); dpd_buf4_close(&T2); dpd_buf4_close(&I); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z(mB,iJ)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_axpy(&Z, &W, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&W); } /** Prepare intermediates for final term of Wmbij **/ if(params.ref == 0) { /** RHF **/ /* Z(ME,jb) = { <Mb|Ej> + t_jN^bF [2 <Mn|Ef> - <Mn|Fe>] - t_jN^Fb <Mn|Ef> } */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ME,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_contract444(&D, &T2, &Z, 0, 0, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_axpy(&D, &Z, 1); dpd_buf4_close(&D); /* W(Mb,Ij) <-- Z(ME,jb) t_I^E */ dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(MI,jb)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z1, 1, 1, 1, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_HBAR, psqr, 10, 0, "WMbIj", 1); dpd_buf4_close(&Z1); /* Z(Me,Ib) = { - <Mb|Ie> + t_In^Fb <Mn|Fe> } */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Me,Ib)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&D, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_close(&Z); dpd_buf4_init(&C, CC_CINTS, 0, 11, 10, 11, 10, 0, "C <ia|jb> (bi,ja)"); dpd_buf4_sort_axpy(&C, CC_TMP0, qprs, 10, 10, "Z(Me,Ib)", -1); dpd_buf4_close(&C); /* W(Mb,Ij) <-- Z(Me,Ib) t_j^e */ dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 10, 0, 10, 0, "Z(Mj,Ib)"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Me,Ib)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z1, 1, 1, 1, 1, 0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_HBAR, psrq, 10, 0, "WMbIj", -1); dpd_buf4_close(&Z1); } else if(params.ref == 1) { /** ROHF **/ /** t_JN^BF <MN||EF> --> Z_MBJE **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(ME,JB)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(MB,JE)"); dpd_buf4_close(&Z); /** t_I^E ( <MB||JE> + Z1_MBJE ) --> Z2_MBIJ **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(MB,JE)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z1(MB,JI)"); dpd_contract424(&Z1, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 10, 0, "Z2(MB,IJ)"); dpd_buf4_close(&Z2); /** Z1_MBJI(TMP0) - Z2_MBIJ(TMP1) --> W_MBIJ **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z1(MB,JI)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z2(MB,IJ)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 2, 0, "WMBIJ"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** t_jn^bf <mn||ef> --> Z_mbje **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(me,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(mb,je)"); dpd_buf4_close(&Z); /** t_i^e ( <mb||je> + Z1_mbje ) --> Z2_mbij **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(mb,je)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z1(mb,ji)"); dpd_contract424(&Z1, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP1, pqsr, 10, 0, "Z2(mb,ij)"); dpd_buf4_close(&Z2); /** Z1_mbji(TMP0) - Z2_mbij(TMP1) --> W_mbij **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 0, 10, 0, 0, "Z1(mb,ji)"); dpd_buf4_init(&Z2, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z2(mb,ij)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 2, 0, "Wmbij"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** <Mn|Ef> t_jn^bf + <MN||EF> t_jN^bF --> Z1_MEjb(TMP0) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z1(ME,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiajb"); dpd_contract444(&D, &T2, &Z1, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z1, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_close(&Z1); /** <Mn|Fe> t_In^Fb --> Z2_MeIb (TMP3) **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP1, psrq, 10, 11, "D(Me,Fn)"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_sort(&T2, CC_TMP2, psrq, 10, 11, "T2(Ib,Fn)"); dpd_buf4_close(&T2); dpd_buf4_init(&Z2, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(Me,Ib)"); dpd_buf4_init(&T2, CC_TMP2, 0, 10, 11, 10, 11, 0, "T2(Ib,Fn)"); dpd_buf4_init(&D, CC_TMP1, 0, 10, 11, 10, 11, 0, "D(Me,Fn)"); dpd_contract444(&D, &T2, &Z2, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_close(&Z2); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z1(ME,jb)"); dpd_buf4_sort(&Z1, CC_TMP1, psrq, 10, 10, "Z1(Mb,jE)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z2, CC_TMP3, 0, 10, 10, 10, 10, 0, "Z(Me,Ib)"); dpd_buf4_sort(&Z2, CC_TMP0, psrq, 10, 10, "Z(Mb,Ie)"); dpd_buf4_close(&Z2); /** t_I^E ( <Mj|Eb> + Z(Mb,jE)(TMP1) ) --> Z(Mb,jI)(TMP1) **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z1(Mb,jE)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_axpy(&D, &Z1, 1.0); dpd_buf4_close(&D); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(Mb,jI)"); dpd_contract424(&Z1, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP1, pqsr, 10, 0, "Z(Mb,Ij)"); dpd_buf4_close(&Z); /** t_j^e ( <Mb|Ie> - Z(Mb,Ie)(TMP0) ) --> Z(Mb,Ij)(TMP2) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Ie)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_buf4_scm(&Z1, -1.0); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&Z, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_contract424(&Z1, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); /** Z(Mb,Ij) (TMP1) + Z(Mb,Ij) (TMP2) --> W_MbIj **/ dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_buf4_init(&Z2, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(Mb,Ij)"); dpd_buf4_axpy(&Z2, &Z1, 1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** t_JN^BF <mN|eF> + t_Jn^Bf <mn||ef> --> Z(mB,Je) (TMP1) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(me,JB)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0 , 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP1, psrq, 10, 10, "Z(mB,Je)"); dpd_buf4_close(&Z); /** -t_Ni^Bf <mN|fE> --> Z(mB,iE) (TMP0) **/ dpd_buf4_init(&Z, CC_TMP2, 0, 10, 10, 10, 10, 0, "Z(mE,iB)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb"); dpd_contract444(&D, &T2, &Z, 0, 0, -1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 10, "Z(mB,iE)"); dpd_buf4_close(&Z); /** t_i^e ( <mJ|eB> + Z(mB,Je) ) --> Z1(mB,iJ) (TMP1) **/ dpd_buf4_init(&Z, CC_TMP1, 0, 10, 10, 10, 10, 0, "Z(mB,Je)"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_axpy(&D, &Z, 1.0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z(mB,Ji)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&Z, &T1, &Z1, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP1, pqsr, 10, 0, "Z1(mB,iJ)"); dpd_buf4_close(&Z1); /** t_J^E ( <mB|iE> + Z(mB,iE) ) + Z1(mB,Ij) (TMP1) --> Z2(mB,iJ) (TMP2) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(mB,iE)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_axpy(&C, &Z, 1.0); dpd_buf4_close(&C); dpd_buf4_init(&Z2, CC_TMP2, 0, 10, 0, 10, 0, 0, "Z2(mB,iJ)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP1, 0, 10, 0, 10, 0, 0, "Z1(mB,iJ)"); dpd_buf4_axpy(&Z1, &Z2, 1.0); dpd_buf4_close(&Z1); /** Z2(mB,iJ) --> W_mBiJ **/ dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&Z2); } /** RHF or ROHF **/ else if(params.ref == 2) { /** UHF **/ /** t_JN^BF <MN||EF> --> Z_MBJE **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 20, 20, 20, 0, "Z(ME,JB)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 20, 20, "Z(MB,JE)"); dpd_buf4_close(&Z); /** t_I^E ( <MB||JE> + Z1_MBJE ) --> Z2_MBIJ **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 20, 20, 20, 0, "Z(MB,JE)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z2, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z1(MB,JI)"); dpd_contract424(&Z1, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 20, 0, "Z2(MB,IJ)"); dpd_buf4_close(&Z2); /** Z1_MBJI - Z2_MBIJ --> W_MBIJ **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z1(MB,JI)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 20, 0, 20, 0, 0, "Z2(MB,IJ)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 20, 0, 20, 2, 0, "WMBIJ"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** t_jn^bf <mn||ef> --> Z_mbje **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 30, 30, 30, 0, "Z(me,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 30, 30, "Z(mb,je)"); dpd_buf4_close(&Z); /** t_i^e ( <mb||je> + Z1_mbje ) --> Z2_mbij **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 30, 30, 30, 0, "Z(mb,je)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Z2, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z1(mb,ji)"); dpd_contract424(&Z1, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z2, CC_TMP0, pqsr, 30, 10, "Z2(mb,ij)"); dpd_buf4_close(&Z2); /** Z1_mbji - Z2_mbij --> W_mbij **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z1(mb,ji)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 30, 10, 30, 10, 0, "Z2(mb,ij)"); dpd_buf4_axpy(&Z1, &Z2, -1.0); dpd_buf4_close(&Z1); dpd_buf4_init(&W, CC_HBAR, 0, 30, 10, 30, 12, 0, "Wmbij"); dpd_buf4_axpy(&Z2, &W, 1.0); dpd_buf4_close(&Z2); dpd_buf4_close(&W); /** <Mn|Ef> t_jn^bf + <MN||EF> t_jN^bF --> Z1_MEjb **/ dpd_buf4_init(&Z, CC_TMP0, 0, 20, 30, 20, 30, 0, "Z(ME,jb)"); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 24, 27, "Z(Mb,jE)"); dpd_buf4_close(&Z); /** <Mn|Fe> t_In^Fb --> Z2_MeIb **/ dpd_buf4_init(&Z, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z(Me,Ib)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 24, 27, 24, 27, 0, "tIbjA"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_sort(&Z, CC_TMP0, psrq, 24, 24, "Z(Mb,Ie)"); dpd_buf4_close(&Z); /** t_I^E ( <Mj|Eb> + Z(Mb,jE) ) --> Z(Mb,jI) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 24, 27, 24, 27, 0, "Z(Mb,jE)"); dpd_buf4_init(&D, CC_DINTS, 0, 24, 27, 24, 27, 0, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_axpy(&D, &Z1, 1.0); dpd_buf4_close(&D); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 23, 24, 23, 0, "Z(Mb,jI)"); dpd_contract424(&Z1, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 24, 22, "Z1(Mb,Ij)"); dpd_buf4_close(&Z); /** t_j^e ( <Mb|Ie> - Z(Mb,Ie) ) --> Z(Mb,Ij) **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 24, 24, 24, 24, 0, "Z(Mb,Ie)"); dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_axpy(&C, &Z1, -1.0); dpd_buf4_close(&C); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&Z, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z2(Mb,Ij)"); dpd_contract424(&Z1, &T1, &Z, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); /** Z(Mb,Ij) (TMP1) + Z(Mb,Ij) (TMP2) --> W_MbIj **/ dpd_buf4_init(&Z1, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z1(Mb,Ij)"); dpd_buf4_init(&Z2, CC_TMP0, 0, 24, 22, 24, 22, 0, "Z2(Mb,Ij)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&W, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); /** t_JN^BF <mN|eF> + t_Jn^Bf <mn||ef> --> Z(mB,Je) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 30, 20, 30, 20, 0, "Z(me,JB)"); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_contract444(&D, &T2, &Z, 0 , 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 27, 24, "Z(mB,Je)"); dpd_buf4_close(&Z); /** t_Ni^Bf <mN|fE> --> Z(mB,iE) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z(mE,iB)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 27, 24, 27, 24, 0, "tjAIb"); dpd_contract444(&D, &T2, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_sort(&Z, CC_TMP0, psrq, 27, 27, "Z(mB,iE)"); dpd_buf4_close(&Z); /** t_i^e ( <mJ|eB> + Z(mB,Je) ) --> Z1(mB,iJ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 24, 27, 24, 0, "Z(mB,Je)"); dpd_buf4_init(&D, CC_DINTS, 0, 27, 24, 27, 24, 0, "D <iJ|aB> (iB,Ja)"); dpd_buf4_axpy(&D, &Z, 1.0); dpd_buf4_close(&D); dpd_buf4_init(&Z1, CC_TMP0, 0, 27, 22, 27, 22, 0, "Z(mB,Ji)"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_contract424(&Z, &T1, &Z1, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 27, 23, "Z1(mB,iJ)"); dpd_buf4_close(&Z1); /** -t_J^E ( -<mB|iE> + Z(mB,iE) ) + Z1(mB,Ij) --> Z1(mB,iJ) **/ dpd_buf4_init(&Z, CC_TMP0, 0, 27, 27, 27, 27, 0, "Z(mB,iE)"); dpd_buf4_init(&C, CC_CINTS, 0, 27, 27, 27, 27, 0, "C <iA|jB>"); dpd_buf4_axpy(&C, &Z, -1.0); dpd_buf4_close(&C); dpd_buf4_init(&Z2, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z2(mB,iJ)"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&Z, &T1, &Z2, 3, 1, 0, 1.0, 0.0); dpd_file2_close(&T1); dpd_buf4_close(&Z); dpd_buf4_init(&Z1, CC_TMP0, 0, 27, 23, 27, 23, 0, "Z1(mB,iJ)"); dpd_buf4_axpy(&Z2, &Z1, -1.0); dpd_buf4_close(&Z2); /** Z2(mB,iJ) --> W_mBiJ **/ dpd_buf4_init(&W, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_buf4_axpy(&Z1, &W, 1.0); dpd_buf4_close(&Z1); dpd_buf4_close(&W); } } }} // namespace psi::cchbar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cchbar/Wmnie.cc������������������������������������������������������������������������0000644�0001015�0000765�00000021732�10757640026�014364� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCHBAR \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cchbar { /* Wmnie_build(): Computes all contributions to the Wmnie HBAR matrix ** elements. The spin-orbital expression for this term is: ** ** Wmnie = <mn||ie> + t_i^f <mn||fe> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** TDC, June 2002 ** ** The storage a naming convention for each of the four spin cases ** are as follows: ** Spin Case Storage Name ** ---------- --------- ------- ** WMNIE (M>N,EI) "WMNIE (M>N,EI)" ** Wmnie (m>n,ei) "Wmnie (m>n,ei)" ** WMnIe (Mn,eI) "WMnIe (Mn,eI)" ** WmNiE (mN,Ei) "WmNiE (mN,Ei)" ** ---------- --------- ------- ** WMNIE (M>N,IE) "WMNIE" ** Wmnie (m>n,ie) "Wmnie" ** WMnIe (Mn,Ie) "WMnIe" ** WmNiE (mN,iE) "WmNiE" ** ------------------------------- ** ** Labels have been changed to the above. Also, all 8 of the above plus ** plus the following for RHF are now stored by cchbar. ** 2WMnIe - WnMIe (Mn,Ie) "2WMnIe - WnMIe" ** WMnIe - 2WnMIe (Mn,Ie) "WMnIe - 2WnMIe" ** 2WMnIe - WnMIe (Mn,eI) "2WMnIe - WnMIe (Mn,eI)" ** WMnIe - 2WnMIe (Mn,eI) "WMnIe - 2WnMIe (Mn,eI)" ** RAK, April 2004 */ void purge_Wmnie(void); void Wmnie_build(void) { dpdbuf4 W, Wmnie, WMNIE, WMnIe, WmNiE, WMniE, WmNIe; dpdbuf4 E, Z; dpdbuf4 D, D_a; dpdfile2 t1, tIA, tia; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_copy(&E, CC_HBAR, "WMnIe"); dpd_buf4_close(&E); /* D(Mn,Fe) * T(I,F) --> W(Mn,Ie) */ dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&t1, &D, &WMnIe, 1, 2, 1, 1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D); /* W(Mn,Ie) --> W(Mn,eI) */ dpd_buf4_sort(&WMnIe, CC_HBAR, pqsr, 0, 11, "WMnIe (Mn,eI)"); dpd_buf4_sort(&WMnIe, CC_HBAR, qpsr, 0, 11, "WMnIe (nM,eI)"); dpd_buf4_close(&WMnIe); /* make spin-combinations */ dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_buf4_copy(&WMnIe, CC_HBAR, "WMnIe - 2WnMIe"); dpd_buf4_copy(&WMnIe, CC_HBAR, "2WMnIe - WnMIe"); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_buf4_sort_axpy(&WMnIe, CC_HBAR, qprs, 0, 10, "WMnIe - 2WnMIe", -2.0); dpd_buf4_close(&WMnIe); dpd_buf4_init(&W, CC_HBAR, 0, 0, 10, 0, 10, 0, "2WMnIe - WnMIe"); dpd_buf4_scm(&W, 2.0); dpd_buf4_close(&W); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_buf4_sort_axpy(&WMnIe, CC_HBAR, qprs, 0, 10, "2WMnIe - WnMIe", -1.0); dpd_buf4_close(&WMnIe); dpd_buf4_init(&W, CC_HBAR, 0, 0, 10, 0, 10, 0, "2WMnIe - WnMIe"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 0, 11, "2WMnIe - WnMIe (Mn,eI)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe - 2WnMIe"); dpd_buf4_sort(&W, CC_HBAR, pqsr, 0, 11, "WMnIe - 2WnMIe (Mn,eI)"); dpd_buf4_close(&W); } else if(params.ref == 1) { /** ROHF **/ /* E(M>N,EI) --> W(M>N,EI) */ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 2, 11, "WMNIE (M>N,EI)"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 2, 11, "Wmnie (m>n,ei)"); dpd_buf4_close(&E); /* D(M>N,EF) * T(I,F) --> W(M>N,EI) */ dpd_buf4_init(&WMNIE, CC_HBAR, 0, 2, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&D_a, CC_DINTS, 0, 2, 5, 2, 5,0, "D <ij||ab> (i>j,ab)"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract424(&D_a,&t1,&WMNIE, 3, 1, 0, -1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D_a); dpd_buf4_close(&WMNIE); /* D(m>n,ef) * T(i,f) --> W(m>n,ei) */ dpd_buf4_init(&Wmnie, CC_HBAR, 0, 2, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_buf4_init(&D_a, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tia"); dpd_contract424(&D_a, &t1, &Wmnie, 3, 1, 0, -1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D_a); dpd_buf4_close(&Wmnie); dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_copy(&E, CC_TMP0, "WMnIe (Mn,Ie)"); dpd_buf4_copy(&E, CC_TMP1, "WmNiE (mN,iE)"); dpd_buf4_close(&E); /* D(Mn,Fe) * T(I,F) --> W(Mn,Ie) */ dpd_buf4_init(&WMnIe, CC_TMP0, 0, 0, 10, 0, 10, 0, "WMnIe (Mn,Ie)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&t1, &D, &WMnIe, 1, 2, 1, 1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D); /* W(Mn,Ie) --> W(Mn,eI) */ dpd_buf4_sort(&WMnIe, CC_HBAR, pqsr, 0, 11, "WMnIe (Mn,eI)"); dpd_buf4_close(&WMnIe); /* D(mN,fE) * T(i,f) --> W(mN.iE) */ dpd_buf4_init(&WmNiE, CC_TMP1, 0, 0, 10, 0, 10, 0, "WmNiE (mN,iE)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tia"); dpd_contract244(&t1,&D,&WmNiE, 1, 2, 1, 1, 1); dpd_file2_close(&t1); dpd_buf4_close(&D); /* W(mN,iE) --> W(mN,Ei) */ dpd_buf4_sort(&WmNiE, CC_HBAR, pqsr, 0, 11, "WmNiE (mN,Ei)"); dpd_buf4_close(&WmNiE); purge_Wmnie(); /* also put "normal" sorted versions in CC_HBAR */ dpd_buf4_init(&WMNIE, CC_HBAR, 0, 2, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_sort(&WMNIE, CC_HBAR, pqsr, 2, 10, "WMNIE"); dpd_buf4_close(&WMNIE); dpd_buf4_init(&Wmnie, CC_HBAR, 0, 2, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_buf4_sort(&Wmnie, CC_HBAR, pqsr, 2, 10, "Wmnie"); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&WMnIe, CC_HBAR, pqsr, 0, 10, "WMnIe"); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WmNiE, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&WmNiE, CC_HBAR, pqsr, 0, 10, "WmNiE"); dpd_buf4_close(&WmNiE); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /* <M>N||IE> --> W(M>N,EI) */ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 2, 21, "WMNIE (M>N,EI)"); dpd_buf4_close(&E); /* <M>N||EF> T(I,F) --> W(M>N,EI) */ dpd_buf4_init(&W, CC_HBAR, 0, 2, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &tIA, &W, 3, 1, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /* <m>n||ie> --> W(m>n,ei) */ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 12, 31, "Wmnie (m>n,ei)"); dpd_buf4_close(&E); /* <m>n||ef> T(i,f) --> W(m>n,ei) */ dpd_buf4_init(&W, CC_HBAR, 0, 12, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &tia, &W, 3, 1, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&W); /* <Mn|Ie> --> W(Mn,eI) */ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 22, 25, "WMnIe (Mn,eI)"); dpd_buf4_close(&E); /* Z(nM,eI) = <nM|eF> T(I,F) */ dpd_buf4_init(&Z, CC_TMP1, 0, 23, 25, 23, 25, 0, "Z(nM,eI)"); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_contract424(&D, &tIA, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(nM,eI) --> W(Mn,eI) */ dpd_buf4_sort_axpy(&Z, CC_HBAR, qprs, 22, 25, "WMnIe (Mn,eI)", 1); dpd_buf4_close(&Z); /* <mN|iE> --> W(mN,Ei) */ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC_HBAR, pqsr, 23, 26, "WmNiE (mN,Ei)"); dpd_buf4_close(&E); /* Z(Nm,Ei) = <Nm|Ef> T(i,f) */ dpd_buf4_init(&Z, CC_TMP1, 0, 22, 26, 22, 26, 0, "Z(Nm,Ei)"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &tia, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /* Z(Nm,Ei) --> W(mN,Ei) */ dpd_buf4_sort_axpy(&Z, CC_HBAR, qprs, 23, 26, "WmNiE (mN,Ei)", 1); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); /* also put "normal" sorted versions in CC_HBAR */ dpd_buf4_init(&WMNIE, CC_HBAR, 0, 2, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_buf4_sort(&WMNIE, CC_HBAR, pqsr, 2, 20, "WMNIE"); dpd_buf4_close(&WMNIE); dpd_buf4_init(&Wmnie, CC_HBAR, 0, 12, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_buf4_sort(&Wmnie, CC_HBAR, pqsr, 12, 30, "Wmnie"); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_buf4_sort(&WMnIe, CC_HBAR, pqsr, 22, 24, "WMnIe"); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WmNiE, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&WmNiE, CC_HBAR, pqsr, 23, 27, "WmNiE"); dpd_buf4_close(&WmNiE); } return; } }} // namespace psi::cchbar ��������������������������������������psi3/src/bin/cclambda/������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111670�013264� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/BL2_AO.cc���������������������������������������������������������������������0000644�0001015�0000765�00000040774�10757640026�014556� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ /*! \defgroup CCLAMBDA cclambda: Coupled-Cluster Lambda Equations */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void halftrans(dpdbuf4 *Buf1, int dpdnum1, dpdbuf4 *Buf2, int dpdnum2, double ***C, int nirreps, int **mo_row, int **so_row, int *mospi, int *sospi, int type, double alpha, double beta); void AO_contribute(int p, int q, int r, int s, double value, dpdbuf4 *tau1_AO, dpdbuf4 *tau2_AO, int anti); void BL2_AO(int L_irr) { int h, nirreps, i, Gc, Gd, Ga, Gb, ij; double ***C, **X; int *orbspi, *virtpi; int **T2_cd_row_start, **T2_pq_row_start, offset, cd, pq; dpdbuf4 tau, t2, tau1_AO, tau2_AO; psio_address next; struct iwlbuf InBuf; int idx, p, q, r, s, filenum; int lastbuf; double value, tolerance=1e-14; Value *valptr; Label *lblptr; nirreps = moinfo.nirreps; orbspi = moinfo.orbspi; virtpi = moinfo.virtpi; C = moinfo.C; T2_cd_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_cd_row_start[h][Gc] = offset; offset += virtpi[Gc] * virtpi[Gd]; } } T2_pq_row_start = init_int_matrix(nirreps,nirreps); for(h=0; h < nirreps; h++) { for(Gc=0,offset=0; Gc < nirreps; Gc++) { Gd = Gc ^ h; T2_pq_row_start[h][Gc] = offset; offset += orbspi[Gc] * orbspi[Gd]; } } /************************************* AA *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIJPQ (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "LIJAB"); halftrans(&tau, 0, &tau1_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIJPQ (1)"); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIJPQ (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 1); } while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 1); } } iwl_buf_close(&InBuf, 1); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIJPQ (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New LIJAB"); halftrans(&t2, 0, &tau2_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* BB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "Lijpq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "Lijab"); halftrans(&tau, 0, &tau1_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "Lijpq (1)"); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "Lijpq (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 1); } while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 1); } } iwl_buf_close(&InBuf, 1); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "Lijpq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New Lijab"); halftrans(&t2, 0, &tau2_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 1, 0.5, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); /************************************* AB *****************************************/ dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjPq (1)"); dpd_buf4_scm(&tau1_AO, 0.0); dpd_set_default(0); dpd_buf4_init(&tau, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); halftrans(&tau, 0, &tau1_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 0, 1.0, 0.0); dpd_buf4_close(&tau); dpd_buf4_close(&tau1_AO); dpd_set_default(1); dpd_buf4_init(&tau1_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjPq (1)"); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjPq (2)"); dpd_buf4_scm(&tau2_AO, 0.0); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&tau1_AO, h); dpd_buf4_mat_irrep_rd(&tau1_AO, h); dpd_buf4_mat_irrep_init(&tau2_AO, h); } iwl_buf_init(&InBuf, PSIF_SO_TEI, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 0); } while(!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "<%d %d %d %d = %20.10lf\n", p, q, r, s, value); */ AO_contribute(p, q, r, s, value, &tau1_AO, &tau2_AO, 0); } } iwl_buf_close(&InBuf, 1); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau2_AO, h); dpd_buf4_mat_irrep_close(&tau1_AO, h); } dpd_buf4_close(&tau1_AO); dpd_buf4_close(&tau2_AO); dpd_set_default(1); dpd_buf4_init(&tau2_AO, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjPq (2)"); dpd_set_default(0); dpd_buf4_init(&t2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); halftrans(&t2, 0, &tau2_AO, 1, C, nirreps, T2_cd_row_start, T2_pq_row_start, virtpi, orbspi, 1, 1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&tau2_AO); free(T2_cd_row_start); free(T2_pq_row_start); /* Reset the default dpd back to 0 --- this stuff gets really ugly */ dpd_set_default(0); } void AO_contribute(int p, int q, int r, int s, double value, dpdbuf4 *tau1_AO, dpdbuf4 *tau2_AO, int anti) { int Gp, Gq, Gr, Gs, Gpr, Gps, Gqr, Gqs, Grp, Gsp, Grq, Gsq; int pr, ps, qr, qs, rp, rq, sp, sq, pq, rs; int row; Gp = tau1_AO->params->rsym[p]; Gq = tau1_AO->params->rsym[q]; Gr = tau1_AO->params->rsym[r]; Gs = tau1_AO->params->rsym[s]; pq = tau1_AO->params->colidx[p][q]; rs = tau1_AO->params->colidx[r][s]; if(p!=q && r!=s) { /* (pq|rs) */ Gpr = Gp ^ Gr; pr = tau1_AO->params->colidx[p][r]; qs = tau1_AO->params->colidx[q][s]; sq = tau1_AO->params->colidx[s][q]; for(row=0; row < tau1_AO->params->rowtot[Gpr]; row++) { tau2_AO->matrix[Gpr][row][pr] += value * tau1_AO->matrix[Gpr][row][qs]; if(anti) tau2_AO->matrix[Gpr][row][pr] -= value * tau1_AO->matrix[Gpr][row][sq]; } /* (pq|sr) */ Gps = Gp ^ Gs; ps = tau1_AO->params->colidx[p][s]; qr = tau1_AO->params->colidx[q][r]; rq = tau1_AO->params->colidx[r][q]; for(row=0; row < tau1_AO->params->rowtot[Gps]; row++) { tau2_AO->matrix[Gps][row][ps] += value * tau1_AO->matrix[Gps][row][qr]; if(anti) tau2_AO->matrix[Gps][row][ps] -= value * tau1_AO->matrix[Gps][row][rq]; } /* (qp|rs) */ Gqr = Gq ^ Gr; qr = tau1_AO->params->colidx[q][r]; ps = tau1_AO->params->colidx[p][s]; sp = tau1_AO->params->colidx[s][p]; for(row=0; row < tau1_AO->params->rowtot[Gqr]; row++) { tau2_AO->matrix[Gqr][row][qr] += value * tau1_AO->matrix[Gqr][row][ps]; if(anti) tau2_AO->matrix[Gqr][row][qr] -= value * tau1_AO->matrix[Gqr][row][sp]; } /* (qp|sr) */ Gqs = Gq ^ Gs; qs = tau1_AO->params->colidx[q][s]; pr = tau1_AO->params->colidx[p][r]; rp = tau1_AO->params->colidx[r][p]; for(row=0; row < tau1_AO->params->rowtot[Gqs]; row++) { tau2_AO->matrix[Gqs][row][qs] += value * tau1_AO->matrix[Gqs][row][pr]; if(anti) tau2_AO->matrix[Gqs][row][qs] -= value * tau1_AO->matrix[Gqs][row][rp]; } if(pq != rs) { /* (rs|pq) */ Grp = Gp ^ Gr; rp = tau1_AO->params->colidx[r][p]; sq = tau1_AO->params->colidx[s][q]; qs = tau1_AO->params->colidx[q][s]; for(row=0; row < tau1_AO->params->rowtot[Grp]; row++) { tau2_AO->matrix[Grp][row][rp] += value * tau1_AO->matrix[Grp][row][sq]; if(anti) tau2_AO->matrix[Grp][row][rp] -= value * tau1_AO->matrix[Grp][row][qs]; } /* (sr|pq) */ Gsp = Gp ^ Gs; sp = tau1_AO->params->colidx[s][p]; qr = tau1_AO->params->colidx[q][r]; rq = tau1_AO->params->colidx[r][q]; for(row=0; row < tau1_AO->params->rowtot[Gsp]; row++) { tau2_AO->matrix[Gsp][row][sp] += value * tau1_AO->matrix[Gsp][row][rq]; if(anti) tau2_AO->matrix[Gsp][row][sp] -= value * tau1_AO->matrix[Gsp][row][qr]; } /* (rs|qp) */ Grq = Gq ^ Gr; rq = tau1_AO->params->colidx[r][q]; ps = tau1_AO->params->colidx[p][s]; sp = tau1_AO->params->colidx[s][p]; for(row=0; row < tau1_AO->params->rowtot[Grq]; row++) { tau2_AO->matrix[Grq][row][rq] += value * tau1_AO->matrix[Grq][row][sp]; if(anti) tau2_AO->matrix[Grq][row][rq] -= value * tau1_AO->matrix[Grq][row][ps]; } /* (sr|qp) */ Gsq = Gq ^ Gs; sq = tau1_AO->params->colidx[s][q]; pr = tau1_AO->params->colidx[p][r]; rp = tau1_AO->params->colidx[r][p]; for(row=0; row < tau1_AO->params->rowtot[Gsq]; row++) { tau2_AO->matrix[Gsq][row][sq] += value * tau1_AO->matrix[Gsq][row][rp]; if(anti) tau2_AO->matrix[Gsq][row][sq] -= value * tau1_AO->matrix[Gsq][row][pr]; } } } else if(p!=q && r==s) { /* (pq|rs) */ Gpr = Gp ^ Gr; pr = tau1_AO->params->colidx[p][r]; qs = tau1_AO->params->colidx[q][s]; sq = tau1_AO->params->colidx[s][q]; for(row=0; row < tau1_AO->params->rowtot[Gpr]; row++) { tau2_AO->matrix[Gpr][row][pr] += value * tau1_AO->matrix[Gpr][row][qs]; if(anti) tau2_AO->matrix[Gpr][row][pr] -= value * tau1_AO->matrix[Gpr][row][sq]; } /* (qp|rs) */ Gqr = Gq ^ Gr; qr = tau1_AO->params->colidx[q][r]; ps = tau1_AO->params->colidx[p][s]; sp = tau1_AO->params->colidx[s][p]; for(row=0; row < tau1_AO->params->rowtot[Gqr]; row++) { tau2_AO->matrix[Gqr][row][qr] += value * tau1_AO->matrix[Gqr][row][ps]; if(anti) tau2_AO->matrix[Gqr][row][qr] -= value * tau1_AO->matrix[Gqr][row][sp]; } if(pq != rs) { /* (rs|pq) */ Grp = Gp ^ Gr; rp = tau1_AO->params->colidx[r][p]; sq = tau1_AO->params->colidx[s][q]; qs = tau1_AO->params->colidx[q][s]; for(row=0; row < tau1_AO->params->rowtot[Grp]; row++) { tau2_AO->matrix[Grp][row][rp] += value * tau1_AO->matrix[Grp][row][sq]; if(anti) tau2_AO->matrix[Grp][row][rp] -= value * tau1_AO->matrix[Grp][row][qs]; } /* (rs|qp) */ Grq = Gq ^ Gr; rq = tau1_AO->params->colidx[r][q]; ps = tau1_AO->params->colidx[p][s]; sp = tau1_AO->params->colidx[s][p]; for(row=0; row < tau1_AO->params->rowtot[Grq]; row++) { tau2_AO->matrix[Grq][row][rq] += value * tau1_AO->matrix[Grq][row][sp]; if(anti) tau2_AO->matrix[Grq][row][rq] -= value * tau1_AO->matrix[Grq][row][ps]; } } } else if(p==q && r!=s) { /* (pq|rs) */ Gpr = Gp ^ Gr; pr = tau1_AO->params->colidx[p][r]; qs = tau1_AO->params->colidx[q][s]; sq = tau1_AO->params->colidx[s][q]; for(row=0; row < tau1_AO->params->rowtot[Gpr]; row++) { tau2_AO->matrix[Gpr][row][pr] += value * tau1_AO->matrix[Gpr][row][qs]; if(anti) tau2_AO->matrix[Gpr][row][pr] -= value * tau1_AO->matrix[Gpr][row][sq]; } /* (pq|sr) */ Gps = Gp ^ Gs; ps = tau1_AO->params->colidx[p][s]; qr = tau1_AO->params->colidx[q][r]; rq = tau1_AO->params->colidx[r][q]; for(row=0; row < tau1_AO->params->rowtot[Gps]; row++) { tau2_AO->matrix[Gps][row][ps] += value * tau1_AO->matrix[Gps][row][qr]; if(anti) tau2_AO->matrix[Gps][row][ps] -= value * tau1_AO->matrix[Gps][row][rq]; } if(pq != rs) { /* (rs|pq) */ Grp = Gp ^ Gr; rp = tau1_AO->params->colidx[r][p]; sq = tau1_AO->params->colidx[s][q]; qs = tau1_AO->params->colidx[q][s]; for(row=0; row < tau1_AO->params->rowtot[Grp]; row++) { tau2_AO->matrix[Grp][row][rp] += value * tau1_AO->matrix[Grp][row][sq]; if(anti) tau2_AO->matrix[Grp][row][rp] -= value * tau1_AO->matrix[Grp][row][qs]; } /* (sr|pq) */ Gsp = Gp ^ Gs; sp = tau1_AO->params->colidx[s][p]; qr = tau1_AO->params->colidx[q][r]; rq = tau1_AO->params->colidx[r][q]; for(row=0; row < tau1_AO->params->rowtot[Gsp]; row++) { tau2_AO->matrix[Gsp][row][sp] += value * tau1_AO->matrix[Gsp][row][rq]; if(anti) tau2_AO->matrix[Gsp][row][sp] -= value * tau1_AO->matrix[Gsp][row][qr]; } } } else if(p==q && r==s) { /* (pq|rs) */ Gpr = Gp ^ Gr; pr = tau1_AO->params->colidx[p][r]; qs = tau1_AO->params->colidx[q][s]; sq = tau1_AO->params->colidx[s][q]; for(row=0; row < tau1_AO->params->rowtot[Gpr]; row++) { tau2_AO->matrix[Gpr][row][pr] += value * tau1_AO->matrix[Gpr][row][qs]; if(anti) tau2_AO->matrix[Gpr][row][pr] -= value * tau1_AO->matrix[Gpr][row][sq]; } if(pq != rs) { /* (rs|pq) */ Grp = Gp ^ Gr; rp = tau1_AO->params->colidx[r][p]; sq = tau1_AO->params->colidx[s][q]; qs = tau1_AO->params->colidx[q][s]; for(row=0; row < tau1_AO->params->rowtot[Grp]; row++) { tau2_AO->matrix[Grp][row][rp] += value * tau1_AO->matrix[Grp][row][sq]; if(anti) tau2_AO->matrix[Grp][row][rp] -= value * tau1_AO->matrix[Grp][row][qs]; } } } return; } }} // namespace psi::cclambda ����psi3/src/bin/cclambda/c_clean.cc��������������������������������������������������������������������0000644�0001015�0000765�00000010761�10757640026�015175� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /*** This function removes incorrectly non-zero elements from *** *** a vector. The non-zero elements are due to the *** *** specification of open-shell orbitals as both occupied *** *** and virtual orbitals. ***/ void c_clean(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f, h, M, N, E, F; int msym, nsym, esym, fsym; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMNEF, h); dpd_buf4_mat_irrep_rd(CMNEF, h); for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) { for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) { e = CMNEF->params->colorb[h^C_irr][ef][0]; f = CMNEF->params->colorb[h^C_irr][ef][1]; esym = CMNEF->params->rsym[e]; fsym = CMNEF->params->ssym[f]; E = e - vir_off[esym]; F = f - vir_off[fsym]; if ((E >= (virtpi[esym] - openpi[esym])) || (F >= (virtpi[fsym] - openpi[fsym])) ) CMNEF->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMNEF, h); dpd_buf4_mat_irrep_close(CMNEF, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(Cmnef, h); dpd_buf4_mat_irrep_rd(Cmnef, h); for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) { m = Cmnef->params->roworb[h][mn][0]; n = Cmnef->params->roworb[h][mn][1]; msym = Cmnef->params->psym[m]; nsym = Cmnef->params->qsym[n]; M = m - occ_off[msym]; N = n - occ_off[nsym]; for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) { if ((M >= (occpi[msym] - openpi[msym])) || (N >= (occpi[nsym] - openpi[nsym])) ) Cmnef->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(Cmnef, h); dpd_buf4_mat_irrep_close(Cmnef, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(CMnEf, h); dpd_buf4_mat_irrep_rd(CMnEf, h); for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) { n = CMnEf->params->roworb[h][mn][1]; nsym = CMnEf->params->qsym[n]; N = n - occ_off[nsym]; for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) { e = CMnEf->params->colorb[h^C_irr][ef][0]; esym = CMnEf->params->rsym[e]; E = e - vir_off[esym]; if ((N >= (occpi[nsym] - openpi[nsym])) || (E >= (virtpi[esym] - openpi[esym])) ) CMnEf->matrix[h][mn][ef] = 0.0; } } dpd_buf4_mat_irrep_wrt(CMnEf, h); dpd_buf4_mat_irrep_close(CMnEf, h); } return; } void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) { int *occpi, *virtpi, *occ_off, *vir_off, *openpi; int nirreps, *occ_sym, *vir_sym; int mn, ef, m, n, e, f; int h, M, N, E, F; int msym, nsym, esym, fsym, C_irr; C_irr = CME->my_irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_mat_init(CME); dpd_file2_mat_rd(CME); for(h=0; h < nirreps; h++) { for(m=0; m<occpi[h]; m++) for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++) CME->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(CME); dpd_file2_mat_init(Cme); dpd_file2_mat_rd(Cme); for(h=0; h < nirreps; h++) { for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++) for(e=0; e<virtpi[h^C_irr]; e++) Cme->matrix[h][m][e] = 0.0; } dpd_file2_mat_wrt(Cme); return; } }} // namespace psi::cclambda ���������������psi3/src/bin/cclambda/cache.cc����������������������������������������������������������������������0000644�0001015�0000765�00000037535�10757640026�014664� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace cclambda { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMBDA] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMBDA] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc2_faeL2.cc������������������������������������������������������������������0000644�0001015�0000765�00000013754�10757640026�015276� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /** The ROHF version of this contraction can be done with fewer contractions. **/ void cc2_faeL2(int L_irr) { int h, e; dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLIJAB, newLijab, newLIjAb; dpdfile2 fab, fAB, F; dpdbuf4 X, X1, X2; dpdbuf4 L2, newL2; /* RHS += P(ab)*Lijae*Feb */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract424(&L2, &F, &X, 3, 0, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&X, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&X, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&LIJAB, &fAB, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&fAB, &LIJAB, &X2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&Lijab, &fab, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&fab, &Lijab, &X2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_contract424(&LIjAb, &fab, &newLIjAb, 3, 0, 0, 1.0, 1.0); dpd_contract244(&fAB, &LIjAb, &newLIjAb, 0, 2, 1, 1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&fab); dpd_file2_close(&fAB); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_copy(&fAB, CC_OEI, "fAB diag"); dpd_file2_copy(&fab, CC_OEI, "fab diag"); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB diag"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab diag"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); for(h=0; h < moinfo.nirreps; h++) { for(e=0; e < fAB.params->coltot[h]; e++) fAB.matrix[h][e][e] = 0; for(e=0; e < fab.params->coltot[h]; e++) fab.matrix[h][e][e] = 0; } dpd_file2_mat_wrt(&fAB); dpd_file2_mat_close(&fAB); dpd_file2_mat_wrt(&fab); dpd_file2_mat_close(&fab); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB diag"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab diag"); /** X(IJ,AB) = L_IJ^AE F_EB **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract424(&LIJAB, &fAB, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&LIJAB); /** X(IJ,AB) --> X'(IJ,BA) **/ dpd_buf4_sort(&X, CC_TMP1, pqsr, 2, 5, "X'(IJ,BA)"); dpd_buf4_close(&X); /** X(IJ,AB) = X(IJ,AB) - X'(IJ,BA) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X'(IJ,BA)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); dpd_buf4_close(&X1); /** L(IJ,AB) <-- X(IJ,AB) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X, &newLIJAB, 1.0); dpd_buf4_close(&X); dpd_buf4_close(&newLIJAB); /** X(ij,ab) = L_ij^ae F_eb **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract424(&LIJAB, &fab, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&LIJAB); /** X(ij,ab) --> X'(ij,ba) **/ dpd_buf4_sort(&X, CC_TMP1, pqsr, 12, 15, "X'(ij,ba)"); dpd_buf4_close(&X); /** X(ij,ab) = X(ij,ab) - X'(ij,ba) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X'(ij,ba)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); dpd_buf4_close(&X1); /** L(ij,ab) <-- X(ij,ab) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X, &newLIJAB, 1.0); dpd_buf4_close(&X); dpd_buf4_close(&newLIJAB); /** L(Ij,Ab) <-- L(Ij,Ae) F(e,b) - F(E,A) L(Ij,Eb) **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_contract424(&LIjAb, &fab, &newLIjAb, 3, 0, 0, 1, 1); dpd_contract244(&fAB, &LIjAb, &newLIjAb, 0, 2, 1, 1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&fab); dpd_file2_close(&fAB); } } }} // namespace psi::cclambda ��������������������psi3/src/bin/cclambda/cc2_fmiL2.cc������������������������������������������������������������������0000644�0001015�0000765�00000013447�10757640026�015315� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /** The RHF/ROHF contractions can be improved here **/ void cc2_fmiL2(int L_irr) { int h, m; dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLijab, newLIJAB, newLIjAb; dpdfile2 fij, fIJ, F; dpdbuf4 X, X1, X2; dpdbuf4 L2, newL2; /* RHS -= P(ij)*Limab*Fjm */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract244(&F, &L2, &X, 1, 0, 0, -1.0, 0); dpd_file2_close(&F); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&X, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&X, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&X); } else if(params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&LIJAB, &fIJ, &X1, 1, 1, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&fIJ, &LIJAB, &X2, 1, 0, 0, -1.0, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&Lijab, &fij, &X1, 1, 1, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&fij, &Lijab, &X2, 1, 0, 0, -1.0, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_contract424(&LIjAb, &fij, &newLIjAb, 1, 1, 1, -1.0, 1.0); dpd_contract244(&fIJ, &LIjAb, &newLIjAb, 1, 0, 0, -1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&fij); dpd_file2_close(&fIJ); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_copy(&fIJ, CC_OEI, "fIJ diag"); dpd_file2_copy(&fij, CC_OEI, "fij diag"); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ diag"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij diag"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); for(h=0; h < moinfo.nirreps; h++) { for(m=0; m < fIJ.params->rowtot[h]; m++) fIJ.matrix[h][m][m] = 0; for(m=0; m < fij.params->rowtot[h]; m++) fij.matrix[h][m][m] = 0; } dpd_file2_mat_wrt(&fIJ); dpd_file2_mat_close(&fIJ); dpd_file2_mat_wrt(&fij); dpd_file2_mat_close(&fij); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ diag"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij diag"); /** X(IJ,AB) = F(I,M) L(MJ,AB) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(IJ,AB) B"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract244(&fIJ, &LIJAB, &X, 1, 0, 0, -1, 0); dpd_buf4_close(&LIJAB); /** X(IJ,AB) --> X'(JI,AB) **/ dpd_buf4_sort(&X, CC_TMP1, qprs, 0, 7, "X'(JI,AB)"); dpd_buf4_close(&X); /** X(IJ,AB) = X(IJ,AB) - X'(JI,AB) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(IJ,AB) B"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X'(JI,AB)"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); /** L(IJ,AB) <--- X(IJ,AB) **/ dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X1, &newLIJAB, 1.0); dpd_buf4_close(&X1); dpd_buf4_close(&newLIJAB); /** X(ij,ab) = F(i,m) L(mj,ab) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X(ij,ab) B"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract244(&fij, &LIJAB, &X, 1, 0, 0, -1, 0); dpd_buf4_close(&LIJAB); /** X(ij,ab) --> X'(ji,ab) **/ dpd_buf4_sort(&X, CC_TMP1, qprs, 10, 17, "X'(ji,ab)"); dpd_buf4_close(&X); /** X(ij,ab) = X(ij,ab) - X'(ji,ab) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X(ij,ab) B"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X'(ji,ab)"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); /** L(ij,ab) <--- X(ij,ab) **/ dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X1, &newLIJAB, 1.0); dpd_buf4_close(&X1); dpd_buf4_close(&newLIJAB); /** L(Ij,Ab) <-- L(Im,Ab) F(j,m) - F(I,M) L(Mj,Ab) **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_contract424(&LIjAb, &fij, &newLIjAb, 1, 1, 1, -1, 1); dpd_contract244(&fIJ, &LIjAb, &newLIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&fij); dpd_file2_close(&fIJ); } } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc2_Gai.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006631�10757640026�015041� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc2_Gai_build(int L_irr) { dpdbuf4 tIJAB, tijab, tiJaB, tIjAb, tijAB, tIJab, t2; dpdfile2 G, GAI, Gai, L1, LIA, Lia; dpdbuf4 LIJAB, Lijab, LIjAb, LiJaB; if(params.ref == 0) { dpd_file2_init(&G, CC_TMP0, L_irr, 1, 0, "CC2 GAI"); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&t2, &L1, &G, 0, 1, 1, 0); dpd_buf4_close(&t2); dpd_file2_close(&L1); dpd_file2_close(&G); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&G, CC_TMP0, L_irr, 1, 0, "GAI"); dpd_file2_init(&G, CC_TMP0, L_irr, 4, 3, "Gai"); /* T2(MJ,AB) * L2(IJ,AB) --> G(M,I) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&tIJAB, &LIJAB, &G, 0, 0, 1.0, 0.0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Mj,Ab) * L2(Ij,Ab) --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&tIjAb, &LIjAb, &G, 0, 0, 1.0, 1.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(mj,ab) * L2(ij,ab) --> G(m,i) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&tijab, &Lijab, &G, 0, 0, 1.0, 0.0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(mJ,aB) * L2(iJ,aB) --> G(m,i) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&tiJaB, &LiJaB, &G, 0, 0, 1.0, 1.0); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&G); dpd_file2_close(&G); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&GAI, CC_TMP0, L_irr, 1, 0, "CC2 GAI"); dpd_file2_init(&Gai, CC_TMP0, L_irr, 3, 2, "CC2 Gai"); /** AA **/ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 20, 20, 20, 20, 0, "tIAJB"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_contract422(&tIJAB, &LIA, &GAI, 0, 1, 1, 0); dpd_file2_close(&LIA); dpd_buf4_close(&tIJAB); dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 20, 30, 20, 30, 0, "tIAjb"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_contract422(&tIjAb, &Lia, &GAI, 0, 1, 1, 1); dpd_file2_close(&Lia); dpd_buf4_close(&tIjAb); /** BB **/ dpd_buf4_init(&tijab, CC_TAMPS, 0, 30, 30, 30, 30, 0, "tiajb"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_contract422(&tijab, &Lia, &Gai, 0, 1, 1, 0); dpd_file2_close(&Lia); dpd_buf4_close(&tijab); dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 30, 20, 30, 20, 0, "tiaJB"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_contract422(&tiJaB, &LIA, &Gai, 0, 1, 1, 1); dpd_file2_close(&LIA); dpd_buf4_close(&tiJaB); dpd_file2_close(&Gai); dpd_file2_close(&GAI); } return; } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc2_hbar_extra.cc�������������������������������������������������������������0000644�0001015�0000765�00000001671�10757640026�016457� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc2_hbar_extra(void) { dpdbuf4 W1, W2, W; /* CC2 W(ME,jb) + W(Me,Jb) is constructed in CCEOM for EOM_CC2 */ if(!strcmp(params.wfn,"CC2")) { if(params.ref == 0) { /** RHF **/ /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Me,Jb)"); dpd_buf4_copy(&W1, CC2_HET1, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W1); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj (ME,jb)"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_close(&W1); } } } }} // namespace psi::cclambda �����������������������������������������������������������������������psi3/src/bin/cclambda/cc2_L1.cc���������������������������������������������������������������������0000644�0001015�0000765�00000035441�10757640026�014616� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void local_filter_T1(dpdfile2 *T1); void cc2_L1_build(struct L_Params L_params) { int GW, GL1, GL2, Gab, Gij, Gei, Gi, Ga, Gm; int a, A, i, I, ab, nlinks, nrows, ncols; dpdfile2 newLIA, newLia, LIA, Lia; dpdfile2 dIA, dia, Fme, FME; dpdfile2 Fae, FAE, Fmi, FMI; dpdfile2 GMI, Gmi, Gae, XIA, Xia; dpdfile2 GAE, G, GAI, Gai; dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ; dpdbuf4 WMBIJ, Wmbij, WMbIj, WmBiJ; dpdbuf4 LIJAB, Lijab, LIjAb, LiJaB, L2; dpdbuf4 WMNIE, Wmnie, WMnIe, WmNiE; dpdbuf4 WAMEF, Wamef, WAmEf, WaMeF, W; dpdbuf4 Z, D, E; dpdfile2 XLD; int L_irr; L_irr = L_params.irrep; /* ground state inhomogeneous term is Fme */ if (L_params.ground) { if(params.ref == 0) { dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&FME); } else if(params.ref == 1) { dpd_file2_init(&Fme,CC_OEI, 0, 0, 1, "Fme"); dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&Fme); dpd_file2_close(&FME); } else if(params.ref == 2) { dpd_file2_init(&Fme,CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&Fme); dpd_file2_close(&FME); } } /* excited state - no inhomogenous term, first term is -energy*L*/ else if (!params.zeta) { if (params.ref == 0 || params.ref == 1) { dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_axpy(&LIA, &newLIA, -1.0 * L_params.cceom_energy, 0); dpd_file2_axpy(&Lia, &newLia, -1.0 * L_params.cceom_energy, 0); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); dpd_file2_close(&Lia); dpd_file2_close(&newLia); } else if (params.ref == 2) { /* do nothing - TDC did not change to increments for the UHF case */ } } if(params.ref == 0) { dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); /* L1 RHS += Lie*Fea */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&LIA,&FAE,&newLIA, 0, 1, 1, 1); dpd_file2_close(&FAE); /* L1 RHS += -Lma*Fim */ dpd_file2_init(&FMI,CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&FMI,&LIA,&newLIA, 0, 1, -1, 1); dpd_file2_close(&FMI); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); /* L1 RHS += Lie*Fea */ dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); dpd_contract222(&Lia,&Fae,&newLia, 0, 1, 1, 1); dpd_contract222(&LIA,&FAE,&newLIA, 0, 1, 1, 1); dpd_file2_close(&Fae); dpd_file2_close(&FAE); /* L1 RHS += -Lma*Fim */ dpd_file2_init(&FMI,CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&Fmi,CC_OEI, 0, 2, 2, "Fmi"); dpd_contract222(&Fmi,&Lia,&newLia, 0, 1, -1, 1); dpd_contract222(&FMI,&LIA,&newLIA, 0, 1, -1, 1); dpd_file2_close(&Fmi); dpd_file2_close(&FMI); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_file2_close(&newLIA); dpd_file2_close(&newLia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); /* L1 RHS += Lme*Wieam */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_contract422(&W, &LIA, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_buf4_init(&WMBEJ, CC2_HET1, 0, 20, 21, 20, 21, 0, "CC2 WMBEJ (ME,BJ)"); dpd_contract422(&WMBEJ, &LIA, &newLIA, 1, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&Wmbej, CC2_HET1, 0, 30, 31, 30, 31, 0, "CC2 Wmbej (me,bj)"); dpd_contract422(&Wmbej, &Lia, &newLia, 1, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WMbEj, CC2_HET1, 0, 20, 31, 20, 31, 0, "CC2 WMbEj (ME,bj)"); dpd_contract422(&WMbEj, &Lia, &newLIA, 1, 0, -1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&WmBeJ, CC2_HET1, 0, 30, 21, 30, 21, 0, "CC2 WmBeJ (me,BJ)"); dpd_contract422(&WmBeJ, &LIA, &newLia, 1, 0, -1, 1); dpd_buf4_close(&WmBeJ); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_file2_close(&newLIA); dpd_file2_close(&newLia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_buf4_sort(&L2, CC_TMP0, rspq, 5, 0, "Z (2 AbIj - AbjI)"); dpd_buf4_close(&L2); /* L1 RHS += 1/2 Limef*Wefam */ /* Out-of-core contract442 */ dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_buf4_init(&L2, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "Z (2 AbIj - AbjI)"); /* dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); */ GW = W.file.my_irrep; GL2 = L2.file.my_irrep; GL1 = newLIA.my_irrep; dpd_file2_mat_init(&newLIA); dpd_file2_mat_rd(&newLIA); for(Gab=0; Gab < moinfo.nirreps; Gab++) { dpd_buf4_mat_irrep_row_init(&L2, Gab); dpd_buf4_mat_irrep_row_init(&W, Gab); for(ab=0; ab < L2.params->rowtot[Gab]; ab++) { dpd_buf4_mat_irrep_row_zero(&L2, Gab, ab); dpd_buf4_mat_irrep_row_rd(&L2, Gab, ab); dpd_buf4_mat_irrep_row_zero(&W, Gab, ab); dpd_buf4_mat_irrep_row_rd(&W, Gab, ab); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Ga = Gi^GL1; Gm = GL2^Gab^Gi; nrows = L2.params->rpi[Gi]; ncols = W.params->rpi[Ga]; nlinks = L2.params->spi[Gm]; if(nrows && ncols && nlinks) { C_DGEMM('n','t',nrows,ncols,nlinks,1.0, &(L2.matrix[Gab][0][L2.col_offset[Gab][Gi]]),nlinks, &(W.matrix[Gab][0][W.col_offset[Gab][Ga]]),nlinks,1.0, &(newLIA.matrix[Gi][0][0]),ncols); } } } dpd_buf4_mat_irrep_row_close(&L2, Gab); dpd_buf4_mat_irrep_row_close(&W, Gab); } dpd_file2_mat_wrt(&newLIA); dpd_file2_mat_close(&newLIA); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_buf4_init(&W, CC2_HET1, 0, 21, 7, 21, 7, 0, "CC2 WABEI (EI,A>B)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC2_HET1, 0, 26, 28, 26, 28, 0, "CC2 WAbEi (Ei,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC2_HET1, 0, 31, 17, 31, 17, 0, "CC2 Wabei (ei,a>b)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC2_HET1, 0, 25, 29, 25, 29, 0, "CC2 WaBeI (eI,aB)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_file2_close(&newLIA); dpd_file2_close(&newLia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); /* L1 RHS += -1/2 Lmnae*Wiemn */ dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_contract442(&W, &LIjAb, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&W); dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); /* L1 RHS += -1/2 Lmnae*Wiemn */ dpd_buf4_init(&WMBIJ, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&WMBIJ, &LIJAB, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&LIJAB); dpd_buf4_close(&WMBIJ); dpd_buf4_init(&WMbIj, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj (Mb,Ij)"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&WMbIj, &LIjAb, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&WMbIj); dpd_buf4_init(&Wmbij, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&Wmbij, &Lijab, &newLia, 0, 2, -1, 1); dpd_buf4_close(&Lijab); dpd_buf4_close(&Wmbij); dpd_buf4_init(&WmBiJ, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&WmBiJ, &LiJaB, &newLia, 0, 2, -1, 1); dpd_buf4_close(&LiJaB); dpd_buf4_close(&WmBiJ); dpd_file2_close(&newLIA); dpd_file2_close(&newLia); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); /* L1 RHS += Gbj*<ij|ab> */ dpd_file2_init(&G, CC_TMP0, L_irr, 1, 0, "CC2 GAI"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract422(&D, &G, &newLIA, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&G); dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_init(&GAI, CC_LAMBDA, L_irr, 1, 0, "CC2 GAI"); dpd_file2_init(&Gai, CC_LAMBDA, L_irr, 3, 2, "CC2 Gai"); /* L1 RHS += Gbj*<ij|ab> */ /** AA **/ dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_contract422(&D, &GAI, &newLIA, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_contract422(&D, &Gai, &newLIA, 1, 0, 1, 1); dpd_buf4_close(&D); /** BB**/ dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_contract422(&D, &Gai, &newLia, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_contract422(&D, &GAI, &newLia, 1, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&Gai); dpd_file2_close(&GAI); dpd_file2_close(&newLIA); dpd_file2_close(&newLia); } if(params.ref == 0) { /** RHF **/ /* newLia * Dia */ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment"); dpd_file2_close(&newLIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); if(params.local && local.filter_singles) local_filter_T1(&newLIA); else { dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); } dpd_file2_close(&newLIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA"); dpd_file2_close(&LIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_axpy(&LIA, &newLIA, 1, 0); /*dpd_file2_print(&newLIA,outfile);*/ dpd_file2_close(&LIA); dpd_file2_copy(&newLIA, CC_LAMBDA, "New Lia"); /* spin-adaptation for RHF */ dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ /* newLia * Dia */ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment"); dpd_file2_close(&newLIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); dpd_file2_close(&newLIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA"); dpd_file2_close(&LIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_axpy(&LIA, &newLIA, 1, 0); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_copy(&newLia, CC_LAMBDA, "New Lia Increment"); dpd_file2_close(&newLia); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment"); dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia"); dpd_file2_dirprd(&dia, &newLia); dpd_file2_close(&dia); dpd_file2_close(&newLia); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_copy(&Lia, CC_LAMBDA, "New Lia"); dpd_file2_close(&Lia); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment"); dpd_file2_axpy(&Lia, &newLia, 1, 0); dpd_file2_close(&Lia); dpd_file2_close(&newLia); } else if(params.ref == 2) { /** UHF **/ /* newLia * Dia */ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); dpd_file2_close(&newLIA); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia"); dpd_file2_dirprd(&dia, &newLia); dpd_file2_close(&dia); dpd_file2_close(&newLia); } #ifdef EOM_DEBUG check_sum("after L1 build",L_irr); #endif return; } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc2_L2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000002743�11112564564�014614� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void DL2(struct L_Params L_params); void cc2_faeL2(int L_irr); void cc2_fmiL2(int L_irr); void WijmnL2(int L_irr); void WefabL2(int L_irr); void WejabL2(int L_irr); void WijmbL2(int L_irr); void L1FL2(int L_irr); void dijabL2(int L_irr); void BL2_AO(int L_irr); void status(const char *, FILE *); void cc2_L2_build(struct L_Params L_params) { int L_irr; L_irr = L_params.irrep; DL2(L_params); if(params.print & 2) status("<ij||ab> -> L2", outfile); #ifdef EOM_DEBUG check_sum("DL2", L_irr); #endif cc2_faeL2(L_irr); #ifdef EOM_DEBUG check_sum("FaeL2", L_irr); #endif cc2_fmiL2(L_irr); #ifdef EOM_DEBUG check_sum("FmiL2", L_irr); #endif if(params.print & 2) status("F -> L2", outfile); WijmbL2(L_irr); #ifdef EOM_DEBUG check_sum("WmnieL2", L_irr); #endif if(params.print & 2) status("Wmnie -> L2", outfile); WejabL2(L_irr); #ifdef EOM_DEBUG check_sum("WejabL2", L_irr); #endif if(params.print & 2) status("Wamef -> L2", outfile); L1FL2(L_irr); #ifdef EOM_DEBUG check_sum("L1FL2", L_irr); #endif if(params.print & 2) status("L1*F -> L2", outfile); dijabL2(L_irr); #ifdef EOM_DEBUG check_sum("after D2s", L_irr); #endif if(params.print & 2) status("L2 amplitudes", outfile); } }} // namespace psi::cclambda �����������������������������psi3/src/bin/cclambda/cc3_l3l1.cc�������������������������������������������������������������������0000644�0001015�0000765�00000013262�10754663017�015115� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc3_l3l1(void) { dpdfile2 L1, D1, L1new; dpdbuf4 Z, W; int nirreps, Gde, Gg, Gi, Ga; int de, ig, ag; int nrows, ncols, nlinks; nirreps = moinfo.nirreps; dpd_buf4_init(&Z, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZIGDE"); dpd_buf4_sort(&Z, CC3_MISC, rspq, 5, 10, "CC3 ZIGDE (DE,IG)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZIgDe"); dpd_buf4_sort(&Z, CC3_MISC, rspq, 5, 10, "CC3 ZIgDe (De,Ig)"); dpd_buf4_close(&Z); dpd_file2_init(&L1, CC3_MISC, 0, 0, 1, "CC3 LIA"); dpd_file2_mat_init(&L1); dpd_buf4_init(&W, CC3_HET1, 0, 5, 5, 7, 7, 0, "CC3 WABEF"); dpd_buf4_init(&Z, CC3_MISC, 0, 5, 10, 5, 10, 0, "CC3 ZIGDE (DE,IG)"); for(Gde=0; Gde < nirreps; Gde++) { if(Z.params->coltot[Gde] && W.params->coltot[Gde]) { Z.matrix[Gde] = dpd_block_matrix(1, Z.params->coltot[Gde]); W.matrix[Gde] = dpd_block_matrix(1, W.params->coltot[Gde]); for(de=0; de < Z.params->rowtot[Gde]; de++) { dpd_buf4_mat_irrep_rd_block(&W, Gde, de, 1); dpd_buf4_mat_irrep_rd_block(&Z, Gde, de, 1); for(Gg=0; Gg < nirreps; Gg++) { Ga = Gi = Gg ^ Gde; /* totally symmetric */ nrows = L1.params->rowtot[Gi]; ncols = L1.params->coltot[Gi]; nlinks = Z.params->spi[Gg]; ig = Z.col_offset[Gde][Gi]; ag = W.col_offset[Gde][Ga]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, &(Z.matrix[Gde][0][ig]), nlinks, &(W.matrix[Gde][0][ag]), nlinks, 1.0, L1.matrix[Gi][0], ncols); } } dpd_free_block(Z.matrix[Gde], 1, Z.params->coltot[Gde]); dpd_free_block(W.matrix[Gde], 1, W.params->coltot[Gde]); } } dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 5, 5, 5, 5, 0, "CC3 WAbEf"); dpd_buf4_init(&Z, CC3_MISC, 0, 5, 10, 5, 10, 0, "CC3 ZIgDe (De,Ig)"); for(Gde=0; Gde < nirreps; Gde++) { if(Z.params->coltot[Gde] && W.params->coltot[Gde]) { Z.matrix[Gde] = dpd_block_matrix(1, Z.params->coltot[Gde]); W.matrix[Gde] = dpd_block_matrix(1, W.params->coltot[Gde]); for(de=0; de < Z.params->rowtot[Gde]; de++) { dpd_buf4_mat_irrep_rd_block(&W, Gde, de, 1); dpd_buf4_mat_irrep_rd_block(&Z, Gde, de, 1); for(Gg=0; Gg < nirreps; Gg++) { Ga = Gi = Gg ^ Gde; /* totally symmetric */ nrows = L1.params->rowtot[Gi]; ncols = L1.params->coltot[Gi]; nlinks = Z.params->spi[Gg]; ig = Z.col_offset[Gde][Gi]; ag = W.col_offset[Gde][Ga]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, &(Z.matrix[Gde][0][ig]), nlinks, &(W.matrix[Gde][0][ag]), nlinks, 1.0, L1.matrix[Gi][0], ncols); } } dpd_free_block(Z.matrix[Gde], 1, Z.params->coltot[Gde]); dpd_free_block(W.matrix[Gde], 1, W.params->coltot[Gde]); } } dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_mat_wrt(&L1); dpd_file2_mat_close(&L1); /* Wmbej --> L1 */ dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMBEJ (ME,JB)"); dpd_buf4_sort(&W, CC3_HET1, psrq, 10, 10, "CC3 WMBEJ (MB,JE)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (ME,jb)"); dpd_buf4_sort(&W, CC3_HET1, psrq, 10, 10, "CC3 WMbEj (Mb,jE)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Me,Jb)"); dpd_buf4_sort(&W, CC3_HET1, psrq, 10, 10, "CC3 WMbeJ (Mb,Je)"); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMBEJ (MB,JE)"); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDMAE (MD,AE)"); dpd_contract442(&W, &Z, &L1, 0, 2, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbEj (Mb,jE)"); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDmAe (mD,Ae)"); dpd_contract442(&W, &Z, &L1, 0, 2, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 10, 10, 10, 0, "CC3 WMbeJ (Mb,Je)"); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZdMAe (Md,Ae)"); dpd_contract442(&W, &Z, &L1, 0, 2, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 11, 10, 11, 0, "CC3 WMBEJ (MB,EJ)"); dpd_buf4_init(&Z, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZIMLE"); dpd_contract442(&Z, &W, &L1, 0, 2, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 11, 10, 11, 0, "CC3 WMbEj (Mb,Ej)"); dpd_buf4_init(&Z, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZImLe"); dpd_contract442(&Z, &W, &L1, 0, 2, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 10, 11, 10, 11, 0, "CC3 WmBEj (mB,Ej)"); dpd_buf4_init(&Z, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZImlE"); dpd_contract442(&Z, &W, &L1, 0, 2, 1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); /* Wmnij -> L1 */ dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 2, 2, 0, "CC3 WMNIJ (M>N,I>J)"); dpd_buf4_init(&Z, CC3_MISC, 0, 0, 11, 0, 11, 0, "CC3 ZLMAO"); dpd_contract442(&W, &Z, &L1, 0, 2, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_buf4_init(&W, CC3_HET1, 0, 0, 0, 0, 0, 0, "CC3 WMnIj (Mn,Ij)"); dpd_buf4_init(&Z, CC3_MISC, 0, 0, 11, 0, 11, 0, "CC3 ZLmAo"); dpd_contract442(&W, &Z, &L1, 0, 2, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&W); dpd_file2_init(&D1, CC_DENOM, 0, 0, 1, "dIA"); dpd_file2_dirprd(&D1, &L1); dpd_file2_close(&D1); dpd_file2_init(&L1new, CC_LAMBDA, 0, 0, 1, "New LIA"); dpd_file2_axpy(&L1, &L1new, 1, 0); dpd_file2_copy(&L1new, CC_LAMBDA, "New Lia"); dpd_file2_close(&L1new); dpd_file2_close(&L1); } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc3_l3l2.cc�������������������������������������������������������������������0000644�0001015�0000765�00000131025�10757640026�015112� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc3_l3l2_RHF_AAA(void); void cc3_l3l2_RHF_AAB(void); void L3_AAA(double ***W1, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *fIJ, dpdfile2 *fAB, dpdbuf4 *D, dpdbuf4 *LIJAB, dpdfile2 *LIA, dpdfile2 *FME, int *occpi, int *occ_off, int *virtpi, int *vir_off); void L3_AAB(double ***W1, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2AA, dpdbuf4 *T2AB, dpdbuf4 *T2BA, dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA, dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA, dpdfile2 *fIJ, dpdfile2 *fij, dpdfile2 *fAB, dpdfile2 *fab, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdbuf4 *LIJAB, dpdbuf4 *LIjAb, dpdfile2 *LIA, dpdfile2 *Lia, dpdfile2 *FME, dpdfile2 *Fme, int *aoccpi, int *aocc_off, int *boccpi, int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off); void cc3_l3l2(void) { if(params.ref == 0) { cc3_l3l2_RHF_AAA(); cc3_l3l2_RHF_AAB(); } } void cc3_l3l2_RHF_AAA(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gijk; int Gi, Gj, Gk; int Ga, Gb, Gc; int Gab, ab; int i, j, k, I, J, K; int a, b, c, A, B, C; double ***W1, ***W2; dpdbuf4 L, E, F; dpdfile2 fIJ, fAB; dpdfile2 FME, LIA; dpdbuf4 Dints, LIJAB; dpdbuf4 WMAFE, WMNIE; dpdbuf4 ZIGDE, T2; dpdbuf4 ZDMAE; dpdbuf4 ZLMAO; dpdbuf4 ZIMLE; dpdbuf4 L2new, L2, D2; int Gjk, jk, Gid, id, Gik, ik; int Gd, d, DD; int cd, dc; int Gm, m, M; int Gmi, mi, im, mc; int Gjd, jd; int Gij, ij, Gmk, mk, am, Gbc, bc; int ac, mb; int nrows, ncols, nlinks; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.occpi; occ_off = moinfo.occ_off; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; dpd_buf4_init(&WMAFE, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WMNIE, h); dpd_buf4_mat_irrep_rd(&WMNIE, h); } dpd_buf4_init(&L2new, CC3_MISC, 0, 0, 5, 0, 5, 0, "CC3 LIJAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&L2new, h); dpd_buf4_init(&ZIGDE, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZIGDE"); dpd_buf4_scm(&ZIGDE, 0.0); /* must be cleared in each iteration */ dpd_buf4_init(&ZDMAE, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDMAE (MD,AE)"); dpd_buf4_scm(&ZDMAE, 0.0); dpd_buf4_init(&ZLMAO, CC3_MISC, 0, 0, 11, 0, 11, 0, "CC3 ZLMAO"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&ZLMAO, h); dpd_buf4_init(&ZIMLE, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZIMLE"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&ZIMLE, h); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&L, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&F, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&E, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&LIJAB, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_file2_init(&LIA, CC_LAMBDA, 0, 0, 1, "LIA"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; Gik = Gi ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ W1[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; /* totally symmetric */ W2[Ga] = dpd_block_matrix(virtpi[Ga], F.params->coltot[Gbc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; L3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, &L, &F, &E, &fIJ, &fAB, &Dints, &LIJAB, &LIA, &FME, occpi, occ_off, virtpi, vir_off); /* L_JKDC <-- +1/2 t_IJKABC W_ABID (IDAB) */ /* L_JKCD <-- -1/2 t_IJKABC W_ABID (IDAB) */ jk = L2new.params->rowidx[J][K]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes Wieab is totally symmetric */ Gc = Gab ^ Gijk; /* assumes T3 is totally symmetric */ id = WMAFE.row_offset[Gid][I]; Z = block_matrix(virtpi[Gc],virtpi[Gd]); WMAFE.matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMAFE, Gid, id, virtpi[Gd]); nrows = virtpi[Gc]; ncols = virtpi[Gd]; nlinks = WMAFE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, WMAFE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; cd = L2new.params->colidx[C][DD]; dc = L2new.params->colidx[DD][C]; L2new.matrix[Gjk][jk][dc] += Z[c][d]; L2new.matrix[Gjk][jk][cd] += -Z[c][d]; } } dpd_free_block(WMAFE.matrix[Gid], virtpi[Gd], WMAFE.params->coltot[Gid]); free_block(Z); } /* t_MIAB <-- +1/2 t_IJKABC W_JKMC */ /* t_IMAB <-- -1/2 t_IJKABC W_JKMC */ jk = WMNIE.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WMNIE.col_offset[Gjk][Gm]; nrows = F.params->coltot[Gab]; ncols = occpi[Gm]; nlinks = virtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks, &(WMNIE.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = occ_off[Gm] + m; mi = L2new.params->rowidx[M][I]; im = L2new.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { L2new.matrix[Gmi][mi][ab] += Z[ab][m]; L2new.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } /* Z_IDAB <-- 1/2 L_IJKABC t_JKDC */ jk = T2.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gid = Gab; /* totally symmetric */ Gc = Gab ^ Gijk; /* totally symmetric */ Gd = Gi ^ Gid; nrows = virtpi[Gd]; ncols = ZIGDE.params->coltot[Gid]; nlinks = virtpi[Gc]; dc = T2.col_offset[Gjk][Gd]; id = ZIGDE.row_offset[Gid][I]; ZIGDE.matrix[Gid] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZIGDE, Gid, id, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, &(T2.matrix[Gjk][jk][dc]), nlinks, W1[Gab][0], nlinks, 1.0, ZIGDE.matrix[Gid][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZIGDE, Gid, id, nrows); dpd_free_block(ZIGDE.matrix[Gid], nrows, ncols); } /* Z_JDAB <-- 1/2 L_IJKABC t_IKDC */ ik = T2.params->rowidx[I][K]; for(Gab=0; Gab < nirreps; Gab++) { Gjd = Gab; /* totally symmetric */ Gc = Gab ^ Gijk; /* totally symmetric */ Gd = Gj ^ Gjd; nrows = virtpi[Gd]; ncols = ZDMAE.params->coltot[Gjd]; nlinks = virtpi[Gc]; dc = T2.col_offset[Gik][Gd]; jd = ZDMAE.row_offset[Gjd][J]; ZDMAE.matrix[Gjd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDMAE, Gjd, jd, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, &(T2.matrix[Gik][ik][dc]), nlinks, W1[Gab][0], nlinks, 1.0, ZDMAE.matrix[Gjd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDMAE, Gjd, jd, nrows); dpd_free_block(ZDMAE.matrix[Gjd], nrows, ncols); } /* Z_IJAM <-- -1/2 L_IJKABC t_MKBC */ /* sort W(AB,C) to W(A,BC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < F.params->coltot[Gab]; ab++) { A = F.params->colorb[Gab][ab][0]; B = F.params->colorb[Gab][ab][1]; Ga = F.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = F.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } ij = ZLMAO.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* totally symmetric */ Ga = Gij ^ Gm; /* totally symmetric */ nrows = virtpi[Ga]; ncols = T2.params->coltot[Gmk]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2.params->rowidx[M][K]; am = ZLMAO.col_offset[Gij][Ga] + m; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -0.5, W2[Ga][0], ncols, T2.matrix[Gmk][mk], 1, 1.0, &(ZLMAO.matrix[Gij][ij][am]), occpi[Gm]); } } /* Z_IJMB <-- -1/2 L_IJKABC t_MKAC */ /* sort W(AB,C) to W(B,AC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < F.params->coltot[Gab]; ab++) { A = F.params->colorb[Gab][ab][0]; B = F.params->colorb[Gab][ab][1]; Gb = F.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = F.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } ij = ZIMLE.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gb = Gm ^ Gij; /* totally symmetric */ Gmk = Gm ^ Gk; nrows = virtpi[Gb]; ncols = T2.params->coltot[Gmk]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2.params->rowidx[M][K]; mb = ZIMLE.col_offset[Gij][Gm] + m * virtpi[Gb]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -0.5, W2[Gb][0], ncols, T2.matrix[Gmk][mk], 1, 1.0, &(ZIMLE.matrix[Gij][ij][mb]), 1); } } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ dpd_free_block(W1[Gab], F.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; /* totally symmetric */ dpd_free_block(W2[Ga], virtpi[Ga], F.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); dpd_buf4_close(&E); dpd_buf4_close(&F); dpd_buf4_close(&L); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&FME); dpd_file2_close(&LIA); dpd_buf4_close(&Dints); dpd_buf4_close(&LIJAB); dpd_buf4_close(&WMAFE); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WMNIE, h); dpd_buf4_close(&WMNIE); dpd_buf4_close(&ZIGDE); dpd_buf4_close(&ZDMAE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZLMAO, h); dpd_buf4_mat_irrep_close(&ZLMAO, h); } dpd_buf4_close(&ZLMAO); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZIMLE, h); dpd_buf4_mat_irrep_close(&ZIMLE, h); } dpd_buf4_close(&ZIMLE); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_close(&T2); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&L2new, h); dpd_buf4_mat_irrep_close(&L2new, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D2, &L2new); dpd_buf4_close(&D2); dpd_buf4_init(&L2, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&L2new, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&L2new); } void cc3_l3l2_RHF_AAB(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1, ***W2; dpdbuf4 L2AA, L2AB, L2BA, EAA, EAB, EBA, FAA, FAB, FBA; dpdfile2 fIJ, fAB, fij, fab; dpdbuf4 DAAints, DABints, LIJAB, LIjAb; dpdfile2 LIA, Lia, FME, Fme; dpdbuf4 L2AAnew, L2ABnew, L2, D2; dpdbuf4 WmAfE, WMnIe, WMAFE, WMaFe, WMNIE, WmNiE; dpdbuf4 ZIGDE, T2AB, T2AA, ZIgDe; dpdbuf4 ZDMAE, ZDmAe, ZdMAe; dpdbuf4 ZLMAO, ZLmAo; dpdbuf4 ZIMLE, ZImLe, ZImlE; int nrows, ncols, nlinks; int Gcb, cb; int Gij, ij, Gji, ji, Gjk, jk, kj, Gkj; int Gd, d, DD, ad, da, Gkd, kd; int Gm, m, M, Gmi, mi, im, mc; int Gid, id, dc, cd; int Gac, ac, Gca, ca, bd, db; int Gbc, bc, Gmk, mk, km, Gim, ma, am; int Gik, ik, Gki, ki, Gjd, jd; int Gmj, mj, cm, Gjm, jm; int mb; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.occpi; occ_off = moinfo.occ_off; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; dpd_buf4_init(&L2AAnew, CC3_MISC, 0, 0, 5, 0, 5, 0, "CC3 LIJAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&L2AAnew, h); dpd_buf4_init(&L2ABnew, CC3_MISC, 0, 0, 5, 0, 5, 0, "CC3 LIjAb"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&L2ABnew, h); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&T2AA, h); dpd_buf4_mat_irrep_rd(&T2AA, h); } dpd_buf4_init(&ZIGDE, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZIGDE"); dpd_buf4_scm(&ZIGDE, 0.0); /* this must be cleared in each iteration */ dpd_buf4_init(&ZIgDe, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZIgDe"); dpd_buf4_scm(&ZIgDe, 0.0); /* this must be cleared in each iteration */ dpd_buf4_init(&ZDMAE, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDMAE (MD,AE)"); dpd_buf4_scm(&ZDMAE, 0.0); /* must be cleared in each iteration */ dpd_buf4_init(&ZDmAe, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDmAe (mD,Ae)"); dpd_buf4_scm(&ZDmAe, 0.0); /* must be cleared in each iteration */ dpd_buf4_init(&ZdMAe, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZdMAe (Md,Ae)"); dpd_buf4_scm(&ZdMAe, 0.0); /* must be cleared in each iteration */ dpd_buf4_init(&ZLMAO, CC3_MISC, 0, 0, 11, 0, 11, 0, "CC3 ZLMAO"); dpd_buf4_init(&ZLmAo, CC3_MISC, 0, 0, 11, 0, 11, 0, "CC3 ZLmAo"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&ZLMAO, h); dpd_buf4_mat_irrep_rd(&ZLMAO, h); dpd_buf4_mat_irrep_init(&ZLmAo, h); } dpd_buf4_init(&ZIMLE, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZIMLE"); dpd_buf4_init(&ZImLe, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZImLe"); dpd_buf4_init(&ZImlE, CC3_MISC, 0, 0, 10, 0, 10, 0, "CC3 ZImlE"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&ZIMLE, h); dpd_buf4_mat_irrep_rd(&ZIMLE, h); dpd_buf4_mat_irrep_init(&ZImLe, h); dpd_buf4_mat_irrep_init(&ZImlE, h); } dpd_buf4_init(&WmAfE, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&WMAFE, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&WMaFe, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&WMnIe, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&WMNIE, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&WmNiE, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WmBiJ (iJ,mB)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&WMnIe, h); dpd_buf4_mat_irrep_rd(&WMnIe, h); dpd_buf4_mat_irrep_init(&WMNIE, h); dpd_buf4_mat_irrep_rd(&WMNIE, h); dpd_buf4_mat_irrep_init(&WmNiE, h); dpd_buf4_mat_irrep_rd(&WmNiE, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_buf4_init(&L2AA, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&L2AB, CC_LAMBDA, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&L2BA, CC_LAMBDA, 0, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_init(&FAA, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WAMEF (MA,F>E)"); dpd_buf4_init(&FAB, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WaMeF (Ma,Fe)"); dpd_buf4_init(&FBA, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAmEf (mA,fE)"); dpd_buf4_init(&EAA, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMNIE (M>N,IE)"); dpd_buf4_init(&EAB, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMnIe (Mn,Ie)"); dpd_buf4_init(&EBA, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WmNiE (mN,iE)"); dpd_buf4_init(&DAAints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&DABints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&LIJAB, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&LIjAb, CC_LAMBDA, 0, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&LIA, CC_LAMBDA, 0, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, 0, 0, 1, "Lia"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gji = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ W1[Gab] = dpd_block_matrix(FAA.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; /* assumes totally symmetric */ W2[Ga] = dpd_block_matrix(virtpi[Ga], WmAfE.params->coltot[Gcb]); /* alpha-beta-alpha */ } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; L3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, &L2AA, &L2AB, &L2BA, &FAA, &FAB, &FBA, &EAA, &EAB, &EBA, &fIJ, &fij, &fAB, &fab, &DAAints, &DABints, &LIJAB, &LIjAb, &LIA, &Lia, &FME, &Fme, occpi, occ_off, occpi, occ_off, virtpi, vir_off, virtpi, vir_off); /* t_JIDA <-- t_IJkABc W_kDcB */ /* sort W1(AB,c) to W2(A,cB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; cb = WmAfE.params->colidx[C][B]; W2[Ga][a][cb] = W1[Gab][ab][c]; } } } ji = L2AAnew.params->rowidx[J][I]; for(Gd=0; Gd < nirreps; Gd++) { Gcb = Gkd = Gk ^ Gd; /* assumes totally symmetric */ Ga = Gd ^ Gij; /* assumes totally symmetric */ kd = WmAfE.row_offset[Gkd][K]; WmAfE.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], WmAfE.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&WmAfE, Gkd, kd, virtpi[Gd]); Z = block_matrix(virtpi[Ga], virtpi[Gd]); nrows = virtpi[Ga]; ncols = virtpi[Gd]; nlinks = WmAfE.params->coltot[Gkd]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks, WmAfE.matrix[Gkd][0], nlinks, 0.0, Z[0], ncols); for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; ad = L2AAnew.params->colidx[A][DD]; da = L2AAnew.params->colidx[DD][A]; L2AAnew.matrix[Gij][ji][ad] += -Z[a][d]; L2AAnew.matrix[Gij][ji][da] += Z[a][d]; } } dpd_free_block(WmAfE.matrix[Gkd], virtpi[Gd], WmAfE.params->coltot[Gkd]); free_block(Z); } /* t_MIAB <--- +t_IJkABc W_JkMc */ /* t_IMAB <--- -t_IJkABc W_JkMc */ jk = WMnIe.params->rowidx[J][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmi = Gm ^ Gi; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ mc = WMnIe.col_offset[Gjk][Gm]; nrows = FAA.params->coltot[Gab]; ncols = occpi[Gm]; nlinks = virtpi[Gc]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks, &(WMnIe.matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols); for(m=0; m < ncols; m++) { M = occ_off[Gm] + m; mi = L2AAnew.params->rowidx[M][I]; im = L2AAnew.params->rowidx[I][M]; for(ab=0; ab < nrows; ab++) { L2AAnew.matrix[Gmi][mi][ab] += Z[ab][m]; L2AAnew.matrix[Gmi][im][ab] -= Z[ab][m]; } } dpd_free_block(Z, nrows, ncols); } /* t_JkDc <-- 1/2 t_IJkABc W_IDAB */ /* t_KjCd <-- 1/2 t_IJkABc W_IDAB */ jk = L2ABnew.params->rowidx[J][K]; kj = L2ABnew.params->rowidx[K][J]; for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gc = Gab ^ Gijk; /* assumes totally symmetric */ id = WMAFE.row_offset[Gid][I]; WMAFE.matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMAFE, Gid, id, virtpi[Gd]); Z = block_matrix(virtpi[Gc], virtpi[Gd]); nrows = virtpi[Gc]; ncols = virtpi[Gd]; nlinks = WMAFE.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows, WMAFE.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; dc = L2ABnew.params->colidx[DD][C]; cd = L2ABnew.params->colidx[C][DD]; L2ABnew.matrix[Gjk][jk][dc] += Z[c][d]; L2ABnew.matrix[Gjk][kj][cd] += Z[c][d]; } } free_block(Z); dpd_free_block(WMAFE.matrix[Gid], virtpi[Gd], WMAFE.params->coltot[Gid]); } /* t_JkBd <-- t_IJkABc W_IdAc */ /* t_KjBd <-- t_IJkABc W_IdAc */ /* sort W1(AB,c) to W2(B,Ac) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = WMaFe.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } jk = L2ABnew.params->rowidx[J][K]; kj = L2ABnew.params->rowidx[K][J]; for(Gd=0; Gd < nirreps; Gd++) { Gac = Gid = Gi ^ Gd; /* assumes totally symmetric */ Gb = Gac ^ Gijk; /* assumes totally symmetric */ id = WMaFe.row_offset[Gid][I]; WMaFe.matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMaFe.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&WMaFe, Gid, id, virtpi[Gd]); Z = block_matrix(virtpi[Gb], virtpi[Gd]); nrows = virtpi[Gb]; ncols = virtpi[Gd]; nlinks = WMaFe.params->coltot[Gid]; if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Gb][0], nlinks, WMaFe.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(d=0; d < virtpi[Gd]; d++) { DD = vir_off[Gd] + d; bd = L2ABnew.params->colidx[B][DD]; db = L2ABnew.params->colidx[DD][B]; L2ABnew.matrix[Gjk][jk][bd] += Z[b][d]; L2ABnew.matrix[Gjk][kj][db] += Z[b][d]; } } dpd_free_block(WMaFe.matrix[Gid], virtpi[Gd], WMaFe.params->coltot[Gid]); free_block(Z); } /* t_MkBc <-- 1/2 t_IJkABc W_IJMA */ /* sort W(AB,c) to W(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = L2ABnew.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } ij = WMNIE.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = WMNIE.col_offset[Gij][Gm]; nrows = L2ABnew.params->coltot[Gmk]; ncols = occpi[Gm]; nlinks = virtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W2[Ga][0], nrows, &(WMNIE.matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = L2ABnew.params->rowidx[M][K]; km = L2ABnew.params->rowidx[K][M]; for(Gb=0; Gb < nirreps; Gb++) { Gc = Gbc ^ Gb; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = L2ABnew.params->colidx[B][C]; cb = L2ABnew.params->colidx[C][B]; L2ABnew.matrix[Gmk][mk][bc] += Z[bc][m]; L2ABnew.matrix[Gmk][km][cb] += Z[bc][m]; } } } } dpd_free_block(Z, nrows, ncols); } /* t_ImBc <-- t_IJkABc W_kJmA */ /* sort W(AB,c) to W(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = L2ABnew.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } kj = WmNiE.params->rowidx[K][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gim = Gi ^ Gm; /* assumes totally symmetric */ Ga = Gbc ^ Gijk; /* assumes totally symmetric */ ma = WmNiE.col_offset[Gjk][Gm]; nrows = L2ABnew.params->coltot[Gim]; ncols = occpi[Gm]; nlinks = virtpi[Ga]; Z = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nrows, &(WmNiE.matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols); for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = L2ABnew.params->rowidx[I][M]; mi = L2ABnew.params->rowidx[M][I]; for(Gb=0; Gb < nirreps; Gb++) { Gc = Gbc ^ Gb; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = L2ABnew.params->colidx[B][C]; cb = L2ABnew.params->colidx[C][B]; L2ABnew.matrix[Gim][im][bc] += Z[bc][m]; L2ABnew.matrix[Gim][mi][cb] += Z[bc][m]; } } } } dpd_free_block(Z, nrows, ncols); } /* Z_IDAB <-- L_IJkABc t_JkDc */ jk = T2AB.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gid = Gab; /* totally symmetric */ Gc = Gab ^ Gijk; /* totally symmetric */ Gd = Gi ^ Gid; nrows = virtpi[Gd]; ncols = ZIGDE.params->coltot[Gid]; nlinks = virtpi[Gc]; dc = T2AB.col_offset[Gjk][Gd]; id = ZIGDE.row_offset[Gid][I]; ZIGDE.matrix[Gid] = dpd_block_matrix(nrows, ncols); if(nrows && ncols && nlinks) { dpd_buf4_mat_irrep_rd_block(&ZIGDE, Gid, id, nrows); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gjk][jk][dc]), nlinks, W1[Gab][0], nlinks, 1.0, ZIGDE.matrix[Gid][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZIGDE, Gid, id, nrows); } dpd_free_block(ZIGDE.matrix[Gid], nrows, ncols); } /* ZkDCa <-- 1/2 L_ijKabC t_ijdb */ ij = T2AA.params->rowidx[I][J]; /* sort W(ab,C) to W(b,Ca) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = ZIgDe.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gij; /* totally symmetric */ Gca = Gkd = Gk ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZIgDe.params->coltot[Gkd]; nlinks = virtpi[Gb]; db = T2AA.col_offset[Gij][Gd]; kd = ZIgDe.row_offset[Gkd][K]; ZIgDe.matrix[Gkd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZIgDe, Gkd, kd, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, &(T2AA.matrix[Gij][ij][db]), nlinks, W2[Gb][0], ncols, 1.0, ZIgDe.matrix[Gkd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZIgDe, Gkd, kd, nrows); dpd_free_block(ZIgDe.matrix[Gkd], nrows, ncols); } /* Z_IdAc <-- L_IJkABc t_JkBd */ jk = T2AB.params->rowidx[J][K]; /* sort W(AB,c) to W(B,Ac) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = ZIgDe.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gjk; /* totally symmetric */ Gac = Gid = Gi ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZIgDe.params->coltot[Gid]; nlinks = virtpi[Gb]; bd = T2AB.col_offset[Gjk][Gb]; id = ZIgDe.row_offset[Gid][I]; ZIgDe.matrix[Gid] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZIgDe, Gid, id, nrows); if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gjk][jk][bd]), nrows, W2[Gb][0], ncols, 1.0, ZIgDe.matrix[Gid][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZIgDe, Gid, id, nrows); dpd_free_block(ZIgDe.matrix[Gid], nrows, ncols); } /* Z_JDAB <-- 1/2 L_IJkABc t_IkDc */ ik = T2AB.params->rowidx[I][K]; for(Gab=0; Gab < nirreps; Gab++) { Gjd = Gab; /* totally symmetric */ Gc = Gab ^ Gijk; /* totally symmetric */ Gd = Gj ^ Gjd; nrows = virtpi[Gd]; ncols = ZDMAE.params->coltot[Gjd]; nlinks = virtpi[Gc]; dc = T2AB.col_offset[Gik][Gd]; jd = ZDMAE.row_offset[Gjd][J]; ZDMAE.matrix[Gjd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDMAE, Gjd, jd, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gik][ik][dc]), nlinks, W1[Gab][0], nlinks, 1.0, ZDMAE.matrix[Gjd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDMAE, Gjd, jd, nrows); dpd_free_block(ZDMAE.matrix[Gjd], nrows, ncols); } /* Z_kDAc <-- 1/2 L_IJkABc t_IJDB */ ij = T2AA.params->rowidx[I][J]; /* sort W(AB,c) to W(B,Ac) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = ZDmAe.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gij; /* totally symmetric */ Gac = Gkd = Gk ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZDmAe.params->coltot[Gkd]; nlinks = virtpi[Gb]; db = T2AA.col_offset[Gij][Gd]; kd = ZDmAe.row_offset[Gkd][K]; ZDmAe.matrix[Gkd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDmAe, Gkd, kd, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, &(T2AA.matrix[Gij][ij][db]), nlinks, W2[Gb][0], ncols, 1.0, ZDmAe.matrix[Gkd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDmAe, Gkd, kd, nrows); dpd_free_block(ZDmAe.matrix[Gkd], nrows, ncols); } /* Z_iDCa <-- L_ijKabC t_KjDb */ kj = T2AB.params->rowidx[K][J]; /* sort W(AB,c) to W(B,Ca) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = ZDmAe.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gkj; /* totally symmetric */ Gca = Gid = Gi ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZDmAe.params->coltot[Gid]; nlinks = virtpi[Gb]; db = T2AB.col_offset[Gkj][Gd]; id = ZDmAe.row_offset[Gid][I]; ZDmAe.matrix[Gid] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDmAe, Gid, id, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gkj][kj][db]), nlinks, W2[Gb][0], ncols, 1.0, ZDmAe.matrix[Gid][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDmAe, Gid, id, nrows); dpd_free_block(ZDmAe.matrix[Gid], nrows, ncols); } /* Z_KdCa <-- -1/2 L_ijKabC t_ijdb */ ij = T2AA.params->rowidx[I][J]; /* sort W(AB,c) to W(B,Ca) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = ZdMAe.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gij; /* totally symmetric */ Gca = Gkd = Gk ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZdMAe.params->coltot[Gkd]; nlinks = virtpi[Gb]; db = T2AA.col_offset[Gij][Gd]; kd = ZdMAe.row_offset[Gkd][K]; ZdMAe.matrix[Gkd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZdMAe, Gkd, kd, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, -0.5, &(T2AA.matrix[Gij][ij][db]), nlinks, W2[Gb][0], ncols, 1.0, ZdMAe.matrix[Gkd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZdMAe, Gkd, kd, nrows); dpd_free_block(ZdMAe.matrix[Gkd], nrows, ncols); } /* Z_JdAc <-- L_IJkABc t_IkBd */ ik = T2AB.params->rowidx[I][K]; /* sort W(AB,c) to W(B,Ca) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++ ){ A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = ZdMAe.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } for(Gb=0; Gb < nirreps; Gb++) { Gd = Gb ^ Gik; /* totally symmetric */ Gca = Gjd = Gj ^ Gd; /* totally symmetric */ nrows = virtpi[Gd]; ncols = ZdMAe.params->coltot[Gjd]; nlinks = virtpi[Gb]; bd = T2AB.col_offset[Gik][Gb]; jd = ZdMAe.row_offset[Gjd][J]; ZdMAe.matrix[Gjd] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZdMAe, Gjd, jd, nrows); if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gik][ik][bd]), nrows, W2[Gb][0], ncols, 1.0, ZdMAe.matrix[Gjd][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZdMAe, Gjd, jd, nrows); dpd_free_block(ZdMAe.matrix[Gjd], nrows, ncols); } /* Z_IJAM <-- -1/2 L_IJkABc t_MkBc */ /* sort W(AB,C) to W(A,BC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = FAA.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } ij = ZLMAO.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* totally symmetric */ Ga = Gij ^ Gm; /* totally symmetric */ nrows = virtpi[Ga]; ncols = T2AB.params->coltot[Gmk]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; am = ZLMAO.col_offset[Gij][Ga] + m; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -1.0, W2[Ga][0], ncols, T2AB.matrix[Gmk][mk], 1, 1.0, &(ZLMAO.matrix[Gij][ij][am]), occpi[Gm]); } } /* Z_KiCm <-- -1/2 L_ijKabC t_mjab */ ki = ZLmAo.params->rowidx[K][I]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmj = Gm ^ Gj; /* totally symmetric */ Gc = Gm ^ Gki; /* totally symmetric */ nrows = T2AA.params->coltot[Gmj]; ncols = virtpi[Gc]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AA.params->rowidx[M][J]; cm = ZLmAo.col_offset[Gki][Gc] + m; if(nrows && ncols) C_DGEMV('t', nrows, ncols, -0.5, W1[Gab][0], ncols, T2AA.matrix[Gmj][mj], 1, 1.0, &(ZLmAo.matrix[Gki][ki][cm]), occpi[Gm]); } } /* Z_IkAm <-- - L_IJkABc t_mJcB */ /* sort W(AB,C) to W(A,CB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; cb = FAA.params->colidx[C][B]; W2[Ga][a][cb] = W1[Gab][ab][c]; } } } ik = ZLmAo.params->rowidx[I][K]; for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmj = Gm ^ Gj; /* totally symmetric */ Ga = Gm ^ Gik; /* totally symmetric */ nrows = virtpi[Ga]; ncols = T2AB.params->coltot[Gmj]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AB.params->rowidx[M][J]; am = ZLmAo.col_offset[Gik][Ga] + m; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -1.0, W2[Ga][0], ncols, T2AB.matrix[Gmj][mj], 1, 1.0, &(ZLmAo.matrix[Gik][ik][am]), occpi[Gm]); } } /* Z_IJMB <-- - L_IJkABc t_MkAc */ /* sort W(AB,C) to W(B,AC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = FAA.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } ij = ZIMLE.params->rowidx[I][J]; for(Gm=0; Gm < nirreps; Gm++) { Gb = Gm ^ Gij; /* totally symmetric */ Gmk = Gm ^ Gk; nrows = virtpi[Gb]; ncols = T2AB.params->coltot[Gmk]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; mb = ZIMLE.col_offset[Gij][Gm] + m * virtpi[Gb]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -1.0, W2[Gb][0], ncols, T2AB.matrix[Gmk][mk], 1, 1.0, &(ZIMLE.matrix[Gij][ij][mb]), 1); } } /* Z_IkMc <-- -1/2 L_IJkABc t_MJAB */ ik = ZImLe.params->rowidx[I][K]; for(Gm=0; Gm < nirreps; Gm++) { Gc = Gm ^ Gik ; /* totally symmetric */ Gab = Gmj = Gm ^ Gj; /* totally symmetric */ nrows = T2AA.params->coltot[Gmj]; ncols = virtpi[Gc]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AA.params->rowidx[M][J]; mc = ZImLe.col_offset[Gik][Gm] + m * virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, -0.5, W1[Gab][0], ncols, T2AA.matrix[Gmj][mj], 1, 1.0, &(ZImLe.matrix[Gik][ik][mc]), 1); } } /* Z_KiMa <-- - L_ijKabC t_MjCb */ /* sort W(AB,C) to W(A,CB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; cb = FAA.params->colidx[C][B]; W2[Ga][a][cb] = W1[Gab][ab][c]; } } } ki = ZImLe.params->rowidx[K][I]; for(Gm=0; Gm < nirreps; Gm++) { Ga = Gm ^ Gki; /* totally symmetric */ Gmj = Gm ^ Gj; nrows = virtpi[Ga]; ncols = T2AB.params->coltot[Gmj]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AB.params->rowidx[M][J]; ma = ZImLe.col_offset[Gki][Gm] + m * virtpi[Ga]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -1.0, W2[Ga][0], ncols, T2AB.matrix[Gmj][mj], 1, 1.0, &(ZImLe.matrix[Gki][ki][ma]), 1); } } /* Z_KimC <-- 1/2 L_ijKabC t_mjab */ ki = ZImlE.params->rowidx[K][I]; for(Gm=0; Gm < nirreps; Gm++) { Gc = Gm ^ Gki; /* totally symmetric */ Gab = Gmj = Gm ^ Gj; nrows = T2AA.params->coltot[Gmj]; ncols = virtpi[Gc]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AA.params->rowidx[M][J]; mc = ZImlE.col_offset[Gki][Gm] + m * virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.5, W1[Gab][0], ncols, T2AA.matrix[Gmj][mj], 1, 1.0, &(ZImlE.matrix[Gki][ki][mc]), 1); } } /* Z_IkmB <-- - l_IJkABc t_JmAc */ ik = ZImlE.params->rowidx[I][K]; /* sort W(AB,C) to W(B,AC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = FAA.params->colidx[A][C]; W2[Gb][b][ac] = W1[Gab][ab][c]; } } } for(Gm=0; Gm < nirreps; Gm++) { Gb = Gm ^ Gik; /* totally symmetric */ Gjm = Gm ^ Gj; nrows = virtpi[Gb]; ncols = T2AB.params->coltot[Gjm]; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2AB.params->rowidx[J][M]; mb = ZImlE.col_offset[Gki][Gm] + m * virtpi[Gb]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, -1.0, W2[Gb][0], ncols, T2AB.matrix[Gjm][jm], 1, 1.0, &(ZImlE.matrix[Gik][ik][mb]), 1); } } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ dpd_free_block(W1[Gab], FAA.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gcb = Ga ^ Gijk; /* assumes totally symmetric */ dpd_free_block(W2[Ga], virtpi[Ga], WmAfE.params->coltot[Gcb]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); dpd_buf4_close(&EAA); dpd_buf4_close(&EAB); dpd_buf4_close(&EBA); dpd_buf4_close(&FAA); dpd_buf4_close(&FAB); dpd_buf4_close(&FBA); dpd_buf4_close(&L2AA); dpd_buf4_close(&L2AB); dpd_buf4_close(&L2BA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fij); dpd_file2_close(&fab); dpd_file2_close(&FME); dpd_file2_close(&Fme); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&DAAints); dpd_buf4_close(&DABints); dpd_buf4_close(&LIJAB); dpd_buf4_close(&LIjAb); dpd_buf4_close(&WmAfE); dpd_buf4_close(&WMAFE); dpd_buf4_close(&WMaFe); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WMnIe, h); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WMNIE, h); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&WmNiE, h); dpd_buf4_close(&WMnIe); dpd_buf4_close(&WMNIE); dpd_buf4_close(&WmNiE); dpd_buf4_close(&ZIgDe); dpd_buf4_close(&ZIGDE); dpd_buf4_close(&ZDMAE); dpd_buf4_close(&ZDmAe); dpd_buf4_close(&ZdMAe); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZLMAO, h); dpd_buf4_mat_irrep_close(&ZLMAO, h); } dpd_buf4_close(&ZLMAO); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZLmAo, h); dpd_buf4_mat_irrep_close(&ZLmAo, h); } dpd_buf4_close(&ZLmAo); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZIMLE, h); dpd_buf4_mat_irrep_close(&ZIMLE, h); } dpd_buf4_close(&ZIMLE); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZImLe, h); dpd_buf4_mat_irrep_close(&ZImLe, h); } dpd_buf4_close(&ZImLe); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZImlE, h); dpd_buf4_mat_irrep_close(&ZImlE, h); } dpd_buf4_close(&ZImlE); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&T2AB, h); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&T2AA, h); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2AA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&L2AAnew, h); dpd_buf4_mat_irrep_close(&L2AAnew, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D2, &L2AAnew); dpd_buf4_close(&D2); dpd_buf4_init(&L2, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&L2AAnew, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&L2AAnew); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&L2ABnew, h); dpd_buf4_mat_irrep_close(&L2ABnew, h); } dpd_buf4_init(&D2, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D2, &L2ABnew); dpd_buf4_close(&D2); dpd_buf4_init(&L2, CC_LAMBDA, 0, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&L2ABnew, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&L2ABnew); /* Spin adaptation will remove this. And yes, this means that all the above calculations for LIJAB were pointless... -TDC */ dpd_buf4_init(&L2, CC_LAMBDA, 0, 2, 7, 0, 5, 1, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&L2); } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cc3_t3x.cc��������������������������������������������������������������������0000644�0001015�0000765�00000012671�10757640026�015061� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc3_t3x(void) { if(params.ref == 0) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1; dpdbuf4 T2, E, F, T2AA, T2AB, T2BA, EAA, EAB, EBA, FAA, FAB, FBA; dpdfile2 fIJ, fAB, fij, fab; dpdfile2 XLD; dpdbuf4 L2, L2AB; int Gij, ij, Gbc, bc, Gjk, jk; int nrows, ncols; int **W_offset, offset; nirreps = moinfo.nirreps; occpi = moinfo.occpi; occ_off = moinfo.occ_off; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; W_offset = init_int_matrix(nirreps, nirreps); for(Gab=0; Gab < nirreps; Gab++) { for(Ga=0,offset=0; Ga < nirreps; Ga++) { Gb = Ga ^ Gab; W_offset[Gab][Ga] = offset; offset += virtpi[Ga] * virtpi[Gb]; } } dpd_file2_init(&XLD, CC3_MISC, 0, 0, 1, "CC3 XLD"); dpd_file2_mat_init(&XLD); dpd_buf4_init(&L2, CC_LAMBDA, 0, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&L2AB, CC_LAMBDA, 0, 0, 5, 0, 5, 0, "LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); dpd_buf4_mat_irrep_init(&L2AB, h); dpd_buf4_mat_irrep_rd(&L2AB, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&F, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&E, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); T2AA = T2; dpd_buf4_init(&T2AB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); FAA = F; dpd_buf4_init(&FAB, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&FBA, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); EAA = E; dpd_buf4_init(&EAB, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&EBA, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WmBiJ (iJ,mB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gjk = Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ W1[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &F, &E, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); /* X_KC <-- 1/4 t_IJKABC <IJ||AB> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = L2.params->rowidx[I][J]; nrows = L2.params->coltot[Gij]; ncols = virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, L2.matrix[Gij][ij], 1, 1.0, XLD.matrix[Gk][k], 1); T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2AA, &T2AB, &T2BA, &FAA, &FAB, &FBA, &EAA, &EAB, &EBA, &fIJ, &fij, &fAB, &fab, occpi, occ_off, occpi, occ_off, virtpi, vir_off, virtpi, vir_off, 0.0); /* t_IA <-- t_IJkABc <Jk|Bc> */ Ga = Gi; /* assumes T1 is totally symmetric */ Gbc = Gjk; /* assumes <jk|bc> is totally symmetric */ jk = L2AB.params->rowidx[J][K]; for(Gab=0; Gab < nirreps; Gab++) { Gb = Ga ^ Gab; Gc = Gb ^ Gbc; ab = W_offset[Gab][Ga]; bc = L2AB.col_offset[Gjk][Gb]; nrows = virtpi[Ga]; ncols = virtpi[Gb] * virtpi[Gc]; if(nrows && ncols) C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(L2AB.matrix[Gjk][jk][bc]), 1, 1.0, XLD.matrix[Gi][i], 1); } /* t_KC <-- 1/4 t_ijKabC <ij||ab> */ Gc = Gk; /* assumes T1 is totally symmetric */ Gab = Gij; /* assumes <ij||ab> is totally symmetric */ ij = L2.params->rowidx[I][J]; nrows = L2.params->coltot[Gij]; ncols = virtpi[Gc]; if(nrows && ncols) C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, L2.matrix[Gij][ij], 1, 1.0, XLD.matrix[Gk][k], 1); } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ dpd_free_block(W1[Gab], F.params->coltot[Gab], virtpi[Gc]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); dpd_buf4_close(&E); dpd_buf4_close(&F); dpd_buf4_close(&T2); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_buf4_close(&EAB); dpd_buf4_close(&EBA); dpd_buf4_close(&FAB); dpd_buf4_close(&FBA); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_file2_close(&fij); dpd_file2_close(&fab); free_int_matrix(W_offset); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&L2, h); dpd_buf4_mat_irrep_close(&L2AB, h); } dpd_buf4_close(&L2); dpd_buf4_close(&L2AB); dpd_file2_mat_wrt(&XLD); dpd_file2_close(&XLD); } } }} // namespace psi::cclambda �����������������������������������������������������������������������psi3/src/bin/cclambda/cc3_t3z.cc��������������������������������������������������������������������0000644�0001015�0000765�00000042201�10757640026�015053� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ /* cc3_t3z(): Builds the following intermediates, which are required ** for the T3-->L1 contributions in the CC3 model: ** ** Zifln = +1/2 t3(lmn,def) * <im||de> ** ** Zdfan = -1/2 t3(lmn,def) * <lm||ae> ** ** Translating indices in each expression to use t3(ijk,abc): ** ** Zmcik = +1/2 t3(ijk,abc) * <mj||ab> ** ** Zacek = -1/2 t3(ijk,abc) * <ij||eb> ** ** The current version is coded ROHF-like, but works only for RHF. ** ** -TDC, 7/04 */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void cc3_t3z_RHF_AAA(void); void cc3_t3z_RHF_AAB(void); void cc3_t3z(void) { if(params.ref == 0) { /** RHF **/ cc3_t3z_RHF_AAA(); cc3_t3z_RHF_AAB(); } else if(params.ref == 2) { /** UHF **/ /* TBD */ } } void cc3_t3z_RHF_AAA(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1, ***W2; dpdbuf4 T2, E, F; dpdfile2 fIJ, fAB; dpdbuf4 ZIFLN, ZDFAN; dpdbuf4 Dints; int Gm, Gmj, Gmc, mj, mc; int m, M, ik; int nrows, ncols, nlinks; double *Z; int Gij, ij, Gca, ca, Ge, Gke, ke; int EE, e, eb; nirreps = moinfo.nirreps; occpi = moinfo.occpi; occ_off = moinfo.occ_off; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; dpd_buf4_init(&ZIFLN, CC3_MISC, 0, 10, 0, 10, 0, 0, "CC3 ZIFLN"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&ZIFLN, h); } dpd_buf4_init(&ZDFAN, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDFAN (NA,FD)"); dpd_buf4_scm(&ZDFAN, 0.0); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&F, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&E, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ W1[Gab] = dpd_block_matrix(F.params->coltot[Gab], virtpi[Gc]); } for(Gb=0; Gb < nirreps; Gb++) { Gca = Gb ^ Gijk; /* totally symmtric */ W2[Gb] = dpd_block_matrix(virtpi[Gb], F.params->coltot[Gca]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &F, &E, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); /* Z_MCIK <-- 1/2 t_IJKABC <MJ||AB> */ ik = ZIFLN.params->colidx[I][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmj = Gm ^ Gj; /* totally symmetric? */ Gc = Gab ^ Gijk; /* totally symmetric? */ Gmc = Gm ^ Gc; nrows = Dints.params->coltot[Gmj]; ncols = virtpi[Gc]; Z = init_array(ncols); if(nrows && ncols) { for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = Dints.params->rowidx[M][J]; C_DGEMV('t', nrows, ncols, 0.5, W1[Gab][0], ncols, Dints.matrix[Gmj][mj], 1, 0.0, Z, 1); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; mc = ZIFLN.params->rowidx[M][C]; ZIFLN.matrix[Gmc][mc][ik] += Z[c]; } } } free(Z); } /* Z_ACEK (KE,CA) <-- -1/2 t_IJKABC <IJ||EB> */ ij = Dints.params->rowidx[I][J]; /* sort W(AB,C) to W(B,CA) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < F.params->coltot[Gab]; ab++) { A = F.params->colorb[Gab][ab][0]; B = F.params->colorb[Gab][ab][1]; Gb = F.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = F.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Ge=0; Ge < nirreps; Ge++) { Gb = Ge ^ Gij; /* totally symmetric */ Gca = Gke = Gk ^ Ge; /* totally symmetric */ nrows = virtpi[Ge]; ncols = ZDFAN.params->coltot[Gke]; nlinks = virtpi[Gb]; eb = Dints.col_offset[Gij][Ge]; ke = ZDFAN.row_offset[Gke][K]; ZDFAN.matrix[Gke] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDFAN, Gke, ke, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, -0.5, &(Dints.matrix[Gij][ij][eb]), nlinks, W2[Gb][0], ncols, 1.0, ZDFAN.matrix[Gke][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDFAN, Gke, ke, nrows); dpd_free_block(ZDFAN.matrix[Gke], nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ dpd_free_block(W1[Gab], F.params->coltot[Gab], virtpi[Gc]); } for(Gb=0; Gb < nirreps; Gb++) { Gca = Gb ^ Gijk; /* totally symmtric */ dpd_free_block(W2[Gb], virtpi[Gb], F.params->coltot[Gca]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); dpd_buf4_close(&E); dpd_buf4_close(&F); dpd_buf4_close(&T2); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZIFLN, h); dpd_buf4_mat_irrep_close(&ZIFLN, h); } dpd_buf4_close(&ZIFLN); dpd_buf4_close(&ZDFAN); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_close(&Dints, h); dpd_buf4_close(&Dints); } void cc3_t3z_RHF_AAB(void) { int h, nirreps; int *occ_off, *occpi; int *vir_off, *virtpi; int Gi, Gj, Gk, Gijk; int Ga, Gb, Gc, Gab; int i, j, k, I, J, K; int a, b, c, A, B, C; int ab; double ***W1, ***W2; dpdbuf4 T2AA, T2AB, T2BA, EAA, EAB, EBA, FAA, FAB, FBA; dpdfile2 fIJ, fAB, fij, fab; dpdbuf4 Dints, DAAints; dpdbuf4 ZIFLN , ZIfLn, ZDFAN, ZDfAn; int ji, kj; int Gbc, Gca, bc, ca; int Gmk, Gmi, mk, mi, Gma, ma, Gmb, mb; int Gm, m, M; double *Z; int nrows, ncols, nlinks; int Gik, ik, Gki, ki; int ba, Ge, Gje, ec, je, ea; int Gmj, mj, Gmc, mc; int Gij, ij, Gke, ke, eb; nirreps = moinfo.nirreps; occpi = moinfo.occpi; occ_off = moinfo.occ_off; virtpi = moinfo.virtpi; vir_off = moinfo.vir_off; dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&DAAints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); dpd_buf4_mat_irrep_init(&DAAints, h); dpd_buf4_mat_irrep_rd(&DAAints, h); } dpd_buf4_init(&ZIFLN, CC3_MISC, 0, 10, 0, 10, 0, 0, "CC3 ZIFLN"); dpd_buf4_init(&ZIfLn, CC3_MISC, 0, 10, 0, 10, 0, 0, "CC3 ZIfLn"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&ZIFLN, h); dpd_buf4_mat_irrep_rd(&ZIFLN, h); dpd_buf4_mat_irrep_init(&ZIfLn, h); } dpd_buf4_init(&ZDFAN, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDFAN (NA,FD)"); dpd_buf4_init(&ZDfAn, CC3_MISC, 0, 10, 5, 10, 5, 0, "CC3 ZDfAn (nA,fD)"); dpd_buf4_scm(&ZDfAn, 0.0); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&FAA, CC3_HET1, 0, 10, 5, 10, 7, 0, "CC3 WABEI (IE,B>A)"); dpd_buf4_init(&FAB, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WaBeI (Ie,Ba)"); dpd_buf4_init(&FBA, CC3_HET1, 0, 10, 5, 10, 5, 0, "CC3 WAbEi (iE,bA)"); dpd_buf4_init(&EAA, CC3_HET1, 0, 0, 10, 2, 10, 0, "CC3 WMBIJ (I>J,MB)"); dpd_buf4_init(&EAB, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WMbIj (Ij,Mb)"); dpd_buf4_init(&EBA, CC3_HET1, 0, 0, 10, 0, 10, 0, "CC3 WmBiJ (iJ,mB)"); /* target T3 amplitudes go in here */ W1 = (double ***) malloc(nirreps * sizeof(double **)); W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gijk = Gi ^ Gj ^ Gk; Gik = Gki = Gi ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmtric */ W1[Gab] = dpd_block_matrix(FAA.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; /* totally symmtric */ W2[Ga] = dpd_block_matrix(virtpi[Ga], FAA.params->coltot[Gbc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, &T2AA, &T2AB, &T2BA, &FAA, &FAB, &FBA, &EAA, &EAB, &EBA, &fIJ, &fij, &fAB, &fab, occpi, occ_off, occpi, occ_off, virtpi, vir_off, virtpi, vir_off, 0.0); /* Z_MAJI <-- t_ABcIJk <Mk|Bc> */ ji = ZIFLN.params->colidx[J][I]; /* sort W(AB,c) --> W(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; Gb = FAA.params->ssym[B]; a = A - vir_off[Ga]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = FAA.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } for(Gm=0; Gm < nirreps; Gm++) { Gbc = Gmk = Gm ^ Gk; /* totally symmetric */ Ga = Gbc ^ Gijk; /* totally symmetric */ Gma = Gm ^ Ga; nrows = virtpi[Ga]; ncols = Dints.params->coltot[Gmk]; Z = init_array(nrows); if(nrows && ncols) { for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = Dints.params->rowidx[M][K]; C_DGEMV('n', nrows, ncols, 1.0, W2[Ga][0], ncols, Dints.matrix[Gmk][mk], 1, 0.0, Z, 1); for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; ma = ZIFLN.params->rowidx[M][A]; ZIFLN.matrix[Gma][ma][ji] += Z[a]; } } } free(Z); } /* ZMbKj <-- t_ijKabC <Mi|Ca> */ kj = ZIfLn.params->colidx[K][J]; /* sort W(ab,C) to W(b,Ca) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; Gb = FAA.params->ssym[B]; a = A - vir_off[Ga]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = FAA.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Gm=0; Gm < nirreps; Gm++) { Gca = Gmi = Gm ^ Gi; /* totally symmetric */ Gb = Gca ^ Gijk; /* totally symmetric */ Gmb = Gm ^ Gb; nrows = virtpi[Gb]; ncols = Dints.params->coltot[Gmi]; Z = init_array(nrows); if(nrows && ncols) { for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mi = Dints.params->rowidx[M][I]; C_DGEMV('n', nrows, ncols, 1.0, W2[Gb][0], ncols, Dints.matrix[Gmi][mi], 1, 0.0, Z, 1); for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; mb = ZIfLn.params->rowidx[M][B]; ZIfLn.matrix[Gmb][mb][kj] += Z[b]; } } } free(Z); } /* Z_McIk <-- 1/2 t_IJkABc <MJ||AB> */ ik = ZIfLn.params->colidx[I][K]; for(Gm=0; Gm < nirreps; Gm++) { Gab = Gmj = Gm ^ Gj; /* totally symmetric */ Gc = Gab ^ Gijk; /* totally symmetric */ Gmc = Gm ^ Gc; nrows = DAAints.params->coltot[Gmj]; ncols = virtpi[Gc]; Z = init_array(ncols); if(nrows && ncols) { for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = DAAints.params->rowidx[M][J]; C_DGEMV('t', nrows, ncols, 0.5, W1[Gab][0], ncols, DAAints.matrix[Gmj][mj], 1, 0.0, Z, 1); for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; mc = ZIfLn.params->rowidx[M][C]; ZIfLn.matrix[Gmc][mc][ik] += Z[c]; } } } free(Z); } /* Z_ABEJ (JE,BA) <-- - t_IJkABc <Ik|Ec> */ ik = Dints.params->rowidx[I][K]; /* sort W(AB,c) to W(c,BA) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; ba = FAA.params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { W2[Gc][c][ba] = W1[Gab][ab][c]; } } } for(Ge=0; Ge < nirreps; Ge++) { Gc = Gik ^ Ge; /* totally symmetric */ Gje = Gj ^ Ge; nrows = virtpi[Ge]; ncols = ZDFAN.params->coltot[Gje]; nlinks = virtpi[Gc]; ec = Dints.col_offset[Gik][Ge]; je = ZDFAN.row_offset[Gje][J]; ZDFAN.matrix[Gje] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDFAN, Gje, je, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, -1.0, &(Dints.matrix[Gik][ik][ec]), nlinks, W2[Gc][0], ncols, 1.0, ZDFAN.matrix[Gje][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDFAN, Gje, je, nrows); dpd_free_block(ZDFAN.matrix[Gje], nrows, ncols); } /* Z_CbEj <-- - t_ijKabC <Ki|Ea> */ ki = Dints.params->rowidx[K][I]; /* sort W(ab,C) to W(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Ga = FAA.params->rsym[A]; a = A - vir_off[Ga]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = FAA.params->colidx[B][C]; W2[Ga][a][bc] = W1[Gab][ab][c]; } } } for(Ge=0; Ge < nirreps; Ge++) { Ga = Ge ^ Gki; /* totally symmetric */ Gje = Gj ^ Ge; nrows = virtpi[Ge]; ncols = ZDfAn.params->coltot[Gje]; nlinks = virtpi[Ga]; ea = Dints.col_offset[Gki][Ge]; je = ZDfAn.row_offset[Gje][J]; ZDfAn.matrix[Gje] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDfAn, Gje, je, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, -1.0, &(Dints.matrix[Gki][ki][ea]), nlinks, W2[Ga][0], ncols, 1.0, ZDfAn.matrix[Gje][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDfAn, Gje, je, nrows); dpd_free_block(ZDfAn.matrix[Gje], nrows, ncols); } /* Z_AcEk <-- -1/2 t_IJkABc <IJ||EB> */ ij = DAAints.params->rowidx[I][J]; /* sort W(AB,C) to W(B,CA) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ for(ab=0; ab < FAA.params->coltot[Gab]; ab++) { A = FAA.params->colorb[Gab][ab][0]; B = FAA.params->colorb[Gab][ab][1]; Gb = FAA.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ca = FAA.params->colidx[C][A]; W2[Gb][b][ca] = W1[Gab][ab][c]; } } } for(Ge=0; Ge < nirreps; Ge++) { Gb = Ge ^ Gij; /* totally symmetric */ Gca = Gke = Gk ^ Ge; /* totally symmetric */ nrows = virtpi[Ge]; ncols = ZDfAn.params->coltot[Gke]; nlinks = virtpi[Gb]; eb = DAAints.col_offset[Gij][Ge]; ke = ZDfAn.row_offset[Gke][K]; ZDfAn.matrix[Gke] = dpd_block_matrix(nrows, ncols); dpd_buf4_mat_irrep_rd_block(&ZDfAn, Gke, ke, nrows); if(nrows && ncols && nlinks) C_DGEMM('n', 'n', nrows, ncols, nlinks, -0.5, &(DAAints.matrix[Gij][ij][eb]), nlinks, W2[Gb][0], ncols, 1.0, ZDfAn.matrix[Gke][0], ncols); dpd_buf4_mat_irrep_wrt_block(&ZDfAn, Gke, ke, nrows); dpd_free_block(ZDfAn.matrix[Gke], nrows, ncols); } } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* totally symmetric */ dpd_free_block(W1[Gab], FAA.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; /* totally symmtric */ dpd_free_block(W2[Ga], virtpi[Ga], FAA.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ free(W1); free(W2); dpd_buf4_close(&EAA); dpd_buf4_close(&EAB); dpd_buf4_close(&EBA); dpd_buf4_close(&FAA); dpd_buf4_close(&FAB); dpd_buf4_close(&FBA); dpd_buf4_close(&T2AA); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fij); dpd_file2_close(&fab); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&ZIFLN, h); dpd_buf4_mat_irrep_close(&ZIFLN, h); dpd_buf4_mat_irrep_wrt(&ZIfLn, h); dpd_buf4_mat_irrep_close(&ZIfLn, h); } dpd_buf4_close(&ZIFLN); dpd_buf4_close(&ZIfLn); dpd_buf4_sort(&ZDFAN, CC3_MISC, qpsr, 11, 5, "CC3 ZDFAN (AN,DF)"); dpd_buf4_close(&ZDFAN); dpd_buf4_sort(&ZDfAn, CC3_MISC, qpsr, 11, 5, "CC3 ZDfAn (An,Df)"); dpd_buf4_close(&ZDfAn); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&Dints, h); dpd_buf4_mat_irrep_close(&DAAints, h); } dpd_buf4_close(&Dints); dpd_buf4_close(&DAAints); } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/cclambda.cc�������������������������������������������������������������������0000644�0001015�0000765�00000040170�11112564564�015332� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ /* ** CCLAMBDA: Program to calculate the coupled-cluster lambda vector. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #include "globals.h" namespace psi { namespace cclambda { void init_io(int argc, char *argv[]); void title(void); void get_moinfo(void); void get_params(void); void cleanup(void); void init_amps(struct L_Params L_params); double pseudoenergy(struct L_Params L_params); void exit_io(void); void G_build(int L_irr); void L1_build(struct L_Params L_params); void L2_build(struct L_Params L_params); void sort_amps(int L_irr); void Lsave(int L_irr); void Lnorm(struct L_Params L_params); void Lmag(void); void update(void); int converged(int L_irr); void diis(int iter, int L_irr); int **cacheprep_rhf(int level, int *cachefiles); int **cacheprep_uhf(int level, int *cachefiles); void cachedone_rhf(int **cachelist); void cachedone_uhf(int **cachelist); void denom(struct L_Params); void overlap(int L_irr); void overlap_LAMPS(struct L_Params L_params); void Lsave_index(struct L_Params L_params); void Lamp_write(struct L_Params L_params); void check_ortho(struct L_Params *pL_params); void projections(struct L_Params *pL_params); void L_zero(int irrep); void c_clean(dpdfile2 *LIA, dpdfile2 *Lia, dpdbuf4 *LIJAB, dpdbuf4 *Lijab, dpdbuf4 *LIjAb); void L_clean(struct L_Params pL_params); void zeta_norm(struct L_Params pL_params); void spinad_amps(void); void status(const char *, FILE *); void hbar_extra(void); void ortho_Rs(struct L_Params *pL_params, int current_L); void cc2_L1_build(struct L_Params L_params); void cc2_L2_build(struct L_Params L_params); void cc2_Gai_build(int L_irr); void cc2_hbar_extra(void); void cc3_t3z(void); void cc3_t3x(void); void cc3_l3l2(void); void cc3_l3l1(void); void local_init(void); void local_done(void); }} // namespace psi::cclambda using namespace psi::cclambda; int main(int argc, char *argv[]) { int done=0, i, root_L_irr; int **cachelist, *cachefiles; dpdfile2 L1; init_io(argc, argv); /* parses command-line arguments */ title(); moinfo.iter=0; get_moinfo(); get_params(); /* throw any existing CC_LAMBDA, CC_DENOM away */ /* Do this only if we're not running an analytic gradient on the ground state. Keeping the files around should allow us to restart from old Lambda amplitudes. -TDC, 11/2007 */ if(!(params.dertype==1 && !cc_excited(params.wfn))) { fprintf(outfile, "\tDeleting old CC_LAMBDA data.\n"); psio_close(CC_LAMBDA,0); psio_open(CC_LAMBDA,PSIO_OPEN_NEW); psio_close(CC_DENOM,0); psio_open(CC_DENOM,PSIO_OPEN_NEW); } cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); if(params.aobasis) { /* Set up new DPD for AO-basis algorithm */ dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.sopi, moinfo.sosym); dpd_set_default(0); } } else if(params.ref == 2) { /** UHF **/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); if(params.aobasis) { /* Set up new DPD's for AO-basis algorithm */ dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.sopi, moinfo.sosym, moinfo.boccpi, moinfo.bocc_sym, moinfo.sopi, moinfo.sosym); dpd_set_default(0); } } if(params.local) local_init(); if(params.ref == 0) { if (!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) cc2_hbar_extra(); else hbar_extra(); } /* CC3: Z-build */ if(!strcmp(params.wfn,"CC3")) cc3_t3z(); for (i=0; i<params.nstates; ++i) { /* delete and reopen intermediate files */ psio_close(CC_TMP,0); psio_close(CC_TMP0,0); psio_close(CC_TMP1,0); psio_close(CC_TMP2,0); psio_open(CC_TMP,0); psio_open(CC_TMP0,0); psio_open(CC_TMP1,0); psio_open(CC_TMP2,0); /* Keep the old lambda amps if this is a ground-state geomopt */ if(!(params.dertype==1 && !cc_excited(params.wfn))) { psio_close(CC_LAMBDA,0); psio_open(CC_LAMBDA,PSIO_OPEN_NEW); psio_close(CC_DENOM,0); /* aren't these recomputed anyway - perhaps should always delete? */ psio_open(CC_DENOM,PSIO_OPEN_NEW); } fprintf(outfile,"\tSymmetry of left-hand state: %s\n", moinfo.labels[ moinfo.sym^(pL_params[i].irrep) ]); fprintf(outfile,"\tSymmetry of left-hand eigenvector: %s\n", moinfo.labels[(pL_params[i].irrep)]); denom(pL_params[i]); /* uses L_params.cceom_energy for excited states */ init_amps(pL_params[i]); /* uses denominators for initial zeta guess */ fprintf(outfile, "\n\t Solving Lambda Equations\n"); fprintf(outfile, "\t ------------------------\n"); fprintf(outfile, "\tIter PseudoEnergy or Norm RMS \n"); fprintf(outfile, "\t---- --------------------- --------\n"); moinfo.lcc = pseudoenergy(pL_params[i]); update(); for(moinfo.iter=1 ; moinfo.iter <= params.maxiter; moinfo.iter++) { sort_amps(pL_params[i].irrep); /* must zero New L before adding RHS */ L_zero(pL_params[i].irrep); if(!strcmp(params.wfn,"CC3")) cc3_t3x(); if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { cc2_Gai_build(pL_params[i].irrep); cc2_L1_build(pL_params[i]); if(params.print & 2) status("L1 amplitudes", outfile); cc2_L2_build(pL_params[i]); } else { G_build(pL_params[i].irrep); L1_build(pL_params[i]); if(params.print & 2) status("L1 amplitudes", outfile); L2_build(pL_params[i]); if(!strcmp(params.wfn, "CC3")) { cc3_l3l2(); cc3_l3l1(); } } if (params.ref == 1) L_clean(pL_params[i]); if (params.nstates > 2) ortho_Rs(pL_params, i); if(converged(pL_params[i].irrep)) { done = 1; /* Boolean for convergence */ Lsave(pL_params[i].irrep); /* copy "New L" to "L" */ moinfo.lcc = pseudoenergy(pL_params[i]); update(); if (!pL_params[i].ground && !params.zeta) { Lnorm(pL_params[i]); /* normalize against R */ } Lsave_index(pL_params[i]); /* save Ls with indices in LAMPS */ Lamp_write(pL_params[i]); /* write out largest Ls */ /* sort_amps(); to be done by later functions */ fprintf(outfile, "\n\tIterations converged.\n"); fflush(outfile); moinfo.iter = 0; break; } if(params.diis) diis(moinfo.iter, pL_params[i].irrep); Lsave(pL_params[i].irrep); moinfo.lcc = pseudoenergy(pL_params[i]); update(); } fprintf(outfile, "\n"); if(!done) { fprintf(outfile, "\t ** Lambda not converged to %2.1e ** \n", params.convergence); fflush(outfile); dpd_close(0); cleanup(); exit_io(); exit(PSI_RETURN_FAILURE); } if (pL_params[i].ground) overlap(pL_params[i].irrep); } if (params.zeta) { zeta_norm(pL_params[0]); } else if (params.nstates > 1) { /* some excited states are present */ check_ortho(pL_params); projections(pL_params); } if(params.local) local_done(); dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCLAMBDA"; return(prgid); }} namespace psi { namespace cclambda { /* parse command line arguments */ void init_io(int argc, char *argv[]) { int i, num_unparsed; char *lbl, *progid, *argv_unparsed[100]; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); params.all=0; /* do all Ls including ground state */ params.zeta=0; /* only do ground-state L */ for (i=1, num_unparsed=0; i<argc; ++i) { if (!strcmp(argv[i],"--all")) { params.all = 1; } else if (!strcmp(argv[i],"--zeta")) { params.zeta = 1; } else { argv_unparsed[num_unparsed++] = argv[i]; } } psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed, argv_unparsed, 0); ip_cwk_add(":INPUT"); ip_cwk_add(":CCEOM"); ip_cwk_add(progid); /* convergence in CCLAMBDA: will only replace default if this is the last keyword read */ free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void title(void) { fprintf(outfile, "\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* CCLAMBDA *\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\n"); } void exit_io(void) { int i; for(i=CC_TMP; i <= CC_TMP11; i++) { psio_close(i,0); psio_open(i,PSIO_OPEN_NEW); } psio_close(CC_DENOM,0); psio_open(CC_DENOM,PSIO_OPEN_NEW); /* Close all dpd data files here */ for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); /* delete CC_TMP files */ for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } /* put copies of L for excited states in LAMPS with irrep and index label */ void Lsave_index(struct L_Params L_params) { int L_irr; dpdfile2 L1; dpdbuf4 L2, LIjAb, LIjbA; char *L1A_lbl, *L1B_lbl, *L2AA_lbl, *L2BB_lbl, *L2AB_lbl, *L2RHF_lbl, lbl[32]; L1A_lbl = L_params.L1A_lbl; L1B_lbl = L_params.L1B_lbl; L2AA_lbl = L_params.L2AA_lbl; L2BB_lbl = L_params.L2BB_lbl; L2AB_lbl = L_params.L2AB_lbl; L2RHF_lbl = L_params.L2RHF_lbl; L_irr = L_params.irrep; if(params.ref == 0 || params.ref == 1) { /** ROHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_LAMPS, L1A_lbl); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_copy(&L1, CC_LAMPS, L1B_lbl); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_copy(&L2, CC_LAMPS, L2AA_lbl); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_copy(&L2, CC_LAMPS, L2BB_lbl); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&L2, CC_LAMPS, L2AB_lbl); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&L1, CC_LAMPS, L1A_lbl); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_copy(&L1, CC_LAMPS, L1B_lbl); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_copy(&L2, CC_LAMPS, L2AA_lbl); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_copy(&L2, CC_LAMPS, L2BB_lbl); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_copy(&L2, CC_LAMPS, L2AB_lbl); dpd_buf4_close(&L2); } if (params.ref == 0) { /** RHF for those codes that can use them **/ dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_sort(&LIjAb, CC_TMP, pqsr, 0, 5, "LIjbA"); dpd_buf4_copy(&LIjAb, CC_LAMPS, L2RHF_lbl); dpd_buf4_close(&LIjAb); dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2RHF_lbl); dpd_buf4_scm(&LIjAb, 2.0); dpd_buf4_init(&LIjbA, CC_TMP, L_irr, 0, 5, 0, 5, 0, "LIjbA"); dpd_buf4_axpy(&LIjbA, &LIjAb, -1.0); dpd_buf4_close(&LIjbA); dpd_buf4_close(&LIjAb); } return; } void L_zero(int L_irr) { dpdfile2 LIA, Lia; dpdbuf4 LIJAB, Lijab, LIjAb; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_scm(&LIA, 0.0); dpd_file2_close(&LIA); } else if(params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_scm(&LIA, 0.0); dpd_file2_scm(&Lia, 0.0); dpd_file2_close(&LIA); dpd_file2_close(&Lia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_scm(&LIA, 0.0); dpd_file2_scm(&Lia, 0.0); dpd_file2_close(&LIA); dpd_file2_close(&Lia); } if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_scm(&LIjAb, 0.0); dpd_buf4_close(&LIjAb); } else if (params.ref == 1 ) { /** ROHF **/ dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_scm(&LIJAB, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_scm(&Lijab, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_scm(&LIjAb, 0.0); dpd_buf4_close(&LIjAb); } else { /** UHF **/ dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_scm(&LIJAB, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_scm(&Lijab, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_scm(&LIjAb, 0.0); dpd_buf4_close(&LIjAb); } } /* Cleaning out L vectors for open-shell cases */ void L_clean(struct L_Params L_params) { int L_irr, i; dpdfile2 LIA, Lia; dpdbuf4 LIJAB, Lijab, LIjAb; char lbl[80]; L_irr = L_params.irrep; dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); c_clean(&LIA, &Lia, &LIJAB, &Lijab, &LIjAb); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); } void zeta_norm(struct L_Params L_params) { int Z_irr, i; dpdfile2 ZIA, Zia; dpdbuf4 ZIJAB, Zijab, ZIjAb; double tval; Z_irr = L_params.irrep; if (params.ref == 0 || params.ref == 1) { dpd_file2_init(&ZIA, CC_LAMPS, Z_irr, 0, 1, "ZIA"); tval = dpd_file2_dot_self(&ZIA); dpd_file2_close(&ZIA); dpd_file2_init(&Zia, CC_LAMPS, Z_irr, 0, 1, "Zia"); tval += dpd_file2_dot_self(&Zia); dpd_file2_close(&Zia); dpd_buf4_init(&ZIJAB, CC_LAMPS, Z_irr, 2, 7, 2, 7, 0, "ZIJAB"); tval += dpd_buf4_dot_self(&ZIJAB); dpd_buf4_close(&ZIJAB); dpd_buf4_init(&Zijab, CC_LAMPS, Z_irr, 2, 7, 2, 7, 0, "Zijab"); tval += dpd_buf4_dot_self(&Zijab); dpd_buf4_close(&Zijab); dpd_buf4_init(&ZIjAb, CC_LAMPS, Z_irr, 0, 5, 0, 5, 0, "ZIjAb"); tval += dpd_buf4_dot_self(&ZIjAb); dpd_buf4_close(&ZIjAb); } else { /* UHF */ dpd_file2_init(&ZIA, CC_LAMPS, Z_irr, 0, 1, "ZIA"); tval = dpd_file2_dot_self(&ZIA); dpd_file2_close(&ZIA); dpd_file2_init(&Zia, CC_LAMPS, Z_irr, 2, 3, "Zia"); tval += dpd_file2_dot_self(&Zia); dpd_file2_close(&Zia); dpd_buf4_init(&ZIJAB, CC_LAMPS, Z_irr, 2, 7, 2, 7, 0, "ZIJAB"); tval += dpd_buf4_dot_self(&ZIJAB); dpd_buf4_close(&ZIJAB); dpd_buf4_init(&Zijab, CC_LAMPS, Z_irr, 12, 17, 12, 17, 0, "Zijab"); tval += dpd_buf4_dot_self(&Zijab); dpd_buf4_close(&Zijab); dpd_buf4_init(&ZIjAb, CC_LAMPS, Z_irr, 22, 28, 22, 28, 0, "ZIjAb"); tval += dpd_buf4_dot_self(&ZIjAb); dpd_buf4_close(&ZIjAb); } fprintf(outfile,"Norm of Zeta: %20.15lf\n", sqrt(tval) ); return; } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/check_ortho.cc����������������������������������������������������������������0000644�0001015�0000765�00000012062�10757640026�016075� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { double LR_overlap_ROHF(int IRR, int L_index, int R_index); double LR_overlap_RHF(int IRR, int L_index, int R_index); void check_ortho(struct L_Params *pL_params) { int L_state_index, root_L_irr, L_irr; int R_state_index, root_R_irr, R_irr; double **O, tval; int L,R; if (params.ref <= 1) { O = block_matrix(params.nstates,params.nstates); for (L=0;L<params.nstates;++L) { L_irr = pL_params[L].irrep; root_L_irr = pL_params[L].root; for (R=0;R<params.nstates;++R) { R_irr = pL_params[R].irrep; root_R_irr = pL_params[R].root; if (L_irr == R_irr) { tval = LR_overlap_ROHF(L_irr, root_L_irr, root_R_irr); if (pL_params[L].ground) tval += 1.0 * pL_params[R].R0; } else tval = -99.0; O[L][R] = tval; } } fprintf(outfile,"\t<L|R> overlap matrix with ROHF quantities (-99 => 0 by symmetry)\n"); print_mat(O, params.nstates, params.nstates, outfile); free_block(O); } if (params.ref == 0) { /* test RHF quantities */ O = block_matrix(params.nstates, params.nstates); for (L=0; L<params.nstates;++L) { L_irr = pL_params[L].irrep; root_L_irr = pL_params[L].root; for (R=0;R<params.nstates;++R) { R_irr = pL_params[R].irrep; root_R_irr = pL_params[R].root; if (L_irr == R_irr) { tval = LR_overlap_RHF(L_irr, root_L_irr, root_R_irr); if (pL_params[L].ground) tval += 1.0 * pL_params[R].R0; } else tval = -99.0; O[L][R] = tval; } } fprintf(outfile,"\t<L|R> overlap matrix with RHF quantities (-99 => 0 by symmetry)\n"); print_mat(O, params.nstates, params.nstates, outfile); free_block(O); } return; } double LR_overlap_ROHF(int IRR, int L_index, int R_index) { double overlap; dpdfile2 R1, L1; dpdbuf4 R2, L2; char R1A_lbl[32], R1B_lbl[32], R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; char L1A_lbl[32], L1B_lbl[32], L2AA_lbl[32], L2BB_lbl[32], L2AB_lbl[32]; sprintf(R1A_lbl, "RIA %d %d", IRR, R_index); sprintf(R1B_lbl, "Ria %d %d", IRR, R_index); sprintf(R2AA_lbl, "RIJAB %d %d", IRR, R_index); sprintf(R2BB_lbl, "Rijab %d %d", IRR, R_index); sprintf(R2AB_lbl, "RIjAb %d %d", IRR, R_index); sprintf(L1A_lbl, "LIA %d %d", IRR, L_index); sprintf(L1B_lbl, "Lia %d %d", IRR, L_index); sprintf(L2AA_lbl, "LIJAB %d %d", IRR, L_index); sprintf(L2BB_lbl, "Lijab %d %d", IRR, L_index); sprintf(L2AB_lbl, "LIjAb %d %d", IRR, L_index); dpd_file2_init(&R1, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&L1, CC_LAMPS, IRR, 0, 1, L1A_lbl); overlap = dpd_file2_dot(&L1, &R1); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_file2_init(&R1, CC_RAMPS, IRR, 0, 1, R1B_lbl); dpd_file2_init(&L1, CC_LAMPS, IRR, 0, 1, L1B_lbl); overlap += dpd_file2_dot(&L1, &R1); dpd_file2_close(&R1); dpd_file2_close(&L1); dpd_buf4_init(&R2, CC_RAMPS, IRR, 2, 7, 2, 7, 0, R2AA_lbl); dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2AA_lbl); overlap += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&R2, CC_RAMPS, IRR, 2, 7, 2, 7, 0, R2BB_lbl); dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2BB_lbl); overlap += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, R2AB_lbl); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); overlap += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); return overlap; } double LR_overlap_RHF(int IRR, int L_index, int R_index) { dpdfile2 R1, L1; dpdbuf4 R2, L2; double overlap, overlap2, overlap3; char L1A_lbl[32], R1A_lbl[32], lbl[32]; sprintf(L1A_lbl, "LIA %d %d", IRR, L_index); sprintf(R1A_lbl, "RIA %d %d", IRR, R_index); dpd_file2_init(&R1, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&L1, CC_LAMPS, IRR, 0, 1, L1A_lbl); overlap = 2.0 * dpd_file2_dot(&L1, &R1); dpd_file2_close(&R1); dpd_file2_close(&L1); sprintf(lbl, "2RIjAb - RIjbA %d %d", IRR, R_index); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "LIjAb %d %d", IRR, L_index); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, lbl); overlap2 = dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&L2); dpd_buf4_close(&R2); sprintf(lbl, "2LIjAb - LIjbA %d %d", IRR, L_index); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "RIjAb %d %d", IRR, R_index); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, lbl); overlap3 = dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); if (fabs(overlap2 - overlap3) > 1E-14) { fprintf(outfile,"Bad anti-symmetry detected in RHF quantities\n"); fprintf(outfile,"error: %15.10lf\n",overlap2-overlap3); } overlap += overlap2; return overlap; } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/check_sum.cc������������������������������������������������������������������0000644�0001015�0000765�00000005064�10757640026�015552� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf); double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE); void check_sum(char *term_lbl, int irrep) { dpdfile2 Lia, LIA; dpdbuf4 LIJAB, Lijab, LIjAb, LIjbA; static double old_norm=0; double norm,dotval; char lbl[80]; if (!strcmp(term_lbl,"reset")) { fprintf(outfile,"resetting norm\n"); old_norm = 0; return; } if (params.ref <= 1) { dpd_file2_init(&LIA, CC_LAMBDA, irrep, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, irrep, 0, 1, "New Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, irrep, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, irrep, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, irrep, 0, 5, 0, 5, 0, "New LIjAb"); norm = norm_C(&LIA, &Lia, &LIJAB, &Lijab, &LIjAb); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); } else if (params.ref == 2) { dpd_file2_init(&LIA, CC_LAMBDA, irrep, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, irrep, 2, 3, "New Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, irrep, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, irrep, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, irrep, 22, 28, 22, 28, 0, "New LIjAb"); norm = norm_C(&LIA, &Lia, &LIJAB, &Lijab, &LIjAb); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); } fprintf(outfile,"%7s, D(norm L)=%15.10lf\n", term_lbl, norm - old_norm); fflush(outfile); old_norm = norm; return; } double norm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) { double norm = 0.0; norm += dpd_file2_dot_self(CME); norm += dpd_file2_dot_self(Cme); norm += dpd_buf4_dot_self(CMNEF); norm += dpd_buf4_dot_self(Cmnef); norm += dpd_buf4_dot_self(CMnEf); norm = sqrt(norm); return norm; } double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE) { double norm = 0.0; norm = 2.0 * dpd_file2_dot_self(CME); norm += 2.0 * dpd_buf4_dot_self(CMnEf); norm -= dpd_buf4_dot(CMnEf, CMnfE); norm = sqrt(norm); return norm; } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/converged.cc������������������������������������������������������������������0000644�0001015�0000765�00000011414�10757640026�015561� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libipv1/ip_lib.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { int converged(int L_irr) { int row,col,h,nirreps; double rms=0.0; dpdfile2 L1, L1old; dpdbuf4 L2, L2old; nirreps = moinfo.nirreps; dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1); dpd_file2_mat_rd(&L1); dpd_file2_init(&L1old, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L1old); dpd_file2_mat_rd(&L1old); for(h=0; h < nirreps; h++) for(row=0; row < L1.params->rowtot[h]; row++) for(col=0; col < L1.params->coltot[h^L_irr]; col++) rms += (L1.matrix[h][row][col] - L1old.matrix[h][row][col]) * (L1.matrix[h][row][col] - L1old.matrix[h][row][col]); dpd_file2_mat_close(&L1); dpd_file2_close(&L1); dpd_file2_mat_close(&L1old); dpd_file2_close(&L1old); if(params.ref == 0) rms *= 2.0; if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_mat_init(&L1); dpd_file2_mat_rd(&L1); dpd_file2_init(&L1old, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_mat_init(&L1old); dpd_file2_mat_rd(&L1old); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_mat_init(&L1); dpd_file2_mat_rd(&L1); dpd_file2_init(&L1old, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_mat_init(&L1old); dpd_file2_mat_rd(&L1old); } if(params.ref == 1 || params.ref == 2) { for(h=0; h < nirreps; h++) for(row=0; row < L1.params->rowtot[h]; row++) for(col=0; col < L1.params->coltot[h^L_irr]; col++) rms += (L1.matrix[h][row][col] - L1old.matrix[h][row][col]) * (L1.matrix[h][row][col] - L1old.matrix[h][row][col]); dpd_file2_mat_close(&L1); dpd_file2_close(&L1); dpd_file2_mat_close(&L1old); dpd_file2_close(&L1old); } if(params.ref == 1 || params.ref == 2) { dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&L2old, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); dpd_buf4_mat_irrep_init(&L2old, h); dpd_buf4_mat_irrep_rd(&L2old, h); for(row=0; row < L2.params->rowtot[h]; row++) for(col=0; col < L2.params->coltot[h^L_irr]; col++) rms += (L2.matrix[h][row][col] - L2old.matrix[h][row][col]) * (L2.matrix[h][row][col] - L2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&L2, h); dpd_buf4_mat_irrep_close(&L2old, h); } dpd_buf4_close(&L2old); dpd_buf4_close(&L2); } if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&L2old, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&L2old, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); } if(params.ref == 1 || params.ref == 2) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); dpd_buf4_mat_irrep_init(&L2old, h); dpd_buf4_mat_irrep_rd(&L2old, h); for(row=0; row < L2.params->rowtot[h]; row++) for(col=0; col < L2.params->coltot[h^L_irr]; col++) rms += (L2.matrix[h][row][col] - L2old.matrix[h][row][col]) * (L2.matrix[h][row][col] - L2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&L2, h); dpd_buf4_mat_irrep_close(&L2old, h); } dpd_buf4_close(&L2old); dpd_buf4_close(&L2); } if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&L2old, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&L2old, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); dpd_buf4_mat_irrep_init(&L2old, h); dpd_buf4_mat_irrep_rd(&L2old, h); for(row=0; row < L2.params->rowtot[h]; row++) for(col=0; col < L2.params->coltot[h^L_irr]; col++) rms += (L2.matrix[h][row][col] - L2old.matrix[h][row][col]) * (L2.matrix[h][row][col] - L2old.matrix[h][row][col]); dpd_buf4_mat_irrep_close(&L2, h); dpd_buf4_mat_irrep_close(&L2old, h); } dpd_buf4_close(&L2old); dpd_buf4_close(&L2); rms = sqrt(rms); moinfo.conv = rms; if(rms < params.convergence) return 1; else return 0; } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/denom.cc����������������������������������������������������������������������0000644�0001015�0000765�00000042336�10757640026�014716� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void denom_rhf(struct L_Params); void denom_rohf(struct L_Params); void denom_uhf(struct L_Params); void denom(struct L_Params L_params) { if(params.ref == 0) denom_rhf(L_params); else if(params.ref == 1) denom_rohf(L_params); else if(params.ref == 2) denom_uhf(L_params); } void denom_rhf(struct L_Params L_params) { dpdfile2 FAE, FMI; dpdfile2 dIA; dpdfile4 dIjAb; dpdbuf4 d, bdIJAB, bdijab, bdIjAb; double tval; int nirreps,L_irr; int h, i, j, a, b, ij, ab; int I, J, A, B; int isym, jsym, asym, bsym; int *occpi, *virtpi; int *occ_off, *vir_off; int *openpi; double Fii, Fjj, Faa, Fbb; L_irr = L_params.irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); /* Alpha one-electron denominator */ dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { /* irreps of dIA and Fii */ for(i=0; i < occpi[h]; i++) { Fii = FMI.matrix[h][i][i]; for(a=0; a < virtpi[h^L_irr]; a++) { Faa = FAE.matrix[h^L_irr][a][a]; dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); /* Alpha-beta two-electron denominator */ dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, "dIjAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIjAb, h); /* Loop over the rows */ for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) { i = dIjAb.params->roworb[h][ij][0]; j = dIjAb.params->roworb[h][ij][1]; isym = dIjAb.params->psym[i]; jsym = dIjAb.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; Fii = FMI.matrix[isym][I][I]; Fjj = FMI.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) { a = dIjAb.params->colorb[h^L_irr][ab][0]; b = dIjAb.params->colorb[h^L_irr][ab][1]; asym = dIjAb.params->rsym[a]; bsym = dIjAb.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; Faa = FAE.matrix[asym][A][A]; Fbb = FAE.matrix[bsym][B][B]; dIjAb.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy); } } dpd_file4_mat_irrep_wrt(&dIjAb, h); dpd_file4_mat_irrep_close(&dIjAb, h); } dpd_file4_close(&dIjAb); dpd_file2_mat_close(&FMI); dpd_file2_mat_close(&FAE); dpd_file2_close(&FMI); dpd_file2_close(&FAE); return; } void denom_uhf(struct L_Params L_params) { int nirreps, h, i, j, a, b, ij, ab, I, J, A, B, isym, jsym, asym, bsym, m, e; int *aoccpi, *boccpi, *avirtpi, *bvirtpi; int *aocc_off, *bocc_off, *avir_off, *bvir_off, L_irr; dpdfile2 LFMIt, LFmit, LFaet, LFAEt; dpdfile2 FMI, Fmi, FAE, Fae; dpdfile2 dIA, dia; dpdfile4 dIJAB, dijab, dIjAb; double Fii, Fjj, Faa, Fbb; L_irr = L_params.irrep; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&LFMIt); dpd_file2_mat_rd(&LFMIt); dpd_file2_init(&LFmit, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&LFmit); dpd_file2_mat_rd(&LFmit); dpd_file2_init(&LFaet, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&LFaet); dpd_file2_mat_rd(&LFaet); dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&LFAEt); dpd_file2_mat_rd(&LFAEt); } else { dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&LFMIt); dpd_file2_mat_rd(&LFMIt); dpd_file2_init(&LFmit, CC_OEI, 0, 2, 2, "Fmi"); dpd_file2_mat_init(&LFmit); dpd_file2_mat_rd(&LFmit); dpd_file2_init(&LFaet, CC_OEI, 0, 3, 3, "Fae"); dpd_file2_mat_init(&LFaet); dpd_file2_mat_rd(&LFaet); dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&LFAEt); dpd_file2_mat_rd(&LFAEt); } dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { Fii = LFMIt.matrix[h][i][i]; for(a=0; a < avirtpi[h^L_irr]; a++) { Faa = LFAEt.matrix[h^L_irr][a][a]; dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia"); dpd_file2_mat_init(&dia); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { Fii = LFmit.matrix[h][i][i]; for(a=0; a < bvirtpi[h^L_irr]; a++) { Faa = LFaet.matrix[h^L_irr][a][a]; dia.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy); } } } dpd_file2_mat_wrt(&dia); dpd_file2_mat_close(&dia); dpd_file2_close(&dia); dpd_file4_init(&dIJAB, CC_DENOM, L_irr, 1, 6, "dIJAB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; I = i - aocc_off[isym]; J = j - aocc_off[jsym]; Fii = LFMIt.matrix[isym][I][I]; Fjj = LFMIt.matrix[jsym][J][J]; for(ab=0; ab < dIJAB.params->coltot[h^L_irr]; ab++) { a = dIJAB.params->colorb[h^L_irr][ab][0]; b = dIJAB.params->colorb[h^L_irr][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; A = a - avir_off[asym]; B = b - avir_off[bsym]; Faa = LFAEt.matrix[asym][A][A]; Fbb = LFAEt.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); dpd_file4_init(&dijab, CC_DENOM, L_irr, 11, 16, "dijab"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dijab, h); for(ij=0; ij < dijab.params->rowtot[h]; ij++) { i = dijab.params->roworb[h][ij][0]; j = dijab.params->roworb[h][ij][1]; isym = dijab.params->psym[i]; jsym = dijab.params->qsym[j]; I = i - bocc_off[isym]; J = j - bocc_off[jsym]; Fii = LFmit.matrix[isym][I][I]; Fjj = LFmit.matrix[jsym][J][J]; for(ab=0; ab < dijab.params->coltot[h^L_irr]; ab++) { a = dijab.params->colorb[h^L_irr][ab][0]; b = dijab.params->colorb[h^L_irr][ab][1]; asym = dijab.params->rsym[a]; bsym = dijab.params->ssym[b]; A = a - bvir_off[asym]; B = b - bvir_off[bsym]; Faa = LFaet.matrix[asym][A][A]; Fbb = LFaet.matrix[bsym][B][B]; dijab.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy); } } dpd_file4_mat_irrep_wrt(&dijab, h); dpd_file4_mat_irrep_close(&dijab, h); } dpd_file4_close(&dijab); dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 22, 28, "dIjAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIjAb, h); for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) { i = dIjAb.params->roworb[h][ij][0]; j = dIjAb.params->roworb[h][ij][1]; isym = dIjAb.params->psym[i]; jsym = dIjAb.params->qsym[j]; I = i - aocc_off[isym]; J = j - bocc_off[jsym]; Fii = LFMIt.matrix[isym][I][I]; Fjj = LFmit.matrix[jsym][J][J]; for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) { a = dIjAb.params->colorb[h^L_irr][ab][0]; b = dIjAb.params->colorb[h^L_irr][ab][1]; asym = dIjAb.params->rsym[a]; bsym = dIjAb.params->ssym[b]; A = a - avir_off[asym]; B = b - bvir_off[bsym]; Faa = LFAEt.matrix[asym][A][A]; Fbb = LFaet.matrix[bsym][B][B]; dIjAb.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy); } } dpd_file4_mat_irrep_wrt(&dIjAb, h); dpd_file4_mat_irrep_close(&dIjAb, h); } dpd_file4_close(&dIjAb); dpd_file2_mat_close(&LFMIt); dpd_file2_mat_close(&LFmit); dpd_file2_mat_close(&LFAEt); dpd_file2_mat_close(&LFaet); dpd_file2_close(&LFMIt); dpd_file2_close(&LFmit); dpd_file2_close(&LFAEt); dpd_file2_close(&LFaet); /* if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { */ /* dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); */ /* dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); */ /* dpd_file2_mat_init(&FMI); */ /* dpd_file2_mat_rd(&FMI); */ /* dpd_file2_mat_init(&Fmi); */ /* dpd_file2_mat_rd(&Fmi); */ /* for(h=0; h < moinfo.nirreps; h++) { */ /* for(m=0; m < FMI.params->rowtot[h]; m++) */ /* FMI.matrix[h][m][m] = 0; */ /* for(m=0; m < Fmi.params->rowtot[h]; m++) */ /* Fmi.matrix[h][m][m] = 0; */ /* } */ /* dpd_file2_mat_wrt(&FMI); */ /* dpd_file2_mat_close(&FMI); */ /* dpd_file2_mat_wrt(&Fmi); */ /* dpd_file2_mat_close(&Fmi); */ /* dpd_file2_close(&FMI); */ /* dpd_file2_close(&Fmi); */ /* dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); */ /* dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); */ /* dpd_file2_mat_init(&FAE); */ /* dpd_file2_mat_rd(&FAE); */ /* dpd_file2_mat_init(&Fae); */ /* dpd_file2_mat_rd(&Fae); */ /* for(h=0; h < moinfo.nirreps; h++) { */ /* for(e=0; e < FAE.params->coltot[h]; e++) */ /* FAE.matrix[h][e][e] = 0; */ /* for(e=0; e < Fae.params->coltot[h]; e++) */ /* Fae.matrix[h][e][e] = 0; */ /* } */ /* dpd_file2_mat_wrt(&FAE); */ /* dpd_file2_mat_close(&FAE); */ /* dpd_file2_mat_wrt(&Fae); */ /* dpd_file2_mat_close(&Fae); */ /* dpd_file2_close(&FAE); */ /* dpd_file2_close(&Fae); */ /* } */ return; } void denom_rohf(struct L_Params L_params) { dpdfile2 LFAEt, LFaet, LFMIt, LFmit; dpdfile2 dIA, dia; dpdfile4 dIJAB, dijab, dIjAb; dpdbuf4 d, bdIJAB, bdijab, bdIjAb; double tval; int nirreps,L_irr; int h, i, j, a, b, ij, ab; int I, J, A, B; int isym, jsym, asym, bsym; int *occpi, *virtpi; int *occ_off, *vir_off; int *openpi; double Fii, Fjj, Faa, Fbb; L_irr = L_params.irrep; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&LFMIt); dpd_file2_mat_rd(&LFMIt); dpd_file2_init(&LFmit, CC_OEI, 0, 0, 0, "Fmi"); dpd_file2_mat_init(&LFmit); dpd_file2_mat_rd(&LFmit); dpd_file2_init(&LFaet, CC_OEI, 0, 1, 1, "Fae"); dpd_file2_mat_init(&LFaet); dpd_file2_mat_rd(&LFaet); dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&LFAEt); dpd_file2_mat_rd(&LFAEt); /* Alpha one-electron denominator */ dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { /* irreps of dIA and Fii */ for(i=0; i < occpi[h]; i++) { Fii = LFMIt.matrix[h][i][i]; for(a=0; a < (virtpi[h^L_irr] - openpi[h^L_irr]); a++) { Faa = LFAEt.matrix[h^L_irr][a][a]; dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); /* Beta one-electron denominator */ dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia"); dpd_file2_mat_init(&dia); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { Fii = LFmit.matrix[h][i][i]; for(a=0; a < virtpi[h^L_irr]; a++) { Faa = LFaet.matrix[h^L_irr][a][a]; dia.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy); } } } dpd_file2_mat_wrt(&dia); dpd_file2_mat_close(&dia); dpd_file2_close(&dia); /* Alpha-alpha two-electron denominator */ dpd_file4_init(&dIJAB, CC_DENOM, L_irr, 1, 6, "dIJAB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); /* Loop over the rows */ for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; Fii = LFMIt.matrix[isym][I][I]; Fjj = LFMIt.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dIJAB.params->coltot[h^L_irr]; ab++) { a = dIJAB.params->colorb[h^L_irr][ab][0]; b = dIJAB.params->colorb[h^L_irr][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; Faa = LFAEt.matrix[asym][A][A]; Fbb = LFAEt.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ? 0.0 : 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy)); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); /* Beta-beta two-electron denominator */ dpd_file4_init(&dijab, CC_DENOM, L_irr, 1, 6, "dijab"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dijab, h); /* Loop over the rows */ for(ij=0; ij < dijab.params->rowtot[h]; ij++) { i = dijab.params->roworb[h][ij][0]; j = dijab.params->roworb[h][ij][1]; isym = dijab.params->psym[i]; jsym = dijab.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; Fii = LFmit.matrix[isym][I][I]; Fjj = LFmit.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dijab.params->coltot[h^L_irr]; ab++) { a = dijab.params->colorb[h^L_irr][ab][0]; b = dijab.params->colorb[h^L_irr][ab][1]; asym = dijab.params->rsym[a]; bsym = dijab.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; Faa = LFaet.matrix[asym][A][A]; Fbb = LFaet.matrix[bsym][B][B]; dijab.matrix[h][ij][ab] = ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy)); } } dpd_file4_mat_irrep_wrt(&dijab, h); dpd_file4_mat_irrep_close(&dijab, h); } dpd_file4_close(&dijab); /* Alpha-beta two-electron denominator */ dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, "dIjAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIjAb, h); /* Loop over the rows */ for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) { i = dIjAb.params->roworb[h][ij][0]; j = dIjAb.params->roworb[h][ij][1]; isym = dIjAb.params->psym[i]; jsym = dIjAb.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; Fii = LFMIt.matrix[isym][I][I]; Fjj = LFmit.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) { a = dIjAb.params->colorb[h^L_irr][ab][0]; b = dIjAb.params->colorb[h^L_irr][ab][1]; asym = dIjAb.params->rsym[a]; bsym = dIjAb.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; Faa = LFAEt.matrix[asym][A][A]; Fbb = LFaet.matrix[bsym][B][B]; dIjAb.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy)); } } dpd_file4_mat_irrep_wrt(&dIjAb, h); dpd_file4_mat_irrep_close(&dIjAb, h); } dpd_file4_close(&dIjAb); dpd_file2_mat_close(&LFMIt); dpd_file2_mat_close(&LFmit); dpd_file2_mat_close(&LFAEt); dpd_file2_mat_close(&LFaet); dpd_file2_close(&LFMIt); dpd_file2_close(&LFmit); dpd_file2_close(&LFAEt); dpd_file2_close(&LFaet); return; } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/diis.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000072341�10757640026�014543� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** SubstanLially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** These improvements have been applied only to RHF cases so far. ** ** -TDC 12/22/01 */ void diis(int iter, int L_irr) { int nvector=8; /* Number of error vectors to keep */ int h, nirreps; int row, col, word, p, q, i; int diis_cycle; int vector_length=0; int errcod, *ipiv; dpdfile2 L1, L1a, L1b; dpdbuf4 L2, L2a, L2b, L2c; psio_address start, end, next; double **error; double **B, *C, **vector; double product, determinant, maximum; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ /* Compute the length of a single error vector */ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); for(h=0; h < nirreps; h++) { vector_length += L1.params->rowtot[h] * L1.params->coltot[h^L_irr]; vector_length += L2.params->rowtot[h] * L2.params->coltot[h^L_irr]; } dpd_file2_close(&L1); dpd_buf4_close(&L2); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); /*dpd_file2_print(&L1a,outfile);*/ dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); dpd_file2_init(&L1b, CC_LAMBDA, L_irr, 0, 1, "LIA"); /*dpd_file2_print(&L1b,outfile);*/ dpd_file2_mat_init(&L1b); dpd_file2_mat_rd(&L1b); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) { error[0][word++] = L1a.matrix[h][row][col] - L1b.matrix[h][row][col]; } dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_mat_close(&L1b); dpd_file2_close(&L1b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); /*dpd_buf4_print(&L2a,outfile,1);*/ dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); /*dpd_buf4_print(&L2b,outfile,1);*/ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) { error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; /* fprintf(outfile,"%15.10lf\n", error[0][word-1]); */ } dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ dpd_free_block(error, 1, vector_length); return; } nvector = iter; } /* Build B matrix of error vector products */ vector = dpd_block_matrix(2, vector_length); B = block_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); /* for(i=0; i < vector_length; i++) fprintf(outfile,"E[%d][%d] = %20.15lf\n",p,i,vector[0][i]); */ dot_arr(vector[0], vector[0], vector_length, &product); B[p][p] = product; for(q=0; q < p; q++) { start = psio_get_address(PSIO_ZERO, q*vector_length*sizeof(double)); psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[1], vector_length*sizeof(double), start, &end); dot_arr(vector[1], vector[0], vector_length, &product); B[p][q] = B[q][p] = product; } } dpd_free_block(vector, 2, vector_length); for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* fprintf(outfile,"\nDIIS B:\n"); print_mat(B,nvector,nvector,outfile); */ /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ ipiv = init_int_array(nvector+1); errcod = C_DGESV(nvector+1, 1, &(B[0][0]), nvector+1, &(ipiv[0]), &(C[0]), nvector+1); if(errcod) { fprintf(outfile, "\nError in DGESV return in diis.\n"); exit(PSI_RETURN_FAILURE); } /* Build a new amplitude vector from the old ones */ vector = dpd_block_matrix(1, vector_length); for(p=0; p < vector_length; p++) error[0][p] = 0.0; for(p=0; p < nvector; p++) { /*fprintf(outfile,"C[%d] = %20.15lf\n",p,C[p]);*/ start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[0], vector_length*sizeof(double), start, &end); for(q=0; q < vector_length; q++) error[0][q] += C[p] * vector[0][q]; } dpd_free_block(vector, 1, vector_length); /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) L1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&L1a); dpd_file2_mat_close(&L1a); dpd_file2_copy(&L1a, CC_LAMBDA, "New Lia"); /* to be removed after spin-adaptation */ /*dpd_file2_print(&L1a,outfile);*/ dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); /* to be removed after spin-adaptation */ dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 0, 5, 1, "New LIjAb"); dpd_buf4_copy(&L2a, CC_LAMBDA, "New LIJAB"); dpd_buf4_copy(&L2a, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&L2a); /* Release memory and return */ /* free_matrix(vector, nvector); */ free_block(B); free(C); free(ipiv); dpd_free_block(error, 1, vector_length); } else if(params.ref == 1) { /** ROHF **/ /* Compute the length of a single error vector */ /* RAK changed file nums here from CC_TMP0 */ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); for(h=0; h < nirreps; h++) { vector_length += 2 * L1.params->rowtot[h] * L1.params->coltot[h^L_irr]; vector_length += 2 * L2a.params->rowtot[h] * L2a.params->coltot[h^L_irr]; vector_length += L2b.params->rowtot[h] * L2b.params->coltot[h^L_irr]; } dpd_file2_close(&L1); dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); dpd_file2_init(&L1b, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L1b); dpd_file2_mat_rd(&L1b); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col] - L1b.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_mat_close(&L1b); dpd_file2_close(&L1b); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); dpd_file2_init(&L1b, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_mat_init(&L1b); dpd_file2_mat_rd(&L1b); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col] - L1b.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_mat_close(&L1b); dpd_file2_close(&L1b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ free(error); return; } nvector = iter; } /* Now grab the full set of error vectors from the file */ vector = init_matrix(nvector, vector_length); next = PSIO_ZERO; for(p=0; p < nvector; p++) psio_read(CC_DIIS_ERR, "DIIS Error Vectors", (char *) vector[p], vector_length*sizeof(double), next, &next); /* Build B matrix of error vector products */ B = init_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) { dot_arr(vector[p], vector[q], vector_length, &product); B[p][q] = product; } for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ flin(B, C, nvector+1, 1, &determinant); /* Grab the old amplitude vectors */ next = PSIO_ZERO; for(p=0; p < nvector; p++) psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[p], vector_length*sizeof(double), next, &next); /* Build the new amplitude vector from the old ones */ for(q=0; q < vector_length; q++) { error[0][q] = 0.0; for(p=0; p < nvector; p++) error[0][q] += C[p] * vector[p][q]; } /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) L1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&L1a); dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_mat_init(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) L1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&L1a); dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); /* Release memory and return */ free_matrix(vector, nvector); free_matrix(B, nvector+1); free(C); dpd_free_block(error, 1, vector_length); } /** ROHF **/ else if(params.ref == 2) { /** UHF **/ /* Compute the length of a single error vector */ dpd_file2_init(&L1a, CC_TMP0, L_irr, 0, 1, "LIA"); dpd_file2_init(&L1b, CC_TMP0, L_irr, 2, 3, "Lia"); dpd_buf4_init(&L2a, CC_TMP0, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&L2b, CC_TMP0, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&L2c, CC_TMP0, L_irr, 22, 28, 22, 28, 0, "LIjAb"); for(h=0; h < nirreps; h++) { vector_length += L1a.params->rowtot[h] * L1a.params->coltot[h^L_irr]; vector_length += L1b.params->rowtot[h] * L1b.params->coltot[h^L_irr]; vector_length += L2a.params->rowtot[h] * L2a.params->coltot[h^L_irr]; vector_length += L2b.params->rowtot[h] * L2b.params->coltot[h^L_irr]; vector_length += L2c.params->rowtot[h] * L2c.params->coltot[h^L_irr]; } dpd_file2_close(&L1a); dpd_file2_close(&L1b); dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); dpd_buf4_close(&L2c); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); dpd_file2_init(&L1b, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L1b); dpd_file2_mat_rd(&L1b); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col] - L1b.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_mat_close(&L1b); dpd_file2_close(&L1b); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); dpd_file2_init(&L1b, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_mat_init(&L1b); dpd_file2_mat_rd(&L1b); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col] - L1b.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_mat_close(&L1b); dpd_file2_close(&L1b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&L2b, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); dpd_buf4_mat_irrep_init(&L2b, h); dpd_buf4_mat_irrep_rd(&L2b, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col] - L2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); dpd_buf4_mat_irrep_close(&L2b, h); } dpd_buf4_close(&L2a); dpd_buf4_close(&L2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_ERR, "DIIS Error[0] Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_mat_init(&L1a); dpd_file2_mat_rd(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) error[0][word++] = L1a.matrix[h][row][col]; dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); dpd_buf4_mat_irrep_rd(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) error[0][word++] = L2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); psio_write(CC_DIIS_AMP, "DIIS Amplitude Vectors" , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ free(error[0]); return; } nvector = iter; } /* Now grab the full set of error[0] vectors from the file */ vector = init_matrix(nvector, vector_length); next = PSIO_ZERO; for(p=0; p < nvector; p++) psio_read(CC_DIIS_ERR, "DIIS Error[0] Vectors", (char *) vector[p], vector_length*sizeof(double), next, &next); /* Build B matrix of error[0] vector products */ B = init_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) { dot_arr(vector[p], vector[q], vector_length, &product); B[p][q] = product; } for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ flin(B, C, nvector+1, 1, &determinant); /* Grab the old amplitude vectors */ next = PSIO_ZERO; for(p=0; p < nvector; p++) psio_read(CC_DIIS_AMP, "DIIS Amplitude Vectors", (char *) vector[p], vector_length*sizeof(double), next, &next); /* Build the new amplitude vector from the old ones */ for(q=0; q < vector_length; q++) { error[0][q] = 0.0; for(p=0; p < nvector; p++) error[0][q] += C[p] * vector[p][q]; } /* Now place these elements into the DPD amplitude arrays */ word=0; dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_mat_init(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) L1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&L1a); dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_file2_init(&L1a, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_mat_init(&L1a); for(h=0; h < nirreps; h++) for(row=0; row < L1a.params->rowtot[h]; row++) for(col=0; col < L1a.params->coltot[h^L_irr]; col++) L1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&L1a); dpd_file2_mat_close(&L1a); dpd_file2_close(&L1a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); dpd_buf4_init(&L2a, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2a, h); for(row=0; row < L2a.params->rowtot[h]; row++) for(col=0; col < L2a.params->coltot[h^L_irr]; col++) L2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&L2a, h); dpd_buf4_mat_irrep_close(&L2a, h); } dpd_buf4_close(&L2a); /* Release memory and return */ free_matrix(vector, nvector); free_matrix(B, nvector+1); free(C); dpd_free_block(error, 1, vector_length); } /** UHF **/ return; } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/dijabL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000011330�10757640026�015051� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void local_filter_T1(dpdfile2 *T1); void local_filter_T2(dpdbuf4 *T2); void dijabL2(int L_irr) { dpdbuf4 L2, newLIJAB, newLijab, newLIjAb; dpdbuf4 d2, dIJAB, dijab, dIjAb; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_copy(&newLIjAb, CC_LAMBDA, "New LIjAb Increment"); dpd_buf4_close(&newLIjAb); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb Increment"); if(params.local) local_filter_T2(&newLIjAb); else { dpd_buf4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &newLIjAb); dpd_buf4_close(&dIjAb); } dpd_buf4_close(&newLIjAb); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&L2); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb Increment"); dpd_buf4_axpy(&L2, &newLIjAb, 1); dpd_buf4_close(&L2); /*dpd_buf4_print(&newLIjAb,outfile,1);*/ dpd_buf4_close(&newLIjAb); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 0, 5, 1, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&L2); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_copy(&newLIJAB, CC_LAMBDA, "New LIJAB Increment"); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB Increment"); dpd_buf4_init(&dIJAB, CC_DENOM, L_irr, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&dIJAB, &newLIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB Increment"); dpd_buf4_axpy(&L2, &newLIJAB, 1); dpd_buf4_close(&L2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_copy(&newLijab, CC_LAMBDA, "New Lijab Increment"); dpd_buf4_close(&newLijab); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab Increment"); dpd_buf4_init(&dijab, CC_DENOM, L_irr, 1, 6, 1, 6, 0, "dijab"); dpd_buf4_dirprd(&dijab, &newLijab); dpd_buf4_close(&dijab); dpd_buf4_close(&newLijab); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_copy(&L2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab Increment"); dpd_buf4_axpy(&L2, &newLijab, 1); dpd_buf4_close(&L2); dpd_buf4_close(&newLijab); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_copy(&newLIjAb, CC_LAMBDA, "New LIjAb Increment"); dpd_buf4_close(&newLIjAb); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb Increment"); dpd_buf4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &newLIjAb); dpd_buf4_close(&dIjAb); dpd_buf4_close(&newLIjAb); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&L2); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb Increment"); dpd_buf4_axpy(&L2, &newLIjAb, 1); dpd_buf4_close(&L2); dpd_buf4_close(&newLIjAb); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&d2, CC_DENOM, L_irr, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&d2, &L2); dpd_buf4_close(&L2); dpd_buf4_close(&d2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&d2, CC_DENOM, L_irr, 11, 16, 11, 16, 0, "dijab"); dpd_buf4_dirprd(&d2, &L2); dpd_buf4_close(&L2); dpd_buf4_close(&d2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&d2, CC_DENOM, L_irr, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&d2, &L2); dpd_buf4_close(&L2); dpd_buf4_close(&d2); } } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/DL2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000011032�11027011315�014142� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <string.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void DL2(struct L_Params L_params) { dpdbuf4 D, Dold, X2; int L_irr; L_irr = L_params.irrep; if (L_params.ground) { /* RHS = <ij||ab> */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&D); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_LAMBDA, "New LIJAB"); dpd_buf4_copy(&D, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_copy(&D, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&D); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_copy(&D, CC_LAMBDA, "New LIJAB"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_copy(&D, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_copy(&D, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&D); /* If CCSD(T) gradient, add T3 contributions */ if(!strcmp(params.wfn,"CCSD_T")) { dpd_buf4_init(&D, CC_MISC, 0, 2, 7, 2, 7, 0, "SIJAB"); dpd_buf4_init(&X2, CC_LAMBDA, 0, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&D, &X2, 1); dpd_buf4_close(&X2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_MISC, 0, 12, 17, 12, 17, 0, "Sijab"); dpd_buf4_init(&X2, CC_LAMBDA, 0, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&D, &X2, 1); dpd_buf4_close(&X2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_MISC, 0, 22, 28, 22, 28, 0, "SIjAb"); dpd_buf4_init(&X2, CC_LAMBDA, 0, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_axpy(&D, &X2, 1); dpd_buf4_close(&X2); dpd_buf4_close(&D); } } } /* excited state - no inhomogeneous term, first term is E*L */ else if (!params.zeta) { if (params.ref == 0) { /* RHF */ dpd_buf4_init(&D, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&Dold, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_axpy(&Dold, &D, -1.0 * L_params.cceom_energy); dpd_buf4_close(&Dold); dpd_buf4_close(&D); } else if (params.ref == 1 ) { /* ROHF */ dpd_buf4_init(&D, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&Dold, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_axpy(&Dold, &D, -1.0 * L_params.cceom_energy); dpd_buf4_close(&Dold); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&Dold, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_axpy(&Dold, &D, -1.0 * L_params.cceom_energy); dpd_buf4_close(&Dold); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&Dold, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_axpy(&Dold, &D, -1.0 * L_params.cceom_energy); dpd_buf4_close(&Dold); dpd_buf4_close(&D); } else { /** UHF **/ /* do nothing - TDC did not change to increments for the UHF case */ } } /* solving zeta equations, homogeneous term is Xi, zero out files */ else { if (params.ref == 0) { /* RHF */ dpd_buf4_init(&X2, EOM_XI, L_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_copy(&X2, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&X2); } else if (params.ref == 1 ) { /* ROHF */ dpd_buf4_init(&X2, EOM_XI, L_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_copy(&X2, CC_LAMBDA, "New LIJAB"); dpd_buf4_close(&X2); dpd_buf4_init(&X2, EOM_XI, L_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_copy(&X2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&X2); dpd_buf4_init(&X2, EOM_XI, L_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_copy(&X2, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&X2); } else { /** UHF **/ dpd_buf4_init(&X2, EOM_XI, L_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_copy(&X2, CC_LAMBDA, "New LIJAB"); dpd_buf4_close(&X2); dpd_buf4_init(&X2, EOM_XI, L_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_copy(&X2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&X2); dpd_buf4_init(&X2, EOM_XI, L_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_copy(&X2, CC_LAMBDA, "New LIjAb"); dpd_buf4_close(&X2); } } } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/FaeL2.cc����������������������������������������������������������������������0000644�0001015�0000765�00000012266�10757640026�014504� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /** The ROHF version of this contraction can be done with fewer contractions. **/ void FaeL2(int L_irr) { dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLIJAB, newLijab, newLIjAb; dpdfile2 LFaet2, LFAEt2, F; dpdbuf4 X, X1, X2; dpdbuf4 L2, newL2; /* RHS += P(ab)*Lijae*Feb */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "FAE"); dpd_contract424(&L2, &F, &X, 3, 0, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&X, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&X, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&X); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&LFAEt2, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&LFaet2, CC_OEI, 0, 1, 1, "Fae"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&LIJAB, &LFAEt2, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&LFAEt2, &LIJAB, &X2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&Lijab, &LFaet2, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&LFaet2, &Lijab, &X2, 0, 2, 1, 1.0, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_contract424(&LIjAb, &LFaet2, &newLIjAb, 3, 0, 0, 1.0, 1.0); dpd_contract244(&LFAEt2, &LIjAb, &newLIjAb, 0, 2, 1, 1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&LFaet2); dpd_file2_close(&LFAEt2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LFAEt2, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&LFaet2, CC_OEI, 0, 3, 3, "Faet"); /** X(IJ,AB) = L_IJ^AE F_EB **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract424(&LIJAB, &LFAEt2, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&LIJAB); /** X(IJ,AB) --> X'(IJ,BA) **/ dpd_buf4_sort(&X, CC_TMP1, pqsr, 2, 5, "X'(IJ,BA)"); dpd_buf4_close(&X); /** X(IJ,AB) = X(IJ,AB) - X'(IJ,BA) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X'(IJ,BA)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); dpd_buf4_close(&X1); /** L(IJ,AB) <-- X(IJ,AB) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB) A"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X, &newLIJAB, 1.0); dpd_buf4_close(&X); dpd_buf4_close(&newLIJAB); /** X(ij,ab) = L_ij^ae F_eb **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract424(&LIJAB, &LFaet2, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&LIJAB); /** X(ij,ab) --> X'(ij,ba) **/ dpd_buf4_sort(&X, CC_TMP1, pqsr, 12, 15, "X'(ij,ba)"); dpd_buf4_close(&X); /** X(ij,ab) = X(ij,ab) - X'(ij,ba) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X'(ij,ba)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); dpd_buf4_close(&X1); /** L(ij,ab) <-- X(ij,ab) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 12, 15, 12, 15, 0, "X(ij,ab) A"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X, &newLIJAB, 1.0); dpd_buf4_close(&X); dpd_buf4_close(&newLIJAB); /** L(Ij,Ab) <-- L(Ij,Ae) F(e,b) - F(E,A) L(Ij,Eb) **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_contract424(&LIjAb, &LFaet2, &newLIjAb, 3, 0, 0, 1, 1); dpd_contract244(&LFAEt2, &LIjAb, &newLIjAb, 0, 2, 1, 1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&LFaet2); dpd_file2_close(&LFAEt2); } } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/FmiL2.cc����������������������������������������������������������������������0000644�0001015�0000765�00000011774�10757640026�014527� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /** The RHF/ROHF contractions can be improved here **/ void FmiL2(int L_irr) { dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLijab, newLIJAB, newLIjAb; dpdfile2 LFmit2, LFMIt2, F; dpdbuf4 X, X1, X2; dpdbuf4 L2, newL2; /* RHS -= P(ij)*Limab*Fjm */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&X, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "X(Ij,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "FMI"); dpd_contract244(&F, &L2, &X, 1, 0, 0, -1.0, 0); dpd_file2_close(&F); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&X, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&X, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&X); } else if(params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&LFMIt2, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&LFmit2, CC_OEI, 0, 0, 0, "Fmi"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&LIJAB, &LFMIt2, &X1, 1, 1, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&LFMIt2, &LIJAB, &X2, 1, 0, 0, -1.0, 0.0); dpd_buf4_close(&LIJAB); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&Lijab, &LFmit2, &X1, 1, 1, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&LFmit2, &Lijab, &X2, 1, 0, 0, -1.0, 0.0); dpd_buf4_close(&Lijab); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_contract424(&LIjAb, &LFmit2, &newLIjAb, 1, 1, 1, -1.0, 1.0); dpd_contract244(&LFMIt2, &LIjAb, &newLIjAb, 1, 0, 0, -1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&LFmit2); dpd_file2_close(&LFMIt2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LFMIt2, CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&LFmit2, CC_OEI, 0, 2, 2, "Fmit"); /** X(IJ,AB) = F(I,M) L(MJ,AB) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(IJ,AB) B"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract244(&LFMIt2, &LIJAB, &X, 1, 0, 0, -1, 0); dpd_buf4_close(&LIJAB); /** X(IJ,AB) --> X'(JI,AB) **/ dpd_buf4_sort(&X, CC_TMP1, qprs, 0, 7, "X'(JI,AB)"); dpd_buf4_close(&X); /** X(IJ,AB) = X(IJ,AB) - X'(JI,AB) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X(IJ,AB) B"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "X'(JI,AB)"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); /** L(IJ,AB) <--- X(IJ,AB) **/ dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X1, &newLIJAB, 1.0); dpd_buf4_close(&X1); dpd_buf4_close(&newLIJAB); /** X(ij,ab) = F(i,m) L(mj,ab) **/ dpd_buf4_init(&X, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X(ij,ab) B"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract244(&LFmit2, &LIJAB, &X, 1, 0, 0, -1, 0); dpd_buf4_close(&LIJAB); /** X(ij,ab) --> X'(ji,ab) **/ dpd_buf4_sort(&X, CC_TMP1, qprs, 10, 17, "X'(ji,ab)"); dpd_buf4_close(&X); /** X(ij,ab) = X(ij,ab) - X'(ji,ab) **/ dpd_buf4_init(&X1, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X(ij,ab) B"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "X'(ji,ab)"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); /** L(ij,ab) <--- X(ij,ab) **/ dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X1, &newLIJAB, 1.0); dpd_buf4_close(&X1); dpd_buf4_close(&newLIJAB); /** L(Ij,Ab) <-- L(Im,Ab) F(j,m) - F(I,M) L(Mj,Ab) **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_contract424(&LIjAb, &LFmit2, &newLIjAb, 1, 1, 1, -1, 1); dpd_contract244(&LFMIt2, &LIjAb, &newLIjAb, 1, 0, 0, -1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); dpd_file2_close(&LFmit2); dpd_file2_close(&LFMIt2); } } }} // namespace psi::cclambda ����psi3/src/bin/cclambda/G.cc��������������������������������������������������������������������������0000644�0001015�0000765�00000015145�10757640026�014000� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void G_build(int L_irr) { dpdbuf4 LIJAB, Lijab, LiJaB, LIjAb, LijAB, LIJab; dpdbuf4 tIJAB, tijab, tiJaB, tIjAb, tijAB, tIJab; dpdfile2 GAE, Gae, GMI, Gmi; if(params.ref == 0) { dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); /* T(Mj,Ab) * [ 2 L(Ij,Ab) - L(Ij,Ba) ] --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_contract442(&tIjAb, &LIjAb, &GMI, 0, 0, 1, 0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); dpd_file2_close(&GMI); dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); /* T(Ij,Eb) * [ 2 L(Ij,Ab) - L(Ij,Ba) ] --> G(A,E) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_contract442(&LIjAb, &tIjAb, &GAE, 2, 2, -1, 0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); dpd_file2_close(&GAE); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 0, 0, "Gmi"); /* T2(MJ,AB) * L2(IJ,AB) --> G(M,I) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&tIJAB, &LIJAB, &GMI, 0, 0, 1.0, 0.0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Mj,Ab) * L2(Ij,Ab) --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&tIjAb, &LIjAb, &GMI, 0, 0, 1.0, 1.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(mj,ab) * L2(ij,ab) --> G(m,i) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&tijab, &Lijab, &Gmi, 0, 0, 1.0, 0.0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(mJ,aB) * L2(iJ,aB) --> G(m,i) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&tiJaB, &LiJaB, &Gmi, 0, 0, 1.0, 1.0); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 1, 1, "Gae"); /* T2(IJ,AB) * L2(IJ,EB) --> G(A,E) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&LIJAB, &tIJAB, &GAE, 2, 2, -1.0, 0.0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Ij,Ab) * L2(Ij,Eb) --> G(A,E) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&LIjAb, &tIjAb, &GAE, 2, 2, -1.0, 1.0); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(ij,ab) * L2(ij,eb) --> G(a,e) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&Lijab, &tijab, &Gae, 2, 2, -1.0, 0.0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(iJ,aB) * L2(iJ,eB) --> G(a,e) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&LiJaB, &tiJaB, &Gae, 2, 2, -1.0, 1.0); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 2, 2, "Gmi"); /* T2(MJ,AB) * L2(IJ,AB) --> G(M,I) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&tIJAB, &LIJAB, &GMI, 0, 0, 1, 0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(Mj,Ab) * L2(Ij,Ab) --> G(M,I) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&tIjAb, &LIjAb, &GMI, 0, 0, 1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(mj,ab) * L2(ij,ab) --> G(m,i) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 10, 17, 12, 17, 0, "tijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&tijab, &Lijab, &Gmi, 0, 0, 1, 0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(mJ,aB) * L2(iJ,aB) --> G(m,i) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&tiJaB, &LiJaB, &Gmi, 0, 0, 1, 1); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 3, 3, "Gae"); /* T2(JI,BA) * L2(JI,BE) --> G(A,E) */ dpd_buf4_init(&tIJAB, CC_TAMPS, 0, 2, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&LIJAB, &tIJAB, &GAE, 3, 3, -1, 0); dpd_buf4_close(&tIJAB); dpd_buf4_close(&LIJAB); /* T2(jI,bA) * L2(jI,bE) --> G(A,E) */ dpd_buf4_init(&tIjAb, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&LIjAb, &tIjAb, &GAE, 3, 3, -1, 1); dpd_buf4_close(&tIjAb); dpd_buf4_close(&LIjAb); /* T2(ji,ba) * L2(ji,be) --> G(a,e) */ dpd_buf4_init(&tijab, CC_TAMPS, 0, 12, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&Lijab, &tijab, &Gae, 3, 3, -1, 0); dpd_buf4_close(&tijab); dpd_buf4_close(&Lijab); /* T2(Ji,Ba) * L2(Ji,Be) --> G(a,e) */ dpd_buf4_init(&tiJaB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&LiJaB, &tiJaB, &Gae, 3, 3, -1, 1); dpd_buf4_close(&tiJaB); dpd_buf4_close(&LiJaB); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } return; } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/get_moinfo.cc�����������������������������������������������������������������0000644�0001015�0000765�00000021547�10757640026�015743� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996. ** Modified by TDC, March 1999. ** Modified for UHF references by TDC, June 2002. */ void get_moinfo(void) { int i,j, h, p, q, errcod, nactive, nirreps, sym; double ***C, ***Ca, ***Cb; psio_address next; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.nao = chkpt_rd_nao(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.sopi = chkpt_rd_sopi(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.phase = chkpt_rd_phase_check(); chkpt_close(); sym = 0; for (i=0;i<moinfo.nirreps;++i) for (j=0;j<moinfo.openpi[i];++j) sym = sym ^ i; moinfo.sym = sym; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(moinfo.nirreps); moinfo.fruocc = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/ moinfo.occpi = init_int_array(moinfo.nirreps); moinfo.virtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*moinfo.nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } else if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(moinfo.nirreps); moinfo.boccpi = init_int_array(moinfo.nirreps); moinfo.avirtpi = init_int_array(moinfo.nirreps); moinfo.bvirtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } /* Build orbsym array (for AO-basis BT2) */ moinfo.sosym = init_int_array(moinfo.nso); for(h=0,q=0; h < moinfo.nirreps; h++) for(p=0; p < moinfo.sopi[h]; p++) moinfo.sosym[q++] = h; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ C = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { if(moinfo.sopi[h] && moinfo.virtpi[h]) { C[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); psio_read(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) C[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); } } moinfo.C = C; } else if(params.ref == 2) { /** UHF **/ Ca = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { if(moinfo.sopi[h] && moinfo.avirtpi[h]) { Ca[h] = block_matrix(moinfo.sopi[h],moinfo.avirtpi[h]); psio_read(CC_INFO, "UHF Active Alpha Virtual Orbs", (char *) Ca[h][0], moinfo.sopi[h]*moinfo.avirtpi[h]*sizeof(double), next, &next); } } moinfo.Ca = Ca; Cb = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { if(moinfo.sopi[h] && moinfo.bvirtpi[h]) { Cb[h] = block_matrix(moinfo.sopi[h],moinfo.bvirtpi[h]); psio_read(CC_INFO, "UHF Active Beta Virtual Orbs", (char *) Cb[h][0], moinfo.sopi[h]*moinfo.bvirtpi[h]*sizeof(double), next, &next); } } moinfo.Cb = Cb; } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < moinfo.nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < moinfo.nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; if(params.ref == 0) { moinfo.nvirt = 0; for(h=0; h < moinfo.nirreps; h++) moinfo.nvirt += moinfo.virtpi[h]; } psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tReference (chkpt) = %d\n",params.ref); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (CC_INFO) = %20.15f\n",moinfo.eref); fflush(outfile); } /* Frees memory allocated in get_moinfo() and dumps some info. */ void cleanup(void) { int i, h; psio_write_entry(CC_INFO, "Lambda Pseudoenergy", (char *) &(moinfo.lcc), sizeof(double)); if(params.ref == 0 || params.ref == 1) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.virtpi[h]) free_block(moinfo.C[h]); free(moinfo.C); } else if(params.ref == 2) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.avirtpi[h]) free_block(moinfo.Ca[h]); free(moinfo.Ca); for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.bvirtpi[h]) free_block(moinfo.Cb[h]); free(moinfo.Cb); } free(moinfo.sopi); free(moinfo.sosym); free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); } else { free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.occpi); free(moinfo.virtpi); } } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/get_params.cc�����������������������������������������������������������������0000644�0001015�0000765�00000046761�10757640026�015744� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include <libqt/qt.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void get_params(void) { int errcod, iconv,i,j,k,l,prop_sym,prop_root, excited_method=0; int *states_per_irrep, prop_all, lambda_and_Ls = 0; char lbl[32]; char *junk; /* check WFN keyword in input */ errcod = ip_string("WFN", &(params.wfn), 0); excited_method = cc_excited(params.wfn); if(!strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"EOM_CC2")) { psio_read_entry(CC_INFO, "CC2 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCC2 energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CC2 energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } else if(!strcmp(params.wfn,"CCSD") || !strcmp(params.wfn,"EOM_CCSD")) { psio_read_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCCSD energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CCSD energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } else if(!strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3")) { psio_read_entry(CC_INFO, "CC3 Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile, "\tCC3 energy (CC_INFO) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CC3 energy (CC_INFO) = %20.15f\n", moinfo.eref+moinfo.ecc); } /* read in the easy-to-understand parameters */ params.convergence = 1e-7; errcod = ip_data("CONVERGENCE","%d",&(iconv),0); if(errcod == IPE_OK) params.convergence = 1.0*pow(10.0,(double) -iconv); params.restart = 1; errcod = ip_boolean("RESTART", &(params.restart),0); if(!moinfo.phase) params.restart = 0; fndcor(&(params.memory),infile,outfile); params.print = 0; errcod = ip_data("PRINT", "%d", &(params.print),0); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.sekino = 0; if(ip_exist("SEKINO",0)) { errcod = ip_boolean("SEKINO", ¶ms.sekino, 0); if(errcod != IPE_OK) params.sekino = 0; } params.diis = 1; errcod = ip_boolean("DIIS", ¶ms.diis, 0); params.aobasis = 0; errcod = ip_boolean("AO_BASIS", &(params.aobasis),0); params.aobasis = 0; /* AO basis code not yet working for lambda */ if(ip_exist("ABCD",0)) { errcod = ip_string("ABCD", &(params.abcd), 0); if(strcmp(params.abcd,"NEW") && strcmp(params.abcd,"OLD")) { fprintf(outfile, "Invalid ABCD algorithm: %s\n", params.abcd); exit(PSI_RETURN_FAILURE); } } else params.abcd = strdup("NEW"); params.num_amps = 10; if(ip_exist("NUM_AMPS",0)) { errcod = ip_data("NUM_AMPS", "%d", &(params.num_amps), 0); } /* Determine DERTYPE */ params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(errcod != IPE_OK) { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; /* linear response */ else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } else { /* DERTYPE is absent, assume 1 if jobtype=opt; 0 if jobtype=oeprop */ ip_string("JOBTYPE", &(junk),0); if(!strcmp(junk,"OEPROP")) params.dertype = 0; else if(!strcmp(junk,"OPT")) params.dertype = 1; else { printf("Don't know what to do with DERTYPE missing and jobtype: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* begin local parameters */ params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "Invalid local correlation method: %s\n", local.method); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.weakp = (char *) malloc(4 * sizeof(char)); sprintf(local.weakp, "%s", "NONE"); } if(params.dertype == 3) local.filter_singles = 0; else local.filter_singles = 1; ip_boolean("LOCAL_FILTER_SINGLES", &(local.filter_singles), 0); local.cphf_cutoff = 0.10; ip_data("LOCAL_CPHF_CUTOFF", "%lf", &(local.cphf_cutoff), 0); local.freeze_core = NULL; ip_string("FREEZE_CORE", &local.freeze_core, 0); if(local.freeze_core == NULL) local.freeze_core = strdup("FALSE"); if(ip_exist("LOCAL_PAIRDEF",0)){ errcod = ip_string("LOCAL_PAIRDEF", &(local.pairdef), 0); if(strcmp(local.pairdef,"BP") && strcmp(local.pairdef,"RESPONSE")) { fprintf(outfile, "Invalid keyword for strong/weak pair definition: %s\n", local.pairdef); exit(PSI_RETURN_FAILURE); } } else if(params.local && params.dertype == 3) local.pairdef = strdup("RESPONSE"); else if(params.local) local.pairdef = strdup("BP"); /* Now setup the structure which determines what will be solved */ /* if --zeta, use Xi and solve for Zeta */ /* if (DERTYPE == FIRST) determine ground vs. excited from wfn. if ground, do only lambda. if excited, compute only one L chosen as described below. */ /* if (DERTYPE == RESPONSE), determine ground vs. excited from wfn. Compute lambda. if excited, also do L(s) chosen as described below */ /* if (DERTYPE == NONE) determine ground vs. excited from wfn. Compute lambda. if excited, also do L(s) chosen as described below */ /* To determine which L(s) to compute for multiple L(s): Check PROP_ALL in input - If (PROP_ALL == true), compute L for all excited states. - If false, check PROP_SYM for irrep desired, and PROP_ROOT for root desired, as in cceom. */ /* To determine which L(s) to compute for single L(s) - Check PROP_SYM for irrep desired, and PROP_ROOT for root desired, as in cceom. */ /* setup property variables for excited states */ if (cc_excited(params.wfn)) { chkpt_init(PSIO_OPEN_OLD); if (chkpt_rd_override_occ()) { states_per_irrep = chkpt_rd_statespi(); } else { ip_count("STATES_PER_IRREP", &i, 0); states_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int)); for (i=0;i<moinfo.nirreps;++i) errcod = ip_data("STATES_PER_IRREP","%d",&(states_per_irrep[i]),1,i); } chkpt_close(); prop_all = 0; if (ip_exist("PROP_ALL",0)) ip_boolean("PROP_ALL",&prop_all,0); /* command-line overrides this keyword (at least for now) */ if (params.all) prop_all = 1; if (ip_exist("PROP_SYM",0)) { /* read symmetry of state for properties */ ip_data("PROP_SYM","%d",&(prop_sym),0); prop_sym -= 1; prop_sym = moinfo.sym^prop_sym; } else { /* just use last irrep of states requested for symmetry of states */ for (i=0;i<moinfo.nirreps;++i) { if (states_per_irrep[i] > 0) prop_sym = i^moinfo.sym; } } if (ip_exist("PROP_ROOT",0)) { /* read prop_root */ ip_data("PROP_ROOT","%d",&(prop_root),0); prop_root -= 1; } else { /* just use highest root, if you need only one of them */ prop_root = states_per_irrep[prop_sym^moinfo.sym]; prop_root -= 1; } } if (params.zeta) { /* only use Xi to solve for Zeta */ params.nstates = 1; pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); psio_read_entry(CC_INFO, "XI Irrep", (char *) &i,sizeof(int)); fprintf(outfile,"\tIrrep of Zeta (CC_INFO) = %d\n", i); pL_params[0].irrep = prop_sym = i; /* is this always A1? I forget */ pL_params[0].root = prop_root = 0; pL_params[0].ground = 0; pL_params[0].cceom_energy = 0.0; pL_params[0].R0 = 0.0; /* <Zeta0|R0> = 0, since zeta_0 = 0 */ sprintf(pL_params[0].L1A_lbl,"ZIA"); sprintf(pL_params[0].L1B_lbl,"Zia"); sprintf(pL_params[0].L2AA_lbl,"ZIJAB"); sprintf(pL_params[0].L2BB_lbl,"Zijab"); sprintf(pL_params[0].L2AB_lbl,"ZIjAb"); sprintf(pL_params[0].L2RHF_lbl,"2ZIjAb - ZIjbA"); } else if (params.dertype == 1) { /* analytic gradient, ignore prop_all */ if (!cc_excited(params.wfn)) { /* do only lambda for ground state */ params.nstates = 1; pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); pL_params[0].irrep = 0; pL_params[0].root = -1; pL_params[0].ground = 1; pL_params[0].R0 = 1.0; pL_params[0].cceom_energy = 0.0; sprintf(pL_params[0].L1A_lbl,"LIA %d %d",0, -1); sprintf(pL_params[0].L1B_lbl,"Lia %d %d",0, -1); sprintf(pL_params[0].L2AA_lbl,"LIJAB %d %d",0, -1); sprintf(pL_params[0].L2BB_lbl,"Lijab %d %d",0, -1); sprintf(pL_params[0].L2AB_lbl,"LIjAb %d %d",0, -1); sprintf(pL_params[0].L2RHF_lbl,"2LIjAb - LIjbA %d %d",0, -1); } else { /* do only one L for excited state */ params.nstates = 1; pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); pL_params[0].irrep = prop_sym; pL_params[0].root = prop_root; pL_params[0].ground = 0; if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[0].R0),sizeof(double)); } sprintf(pL_params[0].L1A_lbl,"LIA %d %d",prop_sym, prop_root); sprintf(pL_params[0].L1B_lbl,"Lia %d %d",prop_sym, prop_root); sprintf(pL_params[0].L2AA_lbl,"LIJAB %d %d",prop_sym, prop_root); sprintf(pL_params[0].L2BB_lbl,"Lijab %d %d",prop_sym, prop_root); sprintf(pL_params[0].L2AB_lbl,"LIjAb %d %d",prop_sym, prop_root); sprintf(pL_params[0].L2RHF_lbl,"2LIjAb - LIjbA %d %d",prop_sym, prop_root); } } else if (params.dertype == 3) { /* response calculation */ if (!cc_excited(params.wfn)) { /* ground state */ params.nstates = 1; pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); pL_params[0].irrep = 0; pL_params[0].root = -1; pL_params[0].ground = 1; pL_params[0].R0 = 1.0; pL_params[0].cceom_energy = 0.0; sprintf(pL_params[0].L1A_lbl,"LIA %d %d",0, -1); sprintf(pL_params[0].L1B_lbl,"Lia %d %d",0, -1); sprintf(pL_params[0].L2AA_lbl,"LIJAB %d %d",0, -1); sprintf(pL_params[0].L2BB_lbl,"Lijab %d %d",0, -1); sprintf(pL_params[0].L2AB_lbl,"LIjAb %d %d",0, -1); sprintf(pL_params[0].L2RHF_lbl,"2LIjAb - LIjbA %d %d",0, -1); } else { /* excited state */ lambda_and_Ls = 1; /* code is below */ } } else if (params.dertype == 0) { if (!cc_excited(params.wfn)) { /* ground state */ params.nstates = 1; pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); pL_params[0].irrep = 0; pL_params[0].root = -1; pL_params[0].ground = 1; pL_params[0].R0 = 1.0; pL_params[0].cceom_energy = 0.0; sprintf(pL_params[0].L1A_lbl,"LIA %d %d",0, -1); sprintf(pL_params[0].L1B_lbl,"Lia %d %d",0, -1); sprintf(pL_params[0].L2AA_lbl,"LIJAB %d %d",0, -1); sprintf(pL_params[0].L2BB_lbl,"Lijab %d %d",0, -1); sprintf(pL_params[0].L2AB_lbl,"LIjAb %d %d",0, -1); sprintf(pL_params[0].L2RHF_lbl,"2LIjAb - LIjbA %d %d",0, -1); } else { /* excited state */ lambda_and_Ls = 1; /* code is below */ } } /* do lambda for ground state AND do L(s) for excited states */ if (lambda_and_Ls) { /* determine number of states to converge */ params.nstates = 1; /* for ground state */ if (prop_all) { for (i=0; i<moinfo.nirreps; ++i) params.nstates += states_per_irrep[i]; /* do all L(s) */ } else { params.nstates += 1; /* do only one L */ } pL_params = (struct L_Params *) malloc(params.nstates * sizeof(struct L_Params)); /* ground state */ pL_params[0].irrep = 0; pL_params[0].root = -1; pL_params[0].ground = 1; pL_params[0].R0 = 1.0; pL_params[0].cceom_energy = 0.0; sprintf(pL_params[0].L1A_lbl,"LIA %d %d",0, -1); sprintf(pL_params[0].L1B_lbl,"Lia %d %d",0, -1); sprintf(pL_params[0].L2AA_lbl,"LIJAB %d %d",0, -1); sprintf(pL_params[0].L2BB_lbl,"Lijab %d %d",0, -1); sprintf(pL_params[0].L2AB_lbl,"LIjAb %d %d",0, -1); sprintf(pL_params[0].L2RHF_lbl,"2LIjAb - LIjbA %d %d",0, -1); if (prop_all) { /* do all L(s) */ k=1; for (i=0; i<moinfo.nirreps; ++i) { /* look over irrep of L(s) */ for (j=0; j < states_per_irrep[i^moinfo.sym]; ++j) { pL_params[k].irrep = i; pL_params[k].root = j; pL_params[k].ground = 0; if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d", i, j); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[k].R0),sizeof(double)); } sprintf(pL_params[k].L1A_lbl,"LIA %d %d",i, j); sprintf(pL_params[k].L1B_lbl,"Lia %d %d",i, j); sprintf(pL_params[k].L2AA_lbl,"LIJAB %d %d",i, j); sprintf(pL_params[k].L2BB_lbl,"Lijab %d %d",i, j); sprintf(pL_params[k].L2AB_lbl,"LIjAb %d %d",i, j); sprintf(pL_params[k].L2RHF_lbl,"2LIjAb - LIjbA %d %d",i, j); k++; } } } else { /* use prop_sym and prop_root determined above from input or inferrence */ pL_params[1].irrep = prop_sym; pL_params[1].root = prop_root; pL_params[1].ground = 0; if(!strcmp(params.wfn,"EOM_CC2")) { sprintf(lbl,"EOM CC2 Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC2 R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CCSD")) { sprintf(lbl,"EOM CCSD Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CCSD R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].R0),sizeof(double)); } else if(!strcmp(params.wfn,"EOM_CC3")) { sprintf(lbl,"EOM CC3 Energy for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].cceom_energy),sizeof(double)); sprintf(lbl,"EOM CC3 R0 for root %d %d", prop_sym, prop_root); psio_read_entry(CC_INFO, lbl, (char *) &(pL_params[1].R0),sizeof(double)); } sprintf(pL_params[1].L1A_lbl,"LIA %d %d", prop_sym, prop_root); sprintf(pL_params[1].L1B_lbl,"Lia %d %d", prop_sym, prop_root); sprintf(pL_params[1].L2AA_lbl,"LIJAB %d %d", prop_sym, prop_root); sprintf(pL_params[1].L2BB_lbl,"Lijab %d %d", prop_sym, prop_root); sprintf(pL_params[1].L2AB_lbl,"LIjAb %d %d", prop_sym, prop_root); sprintf(pL_params[1].L2RHF_lbl,"2LIjAb - LIjbA %d %d", prop_sym, prop_root); } } params.maxiter = 50 * params.nstates; errcod = ip_data("MAXITER","%d",&(params.maxiter),0); fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tMaxiter = %4d\n", params.maxiter); fprintf(outfile, "\tConvergence = %3.1e\n", params.convergence); fprintf(outfile, "\tRestart = %s\n", params.restart ? "Yes" : "No"); fprintf(outfile, "\tCache Level = %1d\n", params.cachelev); fprintf(outfile, "\tModel III = %s\n", params.sekino ? "Yes" : "No"); fprintf(outfile, "\tDIIS = %s\n", params.diis ? "Yes" : "No"); fprintf(outfile, "\tAO Basis = %s\n", params.aobasis ? "Yes" : "No"); fprintf(outfile, "\tABCD = %s\n", params.abcd); fprintf(outfile, "\tLocal CC = %s\n", params.local ? "Yes" : "No"); if(params.local) { fprintf(outfile, "\tLocal Cutoff = %3.1e\n", local.cutoff); fprintf(outfile, "\tLocal Method = %s\n", local.method); fprintf(outfile, "\tWeak pairs = %s\n", local.weakp); fprintf(outfile, "\tFilter singles = %s\n", local.filter_singles ? "Yes" : "No"); fprintf(outfile, "\tLocal pairs = %s\n", local.pairdef); fprintf(outfile, "\tLocal CPHF cutoff = %3.1e\n", local.cphf_cutoff); } fprintf(outfile,"\tParamaters for left-handed eigenvectors:\n"); fprintf(outfile,"\t Irr Root Ground-State? EOM energy R0\n"); for (i=0; i<params.nstates; ++i) { fprintf(outfile,"\t%3d %3d %5d %10s %18.10lf %14.10lf\n", i+1, pL_params[i].irrep, pL_params[i].root+1, (pL_params[i].ground ? "Yes":"No"), pL_params[i].cceom_energy, pL_params[i].R0); } for (i=0; i<params.nstates; ++i) { fprintf(outfile,"\tLabels for eigenvector %d:\n\t%s, %s, %s, %s, %s, %s\n", i+1,pL_params[i].L1A_lbl,pL_params[i].L1B_lbl,pL_params[i].L2AA_lbl,pL_params[i].L2BB_lbl, pL_params[i].L2AB_lbl, pL_params[i].L2RHF_lbl); } fflush(outfile); return; } }} // namespace psi::cclambda ���������������psi3/src/bin/cclambda/GL2.cc������������������������������������������������������������������������0000644�0001015�0000765�00000022333�10757640026�014173� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* GaeL2(): Computes Gae three-body contributions of HBAR matrix ** elements to the Lambda doubles equations. These are written in ** spin-orbitals as: ** ** L_ij^ab <-- <ij||ae> Gbe - <ij||be> Gae ** ** where Gae = -1/2 t_mn^ef L_mn^af ** ** TDC, July 2002 */ void GaeL2(int L_irr) { dpdbuf4 L2, newLijab, newLIJAB, newLIjAb, newL2; dpdbuf4 D, Z; dpdfile2 GAE, Gae, G; dpdbuf4 X1, X2; /* RHS += P(ab)<ij||ae>Gbe */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&G, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &G, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&Z, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&Z); dpd_file2_close(&G); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 1, 1, "Gae"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <ij||ab> (i>j,ab)"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&D, &GAE, &X1, 3, 1, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&GAE, &D, &X2, 1, 2, 1, 1.0, 0.0); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&D, &Gae, &X1, 3, 1, 0, 1.0, 0.0); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_contract244(&Gae, &D, &X2, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &Gae, &newLIjAb, 3, 1, 0, 1.0, 1.0); dpd_contract244(&GAE, &D, &newLIjAb, 1, 2, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&newLIjAb); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 3, 3, "Gae"); /** X(IJ,AB) = <IJ||AE> G(B,E) **/ dpd_buf4_init(&X1, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "X(IJ,AB)"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D <IJ||AB> (I>J,AB)"); dpd_contract424(&D, &GAE, &X1, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /** X(IJ,AB) --> X(IJ,BA) **/ dpd_buf4_sort(&X1, CC_TMP2, pqsr, 2, 5, "X(IJ,BA)"); /** X(IJ,AB) = X(IJ,AB) - X(IJ,BA) **/ dpd_buf4_init(&X2, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "X(IJ,BA)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); /** X(IJ,AB) --> New L(IJ,AB) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X1, &L2, 1); dpd_buf4_close(&X1); dpd_buf4_close(&L2); /** X(ij,ab) = <ij||ae> G(b,e) **/ dpd_buf4_init(&X1, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "X(ij,ab)"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D <ij||ab> (i>j,ab)"); dpd_contract424(&D, &Gae, &X1, 3, 1, 0, 1, 0); dpd_buf4_close(&D); /** X(ij,ab) --> X(ij,ba) **/ dpd_buf4_sort(&X1, CC_TMP2, pqsr, 12, 15, "X(ij,ba)"); /** X(ij,ab) = X(ij,ab) - X(ij,ba) **/ dpd_buf4_init(&X2, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "X(ij,ba)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); /** X(ij,ab) --> New L(ij,ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X1, &L2, 1); dpd_buf4_close(&X1); dpd_buf4_close(&L2); /** New L(Ij,Ab) = <Ij|Ae> G(b,e) + <Ij|Eb> G(A,E) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &Gae, &L2, 3, 1, 0, 1, 1); dpd_contract244(&GAE, &D, &L2, 1, 2, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&L2); dpd_file2_close(&GAE); dpd_file2_close(&Gae); } } /* GmiL2(): Computes Gmi three-body contributions of HBAR matrix ** elements to the Lambda doubles equations. These are written in ** spin-orbitals as: ** ** L_ij^ab <-- - <im||ab> Gmj + <jm||ab> Gmi ** ** where Gmi = -1/2 t_mn^ef L_in^ef ** ** TDC, July 2002 */ void GmiL2(int L_irr) { dpdbuf4 L2, newLijab, newLIJAB, newLIjAb, newL2; dpdbuf4 D, Z; dpdfile2 GMI, Gmi, G; dpdbuf4 X1, X2; /* RHS -= P(ij) * <im||ab> * Gmj */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&G, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&G, &D, &Z, 0, 0, 0, -1, 0); dpd_buf4_close(&D); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&Z, &newL2, 1); dpd_buf4_close(&newL2); dpd_buf4_close(&Z); dpd_file2_close(&G); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 0, 0, "Gmi"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)"); dpd_buf4_init(&X1, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&D, &GMI, &X1, 1, 0, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&GMI, &D, &X2, 0, 0, 0, -1.0, 0.0); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X2, &newLIJAB, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&X1, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(0,7) 1"); dpd_contract424(&D, &Gmi, &X1, 1, 0, 1, -1.0, 0.0); dpd_buf4_init(&X2, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(0,7) 2"); dpd_contract244(&Gmi, &D, &X2, 0, 0, 0, -1.0, 0.0); dpd_buf4_close(&D); dpd_buf4_axpy(&X1, &X2, 1.0); dpd_buf4_close(&X1); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X2, &newLijab, 1.0); dpd_buf4_close(&X2); dpd_buf4_close(&newLijab); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract424(&D, &Gmi, &newLIjAb, 1, 0, 1, -1.0, 1.0); dpd_contract244(&GMI, &D, &newLIjAb, 0, 0, 0, -1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&newLIjAb); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 2, 2, "Gmi"); /** X(IJ,AB) = - G(M,I) <MJ||AB> **/ dpd_buf4_init(&X1, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(IJ,AB) C"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)"); dpd_contract244(&GMI, &D, &X1, 0, 0, 0, -1, 0); dpd_buf4_close(&D); /** X(IJ,AB) --> X(JI,AB) **/ dpd_buf4_sort(&X1, CC_TMP2, qprs, 0, 7, "X(JI,AB)"); /** X(IJ,AB) = X(IJ,AB) - X(JI,AB) **/ dpd_buf4_init(&X2, CC_TMP2, L_irr, 0, 7, 0, 7, 0, "X(JI,AB)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); /** X(IJ,AB) --> New L(IJ,AB) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&X1); /** X(ij,ab) = - G(m,i) <mj||ab> **/ dpd_buf4_init(&X1, CC_TMP2, L_irr, 10, 17, 10, 17, 0, "X(ij,ab) C"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)"); dpd_contract244(&Gmi, &D, &X1, 0, 0, 0, -1, 0); dpd_buf4_close(&D); /** X(ij,ab) --> X(ji,ab) **/ dpd_buf4_sort(&X1, CC_TMP2, qprs, 10, 17, "X(ji,ab)"); /** X(ij,ab) = X(ij,ab) - X(ji,ab) **/ dpd_buf4_init(&X2, CC_TMP2, L_irr, 10, 17, 10, 17, 0, "X(ji,ab)"); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); /** X(ij,ab) --> New L(ij,ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&X1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&X1); /* New L(Ij,Ab) <-- - <Im|Ab> G(m,j) - G(M,I) <Mj|Ab> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract424(&D, &Gmi, &L2, 1, 0, 1, -1, 1); dpd_contract244(&GMI, &D, &L2, 0, 0, 0, -1, 1); dpd_buf4_close(&D); dpd_buf4_close(&L2); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); } } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/globals.h���������������������������������������������������������������������0000644�0001015�0000765�00000001065�10754663017�015075� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace cclambda { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif /* #define EOM_DEBUG (1) */ extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct L_Params *pL_params; EXTERN struct Local local; void check_sum(char *lbl, int L_irr); }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/halftrans.cc������������������������������������������������������������������0000644�0001015�0000765�00000006565�10754663017�015604� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <libqt/qt.h> namespace psi { namespace cclambda { /* halftrans(): Routine to transform the last two indices of a dpdbuf4 ** between the MO and SO bases. ** ** dpdbuf4 *Buf1: Pointer to the MO dpdbuf4 (already initialized) ** dpdbuf4 *Buf2: Pointer to the SO dpdbuf4 (already initialized). ** double ***C: Pointer to the transformation matrix (symmetry blocked, SO x MO) ** int nirreps: The number of irreps in the point group ** int **mo_row: A lookup array. For a dpdbuf4 with MO indices (ij,ab), ** given the irrep h of ij (= ab) and the irrep of orbital a, the ** array returns the offset of the start of the set of b molecular ** orbitals. ** int **so_row: Like mo_row, but for a dpdbuf4 with the last two ** indices in the SO basis. ** int *mospi: The number of MO's per irrep. ** int *sospi: The number of SO's per irrep. ** int type: 0 = MO --> SO; 1 = SO --> MO ** double alpha: multiplicative factor for the transformation ** double beta: multiplicative factor for the target */ void halftrans(dpdbuf4 *Buf1, int dpdnum1, dpdbuf4 *Buf2, int dpdnum2, double ***C, int nirreps, int **mo_row, int **so_row, int *mospi, int *sospi, int type, double alpha, double beta) { int h, Gc, Gd, cd, pq, ij; double **X; for(h=0; h < nirreps; h++) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_init(Buf1, h); dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_init(Buf2, h); if(type==0) { /* alpha * Buf1 --> beta * Buf2 */ if(alpha != 0.0) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_rd(Buf1, h); } if(beta != 0.0) { dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_rd(Buf2, h); } } if(type==1) { /* alpha * Buf2 --> beta * Buf1 */ if(alpha != 0.0) { dpd_set_default(dpdnum2); dpd_buf4_mat_irrep_rd(Buf2, h); } if(beta != 0.0) { dpd_set_default(dpdnum1); dpd_buf4_mat_irrep_rd(Buf1, h); } } for(Gc=0; Gc < nirreps; Gc++) { Gd = h^Gc; cd = mo_row[h][Gc]; pq = so_row[h][Gc]; if(mospi[Gc] && mospi[Gd] && sospi[Gc] && sospi[Gd]) { if(type == 0) { X = block_matrix(mospi[Gc],sospi[Gd]); for(ij=0; ij < Buf1->params->rowtot[h]; ij++) { C_DGEMM('n','t', mospi[Gc], sospi[Gd], mospi[Gd], 1.0, &(Buf1->matrix[h][ij][cd]), mospi[Gd], &(C[Gd][0][0]), mospi[Gd], 0.0, &(X[0][0]), sospi[Gd]); C_DGEMM('n','n', sospi[Gc], sospi[Gd], mospi[Gc], alpha, &(C[Gc][0][0]), mospi[Gc], &(X[0][0]), sospi[Gd], beta, &(Buf2->matrix[h][ij][pq]), sospi[Gd]); } } else { X = block_matrix(sospi[Gc],mospi[Gd]); for(ij=0; ij < Buf1->params->rowtot[h]; ij++) { C_DGEMM('n','n', sospi[Gc], mospi[Gd], sospi[Gd], 1.0, &(Buf2->matrix[h][ij][pq]), sospi[Gd], &(C[Gd][0][0]), mospi[Gd], 0.0, &(X[0][0]), mospi[Gd]); C_DGEMM('t','n', mospi[Gc], mospi[Gd], sospi[Gc], alpha, &(C[Gc][0][0]), mospi[Gc], &(X[0][0]), mospi[Gd], beta, &(Buf1->matrix[h][ij][cd]), mospi[Gd]); } } free_block(X); } } dpd_set_default(dpdnum1); if(type==1) dpd_buf4_mat_irrep_wrt(Buf1, h); dpd_buf4_mat_irrep_close(Buf1, h); dpd_set_default(dpdnum2); if(type==0) dpd_buf4_mat_irrep_wrt(Buf2, h); dpd_buf4_mat_irrep_close(Buf2, h); } } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/hbar_extra.cc�����������������������������������������������������������������0000644�0001015�0000765�00000001764�10757640026�015733� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void hbar_extra(void) { dpdbuf4 W1, W2, W; if(params.ref == 0) { /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W1, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W1, CC_HBAR, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W1); dpd_buf4_init(&W1, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_close(&W1); /* dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); */ /* dpd_buf4_scmcopy(&W, CC_HBAR, "WAmEf 2(Am,Ef) - (Am,fE)", 2); */ /* dpd_buf4_sort_axpy(&W, CC_HBAR, pqsr, 11, 5, "WAmEf 2(Am,Ef) - (Am,fE)", -1); */ /* dpd_buf4_close(&W); */ } } }} // namespace psi::cclambda ������������psi3/src/bin/cclambda/init_amps.cc������������������������������������������������������������������0000644�0001015�0000765�00000032724�10757640026�015577� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void init_amps(struct L_Params L_params) { double norm; dpdfile2 T1, R1, LIA, Lia, dIA, dia, XIA, Xia; dpdbuf4 T2, R2, LIJAB, Lijab, LIjAb, dIJAB, dijab, dIjAb, XIJAB, Xijab, XIjAb; char R1A_lbl[32], R1B_lbl[32], R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; int L_irr; L_irr = L_params.irrep; /* if solving zeta equations, initial guess is Xi * denom */ if (params.zeta) { if (params.ref == 0) { /* RHF */ dpd_file2_init(&XIA, EOM_XI, L_irr, 0, 1, "XIA"); dpd_file2_copy(&XIA, CC_LAMBDA, "LIA"); dpd_file2_close(&XIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &LIA); dpd_file2_close(&dIA); dpd_file2_close(&LIA); dpd_buf4_init(&XIjAb, EOM_XI, L_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_copy(&XIjAb, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&XIjAb); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &LIjAb); dpd_buf4_close(&dIjAb); dpd_buf4_close(&LIjAb); } else if (params.ref == 1) { /* ROHF */ dpd_file2_init(&XIA, EOM_XI, L_irr, 0, 1, "XIA"); dpd_file2_copy(&XIA, CC_LAMBDA, "LIA"); dpd_file2_close(&XIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &LIA); dpd_file2_close(&dIA); dpd_file2_close(&LIA); dpd_file2_init(&Xia, EOM_XI, L_irr, 0, 1, "Xia"); dpd_file2_copy(&Xia, CC_LAMBDA, "Lia"); dpd_file2_close(&Xia); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia"); dpd_file2_dirprd(&dia, &Lia); dpd_file2_close(&dia); dpd_file2_close(&Lia); dpd_buf4_init(&XIJAB, EOM_XI, L_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_copy(&XIJAB, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&XIJAB); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&dIJAB, CC_DENOM, L_irr, 2, 7, 2, 7, 0, "dIJAB"); dpd_buf4_dirprd(&dIJAB, &LIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Xijab, EOM_XI, L_irr, 2, 7, 2, 7, 0, "Xijab"); dpd_buf4_copy(&Xijab, CC_LAMBDA, "Lijab"); dpd_buf4_close(&Xijab); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&dijab, CC_DENOM, L_irr, 2, 7, 2, 7, 0, "dijab"); dpd_buf4_dirprd(&dijab, &Lijab); dpd_buf4_close(&dijab); dpd_buf4_close(&Lijab); dpd_buf4_init(&XIjAb, EOM_XI, L_irr, 0, 5, 0, 5, 0, "XIjAb"); dpd_buf4_copy(&XIjAb, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&XIjAb); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &LIjAb); dpd_buf4_close(&dIjAb); dpd_buf4_close(&LIjAb); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&XIA, EOM_XI, L_irr, 0, 1, "XIA"); dpd_file2_copy(&XIA, CC_LAMBDA, "LIA"); dpd_file2_close(&XIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &LIA); dpd_file2_close(&dIA); dpd_file2_close(&LIA); dpd_file2_init(&Xia, EOM_XI, L_irr, 2, 3, "Xia"); dpd_file2_copy(&Xia, CC_LAMBDA, "Lia"); dpd_file2_close(&Xia); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia"); dpd_file2_dirprd(&dia, &Lia); dpd_file2_close(&dia); dpd_file2_close(&Lia); dpd_buf4_init(&XIJAB, EOM_XI, L_irr, 2, 7, 2, 7, 0, "XIJAB"); dpd_buf4_copy(&XIJAB, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&XIJAB); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&dIJAB, CC_DENOM, L_irr, 2, 7, 2, 7, 0, "dIJAB"); dpd_buf4_dirprd(&dIJAB, &LIJAB); dpd_buf4_close(&dIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Xijab, EOM_XI, L_irr, 12, 17, 12, 17, 0, "Xijab"); dpd_buf4_copy(&Xijab, CC_LAMBDA, "Lijab"); dpd_buf4_close(&Xijab); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&dijab, CC_DENOM, L_irr, 12, 17, 12, 17, 0, "dijab"); dpd_buf4_dirprd(&dijab, &Lijab); dpd_buf4_close(&dijab); dpd_buf4_close(&Lijab); dpd_buf4_init(&XIjAb, EOM_XI, L_irr, 22, 28, 22, 28, 0, "XIjAb"); dpd_buf4_copy(&XIjAb, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&XIjAb); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&dIjAb, CC_DENOM, L_irr, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&dIjAb, &LIjAb); dpd_buf4_close(&dIjAb); dpd_buf4_close(&LIjAb); } return; } /* ground state guess L <= T */ /* excited state guess L <= R0 * T + R */ if (L_params.ground || L_params.irrep == 0) { if(params.ref == 0) { /** RHF **/ if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIA")) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_LAMBDA, "LIA"); dpd_file2_copy(&T1, CC_LAMBDA, "Lia"); dpd_file2_close(&T1); } else fprintf(outfile, "\tUsing old L1 amplitudes.\n"); if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIjAb")) { dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&T2); } else fprintf(outfile, "\tUsing old L2 amplitudes.\n"); dpd_buf4_init(&T2, CC_LAMBDA, 0, 2, 7, 0, 5, 1, "LIjAb"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIJAB"); dpd_buf4_copy(&T2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&T2); } else if(params.ref == 1) { /** ROHF **/ if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIA") || !psio_tocscan(CC_LAMBDA, "Lia")) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_LAMBDA, "LIA"); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_copy(&T1, CC_LAMBDA, "Lia"); dpd_file2_close(&T1); } else fprintf(outfile, "\tUsing old L1 amplitudes.\n"); if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIjAb") || !psio_tocscan(CC_LAMBDA, "LIJAB") || !psio_tocscan(CC_LAMBDA, "Lijab")) { dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dpd_buf4_copy(&T2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&T2); } else fprintf(outfile, "\tUsing old L2 amplitudes.\n"); } else if(params.ref == 2) { /** UHF **/ if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIA") || !psio_tocscan(CC_LAMBDA, "Lia")) { dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_copy(&T1, CC_LAMBDA, "LIA"); dpd_file2_close(&T1); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_copy(&T1, CC_LAMBDA, "Lia"); dpd_file2_close(&T1); } else fprintf(outfile, "\tUsing old L1 amplitudes.\n"); if(!params.restart || !psio_tocscan(CC_LAMBDA, "LIjAb") || !psio_tocscan(CC_LAMBDA, "LIJAB") || !psio_tocscan(CC_LAMBDA, "Lijab")) { dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dpd_buf4_copy(&T2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&T2); } else fprintf(outfile, "\tUsing old L2 amplitudes.\n"); } } if (!L_params.ground) { sprintf(R1A_lbl, "RIA %d %d", L_params.irrep, L_params.root); sprintf(R1B_lbl, "Ria %d %d", L_params.irrep, L_params.root); sprintf(R2AA_lbl, "RIJAB %d %d", L_params.irrep, L_params.root); sprintf(R2BB_lbl, "Rijab %d %d", L_params.irrep, L_params.root); sprintf(R2AB_lbl, "RIjAb %d %d", L_params.irrep, L_params.root); /* multiply by R0 and create nonsymmetric L files */ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); if (params.ref <= 1) { dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); } else { dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); } dpd_file2_scm(&LIA, L_params.R0); dpd_file2_scm(&Lia, L_params.R0); dpd_buf4_scm(&LIJAB, L_params.R0); dpd_buf4_scm(&Lijab, L_params.R0); dpd_buf4_scm(&LIjAb, L_params.R0); /* add R1 and R2 */ dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1A_lbl); dpd_file2_axpy(&R1, &LIA, 1.0, 0); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2AA_lbl); dpd_buf4_axpy(&R2, &LIJAB, 1.0); dpd_buf4_close(&R2); if (params.ref <= 1) { dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1B_lbl); dpd_file2_axpy(&R1, &Lia, 1.0, 0); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2BB_lbl); dpd_buf4_axpy(&R2, &Lijab, 1.0); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 0, 5, 0, 5, 0, R2AB_lbl); dpd_buf4_axpy(&R2, &LIjAb, 1.0); dpd_buf4_close(&R2); } else { dpd_file2_init(&R1, CC_RAMPS, L_irr, 2, 3, R1B_lbl); dpd_file2_axpy(&R1, &Lia, 1.0, 0); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 12, 17, 12, 17, 0, R2BB_lbl); dpd_buf4_axpy(&R2, &Lijab, 1.0); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 22, 28, 22, 28, 0, R2AB_lbl); dpd_buf4_axpy(&R2, &LIjAb, 1.0); dpd_buf4_close(&R2); } /* dot L and R together */ dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1A_lbl); norm = dpd_file2_dot(&LIA, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2AA_lbl); norm += dpd_buf4_dot(&LIJAB, &R2); dpd_buf4_close(&R2); if (params.ref <= 1) { dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1B_lbl); norm += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2BB_lbl); norm += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 0, 5, 0, 5, 0, R2AB_lbl); norm += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } else { dpd_file2_init(&R1, CC_RAMPS, L_irr, 2, 3, R1B_lbl); norm += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 12, 17, 12, 17, 0, R2BB_lbl); norm += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 22, 28, 22, 28, 0, R2AB_lbl); norm += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } fprintf(outfile,"\tInitial overlap of initial guess <L|R> = %15.10lf\n", norm); dpd_file2_scm(&LIA, 1.0/norm); dpd_file2_scm(&Lia, 1.0/norm); dpd_buf4_scm(&LIJAB, 1.0/norm); dpd_buf4_scm(&Lijab, 1.0/norm); dpd_buf4_scm(&LIjAb, 1.0/norm); dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1A_lbl); norm = dpd_file2_dot(&LIA, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2AA_lbl); norm += dpd_buf4_dot(&LIJAB, &R2); dpd_buf4_close(&R2); if (params.ref <= 1) { dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1B_lbl); norm += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2BB_lbl); norm += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 0, 5, 0, 5, 0, R2AB_lbl); norm += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } else { dpd_file2_init(&R1, CC_RAMPS, L_irr, 2, 3, R1B_lbl); norm += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 12, 17, 12, 17, 0, R2BB_lbl); norm += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 22, 28, 22, 28, 0, R2AB_lbl); norm += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } fprintf(outfile,"\tChecking overlap of initial guess <L|R> = %15.10lf\n", norm); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); } #ifdef EOM_DEBUG fprintf(outfile,"initial guess\n"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_print(&LIA,outfile); dpd_file2_close(&LIA); #endif } }} // namespace psi::cclambda ��������������������������������������������psi3/src/bin/cclambda/L1.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000055310�11027011315�014044� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void local_filter_T1(dpdfile2 *); void L1_build(struct L_Params L_params) { dpdfile2 newLIA, newLia, LIA, Lia; dpdfile2 dIA, dia, Fme, FME; dpdfile2 LFaet2, LFAEt2, LFmit2, LFMIt2; dpdfile2 GMI, Gmi, Gae, XIA, Xia; dpdfile2 GAE; dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ; dpdbuf4 WMBIJ, Wmbij, WMbIj, WmBiJ; dpdbuf4 LIJAB, Lijab, LIjAb, LiJaB, L2; dpdbuf4 WMNIE, Wmnie, WMnIe, WmNiE; dpdbuf4 WAMEF, Wamef, WAmEf, WaMeF, W; dpdbuf4 Z, D; dpdfile2 XLD; int Gim, Gi, Gm, Ga, Gam, nrows, ncols, A, a, am; int Gei, ei, e, i, Gef, Ge, Gf, E, I, af, fa, f; double *X; int L_irr; L_irr = L_params.irrep; /* ground state inhomogeneous term is Fme */ if (L_params.ground) { if(params.ref == 0) { dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&FME); } else if(params.ref == 1) { dpd_file2_init(&Fme,CC_OEI, 0, 0, 1, "Fme"); dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&Fme); dpd_file2_close(&FME); } else if(params.ref == 2) { dpd_file2_init(&Fme,CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME"); dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia"); dpd_file2_copy(&FME, CC_LAMBDA, "New LIA"); dpd_file2_close(&Fme); dpd_file2_close(&FME); /* If CCSD(T) gradient, add T3 contributions */ if(!strcmp(params.wfn, "CCSD_T")) { dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "SIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_axpy(&FME, &LIA, 1, 0); dpd_file2_close(&LIA); dpd_file2_close(&FME); dpd_file2_init(&FME,CC_OEI, 0, 2, 3, "Sia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_axpy(&FME, &LIA, 1, 0); dpd_file2_close(&LIA); dpd_file2_close(&FME); } } } /* excited state - no inhomogenous term, first term is -energy*L*/ else if (!params.zeta) { if (params.ref == 0 || params.ref == 1) { dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_axpy(&LIA, &newLIA, -1.0 * L_params.cceom_energy,0.0); dpd_file2_axpy(&Lia, &newLia, -1.0 * L_params.cceom_energy,0.0); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); dpd_file2_close(&Lia); dpd_file2_close(&newLia); } else if (params.ref == 2) { /* do nothing - TDC did not change to increments for the UHF case */ } } /* solving zeta equations; inhomogeneous term is Xi */ else { if (params.ref == 0) { dpd_file2_init(&XIA, EOM_XI, 0, 0, 1, "XIA"); dpd_file2_copy(&XIA, CC_LAMBDA, "New LIA"); dpd_file2_close(&XIA); } else if (params.ref == 1) { dpd_file2_init(&XIA, EOM_XI, 0, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, 0, 0, 1, "Xia"); dpd_file2_copy(&XIA, CC_LAMBDA, "New LIA"); dpd_file2_copy(&Xia, CC_LAMBDA, "New Lia"); dpd_file2_close(&XIA); dpd_file2_close(&Xia); } else if(params.ref == 2) { dpd_file2_init(&XIA, EOM_XI, 0, 0, 1, "XIA"); dpd_file2_init(&Xia, EOM_XI, 0, 2, 3, "Xia"); dpd_file2_copy(&XIA, CC_LAMBDA, "New LIA"); dpd_file2_copy(&Xia, CC_LAMBDA, "New Lia"); dpd_file2_close(&XIA); dpd_file2_close(&Xia); } } if(params.ref == 0 || params.ref == 1) { dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); } else if(params.ref == 2) { dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); } if(params.ref == 0) { /** RHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); /* L1 RHS += Lie*Fea */ dpd_file2_init(&LFAEt2, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&LIA,&LFAEt2,&newLIA, 0, 1, 1.0, 1.0); dpd_file2_close(&LFAEt2); /* L1 RHS += -Lma*Fim */ dpd_file2_init(&LFMIt2,CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&LFMIt2,&LIA,&newLIA, 0, 1, -1.0, 1.0); dpd_file2_close(&LFMIt2); /* L1 RHS += Lme*Wieam */ dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_contract422(&W, &LIA, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_file2_close(&LIA); } else if(params.ref == 1) { /** ROHF **/ /* L1 RHS += Lie*Fea */ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&LFAEt2, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_init(&LFaet2, CC_OEI, 0, 1, 1, "Fae"); dpd_contract222(&Lia,&LFaet2,&newLia, 0, 1, 1.0, 1.0); dpd_contract222(&LIA,&LFAEt2,&newLIA, 0, 1, 1.0, 1.0); dpd_file2_close(&LFaet2); dpd_file2_close(&LFAEt2); /* L1 RHS += -Lma*Fim */ dpd_file2_init(&LFMIt2,CC_OEI, 0, 0, 0, "FMI"); dpd_file2_init(&LFmit2,CC_OEI, 0, 0, 0, "Fmi"); dpd_contract222(&LFmit2,&Lia,&newLia, 0, 1, -1.0, 1.0); dpd_contract222(&LFMIt2,&LIA,&newLIA, 0, 1, -1.0, 1.0); dpd_file2_close(&LFmit2); dpd_file2_close(&LFMIt2); /* L1 RHS += Lme*Wieam */ dpd_buf4_init(&WMBEJ, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract422(&WMBEJ, &LIA, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&WMbEj, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract422(&WMbEj, &Lia, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&WMbEj); dpd_buf4_init(&Wmbej, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract422(&Wmbej, &Lia, &newLia, 0, 0, 1.0, 1.0); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WmBeJ, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract422(&WmBeJ, &LIA, &newLia, 0, 0, 1.0, 1.0); dpd_buf4_close(&WmBeJ); dpd_file2_close(&LIA); dpd_file2_close(&Lia); } else if(params.ref == 2) { /** UHF **/ /* L1 RHS += Lie*Fea */ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_init(&LFAEt2, CC_OEI, 0, 1, 1, "FAEt"); dpd_file2_init(&LFaet2, CC_OEI, 0, 3, 3, "Faet"); dpd_contract222(&Lia,&LFaet2,&newLia, 0, 1, 1, 1); dpd_contract222(&LIA,&LFAEt2,&newLIA, 0, 1, 1, 1); dpd_file2_close(&LFaet2); dpd_file2_close(&LFAEt2); /* L1 RHS += -Lma*Fim */ dpd_file2_init(&LFMIt2,CC_OEI, 0, 0, 0, "FMIt"); dpd_file2_init(&LFmit2,CC_OEI, 0, 2, 2, "Fmit"); dpd_contract222(&LFmit2,&Lia,&newLia, 0, 1, -1, 1); dpd_contract222(&LFMIt2,&LIA,&newLIA, 0, 1, -1, 1); dpd_file2_close(&LFmit2); dpd_file2_close(&LFMIt2); /* L1 RHS += Lme*Wieam */ dpd_buf4_init(&WMBEJ, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract422(&WMBEJ, &LIA, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&WMBEJ); dpd_buf4_init(&WMbEj, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract422(&WMbEj, &Lia, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&WMbEj); dpd_buf4_init(&Wmbej, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract422(&Wmbej, &Lia, &newLia, 0, 0, 1, 1); dpd_buf4_close(&Wmbej); dpd_buf4_init(&WmBeJ, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract422(&WmBeJ, &LIA, &newLia, 0, 0, 1, 1); dpd_buf4_close(&WmBeJ); dpd_file2_close(&LIA); dpd_file2_close(&Lia); } /* L1 RHS += 1/2 Limef*Wefam */ /* L(i,a) += [ 2 L(im,ef) - L(im,fe) ] * W(am,ef) */ /* Note: W(am,ef) is really Wabei (ei,ab) */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); /* dpd_contract442(&L2, &W, &newLIA, 0, 0, 1.0, 1.0); */ dpd_file2_mat_init(&newLIA); dpd_file2_mat_rd(&newLIA); for(Gam=0; Gam < moinfo.nirreps; Gam++) { Gef = Gam; /* W is totally symmetric */ Gim = Gef ^ L_irr; dpd_buf4_mat_irrep_init(&L2, Gim); dpd_buf4_mat_irrep_rd(&L2, Gim); dpd_buf4_mat_irrep_shift13(&L2, Gim); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Ga = Gi ^ L_irr; Gm = Ga ^ Gam; W.matrix[Gam] = dpd_block_matrix(moinfo.occpi[Gm],W.params->coltot[Gam]); nrows = moinfo.occpi[Gi]; ncols = moinfo.occpi[Gm] * W.params->coltot[Gam]; for(A=0; A < moinfo.virtpi[Ga]; A++) { a = moinfo.vir_off[Ga] + A; am = W.row_offset[Gam][a]; dpd_buf4_mat_irrep_rd_block(&W, Gam, am, moinfo.occpi[Gm]); if(nrows && ncols && moinfo.virtpi[Ga]) C_DGEMV('n',nrows,ncols,1,L2.shift.matrix[Gim][Gi][0],ncols,W.matrix[Gam][0],1, 1, &(newLIA.matrix[Gi][0][A]), moinfo.virtpi[Ga]); } dpd_free_block(W.matrix[Gam], moinfo.occpi[Gm], W.params->coltot[Gam]); } dpd_buf4_mat_irrep_close(&L2, Gim); } dpd_file2_mat_wrt(&newLIA); dpd_file2_mat_close(&newLIA); dpd_buf4_close(&L2); dpd_buf4_close(&W); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WEIAB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WEiAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Weiab"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "Lijab"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WeIaB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); } else if(params.ref == 2) { dpd_buf4_init(&W, CC_HBAR, 0, 21, 7, 21, 7, 0, "WEIAB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WEiAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 31, 17, 31, 17, 0, "Weiab"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WeIaB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); } /* L1 RHS += -1/2 Lmnae*Wiemn */ if(params.ref == 0) { dpd_buf4_init(&WMbIj, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_contract442(&WMbIj, &LIjAb, &newLIA, 0, 2, -1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&WMbIj); } else if(params.ref == 1) { dpd_buf4_init(&WMBIJ, CC_HBAR, 0, 10, 2, 10, 2, 0, "WMBIJ"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&WMBIJ, &LIJAB, &newLIA, 0, 2, -1.0, 1.0); dpd_buf4_close(&LIJAB); dpd_buf4_close(&WMBIJ); dpd_buf4_init(&WMbIj, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract442(&WMbIj, &LIjAb, &newLIA, 0, 2, -1.0, 1.0); dpd_buf4_close(&LIjAb); dpd_buf4_close(&WMbIj); dpd_buf4_init(&Wmbij, CC_HBAR, 0, 10, 2, 10, 2, 0, "Wmbij"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_contract442(&Wmbij, &Lijab, &newLia, 0, 2, -1.0, 1.0); dpd_buf4_close(&Lijab); dpd_buf4_close(&Wmbij); dpd_buf4_init(&WmBiJ, CC_HBAR, 0, 10, 0, 10, 0, 0, "WmBiJ"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_contract442(&WmBiJ, &LiJaB, &newLia, 0, 2, -1.0, 1.0); dpd_buf4_close(&LiJaB); dpd_buf4_close(&WmBiJ); } else if(params.ref == 2) { dpd_buf4_init(&WMBIJ, CC_HBAR, 0, 20, 2, 20, 2, 0, "WMBIJ"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract442(&WMBIJ, &LIJAB, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&LIJAB); dpd_buf4_close(&WMBIJ); dpd_buf4_init(&WMbIj, CC_HBAR, 0, 24, 22, 24, 22, 0, "WMbIj"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract442(&WMbIj, &LIjAb, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&LIjAb); dpd_buf4_close(&WMbIj); dpd_buf4_init(&Wmbij, CC_HBAR, 0, 30, 12, 30, 12, 0, "Wmbij"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract442(&Wmbij, &Lijab, &newLia, 0, 2, -1, 1); dpd_buf4_close(&Lijab); dpd_buf4_close(&Wmbij); dpd_buf4_init(&WmBiJ, CC_HBAR, 0, 27, 23, 27, 23, 0, "WmBiJ"); dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_contract442(&WmBiJ, &LiJaB, &newLia, 0, 2, -1, 1); dpd_buf4_close(&LiJaB); dpd_buf4_close(&WmBiJ); } /* L1 RHS += -Gef*Weifa */ if(params.ref == 0) { /* dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); */ /* dpd_buf4_init(&WaMeF, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); */ /* dpd_dot13(&GAE,&WaMeF,&newLIA, 0, 0, -1.0, 1.0); */ /* dpd_buf4_close(&WaMeF); */ /* dpd_file2_close(&GAE); */ /* Above code replaced to remove disk-space and memory bottlenecks 7/26/05, -TDC */ dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_mat_init(&GAE); dpd_file2_mat_rd(&GAE); dpd_file2_mat_init(&newLIA); dpd_file2_mat_rd(&newLIA); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); for(Gei=0; Gei < moinfo.nirreps; Gei++) { dpd_buf4_mat_irrep_row_init(&W, Gei); X = init_array(W.params->coltot[Gei]); for(ei=0; ei < W.params->rowtot[Gei]; ei++) { dpd_buf4_mat_irrep_row_rd(&W, Gei, ei); e = W.params->roworb[Gei][ei][0]; i = W.params->roworb[Gei][ei][1]; Ge = W.params->psym[e]; Gf = Ge ^ L_irr; Gi = Ge ^ Gei; Ga = Gi ^ L_irr; E = e - moinfo.vir_off[Ge]; I = i - moinfo.occ_off[Gi]; zero_arr(X,W.params->coltot[Gei]); for(fa=0; fa < W.params->coltot[Gei]; fa++) { f = W.params->colorb[Gei][fa][0]; a = W.params->colorb[Gei][fa][1]; af = W.params->colidx[a][f]; X[fa] = 2.0 * W.matrix[Gei][0][fa] - W.matrix[Gei][0][af]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ga]; if(nrows && ncols) C_DGEMV('t',nrows,ncols,-1,&X[W.col_offset[Gei][Gf]],ncols, GAE.matrix[Ge][E],1,1,newLIA.matrix[Gi][I],1); } dpd_buf4_mat_irrep_row_close(&W, Gei); free(X); } dpd_buf4_close(&W); dpd_file2_mat_wrt(&newLIA); dpd_file2_mat_close(&newLIA); dpd_file2_mat_close(&GAE); dpd_file2_close(&GAE); } else if(params.ref == 1) { dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 1, 1, "Gae"); dpd_buf4_init(&WAMEF, CC_HBAR, 0, 11, 5, 11, 7, 0, "WAMEF"); dpd_dot13(&GAE,&WAMEF,&newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WAMEF); dpd_buf4_init(&WaMeF, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_dot13(&Gae,&WaMeF,&newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WaMeF); dpd_buf4_init(&Wamef, CC_HBAR, 0, 11, 5, 11, 7, 0, "Wamef"); dpd_dot13(&Gae,&Wamef,&newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&Wamef); dpd_buf4_init(&WAmEf, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_dot13(&GAE,&WAmEf,&newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&WAmEf); /* dpd_buf4_init(&WAMEF, CC_HBAR, 0, 10, 5, 10, 7, 0, "WAMEF"); dpd_dot23(&GAE,&WAMEF,&newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WAMEF); dpd_buf4_init(&WaMeF, CC_HBAR, 0, 10, 5, 10, 5, 0, "WaMeF"); dpd_dot23(&Gae,&WaMeF,&newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WaMeF); dpd_buf4_init(&Wamef, CC_HBAR, 0, 10, 5, 10, 7, 0, "Wamef"); dpd_dot23(&Gae,&Wamef,&newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&Wamef); dpd_buf4_init(&WAmEf, CC_HBAR, 0, 10, 5, 10, 5, 0, "WAmEf"); dpd_dot23(&GAE,&WAmEf,&newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&WAmEf); */ dpd_file2_close(&Gae); dpd_file2_close(&GAE); } else if(params.ref == 2) { dpd_file2_init(&GAE, CC_LAMBDA, L_irr, 1, 1, "GAE"); dpd_file2_init(&Gae, CC_LAMBDA, L_irr, 3, 3, "Gae"); dpd_buf4_init(&W, CC_HBAR, 0, 21, 5, 21, 7, 0, "WAMEF"); dpd_dot13(&GAE,&W,&newLIA, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_dot13(&Gae,&W,&newLIA, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 31, 15, 31, 17, 0, "Wamef"); dpd_dot13(&Gae,&W,&newLia, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_dot13(&GAE,&W,&newLia, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_file2_close(&Gae); dpd_file2_close(&GAE); } /* L1 RHS += -Gmn*Wmina */ if(params.ref == 0) { dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_buf4_init(&WmNiE, CC_HBAR, 0, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_dot14(&GMI, &WmNiE, &newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WmNiE); dpd_file2_close(&GMI); } else if(params.ref == 1) { dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 0, 0, "Gmi"); dpd_buf4_init(&WMNIE, CC_HBAR, 0, 0, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_dot14(&GMI, &WMNIE, &newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WMNIE); dpd_buf4_init(&WmNiE, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_dot14(&Gmi, &WmNiE, &newLIA, 0, 0, -1.0, 1.0); dpd_buf4_close(&WmNiE); dpd_buf4_init(&Wmnie, CC_HBAR, 0, 0, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_dot14(&Gmi, &Wmnie, &newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&Wmnie); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_dot14(&GMI, &WMnIe, &newLia, 0, 0, -1.0, 1.0); dpd_buf4_close(&WMnIe); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); } else if(params.ref == 2) { dpd_file2_init(&GMI, CC_LAMBDA, L_irr, 0, 0, "GMI"); dpd_file2_init(&Gmi, CC_LAMBDA, L_irr, 2, 2, "Gmi"); dpd_buf4_init(&W, CC_HBAR, 0, 0, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_dot14(&GMI, &W, &newLIA, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_dot14(&Gmi, &W, &newLIA, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 10, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_dot14(&Gmi, &W, &newLia, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_dot14(&GMI, &W, &newLia, 0, 0, -1, 1); dpd_buf4_close(&W); dpd_file2_close(&Gmi); dpd_file2_close(&GMI); } /* CC3 T3->L1 */ if(!strcmp(params.wfn, "CC3")) { if(params.ref == 0) { dpd_file2_init(&XLD, CC3_MISC, 0, 0, 1, "CC3 XLD"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot24(&XLD, &D, &newLIA, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&XLD); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 0, 10, 0, 0, "CC3 ZIFLN"); dpd_contract442(&Z, &L2, &newLIA, 0, 2, -0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&Z, CC3_MISC, 0, 10, 0, 10, 0, 0, "CC3 ZIfLn"); dpd_contract442(&Z, &L2, &newLIA, 0, 2, -1, 1); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Z, CC3_MISC, 0, 11, 5, 11, 5, 0, "CC3 ZDFAN (AN,DF)"); dpd_contract442(&L2, &Z, &newLIA, 0, 0, 0.5, 1); dpd_buf4_close(&Z); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&Z, CC3_MISC, 0, 11, 5, 11, 5, 0, "CC3 ZDfAn (An,Df)"); dpd_contract442(&L2, &Z, &newLIA, 0, 0, 1.0, 1); dpd_buf4_close(&Z); dpd_buf4_close(&L2); } } dpd_file2_close(&newLIA); dpd_file2_close(&newLia); /* newLia * Dia */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment"); dpd_file2_close(&newLIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); if(params.local && local.filter_singles) local_filter_T1(&newLIA); else { dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); } dpd_file2_close(&newLIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA"); dpd_file2_close(&LIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_axpy(&LIA, &newLIA, 1, 0); dpd_file2_close(&LIA); dpd_file2_copy(&newLIA, CC_LAMBDA, "New Lia"); /* spin-adaptation for RHF */ dpd_file2_close(&newLIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment"); dpd_file2_close(&newLIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); dpd_file2_close(&newLIA); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA"); dpd_file2_close(&LIA); dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment"); dpd_file2_axpy(&LIA, &newLIA, 1, 0); dpd_file2_close(&LIA); dpd_file2_close(&newLIA); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_copy(&newLia, CC_LAMBDA, "New Lia Increment"); dpd_file2_close(&newLia); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment"); dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia"); dpd_file2_dirprd(&dia, &newLia); dpd_file2_close(&dia); dpd_file2_close(&newLia); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_copy(&Lia, CC_LAMBDA, "New Lia"); dpd_file2_close(&Lia); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment"); dpd_file2_axpy(&Lia, &newLia, 1, 0); dpd_file2_close(&Lia); dpd_file2_close(&newLia); } else if(params.ref == 2) { dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA"); dpd_file2_dirprd(&dIA, &newLIA); dpd_file2_close(&dIA); dpd_file2_close(&newLIA); dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia"); dpd_file2_dirprd(&dia, &newLia); dpd_file2_close(&dia); dpd_file2_close(&newLia); } #ifdef EOM_DEBUG check_sum("after L1 build",L_irr); #endif return; } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/L1FL2.cc����������������������������������������������������������������������0000644�0001015�0000765�00000022132�10757640026�014364� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* L2FL2(): Computes the contributions of the Fme HBAR matrix elements ** to the Lambda doubles equations. These contributions are given in ** spin orbitals as: ** ** L_ij^ab <-- P(ij) P(ab) L_i^a Fjb ** ** where Fjb = fjb + t_n^f <jn||bf> ** ** TDC, July 2002 */ void L1FL2(int L_irr) { int h, nirreps; int row,col; int i,j,a,b,I,J,A,B,Isym,Jsym,Asym,Bsym; dpdfile2 LIA, Lia, FJB, Fjb, L, F; dpdbuf4 newL2; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&L, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&L); dpd_file2_mat_rd(&L); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&F); dpd_file2_mat_rd(&F); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&newL2, h); dpd_buf4_mat_irrep_rd(&newL2, h); for(row=0; row < newL2.params->rowtot[h]; row++) { i = newL2.params->roworb[h][row][0]; j = newL2.params->roworb[h][row][1]; for(col=0; col < newL2.params->coltot[h^L_irr]; col++) { a = newL2.params->colorb[h^L_irr][col][0]; b = newL2.params->colorb[h^L_irr][col][1]; I = L.params->rowidx[i]; Isym = L.params->psym[i]; J = F.params->rowidx[j]; Jsym = F.params->psym[j]; A = L.params->colidx[a]; Asym = L.params->qsym[a]; B = F.params->colidx[b]; Bsym = F.params->qsym[b]; if(((Isym^Asym) == L_irr) && (Jsym == Bsym)) newL2.matrix[h][row][col] += (L.matrix[Isym][I][A] * F.matrix[Jsym][J][B]); if((Isym == Asym) && ((Jsym^Bsym) == L_irr)) newL2.matrix[h][row][col] += (L.matrix[Jsym][J][B] * F.matrix[Isym][I][A]); } } dpd_buf4_mat_irrep_wrt(&newL2, h); dpd_buf4_mat_irrep_close(&newL2, h); } dpd_buf4_close(&newL2); dpd_file2_mat_close(&F); dpd_file2_close(&F); dpd_file2_mat_close(&L); dpd_file2_close(&L); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&LIA); dpd_file2_mat_rd(&LIA); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_mat_init(&Lia); dpd_file2_mat_rd(&Lia); dpd_file2_init(&FJB, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&FJB); dpd_file2_mat_rd(&FJB); dpd_file2_init(&Fjb, CC_OEI, 0, 0, 1, "Fme"); dpd_file2_mat_init(&Fjb); dpd_file2_mat_rd(&Fjb); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_mat_init(&LIA); dpd_file2_mat_rd(&LIA); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_mat_init(&Lia); dpd_file2_mat_rd(&Lia); dpd_file2_init(&FJB, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&FJB); dpd_file2_mat_rd(&FJB); dpd_file2_init(&Fjb, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_mat_init(&Fjb); dpd_file2_mat_rd(&Fjb); } if(params.ref == 1) /** RHF/ROHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); else if(params.ref == 2) /** UHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); if(params.ref == 1 || params.ref == 2) { /* loop over row irreps of LIJAB */ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&newL2, h); dpd_buf4_mat_irrep_rd(&newL2, h); /* loop over rows of irrep of LIJAB */ for(row=0; row < newL2.params->rowtot[h]; row++) { i = newL2.params->roworb[h][row][0]; j = newL2.params->roworb[h][row][1]; /* loop over cols of irrep of LIJAB */ for(col=0; col < newL2.params->coltot[h^L_irr]; col++) { a = newL2.params->colorb[h^L_irr][col][0]; b = newL2.params->colorb[h^L_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; J = FJB.params->rowidx[j]; Jsym = FJB.params->psym[j]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; B = FJB.params->colidx[b]; Bsym = FJB.params->qsym[b]; if( ((Isym^Asym) == L_irr) && (Jsym == Bsym) ) newL2.matrix[h][row][col] += (LIA.matrix[Isym][I][A] * FJB.matrix[Jsym][J][B]); J = LIA.params->rowidx[j]; Jsym = LIA.params->psym[j]; I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i]; if( (Isym == Asym) && ((Jsym^Bsym) == L_irr) ) newL2.matrix[h][row][col] += (LIA.matrix[Jsym][J][B] * FJB.matrix[Isym][I][A]); I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; J = FJB.params->rowidx[j]; Jsym = FJB.params->psym[j]; B = LIA.params->colidx[b]; Bsym = LIA.params->qsym[b]; A = FJB.params->colidx[a]; Asym = FJB.params->qsym[a]; if( ((Jsym^Asym) == L_irr) && (Isym == Bsym)) newL2.matrix[h][row][col] -= (LIA.matrix[Jsym][J][A] * FJB.matrix[Isym][I][B]); J = LIA.params->rowidx[j]; Jsym = LIA.params->psym[j]; I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i]; if( (Jsym == Asym) && ((Isym^Bsym) == L_irr) ) newL2.matrix[h][row][col] -= (LIA.matrix[Isym][I][B] * FJB.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&newL2, h); dpd_buf4_mat_irrep_close(&newL2, h); } dpd_buf4_close(&newL2); } if(params.ref == 1) /** RHF/ROHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); else if(params.ref == 2) /** UHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); if(params.ref == 1 || params.ref == 2) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&newL2, h); dpd_buf4_mat_irrep_rd(&newL2, h); for(row=0; row < newL2.params->rowtot[h]; row++) { i = newL2.params->roworb[h][row][0]; j = newL2.params->roworb[h][row][1]; for(col=0; col < newL2.params->coltot[h^L_irr]; col++) { a = newL2.params->colorb[h^L_irr][col][0]; b = newL2.params->colorb[h^L_irr][col][1]; I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j]; A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a]; B = Fjb.params->colidx[b]; Bsym = Fjb.params->qsym[b]; if(((Isym^Asym) == L_irr) && (Jsym == Bsym)) newL2.matrix[h][row][col] += (Lia.matrix[Isym][I][A] * Fjb.matrix[Jsym][J][B]); J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j]; I = Fjb.params->rowidx[i]; Isym = Fjb.params->psym[i]; if((Isym == Asym) && ((Jsym^Bsym) == L_irr)) newL2.matrix[h][row][col] += (Lia.matrix[Jsym][J][B] * Fjb.matrix[Isym][I][A]); I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i]; J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j]; B = Lia.params->colidx[b]; Bsym = Lia.params->qsym[b]; A = Fjb.params->colidx[a]; Asym = Fjb.params->qsym[a]; if(((Jsym^Asym) == L_irr) && (Isym == Bsym)) newL2.matrix[h][row][col] -= (Lia.matrix[Jsym][J][A] * Fjb.matrix[Isym][I][B]); J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j]; I = Fjb.params->rowidx[i]; Isym = Fjb.params->psym[i]; if((Jsym == Asym) && ((Isym^Bsym) == L_irr)) newL2.matrix[h][row][col] -= (Lia.matrix[Isym][I][B] * Fjb.matrix[Jsym][J][A]); } } dpd_buf4_mat_irrep_wrt(&newL2, h); dpd_buf4_mat_irrep_close(&newL2, h); } dpd_buf4_close(&newL2); } if(params.ref == 1) /** RHF/ROHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); else if(params.ref == 2) /** UHF **/ dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); if(params.ref == 1 || params.ref == 2) { for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&newL2, h); dpd_buf4_mat_irrep_rd(&newL2, h); for(row=0; row < newL2.params->rowtot[h]; row++) { i = newL2.params->roworb[h][row][0]; j = newL2.params->roworb[h][row][1]; for(col=0; col < newL2.params->coltot[h^L_irr]; col++) { a = newL2.params->colorb[h^L_irr][col][0]; b = newL2.params->colorb[h^L_irr][col][1]; I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i]; J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j]; A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a]; B = Fjb.params->colidx[b]; Bsym = Fjb.params->qsym[b]; if(((Isym^Asym) == L_irr) && (Jsym == Bsym)) newL2.matrix[h][row][col] += (LIA.matrix[Isym][I][A] * Fjb.matrix[Jsym][J][B]); J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j]; I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i]; B = Lia.params->colidx[b]; Bsym = Lia.params->qsym[b]; A = FJB.params->colidx[a]; Asym = FJB.params->qsym[a]; if((Isym == Asym) && ((Jsym^Bsym) == L_irr)) newL2.matrix[h][row][col] += (Lia.matrix[Jsym][J][B] * FJB.matrix[Isym][I][A]); } } dpd_buf4_mat_irrep_wrt(&newL2, h); dpd_buf4_mat_irrep_close(&newL2, h); } } if(params.ref == 1 || params.ref == 2) { dpd_buf4_close(&newL2); dpd_file2_mat_close(&FJB); dpd_file2_close(&FJB); dpd_file2_mat_close(&Fjb); dpd_file2_close(&Fjb); dpd_file2_mat_close(&LIA); dpd_file2_close(&LIA); dpd_file2_mat_close(&Lia); dpd_file2_close(&Lia); } } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/L2.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000005074�11112564564�014065� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* L2_build(): */ void DL2(struct L_Params L_params); void FaeL2(int L_irr); void FmiL2(int L_irr); void WijmnL2(int L_irr); void WefabL2(int L_irr); void WejabL2(int L_irr); void WijmbL2(int L_irr); void L1FL2(int L_irr); void WmbejL2(int L_irr); void GaeL2(int L_irr); void GmiL2(int L_irr); void dijabL2(int L_irr); void BL2_AO(int L_irr); void status(const char *, FILE *); void L2_build(struct L_Params L_params) { dpdbuf4 L2; int L_irr; L_irr = L_params.irrep; DL2(L_params); if(params.print & 2) status("<ij||ab> -> L2", outfile); #ifdef EOM_DEBUG check_sum("DL2", L_irr); #endif WijmnL2(L_irr); #ifdef EOM_DEBUG check_sum("WijmnL2", L_irr); #endif if(params.print & 2) status("Wmnij -> L2", outfile); WefabL2(L_irr); #ifdef EOM_DEBUG check_sum("WefabL2", L_irr); #endif if(params.print & 2) status("Wabef -> L2", outfile); WejabL2(L_irr); #ifdef EOM_DEBUG check_sum("WejabL2", L_irr); #endif if(params.print & 2) status("Wamef -> L2", outfile); WijmbL2(L_irr); #ifdef EOM_DEBUG check_sum("WijmbL2", L_irr); #endif if(params.print & 2) status("Wmnie -> L2", outfile); GaeL2(L_irr); #ifdef EOM_DEBUG check_sum("GaeL2", L_irr); #endif GmiL2(L_irr); #ifdef EOM_DEBUG check_sum("GmiL2", L_irr); #endif if(params.print & 2) status("G -> L2", outfile); /* For RHF-CCSD response calculations, save all the above contributions to the L2 residual for use in the ccresponse code (specifically, HX1Y1 and LHX1Y1). */ if(params.ref == 0 && params.dertype == 3) { dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMPS, "LHX1Y1 Residual I"); dpd_buf4_close(&L2); } FaeL2(L_irr); #ifdef EOM_DEBUG check_sum("FaeL2", L_irr); #endif FmiL2(L_irr); #ifdef EOM_DEBUG check_sum("FmiL2", L_irr); #endif if(params.print & 2) status("F -> L2", outfile); WmbejL2(L_irr); #ifdef EOM_DEBUG check_sum("WmbejL2", L_irr); #endif if(params.print & 2) status("Wmbej -> L2", outfile); if(!params.sekino) L1FL2(L_irr); /* should be dropped for Sekino-Bartlett modelIII approach */ #ifdef EOM_DEBUG check_sum("L1FL2", L_irr); #endif if(params.print & 2) status("L1*F -> L2", outfile); dijabL2(L_irr); #ifdef EOM_DEBUG check_sum("after D2s", L_irr); #endif if(params.print & 2) status("L2 amplitudes", outfile); } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/L3_AAA.cc���������������������������������������������������������������������0000644�0001015�0000765�00000050713�10757640026�014532� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ /* L3_RHF_AAA(): Computes all T3(IJK,ABC) amplitudes for a given I, J, ** K combination for input T2, F, and E intermediates. This function ** will work for AAA or BBB spin cases, with either RHF/ROHF or UHF ** orbitals. ** ** Arguments: ** ** double ***W1: The target triples amplitudes in an nirreps x AB x ** C array. The memory for this must be allocated externally. ** ** int nirreps: Number of irreps. ** ** int I: Absolute index of orbital I. ** ** int Gi: Irrep of I. ** ** int J: Absolute index of orbital J. ** ** int Gj: Irrep of J. ** ** int K: Absolute index of orbital K. ** ** int Gk: Irrep of K. ** ** dpdbuf4 *T2: Pointer to dpd buffer for double excitation amps, ** ordered (IJ,AB). ** ** dpdbuf4 *F: Pointer to dpd buffer for three-virtual-index ** intermediate, ordered (IA,BC). ** ** dpdbuf4 *E: Pointer to dpd buffer for three-occupied-index ** intermediate, ordered (IJ,KA). ** ** dpdfile2 *fIJ: Pointer to the dpd file2 for the occ-occ block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fAB: Pointer to the dpd file2 for the vir-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** int *occpi: Number of occupied orbitals per irrep lookup array. ** ** int *occ_off: Offset lookup for translating between absolute and ** relative orbital indices for occupied space. ** ** int *virtpi: Number of virtual orbitals per irrep lookup array. ** ** int *vir_off: Offset lookup for translating between absolute and ** relative orbital indices for virtual space. ** ** TDC, July 2004 */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <ccfiles.h> namespace psi { namespace cclambda { void L3_AAA(double ***W1, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *fIJ, dpdfile2 *fAB, dpdbuf4 *D, dpdbuf4 *LIJAB, dpdfile2 *LIA, dpdfile2 *FME, int *occpi, int *occ_off, int *virtpi, int *vir_off) { int h; int i, j, k; int Ga, Gb, Gc; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Gab, Gba, Gbc, Gcb, Gac, Gca; int Gd, Gl; int Gid, Gjd, Gkd; int Gla, Glb, Glc; int Gil, Gjl, Gkl; int a, b, c, A, B, C; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int cd, bd, ad; int id, jd, kd; int la, lb, lc; int il, jl, kl; int nrows, ncols, nlinks; double dijk, denom; double ***W2; double L1, F1, D2, L2; dpd_file2_mat_init(fIJ); dpd_file2_mat_init(fAB); dpd_file2_mat_rd(fIJ); dpd_file2_mat_rd(fAB); dpd_file2_mat_init(LIA); dpd_file2_mat_rd(LIA); dpd_file2_mat_init(FME); dpd_file2_mat_rd(FME); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2, h); dpd_buf4_mat_irrep_rd(T2, h); dpd_buf4_mat_irrep_init(E, h); dpd_buf4_mat_irrep_rd(E, h); dpd_buf4_mat_irrep_init(LIJAB, h); dpd_buf4_mat_irrep_rd(LIJAB, h); dpd_buf4_mat_irrep_init(D, h); dpd_buf4_mat_irrep_rd(D, h); } i = I - occ_off[Gi]; j = J - occ_off[Gj]; k = K - occ_off[Gk]; Gij = Gji = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gjk = Gkj = Gj ^ Gk; Gijk = Gi ^ Gj ^ Gk; ij = T2->params->rowidx[I][J]; ji = T2->params->rowidx[J][I]; jk = T2->params->rowidx[J][K]; kj = T2->params->rowidx[K][J]; ik = T2->params->rowidx[I][K]; ki = T2->params->rowidx[K][I]; dijk = 0.0; if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i]; if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j]; if(fIJ->params->rowtot[Gk]) dijk += fIJ->matrix[Gk][k][k]; W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ W2[Gab] = dpd_block_matrix(F->params->coltot[Gab], virtpi[Gc]); if(F->params->coltot[Gab] && virtpi[Gc]) { memset(W1[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +t_kjcd * F_idab */ Gab = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Gc = Gjk ^ Gd; /* assumes totally symmetric! */ cd = T2->col_offset[Gjk][Gc]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows, &(T2->matrix[Gjk][kj][cd]), nlinks, 1.0, W1[Gab][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid]); /* +t_ikcd * F_jdab */ Gab = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Gc = Gik ^ Gd; /* assumes totally symmetric! */ cd = T2->col_offset[Gik][Gc]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows, &(T2->matrix[Gik][ik][cd]), nlinks, 1.0, W1[Gab][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd]); /* -t_ijcd * F_kdab */ Gab = Gkd = Gk ^ Gd; /* assumes totally symmetric! */ Gc = Gij ^ Gd; /* assumes totally symmetric! */ cd = T2->col_offset[Gij][Gc]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows, &(T2->matrix[Gij][ij][cd]), nlinks, 1.0, W1[Gab][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilab * E_jklc */ Gab = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Gc = Gjk ^ Gl; /* assumes totally symmetric! */ lc = E->col_offset[Gjk][Gl]; il = T2->row_offset[Gil][I]; nrows = T2->params->coltot[Gil]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][lc]), ncols, 1.0, W1[Gab][0], ncols); /* +t_jlab * E_iklc */ Gab = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Gc = Gik ^ Gl; /* assumes totally symmetric! */ lc = E->col_offset[Gik][Gl]; jl = T2->row_offset[Gjl][J]; nrows = T2->params->coltot[Gjl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][lc]), ncols, 1.0, W1[Gab][0], ncols); /* +t_klab * E_jilc */ Gab = Gkl = Gk ^ Gl; /* assumes totally symmetric! */ Gc = Gji ^ Gl; /* assumes totally symmetric! */ lc = E->col_offset[Gji][Gl]; kl = T2->row_offset[Gkl][K]; nrows = T2->params->coltot[Gkl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][lc]), ncols, 1.0, W1[Gab][0], ncols); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_kjbd * F_idca */ Gca = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Gb = Gjk ^ Gd; /* assumes totally symmetric! */ bd = T2->col_offset[Gjk][Gb]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows, &(T2->matrix[Gjk][kj][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid]); /* +t_ikbd * F_jdca */ Gca = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Gb = Gik ^ Gd; /* assumes totally symmetric! */ bd = T2->col_offset[Gik][Gb]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows, &(T2->matrix[Gik][ik][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd]); /* -t_ijbd * F_kdca */ Gca = Gkd = Gk ^ Gd; /* assumes totally symmetric! */ Gb = Gij ^ Gd; /* assumes totally symmetric! */ bd = T2->col_offset[Gij][Gb]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows, &(T2->matrix[Gij][ij][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilca * E_jklb */ Gca = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Gb = Gjk ^ Gl; /* assumes totally symmetric! */ lb = E->col_offset[Gjk][Gl]; il = T2->row_offset[Gil][I]; nrows = T2->params->coltot[Gil]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][lb]), ncols, 1.0, W2[Gca][0], ncols); /* +t_jlca * E_iklb */ Gca = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Gb = Gik ^ Gl; /* assumes totally symmetric! */ lb = E->col_offset[Gik][Gl]; jl = T2->row_offset[Gjl][J]; nrows = T2->params->coltot[Gjl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][lb]), ncols, 1.0, W2[Gca][0], ncols); /* +t_klca * E_jilb */ Gca = Gkl = Gk ^ Gl; /* assumes totally symmetric! */ Gb = Gji ^ Gl; /* assumes totally symmetric! */ lb = E->col_offset[Gji][Gl]; kl = T2->row_offset[Gkl][K]; nrows = T2->params->coltot[Gkl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][lb]), ncols, 1.0, W2[Gca][0], ncols); } dpd_3d_sort(W2, W1, nirreps, Gijk, F->params->coltot, F->params->colidx, F->params->colorb, F->params->rsym, F->params->ssym, vir_off, vir_off, virtpi, vir_off, F->params->colidx, bca, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ if(F->params->coltot[Gab] && virtpi[Gc]) { memset(W2[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* -t_kjad * F_idcb */ Gcb = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Ga = Gkj ^ Gd; /* assumes totally symmetric! */ ad = T2->col_offset[Gkj][Ga]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gid][0], nrows, &(T2->matrix[Gkj][kj][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid]); /* -t_ikad * F_jdcb */ Gcb = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Ga = Gik ^ Gd; /* assumes totally symmetric! */ ad = T2->col_offset[Gik][Ga]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gjd][0], nrows, &(T2->matrix[Gik][ik][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd]); /* +t_ijad * F_kdcb */ Gcb = Gkd = Gk ^ Gd; /* assumes totally symmetric! */ Ga = Gij ^ Gd; /* assumes totally symmetric! */ ad = T2->col_offset[Gij][Ga]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gkd][0], nrows, &(T2->matrix[Gij][ij][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_ilcb * E_jkla */ Gcb = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Ga = Gjk ^ Gl; /* assumes totally symmetric! */ la = E->col_offset[Gjk][Gl]; il = T2->row_offset[Gil][I]; nrows = T2->params->coltot[Gil]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][la]), ncols, 1.0, W2[Gcb][0], ncols); /* -t_jlcb * E_ikla */ Gcb = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Ga = Gik ^ Gl; /* assumes totally symmetric! */ la = E->col_offset[Gik][Gl]; jl = T2->row_offset[Gjl][J]; nrows = T2->params->coltot[Gjl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][la]), ncols, 1.0, W2[Gcb][0], ncols); /* -t_klcb * E_jila */ Gcb = Gkl = Gk ^ Gl; /* assumes totally symmetric! */ Ga = Gji ^ Gl; /* assumes totally symmetric! */ la = E->col_offset[Gji][Gl]; kl = T2->row_offset[Gkl][K]; nrows = T2->params->coltot[Gkl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][la]), ncols, 1.0, W2[Gcb][0], ncols); } dpd_3d_sort(W2, W1, nirreps, Gijk, F->params->coltot, F->params->colidx, F->params->colorb, F->params->rsym, F->params->ssym, vir_off, vir_off, virtpi, vir_off, F->params->colidx, cba, 1); /* Add disconnected terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < F->params->coltot[Gab]; ab++) { A = F->params->colorb[Gab][ab][0]; B = F->params->colorb[Gab][ab][1]; Ga = F->params->rsym[A]; Gb = F->params->ssym[B]; a = A - vir_off[Ga]; b = B - vir_off[Gb]; Gbc = Gcb = Gb ^ Gc; Gac = Gca = Ga ^ Gc; ba = LIJAB->params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = LIJAB->params->colidx[B][C]; cb = LIJAB->params->colidx[C][B]; ac = LIJAB->params->colidx[A][C]; ca = LIJAB->params->colidx[C][A]; /* +L_ia * D_jkbc + F_ia * L_jkbc */ if(Gi == Ga && Gjk == Gbc) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gi] && LIA->params->coltot[Gi]) { L1 = LIA->matrix[Gi][i][a]; F1 = FME->matrix[Gi][i][a]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D2 = D->matrix[Gjk][jk][bc]; L2 = LIJAB->matrix[Gjk][jk][bc]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* -L_ib * D_jkac - F_ib * L_jkac */ if(Gi == Gb && Gjk == Gac) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gi] && LIA->params->coltot[Gi]) { L1 = LIA->matrix[Gi][i][b]; F1 = FME->matrix[Gi][i][b]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D2 = D->matrix[Gjk][jk][ac]; L2 = LIJAB->matrix[Gjk][jk][ac]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* -L_ic * D_jkba - F_ic * L_jkba */ if(Gi == Gc && Gjk == Gba) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gi] && LIA->params->coltot[Gi]) { L1 = LIA->matrix[Gi][i][c]; F1 = FME->matrix[Gi][i][c]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D2 = D->matrix[Gjk][jk][ba]; L2 = LIJAB->matrix[Gjk][jk][ba]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* -L_ja * D_ikbc - F_ja * L_ikbc */ if(Gj == Ga && Gik == Gbc) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gj] && LIA->params->coltot[Gj]) { L1 = LIA->matrix[Gj][j][a]; F1 = FME->matrix[Gj][j][a]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D2 = D->matrix[Gik][ik][bc]; L2 = LIJAB->matrix[Gik][ik][bc]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* +L_jb * D_ikac + F_jb * L_ikac */ if(Gj == Gb && Gik == Gac) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gj] && LIA->params->coltot[Gj]) { L1 = LIA->matrix[Gj][j][b]; F1 = FME->matrix[Gj][j][b]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D2 = D->matrix[Gik][ik][ac]; L2 = LIJAB->matrix[Gik][ik][ac]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* +L_jc * D_ikba + F_jc * L_ikba */ if(Gj == Gc && Gik == Gba) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gj] && LIA->params->coltot[Gj]) { L1 = LIA->matrix[Gj][j][c]; F1 = FME->matrix[Gj][j][c]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D2 = D->matrix[Gik][ik][ba]; L2 = LIJAB->matrix[Gik][ik][ba]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* -L_ka * D_jibc - F_ka * L_jibc */ if(Gk == Ga && Gji == Gbc) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gk] && LIA->params->coltot[Gk]) { L1 = LIA->matrix[Gk][k][a]; F1 = FME->matrix[Gk][k][a]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D2 = D->matrix[Gji][ji][bc]; L2 = LIJAB->matrix[Gji][ji][bc]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* +L_kb * D_jiac + F_kb * L_jiac */ if(Gk == Gb && Gji == Gac) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gk] && LIA->params->coltot[Gk]) { L1 = LIA->matrix[Gk][k][b]; F1 = FME->matrix[Gk][k][b]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D2 = D->matrix[Gji][ji][ac]; L2 = LIJAB->matrix[Gji][ji][ac]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* +L_kc * D_jiba + F_kc * L_jiba */ if(Gk == Gc && Gji == Gba) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gk] && LIA->params->coltot[Gk]) { L1 = LIA->matrix[Gk][k][c]; F1 = FME->matrix[Gk][k][c]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D2 = D->matrix[Gji][ji][ba]; L2 = LIJAB->matrix[Gji][ji][ba]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } } } } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ for(ab=0; ab < F->params->coltot[Gab]; ab++) { A = F->params->colorb[Gab][ab][0]; B = F->params->colorb[Gab][ab][1]; Ga = F->params->rsym[A]; Gb = F->params->ssym[B]; a = A - vir_off[Ga]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; denom = dijk; if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a]; if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b]; if(fAB->params->rowtot[Gc]) denom -= fAB->matrix[Gc][c][c]; W1[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ dpd_free_block(W2[Gab], F->params->coltot[Gab], virtpi[Gc]); } free(W2); dpd_file2_mat_close(fIJ); dpd_file2_mat_close(fAB); dpd_file2_mat_close(FME); dpd_file2_mat_close(LIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(T2, h); dpd_buf4_mat_irrep_close(E, h); dpd_buf4_mat_irrep_close(D, h); dpd_buf4_mat_irrep_close(LIJAB, h); } } }} // namespace psi::cclambda �����������������������������������������������������psi3/src/bin/cclambda/L3_AAB.cc���������������������������������������������������������������������0000644�0001015�0000765�00000051572�10757640026�014537� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ /* L3_RHF_AAB(): Computes all T3(IJK,ABC) amplitudes for a given I, J, ** K combination for input T2, F, and E intermediates. This function ** will work for AAB or BBA spin cases with either RHF/ROHF or UHF ** orbitals. ** ** Arguments: ** ** double ***W1: The target triples amplitudes in an nirreps x AB x ** C array. The memory for this must be allocated externally. ** ** int nirreps: Number of irreps. ** ** int I: Absolute index of orbital I. ** ** int Gi: Irrep of I. ** ** int J: Absolute index of orbital J. ** ** int Gj: Irrep of J. ** ** int K: Absolute index of orbital K. ** ** int Gk: Irrep of K. ** ** dpdbuf4 *T2: Pointer to dpd buffer for double excitation amps, ** ordered (IJ,AB). ** ** dpdbuf4 *F: Pointer to dpd buffer for three-virtual-index ** intermediate, ordered (IA,BC). ** ** dpdbuf4 *E: Pointer to dpd buffer for three-occupied-index ** intermediate, ordered (IJ,KA). ** ** dpdfile2 *fIJ: Pointer to the dpd file2 for the occ-occ block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fAB: Pointer to the dpd file2 for the vir-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** int *occpi: Number of occupied orbitals per irrep lookup array. ** ** int *occ_off: Offset lookup for translating between absolute and ** relative orbital indices for occupied space. ** ** int *virtpi: Number of virtual orbitals per irrep lookup array. ** ** int *vir_off: Offset lookup for translating between absolute and ** relative orbital indices for virtual space. ** ** TDC, July 2004 */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <ccfiles.h> namespace psi { namespace cclambda { void L3_AAB(double ***W1, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2AA, dpdbuf4 *T2AB, dpdbuf4 *T2BA, dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA, dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA, dpdfile2 *fIJ, dpdfile2 *fij, dpdfile2 *fAB, dpdfile2 *fab, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdbuf4 *LIJAB, dpdbuf4 *LIjAb, dpdfile2 *LIA, dpdfile2 *Lia, dpdfile2 *FME, dpdfile2 *Fme, int *aoccpi, int *aocc_off, int *boccpi, int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off) { int h; int i, j, k; int Ga, Gb, Gc; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Gab, Gba, Gbc, Gcb, Gac, Gca; int Gd, Gl; int Gid, Gjd, Gkd; int Gla, Glb, Glc; int Gil, Gjl, Gkl; int a, b, c, A, B, C; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int dc, bd, ad; int id, jd, kd; int la, lb, lc; int il, jl, kl; int nrows, ncols, nlinks; double dijk, denom; double ***W2; double L1, F1, D2, L2; dpd_file2_mat_init(fIJ); dpd_file2_mat_init(fAB); dpd_file2_mat_rd(fIJ); dpd_file2_mat_rd(fAB); dpd_file2_mat_init(fij); dpd_file2_mat_init(fab); dpd_file2_mat_rd(fij); dpd_file2_mat_rd(fab); dpd_file2_mat_init(FME); dpd_file2_mat_rd(FME); dpd_file2_mat_init(Fme); dpd_file2_mat_rd(Fme); dpd_file2_mat_init(LIA); dpd_file2_mat_rd(LIA); dpd_file2_mat_init(Lia); dpd_file2_mat_rd(Lia); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2AA, h); dpd_buf4_mat_irrep_rd(T2AA, h); dpd_buf4_mat_irrep_init(T2AB, h); dpd_buf4_mat_irrep_rd(T2AB, h); dpd_buf4_mat_irrep_init(T2BA, h); dpd_buf4_mat_irrep_rd(T2BA, h); dpd_buf4_mat_irrep_init(EAA, h); dpd_buf4_mat_irrep_rd(EAA, h); dpd_buf4_mat_irrep_init(EAB, h); dpd_buf4_mat_irrep_rd(EAB, h); dpd_buf4_mat_irrep_init(EBA, h); dpd_buf4_mat_irrep_rd(EBA, h); dpd_buf4_mat_irrep_init(DAA, h); dpd_buf4_mat_irrep_rd(DAA, h); dpd_buf4_mat_irrep_init(DAB, h); dpd_buf4_mat_irrep_rd(DAB, h); dpd_buf4_mat_irrep_init(LIJAB, h); dpd_buf4_mat_irrep_rd(LIJAB, h); dpd_buf4_mat_irrep_init(LIjAb, h); dpd_buf4_mat_irrep_rd(LIjAb, h); } i = I - aocc_off[Gi]; j = J - aocc_off[Gj]; k = K - bocc_off[Gk]; Gij = Gji = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gjk = Gkj = Gj ^ Gk; Gijk = Gi ^ Gj ^ Gk; ij = T2AA->params->rowidx[I][J]; ji = T2AA->params->rowidx[J][I]; jk = T2AB->params->rowidx[J][K]; kj = T2BA->params->rowidx[K][J]; ik = T2AB->params->rowidx[I][K]; ki = T2BA->params->rowidx[K][I]; dijk = 0.0; if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i]; if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j]; if(fij->params->rowtot[Gk]) dijk += fij->matrix[Gk][k][k]; W2 = (double ***) malloc(nirreps * sizeof(double **)); /* alpha-beta-alpha */ /* clear out the old W1 */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ if(FAA->params->coltot[Gab] && bvirtpi[Gc]) { memset(W1[Gab][0], 0, FAA->params->coltot[Gab]*bvirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JkDc * F_IDAB */ Gab = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Gc = Gjk ^ Gd; /* assumes totally symmetric! */ dc = T2AB->col_offset[Gjk][Gd]; id = FAA->row_offset[Gid][I]; FAA->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], FAA->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(FAA, Gid, id, avirtpi[Gd]); nrows = FAA->params->coltot[Gid]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','n',nrows, ncols, nlinks, 1.0, FAA->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][dc]), ncols, 1.0, W1[Gab][0], ncols); dpd_free_block(FAA->matrix[Gid], avirtpi[Gd], FAA->params->coltot[Gid]); /* -t_IkDc * F_JDAB */ Gab = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Gc = Gik ^ Gd; /* assumes totally symmetric! */ dc = T2AB->col_offset[Gik][Gd]; jd = FAA->row_offset[Gjd][J]; FAA->matrix[Gjd] = dpd_block_matrix(avirtpi[Gd], FAA->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(FAA, Gjd, jd, avirtpi[Gd]); nrows = FAA->params->coltot[Gjd]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','n',nrows, ncols, nlinks, -1.0, FAA->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][dc]), ncols, 1.0, W1[Gab][0], ncols); dpd_free_block(FAA->matrix[Gjd], avirtpi[Gd], FAA->params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ILAB * E_JkLc */ Gab = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Gc = Gjk ^ Gl; /* assumes totally symmetric! */ lc = EAB->col_offset[Gjk][Gl]; il = T2AA->row_offset[Gil][I]; nrows = T2AA->params->coltot[Gil]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AA->matrix[Gil][il], nrows, &(EAB->matrix[Gjk][jk][lc]), ncols, 1.0, W1[Gab][0], ncols); /* +t_JLAB * E_IkLc */ Gab = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Gc = Gik ^ Gl; /* assumes totally symmetric! */ lc = EAB->col_offset[Gik][Gl]; jl = T2AA->row_offset[Gjl][J]; nrows = T2AA->params->coltot[Gjl]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AA->matrix[Gjl][jl], nrows, &(EAB->matrix[Gik][ik][lc]), ncols, 1.0, W1[Gab][0], ncols); } /* Open memory for an alpha-beta-alpha array */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ W2[Gab] = dpd_block_matrix(FAB->params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JkBd * F_IdAc */ Gac = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Gb = Gjk ^ Gd; /* assumes totally symmetric! */ bd = T2AB->col_offset[Gjk][Gb]; id = FAB->row_offset[Gid][I]; FAB->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(FAB, Gid, id, bvirtpi[Gd]); nrows = FAB->params->coltot[Gid]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, FAB->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][bd]), nlinks, 1.0, W2[Gac][0], ncols); dpd_free_block(FAB->matrix[Gid], bvirtpi[Gd], FAB->params->coltot[Gid]); /* -t_IkBd * F_JdAc */ Gac = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Gb = Gik ^ Gd; /* assumes totally symmetric! */ bd = T2AB->col_offset[Gik][Gb]; jd = FAB->row_offset[Gjd][J]; FAB->matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(FAB, Gjd, jd, bvirtpi[Gd]); nrows = FAB->params->coltot[Gjd]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, FAB->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][bd]), nlinks, 1.0, W2[Gac][0], ncols); dpd_free_block(FAB->matrix[Gjd], bvirtpi[Gd], FAB->params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_IlAc * E_kJlB */ Gac = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Gb = Gkj ^ Gl; /* assumes totally symmetric! */ lb = EBA->col_offset[Gkj][Gl]; il = T2AB->row_offset[Gil][I]; nrows = T2AB->params->coltot[Gil]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AB->matrix[Gil][il], nrows, &(EBA->matrix[Gkj][kj][lb]), ncols, 1.0, W2[Gac][0], ncols); /* +t_JlAc * E_kIlB */ Gac = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Gb = Gki ^ Gl; /* assumes totally symmetric! */ lb = EBA->col_offset[Gki][Gl]; jl = T2AB->row_offset[Gjl][J]; nrows = T2AB->params->coltot[Gjl]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AB->matrix[Gjl][jl], nrows, &(EBA->matrix[Gki][ki][lb]), ncols, 1.0, W2[Gac][0], ncols); } /* W(Ac,B) --> W(AB,c) */ dpd_3d_sort(W2, W1, nirreps, Gijk, FAB->params->coltot, FAB->params->colidx, FAB->params->colorb, FAB->params->rsym, FAB->params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAA->params->colidx, acb, 1); /* clean out the alpha-beta-alpha intermediate for next set of terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ if(FAB->params->coltot[Gab] && avirtpi[Gc]) { memset(W2[Gab][0], 0, FAB->params->coltot[Gab]*avirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* -t_JkAd * F_IdBc */ Gbc = Gid = Gi ^ Gd; /* assumes totally symmetric! */ Ga = Gjk ^ Gd; /* assumes totally symmetric! */ ad = T2AB->col_offset[Gjk][Ga]; id = FAB->row_offset[Gid][I]; FAB->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(FAB, Gid, id, bvirtpi[Gd]); nrows = FAB->params->coltot[Gid]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, FAB->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][ad]), nlinks, 1.0, W2[Gbc][0], ncols); dpd_free_block(FAB->matrix[Gid], bvirtpi[Gd], FAB->params->coltot[Gid]); /* +t_IkAd * F_JdBc */ Gbc = Gjd = Gj ^ Gd; /* assumes totally symmetric! */ Ga = Gik ^ Gd; /* assumes totally symmetric! */ ad = T2AB->col_offset[Gik][Ga]; jd = FAB->row_offset[Gjd][J]; FAB->matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(FAB, Gjd, jd, bvirtpi[Gd]); nrows = FAB->params->coltot[Gjd]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, FAB->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][ad]), nlinks, 1.0, W2[Gbc][0], ncols); dpd_free_block(FAB->matrix[Gjd], bvirtpi[Gd], FAB->params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_IlBc * E_kJlA */ Gbc = Gil = Gi ^ Gl; /* assumes totally symmetric! */ Ga = Gkj ^ Gl; /* assumes totally symmetric! */ la = EBA->col_offset[Gkj][Gl]; il = T2AB->row_offset[Gil][I]; nrows = T2AB->params->coltot[Gil]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AB->matrix[Gil][il], nrows, &(EBA->matrix[Gkj][kj][la]), ncols, 1.0, W2[Gbc][0], ncols); /* -t_JlBc * E_kIlA */ Gbc = Gjl = Gj ^ Gl; /* assumes totally symmetric! */ Ga = Gki ^ Gl; /* assumes totally symmetric! */ la = EBA->col_offset[Gki][Gl]; jl = T2AB->row_offset[Gjl][J]; nrows = T2AB->params->coltot[Gjl]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AB->matrix[Gjl][jl], nrows, &(EBA->matrix[Gki][ki][la]), ncols, 1.0, W2[Gbc][0], ncols); } dpd_3d_sort(W2, W1, nirreps, Gijk, FAB->params->coltot, FAB->params->colidx, FAB->params->colorb, FAB->params->rsym, FAB->params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAA->params->colidx, cab, 1); /* Close the alpha-beta-alpha array and open a beta-alpha-alpha array */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ dpd_free_block(W2[Gab], FAB->params->coltot[Gab], avirtpi[Gc]); W2[Gab] = dpd_block_matrix(FBA->params->coltot[Gab], avirtpi[Gc]); } /* Insert cBA terms */ for(Gd=0; Gd < nirreps; Gd++) { /* -t_JIAD * F_kDcB */ Gcb = Gkd = Gk ^ Gd; /* assumes totally symmetric! */ Ga = Gji ^ Gd; /* assumes totally symmetric! */ ad = T2AA->col_offset[Gji][Ga]; kd = FBA->row_offset[Gkd][K]; FBA->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBA->params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(FBA, Gkd, kd, avirtpi[Gd]); nrows = FBA->params->coltot[Gkd]; ncols = avirtpi[Ga]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, FBA->matrix[Gkd][0], nrows, &(T2AA->matrix[Gji][ji][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(FBA->matrix[Gkd], avirtpi[Gd], FBA->params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_kLcB * E_JILA */ Gcb = Gkl = Gk ^ Gl; /* assumes totally symmetric! */ Ga = Gji ^ Gl; /* assumes totally symmetric! */ la = EAA->col_offset[Gji][Gl]; kl = T2BA->row_offset[Gkl][K]; nrows = T2BA->params->coltot[Gkl]; ncols = avirtpi[Ga]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2BA->matrix[Gkl][kl], nrows, &(EAA->matrix[Gji][ji][la]), ncols, 1.0, W2[Gcb][0], ncols); } dpd_3d_sort(W2, W1, nirreps, Gijk, FBA->params->coltot, FBA->params->colidx, FBA->params->colorb, FBA->params->rsym, FBA->params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAA->params->colidx, cba, 1); /* clean out the beta-alpha-alpha intermediate for next set of terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ if(FBA->params->coltot[Gab] && avirtpi[Gc]) { memset(W2[Gab][0], 0, FBA->params->coltot[Gab]*avirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JIBD * F_kDcA */ Gca = Gkd = Gk ^ Gd; /* assumes totally symmetric! */ Gb = Gji ^ Gd; /* assumes totally symmetric! */ bd = T2AA->col_offset[Gji][Gb]; kd = FBA->row_offset[Gkd][K]; FBA->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBA->params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(FBA, Gkd, kd, avirtpi[Gd]); nrows = FBA->params->coltot[Gkd]; ncols = avirtpi[Gb]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, FBA->matrix[Gkd][0], nrows, &(T2AA->matrix[Gji][ji][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(FBA->matrix[Gkd], avirtpi[Gd], FBA->params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_kLcA * E_JILB */ Gca = Gkl = Gk ^ Gl; /* assumes totally symmetric! */ Gb = Gji ^ Gl; /* assumes totally symmetric! */ lb = EAA->col_offset[Gji][Gl]; kl = T2BA->row_offset[Gkl][K]; nrows = T2BA->params->coltot[Gkl]; ncols = avirtpi[Gb]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2BA->matrix[Gkl][kl], nrows, &(EAA->matrix[Gji][ji][lb]), ncols, 1.0, W2[Gca][0], ncols); } dpd_3d_sort(W2, W1, nirreps, Gijk, FBA->params->coltot, FBA->params->colidx, FBA->params->colorb, FBA->params->rsym, FBA->params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAA->params->colidx, bca, 1); /* Add disconnected terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < FAA->params->coltot[Gab]; ab++) { A = FAA->params->colorb[Gab][ab][0]; B = FAA->params->colorb[Gab][ab][1]; Ga = FAA->params->rsym[A]; Gb = FAA->params->ssym[B]; a = A - avir_off[Ga]; b = B - avir_off[Gb]; Gbc = Gcb = Gb ^ Gc; Gac = Gca = Ga ^ Gc; ba = LIJAB->params->colidx[B][A]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = LIJAB->params->colidx[B][C]; cb = LIJAB->params->colidx[C][B]; ac = LIJAB->params->colidx[A][C]; ca = LIJAB->params->colidx[C][A]; /* +L_IA * D_JkBc + F_IA * L_JkBc */ if(Gi == Ga && Gjk == Gbc) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gi] && LIA->params->coltot[Gi]) { L1 = LIA->matrix[Gi][i][a]; F1 = FME->matrix[Gi][i][a]; } if(DAB->params->rowtot[Gjk] && DAB->params->coltot[Gjk]) { D2 = DAB->matrix[Gjk][jk][bc]; L2 = LIjAb->matrix[Gjk][jk][bc]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* -L_IB * D_JkAc - F_IB * L_JkAc */ if(Gi == Gb && Gjk == Gac) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gi] && LIA->params->coltot[Gi]) { L1 = LIA->matrix[Gi][i][b]; F1 = FME->matrix[Gi][i][b]; } if(DAB->params->rowtot[Gjk] && DAB->params->coltot[Gjk]) { D2 = DAB->matrix[Gjk][jk][ac]; L2 = LIjAb->matrix[Gjk][jk][ac]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* -L_JA * D_IkBc - F_JA * L_IkBc */ if(Gj == Ga && Gik == Gbc) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gj] && LIA->params->coltot[Gj]) { L1 = LIA->matrix[Gj][j][a]; F1 = FME->matrix[Gj][j][a]; } if(DAB->params->rowtot[Gik] && DAB->params->coltot[Gik]) { D2 = DAB->matrix[Gik][ik][bc]; L2 = LIjAb->matrix[Gik][ik][bc]; } W1[Gab][ab][c] -= L1 * D2 + F1 * L2; } /* +L_JB * D_IkAc + F_JB * L_IkAc */ if(Gj == Gb && Gik == Gac) { L1 = D2 = F1 = L2 = 0.0; if(LIA->params->rowtot[Gj] && LIA->params->coltot[Gj]) { L1 = LIA->matrix[Gj][j][b]; F1 = FME->matrix[Gj][j][b]; } if(DAB->params->rowtot[Gik] && DAB->params->coltot[Gik]) { D2 = DAB->matrix[Gik][ik][ac]; L2 = LIjAb->matrix[Gik][ik][ac]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } /* +L_kc * D_IJAB + F_kc * L_IJAB */ if(Gk == Gc && Gij == Gab) { L1 = D2 = F1 = L2 = 0.0; if(Lia->params->rowtot[Gk] && Lia->params->coltot[Gk]) { L1 = Lia->matrix[Gk][k][c]; F1 = Fme->matrix[Gk][k][c]; } if(DAA->params->rowtot[Gij] && DAA->params->coltot[Gij]) { D2 = DAA->matrix[Gij][ij][ab]; L2 = LIJAB->matrix[Gij][ij][ab]; } W1[Gab][ab][c] += L1 * D2 + F1 * L2; } } } } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ for(ab=0; ab < FAA->params->coltot[Gab]; ab++) { A = FAA->params->colorb[Gab][ab][0]; B = FAA->params->colorb[Gab][ab][1]; Ga = FAA->params->rsym[A]; Gb = FAA->params->ssym[B]; a = A - avir_off[Ga]; b = B - avir_off[Gb]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; denom = dijk; if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a]; if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b]; if(fab->params->rowtot[Gc]) denom -= fab->matrix[Gc][c][c]; W1[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; /* assumes totally symmetric! */ dpd_free_block(W2[Gab], FBA->params->coltot[Gab], avirtpi[Gc]); } free(W2); dpd_file2_mat_close(fIJ); dpd_file2_mat_close(fAB); dpd_file2_mat_close(fij); dpd_file2_mat_close(fab); dpd_file2_mat_close(FME); dpd_file2_mat_close(Fme); dpd_file2_mat_close(LIA); dpd_file2_mat_close(Lia); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(T2AA, h); dpd_buf4_mat_irrep_close(T2AB, h); dpd_buf4_mat_irrep_close(T2BA, h); dpd_buf4_mat_irrep_close(EAA, h); dpd_buf4_mat_irrep_close(EAB, h); dpd_buf4_mat_irrep_close(EBA, h); dpd_buf4_mat_irrep_close(DAA, h); dpd_buf4_mat_irrep_close(DAB, h); dpd_buf4_mat_irrep_close(LIJAB, h); dpd_buf4_mat_irrep_close(LIjAb, h); } } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Lamp_write.cc�����������������������������������������������������������������0000644�0001015�0000765�00000016144�11112564564�015713� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { struct onestack { double value; int i; int a; }; struct twostack { double value; int i; int j; int a; int b; }; void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen); void amp_write_L1(dpdfile2 *L1, int length, const char *label, FILE *outfile); void amp_write_L2(dpdbuf4 *L2, int length, const char *label, FILE *outfile); /* print largest elements in CC_LAMBDA */ void Lamp_write(struct L_Params L_params) { dpdfile2 L1; dpdbuf4 L2; int L_irr; L_irr = L_params.irrep; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); amp_write_L1(&L1, params.num_amps, "\n\tLargest LIA Amplitudes:\n", outfile); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); amp_write_L2(&L2, params.num_amps, "\n\tLargest LIjAb Amplitudes:\n", outfile); dpd_buf4_close(&L2); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); amp_write_L1(&L1, params.num_amps, "\n\tLargest LIA Amplitudes:\n", outfile); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "Lia"); amp_write_L1(&L1, params.num_amps, "\n\tLargest Lia Amplitudes:\n", outfile); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); amp_write_L2(&L2, params.num_amps, "\n\tLargest LIJAB Amplitudes:\n", outfile); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); amp_write_L2(&L2, params.num_amps, "\n\tLargest Lijab Amplitudes:\n", outfile); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); amp_write_L2(&L2, params.num_amps, "\n\tLargest LIjAb Amplitudes:\n", outfile); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); amp_write_L1(&L1, params.num_amps, "\n\tLargest LIA Amplitudes:\n", outfile); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 2, 3, "Lia"); amp_write_L1(&L1, params.num_amps, "\n\tLargest Lia Amplitudes:\n", outfile); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); amp_write_L2(&L2, params.num_amps, "\n\tLargest LIJAB Amplitudes:\n", outfile); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); amp_write_L2(&L2, params.num_amps, "\n\tLargest Lijab Amplitudes:\n", outfile); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); amp_write_L2(&L2, params.num_amps, "\n\tLargest LIjAb Amplitudes:\n", outfile); dpd_buf4_close(&L2); } } void amp_write_L1(dpdfile2 *L1, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gia; int i, I, a, A, numt1; int num2print=0; double value; struct onestack *t1stack; nirreps = L1->params->nirreps; Gia = L1->my_irrep; t1stack = (struct onestack *) malloc(length * sizeof(struct onestack)); for(m=0; m < length; m++) { t1stack[m].value = 0; t1stack[m].i = 0; t1stack[m].a = 0; } dpd_file2_mat_init(L1); dpd_file2_mat_rd(L1); numt1 = 0; for(h=0; h < nirreps; h++) { numt1 += L1->params->rowtot[h] * L1->params->coltot[h^Gia]; for(i=0; i < L1->params->rowtot[h]; i++) { I = L1->params->roworb[h][i]; for(a=0; a < L1->params->coltot[h^Gia]; a++) { A = L1->params->colorb[h][a]; value = L1->matrix[h][i][a]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t1stack[m].value)) > 1e-12) { onestack_insert(t1stack, value, I, A, m, length); break; } } } } } dpd_file2_mat_close(L1); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) fprintf(outfile, "\t %3d %3d %20.10f\n", t1stack[m].i, t1stack[m].a, t1stack[m].value); free(t1stack); } void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } void amp_write_L2(dpdbuf4 *L2, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gijab, numt2; int ij, ab, i, j, a, b; int num2print=0; double value; struct twostack *t2stack; nirreps = L2->params->nirreps; Gijab = L2->file.my_irrep; t2stack = (struct twostack *) malloc(length * sizeof(struct twostack)); for(m=0; m < length; m++) { t2stack[m].value = 0; t2stack[m].i = 0; t2stack[m].j = 0; t2stack[m].a = 0; t2stack[m].b = 0; } numt2 = 0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(L2, h); dpd_buf4_mat_irrep_rd(L2, h); numt2 += L2->params->rowtot[h] * L2->params->coltot[h^Gijab]; for(ij=0; ij < L2->params->rowtot[h]; ij++) { i = L2->params->roworb[h][ij][0]; j = L2->params->roworb[h][ij][1]; for(ab=0; ab < L2->params->coltot[h^Gijab]; ab++) { a = L2->params->colorb[h^Gijab][ab][0]; b = L2->params->colorb[h^Gijab][ab][1]; value = L2->matrix[h][ij][ab]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t2stack[m].value)) > 1e-12) { twostack_insert(t2stack, value, i, j, a, b, m, length); break; } } } } dpd_buf4_mat_irrep_close(L2, h); } for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) fprintf(outfile, "\t%3d %3d %3d %3d %20.10f\n", t2stack[m].i, t2stack[m].j, t2stack[m].a, t2stack[m].b, t2stack[m].value); free(t2stack); } void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen) { int l; struct twostack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].j = j; stack[level].a = a; stack[level].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].j = j; stack[l+1].a = a; stack[l+1].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; } } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Lmag.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000002272�10757640026�014467� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void Lmag(int L_irr) { dpdfile2 R1, L1, LIA, Lia, RIA, Ria; dpdbuf4 R2, L2, LIJAB, Lijab, LIjAb, RIJAB, Rijab, RIjAb; double norm; if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); norm = dpd_file2_dot_self(&LIA); norm += dpd_file2_dot_self(&Lia); norm += dpd_buf4_dot_self(&LIJAB); norm += dpd_buf4_dot_self(&Lijab); norm += dpd_buf4_dot_self(&LIjAb); fprintf(outfile,"size of L <L|L> %15.10lf\n",norm); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); } } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Lnorm.cc����������������������������������������������������������������������0000644�0001015�0000765�00000007555�10757640026�014707� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { extern double pseudoenergy(struct L_Params L_params); void Lnorm(struct L_Params L_params) { dpdfile2 R1, L1, LIA, Lia, RIA, Ria; dpdbuf4 R2, L2, LIJAB, Lijab, LIjAb, RIJAB, Rijab, RIjAb; double tval, overlap, overlap0, overlap1, overlap2, L0; char R1A_lbl[32], R1B_lbl[32], R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; int L_irr; L_irr = L_params.irrep; if (L_params.ground) L0 = 1.0; else L0 = 0.0; sprintf(R1A_lbl, "RIA %d %d", L_irr, L_params.root); sprintf(R1B_lbl, "Ria %d %d", L_irr, L_params.root); sprintf(R2AA_lbl, "RIJAB %d %d", L_irr, L_params.root); sprintf(R2BB_lbl, "Rijab %d %d", L_irr, L_params.root); sprintf(R2AB_lbl, "RIjAb %d %d", L_irr, L_params.root); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ overlap0 = L0 * L_params.R0; dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1A_lbl); overlap1 = dpd_file2_dot(&LIA, &R1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1B_lbl); overlap1 += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2AA_lbl); overlap2 = dpd_buf4_dot(&LIJAB, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2BB_lbl); overlap2 += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 0, 5, 0, 5, 0, R2AB_lbl); overlap2 += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } else { overlap0 = L0 * L_params.R0; dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_file2_init(&R1, CC_RAMPS, L_irr, 0, 1, R1A_lbl); overlap1 = dpd_file2_dot(&LIA, &R1); dpd_file2_close(&R1); dpd_file2_init(&R1, CC_RAMPS, L_irr, 2, 3, R1B_lbl); overlap1 += dpd_file2_dot(&Lia, &R1); dpd_file2_close(&R1); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 2, 7, 2, 7, 0, R2AA_lbl); overlap2 = dpd_buf4_dot(&LIJAB, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 12, 17, 12, 17, 0, R2BB_lbl); overlap2 += dpd_buf4_dot(&Lijab, &R2); dpd_buf4_close(&R2); dpd_buf4_init(&R2, CC_RAMPS, L_irr, 22, 28, 22, 28, 0, R2AB_lbl); overlap2 += dpd_buf4_dot(&LIjAb, &R2); dpd_buf4_close(&R2); } overlap = overlap0 + overlap1 + overlap2; fprintf(outfile,"\n\tInitial <L|R> = %15.10lf\n", overlap); dpd_file2_scm(&LIA, 1.0/overlap); dpd_file2_scm(&Lia, 1.0/overlap); dpd_buf4_scm(&LIJAB, 1.0/overlap); dpd_buf4_scm(&Lijab, 1.0/overlap); dpd_buf4_scm(&LIjAb, 1.0/overlap); fprintf(outfile,"\tNormalizing L...\n"); fprintf(outfile,"\tL0 * R0 = %15.10lf\n", overlap0/overlap); fprintf(outfile,"\tL1 * R1 = %15.10lf\n", overlap1/overlap); fprintf(outfile,"\tL2 * R2 = %15.10lf\n", overlap2/overlap); fprintf(outfile,"\t <L|R> = %15.10lf\n", overlap/overlap); dpd_file2_close(&LIA); dpd_file2_close(&Lia); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Lijab); dpd_buf4_close(&LIjAb); tval = pseudoenergy(L_params); fprintf(outfile,"\tPseudoenergy or Norm of normalized L = %20.15lf\n",tval); return; } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/local.cc����������������������������������������������������������������������0000644�0001015�0000765�00000023165�10757640026�014705� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libint/libint.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void local_init(void) { chkpt_init(PSIO_OPEN_OLD); local.natom = chkpt_rd_natom(); chkpt_close(); local.nso = moinfo.nso; local.nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ local.nvir = moinfo.virtpi[0]; /* active virtual orbitals */ fprintf(outfile, "\tLocalization parameters ready.\n\n"); fflush(outfile); } void local_done(void) { fprintf(outfile, "\tLocal parameters free.\n"); } void local_filter_T1(dpdfile2 *T1) { int i, a, ij, ii; int nocc, nvir; double *T1tilde, *T1bar; psio_address next; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); for(i=0; i < nocc; i++) { ii = i * nocc + i; /* diagonal element of pair matrices */ if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(PSI_RETURN_FAILURE); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); /* Apply the denominators */ for(a=0; a < local.pairdom_nrlen[ii]; a++) T1bar[a] /= (local.eps_occ[i] - local.eps_vir[ii][a]); /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(T1->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(T1); dpd_file2_mat_close(T1); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); } void local_filter_T2(dpdbuf4 *T2) { int ij, i, j, a, b; int nso, nocc, nvir; double **X1, **X2, **T2tilde, **T2bar; psio_address next; nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.weak_pairs = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, nocc*nocc*sizeof(int)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { if(!local.weak_pairs[ij]) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', local.pairdom_len[ij], nvir, nvir, 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < local.pairdom_nrlen[ij]; a++) { for(b=0; b < local.pairdom_nrlen[ij]; b++) { T2bar[a][b] /= (local.eps_occ[i] + local.eps_occ[j] - local.eps_vir[ij][a] - local.eps_vir[ij][b]); } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', local.pairdom_len[ij], local.pairdom_len[ij], local.pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } else /* This must be a neglected weak pair; force it to zero */ memset((void *) T2->matrix[0][ij], 0, nvir*nvir*sizeof(double)); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Local.h�����������������������������������������������������������������������0000644�0001015�0000765�00000001043�10754663017�014500� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ namespace psi { namespace cclambda { struct Local { int natom; int nso; int nocc; int nvir; int *aostart; int *aostop; int **domain; int **pairdomain; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; char *method; char *weakp; int filter_singles; double cphf_cutoff; char *freeze_core; char *pairdef; }; }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Lsave.cc����������������������������������������������������������������������0000644�0001015�0000765�00000003412�10757640026�014656� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void Lsave(int L_irr) { dpdfile2 L1; dpdbuf4 L2; if(params.ref == 0 || params.ref == 1) { /** ROHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&L1, CC_LAMBDA, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "New Lia"); dpd_file2_copy(&L1, CC_LAMBDA, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_copy(&L2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "New LIA"); dpd_file2_copy(&L1, CC_LAMBDA, "LIA"); dpd_file2_close(&L1); dpd_file2_init(&L1, CC_LAMBDA, L_irr, 2, 3, "New Lia"); dpd_file2_copy(&L1, CC_LAMBDA, "Lia"); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "LIJAB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_copy(&L2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "LIjAb"); dpd_buf4_close(&L2); } } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Makefile.in�������������������������������������������������������������������0000644�0001015�0000765�00000002210�10677315300�015330� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ BL2_AO.cc Lamp_write.cc cache.cc cclambda.cc init_amps.cc \ DL2.cc Lmag.cc cc2_Gai.cc check_ortho.cc local.cc \ FaeL2.cc Lnorm.cc cc2_L1.cc check_sum.cc ortho_Rs.cc \ FmiL2.cc Lsave.cc cc2_L2.cc converged.cc overlap.cc \ G.cc WabeiL1.cc cc2_faeL2.cc denom.cc overlap_LAMPS.cc \ GL2.cc WefabL2.cc cc2_fmiL2.cc diis.cc projections.cc \ L1.cc WejabL2.cc cc2_hbar_extra.cc dijabL2.cc pseudoenergy.cc \ L1FL2.cc WijmbL2.cc cc3_l3l1.cc get_moinfo.cc sort_amps.cc \ L2.cc WijmnL2.cc cc3_l3l2.cc get_params.cc spinad_amps.cc \ L3_AAA.cc WmbejL2.cc cc3_t3x.cc halftrans.cc status.cc \ L3_AAB.cc c_clean.cc cc3_t3z.cc hbar_extra.cc update.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/MOInfo.h����������������������������������������������������������������������0000644�0001015�0000765�00000005737�10754663017�014613� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ namespace psi { namespace cclambda { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; int nao; int iopen; /* 0=closed shell; >0=open shell */ int phase; /* Boolean for consistency of orbital phases */ int *sopi; /* no. of SOs per irrep */ int *sosym; /* SO symmetry (Pitzer) */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep excl. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ int nvirt; /* total no. of (active) virtual orbitals */ char **labels; /* irrep labels */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* occupied alpha orbital offsets within each irrep */ int *bocc_off; /* occupied beta orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* virtual alpha orbital offsets within each irrep */ int *bvir_off; /* virtual beta orbital offsets within each irrep */ int iter; /* Current lambda iteration */ int sym; /* symmetry of converged CCSD state */ double conv; /* Current convergence level */ double enuc; /* Nuclear repulsion energy */ double escf; /* SCF energy from chkpt */ double eref; /* Reference energy (file100) */ double ecc; /* CC energy from ccenergy */ double lcc; /* Current lambda pseudoenergy */ double ***C; /* virtual orbital transformation matr5ix (for AO-basis B terms) */ double ***Ca; /* UHF alpha virtual orbital transformation matr5ix (for AO-basis B terms) */ double ***Cb; /* UHF beta virtual orbital transformation matr5ix (for AO-basis B terms) */ }; }} // namespace psi::cclambda ���������������������������������psi3/src/bin/cclambda/ortho_Rs.cc�������������������������������������������������������������������0000644�0001015�0000765�00000006143�10757640026�015407� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { double LRi_dot(int IRR, int R_index); void LRi_minus(int IRR, int R_index, double overlap, double R0); /* this function orthogonalizes the current L vector against the previously converged R vectors. This really helps for multiple excited-state L's. - ROHF and UHF still need to be added */ void ortho_Rs(struct L_Params *pL_params, int current_L) { int L_state_index, L_root, L_irr; int R_state_index, R_root, R_irr; double **O, tval, overlap; int L, R; if (params.ref != 0) return; L_irr = pL_params[current_L].irrep; L_root = pL_params[current_L].root; for (R=1; R<params.nstates; ++R) { if (R == current_L) continue; R_irr = pL_params[R].irrep; R_root = pL_params[R].root; if (L_irr != R_irr) continue; if (params.ref == 0) overlap = LRi_dot(L_irr, R_root); if (L_root == -1) overlap += pL_params[R].R0; /* fprintf(outfile,"overlap with R[%d][%d]: %15.10lf\n", R_irr, R_root, overlap); */ LRi_minus(L_irr, R_root, overlap, pL_params[R].R0); /* overlap = LRi_dot(L_irr, R_root); if (L_root == -1) overlap += pL_params[R].R0; fprintf(outfile,"overlap with R[%d][%d]: %15.10lf\n", R_irr, R_root, overlap); */ } return; } double LRi_dot(int IRR, int R_index) { dpdfile2 R1, L1; dpdbuf4 R2, L2; double overlap; char R1A_lbl[32], lbl[32]; sprintf(R1A_lbl, "RIA %d %d", IRR, R_index); dpd_file2_init(&R1, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&L1, CC_LAMBDA, IRR, 0, 1, "New LIA"); overlap = 2.0 * dpd_file2_dot(&L1, &R1); dpd_file2_close(&R1); dpd_file2_close(&L1); sprintf(lbl, "2RIjAb - RIjbA %d %d", IRR, R_index); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&L2, CC_LAMBDA, IRR, 0, 5, 0, 5, 0, "New LIjAb"); overlap += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&L2); dpd_buf4_close(&R2); return overlap; } void LRi_minus(int IRR, int R_index, double overlap, double R0) { dpdfile2 R1, L1; dpdbuf4 R2, L2; char L1A_lbl[32], R1A_lbl[32], lbl[32]; sprintf(R1A_lbl, "RIA %d %d", IRR, R_index); dpd_file2_init(&R1, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&L1, CC_LAMBDA, IRR, 0, 1, "New LIA"); dpd_file2_axpy(&R1, &L1, -overlap/(1.0 - R0*R0), 0); dpd_file2_close(&R1); dpd_file2_close(&L1); sprintf(lbl, "RIjAb %d %d", IRR, R_index); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&L2, CC_LAMBDA, IRR, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&R2, &L2, -overlap/(1.0 - R0*R0)); dpd_buf4_close(&L2); dpd_buf4_close(&R2); dpd_file2_init(&L1, CC_LAMBDA, IRR, 0, 1, "New LIA"); dpd_file2_copy(&L1, CC_LAMBDA, "New Lia"); dpd_file2_close(&L1); /* dpd_buf4_init(&L2, CC_LAMBDA, IRR, 2, 7, 0, 5, 1, "New LIjAb"); dpd_buf4_copy(&L2, CC_LAMBDA, "New LIJAB"); dpd_buf4_copy(&L2, CC_LAMBDA, "New Lijab"); dpd_buf4_close(&L2); */ return; } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/overlap.cc��������������������������������������������������������������������0000644�0001015�0000765�00000014567�10757640026�015271� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void overlap(int L_irr) { int h, nirreps; int row, col; int i,j,a,b,I,J,A,B,Isym,Jsym,Asym,Bsym; dpdfile2 T1, L1, T1A, T1B; dpdbuf4 T2, L2; double value = 1.0; double ST1A, ST1B, ST2AA, ST2BB, ST2AB, ST12AA, ST12BB, ST12AB; nirreps = moinfo.nirreps; dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); ST1A = dpd_file2_dot(&T1, &L1); dpd_file2_close(&L1); dpd_file2_close(&T1); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); } ST1B = dpd_file2_dot(&T1, &L1); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); ST2AA = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); } ST2BB = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); } ST2AB = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); if(params.ref == 0 || params.ref == 1) /** RHF/ROHF **/ dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); else if(params.ref == 2) /** UHF **/ dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); ST12AA = 0.0; dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12AA += L2.matrix[h][row][col] * T1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; if((Isym == Bsym) && (Jsym == Asym)) ST12AA -= L2.matrix[h][row][col] * T1A.matrix[Isym][I][B] * T1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); ST12BB = 0.0; if(params.ref == 0 || params.ref == 1) dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); else if(params.ref == 2) dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12BB += L2.matrix[h][row][col] * T1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; if((Isym == Bsym) && (Jsym == Asym)) ST12BB -= L2.matrix[h][row][col] * T1B.matrix[Isym][I][B] * T1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); ST12AB = 0.0; if(params.ref == 0 || params.ref == 1) dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); else if(params.ref == 2) dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12AB += L2.matrix[h][row][col] * T1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* fprintf(outfile, "\tST1A = %20.15f\n", ST1A); fprintf(outfile, "\tST1B = %20.15f\n", ST1B); fprintf(outfile, "\tST2AA = %20.15f\n", ST2AA); fprintf(outfile, "\tST2BB = %20.15f\n", ST2BB); fprintf(outfile, "\tST2AB = %20.15f\n", ST2AB); fprintf(outfile, "\tST12AA = %20.15f\n", ST12AA); fprintf(outfile, "\tST12BB = %20.15f\n", ST12BB); fprintf(outfile, "\tST12AB = %20.15f\n", ST12AB); */ value = 1.0 - ST1A - ST1B - ST2AA - ST2BB - ST2AB + ST12AA + ST12BB + ST12AB; fprintf(outfile, "\tOverlap <L|e^T> = %20.11f\n", value); } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/overlap_LAMPS.cc��������������������������������������������������������������0000644�0001015�0000765�00000015343�10757640026�016216� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void overlap_LAMPS(struct L_Params L_params) { int h, nirreps, L_irr; int row, col; int i,j,a,b,I,J,A,B,Isym,Jsym,Asym,Bsym; dpdfile2 T1, L1, T1A, T1B; dpdbuf4 T2, L2; double value = 1.0; double ST1A, ST1B, ST2AA, ST2BB, ST2AB, ST12AA, ST12BB, ST12AB; char *L1A_lbl, *L1B_lbl, *L2AA_lbl, *L2BB_lbl, *L2AB_lbl, *L2RHF_lbl; char lbl[32]; L1A_lbl = L_params.L1A_lbl; L1B_lbl = L_params.L1B_lbl; L2AA_lbl = L_params.L2AA_lbl; L2BB_lbl = L_params.L2BB_lbl; L2AB_lbl = L_params.L2AB_lbl; L2RHF_lbl = L_params.L2RHF_lbl; nirreps = moinfo.nirreps; L_irr = L_params.irrep; dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1A_lbl); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); ST1A = dpd_file2_dot(&T1, &L1); dpd_file2_close(&L1); dpd_file2_close(&T1); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_file2_init(&L1, CC_LAMPS, L_irr, 0, 1, L1B_lbl); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&L1, CC_LAMPS, L_irr, 2, 3, L1B_lbl); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); } ST1B = dpd_file2_dot(&T1, &L1); dpd_file2_close(&L1); dpd_file2_close(&T1); dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); ST2AA = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2BB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMPS, L_irr, 12, 17, 12, 17, 0, L2BB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); } ST2BB = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMPS, L_irr, 22, 28, 22, 28, 0, L2AB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); } ST2AB = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); if(params.ref == 0 || params.ref == 1) /** RHF/ROHF **/ dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); else if(params.ref == 2) /** UHF **/ dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); ST12AA = 0.0; dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2AA_lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); 0, dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; J = T1A.params->rowidx[j]; Jsym = T1A.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; B = T1A.params->colidx[b]; Bsym = T1A.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12AA += L2.matrix[h][row][col] * T1A.matrix[Isym][I][A] * T1A.matrix[Jsym][J][B]; if((Isym == Bsym) && (Jsym == Asym)) ST12AA -= L2.matrix[h][row][col] * T1A.matrix[Isym][I][B] * T1A.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); ST12BB = 0.0; if(params.ref == 0 || params.ref == 1) dpd_buf4_init(&L2, CC_LAMPS, L_irr, 2, 7, 2, 7, 0, L2BB_lbl); else if(params.ref == 2) dpd_buf4_init(&L2, CC_LAMPS, L_irr, 12, 17, 12, 17, 0, L2BB_lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); 0, dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1B.params->rowidx[i]; Isym = T1B.params->psym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1B.params->colidx[a]; Asym = T1B.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12BB += L2.matrix[h][row][col] * T1B.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; if((Isym == Bsym) && (Jsym == Asym)) ST12BB -= L2.matrix[h][row][col] * T1B.matrix[Isym][I][B] * T1B.matrix[Jsym][J][A]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); ST12AB = 0.0; if(params.ref == 0 || params.ref == 1) dpd_buf4_init(&L2, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl); else if(params.ref == 2) dpd_buf4_init(&L2, CC_LAMPS, L_irr, 22, 28, 22, 28, 0, L2AB_lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&L2, h); 0, dpd_buf4_mat_irrep_rd(&L2, h); for(row=0; row < L2.params->rowtot[h]; row++) { i = L2.params->roworb[h][row][0]; j = L2.params->roworb[h][row][1]; I = T1A.params->rowidx[i]; Isym = T1A.params->psym[i]; J = T1B.params->rowidx[j]; Jsym = T1B.params->psym[j]; for(col=0; col < L2.params->coltot[h^L_irr]; col++) { a = L2.params->colorb[h^L_irr][col][0]; b = L2.params->colorb[h^L_irr][col][1]; A = T1A.params->colidx[a]; Asym = T1A.params->qsym[a]; B = T1B.params->colidx[b]; Bsym = T1B.params->qsym[b]; if((Isym == Asym) && (Jsym == Bsym)) ST12AB += L2.matrix[h][row][col] * T1A.matrix[Isym][I][A] * T1B.matrix[Jsym][J][B]; } } dpd_buf4_mat_irrep_close(&L2, h); } dpd_buf4_close(&L2); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); /* fprintf(outfile, "\tST1A = %20.15f\n", ST1A); fprintf(outfile, "\tST1B = %20.15f\n", ST1B); fprintf(outfile, "\tST2AA = %20.15f\n", ST2AA); fprintf(outfile, "\tST2BB = %20.15f\n", ST2BB); fprintf(outfile, "\tST2AB = %20.15f\n", ST2AB); fprintf(outfile, "\tST12AA = %20.15f\n", ST12AA); fprintf(outfile, "\tST12BB = %20.15f\n", ST12BB); fprintf(outfile, "\tST12AB = %20.15f\n", ST12AB); */ value = 1.0 - ST1A - ST1B - ST2AA - ST2BB - ST2AB + ST12AA + ST12BB + ST12AB; fprintf(outfile, "\tOverlap <L|e^T> = %20.11f\n", value); } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/Params.h����������������������������������������������������������������������0000644�0001015�0000765�00000002310�10754663017�014667� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ namespace psi { namespace cclambda { /* Input parameters for cclambda */ struct Params { int maxiter; double convergence; int restart; long int memory; int cachelev; int aobasis; char *wfn; int ref; int local; /* boolean for using simulated local-CC framework */ int nstates; /* total number of L vectors to compute */ int zeta; /* boolean for solving zeta equations - implies excited state*/ int print; int dertype; int diis; char *abcd; int sekino; /* Sekino-Bartlett size-extensive models */ /* the following should be obseleted now or soon */ int all; /* find Ls for all excited states plus ground state */ int ground; /* find L for only ground state */ int num_amps; }; struct L_Params { int irrep; /* same as corresponding R */ double R0; /* same as corresponding R */ double cceom_energy; /* same as corresponding R */ int root; /* index of root within irrep */ int ground; /* boolean, is this a ground state L ? */ char L1A_lbl[32]; char L1B_lbl[32]; char L2AA_lbl[32]; char L2BB_lbl[32]; char L2AB_lbl[32]; char L2RHF_lbl[32]; }; }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/projections.cc����������������������������������������������������������������0000644�0001015�0000765�00000033012�10757640026�016142� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* projections() computes the projection of the EOM CCSD wavefunction onto the reference, singles and doubles spaces, respectively. These values may be compared to those output by ACES2. Also, an approximate excitation level (AEL) may be defined as <Psi|S><S|Psi> + 2<Psi|D><D|Psi>. For symmetric excitations, this AEL theoretically might have a value slightly less than 1. The sum of these projections must equal 1 if R and L are normalized on this space. <Psi|0><0|Psi> = <0|Le^(-T)|0><0|Re^T|0> = R0 * (-dot_L1T1 - dot_L2T2 + 0.5*dot_L2T1T1); <Psi|S><S|Psi> = <0|Le^(-T)|S><S|Re^T|S> = R0 * (+dot_L1T1 - dot_L2T1T1) + dot_L1R1 - dot_L2T1R1; <Psi|D><D|Psi> = <0|Le^(-T)|D><D|Re^T|D> = R0 * (+dot_L2T2 + 0.5*dot_L2T1T1) + dot_L2T1R1 + dot_L2R2; where dot_L1T1 = Lme Tme dot_L2T2 = Lmnef Tmnef dot_L2T1T1 = Lmnef Tme Tnf dot_L2T1R1 = Lmnef Tme Rnf dot_L1R1 = Lme Rme dot_L2R2 = Lmnef Rmnef */ void projections(struct L_Params *pL_params) { int IRR; int i,j, root; double R0, projection_0, projection_S, projection_D, projection_tot, ael; double dot_L1T1=0, dot_L2T2=0, dot_L2T1T1=0, dot_L1R1=0, dot_L2T1R1=0; double dot_L2R2=0; char R1A_lbl[32], R1B_lbl[32], R2AA_lbl[32], R2BB_lbl[32], R2AB_lbl[32]; char L1A_lbl[32], L1B_lbl[32], L2AA_lbl[32], L2BB_lbl[32], L2AB_lbl[32], L2AB_lbl2[32]; dpdfile2 L1A, L1B, T1A, T1B, I1, R1A, R1B; dpdbuf4 T2, L2, R2; /* assumes that the excited-Rs are available */ if (params.ref == 0) { dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); } else if (params.ref == 1) { dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); } else if (params.ref == 2) { dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); } for (i=1; i<params.nstates;++i) { IRR = pL_params[i].irrep; R0 = pL_params[i].R0; root = pL_params[i].root; sprintf(R1A_lbl, "RIA %d %d", IRR, root); sprintf(R1B_lbl, "Ria %d %d", IRR, root); sprintf(R2AA_lbl, "RIJAB %d %d", IRR, root); sprintf(R2BB_lbl, "Rijab %d %d", IRR, root); sprintf(R2AB_lbl, "RIjAb %d %d", IRR, root); sprintf(L1A_lbl, "LIA %d %d", IRR, root); sprintf(L1B_lbl, "Lia %d %d", IRR, root); sprintf(L2AA_lbl, "LIJAB %d %d", IRR, root); sprintf(L2BB_lbl, "Lijab %d %d", IRR, root); sprintf(L2AB_lbl, "LIjAb %d %d", IRR, root); sprintf(L2AB_lbl2, "2LIjAb - LIjbA %d %d", IRR, root); if (params.ref == 0) { dpd_file2_init(&L1A, CC_LAMPS, IRR, 0, 1, L1A_lbl); } else if (params.ref == 1) { dpd_file2_init(&L1A, CC_LAMPS, IRR, 0, 1, L1A_lbl); dpd_file2_init(&L1B, CC_LAMPS, IRR, 0, 1, L1B_lbl); } else if (params.ref == 2) { dpd_file2_init(&L1A, CC_LAMPS, IRR, 0, 1, L1A_lbl); dpd_file2_init(&L1B, CC_LAMPS, IRR, 2, 3, L1B_lbl); } if (IRR == 0) { /* dot_L1T1 = <0|Lme Tme|0>, assuming L0=0 (excited state) */ if (params.ref == 0) { dot_L1T1 = 2.0 * dpd_file2_dot(&L1A, &T1A); } else if (params.ref >= 1) { dot_L1T1 = dpd_file2_dot(&L1A, &T1A); dot_L1T1 += dpd_file2_dot(&L1B, &T1B); } /* dot_L2T2 = <0|Lmnef Tmnef|0> */ if (params.ref == 0) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "2 tIjAb - tIjBa"); dot_L2T2 = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); } else if (params.ref == 1) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dot_L2T2 = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2BB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tijab"); dot_L2T2 += dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dot_L2T2 += dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB"); dot_L2T2 = dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 12, 17, 12, 17, 0, L2BB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab"); dot_L2T2 += dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 22, 28, 22, 28, 0, L2AB_lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dot_L2T2 += dpd_buf4_dot(&L2, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&L2); } /* dot_L2T1T1 = TNF (TME LMNEF) + Tnf (Tme Lmnef) + 2*Tnf(TME LMnEf) */ if (params.ref == 0) { dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X(N,F)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl2); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 = 2.0 * dpd_file2_dot(&T1A, &I1); dpd_file2_close(&I1); } else if (params.ref == 1) { dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X(N,F)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2AA_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 = dpd_file2_dot(&T1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2BB_lbl); dpd_dot13(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 += dpd_file2_dot(&T1B, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 += 2.0 * dpd_file2_dot(&T1B, &I1); dpd_file2_close(&I1); } else if (params.ref == 2) { dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X(N,F)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2AA_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 = dpd_file2_dot(&T1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 2, 3, "X(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 10, 15, 12, 17, 0, L2BB_lbl); dpd_dot13(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 += dpd_file2_dot(&T1B, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 2, 3, "X(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 22, 28, 22, 28, 0, L2AB_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1T1 += 2.0 * dpd_file2_dot(&T1B, &I1); dpd_file2_close(&I1); } } /* open R files */ if (params.ref == 0) { dpd_file2_init(&R1A, CC_RAMPS, IRR, 0, 1, R1A_lbl); } else if (params.ref == 1) { dpd_file2_init(&R1A, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&R1B, CC_RAMPS, IRR, 0, 1, R1B_lbl); } else if (params.ref == 2) { dpd_file2_init(&R1A, CC_RAMPS, IRR, 0, 1, R1A_lbl); dpd_file2_init(&R1B, CC_RAMPS, IRR, 2, 3, R1B_lbl); } /* dot_L1R1 = Lme Rme */ if (params.ref == 0) { dot_L1R1 = 2.0 * dpd_file2_dot(&L1A,&R1A); } else if (params.ref >= 1) { dot_L1R1 = dpd_file2_dot(&L1A,&R1A); dot_L1R1 += dpd_file2_dot(&L1B,&R1B); } /* dot_L2R2 = <0|Lmnef Rmnef|0> */ if (params.ref == 0) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl2); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, R2AB_lbl); dot_L2R2 = dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); } else if (params.ref == 1) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 2, 7, 2, 7, 0, R2AA_lbl); dot_L2R2 = dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2BB_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 2, 7, 2, 7, 0, R2BB_lbl); dot_L2R2 += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 0, 5, 0, 5, 0, R2AB_lbl); dot_L2R2 += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); } else if (params.ref == 2) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 2, 7, 2, 7, 0, L2AA_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 2, 7, 2, 7, 0, R2AA_lbl); dot_L2R2 = dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 12, 17, 12, 17, 0, L2BB_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 12, 17, 12, 17, 0, R2BB_lbl); dot_L2R2 += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMPS, IRR, 22, 28, 22, 28, 0, L2AB_lbl); dpd_buf4_init(&R2, CC_RAMPS, IRR, 22, 28, 22, 28, 0, R2AB_lbl); dot_L2R2 += dpd_buf4_dot(&L2, &R2); dpd_buf4_close(&R2); dpd_buf4_close(&L2); } /* dot_L2T1R1 = RNF (TME LMNEF) + Rnf (Tme Lmnef) */ /* + RNF (Tme LNmFe) + Rnf (TME LMnEf) */ if (params.ref == 0) { dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl2); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(N,F)"); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 = 2.0 * dpd_file2_dot(&R1A, &I1); dpd_file2_close(&I1); } else if (params.ref == 1) { dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(N,F)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2AA_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 = dpd_file2_dot(&R1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2BB_lbl); dpd_dot13(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1B, &I1); dpd_file2_close(&I1); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(N,F)"); dpd_dot24(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 0, 5, 0, L2AB_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1B, &I1); dpd_file2_close(&I1); } else if (params.ref == 2) { dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(N,F)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 0, 5, 2, 7, 0, L2AA_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 = dpd_file2_dot(&R1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 2, 3, "X2(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 10, 15, 12, 17, 0, L2BB_lbl); dpd_dot13(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1B, &I1); dpd_file2_close(&I1); dpd_buf4_init(&L2, CC_LAMPS, IRR, 22, 28, 22, 28, 0, L2AB_lbl); dpd_file2_init(&I1, CC_TMP, IRR, 0, 1, "X2(N,F)"); dpd_dot24(&T1B, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1A, &I1); dpd_file2_close(&I1); dpd_file2_init(&I1, CC_TMP, IRR, 2, 3, "X2(n,f)"); dpd_buf4_init(&L2, CC_LAMPS, IRR, 22, 28, 22, 28, 0, L2AB_lbl); dpd_dot13(&T1A, &L2, &I1, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dot_L2T1R1 += dpd_file2_dot(&R1B, &I1); dpd_file2_close(&I1); } /* close L1, R1 */ if (params.ref == 0) { dpd_file2_close(&R1A); dpd_file2_close(&L1A); } else if (params.ref >= 1) { dpd_file2_close(&R1A); dpd_file2_close(&R1B); dpd_file2_close(&L1A); dpd_file2_close(&L1B); } projection_0 = R0 * (-dot_L1T1 - dot_L2T2 + 0.5*dot_L2T1T1); projection_S = R0 * (+dot_L1T1 - dot_L2T1T1) + dot_L1R1 - dot_L2T1R1; projection_D = R0 * (+dot_L2T2 + 0.5*dot_L2T1T1) + dot_L2T1R1 + dot_L2R2; projection_tot = projection_0 + projection_S + projection_D; ael = projection_S + 2.0 * projection_D; fprintf(outfile,"\n\tProjections for excited state, irrep %s, root %d:\n", moinfo.labels[0], root); fprintf(outfile,"\t<0|Le^(-T)|0><0|Re^T|0> = %15.10lf\n", projection_0); fprintf(outfile,"\t<0|Le^(-T)|S><S|Re^T|0> = %15.10lf\n", projection_S); fprintf(outfile,"\t<0|Le^(-T)|D><D|Re^T|0> = %15.10lf\n", projection_D); fprintf(outfile,"\tSum of above = %15.10lf\n", projection_tot); fprintf(outfile,"\tApprox. excitation level = %15.10lf\n", ael); } /* sum over states */ /* close T1 */ dpd_file2_close(&T1A); if (params.ref >= 1) dpd_file2_close(&T1B); } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/pseudoenergy.cc���������������������������������������������������������������0000644�0001015�0000765�00000013333�10757640026�016320� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include <cmath> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { double pseudoenergy(struct L_Params L_params) { double LIJAB_energy, Lijab_energy, LIjAb_energy; double LIA_energy=0.0, Lia_energy=0.0, tval; dpdbuf4 LIJAB, Lijab, LIjAb, D; dpdfile2 Lia, LIA, Fme, FME; int L_irr; L_irr = L_params.irrep; if ( L_params.ground || ((L_params.irrep ==0)&&(fabs(L_params.R0)>1e-10)) ) { if(params.ref == 0) { /** RHF **/ Lia_energy = 0.0; dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); LIA_energy = dpd_file2_dot(&FME,&LIA); dpd_file2_close(&LIA); dpd_file2_close(&FME); LIJAB_energy = 0.0; Lijab_energy = 0.0; dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); LIjAb_energy = dpd_buf4_dot(&D, &LIjAb); dpd_buf4_close(&LIjAb); dpd_buf4_close(&D); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&Fme, CC_OEI, 0, 0, 1, "Fme"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); LIA_energy = dpd_file2_dot(&FME,&LIA); Lia_energy = dpd_file2_dot(&Fme,&Lia); dpd_file2_close(&Lia); dpd_file2_close(&LIA); dpd_file2_close(&Fme); dpd_file2_close(&FME); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); LIJAB_energy = dpd_buf4_dot(&D, &LIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); Lijab_energy = dpd_buf4_dot(&D, &Lijab); dpd_buf4_close(&Lijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); LIjAb_energy = dpd_buf4_dot(&D, &LIjAb); dpd_buf4_close(&LIjAb); dpd_buf4_close(&D); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&Fme, CC_OEI, 0, 2, 3, "Fme"); dpd_file2_init(&FME, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); LIA_energy = dpd_file2_dot(&FME,&LIA); Lia_energy = dpd_file2_dot(&Fme,&Lia); dpd_file2_close(&Lia); dpd_file2_close(&LIA); dpd_file2_close(&Fme); dpd_file2_close(&FME); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); LIJAB_energy = dpd_buf4_dot(&D, &LIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); Lijab_energy = dpd_buf4_dot(&D, &Lijab); dpd_buf4_close(&Lijab); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); LIjAb_energy = dpd_buf4_dot(&D, &LIjAb); dpd_buf4_close(&LIjAb); dpd_buf4_close(&D); } /* fprintf(outfile, "One A Energy = %20.14f\n", LIA_energy); fprintf(outfile, "One B Energy = %20.14f\n", Lia_energy); fprintf(outfile, "Two AA Energy = %20.14f\n", LIJAB_energy); fprintf(outfile, "Two BB Energy = %20.14f\n", Lijab_energy); fprintf(outfile, "Two AB Energy = %20.14f\n", LIjAb_energy); */ return (LIJAB_energy + Lijab_energy + LIjAb_energy); } else { /* since pseudoenergy is 0 lets compute norm instead */ if (params.ref <= 1) { /* RHF or ROHF */ dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); LIA_energy = dpd_file2_dot_self(&LIA); Lia_energy = dpd_file2_dot_self(&Lia); dpd_file2_close(&Lia); dpd_file2_close(&LIA); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); LIJAB_energy = dpd_buf4_dot_self(&LIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); Lijab_energy = dpd_buf4_dot_self(&Lijab); dpd_buf4_close(&Lijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); LIjAb_energy = dpd_buf4_dot_self(&LIjAb); dpd_buf4_close(&LIjAb); tval = LIA_energy + Lia_energy + LIJAB_energy + Lijab_energy + LIjAb_energy; tval = sqrt(tval); return tval; } else if (params.ref == 2) { /* UHF */ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); LIA_energy = dpd_file2_dot_self(&LIA); Lia_energy = dpd_file2_dot_self(&Lia); dpd_file2_close(&Lia); dpd_file2_close(&LIA); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); LIJAB_energy = dpd_buf4_dot_self(&LIJAB); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); Lijab_energy = dpd_buf4_dot_self(&Lijab); dpd_buf4_close(&Lijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); LIjAb_energy = dpd_buf4_dot_self(&LIjAb); dpd_buf4_close(&LIjAb); tval = LIA_energy + Lia_energy + LIJAB_energy + Lijab_energy + LIjAb_energy; tval = sqrt(tval); return tval; } } } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/sort_amps.cc������������������������������������������������������������������0000644�0001015�0000765�00000006603�10757640026�015620� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void sort_amps(int L_irr) { dpdbuf4 L2; if(params.ref == 0) { dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_scmcopy(&L2, CC_LAMBDA, "2 LIjAb - LIjBa", 2); dpd_buf4_sort_axpy(&L2, CC_LAMBDA, pqsr, 0, 5, "2 LIjAb - LIjBa", -1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "LIAjb"); dpd_buf4_sort(&L2, CC_LAMBDA, psqr, 10, 10, "LIbjA"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_scmcopy(&L2, CC_LAMBDA, "2 LIAjb - LIbjA", 2); dpd_buf4_sort_axpy(&L2, CC_LAMBDA, psrq, 10, 10, "2 LIAjb - LIbjA", -1); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_LAMBDA, qpsr, 0, 5, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_LAMBDA, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); } if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "LIAjb"); dpd_buf4_sort(&L2, CC_LAMBDA, psqr, 10, 10, "LIbjA"); dpd_buf4_sort(&L2, CC_LAMBDA, qpsr, 0, 5, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_LAMBDA, rqps, 10, 10, "LjAIb"); dpd_buf4_close(&L2); /* Build L2IAJB List */ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "LIAJB"); dpd_buf4_close(&L2); /* Build L2iajb List */ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "Lijab"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 10, 10, "Liajb"); dpd_buf4_close(&L2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_LAMBDA, qpsr, 23, 29, "LiJaB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "LIJAB"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 20, 20, "LIAJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 15, 12, 17, 0, "Lijab"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 30, 30, "Liajb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 20, 30, "LIAjb"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB"); dpd_buf4_sort(&L2, CC_LAMBDA, prqs, 30, 20, "LiaJB"); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_sort(&L2, CC_LAMBDA, psrq, 24, 27, "LIbjA"); dpd_buf4_sort(&L2, CC_LAMBDA, rqps, 27, 24, "LjAIb"); dpd_buf4_close(&L2); } } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/spinad_amps.cc����������������������������������������������������������������0000644�0001015�0000765�00000001670�10757640026�016106� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include <ccfiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* spinad_amps(): For RHF references, build the T2 AA and BB amplitudes from ** the existing T2 AB amplitudes and copy the existing T1 A amplitudes ** into B. ** ** T2(IJ,AB) = T2(ij,ab) = T2(Ij,Ab) - T2(Ij,Ba) ** ** T1(I,A) = T1(i,a) ** */ void spinad_amps(void) { dpdfile2 T1; dpdbuf4 T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&T1, CC_LAMBDA, 0, 0, 1, "LIA"); dpd_file2_copy(&T1, CC_LAMBDA, "Lia"); dpd_file2_close(&T1); dpd_buf4_init(&T2, CC_LAMBDA, 0, 2, 7, 0, 5, 1, "LIjAb"); dpd_buf4_copy(&T2, CC_LAMBDA, "LIJAB"); dpd_buf4_copy(&T2, CC_LAMBDA, "Lijab"); dpd_buf4_close(&T2); } } }} // namespace psi::cclambda ������������������������������������������������������������������������psi3/src/bin/cclambda/status.cc���������������������������������������������������������������������0000644�0001015�0000765�00000000423�11112564564�015124� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> namespace psi { namespace cclambda { void status(const char *s, FILE *out) { fprintf(out, " %-15s...complete\n", s); fflush(out); } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/update.cc���������������������������������������������������������������������0000644�0001015�0000765�00000000574�10757640026�015074� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void update(void) { fprintf(outfile,"\t%4d %20.15f %4.3e\n",moinfo.iter,moinfo.lcc, moinfo.conv); fflush(outfile); } }} // namespace psi::cclambda ������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WabeiL1.cc��������������������������������������������������������������������0000644�0001015�0000765�00000002623�10757640026�015033� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void WabeiL1(int L_irr) { dpdfile2 newL1; dpdbuf4 W, L2; dpd_file2_init(&newL1, CC_LAMBDA, L_irr, 0, 1, "New L(I,A)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "W(AM,EF)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "L2(IM,EF)"); dpd_contract442(&L2, &W, &newL1, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "W(Am,Ef)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "L2(Im,Ef)"); dpd_contract442(&L2, &W, &newL1, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_file2_close(&newL1); dpd_file2_init(&newL1, CC_LAMBDA, L_irr, 0, 1, "New L(i,a)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "W(am,ef)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "L2(im,ef)"); dpd_contract442(&L2, &W, &newL1, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "W(aM,eF)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "L2(iM,eF)"); dpd_contract442(&L2, &W, &newL1, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_file2_close(&newL1); } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WefabL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000046170�10757640026�015036� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cmath> #include <libqt/qt.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* WefabL2(): Computes the contribution of the Wefab HBAR matrix ** elements to the Lambda double de-excitation amplitude equations. ** These contributions are given in spin-orbitals as: ** ** L_ij^ab = 1/2 L_ij^ef Wefab ** ** where W_efab is defined in spin orbitals as: ** ** Wefab = <ef||ab> - P(ef) t_m^f <em||ab> + 1/2 tau_mn^ef <mn||ab> ** ** and tau_mn^ef = t_mn^ef + t_m^e t_n^f - t_m^f t_n^e. ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).] ** ** NB: Wefab is not symmetric, so one must be careful when defining ** intermediate quantities for efficient contractions. I use the ** following contraction steps for each spin case: ** ** Wefab term II spin cases: ** ** L_IJ^AB <-- 1/2 ( -t_M^F <EM||AB> L_IJ^EF + t_M^E <FM||AB> L_IJ^EF ) ** ** Z(IJ,EM) = -t_M^F L_IJ^EF ** ** L_IJ^AB <-- Z(IJ,EM) <EM||AB> ******* ** L_ij^ab <-- 1/2 ( -t_m^f <em||ab> L_ij^ef + t_m^e <fm||ab> L_ij^ef ) ** ** Z(ij,em) = -t_m^f L_ij^ef ** ** L_ij^ab <-- Z(ij,em) <em||ab> ******* ** L_Ij^Ab <-- -t_m^f <Em|Ab> L_Ij^Ef - t_M^E <Mf|Ab> L_Ij^Ef ** ** Z(Ij,Em) = -t_m^f L_Ij^Ef ** Z(Ij,Mf) = -t_M^E L_Ij^Ef ** ** L_Ij^Ab <-- Z(Ij,Em) <Em|Ab> + Z(Ij,Mf) <Mf|Ab> ** ** Wefab term III: ** ** L_IJ^AB <-- 1/4 tau_MN^EF <MN||AB> L_IJ^EF ** ** Z(IJ,MN) = 1/2 tau_MN^EF L_IJ^EF ** ** L_IJ^AB <-- 1/2 Z(IJ,MN) <MN||AB> ******* ** L_ij^ab <-- 1/4 tau_mn^ef <mn||ab> L_ij^ef ** ** Z(ij,mn) = 1/2 tau_mn^ef L_ij^ef ** ** L_ij^ab <-- 1/2 Z(ij,mn) <mn||ab> ******* ** L_Ij^Ab <-- tau_Mn^Ef <Mn|Ab> L_Ij^Ef ** ** Z(Ij,Mn) = tau_Mn^Ef L_Ij^Ef ** ** L_Ij^Ab <-- Z(Ij,Mn) <Mn|Ab> ******* ** ** TDC, July 2002 */ void WefabL2(int L_irr) { dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLijab, newLIJAB, newLIjAb; dpdbuf4 Tau, T2, Z, Z1, Z2, L, L2, B, D, F, Ltmp; dpdfile2 tIA, tia; dpdbuf4 tau_a, tau_s, tau; dpdbuf4 B_a, B_s; dpdbuf4 S, A; int h; double **B_diag, **tau_diag; int ij, Gc, C, c, cc; int nbuckets, rows_per_bucket, rows_left, m, row_start, ab, cd, dc, d; int nrows, ncols, nlinks; psio_address next; /* RHS += Wefab*Lijef */ if(params.ref == 0) { /** RHF **/ if(!strcmp(params.abcd,"OLD")) { dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "ZAbIj"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract444(&B, &LIjAb, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_buf4_close(&LIjAb); } else if(!strcmp(params.abcd,"NEW")) { timer_on("ABCD:new"); /* L_a(-)(ij,ab) (i>j, a>b) = L(ij,ab) - L(ij,ba) */ dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 4, 9, 0, 5, 1, "LIjAb"); dpd_buf4_copy(&tau_a, CC_LAMBDA, "L(-)(ij,ab)"); dpd_buf4_close(&tau_a); /* L_s(+)(ij,ab) (i>=j, a>=b) = L(ij,ab) + L(ij,ba) */ dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_copy(&tau_a, CC_TMP0, "L(+)(ij,ab)"); dpd_buf4_sort_axpy(&tau_a, CC_TMP0, pqsr, 0, 5, "L(+)(ij,ab)", 1); dpd_buf4_close(&tau_a); dpd_buf4_init(&tau_a, CC_TMP0, L_irr, 3, 8, 0, 5, 0, "L(+)(ij,ab)"); dpd_buf4_copy(&tau_a, CC_LAMBDA, "L(+)(ij,ab)"); dpd_buf4_close(&tau_a); timer_on("ABCD:S"); dpd_buf4_init(&tau_s, CC_LAMBDA, L_irr, 3, 8, 3, 8, 0, "L(+)(ij,ab)"); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, CC_TMP0, L_irr, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_contract444(&B_s, &tau_s, &S, 0, 0, 0.5, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_buf4_close(&tau_s); timer_off("ABCD:S"); /* L_diag(ij,c) = 2 * L(ij,cc)*/ /* NB: Gcc = 0, and B is totally symmetric, so Gab = 0 */ /* But Gij = L_irr ^ Gab = L_irr */ dpd_buf4_init(&tau, CC_LAMBDA, L_irr, 3, 8, 3, 8, 0, "L(+)(ij,ab)"); dpd_buf4_mat_irrep_init(&tau, L_irr); dpd_buf4_mat_irrep_rd(&tau, L_irr); tau_diag = dpd_block_matrix(tau.params->rowtot[L_irr], moinfo.nvirt); for(ij=0; ij < tau.params->rowtot[L_irr]; ij++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = C + moinfo.vir_off[Gc]; cc = tau.params->colidx[c][c]; tau_diag[ij][c] = tau.matrix[L_irr][ij][cc]; } dpd_buf4_mat_irrep_close(&tau, L_irr); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&S, CC_TMP0, L_irr, 8, 3, 8, 3, 0, "S(ab,ij)"); dpd_buf4_mat_irrep_init(&S, 0); dpd_buf4_mat_irrep_rd(&S, 0); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + moinfo.nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; B_diag = dpd_block_matrix(rows_per_bucket, moinfo.nvirt); next = PSIO_ZERO; ncols = tau.params->rowtot[L_irr]; nlinks = moinfo.nvirt; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; nrows = rows_per_bucket; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } if(rows_left) { row_start = m * rows_per_bucket; nrows = rows_left; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } dpd_buf4_mat_irrep_wrt(&S, 0); dpd_buf4_mat_irrep_close(&S, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_free_block(B_diag, rows_per_bucket, moinfo.nvirt); dpd_free_block(tau_diag, tau.params->rowtot[L_irr], moinfo.nvirt); dpd_buf4_close(&tau); timer_on("ABCD:A"); dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 4, 9, 4, 9, 0, "L(-)(ij,ab)"); dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_init(&A, CC_TMP0, L_irr, 9, 4, 9, 4, 0, "A(ab,ij)"); dpd_contract444(&B_a, &tau_a, &A, 0, 0, 0.5, 0); dpd_buf4_close(&A); dpd_buf4_close(&B_a); dpd_buf4_close(&tau_a); timer_off("ABCD:A"); timer_on("ABCD:axpy"); dpd_buf4_init(&S, CC_TMP0, L_irr, 5, 0, 8, 3, 0, "S(ab,ij)"); dpd_buf4_sort_axpy(&S, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1); dpd_buf4_close(&S); dpd_buf4_init(&A, CC_TMP0, L_irr, 5, 0, 9, 4, 0, "A(ab,ij)"); dpd_buf4_sort_axpy(&A, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1); dpd_buf4_close(&A); timer_off("ABCD:axpy"); timer_off("ABCD:new"); } dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 0, 10, 0, 0, "Z(Mf,Ij)"); dpd_contract244(&tIA, &LIjAb, &Z, 1, 2, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&LIjAb); dpd_file2_close(&tIA); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 0, 10, 0, 0, "Z(Mf,Ij)"); dpd_buf4_init(&Z1, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "Z(Ab,Ij)"); dpd_contract444(&F, &Z, &Z1, 1, 1, -1, 0); dpd_buf4_close(&Z); dpd_buf4_close(&F); dpd_buf4_close(&newLIjAb); dpd_buf4_sort_axpy(&Z1, CC_LAMBDA, srqp, 0, 5, "New LIjAb", 1); dpd_buf4_sort_axpy(&Z1, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&Tau); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&Z, &D, &newLIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_close(&newLIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Z, CC_TMP2, L_irr, 7, 2, 7, 2, 0, "ZABIJ"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract444(&B, &LIJAB, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New LIJAB", 1); dpd_buf4_close(&LIJAB); dpd_buf4_close(&Z); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_buf4_init(&Ltmp, CC_TMP0, L_irr, 2, 10, 2, 10, 0, "Ltmp (I>J,MF)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_contract244(&tIA, &LIJAB, &Ltmp, 1, 2, 1, 1.0, 0.0); dpd_contract444(&Ltmp, &F, &newLIJAB, 0, 1, -1.0, 1.0); dpd_buf4_close(&F); dpd_buf4_close(&Ltmp); dpd_buf4_close(&LIJAB); dpd_buf4_init(&Z, CC_TMP0, L_irr, 2, 2, 2, 2, 0, "Z(IJ,MN)"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&Tau); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&Z, &D, &newLIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&Z, CC_TMP2, L_irr, 7, 2, 7, 2, 0, "Zabij"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>"); dpd_contract444(&B, &Lijab, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_close(&Lijab); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New Lijab", 1); dpd_buf4_close(&Z); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab"); dpd_buf4_init(&Ltmp, CC_TMP0, L_irr, 2, 10, 2, 10, 0, "Ltmp (i>j,mf)"); dpd_buf4_init(&F, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>"); dpd_contract244(&tia, &Lijab, &Ltmp, 1, 2, 1, 1.0, 0.0); dpd_contract444(&Ltmp, &F, &newLijab, 0, 1, -1.0, 1.0); dpd_buf4_close(&F); dpd_buf4_close(&Ltmp); dpd_buf4_close(&Lijab); dpd_buf4_init(&Z, CC_TMP0, L_irr, 2, 2, 2, 2, 0, "Z(ij,mn)"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&Tau); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&Z, &D, &newLijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&Z, CC_TMP2, L_irr, 5, 0, 5, 0, 0, "ZAbIj"); dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract444(&B, &LIjAb, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&Ltmp, CC_TMP1, L_irr, 0, 11, 0, 11, 0, "Lt (Ij,Em)"); dpd_contract424(&LIjAb, &tia, &Ltmp, 3, 1, 0, 1.0, 0.0); dpd_buf4_sort(&Ltmp, CC_TMP2, pqsr, 0, 10, "Lt (Ij,mE)"); dpd_buf4_close(&Ltmp); dpd_buf4_init(&Ltmp, CC_TMP3, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,Mf)"); dpd_contract244(&tIA, &LIjAb, &Ltmp, 1, 2, 1, 1.0, 0.0); dpd_buf4_close(&Ltmp); dpd_buf4_close(&LIjAb); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Ltmp, CC_TMP3, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,Mf)"); dpd_contract444(&Ltmp, &F, &newLIjAb, 0, 1, -1.0, 1.0); dpd_buf4_close(&Ltmp); dpd_buf4_sort(&F, CC_TMP0, pqsr, 10, 5, "<me|ab> (mE,Ab)"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "<me|ab> (mE,Ab)"); dpd_buf4_init(&Ltmp, CC_TMP2, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,mE)"); dpd_contract444(&Ltmp, &F, &newLIjAb, 0, 1, -1.0, 1.0); dpd_buf4_close(&Ltmp); dpd_buf4_close(&F); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)"); dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&Tau); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&Z, &D, &newLIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&D); dpd_buf4_close(&Z); dpd_buf4_close(&newLIjAb); dpd_file2_close(&tIA); dpd_file2_close(&tia); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia"); /** Z(AB,IJ) = <AB||CD> L(IJ,CD) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 7, 2, 7, 2, 0, "Z(AB,IJ)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>"); dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_close(&L2); /** Z(AB,IJ) --> New L(IJ,AB) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New LIJAB", 1); dpd_buf4_close(&Z); /** Z(IJ,EM) = -L(IJ,EFf) t(M,F) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 2, 21, 2, 21, 0, "Z(IJ,EM)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB"); dpd_contract424(&L2, &tIA, &Z, 3, 1, 0, -1, 0); dpd_buf4_close(&L2); /** New L(IJ,AB) <-- Z(IJ,EM) <EM||AB> **/ dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1); dpd_buf4_close(&L2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(IJ,MN) = 1/2 L(IJ,EF) tau_MN^EF **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 2, 2, 2, 2, 0, "Z(IJ,MN)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); /** New L(IJ,AB) <-- 1/2 Z(IJ,MN) <MN||AB> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)"); dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&L2); dpd_buf4_close(&Z); /** Z(ab,ij) = <ab||cd> L(ij,cd) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 17, 12, 17, 12, 0, "Z(ab,ij)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&B, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>"); dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_close(&L2); /** Z(ab,ij) --> New L(ij,ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 12, 17, "New Lijab", 1); dpd_buf4_close(&Z); /** Z(ij,em) = -L(ij,ef) t(m,f) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 12, 31, 12, 31, 0, "Z(ij,em)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab"); dpd_contract424(&L2, &tia, &Z, 3, 1, 0, -1, 0); dpd_buf4_close(&L2); /** New L(ij,ab) <-- Z(ij,em) <em||ab> **/ dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1); dpd_buf4_close(&L2); dpd_buf4_close(&F); dpd_buf4_close(&Z); /** Z(ij,mn) = 1/2 L(ij,ef) tau_mn^ef **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 12, 12, 12, 12, 0, "Z(ij,mn)"); dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&L2); dpd_buf4_close(&T2); /** New L(ij,ab) <-- 1/2 Z(ij,mn) <mn||ab> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)"); dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&L2); dpd_buf4_close(&Z); /** Z(Ab,Ij) = <Ab|Cd> L(Ij,Cd) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 28, 22, 28, 22, 0, "Z(Ab,Ij)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>"); dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0); dpd_buf4_close(&B); dpd_buf4_close(&L2); /** Z(Ab,Ij) --> New L(Ij,Ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); /** Z(Ij,Em) = -L(Ij,Ef) t(m,f) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 26, 22, 26, 0, "Z(Ij,Em)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract424(&L2, &tia, &Z, 3, 1, 0, -1, 0); dpd_buf4_close(&L2); /** New L(Ij,Ab) <-- Z(Ij,Em) <Em|Ab> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>"); dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&L2); dpd_buf4_close(&Z); /** Z(Ij,Mf) = -t(M,E) L(Ij,Ef) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 24, 22, 24, 0, "Z(Ij,Mf)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_contract244(&tIA, &L2, &Z, 1, 2, 1, -1, 0); dpd_buf4_close(&L2); /** New L(Ij,Ab) <-- Z(Ij,Mf) <Mf|Ab> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1); dpd_buf4_close(&F); dpd_buf4_close(&L2); dpd_buf4_close(&Z); /** Z(Ij,Mn) = L(Ij,Ef) tau(Mn,Ef) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 22, 22, 22, 0, "Z(Ij,Mn)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb"); dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&L2); /** New L(Ij,Ab) <-- Z(Ij,Mn) <Mn|Ab> **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1); dpd_buf4_close(&D); dpd_buf4_close(&L2); dpd_buf4_close(&Z); dpd_file2_close(&tIA); dpd_file2_close(&tia); } } }} // namespace psi::cclambda ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WejabL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000017130�10757640026�015034� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* WejabL2(): Computes the contribution of the Wamef HBAR matrix ** elements to the Lambda double de-excitation amplitude equations. ** These contributions are given in spin orbitals as: ** ** L_ij^ab = P(ij) L_i^e Wejab ** ** where Wejab = Wamef and is defined as: ** ** Wamef = <am||ef> - t_n^a <nm||ef> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).] ** ** By spin case of L_ij^ab, these contributions are computed as: ** ** L(IJ,AB) = L(I,E) W(EJ,AB) - L(J,E) W(EI,AB) (only one unique contraction) ** L(ij,ab) = L(i,e) W(ej,ab) - L(j,e) W(ei,ab) (only one unique contraction) ** L(Ij,Ab) = L(I,E) W(Ej,Ab) + L(j,e) W(eI,bA) ** ** TDC, July 2002 ** ** NB: The ROHF case needs to be re-written to use (AM,EF) ordering ** for the Wamef matrix elements, as I've done for the UHF case. */ void WejabL2(int L_irr) { int GW, GL1, GZ, Gej, Gab, Gi, Ge, Gij, Gj, Ga; int e, E, i, I, num_j, num_i, num_e, nlinks; dpdbuf4 W, L2; dpdfile2 LIA, Lia; dpdbuf4 Z, Z1, Z2; /* RHS += P(ij) Lie * Wejab */ if(params.ref == 0) { /** RHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "ZIjAb"); dpd_buf4_scm(&Z, 0); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); /* dpd_contract244(&LIA, &W, &Z, 1, 2, 1, 1, 0); */ /* Out-of-core contract244 */ GW = W.file.my_irrep; GZ = Z.file.my_irrep; GL1 = LIA.my_irrep; dpd_file2_mat_init(&LIA); dpd_file2_mat_rd(&LIA); for(Gej=0; Gej < moinfo.nirreps; Gej++) { Gab = Gej^GW; Gij = Gab^GZ; dpd_buf4_mat_irrep_init(&Z, Gij); for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gi = Ge^GL1; Gj = GZ^Gab^Gi; num_j = Z.params->qpi[Gj]; num_i = LIA.params->rowtot[Gi]; num_e = LIA.params->coltot[Ge]; dpd_buf4_mat_irrep_init_block(&W, Gej, num_j); for(e=0; e < num_e; e++) { E = W.params->poff[Ge] + e; dpd_buf4_mat_irrep_rd_block(&W, Gej, W.row_offset[Gej][E], num_j); for(i=0; i < num_i; i++) { I = Z.params->poff[Gi] + i; nlinks = Z.params->coltot[Gab] * num_j; if(nlinks) { C_DAXPY(nlinks, LIA.matrix[Gi][i][e], &(W.matrix[Gej][0][0]),1, &(Z.matrix[Gij][Z.row_offset[Gij][I]][0]),1); } } } dpd_buf4_mat_irrep_close_block(&W, Gej, num_j); } dpd_buf4_mat_irrep_wrt(&Z, Gij); dpd_buf4_mat_irrep_close(&Z, Gij); } dpd_file2_mat_close(&LIA); /* End out-of-core contract244 */ dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&Z, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&LIA); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); /** Z(IJ,AB) = L(I,E) W(EJ,AB) **/ dpd_buf4_init(&Z1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(IJ,A>B)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF"); dpd_contract244(&LIA, &W, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(IJ,AB) --> Z(JI,AB) **/ dpd_buf4_sort(&Z1, CC_TMP1, qprs, 0, 7, "Z(JI,A>B)"); /** Z(IJ,AB) = Z(IJ,AB) - Z(JI,AB) **/ dpd_buf4_init(&Z2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(JI,A>B)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(IJ,AB) --> New L(IJ,AB) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** Z(ij,ab) = L(i,e) W(ej,ab) **/ dpd_buf4_init(&Z1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(ij,a>b)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef"); dpd_contract244(&Lia, &W, &Z1, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(ij,ab) --> Z(ji,ab) **/ dpd_buf4_sort(&Z1, CC_TMP1, qprs, 0, 7, "Z(ji,a>b)"); /** Z(ij,ab) = Z(ij,ab) - Z(ji,ab) **/ dpd_buf4_init(&Z2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(ji,a>b)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(ij,ab) --> New L(ij,ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** New L(Ij,Ab) <-- L(I,E) W(Ej,Ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract244(&LIA, &W, &L2, 1, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); /** Z(jI,bA) = -L(j,e) W(eI,bA) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF"); dpd_contract244(&Lia, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(jI,bA) --> New L(Ij,Ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qpsr, 0, 5, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&Lia); dpd_file2_close(&LIA); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); /** Z(IJ,AB) = L(I,E) W(EJ,AB) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(IJ,AB)"); dpd_buf4_init(&W, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF"); dpd_contract244(&LIA, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(IJ,AB) --> Z(JI,AB) **/ dpd_buf4_sort(&Z, CC_TMP1, qprs, 0, 7, "Z(JI,AB)"); dpd_buf4_close(&Z); /** Z(IJ,AB) = Z(IJ,AB) - Z(JI,AB) **/ dpd_buf4_init(&Z1, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(IJ,AB)"); dpd_buf4_init(&Z2, CC_TMP1, L_irr, 0, 7, 0, 7, 0, "Z(JI,AB)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(IJ,AB) --> New L(IJ,AB) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** Z(ij,ab) = L(i,e) W(ej,ab) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "Z(ij,ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef"); dpd_contract244(&Lia, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(ij,ab) --> Z(ji,ab) **/ dpd_buf4_sort(&Z, CC_TMP1, qprs, 10, 17, "Z(ji,ab)"); dpd_buf4_close(&Z); /** Z(ij,ab) = Z(ij,ab) - Z(ji,ab) **/ dpd_buf4_init(&Z1, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "Z(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP1, L_irr, 10, 17, 10, 17, 0, "Z(ji,ab)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(ij,ab) --> New L(ij,ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** New L(Ij,Ab) <-- L(I,E) W(Ej,Ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&W, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf"); dpd_contract244(&LIA, &W, &L2, 1, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); /** Z(jI,bA) = -L(j,e) W(eI,bA) **/ dpd_buf4_init(&Z, CC_TMP1, L_irr, 23, 29, 23, 29, 0, "Z(jI,bA)"); dpd_buf4_init(&W, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF"); dpd_contract244(&Lia, &W, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(jI,bA) --> New L(Ij,Ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qpsr, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&Lia); dpd_file2_close(&LIA); } } }} // namespace psi::cclambda ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WijmbL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000014227�10757640026�015060� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* WijmbL2(): Computes the contributions of the Wmnie HBAR matrix ** elements to the Lambda double de-excitation amplitude equations. ** These contributions are given in spin orbitals as: ** ** L_ij^ab = - P(ab) L_m^a Wijmb ** ** where Wijmb = Wmnie is defined as: ** ** Wmnie = <mn||ie> + t_i^f <mn||fe> ** ** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)] ** ** All four spin cases are stored in (mn,ei) ordering (see Wmnie.c in ** the CCHBAR code). The three L_ij^ab spin cases are computed as: ** ** L(IJ,AB) <-- - L(M,A) W(IJ,BM) + L(M,B) W(IJ,AM) (one unique ** contraction) ** L(ij,ab) <-- - L(m,a) W(ij,bm) + L(m,b) W(ij,am) (one unique ** contraction) ** L(Ij,Ab) <-- - L(M,A) W(Ij,bM) - L(m,b) W(jI,Am) ** ** TDC, July 2002 */ void WijmbL2(int L_irr) { dpdfile2 LIA, Lia; dpdbuf4 L2, newLijab, newLIJAB, newLIjAb; dpdbuf4 W, WMNIE, Wmnie, WMnIe, WmNiE; dpdbuf4 X1, X2, Z, Z1, Z2; /* RHS += -P(ab) Lma * Wijmb */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_contract424(&W, &LIA, &Z, 3, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_file2_close(&LIA); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, pqsr, 0, 5, "New LIjAb", -1); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qprs, 0, 5, "New LIjAb", -1); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia"); dpd_buf4_init(&WMNIE, CC_HBAR, 0, 2, 11, 2, 11, 0, "WMNIE (M>N,EI)"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&WMNIE, &LIA, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_close(&WMNIE); dpd_buf4_sort(&X1, CC_TMP1, pqsr, 2, 5, "X(2,5) 2"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&X1, &newLIJAB, 1.0); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Wmnie, CC_HBAR, 0, 2, 11, 2, 11, 0, "Wmnie (m>n,ei)"); dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1"); dpd_contract424(&Wmnie, &Lia, &X1, 3, 0, 0, 1.0, 0.0); dpd_buf4_close(&Wmnie); dpd_buf4_sort(&X1, CC_TMP1, pqsr, 2, 5, "X(2,5) 2"); dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2"); dpd_buf4_axpy(&X2, &X1, -1.0); dpd_buf4_close(&X2); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&X1, &newLijab, 1.0); dpd_buf4_close(&newLijab); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 10, 0, 10, 0, "WMnIe"); dpd_contract244(&LIA, &WMnIe, &newLIjAb, 0, 2, 1, -1.0, 1.0); dpd_buf4_close(&WMnIe); dpd_buf4_init(&WmNiE, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE (mN,Ei)"); dpd_buf4_sort(&WmNiE, CC_TMP0, qprs, 0, 11, "WmNiE (Nm,Ei)"); dpd_buf4_close(&WmNiE); /* W(Nm,Ei) * L(i,b) --> L(Nm,Eb) */ dpd_buf4_init(&WmNiE, CC_TMP0, 0, 0, 11, 0, 11, 0, "WmNiE (Nm,Ei)"); dpd_contract424(&WmNiE, &Lia, &newLIjAb, 3, 0, 0, -1.0, 1.0); dpd_buf4_close(&WmNiE); dpd_buf4_close(&newLIjAb); dpd_file2_close(&Lia); dpd_file2_close(&LIA); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA"); dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia"); /** W(IJ,AM) L(M,B) --> Z(IJ,AB) **/ dpd_buf4_init(&Z, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,AB)"); dpd_buf4_init(&W, CC_HBAR, 0, 2, 21, 2, 21, 0, "WMNIE (M>N,EI)"); dpd_contract424(&W, &LIA, &Z, 3, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(IJ,AB) --> Z(IJ,BA) **/ dpd_buf4_sort(&Z, CC_TMP2, pqsr, 2, 5, "Z'(IJ,BA)"); dpd_buf4_close(&Z); /** Z(IJ,AB) = Z(IJ,AB) - Z(IJ,BA) **/ dpd_buf4_init(&Z1, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,AB)"); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,BA)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(IJ,AB) --> New L(IJ,AB) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** W(ij,am) L(m,b) --> Z(ij,ab) **/ dpd_buf4_init(&Z, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 12, 31, 12, 31, 0, "Wmnie (m>n,ei)"); dpd_contract424(&W, &Lia, &Z, 3, 0, 0, 1, 0); dpd_buf4_close(&W); /** Z(ij,ab) --> Z(ij,ba) **/ dpd_buf4_sort(&Z, CC_TMP2, pqsr, 12, 15, "Z'(ij,ba)"); dpd_buf4_close(&Z); /** Z(ij,ab) = Z(ij,ab) - Z(ij,ba) **/ dpd_buf4_init(&Z1, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ab)"); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ba)"); dpd_buf4_axpy(&Z2, &Z1, -1); dpd_buf4_close(&Z2); /** Z(ij,ab) --> New L(ij,ab) **/ dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&Z1, &L2, 1); dpd_buf4_close(&L2); dpd_buf4_close(&Z1); /** Z(jI,Ab) = W(jI,Am) L(m,b) **/ dpd_buf4_init(&Z, CC_TMP2, L_irr, 23, 28, 23, 28, 0, "Z(jI,Ab)"); dpd_buf4_init(&W, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE (mN,Ei)"); dpd_contract424(&W, &Lia, &Z, 3, 0, 0, -1, 0); dpd_buf4_close(&W); /** Z(jI,Ab) --> New L(Ij,Ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qprs, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); /** Z(Ij,bA) = W(Ij,bM) L(M,A) **/ dpd_buf4_init(&Z, CC_TMP2, L_irr, 22, 29, 22, 29, 0, "Z(Ij,bA)"); dpd_buf4_init(&W, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe (Mn,eI)"); dpd_contract424(&W, &LIA, &Z, 3, 0, 0, -1, 0); dpd_buf4_close(&W); /** Z(Ij,bA) --> New L(Ij,Ab) **/ dpd_buf4_sort_axpy(&Z, CC_LAMBDA, pqsr, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_file2_close(&Lia); dpd_file2_close(&LIA); } } }} // namespace psi::cclambda �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WijmnL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006025�10757640026�015071� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { void WijmnL2(int L_irr) { dpdbuf4 Lijab, LIJAB, LIjAb; dpdbuf4 newLijab, newLIJAB, newLIjAb; dpdbuf4 WMNIJ, Wmnij, WMnIj; /* RHS += Lmnab*Wijmn */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_contract444(&WMnIj, &LIjAb, &newLIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&WMnIj); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_contract444(&WMNIJ, &LIJAB, &newLIJAB, 0, 1, 1.0, 1.0); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&LIJAB); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab"); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 2, 2, 2, 2, 0, "Wmnij"); dpd_contract444(&Wmnij, &Lijab, &newLijab, 0, 1, 1.0, 1.0); dpd_buf4_close(&Wmnij); dpd_buf4_close(&Lijab); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_contract444(&WMnIj, &LIjAb, &newLIjAb, 0, 1, 1.0, 1.0); dpd_buf4_close(&WMnIj); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB"); dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB"); dpd_buf4_init(&WMNIJ, CC_HBAR, 0, 2, 2, 2, 2, 0, "WMNIJ"); dpd_contract444(&WMNIJ, &LIJAB, &newLIJAB, 0, 1, 1, 1); dpd_buf4_close(&WMNIJ); dpd_buf4_close(&LIJAB); dpd_buf4_close(&newLIJAB); dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab"); dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab"); dpd_buf4_init(&Wmnij, CC_HBAR, 0, 12, 12, 12, 12, 0, "Wmnij"); dpd_contract444(&Wmnij, &Lijab, &newLijab, 0, 1, 1, 1); dpd_buf4_close(&Wmnij); dpd_buf4_close(&Lijab); dpd_buf4_close(&newLijab); dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb"); dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb"); dpd_buf4_init(&WMnIj, CC_HBAR, 0, 22, 22, 22, 22, 0, "WMnIj"); dpd_contract444(&WMnIj, &LIjAb, &newLIjAb, 0, 1, 1, 1); dpd_buf4_close(&WMnIj); dpd_buf4_close(&LIjAb); dpd_buf4_close(&newLIjAb); } } }} // namespace psi::cclambda �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cclambda/WmbejL2.cc��������������������������������������������������������������������0000644�0001015�0000765�00000031555�10757640026�015057� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCLAMBDA \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cclambda { /* WmbejL2(): Computes the contributions of the Wmbej HBAR matrix ** elements to the Lambda double deexcitation amplitude equations. ** These contributions are written in spin orbitals as: ** ** L_ij^ab <-- P(ij) P(ab) L_im^ae Wjebm = ** L_im^ae Wjebm - L_jm^ae Wiebm - L_im^be Wjeam + L_jm^be Wieam ** ** The matrix elements for all six spin cases are stored in (me,jb) ** ordering. This leads to the following contractions for the three ** L2 spin cases: ** ** L(IA,JB) <-- L(IA,ME) W(JB,ME) + L(IA,me) W(JB,me) ** - L(JA,ME) W(IB,ME) - L(JA,me) W(IB,me) ** - L(IB,ME) W(JA,ME) - L(IB,me) W(JA,me) ** + L(JB,ME) W(IA,ME) + L(JB,me) W(IA,me) ** (only two unique contractions) ** L(ia,jb) <-- L(ia,me) W(jb,me) + L(ia,ME) W(jb,ME) ** - L(ja,me) W(ib,me) - L(ja,ME) W(ib,ME) ** - L(ib,me) W(ja,me) - L(ib,ME) W(ja,ME) ** + L(jb,me) W(ia,me) + L(jb,ME) W(ia,ME) ** (only two unique contractions) ** L(IA,jb) <-- L(IA,ME) W(jb,ME) + L(IA,me) W(jb,me) ** - L(jA,Me) W(Ib,Me) ** - L(Ib,Me) W(jA,Me) ** + L(jb,ME) W(IA,ME) + L(jb,me) W(IA,me) ** (all six contractions are unique for ROHF and UHF orbitals) ** ** TDC, July 2002 ** ** For RHF contractions, we evaluate the contractions as follows: ** ** + L(jb,ME) W(IA,ME) + L(jb,me) W(IA,me) I ** + L(jA,Me) W(Ib,Me) + L(Ib,mE) W(jA,mE) II + III ** + L(IA,ME) W(jb,ME) + L(IA,me) W(jb,me) IV ** ** Similar to what we did in ccenergy/WmbejT2.c, the AB L2 terms labelled I and IV ** above may be written as (apart from index swapping): ** ** 1/2 [2 L(jb,ME) - L(jB,Me)] [2 W(me,IA) + W(Me,Ia)] + 1/2 L(jB,Me) W(Me,Ia) ** ** Terms II and III are exactly the same as the last term above, apart from the ** factor of 1/2 and index swapping. So, for RHF orbitals, we need to evaluate two ** contractions. ** ** TDC, March 2004 ** */ void WmbejL2(int L_irr) { dpdbuf4 newL2, L2, W, Z, Z2; /* RHS += P(ij)P(ab)Limae * Wjebm */ if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_contract444(&W, &L2, &Z, 0, 1, 1, 0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 10, "Z(IA,jb) III"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb) I"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "2 LIAjb - LIbjA"); dpd_contract444(&W, &L2, &Z, 0, 1, 0.5, 0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&Z2, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_axpy(&Z2, &Z, 0.5); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb) III"); dpd_buf4_axpy(&Z2, &Z, 1); dpd_buf4_close(&Z2); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prqs, 0, 5, "New LIjAb", 1); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rpsq, 0, 5, "New LIjAb", 1); dpd_buf4_close(&Z); } else if(params.ref == 1) { /** ROHF **/ dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,JB)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 10, "Z(JA,IB)"); dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 10, "Z(IB,JA)"); dpd_buf4_sort(&Z, CC_TMP3, rspq, 10, 10, "Z(JB,IA)"); dpd_buf4_init(&Z2, CC_TMP1, L_irr, 10, 10, 10, 10, 0, "Z(JA,IB)"); dpd_buf4_axpy(&Z2, &Z, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 10, 10, 10, 10, 0, "Z(IB,JA)"); dpd_buf4_axpy(&Z2, &Z, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP3, L_irr, 10, 10, 10, 10, 0, "Z(JB,IA)"); dpd_buf4_axpy(&Z2, &Z, 1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&Z, &newL2, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(ia,jb)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 10, "Z(ja,ib)"); dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 10, "Z(ib,ja)"); dpd_buf4_sort(&Z, CC_TMP3, rspq, 10, 10, "Z(jb,ia)"); dpd_buf4_init(&Z2, CC_TMP1, L_irr, 10, 10, 10, 10, 0, "Z(ja,ib)"); dpd_buf4_axpy(&Z2, &Z, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 10, 10, 10, 10, 0, "Z(ib,ja)"); dpd_buf4_axpy(&Z2, &Z, -1.0); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP3, L_irr, 10, 10, 10, 10, 0, "Z(jb,ia)"); dpd_buf4_axpy(&Z2, &Z, 1.0); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(ij,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(ij,ab)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New Lijab"); dpd_buf4_axpy(&Z, &newL2, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej"); dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "Liajb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ"); dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&Z, &newL2, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_contract444(&W, &L2, &Z, 0, 1, 1.0, 0.0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LjAIb"); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj"); dpd_contract444(&L2, &W, &Z, 1, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(Ij,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)"); dpd_buf4_sort(&Z, CC_TMP0, pqsr, 0, 5, "Z(Ij,Ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb"); dpd_buf4_axpy(&Z, &newL2, 1.0); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&Z, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(IA,JB)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort(&Z, CC_TMP2, rqps, 20, 20, "Z(JA,IB)"); dpd_buf4_sort(&Z, CC_TMP2, psrq, 20, 20, "Z(IB,JA)"); dpd_buf4_sort(&Z, CC_TMP2, rspq, 20, 20, "Z(JB,IA)"); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(JA,IB)"); dpd_buf4_axpy(&Z2, &Z, -1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(IB,JA)"); dpd_buf4_axpy(&Z2, &Z, -1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(JB,IA)"); dpd_buf4_axpy(&Z2, &Z, 1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, CC_TMP2, prqs, 0, 5, "Z(IJ,AB)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, L_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New LIJAB"); dpd_buf4_axpy(&Z, &newL2, 1); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); dpd_buf4_init(&Z, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ia,jb)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 20, 30, 20, 0, "LiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort(&Z, CC_TMP2, rqps, 30, 30, "Z(ja,ib)"); dpd_buf4_sort(&Z, CC_TMP2, psrq, 30, 30, "Z(ib,ja)"); dpd_buf4_sort(&Z, CC_TMP2, rspq, 30, 30, "Z(jb,ia)"); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ja,ib)"); dpd_buf4_axpy(&Z2, &Z, -1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ib,ja)"); dpd_buf4_axpy(&Z2, &Z, -1); dpd_buf4_close(&Z2); dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(jb,ia)"); dpd_buf4_axpy(&Z2, &Z, 1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z, CC_TMP2, prqs, 10, 15, "Z(ij,ab)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, L_irr, 10, 15, 10, 15, 0, "Z(ij,ab)"); dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 10, 15, 12, 17, 0, "New Lijab"); dpd_buf4_axpy(&Z, &newL2, 1); dpd_buf4_close(&Z); dpd_buf4_close(&newL2); dpd_buf4_init(&Z, CC_TMP2, L_irr, 20, 30, 20, 30, 0, "Z(IA,jb)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 20, 20, 20, 0, "LIAJB"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 30, 20, 30, 0, "LIAjb"); dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 30, 30, 30, 0, "Liajb"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj"); dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 20, 30, 20, 0, "LiaJB"); dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ"); dpd_contract444(&W, &L2, &Z, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&L2); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prqs, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP2, L_irr, 24, 27, 24, 27, 0, "Z(Ib,jA)"); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 24, 27, 24, 27, 0, "LIbjA"); dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ"); dpd_contract444(&W, &L2, &Z, 0, 1, 1, 0); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 27, 24, 27, 24, 0, "LjAIb"); dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj"); dpd_contract444(&L2, &W, &Z, 1, 0, 1, 1); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prsq, 22, 28, "New LIjAb", 1); dpd_buf4_close(&Z); } } }} // namespace psi::cclambda ���������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/����������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111671�013703� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/amp_write.cc����������������������������������������������������������������0000644�0001015�0000765�00000012714�11112564564�016214� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Write the amplitudes from ccresponse */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { struct onestack { double value; int i; int a; }; struct twostack { double value; int i; int j; int a; int b; }; void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen); void amp_write_T1(dpdfile2 *T1, int length, const char *label, FILE *outfile); void amp_write_T2(dpdbuf4 *T2, int length, const char *label, FILE *outfile); void amp_write(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 T1; dpdbuf4 T2; char lbl[32]; if(params.ref == 0) { /** RHF **/ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1, CC_OEI, irrep, 0, 1, lbl); amp_write_T1(&T1, params.num_amps, "\n\tLargest XIA Amplitudes:\n", outfile); dpd_file2_close(&T1); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); amp_write_T2(&T2, params.num_amps, "\n\tLargest XIjAb Amplitudes:\n", outfile); dpd_buf4_close(&T2); } } void amp_write_T1(dpdfile2 *T1, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gia; int i, I, a, A, numt1; int num2print=0; double value; struct onestack *t1stack; nirreps = T1->params->nirreps; Gia = T1->my_irrep; t1stack = (struct onestack *) malloc(length * sizeof(struct onestack)); for(m=0; m < length; m++) { t1stack[m].value = 0; t1stack[m].i = 0; t1stack[m].a = 0; } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); numt1 = 0; for(h=0; h < nirreps; h++) { numt1 += T1->params->rowtot[h] * T1->params->coltot[h^Gia]; for(i=0; i < T1->params->rowtot[h]; i++) { I = T1->params->roworb[h][i]; for(a=0; a < T1->params->coltot[h^Gia]; a++) { A = T1->params->colorb[h][a]; value = T1->matrix[h][i][a]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t1stack[m].value)) > 1e-12) { onestack_insert(t1stack, value, I, A, m, length); break; } } } } } dpd_file2_mat_close(T1); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-8) fprintf(outfile, "\t %3d %3d %20.10f\n", t1stack[m].i, t1stack[m].a, t1stack[m].value); free(t1stack); } void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } void amp_write_T2(dpdbuf4 *T2, int length, const char *label, FILE *outfile) { int m, h, nirreps, Gijab, numt2; int ij, ab, i, j, a, b; int num2print=0; double value; struct twostack *t2stack; nirreps = T2->params->nirreps; Gijab = T2->file.my_irrep; t2stack = (struct twostack *) malloc(length * sizeof(struct twostack)); for(m=0; m < length; m++) { t2stack[m].value = 0; t2stack[m].i = 0; t2stack[m].j = 0; t2stack[m].a = 0; t2stack[m].b = 0; } numt2 = 0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2, h); dpd_buf4_mat_irrep_rd(T2, h); numt2 += T2->params->rowtot[h] * T2->params->coltot[h^Gijab]; for(ij=0; ij < T2->params->rowtot[h]; ij++) { i = T2->params->roworb[h][ij][0]; j = T2->params->roworb[h][ij][1]; for(ab=0; ab < T2->params->coltot[h^Gijab]; ab++) { a = T2->params->colorb[h^Gijab][ab][0]; b = T2->params->colorb[h^Gijab][ab][1]; value = T2->matrix[h][ij][ab]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t2stack[m].value)) > 1e-12) { twostack_insert(t2stack, value, i, j, a, b, m, length); break; } } } } dpd_buf4_mat_irrep_close(T2, h); } for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) num2print++; if(num2print) fprintf(outfile, "%s", label); for(m=0; m < ((numt2 < length) ? numt2 : length); m++) if(fabs(t2stack[m].value) > 1e-8) fprintf(outfile, "\t%3d %3d %3d %3d %20.10f\n", t2stack[m].i, t2stack[m].j, t2stack[m].a, t2stack[m].b, t2stack[m].value); free(t2stack); } void twostack_insert(struct twostack *stack, double value, int i, int j, int a, int b, int level, int stacklen) { int l; struct twostack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].j = j; stack[level].a = a; stack[level].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].j = j; stack[l+1].a = a; stack[l+1].b = b; value = temp.value; i = temp.i; j = temp.j; a = temp.a; b = temp.b; } } }} // namespace psi::ccresponse ����������������������������������������������������psi3/src/bin/ccresponse/analyze.cc������������������������������������������������������������������0000644�0001015�0000765�00000007205�10757640026�015671� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include "globals.h" double **Build_R(void); double **Build_U(void); void analyze(char *pert, char *cart, int irrep, double omega) { int nirreps, h, i, j, a, b, ij, ab, u, v; int position, num_div, tot1, tot2, nvir, nso, nocc; double width, max, min, value, value2; double *amp_array; double **tmp, **T2trans, **T1trans; FILE *efile; dpdbuf4 I, T2, D; dpdfile2 T1; char lbl[32]; nirreps = moinfo.nirreps; num_div = 500; max = 9; min = 0; width = (max-min) / (num_div); sprintf(lbl, "X_%s_%1s_%5.3f", pert, cart, omega); ffile(&efile, lbl, 1); amp_array = init_array(num_div); nvir = moinfo.virtpi[0]; nocc = moinfo.occpi[0]; nso = moinfo.nso; sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2, CC_LR, 0, 0, 5, 0, 5, 0, lbl); dpd_buf4_mat_irrep_init(&T2, 0); dpd_buf4_mat_irrep_rd(&T2, 0); T2trans = block_matrix(nocc*nocc, nso*nso); tmp = block_matrix(nvir, nso); tot1 = 0; tot2 = 0; for(ij=0; ij<T2.params->rowtot[0]; ij++) { C_DGEMM('n', 't', nvir, nso, nvir, 1.0, &(T2.matrix[0][ij][0]), nvir, &(moinfo.C[0][0][0]), nvir, 0.0, &(tmp[0][0]), nso); C_DGEMM('n', 'n', nso, nso, nvir, 1.0, &(moinfo.C[0][0][0]), nvir, tmp[0], nso, 0.0, T2trans[ij], nso); for(ab=0; ab<nso*nso; ab++) { value = fabs(log10(fabs(T2trans[ij][ab]))); tot2++; if ((value >= max) && (value <= (max+width))) { amp_array[num_div-1]++; tot1++; } else if ((value <= min) && (value >= (min-width))) { amp_array[0]++; tot1++; } else if ((value < max) && (value > min)) { position = floor((value-min)/width); amp_array[position]++; tot1++; } } } dpd_buf4_mat_irrep_close(&T2, 0); dpd_buf4_close(&T2); free_block(tmp); free_block(T2trans); value2 = 0; for (i = num_div-1; i >= 0; i--) { value = amp_array[i] / tot1; value2 += value; fprintf(efile, "%10.5lf %lf\n", -((i)*width)-min, value); } free(amp_array); fprintf(outfile, "Total number of converged T2 amplitudes = %d\n", tot2); fprintf(outfile, "Number of T2 amplitudes in analysis= %d\n", tot1); fclose(efile); num_div = 40; max = 2; min = -5; width = (max-min) / (num_div); sprintf(lbl, "X1_%s_%1s_%5.3f", pert, cart, omega); ffile(&efile, lbl, 1); amp_array = init_array(num_div); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, lbl); dpd_file2_print(&T1, outfile); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); /* T1trans = block_matrix(nocc, nso); C_DGEMM('n','t', nocc, nso, nvir, 1.0, &(T1.matrix[0][0][0]), nvir, &(moinfo.C[0][0][0]), nvir, 0.0, &(T1trans[0][0]), nso); */ tot1 = tot2 = 0; for(i=0; i < nocc; i++) { for(a=0; a < nso; a++) { /* value = fabs(log10(fabs(T1trans[i][a]))); */ value = log10(fabs(T1.matrix[0][i][a])); tot2++; if ((value >= max) && (value <= (max+width))) { amp_array[num_div-1]++; tot1++; } else if ((value <= min) && (value >= (min-width))) { amp_array[0]++; tot1++; } else if ((value < max) && (value > min)) { position = floor((value-min)/width); amp_array[position]++; tot1++; } } } /* free_block(T1trans); */ dpd_file2_mat_close(&T1); dpd_file2_close(&T1); value2 = 0; for (i = num_div-1; i >= 0; i--) { value = amp_array[i] / tot1; value2 += value; fprintf(efile, "%10.5lf %lf\n", ((i)*width)-min, value); } free(amp_array); fclose(efile); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cache.cc��������������������������������������������������������������������0000644�0001015�0000765�00000037451�10757640026�015277� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> namespace psi { namespace ccresponse { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(1); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(1); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_hbar_extra.cc�����������������������������������������������������������0000644�0001015�0000765�00000005113�10757640026�017070� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void cc2_hbar_extra(void) { dpdfile2 t1, lt; dpdbuf4 A, D, E, Z, Z1; dpdbuf4 W1, W; dpdbuf4 t2, l2; /* LIjAb * TIjAb */ dpd_file2_init(<, CC_OEI, 0, 0, 0, "Lt_IJ"); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 7, 2, 7, 0, "LIJAB 0 -1"); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&l2, &t2, <, 0, 0, -1.0, 0.0); dpd_buf4_close(&t2); dpd_buf4_close(&l2); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LIjAb 0 -1"); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&l2, &t2, <, 0, 0, -1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&l2); dpd_file2_close(<); /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_sort(&W1, CC2_HET1, rspq, 10, 10, "CC2 2 W(jb,ME) + W(Jb,Me)"); dpd_buf4_close(&W1); /* CC2 WMnIj */ /* dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); */ /* dpd_buf4_copy(&A, CC2_HET1, "CC2 WMnIj (Mn,Ij)"); */ /* dpd_buf4_close(&A); */ /* dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); */ /* /\* Wmnij <- + P(ij) t(j,e) * <mn||ie> *\/ */ /* dpd_buf4_init(&Z, CC_TMP0, 0, 0, 0, 0, 0, 0, "CC2 ZMnIj (Mn,Ij)"); */ /* dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); */ /* dpd_contract424(&E, &t1, &Z, 3, 1, 0, 1, 0); */ /* dpd_buf4_close(&E); */ /* dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj (Mn,Ij)"); */ /* dpd_buf4_axpy(&Z, &W, 1); */ /* dpd_buf4_close(&W); */ /* dpd_buf4_sort_axpy(&Z, CC2_HET1, qpsr, 0, 0, "CC2 WMnIj (Mn,Ij)", 1); */ /* dpd_buf4_close(&Z); */ /* /\* Wmnij<- +1/2 P(ij) t(i,e) t(j,f) * <mn||ef> *\/ */ /* dpd_buf4_init(&Z, CC_TMP0, 0, 0, 10, 0, 10, 0, "CC2 ZMnIf (Mn,If)"); */ /* dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); */ /* dpd_contract244(&t1, &D, &Z, 1, 2, 1, 1, 0); */ /* dpd_buf4_close(&D); */ /* dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 0, 0, 0, 0, "CC2 ZMnIj (Mn,Ij)"); */ /* dpd_contract424(&Z, &t1, &Z1, 3, 1, 0, 0.5, 0); */ /* dpd_buf4_close(&Z); */ /* dpd_buf4_init(&W, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj (Mn,Ij)"); */ /* dpd_buf4_axpy(&Z1, &W, 1); */ /* dpd_buf4_close(&W); */ /* dpd_buf4_sort_axpy(&Z1, CC2_HET1, qpsr, 0, 0, "CC2 WMnIj (Mn,Ij)", 1); */ /* dpd_buf4_close(&Z1); */ /* dpd_file2_close(&t1); */ } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_LHX1Y1.cc���������������������������������������������������������������0000644�0001015�0000765�00000047635�11112564564�015714� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double cc2_LHX1Y1(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { int am, a, A, m, M, fe, ef, f, e, E; int GW, GZae, Ga, Gm, Gf, Gam, Gef, Gab, Gei, GX; int hxbuf, hzbuf, Gi, Gj, Ge, GZ; int ab, mb, colx, colz, rowz, rowx; int ncols, nrows, nlinks; double *Xt; dpdfile2 F, X1, Y1, Zmi, Zae, ZIA, L1, t1; dpdbuf4 Z1, Z2, I, W1, ZIjAb, L2, Z, X, W, B; double polar; char lbl[32]; /* The Lambda 1 contractions */ dpd_file2_init(&ZIA, CC_TMP0, 0, 0, 1, "ZIA"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_y, cart_y, omega_y); dpd_file2_init(&Y1, CC_OEI, irrep_y, 0, 1, lbl); /* Contraction of FME, XIE, YMA */ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); sprintf(lbl, "Z_%s_%1s_MI" , pert_x, cart_x); dpd_file2_init(&Zmi, CC_TMP0, irrep_x, 0, 0, lbl); dpd_contract222(&F, &X1, &Zmi, 0, 0, 1, 0); dpd_file2_close(&F); dpd_contract222(&Zmi, &Y1, &ZIA, 1, 1, -1, 0); /* Contraction of FME, XMA, YIE */ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_file2_init(&Zmi, CC_TMP0, irrep_x, 0, 0, lbl); dpd_contract222(&F, &Y1, &Zmi, 0, 0, 1, 0); dpd_file2_close(&F); dpd_contract222(&Zmi, &X1, &ZIA, 1, 1, -1, 1); dpd_file2_close(&Zmi); /* Contraction of WAMEF, XIE, YMF */ /** Begin out-of-core dot24 contraction **/ sprintf(lbl, "Z_%s_%1s_AE" , pert_x, cart_x); dpd_file2_init(&Zae, CC_TMP0, irrep_y, 1, 1, lbl); dpd_file2_scm(&Zae, 0); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); GW = W.file.my_irrep; GZae = Zae.my_irrep; dpd_file2_mat_init(&Zae); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(Gam=0; Gam < moinfo.nirreps; Gam++) { dpd_buf4_mat_irrep_row_init(&W, Gam); Xt = init_array(W.params->coltot[Gam]); for(am=0; am < W.params->rowtot[Gam]; am++) { dpd_buf4_mat_irrep_row_rd(&W, Gam, am); a = W.params->roworb[Gam][am][0]; m = W.params->roworb[Gam][am][1]; Ga = W.params->psym[a]; Gm = W.params->qsym[m]; Ge = Ga^GZae; /* Zae is not totally symmetric */ Gf = Gam^GW^Ge; /* X1 is not totally symmetric */ Gef = Gam^GW; A = a - W.params->poff[Ga]; M = m - W.params->qoff[Gm]; zero_arr(Xt, W.params->coltot[Gam]); /* build spin-adapted W-integrals for current am */ for(ef=0; ef < W.params->coltot[Gef]; ef++) { e = W.params->colorb[Gef][ef][0]; f = W.params->colorb[Gef][ef][1]; fe = W.params->colidx[f][e]; Xt[ef] = 2.0 * W.matrix[Gam][0][ef] - W.matrix[Gam][0][fe]; } nrows = moinfo.virtpi[Ge]; ncols = moinfo.virtpi[Gf]; if(nrows && ncols) C_DGEMV('n',nrows,ncols,1.0,&Xt[W.col_offset[Gam][Ge]],ncols, X1.matrix[Gm][M],1,1.0, Zae.matrix[Ga][A],1); } free(Xt); dpd_buf4_mat_irrep_row_close(&W, Gam); } dpd_buf4_close(&W); dpd_file2_mat_close(&X1); dpd_file2_mat_wrt(&Zae); dpd_file2_mat_close(&Zae); /** End out-of-core dot24 contraction **/ dpd_contract222(&Y1, &Zae, &ZIA, 0, 0, 1, 1); dpd_file2_close(&Zae); /* Contraction of WAMEF, XMF, YIE */ /** Begin out-of-core dot24 contraction **/ sprintf(lbl, "Z_%s_%1s_AE" , pert_y, cart_y); dpd_file2_init(&Zae, CC_TMP0, irrep_y, 1, 1, lbl); dpd_file2_scm(&Zae, 0); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); GW = W.file.my_irrep; GZae = Zae.my_irrep; dpd_file2_mat_init(&Zae); dpd_file2_mat_init(&Y1); dpd_file2_mat_rd(&Y1); for(Gam=0; Gam < moinfo.nirreps; Gam++) { dpd_buf4_mat_irrep_row_init(&W, Gam); Xt = init_array(W.params->coltot[Gam]); for(am=0; am < W.params->rowtot[Gam]; am++) { dpd_buf4_mat_irrep_row_rd(&W, Gam, am); a = W.params->roworb[Gam][am][0]; m = W.params->roworb[Gam][am][1]; Ga = W.params->psym[a]; Gm = W.params->qsym[m]; Ge = Ga^GZae; /* Zae is not totally symmetric */ Gf = Gam^GW^Ge; /* Y1 is not totally symmetric */ Gef = Gam^GW; A = a - W.params->poff[Ga]; M = m - W.params->qoff[Gm]; zero_arr(Xt, W.params->coltot[Gam]); /* build spin-adapted W-integrals for current am */ for(ef=0; ef < W.params->coltot[Gef]; ef++) { e = W.params->colorb[Gef][ef][0]; f = W.params->colorb[Gef][ef][1]; fe = W.params->colidx[f][e]; Xt[ef] = 2.0 * W.matrix[Gam][0][ef] - W.matrix[Gam][0][fe]; } nrows = moinfo.virtpi[Ge]; ncols = moinfo.virtpi[Gf]; if(nrows && ncols) C_DGEMV('n',nrows,ncols,1.0,&Xt[W.col_offset[Gam][Ge]],ncols, Y1.matrix[Gm][M],1,1.0, Zae.matrix[Ga][A],1); } free(Xt); dpd_buf4_mat_irrep_row_close(&W, Gam); } dpd_buf4_close(&W); dpd_file2_mat_close(&Y1); dpd_file2_mat_wrt(&Zae); dpd_file2_mat_close(&Zae); /** End out-of-core dot24 contraction **/ dpd_contract222(&X1, &Zae, &ZIA, 0, 0, 1, 1); dpd_file2_close(&Zae); /* Contraction of WAMEF, XMA, YNE */ sprintf(lbl, "Z_%s_%1s_MI" , pert_y, cart_y); dpd_file2_init(&Zmi, CC_TMP0, irrep_y, 0, 0, lbl); dpd_buf4_init(&W1, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_dot13(&Y1, &W1, &Zmi, 0, 0, 1, 0); dpd_buf4_close(&W1); dpd_contract222(&Zmi, &X1, &ZIA, 1, 1, 1, 1); dpd_file2_close(&Zmi); /* Contraction of WAMEF, XMA, YNE */ sprintf(lbl, "Z_%s_%1s_MI" , pert_x, cart_x); dpd_file2_init(&Zmi, CC_TMP0, irrep_x, 0, 0, lbl); dpd_buf4_init(&W1, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_dot13(&X1, &W1, &Zmi, 0, 0, 1, 0); dpd_buf4_close(&W1); dpd_contract222(&Zmi, &Y1, &ZIA, 1, 1, 1, 1); dpd_file2_close(&Zmi); dpd_file2_close(&Y1); dpd_file2_close(&X1); /* Final contraction of ZIA intermediate with LIA */ dpd_file2_init(&L1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); polar = 2.0 * dpd_file2_dot(&ZIA, &L1); dpd_file2_close(&L1); dpd_file2_close(&ZIA); /* fprintf(outfile, "L(1)HX1Y1 = %20.12f\n", polar); */ /* The Lambda 2 contractions */ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_y, cart_y, omega_y); dpd_file2_init(&Y1, CC_OEI, irrep_y, 0, 1, lbl); /* Contraction with Wmnij */ sprintf(lbl, "Z_%s_%1s_MbIj", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP0, irrep_y, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&W1, CC2_HET1, 0, 0, 0, 0, 0, 0, "CC2 WMnIj"); dpd_contract424(&W1, &Y1, &Z1, 1, 0, 1, 1, 0); dpd_buf4_close(&W1); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "ZIjAb"); dpd_contract244(&X1, &Z1, &Z, 0, 0, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_scm(&ZIjAb, 0); dpd_buf4_axpy(&Z, &ZIjAb, 1); dpd_buf4_close(&ZIjAb); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z); /* B -> Wabef */ dpd_file2_mat_init(&Y1); dpd_file2_mat_rd(&Y1); /* Plus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); sprintf(lbl, "Z1_%s_%1s_(ei,a>=b)", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP8, irrep_y, 11, 8, 11, 8, 0, lbl); dpd_buf4_scm(&Z1, 0); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gab = Gef; /* B is totally symmetric */ Gei = Gab ^ irrep_y; /* Z is not totally symmetrix */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf ^ irrep_y; /* Y1 is not totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z1.matrix[Gei] = dpd_block_matrix(moinfo.occpi[Gi],Z1.params->coltot[Gab]); nrows = moinfo.occpi[Gi]; ncols = Z1.params->coltot[Gab]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,Y1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z1.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z1, Gei, Z1.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z1.matrix[Gei], moinfo.occpi[Gi], Z1.params->coltot[Gab]); } } dpd_buf4_close(&Z1); dpd_buf4_close(&B); /* Minus Combination */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); sprintf(lbl, "Z2_%s_%1s_(ei,a>=b)", pert_y, cart_y); dpd_buf4_init(&Z2, CC_TMP8, irrep_y, 11, 9, 11, 9, 0, lbl); dpd_buf4_scm(&Z2, 0); for(Gef=0; Gef < moinfo.nirreps; Gef++) { Gab = Gef; /* B is totally symmetric */ Gei = Gab ^ irrep_y; /* Z is not totally symmetrix */ for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gf = Ge ^ Gef; Gi = Gf ^ irrep_y; /* Y1 is not totally symmetric */ B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]); Z2.matrix[Gei] = dpd_block_matrix(moinfo.occpi[Gi],Z2.params->coltot[Gab]); nrows = moinfo.occpi[Gi]; ncols = Z2.params->coltot[Gab]; nlinks = moinfo.virtpi[Gf]; if(nrows && ncols && nlinks) { for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]); C_DGEMM('n','n',nrows,ncols,nlinks,0.5,Y1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols, 0.0,Z2.matrix[Gei][0],ncols); dpd_buf4_mat_irrep_wrt_block(&Z2, Gei, Z2.row_offset[Gei][e], moinfo.occpi[Gi]); } } dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]); dpd_free_block(Z2.matrix[Gei], moinfo.occpi[Gi], Z2.params->coltot[Gab]); } } dpd_buf4_close(&Z2); dpd_buf4_close(&B); dpd_file2_mat_close(&Y1); sprintf(lbl, "Z_%s_%1s_AbEj (Ej,Ab)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP8, irrep_y, 11, 5, 11, 5, 0, lbl); dpd_buf4_scm(&Z, 0); sprintf(lbl, "Z1_%s_%1s_(ei,a>=b)", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP8, irrep_y, 11, 5, 11, 8, 0, lbl); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); sprintf(lbl, "Z2_%s_%1s_(ei,a>=b)", pert_y, cart_y); dpd_buf4_init(&Z2, CC_TMP8, irrep_y, 11, 5, 11, 9, 0, lbl); dpd_buf4_axpy(&Z2, &Z, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z); sprintf(lbl, "Z_%s_%1s_AbEj", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP9, irrep_y, 5, 11, 5, 11, 0, lbl); dpd_buf4_scm(&Z, 0); dpd_buf4_close(&Z); sprintf(lbl, "Z_%s_%1s_AbEj (Ej,Ab)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP8, irrep_y, 11, 5, 11, 5, 0, lbl); sprintf(lbl, "Z_%s_%1s_AbEj", pert_y, cart_y); dpd_buf4_sort_axpy(&Z, CC_TMP9, rspq, 5, 11, lbl, 1); dpd_buf4_close(&Z); /* Free some disk space */ psio_close(CC_TMP8, 0); psio_open(CC_TMP8, 0); /* sprintf(lbl, "Z_%s_%1s_AbEj", pert_y, cart_y); */ /* dpd_buf4_init(&Z, CC_TMP9, irrep_y, 5, 11, 5, 11, 0, lbl); */ /* dpd_buf4_init(&I, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); */ /* dpd_contract424(&I, &Y1, &Z, 3, 1, 0, 1, 0); */ /* dpd_buf4_close(&I); */ /* dpd_buf4_close(&Z); */ /** Begin out-of-core contract244 **/ dpd_buf4_init(&Z, CC_TMP0, 0, 5, 0, 5, 0, 0, "ZIjAb (Ab,Ij)"); sprintf(lbl, "Z_%s_%1s_AbEj", pert_y, cart_y); dpd_buf4_init(&X, CC_TMP9, irrep_y, 5, 11, 5, 11, 0, lbl); /* Symmetry Info */ GX = X.file.my_irrep; GZ = Z.file.my_irrep; dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(hxbuf=0; hxbuf < moinfo.nirreps; hxbuf++) { hzbuf = hxbuf; dpd_buf4_mat_irrep_row_init(&X, hxbuf); dpd_buf4_mat_irrep_row_init(&Z, hzbuf); /* Loop over rows of the X factor and the target */ for(ab=0; ab < Z.params->rowtot[hzbuf]; ab++) { dpd_buf4_mat_irrep_row_zero(&X, hxbuf, ab); dpd_buf4_mat_irrep_row_rd(&X, hxbuf, ab); dpd_buf4_mat_irrep_row_zero(&Z, hzbuf, ab); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Ge = Gj^hxbuf^GX; Gi = Gj^hzbuf^GZ; rowx = X.params->rpi[Ge]; colx = X.params->spi[Gj]; rowz = Z.params->rpi[Gi]; colz = Z.params->spi[Gj]; if(rowz && colz && rowx && colx) { C_DGEMM('n','n',rowz,colz,rowx,1.0, &(X1.matrix[Gi][0][0]),rowx, &(X.matrix[hxbuf][0][X.col_offset[hxbuf][Ge]]),colx,0.0, &(Z.matrix[hzbuf][0][Z.col_offset[hzbuf][Gi]]),colz); } } dpd_buf4_mat_irrep_row_wrt(&Z, hzbuf, ab); } dpd_buf4_mat_irrep_row_close(&X, hxbuf); dpd_buf4_mat_irrep_row_close(&Z, hzbuf); } dpd_file2_mat_close(&X1); dpd_buf4_close(&X); dpd_buf4_sort_axpy(&Z, CC_TMP0, rspq, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_sort_axpy(&Z, CC_TMP0, srqp, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z); /** End out-of-core contract244 **/ psio_close(CC_TMP9, 0); psio_open(CC_TMP9, 0); /* D -> Wabef */ sprintf(lbl, "Z_%s_%1s_MnIf", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 0, 10, 0, 10, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract244(&X1, &I, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 0, 0, 0, 0, "ZMnIj temp"); dpd_contract424(&Z, &Y1, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 0, 0, 0, 0, "ZMnIj"); dpd_buf4_scm(&Z, 0); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qpsr, 0, 0, "ZMnIj", 1); dpd_buf4_close(&Z1); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 0, 0, 0, 0, "ZMnIj"); dpd_contract424(&Z1, &t1, &Z, 1, 0, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "ZIjAb"); dpd_contract244(&t1, &Z, &Z1, 0, 0, 1, 0.5, 0); dpd_buf4_close(&Z); dpd_file2_close(&t1); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z1, &ZIjAb, 1); dpd_buf4_close(&ZIjAb); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z1); /* F -> Wabef */ /** Begin out-of-core contract244 **/ sprintf(lbl, "Z_%s_%1s_MbEj (Mb,jE)", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); dpd_buf4_init(&X, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); /* Symmetry Info */ GX = X.file.my_irrep; GZ = Z.file.my_irrep; dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(hxbuf=0; hxbuf < moinfo.nirreps; hxbuf++) { hzbuf = hxbuf; dpd_buf4_mat_irrep_row_init(&X, hxbuf); dpd_buf4_mat_irrep_row_init(&Z, hzbuf); /* Loop over rows of the X factor and the target */ for(mb=0; mb < Z.params->rowtot[hzbuf]; mb++) { dpd_buf4_mat_irrep_row_zero(&X, hxbuf, mb); dpd_buf4_mat_irrep_row_rd(&X, hxbuf, mb); dpd_buf4_mat_irrep_row_zero(&Z, hzbuf, mb); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Ge = Gj^hxbuf^GX; Gi = Gj^hzbuf^GZ; rowx = X.params->rpi[Ge]; colx = X.params->spi[Gj]; rowz = Z.params->rpi[Gi]; colz = Z.params->spi[Gj]; if(rowz && colz && rowx && colx) { C_DGEMM('n','n',rowz,colz,rowx,1.0, &(X1.matrix[Gi][0][0]),rowx, &(X.matrix[hxbuf][0][X.col_offset[hxbuf][Ge]]),colx,0.0, &(Z.matrix[hzbuf][0][Z.col_offset[hzbuf][Gi]]),colz); } } dpd_buf4_mat_irrep_row_wrt(&Z, hzbuf, mb); } dpd_buf4_mat_irrep_row_close(&X, hxbuf); dpd_buf4_mat_irrep_row_close(&Z, hzbuf); } dpd_file2_mat_close(&X1); dpd_buf4_close(&X); dpd_buf4_close(&Z); /** End out-of-core contract244 **/ /* sprintf(lbl, "Z_%s_%1s_MbEj (jE,Mb)", pert_x, cart_x); */ /* dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); */ /* dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); */ /* dpd_contract244(&X1, &I, &Z, 1, 2, 0, 1, 0); */ /* dpd_buf4_close(&I); */ /* sprintf(lbl, "Z_%s_%1s_MbEj (Mb,jE)", pert_x, cart_x); */ /* dpd_buf4_sort(&Z, CC_TMP0, rspq, 10, 10, lbl); */ /* dpd_buf4_close(&Z); */ sprintf(lbl, "Z_%s_%1s_MbeJ (Mb,eJ)", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 11, 10, 11, 0, lbl); dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract424(&I, &X1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 0, 10, 0, 0, "ZMbIj"); sprintf(lbl, "Z_%s_%1s_MbEj (Mb,jE)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); dpd_contract424(&Z1, &Y1, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&Z1); sprintf(lbl, "Z_%s_%1s_MbeJ (Mb,eJ)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 10, 11, 10, 11, 0, lbl); dpd_contract244(&Y1, &Z1, &Z, 1, 2, 1, 1, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "ZIjAb"); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 0, 10, 0, 0, "ZMbIj"); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&t1, &Z1, &Z, 0, 0, 1, -1, 0); dpd_file2_close(&t1); dpd_buf4_close(&Z1); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z, &ZIjAb, 1); dpd_buf4_close(&ZIjAb); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z); /* Contraction with Wmbej */ sprintf(lbl, "X_%s_%1s_jbMI", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj (ME,jb)"); dpd_contract424(&W1, &X1, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&W1); sprintf(lbl, "X_%s_%1s_IjMb", pert_x, cart_x); dpd_buf4_sort(&Z, CC_TMP0, sprq, 0, 10, lbl); dpd_buf4_close(&Z); sprintf(lbl, "X_%s_%1s_IbMj", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Me,Jb)"); dpd_contract424(&W1, &X1, &Z, 1, 1, 0, 1, 0); dpd_buf4_close(&W1); sprintf(lbl, "X_%s_%1s_IjMb", pert_x, cart_x); dpd_buf4_sort_axpy(&Z, CC_TMP0, psrq, 0, 10, lbl, 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "ZIjAb"); sprintf(lbl, "X_%s_%1s_IjMb", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 0, 10, 0, 10, 0, lbl); dpd_contract244(&Y1, &Z1, &Z, 0, 2, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z, &ZIjAb, 1); dpd_buf4_close(&ZIjAb); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z); sprintf(lbl, "Y_%s_%1s_jbMI", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbEj (ME,jb)"); dpd_contract424(&W1, &Y1, &Z, 1, 1, 0, -1, 0); dpd_buf4_close(&W1); sprintf(lbl, "Y_%s_%1s_IjMb", pert_y, cart_y); dpd_buf4_sort(&Z, CC_TMP0, sprq, 0, 10, lbl); dpd_buf4_close(&Z); sprintf(lbl, "Y_%s_%1s_IbMj", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&W1, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 WMbeJ (Me,Jb)"); dpd_contract424(&W1, &Y1, &Z, 1, 1, 0, 1, 0); dpd_buf4_close(&W1); sprintf(lbl, "Y_%s_%1s_IjMb", pert_y, cart_y); dpd_buf4_sort_axpy(&Z, CC_TMP0, psrq, 0, 10, lbl, 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "ZIjAb"); sprintf(lbl, "Y_%s_%1s_IjMb", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP0, irrep_y, 0, 10, 0, 10, 0, lbl); dpd_contract244(&X1, &Z1, &Z, 0, 2, 1, 1, 0); dpd_buf4_close(&Z1); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z, &ZIjAb, 1); dpd_buf4_close(&ZIjAb); dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z); /* Close the X and Y matices */ dpd_file2_close(&Y1); dpd_file2_close(&X1); /* Final contraction with LIJAB */ dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_buf4_init(&ZIjAb, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); polar += dpd_buf4_dot(&L2, &ZIjAb); dpd_buf4_close(&ZIjAb); dpd_buf4_close(&L2); return polar; } }} // namespace psi::ccresponse ���������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_LHX1Y2.cc���������������������������������������������������������������0000644�0001015�0000765�00000006070�11112564564�015701� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double cc2_LHX1Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { dpdfile2 z, z1, X1, l1, F; dpdbuf4 Z, Z1, Z2, I, Y2, L2, W; char lbl[32]; double polar; int nirreps, Gbm, Gef, Gjf, Ge, Gf, Gj, bm, ef, jf; int *occpi, *virtpi, **W_col_offset, **Z_col_offset, offset; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; sprintf(lbl, "Z_%s_%1s_MI", pert_y, cart_y); dpd_file2_init(&z1, CC_TMP0, irrep_y, 0, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&I, &Y2, &z1, 0, 0, 1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&z1, &X1, &z, 1, 1, -1, 0); dpd_file2_close(&X1); dpd_file2_close(&z1); dpd_file2_close(&z); sprintf(lbl, "Z_%s_%1s_AE", pert_y, cart_y); dpd_file2_init(&z1, CC_TMP0, irrep_y, 1, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&Y2, &I, &z1, 3, 3, -1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&X1, &z1, &z, 0, 0, 1, 1); dpd_file2_close(&X1); dpd_file2_close(&z1); dpd_file2_close(&z); sprintf(lbl, "Z_%s_%1s_ME", pert_x, cart_x); dpd_file2_init(&z1, CC_TMP0, irrep_x, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot24(&X1, &I, &z1, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_file2_close(&X1); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_dot24(&z1, &Y2, &z, 0, 0, 1, 1); dpd_buf4_close(&Y2); dpd_file2_close(&z1); dpd_file2_close(&z); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); dpd_file2_init(&l1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); polar = 2.0 * dpd_file2_dot(&z, &l1); dpd_file2_close(&l1); dpd_file2_close(&z); /* fprintf(outfile, "L(1)HX1Y2 = %20.12f\n", polar); */ return polar; } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_sort_X.cc���������������������������������������������������������������0000644�0001015�0000765�00000001325�11112564564�016226� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void cc2_sort_X(const char *pert, const char *cart, int irrep, double omega) { dpdbuf4 X; char lbl[32]; sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_scmcopy(&X, CC_LR, lbl, 2); dpd_buf4_sort_axpy(&X, CC_LR, pqsr, 0, 5, lbl, -1); dpd_buf4_close(&X); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_X1.cc�������������������������������������������������������������������0000644�0001015�0000765�00000007561�11112564564�015250� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom1(dpdfile2 *X1, double omega); void local_filter_T1(dpdfile2 *T1); void cc2_X1_build(const char *pert, const char *cart, int irrep, double omega) { int GX2, GX1, GW, Gam, Gim, Gef, Ga, Gi, Gm; int a, A, i, I, num_m, nlinks, length; dpdfile2 F, X1, X1new, Xme, Zia; dpdbuf4 W, X2, D, T2; char lbl[32]; sprintf(lbl, "%sBAR_%1s_IA", pert, cart); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_copy(&X1new, CC_OEI, lbl); dpd_file2_close(&X1new); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); /*** S-S ***/ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); dpd_file2_axpy(&X1, &X1new, -omega, 0); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&X1, &F, &X1new, 0, 0, 1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&F, &X1, &X1new, 1, 1, -1, 1); dpd_file2_close(&F); dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(jb,ME) + W(Jb,Me)"); dpd_contract422(&W, &X1, &X1new, 0, 0, 1, 1); dpd_buf4_close(&W); sprintf(lbl, "X_%s_%1s_ME", pert, cart); dpd_file2_init(&Xme, CC_OEI, irrep, 0, 1, lbl); dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract422(&D, &X1, &Xme, 0, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&T2, &Xme, &X1new, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&Xme); dpd_file2_close(&X1); /*** S-D ***/ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_dot24(&F, &X2, &X1new, 0, 0, 1, 1); dpd_file2_close(&F); /** begin out of core contract442 **/ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); GW = W.file.my_irrep; GX2 = X2.file.my_irrep; GX1 = X1new.my_irrep; dpd_file2_mat_init(&X1new); dpd_file2_mat_rd(&X1new); for(Gam=0; Gam < moinfo.nirreps; Gam++) { Gef = Gam^GW; Gim = Gef^GX2; for(Gi=0; Gi < moinfo.nirreps; Gi++) { Gm = Gef^Gi^GX2; Ga = Gi^GX1; num_m = W.params->qpi[Gm]; dpd_buf4_mat_irrep_init_block(&W, Gam, num_m); dpd_buf4_mat_irrep_init_block(&X2, Gim, num_m); nlinks = W.params->coltot[Gam] * num_m; length = X1new.params->rowtot[Gi] * X1new.params->coltot[Ga]; if(nlinks && length) { for(i=0; i < X1new.params->rowtot[Gi]; i++) { I = X2.params->poff[Gi] + i; dpd_buf4_mat_irrep_rd_block(&X2, Gim, X2.row_offset[Gim][I], num_m); for(a=0; a < X1new.params->coltot[Ga]; a++) { A = W.params->poff[Ga] + a; dpd_buf4_mat_irrep_rd_block(&W, Gam, W.row_offset[Gam][A], num_m); X1new.matrix[Gi][i][a] += C_DDOT(nlinks, X2.matrix[Gim][0], 1, W.matrix[Gam][0], 1); } } } dpd_buf4_mat_irrep_close_block(&X2, Gim, num_m); dpd_buf4_mat_irrep_close_block(&W, Gam, num_m); } } dpd_file2_mat_wrt(&X1new); dpd_file2_mat_close(&X1new); dpd_buf4_close(&W); dpd_buf4_close(&X2); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_contract442(&W, &X2, &X1new, 3, 3, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&X2); if(params.local && local.filter_singles) local_filter_T1(&X1new); else denom1(&X1new, omega); dpd_file2_close(&X1new); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/cc2_X2.cc�������������������������������������������������������������������0000644�0001015�0000765�00000006704�11112564564�015247� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom2(dpdbuf4 *X2, double omega); void local_filter_T2(dpdbuf4 *T2); void cc2_X2_build(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1, z, F, t1; dpdbuf4 X2, X2new, Z, Z1, Z2, W, I; char lbl[32]; sprintf(lbl, "%sBAR_%1s_IjAb", pert, cart); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_copy(&X2new, CC_LR, lbl); dpd_buf4_close(&X2new); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /*** D-S ***/ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj"); dpd_contract244(&X1, &W, &Z, 0, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_close(&Z); sprintf(lbl, "Z(Ab,Ij) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 5, 0, 5, 0, 0, lbl); dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi"); dpd_contract244(&X1, &W, &Z, 1, 2, 1, 1, 0); dpd_buf4_close(&W); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, rspq, 0, 5, lbl, 1); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_sort(&Z, CC_TMP0, srqp, 0, 5, lbl); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&Z, &X2new, 1); dpd_buf4_close(&X2new); dpd_buf4_close(&Z); dpd_file2_close(&X1); /*** D-D ***/ dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X2, &X2new, -omega); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract424(&X2, &F, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_axpy(&Z, &X2new, 1); sprintf(lbl, "Z(jI,bA) %s %1s", pert, cart); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 0, 5, lbl); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&Z, &X2new, 1); dpd_buf4_close(&Z); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract244(&F, &X2, &Z, 0, 0, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_axpy(&Z, &X2new, -1); sprintf(lbl, "Z(jI,bA) %s %1s", pert, cart); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 0, 5, lbl); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&Z); dpd_buf4_close(&X2); /** Filter and apply denominator **/ if(params.local) local_filter_T2(&X2new); else denom2(&X2new, omega); dpd_buf4_close(&X2new); } }} // namespace psi::ccresponse ������������������������������������������������������������psi3/src/bin/ccresponse/ccresponse.cc���������������������������������������������������������������0000644�0001015�0000765�00000010042�11112564564�016361� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ /* ** CCRESPONSE: Program to compute CC linear response properties. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libpsio/psio.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libchkpt/chkpt.h> #include <physconst.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #include "Local.h" #include "globals.h" namespace psi { namespace ccresponse { /* Max length of ioff array */ #define IOFF_MAX 32641 /* Function prototypes */ void init_io(int argc, char *argv[]); void init_ioff(void); void title(void); void get_moinfo(void); void get_params(void); void cleanup(void); void exit_io(void); int **cacheprep_rhf(int level, int *cachefiles); int **cacheprep_uhf(int level, int *cachefiles); void cachedone_uhf(int **cachelist); void cachedone_rhf(int **cachelist); void hbar_extra(void); void cc2_hbar_extra(void); void sort_lamps(void); void lambda_residuals(void); void local_init(void); void local_done(void); void polar(void); void optrot(void); }} // namespace psi::ccresponse using namespace psi::ccresponse; int main(int argc, char *argv[]) { int **cachelist, *cachefiles; init_io(argc, argv); init_ioff(); title(); get_moinfo(); get_params(); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 2) { /*** UHF references ***/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } else { /*** RHF/ROHF references ***/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } if(params.local) local_init(); if (!strcmp(params.wfn,"CC2")) { cc2_hbar_extra(); } else { hbar_extra(); } sort_lamps(); /* should be removed sometime - provided by cclambda */ if(strcmp(params.wfn,"CC2")) lambda_residuals(); /* don't do this for CC2 */ if(!strcmp(params.prop,"POLARIZABILITY")) polar(); if(!strcmp(params.prop,"ROTATION")) optrot(); if(params.local) local_done(); dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCRESPONSE"; return(prgid); }} namespace psi { namespace ccresponse { void init_io(int argc, char *argv[]) { int i; char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); /* this assumes no cmdline args except filenames */ ip_cwk_add(":INPUT"); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i, 1); /* Clear out DIIS TOC Entries */ psio_close(CC_DIIS_AMP, 0); psio_close(CC_DIIS_ERR, 0); psio_open(CC_DIIS_AMP, 0); psio_open(CC_DIIS_ERR, 0); } void title(void) { fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCRESPONSE *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); } void exit_io(void) { int i; /* Close all dpd data files here */ for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); /* get rid of TMP files */ for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } void init_ioff(void) { int i; ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; } }} // namespace psi::ccresponse ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/compute_X.cc����������������������������������������������������������������0000644�0001015�0000765�00000010322�11112564564�016161� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void init_X(const char *pert, const char *cart, int irrep, double omega); void sort_X(const char *pert, const char *cart, int irrep, double omega); void cc2_sort_X(const char *pert, const char *cart, int irrep, double omega); void X1_build(const char *pert, const char *cart, int irrep, double omega); void X2_build(const char *pert, const char *cart, int irrep, double omega); void cc2_X1_build(const char *pert, const char *cart, int irrep, double omega); void cc2_X2_build(const char *pert, const char *cart, int irrep, double omega); double converged(const char *pert, const char *cart, int irrep, double omega); void save_X(const char *pert, const char *cart, int irrep, double omega); void print_X(const char *pert, const char *cart, int irrep, double omega); void update_X(const char *pert, const char *cart, int irrep, double omega); void diis(int iter, const char *pert, const char *cart, int irrep, double omega); double pseudopolar(const char *pert, const char *cart, int irrep, double omega); void cleanup(void); void exit_io(void); void amp_write(const char *pert, const char *cart, int irrep, double omega); void compute_X(const char *pert, const char *cart, int irrep, double omega) { int i, iter=0, done=0; double rms, polar, X2_norm; char lbl[32]; dpdbuf4 X2; fprintf(outfile, "\n\tComputing %s-%1s-Perturbed Wave Function (%5.3f E_h).\n", pert, cart, omega); init_X(pert, cart, irrep, omega); fprintf(outfile, "\tIter Pseudopolarizability RMS \n"); fprintf(outfile, "\t---- -------------------- -----------\n"); fflush(outfile); if (!strcmp(params.wfn,"CC2")) cc2_sort_X(pert, cart, irrep, omega); else sort_X(pert, cart, irrep, omega); polar = -2.0*pseudopolar(pert, cart, irrep, omega); fprintf(outfile, "\t%4d %20.12f\n", iter, polar); fflush(outfile); for(iter=1; iter <= params.maxiter; iter++) { if (!strcmp(params.wfn,"CC2")) { cc2_sort_X(pert, cart, irrep, omega); cc2_X1_build(pert, cart, irrep, omega); cc2_X2_build(pert, cart, irrep, omega); } else { sort_X(pert, cart, irrep, omega); X1_build(pert, cart, irrep, omega); X2_build(pert, cart, irrep, omega); } update_X(pert, cart, irrep, omega); rms = converged(pert, cart, irrep, omega); if(rms <= params.convergence) { done = 1; save_X(pert, cart, irrep, omega); if (!strcmp(params.wfn,"CC2")) cc2_sort_X(pert, cart, irrep, omega); else sort_X(pert, cart, irrep, omega); fprintf(outfile, "\t-----------------------------------------\n"); fprintf(outfile, "\tConverged %s-%1s-Perturbed Wfn to %4.3e\n", pert, cart, rms); if(params.print & 2) { sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); X2_norm = dpd_buf4_dot_self(&X2); dpd_buf4_close(&X2); X2_norm = sqrt(X2_norm); fprintf(outfile, "\tNorm of the converged X2 amplitudes %20.15f\n", X2_norm); amp_write(pert, cart, irrep, omega); } fflush(outfile); break; } if(params.diis) diis(iter, pert, cart, irrep, omega); save_X(pert, cart, irrep, omega); if (!strcmp(params.wfn,"CC2")) cc2_sort_X(pert, cart, irrep, omega); else sort_X(pert, cart, irrep, omega); polar = -2.0*pseudopolar(pert, cart, irrep, omega); fprintf(outfile, "\t%4d %20.12f %4.3e\n", iter, polar, rms); fflush(outfile); } if(!done) { fprintf(outfile, "\t *** Failed to Converge Perturbed Wave Function to %2.1e.\n", params.convergence); fflush(outfile); dpd_close(0); cleanup(); exit_io(); exit(PSI_RETURN_FAILURE); } /* Clean up disk space */ psio_close(CC_DIIS_AMP, 0); psio_close(CC_DIIS_ERR, 0); psio_open(CC_DIIS_AMP, 0); psio_open(CC_DIIS_ERR, 0); for(i=CC_TMP; i <= CC_TMP11; i++) { psio_close(i,0); psio_open(i,0); } /* print_X(pert, cart, irrep, omega); */ } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/converged.cc����������������������������������������������������������������0000644�0001015�0000765�00000003732�11112564564�016201� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double converged(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1, X1new; dpdbuf4 X2, X2new; double rms=0.0, value; int row, col, h, nirreps; char lbl[32]; nirreps = moinfo.nirreps; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&X1new); dpd_file2_mat_rd(&X1new); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(h=0; h < nirreps; h++) for(row=0; row < X1.params->rowtot[h]; row++) for(col=0; col < X1.params->coltot[h^irrep]; col++) { value = X1new.matrix[h][row][col] - X1.matrix[h][row][col]; rms += value * value; } dpd_file2_mat_close(&X1new); dpd_file2_close(&X1new); dpd_file2_mat_close(&X1); dpd_file2_close(&X1); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&X2new, h); dpd_buf4_mat_irrep_rd(&X2new, h); dpd_buf4_mat_irrep_init(&X2, h); dpd_buf4_mat_irrep_rd(&X2, h); for(row=0; row < X2.params->rowtot[h]; row++) for(col=0; col < X2.params->coltot[h^irrep]; col++) { value = X2new.matrix[h][row][col] - X2.matrix[h][row][col]; rms += value * value; } dpd_buf4_mat_irrep_close(&X2new, h); dpd_buf4_mat_irrep_close(&X2, h); } dpd_buf4_close(&X2new); dpd_buf4_close(&X2); return sqrt(rms); } }} // namespace psi::ccresponse ��������������������������������������psi3/src/bin/ccresponse/denom.cc��������������������������������������������������������������������0000644�0001015�0000765�00000006201�10757640026�015323� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom1(dpdfile2 *X1, double omega) { int nirreps, h, irrep; int i, a; int *occpi, *virtpi; dpdfile2 FAE, FMI; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; irrep = X1->my_irrep; if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); } else { dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); } dpd_file2_mat_init(X1); dpd_file2_mat_rd(X1); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(a=0; a < virtpi[h^irrep]; a++) X1->matrix[h][i][a] /= (FMI.matrix[h][i][i] - FAE.matrix[h^irrep][a][a] + omega); } dpd_file2_mat_wrt(X1); dpd_file2_mat_close(X1); dpd_file2_mat_close(&FAE); dpd_file2_mat_close(&FMI); dpd_file2_close(&FAE); dpd_file2_close(&FMI); } void denom2(dpdbuf4 *X2, double omega) { int nirreps, h, row, col, irrep; int i, j, I, J, a, b, A, B, isym, jsym, asym, bsym; dpdfile2 FAE, FMI; nirreps = moinfo.nirreps; irrep = X2->file.my_irrep; if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); } else { dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); dpd_file2_mat_init(&FAE); dpd_file2_mat_rd(&FAE); dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); dpd_file2_mat_init(&FMI); dpd_file2_mat_rd(&FMI); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(X2, h); dpd_buf4_mat_irrep_rd(X2, h); for(row=0; row < X2->params->rowtot[h]; row++) { i = X2->params->roworb[h][row][0]; j = X2->params->roworb[h][row][1]; isym = X2->params->psym[i]; jsym = X2->params->qsym[j]; I = i - moinfo.occ_off[isym]; J = j - moinfo.occ_off[jsym]; for(col=0; col < X2->params->coltot[h^irrep]; col++) { a = X2->params->colorb[h^irrep][col][0]; b = X2->params->colorb[h^irrep][col][1]; asym = X2->params->rsym[a]; bsym = X2->params->ssym[b]; A = a - moinfo.vir_off[asym]; B = b - moinfo.vir_off[bsym]; X2->matrix[h][row][col] /= (FMI.matrix[isym][I][I] + FMI.matrix[jsym][J][J] - FAE.matrix[asym][A][A] - FAE.matrix[bsym][B][B] + omega); } } dpd_buf4_mat_irrep_wrt(X2, h); dpd_buf4_mat_irrep_close(X2, h); } dpd_file2_mat_close(&FAE); dpd_file2_mat_close(&FMI); dpd_file2_close(&FAE); dpd_file2_close(&FMI); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/diis.cc���������������������������������������������������������������������0000644�0001015�0000765�00000020732�11112564564�015154� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* ** DIIS: Direct inversion in the iterative subspace routine to ** accelerate convergence of the CCSD amplitude equations. ** ** Substantially improved efficiency of this routine: ** (1) Keeping at most two error vectors in core at once. ** (2) Limiting direct product (overlap) calculation to unique pairs. ** (3) Using LAPACK's linear equation solver DGESV instead of flin. ** ** These improvements have been applied only to RHF cases so far. ** ** -TDC 12/22/01 ** Modified for CCRESPONSE, TDC, 5/03 */ void diis(int iter, const char *pert, const char *cart, int irrep, double omega) { int nvector=8; /* Number of error vectors to keep */ int h, nirreps; int row, col, word, p, q; int diis_cycle; int vector_length=0; int errcod, *ipiv; dpdfile2 T1, T1a, T1b; dpdbuf4 T2, T2a, T2b, T2c; psio_address start, end, next; double **error; double **B, *C, **vector; double product, determinant, maximum; char lbl[32]; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ /* Compute the length of a single error vector */ dpd_file2_init(&T1, CC_MISC, irrep, 0, 1, "XXX"); dpd_buf4_init(&T2, CC_MISC, irrep, 0, 5, 0, 5, 0, "XXX"); for(h=0; h < nirreps; h++) { vector_length += T1.params->rowtot[h] * T1.params->coltot[h^irrep]; vector_length += T2.params->rowtot[h] * T2.params->coltot[h^irrep]; } dpd_file2_close(&T1); dpd_buf4_close(&T2); /* Set the diis cycle value */ diis_cycle = (iter-1) % nvector; /* Build the current error vector and dump it to disk */ error = dpd_block_matrix(1,vector_length); word=0; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1a, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1b, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&T1b); dpd_file2_mat_rd(&T1b); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h^irrep]; col++) error[0][word++] = T1a.matrix[h][row][col] - T1b.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); dpd_file2_mat_close(&T1b); dpd_file2_close(&T1b); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2a, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2b, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); dpd_buf4_mat_irrep_init(&T2b, h); dpd_buf4_mat_irrep_rd(&T2b, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h^irrep]; col++) error[0][word++] = T2a.matrix[h][row][col] - T2b.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); dpd_buf4_mat_irrep_close(&T2b, h); } dpd_buf4_close(&T2a); dpd_buf4_close(&T2b); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); sprintf(lbl, "DIIS %s %1s Error Vectors", pert, cart); psio_write(CC_DIIS_ERR, lbl , (char *) error[0], vector_length*sizeof(double), start, &end); /* Store the current amplitude vector on disk */ word=0; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1a, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&T1a); dpd_file2_mat_rd(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h^irrep]; col++) error[0][word++] = T1a.matrix[h][row][col]; dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2a, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); dpd_buf4_mat_irrep_rd(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h^irrep]; col++) error[0][word++] = T2a.matrix[h][row][col]; dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); start = psio_get_address(PSIO_ZERO, diis_cycle*vector_length*sizeof(double)); sprintf(lbl, "DIIS %s %1s Amplitude Vectors", pert, cart); psio_write(CC_DIIS_AMP, lbl , (char *) error[0], vector_length*sizeof(double), start, &end); /* If we haven't run through enough iterations, set the correct dimensions for the extrapolation */ if(!(iter >= (nvector))) { if(iter < 2) { /* Leave if we can't extrapolate at all */ dpd_free_block(error, 1, vector_length); return; } nvector = iter; } /* Build B matrix of error vector products */ vector = dpd_block_matrix(2, vector_length); B = block_matrix(nvector+1,nvector+1); for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); sprintf(lbl, "DIIS %s %1s Error Vectors", pert, cart); psio_read(CC_DIIS_ERR, lbl, (char *) vector[0], vector_length*sizeof(double), start, &end); dot_arr(vector[0], vector[0], vector_length, &product); B[p][p] = product; for(q=0; q < p; q++) { start = psio_get_address(PSIO_ZERO, q*vector_length*sizeof(double)); sprintf(lbl, "DIIS %s %1s Error Vectors", pert, cart); psio_read(CC_DIIS_ERR, lbl, (char *) vector[1], vector_length*sizeof(double), start, &end); dot_arr(vector[1], vector[0], vector_length, &product); B[p][q] = B[q][p] = product; } } dpd_free_block(vector, 2, vector_length); for(p=0; p < nvector; p++) { B[p][nvector] = -1; B[nvector][p] = -1; } B[nvector][nvector] = 0; /* Find the maximum value in B and scale all its elements */ maximum = fabs(B[0][0]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) if(fabs(B[p][q]) > maximum) maximum = fabs(B[p][q]); for(p=0; p < nvector; p++) for(q=0; q < nvector; q++) B[p][q] /= maximum; /* Build the constant vector */ C = init_array(nvector+1); C[nvector] = -1; /* Solve the linear equations */ ipiv = init_int_array(nvector+1); errcod = C_DGESV(nvector+1, 1, &(B[0][0]), nvector+1, &(ipiv[0]), &(C[0]), nvector+1); if(errcod) { fprintf(outfile, "\nError in DGESV return in diis.\n"); exit(PSI_RETURN_FAILURE); } /* Build a new amplitude vector from the old ones */ vector = dpd_block_matrix(1, vector_length); for(p=0; p < vector_length; p++) error[0][p] = 0.0; for(p=0; p < nvector; p++) { start = psio_get_address(PSIO_ZERO, p*vector_length*sizeof(double)); sprintf(lbl, "DIIS %s %1s Amplitude Vectors", pert, cart); psio_read(CC_DIIS_AMP, lbl, (char *) vector[0], vector_length*sizeof(double), start, &end); for(q=0; q < vector_length; q++) error[0][q] += C[p] * vector[0][q]; } dpd_free_block(vector, 1, vector_length); /* Now place these elements into the DPD amplitude arrays */ word=0; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&T1a, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&T1a); for(h=0; h < nirreps; h++) for(row=0; row < T1a.params->rowtot[h]; row++) for(col=0; col < T1a.params->coltot[h^irrep]; col++) T1a.matrix[h][row][col] = error[0][word++]; dpd_file2_mat_wrt(&T1a); dpd_file2_mat_close(&T1a); dpd_file2_close(&T1a); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&T2a, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2a, h); for(row=0; row < T2a.params->rowtot[h]; row++) for(col=0; col < T2a.params->coltot[h^irrep]; col++) T2a.matrix[h][row][col] = error[0][word++]; dpd_buf4_mat_irrep_wrt(&T2a, h); dpd_buf4_mat_irrep_close(&T2a, h); } dpd_buf4_close(&T2a); /* Release memory and return */ /* free_matrix(vector, nvector); */ free_block(B); free(C); free(ipiv); dpd_free_block(error, 1, vector_length); } return; } }} // namespace psi::ccresponse ��������������������������������������psi3/src/bin/ccresponse/get_moinfo.cc���������������������������������������������������������������0000644�0001015�0000765�00000025531�10757640026�016356� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996 ** Modified for CCRESPONSE by TDC May, 2003 */ void get_moinfo(void) { int i, j, h, p, q, errcod, nactive, nirreps, nfzc, nfzv; int *actpi, offset, act_offset; double **scf, ***C; psio_address next; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.nao = chkpt_rd_nao(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.sopi = chkpt_rd_sopi(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.usotao = chkpt_rd_usotao(); moinfo.natom = chkpt_rd_natom(); moinfo.zvals = chkpt_rd_zvals(); chkpt_close(); nirreps = moinfo.nirreps; moinfo.ntri = moinfo.nmo * (moinfo.nmo+1)/2; moinfo.noei = moinfo.nso * (moinfo.nso+1)/2; moinfo.noei_ao = moinfo.nao * (moinfo.nao+1)/2; /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(nirreps); moinfo.fruocc = init_int_array(nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); moinfo.nactive = nactive; moinfo.nfzc = 0; for(h=0; h < nirreps; h++) moinfo.nfzc += moinfo.frdocc[h]; if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); moinfo.qt_aocc = init_int_array(nactive); moinfo.qt_bocc = init_int_array(nactive); moinfo.qt_avir = init_int_array(nactive); moinfo.qt_bvir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Occ Order", (char *) moinfo.qt_aocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Occ Order", (char *) moinfo.qt_bocc, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Alpha Active Virt Order", (char *) moinfo.qt_avir, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Beta Active Virt Order", (char *) moinfo.qt_bvir, sizeof(int)*nactive); } else { /** RHF or ROHF **/ moinfo.occpi = init_int_array(nirreps); moinfo.virtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); /* Get CC->QT and QT->CC active occupied and virtual reordering arrays */ moinfo.qt_occ = init_int_array(nactive); moinfo.qt_vir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Active Occ Order", (char *) moinfo.qt_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Active Virt Order", (char *) moinfo.qt_vir, sizeof(int)*nactive); moinfo.cc_occ = init_int_array(nactive); moinfo.cc_vir = init_int_array(nactive); psio_read_entry(CC_INFO, "QT->CC Active Occ Order", (char *) moinfo.cc_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "QT->CC Active Virt Order", (char *) moinfo.cc_vir, sizeof(int)*nactive); } /* Compute spatial-orbital reordering arrays */ moinfo.pitzer2qt = init_int_array(moinfo.nmo); moinfo.qt2pitzer = init_int_array(moinfo.nmo); reorder_qt(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitzer2qt, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) { j = moinfo.pitzer2qt[i]; moinfo.qt2pitzer[j] = i; } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; moinfo.nvirt = 0; for(i=0; i < nirreps; i++) moinfo.nvirt += moinfo.virtpi[i]; /*** arrange active SCF MO's ***/ actpi = init_int_array(nirreps); for(h=0; h < nirreps; h++) actpi[h] = moinfo.orbspi[h] - moinfo.frdocc[h] - moinfo.fruocc[h]; moinfo.actpi = actpi; chkpt_init(PSIO_OPEN_OLD); if(params.ref == 0 || params.ref == 1) { /* RHF/ROHF */ moinfo.scf = chkpt_rd_scf(); /* moinfo.scf = block_matrix(moinfo.nso, moinfo.nactive); offset = 0; act_offset = 0; for(h=0; h < nirreps; h++) { for(p=0; p < moinfo.orbspi[h]; p++) for(q=0; q < moinfo.actpi[h]; q++) moinfo.scf[p+offset][q+act_offset] = scf[p+offset][q+offset+moinfo.frdocc[h]]; offset += moinfo.orbspi[h]; act_offset += moinfo.actpi[h]; } free_block(scf); */ } else if(params.ref == 2) { /* UHF */ moinfo.scf_alpha = chkpt_rd_alpha_scf(); /* moinfo.scf_alpha = block_matrix(moinfo.nso, moinfo.nactive); offset = 0; act_offset = 0; for(h=0; h < nirreps; h++) { for(p=0; p < moinfo.orbspi[h]; p++) for(q=0; q < moinfo.actpi[h]; q++) moinfo.scf_alpha[p+offset][q+act_offset] = scf[p+offset][q+offset+moinfo.frdocc[h]]; offset += moinfo.orbspi[h]; act_offset += moinfo.actpi[h]; } free_block(scf); */ moinfo.scf_beta = chkpt_rd_beta_scf(); /* moinfo.scf_beta = block_matrix(moinfo.nso, moinfo.nactive); offset = 0; act_offset = 0; for(h=0; h < nirreps; h++) { for(p=0; p < moinfo.orbspi[h]; p++) for(q=0; q < moinfo.actpi[h]; q++) moinfo.scf_beta[p+offset][q+act_offset] = scf[p+offset][q+offset+moinfo.frdocc[h]]; offset += moinfo.orbspi[h]; act_offset += moinfo.actpi[h]; } free_block(scf); */ } /* Get the active virtual orbitals */ if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ C = (double ***) malloc(nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < nirreps; h++) { if(moinfo.sopi[h] && moinfo.virtpi[h]) { C[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); psio_read(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) C[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); } } moinfo.C = C; } chkpt_close(); } /* Frees memory allocated in get_moinfo() and dumps out the energy. */ void cleanup(void) { int i; free(moinfo.sopi); free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); free(moinfo.actpi); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { /* UHF */ free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); free(moinfo.qt_aocc); free(moinfo.qt_bocc); free(moinfo.qt_avir); free(moinfo.qt_bvir); free_block(moinfo.scf_alpha); free_block(moinfo.scf_beta); } else { free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.qt_occ); free(moinfo.qt_vir); free_block(moinfo.scf); for(i=0; i < moinfo.nirreps; i++) if(moinfo.sopi[i] && moinfo.virtpi[i]) free_block(moinfo.C[i]); free(moinfo.C); } free_block(moinfo.usotao); free_block(moinfo.MUX); free_block(moinfo.MUY); free_block(moinfo.MUZ); free_block(moinfo.LX); free_block(moinfo.LY); free_block(moinfo.LZ); free(moinfo.pitzer2qt); free(moinfo.qt2pitzer); free(moinfo.zvals); free(moinfo.mu_irreps); free(moinfo.l_irreps); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/get_params.cc���������������������������������������������������������������0000644�0001015�0000765�00000025124�10757640026�016350� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include <physconst.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void get_params() { int i, errcod, ref, count, iconv, *tmpi; char *junk, units[20]; errcod = ip_string("WFN", &(params.wfn), 0); if(strcmp(params.wfn, "CCSD") && strcmp(params.wfn, "CC2")) { fprintf(outfile, "Invalid value of input keyword WFN: %s\n", params.wfn); exit(PSI_RETURN_FAILURE); } params.print = 1; errcod = ip_data("PRINT","%d",&(params.print),0); fndcor(&(params.memory), infile, outfile); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.cachelev = 0; errcod = ip_string("REFERENCE", &(junk),0); /* if no reference is given, assume rhf */ if (errcod != IPE_OK) { ref = 0; } else { if(!strcmp(junk, "RHF")) ref = 0; else if(!strcmp(junk, "ROHF")) ref = 1; else if(!strcmp(junk, "UHF")) ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* Make sure the value of ref matches that from CC_INFO */ if(params.ref != ref) { fprintf(outfile, "Value of REFERENCE from input.dat (%1d) and CC_INFO (%1d) do not match!\n", ref, params.ref); fprintf(outfile, "Is this what you want to do?\n"); params.ref = ref; } params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(errcod != IPE_OK) params.dertype = 0; else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; /* linear response */ else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } if(ip_exist("GAUGE",0)) { errcod = ip_string("GAUGE", &(params.gauge), 0); if(strcmp(params.gauge,"LENGTH") && strcmp(params.gauge,"VELOCITY") && strcmp(params.gauge,"BOTH")) { printf("Invalid choice of gauge: %s\n", params.gauge); exit(PSI_RETURN_FAILURE); } } else params.gauge = strdup("LENGTH"); /* grab the field frequencies from input -- a few different units are converted to E_h */ if(ip_exist("OMEGA",0)) { errcod = ip_count("OMEGA", &count, 0); if(errcod == IPE_NOT_AN_ARRAY || count == 1) { /* assume Hartrees and only one frequency */ params.nomega = 1; params.omega = init_array(1); errcod = ip_data("OMEGA", "%lf", &(params.omega[0]), 0); } else if(count >= 2) { params.nomega = count-1; params.omega = init_array(params.nomega); errcod = ip_data("OMEGA", "%s", units, 1, count-1); for(junk = units; *junk != '\0'; junk++) if(*junk>='a' && *junk <= 'z') *junk += 'A' - 'a'; for(i=0; i < count-1; i++) { errcod = ip_data("OMEGA", "%lf", &(params.omega[i]), 1, i); if(!strcmp(units, "HZ")) params.omega[i] *= _h / _hartree2J; else if(!strcmp(units, "AU")) 1; /* do nothing */ else if(!strcmp(units, "NM")) params.omega[i] = (_c*_h*1e9)/(params.omega[i]*_hartree2J); else if(!strcmp(units, "EV")) params.omega[i] /= _hartree2ev; else { fprintf(outfile, "\n\tError in unit for input field frequencies. Must use one of:\n"); fprintf(outfile, "\tau, hz, nm, or ev.\n"); exit(PSI_RETURN_FAILURE); } } } else { fprintf(outfile, "\n\tError reading input field frequencies. Please use the format:\n"); fprintf(outfile, "\t omega = (value1 value2 ... units)\n"); fprintf(outfile, "\twhere units = hartrees, hz, nm, or ev.\n"); exit(PSI_RETURN_FAILURE); } } else { /* assume static field by default */ params.omega = init_array(1); params.omega[0] = 0.0; params.nomega = 1; } moinfo.mu_irreps = init_int_array(3); errcod = ip_int_array("MU_IRREPS", moinfo.mu_irreps, 3); if(errcod == IPE_OK) { moinfo.irrep_x = moinfo.mu_irreps[0]; moinfo.irrep_y = moinfo.mu_irreps[1]; moinfo.irrep_z = moinfo.mu_irreps[2]; } else { fprintf(outfile, "\nYou must supply the irreps of x, y, and z with the MU_IRREPS keyword.\n"); exit(PSI_RETURN_FAILURE); } /* compute the irreps of the angular momentum operator while we're here */ moinfo.l_irreps = init_int_array(3); for(i=0; i < 3; i++) moinfo.l_irreps[i] = moinfo.mu_irreps[(int) (i+1)%3] ^ moinfo.mu_irreps[(int) (i+2)%3]; moinfo.irrep_Rx = moinfo.l_irreps[0]; moinfo.irrep_Ry = moinfo.l_irreps[1]; moinfo.irrep_Rz = moinfo.l_irreps[2]; params.maxiter = 50; errcod = ip_data("MAXITER","%d",&(params.maxiter),0); params.convergence = 1e-7; errcod = ip_data("CONVERGENCE","%d",&(iconv),0); if(errcod == IPE_OK) params.convergence = 1.0*pow(10.0,(double) -iconv); params.diis = 1; errcod = ip_boolean("DIIS", &(params.diis), 0); if(ip_exist("PROPERTY",0)) { errcod = ip_string("PROPERTY", &(params.prop), 0); if(strcmp(params.prop,"POLARIZABILITY") && strcmp(params.prop,"ROTATION") && strcmp(params.prop,"ALL")) { fprintf(outfile, "Invalid choice of response property: %s\n", params.prop); exit(PSI_RETURN_FAILURE); } } else params.prop = strdup("POLARIZABILITY"); if(ip_exist("ABCD",0)) { errcod = ip_string("ABCD", &(params.abcd), 0); if(strcmp(params.abcd,"NEW") && strcmp(params.abcd,"OLD")) { fprintf(outfile, "Invalid ABCD algorithm: %s\n", params.abcd); exit(PSI_RETURN_FAILURE); } } else params.abcd = strdup("NEW"); params.restart = 1; errcod = ip_boolean("RESTART", ¶ms.restart, 0); params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "Invalid local correlation method: %s\n", local.method); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.weakp = (char *) malloc(4 * sizeof(char)); sprintf(local.weakp, "%s", "NONE"); } if(params.dertype == 3) local.filter_singles = 0; else local.filter_singles = 1; ip_boolean("LOCAL_FILTER_SINGLES", &(local.filter_singles), 0); local.cphf_cutoff = 0.10; ip_data("LOCAL_CPHF_CUTOFF", "%lf", &(local.cphf_cutoff), 0); local.freeze_core = NULL; ip_string("FREEZE_CORE", &local.freeze_core, 0); if(local.freeze_core == NULL) local.freeze_core = strdup("FALSE"); if(ip_exist("LOCAL_PAIRDEF",0)){ errcod = ip_string("LOCAL_PAIRDEF", &(local.pairdef), 0); if(strcmp(local.pairdef,"BP") && strcmp(local.pairdef,"RESPONSE")) { fprintf(outfile, "Invalid keyword for strong/weak pair definition: %s\n", local.pairdef); exit(PSI_RETURN_FAILURE); } } else if(params.local && params.dertype == 3) local.pairdef = strdup("RESPONSE"); else if(params.local) local.pairdef = strdup("BP"); params.analyze = 0; ip_boolean("ANALYZE", &(params.analyze), 0); params.num_amps = 5; if(ip_exist("NUM_AMPS", 0)) { errcod = ip_data("NUM_AMPS", "%d", &(params.num_amps),0); } params.sekino = 0; if(ip_exist("SEKINO",0)) { errcod = ip_boolean("SEKINO", ¶ms.sekino, 0); if(errcod != IPE_OK) params.sekino = 0; } fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); if(!strcmp(params.prop,"ALL")) fprintf(outfile, "\tProperty = POLARIZABILITY + ROTATION\n"); else fprintf(outfile, "\tProperty = %s\n", params.prop); fprintf(outfile, "\tReference wfn = %5s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); fprintf(outfile, "\tMemory (Mbytes) = %5.1f\n",params.memory/1e6); fprintf(outfile, "\tCache Level = %1d\n", params.cachelev); fprintf(outfile, "\tPrint Level = %1d\n", params.print); fprintf(outfile, "\tMaxiter = %3d\n", params.maxiter); fprintf(outfile, "\tConvergence = %3.1e\n", params.convergence); fprintf(outfile, "\tRestart = %s\n", params.restart ? "Allowed" : "Not Allowed"); fprintf(outfile, "\tDIIS = %s\n", params.diis ? "Yes" : "No"); fprintf(outfile, "\tModel III = %s\n", params.sekino ? "Yes" : "No"); fprintf(outfile, "\tABCD = %s\n", params.abcd); fprintf(outfile, "\tIrrep X = %3s\n", moinfo.labels[moinfo.irrep_x]); fprintf(outfile, "\tIrrep Y = %3s\n", moinfo.labels[moinfo.irrep_y]); fprintf(outfile, "\tIrrep Z = %3s\n", moinfo.labels[moinfo.irrep_z]); fprintf(outfile, "\tIrrep RX = %3s\n", moinfo.labels[moinfo.irrep_Rx]); fprintf(outfile, "\tIrrep RY = %3s\n", moinfo.labels[moinfo.irrep_Ry]); fprintf(outfile, "\tIrrep RZ = %3s\n", moinfo.labels[moinfo.irrep_Rz]); fprintf(outfile, "\tGauge = %s\n", params.gauge); for(i=0; i < params.nomega; i++) { if(params.omega[i] == 0.0) fprintf(outfile, "\tApplied field %2d = 0.000\n", i); else fprintf(outfile, "\tApplied field %2d = %5.3f E_h (%6.2f nm, %5.3f eV, %8.2f cm-1)\n", i, params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), _hartree2ev*params.omega[i], _hartree2wavenumbers*params.omega[i]); } fprintf(outfile, "\tAnalyze X2 Amps = %s\n", params.analyze ? "Yes" : "No"); fprintf(outfile, "\tLocal CC = %s\n", params.local ? "Yes" : "No"); if(params.local) { fprintf(outfile, "\tLocal Cutoff = %3.1e\n", local.cutoff); fprintf(outfile, "\tLocal Method = %s\n", local.method); fprintf(outfile, "\tWeak pairs = %s\n", local.weakp); fprintf(outfile, "\tFilter singles = %s\n", local.filter_singles ? "Yes" : "No"); fprintf(outfile, "\tLocal pairs = %s\n", local.pairdef); fprintf(outfile, "\tLocal CPHF cutoff = %3.1e\n", local.cphf_cutoff); } fprintf(outfile, "\n"); } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/globals.h�������������������������������������������������������������������0000644�0001015�0000765�00000000771�10754663017�015516� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <ccfiles.h> namespace psi { namespace ccresponse { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN int *ioff; EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct Local local; #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) }} // namespace psi::ccresponse �������psi3/src/bin/ccresponse/hbar_extra.cc���������������������������������������������������������������0000644�0001015�0000765�00000002536�10757640026�016347� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void hbar_extra(void) { dpdfile2 lt; dpdbuf4 W1, W2, W; dpdbuf4 t2, l2; /* LIjAb * TIjAb */ dpd_file2_init(<, CC_OEI, 0, 0, 0, "Lt_IJ"); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 7, 2, 7, 0, "LIJAB 0 -1"); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 7, 2, 7, 0, "tIJAB"); dpd_contract442(&l2, &t2, <, 0, 0, -1.0, 0.0); dpd_buf4_close(&t2); dpd_buf4_close(&l2); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LIjAb 0 -1"); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract442(&l2, &t2, <, 0, 0, -1.0, 1.0); dpd_buf4_close(&t2); dpd_buf4_close(&l2); dpd_file2_close(<); /* 2 W(ME,jb) + W(Me,Jb) */ dpd_buf4_init(&W1, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_copy(&W1, CC_HBAR, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_close(&W1); dpd_buf4_init(&W1, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_buf4_init(&W2, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_axpy(&W2, &W1, 2); dpd_buf4_close(&W2); dpd_buf4_sort(&W1, CC_HBAR, rspq, 10, 10, "2 W(jb,ME) + W(Jb,Me)"); dpd_buf4_close(&W1); } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/HXY.cc����������������������������������������������������������������������0000644�0001015�0000765�00000002270�11112564564�014671� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ /*! \defgroup CCRESPONSE ccresponse: Coupled-cluster response module */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double HXY(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { double polar; dpdfile2 X1, Y1, z; dpdbuf4 I; char lbl[32]; sprintf(lbl, "Z_%s_%1s_IA", pert_y, cart_y); dpd_file2_init(&z, CC_TMP0, irrep_y, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_y, cart_y, omega_y); dpd_file2_init(&Y1, CC_OEI, irrep_y, 0, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot24(&Y1, &I, &z, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_file2_close(&Y1); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); polar = 2.0 * dpd_file2_dot(&X1, &z); dpd_file2_close(&X1); dpd_file2_close(&z); return polar; } }} // namespace psi::ccresponse ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/init_X.cc�������������������������������������������������������������������0000644�0001015�0000765�00000003170�11112564564�015453� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libpsio/psio.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom1(dpdfile2 *X1, double omega); void denom2(dpdbuf4 *X2, double omega); void local_filter_T1(dpdfile2 *T1); void local_filter_T2(dpdbuf4 *T2); void init_X(const char *pert, const char *cart, int irrep, double omega) { char lbl[32]; dpdfile2 mu1, X1, FAE, FMI; dpdbuf4 X2, mu2; sprintf(lbl, "%sBAR_%1s_IA", pert, cart); dpd_file2_init(&mu1, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); if(!params.restart || !psio_tocscan(CC_OEI, lbl)) { dpd_file2_copy(&mu1, CC_OEI, lbl); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); if(params.local && local.filter_singles) local_filter_T1(&X1); else denom1(&X1, omega); dpd_file2_close(&X1); } else fprintf(outfile, "\tUsing existing %s amplitudes.\n", lbl); dpd_file2_close(&mu1); sprintf(lbl, "%sBAR_%1s_IjAb", pert, cart); dpd_buf4_init(&mu2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); if(!params.restart || !psio_tocscan(CC_LR, lbl)) { dpd_buf4_copy(&mu2, CC_LR, lbl); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); if(params.local) local_filter_T2(&X2); else denom2(&X2, omega); dpd_buf4_close(&X2); } else fprintf(outfile, "\tUsing existing %s amplitudes.\n", lbl); dpd_buf4_close(&mu2); } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/lambda_residuals.cc���������������������������������������������������������0000644�0001015�0000765�00000006301�10754663017�017517� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* lambda_residuals(): Computes the "lambda residual" contributions to ** the <0|L*(HBAR*X1*Y1)c|0> part of the response function. ** ** Type-I residuals are taken directly from cclambda: L2*D, L2*Wmnij, ** L2*Wabef, L2*Wamef, L2*Wmnie, and L2*three-body-terms. These are ** already computed by the L2 code in cclambda (see cclambda/L2.c). ** ** Type-II residuals are computed once in lambda_residuals(): L1*Fme ** and L2*Wmbej. These are computed explicitly here with a minimum ** number of contractions. ** ** TDC, 9/10/05 */ void lambda_residuals(void) { dpdbuf4 L2, Z, W; dpdfile2 L1, F; int h, i, e, m, a, I, E, M, A, Isym, Esym, Msym, Asym; int row, col; /* Generate spin-adapted Type-I Lambda-residual contributions to LHX1Y1 */ dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LHX1Y1 Residual I"); dpd_buf4_scmcopy(&L2, CC_LAMPS, "LHX1Y1 I (2 Lijab - Lijba)", 2); dpd_buf4_sort_axpy(&L2, CC_LAMPS, pqsr, 0, 5, "LHX1Y1 I (2 Lijab - Lijba)", -1); dpd_buf4_close(&L2); /* Generate spin-adapted Type-II Lambda-residual contributions to LHX1Y1 */ dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "LHX1Y1 Residual II"); dpd_file2_init(&L1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); dpd_file2_mat_init(&L1); dpd_file2_mat_rd(&L1); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_file2_mat_init(&F); dpd_file2_mat_rd(&F); for(h=0; h < moinfo.nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; a = Z.params->roworb[h][row][1]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; e = Z.params->colorb[h][col][1]; I = L1.params->rowidx[i]; Isym = L1.params->psym[i]; A = L1.params->colidx[a]; Asym = L1.params->qsym[a]; M = F.params->rowidx[m]; Msym = F.params->psym[m]; E = F.params->colidx[e]; Esym = F.params->qsym[e]; if((Isym == Asym) && (Msym == Esym)) Z.matrix[h][row][col] = (L1.matrix[Isym][I][A] * F.matrix[Msym][M][E]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_file2_mat_close(&F); dpd_file2_close(&F); dpd_file2_mat_close(&L1); dpd_file2_close(&L1); dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_buf4_sort(&L2, CC_TMP0, prqs, 10, 10, "2 Lijab - Lijba (ia,jb)"); dpd_buf4_sort(&L2, CC_TMP0, psqr, 10, 10, "2 Lijab - Lijba (ib,ja)"); dpd_buf4_close(&L2); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj"); dpd_buf4_init(&L2, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 Lijab - Lijba (ia,jb)"); dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); dpd_buf4_init(&L2, CC_TMP0, 0, 10, 10, 10, 10, 0, "2 Lijab - Lijba (ib,ja)"); dpd_contract444(&L2, &W, &Z, 0, 0, -1, 1); dpd_buf4_close(&L2); dpd_buf4_close(&W); dpd_buf4_sort(&Z, CC_LAMPS, psrq, 10, 10, "LHX1Y1 Residual II"); dpd_buf4_close(&Z); } }} // namespace psi::ccresponse �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/LCX.cc����������������������������������������������������������������������0000644�0001015�0000765�00000012365�11112564564�014655� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double LCX(const char *pert_c, const char *cart_c, int irrep_c, const char *pert_x, const char *cart_x, int irrep_x, double omega) { double polar=0.0; dpdfile2 X1, mu1, z1, l1, mu, lt, xc; dpdbuf4 X2, mu2, z2, l2, Z; char lbl[32]; /*** Mu * X1 ***/ sprintf(lbl, "%s_%1s_IA", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); polar += 2.0 * dpd_file2_dot(&mu1, &X1); dpd_file2_close(&X1); dpd_file2_close(&mu1); /*** L1 * MuBAR * X1 + L1 * MuBAR * X2 ***/ dpd_file2_init(&z1, CC_TMP0, 0, 0, 1, "z_IA"); sprintf(lbl, "%sBAR_%1s_MI", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&mu1, &X1, &z1, 1, 1, -1, 0); dpd_file2_close(&X1); dpd_file2_close(&mu1); sprintf(lbl, "%sBAR_%1s_AE", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 1, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&X1, &mu1, &z1, 0, 0, 1, 1); dpd_file2_close(&X1); dpd_file2_close(&mu1); sprintf(lbl, "%sBAR_%1s_ME", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert_x, cart_x, omega); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_dot24(&mu1, &X2, &z1, 0, 0, 1, 1); dpd_buf4_close(&X2); dpd_file2_close(&mu1); dpd_file2_init(&l1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); polar += 2.0 * dpd_file2_dot(&z1, &l1); dpd_file2_close(&l1); dpd_file2_close(&z1); /*** L2 * MuBAR * X1 + L2 * MuBAR * X2 ***/ dpd_file2_init(&xc, CC_TMP0, 0, 0, 0, "XC_IJ"); sprintf(lbl, "%s_%1s_IA", pert_c, cart_c); dpd_file2_init(&mu, CC_OEI, irrep_c, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&X1, &mu, &xc, 0, 0, 2.0, 0.0); dpd_file2_close(&X1); dpd_file2_close(&mu); dpd_file2_close(&xc); dpd_file2_init(<, CC_OEI, 0, 0, 0, "Lt_IJ"); dpd_file2_init(&xc, CC_TMP0, 0, 0, 0, "XC_IJ"); polar += dpd_file2_dot(<, &xc); dpd_file2_close(&xc); dpd_file2_close(<); dpd_buf4_init(&z2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_scm(&z2, 0); dpd_buf4_close(&z2); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_buf4_init(&z2, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "%sBAR_%1s_MbIj", pert_c, cart_c); dpd_buf4_init(&mu2, CC_LR, irrep_c, 10, 0, 10, 0, 0, lbl); dpd_contract244(&X1, &mu2, &Z, 0, 0, 1, 1, 0); dpd_buf4_close(&mu2); dpd_buf4_axpy(&Z, &z2, -1); dpd_buf4_sort(&Z, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z, &z2, -1); dpd_buf4_close(&Z); dpd_file2_close(&X1); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "%sBAR_%1s_AE", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 1, 1, lbl); dpd_contract424(&X2, &mu1, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&mu1); dpd_buf4_axpy(&Z, &z2, 1); dpd_buf4_sort(&Z, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z, &z2, 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "%sBAR_%1s_MI", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 0, 0, lbl); dpd_contract244(&mu1, &X2, &Z, 0, 0, 0, 1, 0); dpd_file2_close(&mu1); dpd_buf4_axpy(&Z, &z2, -1); dpd_buf4_sort(&Z, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z, &z2, -1); dpd_buf4_close(&Z); dpd_buf4_close(&X2); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); polar += dpd_buf4_dot(&l2, &z2); dpd_buf4_close(&l2); dpd_buf4_close(&z2); if(params.sekino) { /* disconnected piece for Sekino-Bartlett modelIII */ /* L2 * MUBAR * X1 */ sprintf(lbl, "%sZ_IA_%1s", pert_c, cart_c); dpd_file2_init(&z1, CC_TMP0, irrep_c, 0, 1, lbl); sprintf(lbl, "%sBAR_%1s_IA", pert_c, cart_c); dpd_file2_init(&mu1, CC_OEI, irrep_c, 0, 1, lbl); dpd_buf4_init(&l2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); dpd_dot24(&mu1, &l2, &z1, 0, 0, 1, 0); dpd_buf4_close(&l2); dpd_file2_close(&mu1); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); polar += 2.0 * dpd_file2_dot(&X1, &z1); dpd_file2_close(&X1); dpd_file2_close(&z1); } return polar; } }} // namespace psi::ccresponse ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/LHX1Y1.cc�������������������������������������������������������������������0000644�0001015�0000765�00000011667�11112564564�015161� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* LHX1Y1(): Computes the <0|L*(HBAR*X1*Y1)c |0> contributions to the ** linear response function. Note that most of the work is actually ** already done in other codes because the contractions may all be ** formulated in as products of X1*Y1 with L*HBAR, the latter of which ** are referred to in this code as "lambda residuals". ** ** Type-I residuals are taken directly from cclambda: L2*D, L2*Wmnij, ** L2*Wabef, L2*Wamef, L2*Wmnie, and L2*three-body-terms. ** ** Type-II residuals are computed once in lambda_residuals(): L1*Fme ** and L2*Wmbej. ** ** TDC, 9/10/05 */ void build_XY(const char *, const char *, int, double, const char *, const char *, int, double); double LHX1Y1(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { dpdfile2 F, X1, Y1, Zmi, Zae_1, Zae_2, Zfb, Znj, ZIA, L1, t1, z; dpdbuf4 Z1, Z2, I, tau, W1, W2, ZIjAb, L2, T2, W, Z; double polar, polar_I, polar_II; char lbl[32]; int Gbm, Gfe, bm, b, m, Gb, Gm, Ge, Gf, B, M, fe, f, e, ef, nrows, ncols; double *X; build_XY(pert_x, cart_x, irrep_x, omega_x, pert_y, cart_y, irrep_y, omega_y); /* Type-I L2 residual */ dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LHX1Y1 I (2 Lijab - Lijba)"); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "X*Y(ij,ab)"); polar_I = 2.0 * dpd_buf4_dot(&L2, &Z1); dpd_buf4_close(&Z1); dpd_buf4_close(&L2); /* Type-II L2 residual */ dpd_buf4_init(&L2, CC_LAMPS, 0, 10, 10, 10, 10, 0, "LHX1Y1 Residual II"); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "(X*Y+Y*X)(ie,ma)"); polar_II = -2.0 * dpd_buf4_dot(&L2, &Z1); dpd_buf4_close(&Z1); dpd_buf4_close(&L2); return polar_I+polar_II; } /* build_XY(): Compute products of X1 and Y1 for the ** <0|L*(HBAR*X1*Y1)|0> part of the response function. ** ** For the Type-I residuals: ** X*Y(ij,ab) = X(i,a) * Y(j,b) ** ** For the Type-II residuals: ** (X*Y+Y*X)(ie,ma) = [X(i,e) * Y(m,a) + X(m,a) * Y(i,e)] ** ** TDC, 9/10/05 **/ void build_XY(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { int h, row, col, i, j, m, e, f, a, I, J, M, E, F, A, ij, ef; int Isym, Jsym, Msym, Esym, Fsym, Asym; int nirreps; dpdbuf4 Z, Z1; dpdfile2 X1, Y1; char lbl[32]; nirreps = moinfo.nirreps; sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_y, cart_y, omega_y); dpd_file2_init(&Y1, CC_OEI, irrep_y, 0, 1, lbl); dpd_file2_mat_init(&Y1); dpd_file2_mat_rd(&Y1); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "X*Y(ij,ab)"); dpd_buf4_scm(&Z, 0.0); for(h=0; h< nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; j = Z.params->roworb[h][row][1]; I = X1.params->rowidx[i]; J = Y1.params->rowidx[j]; Isym = X1.params->psym[i]; Jsym = Y1.params->psym[j]; for(col=0; col < Z.params->coltot[h]; col++) { e = Z.params->colorb[h][col][0]; f = Z.params->colorb[h][col][1]; E = X1.params->colidx[e]; F = Y1.params->colidx[f]; Esym = X1.params->qsym[e]; Fsym = Y1.params->qsym[f]; if((Isym^Esym)==irrep_x && (Jsym^Fsym)==irrep_y) Z.matrix[h][row][col] = (X1.matrix[Isym][I][E] * Y1.matrix[Jsym][J][F]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "(X*Y+Y*X)(ie,ma)"); dpd_buf4_scm(&Z, 0.0); for(h=0; h< nirreps; h++) { dpd_buf4_mat_irrep_init(&Z, h); for(row=0; row < Z.params->rowtot[h]; row++) { i = Z.params->roworb[h][row][0]; e = Z.params->roworb[h][row][1]; I = X1.params->rowidx[i]; E = X1.params->colidx[e]; Isym = X1.params->psym[i]; Esym = X1.params->qsym[e]; for(col=0; col < Z.params->coltot[h]; col++) { m = Z.params->colorb[h][col][0]; a = Z.params->colorb[h][col][1]; M = Y1.params->rowidx[m]; A = Y1.params->colidx[a]; Msym = Y1.params->psym[m]; Asym = Y1.params->qsym[a]; if(((Isym^Esym)==irrep_x) && ((Msym^Asym)==irrep_y)) Z.matrix[h][row][col] = (X1.matrix[Isym][I][E] * Y1.matrix[Msym][M][A]) + (Y1.matrix[Isym][I][E] * X1.matrix[Msym][M][A]); } } dpd_buf4_mat_irrep_wrt(&Z, h); dpd_buf4_mat_irrep_close(&Z, h); } dpd_buf4_close(&Z); dpd_file2_mat_close(&X1); dpd_file2_close(&X1); dpd_file2_mat_close(&Y1); dpd_file2_close(&Y1); } }} // namespace psi::ccresponse �������������������������������������������������������������������������psi3/src/bin/ccresponse/LHX1Y2.cc�������������������������������������������������������������������0000644�0001015�0000765�00000034736�11112564564�015164� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double LHX1Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { dpdfile2 z, z1, X1, l1, F; dpdbuf4 Z, Z1, Z2, I, Y2, L2, W; char lbl[32]; double polar; int nirreps, Gbm, Gef, Gjf, Ge, Gf, Gj, bm, ef, jf; int Gfe, Gb, Gm, b, m, B, M, e, f, fe, nrows, ncols, nlinks; double *X; sprintf(lbl, "Z_%s_%1s_MI", pert_y, cart_y); dpd_file2_init(&z1, CC_TMP0, irrep_y, 0, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&I, &Y2, &z1, 0, 0, 1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&z1, &X1, &z, 1, 1, -1, 0); dpd_file2_close(&X1); dpd_file2_close(&z1); dpd_file2_close(&z); sprintf(lbl, "Z_%s_%1s_AE", pert_y, cart_y); dpd_file2_init(&z1, CC_TMP0, irrep_y, 1, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&Y2, &I, &z1, 3, 3, -1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract222(&X1, &z1, &z, 0, 0, 1, 1); dpd_file2_close(&X1); dpd_file2_close(&z1); dpd_file2_close(&z); sprintf(lbl, "Z_%s_%1s_ME", pert_x, cart_x); dpd_file2_init(&z1, CC_TMP0, irrep_x, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_dot24(&X1, &I, &z1, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_file2_close(&X1); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_dot24(&z1, &Y2, &z, 0, 0, 1, 1); dpd_buf4_close(&Y2); dpd_file2_close(&z1); dpd_file2_close(&z); dpd_file2_init(&z, CC_TMP0, 0, 0, 1, "Z(I,A) Final"); dpd_file2_init(&l1, CC_LAMPS, 0, 0, 1, "LIA 0 -1"); polar = 2.0 * dpd_file2_dot(&z, &l1); dpd_file2_close(&l1); dpd_file2_close(&z); /* fprintf(outfile, "L(1)HX1Y2 = %20.12f\n", polar); */ dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_scm(&Z, 0); sprintf(lbl, "Z_%s_%1s_MI", pert_x, cart_x); dpd_file2_init(&z1, CC_TMP0, irrep_x, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&F, &X1, &z1, 0, 0, 1, 0); dpd_file2_close(&F); dpd_file2_close(&X1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract244(&z1, &Y2, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Y2); dpd_file2_close(&z1); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_AE", pert_x, cart_x); dpd_file2_init(&z1, CC_TMP0, irrep_x, 1, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); dpd_contract222(&X1, &F, &z1, 1, 1, -1, 0); dpd_file2_close(&F); dpd_file2_close(&X1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract424(&Y2, &z1, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&Y2); dpd_file2_close(&z1); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); sprintf(lbl, "Z_%s_%1s_MbEj (bM,jE)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 11, 10, 11, 10, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); /* dpd_contract244(&X1, &W, &Z1, 1, 2, 1, 1, 0); */ /* add out-of-core algorithm here */ /* Z(bm,jf) <-- X1(j,e) * W(bm,ef) */ dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(Gbm=0; Gbm < moinfo.nirreps; Gbm++) { Gef = Gbm; Gjf = Gbm^irrep_x; dpd_buf4_mat_irrep_init(&Z1, Gbm); dpd_buf4_mat_irrep_row_init(&W, Gbm); for(bm=0; bm < W.params->rowtot[Gbm]; bm++) { dpd_buf4_mat_irrep_row_rd(&W, Gbm, bm); for(Gj=0; Gj < moinfo.nirreps; Gj++) { Gf = Gjf^Gj; Ge = Gef^Gf; ef = W.col_offset[Gbm][Ge]; jf = Z1.col_offset[Gbm][Gj]; nrows = moinfo.occpi[Gj]; ncols = moinfo.virtpi[Gf]; nlinks = moinfo.virtpi[Ge]; if(nrows && ncols && nlinks) C_DGEMM('n','n', nrows, ncols, nlinks, 1.0, &(X1.matrix[Gj][0][0]), nlinks, &(W.matrix[Gbm][0][ef]), ncols, 0.0, &(Z1.matrix[Gbm][bm][jf]), ncols); } } dpd_buf4_mat_irrep_row_close(&W, Gbm); dpd_buf4_mat_irrep_wrt(&Z1, Gbm); dpd_buf4_mat_irrep_close(&Z1, Gbm); } dpd_file2_mat_close(&X1); /* out-of-core algorithm done */ dpd_buf4_close(&W); sprintf(lbl, "Z_%s_%1s_MbEj (ME,jb)", pert_x, cart_x); dpd_buf4_sort(&Z1, CC_TMP0, qsrp, 10, 10, lbl); dpd_buf4_close(&Z1); sprintf(lbl, "Z_%s_%1s_WMbEj (bM,Ej)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 11, 11, 11, 11, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_contract244(&X1, &W, &Z1, 0, 0, 0, -1, 0); dpd_buf4_close(&W); sprintf(lbl, "Z_%s_%1s_MbEj (ME,jb)", pert_x, cart_x); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qrsp, 10, 10, lbl, 1); dpd_buf4_close(&Z1); sprintf(lbl, "Z_%s_%1s_MbeJ (Mb,eJ)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 10, 11, 10, 11, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_contract424(&W, &X1, &Z1, 1, 0, 1, 1, 0); dpd_buf4_close(&W); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_x, cart_x); dpd_buf4_sort(&Z1, CC_TMP0, prsq, 10, 10, lbl); dpd_buf4_close(&Z1); sprintf(lbl, "Z_%s_%1s_MbeJ (bM,eJ)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 11, 11, 11, 11, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract424(&W, &X1, &Z1, 3, 1, 0, -1, 0); dpd_buf4_close(&W); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_x, cart_x); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qrsp, 10, 10, lbl, 1); dpd_buf4_close(&Z1); dpd_file2_close(&X1); sprintf(lbl, "Z_%s_%1s_MbEj (ME,jb)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "Z_%s_%1s_(2MbEj+MbeJ) (ME,JB)", pert_x, cart_x); dpd_buf4_scmcopy(&Z1, CC_TMP0, lbl, 2); dpd_buf4_close(&Z1); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "Z_%s_%1s_(2MbEj+MbeJ) (ME,JB)", pert_x, cart_x); dpd_buf4_init(&Z2, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); dpd_buf4_axpy(&Z1, &Z2, 1); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); sprintf(lbl, "X_%s_%1s_(2IAjb-IbjA) (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "Z_%s_%1s_(2MbEj+MbeJ) (ME,JB)", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); dpd_contract444(&Y2, &Z, &Z1, 0, 1, 0.5, 0); dpd_buf4_close(&Z); dpd_buf4_close(&Y2); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) Ib"); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_x, cart_x); dpd_buf4_init(&Z, CC_TMP0, irrep_x, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_IbjA (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_contract444(&Y2, &Z, &Z1, 0, 1, 1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) Ib"); dpd_buf4_axpy(&Z2, &Z1, 0.5); dpd_buf4_sort(&Z2, CC_TMP0, psrq, 10, 10, "Z(IA,jb) III"); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) III"); dpd_buf4_axpy(&Z2, &Z1, 1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 0, 5, "Z(Ij,Ab) I+III"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) I+III"); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) II+IV"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) I+III"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) II+IV"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "Z_%s_%1s_mj" , pert_x, cart_x); dpd_file2_init(&z, CC_TMP0, irrep_x, 0, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_dot23(&X1, &W, &z, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); dpd_contract424(&Y2, &z, &Z1, 1, 0, 1, -1, 0); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z1); dpd_file2_close(&z); sprintf(lbl, "Z_%s_%1s_AE", pert_x, cart_x); dpd_file2_init(&z, CC_TMP0, irrep_x, 1, 1, lbl); /* dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); */ /* dpd_dot24(&X1, &W, &z, 0, 0, 1, 0); */ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_scm(&z, 0); dpd_file2_mat_init(&z); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(Gbm=0; Gbm < moinfo.nirreps; Gbm++) { Gfe = Gbm; /* W is totally symmetric */ dpd_buf4_mat_irrep_row_init(&W, Gbm); X = init_array(W.params->coltot[Gfe]); for(bm=0; bm < W.params->rowtot[Gbm]; bm++) { dpd_buf4_mat_irrep_row_rd(&W, Gbm, bm); b = W.params->roworb[Gbm][bm][0]; m = W.params->roworb[Gbm][bm][1]; Gb = W.params->psym[b]; Gm = Gbm ^ Gb; Ge = Gm ^ irrep_x; Gf = Gfe ^ Ge; B = b - moinfo.vir_off[Gb]; M = m - moinfo.occ_off[Gm]; zero_arr(X, W.params->coltot[Gfe]); for(fe=0; fe < W.params->coltot[Gfe]; fe++) { f = W.params->colorb[Gfe][fe][0]; e = W.params->colorb[Gfe][fe][1]; ef = W.params->colidx[e][f]; X[fe] = 2.0 * W.matrix[Gbm][0][fe] - W.matrix[Gbm][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows & ncols) { C_DGEMV('n',nrows,ncols,1,&X[W.col_offset[Gfe][Gf]],ncols, X1.matrix[Gm][M],1,1,z.matrix[Gb][B],1); } } free(X); dpd_buf4_mat_irrep_row_close(&W, Gbm); } dpd_file2_mat_close(&X1); dpd_file2_mat_wrt(&z); dpd_file2_mat_close(&z); dpd_buf4_close(&W); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) temp"); dpd_contract424(&Y2, &z, &Z1, 3, 1, 0, 1, 0); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) Final", 1); dpd_buf4_close(&Z1); dpd_file2_close(&z); dpd_file2_close(&X1); dpd_buf4_close(&Y2); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); sprintf(lbl, "Z_%s_%1s_MnjI", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 0, 0, 0, 0, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe (Mn,eI)"); dpd_contract244(&X1, &W, &Z1, 1, 2, 1, 1, 0); dpd_buf4_close(&W); sprintf(lbl, "Z_%s_%1s_MnIj", pert_x, cart_x); dpd_buf4_sort(&Z1, CC_TMP0, pqsr, 0, 0, lbl); dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 0, 0, lbl, 1); dpd_buf4_close(&Z1); dpd_file2_close(&X1); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_MnIj", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 0, 0, 0, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract444(&Z1, &Y2, &Z, 1, 1, 1, 1); dpd_buf4_close(&Y2); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); sprintf(lbl, "Z_%s_%1s_AmIj (Am,Ij)", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP0, irrep_y, 11, 0, 11, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_contract444(&W, &Y2, &Z1, 0, 0, 1, 0); dpd_buf4_close(&W); dpd_buf4_close(&Y2); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert_x, cart_x, omega_x); dpd_file2_init(&X1, CC_OEI, irrep_x, 0, 1, lbl); dpd_contract424(&Z1, &X1, &Z, 1, 0, 0, -2, 1); dpd_file2_close(&X1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); polar += dpd_buf4_dot(&L2, &Z); dpd_buf4_close(&L2); dpd_buf4_close(&Z); return polar; } }} // namespace psi::ccresponse ����������������������������������psi3/src/bin/ccresponse/LHX2Y2.cc�������������������������������������������������������������������0000644�0001015�0000765�00000021777�11112564564�015166� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double LHX2Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y) { dpdbuf4 X2, Y2, I, W, Z, Z1, Z2, W1, W2, L2; dpdfile2 z; char lbl[32]; double polar; sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_IbjA (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_contract444(&I, &Y2, &Z, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&Y2); dpd_buf4_close(&Z); sprintf(lbl, "Z_%s_%1s_MbEj (ME,jb)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IAjb-jAIb) (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_contract444(&I, &Y2, &Z, 0, 1, 0.5, 0); dpd_buf4_close(&I); dpd_buf4_close(&Y2); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_buf4_axpy(&Z1, &Z, -0.5); sprintf(lbl, "Z_%s_%1s_(2MbEj+MbeJ) (ME,JB)", pert_y, cart_y); dpd_buf4_scmcopy(&Z, CC_TMP0, lbl, 2); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); sprintf(lbl, "X_%s_%1s_(2IAjb-IbjA) (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "Z_%s_%1s_(2MbEj+MbeJ) (ME,JB)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); dpd_contract444(&X2, &Z, &Z1, 0, 1, 0.5, 0); dpd_buf4_close(&Z); dpd_buf4_close(&X2); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) Ib"); sprintf(lbl, "Z_%s_%1s_MbeJ (Me,Jb)", pert_y, cart_y); dpd_buf4_init(&Z, CC_TMP0, irrep_y, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_IbjA (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 10, 10, 10, 10, 0, lbl); dpd_contract444(&X2, &Z, &Z1, 0, 1, 1, 0); dpd_buf4_close(&X2); dpd_buf4_close(&Z); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) Ib"); dpd_buf4_axpy(&Z2, &Z1, 0.5); dpd_buf4_sort(&Z2, CC_TMP0, psrq, 10, 10, "Z(IA,jb) III"); dpd_buf4_close(&Z2); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) I"); dpd_buf4_init(&Z2, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(IA,jb) III"); dpd_buf4_axpy(&Z2, &Z1, 1); dpd_buf4_close(&Z2); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 0, 5, "Z(Ij,Ab) I+III"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) I+III"); dpd_buf4_sort(&Z, CC_TMP0, qpsr, 0, 5, "Z(Ij,Ab) II+IV"); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_scm(&Z, 0); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) I+III"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) II+IV"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_MnIj", pert_x, cart_x); dpd_buf4_init(&Z1, CC_TMP0, irrep_x, 0, 0, 0, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&I, &X2, &Z1, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&X2); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract444(&Z1, &Y2, &Z, 1, 1, 1, 1); dpd_buf4_close(&Y2); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_MnIj", pert_y, cart_y); dpd_buf4_init(&Z1, CC_TMP0, irrep_y, 0, 0, 0, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&X2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&I, &X2, &Z1, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&X2); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&Y2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_contract444(&Z1, &Y2, &Z, 1, 1, 1, 1); dpd_buf4_close(&Y2); dpd_buf4_close(&Z1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_AE", pert_y, cart_y); dpd_file2_init(&z, CC_TMP0, irrep_y, 1, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&Y2, &I, &z, 3, 3, -1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_contract424(&X2, &z, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&X2); dpd_file2_close(&z); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_AE", pert_x, cart_x); dpd_file2_init(&z, CC_TMP0, irrep_x, 1, 1, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_contract442(&X2, &I, &z, 3, 3, -1, 0); dpd_buf4_close(&X2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract424(&Y2, &z, &Z1, 3, 1, 0, 1, 0); dpd_buf4_close(&Y2); dpd_file2_close(&z); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_MI", pert_y, cart_y); dpd_file2_init(&z, CC_TMP0, irrep_y, 0, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract442(&I, &Y2, &z, 0, 0, 1, 0); dpd_buf4_close(&Y2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_contract244(&z, &X2, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&X2); dpd_file2_close(&z); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); sprintf(lbl, "Z_%s_%1s_MI", pert_x, cart_x); dpd_file2_init(&z, CC_TMP0, irrep_x, 0, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_x, cart_x, omega_x); dpd_buf4_init(&X2, CC_LR, irrep_x, 0, 5, 0, 5, 0, lbl); dpd_contract442(&I, &X2, &z, 0, 0, 1, 0); dpd_buf4_close(&X2); dpd_buf4_close(&I); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab)"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert_y, cart_y, omega_y); dpd_buf4_init(&Y2, CC_LR, irrep_y, 0, 5, 0, 5, 0, lbl); dpd_contract244(&z, &Y2, &Z1, 0, 0, 0, 1, 0); dpd_buf4_close(&Y2); dpd_file2_close(&z); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_sort(&Z1, CC_TMP1, qpsr, 0, 5, "Z(jI,bA)"); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP1, 0, 0, 5, 0, 5, 0, "Z(jI,bA)"); dpd_buf4_axpy(&Z1, &Z, -1); dpd_buf4_close(&Z); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "Z(Ij,Ab) Final"); dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa"); polar = dpd_buf4_dot(&L2, &Z); dpd_buf4_close(&L2); dpd_buf4_close(&Z); return polar; } }} // namespace psi::ccresponse �psi3/src/bin/ccresponse/linresp.cc������������������������������������������������������������������0000644�0001015�0000765�00000013531�11112564564�015677� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double LCX(const char *pert_c, const char *cart_c, int irrep_c, const char *pert_x, const char *cart_x, int irrep_x, double omega); double HXY(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); double LHX1Y1(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); double LHX2Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); double LHX1Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); double cc2_LHX1Y1(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); double cc2_LHX1Y2(const char *pert_x, const char *cart_x, int irrep_x, double omega_x, const char *pert_y, const char *cart_y, int irrep_y, double omega_y); void linresp(double **tensor, double A, double B, const char *pert_x, int *x_irreps, double omega_x, const char *pert_y, int *y_irreps, double omega_y) { int alpha, beta, j; double polar, polar_LCX, polar_HXY, polar_LHX1Y1, polar_LHX1Y2, polar_LHX2Y2; char **cartcomp; cartcomp = (char **) malloc(3 * sizeof(char *)); cartcomp[0] = strdup("X"); cartcomp[1] = strdup("Y"); cartcomp[2] = strdup("Z"); for(alpha=0; alpha < 3; alpha++) { for(beta=0; beta < 3; beta++) { /* clear out scratch space */ for(j=CC_TMP; j <= CC_TMP11; j++) { psio_close(j,0); psio_open(j,0); } polar_LCX = 0.0; polar_HXY = 0.0; polar_LHX1Y1 = 0.0; polar_LHX2Y2 = 0.0; polar_LHX1Y2 = 0.0; if(!(x_irreps[alpha]^y_irreps[beta])) { if(omega_y != 0.0) { /* we assume omega_x = -omega_y */ polar_LCX = LCX(pert_x, cartcomp[alpha], x_irreps[alpha], pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LCX += LCX(pert_y, cartcomp[beta], y_irreps[beta], pert_x, cartcomp[alpha], x_irreps[alpha], omega_x); if(!params.sekino) { if (!strcmp(params.wfn,"CC2")) { polar_HXY = HXY(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX1Y1 = cc2_LHX1Y1(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX1Y2 = cc2_LHX1Y2(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX1Y2 += cc2_LHX1Y2(pert_y, cartcomp[beta], y_irreps[beta], omega_y, pert_x, cartcomp[alpha], x_irreps[alpha], omega_x); } else { polar_LHX1Y1 = LHX1Y1(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX2Y2 = LHX2Y2(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX1Y2 = LHX1Y2(pert_x, cartcomp[alpha], x_irreps[alpha], omega_x, pert_y, cartcomp[beta], y_irreps[beta], omega_y); polar_LHX1Y2 += LHX1Y2(pert_y, cartcomp[beta], y_irreps[beta], omega_y, pert_x, cartcomp[alpha], x_irreps[alpha], omega_x); } } } else { polar_LCX = LCX(pert_x, cartcomp[alpha], x_irreps[alpha], pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LCX += LCX(pert_y, cartcomp[beta], y_irreps[beta], pert_x, cartcomp[alpha], x_irreps[alpha], 0.0); if(!params.sekino) { if (!strcmp(params.wfn,"CC2")) { polar_HXY = HXY(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX1Y1 = cc2_LHX1Y1(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX1Y2 = cc2_LHX1Y2(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX1Y2 += cc2_LHX1Y2(pert_y, cartcomp[beta], y_irreps[beta], 0.0, pert_x, cartcomp[alpha], x_irreps[alpha], 0.0); } else { polar_LHX1Y1 = LHX1Y1(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX2Y2 = LHX2Y2(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX1Y2 = LHX1Y2(pert_x, cartcomp[alpha], x_irreps[alpha], 0.0, pert_y, cartcomp[beta], y_irreps[beta], 0.0); polar_LHX1Y2 += LHX1Y2(pert_y, cartcomp[beta], y_irreps[beta], 0.0, pert_x, cartcomp[alpha], x_irreps[alpha], 0.0); } } } if(params.sekino) /* only linear term needed in Sekino-Bartlett model III */ polar = polar_LCX; else polar = polar_LCX + polar_HXY + polar_LHX1Y1 + polar_LHX2Y2 + polar_LHX1Y2; if(params.print & 2) { fprintf(outfile, "\n\tLinresp tensor[%s][%s]\n", cartcomp[alpha], cartcomp[beta]); fprintf(outfile, "\tpolar_LCX = %20.12f\n", polar_LCX); if(!strcmp(params.wfn,"CC2")) fprintf(outfile, "\tpolar_HXY = %20.12f\n", polar_HXY); fprintf(outfile, "\tpolar_LHX1Y1 = %20.12f\n", polar_LHX1Y1); fprintf(outfile, "\tpolar_LHX1Y2 = %20.12f\n", polar_LHX1Y2); fprintf(outfile, "\tpolar_LHX2Y2 = %20.12f\n", polar_LHX2Y2); fflush(outfile); } tensor[alpha][beta] = A * polar + B * tensor[alpha][beta]; } } } free(cartcomp[0]); free(cartcomp[1]); free(cartcomp[2]); free(cartcomp); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/local.cc��������������������������������������������������������������������0000644�0001015�0000765�00000023173�10757640026�015322� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libint/libint.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void local_init(void) { chkpt_init(PSIO_OPEN_OLD); local.natom = chkpt_rd_natom(); chkpt_close(); local.nso = moinfo.nso; local.nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ local.nvir = moinfo.virtpi[0]; /* active virtual orbitals */ fprintf(outfile, "\tLocalization parameters ready.\n\n"); fflush(outfile); } void local_done(void) { fprintf(outfile, "\tLocal parameters free.\n"); } void local_filter_T1(dpdfile2 *T1) { int i, a, ij, ii; int nocc, nvir; double *T1tilde, *T1bar; psio_address next; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); for(i=0; i < nocc; i++) { ii = i * nocc + i; /* diagonal element of pair matrices */ if(!local.pairdom_len[ii]) { fprintf(outfile, "\n\tlocal_filter_T1: Pair ii = [%d] is zero-length, which makes no sense.\n",ii); exit(PSI_RETURN_FAILURE); } T1tilde = init_array(local.pairdom_len[ii]); T1bar = init_array(local.pairdom_nrlen[ii]); /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMV('t', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1->matrix[0][i][0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMV('t', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1tilde[0]), 1, 0.0, &(T1bar[0]), 1); /* Apply the denominators */ for(a=0; a < local.pairdom_nrlen[ii]; a++) T1bar[a] /= (local.eps_occ[i] - local.eps_vir[ii][a]); /* Transform the new T1's to the redundant projected virtual basis */ C_DGEMV('n', local.pairdom_len[ii], local.pairdom_nrlen[ii], 1.0, &(local.W[ii][0][0]), local.pairdom_nrlen[ii], &(T1bar[0]), 1, 0.0, &(T1tilde[0]), 1); /* Transform the new T1's to the MO basis */ C_DGEMV('n', nvir, local.pairdom_len[ii], 1.0, &(local.V[ii][0][0]), local.pairdom_len[ii], &(T1tilde[0]), 1, 0.0, &(T1->matrix[0][i][0]), 1); free(T1bar); free(T1tilde); } dpd_file2_mat_wrt(T1); dpd_file2_mat_close(T1); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); } void local_filter_T2(dpdbuf4 *T2) { int ij, i, j, a, b; int nso, nocc, nvir; double **X1, **X2, **T2tilde, **T2bar; psio_address next; nso = local.nso; nocc = local.nocc; nvir = local.nvir; local.pairdom_len = init_int_array(nocc*nocc); local.pairdom_nrlen = init_int_array(nocc*nocc); local.weak_pairs = init_int_array(nocc*nocc); local.eps_occ = init_array(nocc); psio_read_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_read_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); psio_read_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, nocc*nocc*sizeof(int)); local.W = (double ***) malloc(nocc * nocc * sizeof(double **)); local.V = (double ***) malloc(nocc * nocc * sizeof(double **)); local.eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.eps_vir[ij] = init_array(local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.V[ij] = block_matrix(nvir,local.pairdom_len[ij]); psio_read(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); } next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) { local.W[ij] = block_matrix(local.pairdom_len[ij],local.pairdom_nrlen[ij]); psio_read(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); } /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { if(!local.weak_pairs[ij]) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', local.pairdom_len[ij], nvir, nvir, 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', local.pairdom_nrlen[ij], local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < local.pairdom_nrlen[ij]; a++) { for(b=0; b < local.pairdom_nrlen[ij]; b++) { T2bar[a][b] /= (local.eps_occ[i] + local.eps_occ[j] - local.eps_vir[ij][a] - local.eps_vir[ij][b]); } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', local.pairdom_len[ij], local.pairdom_nrlen[ij], local.pairdom_nrlen[ij], 1.0, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', local.pairdom_len[ij], local.pairdom_len[ij], local.pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(local.W[ij][0][0]), local.pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, local.pairdom_len[ij], local.pairdom_len[ij], 1.0, &(local.V[ij][0][0]), local.pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, local.pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(local.V[ij][0][0]), local.pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } else /* This must be a neglected weak pair; force it to zero */ memset((void *) T2->matrix[0][ij], 0, nvir*nvir*sizeof(double)); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.eps_occ); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/Local.h���������������������������������������������������������������������0000644�0001015�0000765�00000001065�10754663017�015122� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ namespace psi { namespace ccresponse { struct Local { int natom; int nso; int nocc; int nvir; int cart; int *aostart; int *aostop; int **domain; int **pairdomain; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; int filter_singles; char *method; char *weakp; double cphf_cutoff; char *freeze_core; char *pairdef; }; }} // namespace psi::ccresponse ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/Makefile.in�����������������������������������������������������������������0000644�0001015�0000765�00000001713�10677315357�015771� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ HXY.cc cc2_LHX1Y2.cc get_moinfo.cc print_X.cc \ LCX.cc cc2_X1.cc get_params.cc pseudopolar.cc \ LHX1Y1.cc cc2_X2.cc hbar_extra.cc save_X.cc \ LHX1Y2.cc cc2_hbar_extra.cc init_X.cc sort_X.cc \ LHX2Y2.cc cc2_sort_X.cc lambda_residuals.cc sort_lamps.cc \ X1.cc ccresponse.cc linresp.cc sort_pert.cc \ X2.cc compute_X.cc local.cc transpert.cc \ amp_write.cc converged.cc optrot.cc update_X.cc \ cache.cc denom.cc pertbar.cc \ cc2_LHX1Y1.cc diis.cc polar.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif �����������������������������������������������������psi3/src/bin/ccresponse/MOInfo.h��������������������������������������������������������������������0000644�0001015�0000765�00000011702�10754663017�015216� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ namespace psi { namespace ccresponse { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; /* no. of symmetry orbitals */ int nao; /* no. of atomic orbitals */ int noei; /* no. of elements in SOxSO lower triangle */ int ntri; /* no. of elements in MOxMO lower triangle */ int noei_ao; /* no. of elements in AOxAO lower triangle */ int nactive; /* no. of active MO's */ int nfzc; /* no. of frozen core orbitals */ int *sopi; /* no. of SOs per irrep */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ int nvirt; /* total no. of (active) virtual orbitals */ int *actpi; /* no. of active orbitals per irrep */ char **labels; /* irrep labels */ int *pitzer2qt; /* Pitzer -> QT reordering array */ int *qt2pitzer; /* QT -> Pitzer reordering array */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* occupied alpha orbital offsets within each irrep */ int *bocc_off; /* occupied beta orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* virtual alpha orbital offsets within each irrep */ int *bvir_off; /* virtual beta orbital offsets within each irrep */ int *qt_occ; /* CC->QT active occupied reordering array */ int *qt_aocc; /* CC->QT alpha active occupied reordering array */ int *qt_bocc; /* CC->QT beta active occupied reordering array */ int *qt_vir; /* CC->QT active virtiual reordering array */ int *qt_avir; /* CC->QT alpha active virtiual reordering array */ int *qt_bvir; /* CC->QT beta active virtiual reordering array */ int *cc_occ; /* QT->CC active occupied reordering array */ int *cc_aocc; /* QT->CC active occupied reordering array */ int *cc_bocc; /* QT->CC active occupied reordering array */ int *cc_vir; /* QT->CC active virtual reordering array */ int *cc_avir; /* QT->CC active virtual reordering array */ int *cc_bvir; /* QT->CC active virtual reordering array */ double **scf; /* SCF eigenvectors (RHF/ROHF) (active only) */ double **scf_alpha; /* Alpha SCF eigenvectors (UHF) (active only) */ double **scf_beta; /* Beta SCF eigenvectors (UHF) (active only) */ double **usotao; /* SO->AO transformation matrix */ double **MUX; /* MO-basis x-dipole integrals (Pitzer order) */ double **MUY; /* MO-basis y-dipole integrals (Pitzer order) */ double **MUZ; /* MO-basis z-dipole integrals (Pitzer order) */ int irrep_x; /* irrep of x-dipole */ int irrep_y; /* irrep of y-dipole */ int irrep_z; /* irrep of z-dipole */ int *mu_irreps; /* irreps of x,y,z dipole components */ double **LX; /* MO-basis x-angular momentum ints (Pitzer order) */ double **LY; /* MO-basis y-angular momentum ints (Pitzer order) */ double **LZ; /* MO-basis z-angular momentum ints (Pitzer order) */ int irrep_Rx; /* irrep of x-angular momentum */ int irrep_Ry; /* irrep of y-angular momentum */ int irrep_Rz; /* irrep of z-angular momentum */ int *l_irreps; /* irreps of x,y,z angular momentum components */ double **PX; /* MO-basis x-linear momentum ints (Pitzer order) */ double **PY; /* MO-basis y-linear momentum ints (Pitzer order) */ double **PZ; /* MO-basis z-linear momentum ints (Pitzer order) */ int natom; /* number of atoms */ double *zvals; /* atomic zvals */ double ***C; /* Virtual orbital transformation matrix */ }; }} // namespace psi::ccresponse ��������������������������������������������������������������psi3/src/bin/ccresponse/optrot.cc�������������������������������������������������������������������0000644�0001015�0000765�00000045520�11112564564�015555� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include <physconst.h> #include <masses.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void transpert(const char *pert); void sort_pert(const char *pert, double **pertX, double **pertY, double **pertZ, int irrep_x, int irrep_y, int irrep_z); void pertbar(const char *pert, int irrep_x, int irrep_y, int irrep_z, int anti); void compute_X(const char *pert, const char *cart, int irrep, double omega); void linresp(double **tensor, double A, double B, const char *pert_x, int *x_irreps, double omega_x, const char *pert_y, int *y_irreps, double omega_y); void optrot(void) { double ***tensor_rl, ***tensor_pl, ***tensor_rp, **tensor0; double **tensor_rl0, **tensor_rl1, **tensor_pl0, **tensor_pl1; char **cartcomp; int alpha, i, j, k; double TrG_rl, TrG_pl, M, nu, bohr2a4, m2a, hbar, prefactor; double *rotation_rl, *rotation_pl, *rotation_rp, *rotation_mod, **delta; char lbl1[32], lbl2[32], lbl3[32]; int compute_rl=0, compute_pl=0; /* Booleans for convenience */ if(!strcmp(params.gauge,"LENGTH") || !strcmp(params.gauge,"BOTH")) compute_rl=1; if(!strcmp(params.gauge,"VELOCITY") || !strcmp(params.gauge,"BOTH")) compute_pl=1; cartcomp = (char **) malloc(3 * sizeof(char *)); cartcomp[0] = strdup("X"); cartcomp[1] = strdup("Y"); cartcomp[2] = strdup("Z"); tensor_rl = (double ***) malloc(params.nomega * sizeof(double **)); tensor_pl = (double ***) malloc(params.nomega * sizeof(double **)); tensor_rp = (double ***) malloc(params.nomega * sizeof(double **)); for(i=0; i < params.nomega; i++) { tensor_rl[i] = block_matrix(3,3); tensor_pl[i] = block_matrix(3,3); tensor_rp[i] = block_matrix(3,3); } tensor0 = block_matrix(3,3); tensor_rl0 = block_matrix(3,3); tensor_rl1 = block_matrix(3,3); tensor_pl0 = block_matrix(3,3); tensor_pl1 = block_matrix(3,3); rotation_rl = init_array(params.nomega); rotation_pl = init_array(params.nomega); rotation_rp = init_array(params.nomega); rotation_mod = init_array(params.nomega); delta = block_matrix(params.nomega,3); if(compute_pl) { /* compute the zero-frequency Rosenfeld tensor for Koch's modified velocity optical rotation */ /* NOTE!!! The complex conjugation required for the response function is handled *implicitly* in the code below because the velocity-gauge version of the optical rotation tensor contains *two* pure-imaginary operators, p and m. Thus, even though the corresponding perturbed wave functions change sign when we take complex conjugates of the p and m operators, the signs cancel, giving an identical contribution to the total *zero-frequency* Rosenfeld tensor as the original non-complex-conjugate term. */ sprintf(lbl1, "<<P;L>>_(%5.3f)", 0.0); if(!params.restart || !psio_tocscan(CC_INFO, lbl1)) { transpert("P"); sort_pert("P", moinfo.PX, moinfo.PY, moinfo.PZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("P", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 1); /* prepare the magnetic-dipole integrals */ transpert("L"); sort_pert("L", moinfo.LX, moinfo.LY, moinfo.LZ, moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz); pertbar("L", moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz, 1); /* Compute the magnetic-dipole and electric-dipole CC wave functions */ for(alpha=0; alpha < 3; alpha++) { compute_X("P", cartcomp[alpha], moinfo.mu_irreps[alpha], 0); compute_X("L", cartcomp[alpha], moinfo.l_irreps[alpha], 0); } fprintf(outfile, "\n\tComputing %s tensor.\n", lbl1); fflush(outfile); linresp(tensor0, -1.0, 0.0, "P", moinfo.mu_irreps, 0.0, "L", moinfo.l_irreps, 0.0); psio_write_entry(CC_INFO, lbl1, (char *) tensor0[0], 9*sizeof(double)); /* Clean up disk space */ psio_close(CC_LR, 0); psio_open(CC_LR, 0); for(j=CC_TMP; j <= CC_TMP11; j++) { psio_close(j,0); psio_open(j,0); } } else { fprintf(outfile, "Using %s tensor found on disk.\n", lbl1); psio_read_entry(CC_INFO, lbl1, (char *) tensor0[0], 9*sizeof(double)); } if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\n CC2 Optical Rotation Tensor (Velocity Gauge): %s\n", lbl1); else if(!strcmp(params.wfn,"CCSD")) fprintf(outfile, "\n CCSD Optical Rotation Tensor (Velocity Gauge): %s\n", lbl1); fprintf(outfile, " -------------------------------------------------------------------------\n"); fprintf(outfile, " Evaluated at omega = 0.00 E_h (Inf nm, 0.0 eV, 0.0 cm-1)\n"); fprintf(outfile, " -------------------------------------------------------------------------\n"); mat_print(tensor0, 3, 3, outfile); } for(i=0; i < params.nomega; i++) { zero_mat(tensor_rl0, 3, 3); zero_mat(tensor_rl1, 3, 3); zero_mat(tensor_pl0, 3, 3); zero_mat(tensor_pl1, 3, 3); sprintf(lbl1, "1/2 <<Mu;L>>_(%5.3f)", params.omega[i]); sprintf(lbl2, "1/2 <<P;L>>_(%5.3f)", params.omega[i]); if(!params.restart || ((compute_rl && !psio_tocscan(CC_INFO,lbl1)) || (compute_pl && !psio_tocscan(CC_INFO,lbl2)))) { /* prepare the dipole-length and/or dipole-velocity integrals */ if(compute_rl) { transpert("Mu"); sort_pert("Mu", moinfo.MUX, moinfo.MUY, moinfo.MUZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("Mu", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 0); } if(compute_pl) { transpert("P"); sort_pert("P", moinfo.PX, moinfo.PY, moinfo.PZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("P", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 1); } /* prepare the magnetic-dipole integrals */ transpert("L"); sort_pert("L", moinfo.LX, moinfo.LY, moinfo.LZ, moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz); pertbar("L", moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz, 1); /* Compute the +omega magnetic-dipole and -omega electric-dipole CC wave functions */ for(alpha=0; alpha < 3; alpha++) { if(compute_rl) compute_X("Mu", cartcomp[alpha], moinfo.mu_irreps[alpha], -params.omega[i]); if(compute_pl) compute_X("P", cartcomp[alpha], moinfo.mu_irreps[alpha], -params.omega[i]); compute_X("L", cartcomp[alpha], moinfo.l_irreps[alpha], params.omega[i]); } fprintf(outfile, "\n"); if(compute_rl) { fprintf(outfile, "\tComputing %s tensor.\n", lbl1); fflush(outfile); linresp(tensor_rl0, -0.5, 0.0, "Mu", moinfo.mu_irreps, -params.omega[i], "L", moinfo.l_irreps, params.omega[i]); psio_write_entry(CC_INFO, lbl1, (char *) tensor_rl0[0], 9*sizeof(double)); } if(compute_pl) { fprintf(outfile, "\tComputing %s tensor.\n", lbl2); fflush(outfile); linresp(tensor_pl0, -0.5, 0.0, "P", moinfo.mu_irreps, -params.omega[i], "L", moinfo.l_irreps, params.omega[i]); psio_write_entry(CC_INFO, lbl2, (char *) tensor_pl0[0], 9*sizeof(double)); } /* Clean up disk space */ if(strcmp(params.gauge,"BOTH")) { /* don't clean up if we want both gauges */ psio_close(CC_LR, 0); psio_open(CC_LR, 0); } for(j=CC_TMP; j <= CC_TMP11; j++) { psio_close(j,0); psio_open(j,0); } } else { fprintf(outfile, "\n"); if(compute_rl) { fprintf(outfile, "\tUsing %s tensor found on disk.\n", lbl1); fflush(outfile); psio_read_entry(CC_INFO, lbl1, (char *) tensor_rl0[0], 9*sizeof(double)); } if(compute_pl) { fprintf(outfile, "\tUsing %s tensor found on disk.\n", lbl2); fflush(outfile); psio_read_entry(CC_INFO, lbl2, (char *) tensor_pl0[0], 9*sizeof(double)); } } sprintf(lbl1, "1/2 <<Mu;L*>>_(%5.3f)", params.omega[i]); sprintf(lbl2, "1/2 <<P*;L*>>_(%5.3f)", params.omega[i]); sprintf(lbl3, "<<P;Mu>>_(%5.3f)", params.omega[i]); if(!params.restart || ((compute_rl && !psio_tocscan(CC_INFO,lbl1)) || (compute_pl && !psio_tocscan(CC_INFO,lbl2)))) { /* prepare the dipole-length or dipole-velocity integrals */ if(compute_rl) { transpert("Mu"); sort_pert("Mu", moinfo.MUX, moinfo.MUY, moinfo.MUZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("Mu", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 0); } if(compute_pl) { transpert("P*"); sort_pert("P*", moinfo.PX, moinfo.PY, moinfo.PZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("P*", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 1); } /* prepare the complex-conjugate of the magnetic-dipole integrals */ transpert("L*"); sort_pert("L*", moinfo.LX, moinfo.LY, moinfo.LZ, moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz); pertbar("L*", moinfo.irrep_Rx, moinfo.irrep_Ry, moinfo.irrep_Rz, 1); /* Compute the -omega magnetic-dipole and +omega electric-dipole CC wave functions */ for(alpha=0; alpha < 3; alpha++) { if(compute_rl) compute_X("Mu", cartcomp[alpha], moinfo.mu_irreps[alpha], params.omega[i]); if(compute_pl) compute_X("P*", cartcomp[alpha], moinfo.mu_irreps[alpha], params.omega[i]); compute_X("L*", cartcomp[alpha], moinfo.l_irreps[alpha], -params.omega[i]); } fprintf(outfile, "\n"); if(compute_rl) { fprintf(outfile, "\tComputing %s tensor.\n", lbl1); fflush(outfile); linresp(tensor_rl1, -0.5, 0.0, "Mu", moinfo.mu_irreps, params.omega[i], "L*", moinfo.l_irreps, -params.omega[i]); psio_write_entry(CC_INFO, lbl1, (char *) tensor_rl1[0], 9*sizeof(double)); } if(compute_pl) { fprintf(outfile, "\tComputing %s tensor.\n", lbl2); fflush(outfile); linresp(tensor_pl1, -0.5, 0.0, "P*", moinfo.mu_irreps, params.omega[i], "L*", moinfo.l_irreps, -params.omega[i]); psio_write_entry(CC_INFO, lbl2, (char *) tensor_pl1[0], 9*sizeof(double)); } if(!strcmp(params.gauge,"BOTH")) { fprintf(outfile, "\tComputing %s tensor.\n", lbl3); fflush(outfile); linresp(tensor_rp[i], 0.5, 0.0, "P", moinfo.mu_irreps, -params.omega[i], "Mu", moinfo.l_irreps, params.omega[i]); linresp(tensor_rp[i], 0.5, 1.0, "P*", moinfo.mu_irreps, params.omega[i], "Mu", moinfo.l_irreps, -params.omega[i]); psio_write_entry(CC_INFO, lbl3, (char *) tensor_rp[i][0], 9*sizeof(double)); } /* Clean up disk space */ psio_close(CC_LR, 0); psio_open(CC_LR, 0); for(j=CC_TMP; j <= CC_TMP11; j++) { psio_close(j,0); psio_open(j,0); } } else { fprintf(outfile, "\n"); if(compute_rl) { fprintf(outfile, "\tUsing %s tensor found on disk.\n", lbl1); fflush(outfile); psio_read_entry(CC_INFO, lbl1, (char *) tensor_rl1[0], 9*sizeof(double)); } if(compute_pl) { fprintf(outfile, "\tUsing %s tensor found on disk.\n", lbl2); fflush(outfile); psio_read_entry(CC_INFO, lbl2, (char *) tensor_pl1[0], 9*sizeof(double)); } if(!strcmp(params.gauge,"BOTH")) { fprintf(outfile, "\tUsing %s tensor found on disk.\n", lbl3); fflush(outfile); psio_read_entry(CC_INFO, lbl3, (char *) tensor_rp[i][0], 9*sizeof(double)); } } /* sum the two 1/2 tensors */ for(j=0; j < 3; j++) for(k=0; k < 3; k++) { if(compute_rl) tensor_rl[i][j][k] = tensor_rl0[j][k] + tensor_rl1[j][k]; if(compute_pl) tensor_pl[i][j][k] = tensor_pl0[j][k] + tensor_pl1[j][k]; } /* compute the specific rotation */ for(j=0,M=0.0; j < moinfo.natom ;j++) M += an2masses[(int) moinfo.zvals[j]]; /* amu */ nu = params.omega[i]; /* hartree */ bohr2a4 = _bohr2angstroms * _bohr2angstroms * _bohr2angstroms * _bohr2angstroms; m2a = _bohr2angstroms * 1.0e-10; hbar = _h/(2.0 * _pi); prefactor = 1.0e-2 * hbar/(_c * 2.0 * _pi * _me * m2a * m2a); prefactor *= prefactor; prefactor *= 288.0e-30 * _pi * _pi * _na * bohr2a4; if(compute_rl) { if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\n CC2 Optical Rotation Tensor (Length Gauge):\n"); else if(!strcmp(params.wfn,"CCSD")) fprintf(outfile, "\n CCSD Optical Rotation Tensor (Length Gauge):\n"); fprintf(outfile, " -------------------------------------------------------------------------\n"); fprintf(outfile, " Evaluated at omega = %8.6f E_h (%6.2f nm, %5.3f eV, %8.2f cm-1)\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), _hartree2ev*params.omega[i], _hartree2wavenumbers*params.omega[i]); fprintf(outfile, " -------------------------------------------------------------------------\n"); mat_print(tensor_rl[i], 3, 3, outfile); TrG_rl = (tensor_rl[i][0][0] + tensor_rl[i][1][1] + tensor_rl[i][2][2])/(3.0 * params.omega[i]); rotation_rl[i] = prefactor * TrG_rl * nu * nu / M; fprintf(outfile, "\n Specific rotation using length-gauge electric-dipole Rosenfeld tensor.\n"); fprintf(outfile, "\t[alpha]_(%5.3f) = %10.5f deg/[dm (g/cm^3)]\n", params.omega[i], rotation_rl[i]); } if(compute_pl) { if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\n CC2 Optical Rotation Tensor (Velocity Gauge):\n"); else if(!strcmp(params.wfn,"CCSD")) fprintf(outfile, "\n CCSD Optical Rotation Tensor (Velocity Gauge):\n"); fprintf(outfile, " -------------------------------------------------------------------------\n"); fprintf(outfile, " Evaluated at omega = %8.6f E_h (%6.2f nm, %5.3f eV, %8.2f cm-1)\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), _hartree2ev*params.omega[i], _hartree2wavenumbers*params.omega[i]); fprintf(outfile, " -------------------------------------------------------------------------\n"); mat_print(tensor_pl[i], 3, 3, outfile); TrG_pl = (tensor_pl[i][0][0] + tensor_pl[i][1][1] + tensor_pl[i][2][2])/(3.0 * params.omega[i]); TrG_pl /= params.omega[i]; rotation_pl[i] = prefactor * TrG_pl * nu * nu / M; fprintf(outfile, "\n Specific rotation using velocity-gauge electric-dipole Rosenfeld tensor.\n"); fprintf(outfile, "\t[alpha]_(%5.3f) = %10.5f deg/[dm (g/cm^3)]\n", params.omega[i], rotation_pl[i]); /* subtract the zero-frequency beta tensor */ for(j=0; j < 3; j++) for(k=0; k < 3; k++) tensor_pl[i][j][k] -= tensor0[j][k]; if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\n CC2 Optical Rotation Tensor (Modified Velocity Gauge):\n"); else if(!strcmp(params.wfn,"CCSD")) fprintf(outfile, "\n CCSD Optical Rotation Tensor (Modified Velocity Gauge):\n"); fprintf(outfile, " -------------------------------------------------------------------------\n"); fprintf(outfile, " Evaluated at omega = %8.6f E_h (%6.2f nm, %5.3f eV, %8.2f cm-1)\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), _hartree2ev*params.omega[i], _hartree2wavenumbers*params.omega[i]); fprintf(outfile, " -------------------------------------------------------------------------\n"); mat_print(tensor_pl[i], 3, 3, outfile); /* compute the specific rotation */ TrG_pl = (tensor_pl[i][0][0] + tensor_pl[i][1][1] + tensor_pl[i][2][2])/(3.0 * params.omega[i]); TrG_pl /= params.omega[i]; rotation_mod[i] = prefactor * TrG_pl * nu * nu / M; fprintf(outfile, "\n Specific rotation using modified velocity-gauge Rosenfeld tensor.\n"); fprintf(outfile, "\t[alpha]_(%5.3f) = %10.5f deg/[dm (g/cm^3)]\n", params.omega[i], rotation_mod[i]); } if(!strcmp(params.gauge,"BOTH")) { delta[i][0] = prefactor * (tensor_rp[i][1][2] - tensor_rp[i][2][1]) * nu * nu / M; delta[i][1] = prefactor * (tensor_rp[i][2][0] - tensor_rp[i][0][2]) * nu * nu / M; delta[i][2] = prefactor * (tensor_rp[i][0][1] - tensor_rp[i][1][0]) * nu * nu / M; delta[i][0] /= 6.0 * params.omega[i]; delta[i][1] /= 6.0 * params.omega[i]; delta[i][2] /= 6.0 * params.omega[i]; fprintf(outfile, "\n Origin-dependence vector for length-gauge rotation deg/[dm (g/cm^3)]/bohr.\n"); fprintf(outfile, " Delta_x = %6.2f Delta_y = %6.2f Delta_z = %6.2f\n", delta[i][0], delta[i][1], delta[i][2]); } } /* loop i over nomega */ if(params.nomega > 1) { /* print a summary table for multi-wavelength calcs */ if(compute_rl) { fprintf(outfile, "\n ------------------------------------------\n"); if (!strcmp(params.wfn,"CC2")) fprintf(outfile, " CC2 Length-Gauge Optical Rotation\n"); else fprintf(outfile, " CCSD Length-Gauge Optical Rotation\n"); fprintf(outfile, " ------------------------------------------\n"); if(!strcmp(params.gauge,"BOTH")) { fprintf(outfile, " Omega alpha Delta\n"); fprintf(outfile, " E_h nm deg/[dm (g/cm^3)] deg/[dm (g/cm^3)]/bohr\n"); fprintf(outfile, " ----- ------ ------------------ ----------------------------------\n"); fprintf(outfile, " x y z \n"); for(i=0; i < params.nomega; i++) fprintf(outfile, " %5.3f %6.2f %10.5f %10.5f %10.5f %10.5f\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), rotation_rl[i], delta[i][0], delta[i][1], delta[i][2]); } else { fprintf(outfile, " Omega alpha\n"); fprintf(outfile, " E_h nm deg/[dm (g/cm^3)]\n"); fprintf(outfile, " ----- ------ ------------------\n"); for(i=0; i < params.nomega; i++) fprintf(outfile, " %5.3f %6.2f %10.5f\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), rotation_rl[i]); } } if(compute_pl) { fprintf(outfile, "\n ------------------------------------------------------\n"); if (!strcmp(params.wfn,"CC2")) fprintf(outfile, " CC2 Velocity-Gauge Optical Rotation\n"); else fprintf(outfile, " CCSD Velocity-Gauge Optical Rotation\n"); fprintf(outfile, " ------------------------------------------------------\n"); fprintf(outfile, " Omega alpha (deg/[dm (g/cm^3)]\n"); fprintf(outfile, "\n E_h nm Velocity-Gauge Modified Velocity-Gauge\n"); fprintf(outfile, " ----- ------ -------------- -----------------------\n"); for(i=0; i < params.nomega; i++) fprintf(outfile, " %5.3f %6.2f %10.5f %10.5f\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), rotation_pl[i], rotation_mod[i]); } } free(rotation_rl); free(rotation_pl); free(rotation_rp); free(rotation_mod); free_block(delta); for(i=0; i < params.nomega; i++) { free_block(tensor_rl[i]); free_block(tensor_pl[i]); free_block(tensor_rp[i]); } free(tensor_rl); free(tensor_pl); free(tensor_rp); free_block(tensor0); free_block(tensor_rl0); free_block(tensor_rl1); free_block(tensor_pl0); free_block(tensor_pl1); free(cartcomp[0]); free(cartcomp[1]); free(cartcomp[2]); free(cartcomp); } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/Params.h��������������������������������������������������������������������0000644�0001015�0000765�00000002312�10754663017�015307� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ namespace psi { namespace ccresponse { struct Params { int print; /* Output level control */ long int memory; /* Memory available (in bytes) */ int cachelev; /* cacheing level for libdpd */ int ref; /* reference determinant (0=RHF, 1=ROHF, 2=UHF) */ double *omega; /* energy of applied field (a.u) for dynamic polarizabilities */ int nomega; /* number of field energies desired */ int maxiter; /* maximum number of iterations allowed to converge perturbed amp eqns. */ double convergence; /* convergence criterion for perturbed wfns */ int restart; /* boolean for allowing a restart from on-disk amps */ int diis; /* boolean for using DIIS extrapolation */ char *prop; /* user-selected property */ int local; /* boolean for simluation of local correlation */ int analyze; int dertype; char *gauge; /* choice of gauge for optical rotation */ char *wfn; char *abcd; int num_amps; int sekino; /* Sekino-Bartlett size-extensive models */ }; }} // namespace psi::ccresponse ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/pertbar.cc������������������������������������������������������������������0000644�0001015�0000765�00000014355�11112564564�015667� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* pertbar(): Constructs the components of the similarity-transformed ** one-electron property operator. ** ** NB: For antisymmetric quantities, we must be careful in ** contractions involving the bare MO integrals. This only affects ** the leading term of XXBAR_IA (which, I admit, is poorly named and ** probably should really be called XXBAR_AI), where I copy the XXIA ** integrals into place with a -1 sign. ** ** TDC, 10/05 */ void pertbar(const char *pert, int irrep_x, int irrep_y, int irrep_z, int anti) { int irrep, i; dpdfile2 fbar1, f, t1, z; dpdbuf4 t2, fbar2; char lbl[32], prefix1[32], prefix2[32], prefix3[32]; for(i=0; i < 3; i++) { if(i==0) { irrep = irrep_x; sprintf(prefix1, "%s_%1s", pert, "X"); sprintf(prefix2, "%sBAR_%1s", pert, "X"); sprintf(prefix3, "z_%1s", "X"); } else if(i==1) { irrep = irrep_y; sprintf(prefix1, "%s_%1s", pert, "Y"); sprintf(prefix2, "%sBAR_%1s", pert, "Y"); sprintf(prefix3, "z_%1s", "Y"); } else if(i==2) { irrep = irrep_z; sprintf(prefix1, "%s_%1s", pert, "Z"); sprintf(prefix2, "%sBAR_%1s", pert, "Z"); sprintf(prefix3, "z_%1s", "Z"); } /** XXBAR_ME **/ sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "%s_ME", prefix2); dpd_file2_copy(&f, CC_OEI, lbl); dpd_file2_close(&f); /** XXBAR_MI **/ sprintf(lbl, "%s_IJ", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 0, lbl); sprintf(lbl, "%s_MI", prefix2); dpd_file2_copy(&f, CC_OEI, lbl); dpd_file2_close(&f); sprintf(lbl, "%s_MI", prefix2); dpd_file2_init(&fbar1, CC_OEI, irrep, 0, 0, lbl); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&f, &t1, &fbar1, 0, 0, 1, 1); dpd_file2_close(&t1); dpd_file2_close(&f); dpd_file2_close(&fbar1); /** XXBAR_AE **/ sprintf(lbl, "%s_AB", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 1, 1, lbl); sprintf(lbl, "%s_AE", prefix2); dpd_file2_copy(&f, CC_OEI, lbl); dpd_file2_close(&f); sprintf(lbl, "%s_AE", prefix2); dpd_file2_init(&fbar1, CC_OEI, irrep, 1, 1, lbl); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&t1, &f, &fbar1, 1, 1, -1, 1); dpd_file2_close(&t1); dpd_file2_close(&f); dpd_file2_close(&fbar1); /** XXBAR_IA **/ sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "%s_IA", prefix2); dpd_file2_copy(&f, CC_OEI, lbl); dpd_file2_close(&f); sprintf(lbl, "%s_IA", prefix2); dpd_file2_init(&fbar1, CC_OEI, irrep, 0, 1, lbl); if(anti) dpd_file2_scm(&fbar1, -1); sprintf(lbl, "%s_AB", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 1, 1, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&t1, &f, &fbar1, 0, 0, 1, 1); dpd_file2_close(&t1); dpd_file2_close(&f); sprintf(lbl, "%s_IJ", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 0, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract222(&f, &t1, &fbar1, 1, 1, -1, 1); dpd_file2_close(&t1); dpd_file2_close(&f); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "2 tIAjb - tIBja"); dpd_contract422(&t2, &f, &fbar1, 0, 0, 1, 1); dpd_buf4_close(&t2); dpd_file2_close(&f); sprintf(lbl, "%s_MI", prefix3); dpd_file2_init(&z, CC_TMP0, irrep, 0, 0, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_contract222(&f, &t1, &z, 0, 0, 1, 0); dpd_file2_close(&f); dpd_contract222(&z, &t1, &fbar1, 1, 1, -1, 1); dpd_file2_close(&t1); dpd_file2_close(&z); dpd_file2_close(&fbar1); /** LBAR_MbIj **/ sprintf(lbl, "%s_MbIj", prefix2); dpd_buf4_init(&fbar2, CC_LR, irrep, 10, 0, 10, 0, 0, lbl); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&f, &t2, &fbar2, 1, 2, 0, 1, 0); dpd_buf4_close(&t2); dpd_file2_close(&f); dpd_buf4_close(&fbar2); /** LBAR_IjAb **/ sprintf(lbl, "%s_IjAb", prefix2); dpd_buf4_init(&fbar2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "%s_AB", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 1, 1, lbl); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&t2, &f, &fbar2, 3, 1, 0, 1, 0); dpd_contract244(&f, &t2, &fbar2, 1, 2, 1, 1, 1); dpd_buf4_close(&t2); dpd_file2_close(&f); sprintf(lbl, "%s_IJ", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 0, lbl); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&t2, &f, &fbar2, 1, 0, 1, -1, 1); dpd_contract244(&f, &t2, &fbar2, 0, 0, 0, -1, 1); dpd_buf4_close(&t2); dpd_file2_close(&f); sprintf(lbl, "%s_AE", prefix3); dpd_file2_init(&z, CC_TMP0, irrep, 1, 1, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); sprintf(lbl, "%s_IA", prefix1); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_contract222(&t1, &f, &z, 1, 1, -1, 0); dpd_file2_close(&f); dpd_file2_close(&t1); dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&t2, &z, &fbar2, 3, 1, 0, 1, 1); dpd_contract244(&z, &t2, &fbar2, 1, 2, 1, 1, 1); dpd_buf4_close(&t2); dpd_file2_close(&z); sprintf(lbl, "%s_MI", prefix3); dpd_file2_init(&z, CC_TMP0, irrep, 0, 0, lbl); /* generated above */ dpd_buf4_init(&t2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&t2, &z, &fbar2, 1, 0, 1, -1, 1); dpd_contract244(&z, &t2, &fbar2, 0, 0, 0, -1, 1); dpd_buf4_close(&t2); dpd_file2_close(&z); dpd_buf4_close(&fbar2); } } }} // namespace psi::ccresponse �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/polar.cc��������������������������������������������������������������������0000644�0001015�0000765�00000011057�11112564564�015341� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include <physconst.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void transpert(const char *pert); void sort_pert(const char *pert, double **pertX, double **pertY, double **pertZ, int irrep_x, int irrep_y, int irrep_z); void pertbar(const char *pert, int irrep_x, int irrep_y, int irrep_z, int anti); void compute_X(const char *pert, const char *cart, int irrep, double omega); void linresp(double **tensor, double A, double B, const char *pert_x, int *x_irreps, double omega_x, const char *pert_y, int *y_irreps, double omega_y); void polar(void) { double ***tensor; double polar, polar_LCX, polar_HXY, polar_LHX1Y1, polar_LHX2Y2, polar_LHX1Y2; char **cartcomp; int alpha, beta, i; double omega_nm, omega_ev, omega_cm, *trace; char lbl[32]; cartcomp = (char **) malloc(3 * sizeof(char *)); cartcomp[0] = strdup("X"); cartcomp[1] = strdup("Y"); cartcomp[2] = strdup("Z"); tensor = (double ***) malloc(params.nomega * sizeof(double **)); for(i=0; i < params.nomega; i++) tensor[i] = block_matrix(3,3); trace = init_array(params.nomega); for(i=0; i < params.nomega; i++) { sprintf(lbl, "<<Mu;Mu>_(%5.3f)", params.omega[i]); if(!params.restart || !psio_tocscan(CC_INFO, lbl)) { transpert("Mu"); sort_pert("Mu", moinfo.MUX, moinfo.MUY, moinfo.MUZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); pertbar("Mu", moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z, 0); /* Compute the electric-dipole-perturbed CC wave functions */ for(alpha=0; alpha < 3; alpha++) { compute_X("Mu", cartcomp[alpha], moinfo.mu_irreps[alpha], params.omega[i]); if(params.omega[i] != 0.0) compute_X("Mu", cartcomp[alpha], moinfo.mu_irreps[alpha], -params.omega[i]); } fprintf(outfile, "\n\tComputing %s tensor.\n", lbl); fflush(outfile); linresp(tensor[i], -1.0, 0.0, "Mu", moinfo.mu_irreps, -params.omega[i], "Mu", moinfo.mu_irreps, params.omega[i]); psio_write_entry(CC_INFO, lbl, (char *) tensor[i][0], 9*sizeof(double)); psio_close(CC_LR, 0); psio_open(CC_LR, 0); } else { fprintf(outfile, "Using %s tensor found on disk.\n", lbl); psio_read_entry(CC_INFO, lbl, (char *) tensor[i], 9*sizeof(double)); } if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\n CC2 Dipole Polarizability [(e^2 a0^2)/E_h]:\n"); else fprintf(outfile, "\n CCSD Dipole Polarizability [(e^2 a0^2)/E_h]:\n"); fprintf(outfile, " -------------------------------------------------------------------------\n"); if(params.omega[i] != 0.0) omega_nm = (_c*_h*1e9)/(_hartree2J*params.omega[i]); omega_ev = _hartree2ev*params.omega[i]; omega_cm = _hartree2wavenumbers*params.omega[i]; if(params.omega[i] != 0.0) fprintf(outfile, " Evaluated at omega = %8.6f E_h (%6.2f nm, %5.3f eV, %8.2f cm-1)\n", params.omega[i], omega_nm, omega_ev, omega_cm); else fprintf(outfile, " Evaluated at omega = %8.6f E_h (Inf nm, %5.3f eV, %8.2f cm-1)\n", params.omega[i], omega_ev, omega_cm); fprintf(outfile, " -------------------------------------------------------------------------\n"); mat_print(tensor[i], 3, 3, outfile); trace[i] = tensor[i][0][0] + tensor[i][1][1] + tensor[i][2][2]; fprintf(outfile, "\n\talpha_(%5.3f) = %20.12f a.u.\n", params.omega[i], trace[i]); } if(params.nomega > 1) { /* print a summary table for multi-wavelength calcs */ fprintf(outfile, "\n\t-------------------------------\n"); if (!strcmp(params.wfn,"CC2")) fprintf(outfile, "\t CC2 Polarizability\n"); else fprintf(outfile, "\t CCSD Polarizability\n"); fprintf(outfile, "\t-------------------------------\n"); fprintf(outfile, "\t Omega alpha\n"); fprintf(outfile, "\t E_h nm a.u. \n"); fprintf(outfile, "\t----- ------ ----------------\n"); for(i=0; i < params.nomega; i++) fprintf(outfile, "\t%5.3f %6.2f %10.5f\n", params.omega[i], (_c*_h*1e9)/(_hartree2J*params.omega[i]), trace[i]); } for(i=0; i < params.nomega; i++) free_block(tensor[i]); free(tensor); free(trace); free(cartcomp[0]); free(cartcomp[1]); free(cartcomp[2]); free(cartcomp); } }} // namespace psi::ccresponse ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/print_X.cc������������������������������������������������������������������0000644�0001015�0000765�00000001376�10757640026�015654� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void print_X(char *pert, char *cart, int irrep, double omega) { dpdfile2 X1; dpdbuf4 X2; char lbl[32]; sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); dpd_file2_print(&X1, outfile); dpd_file2_close(&X1); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_print(&X2, outfile, 1); dpd_buf4_close(&X2); } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/pseudopolar.cc��������������������������������������������������������������0000644�0001015�0000765�00000002432�11112564564�016556� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { double pseudopolar(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1, mubar1; dpdbuf4 X2, mubar2; char lbl[32]; double polar1, polar2; sprintf(lbl, "%sBAR_%1s_IA", pert, cart); dpd_file2_init(&mubar1, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); polar1 = 2.0 * dpd_file2_dot(&mubar1, &X1); dpd_file2_close(&mubar1); dpd_file2_close(&X1); sprintf(lbl, "%sBAR_%1s_IjAb", pert, cart); dpd_buf4_init(&mubar2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); polar2 = dpd_buf4_dot(&mubar2, &X2); dpd_buf4_close(&mubar2); dpd_buf4_close(&X2); /* if(params.print & 2) { */ /* fprintf(outfile, "\tpolar1 = %20.12f\n", -2.0*polar1); */ /* fprintf(outfile, "\tpolar2 = %20.12f\n", -2.0*polar2); */ /* } */ return polar1+polar2; } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/save_X.cc�������������������������������������������������������������������0000644�0001015�0000765�00000001570�11112564564�015450� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void save_X(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1; dpdbuf4 X2; char lbl[32]; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_copy(&X1, CC_OEI, lbl); dpd_file2_close(&X1); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_copy(&X2, CC_LR, lbl); dpd_buf4_close(&X2); } }} // namespace psi::ccresponse ����������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/sort_lamps.cc���������������������������������������������������������������0000644�0001015�0000765�00000001132�10754663017�016404� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void sort_lamps(void) { dpdbuf4 L; /* RAK fixing this for new cclambda, assuming A1 ground lambda? */ dpd_buf4_init(&L, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LIjAb 0 -1"); dpd_buf4_scmcopy(&L, CC_LAMPS, "2 LIjAb - LIjBa", 2); dpd_buf4_sort_axpy(&L, CC_LAMPS, pqsr, 0, 5, "2 LIjAb - LIjBa", -1); dpd_buf4_close(&L); } }} // namespace psi::ccresponse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/sort_pert.cc����������������������������������������������������������������0000644�0001015�0000765�00000005616�11112564564�016251� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* sort_pert(): Sorts the specified MO-basis one-electron property ** integrals into CC ordering for use in building the ** similarity-transformed integrals and certain components of the ** total linear response function. ** ** NB: Some integrals are antisymmetric (e.g. L or P integrals), and ** others are symmetric (e.g. Mu integrals), so we must be careful in ** this and subsequent routines. ** ** TDC, 10/05 */ void sort_pert(const char *pert, double **pertX, double **pertY, double **pertZ, int irrep_x, int irrep_y, int irrep_z) { int p, q, Gp, Gq, P, Q, i; int irrep; dpdfile2 f; double **F; char prefix[32], lbl[32]; for(i=0; i < 3; i++) { if(i==0) { irrep = irrep_x; F = pertX; sprintf(prefix, "%s_%1s", pert, "X"); } else if(i==1) { irrep = irrep_y; F = pertY; sprintf(prefix, "%s_%1s", pert, "Y"); } else if(i==2) { irrep = irrep_z; F = pertZ; sprintf(prefix, "%s_%1s", pert, "Z"); } sprintf(lbl, "%s_IJ", prefix); dpd_file2_init(&f, CC_OEI, irrep, 0, 0, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.occpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_occ[p+moinfo.occ_off[Gp]]]; for(q=0; q < moinfo.occpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_occ[q+moinfo.occ_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); sprintf(lbl, "%s_AB", prefix); dpd_file2_init(&f, CC_OEI, irrep, 1, 1, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.virtpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_vir[p+moinfo.vir_off[Gp]]]; for(q=0; q < moinfo.virtpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_vir[q+moinfo.vir_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); sprintf(lbl, "%s_IA", prefix); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.occpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_occ[p+moinfo.occ_off[Gp]]]; for(q=0; q < moinfo.virtpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_vir[q+moinfo.vir_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); } } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/sort_X.cc�������������������������������������������������������������������0000644�0001015�0000765�00000004522�11112564564�015501� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void sort_X(const char *pert, const char *cart, int irrep, double omega) { dpdbuf4 X; char lbl[32]; sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IAjb (%5.3f)", pert, cart, omega); dpd_buf4_sort(&X, CC_LR, prqs, 10, 10, lbl); sprintf(lbl, "X_%s_%1s_IbjA (%5.3f)", pert, cart, omega); dpd_buf4_sort(&X, CC_LR, psqr, 10, 10, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_scmcopy(&X, CC_LR, lbl, 2); dpd_buf4_sort_axpy(&X, CC_LR, pqsr, 0, 5, lbl, -1); dpd_buf4_close(&X); sprintf(lbl, "X_%s_%1s_IAjb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IAjb-IbjA) (%5.3f)", pert, cart, omega); dpd_buf4_scmcopy(&X, CC_LR, lbl, 2); dpd_buf4_sort_axpy(&X, CC_LR, psrq, 10, 10, lbl, -1); dpd_buf4_close(&X); sprintf(lbl, "X_%s_%1s_IAjb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IAjb-jAIb) (%5.3f)", pert, cart, omega); dpd_buf4_scmcopy(&X, CC_LR, lbl, 2); dpd_buf4_sort_axpy(&X, CC_LR, rqps, 10, 10, lbl, -1); dpd_buf4_close(&X); if(params.ref == 0 && !strcmp(params.abcd,"NEW")) { /* X(-)(ij,ab) (i>j, a>b) = X(ij,ab) - X(ij,ba) */ sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 4, 9, 0, 5, 1, lbl); sprintf(lbl, "X_%s_%1s_(-)(ij,ab) (%5.3f)", pert, cart, omega); dpd_buf4_copy(&X, CC_LR, lbl); dpd_buf4_close(&X); /* X(+)(ij,ab) (i>=j, a>=b) = X(ij,ab) + X(ij,ba) */ sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_(+)(ij,ab) (%5.3f)", pert, cart, omega); dpd_buf4_copy(&X, CC_TMP0, lbl); dpd_buf4_sort_axpy(&X, CC_TMP0, pqsr, 0, 5, lbl, 1); dpd_buf4_close(&X); dpd_buf4_init(&X, CC_TMP0, irrep, 3, 8, 0, 5, 0, lbl); dpd_buf4_copy(&X, CC_LR, lbl); dpd_buf4_close(&X); } } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/transpert.cc����������������������������������������������������������������0000644�0001015�0000765�00000010255�11112564564�016245� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include <libiwl/iwl.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { /* transpert(): Transform various one-electron property integrals from ** the AO to the MO basis. In some cases, we must also add ** appropriate prefactors and signs. The only argument is a ** character string indicating the type of integral we want: "Mu", ** "L", "L*", "P", or "P*". The cints code produces only lower ** triangles, so we must unpack the integrals and keep up with ** symmetric vs. antisymmetric cases. ** ** Notes on specific integrals (all produced by "cints --oeprop") used ** here: ** ** (1) Mu: Length-gauge electric dipole moment integrals = -r. These ** already include the electronic charge, and they are symmetric wrt ** index permutation. ** (2) L: Magnetic dipole integrals = -1/2 (r x p). OK, actually, the ** input integrals are really just angular momentum integrals (r x p), ** but we multiply these by -0.5 to account for both the sign of the ** electronic charge and the definition of the magnetic dipole. These ** integrals are antisymmetric wrt index permutation. Use "L*" to use ** the complex conjugate of the operator (i.e., this multiplies by ** -1). ** ** (3) P: Velocity-gauge electric dipole moment integrals = -p. OK, ** cints actually produces -del integrals, which already include the ** electronic charge, so we must multiply by -1 for the definition of ** the linear momentum operator. They are antisymmetric wrt to index ** permutation. Use "P*" to use the complex conjugate of the operator ** (i.e., this multiplies by -1). ** ** -TDC, 11/05 */ void transpert(const char *pert) { int nao, nso, nmo, noei_ao; int alpha; int i, j, ij; double *scratch, **TMP, **X, **target; const char *name; double prefactor, anti, sign; nao = moinfo.nao; nso = moinfo.nso; nmo = moinfo.nmo; noei_ao = moinfo.noei_ao; TMP = block_matrix(nao, nao); X = block_matrix(nao, nao); scratch = init_array(noei_ao); if(!strcmp(pert,"Mu")) { prefactor = 1.0; anti = 1.0; sign = 1.0; } else if(!strcmp(pert, "L")) { prefactor = -0.5; anti = -1.0; sign = 1.0; } else if(!strcmp(pert, "L*")) { prefactor = -0.5; anti = -1.0; sign = -1.0; } else if(!strcmp(pert, "P")) { prefactor = -1.0; anti = -1.0; sign = 1.0; } else if(!strcmp(pert, "P*")) { prefactor = -1.0; anti = -1.0; sign = -1.0; } for(alpha=0; alpha < 3; alpha++) { target = block_matrix(nmo,nmo); if(!strcmp(pert,"Mu")) { if(alpha == 0) { name = PSIF_AO_MX; moinfo.MUX = target; } else if(alpha == 1) { name = PSIF_AO_MY; moinfo.MUY = target; } else if(alpha == 2) { name = PSIF_AO_MZ; moinfo.MUZ = target; } } else if(!strcmp(pert,"L") || !strcmp(pert, "L*")) { if(alpha == 0) { name = PSIF_AO_LX; moinfo.LX = target; } else if(alpha == 1) { name = PSIF_AO_LY; moinfo.LY = target; } else if(alpha == 2) { name = PSIF_AO_LZ; moinfo.LZ = target; } } else if(!strcmp(pert,"P") || !strcmp(pert, "P*")) { if(alpha == 0) { name = PSIF_AO_NablaX; moinfo.PX = target; } else if(alpha == 1) { name = PSIF_AO_NablaY; moinfo.PY = target; } else if(alpha == 2) { name = PSIF_AO_NablaZ; moinfo.PZ = target; } } iwl_rdone(PSIF_OEI, name, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = prefactor * sign * scratch[ij]; TMP[j][i] = anti * prefactor * sign * scratch[ij]; } C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(moinfo.usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(moinfo.usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(moinfo.scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(moinfo.scf[0][0]),nmo,&(X[0][0]),nao, 0,&(target[0][0]),nmo); zero_arr(scratch,noei_ao); } free(scratch); free_block(TMP); free_block(X); } }} // namespace psi::ccresponse ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/update_X.cc�����������������������������������������������������������������0000644�0001015�0000765�00000002076�11112564564�015776� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void update_X(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1new, X1; dpdbuf4 X2new, X2; char lbl[32]; sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); dpd_file2_axpy(&X1, &X1new, 1, 0); dpd_file2_close(&X1); dpd_file2_close(&X1new); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X2, &X2new, 1); dpd_buf4_close(&X2); dpd_buf4_close(&X2new); } }} // namespace psi::ccresponse ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccresponse/X1.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000006760�11112564564�014521� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom1(dpdfile2 *X1, double omega); void local_filter_T1(dpdfile2 *T1); void X1_build(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 F, X1, X1new; dpdbuf4 W, X2; char lbl[32]; int Gam, Gef, Gim, Gi, Ga, Gm, nrows, ncols, A, a, am; sprintf(lbl, "%sBAR_%1s_IA", pert, cart); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "New X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_copy(&X1new, CC_OEI, lbl); dpd_file2_close(&X1new); dpd_file2_init(&X1new, CC_OEI, irrep, 0, 1, lbl); /*** S-S ***/ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); dpd_file2_axpy(&X1, &X1new, -omega, 0); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "FAE"); dpd_contract222(&X1, &F, &X1new, 0, 0, 1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "FMI"); dpd_contract222(&F, &X1, &X1new, 1, 1, -1, 1); dpd_file2_close(&F); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(jb,ME) + W(Jb,Me)"); dpd_contract422(&W, &X1, &X1new, 0, 0, 1, 1); dpd_buf4_close(&W); dpd_file2_close(&X1); /*** S-D ***/ dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME"); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_dot24(&F, &X2, &X1new, 0, 0, 1, 1); dpd_buf4_close(&X2); dpd_file2_close(&F); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); /* dpd_contract442(&X2, &W, &X1new, 0, 0, 1, 1); */ /* ooc code below added 7/28/05, -TDC */ dpd_file2_mat_init(&X1new); dpd_file2_mat_rd(&X1new); for(Gam=0; Gam < moinfo.nirreps; Gam++) { Gef = Gam; /* W is totally symmetric */ Gim = Gef ^ irrep; dpd_buf4_mat_irrep_init(&X2, Gim); dpd_buf4_mat_irrep_rd(&X2, Gim); dpd_buf4_mat_irrep_shift13(&X2, Gim); for(Gi=0; Gi < moinfo.nirreps; Gi++) { Ga = Gi ^ irrep; Gm = Ga ^ Gam; W.matrix[Gam] = dpd_block_matrix(moinfo.occpi[Gm], W.params->coltot[Gef]); nrows = moinfo.occpi[Gi]; ncols = moinfo.occpi[Gm] * W.params->coltot[Gef]; for(A=0; A < moinfo.virtpi[Ga]; A++) { a = moinfo.vir_off[Ga] + A; am = W.row_offset[Gam][a]; dpd_buf4_mat_irrep_rd_block(&W, Gam, am, moinfo.occpi[Gm]); if(nrows && ncols && moinfo.virtpi[Ga]) C_DGEMV('n',nrows,ncols,1,X2.shift.matrix[Gim][Gi][0],ncols,W.matrix[Gam][0],1,1, &(X1new.matrix[Gi][0][A]), moinfo.virtpi[Ga]); } dpd_free_block(W.matrix[Gam], moinfo.occpi[Gm], W.params->coltot[Gef]); } dpd_buf4_mat_irrep_close(&X2, Gim); } dpd_file2_mat_wrt(&X1new); dpd_file2_mat_close(&X1new); dpd_buf4_close(&W); dpd_buf4_close(&X2); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe - 2WnMIe (Mn,eI)"); dpd_contract442(&W, &X2, &X1new, 3, 3, 1, 1); dpd_buf4_close(&W); dpd_buf4_close(&X2); if(params.local && local.filter_singles) local_filter_T1(&X1new); else denom1(&X1new, omega); dpd_file2_close(&X1new); } }} // namespace psi::ccresponse ����������������psi3/src/bin/ccresponse/X2.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000042716�11112564564�014523� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCRESPONSE \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <libpsio/psio.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccresponse { void denom2(dpdbuf4 *X2, double omega); void local_filter_T2(dpdbuf4 *T2); void X2_build(const char *pert, const char *cart, int irrep, double omega) { dpdfile2 X1, z, F, t1; dpdbuf4 X2, X2new, Z, Z1, Z2, W, T2, I; char lbl[32]; int Gej, Gab, Gij, Ge, Gj, Gi, nrows, length, E, e, II; int Gbm, Gfe, bm, b, m, Gb, Gm, Gf, B, M, fe, f, ef, ncols; double *X; dpdbuf4 S, A, B_s; int ij, Gc, C, c, cc; int rows_per_bucket, nbuckets, row_start, rows_left, nlinks; psio_address next; double **X_diag, **B_diag; sprintf(lbl, "%sBAR_%1s_IjAb", pert, cart); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_copy(&X2new, CC_LR, lbl); dpd_buf4_close(&X2new); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /*** D-S ***/ sprintf(lbl, "X_%s_%1s_IA (%5.3f)", pert, cart, omega); dpd_file2_init(&X1, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 10, 0, 10, 0, 0, "WMbIj"); dpd_contract244(&X1, &W, &Z, 0, 0, 1, 1, 0); dpd_buf4_close(&W); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAbEi (Ei,Ab)"); /* dpd_contract244(&X1, &W, &Z, 1, 0, 0, 1, 0); */ /* ooc code below added 7/28/05, -TDC */ dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(Gej=0; Gej < moinfo.nirreps; Gej++) { Gab = Gej; /* W is totally symmetric */ Gij = Gab ^ irrep; dpd_buf4_mat_irrep_init(&Z, Gij); dpd_buf4_mat_irrep_shift13(&Z, Gij); for(Ge=0; Ge < moinfo.nirreps; Ge++) { Gj = Ge ^ Gej; Gi = Gj ^ Gij; nrows = moinfo.occpi[Gj]; length = nrows * W.params->coltot[Gab]; dpd_buf4_mat_irrep_init_block(&W, Gej, nrows); for(E=0; E < moinfo.virtpi[Ge]; E++) { e = moinfo.vir_off[Ge] + E; dpd_buf4_mat_irrep_rd_block(&W, Gej, W.row_offset[Gej][e], nrows); for(II=0; II < moinfo.occpi[Gi]; II++) { if(length) C_DAXPY(length, X1.matrix[Gi][II][E], W.matrix[Gej][0], 1, Z.shift.matrix[Gij][Gi][II], 1); } } dpd_buf4_mat_irrep_close_block(&W, Gej, nrows); } dpd_buf4_mat_irrep_wrt(&Z, Gij); dpd_buf4_mat_irrep_close(&Z, Gij); } dpd_file2_mat_close(&X1); dpd_buf4_close(&W); dpd_buf4_axpy(&Z, &X2new, 1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, 1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); sprintf(lbl, "z(N,I) %s %1s", pert, cart); dpd_file2_init(&z, CC_TMP0, irrep, 0, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 0, 11, 0, 11, 0, "2WMnIe - WnMIe (Mn,eI)"); dpd_dot23(&X1, &W, &z, 0, 0, 1, 0); dpd_buf4_close(&W); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&z, &T2, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_file2_close(&z); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); sprintf(lbl, "z(A,E) %s %1s", pert, cart); dpd_file2_init(&z, CC_TMP0, irrep, 1, 1, lbl); /* dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf 2(Am,Ef) - (Am,fE)"); */ /* dpd_dot24(&X1, &W, &z, 0, 0, 1, 0); */ /* ooc code below added 7/28/05, -TDC */ dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf"); dpd_file2_scm(&z, 0); dpd_file2_mat_init(&z); dpd_file2_mat_init(&X1); dpd_file2_mat_rd(&X1); for(Gbm=0; Gbm < moinfo.nirreps; Gbm++) { Gfe = Gbm; /* W is totally symmetric */ dpd_buf4_mat_irrep_row_init(&W, Gbm); X = init_array(W.params->coltot[Gfe]); for(bm=0; bm < W.params->rowtot[Gbm]; bm++) { dpd_buf4_mat_irrep_row_rd(&W, Gbm, bm); b = W.params->roworb[Gbm][bm][0]; m = W.params->roworb[Gbm][bm][1]; Gb = W.params->psym[b]; Gm = Gbm ^ Gb; Ge = Gm ^ irrep; Gf = Gfe ^ Ge; B = b - moinfo.vir_off[Gb]; M = m - moinfo.occ_off[Gm]; zero_arr(X, W.params->coltot[Gfe]); for(fe=0; fe < W.params->coltot[Gfe]; fe++) { f = W.params->colorb[Gfe][fe][0]; e = W.params->colorb[Gfe][fe][1]; ef = W.params->colidx[e][f]; X[fe] = 2.0 * W.matrix[Gbm][0][fe] - W.matrix[Gbm][0][ef]; } nrows = moinfo.virtpi[Gf]; ncols = moinfo.virtpi[Ge]; if(nrows & ncols) C_DGEMV('n',nrows,ncols,1,&X[W.col_offset[Gfe][Gf]],ncols, X1.matrix[Gm][M],1,1,z.matrix[Gb][B],1); } free(X); dpd_buf4_mat_irrep_row_close(&W, Gbm); } dpd_file2_mat_close(&X1); dpd_file2_mat_wrt(&z); dpd_file2_mat_close(&z); /* end ooc additions, 7/28/05, -TDC */ dpd_buf4_close(&W); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&T2, &z, &Z, 3, 1, 0, 1, 0); dpd_buf4_close(&T2); dpd_file2_close(&z); dpd_buf4_axpy(&Z, &X2new, 1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, 1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); dpd_file2_close(&X1); /*** D-D ***/ sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X2, &X2new, -omega); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "FAE"); dpd_contract424(&X2, &F, &Z, 3, 1, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_axpy(&Z, &X2new, 1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, 1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "FMI"); dpd_contract244(&F, &X2, &Z, 0, 0, 0, 1, 0); dpd_file2_close(&F); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); dpd_buf4_init(&W, CC_HBAR, 0, 0, 0, 0, 0, 0, "WMnIj"); dpd_contract444(&W, &X2, &X2new, 1, 1, 1, 1); dpd_buf4_close(&W); if(!strcmp(params.abcd,"OLD")) { sprintf(lbl, "Z(Ab,Ij) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 5, 0, 5, 0, 0, lbl); dpd_buf4_init(&I, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_contract444(&I, &X2, &Z, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, rspq, 0, 5, lbl, 1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); } else if(!strcmp(params.abcd,"NEW")) { timer_on("ABCD:new"); dpd_buf4_close(&X2); timer_on("ABCD:S"); sprintf(lbl, "X_%s_%1s_(+)(ij,ab) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 3, 8, 3, 8, 0, lbl); dpd_buf4_init(&I, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); sprintf(lbl, "S_%s_%1s_(ab,ij)", pert, cart); dpd_buf4_init(&S, CC_TMP0, irrep, 8, 3, 8, 3, 0, lbl); dpd_contract444(&I, &X2, &S, 0, 0, 0.5, 0); dpd_buf4_close(&S); dpd_buf4_close(&I); dpd_buf4_close(&X2); timer_off("ABCD:S"); /* X_diag(ij,c) = 2 * X(ij,cc)*/ /* NB: Gcc = 0 and B is totally symmetry, so Gab = 0 */ /* But Gij = irrep ^ Gab = irrep */ sprintf(lbl, "X_%s_%1s_(+)(ij,ab) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 3, 8, 3, 8, 0, lbl); dpd_buf4_mat_irrep_init(&X2, irrep); dpd_buf4_mat_irrep_rd(&X2, irrep); X_diag = dpd_block_matrix(X2.params->rowtot[irrep], moinfo.nvirt); for(ij=0; ij < X2.params->rowtot[irrep]; ij++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = C + moinfo.vir_off[Gc]; cc = X2.params->colidx[c][c]; X_diag[ij][c] = X2.matrix[irrep][ij][cc]; } dpd_buf4_mat_irrep_close(&X2, irrep); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); sprintf(lbl, "S_%s_%1s_(ab,ij)", pert, cart); dpd_buf4_init(&S, CC_TMP0, irrep, 8, 3, 8, 3, 0, lbl); dpd_buf4_mat_irrep_init(&S, 0); dpd_buf4_mat_irrep_rd(&S, 0); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + moinfo.nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; B_diag = dpd_block_matrix(rows_per_bucket, moinfo.nvirt); next = PSIO_ZERO; ncols = X2.params->rowtot[irrep]; nlinks = moinfo.nvirt; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; nrows = rows_per_bucket; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, X_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } if(rows_left) { row_start = m * rows_per_bucket; nrows = rows_left; if(nrows && ncols && nlinks) { psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next); C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks, X_diag[0], nlinks, 1, S.matrix[0][row_start], ncols); } } dpd_buf4_mat_irrep_wrt(&S, 0); dpd_buf4_mat_irrep_close(&S, 0); dpd_buf4_close(&S); dpd_buf4_close(&B_s); dpd_free_block(B_diag, rows_per_bucket, moinfo.nvirt); dpd_free_block(X_diag, X2.params->rowtot[irrep], moinfo.nvirt); dpd_buf4_close(&X2); timer_on("ABCD:A"); sprintf(lbl, "X_%s_%1s_(-)(ij,ab) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 4, 9, 4, 9, 0, lbl); dpd_buf4_init(&I, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); sprintf(lbl, "A_%s_%1s_(ab,ij)", pert, cart); dpd_buf4_init(&A, CC_TMP0, irrep, 9, 4, 9, 4, 0, lbl); dpd_contract444(&I, &X2, &A, 0, 0, 0.5, 0); dpd_buf4_close(&A); dpd_buf4_close(&I); dpd_buf4_close(&X2); timer_off("ABCD:A"); timer_on("ABCD:axpy"); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "S_%s_%1s_(ab,ij)", pert, cart); dpd_buf4_init(&S, CC_TMP0, irrep, 5, 0, 8, 3, 0, lbl); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&S, CC_LR, rspq, 0, 5, lbl, 1); dpd_buf4_close(&S); sprintf(lbl, "A_%s_%1s_(ab,ij)", pert, cart); dpd_buf4_init(&A, CC_TMP0, irrep, 5, 0, 9, 4, 0, lbl); sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&A, CC_LR, rspq, 0, 5, lbl, 1); dpd_buf4_close(&A); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ timer_off("ABCD:axpy"); sprintf(lbl, "X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); timer_off("ABCD:new"); } sprintf(lbl, "Z(Mb,Ij) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 10, 0, 10, 0, 0, lbl); dpd_buf4_init(&I, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_contract444(&I, &X2, &Z, 0, 0, 1, 0); dpd_buf4_close(&I); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z1, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA"); dpd_contract244(&t1, &Z, &Z1, 0, 0, 1, 1, 0); dpd_file2_close(&t1); dpd_buf4_close(&Z); dpd_buf4_axpy(&Z1, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z1, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z1); sprintf(lbl, "Z(Ij,Mn) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 0, 0, 0, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract444(&X2, &I, &Z, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); dpd_contract444(&Z, &T2, &X2new, 0, 1, 1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&Z); dpd_buf4_close(&X2); sprintf(lbl, "Z(Ib,jA) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 10, 10, 10, 10, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ"); sprintf(lbl, "X_%s_%1s_IbjA (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 10, 10, 10, 10, 0, lbl); dpd_contract444(&X2, &W, &Z, 0, 1, 1, 0); dpd_buf4_close(&X2); dpd_buf4_close(&W); sprintf(lbl, "X(IA,jb) III %s %1s", pert, cart); dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 10, lbl); dpd_buf4_close(&Z); sprintf(lbl, "X(IA,jb) I %s %1s", pert, cart); dpd_buf4_init(&Z1, CC_TMP0, irrep, 10, 10, 10, 10, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IAjb-IbjA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 10, 10, 10, 10, 0, lbl); dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)"); dpd_contract444(&X2, &W, &Z1, 0, 1, 0.5, 0); dpd_buf4_close(&W); dpd_buf4_close(&X2); sprintf(lbl, "Z(Ib,jA) %s %1s", pert, cart); dpd_buf4_init(&Z2, CC_TMP0, irrep, 10, 10, 10, 10, 0, lbl); dpd_buf4_axpy(&Z2, &Z1, 0.5); dpd_buf4_close(&Z2); sprintf(lbl, "X(IA,jb) III %s %1s", pert, cart); dpd_buf4_init(&Z2, CC_TMP0, irrep, 10, 10, 10, 10, 0, lbl); dpd_buf4_axpy(&Z2, &Z1, 1); dpd_buf4_close(&Z2); sprintf(lbl, "X(Ij,Ab) I+III %s %1s", pert, cart); dpd_buf4_sort(&Z1, CC_TMP0, prqs, 0, 5, lbl); dpd_buf4_close(&Z1); dpd_buf4_init(&Z1, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&Z1, &X2new, 1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z1, CC_LR, qpsr, 0, 5, lbl, 1); /* II+IV */ dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z1); sprintf(lbl, "z(F,A) %s %1s", pert, cart); dpd_file2_init(&z, CC_TMP0, irrep, 1, 1, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&I, &X2, &z, 2, 2, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&X2); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract424(&T2, &z, &Z, 3, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_file2_close(&z); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); sprintf(lbl, "z(N,I) %s %1s", pert, cart); dpd_file2_init(&z, CC_TMP0, irrep, 0, 0, lbl); sprintf(lbl, "X_%s_%1s_(2IjAb-IjbA) (%5.3f)", pert, cart, omega); dpd_buf4_init(&X2, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_contract442(&I, &X2, &z, 0, 0, 1, 0); dpd_buf4_close(&I); dpd_buf4_close(&X2); sprintf(lbl, "Z(Ij,Ab) %s %1s", pert, cart); dpd_buf4_init(&Z, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_contract244(&z, &T2, &Z, 0, 0, 0, 1, 0); dpd_buf4_close(&T2); dpd_file2_close(&z); dpd_buf4_axpy(&Z, &X2new, -1); dpd_buf4_close(&X2new); /* Need to close X2new to avoid collisions */ sprintf(lbl, "New X_%s_%1s_IjAb (%5.3f)", pert, cart, omega); dpd_buf4_sort_axpy(&Z, CC_LR, qpsr, 0, 5, lbl, -1); dpd_buf4_init(&X2new, CC_LR, irrep, 0, 5, 0, 5, 0, lbl); /* re-open X2new here */ dpd_buf4_close(&Z); if(params.local) local_filter_T2(&X2new); else denom2(&X2new, omega); dpd_buf4_close(&X2new); } }} // namespace psi::ccresponse ��������������������������������������������������psi3/src/bin/ccsort/��������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111663�013035� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/b_sort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000011762�10757640026�014652� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cmath> #include <libpsio/psio.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void b_sort(void) { dpdbuf4 B, B_s, B_a; int h, m, ab, cd, a, b, c, d, AB, CD, DC, Gc, C, cc; int rows_per_bucket, rows_left, nbuckets, row_start, nvirt; double **B_diag, abcd, abdc; psio_address next; /* B(+) = <ab|cd> + <ab|dc> */ /* B(-) = <ab|cd> - <ab|dc> */ if(params.ref == 0) { /* RHF references only */ dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>"); dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_scm(&B_s, 0); dpd_buf4_scm(&B_a, 0); for(h=0; h < moinfo.nirreps; h++) { dpd_buf4_mat_irrep_row_init(&B, h); rows_per_bucket = 0; if(B_s.params->coltot[h]) rows_per_bucket = dpd_memfree()/(2 * B_s.params->coltot[h]); if(rows_per_bucket > B_s.params->rowtot[h]) rows_per_bucket = B_s.params->rowtot[h]; nbuckets = (int) ceil((double) B_s.params->rowtot[h]/(double) rows_per_bucket); rows_left = 0; if(rows_per_bucket) rows_left = B_s.params->rowtot[h] % rows_per_bucket; dpd_buf4_mat_irrep_init_block(&B_s, h, rows_per_bucket); dpd_buf4_mat_irrep_init_block(&B_a, h, rows_per_bucket); for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; for(ab=0; ab < rows_per_bucket; ab++) { a = B_s.params->roworb[h][ab+row_start][0]; b = B_s.params->roworb[h][ab+row_start][1]; AB = B.params->rowidx[a][b]; dpd_buf4_mat_irrep_row_rd(&B, h, AB); for(cd=0; cd < B_s.params->coltot[h]; cd++) { c = B_s.params->colorb[h][cd][0]; d = B_s.params->colorb[h][cd][1]; CD = B.params->colidx[c][d]; DC = B.params->colidx[d][c]; abcd = B.matrix[h][0][CD]; abdc = B.matrix[h][0][DC]; B_s.matrix[h][ab][cd] = abcd + abdc; B_a.matrix[h][ab][cd] = abcd - abdc; } } dpd_buf4_mat_irrep_wrt_block(&B_s, h, row_start, rows_per_bucket); dpd_buf4_mat_irrep_wrt_block(&B_a, h, row_start, rows_per_bucket); } if(rows_left) { row_start = m * rows_per_bucket; for(ab=0; ab < rows_left; ab++) { a = B_s.params->roworb[h][ab+row_start][0]; b = B_s.params->roworb[h][ab+row_start][1]; AB = B.params->rowidx[a][b]; dpd_buf4_mat_irrep_row_rd(&B, h, AB); for(cd=0; cd < B_s.params->coltot[h]; cd++) { c = B_s.params->colorb[h][cd][0]; d = B_s.params->colorb[h][cd][1]; CD = B.params->colidx[c][d]; DC = B.params->colidx[d][c]; abcd = B.matrix[h][0][CD]; abdc = B.matrix[h][0][DC]; B_s.matrix[h][ab][cd] = abcd + abdc; B_a.matrix[h][ab][cd] = abcd - abdc; } } dpd_buf4_mat_irrep_wrt_block(&B_s, h, row_start, rows_left); dpd_buf4_mat_irrep_wrt_block(&B_a, h, row_start, rows_left); } dpd_buf4_mat_irrep_close_block(&B_s, h, rows_per_bucket); dpd_buf4_mat_irrep_close_block(&B_a, h, rows_per_bucket); dpd_buf4_mat_irrep_row_close(&B, h); } dpd_buf4_close(&B_a); dpd_buf4_close(&B_s); dpd_buf4_close(&B); /* Generate <ab|cc> components of B(+) */ for(h=0,nvirt=0; h < moinfo.nirreps; h++) nvirt += moinfo.virtpi[h]; dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; dpd_buf4_mat_irrep_init_block(&B_s, 0, rows_per_bucket); B_diag = dpd_block_matrix(rows_per_bucket, nvirt); next = PSIO_ZERO; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; dpd_buf4_mat_irrep_rd_block(&B_s, 0, row_start, rows_per_bucket); for(ab=0; ab < rows_per_bucket; ab++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = moinfo.vir_off[Gc] + C; cc = B_s.params->colidx[c][c]; B_diag[ab][c] = B_s.matrix[0][ab][cc]; } psio_write(CC_BINTS, "B(+) <ab|cc>", (char *) B_diag[0], rows_per_bucket*nvirt*sizeof(double), next, &next); } if(rows_left) { row_start = m * rows_per_bucket; dpd_buf4_mat_irrep_rd_block(&B_s, 0, row_start, rows_left); for(ab=0; ab < rows_left; ab++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = moinfo.vir_off[Gc] + C; cc = B_s.params->colidx[c][c]; B_diag[ab][c] = B_s.matrix[0][ab][cc]; } psio_write(CC_BINTS, "B(+) <ab|cc>", (char *) B_diag[0], rows_left*nvirt*sizeof(double), next, &next); } dpd_free_block(B_diag, rows_per_bucket, nvirt); dpd_buf4_mat_irrep_close_block(&B_s, 0, rows_per_bucket); dpd_buf4_close(&B_s); } } }} // namespace psi::ccsort ��������������psi3/src/bin/ccsort/build_abcd_packed.cc������������������������������������������������������������0000644�0001015�0000765�00000017535�10757640026�016745� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <ccfiles.h> #include <psifiles.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void idx_permute_multipass(dpdfile4 *File, int this_bucket, int **bucket_map, int **bucket_offset, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile); int build_abcd_packed(int inputfile, double tolerance, int keep) { struct iwlbuf InBuf; int lastbuf; long int memoryb, memoryd, core_left, row_length; int h, nirreps, n, row, nump, numq, nbuckets; int **bucket_map, **bucket_offset, **bucket_rowdim; int **bucket_size; Value *valptr; Label *lblptr; int idx, p, q, r, s; int ab, cd, c, d, CD, DC; double value, abcd, abdc; struct iwlbuf *SortBuf; psio_address next; dpdfile4 B; dpdbuf4 B_s, B_a; double **B_diag; int rows_per_bucket, rows_left, row_start, nvirt; int m, Gc, C, cc; dpd_file4_init_nocache(&B, CC_BINTS, 0, 8, 5, "B(+) <ab|cd>"); /* junk target */ dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); dpd_buf4_scm(&B_s, 0.0); dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>"); dpd_buf4_scm(&B_a, 0.0); nirreps = B.params->nirreps; fndcor(&memoryb, infile, outfile); memoryd = memoryb/sizeof(double); /* It's annoying that I have to compute this here */ for(h=0,nump=0,numq=0; h < B.params->nirreps; h++) { nump += B.params->ppi[h]; numq += B.params->qpi[h]; } bucket_map = init_int_matrix(nump,numq); for(p=0; p < nump; p++) for(q=0; q < numq; q++) bucket_map[p][q] = -1; /* initialize with junk */ /* Room for one bucket to begin with */ bucket_offset = (int **) malloc(sizeof(int *)); bucket_offset[0] = init_int_array(nirreps); bucket_rowdim = (int **) malloc(sizeof(int *)); bucket_rowdim[0] = init_int_array(nirreps); bucket_size = (int **) malloc(sizeof(int *)); bucket_size[0] = init_int_array(nirreps); /* Figure out how many passes we need and where each p,q goes */ for(h=0,core_left=memoryd,nbuckets=1; h < nirreps; h++) { row_length = (long int) B.params->coltot[h^(B.my_irrep)]; for(row=0; row < B.params->rowtot[h]; row++) { if((core_left - row_length) >= 0) { core_left -= row_length; bucket_rowdim[nbuckets-1][h]++; bucket_size[nbuckets-1][h] += row_length; } else { nbuckets++; core_left = memoryd - row_length; /* Make room for another bucket */ bucket_offset = (int **) realloc((void *) bucket_offset, nbuckets * sizeof(int *)); bucket_offset[nbuckets-1] = init_int_array(nirreps); bucket_offset[nbuckets-1][h] = row; bucket_rowdim = (int **) realloc((void *) bucket_rowdim, nbuckets * sizeof(int *)); bucket_rowdim[nbuckets-1] = init_int_array(nirreps); bucket_rowdim[nbuckets-1][h] = 1; bucket_size = (int **) realloc((void *) bucket_size, nbuckets * sizeof(int *)); bucket_size[nbuckets-1] = init_int_array(nirreps); bucket_size[nbuckets-1][h] = row_length; } p = B.params->roworb[h][row][0]; q = B.params->roworb[h][row][1]; bucket_map[p][q] = nbuckets - 1; } } fprintf(outfile, "\tSorting File: %s nbuckets = %d\n", B.label, nbuckets); fflush(outfile); next = PSIO_ZERO; for(n=0; n < nbuckets; n++) { /* nbuckets = number of passes */ /* Prepare target matrix */ for(h=0; h < nirreps; h++) { B.matrix[h] = block_matrix(bucket_rowdim[n][h], B.params->coltot[h]); } iwl_buf_init(&InBuf, inputfile, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute_multipass(&B,n,bucket_map,bucket_offset, p,q,r,s,1,1,1,value,outfile); } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute_multipass(&B,n,bucket_map,bucket_offset, p,q,r,s,1,1,1,value,outfile); } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, 1); /* close buffer for next pass */ for(h=0; h < nirreps;h++) { if(bucket_size[n][h]) { /* psio_write(B.filenum, B.label, (char *) B.matrix[h][0], */ /* bucket_size[n][h]*((long int) sizeof(double)), next, &next); */ dpd_buf4_mat_irrep_row_init(&B_s, h); dpd_buf4_mat_irrep_row_init(&B_a, h); for(ab=0; ab < bucket_rowdim[n][h]; ab++) { for(cd=0; cd < B_s.params->coltot[h]; cd++) { c = B_s.params->colorb[h][cd][0]; d = B_s.params->colorb[h][cd][1]; CD = B.params->colidx[c][d]; DC = B.params->colidx[d][c]; abcd = B.matrix[h][ab][CD]; abdc = B.matrix[h][ab][DC]; B_s.matrix[h][0][cd] = abcd + abdc; B_a.matrix[h][0][cd] = abcd - abdc; } dpd_buf4_mat_irrep_row_wrt(&B_s, h, ab+bucket_offset[n][h]); dpd_buf4_mat_irrep_row_wrt(&B_a, h, ab+bucket_offset[n][h]); } dpd_buf4_mat_irrep_row_close(&B_s, h); dpd_buf4_mat_irrep_row_close(&B_a, h); } free_block(B.matrix[h]); } } /* end loop over buckets/passes */ /* Get rid of the input integral file */ psio_open(inputfile, PSIO_OPEN_OLD); psio_close(inputfile, keep); free_int_matrix(bucket_map); for(n=0; n < nbuckets; n++) { free(bucket_offset[n]); free(bucket_rowdim[n]); free(bucket_size[n]); } free(bucket_offset); free(bucket_rowdim); free(bucket_size); dpd_file4_close(&B); dpd_buf4_close(&B_s); dpd_buf4_close(&B_a); /* Generate <ab|cc> components of B(+) */ for(h=0,nvirt=0; h < moinfo.nirreps; h++) nvirt += moinfo.virtpi[h]; dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>"); rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + nvirt); if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0]; nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket); rows_left = B_s.params->rowtot[0] % rows_per_bucket; dpd_buf4_mat_irrep_init_block(&B_s, 0, rows_per_bucket); B_diag = dpd_block_matrix(rows_per_bucket, nvirt); next = PSIO_ZERO; for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) { row_start = m * rows_per_bucket; dpd_buf4_mat_irrep_rd_block(&B_s, 0, row_start, rows_per_bucket); for(ab=0; ab < rows_per_bucket; ab++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = moinfo.vir_off[Gc] + C; cc = B_s.params->colidx[c][c]; B_diag[ab][c] = B_s.matrix[0][ab][cc]; } psio_write(CC_BINTS, "B(+) <ab|cc>", (char *) B_diag[0], rows_per_bucket*nvirt*sizeof(double), next, &next); } if(rows_left) { row_start = m * rows_per_bucket; dpd_buf4_mat_irrep_rd_block(&B_s, 0, row_start, rows_left); for(ab=0; ab < rows_left; ab++) for(Gc=0; Gc < moinfo.nirreps; Gc++) for(C=0; C < moinfo.virtpi[Gc]; C++) { c = moinfo.vir_off[Gc] + C; cc = B_s.params->colidx[c][c]; B_diag[ab][c] = B_s.matrix[0][ab][cc]; } psio_write(CC_BINTS, "B(+) <ab|cc>", (char *) B_diag[0], rows_left*nvirt*sizeof(double), next, &next); } dpd_free_block(B_diag, rows_per_bucket, nvirt); dpd_buf4_mat_irrep_close_block(&B_s, 0, rows_per_bucket); dpd_buf4_close(&B_s); return 0; } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/build_B_RHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000006045�10754663017�015421� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* build_B_RHF_singlet(): Builds the RHF orbital Hessian for computing ** spatial- and spin-symmetry instabilities. In spin orbitals the Hessian ** matrix is: ** ** B(ai,bj) = delta_ij f_ab - delta_ab f_ij + <ij||ab> - <ja||ib> ** ** RHF references and singlet eigenstates: ** B(AI,BJ) = delta_IJ f_AB - delta_AB f_IJ + <IJ|BA> - <IA|JB> ** ** This routine will build each spin component of the entire matrix ** for later in-core diagonalization. ** ** TDC, March 2003 ** ** Adapted for use in local-CC response calculations by TDC, April ** 2004. Note that this version of the MO Hessian is correct for ** non-canonical Hartree-Fock orbitals. */ void build_B_RHF(double omega) { int h, nirreps; int a, b, i, j, ai, bj, A, B, I, J, Asym, Bsym, Isym, Jsym; dpdbuf4 C, D, Bmat; dpdfile2 fIJ, fij, fAB, fab; nirreps = moinfo.nirreps; psio_open(PSIF_MO_HESS, 0); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, PSIF_MO_HESS, sprq, 11, 11, "B(AI,BJ)"); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort_axpy(&C, PSIF_MO_HESS, qpsr, 11, 11, "B(AI,BJ)", -1); dpd_buf4_close(&C); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_buf4_init(&Bmat, PSIF_MO_HESS, 0, 11, 11, 11, 11, 0, "B(AI,BJ)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Bmat, h); dpd_buf4_mat_irrep_rd(&Bmat, h); for(ai=0; ai < Bmat.params->rowtot[h]; ai++) { a = Bmat.params->roworb[h][ai][0]; i = Bmat.params->roworb[h][ai][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(bj=0; bj < Bmat.params->coltot[h]; bj++) { b = Bmat.params->colorb[h][bj][0]; j = Bmat.params->colorb[h][bj][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((A==B) && (Isym==Jsym)) Bmat.matrix[h][ai][bj] -= fIJ.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Bmat.matrix[h][ai][bj] += fAB.matrix[Asym][A][B]; if(ai==bj) Bmat.matrix[h][ai][bj] -= omega; } } dpd_buf4_mat_irrep_wrt(&Bmat, h); dpd_buf4_mat_irrep_close(&Bmat, h); } dpd_buf4_close(&Bmat); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); psio_close(PSIF_MO_HESS, 1); } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/build_F_RHF.cc������������������������������������������������������������������0000644�0001015�0000765�00000006467�10754663017�015435� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* build_A_RHF(): Builds the RHF orbital Hessian for computing ** spatial- and spin-symmetry instabilities. In spin orbitals the Hessian ** matrix is: ** ** A(ai,bj) = delta_ij f_ab - delta_ab f_ij + <ij||ab> + <ja||ib> ** ** RHF references and singlet eigenstates: ** A(AI,BJ) = delta_IJ f_AB - delta_AB f_IJ + 4 <IJ|AB> - <IJ|BA> - <IA|JB> ** ** This routine will build each spin component of the entire matrix ** for later in-core diagonalization. ** ** TDC, March 2003 ** ** Adapted for use in local-CC response calculations by TDC, April ** 2004. Note that this version of the MO Hessian is correct for ** non-canonical Hartree-Fock orbitals. */ void build_F_RHF(double omega) { int h, nirreps; int a, b, i, j, ai, bj, A, B, I, J, Asym, Bsym, Isym, Jsym; dpdbuf4 C, D, Amat; dpdfile2 fIJ, fij, fAB, fab; nirreps = moinfo.nirreps; psio_open(PSIF_MO_HESS, 0); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, PSIF_MO_HESS, rpsq, 11, 11, "A(AI,BJ)"); dpd_buf4_close(&D); dpd_buf4_init(&Amat, PSIF_MO_HESS, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); dpd_buf4_scm(&Amat, 4); dpd_buf4_close(&Amat); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort_axpy(&D, PSIF_MO_HESS, sprq, 11, 11, "A(AI,BJ)", -1); dpd_buf4_close(&D); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort_axpy(&C, PSIF_MO_HESS, qpsr, 11, 11, "A(AI,BJ)", -1); dpd_buf4_close(&C); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_buf4_init(&Amat, PSIF_MO_HESS, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(ai=0; ai < Amat.params->rowtot[h]; ai++) { a = Amat.params->roworb[h][ai][0]; i = Amat.params->roworb[h][ai][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(bj=0; bj < Amat.params->coltot[h]; bj++) { b = Amat.params->colorb[h][bj][0]; j = Amat.params->colorb[h][bj][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][ai][bj] -= fIJ.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][ai][bj] += fAB.matrix[Asym][A][B]; if(ai==bj) Amat.matrix[h][ai][bj] -= omega; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); psio_close(PSIF_MO_HESS, 1); } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/c_sort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000007474�10754663017�014662� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void c_sort(void) { dpdbuf4 C, D; if(params.ref == 2) { /** UHF **/ /* <ia||jb> = <ia|jb> - <ia|bj> = <ia|jb> - <ij|ba> */ /*** AA ***/ dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA|JB>"); dpd_buf4_copy(&C, CC_CINTS, "C <IA||JB>"); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ|AB>"); dpd_buf4_sort(&D, CC_TMP0, psqr, 20, 20, "D <IJ|AB> (IB,JA)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP0, 0, 20, 20, 20, 20, 0, "D <IJ|AB> (IB,JA)"); dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_axpy(&D, &C, -1); dpd_buf4_close(&D); dpd_buf4_close(&C); /* <IA||JB> (IA,BJ) (Wmbej.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_sort(&C, CC_CINTS, pqsr, 20, 21, "C <IA||JB> (IA,BJ)"); dpd_buf4_close(&C); /*** BB ***/ dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia|jb>"); dpd_buf4_copy(&C, CC_CINTS, "C <ia||jb>"); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP0, psqr, 30, 30, "D <ij|ab> (ib,ja)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP0, 0, 30, 30, 30, 30, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_axpy(&D, &C, -1); dpd_buf4_close(&D); dpd_buf4_close(&C); /* <ia||jb> (ia,bj) (Wmbej.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_sort(&C, CC_CINTS, pqsr, 30, 31, "C <ia||jb> (ia,bj)"); dpd_buf4_close(&C); /*** AB ***/ /* <Ai|Bj> (iA,Bj) (Wmbej.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 26, 26, 26, 26, 0, "C <Ai|Bj>"); dpd_buf4_sort(&C, CC_CINTS, qpsr, 27, 27, "C <iA|jB>"); dpd_buf4_sort(&C, CC_CINTS, qprs, 27, 26, "C <Ai|Bj> (iA,Bj)"); dpd_buf4_close(&C); /* <Ia|Jb> (Ia,bJ) (Wmbej.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); dpd_buf4_sort(&C, CC_CINTS, pqsr, 24, 25, "C <Ia|Jb> (Ia,bJ)"); dpd_buf4_close(&C); } else { /** RHF/ROHF **/ /* <ia||jb> = <ia|jb> - <ia|bj> = <ia|jb> - <ij|ba> */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_copy(&C, CC_CINTS, "C <ia||jb>"); dpd_buf4_close(&C); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_TMP0, psqr, 10, 10, "D <ij|ab> (ib,ja)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_TMP0, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_axpy(&D, &C, -1); dpd_buf4_close(&D); dpd_buf4_close(&C); /* <ia|jb> (bi,ja) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_CINTS, sprq, 11, 10, "C <ia|jb> (bi,ja)"); dpd_buf4_close(&C); /* <ia||jb> (bi,ja) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_sort(&C, CC_CINTS, sprq, 11, 10, "C <ia||jb> (bi,ja)"); dpd_buf4_close(&C); /* <ia|jb> (ia,bj) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_CINTS, pqsr, 10, 11, "C <ia|jb> (ia,bj)"); dpd_buf4_close(&C); /* <ia||jb> (ia,bj) (Wmbej.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_sort(&C, CC_CINTS, pqsr, 10, 11, "C <ia||jb> (ia,bj)"); dpd_buf4_close(&C); /* <ai|bj> (cchbar/Wabei_RHF.c) */ dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); dpd_buf4_sort(&C, CC_CINTS, qpsr, 11, 11, "C <ai|bj>"); dpd_buf4_close(&C); } } }} // namespace psi::ccsort ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/cache.cc������������������������������������������������������������������������0000644�0001015�0000765�00000037525�10757640026�014432� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace ccsort { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/cc_memcheck.cc������������������������������������������������������������������0000644�0001015�0000765�00000020147�10757640026�015600� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void cc_memcheck(void) { unsigned long int irrep_size, size, h; dpdbuf4 Z; fprintf(outfile, "\n"); if(params.ref == 0) { dpd_buf4_init(&Z, 99, 0, 5, 5, 5, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ab|cd> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 10, 5, 10, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ia|bc> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 0, 5, 0, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of tijab amplitudes: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); fflush(outfile); } else if(params.ref == 1) { dpd_buf4_init(&Z, 99, 0, 5, 5, 5, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ab|cd> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 10, 5, 10, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ia|bc> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 0, 5, 0, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of tIjAb amplitudes: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); } else if(params.ref == 2) { dpd_buf4_init(&Z, 99, 0, 7, 7, 7, 7, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <AB|CD> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 17, 17, 17, 17, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ab|cd> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 28, 28, 28, 28, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <Ab|Cd> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 20, 5, 20, 5, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <IA|BC> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 30, 15, 30, 15, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <ia|bc> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 24, 28, 24, 28, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <Ia|Bc> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 27, 29, 27, 29, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of <iA|bC> integrals: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); dpd_buf4_init(&Z, 99, 0, 22, 28, 22, 28, 0, "Just a template"); size = 0; for(h=0; h < moinfo.nirreps; h++) { irrep_size = (unsigned long int) Z.params->rowtot[h] * Z.params->coltot[h]; size += irrep_size; fprintf(outfile, "\tSize of irrep %1d of tIjAb amplitudes: %10.3lf (MW) / %10.3lf (MB)\n", h, irrep_size/1e6, (irrep_size/1e6)*sizeof(double)); } dpd_buf4_close(&Z); fprintf(outfile, "\tTotal: %10.3lf (MW) / %10.3lf (MB)\n\n", size/1e6, (size/1e6)*sizeof(double)); } fflush(outfile); } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/ccsort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000016205�11112564564�014652� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ /* ** CCSORT: Program to reorganize integrals for CC and MBPT calculations. */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libpsio/psio.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #include "globals.h" namespace psi { namespace ccsort { #define IOFF_MAX 32641 void init_io(int argc, char *argv[]); void init_ioff(void); void title(void); void get_params(void); void get_moinfo(void); void sort_oei(void); void sort_tei(void); void b_sort(void); void c_sort(void); void d_sort(void); void e_sort(void); void f_sort(void); void d_spinad(void); void e_spinad(void); void f_spinad(void); void scf_check(void); void fock(void); void denom(void); void exit_io(void); void cleanup(void); int **cacheprep_uhf(int level, int *cachefiles); int **cacheprep_rhf(int level, int *cachefiles); void cachedone_uhf(int **cachelist); void cachedone_rhf(int **cachelist); void local_init(void); void local_done(void); void cc_memcheck(void); }} //namespace psi::ccsort using namespace psi::ccsort; int main(int argc, char *argv[]) { int i; int **cachelist, *cachefiles; int bamount,famount; /* Truncated theoretical number of B/F-type ints that could be stored in cache at once */ unsigned long int ia_size, ab_size, ij_size, f_size, t2_size, b_size; init_io(argc,argv); init_ioff(); title(); timer_init(); get_params(); get_moinfo(); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 2) { /*** UHF references ***/ cachelist = cacheprep_uhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } else { /*** RHF/ROHF references ***/ cachelist = cacheprep_rhf(params.cachelev, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } /* run a small computation of memory and disk requirements */ cc_memcheck(); fprintf(outfile, "\n"); sort_oei(); sort_tei(); c_sort(); d_sort(); e_sort(); f_sort(); if(params.ref == 0) { d_spinad(); e_spinad(); /* f_spinad(); */ } scf_check(); fock(); denom(); /* CPHF stuff for local correlation tests */ if(params.local) { local_init(); local_done(); } dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); timer_done(); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" { const char *gprgid() { const char *prgid = "CCSORT"; return(prgid); } } namespace psi { namespace ccsort { void init_io(int argc, char *argv[]) { int i, num_unparsed; char *progid, **argv_unparsed; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); argv_unparsed = (char **) malloc(argc * sizeof(char *)); params.reset = 0; for(i=1, num_unparsed=0; i < argc; i++) { if(!strcmp(argv[i], "--reset")) params.reset = 1; else argv_unparsed[num_unparsed++] = argv[i]; } psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed, argv_unparsed, 0); free(argv_unparsed); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); if(params.reset) for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,0); else for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void title(void) { fprintf(outfile, "\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCSORT *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\n"); } void exit_io(void) { int i; for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1); for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0); /* get rid of TMP files */ for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } void init_ioff(void) { int i; ioff = init_int_array(IOFF_MAX); ioff[0] = 0; for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i; } void cleanup(void) { int i; psio_write_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); if(params.ref == 2) { free(moinfo.pitz2qt_A); free(moinfo.pitz2qt_B); free(moinfo.qt2pitz_A); free(moinfo.qt2pitz_B); free(moinfo.aocc); free(moinfo.bocc); free(moinfo.avir); free(moinfo.bvir); free(moinfo.all_aocc); free(moinfo.all_bocc); free(moinfo.all_avir); free(moinfo.all_bvir); free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.all_aoccpi); free(moinfo.all_boccpi); free(moinfo.all_avirtpi); free(moinfo.all_bvirtpi); free(moinfo.cc_aocc); free(moinfo.cc_bocc); free(moinfo.cc_avir); free(moinfo.cc_bvir); free(moinfo.qt_aocc); free(moinfo.qt_bocc); free(moinfo.qt_avir); free(moinfo.qt_bvir); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.cc_allaocc); free(moinfo.cc_allbocc); free(moinfo.cc_allavir); free(moinfo.cc_allbvir); free(moinfo.qt_allaocc); free(moinfo.qt_allbocc); free(moinfo.qt_allavir); free(moinfo.qt_allbvir); free(moinfo.allaocc_sym); free(moinfo.allbocc_sym); free(moinfo.allavir_sym); free(moinfo.allbvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); free(moinfo.all_aocc_off); free(moinfo.all_bocc_off); free(moinfo.all_avir_off); free(moinfo.all_bvir_off); } else { free(moinfo.pitz2qt); free(moinfo.qt2pitz); free(moinfo.occ); free(moinfo.vir); free(moinfo.all_occ); free(moinfo.all_vir); free(moinfo.socc); free(moinfo.all_socc); free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.all_occpi); free(moinfo.all_virtpi); free(moinfo.orbsym); free(moinfo.cc_occ); free(moinfo.cc_vir); free(moinfo.qt_occ); free(moinfo.qt_vir); free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.cc_allocc); free(moinfo.cc_allvir); free(moinfo.qt_allocc); free(moinfo.qt_allvir); free(moinfo.allocc_sym); free(moinfo.allvir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.all_occ_off); free(moinfo.all_vir_off); } free(moinfo.pitzer2qt); free(moinfo.qt2pitzer); free(moinfo.sopi); free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); free(moinfo.frozen); free(ioff); } }} //namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/classify.cc���������������������������������������������������������������������0000644�0001015�0000765�00000032143�11112564564�015171� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libiwl/iwl.h> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* ** This is the ugliest piece of code I have written in my life. ** T. Daniel Crawford, September, 1996 */ void classify(int p, int q, int r, int s, double value, struct iwlbuf *ABuf, struct iwlbuf *BBuf, struct iwlbuf *CBuf, struct iwlbuf *DBuf, struct iwlbuf *EBuf, struct iwlbuf *F1Buf, struct iwlbuf *F2Buf) { int *occ, *vir, *socc; int *cc_occ, *cc_vir; int dirac=1; int soccs; int nfzc, *frozen; nfzc = moinfo.nfzc; frozen = moinfo.frozen; if(params.dertype==1) { /* Skip the frozen orbitals in the list */ if(frozen[p] || frozen[q] || frozen[r] || frozen[s]) return; else { /* Adjust the indices to account for the frozen core */ p -= nfzc; q -= nfzc; r -= nfzc; s -= nfzc; } } occ = moinfo.occ; vir = moinfo.vir; socc = moinfo.socc; cc_occ = moinfo.cc_occ; cc_vir = moinfo.cc_vir; soccs = socc[p] + socc[q] + socc[r] + socc[s]; /* A (oo|oo) integrals */ if((occ[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(ABuf, cc_occ[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); /* B (vv|vv) integrals */ if(params.make_abcd) { if((vir[p] && vir[q] && vir[r] && vir[s])) iwl_buf_wrt_val(BBuf, cc_vir[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); } /* C (oo|vv) integrals */ if(soccs > 1) { if((occ[p] && occ[q] && vir[r] && vir[s])) iwl_buf_wrt_val(CBuf, cc_occ[p], cc_occ[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if((occ[r] && occ[s] && vir[p] && vir[q])) iwl_buf_wrt_val(CBuf, cc_occ[r], cc_occ[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); } else if((occ[p] && occ[q] && vir[r] && vir[s])) iwl_buf_wrt_val(CBuf, cc_occ[p], cc_occ[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[r] && occ[s] && vir[p] && vir[q])) iwl_buf_wrt_val(CBuf, cc_occ[r], cc_occ[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); /* D (ov|ov) integrals */ if(soccs > 1) { if((occ[p] && vir[q] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); if((occ[q] && vir[p] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); if((occ[p] && vir[q] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); if((occ[q] && vir[p] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); } else if((occ[p] && vir[q] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[q] && vir[p] && occ[r] && vir[s])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); else if((occ[p] && vir[q] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); else if((occ[q] && vir[p] && occ[s] && vir[r])) iwl_buf_wrt_val(DBuf, cc_occ[q], cc_vir[p], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); /* E (vo|oo) integrals */ if(soccs > 1) { if((vir[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); if((vir[q] && occ[p] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[q], cc_occ[p], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); if((vir[r] && occ[s] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[r], cc_occ[s], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); if((vir[s] && occ[r] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[s], cc_occ[r], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); } else if((vir[p] && occ[q] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[p], cc_occ[q], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); else if((vir[q] && occ[p] && occ[r] && occ[s])) iwl_buf_wrt_val(EBuf, cc_vir[q], cc_occ[p], cc_occ[r], cc_occ[s], value, 0, outfile, dirac); else if((vir[r] && occ[s] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[r], cc_occ[s], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); else if((vir[s] && occ[r] && occ[p] && occ[q])) iwl_buf_wrt_val(EBuf, cc_vir[s], cc_occ[r], cc_occ[p], cc_occ[q], value, 0, outfile, dirac); /* F (ov|vv) integrals */ if(soccs > 1) { if((occ[p] && vir[q] && vir[r] && vir[s])) { iwl_buf_wrt_val(F1Buf, cc_occ[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[r], cc_vir[s], cc_occ[p], cc_vir[q], value, 0, outfile, dirac); } if((occ[q] && vir[p] && vir[r] && vir[s])) { iwl_buf_wrt_val(F1Buf, cc_occ[q], cc_vir[p], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[r], cc_vir[s], cc_occ[q], cc_vir[p], value, 0, outfile, dirac); } if((occ[r] && vir[s] && vir[p] && vir[q])) { iwl_buf_wrt_val(F1Buf, cc_occ[r], cc_vir[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); } if((occ[s] && vir[r] && vir[p] && vir[q])) { iwl_buf_wrt_val(F1Buf, cc_occ[s], cc_vir[r], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); } } else if((occ[p] && vir[q] && vir[r] && vir[s])) { iwl_buf_wrt_val(F1Buf, cc_occ[p], cc_vir[q], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[r], cc_vir[s], cc_occ[p], cc_vir[q], value, 0, outfile, dirac); } else if((occ[q] && vir[p] && vir[r] && vir[s])) { iwl_buf_wrt_val(F1Buf, cc_occ[q], cc_vir[p], cc_vir[r], cc_vir[s], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[r], cc_vir[s], cc_occ[q], cc_vir[p], value, 0, outfile, dirac); } else if((occ[r] && vir[s] && vir[p] && vir[q])) { iwl_buf_wrt_val(F1Buf, cc_occ[r], cc_vir[s], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[p], cc_vir[q], cc_occ[r], cc_vir[s], value, 0, outfile, dirac); } else if((occ[s] && vir[r] && vir[p] && vir[q])) { iwl_buf_wrt_val(F1Buf, cc_occ[s], cc_vir[r], cc_vir[p], cc_vir[q], value, 0, outfile, dirac); if(params.make_aibc) iwl_buf_wrt_val(F2Buf, cc_vir[p], cc_vir[q], cc_occ[s], cc_vir[r], value, 0, outfile, dirac); } } void classify_uhf(int p, int q, int r, int s, double value, const char *spin, struct iwlbuf *ABuf1, struct iwlbuf *BBuf1, struct iwlbuf *CBuf1, struct iwlbuf *CBuf2, struct iwlbuf *DBuf1, struct iwlbuf *EBuf1, struct iwlbuf *EBuf2, struct iwlbuf *FBuf1, struct iwlbuf *FBuf2, struct iwlbuf *FBuf3, struct iwlbuf *FBuf4) { int *occ1, *occ2, *vir1, *vir2; int *cc_occ1, *cc_occ2, *cc_vir1, *cc_vir2; int dirac=1; int *frozen, nfzc; nfzc = moinfo.nfzc; frozen = moinfo.frozen; if(params.dertype==1) { /* Skip the frozen orbitals in the list */ if(frozen[p] || frozen[q] || frozen[r] || frozen[s]) return; else { /* Adjust the indices to account for the frozen core */ p -= nfzc; q -= nfzc; r -= nfzc; s -= nfzc; } } if(!strcmp(spin,"AA")) { occ1 = moinfo.aocc; occ2 = moinfo.aocc; vir1 = moinfo.avir; vir2 = moinfo.avir; cc_occ1 = moinfo.cc_aocc; cc_occ2 = moinfo.cc_aocc; cc_vir1 = moinfo.cc_avir; cc_vir2 = moinfo.cc_avir; } else if(!strcmp(spin,"BB")) { occ1 = moinfo.bocc; occ2 = moinfo.bocc; vir1 = moinfo.bvir; vir2 = moinfo.bvir; cc_occ1 = moinfo.cc_bocc; cc_occ2 = moinfo.cc_bocc; cc_vir1 = moinfo.cc_bvir; cc_vir2 = moinfo.cc_bvir; } else if(!strcmp(spin,"AB")) { occ1 = moinfo.aocc; occ2 = moinfo.bocc; vir1 = moinfo.avir; vir2 = moinfo.bvir; cc_occ1 = moinfo.cc_aocc; cc_occ2 = moinfo.cc_bocc; cc_vir1 = moinfo.cc_avir; cc_vir2 = moinfo.cc_bvir; } /* B (vv|vv) integrals */ if(params.make_abcd) { if(vir1[p] && vir1[q] && vir2[r] && vir2[s]) iwl_buf_wrt_val(BBuf1, cc_vir1[p], cc_vir1[q], cc_vir2[r], cc_vir2[s], value, 0, outfile, dirac); } /* F (ov|vv) and (vv|ov) integrals */ if(occ1[p] && vir1[q] && vir2[r] && vir2[s]) { iwl_buf_wrt_val(FBuf1, cc_occ1[p], cc_vir1[q], cc_vir2[r], cc_vir2[s], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf2, cc_vir2[r], cc_vir2[s], cc_occ1[p], cc_vir1[q], value, 0, outfile, dirac); } else if(occ1[q] && vir1[p] && vir2[r] && vir2[s]) { iwl_buf_wrt_val(FBuf1, cc_occ1[q], cc_vir1[p], cc_vir2[r], cc_vir2[s], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf2, cc_vir2[r], cc_vir2[s], cc_occ1[q], cc_vir1[p], value, 0, outfile, dirac); } else if(occ1[r] && vir1[s] && vir2[p] && vir2[q] && strcmp(spin,"AB")) { iwl_buf_wrt_val(FBuf1, cc_occ1[r], cc_vir1[s], cc_vir2[p], cc_vir2[q], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf2, cc_vir2[p], cc_vir2[q], cc_occ1[r], cc_vir1[s], value, 0, outfile, dirac); } else if(occ1[s] && vir1[r] && vir2[p] && vir2[q] && strcmp(spin,"AB")) { iwl_buf_wrt_val(FBuf1, cc_occ1[s], cc_vir1[r], cc_vir2[p], cc_vir2[q], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf2, cc_vir2[p], cc_vir2[q], cc_occ1[s], cc_vir1[r], value, 0, outfile, dirac); } if(!strcmp(spin,"AB")) { /* F (vv|vo) and (vv|ov) integrals */ if(vir1[p] && vir1[q] && vir2[r] && occ2[s]) { iwl_buf_wrt_val(FBuf3, cc_vir1[p], cc_vir1[q], cc_vir2[r], cc_occ2[s], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf4, cc_vir1[p], cc_vir1[q], cc_occ2[s], cc_vir2[r], value, 0, outfile, dirac); } else if(vir1[p] && vir1[q] && vir2[s] && occ2[r]) { iwl_buf_wrt_val(FBuf3, cc_vir1[p], cc_vir1[q], cc_vir2[s], cc_occ2[r], value, 0, outfile, dirac); iwl_buf_wrt_val(FBuf4, cc_vir1[p], cc_vir1[q], cc_occ2[r], cc_vir2[s], value, 0, outfile, dirac); } } /* C (oo|vv) integrals */ if(occ1[p] && occ1[q] && vir2[r] && vir2[s]) iwl_buf_wrt_val(CBuf1, cc_occ1[p], cc_occ1[q], cc_vir2[r], cc_vir2[s], value, 0, outfile, dirac); else if(occ1[r] && occ1[s] && vir2[p] && vir2[q] && strcmp(spin,"AB")) iwl_buf_wrt_val(CBuf1, cc_occ1[r], cc_occ1[s], cc_vir2[p], cc_vir2[q], value, 0, outfile, dirac); if(!strcmp(spin,"AB")) { /* C (vv|oo) integrals */ if(vir1[p] && vir1[q] && occ2[r] && occ2[s]) iwl_buf_wrt_val(CBuf2, cc_vir1[p], cc_vir1[q], cc_occ2[r], cc_occ2[s], value, 0, outfile, dirac); } /* D (ov|ov) integrals */ if(occ1[p] && vir1[q] && occ2[r] && vir2[s]) iwl_buf_wrt_val(DBuf1, cc_occ1[p], cc_vir1[q], cc_occ2[r], cc_vir2[s], value, 0, outfile, dirac); else if(occ1[q] && vir1[p] && occ2[r] && vir2[s]) iwl_buf_wrt_val(DBuf1, cc_occ1[q], cc_vir1[p], cc_occ2[r], cc_vir2[s], value, 0, outfile, dirac); else if(occ1[p] && vir1[q] && occ2[s] && vir2[r]) iwl_buf_wrt_val(DBuf1, cc_occ1[p], cc_vir1[q], cc_occ2[s], cc_vir2[r], value, 0, outfile, dirac); else if(occ1[q] && vir1[p] && occ2[s] && vir2[r]) iwl_buf_wrt_val(DBuf1, cc_occ1[q], cc_vir1[p], cc_occ2[s], cc_vir2[r], value, 0, outfile, dirac); /* E (vo|oo) integrals */ if(vir1[p] && occ1[q] && occ2[r] && occ2[s]) iwl_buf_wrt_val(EBuf1, cc_vir1[p], cc_occ1[q], cc_occ2[r], cc_occ2[s], value, 0, outfile, dirac); else if(vir1[q] && occ1[p] && occ2[r] && occ2[s]) iwl_buf_wrt_val(EBuf1, cc_vir1[q], cc_occ1[p], cc_occ2[r], cc_occ2[s], value, 0, outfile, dirac); else if(vir1[r] && occ1[s] && occ2[p] && occ2[q] && strcmp(spin,"AB")) iwl_buf_wrt_val(EBuf1, cc_vir1[r], cc_occ1[s], cc_occ2[p], cc_occ2[q], value, 0, outfile, dirac); else if(vir1[s] && occ1[r] && occ2[p] && occ2[q] && strcmp(spin,"AB")) iwl_buf_wrt_val(EBuf1, cc_vir1[s], cc_occ1[r], cc_occ2[p], cc_occ2[q], value, 0, outfile, dirac); if(!strcmp(spin,"AB")) { /* E (oo|ov) integrals */ if(occ1[p] && occ1[q] && occ2[r] && vir2[s]) iwl_buf_wrt_val(EBuf2, cc_occ1[p], cc_occ1[q], cc_occ2[r], cc_vir2[s], value, 0, outfile, dirac); else if(occ1[p] && occ1[q] && occ2[s] && vir2[r]) iwl_buf_wrt_val(EBuf2, cc_occ1[p], cc_occ1[q], cc_occ2[s], cc_vir2[r], value, 0, outfile, dirac); } /* A (oo|oo) integrals */ if(occ1[p] && occ1[q] && occ2[r] && occ2[s]) iwl_buf_wrt_val(ABuf1, cc_occ1[p], cc_occ1[q], cc_occ2[r], cc_occ2[s], value, 0, outfile, dirac); } }} // namespace psi::ccsort �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/cphf_B.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000013244�11112564564�014536� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void cphf_B(const char *cart) { int irrep, row, a, i, asym, isym, num_ai, info, *ipiv; double *vector, *vector2, polar; dpdbuf4 A; dpdfile2 L; psio_open(PSIF_MO_HESS, 1); dpd_buf4_init(&A, PSIF_MO_HESS, 0, 11, 11, 11, 11, 0, "B(AI,BJ)"); if (!strcmp(cart, "X")) { irrep = moinfo.irrep_x; /* sort L elements into a single vector for lineq solver */ dpd_file2_init(&L, CC_OEI, irrep, 0, 1, "L_X_IA"); dpd_file2_mat_init(&L); dpd_file2_mat_rd(&L); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; vector[row] = L.matrix[isym][i-A.params->qoff[isym]][a-A.params->poff[asym]]; } dpd_file2_mat_close(&L); dpd_file2_close(&L); /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_B: Error in C_DGESV. Info = %d. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* sort CPHF solution to DPD format */ dpd_file2_init(&L, CC_OEI, irrep, 1, 0, "CPHF Ub_X_AI"); dpd_file2_mat_init(&L); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; L.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&L); dpd_file2_close(&L); } if (!strcmp(cart, "Y")) { irrep = moinfo.irrep_y; /* sort L elements into a single vector for lineq solver */ dpd_file2_init(&L, CC_OEI, irrep, 0, 1, "L_Y_IA"); dpd_file2_mat_init(&L); dpd_file2_mat_rd(&L); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; vector[row] = L.matrix[isym][i-A.params->qoff[isym]][a-A.params->poff[asym]]; } dpd_file2_mat_close(&L); dpd_file2_close(&L); /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_B: Error in C_DGESV. Info = %d. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* sort CPHF solution to DPD format */ dpd_file2_init(&L, CC_OEI, irrep, 1, 0, "CPHF Ub_Y_AI"); dpd_file2_mat_init(&L); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; L.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&L); dpd_file2_close(&L); } if (!strcmp(cart, "Z")) { irrep = moinfo.irrep_z; /* sort L elements into a single vector for lineq solver */ dpd_file2_init(&L, CC_OEI, irrep, 0, 1, "L_Z_IA"); dpd_file2_mat_init(&L); dpd_file2_mat_rd(&L); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; vector[row] = L.matrix[isym][i-A.params->qoff[isym]][a-A.params->poff[asym]]; } dpd_file2_mat_close(&L); dpd_file2_close(&L); /* vector2 = init_array(num_ai); for(row=0; row < num_ai; row++) vector2[row] = vector[row]; */ /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_B: Error in C_DGESV. Info = %d. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* polar = 0.0; for(row=0; row < num_ai; row++) polar += vector2[row] * vector[row]; polar *= 4.0; fprintf(outfile, "\talpha_zz = %20.12f\n", polar); free(vector2); */ /* sort CPHF solution to DPD format */ dpd_file2_init(&L, CC_OEI, irrep, 1, 0, "CPHF Ub_Z_AI"); dpd_file2_mat_init(&L); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; L.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&L); dpd_file2_close(&L); } dpd_buf4_close(&A); if (!strcmp(cart,"Z")) psio_close(PSIF_MO_HESS, 0); else psio_close(PSIF_MO_HESS, 1); } }} // namespace psi::ccsort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/cphf_F.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000012626�11112564564�014545� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void cphf_F(const char *cart) { int irrep, row, a, i, asym, isym, num_ai, info, *ipiv; double *vector; dpdbuf4 A; dpdfile2 mu; psio_open(PSIF_MO_HESS, 1); dpd_buf4_init(&A, PSIF_MO_HESS, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); if (!strcmp(cart,"X")) { irrep = moinfo.irrep_x; /* sort Mu elements into a single vector for lineq solver */ dpd_file2_init(&mu, CC_OEI, irrep, 0, 1, "Mu_X_IA"); dpd_file2_mat_init(&mu); dpd_file2_mat_rd(&mu); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { i = A.params->roworb[irrep][row][0]; a = A.params->roworb[irrep][row][1]; isym = A.params->psym[i]; asym = A.params->qsym[a]; vector[row] = -mu.matrix[asym][a-A.params->qoff[asym]][i-A.params->poff[isym]]; } dpd_file2_mat_close(&mu); dpd_file2_close(&mu); /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_F: Error in C_DGESV. Info = %d. Cart = X. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* sort CPHF solution to DPD format */ dpd_file2_init(&mu, CC_OEI, irrep, 1, 0, "CPHF Uf_X_AI"); dpd_file2_mat_init(&mu); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; mu.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&mu); dpd_file2_close(&mu); } if (!strcmp(cart,"Y")) { irrep = moinfo.irrep_y; /* sort Mu elements into a single vector for lineq solver */ dpd_file2_init(&mu, CC_OEI, irrep, 0, 1, "Mu_Y_IA"); dpd_file2_mat_init(&mu); dpd_file2_mat_rd(&mu); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { i = A.params->roworb[irrep][row][0]; a = A.params->roworb[irrep][row][1]; isym = A.params->psym[i]; asym = A.params->qsym[a]; vector[row] = -mu.matrix[asym][a-A.params->qoff[asym]][i-A.params->poff[isym]]; } dpd_file2_mat_close(&mu); dpd_file2_close(&mu); /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_F: Error in C_DGESV. Info = %d. Cart = Y. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* sort CPHF solution to DPD format */ dpd_file2_init(&mu, CC_OEI, irrep, 1, 0, "CPHF Uf_Y_AI"); dpd_file2_mat_init(&mu); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; mu.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&mu); dpd_file2_close(&mu); } if (!strcmp(cart,"Z")) { irrep = moinfo.irrep_z; /* sort Mu elements into a single vector for lineq solver */ dpd_file2_init(&mu, CC_OEI, irrep, 0, 1, "Mu_Z_IA"); dpd_file2_mat_init(&mu); dpd_file2_mat_rd(&mu); num_ai = A.params->rowtot[irrep]; vector = init_array(num_ai); for(row=0; row < num_ai; row++) { i = A.params->roworb[irrep][row][0]; a = A.params->roworb[irrep][row][1]; isym = A.params->psym[i]; asym = A.params->qsym[a]; vector[row] = -mu.matrix[asym][a-A.params->qoff[asym]][i-A.params->poff[isym]]; } dpd_file2_mat_close(&mu); dpd_file2_close(&mu); /* grab current irrep of MO Hessian */ dpd_buf4_mat_irrep_init(&A, irrep); dpd_buf4_mat_irrep_rd(&A, irrep); /* solve CPHF equations */ ipiv = init_int_array(num_ai); info = C_DGESV(num_ai, 1, &(A.matrix[irrep][0][0]), num_ai, ipiv, vector, num_ai); if(info) { fprintf(outfile, "CCSORT: cphf_F: Error in C_DGESV. Info = %d. Cart = Z. Exiting.\n", info); exit(PSI_RETURN_FAILURE); } free(ipiv); dpd_buf4_mat_irrep_close(&A, irrep); /* sort CPHF solution to DPD format */ dpd_file2_init(&mu, CC_OEI, irrep, 1, 0, "CPHF Uf_Z_AI"); dpd_file2_mat_init(&mu); for(row=0; row < num_ai; row++) { a = A.params->roworb[irrep][row][0]; i = A.params->roworb[irrep][row][1]; asym = A.params->psym[a]; isym = A.params->qsym[i]; mu.matrix[asym][a-A.params->poff[asym]][i-A.params->qoff[isym]] = vector[row]; } dpd_file2_mat_wrt(&mu); dpd_file2_close(&mu); } dpd_buf4_close(&A); if (!strcmp(cart,"Z")) psio_close(PSIF_MO_HESS, 0); else psio_close(PSIF_MO_HESS, 1); } }} // namespace psi::ccsort ����������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/d_sort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000013533�11027011315�014632� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void d_sort(void) { dpdbuf4 D; if(params.ref == 2) { /*** UHF ***/ /*** AA ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 0, 5, 1, "D <IJ|AB>"); dpd_buf4_copy(&D, CC_DINTS, "D <IJ||AB> (I>J,A>B)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 0, 5, 1, "D <IJ|AB>"); dpd_buf4_copy(&D, CC_DINTS, "D <IJ||AB> (I>J,AB)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 5, 1, "D <IJ|AB>"); dpd_buf4_copy(&D, CC_DINTS, "D <IJ||AB> (IJ,A>B)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 1, "D <IJ|AB>"); dpd_buf4_copy(&D, CC_DINTS, "D <IJ||AB>"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_sort(&D, CC_DINTS, prqs, 20, 20, "D <IJ||AB> (IA,JB)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 20, 21, "D <IJ||AB> (IA,BJ)"); dpd_buf4_close(&D); /*** BB ***/ dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 10, 15, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (i>j,a>b)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 10, 15, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (i>j,ab)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 15, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (ij,a>b)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab>"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_sort(&D, CC_DINTS, prqs, 30, 30, "D <ij||ab> (ia,jb)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 30, 31, "D <ij||ab> (ia,bj)"); dpd_buf4_close(&D); /*** AB ***/ dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_buf4_sort(&D, CC_DINTS, qpsr, 23, 29, "D <iJ|aB>"); dpd_buf4_sort(&D, CC_DINTS, psrq, 24, 26, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_sort(&D, CC_DINTS, prqs, 20, 30, "D <Ij|Ab> (IA,jb)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)"); dpd_buf4_sort(&D, CC_DINTS, rspq, 30, 20, "D <Ij|Ab> (ia,JB)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 20, 31, "D <Ij|Ab> (IA,bj)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 30, 21, "D <Ij|Ab> (ia,BJ)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_buf4_sort(&D, CC_DINTS, psrq, 27, 25, "D <iJ|aB> (iB,aJ)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 24, 26, 24, 26, 0, "D <Ij|Ab> (Ib,Aj)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 24, 27, "D <Ij|Ab> (Ib,jA)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 27, 25, 27, 25, 0, "D <iJ|aB> (iB,aJ)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 27, 24, "D <iJ|aB> (iB,Ja)"); dpd_buf4_close(&D); } else { /*** RHF/ROHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 0, 5, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (i>j,a>b)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 0, 5, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (i>j,ab)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 5, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab> (ij,a>b)"); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 1, "D <ij|ab>"); dpd_buf4_copy(&D, CC_DINTS, "D <ij||ab>"); dpd_buf4_close(&D); /* <ij|ab> (ia,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_DINTS, prqs, 10, 10, "D <ij|ab> (ia,jb)"); dpd_buf4_close(&D); /* <ij|ab> (ai,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_sort(&D, CC_DINTS, qprs, 11, 10, "D <ij|ab> (ai,jb)"); dpd_buf4_close(&D); /* <ij|ab> (aj,ib) */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_DINTS, rqps, 11, 10, "D <ij|ab> (aj,ib)"); dpd_buf4_close(&D); /* <ij|ab> (bi,ja) */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_DINTS, spqr, 11, 10, "D <ij|ab> (bi,ja)"); dpd_buf4_close(&D); /* <ij||ab> (ia,jb) */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_sort(&D, CC_DINTS, prqs, 10, 10, "D <ij||ab> (ia,jb)"); dpd_buf4_close(&D); /* <ij|ab> (ib,ja) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_sort(&D, CC_DINTS, psrq, 10, 10, "D <ij|ab> (ib,ja)"); dpd_buf4_close(&D); /* <ij|ab> (ib,aj) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 10, 11, "D <ij|ab> (ib,aj)"); dpd_buf4_close(&D); /* <ij|ab> (ia,bj) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 10, 11, "D <ij|ab> (ia,bj)"); dpd_buf4_close(&D); /* <ij||ab> (ia,bj) */ dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij||ab> (ia,jb)"); dpd_buf4_sort(&D, CC_DINTS, pqsr, 10, 11, "D <ij||ab> (ia,bj)"); dpd_buf4_close(&D); /* <ib|aj> (ib,aj) */ /* just use <ij|ab> (ib,aj), dummy dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_sort(&D, CC_DINTS, psrq, 10, 11, "D <ib|aj> (ib,aj)"); dpd_buf4_close(&D); */ } } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/d_spinad.cc���������������������������������������������������������������������0000644�0001015�0000765�00000001451�10757640026�015135� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void d_spinad(void) { dpdbuf4 D, D1; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); dpd_buf4_scmcopy(&D, CC_DINTS, "D 2<ij|ab> - <ij|ba>", 2); dpd_buf4_sort_axpy(&D, CC_DINTS, pqsr, 0, 5, "D 2<ij|ab> - <ij|ba>", -1); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>"); dpd_buf4_sort(&D, CC_DINTS, prqs, 10, 10, "D 2<ij|ab> - <ij|ba> (ia,jb)"); dpd_buf4_close(&D); } } }} // namespace psi::ccsort �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/denom.cc������������������������������������������������������������������������0000644�0001015�0000765�00000025773�10757640026�014473� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void denom_rhf(void); void denom_uhf(void); void denom(void) { if(params.ref == 2) denom_uhf(); else denom_rhf(); } void denom_uhf(void) { int h, nirreps; int i, j, a, b, ij, ab, I, J, A, B, isym, jsym, asym, bsym; int *aoccpi, *avirtpi, *boccpi, *bvirtpi; int *aocc_off, *bocc_off, *avir_off, *bvir_off; double fii, fjj, faa, fbb; dpdfile2 dIA, fIJ, fij, fAB, fab; dpdfile4 dIJAB; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) { fii = fIJ.matrix[h][i][i]; for(a=0; a < avirtpi[h]; a++) { faa = fAB.matrix[h][a][a]; dIA.matrix[h][i][a] = 1.0/(fii - faa); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); dpd_file2_init(&dIA, CC_OEI, 0, 2, 3, "dia"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { for(i=0; i < boccpi[h]; i++) { fii = fij.matrix[h][i][i]; for(a=0; a < bvirtpi[h]; a++) { faa = fab.matrix[h][a][a]; dIA.matrix[h][i][a] = 1.0/(fii - faa); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); dpd_file4_init(&dIJAB, CC_DENOM, 0, 1, 6, "dIJAB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; I = i - aocc_off[isym]; J = j - aocc_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fIJ.matrix[jsym][J][J]; for(ab=0; ab < dIJAB.params->coltot[h]; ab++) { a = dIJAB.params->colorb[h][ab][0]; b = dIJAB.params->colorb[h][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; A = a - avir_off[asym]; B = b - avir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fAB.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = 1.0/(fii + fjj - faa - fbb); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); dpd_file4_init(&dIJAB, CC_DENOM, 0, 11, 16, "dijab"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; I = i - bocc_off[isym]; J = j - bocc_off[jsym]; fii = fij.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; for(ab=0; ab < dIJAB.params->coltot[h]; ab++) { a = dIJAB.params->colorb[h][ab][0]; b = dIJAB.params->colorb[h][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; A = a - bvir_off[asym]; B = b - bvir_off[bsym]; faa = fab.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = 1.0/(fii + fjj - faa - fbb); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); dpd_file4_init(&dIJAB, CC_DENOM, 0, 22, 28, "dIjAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; I = i - aocc_off[isym]; J = j - bocc_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; for(ab=0; ab < dIJAB.params->coltot[h]; ab++) { a = dIJAB.params->colorb[h][ab][0]; b = dIJAB.params->colorb[h][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; A = a - avir_off[asym]; B = b - bvir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = 1.0/(fii + fjj - faa - fbb); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); } void denom_rhf(void) { int nirreps; int h, i, j, a, b, ij, ab; int I, J, A, B; int isym, jsym, asym, bsym; int *occpi, *virtpi; int *occ_off, *vir_off; int *openpi; double fii, fjj, faa, fbb; dpdfile2 fIJ, fij, fAB, fab; dpdfile2 dIA, dia; dpdfile4 dIJAB, dijab, dIjAb; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; openpi = moinfo.openpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; /* Grab Fock matrices from disk */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); /* Alpha one-electron denominator */ dpd_file2_init(&dIA, CC_OEI, 0, 0, 1, "dIA"); dpd_file2_mat_init(&dIA); for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) { fii = fIJ.matrix[h][i][i]; for(a=0; a < (virtpi[h] - openpi[h]); a++) { faa = fAB.matrix[h][a][a]; dIA.matrix[h][i][a] = 1.0/(fii - faa); } } } dpd_file2_mat_wrt(&dIA); dpd_file2_mat_close(&dIA); dpd_file2_close(&dIA); /* Beta one-electron denominator */ dpd_file2_init(&dia, CC_OEI, 0, 0, 1, "dia"); dpd_file2_mat_init(&dia); for(h=0; h < nirreps; h++) { for(i=0; i < (occpi[h] - openpi[h]); i++) { fii = fij.matrix[h][i][i]; for(a=0; a < virtpi[h]; a++) { faa = fab.matrix[h][a][a]; dia.matrix[h][i][a] = 1.0/(fii - faa); } } } dpd_file2_mat_wrt(&dia); dpd_file2_mat_close(&dia); dpd_file2_close(&dia); /* Alpha-alpha two-electron denominator */ dpd_file4_init(&dIJAB, CC_DENOM, 0, 1, 6, "dIJAB"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIJAB, h); /* Loop over the rows */ for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) { i = dIJAB.params->roworb[h][ij][0]; j = dIJAB.params->roworb[h][ij][1]; isym = dIJAB.params->psym[i]; jsym = dIJAB.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fIJ.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dIJAB.params->coltot[h]; ab++) { a = dIJAB.params->colorb[h][ab][0]; b = dIJAB.params->colorb[h][ab][1]; asym = dIJAB.params->rsym[a]; bsym = dIJAB.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fAB.matrix[bsym][B][B]; dIJAB.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (B >= (virtpi[bsym] - openpi[bsym])) ? 0.0 : 1.0/(fii + fjj - faa - fbb)); } } dpd_file4_mat_irrep_wrt(&dIJAB, h); dpd_file4_mat_irrep_close(&dIJAB, h); } dpd_file4_close(&dIJAB); /* Beta-beta two-electron denominator */ dpd_file4_init(&dijab, CC_DENOM, 0, 1, 6, "dijab"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dijab, h); /* Loop over the rows */ for(ij=0; ij < dijab.params->rowtot[h]; ij++) { i = dijab.params->roworb[h][ij][0]; j = dijab.params->roworb[h][ij][1]; isym = dijab.params->psym[i]; jsym = dijab.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; fii = fij.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dijab.params->coltot[h]; ab++) { a = dijab.params->colorb[h][ab][0]; b = dijab.params->colorb[h][ab][1]; asym = dijab.params->rsym[a]; bsym = dijab.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; faa = fab.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; dijab.matrix[h][ij][ab] = ((I >= (occpi[isym] - openpi[isym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : 1.0/(fii + fjj - faa - fbb)); } } dpd_file4_mat_irrep_wrt(&dijab, h); dpd_file4_mat_irrep_close(&dijab, h); } dpd_file4_close(&dijab); /* Alpha-beta two-electron denominator */ dpd_file4_init(&dIjAb, CC_DENOM, 0, 0, 5, "dIjAb"); for(h=0; h < nirreps; h++) { dpd_file4_mat_irrep_init(&dIjAb, h); /* Loop over the rows */ for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) { i = dIjAb.params->roworb[h][ij][0]; j = dIjAb.params->roworb[h][ij][1]; isym = dIjAb.params->psym[i]; jsym = dIjAb.params->qsym[j]; /* Convert to relative orbital index */ I = i - occ_off[isym]; J = j - occ_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; /* Loop over the columns */ for(ab=0; ab < dIjAb.params->coltot[h]; ab++) { a = dIjAb.params->colorb[h][ab][0]; b = dIjAb.params->colorb[h][ab][1]; asym = dIjAb.params->rsym[a]; bsym = dIjAb.params->ssym[b]; /* Convert to relative orbital index */ A = a - vir_off[asym]; B = b - vir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; dIjAb.matrix[h][ij][ab] = ((A >= (virtpi[asym] - openpi[asym])) || (J >= (occpi[jsym] - openpi[jsym])) ? 0.0 : 1.0/(fii + fjj - faa - fbb)); } } dpd_file4_mat_irrep_wrt(&dIjAb, h); dpd_file4_mat_irrep_close(&dIjAb, h); } dpd_file4_close(&dIjAb); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); } }} // namespace psi::ccsort �����psi3/src/bin/ccsort/distribute.cc�������������������������������������������������������������������0000644�0001015�0000765�00000014370�11112564564�015534� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libiwl/iwl.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void classify(int p, int q, int r, int s, double value, struct iwlbuf *ABuf, struct iwlbuf *BBuf, struct iwlbuf *CBuf, struct iwlbuf *DBuf, struct iwlbuf *EBuf, struct iwlbuf *F1Buf, struct iwlbuf *F2Buf); void distribute_rhf(int filenum, int first_tmp, double tolerance, int keep_input) { struct iwlbuf InBuf; struct iwlbuf ABuf, BBuf, CBuf, DBuf, EBuf, F1Buf, F2Buf; int lastbuf; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; iwl_buf_init(&InBuf, filenum, tolerance, 1, 1); iwl_buf_init(&ABuf, first_tmp, tolerance, 0, 0); if(params.make_abcd) iwl_buf_init(&BBuf, first_tmp+1, tolerance, 0, 0); iwl_buf_init(&CBuf, first_tmp+2, tolerance, 0, 0); iwl_buf_init(&DBuf, first_tmp+3, tolerance, 0, 0); iwl_buf_init(&EBuf, first_tmp+4, tolerance, 0, 0); iwl_buf_init(&F1Buf, first_tmp+5, tolerance, 0, 0); if(params.make_aibc) iwl_buf_init(&F2Buf, first_tmp+6, tolerance, 0, 0); /* Run through the buffer that's already available */ lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify(p,q,r,s,value,&ABuf,&BBuf,&CBuf,&DBuf,&EBuf,&F1Buf, &F2Buf); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify(p,q,r,s,value,&ABuf,&BBuf,&CBuf,&DBuf,&EBuf,&F1Buf, &F2Buf); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, keep_input); iwl_buf_flush(&ABuf, 1); if(params.make_abcd) iwl_buf_flush(&BBuf, 1); iwl_buf_flush(&CBuf, 1); iwl_buf_flush(&DBuf, 1); iwl_buf_flush(&EBuf, 1); iwl_buf_flush(&F1Buf, 1); if(params.make_aibc) iwl_buf_flush(&F2Buf, 1); iwl_buf_close(&ABuf, 1); if(params.make_abcd) iwl_buf_close(&BBuf, 1); iwl_buf_close(&CBuf, 1); iwl_buf_close(&DBuf, 1); iwl_buf_close(&EBuf, 1); iwl_buf_close(&F1Buf, 1); if(params.make_aibc) iwl_buf_close(&F2Buf, 1); fflush(outfile); } void classify_uhf(int p, int q, int r, int s, double value, const char *spin, struct iwlbuf *ABuf1, struct iwlbuf *BBuf1, struct iwlbuf *CBuf1, struct iwlbuf *CBuf2, struct iwlbuf *DBuf1, struct iwlbuf *EBuf1, struct iwlbuf *EBuf2, struct iwlbuf *FBuf1, struct iwlbuf *FBuf2, struct iwlbuf *FBuf3, struct iwlbuf *FBuf4); void distribute_uhf(const char *spin, int filenum, int first_tmp, double tolerance, int keep_input) { struct iwlbuf InBuf; struct iwlbuf ABuf1, BBuf1, CBuf1, CBuf2, DBuf1; struct iwlbuf EBuf1, EBuf2, FBuf1, FBuf2, FBuf3, FBuf4; int lastbuf; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; iwl_buf_init(&InBuf, filenum, tolerance, 1, 1); iwl_buf_init(&ABuf1, first_tmp, tolerance, 0, 0); iwl_buf_init(&BBuf1, first_tmp+1, tolerance, 0, 0); iwl_buf_init(&CBuf1, first_tmp+2, tolerance, 0, 0); iwl_buf_init(&CBuf2, first_tmp+3, tolerance, 0, 0); iwl_buf_init(&DBuf1, first_tmp+4, tolerance, 0, 0); iwl_buf_init(&EBuf1, first_tmp+5, tolerance, 0, 0); iwl_buf_init(&EBuf2, first_tmp+6, tolerance, 0, 0); iwl_buf_init(&FBuf1, first_tmp+7, tolerance, 0, 0); iwl_buf_init(&FBuf2, first_tmp+8, tolerance, 0, 0); iwl_buf_init(&FBuf3, first_tmp+9, tolerance, 0, 0); iwl_buf_init(&FBuf4, first_tmp+10, tolerance, 0, 0); /* Run through the buffer that's already available */ lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify_uhf(p,q,r,s,value,spin,&ABuf1,&BBuf1,&CBuf1,&CBuf2, &DBuf1,&EBuf1,&EBuf2,&FBuf1,&FBuf2,&FBuf3,&FBuf4); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* Check integral into each class */ classify_uhf(p,q,r,s,value,spin,&ABuf1,&BBuf1,&CBuf1,&CBuf2, &DBuf1,&EBuf1,&EBuf2,&FBuf1,&FBuf2,&FBuf3,&FBuf4); /* fprintf(outfile, "(%d %d|%d %d) = %20.10lf\n", p, q, r, s, value); */ } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, keep_input); iwl_buf_flush(&ABuf1, 1); iwl_buf_flush(&BBuf1, 1); iwl_buf_flush(&CBuf1, 1); iwl_buf_flush(&CBuf2, 1); iwl_buf_flush(&DBuf1, 1); iwl_buf_flush(&EBuf1, 1); iwl_buf_flush(&EBuf2, 1); iwl_buf_flush(&FBuf1, 1); iwl_buf_flush(&FBuf2, 1); iwl_buf_flush(&FBuf3, 1); iwl_buf_flush(&FBuf4, 1); iwl_buf_close(&ABuf1, 1); iwl_buf_close(&BBuf1, 1); iwl_buf_close(&CBuf1, 1); iwl_buf_close(&CBuf2, 1); iwl_buf_close(&DBuf1, 1); iwl_buf_close(&EBuf1, 1); iwl_buf_close(&EBuf2, 1); iwl_buf_close(&FBuf1, 1); iwl_buf_close(&FBuf2, 1); iwl_buf_close(&FBuf3, 1); iwl_buf_close(&FBuf4, 1); fflush(outfile); } }} // namespace psi::ccsort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/domain_print.cc�����������������������������������������������������������������0000644�0001015�0000765�00000002373�10757640026�016043� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void domain_print(int nocc, int natom, int *domain_len, int **domain, double *fR) { int i, j, cnt, max; double domain_tot, domain_ave; max = 0; for(i=0; i < nocc; i++) if(domain_len[i] > max) max = domain_len[i]; fprintf(outfile, " Orbital Domain"); for(i=0; i < max-2; i++) fprintf(outfile, " "); /* formatting junk */ fprintf(outfile, " Completeness\n"); fprintf(outfile, " ------- ------"); for(i=0; i < max-2; i++) fprintf(outfile, "---"); /* more formatting junk */ fprintf(outfile, " ------------\n"); for(i=0; i < nocc; i++) { fprintf(outfile, " %2d ",i); for(j=0,cnt=0; j < natom; j++) if(domain[i][j]) { fprintf(outfile, " %2d", j); cnt++; } if(cnt < max) for(; cnt < max; cnt++) fprintf(outfile, " "); fprintf(outfile, " %7.5f\n", fR[i]); } domain_tot = 0; for(i=0; i < nocc; i++) domain_tot += domain_len[i]; domain_ave = domain_tot/nocc; fprintf(outfile, "\n The average domain length is %4.2lf\n", domain_ave); fflush(outfile); } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/e_sort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000006366�10757640026�014661� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void e_sort(void) { dpdbuf4 E; if(params.ref == 2) { /** UHF **/ /*** AA ***/ /* <ij|ka> */ dpd_buf4_init(&E, CC_EINTS, 0, 21, 0, 21, 0, 0, "E <AI|JK>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 0, 20, "E <IJ|KA>"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ka) */ dpd_buf4_init(&E, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 2, 20, "E <IJ||KA> (I>J,KA)"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ak) */ dpd_buf4_init(&E, CC_EINTS, 0, 2, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_sort(&E, CC_EINTS, pqsr, 2, 21, "E <IJ||KA> (I>J,AK)"); dpd_buf4_close(&E); /*** BB ***/ /* <ij|ka> */ dpd_buf4_init(&E, CC_EINTS, 0, 31, 10, 31, 10, 0, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 10, 30, "E <ij|ka>"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ka) */ dpd_buf4_init(&E, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 12, 30, "E <ij||ka> (i>j,ka)"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ak) */ dpd_buf4_init(&E, CC_EINTS, 0, 12, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC_EINTS, pqsr, 12, 31, "E <ij||ka> (i>j,ak)"); dpd_buf4_close(&E); /*** AB ***/ /* <iJ|kA> */ dpd_buf4_init(&E, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); dpd_buf4_sort(&E, CC_EINTS, qrsp, 23, 27, "E <iJ|kA>"); dpd_buf4_close(&E); /* <Ij|Ak> */ dpd_buf4_init(&E, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_sort(&E, CC_EINTS, qpsr, 22, 26, "E <Ij|Ak>"); dpd_buf4_close(&E); /* <iJ|aK> */ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC_EINTS, qpsr, 23, 25, "E <iJ|aK>"); dpd_buf4_close(&E); /* <Ia|Jk> */ dpd_buf4_init(&E, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_sort(&E, CC_EINTS, rspq, 24, 22, "E <Ia|Jk>"); dpd_buf4_close(&E); } else { /** RHF/ROHF **/ /* <ij|ka> */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 0, 10, "E <ij|ka>"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ka) */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, srqp, 2, 10, "E <ij||ka> (i>j,ka)"); dpd_buf4_close(&E); /* <ij|ka> (ij,ak) */ dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_sort(&E, CC_EINTS, pqsr, 0, 11, "E <ij|ka> (ij,ak)"); dpd_buf4_close(&E); /* <ij||ka> (i>j,ak) */ dpd_buf4_init(&E, CC_EINTS, 0, 2, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_sort(&E, CC_EINTS, pqsr, 2, 11, "E <ij||ka> (i>j,ak)"); dpd_buf4_close(&E); /* <ia|jk> */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, qpsr, 10, 0, "E <ia|jk>"); dpd_buf4_close(&E); /* <ij|ak> */ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_sort(&E, CC_EINTS, rspq, 0, 11, "E <ij|ak>"); dpd_buf4_close(&E); } } }} // namespace psi::ccsort ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/e_spinad.cc���������������������������������������������������������������������0000644�0001015�0000765�00000001505�10757640026�015136� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void e_spinad(void) { dpdbuf4 E, E1; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); dpd_buf4_scmcopy(&E, CC_EINTS, "E 2<ai|jk> - <ai|kj>", 2); dpd_buf4_sort(&E, CC_TMP0, pqsr, 11, 0, "E <ai|kj>"); dpd_buf4_close(&E); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>"); dpd_buf4_init(&E1, CC_TMP0, 0, 11, 0, 11, 0, 0, "E <ai|kj>"); dpd_buf4_axpy(&E1, &E, -1); dpd_buf4_close(&E1); dpd_buf4_close(&E); } } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/f_sort.cc�����������������������������������������������������������������������0000644�0001015�0000765�00000000743�10754663017�014655� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void f_sort(void) { dpdbuf4 F; if(params.ref == 2) { /*** UHF ***/ dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>"); dpd_buf4_sort_ooc(&F, CC_FINTS, spqr, 27, 29, "F <iA|bC>"); dpd_buf4_close(&F); } } }} // namespace psi::ccsort �����������������������������psi3/src/bin/ccsort/f_spinad.cc���������������������������������������������������������������������0000644�0001015�0000765�00000001511�10757640026�015134� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void f_spinad(void) { dpdbuf4 F, F1; if(params.ref == 0) { /*** RHF ***/ dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_scmcopy(&F, CC_FINTS, "F 2<ia|bc> - <ia|cb>", 2); dpd_buf4_sort_ooc(&F, CC_TMP0, pqsr, 10, 5, "F <ia|cb>"); dpd_buf4_close(&F); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F 2<ia|bc> - <ia|cb>"); dpd_buf4_init(&F1, CC_TMP0, 0, 10, 5, 10, 5, 0, "F <ia|cb>"); dpd_buf4_axpy(&F1, &F, -1); dpd_buf4_close(&F1); dpd_buf4_close(&F); } } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/file_build.cc�������������������������������������������������������������������0000644�0001015�0000765�00000015072�10757640026�015456� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <ccfiles.h> #include <psifiles.h> #include <libdpd/dpd.h> #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void idx_permute(dpdfile4 *File, struct iwlbuf *OutBuf, int **bucket_map, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile); int file_build(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep) { struct iwlbuf InBuf; int lastbuf; long int memoryb, memoryd, core_left, row_length; int h, nirreps, n, row, col, nump, numq, nbuckets; int **bucket_map, **bucket_offset, **bucket_rowdim, offset; int **bucket_size; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; struct iwlbuf *SortBuf; psio_address next; nirreps = File->params->nirreps; fndcor(&memoryb, infile, outfile); memoryd = memoryb/sizeof(double); /* It's annoying that I have to compute this here */ for(h=0,nump=0,numq=0; h < File->params->nirreps; h++) { nump += File->params->ppi[h]; numq += File->params->qpi[h]; } bucket_map = init_int_matrix(nump,numq); /* Room for one bucket to begin with */ bucket_offset = (int **) malloc(sizeof(int *)); bucket_offset[0] = init_int_array(nirreps); bucket_rowdim = (int **) malloc(sizeof(int *)); bucket_rowdim[0] = init_int_array(nirreps); bucket_size = (int **) malloc(sizeof(int *)); bucket_size[0] = init_int_array(nirreps); /* Figure out how many buckets we need and where each p,q goes */ for(h=0,core_left=memoryd,nbuckets=1; h < nirreps; h++) { row_length = (long int) File->params->coltot[h^(File->my_irrep)]; for(row=0; row < File->params->rowtot[h]; row++) { if((core_left - row_length) >= 0) { core_left -= row_length; bucket_rowdim[nbuckets-1][h]++; bucket_size[nbuckets-1][h] += row_length; } else { nbuckets++; core_left = memoryd - row_length; /* Make room for another bucket */ bucket_offset = (int **) realloc((void *) bucket_offset, nbuckets * sizeof(int *)); bucket_offset[nbuckets-1] = init_int_array(nirreps); bucket_offset[nbuckets-1][h] = row; bucket_rowdim = (int **) realloc((void *) bucket_rowdim, nbuckets * sizeof(int *)); bucket_rowdim[nbuckets-1] = init_int_array(nirreps); bucket_rowdim[nbuckets-1][h] = 1; bucket_size = (int **) realloc((void *) bucket_size, nbuckets * sizeof(int *)); bucket_size[nbuckets-1] = init_int_array(nirreps); bucket_size[nbuckets-1][h] = row_length; } p = File->params->roworb[h][row][0]; q = File->params->roworb[h][row][1]; bucket_map[p][q] = nbuckets - 1; } } fprintf(outfile, "\tSorting File: %s nbuckets = %d\n", File->label, nbuckets); /* Set up IWL buffers for sorting */ SortBuf = (struct iwlbuf *) malloc(nbuckets * sizeof(struct iwlbuf)); for(n=0; n < nbuckets; n++) iwl_buf_init(&SortBuf[n], inputfile+20+n, tolerance, 0, 0); iwl_buf_init(&InBuf, inputfile, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute(File,SortBuf,bucket_map,p,q,r,s, perm_pr,perm_qs,perm_prqs,value,outfile); } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute(File,SortBuf,bucket_map,p,q,r,s, perm_pr,perm_qs,perm_prqs,value,outfile); } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, keep); for(n=0; n < nbuckets; n++) { iwl_buf_flush(&SortBuf[n], 1); iwl_buf_close(&SortBuf[n], 1); } free_int_matrix(bucket_map); /* Now sort each buffer and send it to the final target */ next = PSIO_ZERO; for(n=0; n < nbuckets; n++) { iwl_buf_init(&SortBuf[n], inputfile+20+n, tolerance, 1, 0); lastbuf = 0; for(h=0; h < nirreps; h++) { File->matrix[h] = block_matrix(bucket_rowdim[n][h], File->params->coltot[h]); } while(!lastbuf) { iwl_buf_fetch(&SortBuf[n]); lastbuf = SortBuf[n].lastbuf; for(idx=4*SortBuf[n].idx; SortBuf[n].idx < SortBuf[n].inbuf; SortBuf[n].idx++) { p = (int) SortBuf[n].labels[idx++]; q = (int) SortBuf[n].labels[idx++]; r = (int) SortBuf[n].labels[idx++]; s = (int) SortBuf[n].labels[idx++]; value = (double) SortBuf[n].values[SortBuf[n].idx]; h = File->params->psym[p] ^ File->params->qsym[q]; row = File->params->rowidx[p][q]; col = File->params->colidx[r][s]; offset = bucket_offset[n][h]; if(row >= File->params->rowtot[h] || col >= File->params->coltot[h]) { fprintf(outfile, "CCSORT ERROR: DPD File Build Problem!\n"); fprintf(outfile, "CCSORT ERROR: %s\n", File->label); fprintf(outfile, "CCSORT ERROR: p = %d; q = %d; r = %d; s = %d; value = %20.14f\n", p, q, r, s, value); fprintf(outfile, "CCSORT ERROR: irrep = %d; row = %d; col = %d\n", h, row, col); fprintf(outfile, "CCSORT ERROR: rowtot = %d; coltot = %d\n", File->params->rowtot[h], File->params->coltot[h]); exit(PSI_RETURN_FAILURE); } File->matrix[h][row-offset][col] = value; } } for(h=0; h < nirreps;h++) { if(bucket_size[n][h]) psio_write(File->filenum, File->label, (char *) File->matrix[h][0], bucket_size[n][h]*((long int) sizeof(double)), next, &next); free_block(File->matrix[h]); } iwl_buf_close(&SortBuf[n], 0); } for(n=0; n < nbuckets; n++) { free(bucket_offset[n]); free(bucket_rowdim[n]); free(bucket_size[n]); } free(bucket_offset); free(bucket_rowdim); free(bucket_size); free(SortBuf); return 0; } }} // namespace psi::ccsort ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/file_build_multipass.cc���������������������������������������������������������0000644�0001015�0000765�00000011737�10757640026�017563� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <ccfiles.h> #include <psifiles.h> #include <libdpd/dpd.h> #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void idx_permute_multipass(dpdfile4 *File, int this_bucket, int **bucket_map, int **bucket_offset, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile); int file_build_multipass(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep) { struct iwlbuf InBuf; int lastbuf; long int memoryb, memoryd, core_left, row_length; int h, nirreps, n, row, nump, numq, nbuckets; int **bucket_map, **bucket_offset, **bucket_rowdim; int **bucket_size; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; struct iwlbuf *SortBuf; psio_address next; nirreps = File->params->nirreps; fndcor(&memoryb, infile, outfile); memoryd = memoryb/sizeof(double); /* It's annoying that I have to compute this here */ for(h=0,nump=0,numq=0; h < File->params->nirreps; h++) { nump += File->params->ppi[h]; numq += File->params->qpi[h]; } bucket_map = init_int_matrix(nump,numq); /* Room for one bucket to begin with */ bucket_offset = (int **) malloc(sizeof(int *)); bucket_offset[0] = init_int_array(nirreps); bucket_rowdim = (int **) malloc(sizeof(int *)); bucket_rowdim[0] = init_int_array(nirreps); bucket_size = (int **) malloc(sizeof(int *)); bucket_size[0] = init_int_array(nirreps); /* Figure out how many passes we need and where each p,q goes */ for(h=0,core_left=memoryd,nbuckets=1; h < nirreps; h++) { row_length = (long int) File->params->coltot[h^(File->my_irrep)]; for(row=0; row < File->params->rowtot[h]; row++) { if((core_left - row_length) >= 0) { core_left -= row_length; bucket_rowdim[nbuckets-1][h]++; bucket_size[nbuckets-1][h] += row_length; } else { nbuckets++; core_left = memoryd - row_length; /* Make room for another bucket */ bucket_offset = (int **) realloc((void *) bucket_offset, nbuckets * sizeof(int *)); bucket_offset[nbuckets-1] = init_int_array(nirreps); bucket_offset[nbuckets-1][h] = row; bucket_rowdim = (int **) realloc((void *) bucket_rowdim, nbuckets * sizeof(int *)); bucket_rowdim[nbuckets-1] = init_int_array(nirreps); bucket_rowdim[nbuckets-1][h] = 1; bucket_size = (int **) realloc((void *) bucket_size, nbuckets * sizeof(int *)); bucket_size[nbuckets-1] = init_int_array(nirreps); bucket_size[nbuckets-1][h] = row_length; } p = File->params->roworb[h][row][0]; q = File->params->roworb[h][row][1]; bucket_map[p][q] = nbuckets - 1; } } fprintf(outfile, "\tSorting File: %s nbuckets = %d\n", File->label, nbuckets); fflush(outfile); next = PSIO_ZERO; for(n=0; n < nbuckets; n++) { /* nbuckets = number of passes */ /* Prepare target matrix */ for(h=0; h < nirreps; h++) { File->matrix[h] = block_matrix(bucket_rowdim[n][h], File->params->coltot[h]); } iwl_buf_init(&InBuf, inputfile, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute_multipass(File,n,bucket_map,bucket_offset, p,q,r,s,perm_pr,perm_qs, perm_prqs,value,outfile); } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = (int) lblptr[idx++]; q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; idx_permute_multipass(File,n,bucket_map,bucket_offset, p,q,r,s,perm_pr,perm_qs, perm_prqs,value,outfile); } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, 1); /* close buffer for next pass */ for(h=0; h < nirreps;h++) { if(bucket_size[n][h]) psio_write(File->filenum, File->label, (char *) File->matrix[h][0], bucket_size[n][h]*((long int) sizeof(double)), next, &next); free_block(File->matrix[h]); } } /* end loop over buckets/passes */ /* Get rid of the input integral file */ psio_open(inputfile, PSIO_OPEN_OLD); psio_close(inputfile, keep); free_int_matrix(bucket_map); for(n=0; n < nbuckets; n++) { free(bucket_offset[n]); free(bucket_rowdim[n]); free(bucket_size[n]); } free(bucket_offset); free(bucket_rowdim); free(bucket_size); return 0; } }} // namespace psi::ccsort ���������������������������������psi3/src/bin/ccsort/file_build_presort.cc�����������������������������������������������������������0000644�0001015�0000765�00000011717�10757640026�017236� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <ccfiles.h> #include <psifiles.h> #include <libdpd/dpd.h> #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void idx_permute_presort(dpdfile4 *File, int this_bucket, int **bucket_map, int **bucket_offset, int p, int q, int r, int s, double value, FILE *outfile); int file_build_presort(dpdfile4 *File, int inputfile, double tolerance, int keep) { struct iwlbuf InBuf; int lastbuf; long int memoryb, memoryd, core_left, row_length; int h, nirreps, n, row, nump, numq, nbuckets; int **bucket_map, **bucket_offset, **bucket_rowdim; int **bucket_size; Value *valptr; Label *lblptr; int idx, p, q, r, s; double value; struct iwlbuf *SortBuf; psio_address next; nirreps = File->params->nirreps; fndcor(&memoryb, infile, outfile); memoryd = memoryb/sizeof(double); /* It's annoying that I have to compute this here */ for(h=0,nump=0,numq=0; h < File->params->nirreps; h++) { nump += File->params->ppi[h]; numq += File->params->qpi[h]; } bucket_map = init_int_matrix(nump,numq); /* Room for one bucket to begin with */ bucket_offset = (int **) malloc(sizeof(int *)); bucket_offset[0] = init_int_array(nirreps); bucket_rowdim = (int **) malloc(sizeof(int *)); bucket_rowdim[0] = init_int_array(nirreps); bucket_size = (int **) malloc(sizeof(int *)); bucket_size[0] = init_int_array(nirreps); /* Figure out how many passes we need and where each p,q goes */ for(h=0,core_left=memoryd,nbuckets=1; h < nirreps; h++) { row_length = (long int) File->params->coltot[h^(File->my_irrep)]; for(row=0; row < File->params->rowtot[h]; row++) { if((core_left - row_length) >= 0) { core_left -= row_length; bucket_rowdim[nbuckets-1][h]++; bucket_size[nbuckets-1][h] += row_length; } else { nbuckets++; core_left = memoryd - row_length; /* Make room for another bucket */ bucket_offset = (int **) realloc((void *) bucket_offset, nbuckets * sizeof(int *)); bucket_offset[nbuckets-1] = init_int_array(nirreps); bucket_offset[nbuckets-1][h] = row; bucket_rowdim = (int **) realloc((void *) bucket_rowdim, nbuckets * sizeof(int *)); bucket_rowdim[nbuckets-1] = init_int_array(nirreps); bucket_rowdim[nbuckets-1][h] = 1; bucket_size = (int **) realloc((void *) bucket_size, nbuckets * sizeof(int *)); bucket_size[nbuckets-1] = init_int_array(nirreps); bucket_size[nbuckets-1][h] = row_length; } p = File->params->roworb[h][row][0]; q = File->params->roworb[h][row][1]; bucket_map[p][q] = nbuckets - 1; } } fprintf(outfile, "\tSorting File: %s nbuckets = %d\n", File->label, nbuckets); fflush(outfile); next = PSIO_ZERO; for(n=0; n < nbuckets; n++) { /* nbuckets = number of passes */ /* Prepare target matrix */ for(h=0; h < nirreps; h++) { File->matrix[h] = block_matrix(bucket_rowdim[n][h], File->params->coltot[h]); } iwl_buf_init(&InBuf, inputfile, tolerance, 1, 1); lblptr = InBuf.labels; valptr = InBuf.values; lastbuf = InBuf.lastbuf; for(idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "%d %d %d %d %20.12f\n", p, q, r, s, value); */ idx_permute_presort(File,n,bucket_map,bucket_offset,p,q,r,s,value,outfile); } /* end loop through current buffer */ /* Now run through the rest of the buffers in the file */ while (!lastbuf) { iwl_buf_fetch(&InBuf); lastbuf = InBuf.lastbuf; for (idx=4*InBuf.idx; InBuf.idx < InBuf.inbuf; InBuf.idx++) { p = abs((int) lblptr[idx++]); q = (int) lblptr[idx++]; r = (int) lblptr[idx++]; s = (int) lblptr[idx++]; value = (double) valptr[InBuf.idx]; /* fprintf(outfile, "%d %d %d %d %20.12f\n", p, q, r, s, value); */ idx_permute_presort(File,n,bucket_map,bucket_offset,p,q,r,s,value,outfile); } /* end loop through current buffer */ } /* end loop over reading buffers */ iwl_buf_close(&InBuf, 1); /* close buffer for next pass */ for(h=0; h < nirreps;h++) { if(bucket_size[n][h]) psio_write(File->filenum, File->label, (char *) File->matrix[h][0], bucket_size[n][h]*((long int) sizeof(double)), next, &next); free_block(File->matrix[h]); } } /* end loop over buckets/passes */ /* Get rid of the input integral file */ psio_open(inputfile, PSIO_OPEN_OLD); psio_close(inputfile, keep); free_int_matrix(bucket_map); for(n=0; n < nbuckets; n++) { free(bucket_offset[n]); free(bucket_rowdim[n]); free(bucket_size[n]); } free(bucket_offset); free(bucket_rowdim); free(bucket_size); return 0; } }} // namespace psi::ccsort �������������������������������������������������psi3/src/bin/ccsort/fock.cc�������������������������������������������������������������������������0000644�0001015�0000765�00000055153�10757640026�014306� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libpsio/psio.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "Params.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* ** fock(): Build the alpha and beta Fock matrices from the ** one-electron integrals/frozen-core operator and active two-electron ** integrals on disk. ** ** TDC, 1996 ** Modified to include UHF references, TDC, June 2001. ** ** Notes: ** ** (1) This routine isn't absolutely necessary for RHF and UHF ** references, as one could simply read the Fock eigenvalues from ** PSIF_CHKPT and be happy with that. However, this code is useful as a ** partial check of the integral transformation and sorting routines. ** ** (2) An alternative but currently unused algorithm may be found in ** fock_build.c. */ void fock_rhf(void); void fock_uhf(void); void fock(void) { if(params.ref == 2) fock_uhf(); else fock_rhf(); } void fock_uhf(void) { int h, nirreps; int i, j, I, J, Gi, Gj, IM, JM, MI, MJ; int a, b, A, B, Ga, Gb, AM, BM, MA, MB; int m, M, Gm; int *aoccpi, *boccpi, *aocc_off, *bocc_off; int *avirtpi, *bvirtpi, *avir_off, *bvir_off; dpdfile2 fIJ, fij, fAB, fab, fIA, fia; dpdfile2 hIJ, hij, hAB, hab, hIA, hia; dpdbuf4 A_AA, A_BB, A_AB, C_AA, C_BB, C_AB, E_AA, E_BB, E_AB; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&hIJ, CC_OEI, 0, 0, 0, "h(I,J)"); dpd_file2_init(&hij, CC_OEI, 0, 2, 2, "h(i,j)"); dpd_file2_init(&hAB, CC_OEI, 0, 1, 1, "h(A,B)"); dpd_file2_init(&hab, CC_OEI, 0, 3, 3, "h(a,b)"); dpd_file2_init(&hIA, CC_OEI, 0, 0, 1, "h(I,A)"); dpd_file2_init(&hia, CC_OEI, 0, 2, 3, "h(i,a)"); dpd_file2_mat_init(&hIJ); dpd_file2_mat_init(&hij); dpd_file2_mat_init(&hAB); dpd_file2_mat_init(&hab); dpd_file2_mat_init(&hIA); dpd_file2_mat_init(&hia); dpd_file2_mat_rd(&hIJ); dpd_file2_mat_rd(&hij); dpd_file2_mat_rd(&hAB); dpd_file2_mat_rd(&hab); dpd_file2_mat_rd(&hIA); dpd_file2_mat_rd(&hia); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) for(j=0; j < aoccpi[h]; j++) fIJ.matrix[h][i][j] = hIJ.matrix[h][i][j]; for(i=0; i < boccpi[h]; i++) for(j=0; j < boccpi[h]; j++) fij.matrix[h][i][j] = hij.matrix[h][i][j]; } dpd_buf4_init(&A_AA, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <IJ|KL>"); dpd_buf4_init(&A_AB, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&A_AA, h); dpd_buf4_mat_irrep_rd(&A_AA, h); dpd_buf4_mat_irrep_init(&A_AB, h); dpd_buf4_mat_irrep_rd(&A_AB, h); for(Gi=0; Gi < nirreps; Gi++) { Gj = Gi; Gm = Gi^h; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; IM = A_AA.params->rowidx[I][M]; JM = A_AA.params->colidx[J][M]; fIJ.matrix[Gi][i][j] += A_AA.matrix[h][IM][JM]; } for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; IM = A_AB.params->rowidx[I][M]; JM = A_AB.params->colidx[J][M]; fIJ.matrix[Gi][i][j] += A_AB.matrix[h][IM][JM]; } } } } dpd_buf4_mat_irrep_close(&A_AA, h); dpd_buf4_mat_irrep_close(&A_AB, h); } dpd_buf4_close(&A_AA); dpd_buf4_close(&A_AB); dpd_buf4_init(&A_BB, CC_AINTS, 0, 10, 10, 10, 10, 1, "A <ij|kl>"); dpd_buf4_init(&A_AB, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&A_BB, h); dpd_buf4_mat_irrep_rd(&A_BB, h); dpd_buf4_mat_irrep_init(&A_AB, h); dpd_buf4_mat_irrep_rd(&A_AB, h); for(Gi=0; Gi < nirreps; Gi++) { Gj = Gi; Gm = Gi^h; for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; IM = A_BB.params->rowidx[I][M]; JM = A_BB.params->colidx[J][M]; fij.matrix[Gi][i][j] += A_BB.matrix[h][IM][JM]; } for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MI = A_AB.params->rowidx[M][I]; MJ = A_AB.params->colidx[M][J]; fij.matrix[Gi][i][j] += A_AB.matrix[h][MI][MJ]; } } } } dpd_buf4_mat_irrep_close(&A_BB, h); dpd_buf4_mat_irrep_close(&A_AB, h); } dpd_buf4_close(&A_BB); dpd_buf4_close(&A_AB); dpd_file2_mat_wrt(&fIJ); dpd_file2_mat_wrt(&fij); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); for(h=0; h < nirreps; h++) { for(a=0; a < avirtpi[h]; a++) for(b=0; b < avirtpi[h]; b++) fAB.matrix[h][a][b] = hAB.matrix[h][a][b]; for(a=0; a < bvirtpi[h]; a++) for(b=0; b < bvirtpi[h]; b++) fab.matrix[h][a][b] = hab.matrix[h][a][b]; } dpd_buf4_init(&C_AA, CC_CINTS, 0, 20, 20, 20, 20, 0, "C <IA||JB>"); dpd_buf4_init(&C_AB, CC_CINTS, 0, 26, 26, 26, 26, 0, "C <Ai|Bj>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&C_AA, h); dpd_buf4_mat_irrep_rd(&C_AA, h); dpd_buf4_mat_irrep_init(&C_AB, h); dpd_buf4_mat_irrep_rd(&C_AB, h); for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gm = Ga^h; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(b=0; b < avirtpi[Gb]; b++) { B = avir_off[Gb] + b; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MA = C_AA.params->rowidx[M][A]; MB = C_AA.params->colidx[M][B]; fAB.matrix[Ga][a][b] += C_AA.matrix[h][MA][MB]; } for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; AM = C_AB.params->rowidx[A][M]; BM = C_AB.params->colidx[B][M]; fAB.matrix[Ga][a][b] += C_AB.matrix[h][AM][BM]; } } } } dpd_buf4_mat_irrep_close(&C_AA, h); dpd_buf4_mat_irrep_close(&C_AB, h); } dpd_buf4_close(&C_AA); dpd_buf4_close(&C_AB); dpd_buf4_init(&C_BB, CC_CINTS, 0, 30, 30, 30, 30, 0, "C <ia||jb>"); dpd_buf4_init(&C_AB, CC_CINTS, 0, 24, 24, 24, 24, 0, "C <Ia|Jb>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&C_BB, h); dpd_buf4_mat_irrep_rd(&C_BB, h); dpd_buf4_mat_irrep_init(&C_AB, h); dpd_buf4_mat_irrep_rd(&C_AB, h); for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gm = Ga^h; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(b=0; b < bvirtpi[Gb]; b++) { B = bvir_off[Gb] + b; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; MA = C_BB.params->rowidx[M][A]; MB = C_BB.params->colidx[M][B]; fab.matrix[Ga][a][b] += C_BB.matrix[h][MA][MB]; } for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MA = C_AB.params->rowidx[M][A]; MB = C_AB.params->colidx[M][B]; fab.matrix[Ga][a][b] += C_AB.matrix[h][MA][MB]; } } } } dpd_buf4_mat_irrep_close(&C_BB, h); dpd_buf4_mat_irrep_close(&C_AB, h); } dpd_buf4_close(&C_BB); dpd_buf4_close(&C_AB); dpd_file2_mat_wrt(&fAB); dpd_file2_mat_wrt(&fab); dpd_file2_close(&fAB); dpd_file2_close(&fab); /* Prepare the alpha and beta occ-vir Fock matrix files */ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); /* One-electron (frozen-core) contributions */ for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) for(a=0; a < avirtpi[h]; a++) fIA.matrix[h][i][a] = hIA.matrix[h][i][a]; for(i=0; i < boccpi[h]; i++) for(a=0; a < bvirtpi[h]; a++) fia.matrix[h][i][a] = hia.matrix[h][i][a]; } /* Two-electron contributions */ /* Prepare the E integral buffers */ dpd_buf4_init(&E_AA, CC_EINTS, 0, 21, 0, 21, 0, 1, "E <AI|JK>"); dpd_buf4_init(&E_AB, CC_EINTS, 0, 26, 22, 26, 22, 0, "E <Ai|Jk>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&E_AA, h); dpd_buf4_mat_irrep_init(&E_AB, h); dpd_buf4_mat_irrep_rd(&E_AA, h); dpd_buf4_mat_irrep_rd(&E_AB, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Ga = Gi; Gm = h^Gi; /* Loop over orbitals of the target */ for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; AM = E_AA.params->rowidx[A][M]; IM = E_AA.params->colidx[I][M]; fIA.matrix[Gi][i][a] += E_AA.matrix[h][AM][IM]; } } } /* Loop over orbitals of the target */ for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; AM = E_AB.params->rowidx[A][M]; IM = E_AB.params->colidx[I][M]; fIA.matrix[Gi][i][a] += E_AB.matrix[h][AM][IM]; } } } } dpd_buf4_mat_irrep_close(&E_AA, h); dpd_buf4_mat_irrep_close(&E_AB, h); } dpd_buf4_close(&E_AA); dpd_buf4_close(&E_AB); dpd_buf4_init(&E_BB, CC_EINTS, 0, 31, 10, 31, 10, 1, "E <ai|jk>"); dpd_buf4_init(&E_AB, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&E_BB, h); dpd_buf4_mat_irrep_init(&E_AB, h); dpd_buf4_mat_irrep_rd(&E_BB, h); dpd_buf4_mat_irrep_rd(&E_AB, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Ga = Gi; Gm = h^Gi; /* Loop over orbitals of the target */ for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < boccpi[Gm]; m++) { M = bocc_off[Gm] + m; AM = E_BB.params->rowidx[A][M]; IM = E_BB.params->colidx[I][M]; fia.matrix[Gi][i][a] += E_BB.matrix[h][AM][IM]; } } } /* Loop over orbitals of the target */ for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(m=0; m < aoccpi[Gm]; m++) { M = aocc_off[Gm] + m; MI = E_AB.params->rowidx[M][I]; MA = E_AB.params->colidx[M][A]; fia.matrix[Gi][i][a] += E_AB.matrix[h][MI][MA]; } } } } dpd_buf4_mat_irrep_close(&E_BB, h); dpd_buf4_mat_irrep_close(&E_AB, h); } /* Close the E integral buffers */ dpd_buf4_close(&E_BB); dpd_buf4_close(&E_AB); /* Close the alpha and beta occ-vir Fock matrix files */ dpd_file2_mat_wrt(&fIA); dpd_file2_mat_wrt(&fia); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fIA); dpd_file2_close(&fia); dpd_file2_mat_close(&hIJ); dpd_file2_mat_close(&hij); dpd_file2_mat_close(&hAB); dpd_file2_mat_close(&hab); dpd_file2_mat_close(&hIA); dpd_file2_mat_close(&hia); dpd_file2_close(&hIJ); dpd_file2_close(&hij); dpd_file2_close(&hAB); dpd_file2_close(&hab); dpd_file2_close(&hIA); dpd_file2_close(&hia); } void fock_rhf(void) { int h, Gi, Gj, Ga, Gb, Gm; int i,j,a,b,m; int I, J, A, B, M; int IM, JM, MA, MB, AM; int nirreps; int *occpi, *virtpi; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi; dpdfile2 fIJ, fij, fAB, fab, fIA, fia, Hoo, Hvv, Hov; dpdbuf4 AInts_anti, AInts, CInts, CInts_anti, EInts_anti, EInts; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; dpd_file2_init(&Hoo, CC_OEI, 0, 0, 0, "h(i,j)"); dpd_file2_init(&Hvv, CC_OEI, 0, 1, 1, "h(a,b)"); dpd_file2_init(&Hov, CC_OEI, 0, 0, 1, "h(i,a)"); dpd_file2_mat_init(&Hoo); dpd_file2_mat_init(&Hvv); dpd_file2_mat_init(&Hov); dpd_file2_mat_rd(&Hoo); dpd_file2_mat_rd(&Hvv); dpd_file2_mat_rd(&Hov); /* Prepare the alpha and beta occ-occ Fock matrix files */ dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); /* One-electron (frozen-core) contributions */ for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(j=0; j < occpi[h]; j++) fIJ.matrix[h][i][j] = Hoo.matrix[h][i][j]; for(i=0; i < (occpi[h]-openpi[h]); i++) for(j=0; j < (occpi[h]-openpi[h]); j++) fij.matrix[h][i][j] = Hoo.matrix[h][i][j]; } /* Two-electron contributions */ /* Prepare the A integral buffers */ dpd_buf4_init(&AInts_anti, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&AInts, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&AInts_anti, h); dpd_buf4_mat_irrep_rd(&AInts_anti, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Gj=Gi; Gm=h^Gi; /* Loop over the orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; IM = AInts_anti.params->rowidx[I][M]; JM = AInts_anti.params->colidx[J][M]; fIJ.matrix[Gi][i][j] += AInts_anti.matrix[h][IM][JM]; } } } /* Loop over the orbitals of the target */ for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) { J = occ_off[Gj] + j; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; IM = AInts_anti.params->rowidx[I][M]; JM = AInts_anti.params->colidx[J][M]; fij.matrix[Gi][i][j] += AInts_anti.matrix[h][IM][JM]; } } } } dpd_buf4_mat_irrep_close(&AInts_anti, h); dpd_buf4_mat_irrep_init(&AInts, h); dpd_buf4_mat_irrep_rd(&AInts, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Gj=Gi; Gm=h^Gi; /* Loop over the orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; IM = AInts.params->rowidx[I][M]; JM = AInts.params->colidx[J][M]; fIJ.matrix[Gi][i][j] += AInts.matrix[h][IM][JM]; } } } /* Loop over the orbitals of the target */ for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) { J = occ_off[Gj] + j; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; IM = AInts.params->rowidx[I][M]; JM = AInts.params->colidx[J][M]; fij.matrix[Gi][i][j] += AInts.matrix[h][IM][JM]; } } } } dpd_buf4_mat_irrep_close(&AInts, h); } /* Close the A Integral buffers */ dpd_buf4_close(&AInts_anti); dpd_buf4_close(&AInts); /* Close the alpha and beta occ-occ Fock matrix files */ dpd_file2_mat_wrt(&fIJ); dpd_file2_mat_wrt(&fij); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_close(&fIJ); dpd_file2_close(&fij); /* Prepare the alpha and beta vir-vir Fock matrix files */ dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); /* One-electron (frozen-core) contributions */ for(h=0; h < nirreps; h++) { for(a=0; a < (virtpi[h] - openpi[h]); a++) for(b=0; b < (virtpi[h] - openpi[h]); b++) fAB.matrix[h][a][b] = Hvv.matrix[h][a][b]; for(a=0; a < virtpi[h]; a++) for(b=0; b < virtpi[h]; b++) fab.matrix[h][a][b] = Hvv.matrix[h][a][b]; } /* Two-electron contributions */ /* Prepare the C integral buffers */ dpd_buf4_init(&CInts_anti, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>"); dpd_buf4_init(&CInts, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&CInts_anti, h); dpd_buf4_mat_irrep_rd(&CInts_anti, h); /* Loop over irreps of the target */ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gm = h^Ga; /* Loop over orbitals of the target */ for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) { B = vir_off[Gb] + b; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MA = CInts_anti.params->rowidx[M][A]; MB = CInts_anti.params->colidx[M][B]; fAB.matrix[Ga][a][b] += CInts_anti.matrix[h][MA][MB]; } } } /* Loop over orbitals of the target */ for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MA = CInts_anti.params->rowidx[M][A]; MB = CInts_anti.params->colidx[M][B]; fab.matrix[Ga][a][b] += CInts_anti.matrix[h][MA][MB]; } } } } dpd_buf4_mat_irrep_close(&CInts_anti, h); dpd_buf4_mat_irrep_init(&CInts, h); dpd_buf4_mat_irrep_rd(&CInts, h); /* Loop over irreps of the target */ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gm = h^Ga; /* Loop over orbitals of the target */ for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) { B = vir_off[Gb] + b; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; MA = CInts.params->rowidx[M][A]; MB = CInts.params->colidx[M][B]; fAB.matrix[Ga][a][b] += CInts.matrix[h][MA][MB]; } } } /* Loop over orbitals of the target */ for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; MA = CInts.params->rowidx[M][A]; MB = CInts.params->colidx[M][B]; fab.matrix[Ga][a][b] += CInts.matrix[h][MA][MB]; } } } } dpd_buf4_mat_irrep_close(&CInts, h); } /* Close the C integral buffers */ dpd_buf4_close(&CInts_anti); dpd_buf4_close(&CInts); /* Close the alpha and beta vir-vir Fock matrix files */ dpd_file2_mat_wrt(&fAB); dpd_file2_mat_wrt(&fab); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fAB); dpd_file2_close(&fab); /* Prepare the alpha and beta occ-vir Fock matrix files */ dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 0, 1, "fia"); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); /* One-electron (frozen-core) contributions */ for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) for(a=0; a < (virtpi[h] - openpi[h]); a++) fIA.matrix[h][i][a] = Hov.matrix[h][i][a]; for(i=0; i < (occpi[h] - openpi[h]); i++) for(a=0; a < virtpi[h]; a++) fia.matrix[h][i][a] = Hov.matrix[h][i][a]; } /* Two-electron contributions */ /* Prepare the E integral buffers */ dpd_buf4_init(&EInts_anti, CC_EINTS, 0, 11, 0, 11, 0, 1, "E <ai|jk>"); dpd_buf4_init(&EInts, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&EInts_anti, h); dpd_buf4_mat_irrep_rd(&EInts_anti, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Ga = Gi; Gm = h^Gi; /* Loop over orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; AM = EInts_anti.params->rowidx[A][M]; IM = EInts_anti.params->colidx[I][M]; fIA.matrix[Gi][i][a] += EInts_anti.matrix[h][AM][IM]; } } } /* Loop over orbitals of the target */ for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; AM = EInts_anti.params->rowidx[A][M]; IM = EInts_anti.params->colidx[I][M]; fia.matrix[Gi][i][a] += EInts_anti.matrix[h][AM][IM]; } } } } dpd_buf4_mat_irrep_close(&EInts_anti, h); dpd_buf4_mat_irrep_init(&EInts, h); dpd_buf4_mat_irrep_rd(&EInts, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Ga = Gi; Gm = h^Gi; /* Loop over orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) { A = vir_off[Ga] + a; for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) { M = occ_off[Gm] + m; AM = EInts.params->rowidx[A][M]; IM = EInts.params->colidx[I][M]; fIA.matrix[Gi][i][a] += EInts.matrix[h][AM][IM]; } } } /* Loop over orbitals of the target */ for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; AM = EInts.params->rowidx[A][M]; IM = EInts.params->colidx[I][M]; fia.matrix[Gi][i][a] += EInts.matrix[h][AM][IM]; } } } } dpd_buf4_mat_irrep_close(&EInts, h); } /* Close the E integral buffers */ dpd_buf4_close(&EInts_anti); dpd_buf4_close(&EInts); /* Close the alpha and beta occ-vir Fock matrix files */ dpd_file2_mat_wrt(&fIA); dpd_file2_mat_wrt(&fia); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fIA); dpd_file2_close(&fia); dpd_file2_mat_close(&Hoo); dpd_file2_mat_close(&Hvv); dpd_file2_mat_close(&Hov); dpd_file2_close(&Hoo); dpd_file2_close(&Hvv); dpd_file2_close(&Hov); } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/get_moinfo.cc�������������������������������������������������������������������0000644�0001015�0000765�00000127772�10757640026�015521� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* get_moinfo(): Routine to obtain basic orbital information from ** chkpt and compute the associated lookup arrays. ** ** Several loookup arrays are written to CC_INFO at the end of this ** routine for use in other CC programs. I do this for two reasons: ** (1) I don't want to have to use redundant code for re-computing the ** arrays and (2) I don't want to allow certain types of user input ** (e.g. orbital occupations) to change between CC programs. ** ** T. Daniel Crawford, October 1996 ** Modified by TDC March, 1999 */ void get_moinfo(void) { int i, j, h, count, ocount, vcount; int active_count, all_count; int active_a_count, active_b_count, all_a_count, all_b_count; int fc_offset, offset, cl_offset, op_offset, vr_offset, fv_offset; int nfzc, nuocc, nopen, nclsd; double escf; double ***evects, ***scf_vector; double ***evects_A, ***scf_vector_A; double ***evects_B, ***scf_vector_B; double ***C; int *pitz2qt, *qt2pitz, J, qt_j, pitz_j, pitz_J, *pitz_offset; int *pitz2qt_A, *qt2pitz_A, *pitz2qt_B, *qt2pitz_B; psio_address next; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.nao = chkpt_rd_nao(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); escf = chkpt_rd_escf(); moinfo.sopi = chkpt_rd_sopi(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.usotao = chkpt_rd_usotao(); if(params.ref == 0) moinfo.scf = chkpt_rd_scf(); chkpt_close(); /* Dump the reference wave function ID to CC_INFO */ psio_write_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); moinfo.frdocc = get_frzcpi(); moinfo.fruocc = get_frzvpi(); moinfo.nfzc = moinfo.nfzv = 0; for(i=0; i < moinfo.nirreps; i++) { moinfo.nfzc += moinfo.frdocc[i]; moinfo.nfzv += moinfo.fruocc[i]; } if(moinfo.nfzc) { chkpt_init(PSIO_OPEN_OLD); moinfo.efzc = chkpt_rd_efzc(); chkpt_close(); } else moinfo.efzc = 0.0; /* Calculation consistency check */ if(moinfo.nfzc && (fabs(moinfo.efzc) < 1e-7)) { fprintf(outfile, "\tCCSORT Error: Orbitals are frozen in input,\n"); fprintf(outfile, "\tbut frozen core energy is small!\n"); fprintf(outfile, "\tCalculation will be aborted...\n"); fflush(outfile); exit(PSI_RETURN_FAILURE); } else if(!moinfo.nfzc && fabs(moinfo.efzc)) { fprintf(outfile, "\tCCSORT Warning: No orbitals are frozen,\n"); fprintf(outfile, "\tbut the frozen-core energy in chkpt is non-zero.\n"); fprintf(outfile, "\tCalculation will continue with zero efzc...\n"); fflush(outfile); moinfo.efzc = 0.0; } /* Dump the frozen orbital arrays to CC_INFO */ psio_write_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*moinfo.nirreps); /* Get the Pitzer->QT reordering array and compute its inverse */ if(params.ref == 2) { /* UHF */ moinfo.pitz2qt_A = init_int_array(moinfo.nmo); moinfo.qt2pitz_A = init_int_array(moinfo.nmo); moinfo.pitz2qt_B = init_int_array(moinfo.nmo); moinfo.qt2pitz_B = init_int_array(moinfo.nmo); reorder_qt_uhf(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitz2qt_A, moinfo.pitz2qt_B, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) { moinfo.qt2pitz_A[moinfo.pitz2qt_A[i]] = i; moinfo.qt2pitz_B[moinfo.pitz2qt_B[i]] = i; } } else { /* RHF and ROHF */ moinfo.pitz2qt = init_int_array(moinfo.nmo); moinfo.qt2pitz = init_int_array(moinfo.nmo); reorder_qt(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitz2qt, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) moinfo.qt2pitz[moinfo.pitz2qt[i]] = i; } /* Compute spatial-orbital reordering arrays */ moinfo.pitzer2qt = init_int_array(moinfo.nmo); moinfo.qt2pitzer = init_int_array(moinfo.nmo); reorder_qt(moinfo.clsdpi, moinfo.openpi, moinfo.frdocc, moinfo.fruocc, moinfo.pitzer2qt, moinfo.orbspi, moinfo.nirreps); for(i=0; i < moinfo.nmo; i++) { j = moinfo.pitzer2qt[i]; moinfo.qt2pitzer[j] = i; } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < moinfo.nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < moinfo.nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; nclsd = nopen = nuocc = 0; for(i=0; i < moinfo.nirreps; i++) { nclsd += moinfo.clsdpi[i]; nopen += moinfo.openpi[i]; nuocc += moinfo.uoccpi[i]; } nfzc = moinfo.nfzc; /* Number of non-frozen orbitals */ moinfo.nactive = nclsd + nopen + nuocc; psio_write_entry(CC_INFO, "No. of Active Orbitals", (char *) &(moinfo.nactive), sizeof(int)); /* Number of occupied and virtual orbirals per irrep including open-shells */ if(params.ref == 2) { moinfo.aoccpi = init_int_array(moinfo.nirreps); moinfo.boccpi = init_int_array(moinfo.nirreps); moinfo.avirtpi = init_int_array(moinfo.nirreps); moinfo.bvirtpi = init_int_array(moinfo.nirreps); moinfo.all_aoccpi = init_int_array(moinfo.nirreps); moinfo.all_boccpi = init_int_array(moinfo.nirreps); moinfo.all_avirtpi = init_int_array(moinfo.nirreps); moinfo.all_bvirtpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) { moinfo.aoccpi[h] = moinfo.clsdpi[h] + moinfo.openpi[h]; moinfo.boccpi[h] = moinfo.clsdpi[h]; moinfo.avirtpi[h] = moinfo.uoccpi[h]; moinfo.bvirtpi[h] = moinfo.uoccpi[h] + moinfo.openpi[h]; moinfo.all_aoccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h] + moinfo.openpi[h]; moinfo.all_boccpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h]; moinfo.all_avirtpi[h] = moinfo.fruocc[h] + moinfo.uoccpi[h]; moinfo.all_bvirtpi[h] = moinfo.fruocc[h] + moinfo.uoccpi[h] + moinfo.openpi[h]; } /* Dump occpi and virtpi arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Alpha Occ Orbs Per Irrep", (char *) moinfo.all_aoccpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Beta Occ Orbs Per Irrep", (char *) moinfo.all_boccpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Alpha Virt Orbs Per Irrep", (char *) moinfo.all_avirtpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Beta Virt Orbs Per Irrep", (char *) moinfo.all_bvirtpi, sizeof(int)*moinfo.nirreps); } else { moinfo.occpi = init_int_array(moinfo.nirreps); moinfo.virtpi = init_int_array(moinfo.nirreps); moinfo.all_occpi = init_int_array(moinfo.nirreps); moinfo.all_virtpi = init_int_array(moinfo.nirreps); for(h=0; h < moinfo.nirreps; h++) { moinfo.occpi[h] = moinfo.clsdpi[h] + moinfo.openpi[h]; moinfo.virtpi[h] = moinfo.uoccpi[h] + moinfo.openpi[h]; moinfo.all_occpi[h] = moinfo.frdocc[h] + moinfo.clsdpi[h] + moinfo.openpi[h]; moinfo.all_virtpi[h] = moinfo.fruocc[h] + moinfo.uoccpi[h] + moinfo.openpi[h]; } /* Dump occpi and virtpi arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Occ Orbs Per Irrep", (char *) moinfo.all_occpi, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Virt Orbs Per Irrep", (char *) moinfo.all_virtpi, sizeof(int)*moinfo.nirreps); } /* Build the boolean arrays for the orbital classification routines. The occ and vir arrays identify active occupied or virtual orbitals (including open shells). The socc array identifies only the singly occupied orbitals. The all_occ and all_vir arrays identify any occupied or virtual orbitals (include open shells and frozen orbitals). The all_socc array identifies only singly occupied orbitals within the full list of orbitals. The frozen array identifies only frozen orbitals. The argument for all arrays much be a QT-ordered index. Most of these are used in the integral sorting routines found in CCSORT and CCDENSITY. */ if(params.ref == 2) { moinfo.aocc = init_int_array(moinfo.nactive); moinfo.bocc = init_int_array(moinfo.nactive); moinfo.avir = init_int_array(moinfo.nactive); moinfo.bvir = init_int_array(moinfo.nactive); moinfo.all_aocc = init_int_array(moinfo.nmo); moinfo.all_bocc = init_int_array(moinfo.nmo); moinfo.all_avir = init_int_array(moinfo.nmo); moinfo.all_bvir = init_int_array(moinfo.nmo); moinfo.frozen = init_int_array(moinfo.nmo); active_a_count = active_b_count = all_a_count = all_b_count = 0; for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.frdocc[i]; j++, all_a_count++, all_b_count++) { moinfo.all_aocc[all_a_count] = 1; moinfo.all_bocc[all_b_count] = 1; moinfo.frozen[all_a_count] = 1; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.clsdpi[i] + moinfo.openpi[i]; j++) { moinfo.aocc[active_a_count] = 1; moinfo.all_aocc[all_a_count] = 1; active_a_count++; all_a_count++; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.clsdpi[i]; j++) { moinfo.bocc[active_b_count] = 1; moinfo.all_bocc[all_b_count] = 1; active_b_count++; all_b_count++; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.openpi[i] + moinfo.uoccpi[i]; j++) { moinfo.bvir[active_b_count] = 1; moinfo.all_bvir[all_b_count] = 1; active_b_count++; all_b_count++; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.uoccpi[i]; j++) { moinfo.avir[active_a_count] = 1; moinfo.all_avir[all_a_count] = 1; active_a_count++; all_a_count++; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.fruocc[i]; j++, all_a_count++,all_b_count++) { moinfo.all_avir[all_a_count] = 1; moinfo.all_bvir[all_b_count] = 1; moinfo.frozen[all_a_count] = 1; } } /* Dump the Boolean arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Alpha Occ Orbital Boolean", (char *) moinfo.aocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Beta Occ Orbital Boolean", (char *) moinfo.bocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Alpha Virt Orbital Boolean", (char *) moinfo.avir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Beta Virt Orbital Boolean", (char *) moinfo.bvir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "All Alpha Occ Orbital Boolean", (char *) moinfo.all_aocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Beta Occ Orbital Boolean", (char *) moinfo.all_bocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Alpha Virt Orbital Boolean", (char *) moinfo.all_avir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Beta Virt Orbital Boolean", (char *) moinfo.all_bvir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "Frozen Orbital Boolean", (char *) moinfo.frozen, sizeof(int)*moinfo.nmo); } else { moinfo.occ = init_int_array(moinfo.nactive); moinfo.vir = init_int_array(moinfo.nactive); moinfo.socc = init_int_array(moinfo.nactive); moinfo.all_occ = init_int_array(moinfo.nmo); moinfo.all_vir = init_int_array(moinfo.nmo); moinfo.all_socc = init_int_array(moinfo.nmo); moinfo.frozen = init_int_array(moinfo.nmo); moinfo.orbsym = init_int_array(moinfo.nmo); active_count = all_count = 0; for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.frdocc[i]; j++, all_count++) { moinfo.all_occ[all_count] = 1; moinfo.frozen[all_count] = 1; moinfo.orbsym[all_count] = i; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.clsdpi[i]; j++, active_count++, all_count++) { moinfo.occ[active_count] = 1; moinfo.all_occ[all_count] = 1; moinfo.orbsym[all_count] = i; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.openpi[i]; j++, active_count++, all_count++) { moinfo.occ[active_count] = 1; moinfo.vir[active_count] = 1; moinfo.socc[active_count] = 1; moinfo.all_occ[all_count] = 1; moinfo.all_vir[all_count] = 1; moinfo.all_socc[all_count] = 1; moinfo.orbsym[all_count] = i; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.uoccpi[i]; j++, active_count++, all_count++) { moinfo.vir[active_count] = 1; moinfo.all_vir[all_count] = 1; moinfo.orbsym[all_count] = i; } } for(i=0; i < moinfo.nirreps; i++) { for(j=0; j < moinfo.fruocc[i]; j++, all_count++) { moinfo.all_vir[all_count] = 1; moinfo.frozen[all_count] = 1; moinfo.orbsym[all_count] = i; } } /* Dump the Boolean arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Occ Orbital Boolean", (char *) moinfo.occ, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Virt Orbital Boolean", (char *) moinfo.vir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Socc Orbital Boolean", (char *) moinfo.socc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "All Occ Orbital Boolean", (char *) moinfo.all_occ, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Virt Orbital Boolean", (char *) moinfo.all_vir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Socc Orbital Boolean", (char *) moinfo.all_socc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "Frozen Orbital Boolean", (char *) moinfo.frozen, sizeof(int)*moinfo.nmo); } if(params.ref == 2) { /**** UHF references ****/ /* Build relative index arrays which map a QT Standard orbital index into the CC occupied or virtual relative index. Since the QT Standard ordering is different for alpha and beta UHF indices, the CC occupied and virtual orderings are also necessarily different for the different spins. The cc_aocc, cc_bocc, cc_avir, and cc_bvir arrays do not include frozen orbitals and are of length moinfo.nactive. The cc_allaocc, cc_allbocc, cc_allavir, cc_allbvir do include frozen orbitals and are of length moinfo.nmo. In these latter arrays, the frozen orbitals are given FIRST, even in the cc_allavir and cc_allbvir orderings. (This is just like the RHF/ROHF case given below.) These arrays are needed by classification routines used in sorting two-electron integrals (in CCSORT and CCDENSITY) where integrals are divided up by their occupied and virtual index patterns (see classify.c and distribute.c). For example, for 3B1 CH2 in a DZ basis with one frozen core orbital and three frozen virtual orbitals: QT Alpha: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Space: fc d s d s u u u u u u fv fv fv Symm: a1 a1 a1 b2 b1 a1 a1 a1 b1 b2 b2 a1 a1 b2 ------------------------------------------------------------------ cc_aocc: X 0 1 2 3 -1 -1 -1 -1 -1 -1 X X X cc_avir: X -1 -1 -1 -1 0 1 2 3 4 5 X X X cc_allaocc: 0 1 2 3 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 cc_allavir: -1 -1 -1 -1 -1 2 3 4 5 7 8 0 1 6 QT Beta: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Space: fc d d s u u u s u u u fv fv fv Symm: a1 a1 b2 a1 a1 a1 a1 b1 b1 b2 b2 a1 a1 b2 ------------------------------------------------------------------ cc_bocc: X 0 1 -1 -1 -1 -1 -1 -1 -1 -1 X X X cc_bvir: X -1 -1 0 1 2 3 4 5 6 7 X X X cc_allbocc: 0 1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 cc_allbvir: -1 -1 -1 2 3 4 5 6 7 9 10 0 1 8 A "-1" is used to mark QT indices irrelevant to the given CC ordering array, and an "X" indicates that the element doesn't appear in the CC array at all (i.e., cc_occ and cc_vir are of length nactive and cc_allocc and cc_allvir are of length nmo). Note that I also compute the CC->QT versions of the lookup arrays (qt_aocc, qt_bocc, and qt_avir, and qt_bvir) simultaneously. Hence, if one has an array in CC ordering without frozen orbitals, and needs to convert the array to CC ordering WITH frozen orbitals (i.e. add zeroes in all the right places), then one could loop over the CC active orbitals, compute the QT index for the current orbital, and finally compute the index for the full CC list. */ /* First the active-orbital CC ordering and symmetry arrays */ moinfo.cc_aocc = init_int_array(moinfo.nactive); moinfo.cc_bocc = init_int_array(moinfo.nactive); moinfo.cc_avir = init_int_array(moinfo.nactive); moinfo.cc_bvir = init_int_array(moinfo.nactive); moinfo.qt_aocc = init_int_array(moinfo.nactive); moinfo.qt_bocc = init_int_array(moinfo.nactive); moinfo.qt_avir = init_int_array(moinfo.nactive); moinfo.qt_bvir = init_int_array(moinfo.nactive); for(i=0; i < moinfo.nactive; i++) { moinfo.cc_aocc[i] = moinfo.cc_avir[i] = -1; moinfo.cc_bocc[i] = moinfo.cc_bvir[i] = -1; moinfo.qt_aocc[i] = moinfo.qt_avir[i] = -1; moinfo.qt_bocc[i] = moinfo.qt_bvir[i] = -1; } moinfo.aocc_sym = init_int_array(moinfo.nactive); moinfo.bocc_sym = init_int_array(moinfo.nactive); moinfo.avir_sym = init_int_array(moinfo.nactive); moinfo.bvir_sym = init_int_array(moinfo.nactive); count = 0; offset = 0; for(h=0; h < moinfo.nirreps; h++) { if(h) offset += moinfo.clsdpi[h-1] + moinfo.openpi[h-1]; for(i=0; i < moinfo.clsdpi[h] + moinfo.openpi[h]; i++,count++) { moinfo.cc_aocc[offset+i] = count; moinfo.qt_aocc[count] = nfzc + offset + i; moinfo.aocc_sym[count] = h; } } count = 0; offset = 0; for(h=0; h < moinfo.nirreps; h++) { if(h) offset += moinfo.clsdpi[h-1]; for(i=0; i < moinfo.clsdpi[h]; i++,count++) { moinfo.cc_bocc[offset+i] = count; moinfo.qt_bocc[count] = nfzc + offset + i; moinfo.bocc_sym[count] = h; } } count = 0; offset = nclsd + nopen; for(h=0; h < moinfo.nirreps; h++) { if(h) offset += moinfo.uoccpi[h-1]; for(i=0; i < moinfo.uoccpi[h]; i++,count++) { moinfo.cc_avir[offset+i] = count; moinfo.qt_avir[count] = nfzc + offset + i; moinfo.avir_sym[count] = h; } } count = 0; offset = nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) offset += moinfo.uoccpi[h-1] + moinfo.openpi[h-1]; for(i=0; i < moinfo.uoccpi[h] + moinfo.openpi[h]; i++,count++) { moinfo.cc_bvir[offset+i] = count; moinfo.qt_bvir[count] = nfzc + offset + i; moinfo.bvir_sym[count] = h; } } /* Dump the active-orbital CC and QT ordering and symmetry arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Alpha Active Occ Order", (char *) moinfo.cc_aocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Beta Active Occ Order", (char *) moinfo.cc_bocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Alpha Active Virt Order", (char *) moinfo.cc_avir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Beta Active Virt Order", (char *) moinfo.cc_bvir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Alpha Active Occ Order", (char *) moinfo.qt_aocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Beta Active Occ Order", (char *) moinfo.qt_bocc, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Alpha Active Virt Order", (char *) moinfo.qt_avir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Beta Active Virt Order", (char *) moinfo.qt_bvir, sizeof(int)*moinfo.nactive); /* Now the all-orbital CC ordering and symmetry arrays */ moinfo.cc_allaocc = init_int_array(moinfo.nmo); moinfo.cc_allbocc = init_int_array(moinfo.nmo); moinfo.cc_allavir = init_int_array(moinfo.nmo); moinfo.cc_allbvir = init_int_array(moinfo.nmo); moinfo.qt_allaocc = init_int_array(moinfo.nmo); moinfo.qt_allbocc = init_int_array(moinfo.nmo); moinfo.qt_allavir = init_int_array(moinfo.nmo); moinfo.qt_allbvir = init_int_array(moinfo.nmo); for(i=0; i < moinfo.nmo; i++) { moinfo.cc_allaocc[i] = moinfo.cc_allavir[i] = -1; moinfo.cc_allbocc[i] = moinfo.cc_allbvir[i] = -1; moinfo.qt_allaocc[i] = moinfo.qt_allavir[i] = -1; moinfo.qt_allbocc[i] = moinfo.qt_allbvir[i] = -1; } moinfo.allaocc_sym = init_int_array(moinfo.nmo); moinfo.allbocc_sym = init_int_array(moinfo.nmo); moinfo.allavir_sym = init_int_array(moinfo.nmo); moinfo.allbvir_sym = init_int_array(moinfo.nmo); count = 0; fc_offset = 0; offset = nfzc; for(h=0; h < moinfo.nirreps; h++) { if(h) fc_offset += moinfo.frdocc[h-1]; for(i=0; i < moinfo.frdocc[h]; i++,count++) { moinfo.cc_allaocc[fc_offset+i] = count; moinfo.qt_allaocc[count] = fc_offset+i; moinfo.allaocc_sym[count] = h; } if(h) offset += moinfo.clsdpi[h-1] + moinfo.openpi[h-1]; for(i=0; i < moinfo.clsdpi[h] + moinfo.openpi[h]; i++,count++) { moinfo.cc_allaocc[offset+i] = count; moinfo.qt_allaocc[count] = offset+i; moinfo.allaocc_sym[count] = h; } } count = 0; fc_offset = 0; offset = nfzc; for(h=0; h < moinfo.nirreps; h++) { if(h) fc_offset += moinfo.frdocc[h-1]; for(i=0; i < moinfo.frdocc[h]; i++,count++) { moinfo.cc_allbocc[fc_offset+i] = count; moinfo.qt_allbocc[count] = fc_offset+i; moinfo.allbocc_sym[count] = h; } if(h) offset += moinfo.clsdpi[h-1]; for(i=0; i < moinfo.clsdpi[h]; i++,count++) { moinfo.cc_allbocc[offset+i] = count; moinfo.qt_allbocc[count] = offset+i; moinfo.allbocc_sym[count] = h; } } count = 0; fv_offset = nfzc + nclsd + nopen + nuocc; offset = nfzc + nclsd + nopen; for(h=0; h < moinfo.nirreps; h++) { if(h) fv_offset += moinfo.fruocc[h-1]; for(i=0; i < moinfo.fruocc[h]; i++,count++) { moinfo.cc_allavir[fv_offset+i] = count; moinfo.qt_allavir[count] = fv_offset+i; moinfo.allavir_sym[count] = h; } if(h) offset += moinfo.uoccpi[h-1]; for(i=0; i < moinfo.uoccpi[h]; i++,count++) { moinfo.cc_allavir[offset+i] = count; moinfo.qt_allavir[count] = offset+i; moinfo.allavir_sym[count] = h; } } count = 0; fv_offset = nfzc + nclsd + nopen + nuocc; offset = nfzc + nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) fv_offset += moinfo.fruocc[h-1]; for(i=0; i < moinfo.fruocc[h]; i++,count++) { moinfo.cc_allbvir[fv_offset+i] = count; moinfo.qt_allbvir[count] = fv_offset+i; moinfo.allbvir_sym[count] = h; } if(h) offset += moinfo.uoccpi[h-1] + moinfo.openpi[h-1]; for(i=0; i < moinfo.uoccpi[h] + moinfo.openpi[h]; i++,count++) { moinfo.cc_allbvir[offset+i] = count; moinfo.qt_allbvir[count] = offset+i; moinfo.allbvir_sym[count] = h; } } /* Dump the all-orbital CC ordering and symmetry arrays to CC_INFO */ psio_write_entry(CC_INFO, "All Alpha Occ Orb Symmetry", (char *) moinfo.allaocc_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Beta Occ Orb Symmetry", (char *) moinfo.allbocc_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Alpha Virt Orb Symmetry", (char *) moinfo.allavir_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Beta Virt Orb Symmetry", (char *) moinfo.allbvir_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Alpha Occ Order", (char *) moinfo.cc_allaocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Beta Occ Order", (char *) moinfo.cc_allbocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Alpha Virt Order", (char *) moinfo.cc_allavir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Beta Virt Order", (char *) moinfo.cc_allbvir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Alpha Occ Order", (char *) moinfo.qt_allaocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Beta Occ Order", (char *) moinfo.qt_allbocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Alpha Virt Order", (char *) moinfo.qt_allavir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Beta Virt Order", (char *) moinfo.qt_allbvir, sizeof(int)*moinfo.nmo); } /*** UHF references ***/ else { /**** RHF and ROHF references ****/ /* Build relative index arrays which map a QT Standard orbital index into the CC occupied or virtual relative index. In the CC occupied ordering (given by "cc_allocc"), the orbitals are organized with all frozen core orbitals first, followed by doubly occupied orbitals, followed by singly occupied orbitals. In the CC virtual ordering (given by "cc_allvir"), the orbitals are organized with all frozen virtual orbitals first, followed by active unoccupied orbitals, followed by the singly occupied orbitals. The "cc_occ" and "cc_vir" arrays are defined similarly, but without frozen orbitals. These arrays are needed by classification routines used in sorting two-electron integrals (in CCSORT and CCDENSITY) where integrals are divided up by their occupied and virtual index patterns (see classify.c and distribute.c). For example, for 3B1 CH2 in a DZ basis with one frozen core orbital and three frozen virtual orbitals: QT: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Space: fc d d s s u u u u u u fv fv fv Symm: a1 a1 b2 a1 b1 a1 a1 a1 b1 b2 b2 a1 a1 b2 ----------------------------------------------------------------- cc_occ: X 0 3 1 2 -1 -1 -1 -1 -1 -1 X X X cc_vir: X -1 -1 3 5 0 1 2 4 6 7 X X X cc_allocc: 0 1 4 2 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 cc_allvir: -1 -1 -1 5 7 2 3 4 6 9 10 0 1 8 A "-1" is used to mark QT indices irrelevant to the given CC ordering array, and an "X" indicates that the element doesn't appear in the CC array at all (i.e., cc_occ and cc_vir are of length nactive and cc_allocc and cc_allvir are of length nmo). Note that I also compute the CC->QT versions of the cc_occ and cc_vir arrays (qt_occ and qt_vir, respectively) simultaneously. Hence, if one has an array in CC ordering without frozen orbitals, and needs to convert the array to CC ordering WITH frozen orbitals (i.e. add zeroes in all the right places), then one could loop over the CC active orbitals, compute the QT index for the current orbital (using qt_occ or qt_vir), and finally compute the index for the full CC list (using cc_allocc or cc_allvir). */ /* First the active-orbital CC ordering and symmetry arrays */ moinfo.cc_occ = init_int_array(moinfo.nactive); moinfo.cc_vir = init_int_array(moinfo.nactive); moinfo.qt_occ = init_int_array(moinfo.nactive); moinfo.qt_vir = init_int_array(moinfo.nactive); for(i=0; i < moinfo.nactive; i++) { moinfo.cc_occ[i] = moinfo.cc_vir[i] = -1; moinfo.qt_occ[i] = moinfo.qt_vir[i] = -1; } moinfo.occ_sym = init_int_array(moinfo.nactive); moinfo.vir_sym = init_int_array(moinfo.nactive); count = 0; cl_offset = 0; op_offset = nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) cl_offset += moinfo.clsdpi[h-1]; for(i=0; i < moinfo.clsdpi[h]; i++,count++) { moinfo.cc_occ[cl_offset+i] = count; moinfo.qt_occ[count] = nfzc + cl_offset+i; moinfo.occ_sym[count] = h; } if(h) op_offset += moinfo.openpi[h-1]; for(i=0; i < moinfo.openpi[h]; i++,count++) { moinfo.cc_occ[op_offset+i] = count; moinfo.qt_occ[count] = nfzc + op_offset+i; moinfo.occ_sym[count] = h; } } count = 0; vr_offset = nclsd + nopen; op_offset = nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) vr_offset += moinfo.uoccpi[h-1]; for(i=0; i < moinfo.uoccpi[h]; i++,count++) { moinfo.cc_vir[vr_offset+i] = count; moinfo.qt_vir[count] = nfzc + vr_offset+i; moinfo.vir_sym[count] = h; } if(h) op_offset += moinfo.openpi[h-1]; for(i=0; i < moinfo.openpi[h]; i++,count++) { moinfo.cc_vir[op_offset+i] = count; moinfo.qt_vir[count] = nfzc + op_offset+i; moinfo.vir_sym[count] = h; } } /* Dump the active-orbital CC and QT ordering and symmetry arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Active Occ Order", (char *) moinfo.cc_occ, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "QT->CC Active Virt Order", (char *) moinfo.cc_vir, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Active Occ Order", (char *) moinfo.qt_occ, sizeof(int)*moinfo.nactive); psio_write_entry(CC_INFO, "CC->QT Active Virt Order", (char *) moinfo.qt_vir, sizeof(int)*moinfo.nactive); /* Now the all-orbital CC ordering and symmetry arrays */ moinfo.cc_allocc = init_int_array(moinfo.nmo); moinfo.cc_allvir = init_int_array(moinfo.nmo); moinfo.qt_allocc = init_int_array(moinfo.nmo); moinfo.qt_allvir = init_int_array(moinfo.nmo); for(i=0; i < moinfo.nmo; i++) { moinfo.cc_allocc[i] = moinfo.cc_allvir[i] = -1; moinfo.qt_allocc[i] = moinfo.qt_allvir[i] = -1; } moinfo.allocc_sym = init_int_array(moinfo.nmo); moinfo.allvir_sym = init_int_array(moinfo.nmo); count = 0; fc_offset = 0; cl_offset = nfzc; op_offset = nfzc + nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) fc_offset += moinfo.frdocc[h-1]; for(i=0; i < moinfo.frdocc[h]; i++,count++) { moinfo.cc_allocc[fc_offset+i] = count; moinfo.qt_allocc[count] = fc_offset+i; moinfo.allocc_sym[count] = h; } if(h) cl_offset += moinfo.clsdpi[h-1]; for(i=0; i < moinfo.clsdpi[h]; i++,count++) { moinfo.cc_allocc[cl_offset+i] = count; moinfo.qt_allocc[count] = cl_offset+i; moinfo.allocc_sym[count] = h; } if(h) op_offset += moinfo.openpi[h-1]; for(i=0; i < moinfo.openpi[h]; i++,count++) { moinfo.cc_allocc[op_offset+i] = count; moinfo.qt_allocc[count] = op_offset+i; moinfo.allocc_sym[count] = h; } } count = 0; fv_offset = nfzc + nclsd + nopen + nuocc; vr_offset = nfzc + nclsd + nopen; op_offset = nfzc + nclsd; for(h=0; h < moinfo.nirreps; h++) { if(h) fv_offset += moinfo.fruocc[h-1]; for(i=0; i < moinfo.fruocc[h]; i++,count++) { moinfo.cc_allvir[fv_offset+i] = count; moinfo.qt_allvir[count] = fv_offset+i; moinfo.allvir_sym[count] = h; } if(h) vr_offset += moinfo.uoccpi[h-1]; for(i=0; i < moinfo.uoccpi[h]; i++,count++) { moinfo.cc_allvir[vr_offset+i] = count; moinfo.qt_allvir[count] = vr_offset+i; moinfo.allvir_sym[count] = h; } if(h) op_offset += moinfo.openpi[h-1]; for(i=0; i < moinfo.openpi[h]; i++,count++) { moinfo.cc_allvir[op_offset+i] = count; moinfo.qt_allvir[count] = op_offset+i; moinfo.allvir_sym[count] = h; } } /* Dump the all-orbital CC ordering and symmetry arrays to CC_INFO */ psio_write_entry(CC_INFO, "All Occ Orb Symmetry", (char *) moinfo.allocc_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "All Virt Orb Symmetry", (char *) moinfo.allvir_sym, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Occ Order", (char *) moinfo.cc_allocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "QT->CC All Virt Order", (char *) moinfo.cc_allvir, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Occ Order", (char *) moinfo.qt_allocc, sizeof(int)*moinfo.nmo); psio_write_entry(CC_INFO, "CC->QT All Virt Order", (char *) moinfo.qt_allvir, sizeof(int)*moinfo.nmo); } /*** RHF and ROHF references ***/ /* Calculate occupied and virtual orbital offsets within each irrep */ if(params.ref == 2) { /*** UHF references ***/ moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); ocount = moinfo.aoccpi[0]; vcount = moinfo.avirtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.aocc_off[h] = ocount; ocount += moinfo.aoccpi[h]; moinfo.avir_off[h] = vcount; vcount += moinfo.avirtpi[h]; } ocount = moinfo.boccpi[0]; vcount = moinfo.bvirtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.bocc_off[h] = ocount; ocount += moinfo.boccpi[h]; moinfo.bvir_off[h] = vcount; vcount += moinfo.bvirtpi[h]; } moinfo.all_aocc_off = init_int_array(moinfo.nirreps); moinfo.all_bocc_off = init_int_array(moinfo.nirreps); moinfo.all_avir_off = init_int_array(moinfo.nirreps); moinfo.all_bvir_off = init_int_array(moinfo.nirreps); ocount = moinfo.all_aoccpi[0]; vcount = moinfo.all_avirtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.all_aocc_off[h] = ocount; ocount += moinfo.all_aoccpi[h]; moinfo.all_avir_off[h] = vcount; vcount += moinfo.all_avirtpi[h]; } ocount = moinfo.all_boccpi[0]; vcount = moinfo.all_bvirtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.all_bocc_off[h] = ocount; ocount += moinfo.all_boccpi[h]; moinfo.all_bvir_off[h] = vcount; vcount += moinfo.all_bvirtpi[h]; } /* Dump occ_off and vir_off arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Alpha Occ Orb Offsets", (char *) moinfo.all_aocc_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Beta Occ Orb Offsets", (char *) moinfo.all_bocc_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Alpha Virt Orb Offsets", (char *) moinfo.all_avir_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Beta Virt Orb Offsets", (char *) moinfo.all_bvir_off, sizeof(int)*moinfo.nirreps); } else { /*** RHF/ROHF references ***/ moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); ocount = moinfo.occpi[0]; vcount = moinfo.virtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.occ_off[h] = ocount; ocount += moinfo.occpi[h]; moinfo.vir_off[h] = vcount; vcount += moinfo.virtpi[h]; } moinfo.all_occ_off = init_int_array(moinfo.nirreps); moinfo.all_vir_off = init_int_array(moinfo.nirreps); ocount = moinfo.all_occpi[0]; vcount = moinfo.all_virtpi[0]; for(h=1; h < moinfo.nirreps; h++) { moinfo.all_occ_off[h] = ocount; ocount += moinfo.all_occpi[h]; moinfo.all_vir_off[h] = vcount; vcount += moinfo.all_virtpi[h]; } /* Dump occ_off and vir_off arrays to CC_INFO */ psio_write_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Occ Orb Offsets", (char *) moinfo.all_occ_off, sizeof(int)*moinfo.nirreps); psio_write_entry(CC_INFO, "All Virt Orb Offsets", (char *) moinfo.all_vir_off, sizeof(int)*moinfo.nirreps); } fprintf(outfile,"\n\tChkpt Parameters:\n"); fprintf(outfile,"\t--------------------\n"); fprintf(outfile,"\tNumber of irreps = %d\n",moinfo.nirreps); fprintf(outfile,"\tNumber of MOs = %d\n",moinfo.nmo); fprintf(outfile,"\tNumber of active MOs = %d\n\n",moinfo.nactive); fprintf(outfile, "\tLabel\t# MOs\t# FZDC\t# DOCC\t# SOCC\t# VIRT\t# FZVR\n"); fprintf(outfile, "\t-----\t-----\t------\t------\t------\t------\t------\n"); for(i=0; i < moinfo.nirreps; i++) { fprintf(outfile, "\t %s\t %d\t %d\t %d\t %d\t %d\t %d\n", moinfo.labels[i],moinfo.orbspi[i],moinfo.frdocc[i], moinfo.clsdpi[i],moinfo.openpi[i],moinfo.uoccpi[i], moinfo.fruocc[i]); } fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.14f\n", moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.14f\n", escf); /* Lastly, build the active virtual orbital SCF eigenvector array for the AO-basis code (see CCENERGY) */ if(params.ref == 2) { /*** UHF references ***/ pitz_offset = init_int_array(moinfo.nirreps); pitz_offset[0] = 0; for(h=1; h < moinfo.nirreps; h++) { pitz_offset[h] = pitz_offset[h-1] + moinfo.orbspi[h-1]; } chkpt_init(PSIO_OPEN_OLD); evects_A = (double ***) malloc(moinfo.nirreps * sizeof(double **)); scf_vector_A = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { evects_A[h] = chkpt_rd_alpha_scf_irrep(h); /* Pitzer-ordered MO's */ if(moinfo.avirtpi[h]) { scf_vector_A[h] = block_matrix(moinfo.sopi[h], moinfo.avirtpi[h]); for(i=0; i < moinfo.sopi[h]; i++) { for(j=0; j < moinfo.avirtpi[h]; j++) { /* CC-ordered relative index */ J = moinfo.avir_off[h] + j; /* CC-ordered absolute index */ qt_j = moinfo.qt_avir[J]; /* QT-ordered absolute index */ pitz_J = moinfo.qt2pitz_A[qt_j]; /* Pitzer-ordered absolute index */ pitz_j = pitz_J - pitz_offset[h]; /* Pitzer-ordered relative index */ scf_vector_A[h][i][j] = evects_A[h][i][pitz_j]; } } psio_write(CC_INFO, "UHF Active Alpha Virtual Orbs", (char *) scf_vector_A[h][0], moinfo.sopi[h]*moinfo.avirtpi[h]*sizeof(double), next, &next); free_block(evects_A[h]); free_block(scf_vector_A[h]); } } free(evects_A); free(scf_vector_A); evects_B = (double ***) malloc(moinfo.nirreps * sizeof(double **)); scf_vector_B = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { evects_B[h] = chkpt_rd_beta_scf_irrep(h); /* Pitzer-ordered MO's */ if(moinfo.bvirtpi[h]) { scf_vector_B[h] = block_matrix(moinfo.sopi[h], moinfo.bvirtpi[h]); for(i=0; i < moinfo.sopi[h]; i++) { for(j=0; j < moinfo.bvirtpi[h]; j++) { /* CC-ordered relative index */ J = moinfo.bvir_off[h] + j; /* CC-ordered absolute index */ qt_j = moinfo.qt_bvir[J]; /* QT-ordered absolute index */ pitz_J = moinfo.qt2pitz_B[qt_j]; /* Pitzer-ordered absolute index */ pitz_j = pitz_J - pitz_offset[h]; /* Pitzer-ordered relative index */ scf_vector_B[h][i][j] = evects_B[h][i][pitz_j]; } } psio_write(CC_INFO, "UHF Active Beta Virtual Orbs", (char *) scf_vector_B[h][0], moinfo.sopi[h]*moinfo.bvirtpi[h]*sizeof(double), next, &next); free_block(evects_B[h]); free_block(scf_vector_B[h]); } } free(evects_B); free(scf_vector_B); free(pitz_offset); chkpt_close(); } else { /*** RHF/ROHF references ***/ pitz_offset = init_int_array(moinfo.nirreps); pitz_offset[0] = 0; for(h=1; h < moinfo.nirreps; h++) { pitz_offset[h] = pitz_offset[h-1] + moinfo.orbspi[h-1]; } chkpt_init(PSIO_OPEN_OLD); evects = (double ***) malloc(moinfo.nirreps * sizeof(double **)); scf_vector = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { evects[h] = chkpt_rd_scf_irrep(h); /* Pitzer-order MO's */ /* Are there active virtuals in this irrep? */ if(moinfo.virtpi[h]) { scf_vector[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); for(i=0; i < moinfo.sopi[h]; i++) { for(j=0; j < moinfo.virtpi[h]; j++) { /* CC-ordered relative index */ J = moinfo.vir_off[h] + j; /* CC-ordered absolute index */ qt_j = moinfo.qt_vir[J]; /* QT-ordered absolute index */ pitz_J = moinfo.qt2pitz[qt_j]; /* Pitzer-ordered absolute index */ pitz_j = pitz_J - pitz_offset[h]; /* Pitzer-order relative index */ scf_vector[h][i][j] = evects[h][i][pitz_j]; } } psio_write(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) scf_vector[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); free_block(scf_vector[h]); } free_block(evects[h]); } for(h=0; h < moinfo.nirreps; h++) { evects[h] = chkpt_rd_scf_irrep(h); /* Pitzer-order MO's */ next = PSIO_ZERO; if(moinfo.occpi[h]) { scf_vector[h] = block_matrix(moinfo.sopi[h],moinfo.occpi[h]); for(i=0; i < moinfo.sopi[h]; i++) { for(j=0; j < moinfo.occpi[h]; j++) { /* CC-ordered relative index */ J = moinfo.occ_off[h] + j; /* CC-ordered absolute index */ qt_j = moinfo.qt_occ[J]; /* QT-ordered absolute index */ pitz_J = moinfo.qt2pitz[qt_j]; /* Pitzer-ordered absolute index */ pitz_j = pitz_J - pitz_offset[h]; /* Pitzer-order relative index */ scf_vector[h][i][j] = evects[h][i][pitz_j]; } } psio_write(CC_INFO, "RHF/ROHF Active Occupied Orbitals", (char *) scf_vector[h][0], moinfo.sopi[h]*moinfo.occpi[h]*sizeof(double), next, &next); free_block(scf_vector[h]); } free_block(evects[h]); /* fprintf(outfile, "\n\tOriginal SCF Eigenvectors:\n"); print_mat(evects[h], moinfo.sopi[h], moinfo.orbspi[h], outfile); fprintf(outfile, "\n\tRe-ordered Virtual SCF Eigenvectors:\n"); print_mat(scf_vector[h], moinfo.sopi[h], moinfo.virtpi[h], outfile); */ } C = (double ***) malloc(moinfo.nirreps * sizeof(double **)); next = PSIO_ZERO; for(h=0; h < moinfo.nirreps; h++) { if(moinfo.sopi[h] && moinfo.virtpi[h]) { C[h] = block_matrix(moinfo.sopi[h],moinfo.virtpi[h]); psio_read(CC_INFO, "RHF/ROHF Active Virtual Orbitals", (char *) C[h][0], moinfo.sopi[h]*moinfo.virtpi[h]*sizeof(double), next, &next); } } moinfo.C = C; free(evects); free(scf_vector); free(pitz_offset); chkpt_close(); } } }} // namespace psi::ccsort ������psi3/src/bin/ccsort/get_params.cc�������������������������������������������������������������������0000644�0001015�0000765�00000027433�10757640026�015506� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <psifiles.h> #include <physconst.h> #include "Params.h" #include "MOInfo.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void get_params() { int errcod, tol, count, i; char *junk, units[20]; int *mu_irreps; errcod = ip_string("WFN", &(params.wfn), 0); if(strcmp(params.wfn, "MP2") && strcmp(params.wfn, "CCSD") && strcmp(params.wfn, "CCSD_T") && strcmp(params.wfn, "EOM_CCSD") && strcmp(params.wfn, "LEOM_CCSD") && strcmp(params.wfn, "BCCD") && strcmp(params.wfn,"BCCD_T") && strcmp(params.wfn, "SCF") && strcmp(params.wfn,"CIS") && strcmp(params.wfn,"RPA") && strcmp(params.wfn,"CC2") && strcmp(params.wfn,"CC3") && strcmp(params.wfn,"EOM_CC3") && strcmp(params.wfn,"EOM_CC2") && strcmp(params.wfn,"CCSD_MVD")) { fprintf(outfile, "Invalid value of input keyword WFN: %s\n", params.wfn); exit(PSI_RETURN_FAILURE); } /* NB: SCF wfns are allowed because, at present, ccsort is needed for RPA calculations */ params.semicanonical = 0; errcod = ip_string("REFERENCE", &(junk),0); if (errcod != IPE_OK) { /* if no reference is given, assume rhf */ params.ref = 0; } else { if(!strcmp(junk, "RHF")) params.ref = 0; else if(!strcmp(junk,"ROHF") && (!strcmp(params.wfn,"MP2") || !strcmp(params.wfn,"CCSD_T") || !strcmp(params.wfn,"CC3") || !strcmp(params.wfn, "EOM_CC3") || !strcmp(params.wfn,"CC2") || !strcmp(params.wfn, "EOM_CC2"))) { params.ref = 2; params.semicanonical = 1; } else if(!strcmp(junk, "ROHF")) params.ref = 1; else if(!strcmp(junk, "UHF")) params.ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &(junk),0); if(errcod != IPE_OK) params.dertype = 0; else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else if(!strcmp(junk,"RESPONSE")) params.dertype = 3; /* linear response */ else { printf("Invalid value of input keyword DERTYPE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } else { /* if jobtype=opt and dertype is absent, infer dertype = 1 */ if(ip_exist("JOBTYPE",0)) { errcod = ip_string("JOBTYPE", &(junk),0); if(!strcmp(junk,"OPT")) params.dertype = 1; free(junk); } } if(ip_exist("PROPERTY",0)) { errcod = ip_string("PROPERTY", &(params.prop), 0); if(strcmp(params.prop,"POLARIZABILITY") && strcmp(params.prop,"ROTATION") && strcmp(params.prop,"ALL") && strcmp(params.prop,"MAGNETIZABILITY")) { fprintf(outfile, "Invalid choice of response property: %s\n", params.prop); exit(PSI_RETURN_FAILURE); } } else params.prop = strdup("POLARIZABILITY"); params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "Invalid local correlation method: %s\n", local.method); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.weakp = (char *) malloc(4 * sizeof(char)); sprintf(local.weakp, "%s", "NONE"); } local.cphf_cutoff = 0.10; ip_data("LOCAL_CPHF_CUTOFF", "%lf", &(local.cphf_cutoff), 0); local.freeze_core = NULL; ip_string("FREEZE_CORE", &local.freeze_core, 0); if(local.freeze_core == NULL) local.freeze_core = strdup("FALSE"); if(ip_exist("LOCAL_PAIRDEF",0)){ errcod = ip_string("LOCAL_PAIRDEF", &(local.pairdef), 0); if(strcmp(local.pairdef,"BP") && strcmp(local.pairdef,"RESPONSE")) { fprintf(outfile, "Invalid keyword for strong/weak pair definition: %s\n", local.pairdef); exit(PSI_RETURN_FAILURE); } } else if(params.local && params.dertype == 3) local.pairdef = strdup("RESPONSE"); else if(params.local) local.pairdef = strdup("BP"); if(params.local && (strcmp(local.pairdef,"BP"))) { if(params.dertype == 3) { if(!(strcmp(params.prop,"POLARIZABILITY"))) { local.domain_polar = 1; local.domain_mag = 0; } else if(!(strcmp(params.prop,"MAGNETIZABILITY"))) { local.domain_polar = 0; local.domain_mag = 1; } else if(!(strcmp(params.prop,"ROTATION"))) { local.domain_polar = 1; local.domain_mag = 1; } } else { local.domain_polar = 0; local.domain_mag = 0; } } ip_boolean("LOCAL_DOMAIN_POLAR", &(local.domain_polar), 0); ip_boolean("LOCAL_DOMAIN_MAG", &(local.domain_mag), 0); local.domain_sep = 0; errcod = ip_boolean("LOCAL_DOMAIN_SEP", &(local.domain_sep),0); if(params.dertype == 3) local.filter_singles = 0; else local.filter_singles = 1; ip_boolean("LOCAL_FILTER_SINGLES", &(local.filter_singles), 0); if(ip_exist("AO_BASIS",0)) { errcod = ip_string("AO_BASIS", &(params.aobasis),0); } else params.aobasis = strdup("NONE"); /* Do we need MO-basis <ab|cd> integrals? */ if(!strcmp(params.wfn,"MP2") || !strcmp(params.aobasis,"DISK") || !strcmp(params.aobasis,"DIRECT")) { params.make_abcd = 0; } else { params.make_abcd = 1; } /* If we need the MO-basis <ab|cd> integrals, do we need the fully unpacked list? */ params.make_unpacked_abcd = 0; if(params.make_abcd) { if(params.ref != 0 || params.dertype == 1 || !strcmp(params.wfn,"EOM_CC2") || !strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3") || !strcmp(params.wfn,"CCSD_MVD")) { params.make_unpacked_abcd = 1; } errcod = ip_string("EOM_REFERENCE", &(junk), 0); if (errcod == IPE_OK) { if(!strcmp(junk,"ROHF")) params.make_unpacked_abcd = 1; free(junk); } } /* for now, generate <ai|bc> ordering if CC gradient, ROHF-CC, CC2, or CC3 */ if(params.dertype == 1 || params.ref == 1 || !strcmp(params.wfn,"CC2") || !strcmp(params.wfn,"CC3") || !strcmp(params.wfn,"EOM_CC3") || !strcmp(params.wfn,"EOM_CC2")) params.make_aibc = 1; else params.make_aibc = 0; errcod = ip_string("EOM_REFERENCE", &(junk), 0); if (errcod == IPE_OK) { if(!strcmp(junk,"ROHF")) params.make_aibc = 1; free(junk); } params.print_lvl = 1; errcod = ip_data("PRINT","%d",&(params.print_lvl),0); params.keep_TEIFile = 0; errcod = ip_boolean("KEEP_TEIFILE",&(params.keep_TEIFile),0); params.keep_OEIFile = 0; errcod = ip_boolean("KEEP_OEIFILE",&(params.keep_OEIFile),0); params.tolerance = 1e-14; errcod = ip_data("TOLERANCE", "%d", &(tol),0); if(errcod == IPE_OK) params.tolerance = 1.0*pow(10.0,(double) -tol); fndcor(&(params.memory), infile, outfile); params.cachelev = 2; errcod = ip_data("CACHELEV", "%d", &(params.cachelev),0); params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); /* grab the field frequencies from input -- a few different units are converted to E_h */ if(ip_exist("OMEGA",0)) { errcod = ip_count("OMEGA", &count, 0); if(errcod == IPE_NOT_AN_ARRAY || count == 1) { /* assume Hartrees and only one frequency */ params.nomega = 1; params.omega = init_array(1); errcod = ip_data("OMEGA", "%lf", &(params.omega[0]), 0); } else if(count >= 2) { params.nomega = count-1; params.omega = init_array(params.nomega); errcod = ip_data("OMEGA", "%s", units, 1, count-1); for(junk = units; *junk != '\0'; junk++) if(*junk>='a' && *junk <= 'z') *junk += 'A' - 'a'; for(i=0; i < count-1; i++) { errcod = ip_data("OMEGA", "%lf", &(params.omega[i]), 1, i); if(!strcmp(units, "HZ")) params.omega[i] *= _h / _hartree2J; else if(!strcmp(units, "AU")) 1; /* do nothing */ else if(!strcmp(units, "NM")) params.omega[i] = (_c*_h*1e9)/(params.omega[i]*_hartree2J); else if(!strcmp(units, "EV")) params.omega[i] /= _hartree2ev; else { fprintf(outfile, "\n\tError in unit for input field frequencies. Must use one of:\n"); fprintf(outfile, "\tau, hz, nm, or ev.\n"); exit(PSI_RETURN_FAILURE); } } } else { fprintf(outfile, "\n\tError reading input field frequencies. Please use the format:\n"); fprintf(outfile, "\t omega = (value1 value2 ... units)\n"); fprintf(outfile, "\twhere units = hartrees, hz, nm, or ev.\n"); exit(PSI_RETURN_FAILURE); } } else { /* assume static field by default */ params.omega = init_array(1); params.omega[0] = 0.0; params.nomega = 1; } mu_irreps = init_int_array(3); errcod = ip_int_array("MU_IRREPS", mu_irreps, 3); if(errcod == IPE_OK) { moinfo.irrep_x = mu_irreps[0]; moinfo.irrep_y = mu_irreps[1]; moinfo.irrep_z = mu_irreps[2]; } else { if(params.dertype == 3) { fprintf(outfile, "\nYou must supply the irreps of x, y, and z with the MU_IRREPS keyword.\n"); exit(PSI_RETURN_FAILURE); } } free(mu_irreps); fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tWave function =\t%s\n", params.wfn); if(params.semicanonical) { fprintf(outfile, "\tReference wfn =\tROHF changed to UHF for Semicanonical Orbitals\n"); } else { fprintf(outfile, "\tReference wfn =\t%s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); } if(params.dertype == 0) fprintf(outfile, "\tDerivative =\tNone\n"); else if(params.dertype == 1) fprintf(outfile, "\tDerivative =\tFirst\n"); else if(params.dertype == 3) fprintf(outfile, "\tDerivative =\tResponse\n"); fprintf(outfile, "\tMemory (Mbytes) =\t%.1f\n", params.memory/1e6); fprintf(outfile, "\tAO Basis =\t%s\n", params.aobasis); fprintf(outfile, "\tMake (ab|cd) =\t%s\n", (params.make_abcd == 1) ? "True" : "False"); fprintf(outfile, "\tCache Level =\t%d\n", params.cachelev); fprintf(outfile, "\tCache Type =\t%s\n", "LRU"); fprintf(outfile, "\tLocal CC = %s\n", params.local ? "Yes" : "No"); if(params.local) { fprintf(outfile, "\tLocal Cutoff = %3.1e\n", local.cutoff); fprintf(outfile, "\tLocal Method = %s\n", local.method); fprintf(outfile, "\tWeak pairs = %s\n", local.weakp); fprintf(outfile, "\tFilter singles = %s\n", local.filter_singles ? "Yes" : "No"); fprintf(outfile, "\tLocal pairs = %s\n", local.pairdef); fprintf(outfile, "\tLocal CPHF cutoff = %3.1e\n", local.cphf_cutoff); } fprintf(outfile, "\n"); fflush(outfile); } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/globals.h�����������������������������������������������������������������������0000644�0001015�0000765�00000000703�10754663017�014642� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <ccfiles.h> namespace psi { namespace ccsort { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN int *ioff; EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct Local local; }} // namespace psi::ccsort �������������������������������������������������������������psi3/src/bin/ccsort/idx_error.cc��������������������������������������������������������������������0000644�0001015�0000765�00000001312�11112564564�015343� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <psifiles.h> namespace psi { namespace ccsort { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile) { fprintf(outfile, "\n\tDPD Parameter Error in %s\n", message); fprintf(outfile, "\t-------------------------------------------------\n"); fprintf(outfile, "\t p q r s [ pq] [ rs] pq_symm rs_symm\n"); fprintf(outfile,"\t%5d %5d %5d %5d [%5d] [%5d] %1d %1d\n", p,q,r,s, pq,rs,pq_sym,rs_sym); exit(PSI_RETURN_FAILURE); } }} // namespace psi::ccsort ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/idx_permute.cc������������������������������������������������������������������0000644�0001015�0000765�00000010521�11112564564�015675� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libiwl/iwl.h> #include <libdpd/dpd.h> namespace psi { namespace ccsort { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile); void idx_permute(dpdfile4 *File, struct iwlbuf *OutBuf, int **bucket_map, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile) { int p_sym, q_sym, r_sym, s_sym; int pq_sym, rs_sym, rq_sym, ps_sym, qp_sym, sp_sym, sr_sym, qr_sym; int pq, rs, rq, ps, qp, sr, qr, sp; int perm_pq, perm_rs; dpdparams4 *Params; int this_bucket; Params = File->params; perm_pq = Params->perm_pq; perm_rs = Params->perm_rs; /* Get the orbital symmetries */ p_sym = Params->psym[p]; q_sym = Params->qsym[q]; r_sym = Params->rsym[r]; s_sym = Params->ssym[s]; /* Go through the allowed permutations --- NB these are Dirac permutations */ /* Get the left and right symmetry blocks */ pq_sym = p_sym^q_sym; rs_sym = r_sym^s_sym; /* Get the row and column indices and assign the value */ pq = Params->rowidx[p][q]; rs = Params->colidx[r][s]; if((pq >= Params->rowtot[pq_sym]) || (rs >= Params->coltot[rs_sym])) idx_error("Params_make: pq, rs", p,q,r,s,pq,rs,pq_sym,rs_sym,outfile); this_bucket = bucket_map[p][q]; iwl_buf_wrt_val(&OutBuf[this_bucket], p, q, r, s, value, 0, outfile, 0); if(perm_pr) { rq_sym = r_sym^q_sym; ps_sym = p_sym^s_sym; rq = Params->rowidx[r][q]; ps = Params->colidx[p][s]; if((rq >= Params->rowtot[rq_sym]) || (ps >= Params->coltot[ps_sym])) idx_error("Params_make: rq, ps", p,q,r,s,rq,ps,rq_sym,ps_sym,outfile); this_bucket = bucket_map[r][q]; iwl_buf_wrt_val(&OutBuf[this_bucket], r, q, p, s, value, 0, outfile, 0); } if(perm_qs) { ps_sym = p_sym^s_sym; rq_sym = r_sym^q_sym; ps = Params->rowidx[p][s]; rq = Params->colidx[r][q]; if((ps >= Params->rowtot[ps_sym]) || (rq >= Params->coltot[rq_sym])) idx_error("Params_make: ps, rq", p,q,r,s,ps,rq,ps_sym,rq_sym,outfile); this_bucket = bucket_map[p][s]; iwl_buf_wrt_val(&OutBuf[this_bucket], p, s, r, q, value, 0, outfile, 0); } if(perm_pr && perm_qs) { rs_sym = r_sym^s_sym; pq_sym = p_sym^q_sym; rs = Params->rowidx[r][s]; pq = Params->colidx[p][q]; if((rs >= Params->rowtot[rs_sym]) || (pq >= Params->coltot[pq_sym])) idx_error("Params_make: rs, pq", p,q,r,s,rs,pq,rs_sym,pq_sym,outfile); this_bucket = bucket_map[r][s]; iwl_buf_wrt_val(&OutBuf[this_bucket], r, s, p, q, value, 0, outfile, 0); } if(perm_prqs) { qp_sym = q_sym^p_sym; sr_sym = s_sym^r_sym; qp = Params->rowidx[q][p]; sr = Params->colidx[s][r]; if((qp >= Params->rowtot[qp_sym]) || (sr >= Params->coltot[sr_sym])) idx_error("Params_make: qp, sr", p,q,r,s,qp,sr,qp_sym,sr_sym,outfile); this_bucket = bucket_map[q][p]; iwl_buf_wrt_val(&OutBuf[this_bucket], q, p, s, r, value, 0, outfile, 0); if(perm_pr) { qr_sym = q_sym^r_sym; sp_sym = s_sym^p_sym; qr = Params->rowidx[q][r]; sp = Params->colidx[s][p]; if((qr >= Params->rowtot[qr_sym])||(sp >= Params->coltot[sp_sym])) idx_error("Params_make: qr, sp", p,q,r,s,qr,sp,qr_sym,sp_sym, outfile); this_bucket = bucket_map[q][r]; iwl_buf_wrt_val(&OutBuf[this_bucket], q, r, s, p, value, 0, outfile, 0); } if(perm_qs) { sp_sym = s_sym^p_sym; qr_sym = q_sym^r_sym; sp = Params->rowidx[s][p]; qr = Params->colidx[q][r]; if((sp >= Params->rowtot[sp_sym])||(qr >= Params->coltot[qr_sym])) idx_error("Params_make: sp, qr", p,q,r,s,sp,qr,sp_sym,qr_sym, outfile); this_bucket = bucket_map[s][p]; iwl_buf_wrt_val(&OutBuf[this_bucket], s, p, q, r, value, 0, outfile, 0); } if(perm_pr && perm_qs) { sr_sym = s_sym^r_sym; qp_sym = q_sym^p_sym; sr = Params->rowidx[s][r]; qp = Params->colidx[q][p]; if((sr >= Params->rowtot[sr_sym])||(qp >= Params->coltot[qp_sym])) idx_error("Params_make: sr, qp", p,q,r,s,sr,qp,sr_sym,qp_sym, outfile); this_bucket = bucket_map[s][r]; iwl_buf_wrt_val(&OutBuf[this_bucket], s, r, q, p, value, 0, outfile, 0); } } } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/idx_permute_multipass.cc��������������������������������������������������������0000644�0001015�0000765�00000011125�11112564564�017777� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libiwl/iwl.h> #include <libdpd/dpd.h> namespace psi { namespace ccsort { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile); void idx_permute_multipass(dpdfile4 *File, int this_bucket, int **bucket_map, int **bucket_offset, int p, int q, int r, int s, int perm_pr, int perm_qs, int perm_prqs, double value, FILE *outfile) { int p_sym, q_sym, r_sym, s_sym; int pq_sym, rs_sym, rq_sym, ps_sym, qp_sym, sp_sym, sr_sym, qr_sym; int pq, rs, rq, ps, qp, sr, qr, sp; int perm_pq, perm_rs; dpdparams4 *Params; int offset; Params = File->params; perm_pq = Params->perm_pq; perm_rs = Params->perm_rs; /* Get the orbital symmetries */ p_sym = Params->psym[p]; q_sym = Params->qsym[q]; r_sym = Params->rsym[r]; s_sym = Params->ssym[s]; /* Go through the allowed permutations --- NB these are Dirac permutations */ if(bucket_map[p][q] == this_bucket) { /* Get the left and right symmetry blocks */ pq_sym = p_sym^q_sym; rs_sym = r_sym^s_sym; /* Get the row and column indices and assign the value */ pq = Params->rowidx[p][q]; rs = Params->colidx[r][s]; if((pq >= Params->rowtot[pq_sym]) || (rs >= Params->coltot[rs_sym])) idx_error("MP Params_make: pq, rs", p,q,r,s,pq,rs,pq_sym,rs_sym,outfile); offset = bucket_offset[this_bucket][pq_sym]; File->matrix[pq_sym][pq-offset][rs] = value; } if(perm_pr) { if(bucket_map[r][q] == this_bucket) { rq_sym = r_sym^q_sym; ps_sym = p_sym^s_sym; rq = Params->rowidx[r][q]; ps = Params->colidx[p][s]; if((rq >= Params->rowtot[rq_sym]) || (ps >= Params->coltot[ps_sym])) idx_error("MP Params_make: rq, ps", p,q,r,s,rq,ps,rq_sym,ps_sym,outfile); offset = bucket_offset[this_bucket][rq_sym]; File->matrix[rq_sym][rq-offset][ps] = value; } } if(perm_qs) { if(bucket_map[p][s] == this_bucket) { ps_sym = p_sym^s_sym; rq_sym = r_sym^q_sym; ps = Params->rowidx[p][s]; rq = Params->colidx[r][q]; if((ps >= Params->rowtot[ps_sym]) || (rq >= Params->coltot[rq_sym])) idx_error("MP Params_make: ps, rq", p,q,r,s,ps,rq,ps_sym,rq_sym,outfile); offset = bucket_offset[this_bucket][ps_sym]; File->matrix[ps_sym][ps-offset][rq] = value; } } if(perm_pr && perm_qs) { if(bucket_map[r][s] == this_bucket) { rs_sym = r_sym^s_sym; pq_sym = p_sym^q_sym; rs = Params->rowidx[r][s]; pq = Params->colidx[p][q]; if((rs >= Params->rowtot[rs_sym]) || (pq >= Params->coltot[pq_sym])) idx_error("MP Params_make: rs, pq", p,q,r,s,rs,pq,rs_sym,pq_sym,outfile); offset = bucket_offset[this_bucket][rs_sym]; File->matrix[rs_sym][rs-offset][pq] = value; } } if(perm_prqs) { if(bucket_map[q][p] == this_bucket) { qp_sym = q_sym^p_sym; sr_sym = s_sym^r_sym; qp = Params->rowidx[q][p]; sr = Params->colidx[s][r]; if((qp >= Params->rowtot[qp_sym]) || (sr >= Params->coltot[sr_sym])) idx_error("MP Params_make: qp, sr", p,q,r,s,qp,sr,qp_sym,sr_sym,outfile); offset = bucket_offset[this_bucket][qp_sym]; File->matrix[qp_sym][qp-offset][sr] = value; } if(perm_pr) { if(bucket_map[q][r] == this_bucket) { qr_sym = q_sym^r_sym; sp_sym = s_sym^p_sym; qr = Params->rowidx[q][r]; sp = Params->colidx[s][p]; if((qr >= Params->rowtot[qr_sym])||(sp >= Params->coltot[sp_sym])) idx_error("MP Params_make: qr, sp", p,q,r,s,qr,sp,qr_sym,sp_sym, outfile); offset = bucket_offset[this_bucket][qr_sym]; File->matrix[qr_sym][qr-offset][sp] = value; } } if(perm_qs) { if(bucket_map[s][p] == this_bucket) { sp_sym = s_sym^p_sym; qr_sym = q_sym^r_sym; sp = Params->rowidx[s][p]; qr = Params->colidx[q][r]; if((sp >= Params->rowtot[sp_sym])||(qr >= Params->coltot[qr_sym])) idx_error("MP Params_make: sp, qr", p,q,r,s,sp,qr,sp_sym,qr_sym, outfile); offset = bucket_offset[this_bucket][sp_sym]; File->matrix[sp_sym][sp-offset][qr] = value; } } if(perm_pr && perm_qs) { if(bucket_map[s][r] == this_bucket) { sr_sym = s_sym^r_sym; qp_sym = q_sym^p_sym; sr = Params->rowidx[s][r]; qp = Params->colidx[q][p]; if((sr >= Params->rowtot[sr_sym])||(qp >= Params->coltot[qp_sym])) idx_error("MP Params_make: sr, qp", p,q,r,s,sr,qp,sr_sym,qp_sym, outfile); offset = bucket_offset[this_bucket][sr_sym]; File->matrix[sr_sym][sr-offset][qp] = value; } } } } }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/idx_permute_presort.cc����������������������������������������������������������0000644�0001015�0000765�00000003506�11112564564�017460� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libiwl/iwl.h> #include <libdpd/dpd.h> namespace psi { namespace ccsort { void idx_error(const char *message, int p, int q, int r, int s, int pq, int rs, int pq_sym, int rs_sym, FILE *outfile); void idx_permute_presort(dpdfile4 *File, int this_bucket, int **bucket_map, int **bucket_offset, int p, int q, int r, int s, double value, FILE *outfile) { int p_sym, q_sym, r_sym, s_sym; int pq_sym, rs_sym, rq_sym, ps_sym, qp_sym, sp_sym, sr_sym, qr_sym; int pq, rs, rq, ps, qp, sr, qr, sp; int perm_pq, perm_rs; dpdparams4 *Params; int offset; Params = File->params; perm_pq = Params->perm_pq; perm_rs = Params->perm_rs; /* Get the orbital symmetries */ p_sym = Params->psym[p]; q_sym = Params->qsym[q]; r_sym = Params->rsym[r]; s_sym = Params->ssym[s]; pq_sym = p_sym^q_sym; rs_sym = r_sym^s_sym; /* The allowed (Mulliken) permutations are very simple in this case */ if(bucket_map[p][q] == this_bucket) { /* Get the row and column indices and assign the value */ pq = Params->rowidx[p][q]; rs = Params->colidx[r][s]; if((pq >= Params->rowtot[pq_sym]) || (rs >= Params->coltot[rs_sym])) idx_error("MP Params_make: pq, rs", p,q,r,s,pq,rs,pq_sym,rs_sym,outfile); offset = bucket_offset[this_bucket][pq_sym]; File->matrix[pq_sym][pq-offset][rs] = value; } if(bucket_map[r][s] == this_bucket) { rs = Params->rowidx[r][s]; qp = Params->colidx[p][q]; if((rs >= Params->rowtot[rs_sym])||(pq >= Params->coltot[pq_sym])) idx_error("MP Params_make: rs, pq", p,q,r,s,rs,pq,rs_sym,pq_sym, outfile); offset = bucket_offset[this_bucket][rs_sym]; File->matrix[rs_sym][rs-offset][pq] = value; } } }} // namespace psi::ccsort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/integrals.tex�������������������������������������������������������������������0000644�0001015�0000765�00000032421�10204673475�015561� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%\documentstyle[aps,preprint]{revtex4} \documentclass[12pt]{revtex4} \pagestyle{empty} \def\ket#1{$| #1 \rangle$} \def\bra#1{$\langle #1 |$} \def\Int#1#2{\bra{#1}$ #2 \rangle$} \def\AInt#1#2{\bra{#1}\ket{#2}} \def\alp#1{$#1$} \def\bet#1{$\overline{#1}$} \begin{document} \begin{table} \squeezetable \caption{Sorted integral and cluster amplitude lists for RHF and ROHF cases. The storage of each integral type is given in parentheses, if necessary. Pair indices are given for the DPD ordering: occupied and virtual.} \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Integral type & pq & rs & LIBPSIO Keyword \\ \hline {\tt CC\_AINTS} & \Int{ij}{kl} & 0 & 0 & ``A \Int{ij}{kl}'' \\ \hline {\tt CC\_BINTS} & \Int{ab}{cd} & 5 & 5 & ``B \Int{ab}{cd}'' \\ &\AInt{ab}{cd} (a$>$b,c$>$d) & 7 & 7 & ``B \AInt{ab}{cd} (a$>$b,c$>$d)'' \\ \hline {\tt CC\_CINTS} & \Int{ia}{jb} & 10 & 10 & ``C \Int{ia}{jb}'' \\ &\AInt{ia}{jb} & 10 & 10 & ``C \AInt{ia}{jb}'' \\ & \Int{ia}{jb} (bi,ja) & 11 & 10 & ``C \Int{ia}{jb} (bi,ja)'' \\ & \Int{ia}{jb} (ia,bj) & 10 & 11 & ``C \Int{ia}{jb} (ia,bj)'' \\ &\AInt{ia}{jb} (bi,ja) & 11 & 10 & ``C \AInt{ia}{jb} (bi,ja)'' \\ &\AInt{ia}{jb} (ia,bj) & 10 & 11 & ``C \AInt{ia}{jb} (ia,bj)'' \\ \hline {\tt CC\_DINTS} & \Int{ij}{ab} & 0 & 5 & ``D \Int{ij}{ab}'' \\ &\AInt{ij}{ab} (i$>$j,a$>$b) & 2 & 7 & ``D \AInt{ij}{ab} (i$>$j,a$>$b)'' \\ &\AInt{ij}{ab} (i$>$j,ab) & 2 & 5 & ``D \AInt{ij}{ab} (i$>$j,ab)'' \\ &\AInt{ij}{ab} (ij,a$>$b) & 0 & 7 & ``D \AInt{ij}{ab} (ij,a$>$b)'' \\ & \Int{ij}{ab} (ia,jb) & 10 & 10 & ``D \AInt{ij}{ab} (ia,jb)'' \\ & \Int{ij}{ab} (ai,jb) & 11 & 10 & ``D \AInt{ij}{ab} (ai,jb)'' \\ & \Int{ij}{ab} (ib,ja) & 10 & 10 & ``D \AInt{ij}{ab} (ib,ja)'' \\ & \Int{ij}{ab} (ib,aj) & 10 & 10 & ``D \AInt{ij}{ab} (ib,aj)'' \\ & \Int{ij}{ab} (ia,bj) & 10 & 11 & ``D \AInt{ij}{ab} (ia,bj)'' \\ &\AInt{ij}{ab} (ia,jb) & 10 & 10 & ``D \AInt{ij}{ab} (ia,jb)'' \\ &\AInt{ij}{ab} (ia,bj) & 10 & 11 & ``D \AInt{ij}{ab} (ia,bj)'' \\ &2\AInt{ij}{ab} - \AInt{ij}{ba} & 0 & 5 & ``D 2\AInt{ij}{ab} - \AInt{ij}{ba}'' \\ &2\AInt{ij}{ab} - \AInt{ij}{ba} (ia,jb) & 10 & 10 & ``D 2\AInt{ij}{ab} - \AInt{ij}{ba} (ia,jb)'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Integral type & pq & rs & LIBPSIO Keyword \\ \hline {\tt CC\_EINTS} & \Int{ai}{jk} & 11 & 0 & ``E \Int{ai}{jk}'' \\ & \Int{ij}{ka} & 0 & 10 & ``E \Int{ij}{ka}'' \\ &\AInt{ij}{ka} (i$>$j,ka) & 2 & 10 & ``E \AInt{ij}{ka} (i$>$j,ka)'' \\ &\AInt{ij}{ka} (i$>$j,ak) & 2 & 11 & ``E \AInt{ij}{ka} (i$>$j,ak)'' \\ & \Int{ij}{ka} (ij,ak) & 0 & 11 & ``E \Int{ij}{ka} (ij,ak)'' \\ & \Int{ia}{jk} & 10 & 0 & ``E \Int{ia}{jk}'' \\ & \Int{ij}{ak} & 0 & 11 & ``E \Int{ij}{ak}'' \\ & \Int{ai}{kj} & 11 & 0 & ``E \Int{ai}{kj}'' \\ &2\AInt{ai}{jk} - \AInt{ai}{kj} & 11 & 0 & ``E 2\AInt{ai}{jk} - \AInt{ai}{kj}'' \\ \hline {\tt CC\_FINTS} & \Int{ia}{bc} & 10 & 5 & ``F \Int{ia}{bc}'' \\ & \Int{ia}{cb} & 10 & 5 & ``F \Int{ia}{cb}'' \\ & \Int{ai}{bc} & 11 & 5 & ``F \Int{ai}{bc}'' \\ &2\Int{ia}{bc} - \Int{ia}{cb} & 10 & 5 & ``2\Int{ia}{bc} - \Int{ia}{cb}'' \\ & \Int{Ab}{Ci} & 28 & 26 & ``F \Int{Ab}{Ci}'' \\ & \Int{iA}{bC} & 27 & 29 & ``F \Int{iA}{bC}'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \caption{Sorted integral and cluster amplitude lists for UHF cases. Capital letters refer to alpha spin-orbitals and lower-case letters to beta spin-orbitals. The storage of each integral type is given in parentheses, if necessary. Pair indices are given for the DPD ordering: $\alpha$-occupied, $\alpha$-virtual, $\beta$-occupied, $\beta$-virtual.} \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Integral type & pq & rs & LIBPSIO Keyword \\ \hline {\tt CC\_AINTS} & \Int{IJ}{KL} & 0 & 0 & ``A \Int{IJ}{KL}'' \\ & \Int{ij}{kl} & 10 & 10 & ``A \Int{ij}{kl}'' \\ & \Int{Ij}{Kl} & 22 & 22 & ``A \Int{Ij}{Kl}'' \\ \hline {\tt CC\_BINTS} & \Int{AB}{CD} & 5 & 5 & ``B \Int{AB}{CD}'' \\ & \Int{ab}{cd} & 15 & 15 & ``B \Int{ab}{cd}'' \\ & \Int{Ab}{Cd} & 28 & 28 & ``B \Int{Ab}{Cd}'' \\ \hline {\tt CC\_CINTS} & \Int{IA}{JB} & 20 & 20 & ``C \Int{IA}{JB}'' \\ & \AInt{IA}{JB} & 20 & 20 & ``C \AInt{IA}{JB}'' \\ & \AInt{IA}{JB} (IA,BJ) & 20 & 21 & ``C \AInt{IA}{JB} (IA,BJ)'' \\ & \Int{ia}{jb} & 30 & 30 & ``C \Int{ia}{jb}'' \\ & \AInt{ia}{jb} & 30 & 30 & ``C \AInt{ia}{jb}'' \\ & \AInt{ia}{jb} (ia,bj) & 30 & 31 & ``C \AInt{ia}{jb} (ia,bj)'' \\ & \Int{Ia}{Jb} & 24 & 24 & ``C \Int{Ia}{Jb}'' \\ & \Int{Ia}{Jb} (Ia,bJ) & 24 & 25 & ``C \Int{Ia}{Jb} (Ia,bJ)'' \\ & \Int{Ai}{Bj} & 26 & 26 & ``C \Int{Ai}{Bj}'' \\ & \Int{iA}{jB} & 27 & 27 & ``C \Int{iA}{jB}'' \\ & \Int{Ai}{Bj} (iA,Bj) & 27 & 26 & ``C \Int{Ai}{Bj}'' \\ \hline {\tt CC\_DINTS} & \Int{IJ}{AB} & 0 & 5 & ``D \Int{IJ}{AB}'' \\ &\AInt{IJ}{AB} (I$>$J,A$>$B) & 2 & 7 & ``D \AInt{IJ}{AB} (I$>$J,A$>$B)'' \\ &\AInt{IJ}{AB} (I$>$J,AB) & 2 & 5 & ``D \AInt{IJ}{AB} (I$>$J,AB)''\\ &\AInt{IJ}{AB} (IJ,A$>$B) & 0 & 7 & ``D \AInt{IJ}{AB} (IJ,A$>$B)''\\ &\AInt{IJ}{AB} & 0 & 5 & ``D \AInt{IJ}{AB}'' \\ &\AInt{IJ}{AB} (IA,JB) & 20 & 20 & ``D \AInt{IJ}{AB} (IA,JB)'' \\ &\AInt{IJ}{AB} (IA,BJ) & 20 & 21 & ``D \AInt{IJ}{AB} (IA,BJ)''\\ & \Int{ij}{ab} & 10 & 15 & ``D \Int{ij}{ab}''\\ &\AInt{ij}{ab} (i$>$j,a$>$b) & 12 & 17 & ``D \AInt{ij}{ab} (i$>$j,a$>$b)'' \\ &\AInt{ij}{ab} (i$>$j,ab) & 12 & 15 & ``D \AInt{ij}{ab} (i$>$j,ab)''\\ &\AInt{ij}{ab} (ij,a$>$b) & 10 & 17 & ``D \AInt{ij}{ab} (ij,a$>$b)''\\ &\AInt{ij}{ab} & 10 & 15 & ``D \AInt{ij}{ab}'' \\ &\AInt{ij}{ab} (ia,jb) & 30 & 30 & ``D \AInt{ij}{ab} (ia,jb)'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Integral type & pq & rs & LIBPSIO Keyword \\ \hline {\tt CC\_DINTS} &\AInt{ij}{ab} (ia,bj) & 30 & 31 & ``D \AInt{ij}{ab} (ia,bj)''\\ & \Int{iJ}{aB} & 23 & 29 & ``D \Int{iJ}{aB}'' \\ & \Int{Ij}{Ab} & 22 & 28 & ``D \Int{Ij}{Ab}'' \\ & \Int{Ij}{Ab} (Ib,Aj) & 24 & 26 & ``D \Int{Ij}{Ab} (Ib,Aj)'' \\ & \Int{Ij}{Ab} (IA,jb) & 20 & 30 & ``D \Int{Ij}{Ab} (IA,jb)''\\ & \Int{Ij}{Ab} (ia,JB) & 30 & 20 & ``D \Int{Ij}{Ab} (ia,JB)''\\ & \Int{Ij}{Ab} (IA,bj) & 20 & 31 & ``D \Int{Ij}{Ab} (IA,bj)''\\ & \Int{Ij}{Ab} (ia,BJ) & 30 & 21 & ``D \Int{Ij}{Ab} (ia,BJ)''\\ & \Int{Ij}{Ab} (iB,aJ) & 27 & 25 & ``D \Int{Ij}{Ab} (iB,aJ)''\\ & \Int{Ij}{Ab} (Ib,jA) & 24 & 27 & ``D \Int{Ij}{Ab} (Ib,jA)''\\ & \Int{iJ}{aB} & 23 & 29 & ``D \Int{iJ}{aB}'' \\ & \Int{iJ}{aB} (iB,aJ) & 27 & 25 & ``D \Int{iJ}{aB} (iB,aJ)'' \\ & \Int{iJ}{aB} (iB,Ja) & 27 & 24 & ``D \Int{iJ}{aB} (iB,Ja)'' \\ \hline {\tt CC\_EINTS} & \Int{AI}{JK} & 21 & 0 & ``E \Int{AI}{JK}'' \\ & \Int{IJ}{KA} & 0 & 20 & ``E \Int{IJ}{KA}'' \\ &\AInt{IJ}{KA} (I$>$J,KA) & 2 & 20 & ``E \AInt{IJ}{KA} (I$>$J,KA)'' \\ &\AInt{IJ}{KA} (I$>$J,AK) & 2 & 21 & ``E \AInt{IJ}{KA} (I$>$J,AK)'' \\ & \Int{ai}{jk} & 31 & 10 & ``E \Int{ai}{jk}'' \\ & \Int{ij}{ka} & 10 & 30 & ``E \Int{ij}{ka}'' \\ &\AInt{ij}{ka} (i$>$j,ka) & 12 & 30 & ``E \AInt{ij}{ka} (i$>$j,ka)'' \\ &\AInt{ij}{ka} (i$>$j,ak) & 12 & 31 & ``E \AInt{ij}{ka} (i$>$j,ak)'' \\ & \Int{Ai}{Jk} & 26 & 22 & ``E \Int{Ai}{Jk}'' \\ & \Int{Ij}{Ka} & 22 & 24 & ``E \Int{Ij}{Ka}'' \\ & \Int{iJ}{kA} & 23 & 27 & ``E \Int{iJ}{kA}'' \\ & \Int{Ij}{Ak} & 22 & 26 & ``E \Int{Ij}{Ak}'' \\ & \Int{iJ}{aK} & 23 & 25 & ``E \Int{iJ}{aK}'' \\ & \Int{Ia}{Jk} & 24 & 22 & ``E \Int{Ia}{Jk}'' \\ \hline {\tt CC\_FINTS} & \Int{IA}{BC} & 20 & 5 & ``F \Int{IA}{BC}'' \\ & \Int{AI}{BC} & 21 & 5 & ``F \Int{AI}{BC}'' \\ & \Int{ia}{bc} & 30 & 15 & ``F \Int{ia}{bc}'' \\ & \Int{ai}{bc} & 31 & 15 & ``F \Int{ai}{bc}'' \\ & \Int{Ia}{Bc} & 24 & 28 & ``F \Int{Ia}{Bc}'' \\ & \Int{aI}{bC} & 25 & 29 & ``F \Int{aI}{bC}'' \\ & \Int{Ab}{Ci} & 28 & 26 & ``F \Int{Ab}{Ci}'' \\ & \Int{Ai}{Bc} & 26 & 28 & ``F \Int{Ai}{Bc}'' \\ & \Int{iA}{bC} & 27 & 29 & ``F \Int{iA}{bC}'' \\ \hline \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Item Type & p & q & LIBPSIO Keyword \\ \hline {\tt CC\_TAMPS} & T2(IJ,AB) (I$>$J,A$>$B) & 2 & 7 & ``tIJAB'' \\ & T2(IJ,AB) (IA,JB) & 20 & 20 & ``tIAJB'' \\ & T2(ij,ab) (i$>$j,a$>$b) & 12 & 17 & ``tijab'' \\ & T2(ij,ab) (ia,jb) & 30 & 30 & ``tiajb'' \\ & T2(Ij,Ab) (Ij,Ab) & 22 & 28 & ``tIjAb'' \\ & T2(Ij,Ab) (IA,jb) & 20 & 30 & ``tIAjb'' \\ & T2(iJ,aB) (ia,JB) & 30 & 20 & ``tiaJB'' \\ & T2(Ij,Ab) (Ib,jA) & 24 & 27 & ``tIbjA'' \\ & T2(iJ,aB) (iB,Ja) & 27 & 24 & ``tiBJa'' \\ & T2(iJ,aB) (iJ,aB) & 23 & 29 & ``tiJaB'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \caption{One electron integrals for UHF cases. Hamiltonian and diagonal fock matrix elements and denominators for t amplitudes. Capital letters refer to alpha spin-orbitals and lower-case letters to beta spin-orbitals.} \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Item Type & p & q & LIBPSIO Keyword \\ \hline {\tt CC\_OEI} &h$_{IJ}$ & 0 & 0 & ``h(I,J)'' \\ &h$_{ij}$ & 2 & 2 & ``h(i,j)'' \\ &h$_{AB}$ & 1 & 1 & ``h(A,B)'' \\ &h$_{ab}$ & 3 & 3 & ``h(a,b)'' \\ &h$_{IA}$ & 0 & 1 & ``h(I,A)'' \\ &h$_{ia}$ & 0 & 2 & ``h(i,a)'' \\ &f$_{IJ}$ & 0 & 0 & ``fIJ'' \\ &f$_{ij}$ & 2 & 2 & ``fij'' \\ &f$_{AB}$ & 1 & 1 & ``fAB'' \\ &f$_{ab}$ & 3 & 3 & ``fab'' \\ &f$_{IA}$ & 0 & 1 & ``fIA'' \\ &f$_{ia}$ & 2 & 3 & ``fia'' \\ &D$_{IA}$ & 0 & 1 & ``dIA'' \\ &D$_{ia}$ & 2 & 3 & ``dia'' \\ &D$_{IJAB}$ & 1 & 6 & ``dIJAB'' \\ &D$_{ijab}$ & 11 & 16 & ``dijab'' \\ &D$_{IjAb}$ & 22 & 28 & ``dIjAb'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \caption{One electron integrals for RHF and ROHF cases. Diagonal fock matrix elements and denominators for t amplitudes. Capital letters refer to alpha spin-orbitals and lower-case letters to beta spin-orbitals.} \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Item Type & p & q & LIBPSIO Keyword \\ \hline {\tt CC\_OEI} &h$_{ij}$ & 0 & 0 & ``h(i,j)'' \\ &h$_{ab}$ & 1 & 1 & ``h(a,b)'' \\ &h$_{ia}$ & 0 & 1 & ``h(i,a)'' \\ &f$_{IJ}$ & 0 & 0 & ``fIJ'' \\ &f$_{ij}$ & 0 & 0 & ``fij'' \\ &f$_{AB}$ & 1 & 1 & ``fAB'' \\ &f$_{ab}$ & 1 & 1 & ``fab'' \\ &D$_{IA}$ & 0 & 1 & ``dIA'' \\ &D$_{ia}$ & 0 & 1 & ``dia'' \\ &D$_{IJAB}$ & 1 & 6 & ``dIJAB'' \\ &D$_{ijab}$ & 1 & 6 & ``dijab'' \\ &D$_{IjAb}$ & 0 & 5 & ``dIjAb'' \\ \end{tabular} \end{center} \end{table} \begin{table} \squeezetable \caption{X-, Y- and Z-components of the dipole moment.} \begin{center} \renewcommand{\arraystretch}{0.95} \begin{tabular}{llccl} File macro & Item Type & p & q & LIBPSIO Keyword \\ \hline {\tt CC\_OEI} &$\mu_x$(IJ) & 0 & 0 & ``Mu\_X\_IJ'' \\ &$\mu_x$(AB) & 1 & 1 & ``Mu\_X\_AB'' \\ &$\mu_x$(IA) & 0 & 1 & ``Mu\_X\_IA'' \\ &$\mu_x$(AI) & 1 & 0 & ``Mu\_X\_AI'' \\ &$\mu_y$(IJ) & 0 & 0 & ``Mu\_Y\_IJ'' \\ &$\mu_y$(AB) & 1 & 1 & ``Mu\_Y\_AB'' \\ &$\mu_y$(IA) & 0 & 1 & ``Mu\_Y\_IA'' \\ &$\mu_y$(AI) & 1 & 0 & ``Mu\_Y\_AI'' \\ &$\mu_z$(IJ) & 0 & 0 & ``Mu\_Z\_IJ'' \\ &$\mu_z$(AB) & 1 & 1 & ``Mu\_Z\_AB'' \\ &$\mu_z$(IA) & 0 & 1 & ``Mu\_Z\_IA'' \\ &$\mu_z$(AI) & 1 & 0 & ``Mu\_Z\_AI'' \\ \end{tabular} \end{center} \end{table} \end{document} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/local.cc������������������������������������������������������������������������0000644�0001015�0000765�00000076313�11112564564�014455� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libint/libint.h> #include <libchkpt/chkpt.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <psifiles.h> #include "Local.h" #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void domain_print(int, int, int *, int **, double *); void transpert(const char *); void sort_pert(const char *, double **, double **, double **, int, int, int); void build_F_RHF(double); void build_B_RHF(double); void cphf_F(const char *); void cphf_B(const char *); void local_polar(const char*, int **, int *, int, int *, int *); void local_magnetic(const char*, int **, int *, int, int *, int *); void local_init(void) { int i, j, k, ij, stat, a, b, l, I, L; int nmo, nso, nocc, nocc_all, nvir, noei, nirreps, nfzc; double domain_tot, domain_ave; double **C; /* AO -> localized MO transformation matrix */ double **Ci; /* localized MO -> AO transformation matrix */ double **D; /* 1/2 SCF closed-shell density matrix (AO) */ double **Rt, **Rt_full; /* Projected, redundant virtual transform (R-tilde) */ double **S; /* AO overlap */ double **St; /* Projected virtual overlap */ double **Xt; /* Projected, non-redundant virtual transform (X-tilde) */ double ***V; /* MO -> projected, redundant virtual transform */ double **Fmo;/* MO basis Fock matrix */ double **F; /* AO basis Fock matrix */ double **Ft; /* Projected, redundant virtual Fock matrix */ double **Fbar; /* Projected, non-redundant virtual Fock matrix */ double ***W; /* Transformation matrix from tilde -> bar for each ij pair*/ double *eps_occ; /* occupied orbital energies for local denominators */ double **eps_vir; /* virtual orbital energies for local denominators */ double **X, **Y; double *evals, **evecs; double *eps_all; /* All MO energies */ dpdfile2 fock; int natom, atom, am, offset, nshell, shell_length, next_atom; int row, col, max, m, errcod, cnt; int *rank, *boolean, *ipiv; int *l_length, *aostart, *aostop, *ao2atom; int *stype, *snuc; int **domain, *domain_len, **pairdomain, *pairdom_len, *pairdom_nrlen; int **domain_bp, *domain_len_bp; int *weak_pairs; double *fR, *charge, *SR, *Z, tmp, *ss; int print_test, num_entries, entry_len, orbital; int t1_length, t2_length, puream, weak; double norm; int num_zero; double **RS; chkpt_init(PSIO_OPEN_OLD); C = chkpt_rd_scf(); natom = chkpt_rd_natom(); nshell = chkpt_rd_nshell(); puream = chkpt_rd_puream(); eps_all = chkpt_rd_evals(); stype = chkpt_rd_stype(); snuc = chkpt_rd_snuc(); chkpt_close(); timer_on("Local"); /* C1 symmetry only */ nirreps = moinfo.nirreps; if(nirreps != 1) { fprintf(outfile, "\nError: localization must use C1 symmetry.\n"); exit(PSI_RETURN_FAILURE); } nso = moinfo.nso; nmo = moinfo.nmo; /* should be the same as nso */ if(nmo != nso) { fprintf(outfile, "\nError: NMO != NSO! %d != %d\n", nmo, nso); exit(PSI_RETURN_FAILURE); } nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ nfzc = moinfo.frdocc[0]; /* frozen doubly occupied orbitals */ nocc_all = nocc + nfzc; /* all doubly occupied orbitals */ nvir = moinfo.virtpi[0]; /* active virtual orbitals */ local.nso = nso; local.natom = natom; local.nocc = nocc; local.nvir = nvir; /* A couple of scratch arrays */ X = block_matrix(nso, nso); Y = block_matrix(nso, nso); /* Invert C */ Ci = block_matrix(nso, nso); for(i=0; i < nso; i++) for(j=0; j < nso; j++) Y[i][j] = C[i][j]; invert_matrix(C, Ci, nso, outfile); for(i=0; i < nso; i++) for(j=0; j < nso; j++) C[i][j] = Y[i][j]; /* Get the overlap integrals -- these should be identical to AO S */ noei = nso*(nso+1)/2; ss = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_SO_S,ss,noei,0,0,outfile); S = block_matrix(nso,nso); for(i=0,ij=0; i < nso; i++) for(j=0; j <= i; j++,ij++) { S[i][j] = S[j][i] = ss[ij]; } free(ss); /* fprintf(outfile, "\n\tAO Overlap (S)\n"); print_mat(S, nso, nso, outfile); */ /* Build the SCF closed-shell density matrix/2 */ D = block_matrix(nso,nso); for(i=0; i < nso; i++) for(j=0; j < nso; j++) for(k=0; k < nocc_all; k++) D[i][j] += C[i][k] * C[j][k]; /* fprintf(outfile, "\n\tAO-basis SCF Density (D):\n"); print_mat(D, nso, nso, outfile); */ /* Compute the length of each AM block */ l_length = init_int_array(LIBINT_MAX_AM); l_length[0] = 1; for(l=1; l < LIBINT_MAX_AM; l++) { if(puream) l_length[l] = 2 * l + 1; else l_length[l] = l_length[l-1] + l + 1; } /* Set up the atom->AO and AO->atom lookups */ aostart = init_int_array(natom); aostop = init_int_array(natom); for(i=0,atom=-1,offset=0; i<nshell; i++) { am = stype[i] - 1; shell_length = l_length[am]; if(atom != snuc[i] - 1) { if(atom != -1) aostop[atom] = offset-1; atom = snuc[i]-1; aostart[atom] = offset; } offset += shell_length; } aostop[atom] = offset-1; ao2atom = init_int_array(nso); for(i=0; i < natom; i++) for(j=aostart[i]; j < aostop[i]; j++) ao2atom[j] = i; free(stype); free(snuc); /************* Build the orbital domains ************/ domain = init_int_matrix(nocc, natom); domain_len = init_int_array(nocc); domain_bp = init_int_matrix(nocc, natom); domain_len_bp = init_int_array(nocc); charge = init_array(natom); rank = init_int_array(natom); boolean = init_int_array(natom); SR = init_array(nso); Z = init_array(nso); ipiv = init_int_array(nso); fR = init_array(nocc); for(i=nfzc; i < nocc_all; i++) { /* Compute the contribution of each atom to this orbital's charge/population */ for(j=0; j < natom; j++) { charge[j] = 0.0; for(k=aostart[j]; k <= aostop[j]; k++) { tmp = 0.0; for(l=0; l < nso; l++) tmp += S[k][l] * C[l][i]; tmp *= C[k][i]; charge[j] += tmp; } } /* Rank the atomic contributions to the orbital's charge */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(charge[j]) >= fabs(charge[max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(charge[k]) >= fabs(charge[max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Build the orbital's domain starting in order of decreasing charge contribution */ for(j=0; j < nso; j++) { SR[j] = 0.0; for(k=0; k < nso; k++) SR[j] += S[j][k] * C[k][i]; } domain[i-nfzc][rank[0]] = 1; /* at least one atom must be in the domain */ domain_len[i-nfzc] = 1; fR[i-nfzc] = 1.0; next_atom = 1; while(fabs(fR[i-nfzc]) > local.cutoff) { /* Completeness check */ for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) { Z[row] = SR[k]; for(l=0,col=0; l < natom; l++) { if(domain[i-nfzc][l]) { for(m=aostart[l]; m <= aostop[l]; m++,col++) X[row][col] = S[k][m]; } } /* l */ } /* k */ } } /* j */ errcod = C_DGESV(row, 1, &(X[0][0]), nso, &(ipiv[0]), &(Z[0]), nso); if(errcod) { fprintf(outfile, "\nError in DGESV return in orbital domain construction.\n"); exit(PSI_RETURN_FAILURE); } fR[i-nfzc] = 1.0; for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) { for(l=0; l < nso; l++) fR[i-nfzc] -= Z[row] * S[k][l] * C[l][i]; } } } /* Augment the domain if necessary */ if(fabs(fR[i-nfzc]) > local.cutoff) { domain[i-nfzc][rank[next_atom++]] = 1; domain_len[i-nfzc]++; } } /* cutoff check */ } /* i */ for(i=0; i<nocc; i++) { domain_len_bp[i] = domain_len[i]; for(k=0; k<natom; k++) domain_bp[i][k] = domain[i][k]; } /* Print the orbital domains */ fprintf(outfile, "\n ****** Boughton-Pulay Occupied Orbital Domains ******\n"); domain_print(nocc, natom, domain_len_bp, domain_bp, fR); /* Identify and/or remove weak pairs -- using Bougton-Pulay domains */ weak_pairs = init_int_array(nocc*nocc); if(!strcmp(local.pairdef,"BP")) { fprintf(outfile, "\n"); for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) { weak = 1; for(k=0; k < natom; k++) if(domain[i][k] && domain[j][k]) weak = 0; if(weak && strcmp(local.weakp,"NONE")) { weak_pairs[ij] = 1; if(!strcmp(local.weakp,"MP2")) fprintf(outfile, "\tPair %d %d [%d] is weak and will be treated with MP2.\n", i, j, ij); else if(!strcmp(local.weakp,"NEGLECT")) { fprintf(outfile, "\tPair %d %d = [%d] is weak and will be deleted.\n", i, j, ij); } } else weak_pairs[ij] = 0; } } /* If this is a response calculation, augment domains using polarized orbitals */ fprintf(outfile, "\n"); if(local.domain_polar) { fprintf(outfile, "\tGenerating electric-field CPHF solutions for local-CC.\n"); fflush(outfile); transpert("Mu"); sort_pert("Mu", moinfo.MUX, moinfo.MUY, moinfo.MUZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); if(local.domain_sep) { /* Zero omega */ build_F_RHF(0); cphf_F("X"); local_polar("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_X (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Y"); local_polar("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Y (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Z"); local_polar("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Z (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } /* Positive omega */ build_F_RHF(params.omega[0]); cphf_F("X"); local_polar("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_X (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Y"); local_polar("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Y (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Z"); local_polar("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Z (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } /* Negative omega */ build_F_RHF(-params.omega[0]); cphf_F("X"); local_polar("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_X (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Y"); local_polar("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Y (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_F("Z"); local_polar("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nMu_Z (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } } else { build_F_RHF(0); cphf_F("X"); local_polar("X", domain, domain_len, natom, aostart, aostop); cphf_F("Y"); local_polar("Y", domain, domain_len, natom, aostart, aostop); cphf_F("Z"); local_polar("Z", domain, domain_len, natom, aostart, aostop); } } if(local.domain_mag) { fprintf(outfile, "\tGenerating magnetic-field CPHF solutions for local-CC.\n"); fflush(outfile); transpert("L"); sort_pert("L", moinfo.LX, moinfo.LY, moinfo.LZ, moinfo.irrep_x, moinfo.irrep_y, moinfo.irrep_z); if(local.domain_sep) { /* Zero omega */ build_B_RHF(0); cphf_B("X"); local_magnetic("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_X (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Y"); local_magnetic("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Y (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Z"); local_magnetic("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Z (%lf)\n", 0); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } /* Positive omega */ build_B_RHF(params.omega[0]); cphf_B("X"); local_magnetic("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_X (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Y"); local_magnetic("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Y (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Z"); local_magnetic("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Z (%lf)\n", params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } /* Negative omega */ build_B_RHF(-params.omega[0]); cphf_B("X"); local_magnetic("X", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_X (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Y"); local_magnetic("Y", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Y (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } cphf_B("Z"); local_magnetic("Z", domain, domain_len, natom, aostart, aostop); fprintf(outfile, "\nL_Z (%lf)\n", -params.omega[0]); domain_print(nocc, natom, domain_len, domain, fR); for(i=0; i<nocc; i++) { domain_len[i] = domain_len_bp[i]; for(k=0; k<natom; k++) domain[i][k] = domain_bp[i][k]; } } else { build_B_RHF(0); cphf_B("X"); local_magnetic("X", domain, domain_len, natom, aostart, aostop); cphf_B("Y"); local_magnetic("Y", domain, domain_len, natom, aostart, aostop); cphf_B("Z"); local_magnetic("Z", domain, domain_len, natom, aostart, aostop); } } /* Allow user input of selected domains */ if(ip_exist("DOMAINS",0)) { ip_count("DOMAINS", &num_entries,0); for(i=0; i < num_entries; i++) { ip_count("DOMAINS", &entry_len, 1, i); ip_data("DOMAINS", "%d", &orbital, 2, i, 0); /* Clear out the current domain for this orbital */ for(j=0; j < natom; j++) domain[orbital][j] = 0; domain_len[orbital] = 0; for(j=1; j < entry_len; j++) { errcod = ip_data("DOMAINS","%d", &atom,2,i,j); domain[orbital][atom] = 1; domain_len[orbital]++; } } } /* Recheck Completeness */ for(i=nfzc; i < nocc_all; i++) { /* Build the orbital's domain starting in order of decreasing charge contribution */ for(j=0; j < nso; j++) { SR[j] = 0.0; for(k=0; k < nso; k++) SR[j] += S[j][k] * C[k][i]; } for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) { Z[row] = SR[k]; for(l=0,col=0; l < natom; l++) { if(domain[i-nfzc][l]) { for(m=aostart[l]; m <= aostop[l]; m++,col++) X[row][col] = S[k][m]; } } /* l */ } /* k */ } } /* j */ errcod = C_DGESV(row, 1, &(X[0][0]), nso, &(ipiv[0]), &(Z[0]), nso); if(errcod) { fprintf(outfile, "\nError in DGESV return in orbital domain construction.\n"); exit(PSI_RETURN_FAILURE); } fR[i-nfzc] = 1.0; for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) { for(l=0; l < nso; l++) fR[i-nfzc] -= Z[row] * S[k][l] * C[l][i]; } } } } /* i */ /* Print the orbital domains */ fprintf(outfile, "\n ****** Final Occupied Orbital Domains ******\n"); if(!local.domain_sep) domain_print(nocc, natom, domain_len, domain, fR); /* Build the pair domains */ pairdomain = init_int_matrix(nocc*nocc,natom); pairdom_len = init_int_array(nocc*nocc); for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) for(k=0; k < natom; k++) { if(domain[i][k] || domain[j][k]) { pairdomain[ij][k] = 1; pairdom_len[ij] += aostop[k] - aostart[k] + 1; } } /* Identify and/or remove weak pairs -- for CPHF "response" domains */ if(local.domain_polar || local.domain_mag || ip_exist("DOMAINS",0)) { fprintf(outfile, "\n"); for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) { weak = 1; for(k=0; k < natom; k++) if(domain[i][k] && domain[j][k]) weak = 0; if(weak && strcmp(local.weakp,"NONE")) { weak_pairs[ij] = 1; if(!strcmp(local.weakp,"MP2")) fprintf(outfile, "\tPair %d %d [%d] is weak and will be treated with MP2.\n", i, j, ij); else if(!strcmp(local.weakp,"NEGLECT")) { fprintf(outfile, "\tPair %d %d = [%d] is weak and will be deleted.\n", i, j, ij); } } else weak_pairs[ij] = 0; } } /* Compute the total number of singles and doubles */ /* replacement code from TDC on 11-5-02 */ t1_length = t2_length = 0; for(i=0,ij=0; i < nocc; i++) { for(k=0; k < natom; k++) { if(domain[i][k]) for(a=aostart[k]; a <= aostop[k]; a++) t1_length++; } for(j=0; j < nocc; j++,ij++) { for(k=0; k < natom; k++) { for(l=0; l < natom; l++) { if(pairdomain[ij][k] && pairdomain[ij][l] && !weak_pairs[ij]) { for(a=aostart[k]; a <= aostop[k]; a++) for(b=aostart[l]; b <= aostop[l]; b++) t2_length++; } } } } } /* Print excitation space reduction info */ fprintf(outfile, "\n\tT1 Length = %d (local), %d (canonical)\n", t1_length, nocc*nvir); fprintf(outfile, "\tT2 Length = %d (local), %d (canonical)\n\n", t2_length, nocc*nocc*nvir*nvir); fflush(outfile); local.domain = domain; local.domain_len = domain_len; local.pairdomain = pairdomain; local.pairdom_len = pairdom_len; local.weak_pairs = weak_pairs; local.aostart = aostart; local.aostop = aostop; free_int_matrix(domain_bp); free(domain_len_bp); free(ao2atom); free(l_length); free(charge); free(rank); free(boolean); free(SR); free(Z); free(ipiv); free(fR); print_test = 0; ip_boolean("DOMAIN_PRINT",&(print_test),0); if(print_test) { fprintf(outfile, "Printing of orbital domains requested...exiting.\n\n"); exit(PSI_RETURN_FAILURE); } /************* Orbital Domains Complete ***************/ /* Compute the complete virtual space projector */ Rt_full = block_matrix(nso,nso); for(i=0; i < nso; i++) Rt_full[i][i] = 1.0; C_DGEMM('n','n',nso,nso,nso,-1.0,&(D[0][0]),nso,&(S[0][0]),nso, 1.0,&(Rt_full[0][0]),nso); /* fprintf(outfile, "\n\tVirtual-Space Projector (R-tilde):\n"); print_mat(Rt_full, nso, nso, stdout); */ /* Compute the norm of each PAO */ for(i=0; i < nso; i++) { norm = 0.0; for(j=0; j < nso; j++) { norm += Rt_full[j][i] * Rt_full[j][i]; } norm = sqrt(norm); if(norm < 0.2 && strcmp(local.freeze_core,"FALSE")) { fprintf(outfile, "\tNorm of orbital %4d = %20.12f...deleteing\n", i, norm); for(j=0; j < nso; j++) Rt_full[j][i] = 0.0; } } fprintf(outfile, "\n"); fflush(outfile); /* Grab the MO-basis Fock matrix */ Fmo = block_matrix(nso, nso); for(i=0; i < nfzc; i++) Fmo[i][i] = eps_all[i]; dpd_file2_init(&fock, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fock); dpd_file2_mat_rd(&fock); for(i=0; i < nocc; i++) for(j=0; j < nocc; j++) Fmo[i+nfzc][j+nfzc] = fock.matrix[0][i][j]; dpd_file2_mat_close(&fock); dpd_file2_close(&fock); dpd_file2_init(&fock, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fock); dpd_file2_mat_rd(&fock); for(i=0; i < nvir; i++) for(j=0; j < nvir; j++) Fmo[i+nfzc+nocc][j+nfzc+nocc] = fock.matrix[0][i][j]; dpd_file2_mat_close(&fock); dpd_file2_close(&fock); /* fprintf(outfile, "\n\tMO Basis Fock matrix:\n"); print_mat(Fmo, nso, nso, outfile); */ /* Build the AO-basis Fock matrix */ F = block_matrix(nso,nso); C_DGEMM('t','n',nso,nso,nso,1.0,&(Ci[0][0]),nso,&(Fmo[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('n','n',nso,nso,nso,1.0,&(X[0][0]),nso,&(Ci[0][0]),nso, 0.0,&(F[0][0]),nso); /* Build the occupied orbital energy list */ eps_occ = init_array(nocc); for(i=0;i < nocc; i++) eps_occ[i] = Fmo[i+nfzc][i+nfzc]; /* fprintf(outfile, "\n\tAO-Basis Fock Matrix:\n"); print_mat(Fmo, nso, nso, outfile); */ /* Compute R^+ S for virtual orbitals */ RS = block_matrix(nvir,nso); for(a=0; a < nvir; a++) for(i=0; i < nso; i++) X[i][a] = C[i][a+nocc_all]; C_DGEMM('t','n',nvir,nso,nso,1.0,&(X[0][0]),nso,&(S[0][0]),nso,0.0,&(RS[0][0]),nso); /* Build the virtual metric and W transforms for each pair domain */ Rt = block_matrix(nso, nso); W = (double ***) malloc(nocc * nocc * sizeof(double **)); V = (double ***) malloc(nocc * nocc * sizeof(double **)); eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); pairdom_nrlen = init_int_array(nocc * nocc); /* dimension of non-redundant basis */ num_zero = 0; for(ij=0; ij < nocc * nocc; ij++) { zero_mat(Rt, nso, nso); /* Build the virtual space projector for this pair */ for(k=0,L=0; k < natom; k++) { if(pairdomain[ij][k]) { for(l=aostart[k]; l <= aostop[k]; l++,L++) { for(m=0; m < nso; m++) { Rt[m][L] = Rt_full[m][l]; } } } } /* Compute the MO -> projected virtual transformation matrix */ V[ij] = block_matrix(nvir,pairdom_len[ij]); C_DGEMM('n','n',nvir,pairdom_len[ij],nso,1.0,&(RS[0][0]),nso,&(Rt[0][0]),nso,0.0, &(V[ij][0][0]),pairdom_len[ij]); /* fprintf(outfile, "\nV[%d]:\n", ij); fprintf(outfile, "======\n"); print_mat(V[ij], nvir, pairdom_len[ij], outfile); */ /* Virtual space metric */ St = block_matrix(pairdom_len[ij],pairdom_len[ij]); C_DGEMM('n','n',nso,pairdom_len[ij],nso,1.0,&(S[0][0]),nso,&(Rt[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('t','n',pairdom_len[ij],pairdom_len[ij],nso,1.0,&(Rt[0][0]),nso,&(X[0][0]),nso, 0.0,&(St[0][0]),pairdom_len[ij]); /* fprintf(outfile, "\n\tVirtual-Space Metric (S-tilde) for ij = %d:\n", ij); print_mat(St, pairdom_len[ij], pairdom_len[ij], outfile); */ /* Diagonalize metric */ evals = init_array(pairdom_len[ij]); evecs = block_matrix(pairdom_len[ij],pairdom_len[ij]); sq_rsp(pairdom_len[ij],pairdom_len[ij],St,evals,1,evecs,1e-12); /* Count the number of zero eigenvalues */ for(i=0,cnt=0; i < pairdom_len[ij]; i++) if(evals[i] <= 1e-6) cnt++; pairdom_nrlen[ij] = pairdom_len[ij]-cnt; /* fprintf(outfile, "\n\tS-tilde eigenvalues for ij = %d:\n", ij); for(i=0; i < pairdom_len[ij]; i++) fprintf(outfile, "\t%d %20.12f\n", i, evals[i]); fprintf(outfile, "\n\tS-tilde eigenvectors for ij = %d:\n", ij); print_mat(evecs,pairdom_len[ij],pairdom_len[ij],outfile); */ /* Build the projected, non-redundant transform (X-tilde) */ Xt = block_matrix(pairdom_len[ij],pairdom_nrlen[ij]); for(i=0,I=0; i < pairdom_len[ij]; i++) { if(evals[i] > 1e-6) { for(j=0; j < pairdom_len[ij]; j++) Xt[j][I] = evecs[j][i]/sqrt(evals[i]); I++; } else num_zero++; } /* fprintf(outfile, "\n\tTransform to non-redundant, projected virtuals (X-tilde) for ij = %d:\n", ij); print_mat(Xt, pairdom_len[ij], pairdom_nrlen[ij], outfile); */ free_block(evecs); free(evals); /* Build the projected (redundant) virtual Fock matrix */ Ft = block_matrix(pairdom_len[ij], pairdom_len[ij]); C_DGEMM('t','n',pairdom_len[ij],nso,nso,1.0,&(Rt[0][0]),nso,&(F[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('n','n',pairdom_len[ij],pairdom_len[ij],nso,1.0,&(X[0][0]),nso,&(Rt[0][0]),nso, 0.0,&(Ft[0][0]),pairdom_len[ij]); /* Project the Fock matrix into the non-redundant virtual space */ Fbar = block_matrix(pairdom_nrlen[ij],pairdom_nrlen[ij]); C_DGEMM('t','n',pairdom_nrlen[ij],pairdom_len[ij],pairdom_len[ij],1.0, &(Xt[0][0]),pairdom_nrlen[ij],&(Ft[0][0]),pairdom_len[ij],0.0,&(X[0][0]),nso); C_DGEMM('n','n',pairdom_nrlen[ij],pairdom_nrlen[ij],pairdom_len[ij],1.0, &(X[0][0]),nso,&(Xt[0][0]),pairdom_nrlen[ij],0.0,&(Fbar[0][0]),pairdom_nrlen[ij]); /* fprintf(outfile, "\n\tFbar matrix for ij = %d:\n", ij); print_mat(Fbar,pairdom_nrlen[ij],pairdom_nrlen[ij],outfile); */ /* Diagonalize Fbar */ evals = init_array(pairdom_nrlen[ij]); evecs = block_matrix(pairdom_nrlen[ij],pairdom_nrlen[ij]); sq_rsp(pairdom_nrlen[ij],pairdom_nrlen[ij],Fbar,evals,1,evecs,1e-12); /* fprintf(stdout, "\n\tFbar eigenvectors for ij = %d:\n", ij); print_mat(evecs,pairdom_nrlen[ij],pairdom_nrlen[ij],outfile); */ /* Finally, build the W matrix */ W[ij] = block_matrix(pairdom_len[ij],pairdom_nrlen[ij]); C_DGEMM('n','n',pairdom_len[ij],pairdom_nrlen[ij],pairdom_nrlen[ij],1.0, &(Xt[0][0]),pairdom_nrlen[ij],&(evecs[0][0]),pairdom_nrlen[ij], 0.0,&(W[ij][0][0]),pairdom_nrlen[ij]); /* fprintf(outfile, "\n\tW Transformation Matrix for ij = %d:\n", ij); print_mat(W[ij],pairdom_len[ij],pairdom_nrlen[ij],outfile); */ /* build the orbital energy list */ eps_vir[ij] = init_array(pairdom_nrlen[ij]); for(i=0; i < pairdom_nrlen[ij]; i++) eps_vir[ij][i] = evals[i]; /* virtual orbital energies */ /* fprintf(outfile, "\n\tVirtual orbital Energies for ij = %d:\n", ij); for(i=0; i < pairdom_nrlen[ij]; i++) fprintf(outfile, "%d %20.12f\n", i, eps_vir[ij][i]); */ free(evals); free_block(evecs); free_block(St); free_block(Xt); free_block(Fbar); free(Ft); } /* ij loop */ free_block(RS); free_block(F); free_block(Fmo); free_block(S); free_block(Rt_full); free_block(D); free_block(Ci); free_block(C); free_block(X); free_block(Y); local.W = W; local.V = V; local.eps_occ = eps_occ; local.eps_vir = eps_vir; local.pairdom_nrlen = pairdom_nrlen; local.weak_pair_energy = 0.0; fflush(outfile); timer_off("Local"); } void local_done(void) { int i, ij, h, nocc, nvir, natom; psio_address next; nocc = local.nocc; nvir = local.nvir; natom = local.natom; psio_write_entry(CC_INFO, "Local Cutoff", (char *) &local.cutoff, sizeof(double)); psio_write_entry(CC_INFO, "Local Domain Length", (char *) local.domain_len, nocc*sizeof(int)); psio_write_entry(CC_INFO, "Local Pair Domain Length", (char *) local.pairdom_len, nocc*nocc*sizeof(int)); psio_write_entry(CC_INFO, "Local Pair Domain NR Length", (char *) local.pairdom_nrlen, nocc*nocc*sizeof(int)); psio_write_entry(CC_INFO, "Local Weak Pairs", (char *) local.weak_pairs, nocc*nocc*sizeof(int)); psio_write_entry(CC_INFO, "Local Occupied Orbital Energies", (char *) local.eps_occ, nocc*sizeof(double)); next = PSIO_ZERO; for(i=0; i<nocc; i++) psio_write(CC_INFO, "Local Domains", (char *) local.domain[i], natom*sizeof(int), next, &next); next = PSIO_ZERO; for(ij=0; ij<nocc*nocc; ij++) psio_write(CC_INFO, "Local Pair Domains", (char *) local.pairdomain[ij], natom*sizeof(int), next, &next); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) psio_write(CC_INFO, "Local Virtual Orbital Energies", (char *) local.eps_vir[ij], local.pairdom_nrlen[ij]*sizeof(double), next, &next); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) psio_write(CC_INFO, "Local Transformation Matrix (W)", (char *) local.W[ij][0], local.pairdom_len[ij]*local.pairdom_nrlen[ij]*sizeof(double), next, &next); next = PSIO_ZERO; for(ij=0; ij < nocc*nocc; ij++) psio_write(CC_INFO, "Local Residual Vector (V)", (char *) local.V[ij][0], nvir*local.pairdom_len[ij]*sizeof(double), next, &next); if(params.ref == 0 || params.ref == 1) { for(h=0; h < moinfo.nirreps; h++) if(moinfo.sopi[h] && moinfo.virtpi[h]) free_block(moinfo.C[h]); free(moinfo.C); } free_int_matrix(local.pairdomain); free_int_matrix(local.domain); for(i=0; i < nocc*nocc; i++) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } free(local.W); free(local.V); free(local.eps_vir); free(local.aostart); free(local.aostop); free(local.eps_occ); free(local.domain_len); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/Local.h�������������������������������������������������������������������������0000644�0001015�0000765�00000001317�10754663017�014253� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ /*! \defgroup CCSORT ccsort: Sort integrals for Coupled-Cluster Modules */ namespace psi { namespace ccsort { struct Local { int natom; int nso; int nocc; int nvir; int domain_polar; int domain_mag; int domain_sep; int *aostart; int *aostop; int **domain; int **pairdomain; int *domain_len; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; char *method; char *weakp; int filter_singles; double weak_pair_energy; double cphf_cutoff; char *freeze_core; char *pairdef; }; }} // namespace psi::ccsort �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/local_magnetic.cc���������������������������������������������������������������0000644�0001015�0000765�00000022720�11112564564�016315� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void local_magnetic(const char *cart, int **domain, int *domain_len, int natom, int *aostart, int *aostop) { int i, j, ij, a, k, max, complete, *boolean, *rank; int nao, nso, nmo,noei_ao; double **TMP, *scratch, **X; double **L, **Z; double **C, **usotao; double mag, mag_i, mag_k, mag_k_check, value, *mag_mo, *mag_mo_check, **mag_atom; dpdfile2 U; psio_address next; nao = moinfo.nao; nso = moinfo.nso; nmo = moinfo.nmo; noei_ao = nao*(nao+1)/2; /* grab the occupied MOs */ next = PSIO_ZERO; C = block_matrix(moinfo.nso, moinfo.occpi[0]); psio_read(CC_INFO, "RHF/ROHF Active Occupied Orbitals", (char *) C[0], nso*moinfo.occpi[0]*sizeof(double), next, &next); /* grab the usotao matrix */ chkpt_init(PSIO_OPEN_OLD); usotao = chkpt_rd_usotao(); chkpt_close(); L = block_matrix(nso,moinfo.occpi[0]); TMP = block_matrix(nao,nao); X = block_matrix(nao, nao); scratch = init_array(noei_ao); Z = block_matrix(nso, moinfo.occpi[0]); mag_mo = init_array(moinfo.occpi[0]); mag_mo_check = init_array(moinfo.occpi[0]); mag_atom = block_matrix(moinfo.occpi[0],natom); boolean = init_int_array(natom); rank = (int *) malloc(natom * sizeof(int *)); if (!strcmp(cart, "X")) { iwl_rdone(PSIF_OEI, PSIF_AO_LX, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i<nao; i++) for(j=0; j<=i; j++,ij++) { TMP[i][j] = -0.5 * scratch[ij]; TMP[j][i] = 0.5 * scratch[ij]; } C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(L[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Ub_X_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); mag = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { mag_mo[i] = 0.0; mag_mo_check[i] = 0.0; for(k=0; k < natom; k++) { mag_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * L[a][i]; mag += value; mag_mo[i] += value; mag_mo_check[i] += fabs(value); mag_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's magizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(mag_atom[i][j]) >= fabs(mag_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(mag_atom[i][k]) >= fabs(mag_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_xx */ mag_i = 0.0; complete = 0; for(k=0; k < natom; k++) { mag_k = 0.0; mag_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * L[a][i]; mag_k += value; mag_k_check += fabs(value); } mag_k *= 4.0; mag_k_check *= 4.0; mag_i += mag_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((mag_mo_check[i]-mag_i)/mag_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(mag_atom[i][k]-mag_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } if (!strcmp(cart, "Y")) { iwl_rdone(PSIF_OEI, PSIF_AO_LY, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i<nao; i++) for(j=0; j<=i; j++,ij++) { TMP[i][j] = -0.5 * scratch[ij]; TMP[j][i] = 0.5 * scratch[ij]; } C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(L[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Ub_Y_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); mag = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { mag_mo_check[i] = 0.0; mag_mo[i] = 0.0; for(k=0; k < natom; k++) { mag_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * L[a][i]; mag += value; mag_mo[i] += value; mag_mo_check[i] += fabs(value); mag_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's magizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(mag_atom[i][j]) >= fabs(mag_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(mag_atom[i][k]) >= fabs(mag_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_yy */ mag_i = 0.0; complete = 0; for(k=0; k < natom; k++) { mag_k = 0.0; mag_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * L[a][i]; mag_k += value; mag_k_check += fabs(value); } mag_k *= 4.0; mag_k_check *= 4.0; mag_i += mag_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((mag_mo_check[i]-mag_i)/mag_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(mag_atom[i][k]-mag_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } if (!strcmp(cart, "Z")) { iwl_rdone(PSIF_OEI, PSIF_AO_LZ, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i<nao; i++) for(j=0; j<=i; j++,ij++) { TMP[i][j] = -0.5 * scratch[ij]; TMP[j][i] = 0.5 * scratch[ij]; } C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(L[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Ub_Z_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); mag = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { mag_mo[i] = 0.0; mag_mo_check[i] = 0.0; for(k=0; k < natom; k++) { mag_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * L[a][i]; mag += value; mag_mo[i] += value; mag_mo_check[i] += fabs(value); mag_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's magizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(mag_atom[i][j]) >= fabs(mag_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(mag_atom[i][k]) >= fabs(mag_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_zz */ mag_i = 0.0; complete = 0; for(k=0; k < natom; k++) { mag_k = 0.0; mag_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * L[a][i]; mag_k += value; mag_k_check += fabs(value); } mag_k *= 4.0; mag_k_check *= 4.0; mag_i += mag_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((mag_mo_check[i]-mag_i)/mag_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(mag_atom[i][k]-mag_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } free_block(TMP); free_block(L); free_block(mag_atom); free_block(C); free(boolean); free(mag_mo_check); free(mag_mo); free(rank); } }} // namespace psi::ccsort ������������������������������������������������psi3/src/bin/ccsort/local_polar.cc������������������������������������������������������������������0000644�0001015�0000765�00000023074�11112564564�015646� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libiwl/iwl.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "Local.h" #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void local_polar(const char *cart, int **domain, int *domain_len, int natom, int *aostart, int *aostop) { int i, j, ij, a, k, max, complete, *boolean, *rank; int nao, nso, nmo,noei_ao; double **TMP, *scratch, **X; double **MU, **Z; double **C, **usotao; double polar, polar_i, polar_k, polar_k_check, value, *polar_mo, *polar_mo_check, **polar_atom; dpdfile2 U; psio_address next; int stat; nao = moinfo.nao; nso = moinfo.nso; nmo = moinfo.nmo; noei_ao = nao*(nao+1)/2; /* grab the occupied MOs */ next = PSIO_ZERO; C = block_matrix(moinfo.nso, moinfo.occpi[0]); psio_read(CC_INFO, "RHF/ROHF Active Occupied Orbitals", (char *) C[0], nso*moinfo.occpi[0]*sizeof(double), next, &next); /* grab the usotao matrix */ chkpt_init(PSIO_OPEN_OLD); usotao = chkpt_rd_usotao(); chkpt_close(); MU = block_matrix(nso,moinfo.occpi[0]); TMP = block_matrix(nao,nao); X = block_matrix(nao, nao); scratch = init_array(noei_ao); Z = block_matrix(nso, moinfo.occpi[0]); polar_mo = init_array(moinfo.occpi[0]); polar_mo_check = init_array(moinfo.occpi[0]); polar_atom = block_matrix(moinfo.occpi[0],natom); boolean = init_int_array(natom); rank = (int *) malloc(natom * sizeof(int *)); if (!strcmp(cart,"X")) { stat = iwl_rdone(PSIF_OEI, PSIF_AO_MX, scratch, noei_ao, 0, 0, outfile); for(i=0, ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP[i][j] = TMP[j][i] = scratch[ij]; C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(MU[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Uf_X_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); polar = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { polar_mo[i] = 0.0; polar_mo_check[i] = 0.0; for(k=0; k < natom; k++) { polar_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * MU[a][i]; polar += value; polar_mo[i] += value; polar_mo_check[i] += fabs(value); polar_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's polarizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(polar_atom[i][j]) >= fabs(polar_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(polar_atom[i][k]) >= fabs(polar_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_xx */ polar_i = 0.0; complete = 0; for(k=0; k < natom; k++) { polar_k = 0.0; polar_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * MU[a][i]; polar_k += value; polar_k_check += fabs(value); } polar_k *= 4.0; polar_k_check *= 4.0; polar_i += polar_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((polar_mo_check[i]-polar_i)/polar_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(polar_atom[i][k]-polar_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } if (!strcmp(cart,"Y")) { stat = iwl_rdone(PSIF_OEI, PSIF_AO_MY, scratch, noei_ao, 0, 0, outfile); for(i=0, ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP[i][j] = TMP[j][i] = scratch[ij]; C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(MU[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Uf_Y_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); polar = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { polar_mo_check[i] = 0.0; polar_mo[i] = 0.0; for(k=0; k < natom; k++) { polar_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * MU[a][i]; polar += value; polar_mo[i] += value; polar_mo_check[i] += fabs(value); polar_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's polarizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(polar_atom[i][j]) >= fabs(polar_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(polar_atom[i][k]) >= fabs(polar_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_yy */ polar_i = 0.0; complete = 0; for(k=0; k < natom; k++) { polar_k = 0.0; polar_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * MU[a][i]; polar_k += value; polar_k_check += fabs(value); } polar_k *= 4.0; polar_k_check *= 4.0; polar_i += polar_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((polar_mo_check[i]-polar_i)/polar_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(polar_atom[i][k]-polar_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } if (!strcmp(cart,"Z")) { stat = iwl_rdone(PSIF_OEI, PSIF_AO_MZ, scratch, noei_ao, 0, 0, outfile); for(i=0, ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP[i][j] = TMP[j][i] = scratch[ij]; C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n', 'n', nso, moinfo.occpi[0], nso, 1, &(TMP[0][0]), nao, &(C[0][0]), moinfo.occpi[0], 0, &(MU[0][0]), moinfo.occpi[0]); dpd_file2_init(&U, CC_OEI, 0, 1, 0, "CPHF Uf_Z_AI"); dpd_file2_mat_init(&U); dpd_file2_mat_rd(&U); C_DGEMM('n', 'n', nso,moinfo.occpi[0],moinfo.virtpi[0], 1, &(moinfo.C[0][0][0]), moinfo.virtpi[0], &(U.matrix[0][0][0]), moinfo.occpi[0], 0, &(Z[0][0]), moinfo.occpi[0]); polar = 0.0; for(i=0; i < moinfo.occpi[0]; i++) { polar_mo[i] = 0.0; polar_mo_check[i] = 0.0; for(k=0; k < natom; k++) { polar_atom[i][k] = 0.0; for(a=aostart[k]; a <= aostop[k]; a++) { value = 4.0 * Z[a][i] * MU[a][i]; polar += value; polar_mo[i] += value; polar_mo_check[i] += fabs(value); polar_atom[i][k] += fabs(value); } } } for(i=0; i < moinfo.occpi[0]; i++) { /* Rank the atomic contributions to the orbital's polarizability */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(polar_atom[i][j]) >= fabs(polar_atom[i][max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(polar_atom[i][k]) >= fabs(polar_atom[i][max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Response domains for Alpha_zz */ polar_i = 0.0; complete = 0; for(k=0; k < natom; k++) { polar_k = 0.0; polar_k_check = 0.0; for(a=aostart[rank[k]]; a <= aostop[rank[k]]; a++) { value = Z[a][i] * MU[a][i]; polar_k += value; polar_k_check += fabs(value); } polar_k *= 4.0; polar_k_check *= 4.0; polar_i += polar_k_check; if (!complete) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } if(fabs((polar_mo_check[i]-polar_i)/polar_mo_check[i]) <= local.cphf_cutoff) { complete = 1; if(fabs(polar_atom[i][k]-polar_atom[i][k+1] <= 0.0001)) { if(!domain[i][rank[k]]) { domain[i][rank[k]] = 1; domain_len[i]++; } } } } } } dpd_file2_mat_close(&U); dpd_file2_close(&U); } free_block(TMP); free_block(MU); free_block(polar_atom); free_block(C); free(boolean); free(polar_mo_check); free(polar_mo); free(rank); } }} // namespace psi::ccsort ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/Makefile.in���������������������������������������������������������������������0000644�0001015�0000765�00000002220�10677061702�015104� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ b_sort.cc distribute.cc idx_error.cc \ build_B_RHF.cc domain_print.cc idx_permute.cc \ build_F_RHF.cc e_sort.cc idx_permute_multipass.cc \ build_abcd_packed.cc e_spinad.cc idx_permute_presort.cc \ c_sort.cc f_sort.cc local.cc \ cache.cc f_spinad.cc local_magnetic.cc \ cc_memcheck.cc file_build.cc local_polar.cc \ ccsort.cc file_build_multipass.cc scf_check.cc \ classify.cc file_build_presort.cc sort_oei.cc \ cphf_B.cc fock.cc sort_pert.cc \ cphf_F.cc sort_tei.cc \ d_sort.cc get_moinfo.cc \ d_spinad.cc get_params.cc transpert.cc \ denom.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/MOInfo.h������������������������������������������������������������������������0000644�0001015�0000765�00000017435�10754663017�014360� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ namespace psi { namespace ccsort { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; /* no. of symmetry orbitals */ int nao; /* no. of atomic orbitals */ int noeints; /* no. unique one-electron integrals (ex. fruocc) */ int iopen; /* 0=closed shell; >0=open shell */ int *sopi; /* no. of SOs per irrep */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep ex. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep ex. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ char **labels; /* irrep labels */ int nfzc; /* total no. of frozen core orbitals */ int nfzv; /* total no. of frozen virtual orbitals */ int nactive; /* total no. of active orbitals */ int *orbsym; /* QT-ordered orbital symmetry array */ double **PX; /* MO-basis x-linear momentum ints (Pitzer order) */ double **PY; /* MO-basis y-linear momentum ints (Pitzer order) */ double **PZ; /* MO-basis z-linear momentum ints (Pitzer order) */ int *pitzer2qt; /* Pitzer -> QT reordering array */ int *qt2pitzer; /* QT -> Pitzer reordering array */ int *pitz2qt; /* RHF/ROHF Pitzer->QT translation lookup */ int *pitz2qt_A; /* UHF Alpha Pitzer->QT translation lookup */ int *pitz2qt_B; /* UHF Beta Pitzer->QT translation lookup */ int *qt2pitz; /* RHF QT->Pitzer translation lookup */ int *qt2pitz_A; /* UHF Alpha QT->Pitzer translation */ int *qt2pitz_B; /* UHF Beta QT->Pitzer translation */ int *occ; /* boolean array for active occ. orbs. */ int *aocc; /* boolean array for active occ. orbs. */ int *bocc; /* boolean array for active occ. orbs. */ int *vir; /* boolean array for active virt. orbs. */ int *avir; /* boolean array for active virt. orbs. */ int *bvir; /* boolean array for active virt. orbs. */ int *socc; /* boolean array for active socc. orbs. */ int *all_occ; /* boolean array for occ. orbs. (in the full space) */ int *all_aocc; /* boolean array for occ. orbs. (in the full space) */ int *all_bocc; /* boolean array for occ. orbs. (in the full space) */ int *all_vir; /* boolean array for virt. orbs. (in the full space) */ int *all_avir; /* boolean array for virt. orbs. (in the full space) */ int *all_bvir; /* boolean array for virt. orbs. (in the full space) */ int *all_socc; /* boolean array for socc. orbs. (in the full space) */ int *frozen; /* boolean array for frz. orbs (in the full space) */ int *cc_occ; /* QT->CC active occupied reordering array */ int *cc_aocc; /* QT->CC active occupied reordering array */ int *cc_bocc; /* QT->CC active occupied reordering array */ int *cc_vir; /* QT->CC active virtiual reordering array */ int *cc_avir; /* QT->CC active virtiual reordering array */ int *cc_bvir; /* QT->CC active virtiual reordering array */ int *cc_allocc; /* QT->CC all occupied reordering array */ int *cc_allaocc; /* QT->CC all occupied reordering array */ int *cc_allbocc; /* QT->CC all occupied reordering array */ int *cc_allvir; /* QT->CC all virtual reordering array */ int *cc_allavir; /* QT->CC all virtual reordering array */ int *cc_allbvir; /* QT->CC all virtual reordering array */ int *qt_occ; /* CC->QT active occupied reordering array */ int *qt_aocc; /* CC->QT active occupied reordering array */ int *qt_bocc; /* CC->QT active occupied reordering array */ int *qt_vir; /* CC->QT active virtiual reordering array */ int *qt_avir; /* CC->QT active virtiual reordering array */ int *qt_bvir; /* CC->QT active virtiual reordering array */ int *qt_allocc; /* CC->QT all occupied reordering array */ int *qt_allaocc; /* CC->QT all occupied reordering array */ int *qt_allbocc; /* CC->QT all occupied reordering array */ int *qt_allvir; /* CC->QT all virtual reordering array */ int *qt_allavir; /* CC->QT all virtual reordering array */ int *qt_allbvir; /* CC->QT all virtual reordering array */ int *occ_sym; /* CC active occupied index symmetry */ int *aocc_sym; /* CC active occupied index symmetry */ int *bocc_sym; /* CC active occupied index symmetry */ int *vir_sym; /* CC active virtual index symmetry */ int *avir_sym; /* CC active virtual index symmetry */ int *bvir_sym; /* CC active virtual index symmetry */ int *allocc_sym; /* CC all occupied index symmetry */ int *allaocc_sym; /* CC all occupied index symmetry */ int *allbocc_sym; /* CC all occupied index symmetry */ int *allvir_sym; /* CC all virtual index symmetry */ int *allavir_sym; /* CC all virtual index symmetry */ int *allbvir_sym; /* CC all virtual index symmetry */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *all_occpi; /* no. of occ. orbs. (incl. open and fzc) per irrep */ int *all_aoccpi; /* no. of occ. orbs. (incl. open and fzc) per irrep */ int *all_boccpi; /* no. of occ. orbs. (incl. open and fzc) per irrep */ int *all_virtpi; /* no. of virt. orbs. (incl. open and fzc) per irrep */ int *all_avirtpi; /* no. of virt. orbs. (incl. open and fzc) per irrep */ int *all_bvirtpi; /* no. of virt. orbs. (incl. open and fzc) per irrep */ int *occ_off; /* active occ. orbital offsets within each irrep */ int *aocc_off; /* active occ. orbital offsets within each irrep */ int *bocc_off; /* active occ. orbital offsets within each irrep */ int *vir_off; /* active virt. orbital offsets within each irrep */ int *avir_off; /* active virt. orbital offsets within each irrep */ int *bvir_off; /* active virt. orbital offsets within each irrep */ int *all_occ_off; /* all occ. orbital offsets within each irrep */ int *all_aocc_off; /* all occ. orbital offsets within each irrep */ int *all_bocc_off; /* all occ. orbital offsets within each irrep */ int *all_vir_off; /* all virt. orbital offsets within each irrep */ int *all_avir_off; /* all virt. orbital offsets within each irrep */ int *all_bvir_off; /* all virt. orbital offsets within each irrep */ double enuc; /* Nuclear repulsion energy */ double efzc; /* Frozen core energy */ double eref; /* The reference energy (computed here) */ double **scf; double **usotao; double **MUX; double **MUY; double **MUZ; double **LX; double **LY; double **LZ; int irrep_x; int irrep_y; int irrep_z; int irrep_Rx; int irrep_Ry; int irrep_Rz; double ***C; /* Virtual orbital transformation matrix (for AO-basis B terms) */ }; }} //namespace psi::ccsort �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/Params.h������������������������������������������������������������������������0000644�0001015�0000765�00000002015�10754663017�014440� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ namespace psi { namespace ccsort { struct Params { int print_lvl; /* Output level control */ int keep_TEIFile; /* Should we keep the input two-elec. integrals? */ int keep_OEIFile; /* Should we keep the input one-elec. integrals? */ double tolerance; /* Cutoff value for integrals in IWL Buffers */ long int memory; /* Memory available (in bytes) */ int cachelev; int ref; double *omega; /* energy of applied field (a.u) for dynamic properties */ int nomega; /* number of field energies desired */ char *wfn; int make_abcd; int make_unpacked_abcd; int make_aibc; int dertype; char *aobasis; int reset; /* cmdline argument; if true, all CC-related files */ /* are deleted at the beginning of the run */ int semicanonical; /* semicanonical orbitals for perturbation theory */ int local; char *prop; }; }} // namespace psi::ccsort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/scf_check.cc��������������������������������������������������������������������0000644�0001015�0000765�00000016054�10757640026�015271� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { void scf_check_uhf(void); void scf_check_rhf(void); void scf_check(void) { if(params.ref == 2) scf_check_uhf(); else scf_check_rhf(); } void scf_check_uhf(void) { int h, nirreps, i, j, I, J, IJ, Gi, Gj; int *aoccpi, *boccpi, *aocc_off, *bocc_off; double E1A, E1B, E2AA, E2BB, E2AB; dpdfile2 hIJ, hij; dpdbuf4 A; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; dpd_file2_init(&hIJ, CC_OEI, 0, 0, 0, "h(I,J)"); dpd_file2_init(&hij, CC_OEI, 0, 2, 2, "h(i,j)"); dpd_file2_mat_init(&hIJ); dpd_file2_mat_init(&hij); dpd_file2_mat_rd(&hIJ); dpd_file2_mat_rd(&hij); E1A = E1B = 0.0; for(h=0; h < nirreps; h++) { for(i=0; i < aoccpi[h]; i++) E1A += hIJ.matrix[h][i][i]; for(i=0; i < boccpi[h]; i++) E1B += hij.matrix[h][i][i]; } dpd_file2_mat_close(&hIJ); dpd_file2_mat_close(&hij); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <IJ|KL>"); E2AA = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&A, h); dpd_buf4_mat_irrep_rd(&A, h); for(Gi=0; Gi < nirreps; Gi++) { Gj = Gi ^ h; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; IJ = A.params->rowidx[I][J]; E2AA += 0.5 * A.matrix[h][IJ][IJ]; } } } dpd_buf4_mat_irrep_close(&A, h); } dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 10, 10, 10, 10, 1, "A <ij|kl>"); E2BB = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&A, h); dpd_buf4_mat_irrep_rd(&A, h); for(Gi=0; Gi < nirreps; Gi++) { Gj = Gi ^ h; for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; IJ = A.params->rowidx[I][J]; E2BB += 0.5 * A.matrix[h][IJ][IJ]; } } } dpd_buf4_mat_irrep_close(&A, h); } dpd_buf4_close(&A); dpd_buf4_init(&A, CC_AINTS, 0, 22, 22, 22, 22, 0, "A <Ij|Kl>"); E2AB = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&A, h); dpd_buf4_mat_irrep_rd(&A, h); for(Gi=0; Gi < nirreps; Gi++) { Gj = Gi ^ h; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; IJ = A.params->rowidx[I][J]; E2AB += A.matrix[h][IJ][IJ]; } } } dpd_buf4_mat_irrep_close(&A, h); } dpd_buf4_close(&A); moinfo.eref = E1A+ E1B+ E2AA+ E2BB+ E2AB + moinfo.enuc + moinfo.efzc; fprintf(outfile, "\tOne-electron energy = %20.14f\n", E1A + E1B); fprintf(outfile, "\tTwo-electron (AA) energy = %20.14f\n", E2AA); fprintf(outfile, "\tTwo-electron (BB) energy = %20.14f\n", E2BB); fprintf(outfile, "\tTwo-electron (AB) energy = %20.14f\n", E2AB); fprintf(outfile, "\tTwo-electron energy = %20.14f\n", E2AA + E2BB + E2AB); fprintf(outfile, "\tFrozen-core energy (transqt) = %20.14f\n", moinfo.efzc); fprintf(outfile, "\tReference energy = %20.14f\n", moinfo.eref); } void scf_check_rhf(void) { int h, Gi, Gj; int i, j, I, J, IJ; int nirreps; int *occpi, *virtpi; int *occ_off, *vir_off; int *occ_sym, *vir_sym; int *openpi; dpdbuf4 AInts_anti, AInts; dpdfile2 Hoo; double E1A, E1B, E2AA, E2BB, E2AB; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; openpi = moinfo.openpi; /* One-electron (frozen-core) contributions */ dpd_file2_init(&Hoo, CC_OEI, 0, 0, 0, "h(i,j)"); dpd_file2_mat_init(&Hoo); dpd_file2_mat_rd(&Hoo); E1A = E1B = 0.0; for(h=0; h < nirreps; h++) { for(i=0; i < occpi[h]; i++) E1A += Hoo.matrix[h][i][i]; for(i=0; i < (occpi[h]-openpi[h]); i++) E1B += Hoo.matrix[h][i][i]; } dpd_file2_mat_close(&Hoo); dpd_file2_close(&Hoo); /* Two-electron contributions */ /* Prepare the A integral buffers */ dpd_buf4_init(&AInts_anti, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>"); dpd_buf4_init(&AInts, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>"); E2AA = E2BB = E2AB = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&AInts_anti, h); dpd_buf4_mat_irrep_rd(&AInts_anti, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Gj=Gi^h; /* Loop over the orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; IJ = AInts_anti.params->rowidx[I][J]; E2AA += AInts_anti.matrix[h][IJ][IJ]; } } /* Loop over the orbitals of the target */ for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) { I = occ_off[Gi] + i; for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) { J = occ_off[Gj] + j; IJ = AInts_anti.params->rowidx[I][J]; E2BB += AInts_anti.matrix[h][IJ][IJ]; } } } dpd_buf4_mat_irrep_close(&AInts_anti, h); dpd_buf4_mat_irrep_init(&AInts, h); dpd_buf4_mat_irrep_rd(&AInts, h); /* Loop over irreps of the target */ for(Gi=0; Gi < nirreps; Gi++) { Gj=Gi^h; /* Loop over the orbitals of the target */ for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) { J = occ_off[Gj] + j; IJ = AInts.params->rowidx[I][J]; E2AB += AInts.matrix[h][IJ][IJ]; } } } dpd_buf4_mat_irrep_close(&AInts, h); } /* Close the A Integral buffers */ dpd_buf4_close(&AInts_anti); dpd_buf4_close(&AInts); /* fprintf(outfile, "\n\tEFZC = %20.15f\n", moinfo.efzc); fprintf(outfile, "\n\tE1A = %20.15f\n", E1A); fprintf(outfile, "\tE1B = %20.15f\n", E1B); fprintf(outfile, "\tE2AA = %20.15f\n", E2AA); fprintf(outfile, "\tE2BB = %20.15f\n", E2BB); fprintf(outfile, "\tE2AB = %20.15f\n", E2AB); */ moinfo.eref = E1A+E1B+0.5*(E2AA+E2BB)+E2AB + moinfo.enuc + moinfo.efzc; fprintf(outfile, "\tOne-electron energy = %20.14f\n", E1A+E1B); fprintf(outfile, "\tTwo-electron (AA) energy = %20.14f\n", E2AA); fprintf(outfile, "\tTwo-electron (BB) energy = %20.14f\n", E2BB); fprintf(outfile, "\tTwo-electron (AB) energy = %20.14f\n", E2AB); fprintf(outfile, "\tTwo-electron energy = %20.14f\n", 0.5*(E2AA+E2BB)+E2AB); fprintf(outfile, "\tFrozen-core energy (transqt) = %20.14f\n", moinfo.efzc); fprintf(outfile, "\tReference energy = %20.14f\n", moinfo.eref); } }} // namespace psi::ccsort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/sort_oei.cc���������������������������������������������������������������������0000644�0001015�0000765�00000020450�10757640026�015177� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ /* ** sort_oei(): Sort the one-electron integrals from QT Standard to CC ** ordering. ** ** There are separate, but similar versions of this routine for ** RHF/ROHF and UHF reference wave functions. ** ** TDC, 6/01 ** ** Notes: ** ** (1) The output of the one-electron integrals from transqt and ** the method by which we read them from disk is somewhat confusing ** due to the treatment of frozen orbitals. From transqt both the ** bare one-electron integrals and frozen-core operator are given in ** the full MO basis (cf. transform_one.c of transqt), but, when we ** call iwl_rdone() here with non-zero values for nfzc and nfzv, the ** frozen indices are automagically filtered out (cf. iwl_rdone.c) and ** we are left with only active orbitals. It is inconsistent to ** require iwl_rdone() to do this filtering, in my opinion. ** ** (2) When core orbitals are frozen, we must read the frozen-core ** operator instead of the bare one-electron integrals here in order ** to correctly build the Fock matrix later on. */ #include <cstdio> #include <cstdlib> #include <libpsio/psio.h> #include <libciomr/libciomr.h> #include <libiwl/iwl.h> #include <libdpd/dpd.h> #include <psifiles.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) void sort_oei_rhf(void); void sort_oei_uhf(void); void sort_oei(void) { if(params.ref == 2) sort_oei_uhf(); else sort_oei_rhf(); } void sort_oei_uhf(void) { int nirreps, nmo, nactive, ntri_all, ntri_act; int p, q, pq, pnew, qnew, psym, qsym; int *aocc, *bocc, *aocc_off, *bocc_off, *aocc_sym, *bocc_sym; int *avir, *bvir, *avir_off, *bvir_off, *avir_sym, *bvir_sym; int *cc_aocc, *cc_bocc, *cc_avir, *cc_bvir; double *a_oei, *b_oei, *tmp_oei; dpdfile2 hIJ, hij, hAB, hab, hIA, hia; nirreps = moinfo.nirreps; nactive = moinfo.nactive; nmo = moinfo.nmo; aocc = moinfo.aocc; bocc = moinfo.bocc; avir = moinfo.avir; bvir = moinfo.bvir; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; aocc_sym = moinfo.aocc_sym; bocc_sym = moinfo.bocc_sym; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; avir_sym = moinfo.avir_sym; bvir_sym = moinfo.bvir_sym; cc_aocc = moinfo.cc_aocc; cc_bocc = moinfo.cc_bocc; cc_avir = moinfo.cc_avir; cc_bvir = moinfo.cc_bvir; ntri_all = nmo * (nmo+1)/2; ntri_act = nactive * (nactive+1)/2; tmp_oei = init_array(ntri_all); a_oei = init_array(ntri_act); b_oei = init_array(ntri_act); iwl_rdone(PSIF_OEI, PSIF_MO_A_FZC, tmp_oei, ntri_all, 0, 0, outfile); filter(tmp_oei,a_oei,ioff,nmo,moinfo.nfzc,moinfo.nfzv); iwl_rdone(PSIF_OEI, PSIF_MO_B_FZC, tmp_oei, ntri_all, 0, 0, outfile); filter(tmp_oei,b_oei,ioff,nmo,moinfo.nfzc,moinfo.nfzv); free(tmp_oei); dpd_file2_init(&hIJ, CC_OEI, 0, 0, 0, "h(I,J)"); dpd_file2_init(&hij, CC_OEI, 0, 2, 2, "h(i,j)"); dpd_file2_init(&hAB, CC_OEI, 0, 1, 1, "h(A,B)"); dpd_file2_init(&hab, CC_OEI, 0, 3, 3, "h(a,b)"); dpd_file2_init(&hIA, CC_OEI, 0, 0, 1, "h(I,A)"); dpd_file2_init(&hia, CC_OEI, 0, 2, 3, "h(i,a)"); dpd_file2_mat_init(&hIJ); dpd_file2_mat_init(&hij); dpd_file2_mat_init(&hAB); dpd_file2_mat_init(&hab); dpd_file2_mat_init(&hIA); dpd_file2_mat_init(&hia); /* Loop over alpha QT indices and convert to CC ordering */ for(p=0; p < nactive; p++) { for(q=0; q < nactive; q++) { pq = INDEX(p,q); if(aocc[p] && aocc[q]) { pnew = cc_aocc[p]; qnew = cc_aocc[q]; psym = aocc_sym[pnew]; qsym = aocc_sym[qnew]; pnew -= aocc_off[psym]; qnew -= aocc_off[qsym]; if(psym == qsym) hIJ.matrix[psym][pnew][qnew] = a_oei[pq]; } if(bocc[p] && bocc[q]) { pnew = cc_bocc[p]; qnew = cc_bocc[q]; psym = bocc_sym[pnew]; qsym = bocc_sym[qnew]; pnew -= bocc_off[psym]; qnew -= bocc_off[qsym]; if(psym == qsym) hij.matrix[psym][pnew][qnew] = b_oei[pq]; } if(avir[p] && avir[q]) { pnew = cc_avir[p]; qnew = cc_avir[q]; psym = avir_sym[pnew]; qsym = avir_sym[qnew]; pnew -= avir_off[psym]; qnew -= avir_off[qsym]; if(psym == qsym) hAB.matrix[psym][pnew][qnew] = a_oei[pq]; } if(bvir[p] && bvir[q]) { pnew = cc_bvir[p]; qnew = cc_bvir[q]; psym = bvir_sym[pnew]; qsym = bvir_sym[qnew]; pnew -= bvir_off[psym]; qnew -= bvir_off[qsym]; if(psym == qsym) hab.matrix[psym][pnew][qnew] = b_oei[pq]; } if(aocc[p] && avir[q]) { pnew = cc_aocc[p]; qnew = cc_avir[q]; psym = aocc_sym[pnew]; qsym = avir_sym[qnew]; pnew -= aocc_off[psym]; qnew -= avir_off[qsym]; if(psym == qsym) hIA.matrix[psym][pnew][qnew] = a_oei[pq]; } if(bocc[p] && bvir[q]) { pnew = cc_bocc[p]; qnew = cc_bvir[q]; psym = bocc_sym[pnew]; qsym = bvir_sym[qnew]; pnew -= bocc_off[psym]; qnew -= bvir_off[qsym]; if(psym == qsym) hia.matrix[psym][pnew][qnew] = b_oei[pq]; } } } dpd_file2_mat_wrt(&hIJ); dpd_file2_mat_wrt(&hij); dpd_file2_mat_wrt(&hAB); dpd_file2_mat_wrt(&hab); dpd_file2_mat_wrt(&hIA); dpd_file2_mat_wrt(&hia); dpd_file2_mat_close(&hIJ); dpd_file2_mat_close(&hij); dpd_file2_mat_close(&hAB); dpd_file2_mat_close(&hab); dpd_file2_mat_close(&hIA); dpd_file2_mat_close(&hia); dpd_file2_close(&hIJ); dpd_file2_close(&hij); dpd_file2_close(&hAB); dpd_file2_close(&hab); dpd_file2_close(&hIA); dpd_file2_close(&hia); free(a_oei); free(b_oei); } void sort_oei_rhf(void) { int nirreps, nactive, nmo, ntri_all, ntri_act; int p, q, pq, pnew, qnew, psym, qsym; int *occ, *vir; int *cc_occ, *cc_vir; int *occ_sym, *vir_sym; int *occ_off, *vir_off; double *oei, *tmp_oei; dpdfile2 Hoo, Hov, Hvv; nirreps = moinfo.nirreps; nactive = moinfo.nactive; nmo = moinfo.nmo; occ = moinfo.occ; vir = moinfo.vir; cc_occ = moinfo.cc_occ; cc_vir = moinfo.cc_vir; occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; /* Grab the frozen-core opertor */ ntri_all = nmo * (nmo + 1)/2; ntri_act = nactive * (nactive + 1)/2; tmp_oei = init_array(ntri_all); oei = init_array(ntri_act); iwl_rdone(PSIF_OEI, PSIF_MO_FZC, tmp_oei, ntri_all, 0, 0, outfile); filter(tmp_oei, oei, ioff, nmo, moinfo.nfzc, moinfo.nfzv); free(tmp_oei); if(params.print_lvl > 5) { fprintf(outfile, "\n\tFrozen-Core Operator:\n"); fprintf(outfile, "\t---------------------"); print_array(oei, nactive, outfile); } dpd_file2_init(&Hoo, CC_OEI, 0, 0, 0, "h(i,j)"); dpd_file2_init(&Hvv, CC_OEI, 0, 1, 1, "h(a,b)"); dpd_file2_init(&Hov, CC_OEI, 0, 0, 1, "h(i,a)"); dpd_file2_mat_init(&Hoo); dpd_file2_mat_init(&Hvv); dpd_file2_mat_init(&Hov); /* Loop over QT indices and convert to CC ordering */ for(p=0; p < nactive; p++) { for(q=0; q < nactive; q++) { pq = INDEX(p, q); /* Check occ-occ class */ if(occ[p] && occ[q]) { /* Get relative indices */ pnew = cc_occ[p]; qnew = cc_occ[q]; /* Get orbital symmetries */ psym = occ_sym[pnew]; qsym = occ_sym[qnew]; /* Shift symmetry-relative indices */ pnew -= occ_off[psym]; qnew -= occ_off[qsym]; /* Check orbital symmetry and put integral in place */ if(psym == qsym) { Hoo.matrix[psym][pnew][qnew] = oei[pq]; } } /* Check vir-vir class */ if(vir[p] && vir[q]) { /* Get relative indices */ pnew = cc_vir[p]; qnew = cc_vir[q]; /* Get orbital symmetries */ psym = vir_sym[pnew]; qsym = vir_sym[qnew]; /* Shift symmetry-relative indices */ pnew -= vir_off[psym]; qnew -= vir_off[qsym]; /* Check orbital symmetry and put integral in place */ if(psym == qsym) { Hvv.matrix[psym][pnew][qnew] = oei[pq]; } } /* Check occ-vir class */ if(occ[p] && vir[q]) { /* Get relative indices */ pnew = cc_occ[p]; qnew = cc_vir[q]; /* Get orbital symmetries */ psym = occ_sym[pnew]; qsym = vir_sym[qnew]; /* Shift symmetry-relative indices */ pnew -= occ_off[psym]; qnew -= vir_off[qsym]; /* Check orbital symmetry and put integral in place */ if(psym == qsym) { Hov.matrix[psym][pnew][qnew] = oei[pq]; } } } } dpd_file2_mat_wrt(&Hoo); dpd_file2_mat_wrt(&Hvv); dpd_file2_mat_wrt(&Hov); dpd_file2_mat_close(&Hoo); dpd_file2_mat_close(&Hvv); dpd_file2_mat_close(&Hov); dpd_file2_close(&Hoo); dpd_file2_close(&Hvv); dpd_file2_close(&Hov); free(oei); } }} // namespace psi::ccsort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/sort_pert.cc��������������������������������������������������������������������0000644�0001015�0000765�00000005533�11112564564�015400� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstring> #include <libdpd/dpd.h> #include "MOInfo.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { /* sort_pert(): Sorts the specified MO-basis one-electron property ** integrals into CC ordering for use in building the ** similarity-transformed integrals and certain components of the ** total linear response function. ** ** NB: Some integrals are antisymmetric (e.g. L or P integrals), and ** others are symmetric (e.g. Mu integrals), so we must be careful in ** this and subsequent routines. ** ** TDC, 10/05 */ void sort_pert(const char *pert, double **pertX, double **pertY, double **pertZ, int irrep_x, int irrep_y, int irrep_z) { int p, q, Gp, Gq, P, Q, i; int irrep; dpdfile2 f; double **F; char prefix[32], lbl[32]; for(i=0; i < 3; i++) { if(i==0) { irrep = irrep_x; F = pertX; sprintf(prefix, "%s_%1s", pert, "X"); } else if(i==1) { irrep = irrep_y; F = pertY; sprintf(prefix, "%s_%1s", pert, "Y"); } else if(i==2) { irrep = irrep_z; F = pertZ; sprintf(prefix, "%s_%1s", pert, "Z"); } sprintf(lbl, "%s_IJ", prefix); dpd_file2_init(&f, CC_OEI, irrep, 0, 0, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.occpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_occ[p+moinfo.occ_off[Gp]]]; for(q=0; q < moinfo.occpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_occ[q+moinfo.occ_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); sprintf(lbl, "%s_AB", prefix); dpd_file2_init(&f, CC_OEI, irrep, 1, 1, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.virtpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_vir[p+moinfo.vir_off[Gp]]]; for(q=0; q < moinfo.virtpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_vir[q+moinfo.vir_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); sprintf(lbl, "%s_IA", prefix); dpd_file2_init(&f, CC_OEI, irrep, 0, 1, lbl); dpd_file2_mat_init(&f); for(Gp=0; Gp < moinfo.nirreps; Gp++) { /* irrep of left-hand MO */ Gq = irrep ^ Gp; for(p=0; p < moinfo.occpi[Gp]; p++) { P = moinfo.qt2pitzer[moinfo.qt_occ[p+moinfo.occ_off[Gp]]]; for(q=0; q < moinfo.virtpi[Gq]; q++) { Q = moinfo.qt2pitzer[moinfo.qt_vir[q+moinfo.vir_off[Gq]]]; f.matrix[Gp][p][q] = F[P][Q]; } } } dpd_file2_mat_wrt(&f); dpd_file2_mat_close(&f); dpd_file2_close(&f); } } }} // namespace psi::ccsort ���������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/sort_tei.cc���������������������������������������������������������������������0000644�0001015�0000765�00000014432�11112564564�015205� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libdpd/dpd.h> #include <psifiles.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace ccsort { #define FIRST_TMP 200 void distribute_rhf(int filenum, int first_tmp, double tolerance, int keep_input); void distribute_uhf(const char *spin, int filenum, int first_tmp, double tolerance, int keep_input); int file_build(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep); int file_build_multipass(dpdfile4 *File, int inputfile, double tolerance, int perm_pr, int perm_qs, int perm_prqs, int keep); int build_abcd_packed(int, double, int); void sort_tei(void) { int keep; double tolerance; dpdfile4 A, B, C, D, E, F; keep = params.keep_TEIFile; tolerance = params.tolerance; if(params.ref == 2) { /*** UHF ***/ distribute_uhf("AA", PSIF_MO_AA_TEI, FIRST_TMP, tolerance, keep); fflush(outfile); dpd_file4_init_nocache(&A, CC_AINTS, 0, 0, 0, "A <IJ|KL>"); file_build(&A, FIRST_TMP, tolerance, 1, 1, 1, 0); dpd_file4_close(&A); if(params.make_abcd) { dpd_file4_init_nocache(&B, CC_BINTS, 0, 5, 5, "B <AB|CD>"); file_build_multipass(&B, FIRST_TMP+1, tolerance, 1, 1, 1, 0); dpd_file4_close(&B); } dpd_file4_init_nocache(&C, CC_CINTS, 0, 20, 20, "C <IA|JB>"); file_build(&C, FIRST_TMP+2, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&D, CC_DINTS, 0, 0, 5, "D <IJ|AB>"); file_build(&D, FIRST_TMP+4, tolerance, 0, 0, 1, 0); dpd_file4_close(&D); dpd_file4_init_nocache(&E, CC_EINTS, 0, 21, 0, "E <AI|JK>"); file_build(&E, FIRST_TMP+5, tolerance, 0, 1, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&F, CC_FINTS, 0, 20, 5, "F <IA|BC>"); file_build(&F, FIRST_TMP+7, tolerance, 0, 1, 0, 0); dpd_file4_close(&F); dpd_file4_init_nocache(&F, CC_FINTS, 0, 21, 5, "F <AI|BC>"); file_build(&F, FIRST_TMP+8, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); distribute_uhf("BB", PSIF_MO_BB_TEI, FIRST_TMP, tolerance, keep); dpd_file4_init_nocache(&A, CC_AINTS, 0, 10, 10, "A <ij|kl>"); file_build(&A, FIRST_TMP, tolerance, 1, 1, 1, 0); dpd_file4_close(&A); if(params.make_abcd) { dpd_file4_init_nocache(&B, CC_BINTS, 0, 15, 15, "B <ab|cd>"); file_build_multipass(&B, FIRST_TMP+1, tolerance, 1, 1, 1, 0); dpd_file4_close(&B); } dpd_file4_init_nocache(&C, CC_CINTS, 0, 30, 30, "C <ia|jb>"); file_build(&C, FIRST_TMP+2, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&D, CC_DINTS, 0, 10, 15, "D <ij|ab>"); file_build(&D, FIRST_TMP+4, tolerance, 0, 0, 1, 0); dpd_file4_close(&D); dpd_file4_init_nocache(&E, CC_EINTS, 0, 31, 10, "E <ai|jk>"); file_build(&E, FIRST_TMP+5, tolerance, 0, 1, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&F, CC_FINTS, 0, 30, 15, "F <ia|bc>"); file_build(&F, FIRST_TMP+7, tolerance, 0, 1, 0, 0); dpd_file4_close(&F); dpd_file4_init_nocache(&F, CC_FINTS, 0, 31, 15, "F <ai|bc>"); file_build(&F, FIRST_TMP+8, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); distribute_uhf("AB", PSIF_MO_AB_TEI, FIRST_TMP, tolerance, keep); dpd_file4_init_nocache(&A, CC_AINTS, 0, 22, 22, "A <Ij|Kl>"); file_build(&A, FIRST_TMP, tolerance, 1, 1, 0, 0); dpd_file4_close(&A); if(params.make_abcd) { dpd_file4_init_nocache(&B, CC_BINTS, 0, 28, 28, "B <Ab|Cd>"); file_build_multipass(&B, FIRST_TMP+1, tolerance, 1, 1, 0, 0); dpd_file4_close(&B); } dpd_file4_init_nocache(&C, CC_CINTS, 0, 24, 24, "C <Ia|Jb>"); file_build(&C, FIRST_TMP+2, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&C, CC_CINTS, 0, 26, 26, "C <Ai|Bj>"); file_build(&C, FIRST_TMP+3, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&D, CC_DINTS, 0, 22, 28, "D <Ij|Ab>"); file_build(&D, FIRST_TMP+4, tolerance, 0, 0, 0, 0); dpd_file4_close(&D); dpd_file4_init_nocache(&E, CC_EINTS, 0, 26, 22, "E <Ai|Jk>"); file_build(&E, FIRST_TMP+5, tolerance, 0, 1, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&E, CC_EINTS, 0, 22, 24, "E <Ij|Ka>"); file_build(&E, FIRST_TMP+6, tolerance, 1, 0, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&F, CC_FINTS, 0, 24, 28, "F <Ia|Bc>"); file_build(&F, FIRST_TMP+7, tolerance, 0, 1, 0, 0); dpd_file4_close(&F); dpd_file4_init_nocache(&F, CC_FINTS, 0, 25, 29, "F <aI|bC>"); file_build(&F, FIRST_TMP+8, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); dpd_file4_init_nocache(&F, CC_FINTS, 0, 28, 26, "F <Ab|Ci>"); file_build(&F, FIRST_TMP+9, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); dpd_file4_init_nocache(&F, CC_FINTS, 0, 26, 28, "F <Ai|Bc>"); file_build(&F, FIRST_TMP+10, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); } else { /*** RHF or ROHF ***/ distribute_rhf(PSIF_MO_TEI, FIRST_TMP, tolerance, keep); dpd_file4_init_nocache(&A, CC_AINTS, 0, 0, 0, "A <ij|kl>"); file_build(&A, FIRST_TMP, tolerance, 1, 1, 1, 0); dpd_file4_close(&A); if(params.make_abcd) { if(params.make_unpacked_abcd) { dpd_file4_init_nocache(&B, CC_BINTS, 0, 5, 5, "B <ab|cd>"); file_build_multipass(&B, FIRST_TMP+1, tolerance, 1, 1, 1, 1); dpd_file4_close(&B); } if(params.ref == 0) build_abcd_packed(FIRST_TMP+1, tolerance, 0); } dpd_file4_init_nocache(&C, CC_CINTS, 0, 10, 10, "C <ia|jb>"); file_build(&C, FIRST_TMP+2, tolerance, 1, 1, 0, 0); dpd_file4_close(&C); dpd_file4_init_nocache(&D, CC_DINTS, 0, 0, 5, "D <ij|ab>"); file_build(&D, FIRST_TMP+3, tolerance, 0, 0, 1, 0); dpd_file4_close(&D); dpd_file4_init_nocache(&E, CC_EINTS, 0, 11, 0, "E <ai|jk>"); file_build(&E, FIRST_TMP+4, tolerance, 0, 1, 0, 0); dpd_file4_close(&E); dpd_file4_init_nocache(&F, CC_FINTS, 0, 10, 5, "F <ia|bc>"); file_build(&F, FIRST_TMP+5, tolerance, 0, 1, 0, 0); dpd_file4_close(&F); if(params.make_aibc) { dpd_file4_init_nocache(&F, CC_FINTS, 0, 11, 5, "F <ai|bc>"); file_build(&F, FIRST_TMP+6, tolerance, 1, 0, 0, 0); dpd_file4_close(&F); } } fflush(outfile); } }} // namespace psi::ccsort ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/ccsort/transpert.cc��������������������������������������������������������������������0000644�0001015�0000765�00000010173�11112564564�015375� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCSORT \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include <libiwl/iwl.h> #include "MOInfo.h" #define EXTERN #include <psifiles.h> #include "globals.h" namespace psi { namespace ccsort { /* transpert(): Transform various one-electron property integrals from ** the AO to the MO basis. In some cases, we must also add ** appropriate prefactors and signs. The only argument is a ** character string indicating the type of integral we want: "Mu", ** "L", "L*", "P", or "P*". The cints code produces only lower ** triangles, so we must unpack the integrals and keep up with ** symmetric vs. antisymmetric cases. ** ** Notes on specific integrals (all produced by "cints --oeprop") used ** here: ** ** (1) Mu: Length-gauge electric dipole moment integrals = -r. These ** already include the electronic charge, and they are symmetric wrt ** index permutation. ** (2) L: Magnetic dipole integrals = -1/2 (r x p). OK, actually, the ** input integrals are really just angular momentum integrals (r x p), ** but we multiply these by -0.5 to account for both the sign of the ** electronic charge and the definition of the magnetic dipole. These ** integrals are antisymmetric wrt index permutation. Use "L*" to use ** the complex conjugate of the operator (i.e., this multiplies by ** -1). ** ** (3) P: Velocity-gauge electric dipole moment integrals = -p. OK, ** cints actually produces -del integrals, which already include the ** electronic charge, so we must multiply by -1 for the definition of ** the linear momentum operator. They are antisymmetric wrt to index ** permutation. Use "P*" to use the complex conjugate of the operator ** (i.e., this multiplies by -1). ** ** -TDC, 11/05 */ void transpert(const char *pert) { int nao, nso, nmo, noei_ao; int alpha; int i, j, ij; double *scratch, **TMP, **X, **target; const char *name; double prefactor, anti, sign; nao = moinfo.nao; nso = moinfo.nso; nmo = moinfo.nmo; noei_ao = nao * (nao+1)/2; TMP = block_matrix(nao, nao); X = block_matrix(nao, nao); scratch = init_array(noei_ao); if(!strcmp(pert,"Mu")) { prefactor = 1.0; anti = 1.0; sign = 1.0; } else if(!strcmp(pert, "L")) { prefactor = -0.5; anti = -1.0; sign = 1.0; } else if(!strcmp(pert, "L*")) { prefactor = -0.5; anti = -1.0; sign = -1.0; } else if(!strcmp(pert, "P")) { prefactor = -1.0; anti = -1.0; sign = 1.0; } else if(!strcmp(pert, "P*")) { prefactor = -1.0; anti = -1.0; sign = -1.0; } for(alpha=0; alpha < 3; alpha++) { target = block_matrix(nmo,nmo); if(!strcmp(pert,"Mu")) { if(alpha == 0) { name = PSIF_AO_MX; moinfo.MUX = target; } else if(alpha == 1) { name = PSIF_AO_MY; moinfo.MUY = target; } else if(alpha == 2) { name = PSIF_AO_MZ; moinfo.MUZ = target; } } else if(!strcmp(pert,"L") || !strcmp(pert, "L*")) { if(alpha == 0) { name = PSIF_AO_LX; moinfo.LX = target; } else if(alpha == 1) { name = PSIF_AO_LY; moinfo.LY = target; } else if(alpha == 2) { name = PSIF_AO_LZ; moinfo.LZ = target; } } else if(!strcmp(pert,"P") || !strcmp(pert, "P*")) { if(alpha == 0) { name = PSIF_AO_NablaX; moinfo.PX = target; } else if(alpha == 1) { name = PSIF_AO_NablaY; moinfo.PY = target; } else if(alpha == 2) { name = PSIF_AO_NablaZ; moinfo.PZ = target; } } iwl_rdone(PSIF_OEI, name, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = prefactor * sign * scratch[ij]; TMP[j][i] = anti * prefactor * sign * scratch[ij]; } C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(moinfo.usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(moinfo.usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(moinfo.scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(moinfo.scf[0][0]),nmo,&(X[0][0]),nao, 0,&(target[0][0]),nmo); zero_arr(scratch,noei_ao); } free(scratch); free_block(TMP); free_block(X); } }} // namespace psi::ccsort �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/�����������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111662�013527� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/cache.cc���������������������������������������������������������������������0000644�0001015�0000765�00000037536�10757640026�015127� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <libciomr/libciomr.h> #include <ccfiles.h> #include <psifiles.h> namespace psi { namespace cctriples { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* <AB|CD> */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* <Ab|Cd> */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* <ab|cd> */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* <ia|bc> */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* <ab|ci> */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* <IA|BC> */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* <AB|CI> */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* <ia|bc> */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* <ab|ci> */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* <Ia|Bc> */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* <Ab|Ci> */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* <ij|ab> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <ab|ij> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* <IJ|AB> */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* <AB|IJ> */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* <ij|ab> */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* <ab|ij> */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* <Ij|Ab> */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* <Ab|Ij> */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* <ia|jb> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* <IA|JB> */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* <ia|jb> */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* <Ia|Jb> */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* <ij|ka> */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* <ia|jk> */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* <IJ|KA> */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* <IA|JK> */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* <ij|ka> */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* <ia|jk> */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* <Ij|Ka> */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* <Ka|Ij> */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* <ij|kl> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* <IJ|KL> */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* <ij|kl> */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* <Ij|Kl> */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/count_ijk.cc�����������������������������������������������������������������0000644�0001015�0000765�00000005746�10757640026�016047� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void count_ijk(void) { int nirreps; int Gi, Gj, Gk; int i, j, k; int I, J, K; int *occpi, *aoccpi, *boccpi; int *occ_off, *aocc_off, *bocc_off; int nijk; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ occpi = moinfo.occpi; occ_off = moinfo.occ_off; nijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I >= J && J >= K) nijk++; } } } } } } fprintf(outfile, "\n\tNumber of ijk index combinations: %d\n", nijk); } else if(params.ref == 2) { /** UHF **/ aoccpi = moinfo.aoccpi; aocc_off = moinfo.aocc_off; boccpi = moinfo.boccpi; bocc_off = moinfo.bocc_off; fprintf(outfile, "\n\tNumber of ijk index combinations:\n"); /** AAA **/ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < aoccpi[Gk]; k++) { K = aocc_off[Gk] + k; if(I > J && J > K) nijk++; } } } } } } fprintf(outfile, "\tSpin Case AAA: %d\n", nijk); /** BBB **/ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(I > J && J > K) nijk++; } } } } } } fprintf(outfile, "\tSpin Case BBB: %d\n", nijk); /** AAB **/ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(I > J) nijk++; } } } } } } fprintf(outfile, "\tSpin Case AAB: %d\n", nijk); /** ABB **/ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(J > K) nijk++; } } } } } } fprintf(outfile, "\tSpin Case ABB: %d\n", nijk); } fprintf(outfile, "\n"); } }} // namespace psi::cctriples ��������������������������psi3/src/bin/cctriples/ET_AAA.cc��������������������������������������������������������������������0000644�0001015�0000765�00000046236�10757640026�015033� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ /*! \defgroup CCTRIPLES cctriples: Evaluate triple excitations */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_AAA(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Ge, Gm; int Gji, Gij, Gjk, Gik, Gbc, Gac, Gba; int I, J, K, A, B, C, E, M; int i, j, k, a, b, c, e, m; int ij, ji, ik, jk, bc, ac, ba; int im, jm, km, ma, mb, mc; int ae, be, ce, ke, ie, je; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, denom, ET_AAA; double t_ijae, t_ijbe, t_ijce, t_jkae, t_jkbe, t_jkce, t_ikae, t_ikbe, t_ikce; double F_kebc, F_keac, F_keba, F_iebc, F_ieac, F_ieba, F_jebc, F_jeac, F_jeba; double t_imbc, t_imac, t_imba, t_jmbc, t_jmac, t_jmba, t_kmbc, t_kmac, t_kmba; double E_jkma, E_jkmb, E_jkmc, E_ikma, E_ikmb, E_ikmc, E_jima, E_jimb, E_jimc; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; dpdbuf4 T2, Fints, Eints, Dints; dpdfile2 fIJ, fAB, T1; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Fints, h); dpd_buf4_mat_irrep_rd(&Fints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } cnt = 0; ET_AAA = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gji = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gjk = Gj ^ Gk; Gik = Gi ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gc = Gi ^ Gj ^ Gk ^ Ga ^ Gb; Gbc = Gb^Gc; Gac = Ga^Gc; Gba = Gb^Ga; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; ij = T2.params->rowidx[I][J]; ji = T2.params->rowidx[J][I]; jk = T2.params->rowidx[J][K]; ik = T2.params->rowidx[I][K]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Fints.params->colidx[B][C]; ac = Fints.params->colidx[A][C]; ba = Fints.params->colidx[B][A]; value_c = 0.0; /** <ov||vv> --> connected triples **/ /* -t_jkae * F_iebc */ Ge = Gj ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; ie = Fints.params->rowidx[I][E]; t_jkae = F_iebc = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkae = T2.matrix[Gjk][jk][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_iebc = Fints.matrix[Gbc][ie][bc]; value_c -= t_jkae * F_iebc; } /* +t_jkbe * F_ieac */ Ge = Gj ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; ie = Fints.params->rowidx[I][E]; t_jkbe = F_ieac = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkbe = T2.matrix[Gjk][jk][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_ieac = Fints.matrix[Gac][ie][ac]; value_c += t_jkbe * F_ieac; } /* +t_jkce * F_ieba */ Ge = Gj ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; ie = Fints.params->rowidx[I][E]; t_jkce = F_ieba = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkce = T2.matrix[Gjk][jk][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_ieba = Fints.matrix[Gba][ie][ba]; value_c += t_jkce * F_ieba; } /* +t_ikae * F_jebc */ Ge = Gi ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; je = Fints.params->rowidx[J][E]; t_ikae = F_jebc = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikae = T2.matrix[Gik][ik][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_jebc = Fints.matrix[Gbc][je][bc]; value_c += t_ikae * F_jebc; } /* -t_ikbe * F_jeac */ Ge = Gi ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; je = Fints.params->rowidx[J][E]; t_ikbe = F_jeac = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikbe = T2.matrix[Gik][ik][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_jeac = Fints.matrix[Gac][je][ac]; value_c -= t_ikbe * F_jeac; } /* -t_ikce * F_jeba */ Ge = Gi ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; je = Fints.params->rowidx[J][E]; t_ikce = F_jeba = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikce = T2.matrix[Gik][ik][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_jeba = Fints.matrix[Gba][je][ba]; value_c -= t_ikce * F_jeba; } /* -t_ijae * F_kebc */ Ge = Gi ^ Gj ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; ke = Fints.params->rowidx[K][E]; t_ijae = F_kebc = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijae = T2.matrix[Gij][ij][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_kebc = Fints.matrix[Gbc][ke][bc]; value_c -= t_ijae * F_kebc; } /* +t_ijbe * F_keac */ Ge = Gi ^ Gj ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; ke = Fints.params->rowidx[K][E]; t_ijbe = F_keac = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijbe = T2.matrix[Gij][ij][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_keac = Fints.matrix[Gac][ke][ac]; value_c += t_ijbe * F_keac; } /* +t_ijce * F_keba */ Ge = Gi ^ Gj ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; ke = Fints.params->rowidx[K][E]; t_ijce = F_keba = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijce = T2.matrix[Gij][ij][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_keba = Fints.matrix[Gba][ke][ba]; value_c += t_ijce * F_keba; } /** <oo||ov> --> connected triples **/ /* -t_imbc * E_jkma */ Gm = Gi ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; ma = Eints.params->colidx[M][A]; t_imbc = E_jkma = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_imbc = T2.matrix[Gbc][im][bc]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkma = Eints.matrix[Gjk][jk][ma]; value_c -= t_imbc * E_jkma; } /* +t_imac * E_jkmb */ Gm = Gi ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; mb = Eints.params->colidx[M][B]; t_imac = E_jkmb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_imac = T2.matrix[Gac][im][ac]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkmb = Eints.matrix[Gjk][jk][mb]; value_c += t_imac * E_jkmb; } /* +t_imba * E_jkmc */ Gm = Gi ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; mc = Eints.params->colidx[M][C]; t_imba = E_jkmc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_imba = T2.matrix[Gba][im][ba]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkmc = Eints.matrix[Gjk][jk][mc]; value_c += t_imba * E_jkmc; } /* +t_jmbc * E_ikma */ Gm = Gj ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; ma = Eints.params->colidx[M][A]; t_jmbc = E_ikma = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_jmbc = T2.matrix[Gbc][jm][bc]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikma = Eints.matrix[Gik][ik][ma]; value_c += t_jmbc * E_ikma; } /* -t_jmac * E_ikmb */ Gm = Gj ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; mb = Eints.params->colidx[M][B]; t_jmac = E_ikmb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_jmac = T2.matrix[Gac][jm][ac]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmb = Eints.matrix[Gik][ik][mb]; value_c -= t_jmac * E_ikmb; } /* -t_jmba * E_ikmc */ Gm = Gj ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; mc = Eints.params->colidx[M][C]; t_jmba = E_ikmc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_jmba = T2.matrix[Gba][jm][ba]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmc = Eints.matrix[Gik][ik][mc]; value_c -= t_jmba * E_ikmc; } /* +t_kmbc * E_jima */ Gm = Gk ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; ma = Eints.params->colidx[M][A]; t_kmbc = E_jima = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_kmbc = T2.matrix[Gbc][km][bc]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jima = Eints.matrix[Gji][ji][ma]; value_c += t_kmbc * E_jima; } /* -t_kmac * E_jimb */ Gm = Gk ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; mb = Eints.params->colidx[M][B]; t_kmac = E_jimb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_kmac = T2.matrix[Gac][km][ac]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jimb = Eints.matrix[Gji][ji][mb]; value_c -= t_kmac * E_jimb; } /* -t_kmba * E_jimc */ Gm = Gk ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; mc = Eints.params->colidx[M][C]; t_kmba = E_jimc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_kmba = T2.matrix[Gba][km][ba]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jimc = Eints.matrix[Gji][ji][mc]; value_c -= t_kmba * E_jimc; } /** disconnected triples **/ value_d = 0.0; /* +t_ia * D_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ia = T1.matrix[Gi][i][a]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkbc = Dints.matrix[Gjk][jk][bc]; value_d += t_ia * D_jkbc; } /* -t_ib * D_jkac */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ib = T1.matrix[Gi][i][b]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkac = Dints.matrix[Gjk][jk][ac]; value_d -= t_ib * D_jkac; } /* -t_ic * D_jkba */ if(Gi == Gc && Gjk == Gba) { t_ic = D_jkba = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ic = T1.matrix[Gi][i][c]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkba = Dints.matrix[Gjk][jk][ba]; value_d -= t_ic * D_jkba; } /* -t_ja * D_ikbc */ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_ja = T1.matrix[Gj][j][a]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikbc = Dints.matrix[Gik][ik][bc]; value_d -= t_ja * D_ikbc; } /* +t_jb * D_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_jb = T1.matrix[Gj][j][b]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikac = Dints.matrix[Gik][ik][ac]; value_d += t_jb * D_ikac; } /* +t_jc * D_ikba */ if(Gj == Gc && Gik == Gba) { t_jc = D_ikba = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_jc = T1.matrix[Gj][j][c]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikba = Dints.matrix[Gik][ik][ba]; value_d += t_jc * D_ikba; } /* -t_ka * D_jibc */ if(Gk == Ga && Gji == Gbc) { t_ka = D_jibc = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_ka = T1.matrix[Gk][k][a]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jibc = Dints.matrix[Gji][ji][bc]; value_d -= t_ka * D_jibc; } /* +t_kb * D_jiac */ if(Gk == Gb && Gji == Gac) { t_kb = D_jiac = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_kb = T1.matrix[Gk][k][b]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jiac = Dints.matrix[Gji][ji][ac]; value_d += t_kb * D_jiac; } /* +t_kc * D_jiba */ if(Gk == Gc && Gji == Gba) { t_kc = D_jiba = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_kc = T1.matrix[Gk][k][c]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jiba = Dints.matrix[Gji][ji][ba]; value_d += t_kc * D_jiba; } /* if(fabs(value_c) > 1e-7) { cnt++; fprintf(outfile, "%d %d %d %d %d %d %20.14f\n", I, J, K, A, B, C, value_c); } */ /* Compute the Fock denominator */ denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; ET_AAA += (value_d + value_c) * value_c / denom; } /* c */ } /* b */ } /* a */ } /* k */ } /* j */ } /* i */ } /* Gb */ } /* Ga */ } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "cnt = %d\n", cnt); */ ET_AAA /= 36.0; /* fprintf(outfile, "ET_AAA = %20.14f\n", ET_AAA); */ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Fints, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); return ET_AAA; } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_AAB.cc��������������������������������������������������������������������0000644�0001015�0000765�00000044552�10757640026�015033� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_AAB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Ge, Gm; int Gji, Gij, Gjk, Gik, Gbc, Gac, Gba; int I, J, K, A, B, C, E, M; int i, j, k, a, b, c, e, m; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int ae, be, ec, ke, ie, je; int im, jm, km, mk, ma, mb, mc; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, denom, ET_AAB; double t_ijae, t_ijbe, t_jkae, t_jkbe, t_jkec, t_ikae, t_ikbe, t_ikec; double F_kecb, F_keca, F_iebc, F_ieac, F_ieab, F_jebc, F_jeac, F_jeab; double t_imbc, t_imac, t_imba, t_jmbc, t_jmac, t_jmba, t_mkbc, t_mkac; double E_kjma, E_kjmb, E_jkmc, E_kima, E_kimb, E_ikmc, E_jima, E_jimb; double t_ia, t_ib, t_ja, t_jb, t_kc; double D_jkbc, D_jkac, D_ikbc, D_ikac, D_jiba; dpdbuf4 T2AB, T2AA, Faints, Fints, Eaints, Eints, Daints, Dints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&Faints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Eaints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Daints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2AA, h); dpd_buf4_mat_irrep_rd(&T2AA, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&Faints, h); dpd_buf4_mat_irrep_rd(&Faints, h); dpd_buf4_mat_irrep_init(&Fints, h); dpd_buf4_mat_irrep_rd(&Fints, h); dpd_buf4_mat_irrep_init(&Eaints, h); dpd_buf4_mat_irrep_rd(&Eaints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Daints, h); dpd_buf4_mat_irrep_rd(&Daints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } cnt = 0; ET_AAB = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gj ^ Gk; Gik = Gi ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gc = Gi ^ Gj ^ Gk ^ Ga ^ Gb; Gbc = Gb^Gc; Gac = Ga^Gc; Gba = Gb^Ga; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; ij = T2AA.params->rowidx[I][J]; ji = T2AA.params->rowidx[J][I]; jk = T2AA.params->rowidx[J][K]; kj = T2AA.params->rowidx[K][J]; ik = T2AA.params->rowidx[I][K]; ki = T2AA.params->rowidx[K][I]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ab = Fints.params->colidx[A][B]; ba = Fints.params->colidx[B][A]; bc = Fints.params->colidx[B][C]; cb = Fints.params->colidx[C][B]; ac = Fints.params->colidx[A][C]; ca = Fints.params->colidx[C][A]; value_c = 0.0; /** <ov||vv> --> connected triples **/ /* -t_JkAe * F_IeBc */ Ge = Gj ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2AB.params->colidx[A][E]; ie = Fints.params->rowidx[I][E]; t_jkae = F_iebc = 0.0; if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk]) t_jkae = T2AB.matrix[Gjk][jk][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_iebc = Fints.matrix[Gbc][ie][bc]; value_c -= t_jkae * F_iebc; } /* +t_JkBe * F_IeAc */ Ge = Gj ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2AB.params->colidx[B][E]; ie = Fints.params->rowidx[I][E]; t_jkbe = F_ieac = 0.0; if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk]) t_jkbe = T2AB.matrix[Gjk][jk][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_ieac = Fints.matrix[Gac][ie][ac]; value_c += t_jkbe * F_ieac; } /* +t_JkEc * F_IEAB */ Ge = Gj ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ec = T2AB.params->colidx[E][C]; ie = Faints.params->rowidx[I][E]; t_jkec = F_ieab = 0.0; if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk]) t_jkec = T2AB.matrix[Gjk][jk][ec]; if(Faints.params->rowtot[Gba] && Faints.params->coltot[Gba]) F_ieab = Faints.matrix[Gba][ie][ab]; value_c += t_jkec * F_ieab; } /* +t_IkAe * F_JeBc */ Ge = Gi ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2AB.params->colidx[A][E]; je = Fints.params->rowidx[J][E]; t_ikae = F_jebc = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikae = T2AB.matrix[Gik][ik][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_jebc = Fints.matrix[Gbc][je][bc]; value_c += t_ikae * F_jebc; } /* -t_IkBe * F_JeAc */ Ge = Gi ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2AB.params->colidx[B][E]; je = Fints.params->rowidx[J][E]; t_ikbe = F_jeac = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikbe = T2AB.matrix[Gik][ik][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_jeac = Fints.matrix[Gac][je][ac]; value_c -= t_ikbe * F_jeac; } /* -t_IkEc * F_JEAB */ Ge = Gi ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ec = T2AB.params->colidx[E][C]; je = Faints.params->rowidx[J][E]; t_ikec = F_jeab = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikec = T2AB.matrix[Gik][ik][ec]; if(Faints.params->rowtot[Gba] && Faints.params->coltot[Gba]) F_jeab = Faints.matrix[Gba][je][ab]; value_c -= t_ikec * F_jeab; } /* +t_IJAE * F_kEcB */ Ge = Gi ^ Gj ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2AA.params->colidx[A][E]; ke = Fints.params->rowidx[K][E]; t_ijae = F_kecb = 0.0; if(T2AA.params->rowtot[Gij] && T2AA.params->coltot[Gij]) t_ijae = T2AA.matrix[Gij][ij][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_kecb = Fints.matrix[Gbc][ke][cb]; value_c += t_ijae * F_kecb; } /* -t_IJBE * F_kEcA */ Ge = Gi ^ Gj ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2AA.params->colidx[B][E]; ke = Fints.params->rowidx[K][E]; t_ijbe = F_keca = 0.0; if(T2AA.params->rowtot[Gij] && T2AA.params->coltot[Gij]) t_ijbe = T2AA.matrix[Gij][ij][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_keca = Fints.matrix[Gac][ke][ca]; value_c -= t_ijbe * F_keca; } /** <oo||ov> --> connected triples **/ /* +t_ImBc * E_kJmA */ Gm = Gi ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2AB.params->rowidx[I][M]; ma = Eints.params->colidx[M][A]; t_imbc = E_kjma = 0.0; if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc]) t_imbc = T2AB.matrix[Gbc][im][bc]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_kjma = Eints.matrix[Gjk][kj][ma]; value_c += t_imbc * E_kjma; } /* -t_ImAc * E_kJmB */ Gm = Gi ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2AB.params->rowidx[I][M]; mb = Eints.params->colidx[M][B]; t_imac = E_kjmb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_imac = T2AB.matrix[Gac][im][ac]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_kjmb = Eints.matrix[Gjk][kj][mb]; value_c -= t_imac * E_kjmb; } /* +t_IMBA * E_JkMc */ Gm = Gi ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2AA.params->rowidx[I][M]; mc = Eints.params->colidx[M][C]; t_imba = E_jkmc = 0.0; if(T2AA.params->rowtot[Gba] && T2AA.params->coltot[Gba]) t_imba = T2AA.matrix[Gba][im][ba]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkmc = Eints.matrix[Gjk][jk][mc]; value_c += t_imba * E_jkmc; } /* -t_JmBc * E_kImA */ Gm = Gj ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2AB.params->rowidx[J][M]; ma = Eints.params->colidx[M][A]; t_jmbc = E_kima = 0.0; if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc]) t_jmbc = T2AB.matrix[Gbc][jm][bc]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_kima = Eints.matrix[Gik][ki][ma]; value_c -= t_jmbc * E_kima; } /* +t_JmAc * E_kImB */ Gm = Gj ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2AB.params->rowidx[J][M]; mb = Eints.params->colidx[M][B]; t_jmac = E_kimb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_jmac = T2AB.matrix[Gac][jm][ac]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_kimb = Eints.matrix[Gik][ki][mb]; value_c += t_jmac * E_kimb; } /* -t_JMBA * E_IkMc */ Gm = Gj ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2AA.params->rowidx[J][M]; mc = Eints.params->colidx[M][C]; t_jmba = E_ikmc = 0.0; if(T2AA.params->rowtot[Gba] && T2AA.params->coltot[Gba]) t_jmba = T2AA.matrix[Gba][jm][ba]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmc = Eints.matrix[Gik][ik][mc]; value_c -= t_jmba * E_ikmc; } /* -t_MkBc * E_JIMA */ Gm = Gk ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; ma = Eints.params->colidx[M][A]; t_mkbc = E_jima = 0.0; if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc]) t_mkbc = T2AB.matrix[Gbc][mk][bc]; if(Eaints.params->rowtot[Gji] && Eaints.params->coltot[Gji]) E_jima = Eaints.matrix[Gji][ji][ma]; value_c -= t_mkbc * E_jima; } /* +t_MkAc * E_JIMB */ Gm = Gk ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; mb = Eints.params->colidx[M][B]; t_mkac = E_jimb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_mkac = T2AB.matrix[Gac][mk][ac]; if(Eaints.params->rowtot[Gji] && Eaints.params->coltot[Gji]) E_jimb = Eaints.matrix[Gji][ji][mb]; value_c += t_mkac * E_jimb; } /** disconnected triples **/ value_d = 0.0; /* +t_IA * D_JkBc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) t_ia = T1A.matrix[Gi][i][a]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkbc = Dints.matrix[Gjk][jk][bc]; value_d += t_ia * D_jkbc; } /* -t_IB * D_JkAc */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) t_ib = T1A.matrix[Gi][i][b]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkac = Dints.matrix[Gjk][jk][ac]; value_d -= t_ib * D_jkac; } /* -t_JA * D_IkBc */ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = 0.0; if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj]) t_ja = T1A.matrix[Gj][j][a]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikbc = Dints.matrix[Gik][ik][bc]; value_d -= t_ja * D_ikbc; } /* +t_JB * D_IkAc */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj]) t_jb = T1A.matrix[Gj][j][b]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikac = Dints.matrix[Gik][ik][ac]; value_d += t_jb * D_ikac; } /* +t_kc * D_JIBA */ if(Gk == Gc && Gji == Gba) { t_kc = D_jiba = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) t_kc = T1B.matrix[Gk][k][c]; if(Daints.params->rowtot[Gji] && Daints.params->coltot[Gji]) D_jiba = Daints.matrix[Gji][ji][ba]; value_d += t_kc * D_jiba; } /* if(fabs(value_c) > 1e-7) { cnt++; fprintf(outfile, "%d %d %d %d %d %d %20.14f\n", I, J, K, A, B, C, value_c); } */ /* Compute the Fock denominator */ denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fij.params->rowtot[Gk]) denom += fij.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fab.params->rowtot[Gc]) denom -= fab.matrix[Gc][c][c]; ET_AAB += (value_d + value_c) * value_c / denom; } /* c */ } /* b */ } /* a */ } /* k */ } /* j */ } /* i */ } /* Gb */ } /* Ga */ } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "cnt = %d\n", cnt); */ ET_AAB /= 4.0; /* fprintf(outfile, "ET_AAB = %20.14f\n", ET_AAB); */ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2AA, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&Faints, h); dpd_buf4_mat_irrep_close(&Fints, h); dpd_buf4_mat_irrep_close(&Eaints, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Daints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2AA); dpd_buf4_close(&T2AB); dpd_buf4_close(&Faints); dpd_buf4_close(&Fints); dpd_buf4_close(&Eaints); dpd_buf4_close(&Eints); dpd_buf4_close(&Daints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); return ET_AAB; } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_ABB.cc��������������������������������������������������������������������0000644�0001015�0000765�00000044503�10757640026�015030� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_ABB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Ge, Gm; int Gji, Gij, Gjk, Gik, Gbc, Gac, Gba, Gab; int I, J, K, A, B, C, E, M; int i, j, k, a, b, c, e, m; int ij, ji, ik, ki, jk; int ab, ba, ac, ca, bc, cb; int ae, be, eb, ce, ec, ie, je, ke; int im, jm, mj, km, mk, ma, mb, mc; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, denom, ET_ABB; double t_ijae, t_ijeb, t_ijec, t_jkbe, t_jkce, t_ikae, t_ikeb, t_ikec; double F_kebc, F_keca, F_keba, F_ieac, F_ieab, F_jebc, F_jeca, F_jeba; double t_imac, t_imab, t_jmbc, t_mjac, t_mjab, t_kmbc, t_mkac, t_mkab; double E_jkmb, E_jkmc, E_kima, E_ikmb, E_ikmc, E_jima, E_ijmb, E_ijmc; double t_ia, t_jb, t_jc, t_kb, t_kc; double D_jkbc, D_ikac, D_ikab, D_ijac, D_ijab; dpdbuf4 T2AB, T2BB, Faints, Fints, Eaints, Eints, Daints, Dints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_buf4_init(&T2BB, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&Faints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Eaints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Daints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2BB, h); dpd_buf4_mat_irrep_rd(&T2BB, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&Faints, h); dpd_buf4_mat_irrep_rd(&Faints, h); dpd_buf4_mat_irrep_init(&Fints, h); dpd_buf4_mat_irrep_rd(&Fints, h); dpd_buf4_mat_irrep_init(&Eaints, h); dpd_buf4_mat_irrep_rd(&Eaints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Daints, h); dpd_buf4_mat_irrep_rd(&Daints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } cnt = 0; ET_ABB = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gj ^ Gk; Gik = Gi ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gc = Gi ^ Gj ^ Gk ^ Ga ^ Gb; Gbc = Gb^Gc; Gac = Ga^Gc; Gba = Gb^Ga; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; ij = T2BB.params->rowidx[I][J]; ji = T2BB.params->rowidx[J][I]; jk = T2BB.params->rowidx[J][K]; ik = T2BB.params->rowidx[I][K]; ki = T2BB.params->rowidx[K][I]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ab = Fints.params->colidx[A][B]; ba = Fints.params->colidx[B][A]; bc = Fints.params->colidx[B][C]; cb = Fints.params->colidx[C][B]; ac = Fints.params->colidx[A][C]; ca = Fints.params->colidx[C][A]; value_c = 0.0; /** <ov||vv> --> connected triples **/ /* +t_jkbe * F_IeAc */ Ge = Gj ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2BB.params->colidx[B][E]; ie = Fints.params->rowidx[I][E]; t_jkbe = F_ieac = 0.0; if(T2BB.params->rowtot[Gjk] && T2BB.params->coltot[Gjk]) t_jkbe = T2BB.matrix[Gjk][jk][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_ieac = Fints.matrix[Gac][ie][ac]; value_c += t_jkbe * F_ieac; } /* -t_jkce * F_IeAb */ Ge = Gj ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2BB.params->colidx[C][E]; ie = Faints.params->rowidx[I][E]; t_jkce = F_ieab = 0.0; if(T2BB.params->rowtot[Gjk] && T2BB.params->coltot[Gjk]) t_jkce = T2BB.matrix[Gjk][jk][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_ieab = Fints.matrix[Gba][ie][ab]; value_c -= t_jkce * F_ieab; } /* +t_IkAe * F_jebc */ Ge = Gi ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2AB.params->colidx[A][E]; je = Faints.params->rowidx[J][E]; t_ikae = F_jebc = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikae = T2AB.matrix[Gik][ik][ae]; if(Faints.params->rowtot[Gbc] && Faints.params->coltot[Gbc]) F_jebc = Faints.matrix[Gbc][je][bc]; value_c += t_ikae * F_jebc; } /* -t_IkEb * F_jEcA */ Ge = Gi ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; eb = T2AB.params->colidx[E][B]; je = Fints.params->rowidx[J][E]; t_ikeb = F_jeca = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikeb = T2AB.matrix[Gik][ik][eb]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_jeca = Fints.matrix[Gac][je][ca]; value_c -= t_ikeb * F_jeca; } /* +t_IkEc * F_jEbA */ Ge = Gi ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ec = T2AB.params->colidx[E][C]; je = Fints.params->rowidx[J][E]; t_ikec = F_jeba = 0.0; if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik]) t_ikec = T2AB.matrix[Gik][ik][ec]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_jeba = Fints.matrix[Gba][je][ba]; value_c += t_ikec * F_jeba; } /* -t_IjAe * F_kebc */ Ge = Gi ^ Gj ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2AB.params->colidx[A][E]; ke = Faints.params->rowidx[K][E]; t_ijae = F_kebc = 0.0; if(T2AB.params->rowtot[Gij] && T2AB.params->coltot[Gij]) t_ijae = T2AB.matrix[Gij][ij][ae]; if(Faints.params->rowtot[Gbc] && Faints.params->coltot[Gbc]) F_kebc = Faints.matrix[Gbc][ke][bc]; value_c -= t_ijae * F_kebc; } /* +t_IjEb * F_kEcA */ Ge = Gi ^ Gj ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; eb = T2AB.params->colidx[E][B]; ke = Fints.params->rowidx[K][E]; t_ijeb = F_keca = 0.0; if(T2AB.params->rowtot[Gij] && T2AB.params->coltot[Gij]) t_ijeb = T2AB.matrix[Gij][ij][eb]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_keca = Fints.matrix[Gac][ke][ca]; value_c += t_ijeb * F_keca; } /* -t_IjEc * F_kEbA */ Ge = Gi ^ Gj ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ec = T2AB.params->colidx[E][C]; ke = Fints.params->rowidx[K][E]; t_ijec = F_keba = 0.0; if(T2AB.params->rowtot[Gij] && T2AB.params->coltot[Gij]) t_ijec = T2AB.matrix[Gij][ij][ec]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_keba = Fints.matrix[Gba][ke][ba]; value_c -= t_ijec * F_keba; } /** <oo||ov> --> connected triples **/ /* +t_ImAc * E_jkmb */ Gm = Gi ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2AB.params->rowidx[I][M]; mb = Eaints.params->colidx[M][B]; t_imac = E_jkmb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_imac = T2AB.matrix[Gac][im][ac]; if(Eaints.params->rowtot[Gjk] && Eaints.params->coltot[Gjk]) E_jkmb = Eaints.matrix[Gjk][jk][mb]; value_c += t_imac * E_jkmb; } /* -t_ImAb * E_jkmc */ Gm = Gi ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2AB.params->rowidx[I][M]; mc = Eaints.params->colidx[M][C]; t_imab = E_jkmc = 0.0; if(T2AB.params->rowtot[Gba] && T2AB.params->coltot[Gba]) t_imab = T2AB.matrix[Gba][im][ab]; if(Eaints.params->rowtot[Gjk] && Eaints.params->coltot[Gjk]) E_jkmc = Eaints.matrix[Gjk][jk][mc]; value_c -= t_imab * E_jkmc; } /* -t_jmbc * E_kImA */ Gm = Gj ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2BB.params->rowidx[J][M]; ma = Eints.params->colidx[M][A]; t_jmbc = E_kima = 0.0; if(T2BB.params->rowtot[Gbc] && T2BB.params->coltot[Gbc]) t_jmbc = T2BB.matrix[Gbc][jm][bc]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_kima = Eints.matrix[Gik][ki][ma]; value_c -= t_jmbc * E_kima; } /* +t_MjAc * E_IkMb */ Gm = Gj ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AB.params->rowidx[M][J]; mb = Eints.params->colidx[M][B]; t_mjac = E_ikmb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_mjac = T2AB.matrix[Gac][mj][ac]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmb = Eints.matrix[Gik][ik][mb]; value_c += t_mjac * E_ikmb; } /* -t_MjAb * E_IkMc */ Gm = Gj ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mj = T2AB.params->rowidx[M][J]; mc = Eints.params->colidx[M][C]; t_mjab = E_ikmc = 0.0; if(T2AB.params->rowtot[Gba] && T2AB.params->coltot[Gba]) t_mjab = T2AB.matrix[Gba][mj][ab]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmc = Eints.matrix[Gik][ik][mc]; value_c -= t_mjab * E_ikmc; } /* +t_kmbc * E_jImA */ Gm = Gk ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2BB.params->rowidx[K][M]; ma = Eints.params->colidx[M][A]; t_kmbc = E_jima = 0.0; if(T2BB.params->rowtot[Gbc] && T2BB.params->coltot[Gbc]) t_kmbc = T2BB.matrix[Gbc][km][bc]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jima = Eints.matrix[Gji][ji][ma]; value_c += t_kmbc * E_jima; } /* -t_MkAc * E_IjMb */ Gm = Gk ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; mb = Eints.params->colidx[M][B]; t_mkac = E_ijmb = 0.0; if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac]) t_mkac = T2AB.matrix[Gac][mk][ac]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_ijmb = Eints.matrix[Gji][ij][mb]; value_c -= t_mkac * E_ijmb; } /* +t_MkAb * E_IjMc */ Gm = Gk ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; mk = T2AB.params->rowidx[M][K]; mc = Eints.params->colidx[M][C]; t_mkab = E_ijmc = 0.0; if(T2AB.params->rowtot[Gba] && T2AB.params->coltot[Gba]) t_mkab = T2AB.matrix[Gba][mk][ab]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_ijmc = Eints.matrix[Gji][ij][mc]; value_c += t_mkab * E_ijmc; } /** disconnected triples **/ value_d = 0.0; /* +t_IA * D_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) t_ia = T1A.matrix[Gi][i][a]; if(Daints.params->rowtot[Gjk] && Daints.params->coltot[Gjk]) D_jkbc = Daints.matrix[Gjk][jk][bc]; value_d += t_ia * D_jkbc; } /* +t_jb * D_IkAc */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1B.params->rowtot[Gj] && T1B.params->coltot[Gj]) t_jb = T1B.matrix[Gj][j][b]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikac = Dints.matrix[Gik][ik][ac]; value_d += t_jb * D_ikac; } /* -t_jc * D_IkAb */ if(Gj == Gc && Gik == Gba) { t_jc = D_ikab = 0.0; if(T1B.params->rowtot[Gj] && T1B.params->coltot[Gj]) t_jc = T1B.matrix[Gj][j][c]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikab = Dints.matrix[Gik][ik][ab]; value_d -= t_jc * D_ikab; } /* -t_kb * D_IjAc */ if(Gk == Gb && Gji == Gac) { t_kb = D_ijac = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) t_kb = T1B.matrix[Gk][k][b]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_ijac = Dints.matrix[Gji][ij][ac]; value_d -= t_kb * D_ijac; } /* +t_kc * D_IjAb */ if(Gk == Gc && Gji == Gba) { t_kc = D_ijab = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) t_kc = T1B.matrix[Gk][k][c]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_ijab = Dints.matrix[Gji][ij][ab]; value_d += t_kc * D_ijab; } /* if(fabs(value_c) > 1e-7) { cnt++; fprintf(outfile, "%d %d %d %d %d %d %20.14f\n", I, J, K, A, B, C, value_c); } */ /* Compute the Fock denominator */ denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fij.params->rowtot[Gj]) denom += fij.matrix[Gj][j][j]; if(fij.params->rowtot[Gk]) denom += fij.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fab.params->rowtot[Gb]) denom -= fab.matrix[Gb][b][b]; if(fab.params->rowtot[Gc]) denom -= fab.matrix[Gc][c][c]; ET_ABB += (value_d + value_c) * value_c / denom; } /* c */ } /* b */ } /* a */ } /* k */ } /* j */ } /* i */ } /* Gb */ } /* Ga */ } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "cnt = %d\n", cnt); */ ET_ABB /= 4.0; /* fprintf(outfile, "ET_ABB = %20.14f\n", ET_ABB); */ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2BB, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&Faints, h); dpd_buf4_mat_irrep_close(&Fints, h); dpd_buf4_mat_irrep_close(&Eaints, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Daints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2BB); dpd_buf4_close(&T2AB); dpd_buf4_close(&Faints); dpd_buf4_close(&Fints); dpd_buf4_close(&Eaints); dpd_buf4_close(&Eints); dpd_buf4_close(&Daints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); return ET_ABB; } }} // namespace psi::cctriples ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_BBB.cc��������������������������������������������������������������������0000644�0001015�0000765�00000046132�10757640026�015031� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cmath> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_BBB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Ge, Gm; int Gji, Gij, Gjk, Gik, Gbc, Gac, Gba; int I, J, K, A, B, C, E, M; int i, j, k, a, b, c, e, m; int ij, ji, ik, jk, bc, ac, ba; int im, jm, km, ma, mb, mc; int ae, be, ce, ke, ie, je; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, denom, ET_BBB; double t_ijae, t_ijbe, t_ijce, t_jkae, t_jkbe, t_jkce, t_ikae, t_ikbe, t_ikce; double F_kebc, F_keac, F_keba, F_iebc, F_ieac, F_ieba, F_jebc, F_jeac, F_jeba; double t_imbc, t_imac, t_imba, t_jmbc, t_jmac, t_jmba, t_kmbc, t_kmac, t_kmba; double E_jkma, E_jkmb, E_jkmc, E_ikma, E_ikmb, E_ikmc, E_jima, E_jimb, E_jimc; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; dpdbuf4 T2, Fints, Eints, Dints; dpdfile2 fIJ, fAB, T1; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tijab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 1, "F <ia|bc>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Fints, h); dpd_buf4_mat_irrep_rd(&Fints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } cnt = 0; ET_BBB = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { Gij = Gji = Gi ^ Gj; for(Gk=0; Gk < nirreps; Gk++) { Gjk = Gj ^ Gk; Gik = Gi ^ Gk; for(Ga=0; Ga < nirreps; Ga++) { for(Gb=0; Gb < nirreps; Gb++) { Gc = Gi ^ Gj ^ Gk ^ Ga ^ Gb; Gbc = Gb^Gc; Gac = Ga^Gc; Gba = Gb^Ga; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; ij = T2.params->rowidx[I][J]; ji = T2.params->rowidx[J][I]; jk = T2.params->rowidx[J][K]; ik = T2.params->rowidx[I][K]; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Fints.params->colidx[B][C]; ac = Fints.params->colidx[A][C]; ba = Fints.params->colidx[B][A]; value_c = 0.0; /** <ov||vv> --> connected triples **/ /* -t_jkae * F_iebc */ Ge = Gj ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; ie = Fints.params->rowidx[I][E]; t_jkae = F_iebc = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkae = T2.matrix[Gjk][jk][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_iebc = Fints.matrix[Gbc][ie][bc]; value_c -= t_jkae * F_iebc; } /* +t_jkbe * F_ieac */ Ge = Gj ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; ie = Fints.params->rowidx[I][E]; t_jkbe = F_ieac = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkbe = T2.matrix[Gjk][jk][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_ieac = Fints.matrix[Gac][ie][ac]; value_c += t_jkbe * F_ieac; } /* +t_jkce * F_ieba */ Ge = Gj ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; ie = Fints.params->rowidx[I][E]; t_jkce = F_ieba = 0.0; if(T2.params->rowtot[Gjk] && T2.params->coltot[Gjk]) t_jkce = T2.matrix[Gjk][jk][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_ieba = Fints.matrix[Gba][ie][ba]; value_c += t_jkce * F_ieba; } /* +t_ikae * F_jebc */ Ge = Gi ^ Gk ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; je = Fints.params->rowidx[J][E]; t_ikae = F_jebc = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikae = T2.matrix[Gik][ik][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_jebc = Fints.matrix[Gbc][je][bc]; value_c += t_ikae * F_jebc; } /* -t_ikbe * F_jeac */ Ge = Gi ^ Gk ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; je = Fints.params->rowidx[J][E]; t_ikbe = F_jeac = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikbe = T2.matrix[Gik][ik][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_jeac = Fints.matrix[Gac][je][ac]; value_c -= t_ikbe * F_jeac; } /* -t_ikce * F_jeba */ Ge = Gi ^ Gk ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; je = Fints.params->rowidx[J][E]; t_ikce = F_jeba = 0.0; if(T2.params->rowtot[Gik] && T2.params->coltot[Gik]) t_ikce = T2.matrix[Gik][ik][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_jeba = Fints.matrix[Gba][je][ba]; value_c -= t_ikce * F_jeba; } /* -t_ijae * F_kebc */ Ge = Gi ^ Gj ^ Ga; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ae = T2.params->colidx[A][E]; ke = Fints.params->rowidx[K][E]; t_ijae = F_kebc = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijae = T2.matrix[Gij][ij][ae]; if(Fints.params->rowtot[Gbc] && Fints.params->coltot[Gbc]) F_kebc = Fints.matrix[Gbc][ke][bc]; value_c -= t_ijae * F_kebc; } /* +t_ijbe * F_keac */ Ge = Gi ^ Gj ^ Gb; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; be = T2.params->colidx[B][E]; ke = Fints.params->rowidx[K][E]; t_ijbe = F_keac = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijbe = T2.matrix[Gij][ij][be]; if(Fints.params->rowtot[Gac] && Fints.params->coltot[Gac]) F_keac = Fints.matrix[Gac][ke][ac]; value_c += t_ijbe * F_keac; } /* +t_ijce * F_keba */ Ge = Gi ^ Gj ^ Gc; for(e=0; e < virtpi[Ge]; e++) { E = vir_off[Ge] + e; ce = T2.params->colidx[C][E]; ke = Fints.params->rowidx[K][E]; t_ijce = F_keba = 0.0; if(T2.params->rowtot[Gij] && T2.params->coltot[Gij]) t_ijce = T2.matrix[Gij][ij][ce]; if(Fints.params->rowtot[Gba] && Fints.params->coltot[Gba]) F_keba = Fints.matrix[Gba][ke][ba]; value_c += t_ijce * F_keba; } /** <oo||vv> --> connected triples **/ /* -t_imbc * E_jkma */ Gm = Gi ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; ma = Eints.params->colidx[M][A]; t_imbc = E_jkma = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_imbc = T2.matrix[Gbc][im][bc]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkma = Eints.matrix[Gjk][jk][ma]; value_c -= t_imbc * E_jkma; } /* +t_imac * E_jkmb */ Gm = Gi ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; mb = Eints.params->colidx[M][B]; t_imac = E_jkmb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_imac = T2.matrix[Gac][im][ac]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkmb = Eints.matrix[Gjk][jk][mb]; value_c += t_imac * E_jkmb; } /* +t_imba * E_jkmc */ Gm = Gi ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; im = T2.params->rowidx[I][M]; mc = Eints.params->colidx[M][C]; t_imba = E_jkmc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_imba = T2.matrix[Gba][im][ba]; if(Eints.params->rowtot[Gjk] && Eints.params->coltot[Gjk]) E_jkmc = Eints.matrix[Gjk][jk][mc]; value_c += t_imba * E_jkmc; } /* +t_jmbc * E_ikma */ Gm = Gj ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; ma = Eints.params->colidx[M][A]; t_jmbc = E_ikma = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_jmbc = T2.matrix[Gbc][jm][bc]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikma = Eints.matrix[Gik][ik][ma]; value_c += t_jmbc * E_ikma; } /* -t_jmac * E_ikmb */ Gm = Gj ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; mb = Eints.params->colidx[M][B]; t_jmac = E_ikmb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_jmac = T2.matrix[Gac][jm][ac]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmb = Eints.matrix[Gik][ik][mb]; value_c -= t_jmac * E_ikmb; } /* -t_jmba * E_ikmc */ Gm = Gj ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; jm = T2.params->rowidx[J][M]; mc = Eints.params->colidx[M][C]; t_jmba = E_ikmc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_jmba = T2.matrix[Gba][jm][ba]; if(Eints.params->rowtot[Gik] && Eints.params->coltot[Gik]) E_ikmc = Eints.matrix[Gik][ik][mc]; value_c -= t_jmba * E_ikmc; } /* +t_kmbc * E_jima */ Gm = Gk ^ Gb ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; ma = Eints.params->colidx[M][A]; t_kmbc = E_jima = 0.0; if(T2.params->rowtot[Gbc] && T2.params->coltot[Gbc]) t_kmbc = T2.matrix[Gbc][km][bc]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jima = Eints.matrix[Gji][ji][ma]; value_c += t_kmbc * E_jima; } /* -t_kmac * E_jimb */ Gm = Gk ^ Ga ^ Gc; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; mb = Eints.params->colidx[M][B]; t_kmac = E_jimb = 0.0; if(T2.params->rowtot[Gac] && T2.params->coltot[Gac]) t_kmac = T2.matrix[Gac][km][ac]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jimb = Eints.matrix[Gji][ji][mb]; value_c -= t_kmac * E_jimb; } /* -t_kmba * E_jimc */ Gm = Gk ^ Gb ^ Ga; for(m=0; m < occpi[Gm]; m++) { M = occ_off[Gm] + m; km = T2.params->rowidx[K][M]; mc = Eints.params->colidx[M][C]; t_kmba = E_jimc = 0.0; if(T2.params->rowtot[Gba] && T2.params->coltot[Gba]) t_kmba = T2.matrix[Gba][km][ba]; if(Eints.params->rowtot[Gji] && Eints.params->coltot[Gji]) E_jimc = Eints.matrix[Gji][ji][mc]; value_c -= t_kmba * E_jimc; } /** disconnected triples **/ value_d = 0.0; /* +t_ia * D_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ia = T1.matrix[Gi][i][a]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkbc = Dints.matrix[Gjk][jk][bc]; value_d += t_ia * D_jkbc; } /* -t_ib * D_jkac */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ib = T1.matrix[Gi][i][b]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkac = Dints.matrix[Gjk][jk][ac]; value_d -= t_ib * D_jkac; } /* -t_ic * D_jkba */ if(Gi == Gc && Gjk == Gba) { t_ic = D_jkba = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) t_ic = T1.matrix[Gi][i][c]; if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) D_jkba = Dints.matrix[Gjk][jk][ba]; value_d -= t_ic * D_jkba; } /* -t_ja * D_ikbc */ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_ja = T1.matrix[Gj][j][a]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikbc = Dints.matrix[Gik][ik][bc]; value_d -= t_ja * D_ikbc; } /* +t_jb * D_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_jb = T1.matrix[Gj][j][b]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikac = Dints.matrix[Gik][ik][ac]; value_d += t_jb * D_ikac; } /* +t_jc * D_ikba */ if(Gj == Gc && Gik == Gba) { t_jc = D_ikba = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) t_jc = T1.matrix[Gj][j][c]; if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) D_ikba = Dints.matrix[Gik][ik][ba]; value_d += t_jc * D_ikba; } /* -t_ka * D_jibc */ if(Gk == Ga && Gji == Gbc) { t_ka = D_jibc = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_ka = T1.matrix[Gk][k][a]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jibc = Dints.matrix[Gji][ji][bc]; value_d -= t_ka * D_jibc; } /* +t_kb * D_jiac */ if(Gk == Gb && Gji == Gac) { t_kb = D_jiac = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_kb = T1.matrix[Gk][k][b]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jiac = Dints.matrix[Gji][ji][ac]; value_d += t_kb * D_jiac; } /* +t_kc * D_jiba */ if(Gk == Gc && Gji == Gba) { t_kc = D_jiba = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) t_kc = T1.matrix[Gk][k][c]; if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) D_jiba = Dints.matrix[Gji][ji][ba]; value_d += t_kc * D_jiba; } /* if(fabs(value_c) > 1e-7) { cnt++; fprintf(outfile, "%d %d %d %d %d %d %20.14f\n", I, J, K, A, B, C, value_c); } */ /* Compute the Fock denominator */ denom = 0.0; if(fIJ.params->rowtot[Gi]) denom += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) denom += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) denom += fIJ.matrix[Gk][k][k]; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; ET_BBB += (value_d + value_c) * value_c / denom; } /* c */ } /* b */ } /* a */ } /* k */ } /* j */ } /* i */ } /* Gb */ } /* Ga */ } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "cnt = %d\n", cnt); */ ET_BBB /= 36.0; /* fprintf(outfile, "ET_BBB = %20.14f\n", ET_BBB); */ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Fints, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); return ET_BBB; } }} // namespace psi::cctriples ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_RHF.cc��������������������������������������������������������������������0000644�0001015�0000765�00000061366�11007601550�015055� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <pthread.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; struct thread_data { dpdfile2 *fIJ; dpdfile2 *fAB; dpdfile2 *fIA; dpdfile2 *T1; dpdbuf4 *T2; dpdbuf4 *Eints; dpdbuf4 *Dints; dpdbuf4 *Fints_local; double *ET_local; int Gi; int Gj; int Gk; int first_ijk; int last_ijk; }; void *ET_RHF_thread(void *thread_data); double ET_RHF(void) { int i,j,k,I,J,K,Gi,Gj,Gk, h, nirreps, cnt; int nijk, nthreads, thread, *ijk_part, errcod; int *occpi, *virtpi, *occ_off, *vir_off; double ET, *ET_array; dpdfile2 fIJ, fAB, fIA, T1; dpdbuf4 T2, Eints, Dints, *Fints_array; FILE *ijkfile; pthread_t *p_thread; struct thread_data *thread_data_array; timer_on("ET_RHF"); nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; nthreads = params.nthreads; thread_data_array = (struct thread_data *) malloc(nthreads*sizeof(struct thread_data)); p_thread = (pthread_t *) malloc(nthreads*sizeof(pthread_t)); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fIA); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } ffile(&ijkfile,"ijk.dat", 0); /* each thread gets its own F buffer to assign memory and read blocks into and its own energy double - all else shared */ Fints_array = (dpdbuf4 *) malloc(nthreads*sizeof(dpdbuf4)); for (thread=0; thread<nthreads;++thread) dpd_buf4_init(&(Fints_array[thread]), CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); ET_array = (double *) malloc(nthreads*sizeof(double)); ijk_part = new int [nthreads]; for (thread=0;thread<nthreads;++thread) { thread_data_array[thread].fIJ = &fIJ; thread_data_array[thread].fAB = &fAB; thread_data_array[thread].fIA = &fIA; thread_data_array[thread].T1 = &T1; thread_data_array[thread].T2 = &T2; thread_data_array[thread].Eints = &Eints; thread_data_array[thread].Dints = &Dints; thread_data_array[thread].Fints_local = &(Fints_array[thread]); thread_data_array[thread].ET_local = &(ET_array[thread]); } /* Compute total number of IJK combinations */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I >= J && J >= K) nijk++; } } } fprintf(ijkfile, "Total number of IJK combinations =: %d\n", nijk); ET = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { nijk = 0; // total number of ijk for these irreps for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I >= J && J >= K) nijk++; } } } fprintf(ijkfile, "Num. of IJK with (Gi,Gj,Gk)=(%d,%d,%d) =: %d\n", Gi, Gj, Gk, nijk); if (nijk == 0) continue; for (thread=0; thread<nthreads;++thread) { thread_data_array[thread].Gi = Gi; thread_data_array[thread].Gj = Gj; thread_data_array[thread].Gk = Gk; ET_array[thread] = 0.0; ijk_part[thread] = nijk / nthreads; // number of ijk for each thread if (thread < (nijk % nthreads)) ++ijk_part[thread]; } cnt = 0; for (thread=0; thread<nthreads; ++thread) { if (!ijk_part[thread]) continue; // there are more threads than nijk thread_data_array[thread].first_ijk = cnt; cnt += ijk_part[thread]; thread_data_array[thread].last_ijk = cnt-1; } /* execute threads */ for (thread=0; thread<nthreads;++thread) { if (!ijk_part[thread]) continue; fprintf(ijkfile,"\tthread %d: first_ijk=%d, last_ijk=%d\n", thread, thread_data_array[thread].first_ijk, thread_data_array[thread].last_ijk); } for (thread=0;thread<nthreads;++thread) { if (!ijk_part[thread]) continue; errcod = pthread_create(&(p_thread[thread]), NULL, ET_RHF_thread, (void *) &thread_data_array[thread]); if (errcod) { fprintf(stderr,"pthread_create in ET_RHF() failed\n"); exit(PSI_RETURN_FAILURE); } } for (thread=0; thread<nthreads;++thread) { if (!ijk_part[thread]) continue; errcod = pthread_join(p_thread[thread], NULL); if (errcod) { fprintf(stderr,"pthread_join in ET_RHF() failed\n"); exit(PSI_RETURN_FAILURE); } } for (thread=0;thread<nthreads;++thread) ET += ET_array[thread]; } /* Gk */ } /* Gj */ } /* Gi */ fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); for (thread=0; thread<nthreads; ++thread) dpd_buf4_close(&(Fints_array[thread])); free(Fints_array); free(ET_array); delete [] ijk_part; free(thread_data_array); free(p_thread); timer_off("ET_RHF"); return ET; } void* ET_RHF_thread(void* thread_data_in) { int h, nirreps, cnt_ijk; int Gp, p, nump; int nrows, ncols, nlinks; int Gijk, Gid, Gkd, Gjd, Gil, Gkl, Gjl; int Gab, Gba, Gbc, Gcb, Gac, Gca; int ab, ba, bc, cb, ac, ca; int cd, bd, ad, lc, lb, la; int il, jl, kl; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gij, Gji, Gjk, Gkj, Gik, Gki; int I, J, K, A, B, C, D, L; int i, j, k, a, b, c, d, l; int ij, ji, ik, ki, jk, kj; int *occpi, *virtpi, *occ_off, *vir_off; double t_ia, t_jb, t_kc, D_jkbc, D_ikac, D_ijab; double f_ia, f_jb, f_kc, t_jkbc, t_ikac, t_ijab; double dijk, value1, value2, value3, value4, value5, value6, denom, *ET_local; double ***W0, ***W1, ***V, ***X, ***Y, ***Z; dpdbuf4 *T2, *Eints, *Dints, *Fints; dpdfile2 *fIJ, *fAB, *fIA, *T1; int nijk, nthreads, first_ijk, last_ijk, thr_id; struct thread_data *data; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; data = (struct thread_data *) thread_data_in; fIJ = data->fIJ; fAB = data->fAB; fIA = data->fIA; T1 = data->T1; T2 = data->T2; Eints = data->Eints; Dints = data->Dints; Fints = data->Fints_local; ET_local = data->ET_local; // pointer to where thread E goes Gi = data->Gi; Gj = data->Gj; Gk = data->Gk; first_ijk = data->first_ijk; last_ijk = data->last_ijk; W0 = (double ***) malloc(nirreps * sizeof(double **)); W1 = (double ***) malloc(nirreps * sizeof(double **)); V = (double ***) malloc(nirreps * sizeof(double **)); X = (double ***) malloc(nirreps * sizeof(double **)); Y = (double ***) malloc(nirreps * sizeof(double **)); Z = (double ***) malloc(nirreps * sizeof(double **)); Gkj = Gjk = Gk ^ Gj; Gji = Gij = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; cnt_ijk = -1; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I >= J && J >= K) { ++cnt_ijk; /* check to see if this ijk is for this thread */ if ( (cnt_ijk < first_ijk) || (cnt_ijk > last_ijk)) continue; ij = T2->params->rowidx[I][J]; ji = T2->params->rowidx[J][I]; ik = T2->params->rowidx[I][K]; ki = T2->params->rowidx[K][I]; jk = T2->params->rowidx[J][K]; kj = T2->params->rowidx[K][J]; dijk = 0.0; if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i]; if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j]; if(fIJ->params->rowtot[Gk]) dijk += fIJ->matrix[Gk][k][k]; /* Malloc space for the W intermediate */ // timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; W0[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); W1[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); } // timer_off("malloc"); // timer_on("N7 Terms"); /* +F_idab * t_kjcd */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gkj ^ Gd; /* Set up F integrals */ Fints->matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gid]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gid, Fints->row_offset[Gid][I], virtpi[Gd]); pthread_mutex_unlock(&mut); /* Set up T2 amplitudes */ cd = T2->col_offset[Gkj][Gc]; /* Set up multiplication parameters */ nrows = Fints->params->coltot[Gid]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gid][0][0]), nrows, &(T2->matrix[Gkj][kj][cd]), nlinks, 0.0, &(W0[Gab][0][0]), ncols); dpd_free_block(Fints->matrix[Gid], virtpi[Gd], Fints->params->coltot[Gid]); } /* -E_jklc * t_ilab */ for(Gl=0; Gl < nirreps; Gl++) { Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; /* Set up E integrals */ lc = Eints->col_offset[Gjk][Gl]; /* Set up T2 amplitudes */ il = T2->row_offset[Gil][I]; /* Set up multiplication parameters */ nrows = T2->params->coltot[Gil]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gil][il][0]), nrows, &(Eints->matrix[Gjk][jk][lc]), ncols, 1.0, &(W0[Gab][0][0]), ncols); } /* Sort W[ab][c] --> W[ac][b] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, acb, 0); /* +F_idac * t_jkbd */ for(Gd=0; Gd < nirreps; Gd++) { Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; Fints->matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gid]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gid, Fints->row_offset[Gid][I], virtpi[Gd]); pthread_mutex_unlock(&mut); bd = T2->col_offset[Gjk][Gb]; nrows = Fints->params->coltot[Gid]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gid][0][0]), nrows, &(T2->matrix[Gjk][jk][bd]), nlinks, 1.0, &(W1[Gac][0][0]), ncols); dpd_free_block(Fints->matrix[Gid], virtpi[Gd], Fints->params->coltot[Gid]); } /* -E_kjlb * t_ilac */ for(Gl=0; Gl < nirreps; Gl++) { Gac = Gil = Gi ^ Gl; Gb = Gkj ^ Gl; lb = Eints->col_offset[Gkj][Gl]; il = T2->row_offset[Gil][I]; nrows = T2->params->coltot[Gil]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gil][il][0]), nrows, &(Eints->matrix[Gkj][kj][lb]), ncols, 1.0, &(W1[Gac][0][0]), ncols); } /* Sort W[ac][b] --> W[ca][b] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, bac, 0); /* +F_kdca * t_jibd */ for(Gd=0; Gd < nirreps; Gd++) { Gca = Gkd = Gk ^ Gd; Gb = Gji ^ Gd; Fints->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gkd]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gkd, Fints->row_offset[Gkd][K], virtpi[Gd]); pthread_mutex_unlock(&mut); bd = T2->col_offset[Gji][Gb]; nrows = Fints->params->coltot[Gkd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gkd][0][0]), nrows, &(T2->matrix[Gji][ji][bd]), nlinks, 1.0, &(W0[Gca][0][0]), ncols); dpd_free_block(Fints->matrix[Gkd], virtpi[Gd], Fints->params->coltot[Gkd]); } /* -E_ijlb * t_klca */ for(Gl=0; Gl < nirreps; Gl++) { Gca = Gkl = Gk ^ Gl; Gb = Gij ^ Gl; lb = Eints->col_offset[Gij][Gl]; kl = T2->row_offset[Gkl][K]; nrows = T2->params->coltot[Gkl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gkl][kl][0]), nrows, &(Eints->matrix[Gij][ij][lb]), ncols, 1.0, &(W0[Gca][0][0]), ncols); } /* Sort W[ca][b] --> W[cb][a] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, acb, 0); /* +F_kdcb * t_ijad */ for(Gd=0; Gd < nirreps; Gd++) { Gcb = Gkd = Gk ^ Gd; Ga = Gij ^ Gd; Fints->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gkd]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gkd, Fints->row_offset[Gkd][K], virtpi[Gd]); pthread_mutex_unlock(&mut); ad = T2->col_offset[Gij][Ga]; nrows = Fints->params->coltot[Gkd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gkd][0][0]), nrows, &(T2->matrix[Gij][ij][ad]), nlinks, 1.0, &(W1[Gcb][0][0]), ncols); dpd_free_block(Fints->matrix[Gkd], virtpi[Gd], Fints->params->coltot[Gkd]); } /* -E_jila * t_klcb */ for(Gl=0; Gl < nirreps; Gl++) { Gcb = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = Eints->col_offset[Gji][Gl]; kl = T2->row_offset[Gkl][K]; nrows = T2->params->coltot[Gkl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gkl][kl][0]), nrows, &(Eints->matrix[Gji][ji][la]), ncols, 1.0, &(W1[Gcb][0][0]), ncols); } /* Sort W[cb][a] --> W[bc][a] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, bac, 0); /* +F_jdbc * t_ikad */ for(Gd=0; Gd < nirreps; Gd++) { Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; Fints->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gjd]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gjd, Fints->row_offset[Gjd][J], virtpi[Gd]); pthread_mutex_unlock(&mut); ad = T2->col_offset[Gik][Ga]; nrows = Fints->params->coltot[Gjd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gjd][0][0]), nrows, &(T2->matrix[Gik][ik][ad]), nlinks, 1.0, &(W0[Gbc][0][0]), ncols); dpd_free_block(Fints->matrix[Gjd], virtpi[Gd], Fints->params->coltot[Gjd]); } /* -E_kila * t_jlbc */ for(Gl=0; Gl < nirreps; Gl++) { Gbc = Gjl = Gj ^ Gl; Ga = Gki ^ Gl; la = Eints->col_offset[Gki][Gl]; jl = T2->row_offset[Gjl][J]; nrows = T2->params->coltot[Gjl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gjl][jl][0]), nrows, &(Eints->matrix[Gki][ki][la]), ncols, 1.0, &(W0[Gbc][0][0]), ncols); } /* Sort W[bc][a] --> W[ba][c] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, acb, 0); /* +F_jdba * t_kicd */ for(Gd=0; Gd < nirreps; Gd++) { Gba = Gjd = Gj ^ Gd; Gc = Gki ^ Gd; Fints->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints->params->coltot[Gjd]); pthread_mutex_lock(&mut); dpd_buf4_mat_irrep_rd_block(Fints, Gjd, Fints->row_offset[Gjd][J], virtpi[Gd]); pthread_mutex_unlock(&mut); cd = T2->col_offset[Gki][Gc]; nrows = Fints->params->coltot[Gjd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints->matrix[Gjd][0][0]), nrows, &(T2->matrix[Gki][ki][cd]), nlinks, 1.0, &(W1[Gba][0][0]), ncols); dpd_free_block(Fints->matrix[Gjd], virtpi[Gd], Fints->params->coltot[Gjd]); } /* -E_iklc * t_jlba */ for(Gl=0; Gl < nirreps; Gl++) { Gba = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = Eints->col_offset[Gik][Gl]; jl = T2->row_offset[Gjl][J]; nrows = T2->params->coltot[Gjl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2->matrix[Gjl][jl][0]), nrows, &(Eints->matrix[Gik][ik][lc]), ncols, 1.0, &(W1[Gba][0][0]), ncols); } /* Sort W[ba][c] --> W[ab][c] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints->params->coltot, Fints->params->colidx, Fints->params->colorb, Fints->params->rsym, Fints->params->ssym, vir_off, vir_off, virtpi, vir_off, Fints->params->colidx, bac, 0); // timer_off("N7 Terms"); // timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(W1[Gab],Fints->params->coltot[Gab],virtpi[Gc]); V[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); } // timer_off("malloc"); /* Copy W intermediate into V */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints->params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { V[Gab][ab][c] = W0[Gab][ab][c]; } } } // timer_on("EST Terms"); /* Add EST terms to V */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints->params->coltot[Gab]; ab++) { A = Fints->params->colorb[Gab][ab][0]; Ga = Fints->params->rsym[A]; a = A - vir_off[Ga]; B = Fints->params->colorb[Gab][ab][1]; Gb = Fints->params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints->params->colidx[B][C]; ac = Dints->params->colidx[A][C]; /* +t_ia * D_jkbc + f_ia * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1->params->rowtot[Gi] && T1->params->coltot[Gi]) { t_ia = T1->matrix[Gi][i][a]; f_ia = fIA->matrix[Gi][i][a]; } if(Dints->params->rowtot[Gjk] && Dints->params->coltot[Gjk]) { D_jkbc = Dints->matrix[Gjk][jk][bc]; t_jkbc = T2->matrix[Gjk][jk][bc]; } V[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* +t_jb * D_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1->params->rowtot[Gj] && T1->params->coltot[Gj]) { t_jb = T1->matrix[Gj][j][b]; f_jb = fIA->matrix[Gj][j][b]; } if(Dints->params->rowtot[Gik] && Dints->params->coltot[Gik]) { D_ikac = Dints->matrix[Gik][ik][ac]; t_ikac = T2->matrix[Gik][ik][ac]; } V[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* +t_kc * D_ijab */ if(Gk == Gc && Gij == Gab) { t_kc = D_ijab = 0.0; if(T1->params->rowtot[Gk] && T1->params->coltot[Gk]) { t_kc = T1->matrix[Gk][k][c]; f_kc = fIA->matrix[Gk][k][c]; } if(Dints->params->rowtot[Gij] && Dints->params->coltot[Gij]) { D_ijab = Dints->matrix[Gij][ij][ab]; t_ijab = T2->matrix[Gij][ij][ab]; } V[Gab][ab][c] += t_kc * D_ijab + f_kc * t_ijab; } V[Gab][ab][c] /= (1 + (A==B) + (B==C) + (A==C)); } } } // timer_off("EST Terms"); // timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; X[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); Y[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); Z[Gab] = dpd_block_matrix(Fints->params->coltot[Gab],virtpi[Gc]); } // timer_off("malloc"); // timer_on("XYZ"); /* Build X, Y, and Z intermediates */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < Fints->params->coltot[Gab]; ab++) { A = Fints->params->colorb[Gab][ab][0]; Ga = Fints->params->rsym[A]; a = A - vir_off[Ga]; B = Fints->params->colorb[Gab][ab][1]; Gb = Fints->params->ssym[B]; b = B - vir_off[Gb]; Gac = Gca = Ga ^ Gc; Gbc = Gcb = Gb ^ Gc; ba = Dints->params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Dints->params->colidx[A][C]; ca = Dints->params->colidx[C][A]; bc = Dints->params->colidx[B][C]; cb = Dints->params->colidx[C][B]; X[Gab][ab][c] = W0[Gab][ab][c] * V[Gab][ab][c] + W0[Gac][ac][b] * V[Gac][ac][b] + W0[Gba][ba][c] * V[Gba][ba][c] + W0[Gbc][bc][a] * V[Gbc][bc][a] + W0[Gca][ca][b] * V[Gca][ca][b] + W0[Gcb][cb][a] * V[Gcb][cb][a]; Y[Gab][ab][c] = V[Gab][ab][c] + V[Gbc][bc][a] + V[Gca][ca][b]; Z[Gab][ab][c] = V[Gac][ac][b] + V[Gba][ba][c] + V[Gcb][cb][a]; } } } // timer_off("XYZ"); // timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(V[Gab], Fints->params->coltot[Gab], virtpi[Gc]); } // timer_off("malloc"); // timer_on("Energy"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < Fints->params->coltot[Gab]; ab++) { A = Fints->params->colorb[Gab][ab][0]; Ga = Fints->params->rsym[A]; a = A - vir_off[Ga]; B = Fints->params->colorb[Gab][ab][1]; Gb = Fints->params->ssym[B]; b = B - vir_off[Gb]; if(A >= B) { Gac = Gca = Ga ^ Gc; Gbc = Gcb = Gb ^ Gc; ba = Dints->params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; if(B >= C) { ac = Dints->params->colidx[A][C]; ca = Dints->params->colidx[C][A]; bc = Dints->params->colidx[B][C]; cb = Dints->params->colidx[C][B]; value1 = Y[Gab][ab][c] - 2.0 * Z[Gab][ab][c]; value2 = Z[Gab][ab][c] - 2.0 * Y[Gab][ab][c]; value3 = W0[Gab][ab][c] + W0[Gbc][bc][a] + W0[Gca][ca][b]; value4 = W0[Gac][ac][b] + W0[Gba][ba][c] + W0[Gcb][cb][a]; value5 = 3.0 * X[Gab][ab][c]; value6 = 2 - ((I==J) + (J==K) + (I==K)); denom = dijk; if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a]; if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b]; if(fAB->params->rowtot[Gc]) denom -= fAB->matrix[Gc][c][c]; *ET_local += (value1 * value3 + value2 * value4 + value5) * value6/denom; } } } } } // timer_off("Energy"); /* Free the W and V intermediates */ // timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(W0[Gab],Fints->params->coltot[Gab],virtpi[Gc]); dpd_free_block(X[Gab],Fints->params->coltot[Gab],virtpi[Gc]); dpd_free_block(Y[Gab],Fints->params->coltot[Gab],virtpi[Gc]); dpd_free_block(Z[Gab],Fints->params->coltot[Gab],virtpi[Gc]); } // timer_off("malloc"); } } /* k */ } /* j */ } /* i */ pthread_exit(NULL); } }} // namespace psi::cctriples ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_UHF_AAA.cc����������������������������������������������������������������0000644�0001015�0000765�00000052266�11027011315�015515� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_UHF_AAA(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl; int I, J, K, A, B, C; int i, j, k, a, b, c; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int cd, ad, bd; int id, jd, kd; int il, jl, kl; int lc, la, lb; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, dijk, denom, ET; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba; int nrows, ncols, nlinks; dpdbuf4 T2, Fints, Eints, Dints; dpdfile2 fIJ, fAB, fIA, T1; double ***WABC, ***WBCA, ***WACB, ***VABC; int nijk, mijk; FILE *ijkfile; nirreps = moinfo.nirreps; occpi = moinfo.aoccpi; virtpi = moinfo.avirtpi; occ_off = moinfo.aocc_off; vir_off = moinfo.avir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fIA); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } /* Compute the number of IJK combinations in this spin case */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I > J && J > K) nijk++; } } } ffile(&ijkfile,"ijk.dat", 0); fprintf(ijkfile, "Spin Case: AAA\n"); fprintf(ijkfile, "Number of IJK combintions: %d\n", nijk); fprintf(ijkfile, "\nCurrent IJK Combination:\n"); WABC = (double ***) malloc(nirreps * sizeof(double **)); VABC = (double ***) malloc(nirreps * sizeof(double **)); WBCA = (double ***) malloc(nirreps * sizeof(double **)); WACB = (double ***) malloc(nirreps * sizeof(double **)); mijk = 0; ET = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I > J && J > K) { mijk++; fprintf(ijkfile, "%d\n", mijk); fflush(ijkfile); ij = Eints.params->rowidx[I][J]; ji = Eints.params->rowidx[J][I]; jk = Eints.params->rowidx[J][K]; kj = Eints.params->rowidx[K][J]; ik = Eints.params->rowidx[I][K]; ki = Eints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_jkcd * F_idab */ Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; cd = T2.col_offset[Gjk][Gc]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* +t_ikcd * F_jdab */ Gab = Gjd = Gj ^ Gd; Gc = Gik ^ Gd; cd = T2.col_offset[Gik][Gc]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* +t_jicd * F_kdab */ Gab = Gkd = Gk ^ Gd; Gc = Gji ^ Gd; cd = T2.col_offset[Gji][Gc]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilab E_jklc */ Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; lc = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); /* +t_jlab E_iklc */ Gab = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); /* +t_klab E_jilc */ Gab = Gkl = Gk ^ Gl; Gc = Gji ^ Gl; lc = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WBCA[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_jkad * F_idbc */ Gbc = Gid = Gi ^ Gd; Ga = Gjk ^ Gd; ad = T2.col_offset[Gjk][Ga]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* +t_ikad * F_jdbc */ Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; ad = T2.col_offset[Gik][Ga]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* +t_jiad * F_kdbc */ Gbc = Gkd = Gk ^ Gd; Ga = Gji ^ Gd; ad = T2.col_offset[Gji][Ga]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilbc * E_jkla */ Gbc = Gil = Gi ^ Gl; Ga = Gjk ^ Gl; la = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); /* +t_jlbc E_ikla */ Gbc = Gjl = Gj ^ Gl; Ga = Gik ^ Gl; la = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); /* +t_klbc E_jila */ Gbc = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); } dpd_3d_sort(WBCA, WABC, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, cab, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WBCA[Gab], Fints.params->coltot[Gab], virtpi[Gc]); WACB[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_jkbd * F_idac */ Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; bd = T2.col_offset[Gjk][Gb]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* -t_ikbd * F_jdac */ Gac = Gjd = Gj ^ Gd; Gb = Gik ^ Gd; bd = T2.col_offset[Gik][Gb]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* -t_jibd * F_kdac */ Gac = Gkd = Gk ^ Gd; Gb = Gji ^ Gd; bd = T2.col_offset[Gji][Gb]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_ilac * E_jklb */ Gac = Gil = Gi ^ Gl; Gb = Gjk ^ Gl; lb = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); /* -t_jlac * E_iklb */ Gac = Gjl = Gj ^ Gl; Gb = Gik ^ Gl; lb = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); /* -t_klac * E_jilb */ Gac = Gkl = Gk ^ Gl; Gb = Gji ^ Gl; lb = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); } dpd_3d_sort(WACB, WABC, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, acb, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WACB[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } /* Add disconnected triples and finish W and V */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; VABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; ac = Dints.params->colidx[A][C]; /* +t_ia * D_jkbc + f_ia * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ia = T1.matrix[Gi][i][a]; f_ia = fIA.matrix[Gi][i][a]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkbc = Dints.matrix[Gjk][jk][bc]; t_jkbc = T2.matrix[Gjk][jk][bc]; } VABC[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* -t_ib * D_jkac - f_ib * t_jkac */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = f_ib = t_jkac = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ib = T1.matrix[Gi][i][b]; f_ib = fIA.matrix[Gi][i][b]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkac = Dints.matrix[Gjk][jk][ac]; t_jkac = T2.matrix[Gjk][jk][ac]; } VABC[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac; } /* +t_ic * D_jkab + f_ic * t_jkba */ if(Gi == Gc && Gjk == Gab) { t_ic = D_jkba = f_ic = t_jkba = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ic = T1.matrix[Gi][i][c]; f_ic = fIA.matrix[Gi][i][c]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkba = Dints.matrix[Gjk][jk][ab]; t_jkba = T2.matrix[Gjk][jk][ab]; } VABC[Gab][ab][c] += t_ic * D_jkba + f_ic * t_jkba; } /* -t_ja * D_ikbc - f_ja * t_ikbc*/ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = f_ja = t_ikbc = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_ja = T1.matrix[Gj][j][a]; f_ja = fIA.matrix[Gj][j][a]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikbc = Dints.matrix[Gik][ik][bc]; t_ikbc = T2.matrix[Gik][ik][bc]; } VABC[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc; } /* +t_jb * D_ikac + f_jb * t_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_jb = T1.matrix[Gj][j][b]; f_jb = fIA.matrix[Gj][j][b]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikac = Dints.matrix[Gik][ik][ac]; t_ikac = T2.matrix[Gik][ik][ac]; } VABC[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_jc * D_ikba - f_jc * t_ikba */ if(Gj == Gc && Gik == Gab) { t_jc = D_ikba = f_jc = t_ikba = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_jc = T1.matrix[Gj][j][c]; f_jc = fIA.matrix[Gj][j][c]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikba = Dints.matrix[Gik][ik][ab]; t_ikba = T2.matrix[Gik][ik][ab]; } VABC[Gab][ab][c] -= t_jc * D_ikba + f_jc * t_ikba; } /* -t_ka * D_jibc - f_ka * t_jibc */ if(Gk == Ga && Gji == Gbc) { t_ka = D_jibc = f_ka = t_jibc = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_ka = T1.matrix[Gk][k][a]; f_ka = fIA.matrix[Gk][k][a]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jibc = Dints.matrix[Gji][ji][bc]; t_jibc = T2.matrix[Gji][ji][bc]; } VABC[Gab][ab][c] -= t_ka * D_jibc + f_ka * t_jibc; } /* +t_kb * D_jiac + f_kb * t_jiac */ if(Gk == Gb && Gji == Gac) { t_kb = D_jiac = f_kb = t_jiac = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_kb = T1.matrix[Gk][k][b]; f_kb = fIA.matrix[Gk][k][b]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jiac = Dints.matrix[Gji][ji][ac]; t_jiac = T2.matrix[Gji][ji][ac]; } VABC[Gab][ab][c] += t_kb * D_jiac + f_kb * t_jiac; } /* -t_kc * D_jiab - f_kc * t_jiba*/ if(Gk == Gc && Gji == Gab) { t_kc = D_jiba = f_kc = t_jiba = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_kc = T1.matrix[Gk][k][c]; f_kc = fIA.matrix[Gk][k][c]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jiba = Dints.matrix[Gji][ji][ab]; t_jiba = T2.matrix[Gji][ji][ab]; } VABC[Gab][ab][c] -= t_kc * D_jiba + f_kc * t_jiba; } // if(fabs(WABC[Gab][ab][c]) > 1e-7) // fprintf(outfile, "%d %d %d %d %d %d %20.15f\n", I,J,K,A,B,C,WABC[Gab][ab][c]); /* Sum V and W into V */ VABC[Gab][ab][c] += WABC[Gab][ab][c]; /* Build the rest of the denominator and divide it into W */ denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; WABC[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; ET += dot_block(WABC[Gab], VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc], 1.0/6.0); dpd_free_block(WABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } } /* I >= J >= K */ } /* k */ } /* j */ } /* i */ } /* Gk */ } /* Gj */ } /* Gi */ free(WABC); free(VABC); free(WBCA); free(WACB); fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); return ET; } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_UHF_AAB.cc����������������������������������������������������������������0000644�0001015�0000765�00000054275�10757640026�015540� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_UHF_AAB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac, Gcb, Gca; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl; int I, J, K, A, B, C; int i, j, k, a, b, c; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int dc, ad, bd; int lc, la, lb; int id, jd, kd; int il, jl, kl; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; double value_c, value_d, dijk, denom, ET_AAB; double t_ia, t_ib, t_ja, t_jb, t_kc; double f_ia, f_ib, f_ja, f_jb, f_kc; double D_jkbc, D_jkac, D_ikbc, D_ikac, D_jiab; double t_jkbc, t_jkac, t_ikbc, t_ikac, t_jiab; int nrows, ncols, nlinks; dpdbuf4 T2AB, T2AA, T2BA; dpdbuf4 FAAints, FABints, FBAints; dpdbuf4 EAAints, EABints, EBAints; dpdbuf4 DAAints, DABints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab, fIA, fia; double ***WABc, ***WBcA, ***WAcB, ***WcAB, ***WcBA, ***VABc; int nijk, mijk; FILE *ijkfile; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_mat_rd(&fIA); dpd_file2_mat_rd(&fia); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FAAints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&FABints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EAAints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&EABints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DAAints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DABints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2AA, h); dpd_buf4_mat_irrep_rd(&T2AA, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&T2BA, h); dpd_buf4_mat_irrep_rd(&T2BA, h); dpd_buf4_mat_irrep_init(&EAAints, h); dpd_buf4_mat_irrep_rd(&EAAints, h); dpd_buf4_mat_irrep_init(&EABints, h); dpd_buf4_mat_irrep_rd(&EABints, h); dpd_buf4_mat_irrep_init(&EBAints, h); dpd_buf4_mat_irrep_rd(&EBAints, h); dpd_buf4_mat_irrep_init(&DAAints, h); dpd_buf4_mat_irrep_rd(&DAAints, h); dpd_buf4_mat_irrep_init(&DABints, h); dpd_buf4_mat_irrep_rd(&DABints, h); } /* Compute the number of IJK combinations in this spin case */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(I > J) nijk++; } } } ffile(&ijkfile,"ijk.dat",0); fprintf(ijkfile, "Spin Case: AAB\n"); fprintf(ijkfile, "Number of IJK combintions: %d\n", nijk); fprintf(ijkfile, "\nCurrent IJK Combination:\n"); mijk = 0; ET_AAB = 0.0; WABc = (double ***) malloc(nirreps * sizeof(double **)); WBcA = (double ***) malloc(nirreps * sizeof(double **)); WAcB = (double ***) malloc(nirreps * sizeof(double **)); WcAB = (double ***) malloc(nirreps * sizeof(double **)); WcBA = (double ***) malloc(nirreps * sizeof(double **)); VABc = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(I > J) { mijk++; fprintf(ijkfile, "%d\n", mijk); fflush(ijkfile); ij = EAAints.params->rowidx[I][J]; ji = EAAints.params->rowidx[J][I]; jk = EABints.params->rowidx[J][K]; kj = EBAints.params->rowidx[K][J]; ik = EABints.params->rowidx[I][K]; ki = EBAints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fij.params->rowtot[Gk]) dijk += fij.matrix[Gk][k][k]; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABc[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JkDc * F_IDAB */ Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; dc = T2AB.col_offset[Gjk][Gd]; id = FAAints.row_offset[Gid][I]; FAAints.matrix[Gid] = dpd_block_matrix(avirtpi[Gd], FAAints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&FAAints, Gid, id, avirtpi[Gd]); nrows = FAAints.params->coltot[Gid]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(FAAints.matrix[Gid][0][0]), nrows, &(T2AB.matrix[Gjk][jk][dc]), ncols, 1.0, &(WABc[Gab][0][0]), ncols); dpd_free_block(FAAints.matrix[Gid], avirtpi[Gd], FAAints.params->coltot[Gid]); /* -t_IkDc * F_JDAB */ Gab = Gjd = Gj ^ Gd; Gc = Gik ^ Gd; dc = T2AB.col_offset[Gik][Gd]; jd = FAAints.row_offset[Gjd][J]; FAAints.matrix[Gjd] = dpd_block_matrix(avirtpi[Gd], FAAints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FAAints, Gjd, jd, avirtpi[Gd]); nrows = FAAints.params->coltot[Gjd]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(FAAints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][dc]), ncols, 1.0, &(WABc[Gab][0][0]), ncols); dpd_free_block(FAAints.matrix[Gjd], avirtpi[Gd], FAAints.params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ILAB * E_JkLc */ Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; lc = EABints.col_offset[Gjk][Gl]; il = T2AA.row_offset[Gil][I]; nrows = T2AA.params->coltot[Gil]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2AA.matrix[Gil][il][0]), nrows, &(EABints.matrix[Gjk][jk][lc]), ncols, 1.0, &(WABc[Gab][0][0]), ncols); /* +t_JLAB * E_IkLc */ Gab = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = EABints.col_offset[Gik][Gl]; jl = T2AA.row_offset[Gjl][J]; nrows = T2AA.params->coltot[Gjl]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AA.matrix[Gjl][jl][0]), nrows, &(EABints.matrix[Gik][ik][lc]), ncols, 1.0, &(WABc[Gab][0][0]), ncols); } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WBcA[Gab] = dpd_block_matrix(FABints.params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_JkAd * F_IdBc */ Gbc = Gid = Gi ^ Gd; Ga = Gjk ^ Gd; ad = T2AB.col_offset[Gjk][Ga]; id = FABints.row_offset[Gid][I]; FABints.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&FABints, Gid, id, bvirtpi[Gd]); nrows = FABints.params->coltot[Gid]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(FABints.matrix[Gid][0][0]), nrows, &(T2AB.matrix[Gjk][jk][ad]), nlinks, 1.0, &(WBcA[Gbc][0][0]), ncols); dpd_free_block(FABints.matrix[Gid], bvirtpi[Gd], FABints.params->coltot[Gid]); /* +t_IkAd * F_JdBc */ Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; ad = T2AB.col_offset[Gik][Ga]; jd = FABints.row_offset[Gjd][J]; FABints.matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FABints, Gjd, jd, bvirtpi[Gd]); nrows = FABints.params->coltot[Gjd]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(FABints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][ad]), nlinks, 1.0, &(WBcA[Gbc][0][0]), ncols); dpd_free_block(FABints.matrix[Gjd], bvirtpi[Gd], FABints.params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_IlBc * E_kJlA */ Gbc = Gil = Gi ^ Gl; Ga = Gkj ^ Gl; la = EBAints.col_offset[Gkj][Gl]; il = T2AB.row_offset[Gil][I]; nrows = T2AB.params->coltot[Gil]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gil][il][0]), nrows, &(EBAints.matrix[Gkj][kj][la]), ncols, 1.0, &(WBcA[Gbc][0][0]), ncols); /* -t_JlBc * E_kIlA */ Gbc = Gjl = Gj ^ Gl; Ga = Gki ^ Gl; la = EBAints.col_offset[Gki][Gl]; jl = T2AB.row_offset[Gjl][J]; nrows = T2AB.params->coltot[Gjl]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2AB.matrix[Gjl][jl][0]), nrows, &(EBAints.matrix[Gki][ki][la]), ncols, 1.0, &(WBcA[Gbc][0][0]), ncols); } dpd_3d_sort(WBcA, WABc, nirreps, Gijk, FABints.params->coltot, FABints.params->colidx, FABints.params->colorb, FABints.params->rsym, FABints.params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAAints.params->colidx, cab, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WBcA[Gab], FABints.params->coltot[Gab], avirtpi[Gc]); WAcB[Gab] = dpd_block_matrix(FABints.params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JkBd * F_IdAc */ Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; bd = T2AB.col_offset[Gjk][Gb]; id = FABints.row_offset[Gid][I]; FABints.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&FABints, Gid, id, bvirtpi[Gd]); nrows = FABints.params->coltot[Gid]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(FABints.matrix[Gid][0][0]), nrows, &(T2AB.matrix[Gjk][jk][bd]), nlinks, 1.0, &(WAcB[Gac][0][0]), ncols); dpd_free_block(FABints.matrix[Gid], bvirtpi[Gd], FABints.params->coltot[Gid]); /* -t_IkBd * F_JdAc */ Gac = Gjd = Gj ^ Gd; Gb = Gik ^ Gd; bd = T2AB.col_offset[Gik][Gb]; jd = FABints.row_offset[Gjd][J]; FABints.matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FABints, Gjd, jd, bvirtpi[Gd]); nrows = FABints.params->coltot[Gjd]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(FABints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][bd]), nlinks, 1.0, &(WAcB[Gac][0][0]), ncols); dpd_free_block(FABints.matrix[Gjd], bvirtpi[Gd], FABints.params->coltot[Gjd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_IlAc * E_kJlB */ Gac = Gil = Gi ^ Gl; Gb = Gkj ^ Gl; lb = EBAints.col_offset[Gkj][Gl]; il = T2AB.row_offset[Gil][I]; nrows = T2AB.params->coltot[Gil]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2AB.matrix[Gil][il][0]), nrows, &(EBAints.matrix[Gkj][kj][lb]), ncols, 1.0, &(WAcB[Gac][0][0]), ncols); /* +t_JlAc * E_kIlB */ Gac = Gjl = Gj ^ Gl; Gb = Gki ^ Gl; lb = EBAints.col_offset[Gki][Gl]; jl = T2AB.row_offset[Gjl][J]; nrows = T2AB.params->coltot[Gjl]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gjl][jl][0]), nrows, &(EBAints.matrix[Gki][ki][lb]), ncols, 1.0, &(WAcB[Gac][0][0]), ncols); } dpd_3d_sort(WAcB, WABc, nirreps, Gijk, FABints.params->coltot, FABints.params->colidx, FABints.params->colorb, FABints.params->rsym, FABints.params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAAints.params->colidx, acb, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WAcB[Gab], FABints.params->coltot[Gab], avirtpi[Gc]); WcBA[Gab] = dpd_block_matrix(FBAints.params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_JIAD * F_kDcB */ Gcb = Gkd = Gk ^ Gd; Ga = Gji ^ Gd; ad = T2AA.col_offset[Gji][Ga]; kd = FBAints.row_offset[Gkd][K]; FBAints.matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gkd, kd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gkd]; ncols = avirtpi[Ga]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(FBAints.matrix[Gkd][0][0]), nrows, &(T2AA.matrix[Gji][ji][ad]), nlinks, 1.0, &(WcBA[Gcb][0][0]), ncols); dpd_free_block(FBAints.matrix[Gkd], avirtpi[Gd], FBAints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_kLcB * E_JILA */ Gcb = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = EAAints.col_offset[Gji][Gl]; kl = T2BA.row_offset[Gkl][K]; nrows = T2BA.params->coltot[Gkl]; ncols = avirtpi[Ga]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2BA.matrix[Gkl][kl][0]), nrows, &(EAAints.matrix[Gji][ji][la]), ncols, 1.0, &(WcBA[Gcb][0][0]), ncols); } dpd_3d_sort(WcBA, WABc, nirreps, Gijk, FBAints.params->coltot, FBAints.params->colidx, FBAints.params->colorb, FBAints.params->rsym, FBAints.params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAAints.params->colidx, cba, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WcBA[Gab], FBAints.params->coltot[Gab], avirtpi[Gc]); WcAB[Gab] = dpd_block_matrix(FBAints.params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JIBD * F_kDcA */ Gca = Gkd = Gk ^ Gd; Gb = Gji ^ Gd; bd = T2AA.col_offset[Gji][Gb]; kd = FBAints.row_offset[Gkd][K]; FBAints.matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gkd, kd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gkd]; ncols = avirtpi[Gb]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(FBAints.matrix[Gkd][0][0]), nrows, &(T2AA.matrix[Gji][ji][bd]), nlinks, 1.0, &(WcAB[Gca][0][0]), ncols); dpd_free_block(FBAints.matrix[Gkd], avirtpi[Gd], FBAints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* t_kLcA * E_JILB */ Gca = Gkl = Gk ^ Gl; Gb = Gji ^ Gl; lb = EAAints.col_offset[Gji][Gl]; kl = T2BA.row_offset[Gkl][K]; nrows = T2BA.params->coltot[Gkl]; ncols = avirtpi[Gb]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2BA.matrix[Gkl][kl][0]), nrows, &(EAAints.matrix[Gji][ji][lb]), ncols, 1.0, &(WcAB[Gca][0][0]), ncols); } dpd_3d_sort(WcAB, WABc, nirreps, Gijk, FBAints.params->coltot, FBAints.params->colidx, FBAints.params->colorb, FBAints.params->rsym, FBAints.params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAAints.params->colidx, bca, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WcAB[Gab], FBAints.params->coltot[Gab], avirtpi[Gc]); VABc[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); } /* Add disconnected triples and finish W and V arrays */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; B = FAAints.params->colorb[Gab][ab][1]; Gb = FAAints.params->ssym[B]; b = B - avir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = DABints.params->colidx[B][C]; ac = DABints.params->colidx[A][C]; /* +t_IA * D_JkBc + f_IA * t_JkBc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) { t_ia = T1A.matrix[Gi][i][a]; f_ia = fIA.matrix[Gi][i][a]; } if(DABints.params->rowtot[Gjk] && DABints.params->coltot[Gjk]) { D_jkbc = DABints.matrix[Gjk][jk][bc]; t_jkbc = T2AB.matrix[Gjk][jk][bc]; } VABc[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* -t_IB * D_JkAc - f_IB * t_JkAc */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = f_ib = t_jkac = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) { t_ib = T1A.matrix[Gi][i][b]; f_ib = fIA.matrix[Gi][i][b]; } if(DABints.params->rowtot[Gjk] && DABints.params->coltot[Gjk]) { D_jkac = DABints.matrix[Gjk][jk][ac]; t_jkac = T2AB.matrix[Gjk][jk][ac]; } VABc[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac; } /* -t_JA * D_IkBc - f_JA * t_IkBc */ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = f_ja = t_ikbc = 0.0; if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj]) { t_ja = T1A.matrix[Gj][j][a]; f_ja = fIA.matrix[Gj][j][a]; } if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik]) { D_ikbc = DABints.matrix[Gik][ik][bc]; t_ikbc = T2AB.matrix[Gik][ik][bc]; } VABc[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc; } /* +t_JB * D_IkAc + f_JB * t_IkAc */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj]) { t_jb = T1A.matrix[Gj][j][b]; f_jb = fIA.matrix[Gj][j][b]; } if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik]) { D_ikac = DABints.matrix[Gik][ik][ac]; t_ikac = T2AB.matrix[Gik][ik][ac]; } VABc[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_kc * D_JIAB - f_kc * t_JIAB */ if(Gk == Gc && Gji == Gab) { t_kc = D_jiab = f_kc = t_jiab = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) { t_kc = T1B.matrix[Gk][k][c]; f_kc = fia.matrix[Gk][k][c]; } if(DAAints.params->rowtot[Gji] && DAAints.params->coltot[Gji]) { D_jiab = DAAints.matrix[Gji][ji][ab]; t_jiab = T2AA.matrix[Gji][ji][ab]; } VABc[Gab][ab][c] -= t_kc * D_jiab + f_kc * t_jiab; } /* Sum V and W into V */ VABc[Gab][ab][c] += WABc[Gab][ab][c]; /* Build the rest of the denominator and divide it into W */ denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fab.params->rowtot[Gc]) denom -= fab.matrix[Gc][c][c]; WABc[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ /* 1/2 Dot product of final V and W is the energy for this ijk triple */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; ET_AAB += dot_block(WABc[Gab], VABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc], 0.5); } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(VABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); } } /* I >= J */ } /* k */ } /* j */ } /* i */ } /* Gk */ } /* Gj */ } /* Gi */ /* fprintf(outfile, "cnt = %d\n", cnt); */ /* fprintf(outfile, "ET_AAB = %20.14f\n", ET_AAB); */ free(WABc); free(WBcA); free(WAcB); free(WcAB); free(WcBA); free(VABc); fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2AA, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&T2BA, h); dpd_buf4_mat_irrep_close(&EAAints, h); dpd_buf4_mat_irrep_close(&EABints, h); dpd_buf4_mat_irrep_close(&EBAints, h); dpd_buf4_mat_irrep_close(&DAAints, h); dpd_buf4_mat_irrep_close(&DABints, h); } dpd_buf4_close(&T2AA); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_buf4_close(&FAAints); dpd_buf4_close(&FABints); dpd_buf4_close(&FBAints); dpd_buf4_close(&EAAints); dpd_buf4_close(&EABints); dpd_buf4_close(&EBAints); dpd_buf4_close(&DAAints); dpd_buf4_close(&DABints); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_close(&fIA); dpd_file2_close(&fia); return ET_AAB; } }} // namespace psi::cctriples �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_UHF_ABB.cc����������������������������������������������������������������0000644�0001015�0000765�00000054015�10757640026�015531� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_UHF_ABB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac, Gca, Gba; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl; int I, J, K, A, B, C; int i, j, k, a, b, c; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int cd, bd, ad, db, dc; int lc, lb, la; int id, jd, kd; int il, jl, kl; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; double value_c, value_d, dijk, denom, ET_ABB; int nrows, ncols, nlinks; double t_ia, t_jb, t_jc, t_kb, t_kc; double f_ia, f_jb, f_jc, f_kb, f_kc; double D_jkbc, D_ikac, D_ikab, D_ijac, D_ijab; double t_jkbc, t_ikac, t_ikab, t_ijac, t_ijab; dpdbuf4 T2AB, T2BB, T2BA; dpdbuf4 FBBints, FABints, FBAints; dpdbuf4 EBBints, EABints, EBAints; dpdbuf4 DBBints, DABints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab, fIA, fia; double ***WAbc, ***VAbc, ***WAcb, ***WbAc, ***WcAb, ***WbcA; int nijk, mijk; FILE *ijkfile; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_mat_rd(&fIA); dpd_file2_mat_rd(&fia); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); dpd_buf4_init(&T2BB, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FBBints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&FABints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EBBints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&EABints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DBBints, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DABints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2BB, h); dpd_buf4_mat_irrep_rd(&T2BB, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&T2BA, h); dpd_buf4_mat_irrep_rd(&T2BA, h); dpd_buf4_mat_irrep_init(&EBBints, h); dpd_buf4_mat_irrep_rd(&EBBints, h); dpd_buf4_mat_irrep_init(&EABints, h); dpd_buf4_mat_irrep_rd(&EABints, h); dpd_buf4_mat_irrep_init(&EBAints, h); dpd_buf4_mat_irrep_rd(&EBAints, h); dpd_buf4_mat_irrep_init(&DBBints, h); dpd_buf4_mat_irrep_rd(&DBBints, h); dpd_buf4_mat_irrep_init(&DABints, h); dpd_buf4_mat_irrep_rd(&DABints, h); } /* Compute the number of IJK combinations in this spin case */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(J > K) nijk++; } } } ffile(&ijkfile,"ijk.dat",0); fprintf(ijkfile, "Spin Case: ABB\n"); fprintf(ijkfile, "Number of IJK combintions: %d\n", nijk); fprintf(ijkfile, "\nCurrent IJK Combination:\n"); mijk = 0; ET_ABB = 0.0; WAbc = (double ***) malloc(nirreps * sizeof(double **)); VAbc = (double ***) malloc(nirreps * sizeof(double **)); WAcb = (double ***) malloc(nirreps * sizeof(double **)); WbcA = (double ***) malloc(nirreps * sizeof(double **)); WcAb = (double ***) malloc(nirreps * sizeof(double **)); WbAc = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; if(J > K) { mijk++; fprintf(ijkfile, "%d\n", mijk); fflush(ijkfile); ij = EABints.params->rowidx[I][J]; ji = EBAints.params->rowidx[J][I]; jk = EBBints.params->rowidx[J][K]; kj = EBBints.params->rowidx[K][J]; ik = EABints.params->rowidx[I][K]; ki = EBAints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fij.params->rowtot[Gj]) dijk += fij.matrix[Gj][j][j]; if(fij.params->rowtot[Gk]) dijk += fij.matrix[Gk][k][k]; /* Begin connected triples */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WAbc[Gab] = dpd_block_matrix(FABints.params->coltot[Gab], bvirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_jkcd * F_IdAb */ Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; cd = T2BB.col_offset[Gjk][Gc]; id = FABints.row_offset[Gid][I]; FABints.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&FABints, Gid, id, bvirtpi[Gd]); nrows = FABints.params->coltot[Gid]; ncols = bvirtpi[Gc]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(FABints.matrix[Gid][0][0]), nrows, &(T2BB.matrix[Gjk][jk][cd]), nlinks, 1.0, &(WAbc[Gab][0][0]), ncols); dpd_free_block(FABints.matrix[Gid], bvirtpi[Gd], FABints.params->coltot[Gid]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_IlAb E_jklc */ Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; lc = EBBints.col_offset[Gjk][Gl]; il = T2AB.row_offset[Gil][I]; nrows = T2AB.params->coltot[Gil]; ncols = bvirtpi[Gc]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2AB.matrix[Gil][il][0]), nrows, &(EBBints.matrix[Gjk][jk][lc]), ncols, 1.0, &(WAbc[Gab][0][0]), ncols); } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WAcb[Gab] = dpd_block_matrix(FABints.params->coltot[Gab], bvirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_jkbd * F_IdAc */ Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; bd = T2BB.col_offset[Gjk][Gb]; id = FABints.row_offset[Gid][I]; FABints.matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FABints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&FABints, Gid, id, bvirtpi[Gd]); nrows = FABints.params->coltot[Gid]; ncols = bvirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(FABints.matrix[Gid][0][0]), nrows, &(T2BB.matrix[Gjk][jk][bd]), nlinks, 1.0, &(WAcb[Gac][0][0]), ncols); dpd_free_block(FABints.matrix[Gid], bvirtpi[Gd], FABints.params->coltot[Gid]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_IlAc E_jklb */ Gac = Gil = Gi ^ Gl; Gb = Gjk ^ Gl; lb = EBBints.col_offset[Gjk][Gl]; il = T2AB.row_offset[Gil][I]; nrows = T2AB.params->coltot[Gil]; ncols = bvirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2AB.matrix[Gil][il][0]), nrows, &(EBBints.matrix[Gjk][jk][lb]), ncols, 1.0, &(WAcb[Gac][0][0]), ncols); } dpd_3d_sort(WAcb, WAbc, nirreps, Gijk, FABints.params->coltot, FABints.params->colidx, FABints.params->colorb, FABints.params->rsym, FABints.params->ssym, avir_off, bvir_off, bvirtpi, bvir_off, FABints.params->colidx, acb, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WAcb[Gab], FABints.params->coltot[Gab], bvirtpi[Gc]); WbcA[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_IkAd * F_jdbc */ Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; ad = T2AB.col_offset[Gik][Ga]; jd = FBBints.row_offset[Gjd][J]; FBBints.matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FBBints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FBBints, Gjd, jd, bvirtpi[Gd]); nrows = FBBints.params->coltot[Gjd]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(FBBints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][ad]), nlinks, 1.0, &(WbcA[Gbc][0][0]), ncols); dpd_free_block(FBBints.matrix[Gjd], bvirtpi[Gd], FBBints.params->coltot[Gjd]); /* -t_IjAd * F_kdbc */ Gbc = Gkd = Gk ^ Gd; Ga = Gij ^ Gd; ad = T2AB.col_offset[Gij][Ga]; kd = FBBints.row_offset[Gkd][K]; FBBints.matrix[Gkd] = dpd_block_matrix(bvirtpi[Gd], FBBints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&FBBints, Gkd, kd, bvirtpi[Gd]); nrows = FBBints.params->coltot[Gkd]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(FBBints.matrix[Gkd][0][0]), nrows, &(T2AB.matrix[Gij][ij][ad]), nlinks, 1.0, &(WbcA[Gbc][0][0]), ncols); dpd_free_block(FBBints.matrix[Gkd], bvirtpi[Gd], FBBints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_jlbc E_kIlA */ Gbc = Gjl = Gj ^ Gl; Ga = Gki ^ Gl; la = EBAints.col_offset[Gki][Gl]; jl = T2BB.row_offset[Gjl][J]; nrows = T2BB.params->coltot[Gjl]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2BB.matrix[Gjl][jl][0]), nrows, &(EBAints.matrix[Gki][ki][la]), ncols, 1.0, &(WbcA[Gbc][0][0]), ncols); /* +t_klbc E_jIlA */ Gbc = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = EBAints.col_offset[Gji][Gl]; kl = T2BB.row_offset[Gkl][K]; nrows = T2BB.params->coltot[Gkl]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2BB.matrix[Gkl][kl][0]), nrows, &(EBAints.matrix[Gji][ji][la]), ncols, 1.0, &(WbcA[Gbc][0][0]), ncols); } dpd_3d_sort(WbcA, WAbc, nirreps, Gijk, FBBints.params->coltot, FBBints.params->colidx, FBBints.params->colorb, FBBints.params->rsym, FBBints.params->ssym, bvir_off, bvir_off, avirtpi, avir_off, FABints.params->colidx, cab, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WbcA[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); WcAb[Gab] = dpd_block_matrix(FBAints.params->coltot[Gab], bvirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_IkDb * F_jDcA */ Gca = Gjd = Gj ^ Gd; Gb = Gik ^ Gd; db = T2AB.col_offset[Gik][Gd]; jd = FBAints.row_offset[Gjd][J]; FBAints.matrix[Gjd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gjd, jd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gjd]; ncols = bvirtpi[Gb]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(FBAints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][db]), ncols, 1.0, &(WcAb[Gca][0][0]), ncols); dpd_free_block(FBAints.matrix[Gjd], avirtpi[Gd], FBAints.params->coltot[Gjd]); /* +t_IjDb * F_kDcA */ Gca = Gkd = Gk ^ Gd; Gb = Gij ^ Gd; db = T2AB.col_offset[Gij][Gd]; kd = FBAints.row_offset[Gkd][K]; FBAints.matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gkd, kd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gkd]; ncols = bvirtpi[Gb]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(FBAints.matrix[Gkd][0][0]), nrows, &(T2AB.matrix[Gij][ij][db]), ncols, 1.0, &(WcAb[Gca][0][0]), ncols); dpd_free_block(FBAints.matrix[Gkd], avirtpi[Gd], FBAints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_jLcA E_IkLb */ Gca = Gjl = Gj ^ Gl; Gb = Gik ^ Gl; lb = EABints.col_offset[Gik][Gl]; jl = T2BA.row_offset[Gjl][J]; nrows = T2BA.params->coltot[Gjl]; ncols = bvirtpi[Gb]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2BA.matrix[Gjl][jl][0]), nrows, &(EABints.matrix[Gik][ik][lb]), ncols, 1.0, &(WcAb[Gca][0][0]), ncols); /* -t_kLcA E_IjLb */ Gca = Gkl = Gk ^ Gl; Gb = Gij ^ Gl; lb = EABints.col_offset[Gij][Gl]; kl = T2BA.row_offset[Gkl][K]; nrows = T2BA.params->coltot[Gkl]; ncols = bvirtpi[Gb]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2BA.matrix[Gkl][kl][0]), nrows, &(EABints.matrix[Gij][ij][lb]), ncols, 1.0, &(WcAb[Gca][0][0]), ncols); } dpd_3d_sort(WcAb, WAbc, nirreps, Gijk, FBAints.params->coltot, FBAints.params->colidx, FBAints.params->colorb, FBAints.params->rsym, FBAints.params->ssym, bvir_off, avir_off, bvirtpi, bvir_off, FABints.params->colidx, bca, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WcAb[Gab], FBAints.params->coltot[Gab], bvirtpi[Gc]); WbAc[Gab] = dpd_block_matrix(FBAints.params->coltot[Gab], bvirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_IkDc * F_jDbA */ Gba = Gjd = Gj ^ Gd; Gc = Gik ^ Gd; dc = T2AB.col_offset[Gik][Gd]; jd = FBAints.row_offset[Gjd][J]; FBAints.matrix[Gjd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gjd, jd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gjd]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(FBAints.matrix[Gjd][0][0]), nrows, &(T2AB.matrix[Gik][ik][dc]), ncols, 1.0, &(WbAc[Gba][0][0]), ncols); dpd_free_block(FBAints.matrix[Gjd], avirtpi[Gd], FBAints.params->coltot[Gjd]); /* -t_IjDc * F_kDbA */ Gba = Gkd = Gk ^ Gd; Gc = Gij ^ Gd; dc = T2AB.col_offset[Gij][Gd]; kd = FBAints.row_offset[Gkd][K]; FBAints.matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBAints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&FBAints, Gkd, kd, avirtpi[Gd]); nrows = FBAints.params->coltot[Gkd]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(FBAints.matrix[Gkd][0][0]), nrows, &(T2AB.matrix[Gij][ij][dc]), ncols, 1.0, &(WbAc[Gba][0][0]), ncols); dpd_free_block(FBAints.matrix[Gkd], avirtpi[Gd], FBAints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_jLbA * E_IkLc */ Gba = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = EABints.col_offset[Gik][Gl]; jl = T2BA.row_offset[Gjl][J]; nrows = T2BA.params->coltot[Gjl]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2BA.matrix[Gjl][jl][0]), nrows, &(EABints.matrix[Gik][ik][lc]), ncols, 1.0, &(WbAc[Gba][0][0]), ncols); /* +t_kLbA * E_IjLc */ Gba = Gkl = Gk ^ Gl; Gc = Gij ^ Gl; lc = EABints.col_offset[Gij][Gl]; kl = T2BA.row_offset[Gkl][K]; nrows = T2BA.params->coltot[Gkl]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2BA.matrix[Gkl][kl][0]), nrows, &(EABints.matrix[Gij][ij][lc]), ncols, 1.0, &(WbAc[Gba][0][0]), ncols); } dpd_3d_sort(WbAc, WAbc, nirreps, Gijk, FBAints.params->coltot, FBAints.params->colidx, FBAints.params->colorb, FBAints.params->rsym, FBAints.params->ssym, bvir_off, avir_off, bvirtpi, bvir_off, FABints.params->colidx, bac, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WbAc[Gab], FBAints.params->coltot[Gab], bvirtpi[Gc]); } /* Add disconnected triples and finish W and V */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; VAbc[Gab] = dpd_block_matrix(FABints.params->coltot[Gab], bvirtpi[Gc]); for(ab=0; ab < FABints.params->coltot[Gab]; ab++) { A = FABints.params->colorb[Gab][ab][0]; Ga = FABints.params->rsym[A]; a = A - avir_off[Ga]; B = FABints.params->colorb[Gab][ab][1]; Gb = FABints.params->ssym[B]; b = B - bvir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = DBBints.params->colidx[B][C]; ac = DABints.params->colidx[A][C]; /* +t_IA * D_jkbc + f_IA * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) { t_ia = T1A.matrix[Gi][i][a]; f_ia = fIA.matrix[Gi][i][a]; } if(DBBints.params->rowtot[Gjk] && DBBints.params->coltot[Gjk]) { D_jkbc = DBBints.matrix[Gjk][jk][bc]; t_jkbc = T2BB.matrix[Gjk][jk][bc]; } VAbc[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* +t_jb * D_IkAc + f_jb * t_IkAc */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(T1B.params->rowtot[Gj] && T1B.params->coltot[Gj]) { t_jb = T1B.matrix[Gj][j][b]; f_jb = fia.matrix[Gj][j][b]; } if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik]) { D_ikac = DABints.matrix[Gik][ik][ac]; t_ikac = T2AB.matrix[Gik][ik][ac]; } VAbc[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_jc * D_IkAb - f_jc * t_IkAb */ if(Gj == Gc && Gik == Gab) { t_jc = D_ikab = f_jc = t_ikab = 0.0; if(T1B.params->rowtot[Gj] && T1B.params->coltot[Gj]) { t_jc = T1B.matrix[Gj][j][c]; f_jc = fia.matrix[Gj][j][c]; } if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik]) { D_ikab = DABints.matrix[Gik][ik][ab]; t_ikab = T2AB.matrix[Gik][ik][ab]; } VAbc[Gab][ab][c] -= t_jc * D_ikab + f_jc * t_ikab; } /* -t_kb * D_IjAc - f_kb * t_IjAc */ if(Gk == Gb && Gji == Gac) { t_kb = D_ijac = f_kb = t_ijac = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) { t_kb = T1B.matrix[Gk][k][b]; f_kb = fia.matrix[Gk][k][b]; } if(DABints.params->rowtot[Gji] && DABints.params->coltot[Gji]) { D_ijac = DABints.matrix[Gji][ij][ac]; t_ijac = T2AB.matrix[Gji][ij][ac]; } VAbc[Gab][ab][c] -= t_kb * D_ijac + f_kb * t_ijac; } /* +t_kc * D_IjAb + f_kc * t_IjAb */ if(Gk == Gc && Gji == Gab) { t_kc = D_ijab = f_kc = t_ijab = 0.0; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) { t_kc = T1B.matrix[Gk][k][c]; f_kc = fia.matrix[Gk][k][c]; } if(DABints.params->rowtot[Gji] && DABints.params->coltot[Gji]) { D_ijab = DABints.matrix[Gji][ij][ab]; t_ijab = T2AB.matrix[Gji][ij][ab]; } VAbc[Gab][ab][c] += t_kc * D_ijab + f_kc * t_ijab; } /* Sum V and W into V */ VAbc[Gab][ab][c] += WAbc[Gab][ab][c]; /* Build the rest of the denominator and divide it into W */ denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fab.params->rowtot[Gb]) denom -= fab.matrix[Gb][b][b]; if(fab.params->rowtot[Gc]) denom -= fab.matrix[Gc][c][c]; WAbc[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ /* 1/2 Dot product of final V and W is the energy for this ijk triple */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; ET_ABB += dot_block(WAbc[Gab], VAbc[Gab], FABints.params->coltot[Gab], bvirtpi[Gc], 0.5); dpd_free_block(WAbc[Gab], FABints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(VAbc[Gab], FABints.params->coltot[Gab], bvirtpi[Gc]); } } /* J >= K */ } /* k */ } /* j */ } /* i */ } /* Gk */ } /* Gj */ } /* Gi */ free(WAbc); free(VAbc); free(WAcb); free(WbcA); free(WcAb); free(WbAc); fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2BB, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&T2BA, h); dpd_buf4_mat_irrep_close(&EBBints, h); dpd_buf4_mat_irrep_close(&EABints, h); dpd_buf4_mat_irrep_close(&EBAints, h); dpd_buf4_mat_irrep_close(&DBBints, h); dpd_buf4_mat_irrep_close(&DABints, h); } dpd_buf4_close(&T2BB); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_buf4_close(&FBBints); dpd_buf4_close(&FABints); dpd_buf4_close(&FBAints); dpd_buf4_close(&EBBints); dpd_buf4_close(&EABints); dpd_buf4_close(&EBAints); dpd_buf4_close(&DBBints); dpd_buf4_close(&DABints); dpd_file2_mat_close(&T1A); dpd_file2_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_close(&fIA); dpd_file2_close(&fia); return ET_ABB; } }} // namespace psi::cctriples �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/ET_UHF_BBB.cc����������������������������������������������������������������0000644�0001015�0000765�00000052320�10757640026�015527� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cmath> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { double ET_UHF_BBB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl; int I, J, K, A, B, C; int i, j, k, a, b, c; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int cd, ad, bd; int id, jd, kd; int il, jl, kl; int lc, la, lb; int *occpi, *virtpi, *occ_off, *vir_off; double value_c, value_d, dijk, denom, ET; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba; int nrows, ncols, nlinks; dpdbuf4 T2, Fints, Eints, Dints; dpdfile2 fIJ, fAB, fIA, T1; double ***WABC, ***WBCA, ***WACB, ***VABC; int nijk, mijk; FILE *ijkfile; nirreps = moinfo.nirreps; occpi = moinfo.boccpi; virtpi = moinfo.bvirtpi; occ_off = moinfo.bocc_off; vir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 2, 3, "fia"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fIA); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } /* Compute the number of IJK combinations in this spin case */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I > J && J > K) nijk++; } } } ffile(&ijkfile,"ijk.dat",0); fprintf(ijkfile, "Spin Case: BBB\n"); fprintf(ijkfile, "Number of IJK combintions: %d\n", nijk); fprintf(ijkfile, "\nCurrent IJK Combination:\n"); WABC = (double ***) malloc(nirreps * sizeof(double **)); VABC = (double ***) malloc(nirreps * sizeof(double **)); WBCA = (double ***) malloc(nirreps * sizeof(double **)); WACB = (double ***) malloc(nirreps * sizeof(double **)); mijk = 0; ET = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; if(I > J && J > K) { mijk++; fprintf(ijkfile, "%d\n", mijk); fflush(ijkfile); ij = Eints.params->rowidx[I][J]; ji = Eints.params->rowidx[J][I]; jk = Eints.params->rowidx[J][K]; kj = Eints.params->rowidx[K][J]; ik = Eints.params->rowidx[I][K]; ki = Eints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_jkcd * F_idab */ Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; cd = T2.col_offset[Gjk][Gc]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* +t_ikcd * F_jdab */ Gab = Gjd = Gj ^ Gd; Gc = Gik ^ Gd; cd = T2.col_offset[Gik][Gc]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* +t_jicd * F_kdab */ Gab = Gkd = Gk ^ Gd; Gc = Gji ^ Gd; cd = T2.col_offset[Gji][Gc]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][cd]), nlinks, 1.0, &(WABC[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilab E_jklc */ Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; lc = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); /* +t_jlab E_iklc */ Gab = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); /* +t_klab E_jilc */ Gab = Gkl = Gk ^ Gl; Gc = Gji ^ Gl; lc = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][lc]), ncols, 1.0, &(WABC[Gab][0][0]), ncols); } for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WBCA[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* -t_jkad * F_idbc */ Gbc = Gid = Gi ^ Gd; Ga = Gjk ^ Gd; ad = T2.col_offset[Gjk][Ga]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* +t_ikad * F_jdbc */ Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; ad = T2.col_offset[Gik][Ga]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* +t_jiad * F_kdbc */ Gbc = Gkd = Gk ^ Gd; Ga = Gji ^ Gd; ad = T2.col_offset[Gji][Ga]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][ad]), nlinks, 1.0, &(WBCA[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilbc * E_jkla */ Gbc = Gil = Gi ^ Gl; Ga = Gjk ^ Gl; la = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); /* +t_jlbc E_ikla */ Gbc = Gjl = Gj ^ Gl; Ga = Gik ^ Gl; la = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); /* +t_klbc E_jila */ Gbc = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][la]), ncols, 1.0, &(WBCA[Gbc][0][0]), ncols); } dpd_3d_sort(WBCA, WABC, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, cab, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WBCA[Gab], Fints.params->coltot[Gab], virtpi[Gc]); WACB[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_jkbd * F_idac */ Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; bd = T2.col_offset[Gjk][Gb]; id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); /* -t_ikbd * F_jdac */ Gac = Gjd = Gj ^ Gd; Gb = Gik ^ Gd; bd = T2.col_offset[Gik][Gb]; jd = Fints.row_offset[Gjd][J]; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, jd, virtpi[Gd]); nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); /* -t_jibd * F_kdac */ Gac = Gkd = Gk ^ Gd; Gb = Gji ^ Gd; bd = T2.col_offset[Gji][Gb]; kd = Fints.row_offset[Gkd][K]; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, kd, virtpi[Gd]); nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][bd]), nlinks, 1.0, &(WACB[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_ilac * E_jklb */ Gac = Gil = Gi ^ Gl; Gb = Gjk ^ Gl; lb = Eints.col_offset[Gjk][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); /* -t_jlac * E_iklb */ Gac = Gjl = Gj ^ Gl; Gb = Gik ^ Gl; lb = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); /* -t_klac * E_jilb */ Gac = Gkl = Gk ^ Gl; Gb = Gji ^ Gl; lb = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][lb]), ncols, 1.0, &(WACB[Gac][0][0]), ncols); } dpd_3d_sort(WACB, WABC, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, acb, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WACB[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } /* Add disconnected triples and finish W and V */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; VABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; ac = Dints.params->colidx[A][C]; /* +t_ia * D_jkbc + f_ia * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ia = T1.matrix[Gi][i][a]; f_ia = fIA.matrix[Gi][i][a]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkbc = Dints.matrix[Gjk][jk][bc]; t_jkbc = T2.matrix[Gjk][jk][bc]; } VABC[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* -t_ib * D_jkac - f_ib * t_jkac */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = f_ib = t_jkac = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ib = T1.matrix[Gi][i][b]; f_ib = fIA.matrix[Gi][i][b]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkac = Dints.matrix[Gjk][jk][ac]; t_jkac = T2.matrix[Gjk][jk][ac]; } VABC[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac; } /* +t_ic * D_jkab + f_ic * t_jkba */ if(Gi == Gc && Gjk == Gab) { t_ic = D_jkba = f_ic = t_jkba = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ic = T1.matrix[Gi][i][c]; f_ic = fIA.matrix[Gi][i][c]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkba = Dints.matrix[Gjk][jk][ab]; t_jkba = T2.matrix[Gjk][jk][ab]; } VABC[Gab][ab][c] += t_ic * D_jkba + f_ic * t_jkba; } /* -t_ja * D_ikbc - f_ja * t_ikbc*/ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = f_ja = t_ikbc = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_ja = T1.matrix[Gj][j][a]; f_ja = fIA.matrix[Gj][j][a]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikbc = Dints.matrix[Gik][ik][bc]; t_ikbc = T2.matrix[Gik][ik][bc]; } VABC[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc; } /* +t_jb * D_ikac + f_jb * t_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_jb = T1.matrix[Gj][j][b]; f_jb = fIA.matrix[Gj][j][b]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikac = Dints.matrix[Gik][ik][ac]; t_ikac = T2.matrix[Gik][ik][ac]; } VABC[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_jc * D_ikba - f_jc * t_ikba */ if(Gj == Gc && Gik == Gab) { t_jc = D_ikba = f_jc = t_ikba = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_jc = T1.matrix[Gj][j][c]; f_jc = fIA.matrix[Gj][j][c]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikba = Dints.matrix[Gik][ik][ab]; t_ikba = T2.matrix[Gik][ik][ab]; } VABC[Gab][ab][c] -= t_jc * D_ikba + f_jc * t_ikba; } /* -t_ka * D_jibc - f_ka * t_jibc */ if(Gk == Ga && Gji == Gbc) { t_ka = D_jibc = f_ka = t_jibc = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_ka = T1.matrix[Gk][k][a]; f_ka = fIA.matrix[Gk][k][a]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jibc = Dints.matrix[Gji][ji][bc]; t_jibc = T2.matrix[Gji][ji][bc]; } VABC[Gab][ab][c] -= t_ka * D_jibc + f_ka * t_jibc; } /* +t_kb * D_jiac + f_kb * t_jiac */ if(Gk == Gb && Gji == Gac) { t_kb = D_jiac = f_kb = t_jiac = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_kb = T1.matrix[Gk][k][b]; f_kb = fIA.matrix[Gk][k][b]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jiac = Dints.matrix[Gji][ji][ac]; t_jiac = T2.matrix[Gji][ji][ac]; } VABC[Gab][ab][c] += t_kb * D_jiac + f_kb * t_jiac; } /* -t_kc * D_jiab - f_kc * t_jiba*/ if(Gk == Gc && Gji == Gab) { t_kc = D_jiba = f_kc = t_jiba = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_kc = T1.matrix[Gk][k][c]; f_kc = fIA.matrix[Gk][k][c]; } if(Dints.params->rowtot[Gji] && Dints.params->coltot[Gji]) { D_jiba = Dints.matrix[Gji][ji][ab]; t_jiba = T2.matrix[Gji][ji][ab]; } VABC[Gab][ab][c] -= t_kc * D_jiba + f_kc * t_jiba; } /* if(fabs(VABC[Gab][ab][c]) > 1e-7) fprintf(outfile, "%d %d %d %d %d %d %20.15f\n", I,J,K,A,B,C,VABC[Gab][ab][c]); */ /* Sum V and W into V */ VABC[Gab][ab][c] += WABC[Gab][ab][c]; /* Build the rest of the denominator and divide it into W */ denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; WABC[Gab][ab][c] /= denom; } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; ET += dot_block(WABC[Gab], VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc], 1.0/6.0); dpd_free_block(WABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } } /* I >= J >= K */ } /* k */ } /* j */ } /* i */ } /* Gk */ } /* Gj */ } /* Gi */ free(WABC); free(VABC); free(WBCA); free(WACB); fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); return ET; } }} // namespace psi::cctriples ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/get_moinfo.cc����������������������������������������������������������������0000644�0001015�0000765�00000020076�11027011315�016161� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996. ** Modified by TDC, March 1999. */ void get_moinfo(void) { int i, h, errcod, nactive, nirreps; char *junk; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.iopen = chkpt_rd_iopen(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); moinfo.phase = chkpt_rd_phase_check(); chkpt_close(); nirreps = moinfo.nirreps; errcod = ip_string("WFN", &(params.wfn), 0); if(strcmp(params.wfn, "CCSD") && strcmp(params.wfn, "CCSD_T") && strcmp(params.wfn,"BCCD") && strcmp(params.wfn,"BCCD_T")) { fprintf(outfile, "Invalid value of input keyword WFN: %s\n", params.wfn); exit(PSI_RETURN_FAILURE); } i=0; params.nthreads = 1; errcod = ip_data("NTHREADS", "%d", &i, 0); if (errcod == IPE_OK) params.nthreads = i; params.semicanonical = 0; errcod = ip_string("REFERENCE", &(junk),0); /* if no reference is given, assume rhf */ if (errcod != IPE_OK) params.ref = 0; else { if(!strcmp(junk, "RHF")) params.ref = 0; else if(!strcmp(junk,"ROHF") && !strcmp(params.wfn,"CCSD_T")) { params.ref = 2; params.semicanonical = 1; } else if(!strcmp(junk, "ROHF")) params.ref = 1; else if(!strcmp(junk, "UHF")) params.ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } params.dertype = 0; if(ip_exist("DERTYPE",0)) { errcod = ip_string("DERTYPE", &junk, 0); if(errcod != IPE_OK) params.dertype = 0; else if(!strcmp(junk,"NONE")) params.dertype = 0; else if(!strcmp(junk,"FIRST")) params.dertype = 1; else { printf("Value of keyword DERTYPE %s not applicable to CCSD(T).\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(moinfo.nirreps); moinfo.fruocc = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } else { /** RHF or ROHF **/ moinfo.occpi = init_int_array(moinfo.nirreps); moinfo.virtpi = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < moinfo.nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < moinfo.nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; fprintf(outfile,"\n\n"); fprintf(outfile, "\tWave function = %6s\n",params.wfn); if(params.semicanonical) { fprintf(outfile, "\tReference wfn = ROHF changed to UHF for Semicanonical Orbitals\n"); } else { fprintf(outfile, "\tReference wfn = %5s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); } psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); psio_read_entry(CC_INFO, "CCSD Energy", (char *) &(moinfo.ecc), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n",moinfo.eref); fprintf(outfile, "\tCCSD energy (file100) = %20.15f\n",moinfo.ecc); fprintf(outfile, "\tTotal CCSD energy (file100) = %20.15f\n", moinfo.eref+moinfo.ecc); } /* Frees memory allocated in get_moinfo() and dumps some info. */ void cleanup(void) { int i; free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); } else { free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); free(moinfo.occpi); free(moinfo.virtpi); } } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/globals.h��������������������������������������������������������������������0000644�0001015�0000765�00000000711�10757640026�015332� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <ccfiles.h> #include <libdpd/dpd.h> namespace psi { namespace cctriples { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Params params; }} // namespace psi::cctriples �������������������������������������������������������psi3/src/bin/cctriples/Makefile.in������������������������������������������������������������������0000644�0001015�0000765�00000001170�11027011315�015563� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(BLAS) -lpthread PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ ET_AAA.cc ET_BBB.cc ET_UHF_AAB.cc cache.cc T3_grad_RHF.cc \ ET_AAB.cc ET_RHF.cc ET_UHF_ABB.cc count_ijk.cc triples.cc \ ET_ABB.cc ET_UHF_AAA.cc ET_UHF_BBB.cc get_moinfo.cc \ T3_grad_UHF_AAA.cc T3_grad_UHF_BBB.cc T3_grad_UHF_AAB.cc T3_grad_UHF_BBA.cc \ T3_UHF_AAA.cc T3_UHF_AAB.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/MOInfo.h���������������������������������������������������������������������0000644�0001015�0000765�00000004676�10754663017�015056� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ namespace psi { namespace cctriples { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int iopen; /* 0=closed shell; >0=open shell */ int phase; /* Boolean for consistency of orbital phases */ int *orbspi; /* no. of MOs per irrep */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irrep excl. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ char **labels; /* irrep labels */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* alpha occupied orbital offsets within each irrep */ int *bocc_off; /* beta occupied orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* alpha virtual orbital offsets within each irrep */ int *bvir_off; /* beta virtual orbital offsets within each irrep */ int iter; /* Current lambda iteration */ double conv; /* Current convergence level */ double enuc; /* Nuclear repulsion energy */ double escf; /* SCF energy from chkpt */ double eref; /* Reference energy (file100) */ double ecc; /* CC energy from ccenergy */ }; }} // namespace psi::cctriples ������������������������������������������������������������������psi3/src/bin/cctriples/Params.h���������������������������������������������������������������������0000644�0001015�0000765�00000000374�11027011315�015117� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ namespace psi { namespace cctriples { struct Params { int ref; char *wfn; int semicanonical; int nthreads; int dertype; }; }} // namespace psi::cctriples ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_grad_RHF.cc���������������������������������������������������������������0000644�0001015�0000765�00000054406�11027011315�016021� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Computes T3-dependent terms needed in cclambda and ccdensity for (T) contributions to the CCSD(T) energy gradient. */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <libciomr/libciomr.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void T3_grad_RHF(void) { int h, nirreps; int I, J, K, A, B, C, D, L; int i, j, k, a, b, c, d, l; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int il, jl, kl; int ad, bd, cd; int la, lb, lc; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Gid, Gjd, Gkd, Gil, Gjl, Gkl; int Gab, Gba, Gac, Gca, Gbc, Gcb; int nrows, ncols, nlinks; int *occpi, *virtpi, *occ_off, *vir_off; double t_ia, t_jb, t_kc, D_jkbc, D_ikac, D_ijab; double f_ia, f_jb, f_kc, t_jkbc, t_ikac, t_ijab; double dijk, denom; double ***W0, ***W1, ***M, ***V; dpdbuf4 T2, Fints, Eints, Dints, S2, F2ints; dpdfile2 fIJ, fAB, fIA, T1, S1; int nijk, mijk; FILE *ijkfile; double value, value1, value2, ET=0.0; int id; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fIA); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_init(&S1, CC_OEI, 0, 0, 1, "SIA"); dpd_file2_mat_init(&S1); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb"); dpd_buf4_init(&S2, CC_MISC, 0, 0, 5, 0, 5, 0, "SIjAb"); dpd_buf4_init(&Fints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&F2ints, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&S2, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); dpd_buf4_mat_irrep_init(&F2ints, h); dpd_buf4_mat_irrep_rd(&F2ints, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); } /* Compute the number of IJK combinations */ /* For now, we need all combinations for gradients */ nijk = 0; for(Gi=0; Gi < nirreps; Gi++) for(Gj=0; Gj < nirreps; Gj++) for(Gk=0; Gk < nirreps; Gk++) for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; nijk++; } } } ffile(&ijkfile,"ijk.dat", 0); fprintf(ijkfile, "Number of IJK combintions: %d\n", nijk); fprintf(ijkfile, "\nCurrent IJK Combination: "); W0 = (double ***) malloc(nirreps * sizeof(double **)); W1 = (double ***) malloc(nirreps * sizeof(double **)); M = (double ***) malloc(nirreps * sizeof(double **)); V = (double ***) malloc(nirreps * sizeof(double **)); mijk = 0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gkj = Gjk = Gk ^ Gj; Gji = Gij = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; mijk++; fprintf(ijkfile, "%d\n", mijk); fflush(ijkfile); ij = T2.params->rowidx[I][J]; ji = T2.params->rowidx[J][I]; ik = T2.params->rowidx[I][K]; ki = T2.params->rowidx[K][I]; jk = T2.params->rowidx[J][K]; kj = T2.params->rowidx[K][J]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; /* Malloc space for the W intermediate */ timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; W0[Gab] = dpd_block_matrix(Fints.params->coltot[Gab],virtpi[Gc]); W1[Gab] = dpd_block_matrix(Fints.params->coltot[Gab],virtpi[Gc]); V[Gab] = dpd_block_matrix(Fints.params->coltot[Gab],virtpi[Gc]); M[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } timer_off("malloc"); /**** Build T3(c) for curent i,j,k; Result stored in W0 ****/ timer_on("N7 Terms"); /* +F_idab * t_kjcd */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gkj ^ Gd; /* Set up F integrals */ Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, Fints.row_offset[Gid][I], virtpi[Gd]); /* Set up T2 amplitudes */ cd = T2.col_offset[Gkj][Gc]; /* Set up multiplication parameters */ nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gkj][kj][cd]), nlinks, 0.0, &(W0[Gab][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); } /* -E_jklc * t_ilab */ for(Gl=0; Gl < nirreps; Gl++) { Gab = Gil = Gi ^ Gl; Gc = Gjk ^ Gl; /* Set up E integrals */ lc = Eints.col_offset[Gjk][Gl]; /* Set up T2 amplitudes */ il = T2.row_offset[Gil][I]; /* Set up multiplication parameters */ nrows = T2.params->coltot[Gil]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gjk][jk][lc]), ncols, 1.0, &(W0[Gab][0][0]), ncols); } /* Sort W[ab][c] --> W[ac][b] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, acb, 0); /* +F_idac * t_jkbd */ for(Gd=0; Gd < nirreps; Gd++) { Gac = Gid = Gi ^ Gd; Gb = Gjk ^ Gd; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, Fints.row_offset[Gid][I], virtpi[Gd]); bd = T2.col_offset[Gjk][Gb]; nrows = Fints.params->coltot[Gid]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gid][0][0]), nrows, &(T2.matrix[Gjk][jk][bd]), nlinks, 1.0, &(W1[Gac][0][0]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); } /* -E_kjlb * t_ilac */ for(Gl=0; Gl < nirreps; Gl++) { Gac = Gil = Gi ^ Gl; Gb = Gkj ^ Gl; lb = Eints.col_offset[Gkj][Gl]; il = T2.row_offset[Gil][I]; nrows = T2.params->coltot[Gil]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gil][il][0]), nrows, &(Eints.matrix[Gkj][kj][lb]), ncols, 1.0, &(W1[Gac][0][0]), ncols); } /* Sort W[ac][b] --> W[ca][b] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, bac, 0); /* +F_kdca * t_jibd */ for(Gd=0; Gd < nirreps; Gd++) { Gca = Gkd = Gk ^ Gd; Gb = Gji ^ Gd; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, Fints.row_offset[Gkd][K], virtpi[Gd]); bd = T2.col_offset[Gji][Gb]; nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gji][ji][bd]), nlinks, 1.0, &(W0[Gca][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } /* -E_ijlb * t_klca */ for(Gl=0; Gl < nirreps; Gl++) { Gca = Gkl = Gk ^ Gl; Gb = Gij ^ Gl; lb = Eints.col_offset[Gij][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gij][ij][lb]), ncols, 1.0, &(W0[Gca][0][0]), ncols); } /* Sort W[ca][b] --> W[cb][a] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, acb, 0); /* +F_kdcb * t_ijad */ for(Gd=0; Gd < nirreps; Gd++) { Gcb = Gkd = Gk ^ Gd; Ga = Gij ^ Gd; Fints.matrix[Gkd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gkd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gkd, Fints.row_offset[Gkd][K], virtpi[Gd]); ad = T2.col_offset[Gij][Ga]; nrows = Fints.params->coltot[Gkd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gkd][0][0]), nrows, &(T2.matrix[Gij][ij][ad]), nlinks, 1.0, &(W1[Gcb][0][0]), ncols); dpd_free_block(Fints.matrix[Gkd], virtpi[Gd], Fints.params->coltot[Gkd]); } /* -E_jila * t_klcb */ for(Gl=0; Gl < nirreps; Gl++) { Gcb = Gkl = Gk ^ Gl; Ga = Gji ^ Gl; la = Eints.col_offset[Gji][Gl]; kl = T2.row_offset[Gkl][K]; nrows = T2.params->coltot[Gkl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gkl][kl][0]), nrows, &(Eints.matrix[Gji][ji][la]), ncols, 1.0, &(W1[Gcb][0][0]), ncols); } /* Sort W[cb][a] --> W[bc][a] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, bac, 0); /* +F_jdbc * t_ikad */ for(Gd=0; Gd < nirreps; Gd++) { Gbc = Gjd = Gj ^ Gd; Ga = Gik ^ Gd; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, Fints.row_offset[Gjd][J], virtpi[Gd]); ad = T2.col_offset[Gik][Ga]; nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gik][ik][ad]), nlinks, 1.0, &(W0[Gbc][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); } /* -E_kila * t_jlbc */ for(Gl=0; Gl < nirreps; Gl++) { Gbc = Gjl = Gj ^ Gl; Ga = Gki ^ Gl; la = Eints.col_offset[Gki][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gki][ki][la]), ncols, 1.0, &(W0[Gbc][0][0]), ncols); } /* Sort W[bc][a] --> W[ba][c] */ dpd_3d_sort(W0, W1, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, acb, 0); /* +F_jdba * t_kicd */ for(Gd=0; Gd < nirreps; Gd++) { Gba = Gjd = Gj ^ Gd; Gc = Gki ^ Gd; Fints.matrix[Gjd] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gjd]); dpd_buf4_mat_irrep_rd_block(&Fints, Gjd, Fints.row_offset[Gjd][J], virtpi[Gd]); cd = T2.col_offset[Gki][Gc]; nrows = Fints.params->coltot[Gjd]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, &(Fints.matrix[Gjd][0][0]), nrows, &(T2.matrix[Gki][ki][cd]), nlinks, 1.0, &(W1[Gba][0][0]), ncols); dpd_free_block(Fints.matrix[Gjd], virtpi[Gd], Fints.params->coltot[Gjd]); } /* -E_iklc * t_jlba */ for(Gl=0; Gl < nirreps; Gl++) { Gba = Gjl = Gj ^ Gl; Gc = Gik ^ Gl; lc = Eints.col_offset[Gik][Gl]; jl = T2.row_offset[Gjl][J]; nrows = T2.params->coltot[Gjl]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, &(T2.matrix[Gjl][jl][0]), nrows, &(Eints.matrix[Gik][ik][lc]), ncols, 1.0, &(W1[Gba][0][0]), ncols); } /* Sort W[ba][c] --> W[ab][c] */ dpd_3d_sort(W1, W0, nirreps, Gijk, Fints.params->coltot, Fints.params->colidx, Fints.params->colorb, Fints.params->rsym, Fints.params->ssym, vir_off, vir_off, virtpi, vir_off, Fints.params->colidx, bac, 0); timer_off("N7 Terms"); /**** T3(c) complete ****/ /**** Build T3(d) for current i,j,k; Result stored in V ****/ timer_on("T3(d) Terms"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; ac = Dints.params->colidx[A][C]; /* +t_ia * D_jkbc + f_ia * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = 0.0; if(T1.params->rowtot[Gi] && T1.params->coltot[Gi]) { t_ia = T1.matrix[Gi][i][a]; f_ia = fIA.matrix[Gi][i][a]; } if(Dints.params->rowtot[Gjk] && Dints.params->coltot[Gjk]) { D_jkbc = Dints.matrix[Gjk][jk][bc]; t_jkbc = T2.matrix[Gjk][jk][bc]; } V[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* +t_jb * D_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = 0.0; if(T1.params->rowtot[Gj] && T1.params->coltot[Gj]) { t_jb = T1.matrix[Gj][j][b]; f_jb = fIA.matrix[Gj][j][b]; } if(Dints.params->rowtot[Gik] && Dints.params->coltot[Gik]) { D_ikac = Dints.matrix[Gik][ik][ac]; t_ikac = T2.matrix[Gik][ik][ac]; } V[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* +t_kc * D_ijab */ if(Gk == Gc && Gij == Gab) { t_kc = D_ijab = 0.0; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) { t_kc = T1.matrix[Gk][k][c]; f_kc = fIA.matrix[Gk][k][c]; } if(Dints.params->rowtot[Gij] && Dints.params->coltot[Gij]) { D_ijab = Dints.matrix[Gij][ij][ab]; t_ijab = T2.matrix[Gij][ij][ab]; } V[Gab][ab][c] += t_kc * D_ijab + f_kc * t_ijab; } } /* c */ } /* ab */ } /* Gab */ timer_off("T3(d) Terms"); /**** T3(d) complete ****/ /**** Compute (T) Energy as a Test ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gac = Gca = Ga ^ Gc; Gbc = Gcb = Gb ^ Gc; ba = Dints.params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Dints.params->colidx[A][C]; ca = Dints.params->colidx[C][A]; bc = Dints.params->colidx[B][C]; cb = Dints.params->colidx[C][B]; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; value1 = W0[Gab][ab][c] + V[Gab][ab][c] - W0[Gcb][cb][a] - V[Gcb][cb][a]; value2 = 4 * W0[Gab][ab][c] + W0[Gbc][bc][a] + W0[Gca][ca][b]; ET += value1 * value2 / (3.0 * denom); } /* c */ } /* ab */ } /* Gab */ /**** (T) Energy Contribution Complete ****/ /**** Compute S1 needed for lambda equations ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gac = Gca = Ga ^ Gc; Gbc = Gcb = Gb ^ Gc; ba = Dints.params->colidx[B][A]; if(Gi == Ga && S1.params->rowtot[Gi] && S1.params->coltot[Gi]) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Dints.params->colidx[A][C]; ca = Dints.params->colidx[C][A]; bc = Dints.params->colidx[B][C]; cb = Dints.params->colidx[C][B]; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; /* TJ Lee's expression */ value = (4 * W0[Gab][ab][c] + W0[Gbc][bc][a] + W0[Gca][ca][b] -3 * W0[Gcb][cb][a] - 2 * W0[Gac][ac][b] - W0[Gba][ba][c])/denom; S1.matrix[Gi][i][a] += 0.5 * Dints.matrix[Gjk][jk][bc] * value; } /* c */ } /* Gi == Ga && S1 rows and S1 cols */ } /* ab */ } /* Gab */ /**** S1 contributions complete ****/ /* Build M3 array */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; Gba = Gab; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gac = Gca = Ga ^ Gc; Gbc = Gcb = Gb ^ Gc; ba = Dints.params->colidx[B][A]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Dints.params->colidx[A][C]; ca = Dints.params->colidx[C][A]; bc = Dints.params->colidx[B][C]; cb = Dints.params->colidx[C][B]; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; /* TJ Lee Expression */ // M[Gab][ab][c] = 6 * (8 * W0[Gab][ab][c] + W0[Gbc][bc][a] + W0[Gca][ca][b] // - 4 * W0[Gcb][cb][a] - 4 * W0[Gac][ac][b] - 4 * W0[Gba][ba][c] // + 4 * V[Gab][ab][c] + V[Gbc][bc][a] + V[Gca][ca][b] // - 2 * V[Gcb][cb][a] - 2 * V[Gac][ac][b] - 2 * V[Gba][ba][c])/denom; /* GE Scuseria Expression */ M[Gab][ab][c] = (4 * (2 * W0[Gab][ab][c] + V[Gab][ab][c]) + (2 * W0[Gbc][bc][a] + V[Gbc][bc][a]) + (2 * W0[Gca][ca][b] + V[Gca][ca][b]) - 2 * (2 * W0[Gcb][cb][a] + V[Gcb][cb][a]) - (2 * W0[Gac][ac][b] + V[Gac][ac][b]) - 2 * (2 * W0[Gba][ba][c] + V[Gba][ba][c]))/denom; } } } /**** Compute S2 needed for lambda equations ****/ /* S_kjcd --> t_ijkabc <id|ab> */ for(Gd=0; Gd < nirreps; Gd++) { Gid = Gab = Gi ^ Gd; Gc = Gkj ^ Gd; nrows = virtpi[Gc]; ncols = virtpi[Gd]; nlinks = Fints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(virtpi[Gd], Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, virtpi[Gd]); cd = S2.col_offset[Gkj][Gc]; C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, M[Gab][0], nrows, Fints.matrix[Gid][0], nlinks, 1.0, &(S2.matrix[Gkj][kj][cd]), ncols); dpd_free_block(Fints.matrix[Gid], virtpi[Gd], Fints.params->coltot[Gid]); } } /* Gd */ timer_on("malloc"); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(W0[Gab],Fints.params->coltot[Gab],virtpi[Gc]); dpd_free_block(W1[Gab],Fints.params->coltot[Gab],virtpi[Gc]); dpd_free_block(V[Gab],Fints.params->coltot[Gab],virtpi[Gc]); dpd_free_block(M[Gab],Fints.params->coltot[Gab],virtpi[Gc]); } timer_off("malloc"); } /* k */ } /* j */ } /* i */ } /* Gk */ } /* Gj */ } /* Gi */ fprintf(outfile, "\tE(T) = %20.14f\n", ET); free(W0); free(W1); free(V); free(M); fclose(ijkfile); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2, h); dpd_buf4_mat_irrep_close(&S2, h); dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&F2ints, h); dpd_buf4_mat_irrep_close(&Dints, h); } dpd_buf4_print(&S2, outfile, 1); dpd_buf4_close(&S2); dpd_buf4_close(&T2); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_buf4_close(&F2ints); dpd_buf4_close(&Fints); dpd_file2_mat_wrt(&S1); dpd_file2_mat_close(&S1); dpd_file2_print(&S1, outfile); dpd_file2_close(&S1); dpd_file2_mat_close(&T1); dpd_file2_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); } }} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_grad_UHF_AAA.cc�����������������������������������������������������������0000644�0001015�0000765�00000040223�11027011315�016456� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void T3_UHF_AAA(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *C2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *C1, dpdbuf4 *D, dpdfile2 *fIA, dpdfile2 *fIJ, dpdfile2 *fAB, int *occpi, int *occ_off, int *virtpi, int *vir_off, double omega); void T3_grad_UHF_AAA(void) { int h, nirreps; int *occpi, *virtpi, *occ_off, *vir_off; int i, j, k, a, b, c, d, l; int I, J, K, A, B, C, D, L; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int il, jl, kl, li; int id, jd, kd; int ad, bd, cd, dc; int la, lb, lc; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Gid, Gjd, Gkd, Gil, Gjl, Gkl, Gli; int Gab, Gba, Gac, Gca, Gbc, Gcb, Gcd; int ncols, nrows, nlinks; double value_c, value_d, dijk, denom, ET; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba; dpdbuf4 T2, Fints, Eints, Dints, S2, GIJAB, GIJKA, GIDAB; dpdfile2 fIJ, fAB, fIA, T1, S1, DAB, DIJ; dpdbuf4 T2_junk, Fints_junk, Eints_junk, Dints_junk; dpdfile2 fIJ_junk, fAB_junk, fIA_junk, T1_junk; double ***WABC, ***VABC, ***XABC, ***Y, ***WABC2, ***VABC2; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.aoccpi; virtpi = moinfo.avirtpi; occ_off = moinfo.aocc_off; vir_off = moinfo.avir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&fIJ_junk, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fAB_junk, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fIA_junk, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&T1_junk, CC_OEI, 0, 0, 1, "tIA"); dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&Fints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&T2_junk, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&Fints_junk, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&Eints_junk, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&Dints_junk, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_file2_init(&S1, CC_OEI, 0, 0, 1, "SIA"); dpd_file2_mat_init(&S1); dpd_buf4_init(&S2, CC_MISC, 0, 0, 5, 2, 7, 0, "SIJAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&S2, h); dpd_file2_init(&DAB, CC_OEI, 0, 1, 1, "DAB"); dpd_file2_mat_init(&DAB); dpd_file2_init(&DIJ, CC_OEI, 0, 0, 0, "DIJ"); dpd_file2_mat_init(&DIJ); dpd_buf4_init(&GIJAB, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&GIJAB, h); dpd_buf4_init(&GIJKA, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&GIJKA, h); dpd_buf4_init(&GIDAB, CC_GAMMA, 0, 20, 5, 20, 7, 0, "GIDAB"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&GIDAB, h); WABC = (double ***) malloc(nirreps * sizeof(double **)); VABC = (double ***) malloc(nirreps * sizeof(double **)); XABC = (double ***) malloc(nirreps * sizeof(double **)); Y = (double ***) malloc(nirreps * sizeof(double **)); WABC2 = (double ***) malloc(nirreps * sizeof(double **)); VABC2 = (double ***) malloc(nirreps * sizeof(double **)); ET = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); VABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); XABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); WABC2[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); VABC2[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; Y[Ga] = dpd_block_matrix(virtpi[Ga],Fints.params->coltot[Gbc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; T3_UHF_AAA(WABC, VABC, 1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &Fints, &Eints, &T1, &Dints, &fIA, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); } ij = Eints.params->rowidx[I][J]; ji = Eints.params->rowidx[J][I]; jk = Eints.params->rowidx[J][K]; kj = Eints.params->rowidx[K][J]; ik = Eints.params->rowidx[I][K]; ki = Eints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; /**** Compute AAA part of (T) as a test ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; ET += WABC[Gab][ab][c] * (WABC[Gab][ab][c]+VABC[Gab][ab][c]) * denom; } /* c */ } /* ab */ } /* Gab */ /**** Denominators and energy test complete ****/ /**** T3 --> S1 ****/ /* S_ia = 1/4 <jk||bc> t(c)_ijkabc */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; if(Gi==Ga && S1.params->rowtot[Gi] && S1.params->coltot[Gi]) S1.matrix[Gi][i][a] += 0.25 * WABC[Gab][ab][c] * Dints.matrix[Gjk][jk][bc]; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 Complete ****/ /**** Build Xijkabc = 2 Wijkabc + Vijkabc ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { XABC[Gab][ab][c] = 2 * WABC[Gab][ab][c] + VABC[Gab][ab][c]; } } /* ab */ } /* Gab */ /**** Xijkabc complete ****/ /**** T3 --> S2 ****/ /* S_JKDC <-- +1/2 <ID||AB> [2 W_IJKABC + V_IJKABC] */ /* S_JKCD <-- -1/2 <ID||AB> [2 W_IJKABC + V_IJKABC] */ for(Gd=0; Gd < nirreps; Gd++) { Gc = Gd ^ Gjk; Gid = Gab = Gi ^ Gd; nrows = virtpi[Gd]; ncols = virtpi[Gc]; nlinks = Fints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(nrows,Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n','n', nrows, ncols, nlinks, 0.5, Fints.matrix[Gid][0], nlinks, XABC[Gab][0], ncols, 0.0, Z[0], ncols); for(d=0; d < virtpi[Gd]; d++) { D = vir_off[Gd] + d; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; cd = S2.params->colidx[C][D]; dc = S2.params->colidx[D][C]; S2.matrix[Gjk][jk][dc] += Z[d][c]; S2.matrix[Gjk][jk][cd] -= Z[d][c]; } } dpd_free_block(Fints.matrix[Gid], nrows, Fints.params->coltot[Gid]); free_block(Z); } /* if nrows && ncols && nlinks */ } /* Gd */ /* S_LIAB <-- +1/2 <JK||LC> [2 W_IJKABC + V_IJKABC] */ /* S_ILAB <-- -1/2 <JK||LC> [2 W_IJKABC + V_IJKABC] */ for(Gl=0; Gl < nirreps; Gl++) { Gli = Gab = Gl ^ Gi; Gc = Gab ^ Gijk; lc = Eints.col_offset[Gjk][Gl]; nrows = occpi[Gl]; ncols = Fints.params->coltot[Gab]; nlinks = virtpi[Gc]; if(nrows && ncols && nlinks) { Z = block_matrix(nrows, ncols); C_DGEMM('n','t',nrows, ncols, nlinks, 0.5, &(Eints.matrix[Gjk][jk][lc]), nlinks, XABC[Gab][0], nlinks, 0.0, Z[0], ncols); for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; li = S2.params->rowidx[L][I]; il = S2.params->rowidx[I][L]; for(ab=0; ab < ncols; ab++) { S2.matrix[Gli][li][ab] += Z[l][ab]; S2.matrix[Gli][il][ab] -= Z[l][ab]; } } free_block(Z); } /* nrows && ncols && nlinks */ } /* Gm */ /**** T3 --> S2 complete ****/ /**** T3 --> DAB ****/ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gcd = Ga ^ Gijk; for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc ^ Gcd; Gac = Gbc = Ga ^ Gc; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Fints.params->colidx[A][C]; bc = Fints.params->colidx[B][C]; for(d=0; d < virtpi[Gd]; d++) { DAB.matrix[Ga][a][b] += (1.0/12.0) * WABC[Gac][ac][d] * (WABC[Gbc][bc][d] + VABC[Gbc][bc][d]); } /* d */ } /* c */ } /* b */ } /* a */ } /* Gc */ } /* Ga */ /**** T3 --> DAB complete ****/ /**** T3 --> DIJ ****/ Gl = Gk; for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; T3_UHF_AAA(WABC2, VABC2, 1, nirreps, I, Gi, J, Gj, L, Gl, &T2_junk, &Fints_junk, &Eints_junk, &T1_junk, &Dints_junk, &fIA_junk, &fIJ_junk, &fAB_junk, occpi, occ_off, virtpi, vir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; DIJ.matrix[Gk][k][l] -= (1.0/12.0) * WABC2[Gab][ab][c] * (WABC[Gab][ab][c] + VABC[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ /**** T3 --> DIJ complete ****/ /* T3 --> GIJAB ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; if(Gk == Gc) { for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) GIJAB.matrix[Gij][ij][ab] += WABC[Gab][ab][c] * T1.matrix[Gk][k][c]; } } } } /* Gab */ /**** T3 --> GIJAB complete ****/ /**** T3 --> GIJKA ****/ /**** Build Xijkabc = 2 * Wijkabc + Vijkabc ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Fints.params->colidx[B][C]; Y[Ga][a][bc] = 2 * WABC[Gab][ab][c] + VABC[Gab][ab][c]; } } /* ab */ } /* Gab */ /**** Xijkabc complete ****/ /* G_IJLA = -1/2 t_KLBC Y_IJKABC */ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gl ^ Gij; Gkl = Gbc = Gl ^ Gk; nrows = occpi[Gl]; ncols = virtpi[Ga]; nlinks = T2.params->coltot[Gkl]; if(nrows && ncols && nlinks) { kl = T2.row_offset[Gkl][K]; la = GIJKA.col_offset[Gij][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, -0.5, T2.matrix[Gkl][kl], nlinks, Y[Ga][0], nlinks, 1.0, &(GIJKA.matrix[Gij][ij][la]), ncols); } } /* Gl */ /**** T3 --> GIJKA complete ****/ /* GIDAB = 1/2 t_JKCD X_IJKABC */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; nrows = virtpi[Gd]; ncols = GIDAB.params->coltot[Gid]; nlinks = virtpi[Gc]; if(nrows && ncols && nlinks) { id = GIDAB.row_offset[Gid][I]; cd = T2.col_offset[Gjk][Gc]; C_DGEMM('t','t', nrows, ncols, nlinks, 0.5, &(T2.matrix[Gjk][jk][cd]), nrows, XABC[Gab][0], nlinks, 1.0, GIDAB.matrix[Gid][id], ncols); } } /**** T3 --> GCIAB complete ****/ dpd_file2_mat_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Dints, h); dpd_buf4_mat_irrep_close(&Eints, h); } } /* K */ } /* J */ } /* I */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(XABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(WABC2[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC2[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; dpd_free_block(Y[Ga], virtpi[Ga],Fints.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ ET *= (1.0/36.0); fprintf(outfile, "\tE(T) AAA = %20.15f\n", ET); free(WABC); free(VABC); free(XABC); free(Y); free(WABC2); free(VABC2); dpd_file2_mat_wrt(&DAB); dpd_file2_mat_close(&DAB); dpd_file2_close(&DAB); dpd_file2_mat_wrt(&DIJ); dpd_file2_mat_close(&DIJ); dpd_file2_close(&DIJ); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2, h); dpd_buf4_mat_irrep_close(&S2, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIJAB, h); dpd_buf4_mat_irrep_close(&GIJAB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIJKA, h); dpd_buf4_mat_irrep_close(&GIJKA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIDAB, h); dpd_buf4_mat_irrep_close(&GIDAB, h); } dpd_buf4_close(&S2); dpd_buf4_close(&GIJAB); dpd_buf4_close(&GIJKA); dpd_buf4_close(&GIDAB); dpd_file2_mat_wrt(&S1); dpd_file2_mat_close(&S1); dpd_file2_close(&S1); dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_close(&T1); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); dpd_buf4_close(&T2_junk); dpd_buf4_close(&Fints_junk); dpd_buf4_close(&Eints_junk); dpd_buf4_close(&Dints_junk); dpd_file2_close(&T1_junk); dpd_file2_close(&fIJ_junk); dpd_file2_close(&fAB_junk); dpd_file2_close(&fIA_junk); } /* void T3_grad_UHF_AAA() */ } /* namespace */ } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_grad_UHF_AAB.cc�����������������������������������������������������������0000644�0001015�0000765�00000101661�11027011315�016463� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <libciomr/libciomr.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void T3_UHF_AAB(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2AA, dpdbuf4 *T2AB, dpdbuf4 *T2BA, dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA, dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA, dpdfile2 *T1A, dpdfile2 *T1B, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdfile2 *fIA, dpdfile2 *fia, dpdfile2 *fIJ, dpdfile2 *fij,dpdfile2 *fAB, dpdfile2 *fab, int *aoccpi, int *aocc_off, int *boccpi, int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off, double omega); void T3_grad_UHF_AAB(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac, Gcb, Gcd; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl, Gli, Glk; int I, J, K, L, A, B, C, D; int i, j, k, l, a, b, c, d; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int dc, ad, bd, da; int lc, la, lb; int id, jd, kd; int il, jl, kl, li, lk; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; double value_c, value_d, dijk, denom, ET; int nrows, ncols, nlinks; dpdbuf4 T2AB, T2AA, T2BA; dpdbuf4 FAAints, FABints, FBAints; dpdbuf4 EAAints, EABints, EBAints; dpdbuf4 DAAints, DABints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab, fIA, fia; dpdfile2 S1A, S1B, DAB, Dab, DIJ, Dij; dpdbuf4 S2AA, S2AB, GIJAB, GIjAb, GIJKA, GIjKa, GiJkA, GIDAB, GIdAb, GiDaB; dpdbuf4 T2AA_junk, T2AB_junk, T2BA_junk; dpdbuf4 FAAints_junk, FABints_junk, FBAints_junk; dpdbuf4 EAAints_junk, EABints_junk, EBAints_junk; dpdbuf4 DAAints_junk, DABints_junk; dpdfile2 T1A_junk, T1B_junk; dpdfile2 fIA_junk, fia_junk, fIJ_junk, fij_junk, fAB_junk, fab_junk; double ***WABc, ***VABc; double ***WABc2, ***VABc2; double ***XABc, ***Y1, ***Y2; double **Z; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FAAints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&FABints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EAAints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&EABints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DAAints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DABints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&fIJ_junk, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij_junk, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB_junk, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab_junk, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA_junk, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia_junk, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1A_junk, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B_junk, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2AA_junk, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB"); dpd_buf4_init(&T2AB_junk, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA_junk, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FAAints_junk, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>"); dpd_buf4_init(&FABints_junk, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints_junk, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EAAints_junk, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)"); dpd_buf4_init(&EABints_junk, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints_junk, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DAAints_junk, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>"); dpd_buf4_init(&DABints_junk, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>"); dpd_file2_init(&S1A, CC_OEI, 0, 0, 1, "SIA"); dpd_file2_mat_init(&S1A); dpd_file2_mat_rd(&S1A); dpd_file2_init(&S1B, CC_OEI, 0, 2, 3, "Sia"); dpd_file2_mat_init(&S1B); dpd_file2_mat_rd(&S1B); dpd_file2_init(&DAB, CC_OEI, 0, 1, 1, "DAB"); dpd_file2_mat_init(&DAB); dpd_file2_mat_rd(&DAB); dpd_file2_init(&Dab, CC_OEI, 0, 3, 3, "Dab"); dpd_file2_mat_init(&Dab); dpd_file2_mat_rd(&Dab); dpd_file2_init(&DIJ, CC_OEI, 0, 0, 0, "DIJ"); dpd_file2_mat_init(&DIJ); dpd_file2_mat_rd(&DIJ); dpd_file2_init(&Dij, CC_OEI, 0, 2, 2, "Dij"); dpd_file2_mat_init(&Dij); dpd_file2_mat_rd(&Dij); dpd_buf4_init(&S2AA, CC_MISC, 0, 0, 5, 2, 7, 0, "SIJAB"); dpd_buf4_init(&S2AB, CC_MISC, 0, 22, 28, 22, 28, 0, "SIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&S2AA, h); dpd_buf4_mat_irrep_rd(&S2AA, h); dpd_buf4_mat_irrep_init(&S2AB, h); } dpd_buf4_init(&GIJAB, CC_GAMMA, 0, 0, 5, 2, 7, 0, "GIJAB"); dpd_buf4_init(&GIjAb, CC_GAMMA, 0, 22, 28, 22, 28, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&GIJAB, h); dpd_buf4_mat_irrep_rd(&GIJAB, h); dpd_buf4_mat_irrep_init(&GIjAb, h); } dpd_buf4_init(&GIJKA, CC_GAMMA, 0, 0, 20, 2, 20, 0, "GIJKA"); dpd_buf4_init(&GIjKa, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&GiJkA, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&GIJKA, h); dpd_buf4_mat_irrep_rd(&GIJKA, h); dpd_buf4_mat_irrep_init(&GIjKa, h); dpd_buf4_mat_irrep_init(&GiJkA, h); } dpd_buf4_init(&GIDAB, CC_GAMMA, 0, 20, 5, 20, 7, 0, "GIDAB"); dpd_buf4_init(&GIdAb, CC_GAMMA, 0, 24, 28, 24, 28, 0, "GIdAb"); dpd_buf4_init(&GiDaB, CC_GAMMA, 0, 27, 29, 27, 29, 0, "GiDaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&GIDAB, h); dpd_buf4_mat_irrep_rd(&GIDAB, h); dpd_buf4_mat_irrep_init(&GIdAb, h); dpd_buf4_mat_irrep_init(&GiDaB, h); } ET = 0.0; WABc = (double ***) malloc(nirreps * sizeof(double **)); VABc = (double ***) malloc(nirreps * sizeof(double **)); XABc = (double ***) malloc(nirreps * sizeof(double **)); Y1 = (double ***) malloc(nirreps * sizeof(double **)); Y2 = (double ***) malloc(nirreps * sizeof(double **)); WABc2 = (double ***) malloc(nirreps * sizeof(double **)); VABc2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABc[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); VABc[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); XABc[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); WABc2[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); VABc2[Gab] = dpd_block_matrix(FAAints.params->coltot[Gab], bvirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; Y1[Ga] = dpd_block_matrix(avirtpi[Ga], FBAints.params->coltot[Gbc]); /* alpha-beta-alpha */ Y2[Ga] = dpd_block_matrix(avirtpi[Ga], FABints.params->coltot[Gbc]); /* alpha-alpha-beta */ } for(i=0; i < aoccpi[Gi]; i++) { I = aocc_off[Gi] + i; for(j=0; j < aoccpi[Gj]; j++) { J = aocc_off[Gj] + j; for(k=0; k < boccpi[Gk]; k++) { K = bocc_off[Gk] + k; T3_UHF_AAB(WABc, VABc, 1, nirreps, I, Gi, J, Gj, K, Gk, &T2AA, &T2AB, &T2BA, &FAAints, &FABints, &FBAints, &EAAints, &EABints, &EBAints, &T1A, &T1B, &DAAints, &DABints, &fIA, &fia, &fIJ, &fij, &fAB, &fab, aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, 0.0); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_mat_rd(&fIA); dpd_file2_mat_rd(&fia); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2AA, h); dpd_buf4_mat_irrep_rd(&T2AA, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&T2BA, h); dpd_buf4_mat_irrep_rd(&T2BA, h); dpd_buf4_mat_irrep_init(&EAAints, h); dpd_buf4_mat_irrep_rd(&EAAints, h); dpd_buf4_mat_irrep_init(&EABints, h); dpd_buf4_mat_irrep_rd(&EABints, h); dpd_buf4_mat_irrep_init(&EBAints, h); dpd_buf4_mat_irrep_rd(&EBAints, h); dpd_buf4_mat_irrep_init(&DAAints, h); dpd_buf4_mat_irrep_rd(&DAAints, h); dpd_buf4_mat_irrep_init(&DABints, h); dpd_buf4_mat_irrep_rd(&DABints, h); } ij = EAAints.params->rowidx[I][J]; ji = EAAints.params->rowidx[J][I]; jk = EABints.params->rowidx[J][K]; kj = EBAints.params->rowidx[K][J]; ik = EABints.params->rowidx[I][K]; ki = EBAints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fij.params->rowtot[Gk]) dijk += fij.matrix[Gk][k][k]; /**** Apply denominators and compute AAB part of (T) as a test ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; B = FAAints.params->colorb[Gab][ab][1]; Gb = FAAints.params->ssym[B]; b = B - avir_off[Gb]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fab.params->rowtot[Gc]) denom -= fab.matrix[Gc][c][c]; ET += WABc[Gab][ab][c] * (WABc[Gab][ab][c] + VABc[Gab][ab][c]) * denom; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 ****/ /* S_IA = <Jk|Bc> t(c)_IJkABc */ /* S_kc = 1/4 <IJ||AB> t(c)_IJkABc */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; B = FAAints.params->colorb[Gab][ab][1]; Gb = FAAints.params->ssym[B]; b = B - avir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = DABints.params->colidx[B][C]; if(Gi==Ga && S1A.params->rowtot[Gi] && S1A.params->coltot[Gi]) S1A.matrix[Gi][i][a] += WABc[Gab][ab][c] * DABints.matrix[Gjk][jk][bc]; if(Gk==Gc && S1B.params->rowtot[Gk] && S1B.params->coltot[Gk]) S1B.matrix[Gk][k][c] += 0.25 * WABc[Gab][ab][c] * DAAints.matrix[Gij][ij][ab]; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 Complete ****/ /**** T3 --> S2 ****/ /*** Build X_IJkABc = 2 W_IJkABc + V_IJkABc ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { XABc[Gab][ab][c] = 2 * WABc[Gab][ab][c] + VABc[Gab][ab][c]; } } } /*** X_IJkABc Complete ***/ /*** Sort X(AB,c) to Y(A,cB) ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; cb = FBAints.params->colidx[C][B]; Y1[Ga][a][cb] = XABc[Gab][ab][c]; } } } /*** S_JIDA <-- +t_IJkABc W_kDcB ***/ /*** S_JIAD <-- -t_IJkABc W_kDcB ***/ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gji; Gkd = Gcb = Gk ^ Gd; kd = FBAints.row_offset[Gkd][K]; nrows = avirtpi[Gd]; ncols = avirtpi[Ga]; nlinks = FBAints.params->coltot[Gkd]; if(nrows && ncols && nlinks) { FBAints.matrix[Gkd] = dpd_block_matrix(nrows, nlinks); dpd_buf4_mat_irrep_rd_block(&FBAints, Gkd, kd, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, FBAints.matrix[Gkd][0], nlinks, Y1[Ga][0], nlinks, 0.0, Z[0], ncols); for(d=0; d < avirtpi[Gd]; d++) { D = avir_off[Gd] + d; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; ad = S2AA.params->colidx[A][D]; da = S2AA.params->colidx[D][A]; S2AA.matrix[Gji][ji][da] += Z[d][a]; S2AA.matrix[Gji][ji][ad] -= Z[d][a]; } } dpd_free_block(FBAints.matrix[Gkd], nrows, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /*** S_LIAB <-- +t_IJkABc <Jk|Lc> ***/ /*** S_ILAB <-- -t_IJkABc <Jk|Lc> ***/ for(Gl=0; Gl < nirreps; Gl++) { Gli = Gab = Gl ^ Gi; Gc = Gab ^ Gijk; nrows = aoccpi[Gl]; ncols = FAAints.params->coltot[Gab]; nlinks = bvirtpi[Gc]; if(nrows && ncols && nlinks) { lc = EABints.col_offset[Gjk][Gl]; Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, &(EABints.matrix[Gjk][jk][lc]), nlinks, XABc[Gab][0], nlinks, 0.0, Z[0], ncols); for(l=0; l < nrows; l++) { L = aocc_off[Gl] + l; li = S2AA.params->rowidx[L][I]; il = S2AA.params->rowidx[I][L]; for(ab=0; ab < ncols; ab++) { S2AA.matrix[Gli][li][ab] += Z[l][ab]; S2AA.matrix[Gli][il][ab] -= Z[l][ab]; } } free_block(Z); } /* nrows && ncols && nlinks */ } /* Gl */ /* S_JkDc <-- 1/2 <ID||AB> X_IJkABc */ for(Gd=0; Gd < nirreps; Gd++) { Gid = Gab = Gi ^ Gd; Gc = Gab ^ Gijk; nrows = avirtpi[Gd]; ncols = bvirtpi[Gc]; nlinks = FAAints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = FAAints.row_offset[Gid][I]; FAAints.matrix[Gid] = dpd_block_matrix(nrows, nlinks); dpd_buf4_mat_irrep_rd_block(&FAAints, Gid, id, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, FAAints.matrix[Gid][0], nlinks, XABc[Gab][0], ncols, 0.0, Z[0], ncols); for(d=0; d < nrows; d++) { D = avir_off[Gd] + d; for(c=0; c < ncols; c++) { C = bvir_off[Gc] + c; dc = S2AB.params->colidx[D][C]; S2AB.matrix[Gjk][jk][dc] += Z[d][c]; } } dpd_free_block(FAAints.matrix[Gid], nrows, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /* S_JkBd <-- X_IJkABc <Id|Ac> */ /* sort X(AB,c) to Y2(B,Ac) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Gb = FAAints.params->ssym[B]; b = B - avir_off[Gb]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; ac = FABints.params->colidx[A][C]; Y2[Gb][b][ac] = XABc[Gab][ab][c]; } } } for(Gd=0; Gd < nirreps; Gd++) { Gid = Gac = Gi ^ Gd; Gb = Gac ^ Gijk; nrows = avirtpi[Gb]; ncols = bvirtpi[Gd]; nlinks = FABints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = FABints.row_offset[Gid][I]; FABints.matrix[Gid] = dpd_block_matrix(ncols, nlinks); dpd_buf4_mat_irrep_rd_block(&FABints, Gid, id, ncols); Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, Y2[Gb][0], nlinks, FABints.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(b=0; b < nrows; b++) { B = avir_off[Gb] + b; for(d=0; d < ncols; d++) { D = bvir_off[Gd] + d; bd = S2AB.params->colidx[B][D]; S2AB.matrix[Gjk][jk][bd] += Z[b][d]; } } dpd_free_block(FABints.matrix[Gid], ncols, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /* S_LkBc <-- 1/2 <IJ||LA> X_IJkABc */ /* sort X(AB,c) to Y2(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = S2AB.params->colidx[B][C]; Y2[Ga][a][bc] = XABc[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ for(Gl=0; Gl < nirreps; Gl++) { Glk = Gbc = Gl ^ Gk; Ga = Gbc ^ Gijk; nrows = aoccpi[Gl]; ncols = S2AB.params->coltot[Glk]; nlinks = avirtpi[Ga]; if(nrows && ncols && nlinks) { la = EAAints.col_offset[Gij][Gl]; Z = dpd_block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, &(EAAints.matrix[Gij][ij][la]), nlinks, Y2[Ga][0], ncols, 0.0, Z[0], ncols); for(l=0; l < nrows; l++) { L = aocc_off[Gl] + l; lk = S2AB.params->rowidx[L][K]; for(bc=0; bc < ncols; bc++) { S2AB.matrix[Glk][lk][bc] += Z[l][bc]; } } dpd_free_block(Z, nrows, ncols); } /* nrows && ncols && nlinks */ } /* Gl */ /* S_IlBc <-- <kJ|lA> X_IJkABc */ for(Gl=0; Gl < nirreps; Gl++) { Gil = Gbc = Gi ^ Gl; Ga = Gbc ^ Gijk; nrows = boccpi[Gl]; ncols = S2AB.params->coltot[Gil]; nlinks = avirtpi[Ga]; if(nrows && ncols && nlinks) { la = EBAints.col_offset[Gjk][Gl]; Z = dpd_block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 1.0, &(EBAints.matrix[Gjk][kj][la]), nlinks, Y2[Ga][0], ncols, 0.0, Z[0], ncols); for(l=0; l < nrows; l++) { L = bocc_off[Gl] + l; il = S2AB.params->rowidx[I][L]; for(bc=0; bc < ncols; bc++) { S2AB.matrix[Gil][il][bc] += Z[l][bc]; } } dpd_free_block(Z, nrows, ncols); } /* nrows && ncols && nlinks */ } /* Gl */ /**** T3 --> S2 Complete ****/ /**** T3 --> DAB ****/ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gcd = Ga ^ Gijk; for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc ^ Gcd; Gac = Gbc = Ga ^ Gc; for(a=0; a < avirtpi[Ga]; a++) { A = avir_off[Ga] + a; for(b=0; b < avirtpi[Gb]; b++) { B = avir_off[Gb] + b; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; ac = FAAints.params->colidx[A][C]; bc = FAAints.params->colidx[B][C]; for(d=0; d < bvirtpi[Gd]; d++) { DAB.matrix[Ga][a][b] += 0.5 * WABc[Gac][ac][d] * (WABc[Gbc][bc][d] + VABc[Gbc][bc][d]); } /* d */ } /* c */ } /* b */ } /* a */ } /* Gc */ } /* Ga */ /**** T3 --> DAB complete ****/ /**** T3 --> Dab ****/ for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc; Gab = Gc ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { for(d=0; d < bvirtpi[Gd]; d++) { Dab.matrix[Gc][c][d] += 0.25 * WABc[Gab][ab][c] * (WABc[Gab][ab][d] + VABc[Gab][ab][d]); } } } /* ab */ } /* Gc */ /**** T3 --> Dab complete ****/ /**** T3 --> DIJ ****/ Gl = Gi; for(l=0; l < aoccpi[Gl]; l++) { L = aocc_off[Gl] + l; T3_UHF_AAB(WABc2, VABc2, 1, nirreps, L, Gl, J, Gj, K, Gk, &T2AA_junk, &T2AB_junk, &T2BA_junk, &FAAints_junk, &FABints_junk, &FBAints_junk, &EAAints_junk, &EABints_junk, &EBAints_junk, &T1A_junk, &T1B_junk, &DAAints_junk, &DABints_junk, &fIA_junk, &fia_junk, &fIJ_junk, &fij_junk, &fAB_junk, &fab_junk, aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; DIJ.matrix[Gi][i][l] -= (1.0/2.0) * WABc2[Gab][ab][c] * (WABc[Gab][ab][c] + VABc[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ Gl = Gk; for(l=0; l < boccpi[Gl]; l++) { L = bocc_off[Gl] + l; T3_UHF_AAB(WABc2, VABc2, 1, nirreps, I, Gi, J, Gj, L, Gl, &T2AA_junk, &T2AB_junk, &T2BA_junk, &FAAints_junk, &FABints_junk, &FBAints_junk, &EAAints_junk, &EABints_junk, &EBAints_junk, &T1A_junk, &T1B_junk, &DAAints_junk, &DABints_junk, &fIA_junk, &fia_junk, &fIJ_junk, &fij_junk, &fAB_junk, &fab_junk, aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; Dij.matrix[Gk][k][l] -= (1.0/4.0) * WABc2[Gab][ab][c] * (WABc[Gab][ab][c] + VABc[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ /**** T3 --> DIJ complete ****/ /* T3 --> GIJAB ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; if(Gk == Gc) { for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk]) GIJAB.matrix[Gij][ij][ab] += WABc[Gab][ab][c] * T1B.matrix[Gk][k][c]; } } } } /* Gab */ /**** T3 --> GIJAB complete ****/ /**** T3 --> GIjAb ****/ /* Sort W(AB,c) --> Y2(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = S2AB.params->colidx[B][C]; Y2[Ga][a][bc] = WABc[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ Ga = Gi; Gbc = Ga ^ Gijk; if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi]) { for(a=0; a < avirtpi[Ga]; a++) { for(bc=0; bc < GIjAb.params->coltot[Gbc]; bc++) { GIjAb.matrix[Gjk][jk][bc] += Y2[Ga][a][bc] * T1A.matrix[Gi][i][a]; } } } /**** T3 --> GiJaB complete ****/ /**** T3 --> GIJKA ****/ /* Sort W(AB,c) --> Y1(A,cB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; cb = T2BA.params->colidx[C][B]; Y1[Ga][a][cb] = 2 * WABc[Gab][ab][c] + VABc[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* G_IJLA <-- t_kLcB Y_IJkABc */ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gl ^ Gij; Gkl = Gcb = Gk ^ Gl; nrows = aoccpi[Gl]; ncols = avirtpi[Ga]; nlinks = T2BA.params->coltot[Gcb]; if(nrows && ncols && nlinks) { kl = T2BA.row_offset[Gkl][K]; la = GIJKA.col_offset[Gij][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, 1.0, T2BA.matrix[Gkl][kl], nlinks, Y1[Ga][0], nlinks, 1.0, &(GIJKA.matrix[Gij][ij][la]), ncols); } } /* Gl */ /**** T3 --> GIJKA complete ****/ /**** T3 --> GIjKa ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { for(c=0; c < bvirtpi[Gc]; c++) { XABc[Gab][ab][c] = 2 * WABc[Gab][ab][c] + VABc[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* GIkLc <-- 1/2 t_JLAB X_IJkABc */ for(Gl=0; Gl < nirreps; Gl++) { Gc = Gl ^ Gik; Gab = Gjl = Gj ^ Gl; nrows = aoccpi[Gl]; ncols = bvirtpi[Gc]; nlinks = T2AA.params->coltot[Gjl]; if(nrows && ncols && nlinks) { jl = T2AA.row_offset[Gjl][J]; lc = GIjKa.col_offset[Gik][Gl]; C_DGEMM('n','n', nrows, ncols, nlinks, 0.5, T2AA.matrix[Gjl][jl], nlinks, XABc[Gab][0], ncols, 1.0, &(GIjKa.matrix[Gik][ik][lc]), ncols); } } /* Gl */ /**** T3 --> GIjKa complete ****/ /**** T3 --> GiJkA ****/ /* Sort W(AB,c) --> Y2(A,Bc) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAAints.params->coltot[Gab]; ab++) { A = FAAints.params->colorb[Gab][ab][0]; B = FAAints.params->colorb[Gab][ab][1]; Ga = FAAints.params->rsym[A]; a = A - avir_off[Ga]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = S2AB.params->colidx[B][C]; Y2[Ga][a][bc] = 2 * WABc[Gab][ab][c] + VABc[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* G_kIlA <-- -t_JlBc X_IJkABc **/ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gki ^ Gl; Gjl = Gbc = Gj ^ Gl; nrows = boccpi[Gl]; ncols = avirtpi[Ga]; nlinks = T2AB.params->coltot[Gbc]; if(nrows && ncols && nlinks) { jl = T2AB.row_offset[Gjl][J]; la = GiJkA.col_offset[Gki][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, -1.0, T2AB.matrix[Gjl][jl], nlinks, Y2[Ga][0], nlinks, 1.0, &(GiJkA.matrix[Gki][ki][la]), ncols); } } /* Gl */ /**** T3 --> GiJkA complete ****/ /* GIDAB <-- -t_JkDc X_IJkABc */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; nrows = avirtpi[Gd]; ncols = GIDAB.params->coltot[Gid]; nlinks = bvirtpi[Gc]; if(nrows && ncols && nlinks) { id = GIDAB.row_offset[Gid][I]; dc = T2AB.col_offset[Gjk][Gd]; C_DGEMM('n','t',nrows, ncols, nlinks, -1.0, &(T2AB.matrix[Gjk][jk][dc]), nlinks, XABc[Gab][0], nlinks, 1.0, GIDAB.matrix[Gid][id], ncols); } } /*** T3 --> GIDAB complete ***/ /* GIdBc <-- t_JkAd t_IJkABc */ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gjk; Gid = Gi ^ Gd; nrows = bvirtpi[Gd]; ncols = GIdAb.params->coltot[Gid]; nlinks = avirtpi[Ga]; if(nrows && ncols && nlinks) { ad = T2AB.col_offset[Gjk][Ga]; id = GIdAb.row_offset[Gid][I]; C_DGEMM('t','n',nrows, ncols, nlinks, -1.0, &(T2AB.matrix[Gjk][jk][ad]), nrows, Y2[Ga][0], ncols, 1.0, GIdAb.matrix[Gid][id], ncols); } } /*** T3 --> GIdAb complete ***/ /* GkDcA <-- -1/2 t_IJAD t_IJkABc */ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gij; Gkd = Gk ^ Gd; nrows = avirtpi[Gd]; ncols = GiDaB.params->coltot[Gkd]; nlinks = avirtpi[Ga]; if(nrows && ncols && nlinks) { ad = T2AA.col_offset[Gij][Ga]; kd = GiDaB.row_offset[Gkd][K]; C_DGEMM('t','n', nrows, ncols, nlinks, 0.5, &(T2AA.matrix[Gij][ij][ad]), nrows, Y1[Ga][0], ncols, 1.0, GiDaB.matrix[Gkd][kd], ncols); } } /*** T3 --> GiDaB complete ***/ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2AA, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&T2BA, h); dpd_buf4_mat_irrep_close(&EAAints, h); dpd_buf4_mat_irrep_close(&EABints, h); dpd_buf4_mat_irrep_close(&EBAints, h); dpd_buf4_mat_irrep_close(&DAAints, h); dpd_buf4_mat_irrep_close(&DABints, h); } dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(VABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(XABc[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(WABc2[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); dpd_free_block(VABc2[Gab], FAAints.params->coltot[Gab], bvirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; dpd_free_block(Y1[Ga], avirtpi[Ga], FBAints.params->coltot[Gbc]); dpd_free_block(Y2[Ga], avirtpi[Ga], FABints.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ ET *= 0.25; fprintf(outfile, "\tE(T) AAB = %20.15f\n", ET); free(WABc); free(VABc); free(XABc); free(Y1); free(Y2); free(WABc2); free(VABc2); dpd_file2_mat_wrt(&DAB); dpd_file2_mat_close(&DAB); dpd_file2_close(&DAB); dpd_file2_mat_wrt(&Dab); dpd_file2_mat_close(&Dab); dpd_file2_close(&Dab); dpd_file2_mat_wrt(&DIJ); dpd_file2_mat_close(&DIJ); dpd_file2_close(&DIJ); dpd_file2_mat_wrt(&Dij); dpd_file2_mat_close(&Dij); dpd_file2_close(&Dij); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2AA, h); dpd_buf4_mat_irrep_close(&S2AA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2AB, h); dpd_buf4_mat_irrep_close(&S2AB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIJAB, h); dpd_buf4_mat_irrep_close(&GIJAB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIjAb, h); dpd_buf4_mat_irrep_close(&GIjAb, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIJKA, h); dpd_buf4_mat_irrep_close(&GIJKA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIjKa, h); dpd_buf4_mat_irrep_close(&GIjKa, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GiJkA, h); dpd_buf4_mat_irrep_close(&GiJkA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIDAB, h); dpd_buf4_mat_irrep_close(&GIDAB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIdAb, h); dpd_buf4_mat_irrep_close(&GIdAb, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GiDaB, h); dpd_buf4_mat_irrep_close(&GiDaB, h); } dpd_buf4_close(&S2AA); dpd_buf4_close(&S2AB); dpd_buf4_close(&GIJAB); dpd_buf4_close(&GIjAb); dpd_buf4_close(&GIJKA); dpd_buf4_close(&GIjKa); dpd_buf4_close(&GiJkA); dpd_buf4_close(&GIDAB); dpd_buf4_close(&GIdAb); dpd_buf4_close(&GiDaB); dpd_file2_mat_wrt(&S1A); dpd_file2_mat_close(&S1A); dpd_file2_close(&S1A); dpd_file2_mat_wrt(&S1B); dpd_file2_mat_close(&S1B); dpd_file2_close(&S1B); dpd_buf4_close(&T2AA); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_buf4_close(&FAAints); dpd_buf4_close(&FABints); dpd_buf4_close(&FBAints); dpd_buf4_close(&EAAints); dpd_buf4_close(&EABints); dpd_buf4_close(&EBAints); dpd_buf4_close(&DAAints); dpd_buf4_close(&DABints); dpd_file2_close(&T1A); dpd_file2_close(&T1B); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_close(&fIA); dpd_file2_close(&fia); dpd_buf4_close(&T2AA_junk); dpd_buf4_close(&T2AB_junk); dpd_buf4_close(&T2BA_junk); dpd_buf4_close(&FAAints_junk); dpd_buf4_close(&FABints_junk); dpd_buf4_close(&FBAints_junk); dpd_buf4_close(&EAAints_junk); dpd_buf4_close(&EABints_junk); dpd_buf4_close(&EBAints_junk); dpd_buf4_close(&DAAints_junk); dpd_buf4_close(&DABints_junk); dpd_file2_close(&T1A_junk); dpd_file2_close(&T1B_junk); dpd_file2_close(&fIJ_junk); dpd_file2_close(&fij_junk); dpd_file2_close(&fAB_junk); dpd_file2_close(&fab_junk); dpd_file2_close(&fIA_junk); dpd_file2_close(&fia_junk); } }} // namespace psi::cctriples �������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_grad_UHF_BBA.cc�����������������������������������������������������������0000644�0001015�0000765�00000102426�11027011315�016464� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void T3_UHF_AAB(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2AA, dpdbuf4 *T2AB, dpdbuf4 *T2BA, dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA, dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA, dpdfile2 *T1A, dpdfile2 *T1B, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdfile2 *fIA, dpdfile2 *fia, dpdfile2 *fIJ, dpdfile2 *fij,dpdfile2 *fAB, dpdfile2 *fab, int *aoccpi, int *aocc_off, int *boccpi, int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off, double omega); void T3_grad_UHF_BBA(void) { int cnt; int h, nirreps; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gji, Gij, Gjk, Gkj, Gik, Gki, Gijk; int Gab, Gbc, Gac, Gca, Gba, Gcb, Gcd; int Gid, Gjd, Gkd; int Gil, Gjl, Gkl, Gli, Glk; int I, J, K, L, A, B, C, D; int i, j, k, l, a, b, c, d; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int cd, bd, ad, db, dc, da; int lc, lb, la; int id, jd, kd; int il, jl, kl, li, lk; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; double value_c, value_d, dijk, denom, ET; int nrows, ncols, nlinks; dpdbuf4 T2AB, T2BB, T2BA; dpdbuf4 FBBints, FABints, FBAints; dpdbuf4 EBBints, EABints, EBAints; dpdbuf4 DBBints, DBAints; dpdfile2 T1A, T1B, fIJ, fij, fAB, fab, fIA, fia; dpdfile2 S1A, S1B, DAB, Dab, DIJ, Dij; dpdbuf4 S2BB, S2BA, Gijab, GiJaB, Gijka, GIjKa, GiJkA, Gidab, GiDaB, GIdAb; dpdbuf4 T2BB_junk, T2AB_junk, T2BA_junk; dpdbuf4 FBBints_junk, FABints_junk, FBAints_junk; dpdbuf4 EBBints_junk, EABints_junk, EBAints_junk; dpdbuf4 DBBints_junk, DBAints_junk; dpdfile2 T1A_junk, T1B_junk; dpdfile2 fIA_junk, fia_junk, fIJ_junk, fij_junk, fAB_junk, fab_junk; double ***WabC, ***VabC; double ***WabC2, ***VabC2; double ***XabC, ***Y1, ***Y2; double **Z; nirreps = moinfo.nirreps; aoccpi = moinfo.aoccpi; avirtpi = moinfo.avirtpi; aocc_off = moinfo.aocc_off; avir_off = moinfo.avir_off; boccpi = moinfo.boccpi; bvirtpi = moinfo.bvirtpi; bocc_off = moinfo.bocc_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2BB, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FBBints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&FABints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EBBints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&EABints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DBBints, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DBAints, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&fIJ_junk, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_init(&fij_junk, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB_junk, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_init(&fab_junk, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA_junk, CC_OEI, 0, 0, 1, "fIA"); dpd_file2_init(&fia_junk, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1A_junk, CC_OEI, 0, 0, 1, "tIA"); dpd_file2_init(&T1B_junk, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2BB_junk, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&T2AB_junk, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb"); dpd_buf4_init(&T2BA_junk, CC_TAMPS, 0, 23, 29, 23, 29, 0, "tiJaB"); dpd_buf4_init(&FBBints_junk, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&FABints_junk, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>"); dpd_buf4_init(&FBAints_junk, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>"); dpd_buf4_init(&EBBints_junk, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&EABints_junk, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>"); dpd_buf4_init(&EBAints_junk, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>"); dpd_buf4_init(&DBBints_junk, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_buf4_init(&DBAints_junk, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>"); dpd_file2_init(&S1A, CC_OEI, 0, 0, 1, "SIA"); dpd_file2_mat_init(&S1A); dpd_file2_mat_rd(&S1A); dpd_file2_init(&S1B, CC_OEI, 0, 2, 3, "Sia"); dpd_file2_mat_init(&S1B); dpd_file2_mat_rd(&S1B); dpd_buf4_init(&S2BB, CC_MISC, 0, 10, 15, 12, 17, 0, "Sijab"); dpd_buf4_init(&S2BA, CC_MISC, 0, 23, 29, 23, 29, 0, "SiJaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&S2BB, h); dpd_buf4_mat_irrep_rd(&S2BB, h); dpd_buf4_mat_irrep_init(&S2BA, h); } dpd_file2_init(&DAB, CC_OEI, 0, 1, 1, "DAB"); dpd_file2_mat_init(&DAB); dpd_file2_mat_rd(&DAB); dpd_file2_init(&Dab, CC_OEI, 0, 3, 3, "Dab"); dpd_file2_mat_init(&Dab); dpd_file2_mat_rd(&Dab); dpd_file2_init(&DIJ, CC_OEI, 0, 0, 0, "DIJ"); dpd_file2_mat_init(&DIJ); dpd_file2_mat_rd(&DIJ); dpd_file2_init(&Dij, CC_OEI, 0, 2, 2, "Dij"); dpd_file2_mat_init(&Dij); dpd_file2_mat_rd(&Dij); dpd_buf4_init(&Gijab, CC_GAMMA, 0, 10, 15, 12, 17, 0, "Gijab"); dpd_buf4_init(&GiJaB, CC_GAMMA, 0, 23, 29, 23, 29, 0, "GiJaB"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Gijab, h); dpd_buf4_mat_irrep_rd(&Gijab, h); dpd_buf4_mat_irrep_init(&GiJaB, h); } dpd_buf4_init(&Gijka, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); dpd_buf4_init(&GIjKa, CC_GAMMA, 0, 22, 24, 22, 24, 0, "GIjKa"); dpd_buf4_init(&GiJkA, CC_GAMMA, 0, 23, 27, 23, 27, 0, "GiJkA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Gijka, h); dpd_buf4_mat_irrep_rd(&Gijka, h); dpd_buf4_mat_irrep_init(&GIjKa, h); dpd_buf4_mat_irrep_rd(&GIjKa, h); dpd_buf4_mat_irrep_init(&GiJkA, h); dpd_buf4_mat_irrep_rd(&GiJkA, h); } dpd_buf4_init(&Gidab, CC_GAMMA, 0, 30, 15, 30, 17, 0, "Gidab"); dpd_buf4_init(&GiDaB, CC_GAMMA, 0, 27, 29, 27, 29, 0, "GiDaB"); dpd_buf4_init(&GIdAb, CC_GAMMA, 0, 24, 28, 24, 28, 0, "GIdAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Gidab, h); dpd_buf4_mat_irrep_rd(&Gidab, h); dpd_buf4_mat_irrep_init(&GiDaB, h); dpd_buf4_mat_irrep_rd(&GiDaB, h); dpd_buf4_mat_irrep_init(&GIdAb, h); dpd_buf4_mat_irrep_rd(&GIdAb, h); } ET = 0.0; WabC = (double ***) malloc(nirreps * sizeof(double **)); VabC = (double ***) malloc(nirreps * sizeof(double **)); XabC = (double ***) malloc(nirreps * sizeof(double **)); Y1 = (double ***) malloc(nirreps * sizeof(double **)); Y2 = (double ***) malloc(nirreps * sizeof(double **)); WabC2 = (double ***) malloc(nirreps * sizeof(double **)); VabC2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WabC[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); VabC[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); XabC[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); WabC2[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); VabC2[Gab] = dpd_block_matrix(FBBints.params->coltot[Gab], avirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; Y1[Ga] = dpd_block_matrix(bvirtpi[Ga], FABints.params->coltot[Gbc]); /* beta-alpha-beta */ Y2[Ga] = dpd_block_matrix(bvirtpi[Ga], FBAints.params->coltot[Gbc]); /* beta-beta-alpha */ } for(i=0; i < boccpi[Gi]; i++) { I = bocc_off[Gi] + i; for(j=0; j < boccpi[Gj]; j++) { J = bocc_off[Gj] + j; for(k=0; k < aoccpi[Gk]; k++) { K = aocc_off[Gk] + k; T3_UHF_AAB(WabC, VabC, 1, nirreps, I, Gi, J, Gj, K, Gk, &T2BB, &T2BA, &T2AB, &FBBints, &FBAints, &FABints, &EBBints, &EBAints, &EABints, &T1B, &T1A, &DBBints, &DBAints, &fia, &fIA, &fij, &fIJ, &fab, &fAB, boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, 0.0); dpd_file2_mat_init(&fIJ); dpd_file2_mat_init(&fij); dpd_file2_mat_init(&fAB); dpd_file2_mat_init(&fab); dpd_file2_mat_init(&fIA); dpd_file2_mat_init(&fia); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_rd(&fij); dpd_file2_mat_rd(&fAB); dpd_file2_mat_rd(&fab); dpd_file2_mat_rd(&fIA); dpd_file2_mat_rd(&fia); dpd_file2_mat_init(&T1A); dpd_file2_mat_rd(&T1A); dpd_file2_mat_init(&T1B); dpd_file2_mat_rd(&T1B); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2BB, h); dpd_buf4_mat_irrep_rd(&T2BB, h); dpd_buf4_mat_irrep_init(&T2AB, h); dpd_buf4_mat_irrep_rd(&T2AB, h); dpd_buf4_mat_irrep_init(&T2BA, h); dpd_buf4_mat_irrep_rd(&T2BA, h); dpd_buf4_mat_irrep_init(&EBBints, h); dpd_buf4_mat_irrep_rd(&EBBints, h); dpd_buf4_mat_irrep_init(&EABints, h); dpd_buf4_mat_irrep_rd(&EABints, h); dpd_buf4_mat_irrep_init(&EBAints, h); dpd_buf4_mat_irrep_rd(&EBAints, h); dpd_buf4_mat_irrep_init(&DBBints, h); dpd_buf4_mat_irrep_rd(&DBBints, h); dpd_buf4_mat_irrep_init(&DBAints, h); dpd_buf4_mat_irrep_rd(&DBAints, h); } ij = EBBints.params->rowidx[I][J]; ji = EBBints.params->rowidx[J][I]; jk = EBAints.params->rowidx[J][K]; kj = EABints.params->rowidx[K][J]; ik = EBAints.params->rowidx[I][K]; ki = EABints.params->rowidx[K][I]; dijk = 0.0; if(fij.params->rowtot[Gi]) dijk += fij.matrix[Gi][i][i]; if(fij.params->rowtot[Gj]) dijk += fij.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; /*** Compute BBA contribution to (T) as a test ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; B = FBBints.params->colorb[Gab][ab][1]; Gb = FBBints.params->ssym[B]; b = B - bvir_off[Gb]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; denom = dijk; if(fab.params->rowtot[Ga]) denom -= fab.matrix[Ga][a][a]; if(fab.params->rowtot[Gb]) denom -= fab.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; ET += WabC[Gab][ab][c] * (WabC[Gab][ab][c] + VabC[Gab][ab][c]) * denom; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 ****/ /* S_ia = <jK|bC> t(c)_ijKabC */ /* S_KC = 1/4 <ij||ab> t(c)_ijKabC */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; B = FBBints.params->colorb[Gab][ab][1]; Gb = FBBints.params->ssym[B]; b = B - bvir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = DBAints.params->colidx[B][C]; if(Gi==Ga && S1B.params->rowtot[Gi] && S1B.params->coltot[Gi]) S1B.matrix[Gi][i][a] += WabC[Gab][ab][c] * DBAints.matrix[Gjk][jk][bc]; if(Gk==Gc && S1A.params->rowtot[Gk] && S1A.params->coltot[Gk]) S1A.matrix[Gk][k][c] += 0.25 * WabC[Gab][ab][c] * DBBints.matrix[Gij][ij][ab]; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 Complete ****/ /**** T3 --> S2 ****/ /*** Build X_ijKabC = 2 W_ijKabC + V_ijKabC ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { XabC[Gab][ab][c] = 2 * WabC[Gab][ab][c] + VabC[Gab][ab][c]; } } } /*** X_ijkabC Complete ***/ /*** Sort X(ab,C) to Y(a,Cb) ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; cb = FABints.params->colidx[C][B]; Y1[Ga][a][cb] = XabC[Gab][ab][c]; } } } /*** S_jida <-- +t_ijKabD W_KdCb ***/ /*** S_jiad <-- -t_ijKabC W_KdCb ***/ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gji; Gkd = Gcb = Gk ^ Gd; kd = FABints.row_offset[Gkd][K]; nrows = bvirtpi[Gd]; ncols = bvirtpi[Ga]; nlinks = FABints.params->coltot[Gkd]; if(nrows && ncols && nlinks) { FABints.matrix[Gkd] = dpd_block_matrix(nrows, nlinks); dpd_buf4_mat_irrep_rd_block(&FABints, Gkd, kd, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, FABints.matrix[Gkd][0], nlinks, Y1[Ga][0], nlinks, 0.0, Z[0], ncols); for(d=0; d < bvirtpi[Gd]; d++) { D = bvir_off[Gd] + d; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; ad = S2BB.params->colidx[A][D]; da = S2BB.params->colidx[D][A]; S2BB.matrix[Gji][ji][da] += Z[d][a]; S2BB.matrix[Gji][ji][ad] -= Z[d][a]; } } dpd_free_block(FABints.matrix[Gkd], nrows, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /*** S_liab <-- +t_ijKabC <jK|lC> ***/ /*** S_ilab <-- -t_ijKabC <jK|lC> ***/ for(Gl=0; Gl < nirreps; Gl++) { Gli = Gab = Gl ^ Gi; Gc = Gab ^ Gijk; nrows = boccpi[Gl]; ncols = FBBints.params->coltot[Gab]; nlinks = avirtpi[Gc]; if(nrows && ncols && nlinks) { lc = EBAints.col_offset[Gjk][Gl]; Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, &(EBAints.matrix[Gjk][jk][lc]), nlinks, XabC[Gab][0], nlinks, 0.0, Z[0], ncols); for(l=0; l < nrows; l++) { L = bocc_off[Gl] + l; li = S2BB.params->rowidx[L][I]; il = S2BB.params->rowidx[I][L]; for(ab=0; ab < ncols; ab++) { S2BB.matrix[Gli][li][ab] += Z[l][ab]; S2BB.matrix[Gli][il][ab] -= Z[l][ab]; } } free_block(Z); } /* nrows && ncols && nlinks */ } /* Gl */ /* S_jKdC <-- 1/2 <id||ab> X_ijKabC */ for(Gd=0; Gd < nirreps; Gd++) { Gid = Gab = Gi ^ Gd; Gc = Gab ^ Gijk; nrows = bvirtpi[Gd]; ncols = avirtpi[Gc]; nlinks = FBBints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = FBBints.row_offset[Gid][I]; FBBints.matrix[Gid] = dpd_block_matrix(nrows, nlinks); dpd_buf4_mat_irrep_rd_block(&FBBints, Gid, id, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, FBBints.matrix[Gid][0], nlinks, XabC[Gab][0], ncols, 0.0, Z[0], ncols); for(d=0; d < nrows; d++) { D = bvir_off[Gd] + d; for(c=0; c < ncols; c++) { C = avir_off[Gc] + c; dc = S2BA.params->colidx[D][C]; S2BA.matrix[Gjk][jk][dc] += Z[d][c]; } } dpd_free_block(FBBints.matrix[Gid], nrows, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /* S_jKbD <-- X_ijKabC <iD|aC> */ /* sort X(ab,C) to Y2(b,aC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Gb = FBBints.params->ssym[B]; b = B - bvir_off[Gb]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; ac = FBAints.params->colidx[A][C]; Y2[Gb][b][ac] = XabC[Gab][ab][c]; } } } for(Gd=0; Gd < nirreps; Gd++) { Gid = Gac = Gi ^ Gd; Gb = Gac ^ Gijk; nrows = bvirtpi[Gb]; ncols = avirtpi[Gd]; nlinks = FBAints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = FBAints.row_offset[Gid][I]; FBAints.matrix[Gid] = dpd_block_matrix(ncols, nlinks); dpd_buf4_mat_irrep_rd_block(&FBAints, Gid, id, ncols); Z = block_matrix(nrows, ncols); C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, Y2[Gb][0], nlinks, FBAints.matrix[Gid][0], nlinks, 0.0, Z[0], ncols); for(b=0; b < nrows; b++) { B = bvir_off[Gb] + b; for(d=0; d < ncols; d++) { D = avir_off[Gd] + d; bd = S2BA.params->colidx[B][D]; S2BA.matrix[Gjk][jk][bd] += Z[b][d]; } } dpd_free_block(FBAints.matrix[Gid], ncols, nlinks); free_block(Z); } /* nrows && ncols && nlinks */ } /* Gd */ /* S_lKbC <-- 1/2 <ij||la> X_ijKabC */ /* sort X(ab,C) to Y2(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = S2BA.params->colidx[B][C]; Y2[Ga][a][bc] = XabC[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ for(Gl=0; Gl < nirreps; Gl++) { Glk = Gbc = Gl ^ Gk; Ga = Gbc ^ Gijk; nrows = boccpi[Gl]; ncols = S2BA.params->coltot[Glk]; nlinks = bvirtpi[Ga]; if(nrows && ncols && nlinks) { la = EBBints.col_offset[Gij][Gl]; Z = dpd_block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 0.5, &(EBBints.matrix[Gij][ij][la]), nlinks, Y2[Ga][0], ncols, 0.0, Z[0], ncols); for(l=0; l < nrows; l++) { L = bocc_off[Gl] + l; lk = S2BA.params->rowidx[L][K]; for(bc=0; bc < ncols; bc++) { S2BA.matrix[Glk][lk][bc] += Z[l][bc]; } } dpd_free_block(Z, nrows, ncols); } /* nrows && ncols && nlinks */ } /* Gl */ /* S_iLbC <-- <Kj|La> X_ijKabC */ for(Gl=0; Gl < nirreps; Gl++) { Gil = Gbc = Gi ^ Gl; Ga = Gbc ^ Gijk; nrows = aoccpi[Gl]; ncols = S2BA.params->coltot[Gil]; nlinks = bvirtpi[Ga]; if(nrows && ncols && nlinks) { la = EABints.col_offset[Gjk][Gl]; Z = dpd_block_matrix(nrows, ncols); C_DGEMM('n', 'n', nrows, ncols, nlinks, 1.0, &(EABints.matrix[Gjk][kj][la]), nlinks, Y2[Ga][0], ncols, 0.0, Z[0], ncols); for(l=0; l <nrows; l++) { L = aocc_off[Gl] + l; il = S2BA.params->rowidx[I][L]; for(bc=0; bc < ncols; bc++) { S2BA.matrix[Gil][il][bc] += Z[l][bc]; } } dpd_free_block(Z, nrows, ncols); } /* nrows && ncols && nlinks */ } /* Gl */ /**** T3 --> S2 Complete ****/ /**** T3 --> DAB ****/ for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc; Gab = Gc ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { for(d=0; d < avirtpi[Gd]; d++) { DAB.matrix[Gc][c][d] += 0.25 * WabC[Gab][ab][c] * (WabC[Gab][ab][d] + VabC[Gab][ab][d]); } } } /* ab */ } /* Gc */ /**** T3 --> DAB complete ****/ /**** T3 --> Dab ****/ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gcd = Ga ^ Gijk; for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc ^ Gcd; Gac = Gbc = Ga ^ Gc; for(a=0; a < bvirtpi[Ga]; a++) { A = bvir_off[Ga] + a; for(b=0; b < bvirtpi[Gb]; b++) { B = bvir_off[Gb] + b; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; ac = FBBints.params->colidx[A][C]; bc = FBBints.params->colidx[B][C]; for(d=0; d < avirtpi[Gd]; d++) { Dab.matrix[Ga][a][b] += 0.5 * WabC[Gac][ac][d] * (WabC[Gbc][bc][d] + VabC[Gbc][bc][d]); } /* d */ } /* c */ } /* b */ } /* a */ } /* Gc */ } /* Ga */ /**** T3 --> Dab complete ****/ /**** T3 --> DIJ ****/ Gl = Gi; for(l=0; l < boccpi[Gl]; l++) { L = bocc_off[Gl] + l; T3_UHF_AAB(WabC2, VabC2, 1, nirreps, L, Gl, J, Gj, K, Gk, &T2BB_junk, &T2BA_junk, &T2AB_junk, &FBBints_junk, &FBAints_junk, &FABints_junk, &EBBints_junk, &EBAints_junk, &EABints_junk, &T1B_junk, &T1A_junk, &DBBints_junk, &DBAints_junk, &fia_junk, &fIA_junk, &fij_junk, &fIJ_junk, &fab_junk, &fAB_junk, boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; Dij.matrix[Gi][i][l] -= (1.0/2.0) * WabC2[Gab][ab][c] * (WabC[Gab][ab][c] + VabC[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ Gl = Gk; for(l=0; l < aoccpi[Gl]; l++) { L = aocc_off[Gl] + l; T3_UHF_AAB(WabC2, VabC2, 1, nirreps, I, Gi, J, Gj, L, Gl, &T2BB_junk, &T2BA_junk, &T2AB_junk, &FBBints_junk, &FBAints_junk, &FABints_junk, &EBBints_junk, &EBAints_junk, &EABints_junk, &T1B_junk, &T1A_junk, &DBBints_junk, &DBAints_junk, &fia_junk, &fIA_junk, &fij_junk, &fIJ_junk, &fab_junk, &fAB_junk, boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; DIJ.matrix[Gk][k][l] -= (1.0/4.0) * WabC2[Gab][ab][c] * (WabC[Gab][ab][c] + VabC[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ /**** T3 --> DIJ complete ****/ /**** T3 --> Gijab ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; if(Gk == Gc) { for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; if(T1A.params->rowtot[Gk] && T1A.params->coltot[Gk]) Gijab.matrix[Gij][ij][ab] += WabC[Gab][ab][c] * T1A.matrix[Gk][k][c]; } } } } /* Gab */ /**** T3 --> Gijab complete ****/ /**** T3 --> GiJaB ****/ /* Sort W(ab,C) --> Y2(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = S2BA.params->colidx[B][C]; Y2[Ga][a][bc] = WabC[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ Ga = Gi; Gbc = Ga ^ Gijk; if(T1B.params->rowtot[Gi] && T1B.params->coltot[Gi]) { for(a=0; a < bvirtpi[Ga]; a++) { for(bc=0; bc < GiJaB.params->coltot[Gbc]; bc++) { GiJaB.matrix[Gjk][jk][bc] += Y2[Ga][a][bc] * T1B.matrix[Gi][i][a]; } } } /**** T3 --> GiJaB complete ****/ /**** T3 --> Gijka ****/ /* Sort W(AB,c) --> Y1(A,cB) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; cb = T2AB.params->colidx[C][B]; Y1[Ga][a][cb] = 2 * WabC[Gab][ab][c] + VabC[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* G_ijla <-- t_KlCb Y_ijKabC */ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gl ^ Gij; Gkl = Gcb = Gk ^ Gl; nrows = boccpi[Gl]; ncols = bvirtpi[Ga]; nlinks = T2AB.params->coltot[Gcb]; if(nrows && ncols && nlinks) { kl = T2AB.row_offset[Gkl][K]; la = Gijka.col_offset[Gij][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, 1.0, T2AB.matrix[Gkl][kl], nlinks, Y1[Ga][0], nlinks, 1.0, &(Gijka.matrix[Gij][ij][la]), ncols); } } /* Gl */ /**** T3 --> Gijka complete ****/ /**** T3 --> GiJkA ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { for(c=0; c < avirtpi[Gc]; c++) { XabC[Gab][ab][c] = 2 * WabC[Gab][ab][c] + VabC[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* GiKlC <-- 1/2 t_jlab X_ijKabC */ for(Gl=0; Gl < nirreps; Gl++) { Gc = Gl ^ Gik; Gab = Gjl = Gj ^ Gl; nrows = boccpi[Gl]; ncols = avirtpi[Gc]; nlinks = T2BB.params->coltot[Gjl]; if(nrows && ncols && nlinks) { jl = T2BB.row_offset[Gjl][J]; lc = GiJkA.col_offset[Gik][Gl]; C_DGEMM('n','n', nrows, ncols, nlinks, 0.5, T2BB.matrix[Gjl][jl], nlinks, XabC[Gab][0], ncols, 1.0, &(GiJkA.matrix[Gik][ik][lc]), ncols); } } /* Gl */ /**** T3 --> GiJkA complete ****/ /**** T3 --> GIjKa ****/ /* Sort W(ab,C) --> Y2(a,bC) */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FBBints.params->coltot[Gab]; ab++) { A = FBBints.params->colorb[Gab][ab][0]; B = FBBints.params->colorb[Gab][ab][1]; Ga = FBBints.params->rsym[A]; a = A - bvir_off[Ga]; for(c=0; c < avirtpi[Gc]; c++) { C = avir_off[Gc] + c; bc = S2BA.params->colidx[B][C]; Y2[Ga][a][bc] = 2 * WabC[Gab][ab][c] + VabC[Gab][ab][c]; } /* c */ } /* ab */ } /* Gab */ /* G_KiLa <-- -t_jLbC X_ijKabC **/ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gki ^ Gl; Gjl = Gbc = Gj ^ Gl; nrows = aoccpi[Gl]; ncols = bvirtpi[Ga]; nlinks = T2BA.params->coltot[Gbc]; if(nrows && ncols && nlinks) { jl = T2BA.row_offset[Gjl][J]; la = GIjKa.col_offset[Gki][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, -1.0, T2BA.matrix[Gjl][jl], nlinks, Y2[Ga][0], nlinks, 1.0, &(GIjKa.matrix[Gki][ki][la]), ncols); } } /* Gl */ /**** T3 --> GIjKa complete ****/ /* Gidab <-- -t_jKdC X_ijKabC */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; nrows = bvirtpi[Gd]; ncols = Gidab.params->coltot[Gid]; nlinks = avirtpi[Gc]; if(nrows && ncols && nlinks) { id = Gidab.row_offset[Gid][I]; dc = T2BA.col_offset[Gjk][Gd]; C_DGEMM('n','t',nrows, ncols, nlinks, -1.0, &(T2BA.matrix[Gjk][jk][dc]), nlinks, XabC[Gab][0], nlinks, 1.0, Gidab.matrix[Gid][id], ncols); } } /*** T3 --> Gidab complete ****/ /* GiDbC <-- t_jKaD t_ijKabC */ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gjk; Gid = Gi ^ Gd; nrows = avirtpi[Gd]; ncols = GiDaB.params->coltot[Gid]; nlinks = bvirtpi[Ga]; if(nrows && ncols && nlinks) { ad = T2BA.col_offset[Gjk][Ga]; id = GiDaB.row_offset[Gid][I]; C_DGEMM('t','n',nrows, ncols, nlinks, -1.0, &(T2BA.matrix[Gjk][jk][ad]), nrows, Y2[Ga][0], ncols, 1.0, GiDaB.matrix[Gid][id], ncols); } } /*** T3 --> GiDaB complete ***/ /* GKdCa <-- -1/2 t_ijad t_ijKabC */ for(Gd=0; Gd < nirreps; Gd++) { Ga = Gd ^ Gij; Gkd = Gk ^ Gd; nrows = bvirtpi[Gd]; ncols = GIdAb.params->coltot[Gkd]; nlinks = bvirtpi[Ga]; if(nrows && ncols && nlinks) { ad = T2BB.col_offset[Gij][Ga]; kd = GIdAb.row_offset[Gkd][K]; C_DGEMM('t','n', nrows, ncols, nlinks, 0.5, &(T2BB.matrix[Gij][ij][ad]), nrows, Y1[Ga][0], ncols, 1.0, GIdAb.matrix[Gkd][kd], ncols); } } /*** T3 --> GIdAb complete ***/ for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2BB, h); dpd_buf4_mat_irrep_close(&T2AB, h); dpd_buf4_mat_irrep_close(&T2BA, h); dpd_buf4_mat_irrep_close(&EBBints, h); dpd_buf4_mat_irrep_close(&EABints, h); dpd_buf4_mat_irrep_close(&EBAints, h); dpd_buf4_mat_irrep_close(&DBBints, h); dpd_buf4_mat_irrep_close(&DBAints, h); } dpd_file2_mat_close(&T1A); dpd_file2_mat_close(&T1B); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_mat_close(&fIA); dpd_file2_mat_close(&fia); } /* k */ } /* j */ } /* i */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WabC[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); dpd_free_block(VabC[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); dpd_free_block(XabC[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); dpd_free_block(WabC2[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); dpd_free_block(VabC2[Gab], FBBints.params->coltot[Gab], avirtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; dpd_free_block(Y1[Ga], bvirtpi[Ga], FABints.params->coltot[Gbc]); dpd_free_block(Y2[Ga], bvirtpi[Ga], FBAints.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ ET *= 0.25; fprintf(outfile, "\tE(T) BBA = %20.15f\n", ET); free(WabC); free(VabC); free(XabC); free(Y1); free(Y2); free(WabC2); free(VabC2); dpd_file2_mat_wrt(&DAB); dpd_file2_mat_close(&DAB); dpd_file2_close(&DAB); dpd_file2_mat_wrt(&Dab); dpd_file2_mat_close(&Dab); dpd_file2_close(&Dab); dpd_file2_mat_wrt(&DIJ); dpd_file2_mat_close(&DIJ); dpd_file2_close(&DIJ); dpd_file2_mat_wrt(&Dij); dpd_file2_mat_close(&Dij); dpd_file2_close(&Dij); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2BB, h); dpd_buf4_mat_irrep_close(&S2BB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2BA, h); dpd_buf4_mat_irrep_close(&S2BA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gijab, h); dpd_buf4_mat_irrep_close(&Gijab, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GiJaB, h); dpd_buf4_mat_irrep_close(&GiJaB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gijka, h); dpd_buf4_mat_irrep_close(&Gijka, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIjKa, h); dpd_buf4_mat_irrep_close(&GIjKa, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GiJkA, h); dpd_buf4_mat_irrep_close(&GiJkA, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gidab, h); dpd_buf4_mat_irrep_close(&Gidab, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GiDaB, h); dpd_buf4_mat_irrep_close(&GiDaB, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&GIdAb, h); dpd_buf4_mat_irrep_close(&GIdAb, h); } dpd_buf4_close(&S2BB); /* Combine SIjAb and SiJaB */ dpd_buf4_sort_axpy(&S2BA, CC_MISC, qpsr, 22, 28, "SIjAb", 1); dpd_buf4_close(&S2BA); dpd_buf4_close(&Gijab); /* Combine GIjAb and GiJaB */ dpd_buf4_sort_axpy(&GiJaB, CC_GAMMA, qpsr, 22, 28, "GIjAb", 1); dpd_buf4_close(&GiJaB); dpd_buf4_close(&Gijka); dpd_buf4_close(&GIjKa); dpd_buf4_close(&GiJkA); dpd_buf4_close(&Gidab); dpd_buf4_close(&GiDaB); dpd_buf4_close(&GIdAb); dpd_file2_mat_wrt(&S1A); dpd_file2_mat_close(&S1A); dpd_file2_close(&S1A); dpd_file2_mat_wrt(&S1B); dpd_file2_mat_close(&S1B); dpd_file2_close(&S1B); dpd_buf4_close(&T2BB); dpd_buf4_close(&T2AB); dpd_buf4_close(&T2BA); dpd_buf4_close(&FBBints); dpd_buf4_close(&FABints); dpd_buf4_close(&FBAints); dpd_buf4_close(&EBBints); dpd_buf4_close(&EABints); dpd_buf4_close(&EBAints); dpd_buf4_close(&DBBints); dpd_buf4_close(&DBAints); dpd_file2_close(&T1A); dpd_file2_close(&T1B); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); dpd_file2_close(&fIA); dpd_file2_close(&fia); dpd_buf4_close(&T2BB_junk); dpd_buf4_close(&T2AB_junk); dpd_buf4_close(&T2BA_junk); dpd_buf4_close(&FBBints_junk); dpd_buf4_close(&FABints_junk); dpd_buf4_close(&FBAints_junk); dpd_buf4_close(&EBBints_junk); dpd_buf4_close(&EABints_junk); dpd_buf4_close(&EBAints_junk); dpd_buf4_close(&DBBints_junk); dpd_buf4_close(&DBAints_junk); dpd_file2_close(&T1A_junk); dpd_file2_close(&T1B_junk); dpd_file2_close(&fIJ_junk); dpd_file2_close(&fij_junk); dpd_file2_close(&fAB_junk); dpd_file2_close(&fab_junk); dpd_file2_close(&fIA_junk); dpd_file2_close(&fia_junk); } }} // namespace psi::cctriples ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_grad_UHF_BBB.cc�����������������������������������������������������������0000644�0001015�0000765�00000040400�11027011315�016456� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include "MOInfo.h" #include "Params.h" #define EXTERN #include "globals.h" namespace psi { namespace cctriples { void T3_UHF_AAA(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *C2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *C1, dpdbuf4 *D, dpdfile2 *fIA, dpdfile2 *fIJ, dpdfile2 *fAB, int *occpi, int *occ_off, int *virtpi, int *vir_off, double omega); void T3_grad_UHF_BBB(void) { int h, nirreps; int *occpi, *virtpi, *occ_off, *vir_off; int i, j, k, a, b, c, d, l; int I, J, K, A, B, C, D, L; int ij, ji, ik, ki, jk, kj; int ab, ba, ac, ca, bc, cb; int il, jl, kl, li; int id, jd, kd; int ad, bd, cd, dc; int la, lb, lc; int Gi, Gj, Gk, Ga, Gb, Gc, Gd, Gl; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Gid, Gjd, Gkd, Gil, Gjl, Gkl, Gli; int Gab, Gba, Gac, Gca, Gbc, Gcb, Gcd; int ncols, nrows, nlinks; double value_c, value_d, dijk, denom, ET; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba; dpdbuf4 T2, Fints, Eints, Dints, S2, Gijab, Gijka, Gidab; dpdfile2 fIJ, fAB, fIA, T1, S1, Dab, Dij; dpdbuf4 T2_junk, Fints_junk, Eints_junk, Dints_junk; dpdfile2 fIJ_junk, fAB_junk, fIA_junk, T1_junk; double ***WABC, ***VABC, ***XABC, ***Y, ***WABC2, ***VABC2; double **Z; nirreps = moinfo.nirreps; occpi = moinfo.boccpi; virtpi = moinfo.bvirtpi; occ_off = moinfo.bocc_off; vir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Fints, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&Eints, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Dints, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&fIJ_junk, CC_OEI, 0, 2, 2, "fij"); dpd_file2_init(&fAB_junk, CC_OEI, 0, 3, 3, "fab"); dpd_file2_init(&fIA_junk, CC_OEI, 0, 2, 3, "fia"); dpd_file2_init(&T1_junk, CC_OEI, 0, 2, 3, "tia"); dpd_buf4_init(&T2_junk, CC_TAMPS, 0, 10, 15, 12, 17, 0, "tijab"); dpd_buf4_init(&Fints_junk, CC_FINTS, 0, 30, 15, 30, 15, 1, "F <ia|bc>"); dpd_buf4_init(&Eints_junk, CC_EINTS, 0, 10, 30, 12, 30, 0, "E <ij||ka> (i>j,ka)"); dpd_buf4_init(&Dints_junk, CC_DINTS, 0, 10, 15, 10, 15, 0, "D <ij||ab>"); dpd_file2_init(&S1, CC_OEI, 0, 2, 3, "Sia"); dpd_file2_mat_init(&S1); dpd_buf4_init(&S2, CC_MISC, 0, 10, 15, 12, 17, 0, "Sijab"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&S2, h); dpd_file2_init(&Dab, CC_OEI, 0, 3, 3, "Dab"); dpd_file2_mat_init(&Dab); dpd_file2_init(&Dij, CC_OEI, 0, 2, 2, "Dij"); dpd_file2_mat_init(&Dij); dpd_buf4_init(&Gijab, CC_GAMMA, 0, 10, 15, 12, 17, 0, "Gijab"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&Gijab, h); dpd_buf4_init(&Gijka, CC_GAMMA, 0, 10, 30, 12, 30, 0, "Gijka"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&Gijka, h); dpd_buf4_init(&Gidab, CC_GAMMA, 0, 30, 15, 30, 17, 0, "Gidab"); for(h=0; h < nirreps; h++) dpd_buf4_mat_irrep_init(&Gidab, h); WABC = (double ***) malloc(nirreps * sizeof(double **)); VABC = (double ***) malloc(nirreps * sizeof(double **)); XABC = (double ***) malloc(nirreps * sizeof(double **)); Y = (double ***) malloc(nirreps * sizeof(double **)); WABC2 = (double ***) malloc(nirreps * sizeof(double **)); VABC2 = (double ***) malloc(nirreps * sizeof(double **)); ET = 0.0; for(Gi=0; Gi < nirreps; Gi++) { for(Gj=0; Gj < nirreps; Gj++) { for(Gk=0; Gk < nirreps; Gk++) { Gij = Gji = Gi ^ Gj; Gjk = Gkj = Gj ^ Gk; Gik = Gki = Gi ^ Gk; Gijk = Gi ^ Gj ^ Gk; for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; WABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); VABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); XABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); WABC2[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); VABC2[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; Y[Ga] = dpd_block_matrix(virtpi[Ga],Fints.params->coltot[Gbc]); } for(i=0; i < occpi[Gi]; i++) { I = occ_off[Gi] + i; for(j=0; j < occpi[Gj]; j++) { J = occ_off[Gj] + j; for(k=0; k < occpi[Gk]; k++) { K = occ_off[Gk] + k; T3_UHF_AAA(WABC, VABC, 1, nirreps, I, Gi, J, Gj, K, Gk, &T2, &Fints, &Eints, &T1, &Dints, &fIA, &fIJ, &fAB, occpi, occ_off, virtpi, vir_off, 0.0); dpd_file2_mat_init(&T1); dpd_file2_mat_rd(&T1); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_mat_init(&fIA); dpd_file2_mat_rd(&fIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); dpd_buf4_mat_irrep_init(&Dints, h); dpd_buf4_mat_irrep_rd(&Dints, h); dpd_buf4_mat_irrep_init(&Eints, h); dpd_buf4_mat_irrep_rd(&Eints, h); } ij = Eints.params->rowidx[I][J]; ji = Eints.params->rowidx[J][I]; jk = Eints.params->rowidx[J][K]; kj = Eints.params->rowidx[K][J]; ik = Eints.params->rowidx[I][K]; ki = Eints.params->rowidx[K][I]; dijk = 0.0; if(fIJ.params->rowtot[Gi]) dijk += fIJ.matrix[Gi][i][i]; if(fIJ.params->rowtot[Gj]) dijk += fIJ.matrix[Gj][j][j]; if(fIJ.params->rowtot[Gk]) dijk += fIJ.matrix[Gk][k][k]; /**** Compute BBB part of (T) as a test ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; denom = dijk; if(fAB.params->rowtot[Ga]) denom -= fAB.matrix[Ga][a][a]; if(fAB.params->rowtot[Gb]) denom -= fAB.matrix[Gb][b][b]; if(fAB.params->rowtot[Gc]) denom -= fAB.matrix[Gc][c][c]; ET += WABC[Gab][ab][c] * (WABC[Gab][ab][c]+VABC[Gab][ab][c]) * denom; } /* c */ } /* ab */ } /* Gab */ /**** Denominators and energy test complete ****/ /**** T3 contributions to S1 ****/ /* S_ijab = 1/4 <jk||bc> t(c)_ijkabc */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Dints.params->colidx[B][C]; if(Gi==Ga && S1.params->rowtot[Gi] && S1.params->coltot[Gi]) S1.matrix[Gi][i][a] += 0.25 * WABC[Gab][ab][c] * Dints.matrix[Gjk][jk][bc]; } /* c */ } /* ab */ } /* Gab */ /**** T3 --> S1 Complete ****/ /**** Build Xijkabc = 2 Wijkabc + Vijkabc ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; XABC[Gab] = dpd_block_matrix(Fints.params->coltot[Gab], virtpi[Gc]); for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { XABC[Gab][ab][c] = 2 * WABC[Gab][ab][c] + VABC[Gab][ab][c]; } } /* ab */ } /* Gab */ /**** Xijkabc complete ****/ /**** T3 --> S2 ****/ /* S_jkdc <-- +1/2 <id||ab> [2 W_ijkabc + V_ijkabc] */ /* S_jkcd <-- -1/2 <id||ab> [2 W_ijkabc + V_ijkabc] */ for(Gd=0; Gd < nirreps; Gd++) { Gc = Gd ^ Gjk; Gid = Gab = Gi ^ Gd; nrows = virtpi[Gd]; ncols = virtpi[Gc]; nlinks = Fints.params->coltot[Gid]; if(nrows && ncols && nlinks) { id = Fints.row_offset[Gid][I]; Fints.matrix[Gid] = dpd_block_matrix(nrows,Fints.params->coltot[Gid]); dpd_buf4_mat_irrep_rd_block(&Fints, Gid, id, nrows); Z = block_matrix(nrows, ncols); C_DGEMM('n','n', nrows, ncols, nlinks, 0.5, Fints.matrix[Gid][0], nlinks, XABC[Gab][0], ncols, 0.0, Z[0], ncols); for(d=0; d < virtpi[Gd]; d++) { D = vir_off[Gd] + d; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; cd = S2.params->colidx[C][D]; dc = S2.params->colidx[D][C]; S2.matrix[Gjk][jk][dc] += Z[d][c]; S2.matrix[Gjk][jk][cd] -= Z[d][c]; } } dpd_free_block(Fints.matrix[Gid], nrows, Fints.params->coltot[Gid]); free_block(Z); } /* if nrows && ncols && nlinks */ } /* Gd */ /* S_liab <-- +1/2 <jk||lc> [2 W_ijkabc + V_ijkabc] */ /* S_ilab <-- -1/2 <jk||lc> [2 W_ijkabc + V_ijkabc] */ for(Gl=0; Gl < nirreps; Gl++) { Gli = Gab = Gl ^ Gi; Gc = Gab ^ Gijk; lc = Eints.col_offset[Gjk][Gl]; nrows = occpi[Gl]; ncols = Fints.params->coltot[Gab]; nlinks = virtpi[Gc]; if(nrows && ncols && nlinks) { Z = block_matrix(nrows, ncols); C_DGEMM('n','t',nrows, ncols, nlinks, 0.5, &(Eints.matrix[Gjk][jk][lc]), nlinks, XABC[Gab][0], nlinks, 0.0, Z[0], ncols); for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; li = S2.params->rowidx[L][I]; il = S2.params->rowidx[I][L]; for(ab=0; ab < ncols; ab++) { S2.matrix[Gli][li][ab] += Z[l][ab]; S2.matrix[Gli][il][ab] -= Z[l][ab]; } } free_block(Z); } /* nrows && ncols && nlinks */ } /* Gm */ /**** T3 --> S2 complete ****/ /**** T3 --> DAB ****/ for(Ga=0; Ga < nirreps; Ga++) { Gb = Ga; Gcd = Ga ^ Gijk; for(Gc=0; Gc < nirreps; Gc++) { Gd = Gc ^ Gcd; Gac = Gbc = Ga ^ Gc; for(a=0; a < virtpi[Ga]; a++) { A = vir_off[Ga] + a; for(b=0; b < virtpi[Gb]; b++) { B = vir_off[Gb] + b; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; ac = Fints.params->colidx[A][C]; bc = Fints.params->colidx[B][C]; for(d=0; d < virtpi[Gd]; d++) { Dab.matrix[Ga][a][b] += (1.0/12.0) * WABC[Gac][ac][d] * (WABC[Gbc][bc][d] + VABC[Gbc][bc][d]); } /* d */ } /* c */ } /* b */ } /* a */ } /* Gc */ } /* Ga */ /**** T3 --> DAB complete ****/ /**** T3 --> DIJ ****/ Gl = Gk; for(l=0; l < occpi[Gl]; l++) { L = occ_off[Gl] + l; T3_UHF_AAA(WABC2, VABC2, 1, nirreps, I, Gi, J, Gj, L, Gl, &T2_junk, &Fints_junk, &Eints_junk, &T1_junk, &Dints_junk, &fIA_junk, &fIJ_junk, &fAB_junk, occpi, occ_off, virtpi, vir_off, 0.0); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gijk ^ Gab; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; Dij.matrix[Gk][k][l] -= (1.0/12.0) * WABC2[Gab][ab][c] * (WABC[Gab][ab][c] + VABC[Gab][ab][c]); } /* c */ } /* ab */ } /* Gab */ } /* l */ /**** T3 --> DIJ complete ****/ /**** T3 --> Gijab ****/ /** This can be simplified */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; if(Gk == Gc) { for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; if(T1.params->rowtot[Gk] && T1.params->coltot[Gk]) Gijab.matrix[Gij][ij][ab] += WABC[Gab][ab][c] * T1.matrix[Gk][k][c]; } } } } /* Gab */ /**** T3 --> Gijab complete ****/ /**** T3 --> Gijka ****/ /**** Build Xijkabc = 2 * Wijkabc + Vijkabc ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < Fints.params->coltot[Gab]; ab++) { A = Fints.params->colorb[Gab][ab][0]; Ga = Fints.params->rsym[A]; a = A - vir_off[Ga]; B = Fints.params->colorb[Gab][ab][1]; Gb = Fints.params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = Fints.params->colidx[B][C]; Y[Ga][a][bc] = 2 * WABC[Gab][ab][c] + VABC[Gab][ab][c]; } } /* ab */ } /* Gab */ /**** Xijkabc complete ****/ /* G_ijla = -1/2 t_klbc Y_ijkabc */ for(Gl=0; Gl < nirreps; Gl++) { Ga = Gl ^ Gij; Gkl = Gbc = Gl ^ Gk; nrows = occpi[Gl]; ncols = virtpi[Ga]; nlinks = T2.params->coltot[Gkl]; if(nrows && ncols && nlinks) { kl = T2.row_offset[Gkl][K]; la = Gijka.col_offset[Gij][Gl]; C_DGEMM('n','t', nrows, ncols, nlinks, -0.5, T2.matrix[Gkl][kl], nlinks, Y[Ga][0], nlinks, 1.0, &(Gijka.matrix[Gij][ij][la]), ncols); } } /* Gl */ /**** T3 --> Gijka complete ****/ /* Gidab = 1/2 t_jkcd X_ijkabc */ for(Gd=0; Gd < nirreps; Gd++) { Gab = Gid = Gi ^ Gd; Gc = Gjk ^ Gd; nrows = virtpi[Gd]; ncols = Gidab.params->coltot[Gid]; nlinks = virtpi[Gc]; if(nrows && ncols && nlinks) { id = Gidab.row_offset[Gid][I]; cd = T2.col_offset[Gjk][Gc]; C_DGEMM('t','t', nrows, ncols, nlinks, 0.5, &(T2.matrix[Gjk][jk][cd]), nrows, XABC[Gab][0], nlinks, 1.0, Gidab.matrix[Gid][id], ncols); } } /**** T3 --> Gciab complete ****/ dpd_file2_mat_close(&T1); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&Eints, h); dpd_buf4_mat_irrep_close(&Dints, h); } } /* K */ } /* J */ } /* I */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; dpd_free_block(WABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(XABC[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(WABC2[Gab], Fints.params->coltot[Gab], virtpi[Gc]); dpd_free_block(VABC2[Gab], Fints.params->coltot[Gab], virtpi[Gc]); } for(Ga=0; Ga < nirreps; Ga++) { Gbc = Ga ^ Gijk; dpd_free_block(Y[Ga], virtpi[Ga],Fints.params->coltot[Gbc]); } } /* Gk */ } /* Gj */ } /* Gi */ ET *= (1.0/36.0); fprintf(outfile, "\tE(T) BBB = %20.15f\n", ET); free(WABC); free(VABC); free(XABC); dpd_file2_mat_wrt(&Dab); dpd_file2_mat_close(&Dab); dpd_file2_close(&Dab); dpd_file2_mat_wrt(&Dij); dpd_file2_mat_close(&Dij); dpd_file2_close(&Dij); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&S2, h); dpd_buf4_mat_irrep_close(&S2, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gijab, h); dpd_buf4_mat_irrep_close(&Gijab, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gijka, h); dpd_buf4_mat_irrep_close(&Gijka, h); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_wrt(&Gidab, h); dpd_buf4_mat_irrep_close(&Gidab, h); } dpd_buf4_close(&Gijab); dpd_buf4_close(&Gijka); dpd_buf4_close(&Gidab); dpd_buf4_close(&S2); dpd_buf4_close(&T2); dpd_buf4_close(&Fints); dpd_buf4_close(&Eints); dpd_buf4_close(&Dints); dpd_file2_mat_wrt(&S1); dpd_file2_mat_close(&S1); dpd_file2_close(&S1); dpd_file2_close(&T1); dpd_file2_close(&fIJ); dpd_file2_close(&fAB); dpd_file2_close(&fIA); dpd_buf4_close(&T2_junk); dpd_buf4_close(&Fints_junk); dpd_buf4_close(&Eints_junk); dpd_buf4_close(&Dints_junk); dpd_file2_close(&T1_junk); dpd_file2_close(&fIJ_junk); dpd_file2_close(&fAB_junk); dpd_file2_close(&fIA_junk); } /* void T3_grad_UHF_BBB() */ } /* namespace */ } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_UHF_AAA.cc����������������������������������������������������������������0000644�0001015�0000765�00000051451�11027011315�015466� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup DPD \brief Enter brief description of file here */ /* T3_UHF_AAA(): Computes all connected and disconnected T3(IJK,ABC) ** amplitudes for a given I, J, K combination for input C2, F, and E ** intermediates. This function will work for AAA or BBB spin cases, ** with either RHF/ROHF or UHF orbitals. ** ** Arguments: ** ** double ***W: The target connected triples amplitudes in an ** nirreps x AB x C array. The memory for this must be allocated ** externally. ** ** double ***V: The target disconnected triples amplitudes (if ** requested) in an nirreps x AB x C array. The memory for this ** must be allocated externally. ** ** int disc: Boolean: 1 == computed disconnected triples; 0 == don't ** ** int nirreps: Number of irreps. ** ** int I: Absolute index of orbital I. ** ** int Gi: Irrep of I. ** ** int J: Absolute index of orbital J. ** ** int Gj: Irrep of J. ** ** int K: Absolute index of orbital K. ** ** int Gk: Irrep of K. ** ** dpdbuf4 *C2: Pointer to dpd buffer for double excitation amps, ** ordered (IJ,AB). ** ** dpdbuf4 *F: Pointer to dpd buffer for three-virtual-index ** intermediate, ordered (IA,BC). ** ** dpdbuf4 *E: Pointer to dpd buffer for three-occupied-index ** intermediate, ordered (IJ,KA). ** ** dpdfile *C1: If disconnected T3's are requested, pointer to dpd ** buffer for single-excitation amps. ** ** dpdbuf4 *D: If disconnected T3's are requested, pointer to dpd ** buffer for <IJ||ab> integrals. ** ** dpdfile2 *fIA: Pointer to the dpd file2 for the occ-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fIJ: Pointer to the dpd file2 for the occ-occ block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fAB: Pointer to the dpd file2 for the vir-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** int *occpi: Number of occupied orbitals per irrep lookup array. ** ** int *occ_off: Offset lookup for translating between absolute and ** relative orbital indices for occupied space. ** ** int *virtpi: Number of virtual orbitals per irrep lookup array. ** ** int *vir_off: Offset lookup for translating between absolute and ** relative orbital indices for virtual space. ** ** double omega: a constant to add to the final denominators - ** needed for CC3 EOM ** ** TDC, July 2004 ** Modified to return disconnected triples, TDC, Feburary 2008 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <ccfiles.h> namespace psi { namespace cctriples { void T3_UHF_AAA(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *C2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *C1, dpdbuf4 *D, dpdfile2 *fIA, dpdfile2 *fIJ, dpdfile2 *fAB, int *occpi, int *occ_off, int *virtpi, int *vir_off, double omega) { int h; int i, j, k; int ij, ji, ik, ki, jk, kj; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Ga, Gb, Gc; int Gd, Gl; int Gid, Gjd, Gkd; int Gab, Gcb, Gca, Gbc, Gac; int Gla, Glb, Glc; int Gil, Gjl, Gkl; int a, b, c, A, B, C; int ab, bc, ac; int cd, bd, ad; int id, jd, kd; int la, lb, lc; int il, jl, kl; int nrows, ncols, nlinks; double dijk, denom; double ***W2; int GE, GF, GC, GX3; double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc; double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc; double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba; double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba; GC = C2->file.my_irrep; /* F and E are assumed to have same irrep */ GF = GE = F->file.my_irrep; GX3 = GC^GF; dpd_file2_mat_init(C1); dpd_file2_mat_rd(C1); dpd_file2_mat_init(fIJ); dpd_file2_mat_init(fAB); dpd_file2_mat_init(fIA); dpd_file2_mat_rd(fIJ); dpd_file2_mat_rd(fAB); dpd_file2_mat_rd(fIA); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(C2, h); dpd_buf4_mat_irrep_rd(C2, h); if(disc) { dpd_buf4_mat_irrep_init(D, h); dpd_buf4_mat_irrep_rd(D, h); } dpd_buf4_mat_irrep_init(E, h); dpd_buf4_mat_irrep_rd(E, h); } i = I - occ_off[Gi]; j = J - occ_off[Gj]; k = K - occ_off[Gk]; Gij = Gji = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gjk = Gkj = Gj ^ Gk; Gijk = Gi ^ Gj ^ Gk; ij = C2->params->rowidx[I][J]; ji = C2->params->rowidx[J][I]; jk = C2->params->rowidx[J][K]; kj = C2->params->rowidx[K][J]; ik = C2->params->rowidx[I][K]; ki = C2->params->rowidx[K][I]; dijk = 0.0; if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i]; if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j]; if(fIJ->params->rowtot[Gk]) dijk += fIJ->matrix[Gk][k][k]; W2 = (double ***) malloc(nirreps * sizeof(double **)); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* changed */ W2[Gab] = dpd_block_matrix(F->params->coltot[Gab], virtpi[Gc]); if(F->params->coltot[Gab] && virtpi[Gc]) { memset(W[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double)); if(disc) memset(V[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +t_kjcd * F_idab */ Gid = Gi ^ Gd; Gab = Gid ^ GF; /* changed */ Gc = Gjk ^ Gd ^ GC; /* changed */ cd = C2->col_offset[Gjk][Gc]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid^GF]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows, &(C2->matrix[Gjk][kj][cd]), nlinks, 1.0, W[Gab][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]); /* +t_ikcd * F_jdab */ Gjd = Gj ^ Gd; Gab = Gjd ^ GF; /* changed */ Gc = Gik ^ Gd ^ GC; /* changed */ cd = C2->col_offset[Gik][Gc]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd^GF]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows, &(C2->matrix[Gik][ik][cd]), nlinks, 1.0, W[Gab][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]); /* -t_ijcd * F_kdab */ Gkd = Gk ^ Gd; /*changed */ Gab = Gkd ^ GF; Gc = Gij ^ Gd ^ GC; cd = C2->col_offset[Gij][Gc]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd^GF]; ncols = virtpi[Gc]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows, &(C2->matrix[Gij][ij][cd]), nlinks, 1.0, W[Gab][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilab * E_jklc */ Gil = Gi ^ Gl; /* changed */ Gab = Gil ^ GC; Gc = Gjk ^ Gl ^ GE; lc = E->col_offset[Gjk][Gl]; il = C2->row_offset[Gil][I]; nrows = C2->params->coltot[Gil^GC]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][lc]), ncols, 1.0, W[Gab][0], ncols); /* +t_jlab * E_iklc */ Gjl = Gj ^ Gl; /* changed */ Gab = Gjl ^ GC; Gc = Gik ^ Gl ^ GE; lc = E->col_offset[Gik][Gl]; jl = C2->row_offset[Gjl][J]; nrows = C2->params->coltot[Gjl^GC]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][lc]), ncols, 1.0, W[Gab][0], ncols); /* +t_klab * E_jilc */ Gkl = Gk ^ Gl; /* changed! */ Gab = Gkl ^ GC; Gc = Gji ^ Gl ^ GE; lc = E->col_offset[Gji][Gl]; kl = C2->row_offset[Gkl][K]; nrows = C2->params->coltot[Gkl^GC]; ncols = virtpi[Gc]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][lc]), ncols, 1.0, W[Gab][0], ncols); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_kjbd * F_idca */ Gid = Gi ^ Gd; /* changed */ Gca = Gid ^ GF; Gb = Gjk ^ Gd ^ GC; bd = C2->col_offset[Gjk][Gb]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid^GF]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows, &(C2->matrix[Gjk][kj][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]); /* +t_ikbd * F_jdca */ Gjd = Gj ^ Gd; Gca = Gjd ^ GF ; Gb = Gik ^ Gd ^ GC; bd = C2->col_offset[Gik][Gb]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd^GF]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows, &(C2->matrix[Gik][ik][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]); /* -t_ijbd * F_kdca */ Gkd = Gk ^ Gd; Gca = Gkd ^ GF; Gb = Gij ^ Gd ^ GC; bd = C2->col_offset[Gij][Gb]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd^GF]; ncols = virtpi[Gb]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows, &(C2->matrix[Gij][ij][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_ilca * E_jklb */ Gil = Gi ^ Gl; Gca = Gil ^ GC; Gb = Gjk ^ Gl ^ GE; lb = E->col_offset[Gjk][Gl]; il = C2->row_offset[Gil][I]; nrows = C2->params->coltot[Gil^GC]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][lb]), ncols, 1.0, W2[Gca][0], ncols); /* +t_jlca * E_iklb */ Gjl = Gj ^ Gl; Gca = Gjl ^ GC; Gb = Gik ^ Gl^ GE; lb = E->col_offset[Gik][Gl]; jl = C2->row_offset[Gjl][J]; nrows = C2->params->coltot[Gjl^GC]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][lb]), ncols, 1.0, W2[Gca][0], ncols); /* +t_klca * E_jilb */ Gkl = Gk ^ Gl; Gca = Gkl ^ GC; Gb = Gji ^ Gl ^ GE; lb = E->col_offset[Gji][Gl]; kl = C2->row_offset[Gkl][K]; nrows = C2->params->coltot[Gkl^GC]; ncols = virtpi[Gb]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][lb]), ncols, 1.0, W2[Gca][0], ncols); } dpd_3d_sort(W2, W, nirreps, Gijk^GX3, F->params->coltot, F->params->colidx, F->params->colorb, F->params->rsym, F->params->ssym, vir_off, vir_off, virtpi, vir_off, F->params->colidx, bca, 1); for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* changed */ if(F->params->coltot[Gab] && virtpi[Gc]) { memset(W2[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* -t_kjad * F_idcb */ Gid = Gi ^ Gd; Gcb = Gid ^ GF; Ga = Gkj ^ Gd ^ GC; ad = C2->col_offset[Gkj][Ga]; id = F->row_offset[Gid][I]; F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]); nrows = F->params->coltot[Gid^GF]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gid][0], nrows, &(C2->matrix[Gkj][kj][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]); /* -t_ikad * F_jdcb */ Gjd = Gj ^ Gd; Gcb = Gjd ^ GF; Ga = Gik ^ Gd ^ GC; ad = C2->col_offset[Gik][Ga]; jd = F->row_offset[Gjd][J]; F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]); nrows = F->params->coltot[Gjd^GF]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gjd][0], nrows, &(C2->matrix[Gik][ik][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]); /* +t_ijad * F_kdcb */ Gkd = Gk ^ Gd; Gcb = Gkd ^ GF; Ga = Gij ^ Gd ^ GC; ad = C2->col_offset[Gij][Ga]; kd = F->row_offset[Gkd][K]; F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]); dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]); nrows = F->params->coltot[Gkd^GF]; ncols = virtpi[Ga]; nlinks = virtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gkd][0], nrows, &(C2->matrix[Gij][ij][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* +t_ilcb * E_jkla */ Gil = Gi ^ Gl; Gcb = Gil ^ GC; Ga = Gjk ^ Gl ^ GE; la = E->col_offset[Gjk][Gl]; il = C2->row_offset[Gil][I]; nrows = C2->params->coltot[Gil^GC]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gil][il], nrows, &(E->matrix[Gjk][jk][la]), ncols, 1.0, W2[Gcb][0], ncols); /* -t_jlcb * E_ikla */ Gjl = Gj ^ Gl; Gcb = Gjl ^ GC; Ga = Gik ^ Gl ^ GE; la = E->col_offset[Gik][Gl]; jl = C2->row_offset[Gjl][J]; nrows = C2->params->coltot[Gjl^GC]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gjl][jl], nrows, &(E->matrix[Gik][ik][la]), ncols, 1.0, W2[Gcb][0], ncols); /* -t_klcb * E_jila */ Gkl = Gk ^ Gl; Gcb = Gkl ^ GC; Ga = Gji ^ Gl ^ GE; la = E->col_offset[Gji][Gl]; kl = C2->row_offset[Gkl][K]; nrows = C2->params->coltot[Gkl^GC]; ncols = virtpi[Ga]; nlinks = occpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gkl][kl], nrows, &(E->matrix[Gji][ji][la]), ncols, 1.0, W2[Gcb][0], ncols); } dpd_3d_sort(W2, W, nirreps, Gijk^GX3, F->params->coltot, F->params->colidx, F->params->colorb, F->params->rsym, F->params->ssym, vir_off, vir_off, virtpi, vir_off, F->params->colidx, cba, 1); /**** Compute disconnected T3s for given ijk ****/ if(disc) { for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < F->params->coltot[Gab]; ab++) { A = F->params->colorb[Gab][ab][0]; Ga = F->params->rsym[A]; a = A - vir_off[Ga]; B = F->params->colorb[Gab][ab][1]; Gb = F->params->ssym[B]; b = B - vir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < virtpi[Gc]; c++) { C = vir_off[Gc] + c; bc = D->params->colidx[B][C]; ac = D->params->colidx[A][C]; /* +t_ia * D_jkbc + f_ia * t_jkbc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) { t_ia = C1->matrix[Gi][i][a]; f_ia = fIA->matrix[Gi][i][a]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D_jkbc = D->matrix[Gjk][jk][bc]; t_jkbc = C2->matrix[Gjk][jk][bc]; } V[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* -t_ib * D_jkac - f_ib * t_jkac */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = f_ib = t_jkac = 0.0; if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) { t_ib = C1->matrix[Gi][i][b]; f_ib = fIA->matrix[Gi][i][b]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D_jkac = D->matrix[Gjk][jk][ac]; t_jkac = C2->matrix[Gjk][jk][ac]; } V[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac; } /* +t_ic * D_jkab + f_ic * t_jkba */ if(Gi == Gc && Gjk == Gab) { t_ic = D_jkba = f_ic = t_jkba = 0.0; if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) { t_ic = C1->matrix[Gi][i][c]; f_ic = fIA->matrix[Gi][i][c]; } if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) { D_jkba = D->matrix[Gjk][jk][ab]; t_jkba = C2->matrix[Gjk][jk][ab]; } V[Gab][ab][c] += t_ic * D_jkba + f_ic * t_jkba; } /* -t_ja * D_ikbc - f_ja * t_ikbc*/ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = f_ja = t_ikbc = 0.0; if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) { t_ja = C1->matrix[Gj][j][a]; f_ja = fIA->matrix[Gj][j][a]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D_ikbc = D->matrix[Gik][ik][bc]; t_ikbc = C2->matrix[Gik][ik][bc]; } V[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc; } /* +t_jb * D_ikac + f_jb * t_ikac */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) { t_jb = C1->matrix[Gj][j][b]; f_jb = fIA->matrix[Gj][j][b]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D_ikac = D->matrix[Gik][ik][ac]; t_ikac = C2->matrix[Gik][ik][ac]; } V[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_jc * D_ikba - f_jc * t_ikba */ if(Gj == Gc && Gik == Gab) { t_jc = D_ikba = f_jc = t_ikba = 0.0; if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) { t_jc = C1->matrix[Gj][j][c]; f_jc = fIA->matrix[Gj][j][c]; } if(D->params->rowtot[Gik] && D->params->coltot[Gik]) { D_ikba = D->matrix[Gik][ik][ab]; t_ikba = C2->matrix[Gik][ik][ab]; } V[Gab][ab][c] -= t_jc * D_ikba + f_jc * t_ikba; } /* -t_ka * D_jibc - f_ka * t_jibc */ if(Gk == Ga && Gji == Gbc) { t_ka = D_jibc = f_ka = t_jibc = 0.0; if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) { t_ka = C1->matrix[Gk][k][a]; f_ka = fIA->matrix[Gk][k][a]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D_jibc = D->matrix[Gji][ji][bc]; t_jibc = C2->matrix[Gji][ji][bc]; } V[Gab][ab][c] -= t_ka * D_jibc + f_ka * t_jibc; } /* +t_kb * D_jiac + f_kb * t_jiac */ if(Gk == Gb && Gji == Gac) { t_kb = D_jiac = f_kb = t_jiac = 0.0; if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) { t_kb = C1->matrix[Gk][k][b]; f_kb = fIA->matrix[Gk][k][b]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D_jiac = D->matrix[Gji][ji][ac]; t_jiac = C2->matrix[Gji][ji][ac]; } V[Gab][ab][c] += t_kb * D_jiac + f_kb * t_jiac; } /* -t_kc * D_jiab - f_kc * t_jiba*/ if(Gk == Gc && Gji == Gab) { t_kc = D_jiba = f_kc = t_jiba = 0.0; if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) { t_kc = C1->matrix[Gk][k][c]; f_kc = fIA->matrix[Gk][k][c]; } if(D->params->rowtot[Gji] && D->params->coltot[Gji]) { D_jiba = D->matrix[Gji][ji][ab]; t_jiba = C2->matrix[Gji][ji][ab]; } V[Gab][ab][c] -= t_kc * D_jiba + f_kc * t_jiba; } } /* c */ } /* ab */ } /* Gab */ } /**** Disconnected T3 complete ****/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric! */ for(ab=0; ab < F->params->coltot[Gab]; ab++) { A = F->params->colorb[Gab][ab][0]; Ga = F->params->rsym[A]; a = A - vir_off[Ga]; B = F->params->colorb[Gab][ab][1]; Gb = F->params->ssym[B]; b = B - vir_off[Gb]; for(c=0; c < virtpi[Gc]; c++) { denom = dijk; if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a]; if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b]; if(fAB->params->rowtot[Gc]) denom -= fAB->matrix[Gc][c][c]; W[Gab][ab][c] /= (omega + denom); if(disc) V[Gab][ab][c] /= (omega + denom); } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* changed */ dpd_free_block(W2[Gab], F->params->coltot[Gab], virtpi[Gc]); } free(W2); dpd_file2_mat_close(fIJ); dpd_file2_mat_close(fAB); if(disc) { dpd_file2_mat_close(fIA); dpd_file2_mat_close(C1); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(C2, h); if(disc) dpd_buf4_mat_irrep_close(D, h); dpd_buf4_mat_irrep_close(E, h); } } }} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/T3_UHF_AAB.cc����������������������������������������������������������������0000644�0001015�0000765�00000051604�11027011315�015467� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup DPD \brief Enter brief description of file here */ /* T3_UHF_AAB(): Computes all T3(IJK,ABC) amplitudes for a given I, J, ** K combination for input T2, F, and E intermediates. This function ** will work for AAB or BBA spin cases with either RHF/ROHF or UHF ** orbitals. ** ** Arguments: ** ** double ***W: The target triples amplitudes in an nirreps x AB x C ** array. The memory for this must be allocated externally. ** ** double ***V: The target disconnected triples amplitudes (if ** requested) in an nirreps x AB x C array. The memory for this ** must be allocated externally. ** ** int disc: Boolean: 1 == computed disconnected triples; 0 == don't ** ** int nirreps: Number of irreps. ** ** int I: Absolute index of orbital I. ** ** int Gi: Irrep of I. ** ** int J: Absolute index of orbital J. ** ** int Gj: Irrep of J. ** ** int K: Absolute index of orbital K. ** ** int Gk: Irrep of K. ** ** dpdbuf4 *T2: Pointer to dpd buffer for double excitation amps, ** ordered (IJ,AB). ** ** dpdbuf4 *F: Pointer to dpd buffer for three-virtual-index ** intermediate, ordered (IA,BC). ** ** dpdbuf4 *E: Pointer to dpd buffer for three-occupied-index ** intermediate, ordered (IJ,KA). ** ** dpdfile *C1: If disconnected T3's are requested, pointer to dpd ** buffer for single-excitation amps. ** ** dpdbuf4 *D: If disconnected T3's are requested, pointer to dpd ** buffer for <IJ||ab> integrals. ** ** dpdfile2 *fIA: Pointer to the dpd file2 for the occ-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fIJ: Pointer to the dpd file2 for the occ-occ block of ** the Fock matrix (or other appropriate one-electron operator). ** ** dpdfile2 *fAB: Pointer to the dpd file2 for the vir-vir block of ** the Fock matrix (or other appropriate one-electron operator). ** ** int *occpi: Number of occupied orbitals per irrep lookup array. ** ** int *occ_off: Offset lookup for translating between absolute and ** relative orbital indices for occupied space. ** ** int *virtpi: Number of virtual orbitals per irrep lookup array. ** ** int *vir_off: Offset lookup for translating between absolute and ** relative orbital indices for virtual space. ** ** double omega: constant to add to denominators - needed for ** CC3 EOM ** ** TDC, July 2004 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <libqt/qt.h> #include <libdpd/dpd.h> #include <ccfiles.h> namespace psi { namespace cctriples { void T3_UHF_AAB(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk, dpdbuf4 *T2AA, dpdbuf4 *T2AB, dpdbuf4 *T2BA, dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA, dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA, dpdfile2 *T1A, dpdfile2 *T1B, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdfile2 *fIA, dpdfile2 *fia, dpdfile2 *fIJ, dpdfile2 *fij,dpdfile2 *fAB, dpdfile2 *fab, int *aoccpi, int *aocc_off, int *boccpi, int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off, double omega) { int h; int i, j, k; int ij, ji, ik, ki, jk, kj; int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk; int Ga, Gb, Gc; int Gd, Gl; int Gid, Gjd, Gkd; int Gab, Gcb, Gca, Gac, Gbc; int Gla, Glb, Glc; int Gil, Gjl, Gkl; int a, b, c, A, B, C; int ab, bc, ac; int dc, bd, ad; int id, jd, kd; int la, lb, lc; int il, jl, kl; int nrows, ncols, nlinks; double dijk, denom; double ***W2; int GE, GF, GC, GX3; double t_ia, t_ib, t_ja, t_jb, t_kc; double f_ia, f_ib, f_ja, f_jb, f_kc; double D_jkbc, D_jkac, D_ikbc, D_ikac, D_jiab; double t_jkbc, t_jkac, t_ikbc, t_ikac, t_jiab; GC = T2AA->file.my_irrep; /* F and E are assumed to have same irrep */ GF = GE = FAA->file.my_irrep; GX3 = GC^GF; dpd_file2_mat_init(fIJ); dpd_file2_mat_init(fAB); dpd_file2_mat_init(fij); dpd_file2_mat_init(fab); if(disc) { dpd_file2_mat_init(fIA); dpd_file2_mat_init(fia); dpd_file2_mat_init(T1A); dpd_file2_mat_init(T1B); } dpd_file2_mat_rd(fIJ); dpd_file2_mat_rd(fAB); dpd_file2_mat_rd(fij); dpd_file2_mat_rd(fab); if(disc) { dpd_file2_mat_rd(fIA); dpd_file2_mat_rd(fia); dpd_file2_mat_rd(T1A); dpd_file2_mat_rd(T1B); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(T2AA, h); dpd_buf4_mat_irrep_rd(T2AA, h); dpd_buf4_mat_irrep_init(T2AB, h); dpd_buf4_mat_irrep_rd(T2AB, h); dpd_buf4_mat_irrep_init(T2BA, h); dpd_buf4_mat_irrep_rd(T2BA, h); if(disc) { dpd_buf4_mat_irrep_init(DAA, h); dpd_buf4_mat_irrep_rd(DAA, h); dpd_buf4_mat_irrep_init(DAB, h); dpd_buf4_mat_irrep_rd(DAB, h); } dpd_buf4_mat_irrep_init(EAA, h); dpd_buf4_mat_irrep_rd(EAA, h); dpd_buf4_mat_irrep_init(EAB, h); dpd_buf4_mat_irrep_rd(EAB, h); dpd_buf4_mat_irrep_init(EBA, h); dpd_buf4_mat_irrep_rd(EBA, h); } i = I - aocc_off[Gi]; j = J - aocc_off[Gj]; k = K - bocc_off[Gk]; Gij = Gji = Gi ^ Gj; Gik = Gki = Gi ^ Gk; Gjk = Gkj = Gj ^ Gk; Gijk = Gi ^ Gj ^ Gk; ij = T2AA->params->rowidx[I][J]; ji = T2AA->params->rowidx[J][I]; jk = T2AB->params->rowidx[J][K]; kj = T2BA->params->rowidx[K][J]; ik = T2AB->params->rowidx[I][K]; ki = T2BA->params->rowidx[K][I]; dijk = 0.0; if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i]; if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j]; if(fij->params->rowtot[Gk]) dijk += fij->matrix[Gk][k][k]; W2 = (double ***) malloc(nirreps * sizeof(double **)); /* alpha-beta-alpha */ /* clear out the old W */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric! */ if(FAA->params->coltot[Gab] && bvirtpi[Gc]) { memset(W[Gab][0], 0, FAA->params->coltot[Gab]*bvirtpi[Gc]*sizeof(double)); memset(V[Gab][0], 0, FAA->params->coltot[Gab]*bvirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +C_JkDc * F_IDAB */ Gid = Gi ^ Gd; Gab = Gid ^ GF; Gc = Gjk ^ Gd ^ GC; dc = T2AB->col_offset[Gjk][Gd]; id = FAA->row_offset[Gid][I]; FAA->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], FAA->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(FAA, Gid, id, avirtpi[Gd]); nrows = FAA->params->coltot[Gid^GF]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','n',nrows, ncols, nlinks, 1.0, FAA->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][dc]), ncols, 1.0, W[Gab][0], ncols); dpd_free_block(FAA->matrix[Gid], avirtpi[Gd], FAA->params->coltot[Gid^GF]); /* -C_IkDc * F_JDAB */ Gjd = Gj ^ Gd; Gab = Gjd ^ GF; Gc = Gik ^ Gd ^ GC; dc = T2AB->col_offset[Gik][Gd]; jd = FAA->row_offset[Gjd][J]; FAA->matrix[Gjd] = dpd_block_matrix(avirtpi[Gd], FAA->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(FAA, Gjd, jd, avirtpi[Gd]); nrows = FAA->params->coltot[Gjd^GF]; ncols = bvirtpi[Gc]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','n',nrows, ncols, nlinks, -1.0, FAA->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][dc]), ncols, 1.0, W[Gab][0], ncols); dpd_free_block(FAA->matrix[Gjd], avirtpi[Gd], FAA->params->coltot[Gjd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* -C_ILAB * E_JkLc */ Gil = Gi ^ Gl; Gab = Gil ^ GC; Gc = Gjk ^ Gl ^ GE; lc = EAB->col_offset[Gjk][Gl]; il = T2AA->row_offset[Gil][I]; nrows = T2AA->params->coltot[Gil^GC]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AA->matrix[Gil][il], nrows, &(EAB->matrix[Gjk][jk][lc]), ncols, 1.0, W[Gab][0], ncols); /* +t_JLAB * E_IkLc */ Gjl = Gj ^ Gl; Gab = Gjl ^ GC; Gc = Gik ^ Gl ^ GE; lc = EAB->col_offset[Gik][Gl]; jl = T2AA->row_offset[Gjl][J]; nrows = T2AA->params->coltot[Gjl^GC]; ncols = bvirtpi[Gc]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AA->matrix[Gjl][jl], nrows, &(EAB->matrix[Gik][ik][lc]), ncols, 1.0, W[Gab][0], ncols); } /* Open memory for an alpha-beta-alpha array */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; W2[Gab] = dpd_block_matrix(FAB->params->coltot[Gab], avirtpi[Gc]); } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JkBd * F_IdAc */ Gid = Gi ^ Gd; Gac = Gid ^ GF; Gb = Gjk ^ Gd ^ GC; bd = T2AB->col_offset[Gjk][Gb]; id = FAB->row_offset[Gid][I]; FAB->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(FAB, Gid, id, bvirtpi[Gd]); nrows = FAB->params->coltot[Gid^GF]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, FAB->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][bd]), nlinks, 1.0, W2[Gac][0], ncols); dpd_free_block(FAB->matrix[Gid], bvirtpi[Gd], FAB->params->coltot[Gid^GF]); /* -t_IkBd * F_JdAc */ Gjd = Gj ^ Gd; Gac = Gjd ^ GF; Gb = Gik ^ Gd ^ GC; bd = T2AB->col_offset[Gik][Gb]; jd = FAB->row_offset[Gjd][J]; FAB->matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(FAB, Gjd, jd, bvirtpi[Gd]); nrows = FAB->params->coltot[Gjd^GF]; ncols = avirtpi[Gb]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, FAB->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][bd]), nlinks, 1.0, W2[Gac][0], ncols); dpd_free_block(FAB->matrix[Gjd], bvirtpi[Gd], FAB->params->coltot[Gjd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* -t_IlAc * E_kJlB */ Gil = Gi ^ Gl; Gac = Gil ^ GC; Gb = Gkj ^ Gl ^ GE; lb = EBA->col_offset[Gkj][Gl]; il = T2AB->row_offset[Gil][I]; nrows = T2AB->params->coltot[Gil^GC]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AB->matrix[Gil][il], nrows, &(EBA->matrix[Gkj][kj][lb]), ncols, 1.0, W2[Gac][0], ncols); /* +t_JlAc * E_kIlB */ Gjl = Gj ^ Gl; Gac = Gjl ^ GC; Gb = Gki ^ Gl ^ GE; lb = EBA->col_offset[Gki][Gl]; jl = T2AB->row_offset[Gjl][J]; nrows = T2AB->params->coltot[Gjl^GC]; ncols = avirtpi[Gb]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AB->matrix[Gjl][jl], nrows, &(EBA->matrix[Gki][ki][lb]), ncols, 1.0, W2[Gac][0], ncols); } /* W(Ac,B) --> W(AB,c) */ dpd_3d_sort(W2, W, nirreps, Gijk^GX3, FAB->params->coltot, FAB->params->colidx, FAB->params->colorb, FAB->params->rsym, FAB->params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAA->params->colidx, acb, 1); /* clean out the alpha-beta-alpha intermediate for next set of terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; if(FAB->params->coltot[Gab] && avirtpi[Gc]) { memset(W2[Gab][0], 0, FAB->params->coltot[Gab]*avirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* -C_JkAd * F_IdBc */ Gid = Gi ^ Gd; Gbc = Gid ^ GF; Ga = Gjk ^ Gd ^ GC; ad = T2AB->col_offset[Gjk][Ga]; id = FAB->row_offset[Gid][I]; FAB->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gid^GF]); dpd_buf4_mat_irrep_rd_block(FAB, Gid, id, bvirtpi[Gd]); nrows = FAB->params->coltot[Gid^GF]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, FAB->matrix[Gid][0], nrows, &(T2AB->matrix[Gjk][jk][ad]), nlinks, 1.0, W2[Gbc][0], ncols); dpd_free_block(FAB->matrix[Gid], bvirtpi[Gd], FAB->params->coltot[Gid^GF]); /* +t_IkAd * F_JdBc */ Gjd = Gj ^ Gd; Gbc = Gjd ^ GF; Ga = Gik ^ Gd ^ GC; ad = T2AB->col_offset[Gik][Ga]; jd = FAB->row_offset[Gjd][J]; FAB->matrix[Gjd] = dpd_block_matrix(bvirtpi[Gd], FAB->params->coltot[Gjd^GF]); dpd_buf4_mat_irrep_rd_block(FAB, Gjd, jd, bvirtpi[Gd]); nrows = FAB->params->coltot[Gjd^GF]; ncols = avirtpi[Ga]; nlinks = bvirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, FAB->matrix[Gjd][0], nrows, &(T2AB->matrix[Gik][ik][ad]), nlinks, 1.0, W2[Gbc][0], ncols); dpd_free_block(FAB->matrix[Gjd], bvirtpi[Gd], FAB->params->coltot[Gjd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* +C_IlBc * E_kJlA */ Gil = Gi ^ Gl; Gbc = Gil ^ GC; Ga = Gkj ^ Gl ^ GE; la = EBA->col_offset[Gkj][Gl]; il = T2AB->row_offset[Gil][I]; nrows = T2AB->params->coltot[Gil^GC]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2AB->matrix[Gil][il], nrows, &(EBA->matrix[Gkj][kj][la]), ncols, 1.0, W2[Gbc][0], ncols); /* -C_JlBc * E_kIlA */ Gjl = Gj ^ Gl; Gbc = Gjl ^ GC; Ga = Gki ^ Gl ^ GE; la = EBA->col_offset[Gki][Gl]; jl = T2AB->row_offset[Gjl][J]; nrows = T2AB->params->coltot[Gjl^GC]; ncols = avirtpi[Ga]; nlinks = boccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2AB->matrix[Gjl][jl], nrows, &(EBA->matrix[Gki][ki][la]), ncols, 1.0, W2[Gbc][0], ncols); } dpd_3d_sort(W2, W, nirreps, Gijk^GX3, FAB->params->coltot, FAB->params->colidx, FAB->params->colorb, FAB->params->rsym, FAB->params->ssym, avir_off, bvir_off, avirtpi, avir_off, FAA->params->colidx, cab, 1); /* Close the alpha-beta-alpha array and open a beta-alpha-alpha array */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk^GX3; /* assumes totally symmetric! */ dpd_free_block(W2[Gab], FAB->params->coltot[Gab], avirtpi[Gc]); W2[Gab] = dpd_block_matrix(FBA->params->coltot[Gab], avirtpi[Gc]); } /* Insert cBA terms */ for(Gd=0; Gd < nirreps; Gd++) { /* -C_JIAD * F_kDcB */ Gkd = Gk ^ Gd; Gcb = Gkd ^ GF; Ga = Gji ^ Gd ^ GC; ad = T2AA->col_offset[Gji][Ga]; kd = FBA->row_offset[Gkd][K]; FBA->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBA->params->coltot[Gkd^GF]); dpd_buf4_mat_irrep_rd_block(FBA, Gkd, kd, avirtpi[Gd]); nrows = FBA->params->coltot[Gkd^GF]; ncols = avirtpi[Ga]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, FBA->matrix[Gkd][0], nrows, &(T2AA->matrix[Gji][ji][ad]), nlinks, 1.0, W2[Gcb][0], ncols); dpd_free_block(FBA->matrix[Gkd], avirtpi[Gd], FBA->params->coltot[Gkd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* -C_kLcB * E_JILA */ Gkl = Gk ^ Gl; Gcb = Gkl ^ GC; Ga = Gji ^ Gl ^ GE; la = EAA->col_offset[Gji][Gl]; kl = T2BA->row_offset[Gkl][K]; nrows = T2BA->params->coltot[Gkl^GC]; ncols = avirtpi[Ga]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, T2BA->matrix[Gkl][kl], nrows, &(EAA->matrix[Gji][ji][la]), ncols, 1.0, W2[Gcb][0], ncols); } dpd_3d_sort(W2, W, nirreps, Gijk^GX3, FBA->params->coltot, FBA->params->colidx, FBA->params->colorb, FBA->params->rsym, FBA->params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAA->params->colidx, cba, 1); /* clean out the beta-alpha-alpha intermediate for next set of terms */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; if(FBA->params->coltot[Gab] && avirtpi[Gc]) { memset(W2[Gab][0], 0, FBA->params->coltot[Gab]*avirtpi[Gc]*sizeof(double)); } } for(Gd=0; Gd < nirreps; Gd++) { /* +t_JIBD * F_kDcA */ Gkd = Gk ^ Gd; Gca = Gkd ^ GF; Gb = Gji ^ Gd ^ GC; bd = T2AA->col_offset[Gji][Gb]; kd = FBA->row_offset[Gkd][K]; FBA->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], FBA->params->coltot[Gkd^GF]); dpd_buf4_mat_irrep_rd_block(FBA, Gkd, kd, avirtpi[Gd]); nrows = FBA->params->coltot[Gkd^GF]; ncols = avirtpi[Gb]; nlinks = avirtpi[Gd]; if(nrows && ncols && nlinks) C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, FBA->matrix[Gkd][0], nrows, &(T2AA->matrix[Gji][ji][bd]), nlinks, 1.0, W2[Gca][0], ncols); dpd_free_block(FBA->matrix[Gkd], avirtpi[Gd], FBA->params->coltot[Gkd^GF]); } for(Gl=0; Gl < nirreps; Gl++) { /* +C_kLcA * E_JILB */ Gkl = Gk ^ Gl; Gca = Gkl ^ GC; Gb = Gji ^ Gl ^ GE; lb = EAA->col_offset[Gji][Gl]; kl = T2BA->row_offset[Gkl][K]; nrows = T2BA->params->coltot[Gkl^GC]; ncols = avirtpi[Gb]; nlinks = aoccpi[Gl]; if(nrows && ncols && nlinks) C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, T2BA->matrix[Gkl][kl], nrows, &(EAA->matrix[Gji][ji][lb]), ncols, 1.0, W2[Gca][0], ncols); } dpd_3d_sort(W2, W, nirreps, Gijk^GX3, FBA->params->coltot, FBA->params->colidx, FBA->params->colorb, FBA->params->rsym, FBA->params->ssym, bvir_off, avir_off, avirtpi, avir_off, FAA->params->colidx, bca, 1); /*** compute disconnected triples ***/ if(disc) { for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk; for(ab=0; ab < FAA->params->coltot[Gab]; ab++) { A = FAA->params->colorb[Gab][ab][0]; Ga = FAA->params->rsym[A]; a = A - avir_off[Ga]; B = FAA->params->colorb[Gab][ab][1]; Gb = FAA->params->ssym[B]; b = B - avir_off[Gb]; Gbc = Gb ^ Gc; Gac = Ga ^ Gc; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; bc = DAB->params->colidx[B][C]; ac = DAB->params->colidx[A][C]; /* +t_IA * D_JkBc + f_IA * t_JkBc */ if(Gi == Ga && Gjk == Gbc) { t_ia = D_jkbc = f_ia = t_jkbc = 0.0; if(T1A->params->rowtot[Gi] && T1A->params->coltot[Gi]) { t_ia = T1A->matrix[Gi][i][a]; f_ia = fIA->matrix[Gi][i][a]; } if(DAB->params->rowtot[Gjk] && DAB->params->coltot[Gjk]) { D_jkbc = DAB->matrix[Gjk][jk][bc]; t_jkbc = T2AB->matrix[Gjk][jk][bc]; } V[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc; } /* -t_IB * D_JkAc - f_IB * t_JkAc */ if(Gi == Gb && Gjk == Gac) { t_ib = D_jkac = f_ib = t_jkac = 0.0; if(T1A->params->rowtot[Gi] && T1A->params->coltot[Gi]) { t_ib = T1A->matrix[Gi][i][b]; f_ib = fIA->matrix[Gi][i][b]; } if(DAB->params->rowtot[Gjk] && DAB->params->coltot[Gjk]) { D_jkac = DAB->matrix[Gjk][jk][ac]; t_jkac = T2AB->matrix[Gjk][jk][ac]; } V[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac; } /* -t_JA * D_IkBc - f_JA * t_IkBc */ if(Gj == Ga && Gik == Gbc) { t_ja = D_ikbc = f_ja = t_ikbc = 0.0; if(T1A->params->rowtot[Gj] && T1A->params->coltot[Gj]) { t_ja = T1A->matrix[Gj][j][a]; f_ja = fIA->matrix[Gj][j][a]; } if(DAB->params->rowtot[Gik] && DAB->params->coltot[Gik]) { D_ikbc = DAB->matrix[Gik][ik][bc]; t_ikbc = T2AB->matrix[Gik][ik][bc]; } V[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc; } /* +t_JB * D_IkAc + f_JB * t_IkAc */ if(Gj == Gb && Gik == Gac) { t_jb = D_ikac = f_jb = t_ikac = 0.0; if(T1A->params->rowtot[Gj] && T1A->params->coltot[Gj]) { t_jb = T1A->matrix[Gj][j][b]; f_jb = fIA->matrix[Gj][j][b]; } if(DAB->params->rowtot[Gik] && DAB->params->coltot[Gik]) { D_ikac = DAB->matrix[Gik][ik][ac]; t_ikac = T2AB->matrix[Gik][ik][ac]; } V[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac; } /* -t_kc * D_JIAB - f_kc * t_JIAB */ if(Gk == Gc && Gji == Gab) { t_kc = D_jiab = f_kc = t_jiab = 0.0; if(T1B->params->rowtot[Gk] && T1B->params->coltot[Gk]) { t_kc = T1B->matrix[Gk][k][c]; f_kc = fia->matrix[Gk][k][c]; } if(DAA->params->rowtot[Gji] && DAA->params->coltot[Gji]) { D_jiab = DAA->matrix[Gji][ji][ab]; t_jiab = T2AA->matrix[Gji][ji][ab]; } V[Gab][ab][c] -= t_kc * D_jiab + f_kc * t_jiab; } } /* c */ } /* ab */ } /* Gab */ } /*** disconnected triples complete ***/ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric! */ for(ab=0; ab < FAA->params->coltot[Gab]; ab++) { A = FAA->params->colorb[Gab][ab][0]; B = FAA->params->colorb[Gab][ab][1]; Ga = FAA->params->rsym[A]; Gb = FAA->params->ssym[B]; a = A - avir_off[Ga]; b = B - avir_off[Gb]; for(c=0; c < bvirtpi[Gc]; c++) { C = bvir_off[Gc] + c; denom = dijk; if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a]; if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b]; if(fab->params->rowtot[Gc]) denom -= fab->matrix[Gc][c][c]; W[Gab][ab][c] /= (denom + omega); if(disc) V[Gab][ab][c] /= (denom + omega); } /* c */ } /* ab */ } /* Gab */ for(Gab=0; Gab < nirreps; Gab++) { Gc = Gab ^ Gijk ^ GX3; dpd_free_block(W2[Gab], FBA->params->coltot[Gab], avirtpi[Gc]); } free(W2); dpd_file2_mat_close(fIJ); dpd_file2_mat_close(fij); dpd_file2_mat_close(fAB); dpd_file2_mat_close(fab); if(disc) { dpd_file2_mat_close(fIA); dpd_file2_mat_close(fia); dpd_file2_mat_close(T1A); dpd_file2_mat_close(T1B); } for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_close(T2AA, h); dpd_buf4_mat_irrep_close(T2AB, h); dpd_buf4_mat_irrep_close(T2BA, h); dpd_buf4_mat_irrep_close(EAA, h); dpd_buf4_mat_irrep_close(EAB, h); dpd_buf4_mat_irrep_close(EBA, h); if(disc) { dpd_buf4_mat_irrep_close(DAA, h); dpd_buf4_mat_irrep_close(DAB, h); } } } }} ����������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cctriples/triples.cc�������������������������������������������������������������������0000644�0001015�0000765�00000016224�11112564564�015533� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CCTRIPLES \brief Enter brief description of file here */ #include <cstdio> #include <cstdlib> #include <cstring> #include <libipv1/ip_lib.h> #include <libciomr/libciomr.h> #include <libpsio/psio.h> #include <libchkpt/chkpt.h> #include <libdpd/dpd.h> #include <libqt/qt.h> #include <psifiles.h> #include "Params.h" #include "MOInfo.h" #include "globals.h" namespace psi { namespace cctriples { void init_io(int argc, char *argv[]); void title(void); void get_moinfo(void); void exit_io(void); void cleanup(void); double ET_RHF(void); double ET_AAA(void); double ET_AAB(void); double ET_ABB(void); double ET_BBB(void); double ET_UHF_AAA(void); double ET_UHF_BBB(void); double ET_UHF_AAB(void); double ET_UHF_ABB(void); void count_ijk(void); void setup(void); int **cacheprep_rhf(int level, int *cachefiles); int **cacheprep_uhf(int level, int *cachefiles); void cachedone_uhf(int **cachelist); void cachedone_rhf(int **cachelist); void T3_grad_RHF(void); void T3_grad_UHF_AAA(void); void T3_grad_UHF_BBB(void); void T3_grad_UHF_AAB(void); void T3_grad_UHF_BBA(void); }} // namespace psi::cctriples using namespace psi::cctriples; int main(int argc, char *argv[]) { double ETAAA, ETAAB, ETABB, ETBBB, ET; long int memory; int **cachelist, *cachefiles; dpdfile2 T1; double **geom, *zvals, value; FILE *efile; int i, errcod, natom; char *keyw = NULL; init_io(argc, argv); title(); timer_init(); timer_on("CCtriples"); get_moinfo(); fndcor(&(memory),infile,outfile); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 0) { /*** RHF ***/ cachelist = cacheprep_rhf(2, cachefiles); dpd_init(0, moinfo.nirreps, memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } else if(params.ref == 2) { /*** UHF ***/ cachelist = cacheprep_uhf(2, cachefiles); dpd_init(0, moinfo.nirreps, memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } count_ijk(); fflush(outfile); if(params.ref == 0) { /** RHF **/ ET = ET_RHF(); fprintf(outfile, "\t(T) energy = %20.15f\n", ET); fprintf(outfile, " * CCSD(T) total energy = %20.15f\n", ET + moinfo.ecc + moinfo.eref); /* Compute triples contributions to the gradient */ if(params.dertype == 1) T3_grad_RHF(); } else if(params.ref == 1) { /** ROHF --- don't use this right now! **/ fprintf(outfile, "\nROHF-CCSD(T) is not yet available...\n"); exit(PSI_RETURN_FAILURE); ETAAA = ET_AAA(); fprintf(outfile, "\tAAA (T) energy = %20.15f\n", ETAAA); ETAAB = ET_AAB(); fprintf(outfile, "\tAAB (T) energy = %20.15f\n", ETAAB); ETABB = ET_ABB(); fprintf(outfile, "\tABB (T) energy = %20.15f\n", ETABB); ETBBB = ET_BBB(); fprintf(outfile, "\tBBB (T) energy = %20.15f\n", ETBBB); ET = ETAAA + ETAAB + ETABB + ETBBB; fprintf(outfile, "\t(T) energy = %20.15f\n", ET); fprintf(outfile, " * CCSD(T) total energy = %20.15f\n", ET + moinfo.ecc + moinfo.eref); } else if(params.ref == 2) { /** UHF **/ ETAAA = ET_UHF_AAA(); fprintf(outfile, "\tAAA (T) energy = %20.15f\n", ETAAA); fflush(outfile); ETBBB = ET_UHF_BBB(); fprintf(outfile, "\tBBB (T) energy = %20.15f\n", ETBBB); fflush(outfile); ETAAB = ET_UHF_AAB(); fprintf(outfile, "\tAAB (T) energy = %20.15f\n", ETAAB); fflush(outfile); ETABB = ET_UHF_ABB(); fprintf(outfile, "\tABB (T) energy = %20.15f\n", ETABB); fflush(outfile); ET = ETAAA + ETAAB + ETABB + ETBBB; fprintf(outfile, "\t(T) energy = %20.15f\n", ET); fprintf(outfile, " * CCSD(T) total energy = %20.15f\n", ET + moinfo.ecc + moinfo.eref); if(params.dertype==1) { fprintf(outfile, "\n\tComputing (T) contributions to CC density...\n"); fflush(outfile); T3_grad_UHF_AAA(); fprintf(outfile, "\tAAA contributions complete.\n"); fflush(outfile); T3_grad_UHF_BBB(); fprintf(outfile, "\tBBB contributions complete.\n"); fflush(outfile); T3_grad_UHF_AAB(); fprintf(outfile, "\tAAB contributions complete.\n"); fflush(outfile); T3_grad_UHF_BBA(); fprintf(outfile, "\tBBA contributions complete.\n"); fflush(outfile); } } fprintf(outfile, "\n"); /* Write total energy and (T) contribution to the checkpoint file */ chkpt_init(PSIO_OPEN_OLD); chkpt_wt_etot(ET+moinfo.ecc+moinfo.eref); chkpt_wt_e_t(ET); chkpt_close(); /* Write pertinent data to energy.dat */ if(!strcmp(params.wfn,"CCSD_T") || !strcmp(params.wfn,"BCCD_T")) { chkpt_init(PSIO_OPEN_OLD); natom = chkpt_rd_natom(); geom = chkpt_rd_geom(); zvals = chkpt_rd_zvals(); chkpt_close(); ffile(&efile,"energy.dat",1); fprintf(efile, "*\n"); for(i=0; i < natom; i++) fprintf(efile, " %4d %5.2f %13.10f %13.10f %13.10f\n", i+1, zvals[i], geom[i][0], geom[i][1], geom[i][2]); free_block(geom); free(zvals); fprintf(efile, "SCF(30) %22.12f\n", moinfo.escf); fprintf(efile, "REF(100) %22.12f\n", moinfo.eref); if(!strcmp(params.wfn,"CCSD_T")) { fprintf(efile, "CCSD %22.12f\n", (moinfo.ecc+moinfo.eref)); fprintf(efile, "CCSD(T) %22.12f\n", (ET+ moinfo.ecc+moinfo.eref)); } else if(!strcmp(params.wfn,"BCCD_T")) { fprintf(efile, "BCCD %22.12f\n", (moinfo.ecc+moinfo.eref)); fprintf(efile, "BCCD(T) %22.12f\n", (ET+ moinfo.ecc+moinfo.eref)); } fclose(efile); } /* Dump triples energy to CC_INFO */ psio_write_entry(CC_INFO, "(T) Energy", (char *) &(ET), sizeof(double)); dpd_close(0); if(params.ref == 2) cachedone_uhf(cachelist); else cachedone_rhf(cachelist); free(cachefiles); cleanup(); timer_off("CCtriples"); timer_done(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCTRIPLES"; return(prgid); }} namespace psi { namespace cctriples { void init_io(int argc, char *argv[]) { int i; char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); ip_cwk_add(":INPUT"); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void title(void) { fprintf(outfile, "\t\t\t**************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CCTRIPLES *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t**************************\n"); } void exit_io(void) { int i; for(i=CC_MIN; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } }} // namespace psi::cctriples ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/���������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111657�012663� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/������������������������������������������������������������������������������0000755�0001015�0000765�00000000000�11146111655�013146� 5����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/cc.h��������������������������������������������������������������������������0000644�0001015�0000765�00000000332�10754663017�013712� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _psi_src_bin_cints_CC_cc_h #define _psi_src_bin_cints_CC_cc_h /*! \file \ingroup CINTS \brief Enter brief description of file here */ namespace psi { namespace CINTS { void direct_cc(); };}; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/cc_bt2.cc���������������������������������������������������������������������0000644�0001015�0000765�00000006074�10757640026�014626� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include<memory.h> #include<cstdlib> #include<pthread.h> #include<cstdio> #include<cstring> #include<cmath> #include<libciomr/libciomr.h> #include<libint/libint.h> #include<libqt/qt.h> #include"defines.h" #define EXTERN #include"global.h" #include <stdexcept> #include"Tools/int_fjt.h" #define USE_SYMM_CODE 0 namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ extern void *cc_bt2_thread(void *); extern void *cc_bt2_thread_symm(void *); /*!------------------------------------------------------- Algorithm ***Split into threads. Each thread does the following: Loop over all symmetry-unique shells UP, UQ<=UP ***if this (UP UQ| is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UP UQ|UR US) Loop over all resulting shell quartets (PQ|RS) Loop over p in P, q in Q, r in R, s in S, ij bt2(pq,ij) += (pq|rs) * t2(rs,ij) End p, q, r, s, ij loop End P,Q,R,S loop End UP, UQ loop ***Merge all threads -------------------------------------------------------*/ void cc_bt2() { pthread_attr_t thread_attr; pthread_t *thread_id; long int libint_memory; int max_bf_per_shell; int max_num_prim_comb; int i; /*--------------- Initialization ---------------*/ init_fjt(BasisSet.max_am*4+1); init_libint_base(); timer_init(); /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libint_memory = libint_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libint_memory*UserOptions.num_threads; /*--- Assuming 1 pass for now ---*/ /*-------------------------- Start compute threads now --------------------------*/ thread_id = (pthread_t *) malloc(UserOptions.num_threads*sizeof(pthread_t)); pthread_attr_init(&thread_attr); pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM); #if USE_SYMM_CODE for(long int i=0;i<UserOptions.num_threads-1;i++) pthread_create(&(thread_id[i]),&thread_attr, cc_bt2_thread_symm,(void *)i); cc_bt2_thread_symm( (void *) (UserOptions.num_threads - 1) ); #else for(long int i=0;i<UserOptions.num_threads-1;i++) pthread_create(&(thread_id[i]),&thread_attr, cc_bt2_thread,(void *)i); cc_bt2_thread( (void *) (UserOptions.num_threads - 1) ); #endif for(i=0;i<UserOptions.num_threads-1;i++) pthread_join(thread_id[i], NULL); free(thread_id); /*--------- Clean-up ---------*/ free_fjt(); timer_done(); return; } }; }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/cc_bt2_thread.cc��������������������������������������������������������������0000644�0001015�0000765�00000034557�10757640026�016164� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include<pthread.h> #include<cstdio> #include<memory.h> #include<cstdlib> #include<cstring> #include<cmath> #include<libqt/qt.h> #include<libint/libint.h> #include"defines.h" #define EXTERN #include"global.h" #include <stdexcept> #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"Tools/int_fjt.h" #endif namespace psi { namespace CINTS { void *cc_bt2_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; const double m_sqrt1_2 = 1/sqrt(2.0); /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libint_t Libint; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif int ij, kl, ik, jl, ijkl; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int i, j, k, l, m, p, q, r, s; int ni, nj, nk, nl; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl ; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl; int max_pj, max_pl; int *sj_arr, *sk_arr, *sl_arr; int si_fao, sj_fao, sk_fao, sl_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int quartet_index; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int switch_ij, switch_kl, switch_ijkl; int size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_prim_comb; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_length; int imin, imax, jmin; int max_bf_per_shell; int mo_i, mo_j, mo_a, mo_b, mo_ij; int ia; int rs_offset, rsi_offset, rsp_offset; double AB2, CD2; double value; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *rspq_ptr; double temp; double *mo_vec; double *rsiq_buf; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row, *i_row; double *ia_block_ptr; double *rsia_buf; /* buffer for (rs|ia) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *jsi_row; double *jbi_row; double iajb, ibja, pfac, k0ijab, k1ijab, eijab, e0, e1; double temp1,temp2,*iq_row,*ip_row; int rs,qrs; double *scratch_buf; /* scratch used in permuting bra and ket */ int nao, nocc; int ji, ki, il, li, jk, kj, lj, lk; int ii, jj, kk, ll, IJ, KL; nao = BasisSet.num_ao; nocc = CCInfo.nocc; /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); init_libint(&Libint, BasisSet.max_am-1, max_num_prim_comb); #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif /*-------------------------------------------- generate all symmetry unique shell quartets --------------------------------------------*/ for (usii=0; usii<Symmetry.num_unique_shells; usii++) for (usjj=0; usjj<=usii; usjj++) for (uskk=0; uskk<=usii; uskk++) for (usll=0; usll<= ((usii == uskk) ? usjj : uskk); usll++, quartet_index++){ usi = usii; usj = usjj; usk = uskk; usl = usll; /*--- Decide if this thread will do this ---*/ if ( quartet_index%UserOptions.num_threads != thread_num ) continue; si = Symmetry.us2s[usii]; sjj = Symmetry.us2s[usjj]; skk = Symmetry.us2s[uskk]; sll = Symmetry.us2s[usll]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; ni = (BasisSet.puream ? 2*BasisSet.shells[si].am - 1 : ioff[BasisSet.shells[si].am]); nj = (BasisSet.puream ? 2*BasisSet.shells[sjj].am - 1 : ioff[BasisSet.shells[sjj].am]); nk = (BasisSet.puream ? 2*BasisSet.shells[skk].am - 1 : ioff[BasisSet.shells[skk].am]); nl = (BasisSet.puream ? 2*BasisSet.shells[sll].am - 1 : ioff[BasisSet.shells[sll].am]); memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ij=0;dcr_ij<Symmetry.dcr_dim[stab_i][stab_j];dcr_ij++){ R = R_list[dcr_ij]; sj = BasisSet.shells[sjj].trans_vec[R]-1; for(dcr_ijkl=0;dcr_ijkl<Symmetry.dcr_dim[stab_ij][stab_kl];dcr_ijkl++){ T = T_list[dcr_ijkl]; sk = BasisSet.shells[skk].trans_vec[T]-1; slll = BasisSet.shells[sll].trans_vec[T]-1; for(dcr_kl=0;dcr_kl<Symmetry.dcr_dim[stab_k][stab_l];dcr_kl++) { S = S_list[dcr_kl]; sl = BasisSet.shells[slll].trans_vec[S]-1; sj_arr[count] = sj; sk_arr[count] = sk; sl_arr[count] = sl; count++; } } } /* petite list is ready to be used */ num_unique_quartets = count; } else { /*--- C1 symmetry case ---*/ num_unique_quartets = 1; sj_arr[0] = usj; sk_arr[0] = usk; sl_arr[0] = usl; } /*---------------------------------- Compute the nonredundant quartets ----------------------------------*/ for(plquartet=0;plquartet<num_unique_quartets;plquartet++) { si = Symmetry.us2s[usii]; sj = sj_arr[plquartet]; sk = sk_arr[plquartet]; sl = sl_arr[plquartet]; total_am = BasisSet.shells[si].am + BasisSet.shells[sj].am + BasisSet.shells[sk].am + BasisSet.shells[sl].am; /* parity selection */ if (total_am%2 && BasisSet.shells[si].center==BasisSet.shells[sj].center && BasisSet.shells[sj].center==BasisSet.shells[sk].center && BasisSet.shells[sk].center==BasisSet.shells[sl].center) continue; switch_ij = 0; switch_kl = 0; switch_ijkl = 0; /* place in "ascending" angular mom- my simple way of optimizing PHG recursion (VRR) */ /* these first two are good for the HRR */ if(BasisSet.shells[si].am < BasisSet.shells[sj].am){ dum = si; si = sj; sj = dum; switch_ij = 1; } if(BasisSet.shells[sk].am < BasisSet.shells[sl].am){ dum = sk; sk = sl; sl = dum; switch_kl = 1; } /* this should be /good/ for the VRR */ if(BasisSet.shells[si].am + BasisSet.shells[sj].am > BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libint.AB[0] = sp_ij->AB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+Libint.AB[1]*Libint.AB[1]+Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+Libint.CD[1]*Libint.CD[1]+Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*--- Compute the integrals ---*/ if (am) { #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i<size;i++) raw_data[i] = (double) target_ints[i]; #else raw_data = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); #endif /* No need to transforms integrals to sph. harm. basis */ data = norm_quartet(raw_data, NULL, orig_am, 0); } else { temp = 0.0; for(p=0;p<num_prim_comb;p++) temp += (double) Libint.PrimQuartet[p].F[0]; #ifdef NONDOUBLE_INTS raw_data[0] = temp; data = raw_data; #else Libint.int_stack[0] = temp; data = Libint.int_stack; #endif } ijkl = 0; for(i=0;i<ni;i++) { ii = i + si_fao; for(j=0;j<nj;j++) { jj = j + sj_fao; IJ = INDEX(ii,jj); for(k=0;k<nk;k++) { kk = k + sk_fao; for(l=0;l<nl;l++,ijkl++) { ll = l + sl_fao; KL = INDEX(kk,ll); if(si == sj && ii < jj) continue; if(sk == sl && kk < ll) continue; if(INDEX(si,sj) == INDEX(sk,sl) && IJ < KL) continue; value = data[ijkl]; /* if(fabs(value) > 1e-8) fprintf(outfile, "%d %d %d %d %20.14f\n", ii+1, jj+1, kk+1, ll+1, value); */ ij = ii*nao + jj; ji = jj*nao + ii; ik = ii*nao + kk; ki = kk*nao + ii; il = ii*nao + ll; li = ll*nao + ii; jk = jj*nao + kk; kj = kk*nao + jj; jl = jj*nao + ll; lj = ll*nao + jj; kl = kk*nao + ll; lk = ll*nao + kk; /* (ij|kl) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jl], 1, CCInfo.T2_t[ik],1); if(ii!=jj && kk!=ll && IJ!=KL) { /* (ij|lk) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); /* (ji|kl) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); /* (ji|lk) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ik], 1, CCInfo.T2_t[jl],1); /* (kl|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); /* (kl|ji) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[li], 1, CCInfo.T2_t[kj],1); /* (lk|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[kj], 1, CCInfo.T2_t[li],1); /* (lk|ji) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ki], 1, CCInfo.T2_t[lj],1); } else if(ii!=jj && kk!=ll && IJ==KL) { /* (ij|lk) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); /* (ji|kl) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); /* (ji|lk) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ik], 1, CCInfo.T2_t[jl],1); } else if(ii!=jj && kk==ll) { /* (ji|kl) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); /* (kl|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); /* (kl|ji) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[li], 1, CCInfo.T2_t[kj],1); } else if(ii==jj && kk!=ll) { /* (ij|lk) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); /* (kl|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); /* (lk|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[kj], 1, CCInfo.T2_t[li],1); } else if(ii==jj && kk==ll && IJ!=KL) { /* (kl|ij) */ C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); } } } } } } /* end of RSPQ loop */ } /* end of "unique" RSQP loop */ /*--------- Clean-up ---------*/ #ifdef NONDOUBLE_INTS free(raw_data); #endif free_libint(&Libint); free(sj_arr); free(sk_arr); free(sl_arr); #ifndef USE_TAYLOR_FM free_fjt_table(&fjt_table); #endif return NULL; } }; }; �������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/cc_bt2_thread_symm.cc���������������������������������������������������������0000644�0001015�0000765�00000027534�10757640026�017226� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CINTS \brief Enter brief description of file here */ #if HAVE_CMATH # include <cmath> #else # include <cmath> #endif #include <cstring> #include<cstdio> #include<memory.h> #include<cstdlib> #include<pthread.h> #include<libqt/qt.h> #include<libint/libint.h> #include"defines.h" #define EXTERN #include"global.h" #include <stdexcept> #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif namespace psi { namespace CINTS { void *cc_bt2_thread_symm(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; const double m_sqrt1_2 = 1/sqrt(2.0); int lambda_T = 1; int nao = BasisSet.num_ao; int nocc = CCInfo.nocc; /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM double_array_t fjt_table; init_fjt_table(&fjt_table); #endif /*------------------------- Allocate data structures -------------------------*/ int max_bf_per_shell = ioff[BasisSet.max_am]; int max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); int max_class_size; if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; int max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; int* sj_arr = new int[max_num_unique_quartets]; int* sk_arr = new int[max_num_unique_quartets]; int* sl_arr = new int[max_num_unique_quartets]; int max_num_prim_comb = BasisSet.max_num_prims* BasisSet.max_num_prims* BasisSet.max_num_prims* BasisSet.max_num_prims; Libint_t Libint; init_libint(&Libint, BasisSet.max_am-1, max_num_prim_comb); double* raw_data; #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif /*-------------------------------------------- generate all symmetry unique shell quartets --------------------------------------------*/ for (int usii=0; usii<Symmetry.num_unique_shells; usii++) for (int uskk=0; uskk<Symmetry.num_unique_shells; uskk++) { int ik_index = usii*Symmetry.num_unique_shells + uskk; /*--- Decide if this thread will do this ---*/ if ( ik_index%UserOptions.num_threads != thread_num ) continue; for (int usjj=0; usjj<=usii; usjj++) for (int usll=0; usll<=uskk; usll++){ int usi = usii; int usj = usjj; int usk = uskk; int usl = usll; int si = Symmetry.us2s[usi]; int sjj = Symmetry.us2s[usj]; int skk = Symmetry.us2s[usk]; int sll = Symmetry.us2s[usl]; int num_unique_quartets = 0; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ int stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; int stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; int stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; int stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; int stab_ij = Symmetry.GnG[stab_i][stab_j]; int stab_kl = Symmetry.GnG[stab_k][stab_l]; int* R_list = Symmetry.dcr[stab_i][stab_j]; int* S_list = Symmetry.dcr[stab_k][stab_l]; int* T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); int count = 0; for(int dcr_ij=0;dcr_ij<Symmetry.dcr_dim[stab_i][stab_j];dcr_ij++){ int R = R_list[dcr_ij]; int sj = BasisSet.shells[sjj].trans_vec[R]-1; for(int dcr_ijkl=0;dcr_ijkl<Symmetry.dcr_dim[stab_ij][stab_kl];dcr_ijkl++){ int T = T_list[dcr_ijkl]; int sk = BasisSet.shells[skk].trans_vec[T]-1; int slll = BasisSet.shells[sll].trans_vec[T]-1; for(int dcr_kl=0;dcr_kl<Symmetry.dcr_dim[stab_k][stab_l];dcr_kl++) { int S = S_list[dcr_kl]; int sl = BasisSet.shells[slll].trans_vec[S]-1; sj_arr[count] = sj; sk_arr[count] = sk; sl_arr[count] = sl; count++; } } } /* petite list is ready to be used */ num_unique_quartets = count; } else { /*--- C1 symmetry case ---*/ num_unique_quartets = 1; lambda_T = 1; sj_arr[0] = usj; sk_arr[0] = usk; sl_arr[0] = usl; } /*---------------------------------- Compute the nonredundant quartets ----------------------------------*/ for(int plquartet=0;plquartet<num_unique_quartets;plquartet++) { int si = Symmetry.us2s[usii]; int sj = sj_arr[plquartet]; int sk = sk_arr[plquartet]; int sl = sl_arr[plquartet]; int total_am = BasisSet.shells[si].am + BasisSet.shells[sj].am + BasisSet.shells[sk].am + BasisSet.shells[sl].am; /* parity selection */ if (total_am%2 && BasisSet.shells[si].center==BasisSet.shells[sj].center && BasisSet.shells[sj].center==BasisSet.shells[sk].center && BasisSet.shells[sk].center==BasisSet.shells[sl].center) continue; int switch_ij = 0; int switch_kl = 0; int switch_ijkl = 0; /* place in "ascending" angular mom- my simple way of optimizing PHG recursion (VRR) */ /* these first two are good for the HRR */ if(BasisSet.shells[si].am < BasisSet.shells[sj].am){ int dum = si; si = sj; sj = dum; switch_ij = 1; } if(BasisSet.shells[sk].am < BasisSet.shells[sl].am){ int dum = sk; sk = sl; sl = dum; switch_kl = 1; } /* this should be /good/ for the VRR */ if(BasisSet.shells[si].am + BasisSet.shells[sj].am > BasisSet.shells[sk].am + BasisSet.shells[sl].am){ int dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } int np_i = BasisSet.shells[si].n_prims; int np_j = BasisSet.shells[sj].n_prims; int np_k = BasisSet.shells[sk].n_prims; int np_l = BasisSet.shells[sl].n_prims; int ni = ioff[BasisSet.shells[si].am]; int nj = ioff[BasisSet.shells[sj].am]; int nk = ioff[BasisSet.shells[sk].am]; int nl = ioff[BasisSet.shells[sl].am]; int si_fao = BasisSet.shells[si].fao-1; int sj_fao = BasisSet.shells[sj].fao-1; int sk_fao = BasisSet.shells[sk].fao-1; int sl_fao = BasisSet.shells[sl].fao-1; int orig_am[4]; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; int am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; struct shell_pair* sp_ij = &(BasisSet.shell_pairs[si][sj]); struct shell_pair* sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libint.AB[0] = sp_ij->AB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; double AB2 = Libint.AB[0]*Libint.AB[0]+Libint.AB[1]*Libint.AB[1]+Libint.AB[2]*Libint.AB[2]; double CD2 = Libint.CD[0]*Libint.CD[0]+Libint.CD[1]*Libint.CD[1]+Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ int num_prim_comb = 0; for (int pi = 0; pi < np_i; pi++) { int max_pj = (si == sj) ? pi+1 : np_j; for (int pj = 0; pj < max_pj; pj++) { int m = (1 + (si == sj && pi != pj)); for (int pk = 0; pk < np_k; pk++) { int max_pl = (sk == sl) ? pk+1 : np_l; for (int pl = 0; pl < max_pl; pl++){ int n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*--- Compute the integrals ---*/ double* data; if (am) { #ifdef NONDOUBLE_INTS int size = ni * nj * nk * nl; REALTYPE target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i<size;i++) raw_data[i] = (double) target_ints[i]; #else raw_data = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); #endif /* No need to transforms integrals to sph. harm. basis */ data = norm_quartet(raw_data, NULL, orig_am, 0); } else { double temp = 0.0; for(int p=0;p<num_prim_comb;p++) temp += (double) Libint.PrimQuartet[p].F[0]; #ifdef NONDOUBLE_INTS raw_data[0] = temp; data = raw_data; #else Libint.int_stack[0] = temp; data = Libint.int_stack; #endif } int ijkl = 0; for(int i=0;i<ni;i++) { int ii = i + si_fao; for(int j=0;j<nj;j++) { int jj = j + sj_fao; int IJ = INDEX(ii,jj); for(int k=0;k<nk;k++) { int kk = k + sk_fao; for(int l=0;l<nl;l++,ijkl++) { int ll = l + sl_fao; int KL = INDEX(kk,ll); double value = data[ijkl]; /* if(fabs(value) > 1e-8) fprintf(outfile, "%d %d %d %d %20.14f\n", ii+1, jj+1, kk+1, ll+1, value); */ int ij = ii*nao + jj; int ji = jj*nao + ii; int ik = ii*nao + kk; int ki = kk*nao + ii; int il = ii*nao + ll; int li = ll*nao + ii; int jk = jj*nao + kk; int kj = kk*nao + jj; int jl = jj*nao + ll; int lj = ll*nao + jj; int kl = kk*nao + ll; int lk = ll*nao + kk; // (ij|kl) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jl], 1, CCInfo.T2_t[ik],1); /* if(ii!=jj && kk!=ll && IJ!=KL) { // (ij|lk) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); // (ji|kl) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); // (ji|lk) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ik], 1, CCInfo.T2_t[jl],1); // (kl|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); // (kl|ji) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[li], 1, CCInfo.T2_t[kj],1); // (lk|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[kj], 1, CCInfo.T2_t[li],1); // (lk|ji) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ki], 1, CCInfo.T2_t[lj],1); } else if(ii!=jj && kk!=ll && IJ==KL) { // (ij|lk) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); // (ji|kl) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); // (ji|lk) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[ik], 1, CCInfo.T2_t[jl],1); } else if(ii!=jj && kk==ll) { // (ji|kl) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[il], 1, CCInfo.T2_t[jk],1); // (kl|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); // (kl|ji) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[li], 1, CCInfo.T2_t[kj],1); } else if(ii==jj && kk!=ll) { // (ij|lk) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[jk], 1, CCInfo.T2_t[il],1); // (kl|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); // (lk|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[kj], 1, CCInfo.T2_t[li],1); } else if(ii==jj && kk==ll && IJ!=KL) { // (kl|ij) C_DAXPY(nocc*nocc, value, CCInfo.T2_s[lj], 1, CCInfo.T2_t[ki],1); } */ } } } } } /* end of RSPQ loop */ } /* end of "unique" RSQP loop */ } /*--------- Clean-up ---------*/ #ifdef NONDOUBLE_INTS free(raw_data); #endif free_libint(&Libint); free(sj_arr); free(sk_arr); free(sl_arr); #ifndef USE_TAYLOR_FM free_fjt_table(&fjt_table); #endif return NULL; } };}; // namespace ��������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/CC/direct_cc.cc������������������������������������������������������������������0000644�0001015�0000765�00000000665�10757640026�015411� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include<cstdio> #include<libint/libint.h> #include"defines.h" #define EXTERN #include"global.h" #include <stdexcept> #include"ccinfo.h" namespace psi { namespace CINTS { extern void cc_bt2(); void direct_cc() { init_ccinfo(); if (UserOptions.make_cc_bt2) cc_bt2(); cleanup_ccinfo(); return; } };}; ���������������������������������������������������������������������������psi3/src/bin/cints/check_max_am.cc������������������������������������������������������������������0000644�0001015�0000765�00000003602�10754663017�015600� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include<libint/libint.h> #ifdef INCLUDE_Default_Deriv1 #include<libderiv/libderiv.h> #endif #ifdef INCLUDE_Default_Deriv2 #include<libderiv/libderiv.h> #endif #ifdef INCLUDE_MP2R12 #include<libr12/libr12.h> #endif #include"defines.h" #define EXTERN #include"global.h" #include"small_fns.h" #include <stdexcept> using namespace std; namespace psi { namespace CINTS { /*!--------------------------------------------------- This function checks if requested angular momentum is too high for the linked integrals libraries ---------------------------------------------------*/ void check_max_am() { if (BasisSet.max_am > LIBINT_MAX_AM || CINTS_MAX_AM < LIBINT_MAX_AM) { throw domain_error("Angular momentum limit exceeded, link CINTS against a LIBINT library with higher NEW_AM"); } #ifdef INCLUDE_Default_Deriv1 if (UserOptions.make_deriv1 && (BasisSet.max_am > LIBDERIV_MAX_AM1 || CINTS_MAX_AM < LIBDERIV_MAX_AM1 + 1) ) { throw domain_error("Angular momentum limit for first derivative computations exceeded, link CINTS against a LIBDERIV library with higher NEW_AM"); } #endif #ifdef INCLUDE_Default_Deriv2 if (UserOptions.make_deriv2 && (BasisSet.max_am > LIBDERIV_MAX_AM12 || CINTS_MAX_AM < LIBDERIV_MAX_AM12 + 2) ) { throw domain_error("Angular momentum limit for second derivative integrals exceeded, link CINTS against a LIBDERIV library with higher NEW_AM"); } #endif #ifdef INCLUDE_MP2R12 if ((UserOptions.make_r12ints || UserOptions.make_mp2r12) && (BasisSet.max_am > LIBR12_MAX_AM || CINTS_MAX_AM < LIBR12_MAX_AM + 1)) { throw domain_error("Angular momentum limit for linear R12 computations exceeded, link CINTS against a LIBR12 library with higher NEW_AM"); } #endif return; } };}; ������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/cints.1��������������������������������������������������������������������������0000644�0001015�0000765�00000031362�07570254042�014074� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.ds OS UNIX .\" @(#)tmac.an 1.37 90/02/04 SMI; .ds ]W Psi Release 3.0 ' # month name . \".if "\nd"0" .nr m \n(mo-1 . \".if "\nm"0" .ds ]m January . \".if "\nm"1" .ds ]m February . \".if "\nm"2" .ds ]m March . \".if "\nm"3" .ds ]m April . \".if "\nm"4" .ds ]m May . \".if "\nm"5" .ds ]m June . \".if "\nm"6" .ds ]m July . \".if "\nm"7" .ds ]m August . \".if "\nm"8" .ds ]m September . \".if "\nm"9" .ds ]m October . \".if "\nm"10" .ds ]m November . \".if "\nm"11" .ds ]m December ' # set the date . \".if n \{.nr m \nm+1 . \". ie \nd .ds ]W Modified \nm/\nd/\ny . \". el .ds ]W Printed \n(mo/\n(dy/\n(yr\} . \".if t \{.ie \nd .ds ]W \*(]m \nd, 19\ny . \". el .ds ]W \*(]m \n(dy, 19\n(yr\} ' # end of commented out chunk .if t .tr *\(** .ie n \{\ . ds lq \&"\" . ds rq \&"\" .\} .el \{\ . ds rq '' . ds lq `` .\} .de UC . \".if t \{\ . \". ie "\\$1"" .ds ]W 3rd Berkeley Distribution . \". ie "\\$1"4" .ds ]W \\$1th Berkeley Distribution . \". el .ds ]w \\$2 \\$1 BSD . \".\} .. ' # reset the basic page layout .de }E .}f .in \\n()Ru+\\n(INu .ll \\n(LLu .. ' # default tabs .de DT 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .. ' # set type font and size .de }f .ps 10 .ft 1 .. ' # handle the head of the page .de }H .ev 1 .}C 'sp .5i .ft 1 .ps 10 .tl \\*(]H\\*(]D\\*(]H 'sp .5i .ev .ns .. ' # handle the foot of the page .de }F .ev 1 .ft 1 .ps 10 'sp .5i .if !\\nD .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if o .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if e .tl \\*(PN%\\*(]L\\*(]W .if !\\nX 'bp .if \\nX .if \\n%>=\\nX \{\ .ds PN \\n% .pn 1 .af % a .nr X 0 'bp 1\} .if \\nX .if \\n%<\\nX 'bp .ev .. ' # the cut mark -- we don't need this -- Henry . \".if n .ig . \".de }C . \".po .1i . \".tl '-' . \".po . \".. ' # the final cut mark -- we don't need this -- Henry . \".de }M . \".}N . \".wh -1p }C . \".ll \\n(LLu . \".. ' # no runout unless there was a .TH .de }K .}N .pl 1 .ll \\n(LLu .. .em }K ' # set title and heading .de TH .PD .DT .if n .nr IN .5i .if t .nr IN .5i .ll 6.5i .nr LL \\n(.l .ds ]H \\$1\|(\|\\$2\|) .ds ]D MISC. REFERENCE MANUAL PAGES .if '\\$2'1' .ds ]D PSI COMMANDS FOR \\*(pT .if '\\$2'2' .ds ]D PSI COMMON INPUT FOR \\*(pT .if '\\$2'3' .ds ]D PSI PROCEDURES FOR \\*(pT .if '\\$2'4' .ds ]D PSI EXAMPLES FOR \\*(pT .if '\\$2'5' .ds ]D PSI LIBRARY .if !'\\$4'' .ds ]W \\$4 .if !'\\$5'' .ds ]D \\$5 .wh 0 }H .if t .wh -1i }F .if n .wh -1.167i }F .em }M .if !\\n(nl .if !\\nP .nr P 1 .if !\\n(nl .if \\nP .pn \\nP .if \\nX .if \\nP>=\\nX \{\ .ds PN \\nP .pn 1 .af % a .nr X 0 \} .if !\\n(nl .if \\nP .nr P 0 .if \\nC .if \\n(nl .bp .if !\\nC .if \\n(nl .bp 1 .ds ]L Last change: \\$3 .}E .DT .nr )I .5i .nr )R 0 . \".if n .na .mk ka .if !'\\n(ka'-1' .bp .. ' # IX - Make an Index Entry .de IX .if \\nF .tm .IE\tENTRY\t\\$1\t\\$2\t\\$3\t\\$4\t\\$5\t\\$6\t\\*(PN\\n% .. ' # TX - Resolve a Title Reference .de TX .ds Tx "UNKNOWN TITLE ABBREVIATION: \\$1 .if '\\$1'GSBG' .ds Tx "Getting Started .if '\\$1'SUBG' .ds Tx "Customizing SunOS .if '\\$1'SHBG' .ds Tx "Basic Troubleshooting .if '\\$1'SVBG' .ds Tx "SunView User's Guide .if '\\$1'MMBG' .ds Tx "Mail and Messages .if '\\$1'DMBG' .ds Tx "Doing More with SunOS .if '\\$1'UNBG' .ds Tx "Using the Network .if '\\$1'GDBG' .ds Tx "Games, Demos & Other Pursuits .if '\\$1'CHANGE' .ds Tx "SunOS 4.1 Release Manual .if '\\$1'INSTALL' .ds Tx "Installing SunOS 4.1 .if '\\$1'ADMIN' .ds Tx "System and Network Administration .if '\\$1'SECUR' .ds Tx "Security Features Guide .if '\\$1'PROM' .ds Tx "PROM User's Manual .if '\\$1'DIAG' .ds Tx "Sun System Diagnostics .if '\\$1'SUNDIAG' .ds Tx "Sundiag User's Guide .if '\\$1'MANPAGES' .ds Tx "SunOS Reference Manual .if '\\$1'REFMAN' .ds Tx "SunOS Reference Manual .if '\\$1'SSI' .ds Tx "Sun System Introduction .if '\\$1'SSO' .ds Tx "System Services Overview .if '\\$1'TEXT' .ds Tx "Editing Text Files .if '\\$1'DOCS' .ds Tx "Formatting Documents .if '\\$1'TROFF' .ds Tx "Using \&\fBnroff\fP and \&\fBtroff\fP .if '\\$1'INDEX' .ds Tx "Global Index .if '\\$1'CPG' .ds Tx "C Programmer's Guide .if '\\$1'CREF' .ds Tx "C Reference Manual .if '\\$1'ASSY' .ds Tx "Assembly Language Reference .if '\\$1'PUL' .ds Tx "Programming Utilities and Libraries .if '\\$1'DEBUG' .ds Tx "Debugging Tools .if '\\$1'NETP' .ds Tx "Network Programming .if '\\$1'DRIVER' .ds Tx "Writing Device Drivers .if '\\$1'STREAMS' .ds Tx "STREAMS Programming .if '\\$1'SBDK' .ds Tx "SBus Developer's Kit .if '\\$1'WDDS' .ds Tx "Writing Device Drivers for the SBus .if '\\$1'FPOINT' .ds Tx "Floating-Point Programmer's Guide .if '\\$1'SVPG' .ds Tx "SunView\ 1 Programmer's Guide .if '\\$1'SVSPG' .ds Tx "SunView\ 1 System Programmer's Guide .if '\\$1'PIXRCT' .ds Tx "Pixrect Reference Manual .if '\\$1'CGI' .ds Tx "SunCGI Reference Manual .if '\\$1'CORE' .ds Tx "SunCore Reference Manual .if '\\$1'4ASSY' .ds Tx "Sun-4 Assembly Language Reference .if '\\$1'SARCH' .ds Tx "\s-1SPARC\s0 Architecture Manual . # non-Sun titles .if '\\$1'KR' .ds Tx "The C Programming Language \fI\\*(Tx\fP\\$2 .. ' # section heading .de SH .}X 0 .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .. ' # sub section heading .de SS .}X .25i "" "" .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .br .. ' # subroutine for section heading .de }X .}E .ti \\$1 .sp \\n()Pu .ne 2 .nr )R 0 .fi .it 1 }N .SM .B .. ' # end of SH (cf }X above and }N below) .de }2 .nr )E 0 .}E .nr )I .5i .ns .. ' # italic .de I .ft 2 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # bold .de B .ft 3 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # small .de SM .ps 9 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # combinations of Roman, italic, bold .de RI .}S 1 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de VS 'if '\\$1'4' .mc \s12\(br\s0 .. .de VE 'mc .. .de RB .}S 1 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IR .}S 2 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IB .}S 2 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BR .}S 3 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BI .}S 3 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. ' # make special case of shift out of italic .de }S .ds ]F .if "\\$1"2" .if !"\\$5"" .ds ]F\^ .ie !"\\$4"" .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" .el \\$3 .}f .. ' # small and boldface .de SB \&\fB\s-1\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6\s0\fR .. ' # paragraph .de LP .PP .. .de PP .sp \\n()Pu .ne 2 .}E .nr )I .5i .ns .. ' # paragraph distance .de PD .if t .nr )P .4v .if n .nr )P 1v .if !"\\$1"" .nr )P \\$1v .. ' # hanging indent .de HP .sp \\n()Pu .ne 2 .if !"\\$1"" .nr )I \\$1n .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n()Ru+\\n(INu .}f .. ' # indented paragraph .de IP .TP \\$2 \&\\$1 .. ' # hanging label .de TP .if !"\\$1"" .nr )I \\$1n .sp \\n()Pu .in \\n()Ru .nr )E 1 .ns .it 1 }N .di ]B .. ' # end of TP (cf }N below) .de }1 .ds ]X \&\\*(]B\\ .nr )E 0 .if !"\\$1"" .nr )I \\$1n .}f .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n(INu .ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X .br\} .el \\*(]X\h|\\n()Iu+\\n()Ru\c .}f .. ' # handle end of 1-line features .de }N .if \\n()E .br .di .if "\\n()E"0" .}f .if "\\n()E"1" .}1 .if "\\n()E"2" .}2 .nr )E 0 .. ' # increase relative indent .de RS .nr ]\\n+()p \\n()I .nr )\\n()p \\n()R .ie !"\\$1"" .nr )R +\\$1n .el .nr )R +\\n()I .nr )I .5i .}E .. ' # decrease relative indent .de RE .if !"\\$1"" \{.ie "\\$1"0" .nr )p 1 1 . el .nr )p \\$1 1\} .ds ]i \\*(]I\\n()p .ds ]r \\*(]R\\n()p .nr )I \\*(]i .nr )R \\*(]r .if \\n()p .nr )p -1 .}E .. .nr )p 0 1 .ds ]I \\\\n(] .ds ]R \\\\n() .bd S 3 3 .if t .ds R \(rg .if n .ds R (Reg.) .ds S \s10 .hy 14 .if !'\*(Lv'ADVANCED' .ig .ds pT \*(Lv \*(OS USERS .. .if '\*(Lv'ADVANCED' .ig .ds pT \*(OS USERS .. .ds ]W Psi Release 3.0 .\" This is used to ignore blanks on a line .\" Its purpose is to make the troff input look prettier. .de __ \\$1 .. .\" Start List .de sL \" .sL: start an optional list .di dL .LP \" This resets some things, apparently .nf .. .\" End List .de eL \" .eL: end an optional list under heading $1 .di .fi .\" The number 40 on the following line must be change if sL or eL are changed .if \\n(dn>40 \{\ .\"SH \\$1 -- \\n(dn \" Use this line for debugging .SH \\$1 .nf .dL .fi .\} .. .\" The input skip string, used to space headings. .ds sS \0\0\0\0\0\0\0 .\" Input Section Header .iS .de iS .LP .nf \\$1 .fi .. .\" Input Line .de iL .IP "\\$1" 7 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option .de iO .IP "\\*(sS\\$1" 14 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option Value .de iV .IP "\\*(sS\\*(sS\\$1" 21 .if !'\\$2'' \{\ \\$2 .\} .. .\" Start CMS .de sC .if !'\\*(OS'CMS' .ig eC .. .\" End Advanced with .eC .\" Start UNIX .de sU .if !'\\*(OS'UNIX' .ig eU .. .\" End Advanced with .eU .\" Start Advanced .de sA .if !'\\*(Lv'ADVANCED' .ig eA .. .\" End Advanced with .eA .\" Start Beginner .de sB .if !'\\*(Lv'' .ig eB .. .\" End Beginner with .eB .\" Psi Name .de pN \" .pN: convert a generic file name to a specific name .ta 2.5in .if '\*(OS'CMS' \{\ . ds pO \\$1 . if '\\$1'OUTPUT' .ds pO \" Unix only . if '\\$1'BASIS' .ds pO BASIS DATA . if '\\$1'PBASIS' .ds pO PBASIS DATA . if '\\$1'HVIB_IN' .ds pO HVIB15 . if '\\$1'HVIB_OUT' .ds pO FILE15 . if '\\$1'FILE91A' .ds pO FILE91 . if '\\$1'FILE92A' .ds pO FILE92 . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .if '\*(OS'UNIX' \{\ . ds pO \\$1 . if '\\$1'INPUT' .ds pO input.dat . if '\\$1'LMO' .ds pO lmo.dat . if '\\$1'CONTOUR' .ds pO contour.ps . if '\\$1'CMO' .ds pO cmo.dat . if '\\$1'BASIS' .ds pO basis.dat . if '\\$1'PBASIS' .ds pO pbasis.dat . if '\\$1'RESUL1' .ds pO resul1.dat . if '\\$1'RESUL2' .ds pO resul2.dat . if '\\$1'RESUL3' .ds pO \" CMS only . if '\\$1'SLOFILE' .ds pO \" CMS only . if '\\$1'INTDERO' .ds pO \" CMS only . if '\\$1'MAKEFT' .ds pO resul3.dat . if '\\$1'INTDER1' .ds pO intder1.dat . if '\\$1'INTDIFO' .ds pO intdifo.dat . if '\\$1'IDER' .ds pO ider.dat . if '\\$1'OPDM48' .ds pO file51.dat . if '\\$1'HVIB_IN' .ds pO file15.dat . if '\\$1'HVIB_OUT' .ds pO file16.dat . if '\\$1'FILE12A' .ds pO file12a.dat . if '\\$1'FILE16A' .ds pO file16a.dat . if '\\$1'FILE21A' .ds pO file21a.dat . if '\\$1'FILE11' .ds pO file11.dat . if '\\$1'FILE12' .ds pO file12.dat . if '\\$1'FILE13' .ds pO file13.dat . if '\\$1'FILE14' .ds pO file14.dat . if '\\$1'TOTAL15' .ds pO total15.dat . if '\\$1'TOTAL20' .ds pO total20.dat . if '\\$1'FILE15' .ds pO file15.dat . if '\\$1'FILE16' .ds pO file16.dat . if '\\$1'FILE17' .ds pO file17.dat . if '\\$1'FILE18' .ds pO file18.dat . if '\\$1'FILE19' .ds pO file19.dat . if '\\$1'FILE20' .ds pO file20.dat . if '\\$1'FILE21' .ds pO file21.dat . if '\\$1'FILE22' .ds pO file22.dat . if '\\$1'FILE23' .ds pO file23.dat . if '\\$1'FILE24' .ds pO file24.dat . if '\\$1'FILE25' .ds pO file25.dat . if '\\$1'FILE91A' .ds pO file91a.dat . if '\\$1'FILE92A' .ds pO file92a.dat . if '\\$1'CHECK' .ds pO tape3.dat . if '\\$1'OUTPUT' .ds pO output.dat\" Unix only . if '\\$1'FILE6' .ds pO \" CMS only . if '\\$1'BMAT' .ds pO input.dat . if '\\$1'INTCO' .ds pO intco.dat . if '\\$1'GEOM' .ds pO geom.dat . if '\\$1'FCONST' .ds pO fconst.dat . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .. \" End of .pN macro definition .TH cints 1 " 04 Jan, 2000" "\*(]W" "\*(]D" . \" . \" Notice of Document Modification . \" . \" man page updated by Edward Valeev, 4 Jan 00 . \" . \" .SH NAME .B cints \- One- and Two-Electron (Derivative) Integrals Program .SH DESCRIPTION .LP The program .B cints computes (derivative) integrals of some one- and two-electron operators which appear in quantum chemical theories over symmetry-adapted cartesian and spherical harmonics Gaussian functions. .SH DOCUMENTATION .LP Man-page is no longer supported. HTML-based documentation is in index.html. .pN INPUT " Input file" .pN FILE30 " Checkpoint file" .pN FILE31 .eL "FILES REQUIRED" .sL .pN .eL "TEMPORARY FILES USED" .sL .pN OUTPUT .pN FILE33 " Electron repulsion integrals" .pN FILE35 " All one-electron integrals" .SH INPUT FORMAT Input for this program is read from the file .pN INPUT . Most of the keywords are not neccessary for routine task. The following keywords are valid: .IP "\fBPRINT =\fP \fIinteger\fP" Determines amount of information to be printed. Defaults to 0. .IP "\fBCUTOFF =\fP \fIintegral\fP" The negative of the exponent of the cutoff imposed on two-electron integrals. Default is 15 which results in two-electron integrals of greater than 1e-15 magnitude to be stored in FILE33. .IP "\fBS_FILE =\fP \fIinteger\fP" The file number to store overlap integrals. Defaults to 35. .IP "\fBT_FILE =\fP \fIinteger\fP" The file number to store kinetic energy integrals. Defaults to 35. .IP "\fBV_FILE =\fP \fIinteger\fP" The file number to store nuclear attraction integrals. Defaults to 35. .IP "\fBERI_FILE =\fP \fIinteger\fP" The file number to store electron repulsion integrals. Defaults to 33. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psi3/src/bin/cints/cints.html�����������������������������������������������������������������������0000644�0001015�0000765�00000001125�07046653677�014711� 0����������������������������������������������������������������������������������������������������ustar �crawdad������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>CINTS - Molecular Integrals Engine psi3/src/bin/cints/data_structs.h0000644000101500007650000005557711112564564015561 0ustar crawdad#ifndef _psi_src_bin_cints_data_structs_h #define _psi_src_bin_cints_data_structs_h /*! \file \ingroup CINTS \brief Enter brief description of file here */ #ifndef DATA_STRUCTS_H #define DATA_STRUCTS_H #include"defines.h" namespace psi { namespace CINTS { /*----------------------- structure declarations -----------------------*/ /*- 2-index quantity -*/ struct oebuf { double val; int ij; }; /*- 4-index quantity with index range of (0,65535) -*/ struct tebuf { double val; short int i; short int j; short int k; short int l; }; struct gaussian_function{ double exp; /* orbital exponent */ double ccoeff[CINTS_MAX_AM]; /* comb. of contraction coeff and normalization */ }; struct shell_def{ int center; /* atom on which shell is centered */ int am; /* angular momentum of shell (+1?)*/ int n_prims; /* number of primitives in shell */ int fprim; /* pointer to the first primitive in shell */ int fbf; /* pointer to the first basis function from shell */ int fao; /* pointer to the first AO from shell */ double rad_extent; /* radial extent of the shell (the distance at which the radial part of the first basis function drops below BasisSet.thresh */ int *trans_vec; /* shell symmetry transformation vector */ }; struct coordinates{ double x; /* what do you think these are? */ double y; double z; double Z_nuc; /* nuclear charge */ }; struct shell_pair{ int i, j; double ***P; double AB[3]; double ***PA; double ***PB; double *a1, *a2, **gamma; double *inorm, *jnorm; double **Sovlp; /*--- Having open-shell and closed-shell and alpha and beta densities in UHF case is redundant. Thus only one pair is used at a given time, and the other pair is empty (ptr=NULL)! In fact, the difference open- and closed-shell densities in UHF case are used in hf_fock to form the Fock matrix incrementally. the total alpha and beta densities in UHF case are used in DFT to form the total XC matrix. ---*/ double **dmat; double **dmato; double **dmatb; double **dmata; /*--- SCF Lagrangian ---*/ double **lagr; double Smax; double Dmax; }; struct unique_shell_pair{ int *SOpair_npi; int **SOpair_so_i; int **SOpair_so_j; int **SOpair_bf_i; int **SOpair_bf_j; }; /*--- Matrix element (to be used to handle sparse matrices) ---*/ typedef struct { int row; int column; double value; } mat_elem; /*--- These are basically identical, left from Justin ---*/ struct double_array { int n1; double *d; }; typedef struct double_array double_array_t; struct struct_double_matrix { int n1; int n2; double **d /*[n1]*/ /*[n2]*/; }; typedef struct struct_double_matrix double_matrix_t; enum scftype {rhf = 0, uhf = 1, rohf = 2, twocon = 3}; enum frametype {canonical = 0, reference = 1}; typedef struct { char *wfn; /* Wavefunction */ char *dertype; /* Derivative type */ double cutoff; /* Cutoff on ERIs/Fock matrix elements */ double hf_exch; /* Fraction of exact HF exchange in the Fock matrix */ int make_dft; /* Use DFT? */ int print_lvl; /* Print level */ long int max_memory; /* Maximum amount of memory to use, in double words */ long int memory; /* Amount left available */ int make_oei; /* Flag to compute one-electron integrals */ int make_fock; /* Flag to compute Fock matrix */ int make_eri; /* Flag to compute two-electron integrals */ int make_deriv1; /* Flag to compute first derivatives of one- and two-electron integrals */ int make_deriv1_mvd; /* Flag to compute first derivatives of SCF+MVD relativisitic correction */ int make_deriv2; /* Flag to compute second derivatives of one- and two-electron integrals */ int make_oeprop; /* Flag tp compute one-electron property integrals */ int make_mp2; /* Flag to compute MP2 energy directly */ int make_r12ints; /* Compute integrals for linear R12 methods */ int make_mkpt2_ints; /* Flag to compute MKPT2 integrals directly and dump them to disk */ int make_mp2r12; /* Flag to compute MP2-R12 energy directly */ int make_cc_bt2; /* Flag to compute CC four-virtuals T2 term directly */ int make_giao_deriv; /* Flag to compute derivative integrals WRT B and E fields over GIAO Gaussians */ int symm_ints; /* This flag should be set whe individual integrals over SO need to be computed */ int scf_only; /* Means that ERIs will be used only in SCF calculations (may save some space) */ int num_threads; /* Number of threads */ enum scftype reftype; /* Reference type, e.g. RHF, ROHF, UHF */ int restart; /* Is this a restart? */ int restart_task; /* Where to restart? */ struct coordinates origin; /* user-selected origin for magnetic dipole integrals */ double fine_structure_alpha; /* scalar to multiply fine-structure constant */ double E[3]; /* electric field vector */ bool E_given; /* Was EFIELD given? */ enum frametype E_frame; /* in which frame is the field given? the default is canonical */ int empirical_dispersion; /* add grad to empirical dispersion terms? */ } UserOptions_t; typedef struct { int num_prims; /* number of primitive gaussians */ int num_shells; /* number of shells */ int max_num_prims; /* maximum number of primitives per shell */ int puream; /* pure angular momentum flag */ int num_ao; /* number of AO's */ int max_am; /* maximum angular momentum in the basis + 1 */ int *am2shell; /* Mapping array for am ordering to shell ordering */ int *shells_per_am; /* Number of shells per am type */ double thresh; /* Threshold used to evaluate radial extents of shells ---*/ double **schwartz_eri; /* the matrix num_shells by num_shells: [si][sj] = max(ij|ij) i in si, j in sj */ struct shell_def *shells; /* shell info */ struct gaussian_function *cgtos; /* cartesian gaussian information */ struct shell_pair **shell_pairs; /* shell pair info */ } BasisSet_t; typedef struct { int nirreps; /* number of irreps */ int max_stab_index; /* maximum stabilizer index */ int num_unique_atoms; /* number of symmetry unique atoms */ int num_unique_shells; /* number of symmetry unique shells */ int num_so; /* number of SO's */ int *atom_positions; /* symmetry positions/stabilizers of atoms */ int **ict; /* transformation properties of nuclei under symmetry operations */ int *ua2a; /* unique atom number to full atom number mapping array */ int *us2s; /* unique shell number to full shell number mapping array */ int *sopi; /* number of SO per irrep */ int *sym_oper; /* mapping array between "canonical" and symmetry.h-defined ordering of symmetry operations */ int *so2symblk; /* SO number to symmetry block mapping array */ int **dp_table; /* direct product multiplication table */ int ***dcr; /* double coset representatives */ int **dcr_dim; /* dimensions of double coset representatives */ int **dcr_deg; int **GnG; int *cdsalcpi; /* Number of cartesian displacement SALCs per irrep */ int *cdsalc_ioffset; /* offsets for the above */ char *symlabel; /* symmetry label */ char **irr_labels; /* labels of irreps */ double **cartrep; /* cartesian representation matrices */ double **usotao; /* SO to (basis functions if puream && !make_fock, AO otherwise) transformation matrix */ double **cdsalc2cd; /* Cartesian displacement SALCs (in columns) */ struct unique_shell_pair **us_pairs; /* unique shell symmetry info */ } SymmetryInfo_t; typedef struct { int num_atoms; /* number of atoms */ double Enuc; /* nuclear repulsion energy */ char *label; /* calculation label */ struct coordinates *centers; /* nuclear centers */ double **Rref; /* rotation back to reference frame */ } Molecule_t; typedef struct { int itap30; /* Checkpoint file */ int itap33; /* SO ERI file in IWL format */ int itapS; /* SO Overlap IWL file */ int itapT; /* SO Kinetic energy IWL file */ int itapV; /* SO Potential energy IWL file */ int itapOEInt_Misc; /* File for all miscellaneous one-electron integrals */ int itapS_AO; /* AO Overlap IWL file */ int itapMX_AO; /* AO mu(x) IWL file */ int itapMY_AO; /* AO mu(y) IWL file */ int itapMZ_AO; /* AO mu(z) IWL file */ int itapQXX_AO; /* AO q(xx) IWL file */ int itapQXY_AO; /* AO q(xy) IWL file */ int itapQXZ_AO; /* AO q(xz) IWL file */ int itapQYY_AO; /* AO q(yy) IWL file */ int itapQYZ_AO; /* AO q(yz) IWL file */ int itapQZZ_AO; /* AO q(zz) IWL file */ int itapNablaX_AO; /* AO nabla(x) IWL file */ int itapNablaY_AO; /* AO nabla(y) IWL file */ int itapNablaZ_AO; /* AO nabla(z) IWL file */ int itapDSCF; /* "Interface" file between DSCF and CINTS */ int itapD; /* Correlated AO OPDM and Lagrangian from transqt */ int itapG; /* Correlated AO TPDM from transqt */ int itapR12; /* SO integrals of r12 operator */ int itapT1; /* SO integrals of [r12,T1] operator */ int itapERI_MO; /* MO ERI integrals */ int itapR12_MO; /* MO R12 integrals */ int itapR12T2_MO; /* MO [r12,T2] integrals */ int itapdgdB[3]; /* AO dgd/Bi integrals over GIAO Gaussians */ int itapD1ERI_SO; /* SO derivative ERI integrals are stored in files itapD1ERI_SO, itapD1ERI_SO+1, ... itapD1ERI_SO+3*natoms */ } IOUnits_t; typedef struct { double **bf_norm; /* "angular" parts of the normalization constants for cartesian GTOs of each angular momentum level */ double ***cart2pureang; /* cartesian to pure angular momentum transformation matrices */ double ****cc2pp; /* composite (CxC) cartesian to pure angular momentum transformation matrices */ mat_elem ****cc2pp_sparse; /* sparse representation (row-compressed) of cc2pp */ mat_elem ****pp2cc_sparse; /* sparse representation (row-compressed) of the reverse of cc2pp */ int ***cc2pp_rowlength; /* this holds lengths of "compressed" rows in cc2pp_sparse */ int ***pp2cc_rowlength; /* see above */ } GTOs_t; typedef struct { double **grid; /* Table of "exact" Fm(T) values. Row index corresponds to values of T (max_T+1 rows), column index to values of m (max_m+1 columns) */ double delT; /* The step size for T, depends on cutoff */ double cutoff; /* Tolerance cutoff used in all computations of Fm(T) */ int order_interp; /* Order of (Taylor) interpolation */ int max_m; /* Maximum value of m in the table, depends on cutoff and the number of terms in Taylor interpolation */ int max_T; /* Maximum index of T in the table, depends on cutoff and m */ double *T_crit; /* Maximum T for each row, depends on cutoff; for a given m and T_idx <= max_T_idx[m] use Taylor interpolation, for a given m and T_idx > max_T_idx[m] use the asymptotic formula */ void (*compute_Fm)(double *, double, unsigned int); /* The function which computes a set of Fm(T), 0<=m<=l for given T and l */ } Fm_Eval_t; typedef struct { double Escf; /* SCF energy */ double Ecorr; /* Correlation energy */ double Eref; /* Reference energy (if not SCF reference) */ double *scf_evals[2]; /* SCF eigenvalues (alpha and beta spin) */ double *scf_evals_occ[2]; /* Eigenvalues for active occupied orbitals in QTS order */ double *scf_evals_uocc[2];/* Eigenvalues for active virtual orbitals in QTS order */ double **scf_evec[2]; /* SCF eigenvectors in AO basis (alpha and beta spin) NOTE: MOs are arranged in rows!!!!! */ double **scf_evec_occ[2]; /* SCF eigenvectors in AO basis for all doubly-occupied MOs in QTS order: frozen DOCC MOs for each symmetry block come first, then active DOCC MOs for each symmetry block */ double **scf_evec_uocc[2];/* SCF eigenvectors in AO basis for all vacant MOs in QTS order: active UOCC MOs for each symmetry block come first, then frozen UOCC MOs for each symmetry block */ double tcscf_occ[2]; /* Squared coefficients of determinants in TCSCF wavefunction */ double **Alpha, **Beta; /* Alpha and Beta energy coupling coeffcients */ int *mo2symblk; /* Array that maps MO Pitzer index to its symblk number; useful in manipulating Pitzer-indexed MOs */ int *mo2symblk_occ[2]; /* Array that maps docc index to its symblk number; useful in manipulating QTS-indexed MOs */ int *mo2symblk_uocc[2]; /* Array that maps uocc index to its symblk number; useful in manipulating QTS-indexed MOs */ int *orbspi; /* number of MOs per irrep */ int *clsdpi; /* number of doubly-occupied MOs per irrep */ int *openpi; /* number of singly-occupied MOs per irrep */ int *virtpi; /* number of vacant MOs per irrep */ int *frozen_docc; /* number of frozen doubly-occupied MOs per irrep */ int *frozen_uocc; /* number of frozen vacant MOs per irrep */ int num_mo; /* number of MOs */ int ndocc; /* number of doubly-occupied MOs */ int nfrdocc; /* number of "frozen" doubly occupied MOs */ int nactdocc; /* number of correlated doubly occupied MOs */ int nsocc; /* number of singly-occupied MOs */ int nuocc; /* number of vacant MOs */ int nfruocc; /* number of "frozen" vacant MOs */ int nactuocc; /* number of "active" vacant MOs */ int num_moshells; /* number of shells of MOs */ int num_openmoshells; /* number of shells of singly-occupied MOs */ int alpha_occ; /* number of alpha occupied orbitals */ int beta_occ; /* number of beta occupied orbitals */ int *occ_to_pitzer; /* The occupied (frozen docc + docc + active) to Pitzer array for the MkPT2 routine */ int *vir_to_pitzer; /* The virtual (active + virtual) to Pitzer array for the MkPT2 routine */ //these were added by ACS for the direct ump2r12 routine (01/06) double **scf_evec_alpha; /* alpha SCF eigenvectors in AO basis NOTE: MOs are arranged in rows!!!!! */ double **scf_evec_beta; /* beta SCF eigenvectors in AO basis NOTE: MOs are arranged in rows!!!!! */ double **scf_evec_occ_alpha; /* alpha SCF eigenvectors in AO basis for all doubly-occupied MOs in QTS order: frozen DOCC MOs for each symmetry block come first, then active DOCC MOs for each symmetry block */ double **scf_evec_occ_beta; /* beta SCF eigenvectors in AO basis for all doubly-occupied MOs in QTS order: frozen DOCC MOs for each symmetry block come first, then active DOCC MOs for each symmetry block */ int *virtpi_alpha; /* number of vacant alpha MOs per irrep */ int *virtpi_beta; /* number of vacant beta MOs per irrep */ int alpha_act_occ; /* number of active alpha occupied orbitals */ int beta_act_occ; /* number of active beta occupied orbitals */ int *mo2symblk_occ_alpha; /* Array that maps alpha occ index to its symblk number; useful in manipulating QTS-indexed MOs */ int *mo2symblk_occ_beta; /* Array that maps beta occ index to its symblk number; useful in manipulating QTS-indexed MOs */ } MOInfo_t; typedef struct { double **T2_s; /* source T2's */ double **T2_t; /* target T2's */ int nvirt; /* no. active virtuals */ int nocc; /* no. active occupieds */ } CCInfo_t; /* Cartesian derivative SALCs */ typedef struct { int nsalcs; char *atom_irreps; /* Bit-packed irreps of all derivatives wrt coordinates of a given atom. Assume Abelian groups, i.e. at most 8 irreps */ #ifdef __cplusplus typedef struct { int nsalcs; int* salcs; } cd2salc_map_t; cd2salc_map_t* cd2salc_map; /* Maps cartesian derivative to the list of all SALCs to which it contributes */ #else struct cd2salc_map_t { int nsalcs; int* salcs; } *cd2salc_map; /* Maps cartesian derivative to the list of all SALCs to which it contributes */ #endif int* salc2irrep; /* Maps SALC to its irrep */ } CDSALC_t; /* ------------------------------------------------------- DFT Data Structures -------------------------------------------------------*/ /* ------------------------- Pruned Grid parameters ------------------------*/ struct param_set_s { int n_ang_grids; /* Number of different lebedev spheres in atomic grid */ double *alpha; /* The cutoff parameters */ int *angpoints; /* the different angular grids */ }; struct pruned_info_s { int *a2param; /* Elements tell which parameter set is used for each atom */ int n_diff_ang_grids; /* If there are more than one sets of angular grids, this is how many */ int n_tot_ang_grids; /* Total number of different angular grids */ int n_param_sets; /* Number of total parameter sets */ struct param_set_s *param_set; /* The parameter sets */ }; /*------------------------------ Primitve class types -----------------------------*/ typedef struct{ struct coordinates p_cart; double ang_weight; } leb_point_t; typedef struct{ double r; double drdq; int n_ang_points; leb_point_t *points; } leb_sphere_t; typedef struct{ int size; int radial_start; int radial_end; leb_sphere_t *spheres; } prim_leb_chunk_t; typedef struct{ int chunk_num; prim_leb_chunk_t *leb_chunk; } prim_atomic_grid_t; /* ---------------------- Concrete classes ----------------------*/ struct close_shell_info_s{ int num_close_aos; int num_close_shells; int *shells_close_to_chunk; int *aos_close_to_chunk; int *close_shells_per_am; double **close_COCC; double **close_COCC_a; double **close_COCC_b; }; struct leb_chunk_s{ int size; int radial_start; int radial_end; leb_sphere_t *spheres; int *shells_close_to_chunk; int *close_shells_per_am; double **close_COCC; }; struct atomic_grid_s{ int atom_num; int atom_degen; struct coordinates atom_center; double Bragg_radii; int chunk_num; struct leb_chunk_s *leb_chunk; }; typedef struct{ int n_rad_points; int pruned_flag; const char *label; struct atomic_grid_s *atomic_grid; prim_atomic_grid_t prim_atomic_grid; prim_atomic_grid_t *prim_pruned_atomic_grids; struct pruned_info_s pruned_info; } grid_t; struct den_info_s{ double den; double dena; double denb; double gradx; double grady; double gradz; double gamma; }; struct fun_info_s{ double eval; double dval; double dvala; double dvalb; double dpval; double dgval; double ddval; double ddvala; double ddvalb; }; struct xc_info_s{ struct fun_info_s exch_info; struct fun_info_s corr_info; }; typedef struct{ int prtflag; /* dft printing flag */ double *basis; /* This is an array to hold the value of basis functions at a given point */ double *gamma_basis; double *gradx; double *grady; double *gradz; double *Bragg; double XC_energy; /* Exchange Correlation Energy */ double X_energy; /* Exchange Energy */ double C_energy; /* Correlation Energy */ /* All function pointers */ struct fun_info_s (*exchange_func)(struct den_info_s); struct fun_info_s (*correlation_func)(struct den_info_s); struct den_info_s (*den_calc)(struct coordinates,int); struct close_shell_info_s close_shell_info; grid_t grid; } DFT_options_t; }; }; #endif #endif psi3/src/bin/cints/Default_Deriv1/0000755000101500007650000000000011146111656015460 5ustar crawdadpsi3/src/bin/cints/Default_Deriv1/deriv1.cc0000644000101500007650000000413710773044507017173 0ustar crawdad/*! \file \ingroup CINTS \brief Driver for the computation of first derivatives. */ #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moinfo.h" #include"compute_scf_opdm.h" #include"read_gen_opdm.h" #include"enuc_deriv1.h" #include"oe_deriv1.h" #include"oe_deriv1_ints.h" #include"te_deriv1_scf.h" #include"te_deriv1_corr.h" #include"te_deriv1_ints.h" #include"symmetrize_deriv1.h" #include"rot_inv.h" #include"file11.h" namespace psi { namespace CINTS { pthread_mutex_t deriv1_mutex; double **grad_te; void deriv1() { /* Either contract integrals with the densities ... */ if (UserOptions.symm_ints == 0) { /*--- Gradient in the canonical frame ---*/ Grad = block_matrix(Molecule.num_atoms,3); if (UserOptions.empirical_dispersion) { double *oldgrad = chkpt_rd_grad(); for (int i=0,j=0; i #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif namespace psi { namespace CINTS { /*!-------------------------------------------------------------------------------- This function computes constants used in OSRR for a given quartet of primitives --------------------------------------------------------------------------------*/ void deriv1_quartet_data(prim_data *Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair *sp1, struct shell_pair *sp2, int am, int pi, int pj, int pk, int pl, double scale) { #define STATIC_OO2NP1 #include "static.h" /*---------------- Local variables ----------------*/ struct coordinates PQ, W; #ifdef USE_TAYLOR_FM double F[2*CINTS_MAX_AM+1]; #endif int i; double small_T = UserOptions.cutoff; /*--- Use only one term in Taylor expansion of Fj(T) if T < small_T ---*/ double T; double coef1; double PQ2; double oozn; double zeta, eta, rho; zeta = sp1->gamma[pi][pj]; eta = sp2->gamma[pk][pl]; oozn = 1.0/(zeta+eta); Data->twozeta_a = 2.0*sp1->a1[pi]; Data->twozeta_b = 2.0*sp1->a2[pj]; Data->twozeta_c = 2.0*sp2->a1[pk]; Data->twozeta_d = 2.0*sp2->a2[pl]; Data->poz = eta*oozn; rho = zeta*Data->poz; coef1 = 2.0*sqrt(rho*M_1_PI)*scale*sp1->Sovlp[pi][pj]*sp2->Sovlp[pk][pl]; PQ.x = sp1->P[pi][pj][0] - sp2->P[pk][pl][0]; PQ.y = sp1->P[pi][pj][1] - sp2->P[pk][pl][1]; PQ.z = sp1->P[pi][pj][2] - sp2->P[pk][pl][2]; PQ2 = PQ.x*PQ.x; PQ2 += PQ.y*PQ.y; PQ2 += PQ.z*PQ.z; T = rho*PQ2; Data->oo2zn = 0.5*oozn; Data->pon = zeta*oozn; Data->oo2z = 0.5/zeta; Data->oo2n = 0.5/eta; W.x = (sp1->P[pi][pj][0]*zeta+sp2->P[pk][pl][0]*eta)*oozn; W.y = (sp1->P[pi][pj][1]*zeta+sp2->P[pk][pl][1]*eta)*oozn; W.z = (sp1->P[pi][pj][2]*zeta+sp2->P[pk][pl][2]*eta)*oozn; if(fabs(PQ2)F[i] = oo2np1[i]*coef1; } else { #ifdef USE_TAYLOR_FM taylor_compute_fm(F,T,am+DERIV_LVL); for(i=0;i<=am+DERIV_LVL;i++) Data->F[i] = F[i]*coef1; #else int_fjt(fjt_table,am+DERIV_LVL,T); for(i=0;i<=am+DERIV_LVL;i++) Data->F[i] = fjt_table->d[i]*coef1; #endif } /* PA */ Data->U[0][0] = sp1->PA[pi][pj][0]; Data->U[0][1] = sp1->PA[pi][pj][1]; Data->U[0][2] = sp1->PA[pi][pj][2]; /* PB */ Data->U[1][0] = sp1->PB[pi][pj][0]; Data->U[1][1] = sp1->PB[pi][pj][1]; Data->U[1][2] = sp1->PB[pi][pj][2]; /* QC */ Data->U[2][0] = sp2->PA[pk][pl][0]; Data->U[2][1] = sp2->PA[pk][pl][1]; Data->U[2][2] = sp2->PA[pk][pl][2]; /* QD */ Data->U[3][0] = sp2->PB[pk][pl][0]; Data->U[3][1] = sp2->PB[pk][pl][1]; Data->U[3][2] = sp2->PB[pk][pl][2]; /* WP */ Data->U[4][0] = W.x - sp1->P[pi][pj][0]; Data->U[4][1] = W.y - sp1->P[pi][pj][1]; Data->U[4][2] = W.z - sp1->P[pi][pj][2]; /* WQ */ Data->U[5][0] = W.x - sp2->P[pk][pl][0]; Data->U[5][1] = W.y - sp2->P[pk][pl][1]; Data->U[5][2] = W.z - sp2->P[pk][pl][2]; return; } };}; psi3/src/bin/cints/Default_Deriv1/deriv1_quartet_data.h0000644000101500007650000000072310754663017021572 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv1_deriv1_quartet_data_h #define _psi_src_bin_cints_Default_Deriv1_deriv1_quartet_data_h /*! \file \ingroup CINTS \brief Enter brief description of file here */namespace psi { namespace CINTS { void deriv1_quartet_data(prim_data *Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair *sp1, struct shell_pair *sp2, int am, int pi, int pj, int pk, int pl, double scale); }} #endif psi3/src/bin/cints/Default_Deriv1/enuc_deriv1.cc0000644000101500007650000000273610757640026020210 0ustar crawdad/*! \file \ingroup CINTS \brief Compute the energy derivative of the nuclear repulsion. */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include namespace psi { namespace CINTS { //! Energy derivative of the nuclear repulsion. void enuc_deriv1() { int i, j; double rij2, tmp; double **grad_enuc; if (Molecule.num_atoms == 0) return; grad_enuc = block_matrix(Molecule.num_atoms,3); for(i=0; i= PRINT_OEDERIV) print_atomvec("Nuclear repulsion component of the forces (a.u.)",grad_enuc); add_mat(Grad,grad_enuc,Grad,Molecule.num_atoms,3); free_block(grad_enuc); return; } };}; psi3/src/bin/cints/Default_Deriv1/enuc_deriv1.h0000644000101500007650000000032210754663017020041 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv1_enuc_deriv1_h #define _psi_src_bin_cints_Default_Deriv1_enuc_deriv1_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void enuc_deriv1(); }} #endif psi3/src/bin/cints/Default_Deriv1/file11.cc0000644000101500007650000000411210770512553017051 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include namespace psi { namespace CINTS { void file11() { int i; char wfnstring[80]; char tmpwfn[80]; double **Geom, **GradRef, **GeomRef; double Etot; FILE *fp11; Etot = chkpt_rd_etot(); /*--- Geometry in the canonical frame ---*/ Geom = block_matrix(Molecule.num_atoms,3); /*--- Geometry and gradient in the reference frame ---*/ GeomRef = block_matrix(Molecule.num_atoms,3); GradRef = block_matrix(Molecule.num_atoms,3); /*--- Rotate back to the reference frame ---*/ for(i=0;i #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "oe_osrr.h" #include "oe_deriv1_osrr.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #endif #include "small_fns.h" #include namespace psi { namespace CINTS { /*--- These frequently used numbers are to avoid costs of passing parameters ---*/ static double oo2g, oog, gam; /*------------------------------- Explicit function declarations -------------------------------*/ static double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double f_n(int k, int l1, int l2, double A, double B); static double int_pow(double a, int p); /*!------------------------------------------------------------- This function computes derivatives of one-electron integrals -------------------------------------------------------------*/ void oe_deriv1() { /* Only computing first-order derivatives here */ const int deriv_lvl = 1; const int deriv0_lvl = 0; const int deriv1_lvl = 1; struct coordinates PA, PB, AB, PC; struct shell_pair *sp; int i, j, k, l, ii, jj, kk, ll; int count; int si, sj; int np_i, np_j; int si_fao, sj_fao; int sz; int l1, l2, m1, m2, n1, n2; int ioffset, joffset ; int ij; int ijpack; int h1; int am; int dimension ; int ni,li,nj,lj,ai,aj; int am_i, am_j; int ixm, iym, izm, jxm, jym, jzm; int ixm1, iym1, izm1, jxm1, jym1, jzm1; int indmax, iind,jind; int atom, atom1, atom2; int bf; int iimax, jjmax; double a1, a2; double ab2; double tmp; double inorm, jnorm, over_pf; double dens_pf, wdens_pf; double *ptr1, *ptr2, norm1, norm12; double ***AI0; double ***AIX, ***AIY, ***AIZ; double **grad_oe, **grad_ov; #if PRINT_DERIV1 char lbl[20]; FILE *out; double ***s, ***t, ***v; double print_pf; s = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); t = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); v = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); for(i=0; i < Molecule.num_atoms*3; i++) { s[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); t[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); v[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); } #endif #ifdef USE_TAYLOR_FM /*--- +2*deriv_lvl because of the way we invoke AI_Deriv1_OSrecurs ---*/ init_Taylor_Fm_Eval(BasisSet.max_am*4-4+2*deriv_lvl,UserOptions.cutoff); #endif indmax = (BasisSet.max_am+deriv_lvl-1)*(BasisSet.max_am+deriv_lvl)*(BasisSet.max_am+deriv_lvl)+1; AI0 = init_box(indmax,indmax,2*(BasisSet.max_am+deriv1_lvl)+1); AIX = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIY = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); grad_oe = block_matrix(Molecule.num_atoms,3); grad_ov = block_matrix(Molecule.num_atoms,3); for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj ; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; if (si == sj && ai < aj) break; dens_pf = Dens[si_fao+ai][sj_fao+aj]; dens_pf *= (GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]); wdens_pf = (-1.0)*Lagr[si_fao+ai][sj_fao+aj]; wdens_pf *= (GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]); if (si_fao+ai != sj_fao+aj) { dens_pf *= 2.0; wdens_pf *= 2.0; } /*--- A factor of 1/2 for correlated Lagrangians ---*/ if ((strcmp(UserOptions.wfn,"SCF")) && (strcmp(UserOptions.wfn,"SCF_MVD"))) wdens_pf *= 0.5; tmp = 2.0*a1*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_ov[atom1][0] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom1*3][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a1*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_ov[atom1][1] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom1*3+1][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a1*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_ov[atom1][2] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom1*3+2][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); grad_ov[atom2][0] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom2*3][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); grad_ov[atom2][1] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom2*3+1][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); grad_ov[atom2][2] += tmp*wdens_pf; #if PRINT_DERIV1 s[atom2*3+2][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a1*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_oe[atom1][0] += tmp*dens_pf; #if PRINT_DERIV1 t[atom1*3][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a1*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_oe[atom1][1] += tmp*dens_pf; #if PRINT_DERIV1 t[atom1*3+1][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a1*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); grad_oe[atom1][2] += tmp*dens_pf; #if PRINT_DERIV1 t[atom1*3+2][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); grad_oe[atom2][0] += tmp*dens_pf; #if PRINT_DERIV1 t[atom2*3][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); grad_oe[atom2][1] += tmp*dens_pf; #if PRINT_DERIV1 t[atom2*3+1][si_fao+ai][sj_fao+aj] += tmp; #endif tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); grad_oe[atom2][2] += tmp*dens_pf; #if PRINT_DERIV1 t[atom2*3+2][si_fao+ai][sj_fao+aj] += tmp; #endif aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ /*--- create all am components of si ---*/ for(atom=0;atomP[i][j][0] - Molecule.centers[atom].x; PC.y = sp->P[i][j][1] - Molecule.centers[atom].y; PC.z = sp->P[i][j][2] - Molecule.centers[atom].z; AI_Deriv1_OSrecurs(AI0,AIX,AIY,AIZ,PA,PB,PC,gam,am_i+deriv1_lvl,am_j+deriv1_lvl); ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; iind = n1*izm1 + m1*iym1 + l1*ixm1; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll ; if (si == sj && ai < aj) break; dens_pf = Dens[si_fao+ai][sj_fao+aj]; dens_pf *= (GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]); if (si_fao+ai != sj_fao+aj) dens_pf *= 2.0; #if PRINT_DERIV1 print_pf = Molecule.centers[atom].Z_nuc * over_pf * GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]; #endif jind = n2*jzm1 + m2*jym1 + l2*jxm1; tmp = 2.0*a1*AI0[iind+ixm1][jind][0]; if (l1) tmp -= l1*AI0[iind-ixm1][jind][0]; grad_oe[atom1][0] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom1*3][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = 2.0*a2*AI0[iind][jind+jxm1][0]; if (l2) tmp -= l2*AI0[iind][jind-jxm1][0]; grad_oe[atom2][0] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom2*3][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = AIX[iind][jind][0] * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); grad_oe[atom][0] -= tmp; #if PRINT_DERIV1 v[atom*3][si_fao+ai][sj_fao+aj] -= AIX[iind][jind][0] * print_pf; #endif tmp = 2.0*a1*AI0[iind+iym1][jind][0]; if (m1) tmp -= m1*AI0[iind-iym1][jind][0]; grad_oe[atom1][1] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom1*3+1][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = 2.0*a2*AI0[iind][jind+jym1][0]; if (m2) tmp -= m2*AI0[iind][jind-jym1][0]; grad_oe[atom2][1] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom2*3+1][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = AIY[iind][jind][0] * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); grad_oe[atom][1] -= tmp; #if PRINT_DERIV1 v[atom*3+1][si_fao+ai][sj_fao+aj] -= AIY[iind][jind][0] * print_pf; #endif tmp = 2.0*a1*AI0[iind+izm1][jind][0]; if (n1) tmp -= n1*AI0[iind-izm1][jind][0]; grad_oe[atom1][2] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom1*3+2][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = 2.0*a2*AI0[iind][jind+jzm1][0]; if (n2) tmp -= n2*AI0[iind][jind-jzm1][0]; grad_oe[atom2][2] -= tmp * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); #if PRINT_DERIV1 v[atom2*3+2][si_fao+ai][sj_fao+aj] -= tmp * print_pf; #endif tmp = AIZ[iind][jind][0] * Molecule.centers[atom].Z_nuc * (over_pf * dens_pf); grad_oe[atom][2] -= tmp; #if PRINT_DERIV1 v[atom*3+2][si_fao+ai][sj_fao+aj] -= AIZ[iind][jind][0] * print_pf; #endif aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } } /*--- end primitive contraction ---*/ } } #if PRINT_DERIV1 for(i=0; i < Molecule.num_atoms*3; i++) { fprintf(outfile,"\nOverlap (AO) %d:\n",i); print_mat(s[i],BasisSet.num_ao,BasisSet.num_ao,outfile); } #endif if (UserOptions.print_lvl >= PRINT_OEDERIV) { print_atomvec("One-electron contribution to the forces (a.u.)",grad_oe); print_atomvec("Overlap contribution to the forces (a.u.)",grad_ov); } for(i=0;i 1e-6) fprintf(out, "%3d %3d %20.14f\n", j, k, s[i][j][k]); fclose(out); free_block(s[i]); sprintf(lbl, "t%d.dat", i); ffile(&out, lbl, 0); for(j=0; j < BasisSet.num_ao; j++) for(k=0; k <=j; k++) if(fabs(t[i][j][k]) > 1e-6) fprintf(out, "%3d %3d %20.14f\n", j, k, t[i][j][k]); fclose(out); free_block(t[i]); sprintf(lbl, "v%d.dat", i); ffile(&out, lbl, 0); for(j=0; j < BasisSet.num_ao; j++) for(k=0; k <=j; k++) if(fabs(v[i][j][k]) > 1e-6) fprintf(out, "%3d %3d %20.14f\n", j, k, v[i][j][k]); fclose(out); free_block(v[i]); } free(s); free(t); free(v); #endif } /*!----------------------------------------------- This computes overlap of 2 primitive gaussians -----------------------------------------------*/ double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int i, j, k, l; int imax, jmax, kmax; int print = 0; double Ix, Iy, Iz; double I; double gam; double AB2; double tval, tval1, tval2 ; double norm_fact ; AB2 = AB.x*AB.x+AB.y*AB.y+AB.z*AB.z; gam = a1+a2; norm_fact = norm1*norm2; tval1 = 2*gam; imax = (l1+l2)/2; Ix = 0.0; for (i = 0; i<= imax; i++){ tval = f_n(i*2, l1, l2, PA.x, PB.x); tval2 = int_pow(tval1, i); Ix += tval*(num_ser[i])/(tval2); } jmax = (m1+m2)/2; Iy = 0.0; for (j = 0; j<= jmax; j++){ tval = f_n(j*2, m1, m2, PA.y, PB.y); tval2 = int_pow(tval1, j); Iy += tval*num_ser[j]/(tval2); } kmax = (n1+n2)/2; Iz = 0.0; for (k = 0; k<= kmax; k++){ tval = f_n(k*2, n1, n2, PA.z, PB.z); tval2 = int_pow(tval1, k); Iz += tval*num_ser[k]/(tval2); } I=exp(-1*a1*a2*AB2/gam)*Ix*Iy*Iz*sqrt(M_PI/gam)*(M_PI/gam); return I*norm_fact; } /*!----------------------------------------------------------------------------- This computes matrix element of kinetic energy between 2 primitive gaussians -----------------------------------------------------------------------------*/ double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int localprint = 0 ; double Ix, Iy, Iz; double I1 = 0.0, I2 = 0.0, I3 = 0.0, I4 = 0.0 ; double gam; double norm_fact; I2 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); Ix = (l1*l2*I1/2.0 + 2*a1*a2*I2 - a1*l2*I3 - a2*l1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); Iy = (m1*m2*I1/2.0 + 2*a1*a2*I2 - a1*m2*I3 - a2*m1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); Iz = (n1*n2*I1/2.0 + 2*a1*a2*I2 - a1*n2*I3 - a2*n1*I4); return((Ix+Iy+Iz)); } double f_n(int k, int l1, int l2, double A, double B) { int i, j; double sum = 0.0; double tval; double tmp1, tmp2, tmp3, tmp4 ; for(i=0; i<=l1; i++){ for(j=0; j<=l2; j++){ tmp1 = tmp2 = tmp3 = tmp4 = 0.0 ; if((i+j) == k){ tmp1 = int_pow(A, (l1-i)); tmp2 = int_pow(B, (l2-j)); tmp3 = bc[l1][i]; tmp4 = bc[l2][j]; tval = tmp1 * tmp2 * tmp3 * tmp4 ; sum += tval ; } } } return sum; } double int_pow(double a, int p) { register int i; double b = 1.0; for(i=0; i #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" namespace psi { namespace CINTS { static const int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); void oe_deriv1_darwin1(void) { double **AO_at_nuc, contr, ax, ay, az, ai, energy, *energy_atom; double zval, **darwin_deriv, **darwin_deriv_orb, **norm_bf; double **temp_mat, **der_rho, Rab_x, Rab_y, Rab_z, Rab, sign, ***dAO_at_nuc, tval, ***UX; int natom, nao, max_am, **xpow_bf, **ypow_bf, **zpow_bf, xpow, ypow, zpow ; int i, j, k, l, m, ibf, iatom, iang, nbfi, ig, igmin, igmax, i_1stbf, coord, occ_offset; int atom_A, atom_B, atom_C, xyz, nmo, mo, mo_max, pitz_offset, qts_offset, irrep, cnt; char *label; natom = Molecule.num_atoms; nao = BasisSet.num_ao; max_am = BasisSet.max_am; nmo = MOInfo.num_mo; /* determine powers of x,y,z for each AO, and normalization constants */ xpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); ypow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); zpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); norm_bf = block_matrix(max_am+1,(max_am+1)*(max_am+2)/2); for(l=0;l<=max_am;l++) { ibf = 0; for(i = 0; i <= l; i++){ for(j = 0; j <= i; j++){ xpow_bf[l][ibf] = l - i; ypow_bf[l][ibf] = i - j; zpow_bf[l][ibf] = j; /* norm_bf is an additional normalization factor for gaussians with l>=d */ norm_bf[l][ibf] = use_cca_integrals_standard ? 1.0 : sqrt(df[2*l]/(df[2*(l-i)]*df[2*(i-j)]*df[2*j])); ibf++; } } } /* Compute values of basis functions at each nucleus */ AO_at_nuc = block_matrix(natom,nao); for(i=0;i= PRINT_DEBUG) { fprintf(outfile,"Values of AO's at nuclei\n"); print_mat(AO_at_nuc,natom,nao,outfile); } /* Compute Darwin energy */ energy = 0.0; energy_atom = init_array(natom); for (iatom=0; iatom= PRINT_DEBUG) { fprintf(outfile,"One-electron Darwin term per atom\n"); for (iatom=0; iatom 0) { tval = sign * contr * norm_bf[iang][ibf] * exp(-ai * Rab); if (xpow >= 2) tval *= xpow * pow(Rab_x, xpow-1); if (ypow) tval *= pow(Rab_y, ypow); if (zpow) tval *= pow(Rab_z, zpow); dAO_at_nuc[3*atom_C+0][atom_B][i_1stbf+ibf] += tval; } if (ypow > 0) { tval = sign * contr * norm_bf[iang][ibf] * exp(-ai * Rab); if (xpow) tval *= pow(Rab_x, xpow); if (ypow >= 2) tval *= ypow * pow(Rab_y, ypow-1); if (zpow) tval *= pow(Rab_z, zpow); dAO_at_nuc[3*atom_C+1][atom_B][i_1stbf+ibf] += tval; } if (zpow > 0) { tval = sign * contr * norm_bf[iang][ibf] * exp(-ai * Rab); if (xpow) tval *= pow(Rab_x, xpow); if (ypow) tval *= pow(Rab_y, ypow); if (zpow >= 2) tval *= zpow * pow(Rab_z, zpow-1); dAO_at_nuc[3*atom_C+2][atom_B][i_1stbf+ibf] += tval; } } /* end loop atom_C */ } /* end loop ig */ } /* end loop ibf */ } /* end atom_B */ } /* end shells */ if (UserOptions.print_lvl >= PRINT_DEBUG) { for (i=0; i<3*natom; ++i) { fprintf(outfile,"\n\tOne-electron Darwin integral derivative %d\n",i); print_mat(dAO_at_nuc[i],natom,nao,outfile); } for (i=0; i<3*natom; ++i) { tval = 0.0; for (j=0; j= PRINT_DEBUG) { fprintf(outfile,"1e Darwin gradient, integral derivative part\n"); print_mat(darwin_deriv,natom,3,outfile); fprintf(outfile,"1e Darwin gradient, orbital derivative part\n"); print_mat(darwin_deriv_orb,natom,3,outfile); } for (iatom=0; iatom= PRINT_DEBUG) { fprintf(outfile,"\tOne-electron Darwin gradient, total\n"); print_mat(darwin_deriv,natom,3,outfile); } for (iatom=0; iatom #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #define TEST_OE_DERIV1_DARWIN1_DISP (0.0005) namespace psi { namespace CINTS { static const int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); void oe_deriv1_darwin1_test(void) { double **AO_at_nuc, contr, ax, ay, az, Rab, ai, e_darwin1, zval, **norm_bf; double Rab_x, Rab_y, Rab_z, sign, ***pAO_at_nuc, ***mAO_at_nuc, ***dAO_at_nuc, tval; int natom, nao, max_am, **xpow_bf, **ypow_bf, **zpow_bf, xpow, ypow, zpow; int i, j, k, l, ibf, iatom, iang, nbfi, ig, igmin, igmax, i_1stbf; int atom_A, atom_B, atom_C, xyz, ao; natom = Molecule.num_atoms; nao = BasisSet.num_ao; max_am = BasisSet.max_am; /* determine powers of x,y,z for each AO, and normalization constants */ xpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); ypow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); zpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); norm_bf = init_matrix(max_am+1,(max_am+1)*(max_am+2)/2); for(l=0;l<=max_am;l++) { ibf = 0; for(i = 0; i <= l; i++){ for(j = 0; j <= i; j++){ xpow_bf[l][ibf] = l - i; ypow_bf[l][ibf] = i - j; zpow_bf[l][ibf] = j; norm_bf[l][ibf] = use_cca_integrals_standard ? 1.0 : sqrt(df[2*l]/(df[2*(l-i)]*df[2*(i-j)]*df[2*j])); ibf++; } } } /* compute AO's at atom positions */ AO_at_nuc = block_matrix(natom,nao); for(i=0;i #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "oe_osrr.h" #include "oe_deriv1_osrr.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #endif #include "small_fns.h" /*------------------------------- Explicit function declarations -------------------------------*/ namespace psi { namespace CINTS { /*--- These frequently used numbers are to avoid costs of passing parameters ---*/ static double oo2g, oog, gam; inline double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); inline double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); inline double f_n(int k, int l1, int l2, double A, double B); inline double int_pow(double a, int p); /*!------------------------------------------------------------- This function computes derivatives of one-electron integrals -------------------------------------------------------------*/ void oe_deriv1_ints() { /* Only computing first-order derivatives here */ const int deriv_lvl = 1; const int deriv0_lvl = 0; const int deriv1_lvl = 1; struct coordinates PA, PB, AB, PC; struct shell_pair *sp; int i, j, k, l, ii, jj, kk, ll; int count; int si, sj; int np_i, np_j; int si_fao, sj_fao; int sz; int l1, l2, m1, m2, n1, n2; int ioffset, joffset ; int ij; int ijpack; int h1; int am; int dimension ; int ni,li,nj,lj,ai,aj; int am_i, am_j; int ixm, iym, izm, jxm, jym, jzm; int ixm1, iym1, izm1, jxm1, jym1, jzm1; int indmax, iind,jind; int atom, atom1, atom2; int bf; int iimax, jjmax; double a1, a2; double ab2; double tmp; double inorm, jnorm, over_pf; double dens_pf, wdens_pf; double *ptr1, *ptr2, norm1, norm12; double ***AI0; double ***AIX, ***AIY, ***AIZ; double **grad_oe, **grad_ov; char lbl[20]; FILE *out; double ***s, ***t, ***v; double print_pf; s = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); t = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); v = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); for(i=0; i < Molecule.num_atoms*3; i++) { s[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); t[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); v[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); } #ifdef USE_TAYLOR_FM /*--- +2*deriv_lvl because of the way we invoke AI_Deriv1_OSrecurs ---*/ init_Taylor_Fm_Eval(BasisSet.max_am*4-4+2*deriv_lvl,UserOptions.cutoff); #endif indmax = (BasisSet.max_am+deriv_lvl-1)*(BasisSet.max_am+deriv_lvl)*(BasisSet.max_am+deriv_lvl)+1; AI0 = init_box(indmax,indmax,2*(BasisSet.max_am+deriv1_lvl)+1); AIX = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIY = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); grad_oe = block_matrix(Molecule.num_atoms,3); grad_ov = block_matrix(Molecule.num_atoms,3); for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj ; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; if (si == sj && ai < aj) break; const double norm_pf = GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]; tmp = 2.0*a1*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); s[atom1*3][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a1*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); s[atom1*3+1][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a1*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); s[atom1*3+2][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); s[atom2*3][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); s[atom2*3+1][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); s[atom2*3+2][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a1*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); t[atom1*3][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a1*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); t[atom1*3+1][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a1*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); t[atom1*3+2][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); t[atom2*3][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); t[atom2*3+1][si_fao+ai][sj_fao+aj] += norm_pf * tmp; tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); t[atom2*3+2][si_fao+ai][sj_fao+aj] += norm_pf * tmp; aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ /*--- create all am components of si ---*/ for(atom=0;atomP[i][j][0] - Molecule.centers[atom].x; PC.y = sp->P[i][j][1] - Molecule.centers[atom].y; PC.z = sp->P[i][j][2] - Molecule.centers[atom].z; AI_Deriv1_OSrecurs(AI0,AIX,AIY,AIZ,PA,PB,PC,gam,am_i+deriv1_lvl,am_j+deriv1_lvl); ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; iind = n1*izm1 + m1*iym1 + l1*ixm1; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll ; if (si == sj && ai < aj) break; const double pfac = Molecule.centers[atom].Z_nuc * over_pf * GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]; jind = n2*jzm1 + m2*jym1 + l2*jxm1; tmp = 2.0*a1*AI0[iind+ixm1][jind][0]; if (l1) tmp -= l1*AI0[iind-ixm1][jind][0]; v[atom1*3][si_fao+ai][sj_fao+aj] -= tmp * pfac; tmp = 2.0*a2*AI0[iind][jind+jxm1][0]; if (l2) tmp -= l2*AI0[iind][jind-jxm1][0]; v[atom2*3][si_fao+ai][sj_fao+aj] -= tmp * pfac; v[atom*3][si_fao+ai][sj_fao+aj] -= AIX[iind][jind][0] * pfac; tmp = 2.0*a1*AI0[iind+iym1][jind][0]; if (m1) tmp -= m1*AI0[iind-iym1][jind][0]; v[atom1*3+1][si_fao+ai][sj_fao+aj] -= tmp * pfac; tmp = 2.0*a2*AI0[iind][jind+jym1][0]; if (m2) tmp -= m2*AI0[iind][jind-jym1][0]; v[atom2*3+1][si_fao+ai][sj_fao+aj] -= tmp * pfac; v[atom*3+1][si_fao+ai][sj_fao+aj] -= AIY[iind][jind][0] * pfac; tmp = 2.0*a1*AI0[iind+izm1][jind][0]; if (n1) tmp -= n1*AI0[iind-izm1][jind][0]; v[atom1*3+2][si_fao+ai][sj_fao+aj] -= tmp * pfac; tmp = 2.0*a2*AI0[iind][jind+jzm1][0]; if (n2) tmp -= n2*AI0[iind][jind-jzm1][0]; v[atom2*3+2][si_fao+ai][sj_fao+aj] -= tmp * pfac; v[atom*3+2][si_fao+ai][sj_fao+aj] -= AIZ[iind][jind][0] * pfac; aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } } /*--- end primitive contraction ---*/ } } /*--- flush it all away ---*/ fflush(outfile); free_box(AI0,indmax,indmax); free_box(AIX,indmax,indmax); free_box(AIY,indmax,indmax); free_box(AIZ,indmax,indmax); // Symmetrize the derivative integrals // First symmetrize the orbitals then the cartesian displacements double ***s_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); double ***t_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); double ***v_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); double ***T = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); for(i=0; i < Molecule.num_atoms*3; i++) { s_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); t_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); v_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); T[i] = block_matrix(Symmetry.num_so, BasisSet.num_ao); } for(i=0; i < Molecule.num_atoms*3; i++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < k; l++) s[i][l][k] = s[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) T[i][j][k] += Symmetry.usotao[j][l] * s[i][l][k]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) s_so[i][j][k] += Symmetry.usotao[j][l] * T[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) T[i][j][k] = 0.0; for(i=0; i < Molecule.num_atoms*3; i++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < k; l++) t[i][l][k] = t[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) T[i][j][k] += Symmetry.usotao[j][l] * t[i][l][k]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) t_so[i][j][k] += Symmetry.usotao[j][l] * T[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) T[i][j][k] = 0.0; for(i=0; i < Molecule.num_atoms*3; i++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < k; l++) v[i][l][k] = v[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) T[i][j][k] += Symmetry.usotao[j][l] * v[i][l][k]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Symmetry.num_so; j++) for(k=0; k < BasisSet.num_ao; k++) for(l=0; l < BasisSet.num_ao; l++) v_so[i][j][k] += Symmetry.usotao[j][l] * T[i][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) { free_block(s[i]); free_block(t[i]); free_block(v[i]); free_block(T[i]); } free(s); free(t); free(v); free(T); double ***S_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); double ***T_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); double ***V_so = (double ***) malloc(Molecule.num_atoms*3*sizeof(double **)); for(i=0; i < Molecule.num_atoms*3; i++) { S_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); T_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); V_so[i] = block_matrix(Symmetry.num_so, Symmetry.num_so); } for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Molecule.num_atoms*3; j++) for(k=0; k < Symmetry.num_so; k++) for(l=0; l < Symmetry.num_so; l++) S_so[i][k][l] += Symmetry.cdsalc2cd[j][i] * s_so[j][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Molecule.num_atoms*3; j++) for(k=0; k < Symmetry.num_so; k++) for(l=0; l < Symmetry.num_so; l++) T_so[i][k][l] += Symmetry.cdsalc2cd[j][i] * t_so[j][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) for(j=0; j < Molecule.num_atoms*3; j++) for(k=0; k < Symmetry.num_so; k++) for(l=0; l < Symmetry.num_so; l++) V_so[i][k][l] += Symmetry.cdsalc2cd[j][i] * v_so[j][k][l]; for(i=0; i < Molecule.num_atoms*3; i++) { free_block(s_so[i]); free_block(t_so[i]); free_block(v_so[i]); } free(s_so); free(t_so); free(v_so); int size = Symmetry.num_so * Symmetry.num_so; char *label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(i=0; i < Molecule.num_atoms*3; i++) { sprintf(label, "SO-basis Derivative Overlap Ints (%d)", i); psio_open(PSIF_SO_D1OEI, PSIO_OPEN_OLD); psio_write_entry(PSIF_SO_D1OEI, label, (char *) S_so[i][0], size*sizeof(double)); psio_close(PSIF_SO_D1OEI, 1); for(j=0; j < PSIO_KEYLEN; j++) label[j] = '\0'; } for(i=0; i < Molecule.num_atoms*3; i++) { sprintf(label, "SO-basis Derivative Kinetic Energy Ints (%d)", i); psio_open(PSIF_SO_D1OEI, PSIO_OPEN_OLD); psio_write_entry(PSIF_SO_D1OEI, label, (char *) T_so[i][0], size*sizeof(double)); psio_close(PSIF_SO_D1OEI, 1); for(j=0; j < PSIO_KEYLEN; j++) label[j] = '\0'; } for(i=0; i < Molecule.num_atoms*3; i++) { sprintf(label, "SO-basis Derivative Potential Energy Ints (%d)", i); psio_open(PSIF_SO_D1OEI, PSIO_OPEN_OLD); psio_write_entry(PSIF_SO_D1OEI, label, (char *) V_so[i][0], size*sizeof(double)); psio_close(PSIF_SO_D1OEI, 1); for(j=0; j < PSIO_KEYLEN; j++) label[j] = '\0'; } free(label); for(i=0; i < Molecule.num_atoms*3; i++) { free_block(S_so[i]); free_block(T_so[i]); free_block(V_so[i]); } free(S_so); free(T_so); free(V_so); } /*!----------------------------------------------- This computes overlap of 2 primitive gaussians -----------------------------------------------*/ double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int i, j, k, l; int imax, jmax, kmax; int print = 0; double Ix, Iy, Iz; double I; double gam; double AB2; double tval, tval1, tval2 ; double norm_fact ; AB2 = AB.x*AB.x+AB.y*AB.y+AB.z*AB.z; gam = a1+a2; norm_fact = norm1*norm2; tval1 = 2*gam; imax = (l1+l2)/2; Ix = 0.0; for (i = 0; i<= imax; i++){ tval = f_n(i*2, l1, l2, PA.x, PB.x); tval2 = int_pow(tval1, i); Ix += tval*(num_ser[i])/(tval2); } jmax = (m1+m2)/2; Iy = 0.0; for (j = 0; j<= jmax; j++){ tval = f_n(j*2, m1, m2, PA.y, PB.y); tval2 = int_pow(tval1, j); Iy += tval*num_ser[j]/(tval2); } kmax = (n1+n2)/2; Iz = 0.0; for (k = 0; k<= kmax; k++){ tval = f_n(k*2, n1, n2, PA.z, PB.z); tval2 = int_pow(tval1, k); Iz += tval*num_ser[k]/(tval2); } I=exp(-1*a1*a2*AB2/gam)*Ix*Iy*Iz*sqrt(M_PI/gam)*(M_PI/gam); return I*norm_fact; } /*!----------------------------------------------------------------------------- This computes matrix element of kinetic energy between 2 primitive gaussians -----------------------------------------------------------------------------*/ double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int localprint = 0 ; double Ix, Iy, Iz; double I1 = 0.0, I2 = 0.0, I3 = 0.0, I4 = 0.0 ; double gam; double norm_fact; I2 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); Ix = (l1*l2*I1/2.0 + 2*a1*a2*I2 - a1*l2*I3 - a2*l1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); Iy = (m1*m2*I1/2.0 + 2*a1*a2*I2 - a1*m2*I3 - a2*m1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); Iz = (n1*n2*I1/2.0 + 2*a1*a2*I2 - a1*n2*I3 - a2*n1*I4); return((Ix+Iy+Iz)); } double f_n(int k, int l1, int l2, double A, double B) { int i, j; double sum = 0.0; double tval; double tmp1, tmp2, tmp3, tmp4 ; for(i=0; i<=l1; i++){ for(j=0; j<=l2; j++){ tmp1 = tmp2 = tmp3 = tmp4 = 0.0 ; if((i+j) == k){ tmp1 = int_pow(A, (l1-i)); tmp2 = int_pow(B, (l2-j)); tmp3 = bc[l1][i]; tmp4 = bc[l2][j]; tval = tmp1 * tmp2 * tmp3 * tmp4 ; sum += tval ; } } } return sum; } double int_pow(double a, int p) { register int i; double b = 1.0; for(i=0; i #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" namespace psi { namespace CINTS { static const int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); double ***MIX, ***MIY, ***MIZ; void MI_OSrecurs(double pax, double pay, double paz, double pbx, double pby, double pbz, double gamma, int lmaxi, int lmaxj, int maxm); extern double ***init_box(int a, int b, int c); extern void ***free_box(double ***box, int a, int b); extern void oe_deriv1_mvc_test(void); void oe_deriv1_mvc(void) { double **mvc_ints, contr, ax, ay, az, bx, by, bz, ai, bj, energy, **norm_bf; double Rab2, ***UX, tmp, over_pf, **mvc_deriv_orb, ***dmvc_ints, **mvc_deriv; double x0, y0, z0, tx, ty, tz, t2x, t2y, t2z, gamma, **der_rho, **temp_mat, tx1, ty1, tz1; double pax, pay, paz, pbx, pby, pbz, px, py, pz, contr_i, contr_j, tval; int natom, nao, max_am, **xpow_bf, **ypow_bf, **zpow_bf, xpow, ypow, zpow ; int i, j, k, l, m, coord, occ_offset, eq_shell, eq_atoms, datom; int lx1, ly1, lz1, lx2, ly2, lz2; int ibf, iatom, iang, nbfi, ig, igmin, igmax, i_1stbf; int jbf, jatom, jang, nbfj, jg, jgmin, jgmax, j_1stbf, jlim; int xyz, nmo, mo, mo_max, irrep, cnt; char *label; natom = Molecule.num_atoms; nao = BasisSet.num_ao; max_am = BasisSet.max_am; nmo = MOInfo.num_mo; /* determine powers of x,y,z for each AO, and normalization constants */ xpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); ypow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); zpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); norm_bf = block_matrix(max_am+1,(max_am+1)*(max_am+2)/2); for(l=0;l<=max_am;l++) { ibf = 0; for(i = 0; i <= l; i++){ for(j = 0; j <= i; j++){ xpow_bf[l][ibf] = l - i; ypow_bf[l][ibf] = i - j; zpow_bf[l][ibf] = j; /* norm_bf is an additional normalization factor for gaussians with l>=d */ norm_bf[l][ibf] = use_cca_integrals_standard ? 1.0 : sqrt(df[2*l]/(df[2*(l-i)]*df[2*(i-j)]*df[2*j])); ibf++; } } } MIX = init_box(max_am+3,max_am+3,1); MIY = init_box(max_am+3,max_am+3,1); MIZ = init_box(max_am+3,max_am+3,1); MIX[0][0][0] = MIY[0][0][0] = MIZ[0][0][0] = 1.0; /* compute mass-velocity integrals */ mvc_ints = block_matrix(nao,nao); for(i=0;i= 2) tx -= 0.5*lx2*(lx2-1)*MIX[lx1][lx2-2][0]; ty = bj*(2*ly2+1)*y0 - 2*bj*bj*MIY[ly1][ly2+2][0]; if (ly2 >= 2) ty -= 0.5*ly2*(ly2-1)*MIY[ly1][ly2-2][0]; tz = bj*(2*lz2+1)*z0 - 2*bj*bj*MIZ[lz1][lz2+2][0]; if (lz2 >= 2) tz -= 0.5*lz2*(lz2-1)*MIZ[lz1][lz2-2][0]; /* Diagonal two-dimensional integrals */ t2x = 4*(2*lx1+1)*(2*lx2+1)*ai*bj*x0 - 8*(2*lx1+1)*ai*bj*bj*MIX[lx1][lx2+2][0] - 8*(2*lx2+1)*ai*ai*bj*MIX[lx1+2][lx2][0] + 16*ai*ai*bj*bj*MIX[lx1+2][lx2+2][0]; if (lx1 >= 2) t2x += 4*lx1*(lx1-1)*bj*bj*MIX[lx1-2][lx2+2][0] - 2*lx1*(lx1-1)*(2*lx2+1)*bj*MIX[lx1-2][lx2][0]; if (lx2 >= 2) t2x += 4*lx2*(lx2-1)*ai*ai*MIX[lx1+2][lx2-2][0] - 2*(2*lx1+1)*lx2*(lx2-1)*ai*MIX[lx1][lx2-2][0]; if ((lx1 >= 2) && (lx2 >= 2)) t2x += lx1*(lx1-1)*lx2*(lx2-1)*MIX[lx1-2][lx2-2][0]; t2y = 4*(2*ly1+1)*(2*ly2+1)*ai*bj*y0 - 8*(2*ly1+1)*ai*bj*bj*MIY[ly1][ly2+2][0] - 8*(2*ly2+1)*ai*ai*bj*MIY[ly1+2][ly2][0] + 16*ai*ai*bj*bj*MIY[ly1+2][ly2+2][0]; if (ly1 >= 2) t2y += 4*ly1*(ly1-1)*bj*bj*MIY[ly1-2][ly2+2][0] - 2*ly1*(ly1-1)*(2*ly2+1)*bj*MIY[ly1-2][ly2][0]; if (ly2 >= 2) t2y += 4*ly2*(ly2-1)*ai*ai*MIY[ly1+2][ly2-2][0] - 2*(2*ly1+1)*ly2*(ly2-1)*ai*MIY[ly1][ly2-2][0]; if ((ly1 >= 2) && (ly2 >= 2)) t2y += ly1*(ly1-1)*ly2*(ly2-1)*MIY[ly1-2][ly2-2][0]; t2z = 4*(2*lz1+1)*(2*lz2+1)*ai*bj*z0 - 8*(2*lz1+1)*ai*bj*bj*MIZ[lz1][lz2+2][0] - 8*(2*lz2+1)*ai*ai*bj*MIZ[lz1+2][lz2][0] + 16*ai*ai*bj*bj*MIZ[lz1+2][lz2+2][0]; if (lz1 >= 2) t2z += 4*lz1*(lz1-1)*bj*bj*MIZ[lz1-2][lz2+2][0] - 2*lz1*(lz1-1)*(2*lz2+1)*bj*MIZ[lz1-2][lz2][0]; if (lz2 >= 2) t2z += 4*lz2*(lz2-1)*ai*ai*MIZ[lz1+2][lz2-2][0] - 2*(2*lz1+1)*lz2*(lz2-1)*ai*MIZ[lz1][lz2-2][0]; if ((lz1 >= 2) && (lz2 >= 2)) t2z += lz1*(lz1-1)*lz2*(lz2-1)*MIZ[lz1-2][lz2-2][0]; mvc_ints[i_1stbf+ibf][j_1stbf+jbf] += norm_bf[iang][ibf] * norm_bf[jang][jbf] * over_pf * (t2x*y0*z0 + x0*t2y*z0 + x0*y0*t2z + 8*tx*ty*z0 + 8*tx*y0*tz + 8*x0*ty*tz); } /* end loop gaussians jbf */ } /* end loop gaussians ibf */ } /* end loop jg primitives */ } /* end loop ig primitives */ } /* end loop over j shell */ } /* end loop over i shell */ if (UserOptions.print_lvl >= PRINT_DEBUG) { fprintf(outfile,"Values of mass-velocity integrals in AO basis\n"); print_mat(mvc_ints,nao,nao,outfile); } /* compute mass-velocity energy correction from lower triangle of integrals */ energy = 0.0; for (i=0; i= 2) tx -= 0.5*lx2*(lx2-1)*MIX[lx1][lx2-2][0]; ty = bj*(2*ly2+1)*y0 - 2*bj*bj*MIY[ly1][ly2+2][0]; if (ly2 >= 2) ty -= 0.5*ly2*(ly2-1)*MIY[ly1][ly2-2][0]; tz = bj*(2*lz2+1)*z0 - 2*bj*bj*MIZ[lz1][lz2+2][0]; if (lz2 >= 2) tz -= 0.5*lz2*(lz2-1)*MIZ[lz1][lz2-2][0]; /* Diagonal two-dimensional integrals */ t2x = 4*(2*lx1+1)*(2*lx2+1)*ai*bj*x0 - 8*(2*lx1+1)*ai*bj*bj*MIX[lx1][lx2+2][0] - 8*(2*lx2+1)*ai*ai*bj*MIX[lx1+2][lx2][0] + 16*ai*ai*bj*bj*MIX[lx1+2][lx2+2][0]; if (lx1 >= 2) t2x += 4*lx1*(lx1-1)*bj*bj*MIX[lx1-2][lx2+2][0] - 2*lx1*(lx1-1)*(2*lx2+1)*bj*MIX[lx1-2][lx2][0]; if (lx2 >= 2) t2x += 4*lx2*(lx2-1)*ai*ai*MIX[lx1+2][lx2-2][0] - 2*(2*lx1+1)*lx2*(lx2-1)*ai*MIX[lx1][lx2-2][0]; if ((lx1 >= 2) && (lx2 >= 2)) t2x += lx1*(lx1-1)*lx2*(lx2-1)*MIX[lx1-2][lx2-2][0]; t2y = 4*(2*ly1+1)*(2*ly2+1)*ai*bj*y0 - 8*(2*ly1+1)*ai*bj*bj*MIY[ly1][ly2+2][0] - 8*(2*ly2+1)*ai*ai*bj*MIY[ly1+2][ly2][0] + 16*ai*ai*bj*bj*MIY[ly1+2][ly2+2][0]; if (ly1 >= 2) t2y += 4*ly1*(ly1-1)*bj*bj*MIY[ly1-2][ly2+2][0] - 2*ly1*(ly1-1)*(2*ly2+1)*bj*MIY[ly1-2][ly2][0]; if (ly2 >= 2) t2y += 4*ly2*(ly2-1)*ai*ai*MIY[ly1+2][ly2-2][0] - 2*(2*ly1+1)*ly2*(ly2-1)*ai*MIY[ly1][ly2-2][0]; if ((ly1 >= 2) && (ly2 >= 2)) t2y += ly1*(ly1-1)*ly2*(ly2-1)*MIY[ly1-2][ly2-2][0]; t2z = 4*(2*lz1+1)*(2*lz2+1)*ai*bj*z0 - 8*(2*lz1+1)*ai*bj*bj*MIZ[lz1][lz2+2][0] - 8*(2*lz2+1)*ai*ai*bj*MIZ[lz1+2][lz2][0] + 16*ai*ai*bj*bj*MIZ[lz1+2][lz2+2][0]; if (lz1 >= 2) t2z += 4*lz1*(lz1-1)*bj*bj*MIZ[lz1-2][lz2+2][0] - 2*lz1*(lz1-1)*(2*lz2+1)*bj*MIZ[lz1-2][lz2][0]; if (lz2 >= 2) t2z += 4*lz2*(lz2-1)*ai*ai*MIZ[lz1+2][lz2-2][0] - 2*(2*lz1+1)*lz2*(lz2-1)*ai*MIZ[lz1][lz2-2][0]; if ((lz1 >= 2) && (lz2 >= 2)) t2z += lz1*(lz1-1)*lz2*(lz2-1)*MIZ[lz1-2][lz2-2][0]; tval = norm_bf[iang][ibf] * norm_bf[jang][jbf] * over_pf * (t2x*y0*z0 + x0*t2y*z0 + x0*y0*t2z + 8*tx*ty*z0 + 8*tx*y0*tz + 8*x0*ty*tz); tval *= 2.0 * ai; dmvc_ints[3*datom+xyz][i_1stbf+ibf][j_1stbf+jbf] += tval; } /* end loop gaussians jbf */ } /* end loop gaussians ibf */ /* Second term: d/dRx [(x-Rx)^lx] e^(-ai*R^2) = lx*(x-Rx)^(lx-1)*[e^(-ai*R^2)] */ for(ibf=0;ibf= 2) tx -= 0.5*lx2*(lx2-1)*MIX[lx1][lx2-2][0]; ty = bj*(2*ly2+1)*y0 - 2*bj*bj*MIY[ly1][ly2+2][0]; if (ly2 >= 2) ty -= 0.5*ly2*(ly2-1)*MIY[ly1][ly2-2][0]; tz = bj*(2*lz2+1)*z0 - 2*bj*bj*MIZ[lz1][lz2+2][0]; if (lz2 >= 2) tz -= 0.5*lz2*(lz2-1)*MIZ[lz1][lz2-2][0]; /* Diagonal two-dimensional integrals */ t2x = 4*(2*lx1+1)*(2*lx2+1)*ai*bj*x0 - 8*(2*lx1+1)*ai*bj*bj*MIX[lx1][lx2+2][0] - 8*(2*lx2+1)*ai*ai*bj*MIX[lx1+2][lx2][0] + 16*ai*ai*bj*bj*MIX[lx1+2][lx2+2][0]; if (lx1 >= 2) t2x += 4*lx1*(lx1-1)*bj*bj*MIX[lx1-2][lx2+2][0] - 2*lx1*(lx1-1)*(2*lx2+1)*bj*MIX[lx1-2][lx2][0]; if (lx2 >= 2) t2x += 4*lx2*(lx2-1)*ai*ai*MIX[lx1+2][lx2-2][0] - 2*(2*lx1+1)*lx2*(lx2-1)*ai*MIX[lx1][lx2-2][0]; if ((lx1 >= 2) && (lx2 >= 2)) t2x += lx1*(lx1-1)*lx2*(lx2-1)*MIX[lx1-2][lx2-2][0]; t2y = 4*(2*ly1+1)*(2*ly2+1)*ai*bj*y0 - 8*(2*ly1+1)*ai*bj*bj*MIY[ly1][ly2+2][0] - 8*(2*ly2+1)*ai*ai*bj*MIY[ly1+2][ly2][0] + 16*ai*ai*bj*bj*MIY[ly1+2][ly2+2][0]; if (ly1 >= 2) t2y += 4*ly1*(ly1-1)*bj*bj*MIY[ly1-2][ly2+2][0] - 2*ly1*(ly1-1)*(2*ly2+1)*bj*MIY[ly1-2][ly2][0]; if (ly2 >= 2) t2y += 4*ly2*(ly2-1)*ai*ai*MIY[ly1+2][ly2-2][0] - 2*(2*ly1+1)*ly2*(ly2-1)*ai*MIY[ly1][ly2-2][0]; if ((ly1 >= 2) && (ly2 >= 2)) t2y += ly1*(ly1-1)*ly2*(ly2-1)*MIY[ly1-2][ly2-2][0]; t2z = 4*(2*lz1+1)*(2*lz2+1)*ai*bj*z0 - 8*(2*lz1+1)*ai*bj*bj*MIZ[lz1][lz2+2][0] - 8*(2*lz2+1)*ai*ai*bj*MIZ[lz1+2][lz2][0] + 16*ai*ai*bj*bj*MIZ[lz1+2][lz2+2][0]; if (lz1 >= 2) t2z += 4*lz1*(lz1-1)*bj*bj*MIZ[lz1-2][lz2+2][0] - 2*lz1*(lz1-1)*(2*lz2+1)*bj*MIZ[lz1-2][lz2][0]; if (lz2 >= 2) t2z += 4*lz2*(lz2-1)*ai*ai*MIZ[lz1+2][lz2-2][0] - 2*(2*lz1+1)*lz2*(lz2-1)*ai*MIZ[lz1][lz2-2][0]; if ((lz1 >= 2) && (lz2 >= 2)) t2z += lz1*(lz1-1)*lz2*(lz2-1)*MIZ[lz1-2][lz2-2][0]; tval = norm_bf[iang][ibf] * norm_bf[jang][jbf] * over_pf * (t2x*y0*z0 + x0*t2y*z0 + x0*y0*t2z + 8*tx*ty*z0 + 8*tx*y0*tz + 8*x0*ty*tz); if (xyz == 0) tval *= -1.0 * (lx1+1); else if (xyz == 1) tval *= -1.0 * (ly1+1); else if (xyz == 2) tval *= -1.0 * (lz1+1); dmvc_ints[3*datom+xyz][i_1stbf+ibf][j_1stbf+jbf] += tval; } /* end loop gaussians jbf */ } /* end loop gaussians ibf */ } /* end loop jg primitives */ } /* end loop ig primitives */ } /* end loop over j shell */ } /* end loop over i shell */ } /* end xyz */ } /* end iatom */ if (UserOptions.print_lvl >= PRINT_DEBUG) { for (i=0; i<3*natom; ++i) { fprintf(outfile,"\n\tMass-velocity integral derivatives, analytic (%d)\n",i); print_mat(dmvc_ints[i],nao,nao,outfile); } for (i=0; i<3*natom; ++i) { tval = 0.0; for (j=0; j= PRINT_DEBUG) { fprintf(outfile,"Mass-velocity gradient, integral derivative part\n"); print_mat(mvc_deriv,natom,3,outfile); fprintf(outfile,"Mass-velocity gradient, orbital derivative part\n"); print_mat(mvc_deriv_orb,natom,3,outfile); } for (iatom=0; iatom= PRINT_DEBUG) { fprintf(outfile,"\tTotal mass velocity gradient\n"); print_mat(mvc_deriv,natom,3,outfile); } for (iatom=0; iatom 1) MIX[0][0][2] = MIY[0][0][2] = MIZ[0][0][2] = pp; /* Upward recursion in j for i=0 */ for(j=0;j0) { MIX[0][j+1][k] += j*pp*MIX[0][j-1][k]; MIY[0][j+1][k] += j*pp*MIY[0][j-1][k]; MIZ[0][j+1][k] += j*pp*MIZ[0][j-1][k]; } if (k>0) { MIX[0][j+1][k] += k*pp*MIX[0][j][k-1]; MIY[0][j+1][k] += k*pp*MIY[0][j][k-1]; MIZ[0][j+1][k] += k*pp*MIZ[0][j][k-1]; } } /* Upward recursion in i for all j's */ for(i=0;i0) { MIX[i+1][j][k] += i*pp*MIX[i-1][j][k]; MIY[i+1][j][k] += i*pp*MIY[i-1][j][k]; MIZ[i+1][j][k] += i*pp*MIZ[i-1][j][k]; } if (j>0) { MIX[i+1][j][k] += j*pp*MIX[i][j-1][k]; MIY[i+1][j][k] += j*pp*MIY[i][j-1][k]; MIZ[i+1][j][k] += j*pp*MIZ[i][j-1][k]; } if (k>0) { MIX[i+1][j][k] += k*pp*MIX[i][j][k-1]; MIY[i+1][j][k] += k*pp*MIY[i][j][k-1]; MIZ[i+1][j][k] += k*pp*MIZ[i][j][k-1]; } } } }} psi3/src/bin/cints/Default_Deriv1/oe_deriv1_mvc_test.cc0000644000101500007650000003601410757710553021564 0ustar crawdad/*! \file \ingroup CINTS Compute the derivative of the mass-velocity relativistic correction. Energy code adapted from oeprop by E.F. Valeev. \author R.A. King */ #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #define TEST_OE_DERIV1_MVC_DISP (0.00001) namespace psi { namespace CINTS { static const int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); extern double ***init_box(int a, int b, int c); extern void free_box(double ***box, int a, int b); extern void MI_OSrecurs(double pax, double pay, double paz, double pbx, double pby, double pbz, double gamma, int lmaxi, int lmaxj, int maxm); extern double ***MIX; extern double ***MIY; extern double ***MIZ; void oe_deriv1_mvc_test(void) { double contr, ax, ay, az, bx, by, bz, ai, bj, energy, **norm_bf; double Rab2, ***UX, tmp, over_pf, ***dmvc_ints, ***pmvc_ints, ***mmvc_ints; double x0, y0, z0, tx, ty, tz, t2x, t2y, t2z, gamma, tx1, ty1, tz1; double pax, pay, paz, pbx, pby, pbz, px, py, pz, contr_i, contr_j, tval; int natom, nao, max_am, **xpow_bf, **ypow_bf, **zpow_bf, xpow, ypow, zpow ; int i, j, k, l, m, coord, occ_offset, eq_shell, eq_atoms; int lx1, ly1, lz1, lx2, ly2, lz2, atom_C; int ibf, iatom, iang, nbfi, ig, igmin, igmax, i_1stbf; int jbf, jatom, jang, nbfj, jg, jgmin, jgmax, j_1stbf; int xyz, nmo, mo, mo_max, irrep, cnt; char *label; natom = Molecule.num_atoms; nao = BasisSet.num_ao; max_am = BasisSet.max_am; nmo = MOInfo.num_mo; /* determine powers of x,y,z for each AO, and normalization constants */ xpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); ypow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); zpow_bf = init_int_matrix(max_am+1,(max_am+1)*(max_am+2)/2); norm_bf = block_matrix(max_am+1,(max_am+1)*(max_am+2)/2); for(l=0;l<=max_am;l++) { ibf = 0; for(i = 0; i <= l; i++){ for(j = 0; j <= i; j++){ xpow_bf[l][ibf] = l - i; ypow_bf[l][ibf] = i - j; zpow_bf[l][ibf] = j; /* norm_bf is an additional normalization factor for gaussians with l>=d */ norm_bf[l][ibf] = use_cca_integrals_standard ? 1.0 : sqrt(df[2*l]/(df[2*(l-i)]*df[2*(i-j)]*df[2*j])); ibf++; } } } MIX = init_box(max_am+3,max_am+3,0); MIY = init_box(max_am+3,max_am+3,0); MIZ = init_box(max_am+3,max_am+3,0); MIX[0][0][0] = MIY[0][0][0] = MIZ[0][0][0] = 1.0; pmvc_ints = init_3d_array(3*natom,nao,nao); mmvc_ints = init_3d_array(3*natom,nao,nao); dmvc_ints = init_3d_array(3*natom,nao,nao); /* compute mass-velocity integrals at +R_Cx*/ for (atom_C=0; atom_C= 2) tx -= 0.5*lx2*(lx2-1)*MIX[lx1][lx2-2][0]; ty = bj*(2*ly2+1)*y0 - 2*bj*bj*MIY[ly1][ly2+2][0]; if (ly2 >= 2) ty -= 0.5*ly2*(ly2-1)*MIY[ly1][ly2-2][0]; tz = bj*(2*lz2+1)*z0 - 2*bj*bj*MIZ[lz1][lz2+2][0]; if (lz2 >= 2) tz -= 0.5*lz2*(lz2-1)*MIZ[lz1][lz2-2][0]; t2x = 4*(2*lx1+1)*(2*lx2+1)*ai*bj*x0 - 8*(2*lx1+1)*ai*bj*bj*MIX[lx1][lx2+2][0] - 8*(2*lx2+1)*ai*ai*bj*MIX[lx1+2][lx2][0] + 16*ai*ai*bj*bj*MIX[lx1+2][lx2+2][0]; if (lx1 >= 2) t2x += 4*lx1*(lx1-1)*bj*bj*MIX[lx1-2][lx2+2][0] - 2*lx1*(lx1-1)*(2*lx2+1)*bj*MIX[lx1-2][lx2][0]; if (lx2 >= 2) t2x += 4*lx2*(lx2-1)*ai*ai*MIX[lx1+2][lx2-2][0] - 2*(2*lx1+1)*lx2*(lx2-1)*ai*MIX[lx1][lx2-2][0]; if ((lx1 >= 2) && (lx2 >= 2)) t2x += lx1*(lx1-1)*lx2*(lx2-1)*MIX[lx1-2][lx2-2][0]; t2y = 4*(2*ly1+1)*(2*ly2+1)*ai*bj*y0 - 8*(2*ly1+1)*ai*bj*bj*MIY[ly1][ly2+2][0] - 8*(2*ly2+1)*ai*ai*bj*MIY[ly1+2][ly2][0] + 16*ai*ai*bj*bj*MIY[ly1+2][ly2+2][0]; if (ly1 >= 2) t2y += 4*ly1*(ly1-1)*bj*bj*MIY[ly1-2][ly2+2][0] - 2*ly1*(ly1-1)*(2*ly2+1)*bj*MIY[ly1-2][ly2][0]; if (ly2 >= 2) t2y += 4*ly2*(ly2-1)*ai*ai*MIY[ly1+2][ly2-2][0] - 2*(2*ly1+1)*ly2*(ly2-1)*ai*MIY[ly1][ly2-2][0]; if ((ly1 >= 2) && (ly2 >= 2)) t2y += ly1*(ly1-1)*ly2*(ly2-1)*MIY[ly1-2][ly2-2][0]; t2z = 4*(2*lz1+1)*(2*lz2+1)*ai*bj*z0 - 8*(2*lz1+1)*ai*bj*bj*MIZ[lz1][lz2+2][0] - 8*(2*lz2+1)*ai*ai*bj*MIZ[lz1+2][lz2][0] + 16*ai*ai*bj*bj*MIZ[lz1+2][lz2+2][0]; if (lz1 >= 2) t2z += 4*lz1*(lz1-1)*bj*bj*MIZ[lz1-2][lz2+2][0] - 2*lz1*(lz1-1)*(2*lz2+1)*bj*MIZ[lz1-2][lz2][0]; if (lz2 >= 2) t2z += 4*lz2*(lz2-1)*ai*ai*MIZ[lz1+2][lz2-2][0] - 2*(2*lz1+1)*lz2*(lz2-1)*ai*MIZ[lz1][lz2-2][0]; if ((lz1 >= 2) && (lz2 >= 2)) t2z += lz1*(lz1-1)*lz2*(lz2-1)*MIZ[lz1-2][lz2-2][0]; pmvc_ints[3*atom_C+xyz][i_1stbf+ibf][j_1stbf+jbf] += norm_bf[iang][ibf] * norm_bf[jang][jbf] * over_pf * (t2x*y0*z0 + x0*t2y*z0 + x0*y0*t2z + 8*tx*ty*z0 + 8*tx*y0*tz + 8*x0*ty*tz); } /* end loop gaussians jbf */ } /* end loop gaussians ibf */ } /* end loop jg primitives */ } /* end loop ig primitives */ } /* end loop over j shell */ } /* end loop over i shell */ } } /* compute mass-velocity integrals at -R_Cx*/ for (atom_C=0; atom_C= 2) tx -= 0.5*lx2*(lx2-1)*MIX[lx1][lx2-2][0]; ty = bj*(2*ly2+1)*y0 - 2*bj*bj*MIY[ly1][ly2+2][0]; if (ly2 >= 2) ty -= 0.5*ly2*(ly2-1)*MIY[ly1][ly2-2][0]; tz = bj*(2*lz2+1)*z0 - 2*bj*bj*MIZ[lz1][lz2+2][0]; if (lz2 >= 2) tz -= 0.5*lz2*(lz2-1)*MIZ[lz1][lz2-2][0]; t2x = 4*(2*lx1+1)*(2*lx2+1)*ai*bj*x0 - 8*(2*lx1+1)*ai*bj*bj*MIX[lx1][lx2+2][0] - 8*(2*lx2+1)*ai*ai*bj*MIX[lx1+2][lx2][0] + 16*ai*ai*bj*bj*MIX[lx1+2][lx2+2][0]; if (lx1 >= 2) t2x += 4*lx1*(lx1-1)*bj*bj*MIX[lx1-2][lx2+2][0] - 2*lx1*(lx1-1)*(2*lx2+1)*bj*MIX[lx1-2][lx2][0]; if (lx2 >= 2) t2x += 4*lx2*(lx2-1)*ai*ai*MIX[lx1+2][lx2-2][0] - 2*(2*lx1+1)*lx2*(lx2-1)*ai*MIX[lx1][lx2-2][0]; if ((lx1 >= 2) && (lx2 >= 2)) t2x += lx1*(lx1-1)*lx2*(lx2-1)*MIX[lx1-2][lx2-2][0]; t2y = 4*(2*ly1+1)*(2*ly2+1)*ai*bj*y0 - 8*(2*ly1+1)*ai*bj*bj*MIY[ly1][ly2+2][0] - 8*(2*ly2+1)*ai*ai*bj*MIY[ly1+2][ly2][0] + 16*ai*ai*bj*bj*MIY[ly1+2][ly2+2][0]; if (ly1 >= 2) t2y += 4*ly1*(ly1-1)*bj*bj*MIY[ly1-2][ly2+2][0] - 2*ly1*(ly1-1)*(2*ly2+1)*bj*MIY[ly1-2][ly2][0]; if (ly2 >= 2) t2y += 4*ly2*(ly2-1)*ai*ai*MIY[ly1+2][ly2-2][0] - 2*(2*ly1+1)*ly2*(ly2-1)*ai*MIY[ly1][ly2-2][0]; if ((ly1 >= 2) && (ly2 >= 2)) t2y += ly1*(ly1-1)*ly2*(ly2-1)*MIY[ly1-2][ly2-2][0]; t2z = 4*(2*lz1+1)*(2*lz2+1)*ai*bj*z0 - 8*(2*lz1+1)*ai*bj*bj*MIZ[lz1][lz2+2][0] - 8*(2*lz2+1)*ai*ai*bj*MIZ[lz1+2][lz2][0] + 16*ai*ai*bj*bj*MIZ[lz1+2][lz2+2][0]; if (lz1 >= 2) t2z += 4*lz1*(lz1-1)*bj*bj*MIZ[lz1-2][lz2+2][0] - 2*lz1*(lz1-1)*(2*lz2+1)*bj*MIZ[lz1-2][lz2][0]; if (lz2 >= 2) t2z += 4*lz2*(lz2-1)*ai*ai*MIZ[lz1+2][lz2-2][0] - 2*(2*lz1+1)*lz2*(lz2-1)*ai*MIZ[lz1][lz2-2][0]; if ((lz1 >= 2) && (lz2 >= 2)) t2z += lz1*(lz1-1)*lz2*(lz2-1)*MIZ[lz1-2][lz2-2][0]; mmvc_ints[3*atom_C+xyz][i_1stbf+ibf][j_1stbf+jbf] += norm_bf[iang][ibf] * norm_bf[jang][jbf] * over_pf * (t2x*y0*z0 + x0*t2y*z0 + x0*y0*t2z + 8*tx*ty*z0 + 8*tx*y0*tz + 8*x0*ty*tz); } /* end loop gaussians jbf */ } /* end loop gaussians ibf */ } /* end loop jg primitives */ } /* end loop ig primitives */ } /* end loop over j shell */ } /* end loop over i shell */ } } for (i=0;i<3*natom;++i) for (j=0;j= PRINT_DEBUG) { for (i=0; i<3*natom; ++i) { fprintf(outfile,"\n\tMass-velocity integral derivatives, numerical (%d)\n",i); print_mat(dmvc_ints[i],nao,nao,outfile); } for (i=0; i<3*natom; ++i) { tval = 0.0; for (j=0; j #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include "fjt.h" #endif namespace psi { namespace CINTS { void AI_Deriv1_OSrecurs(double ***AI0, double ***AIX, double ***AIY, double ***AIZ, struct coordinates PA, struct coordinates PB, struct coordinates PC, double gamma, int iang, int jang) { int a,b,m; int izm = 1; int iym = iang + 1; int ixm = iym * iym; int jzm = 1; int jym = jang + 1; int jxm = jym * jym; int ix,iy,iz,jx,jy,jz; int iind,jind; double pp = 1/(2*gamma); int mmax = iang+jang; double tmp = sqrt(gamma)*M_2_SQRTPI; double u = gamma*(PC.x*PC.x + PC.y*PC.y + PC.z*PC.z); static double F[2*CINTS_MAX_AM+1]; #ifdef USE_TAYLOR_FM taylor_compute_fm(F,u,mmax); #else calc_f(F,mmax,u); #endif /* Computing starting integrals for recursion */ for(m=0;m<=mmax;m++) AI0[0][0][m] = tmp*F[m]; for(m=0;m<=mmax-1;m++) { AIX[0][0][m] = 2*gamma*PC.x*AI0[0][0][m+1]; AIY[0][0][m] = 2*gamma*PC.y*AI0[0][0][m+1]; AIZ[0][0][m] = 2*gamma*PC.z*AI0[0][0][m+1]; } /* Upward recursion in j with i=0 */ for(b=1;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm+jy*jym+jz*jzm; if (jz > 0) { for(m=0;m<=mmax-b;m++) /* Electrostatic potential integrals */ AI0[0][jind][m] = PB.z*AI0[0][jind-jzm][m] - PC.z*AI0[0][jind-jzm][m+1]; for(m=0;m<=mmax-b-1;m++) { /* Electric field integrals */ AIX[0][jind][m] = PB.z*AIX[0][jind-jzm][m] - PC.z*AIX[0][jind-jzm][m+1]; AIY[0][jind][m] = PB.z*AIY[0][jind-jzm][m] - PC.z*AIY[0][jind-jzm][m+1]; AIZ[0][jind][m] = PB.z*AIZ[0][jind-jzm][m] - PC.z*AIZ[0][jind-jzm][m+1] + AI0[0][jind-jzm][m+1]; } if (jz > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jz-1)*(AI0[0][jind-2*jzm][m] - AI0[0][jind-2*jzm][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jz-1)*(AIX[0][jind-2*jzm][m] - AIX[0][jind-2*jzm][m+1]); AIY[0][jind][m] += pp*(jz-1)*(AIY[0][jind-2*jzm][m] - AIY[0][jind-2*jzm][m+1]); AIZ[0][jind][m] += pp*(jz-1)*(AIZ[0][jind-2*jzm][m] - AIZ[0][jind-2*jzm][m+1]); } } } else if (jy > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.y*AI0[0][jind-jym][m] - PC.y*AI0[0][jind-jym][m+1]; for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] = PB.y*AIX[0][jind-jym][m] - PC.y*AIX[0][jind-jym][m+1]; AIY[0][jind][m] = PB.y*AIY[0][jind-jym][m] - PC.y*AIY[0][jind-jym][m+1] + AI0[0][jind-jym][m+1]; AIZ[0][jind][m] = PB.y*AIZ[0][jind-jym][m] - PC.y*AIZ[0][jind-jym][m+1]; } if (jy > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jy-1)*(AI0[0][jind-2*jym][m] - AI0[0][jind-2*jym][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jy-1)*(AIX[0][jind-2*jym][m] - AIX[0][jind-2*jym][m+1]); AIY[0][jind][m] += pp*(jy-1)*(AIY[0][jind-2*jym][m] - AIY[0][jind-2*jym][m+1]); AIZ[0][jind][m] += pp*(jy-1)*(AIZ[0][jind-2*jym][m] - AIZ[0][jind-2*jym][m+1]); } } } else if (jx > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.x*AI0[0][jind-jxm][m] - PC.x*AI0[0][jind-jxm][m+1]; for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] = PB.x*AIX[0][jind-jxm][m] - PC.x*AIX[0][jind-jxm][m+1] + AI0[0][jind-jxm][m+1]; AIY[0][jind][m] = PB.x*AIY[0][jind-jxm][m] - PC.x*AIY[0][jind-jxm][m+1]; AIZ[0][jind][m] = PB.x*AIZ[0][jind-jxm][m] - PC.x*AIZ[0][jind-jxm][m+1]; } if (jx > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jx-1)*(AI0[0][jind-2*jxm][m] - AI0[0][jind-2*jxm][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jx-1)*(AIX[0][jind-2*jxm][m] - AIX[0][jind-2*jxm][m+1]); AIY[0][jind][m] += pp*(jx-1)*(AIY[0][jind-2*jxm][m] - AIY[0][jind-2*jxm][m+1]); AIZ[0][jind][m] += pp*(jx-1)*(AIZ[0][jind-2*jxm][m] - AIZ[0][jind-2*jxm][m+1]); } } } else /*--- Should never happen ---*/ abort(); } /* The following fragment cannot be vectorized easily, I guess :-) */ /* Upward recursion in i with all possible j's */ for(b=0;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm + jy*jym + jz*jzm; for(a=1;a<=iang;a++) for(ix=0;ix<=a;ix++) for(iy=0;iy<=a-ix;iy++) { iz = a-ix-iy; iind = ix*ixm + iy*iym + iz*izm; if (iz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.z*AI0[iind-izm][jind][m] - PC.z*AI0[iind-izm][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { /* Electric field integrals */ AIX[iind][jind][m] = PA.z*AIX[iind-izm][jind][m] - PC.z*AIX[iind-izm][jind][m+1]; AIY[iind][jind][m] = PA.z*AIY[iind-izm][jind][m] - PC.z*AIY[iind-izm][jind][m+1]; AIZ[iind][jind][m] = PA.z*AIZ[iind-izm][jind][m] - PC.z*AIZ[iind-izm][jind][m+1] + AI0[iind-izm][jind][m+1]; } if (iz > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iz-1)* (AI0[iind-2*izm][jind][m] - AI0[iind-2*izm][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(iz-1)*(AIX[iind-2*izm][jind][m] - AIX[iind-2*izm][jind][m+1]); AIY[iind][jind][m] += pp*(iz-1)*(AIY[iind-2*izm][jind][m] - AIY[iind-2*izm][jind][m+1]); AIZ[iind][jind][m] += pp*(iz-1)*(AIZ[iind-2*izm][jind][m] - AIZ[iind-2*izm][jind][m+1]); } } if (jz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jz* (AI0[iind-izm][jind-jzm][m] - AI0[iind-izm][jind-jzm][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jz*(AIX[iind-izm][jind-jzm][m] - AIX[iind-izm][jind-jzm][m+1]); AIY[iind][jind][m] += pp*jz*(AIY[iind-izm][jind-jzm][m] - AIY[iind-izm][jind-jzm][m+1]); AIZ[iind][jind][m] += pp*jz*(AIZ[iind-izm][jind-jzm][m] - AIZ[iind-izm][jind-jzm][m+1]); } } } else if (iy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.y*AI0[iind-iym][jind][m] - PC.y*AI0[iind-iym][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] = PA.y*AIX[iind-iym][jind][m] - PC.y*AIX[iind-iym][jind][m+1]; AIY[iind][jind][m] = PA.y*AIY[iind-iym][jind][m] - PC.y*AIY[iind-iym][jind][m+1] + AI0[iind-iym][jind][m+1]; AIZ[iind][jind][m] = PA.y*AIZ[iind-iym][jind][m] - PC.y*AIZ[iind-iym][jind][m+1]; } if (iy > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iy-1)* (AI0[iind-2*iym][jind][m] - AI0[iind-2*iym][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(iy-1)*(AIX[iind-2*iym][jind][m] - AIX[iind-2*iym][jind][m+1]); AIY[iind][jind][m] += pp*(iy-1)*(AIY[iind-2*iym][jind][m] - AIY[iind-2*iym][jind][m+1]); AIZ[iind][jind][m] += pp*(iy-1)*(AIZ[iind-2*iym][jind][m] - AIZ[iind-2*iym][jind][m+1]); } } if (jy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jy* (AI0[iind-iym][jind-jym][m] - AI0[iind-iym][jind-jym][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jy*(AIX[iind-iym][jind-jym][m] - AIX[iind-iym][jind-jym][m+1]); AIY[iind][jind][m] += pp*jy*(AIY[iind-iym][jind-jym][m] - AIY[iind-iym][jind-jym][m+1]); AIZ[iind][jind][m] += pp*jy*(AIZ[iind-iym][jind-jym][m] - AIZ[iind-iym][jind-jym][m+1]); } } } else if (ix > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.x*AI0[iind-ixm][jind][m] - PC.x*AI0[iind-ixm][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { /* Electric field integrals */ AIX[iind][jind][m] = PA.x*AIX[iind-ixm][jind][m] - PC.x*AIX[iind-ixm][jind][m+1] + AI0[iind-ixm][jind][m+1]; AIY[iind][jind][m] = PA.x*AIY[iind-ixm][jind][m] - PC.x*AIY[iind-ixm][jind][m+1]; AIZ[iind][jind][m] = PA.x*AIZ[iind-ixm][jind][m] - PC.x*AIZ[iind-ixm][jind][m+1]; } if (ix > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(ix-1)* (AI0[iind-2*ixm][jind][m] - AI0[iind-2*ixm][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(ix-1)*(AIX[iind-2*ixm][jind][m] - AIX[iind-2*ixm][jind][m+1]); AIY[iind][jind][m] += pp*(ix-1)*(AIY[iind-2*ixm][jind][m] - AIY[iind-2*ixm][jind][m+1]); AIZ[iind][jind][m] += pp*(ix-1)*(AIZ[iind-2*ixm][jind][m] - AIZ[iind-2*ixm][jind][m+1]); } } if (jx > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jx* (AI0[iind-ixm][jind-jxm][m] - AI0[iind-ixm][jind-jxm][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jx*(AIX[iind-ixm][jind-jxm][m] - AIX[iind-ixm][jind-jxm][m+1]); AIY[iind][jind][m] += pp*jx*(AIY[iind-ixm][jind-jxm][m] - AIY[iind-ixm][jind-jxm][m+1]); AIZ[iind][jind][m] += pp*jx*(AIZ[iind-ixm][jind-jxm][m] - AIZ[iind-ixm][jind-jxm][m+1]); } } } else /*--- Should never happen ---*/ abort(); } } return; } };}; psi3/src/bin/cints/Default_Deriv1/oe_deriv1_osrr.h0000644000101500007650000000060310754663017020561 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv1_oe_deriv1_osrr_h #define _psi_src_bin_cints_Default_Deriv1_oe_deriv1_osrr_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void AI_Deriv1_OSrecurs(double ***AI0, double ***AIX, double ***AIY, double ***AIZ, struct coordinates PA, struct coordinates PB, struct coordinates PC, double gamma, int iang, int jang); }} #endif psi3/src/bin/cints/Default_Deriv1/rot_inv.cc0000644000101500007650000000261010757640026017453 0ustar crawdad/*! \file \ingroup CINTS \brief Routines for determining the rotational invariance of gradients. */ #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" namespace psi { namespace CINTS { void check_rot_inv() { int atom; double cross[] = {0.0, 0.0, 0.0} ; double mod_cross; for(atom=0; atom ROT_INV_TOLER) { printf(" Rotational invariance of the energy derivative is violated!\n\n"); fprintf(outfile," Rotational invariance of the energy derivative is violated!\n"); fprintf(outfile," |X cross Grad| = %15.12lf\n\n",mod_cross); abort(); } else { fprintf(outfile," Rotational invariance condition satisfied.\n"); fprintf(outfile," |X cross Grad| = %15.12lf (it is the accuracy of the computed forces)\n",mod_cross); fprintf(outfile," So long..\n\n"); } return; } };}; psi3/src/bin/cints/Default_Deriv1/rot_inv.h0000644000101500007650000000031310754663017017315 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv1_rot_inv_h #define _psi_src_bin_cints_Default_Deriv1_rot_inv_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void check_rot_inv(); }} #endif psi3/src/bin/cints/Default_Deriv1/symmetrize_deriv1.cc0000644000101500007650000000275110754663017021465 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" using namespace std; namespace psi { namespace CINTS { void symmetrize_deriv1() { int atom, atom2; int symop; double grad[3]; vector > symm_grad(Molecule.num_atoms); for(atom=0; atom vdummy(3); symm_grad[atom]=vdummy; grad[0] = grad[1] = grad[2] = 0.0; for(symop=0;symop #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "small_fns.h" #include #include namespace psi { namespace CINTS { void te_deriv1_corr() { /*--- Various data structures ---*/ struct iwlbuf TPDM; /* IWL buffer for two-pdm matrix elements */ struct shell_pair *sp_ij, *sp_kl; Libderiv_t Libderiv; /* Integrals library object */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; register int i, j, k, l, m, ii, jj, kk, ll; register int si, sj, sk, sl ; register int sii, sjj, skk, sll, slll; register int pi, pj, pk, pl ; int max_pj, max_pl; register int pii, pjj, pkk, pll ; int switch_ij, switch_kl, switch_ijkl; int center_i, center_j, center_k, center_l; int class_size; int max_class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, quartet_size; int si_fao, sj_fao, sk_fao, sl_fao; int sii_fao, sjj_fao, skk_fao, sll_fao; int ao_i, imax, ao_j, jmax, ao_k, kmax, ao_l, lmax; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p, max_num_prim_comb; int buf_offset, buf_4offset, buf_size, last_buf; int quartet_done, offset; int mosh_i, mosh_j; double AB2, CD2; double *FourInd; double **grad_te_local; double pfac; double temp; double alpha, beta; double **dens_i, **dens_j; double ddax, dday, ddaz, ddbx, ddby, ddbz, ddcx, ddcy, ddcz, dddx, dddy, dddz; /*--------------- Initialization ---------------*/ iwl_buf_init(&TPDM, IOUnits.itapG, 0.0, 1, 1); buf_offset = 0; buf_4offset = 0; buf_size = TPDM.inbuf; #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4+DERIV_LVL,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4+DERIV_LVL); init_fjt_table(&fjt_table); #endif init_libderiv_base(); max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv1(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_cart_class_size); FourInd = init_array(max_cart_class_size); grad_te_local = block_matrix(Molecule.num_atoms,3); /*------------------------------------------------- generate all unique shell quartets with ordering suitable for building the PK-matrix -------------------------------------------------*/ for (sii=0; sii BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; /*------------------------- Figure out the prefactor -------------------------*/ pfac = 1.0; if (si == sj) pfac *= 0.5; if (sk == sl) pfac *= 0.5; if (si == sk && sj == sl || si == sl && sj == sk) pfac *= 0.5; pfac *= 8.0; /*--- The factor of 8 needed for correlated densities ---*/ /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #endif } } } } /*--- Read in a shell quartet from disk ---*/ memset(FourInd,0,sizeof(double)*quartet_size); last_buf = TPDM.lastbuf; quartet_done = 0; sii_fao = BasisSet.shells[sii].fao-1; sjj_fao = BasisSet.shells[sjj].fao-1; skk_fao = BasisSet.shells[skk].fao-1; sll_fao = BasisSet.shells[sll].fao-1; do { if (buf_offset < buf_size) { i = TPDM.labels[buf_4offset] - sii_fao; if (i >= 0) { j = TPDM.labels[buf_4offset+1] - sjj_fao; k = TPDM.labels[buf_4offset+2] - skk_fao; l = TPDM.labels[buf_4offset+3] - sll_fao; if (switch_ij) { dum = i; i = j; j = dum; } if (switch_kl) { dum = k; k = l; l = dum; } if (switch_ijkl) { dum = i; i = k; k = dum; dum = j; j = l; l = dum; } offset = ((i*nj+j)*nk+k)*nl+l; FourInd[offset] += TPDM.values[buf_offset]* GTOs.bf_norm[orig_am[0]][i]* GTOs.bf_norm[orig_am[1]][j]* GTOs.bf_norm[orig_am[2]][k]* GTOs.bf_norm[orig_am[3]][l]; } else quartet_done = 1; buf_offset++; buf_4offset += 4; } else if (!last_buf) { iwl_buf_fetch(&TPDM); buf_offset = 0; buf_4offset = 0; last_buf = TPDM.lastbuf; } else { throw std::domain_error("The last TPDM quartet not marked"); } } while (!quartet_done); build_deriv1_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libderiv,num_prim_comb); center_i = BasisSet.shells[si].center-1; center_j = BasisSet.shells[sj].center-1; center_k = BasisSet.shells[sk].center-1; center_l = BasisSet.shells[sl].center-1; ddax = 0.0; for(k=0;k= PRINT_TEDERIV) print_atomvec("Two-electron contribution to the forces (a.u.)",grad_te_local); for(i=0;i #include #include #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"deriv1_quartet_data.h" #include"iwl_tebuf.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif using std::vector; using std::min; namespace psi { namespace CINTS { // For a set of SALCs, we need to be able to select coefficients of all nonzero derivatives // of a given shell quartet. It is best done when the relevant subset of the (sparse) SALC coefficient // matrix is pre-arranged in an array typedef struct { double coef; // contribution of this cartesian derivative to this SALC int cart_der; // cartesian derivative (for this quartet) [0,3*num_unique_atoms) int salc; // SALC index [0,num_atoms*3) } cdsalc_elem; void te_deriv1_ints() { const double toler = UserOptions.cutoff; const int num_coords = 3*Molecule.num_atoms; // total number of coordinates, symmetry-adapted or otherwise // max number of nonzero derivatives for a SO shell quartet = 4 (centers) * 3 (x,y,z) * maximum multiplicity of a nucleus const int max_num_cdsalcs_per_quartet = 12*Symmetry.max_stab_index; /*--- ASCII file to print integrals ---*/ FILE *d1eriout; /*--- Various data structures ---*/ struct iwlbuf* D1ERIOUT; /* IWL buffer for target integrals */ struct tebuf** tot_data; /* accum. for contracted integrals */ vector num_of_ints_in_totdata; /* counts how many integrals are in each tot_data */ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libderiv_t Libderiv; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif std::vector unique_center; unique_center.reserve(4); std::vector nuc(4); PSI_INT_LEAST64 total_te_count = 0; vector te_count_per_coord(num_coords,0); // keeps track of how many integrals were written out int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int i, j, k, l, m, ii, jj, kk, ll; int si, sj, sk, sl ; int sii, sjj, skk, sll , slll; int pi, pj, pk, pl; int max_pj, max_pl; int upk, num_unique_pk; int usi_arr[3], usj_arr[3], usk_arr[3], usl_arr[3]; int *sj_arr, *sk_arr, *sl_arr; int *sj_fbf_arr, *sk_fbf_arr, *sl_fbf_arr; int usi,usj,usk,usl; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size, class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p; double AB2, CD2; double pkblock_end_value = 0.0; double temp; vector so_int; { const int max_num_cdsalc_per_quartet = min(max_num_cdsalcs_per_quartet,CDSALCs.nsalcs); so_int.reserve(max_num_cdsalc_per_quartet); } /*--------------- Initialization ---------------*/ #if PRINT eriout = fopen("d1eriout.dat","w"); #endif D1ERIOUT = new struct iwlbuf[num_coords]; for(int c=0; c 1) { sj_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); } max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); init_libderiv1(&Libderiv, BasisSet.max_am-1, max_num_prim_comb, max_cart_class_size); /*------------------------------------ generate all unique shell quartets ------------------------------------*/ if(UserOptions.print_lvl >= PRINT_DEBUG) { fprintf(outfile," -Electron repulsion integrals:\n\n"); } for (int usii=0; usii BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am){ dum = usi; usi = usk; usk = dum; dum = usj; usj = usl; usl = dum; } si = Symmetry.us2s[usi]; sjj = Symmetry.us2s[usj]; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; int center_i = BasisSet.shells[si].center-1; int center_j = BasisSet.shells[sjj].center-1; int center_k = BasisSet.shells[skk].center-1; int center_l = BasisSet.shells[sll].center-1; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ usp_ij = &(Symmetry.us_pairs[usi][usj]); usp_kl = &(Symmetry.us_pairs[usk][usl]); stab_i = Symmetry.atom_positions[center_i]; stab_j = Symmetry.atom_positions[center_j]; stab_k = Symmetry.atom_positions[center_k]; stab_l = Symmetry.atom_positions[center_l]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; ni = (BasisSet.puream ? 2*BasisSet.shells[si].am - 1 : ioff[BasisSet.shells[si].am]); nj = (BasisSet.puream ? 2*BasisSet.shells[sjj].am - 1 : ioff[BasisSet.shells[sjj].am]); nk = (BasisSet.puream ? 2*BasisSet.shells[skk].am - 1 : ioff[BasisSet.shells[skk].am]); nl = (BasisSet.puream ? 2*BasisSet.shells[sll].am - 1 : ioff[BasisSet.shells[sll].am]); memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); memset(sj_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_fbf_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ij=0;dcr_ijAB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; AB2 = Libderiv.AB[0]*Libderiv.AB[0]+Libderiv.AB[1]*Libderiv.AB[1]+Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+Libderiv.CD[1]*Libderiv.CD[1]+Libderiv.CD[2]*Libderiv.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; const double pfac = lambda_T; #define NO_PERM_SYMM 0 #if NO_PERM_SYMM for (pi = 0; pi < np_i; pi++) { for (pj = 0; pj < np_j; pj++) { for (pk = 0; pk < np_k; pk++) { for (pl = 0; pl < np_l; pl++){ const int n = 1; #else for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ const int n = m * (1 + (sk == sl && pk != pl)); #endif #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #endif } } } } /*--- Compute the derivative integrals ---*/ size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; build_deriv1_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libderiv, num_prim_comb); for(int c=0; c<3; c++) { #ifdef NONDOUBLE_INTS for(int j=0;j= 1) { /*--- Non-C1 case ---*/ /*--- npi_ij - number of pairs of SOs arising from the ij pair of unique shells whose direct product transforms as irrep_ij npi_ij - number of pairs of SOs arising from the ij pair of unique shells whose direct product transforms as irrep_ij ---*/ /* loop over possible irrep of (ij| */ for(int irrep_ij=0;irrep_ijSOpair_npi[irrep_ij]) == 0) continue; /* loop over possible irrep of |kl) */ for(int irrep_kl=0;irrep_klSOpair_npi[irrep_kl]) == 0) continue; /* product of irrep_ij, irrep_kl, and irrep of the derivative operator must be totally symmetric */ int irrep_deriv = irrep_ij ^ irrep_kl; /* is there a derivative operator which transforms as irrep_deriv? */ int exists_nonzero_deriv = irreps_of_allowed_derivatives & (1 << irrep_deriv); if (!exists_nonzero_deriv) continue; for(ij=0;ijSOpair_bf_i[irrep_ij][ij]; /*--- BF index ---*/ j = usp_ij->SOpair_bf_j[irrep_ij][ij]; so_i = usp_ij->SOpair_so_i[irrep_ij][ij]; /*--- Absolute index of this SO from usi ---*/ so_j = usp_ij->SOpair_so_j[irrep_ij][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_bf_i[irrep_kl][kl]; l = usp_kl->SOpair_bf_j[irrep_kl][kl]; so_k = usp_kl->SOpair_so_i[irrep_kl][kl]; so_l = usp_kl->SOpair_so_j[irrep_kl][kl]; index = ind_offset + k*nl + l; /* position of this integral in quartet */ // zero out target SO integrals for(int salc=0; salc PRINT_DEBUG) { fprintf(outfile," -AO integral contribution:\n"); fprintf(outfile," AO integral -- deriv wrt coord %d ( %d %d | %d %d ) = %20.10lf\n", elem.cart_der, bf_i, bf_j, bf_k, bf_l, ao_integral); fprintf(outfile," SO pfac = %lf deriv SALC pfac = %lf\n", so2ao_pfac, elem.coef); fprintf(outfile," SO integral -- deriv wrt coord %d ( %d %d | %d %d ) += %20.10lf = %20.10lf\n\n", salc_thisquartet2all[salc], so_i, so_j, so_k, so_l, so_contribution, so_int[salc]); } } } // add nonzero target integrals to the appropriate buffer for(int salc=0; salc toler) { const int abs_salc = salc_thisquartet2all[salc]; const int curr_integral = num_of_ints_in_totdata[abs_salc]; struct tebuf& tbuf = tot_data[abs_salc][curr_integral]; tbuf.val = value; tbuf.i = (short int) so_i; tbuf.j = (short int) so_j; tbuf.k = (short int) so_k; tbuf.l = (short int) so_l; ++num_of_ints_in_totdata[abs_salc]; have_nonzero_integrals = true; } } } } } } } else { /*--- C1 symmetry ---*/ iimax = ni - 1; kkmax = nk - 1; for(ii=0; ii <= iimax; ii++){ jjmax = (usi==usj) ? ii : nj - 1; for(jj=0; jj <= jjmax; jj++){ for(kk=0; kk <= kkmax; kk++){ llmax = (usk==usl) ? kk : nl - 1; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); /*if(fabs(data[index])>toler){ i = ii + ioffset; j = jj + joffset; k = kk + koffset; l = ll + loffset; if (i < j) SWAP(i,j); if (k < l) SWAP(k,l); if ((i < k) || (i == k && j < l)) { SWAP(i,k); SWAP(j,l); }*/ /*tot_data[num].i = (short int) i; tot_data[num].j = (short int) j; tot_data[num].k = (short int) k; tot_data[num].l = (short int) l; tot_data[num].val = data[index];*/ /*num++; }*/ } } } } } // // Write out the integrals // if (have_nonzero_integrals) { /* Let's see if we need to write out something */ // for each integral buffer which could have contributions from this SO quartet for(int salc=0; salc 0) { te_count_per_coord[abs_salc] += nints; total_te_count += nints; iwl_buf_wrt_struct_nocut(&(D1ERIOUT[abs_salc]), tot_data[abs_salc], nints); // print out the integrals, if needed if(UserOptions.print_lvl >= PRINT_DEBUG) { for(int i=0; i 1) { free(sj_fbf_arr); free(sk_fbf_arr); free(sl_fbf_arr); } #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #else free_fjt_table(&fjt_table); free_fjt(); #endif return; } }; }; psi3/src/bin/cints/Default_Deriv1/te_deriv1_ints.h0000644000101500007650000000034310754663017020557 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv1_te_deriv1_ints_h #define _psi_src_bin_cints_Default_Deriv1_te_deriv1_ints_h /*! \file \ingroup CINTS */ namespace psi { namespace CINTS { void te_deriv1_ints(); } } #endif psi3/src/bin/cints/Default_Deriv1/te_deriv1_print.cc0000644000101500007650000002275310754663017021105 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "small_fns.h" #include namespace psi { namespace CINTS { void te_deriv1_print(void) { Libderiv_t Libderiv; /* Integrals library object */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif int max_class_size; int max_cart_class_size; int max_num_prim_comb, num_prim_comb; int max_num_unique_quartets; int *sj_arr, *sk_arr, *sl_arr; int usii, usjj, uskk, usll; PSI_INT_LEAST64 quartet_index; int sii, sjj, skk, sll; int num_unique_quartets; int ni, nj, nk, nl; int si, sj, sk, sl; int plquartet, dum; int switch_ij, switch_kl, switch_ijkl; int np_i, np_j, np_k, np_l; int quartet_size; int orig_am[4], am; struct shell_pair *sp_ij, *sp_kl; double AB2, CD2; int pi, pj, pk, pl; int si_fao, sj_fao, sk_fao, sl_fao; int ao_i, ao_j, ao_k, ao_l; int count; int center_i, center_j, center_k, center_l; int iout, jout, kout, lout; int i, k, ij, kl; double *PrintFourInd; double **derivs; FILE **out; char lbl[20]; /* some error checking up front */ if(Symmetry.nirreps > 1 || BasisSet.puream) { fprintf(outfile, "\nThe derivative integral printing code will almost certainly fail\n"); fprintf(outfile, "for non-C1 and/or puream cases. Exiting.\n"); throw std::domain_error("no symmetry or puream cases allowed when printing deriv. ints."); } /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv1(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_class_size); PrintFourInd = init_array(max_cart_class_size); derivs = block_matrix(Molecule.num_atoms*3,max_cart_class_size); out = (FILE **) malloc(Molecule.num_atoms * 3 * sizeof(FILE *)); for(i=0; i < Molecule.num_atoms*3; i++) { sprintf(lbl,"eri%d.dat", i); ffile(&out[i], lbl, 0); } max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); for (usii=0; usii BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { for (pj = 0; pj < np_j; pj++) { for (pk = 0; pk < np_k; pk++) { for (pl = 0; pl < np_l; pl++){ #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, 1); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, 1); #endif } } } } si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; count = 0; for (ao_i = si_fao; ao_i < si_fao+ni; ao_i++) for (ao_j = sj_fao; ao_j < sj_fao+nj; ao_j++) for (ao_k = sk_fao; ao_k < sk_fao+nk; ao_k++) for (ao_l = sl_fao; ao_l < sl_fao+nl; ao_l++) { PrintFourInd[count] = GTOs.bf_norm[orig_am[0]][ao_i-si_fao] * GTOs.bf_norm[orig_am[1]][ao_j-sj_fao] * GTOs.bf_norm[orig_am[2]][ao_k-sk_fao] * GTOs.bf_norm[orig_am[3]][ao_l-sl_fao]; count++; } build_deriv1_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libderiv,num_prim_comb); center_i = BasisSet.shells[si].center-1; center_j = BasisSet.shells[sj].center-1; center_k = BasisSet.shells[sk].center-1; center_l = BasisSet.shells[sl].center-1; zero_mat(derivs, Molecule.num_atoms*3, max_cart_class_size); for(k=0; k < quartet_size; k++) { derivs[center_i*3+0][k] += Libderiv.ABCD[0][k] * PrintFourInd[k]; derivs[center_i*3+1][k] += Libderiv.ABCD[1][k] * PrintFourInd[k]; derivs[center_i*3+2][k] += Libderiv.ABCD[2][k] * PrintFourInd[k]; derivs[center_j*3+0][k] -= (Libderiv.ABCD[0][k] + Libderiv.ABCD[6][k] + Libderiv.ABCD[9][k]) * PrintFourInd[k]; derivs[center_j*3+1][k] -= (Libderiv.ABCD[1][k] + Libderiv.ABCD[7][k] + Libderiv.ABCD[10][k]) * PrintFourInd[k]; derivs[center_j*3+2][k] -= (Libderiv.ABCD[2][k] + Libderiv.ABCD[8][k] + Libderiv.ABCD[11][k]) * PrintFourInd[k]; derivs[center_k*3+0][k] += Libderiv.ABCD[6][k] * PrintFourInd[k]; derivs[center_k*3+1][k] += Libderiv.ABCD[7][k] * PrintFourInd[k]; derivs[center_k*3+2][k] += Libderiv.ABCD[8][k] * PrintFourInd[k]; derivs[center_l*3+0][k] += Libderiv.ABCD[9][k] * PrintFourInd[k]; derivs[center_l*3+1][k] += Libderiv.ABCD[10][k] * PrintFourInd[k]; derivs[center_l*3+2][k] += Libderiv.ABCD[11][k] * PrintFourInd[k]; } for(k=0; k < Molecule.num_atoms*3; k++) { count = 0; for (ao_i = si_fao; ao_i < si_fao+ni; ao_i++) for (ao_j = sj_fao; ao_j < sj_fao+nj; ao_j++) for (ao_k = sk_fao; ao_k < sk_fao+nk; ao_k++) for (ao_l = sl_fao; ao_l < sl_fao+nl; ao_l++) { if(fabs(derivs[k][count]) > 1e-6) { iout = ao_i; jout = ao_j; kout = ao_k; lout = ao_l; if(switch_ijkl) { dum = iout; iout = kout; kout = dum; dum = jout; jout = lout; lout = dum; } if(switch_kl) { dum = kout; kout = lout; lout = dum; } if(switch_ij) { dum = iout; iout = jout; jout = dum; } ij = INDEX(iout,jout); kl = INDEX(kout,lout); if(iout >= jout && kout >= lout && ij >= kl) fprintf(out[k], "%3d %3d %3d %3d %20.14f\n", iout, jout, kout, lout, derivs[k][count]); } count++; } } } /* end of loop over symmetry unique quartets */ } /* end of unique shell loops */ free(sj_arr); free(sk_arr); free(sl_arr); free(PrintFourInd); for(i=0; i < Molecule.num_atoms*3; i++) fclose(out[i]); free(out); free_block(derivs); free_libderiv(&Libderiv); #ifndef USE_TAYLOR_FM free_fjt_table(&fjt_table); #endif return; } }; } psi3/src/bin/cints/Default_Deriv1/te_deriv1_scf.cc0000644000101500007650000000451310757640026020514 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "small_fns.h" #include #define USE_SYM 1 namespace psi { namespace CINTS { extern void *te_deriv1_scf_thread(void *); extern void *te_deriv1_scf_thread_symm(void *); extern pthread_mutex_t deriv1_mutex; extern double **grad_te; extern void te_deriv1_print(void); void te_deriv1_scf() { pthread_attr_t thread_attr; pthread_t *thread_id; int i; /*--------------- Initialization ---------------*/ #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4+DERIV_LVL,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4+DERIV_LVL); #endif init_libderiv_base(); grad_te = block_matrix(Molecule.num_atoms,3); thread_id = (pthread_t *) malloc(UserOptions.num_threads*sizeof(pthread_t)); pthread_attr_init(&thread_attr); pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM); pthread_mutex_init(&deriv1_mutex,NULL); #if USE_SYM for(long int i=0;i= PRINT_TEDERIV) print_atomvec("Two-electron contribution to the forces (a.u.)",grad_te); for(i=0;i #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "small_fns.h" namespace psi { namespace CINTS { void *te_deriv1_scf_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; extern double **grad_te; extern pthread_mutex_t deriv1_mutex; /* Used to lock "global" gradient matrix grad_te during update */ /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; Libderiv_t Libderiv; /* Integrals library object */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif PSI_INT_LEAST64 quartet_index; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; register int i, j, k, l, m, ii, jj, kk, ll; register int si, sj, sk, sl ; register int sii, sjj, skk, sll, slll; register int pi, pj, pk, pl ; int max_pj, max_pl; register int pii, pjj, pkk, pll ; int switch_ij, switch_kl, switch_ijkl; int center_i, center_j, center_k, center_l; int class_size; int max_class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, quartet_size; int si_fao, sj_fao, sk_fao, sl_fao; int sii_fao, sjj_fao, skk_fao, sll_fao; int ao_i, imax, ao_j, jmax, ao_k, kmax, ao_l, lmax; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p, max_num_prim_comb; int buf_offset, buf_4offset, buf_size, last_buf; int quartet_done, offset; int mosh_i, mosh_j; double AB2, CD2; double *FourInd; double **grad_te_local; double pfac; double temp; double alpha, beta; double **dens_i, **dens_j; double ddax, dday, ddaz, ddbx, ddby, ddbz, ddcx, ddcy, ddcz, dddx, dddy, dddz; /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv1(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_class_size); FourInd = init_array(max_cart_class_size); grad_te_local = block_matrix(Molecule.num_atoms,3); /*------------------------------------------------- generate all unique shell quartets with ordering suitable for building the PK-matrix -------------------------------------------------*/ for (sii=0; sii BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; /*------------------------- Figure out the prefactor -------------------------*/ pfac = 1.0; if (si == sj) pfac *= 0.5; if (sk == sl) pfac *= 0.5; if (si == sk && sj == sl || si == sl && sj == sk) pfac *= 0.5; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac); #endif } } } } /*------------- Form FourInd -------------*/ si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; if (UserOptions.reftype == rhf || UserOptions.reftype == uhf) { /*--- RHF or UHF ---*/ count = 0; for (ao_i = si_fao; ao_i < si_fao+ni; ao_i++) for (ao_j = sj_fao; ao_j < sj_fao+nj; ao_j++) for (ao_k = sk_fao; ao_k < sk_fao+nk; ao_k++) for (ao_l = sl_fao; ao_l < sl_fao+nl; ao_l++) { FourInd[count] = (4.0*Dens[ao_i][ao_j]*Dens[ao_k][ao_l] - Dens[ao_i][ao_k]*Dens[ao_j][ao_l] - Dens[ao_i][ao_l]*Dens[ao_k][ao_j])* GTOs.bf_norm[orig_am[0]][ao_i-si_fao]* GTOs.bf_norm[orig_am[1]][ao_j-sj_fao]* GTOs.bf_norm[orig_am[2]][ao_k-sk_fao]* GTOs.bf_norm[orig_am[3]][ao_l-sl_fao]; count++; } } else { /*--- ROHF or TCSCF ---*/ if (am) memset((char *) FourInd, 0, sizeof(double)*quartet_size); else FourInd[0] = 0.0; for(mosh_i=0;mosh_i #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "small_fns.h" namespace psi { namespace CINTS { void *te_deriv1_scf_thread_symm(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; extern double **grad_te; extern pthread_mutex_t deriv1_mutex; /* Used to lock "global" gradient matrix grad_te during update */ /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; Libderiv_t Libderiv; /* Integrals library object */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif PSI_INT_LEAST64 quartet_index; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int i, j, k, l, m, ii, jj, kk, ll; int si, sj, sk, sl ; int sii, sjj, skk, sll, slll; int usi, usj, usk, usl; int usii, usjj, uskk, usll, uslll; int pi, pj, pk, pl ; int max_pj, max_pl; register int pii, pjj, pkk, pll ; int switch_ij, switch_kl, switch_ijkl; int center_i, center_j, center_k, center_l; int *sj_arr, *sk_arr, *sl_arr; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int max_num_unique_quartets; int plquartet; int class_size; int max_class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, quartet_size; int si_fao, sj_fao, sk_fao, sl_fao; int sii_fao, sjj_fao, skk_fao, sll_fao; int ao_i, imax, ao_j, jmax, ao_k, kmax, ao_l, lmax; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p, max_num_prim_comb; int buf_offset, buf_4offset, buf_size, last_buf; int quartet_done, offset; int mosh_i, mosh_j; double AB2, CD2; double *FourInd; double **grad_te_local; double pfac; double temp; double alpha, beta; double **dens_i, **dens_j; double ddax, dday, ddaz, ddbx, ddby, ddbz, ddcx, ddcy, ddcz, dddx, dddy, dddz; /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv1(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_class_size); FourInd = init_array(max_cart_class_size); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); grad_te_local = block_matrix(Molecule.num_atoms,3); /*-------------------------------------------- generate all symmetry unique shell quartets --------------------------------------------*/ for (usii=0; usii 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; ni = (BasisSet.puream ? 2*BasisSet.shells[si].am - 1 : ioff[BasisSet.shells[si].am]); nj = (BasisSet.puream ? 2*BasisSet.shells[sjj].am - 1 : ioff[BasisSet.shells[sjj].am]); nk = (BasisSet.puream ? 2*BasisSet.shells[skk].am - 1 : ioff[BasisSet.shells[skk].am]); nl = (BasisSet.puream ? 2*BasisSet.shells[sll].am - 1 : ioff[BasisSet.shells[sll].am]); class_size = ni*nj*nk*nl; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ij=0;dcr_ij BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; switch_ijkl = 1; } ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; /*------------------------- Figure out the prefactor -------------------------*/ pfac = 1.0; if (usi == usj) pfac *= 0.5; if (usk == usl) pfac *= 0.5; if (usi == usk && usj == usl || usi == usl && usj == usk) pfac *= 0.5; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac*lambda_T); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*pfac*lambda_T); #endif } } } } /*------------- Form FourInd -------------*/ si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; if (UserOptions.reftype == rhf || UserOptions.reftype == uhf) { /*--- RHF or UHF ---*/ count = 0; for (ao_i = si_fao; ao_i < si_fao+ni; ao_i++) for (ao_j = sj_fao; ao_j < sj_fao+nj; ao_j++) for (ao_k = sk_fao; ao_k < sk_fao+nk; ao_k++) for (ao_l = sl_fao; ao_l < sl_fao+nl; ao_l++) { FourInd[count] = (4.0*Dens[ao_i][ao_j]*Dens[ao_k][ao_l] - Dens[ao_i][ao_k]*Dens[ao_j][ao_l] - Dens[ao_i][ao_l]*Dens[ao_k][ao_j])* GTOs.bf_norm[orig_am[0]][ao_i-si_fao]* GTOs.bf_norm[orig_am[1]][ao_j-sj_fao]* GTOs.bf_norm[orig_am[2]][ao_k-sk_fao]* GTOs.bf_norm[orig_am[3]][ao_l-sl_fao]; count++; } } else { /*--- ROHF or TCSCF ---*/ if (am) memset((char *) FourInd, 0, sizeof(double)*quartet_size); else FourInd[0] = 0.0; for(mosh_i=0;mosh_i #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moinfo.h" #include"compute_scf_opdm.h" #include"read_gen_opdm.h" #include"enuc_deriv2.h" #include"oe_deriv2.h" #include"te_deriv2_scf.h" #include"file11.h" #define DO_NUC 1 #define DO_OE 1 #define DO_TE 1 namespace psi { namespace CINTS { //! Driver for integral second derivatives. void deriv2(void) { int i, j, ij, coord, ntri, natom, size; char *label; double **tmpmat, **my_grad, *outbuf; double **C; /*--- Hessian in the canonical frame ---*/ Hess = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); /* Derivative Fock and overlap matrices */ F = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); S = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); HDS = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); for(i=0; i < Molecule.num_atoms*3; i++) { F[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); S[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); HDS[i] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); } init_moinfo(); compute_scf_opdm(); #if DO_NUC enuc_deriv2(); #endif #if DO_OE oe_deriv2(); #endif /* Multiply the F's by 2 -- accounts for orbital population factor */ for(coord=0; coord < Molecule.num_atoms*3; coord++) { for(i=0; i < BasisSet.num_ao; i++) for(j=0; j < BasisSet.num_ao; j++) F[coord][i][j] *= 2.0; } #if DO_TE te_deriv2_scf(); /* te_deriv2_scf_symm(); */ #endif /* divide the whole thing by 2 */ for(coord=0; coord < Molecule.num_atoms*3; coord++) { for(i=0; i < BasisSet.num_ao; i++) for(j=0; j < BasisSet.num_ao; j++) F[coord][i][j] *= 0.5; } /* symmetrize the F's and S's */ for(coord=0; coord < Molecule.num_atoms*3; coord++) { if (UserOptions.print_lvl >= PRINT_OEDERIV) { fprintf(outfile, "AO-basis Overlap Derivs (Pre-Symm) (%d)", coord); print_mat(S[coord],BasisSet.num_ao,BasisSet.num_ao,outfile); } for(i=0; i < BasisSet.num_ao; i++) { for(j=0; j <= i; j++) { if(i!=j) { F[coord][i][j] = F[coord][j][i] = 0.5 * (F[coord][i][j] + F[coord][j][i]); S[coord][i][j] = S[coord][j][i] = 0.5 * (S[coord][i][j] + S[coord][j][i]); } } } if (UserOptions.print_lvl >= PRINT_OEDERIV) { fprintf(outfile, "AO-basis Overlap Derivs (%d)", coord); print_mat(S[coord],BasisSet.num_ao,BasisSet.num_ao,outfile); } } /* Transform Fock and Overlap derivatives to the MO basis */ tmpmat = block_matrix(MOInfo.num_mo, BasisSet.num_ao); for(i=0; i < Molecule.num_atoms*3; i++) { C_DGEMM('n','n',MOInfo.num_mo,BasisSet.num_ao,BasisSet.num_ao,1.0, &(MOInfo.scf_evec[0][0][0]),BasisSet.num_ao,&(F[i][0][0]),BasisSet.num_ao, 0.0,&(tmpmat[0][0]),BasisSet.num_ao); C_DGEMM('n','t',MOInfo.num_mo,MOInfo.num_mo,BasisSet.num_ao,1.0, &(tmpmat[0][0]),BasisSet.num_ao,&(MOInfo.scf_evec[0][0][0]),BasisSet.num_ao, 0.0,&(F[i][0][0]),BasisSet.num_ao); C_DGEMM('n','n',MOInfo.num_mo,BasisSet.num_ao,BasisSet.num_ao,1.0, &(MOInfo.scf_evec[0][0][0]),BasisSet.num_ao,&(S[i][0][0]),BasisSet.num_ao, 0.0,&(tmpmat[0][0]),BasisSet.num_ao); C_DGEMM('n','t',MOInfo.num_mo,MOInfo.num_mo,BasisSet.num_ao,1.0, &(tmpmat[0][0]),BasisSet.num_ao,&(MOInfo.scf_evec[0][0][0]),BasisSet.num_ao, 0.0,&(S[i][0][0]),BasisSet.num_ao); } free_block(tmpmat); /* write derivative Fock and overlap derivatives to disk */ ntri = MOInfo.num_mo * (MOInfo.num_mo + 1)/2; outbuf = init_array(ntri); label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(coord=0; coord < Molecule.num_atoms*3; coord++) { for(i=0, ij=0; i < MOInfo.num_mo; i++) { for(j=0; j <= i; j++, ij++) { /* Lower triangles only */ outbuf[ij] = F[coord][i][j]; } } sprintf(label, "MO-basis Fock Derivs (%d)", coord); iwl_wrtone(PSIF_OEI, label, ntri, outbuf); if (UserOptions.print_lvl >= PRINT_OEDERIV) { fprintf(outfile," -%s\n",label); print_mat(F[coord],MOInfo.num_mo,MOInfo.num_mo,outfile); } for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; } for(coord=0; coord < Molecule.num_atoms*3; coord++) { for(i=0, ij=0; i < MOInfo.num_mo; i++) { for(j=0; j <= i; j++, ij++) { /* Lower triangles only */ outbuf[ij] = S[coord][i][j]; } } sprintf(label, "MO-basis Overlap Derivs (%d)", coord); iwl_wrtone(PSIF_OEI, label, ntri, outbuf); if (UserOptions.print_lvl >= PRINT_OEDERIV) { fprintf(outfile," -%s\n",label); print_mat(S[coord],MOInfo.num_mo,MOInfo.num_mo,outfile); } for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; } /* Write half-differentiated overlap integrals to disk */ size = BasisSet.num_ao * BasisSet.num_ao; for(coord=0; coord < Molecule.num_atoms*3; coord++) { sprintf(label, "AO-basis Half-Diff Overlap (%d)", coord); psio_open(PSIF_OEI, PSIO_OPEN_OLD); psio_write_entry(PSIF_OEI, label, (char *) HDS[coord][0], size*sizeof(double)); psio_close(PSIF_OEI, 1); if (UserOptions.print_lvl >= PRINT_OEDERIV) { fprintf(outfile," -%s\n",label); print_mat(HDS[coord],BasisSet.num_ao,BasisSet.num_ao,outfile); } for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; } free(outbuf); free(label); /* print_atommat("Skeleton contribution to the molecular Hessian (a.u.)",Hess); */ natom = Molecule.num_atoms; psio_open(PSIF_DERINFO, PSIO_OPEN_NEW); psio_write_entry(PSIF_DERINFO, "Skeleton Hessian", (char *) Hess[0], natom*3*natom*3*sizeof(double)); psio_close(PSIF_DERINFO, 1); for(i=0; i < Molecule.num_atoms*3; i++) { free_block(F[i]); free_block(S[i]); free_block(HDS[i]); } free(F); free(S); free(HDS); free_block(Hess); cleanup_moinfo(); return; } };}; psi3/src/bin/cints/Default_Deriv2/deriv2.h0000644000101500007650000000032410754417572017036 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv2_deriv2_h #define _psi_src_bin_cints_Default_Deriv2_deriv2_h /*! \file deriv2.h \ingroup CINTS */ namespace psi { namespace CINTS { void deriv2(); } } #endif psi3/src/bin/cints/Default_Deriv2/enuc_deriv2.cc0000644000101500007650000000517310754417572020215 0ustar crawdad/*! \file enuc_deriv2.cc \ingroup CINTS \brief Second derivatives of the nuclear repulsion */ #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"symmetrize.h" #include namespace psi { namespace CINTS { //! Second derivatives of the nuclear repulsion void enuc_deriv2() { int i, j; int coord_ix, coord_iy, coord_iz, coord_jx, coord_jy, coord_jz; double x, y, z, x2, y2, z2; double r, r2, r5, pfac; double **hess_enuc; if (Molecule.num_atoms == 0) return; hess_enuc = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); for(i=1; i= PRINT_OEDERIV) print_atommat("Nuclear repulsion component of the molecular Hessian (a.u.)",hess_enuc); add_mat(Hess,hess_enuc,Hess,Molecule.num_atoms*3,Molecule.num_atoms*3); free_block(hess_enuc); return; } };}; psi3/src/bin/cints/Default_Deriv2/enuc_deriv2.h0000644000101500007650000000034010754417572020046 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv2_enuc_deriv2_h #define _psi_src_bin_cints_Default_Deriv2_enuc_deriv2_h /*! \file enuc_deriv2.h \ingroup CINTS */namespace psi { namespace CINTS { void enuc_deriv2(); }} #endif psi3/src/bin/cints/Default_Deriv2/oe_deriv2.cc0000644000101500007650000015476210754417572017677 0ustar crawdad/*! \file oe_deriv2.cc \ingroup CINTS \brief One-electron integral second derivatives */ #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "oe_osrr.h" #include "oe_deriv2_osrr.h" #include"symmetrize.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #endif #include "small_fns.h" #define INCLUDE_OVERLAP 1 #define INCLUDE_KINETIC 1 #define INCLUDE_POTENTIAL 1 #define INCLUDE_VAA 1 #define INCLUDE_VCA 1 #define INCLUDE_VCC 1 namespace psi { namespace CINTS { /*--- These frequently used numbers are to avoid costs of passing parameters ---*/ static double oo2g, oog, gam; /*------------------------------- Explicit function declarations -------------------------------*/ static double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double f_n(int k, int l1, int l2, double A, double B); static double int_pow(double a, int p); /*!------------------------------------------------------------- This function computes derivatives of one-electron integrals -------------------------------------------------------------*/ void oe_deriv2() { /* Computing up to second-order derivatives here */ const int deriv_lvl = 2; const int deriv0_lvl = 0; const int deriv1_lvl = 1; const int deriv2_lvl = 2; double **hess_ov, **hess_oe; struct coordinates PA, PB, AB, PC; struct shell_pair *sp; int i, j, k, l, ii, jj, kk, ll; int count; int si, sj; int np_i, np_j; int si_fao, sj_fao; int I, J; int sz; int l1, l2, m1, m2, n1, n2; int ioffset, joffset ; int ij; int ijpack; int h1; int am; int dimension ; int ni,li,nj,lj,ai,aj; int am_i, am_j; int ixm, iym, izm, jxm, jym, jzm; int ixm1, iym1, izm1, jxm1, jym1, jzm1; int indmax, iind,jind; int atom, atom1, atom2; int coord_ax, coord_ay, coord_az, coord_bx, coord_by, coord_bz, coord_cx, coord_cy, coord_cz; int bf; int iimax, jjmax; double a1, a2; double ab2; double tmp; double inorm, jnorm, over_pf; double norm_pf, normover_pf, dens_pf, wdens_pf, zdens_pf, znormover_pf, hds_norm_pf; double twozeta_a, twozeta_b, upuppfac, updownpfac, s_int, t_int, v_int; double *ptr1, *ptr2, norm1, norm12; double ***AI0; double ***AIX, ***AIY, ***AIZ; double ***AIXX, ***AIXY, ***AIXZ, ***AIYY, ***AIYZ, ***AIZZ; #ifdef USE_TAYLOR_FM /*--- +4*deriv_lvl because of the way we invoke AI_Deriv2_OSrecurs ---*/ init_Taylor_Fm_Eval(BasisSet.max_am*4-4+4*deriv_lvl,UserOptions.cutoff); #endif hess_ov = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); hess_oe = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); indmax = (BasisSet.max_am+deriv_lvl-1)*(BasisSet.max_am+deriv_lvl)*(BasisSet.max_am+deriv_lvl)+1; AI0 = init_box(indmax,indmax,2*(BasisSet.max_am+deriv2_lvl)+1); AIX = init_box(indmax,indmax,2*(BasisSet.max_am+deriv1_lvl)+1); AIY = init_box(indmax,indmax,2*(BasisSet.max_am+deriv1_lvl)+1); AIZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv1_lvl)+1); AIXX = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIXY = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIXZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIYY = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIYZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); AIZZ = init_box(indmax,indmax,2*(BasisSet.max_am+deriv0_lvl)+1); for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; twozeta_a = 2.0 * a1; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; twozeta_b = 2.0 * a2; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj ; I = si_fao + ai; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; J = sj_fao + aj; if (si == sj && ai < aj) break; norm_pf = (GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]); dens_pf = Dens[I][J]; dens_pf *= norm_pf; wdens_pf = (-1.0)*Lagr[I][J]; wdens_pf *= norm_pf; hds_norm_pf = norm_pf; if (I != J) { dens_pf *= 2.0; wdens_pf *= 2.0; norm_pf *= 2.0; } /*--- A factor of 1/2 for correlated Lagrangians ---*/ if (strcmp(UserOptions.wfn,"SCF")) wdens_pf *= 0.5; /*---------------------------------- Half-derivative overap integrals ----------------------------------*/ /*--- d/dAx ---*/ tmp = 2.0*a1*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); HDS[coord_ax][I][J] += tmp*hds_norm_pf; /*--- d/dAy ---*/ tmp = 2.0*a1*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); HDS[coord_ay][I][J] += tmp*hds_norm_pf; /*--- d/dAz ---*/ tmp = 2.0*a1*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); HDS[coord_az][I][J] += tmp*hds_norm_pf; if(I != J) { /*--- d/dAx ---*/ tmp = 2.0*a2*overlap_int(a2, l2+1, m2, n2, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); if (l2) tmp -= l2*overlap_int(a2, l2-1, m2, n2, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); HDS[coord_bx][J][I] += tmp*hds_norm_pf; /*--- d/dAy ---*/ tmp = 2.0*a2*overlap_int(a2, l2, m2+1, n2, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); if (m2) tmp -= m2*overlap_int(a2, l2, m2-1, n2, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); HDS[coord_by][J][I] += tmp*hds_norm_pf; /*--- d/dAz ---*/ tmp = 2.0*a2*overlap_int(a2, l2, m2, n2+1, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); if (n2) tmp -= n2*overlap_int(a2, l2, m2, n2-1, jnorm, a1, l1, m1, n1, inorm, AB, PB, PA); HDS[coord_bz][J][I] += tmp*hds_norm_pf; } /*---------------------------------- First derivative overap integrals ----------------------------------*/ /*--- d/dAx ---*/ tmp = 2.0*a1*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); S[coord_ax][I][J] += tmp*norm_pf; /*--- d/dAy ---*/ tmp = 2.0*a1*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); S[coord_ay][I][J] += tmp*norm_pf; /*--- d/dAz ---*/ tmp = 2.0*a1*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); S[coord_az][I][J] += tmp*norm_pf; /*--- d/dBx ---*/ tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); S[coord_bx][I][J] += tmp*norm_pf; /*--- d/dBy ---*/ tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); S[coord_by][I][J] += tmp*norm_pf; /*--- d/dBz ---*/ tmp = 2.0*a2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); S[coord_bz][I][J] += tmp*norm_pf; /*------------------------------------------ First derivative kinetic energy integrals ------------------------------------------*/ /*--- d/dAx ---*/ tmp = 2.0*a1*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); F[coord_ax][I][J] += tmp*norm_pf; /*--- d/dAy ---*/ tmp = 2.0*a1*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); F[coord_ay][I][J] += tmp*norm_pf; /*--- d/dAz ---*/ tmp = 2.0*a1*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); F[coord_az][I][J] += tmp*norm_pf; /*--- d/dBx ---*/ tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= l2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); F[coord_bx][I][J] += tmp*norm_pf; /*--- d/dBy ---*/ tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= m2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); F[coord_by][I][J] += tmp*norm_pf; /*--- d/dBz ---*/ tmp = 2.0*a2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= n2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); F[coord_bz][I][J] += tmp*norm_pf; /*------------------------------------ Second derivative overlap integrals ------------------------------------*/ #if INCLUDE_OVERLAP s_int = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); upuppfac = twozeta_a*twozeta_a; /*--- d2/dAx2 ---*/ tmp = upuppfac*overlap_int(a1, l1+2, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = l1 + 1; if (l1) updownpfac += l1; tmp -= twozeta_a*updownpfac*s_int; if (l1 >= 2) tmp += l1*(l1-1)*overlap_int(a1, l1-2, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ax][coord_ax] += tmp*wdens_pf; /*--- d2/dAy2 ---*/ tmp = upuppfac*overlap_int(a1, l1, m1+2, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = m1 + 1; if (m1) updownpfac += m1; tmp -= twozeta_a*updownpfac*s_int; if (m1 >= 2) tmp += m1*(m1-1)*overlap_int(a1, l1, m1-2, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ay][coord_ay] += tmp*wdens_pf; /*--- d2/dAz2 ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1+2, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = n1 + 1; if (n1) updownpfac += n1; tmp -= twozeta_a*updownpfac*s_int; if (n1 >= 2) tmp += n1*(n1-1)*overlap_int(a1, l1, m1, n1-2, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_az][coord_az] += tmp*wdens_pf; /*--- d2/dAxdAy ---*/ tmp = upuppfac*overlap_int(a1, l1+1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_a*l1*overlap_int(a1, l1-1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_a*m1*overlap_int(a1, l1+1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && m1 > 0) tmp += l1*m1*overlap_int(a1, l1-1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ax][coord_ay] += tmp*wdens_pf; /*--- d2/dAxdAz ---*/ tmp = upuppfac*overlap_int(a1, l1+1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_a*l1*overlap_int(a1, l1-1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_a*n1*overlap_int(a1, l1+1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && n1 > 0) tmp += l1*n1*overlap_int(a1, l1-1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ax][coord_az] += tmp*wdens_pf; /*--- d2/dAydAz ---*/ tmp = upuppfac*overlap_int(a1, l1, m1+1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_a*m1*overlap_int(a1, l1, m1-1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_a*n1*overlap_int(a1, l1, m1+1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1 > 0 && n1 > 0) tmp += m1*n1*overlap_int(a1, l1, m1-1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ay][coord_az] += tmp*wdens_pf; upuppfac = twozeta_b*twozeta_b; /*--- d2/dBx2 ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2+2, m2, n2, jnorm, AB, PA, PB); updownpfac = l2 + 1; if (l2) updownpfac += l2; tmp -= twozeta_b*updownpfac*s_int; if (l2 >= 2) tmp += l2*(l2-1)*overlap_int(a1, l1, m1, n1, inorm, a2, l2-2, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_bx][coord_bx] += tmp*wdens_pf; /*--- d2/dBy2 ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+2, n2, jnorm, AB, PA, PB); updownpfac = m2 + 1; if (m2) updownpfac += m2; tmp -= twozeta_b*updownpfac*s_int; if (m2 >= 2) tmp += m2*(m2-1)*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-2, n2, jnorm, AB, PA, PB); hess_ov[coord_by][coord_by] += tmp*wdens_pf; /*--- d2/dBz2 ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+2, jnorm, AB, PA, PB); updownpfac = n2 + 1; if (n2) updownpfac += n2; tmp -= twozeta_b*updownpfac*s_int; if (n2 >= 2) tmp += n2*(n2-1)*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-2, jnorm, AB, PA, PB); hess_ov[coord_bz][coord_bz] += tmp*wdens_pf; /*--- d2/dBxdBy ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2+1, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_b*l2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_b*m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2-1, n2, jnorm, AB, PA, PB); if (l2 > 0 && m2 > 0) tmp += l2*m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2-1, n2, jnorm, AB, PA, PB); hess_ov[coord_bx][coord_by] += tmp*wdens_pf; /*--- d2/dBxdBz ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2+1, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_b*l2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_b*n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2-1, jnorm, AB, PA, PB); if (l2 > 0 && n2 > 0) tmp += l2*n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2-1, jnorm, AB, PA, PB); hess_ov[coord_bx][coord_bz] += tmp*wdens_pf; /*--- d2/dBydBz ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2+1, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_b*m2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_b*n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2-1, jnorm, AB, PA, PB); if (m2 > 0 && n2 > 0) tmp += m2*n2*overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2-1, jnorm, AB, PA, PB); hess_ov[coord_by][coord_bz] += tmp*wdens_pf; upuppfac = twozeta_a*twozeta_b; /*--- d2/dAxdBx ---*/ tmp = upuppfac*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && l2 > 0) tmp += l1*l2*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (coord_ax == coord_bx) tmp *= 2.0; hess_ov[coord_ax][coord_bx] += tmp*wdens_pf; /*--- d2/dAxdBy ---*/ tmp = upuppfac*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (l1 > 0 && m2 > 0) tmp += l1*m2*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); hess_ov[coord_ax][coord_by] += tmp*wdens_pf; /*--- d2/dAxdBz ---*/ tmp = upuppfac*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (l1 > 0 && n2 > 0) tmp += l1*n2*overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); hess_ov[coord_ax][coord_bz] += tmp*wdens_pf; /*--- d2/dAydBx ---*/ tmp = upuppfac*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (m1 > 0 && l2 > 0) tmp += m1*l2*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_ay][coord_bx] += tmp*wdens_pf; /*--- d2/dAydBy ---*/ tmp = upuppfac*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (m1 > 0 && m2 > 0) tmp += m1*m2*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (coord_ay == coord_by) tmp *= 2.0; hess_ov[coord_ay][coord_by] += tmp*wdens_pf; /*--- d2/dAydBz ---*/ tmp = upuppfac*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (m1 > 0 && n2 > 0) tmp += m1*n2*overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); hess_ov[coord_ay][coord_bz] += tmp*wdens_pf; /*--- d2/dAzdBx ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (n1 > 0 && l2 > 0) tmp += n1*l2*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); hess_ov[coord_az][coord_bx] += tmp*wdens_pf; /*--- d2/dAzdBy ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (n1 > 0 && m2 > 0) tmp += n1*m2*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); hess_ov[coord_az][coord_by] += tmp*wdens_pf; /*--- d2/dAzdBz ---*/ tmp = upuppfac*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (n1 > 0 && n2 > 0) tmp += n1*n2*overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (coord_az == coord_bz) tmp *= 2.0; hess_ov[coord_az][coord_bz] += tmp*wdens_pf; #endif /*------------------------------------------- Second derivative kinetic energy integrals -------------------------------------------*/ #if INCLUDE_KINETIC t_int = ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); upuppfac = twozeta_a*twozeta_a; /*--- d2/dAx2 ---*/ tmp = upuppfac*ke_int(a1, l1+2, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = l1 + 1; if (l1) updownpfac += l1; tmp -= twozeta_a*updownpfac*t_int; if (l1 >= 2) tmp += l1*(l1-1)*ke_int(a1, l1-2, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ax][coord_ax] += tmp*dens_pf; /*--- d2/dAy2 ---*/ tmp = upuppfac*ke_int(a1, l1, m1+2, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = m1 + 1; if (m1) updownpfac += m1; tmp -= twozeta_a*updownpfac*t_int; if (m1 >= 2) tmp += m1*(m1-1)*ke_int(a1, l1, m1-2, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ay][coord_ay] += tmp*dens_pf; /*--- d2/dAz2 ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1+2, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); updownpfac = n1 + 1; if (n1) updownpfac += n1; tmp -= twozeta_a*updownpfac*t_int; if (n1 >= 2) tmp += n1*(n1-1)*ke_int(a1, l1, m1, n1-2, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_az][coord_az] += tmp*dens_pf; /*--- d2/dAxdAy ---*/ tmp = upuppfac*ke_int(a1, l1+1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_a*l1*ke_int(a1, l1-1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_a*m1*ke_int(a1, l1+1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && m1 > 0) tmp += l1*m1*ke_int(a1, l1-1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ax][coord_ay] += tmp*dens_pf; /*--- d2/dAxdAz ---*/ tmp = upuppfac*ke_int(a1, l1+1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_a*l1*ke_int(a1, l1-1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_a*n1*ke_int(a1, l1+1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && n1 > 0) tmp += l1*n1*ke_int(a1, l1-1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ax][coord_az] += tmp*dens_pf; /*--- d2/dAydAz ---*/ tmp = upuppfac*ke_int(a1, l1, m1+1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_a*m1*ke_int(a1, l1, m1-1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_a*n1*ke_int(a1, l1, m1+1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if (m1 > 0 && n1 > 0) tmp += m1*n1*ke_int(a1, l1, m1-1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ay][coord_az] += tmp*dens_pf; upuppfac = twozeta_b*twozeta_b; /*--- d2/dBx2 ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2+2, m2, n2, jnorm, AB, PA, PB); updownpfac = l2 + 1; if (l2) updownpfac += l2; tmp -= twozeta_b*updownpfac*t_int; if (l2 >= 2) tmp += l2*(l2-1)*ke_int(a1, l1, m1, n1, inorm, a2, l2-2, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_bx][coord_bx] += tmp*dens_pf; /*--- d2/dBy2 ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+2, n2, jnorm, AB, PA, PB); updownpfac = m2 + 1; if (m2) updownpfac += m2; tmp -= twozeta_b*updownpfac*t_int; if (m2 >= 2) tmp += m2*(m2-1)*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-2, n2, jnorm, AB, PA, PB); hess_oe[coord_by][coord_by] += tmp*dens_pf; /*--- d2/dBz2 ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+2, jnorm, AB, PA, PB); updownpfac = n2 + 1; if (n2) updownpfac += n2; tmp -= twozeta_b*updownpfac*t_int; if (n2 >= 2) tmp += n2*(n2-1)*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-2, jnorm, AB, PA, PB); hess_oe[coord_bz][coord_bz] += tmp*dens_pf; /*--- d2/dBxdBy ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2+1, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_b*l2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_b*m2*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2-1, n2, jnorm, AB, PA, PB); if (l2 > 0 && m2 > 0) tmp += l2*m2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2-1, n2, jnorm, AB, PA, PB); hess_oe[coord_bx][coord_by] += tmp*dens_pf; /*--- d2/dBxdBz ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2+1, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_b*l2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_b*n2*ke_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2-1, jnorm, AB, PA, PB); if (l2 > 0 && n2 > 0) tmp += l2*n2*ke_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2-1, jnorm, AB, PA, PB); hess_oe[coord_bx][coord_bz] += tmp*dens_pf; /*--- d2/dBydBz ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2+1, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_b*m2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_b*n2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2-1, jnorm, AB, PA, PB); if (m2 > 0 && n2 > 0) tmp += m2*n2*ke_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2-1, jnorm, AB, PA, PB); hess_oe[coord_by][coord_bz] += tmp*dens_pf; upuppfac = twozeta_a*twozeta_b; /*--- d2/dAxdBx ---*/ tmp = upuppfac*ke_int(a1, l1+1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*ke_int(a1, l1+1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (l1 > 0 && l2 > 0) tmp += l1*l2*ke_int(a1, l1-1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (coord_ax == coord_bx) tmp *= 2.0; hess_oe[coord_ax][coord_bx] += tmp*dens_pf; /*--- d2/dAxdBy ---*/ tmp = upuppfac*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (l1 > 0 && m2 > 0) tmp += l1*m2*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); hess_oe[coord_ax][coord_by] += tmp*dens_pf; /*--- d2/dAxdBz ---*/ tmp = upuppfac*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (l1) tmp -= twozeta_b*l1*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*ke_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (l1 > 0 && n2 > 0) tmp += l1*n2*ke_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); hess_oe[coord_ax][coord_bz] += tmp*dens_pf; /*--- d2/dAydBx ---*/ tmp = upuppfac*ke_int(a1, l1, m1+1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*ke_int(a1, l1, m1+1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (m1 > 0 && l2 > 0) tmp += m1*l2*ke_int(a1, l1, m1-1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_ay][coord_bx] += tmp*dens_pf; /*--- d2/dAydBy ---*/ tmp = upuppfac*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (m1 > 0 && m2 > 0) tmp += m1*m2*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (coord_ay == coord_by) tmp *= 2.0; hess_oe[coord_ay][coord_by] += tmp*dens_pf; /*--- d2/dAydBz ---*/ tmp = upuppfac*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (m1) tmp -= twozeta_b*m1*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*ke_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (m1 > 0 && n2 > 0) tmp += m1*n2*ke_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); hess_oe[coord_ay][coord_bz] += tmp*dens_pf; /*--- d2/dAzdBx ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1+1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if (l2) tmp -= twozeta_a*l2*ke_int(a1, l1, m1, n1+1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); if (n1 > 0 && l2 > 0) tmp += n1*l2*ke_int(a1, l1, m1, n1-1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); hess_oe[coord_az][coord_bx] += tmp*dens_pf; /*--- d2/dAzdBy ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if (m2) tmp -= twozeta_a*m2*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); if (n1 > 0 && m2 > 0) tmp += n1*m2*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); hess_oe[coord_az][coord_by] += tmp*dens_pf; /*--- d2/dAzdBz ---*/ tmp = upuppfac*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n1) tmp -= twozeta_b*n1*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if (n2) tmp -= twozeta_a*n2*ke_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (n1 > 0 && n2 > 0) tmp += n1*n2*ke_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); if (coord_az == coord_bz) tmp *= 2.0; hess_oe[coord_az][coord_bz] += tmp*dens_pf; #endif aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ /*--------------------------------------------------------- First and second derivative nuclear attraction integrals ---------------------------------------------------------*/ for(atom=0;atomP[i][j][0] - Molecule.centers[atom].x; PC.y = sp->P[i][j][1] - Molecule.centers[atom].y; PC.z = sp->P[i][j][2] - Molecule.centers[atom].z; AI_Deriv2_OSrecurs(AI0,AIX,AIY,AIZ,AIXX,AIXY,AIXZ,AIYY,AIYZ,AIZZ,PA,PB,PC,gam,am_i+deriv2_lvl,am_j+deriv2_lvl); /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; iind = n1*izm1 + m1*iym1 + l1*ixm1; I = si_fao + ai; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll ; jind = n2*jzm1 + m2*jym1 + l2*jxm1; J = sj_fao + aj; if (si == sj && ai < aj) break; norm_pf = (GTOs.bf_norm[am_i][ai] * GTOs.bf_norm[am_j][aj]); normover_pf = norm_pf * over_pf; dens_pf = Dens[I][J]; dens_pf *= norm_pf; if (I != J) { dens_pf *= 2.0; normover_pf *= 2.0; } zdens_pf = over_pf * dens_pf * Molecule.centers[atom].Z_nuc; znormover_pf = normover_pf * Molecule.centers[atom].Z_nuc; tmp = 2.0*a1*AI0[iind+ixm1][jind][0]; if (l1) tmp -= l1*AI0[iind-ixm1][jind][0]; F[coord_ax][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); tmp = 2.0*a2*AI0[iind][jind+jxm1][0]; if (l2) tmp -= l2*AI0[iind][jind-jxm1][0]; F[coord_bx][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); F[coord_cx][I][J] -= AIX[iind][jind][0] * Molecule.centers[atom].Z_nuc * normover_pf; tmp = 2.0*a1*AI0[iind+iym1][jind][0]; if (m1) tmp -= m1*AI0[iind-iym1][jind][0]; F[coord_ay][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); tmp = 2.0*a2*AI0[iind][jind+jym1][0]; if (m2) tmp -= m2*AI0[iind][jind-jym1][0]; F[coord_by][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); F[coord_cy][I][J] -= AIY[iind][jind][0] * Molecule.centers[atom].Z_nuc * normover_pf; tmp = 2.0*a1*AI0[iind+izm1][jind][0]; if (n1) tmp -= n1*AI0[iind-izm1][jind][0]; F[coord_az][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); tmp = 2.0*a2*AI0[iind][jind+jzm1][0]; if (n2) tmp -= n2*AI0[iind][jind-jzm1][0]; F[coord_bz][I][J] -= tmp * Molecule.centers[atom].Z_nuc * (normover_pf); F[coord_cz][I][J] -= AIZ[iind][jind][0] * Molecule.centers[atom].Z_nuc * normover_pf; #if INCLUDE_POTENTIAL v_int = AI0[iind][jind][0]; #if INCLUDE_VAA upuppfac = twozeta_a*twozeta_a; /*--- d2/dAx2 ---*/ tmp = upuppfac*AI0[iind+ixm1+ixm1][jind][0]; updownpfac = l1 + 1; if (l1) updownpfac += l1; tmp -= twozeta_a*updownpfac*v_int; if (l1 >= 2) tmp += l1*(l1-1)*AI0[iind-ixm1-ixm1][jind][0]; hess_oe[coord_ax][coord_ax] -= tmp * zdens_pf; /*--- d2/dAy2 ---*/ tmp = upuppfac*AI0[iind+iym1+iym1][jind][0]; updownpfac = m1 + 1; if (m1) updownpfac += m1; tmp -= twozeta_a*updownpfac*v_int; if (m1 >= 2) tmp += m1*(m1-1)*AI0[iind-iym1-iym1][jind][0]; hess_oe[coord_ay][coord_ay] -= tmp * zdens_pf; /*--- d2/dAz2 ---*/ tmp = upuppfac*AI0[iind+izm1+izm1][jind][0]; updownpfac = n1 + 1; if (n1) updownpfac += n1; tmp -= twozeta_a*updownpfac*v_int; if (n1 >= 2) tmp += n1*(n1-1)*AI0[iind-izm1-izm1][jind][0]; hess_oe[coord_az][coord_az] -= tmp * zdens_pf; /*--- d2/dAxdAy ---*/ tmp = upuppfac*AI0[iind+ixm1+iym1][jind][0]; if (l1) tmp -= twozeta_a*l1*AI0[iind-ixm1+iym1][jind][0]; if (m1) tmp -= twozeta_a*m1*AI0[iind+ixm1-iym1][jind][0]; if (l1 > 0 && m1 > 0) tmp += l1*m1*AI0[iind-ixm1-iym1][jind][0]; hess_oe[coord_ax][coord_ay] -= tmp*zdens_pf; /*--- d2/dAxdAz ---*/ tmp = upuppfac*AI0[iind+ixm1+izm1][jind][0]; if (l1) tmp -= twozeta_a*l1*AI0[iind-ixm1+izm1][jind][0]; if (n1) tmp -= twozeta_a*n1*AI0[iind+ixm1-izm1][jind][0]; if (l1 > 0 && n1 > 0) tmp += l1*n1*AI0[iind-ixm1-izm1][jind][0]; hess_oe[coord_ax][coord_az] -= tmp*zdens_pf; /*--- d2/dAydAz ---*/ tmp = upuppfac*AI0[iind+iym1+izm1][jind][0]; if (m1) tmp -= twozeta_a*m1*AI0[iind-iym1+izm1][jind][0]; if (n1) tmp -= twozeta_a*n1*AI0[iind+iym1-izm1][jind][0]; if (m1 > 0 && n1 > 0) tmp += m1*n1*AI0[iind-iym1-izm1][jind][0]; hess_oe[coord_ay][coord_az] -= tmp*zdens_pf; upuppfac = twozeta_b*twozeta_b; /*--- d2/dBx2 ---*/ tmp = upuppfac*AI0[iind][jind+jxm1+jxm1][0]; updownpfac = l2 + 1; if (l2) updownpfac += l2; tmp -= twozeta_b*updownpfac*v_int; if (l2 >= 2) tmp += l2*(l2-1)*AI0[iind][jind-jxm1-jxm1][0]; hess_oe[coord_bx][coord_bx] -= tmp * zdens_pf; /*--- d2/dBy2 ---*/ tmp = upuppfac*AI0[iind][jind+jym1+jym1][0]; updownpfac = m2 + 1; if (m2) updownpfac += m2; tmp -= twozeta_b*updownpfac*v_int; if (m2 >= 2) tmp += m2*(m2-1)*AI0[iind][jind-jym1-jym1][0]; hess_oe[coord_by][coord_by] -= tmp * zdens_pf; /*--- d2/dBz2 ---*/ tmp = upuppfac*AI0[iind][jind+jzm1+jzm1][0]; updownpfac = n2 + 1; if (n2) updownpfac += n2; tmp -= twozeta_b*updownpfac*v_int; if (n2 >= 2) tmp += n2*(n2-1)*AI0[iind][jind-jzm1-jzm1][0]; hess_oe[coord_bz][coord_bz] -= tmp * zdens_pf; /*--- d2/dBxdBy ---*/ tmp = upuppfac*AI0[iind][jind+jxm1+jym1][0]; if (l2) tmp -= twozeta_b*l2*AI0[iind][jind-jxm1+jym1][0]; if (m2) tmp -= twozeta_b*m2*AI0[iind][jind+jxm1-jym1][0]; if (l2 > 0 && m2 > 0) tmp += l2*m2*AI0[iind][jind-jxm1-jym1][0]; hess_oe[coord_bx][coord_by] -= tmp*zdens_pf; /*--- d2/dBxdBz ---*/ tmp = upuppfac*AI0[iind][jind+jxm1+jzm1][0]; if (l2) tmp -= twozeta_b*l2*AI0[iind][jind-jxm1+jzm1][0]; if (n2) tmp -= twozeta_b*n2*AI0[iind][jind+jxm1-jzm1][0]; if (l2 > 0 && n2 > 0) tmp += l2*n2*AI0[iind][jind-jxm1-jzm1][0]; hess_oe[coord_bx][coord_bz] -= tmp*zdens_pf; /*--- d2/dBydBz ---*/ tmp = upuppfac*AI0[iind][jind+jym1+jzm1][0]; if (m2) tmp -= twozeta_b*m2*AI0[iind][jind-jym1+jzm1][0]; if (n2) tmp -= twozeta_b*n2*AI0[iind][jind+jym1-jzm1][0]; if (m2 > 0 && n2 > 0) tmp += m2*n2*AI0[iind][jind-jym1-jzm1][0]; hess_oe[coord_by][coord_bz] -= tmp*zdens_pf; upuppfac = twozeta_a*twozeta_b; /*--- d2/dAxdBx ---*/ tmp = upuppfac*AI0[iind+ixm1][jind+jxm1][0]; if (l1) tmp -= twozeta_b*l1*AI0[iind-ixm1][jind+jxm1][0]; if (l2) tmp -= twozeta_a*l2*AI0[iind+ixm1][jind-jxm1][0]; if (l1 > 0 && l2 > 0) tmp += l1*l2*AI0[iind-ixm1][jind-jxm1][0]; if (coord_ax == coord_bx) tmp *= 2.0; hess_oe[coord_ax][coord_bx] -= tmp*zdens_pf; /*--- d2/dAxdBy ---*/ tmp = upuppfac*AI0[iind+ixm1][jind+jym1][0]; if (l1) tmp -= twozeta_b*l1*AI0[iind-ixm1][jind+jym1][0]; if (m2) tmp -= twozeta_a*m2*AI0[iind+ixm1][jind-jym1][0]; if (l1 > 0 && m2 > 0) tmp += l1*m2*AI0[iind-ixm1][jind-jym1][0]; hess_oe[coord_ax][coord_by] -= tmp*zdens_pf; /*--- d2/dAxdBz ---*/ tmp = upuppfac*AI0[iind+ixm1][jind+jzm1][0]; if (l1) tmp -= twozeta_b*l1*AI0[iind-ixm1][jind+jzm1][0]; if (n2) tmp -= twozeta_a*n2*AI0[iind+ixm1][jind-jzm1][0]; if (l1 > 0 && n2 > 0) tmp += l1*n2*AI0[iind-ixm1][jind-jzm1][0]; hess_oe[coord_ax][coord_bz] -= tmp*zdens_pf; /*--- d2/dAydBx ---*/ tmp = upuppfac*AI0[iind+iym1][jind+jxm1][0]; if (m1) tmp -= twozeta_b*m1*AI0[iind-iym1][jind+jxm1][0]; if (l2) tmp -= twozeta_a*l2*AI0[iind+iym1][jind-jxm1][0]; if (m1 > 0 && l2 > 0) tmp += m1*l2*AI0[iind-iym1][jind-jxm1][0]; hess_oe[coord_ay][coord_bx] -= tmp*zdens_pf; /*--- d2/dAydBy ---*/ tmp = upuppfac*AI0[iind+iym1][jind+jym1][0]; if (m1) tmp -= twozeta_b*m1*AI0[iind-iym1][jind+jym1][0]; if (m2) tmp -= twozeta_a*m2*AI0[iind+iym1][jind-jym1][0]; if (m1 > 0 && m2 > 0) tmp += m1*m2*AI0[iind-iym1][jind-jym1][0]; if (coord_ay == coord_by) tmp *= 2.0; hess_oe[coord_ay][coord_by] -= tmp*zdens_pf; /*--- d2/dAydBz ---*/ tmp = upuppfac*AI0[iind+iym1][jind+jzm1][0]; if (m1) tmp -= twozeta_b*m1*AI0[iind-iym1][jind+jzm1][0]; if (n2) tmp -= twozeta_a*n2*AI0[iind+iym1][jind-jzm1][0]; if (m1 > 0 && n2 > 0) tmp += m1*n2*AI0[iind-iym1][jind-jzm1][0]; hess_oe[coord_ay][coord_bz] -= tmp*zdens_pf; /*--- d2/dAzdBx ---*/ tmp = upuppfac*AI0[iind+izm1][jind+jxm1][0]; if (n1) tmp -= twozeta_b*n1*AI0[iind-izm1][jind+jxm1][0]; if (l2) tmp -= twozeta_a*l2*AI0[iind+izm1][jind-jxm1][0]; if (n1 > 0 && l2 > 0) tmp += n1*l2*AI0[iind-izm1][jind-jxm1][0]; hess_oe[coord_az][coord_bx] -= tmp*zdens_pf; /*--- d2/dAzdBy ---*/ tmp = upuppfac*AI0[iind+izm1][jind+jym1][0]; if (n1) tmp -= twozeta_b*n1*AI0[iind-izm1][jind+jym1][0]; if (m2) tmp -= twozeta_a*m2*AI0[iind+izm1][jind-jym1][0]; if (n1 > 0 && m2 > 0) tmp += n1*m2*AI0[iind-izm1][jind-jym1][0]; hess_oe[coord_az][coord_by] -= tmp*zdens_pf; /*--- d2/dAzdBz ---*/ tmp = upuppfac*AI0[iind+izm1][jind+jzm1][0]; if (n1) tmp -= twozeta_b*n1*AI0[iind-izm1][jind+jzm1][0]; if (n2) tmp -= twozeta_a*n2*AI0[iind+izm1][jind-jzm1][0]; if (n1 > 0 && n2 > 0) tmp += n1*n2*AI0[iind-izm1][jind-jzm1][0]; if (coord_az == coord_bz) tmp *= 2.0; hess_oe[coord_az][coord_bz] -= tmp*zdens_pf; #endif #if INCLUDE_VCA /*--- d2/dCxdAx ---*/ tmp = twozeta_a*AIX[iind+ixm1][jind][0]; if (l1) tmp -= l1*AIX[iind-ixm1][jind][0]; if (coord_ax == coord_cx) tmp *= 2.0; hess_oe[coord_ax][coord_cx] -= tmp*zdens_pf; /*--- d2/dCxdAy ---*/ tmp = twozeta_a*AIX[iind+iym1][jind][0]; if (m1) tmp -= m1*AIX[iind-iym1][jind][0]; hess_oe[coord_ay][coord_cx] -= tmp*zdens_pf; /*--- d2/dCxdAz ---*/ tmp = twozeta_a*AIX[iind+izm1][jind][0]; if (n1) tmp -= n1*AIX[iind-izm1][jind][0]; hess_oe[coord_az][coord_cx] -= tmp*zdens_pf; /*--- d2/dCydAx ---*/ tmp = twozeta_a*AIY[iind+ixm1][jind][0]; if (l1) tmp -= l1*AIY[iind-ixm1][jind][0]; hess_oe[coord_ax][coord_cy] -= tmp*zdens_pf; /*--- d2/dCydAy ---*/ tmp = twozeta_a*AIY[iind+iym1][jind][0]; if (m1) tmp -= m1*AIY[iind-iym1][jind][0]; if (coord_ay == coord_cy) tmp *= 2.0; hess_oe[coord_ay][coord_cy] -= tmp*zdens_pf; /*--- d2/dCydAz ---*/ tmp = twozeta_a*AIY[iind+izm1][jind][0]; if (n1) tmp -= n1*AIY[iind-izm1][jind][0]; hess_oe[coord_az][coord_cy] -= tmp*zdens_pf; /*--- d2/dCzdAx ---*/ tmp = twozeta_a*AIZ[iind+ixm1][jind][0]; if (l1) tmp -= l1*AIZ[iind-ixm1][jind][0]; hess_oe[coord_ax][coord_cz] -= tmp*zdens_pf; /*--- d2/dCzdAy ---*/ tmp = twozeta_a*AIZ[iind+iym1][jind][0]; if (m1) tmp -= m1*AIZ[iind-iym1][jind][0]; hess_oe[coord_ay][coord_cz] -= tmp*zdens_pf; /*--- d2/dCzdAz ---*/ tmp = twozeta_a*AIZ[iind+izm1][jind][0]; if (n1) tmp -= n1*AIZ[iind-izm1][jind][0]; if (coord_az == coord_cz) tmp *= 2.0; hess_oe[coord_az][coord_cz] -= tmp*zdens_pf; /*--- d2/dCxdBx ---*/ tmp = twozeta_b*AIX[iind][jind+jxm1][0]; if (l2) tmp -= l2*AIX[iind][jind-jxm1][0]; if (coord_bx == coord_cx) tmp *= 2.0; hess_oe[coord_bx][coord_cx] -= tmp*zdens_pf; /*--- d2/dCxdBy ---*/ tmp = twozeta_b*AIX[iind][jind+jym1][0]; if (m2) tmp -= m2*AIX[iind][jind-jym1][0]; hess_oe[coord_by][coord_cx] -= tmp*zdens_pf; /*--- d2/dCxdBz ---*/ tmp = twozeta_b*AIX[iind][jind+jzm1][0]; if (n2) tmp -= n2*AIX[iind][jind-jzm1][0]; hess_oe[coord_bz][coord_cx] -= tmp*zdens_pf; /*--- d2/dCydBx ---*/ tmp = twozeta_b*AIY[iind][jind+jxm1][0]; if (l2) tmp -= l2*AIY[iind][jind-jxm1][0]; hess_oe[coord_bx][coord_cy] -= tmp*zdens_pf; /*--- d2/dCydBy ---*/ tmp = twozeta_b*AIY[iind][jind+jym1][0]; if (m2) tmp -= m2*AIY[iind][jind-jym1][0]; if (coord_by == coord_cy) tmp *= 2.0; hess_oe[coord_by][coord_cy] -= tmp*zdens_pf; /*--- d2/dCydBz ---*/ tmp = twozeta_b*AIY[iind][jind+jzm1][0]; if (n2) tmp -= n2*AIY[iind][jind-jzm1][0]; hess_oe[coord_bz][coord_cy] -= tmp*zdens_pf; /*--- d2/dCzdBx ---*/ tmp = twozeta_b*AIZ[iind][jind+jxm1][0]; if (l2) tmp -= l2*AIZ[iind][jind-jxm1][0]; hess_oe[coord_bx][coord_cz] -= tmp*zdens_pf; /*--- d2/dCzdBy ---*/ tmp = twozeta_b*AIZ[iind][jind+jym1][0]; if (m2) tmp -= m2*AIZ[iind][jind-jym1][0]; hess_oe[coord_by][coord_cz] -= tmp*zdens_pf; /*--- d2/dCzdBz ---*/ tmp = twozeta_b*AIZ[iind][jind+jzm1][0]; if (n2) tmp -= n2*AIZ[iind][jind-jzm1][0]; if (coord_bz == coord_cz) tmp *= 2.0; hess_oe[coord_bz][coord_cz] -= tmp*zdens_pf; #endif #if INCLUDE_VCC /*---- d2/dCx2 ---*/ hess_oe[coord_cx][coord_cx] -= AIXX[iind][jind][0]*zdens_pf; /*---- d2/dCy2 ---*/ hess_oe[coord_cy][coord_cy] -= AIYY[iind][jind][0]*zdens_pf; /*---- d2/dCz2 ---*/ hess_oe[coord_cz][coord_cz] -= AIZZ[iind][jind][0]*zdens_pf; /*---- d2/dCxdCy ---*/ hess_oe[coord_cx][coord_cy] -= AIXY[iind][jind][0]*zdens_pf; /*---- d2/dCxdCz ---*/ hess_oe[coord_cx][coord_cz] -= AIXZ[iind][jind][0]*zdens_pf; /*---- d2/dCydCz ---*/ hess_oe[coord_cy][coord_cz] -= AIYZ[iind][jind][0]*zdens_pf; #endif #endif aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } } /*--- end primitive contraction ---*/ } } symmetrize_hessian(hess_ov); symmetrize_hessian(hess_oe); if (UserOptions.print_lvl >= PRINT_OEDERIV) { print_atommat("Overlap component of the molecular Hessian (a.u.)",hess_ov); print_atommat("Core Hamiltonian component of the molecular Hessian (a.u.)",hess_oe); } add_mat(Hess,hess_ov,Hess,Molecule.num_atoms*3,Molecule.num_atoms*3); add_mat(Hess,hess_oe,Hess,Molecule.num_atoms*3,Molecule.num_atoms*3); /*--- flush it all away ---*/ fflush(outfile); free_box(AI0,indmax,indmax); free_box(AIX,indmax,indmax); free_box(AIY,indmax,indmax); free_box(AIZ,indmax,indmax); free_box(AIXX,indmax,indmax); free_box(AIXY,indmax,indmax); free_box(AIXZ,indmax,indmax); free_box(AIYY,indmax,indmax); free_box(AIYZ,indmax,indmax); free_box(AIZZ,indmax,indmax); free_block(hess_ov); free_block(hess_oe); } /*!----------------------------------------------- This computes overlap of 2 primitive gaussians -----------------------------------------------*/ double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int i, j, k, l; int imax, jmax, kmax; int print = 0; double Ix, Iy, Iz; double I; double gam; double AB2; double tval, tval1, tval2 ; double norm_fact ; AB2 = AB.x*AB.x+AB.y*AB.y+AB.z*AB.z; gam = a1+a2; norm_fact = norm1*norm2; tval1 = 2*gam; imax = (l1+l2)/2; Ix = 0.0; for (i = 0; i<= imax; i++){ tval = f_n(i*2, l1, l2, PA.x, PB.x); tval2 = int_pow(tval1, i); Ix += tval*(num_ser[i])/(tval2); } jmax = (m1+m2)/2; Iy = 0.0; for (j = 0; j<= jmax; j++){ tval = f_n(j*2, m1, m2, PA.y, PB.y); tval2 = int_pow(tval1, j); Iy += tval*num_ser[j]/(tval2); } kmax = (n1+n2)/2; Iz = 0.0; for (k = 0; k<= kmax; k++){ tval = f_n(k*2, n1, n2, PA.z, PB.z); tval2 = int_pow(tval1, k); Iz += tval*num_ser[k]/(tval2); } I=exp(-1*a1*a2*AB2/gam)*Ix*Iy*Iz*sqrt(M_PI/gam)*(M_PI/gam); return I*norm_fact; } /*!----------------------------------------------------------------------------- This computes matrix element of kinetic energy between 2 primitive gaussians -----------------------------------------------------------------------------*/ double ke_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int localprint = 0 ; double Ix, Iy, Iz; double I1 = 0.0, I2 = 0.0, I3 = 0.0, I4 = 0.0 ; double gam; double norm_fact; I2 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1+1, m1, n1, norm1, a2, l2-1, m2, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1-1, m1, n1, norm1, a2, l2+1, m2, n2, norm2, AB, PA, PB); Ix = (l1*l2*I1/2.0 + 2*a1*a2*I2 - a1*l2*I3 - a2*l1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1+1, n1, norm1, a2, l2, m2-1, n2, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1-1, n1, norm1, a2, l2, m2+1, n2, norm2, AB, PA, PB); Iy = (m1*m2*I1/2.0 + 2*a1*a2*I2 - a1*m2*I3 - a2*m1*I4); I1 = 0.0; I2 = 0.0; I3 = 0.0; I4 = 0.0; I2 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); I1 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I3 = overlap_int(a1, l1, m1, n1+1, norm1, a2, l2, m2, n2-1, norm2, AB, PA, PB); I4 = overlap_int(a1, l1, m1, n1-1, norm1, a2, l2, m2, n2+1, norm2, AB, PA, PB); Iz = (n1*n2*I1/2.0 + 2*a1*a2*I2 - a1*n2*I3 - a2*n1*I4); return((Ix+Iy+Iz)); } double f_n(int k, int l1, int l2, double A, double B) { int i, j; double sum = 0.0; double tval; double tmp1, tmp2, tmp3, tmp4 ; for(i=0; i<=l1; i++){ for(j=0; j<=l2; j++){ tmp1 = tmp2 = tmp3 = tmp4 = 0.0 ; if((i+j) == k){ tmp1 = int_pow(A, (l1-i)); tmp2 = int_pow(B, (l2-j)); tmp3 = bc[l1][i]; tmp4 = bc[l2][j]; tval = tmp1 * tmp2 * tmp3 * tmp4 ; sum += tval ; } } } return sum; } double int_pow(double a, int p) { register int i; double b = 1.0; for(i=0; i #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include "fjt.h" #endif namespace psi { namespace CINTS { void AI_Deriv2_OSrecurs(double ***AI0, double ***AIX, double ***AIY, double ***AIZ, double ***AIXX, double ***AIXY, double ***AIXZ, double ***AIYY, double ***AIYZ, double ***AIZZ, struct coordinates PA, struct coordinates PB, struct coordinates PC, double gamma, int iang, int jang) { int a,b,m; int izm = 1; int iym = iang + 1; int ixm = iym * iym; int jzm = 1; int jym = jang + 1; int jxm = jym * jym; int ix,iy,iz,jx,jy,jz; int iind,jind; double pp = 1/(2*gamma); int mmax = iang+jang; double tmp = sqrt(gamma)*M_2_SQRTPI; double u = gamma*(PC.x*PC.x + PC.y*PC.y + PC.z*PC.z); static double F[2*CINTS_MAX_AM+1]; #ifdef USE_TAYLOR_FM taylor_compute_fm(F,u,mmax); #else calc_f(F,mmax,u); #endif /* Computing starting integrals for recursion */ for(m=0;m<=mmax;m++) AI0[0][0][m] = tmp*F[m]; for(m=0;m<=mmax-1;m++) { AIX[0][0][m] = 2*gamma*PC.x*AI0[0][0][m+1]; AIY[0][0][m] = 2*gamma*PC.y*AI0[0][0][m+1]; AIZ[0][0][m] = 2*gamma*PC.z*AI0[0][0][m+1]; } for(m=0;m<=mmax-2;m++) { AIXX[0][0][m] = 4*gamma*gamma*PC.x*PC.x*AI0[0][0][m+2] - 2*gamma*AI0[0][0][m+1]; AIYY[0][0][m] = 4*gamma*gamma*PC.y*PC.y*AI0[0][0][m+2] - 2*gamma*AI0[0][0][m+1]; AIZZ[0][0][m] = 4*gamma*gamma*PC.z*PC.z*AI0[0][0][m+2] - 2*gamma*AI0[0][0][m+1]; AIXY[0][0][m] = 4*gamma*gamma*PC.x*PC.y*AI0[0][0][m+2]; AIXZ[0][0][m] = 4*gamma*gamma*PC.x*PC.z*AI0[0][0][m+2]; AIYZ[0][0][m] = 4*gamma*gamma*PC.y*PC.z*AI0[0][0][m+2]; } /* Upward recursion in j with i=0 */ for(b=1;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm+jy*jym+jz*jzm; if (jz > 0) { for(m=0;m<=mmax-b;m++) /* Electrostatic potential integrals */ AI0[0][jind][m] = PB.z*AI0[0][jind-jzm][m] - PC.z*AI0[0][jind-jzm][m+1]; for(m=0;m<=mmax-b-1;m++) { /* Electric field integrals */ AIX[0][jind][m] = PB.z*AIX[0][jind-jzm][m] - PC.z*AIX[0][jind-jzm][m+1]; AIY[0][jind][m] = PB.z*AIY[0][jind-jzm][m] - PC.z*AIY[0][jind-jzm][m+1]; AIZ[0][jind][m] = PB.z*AIZ[0][jind-jzm][m] - PC.z*AIZ[0][jind-jzm][m+1] + AI0[0][jind-jzm][m+1]; } for(m=0;m<=mmax-b-2;m++) { /* Gradients of the electric field */ AIXX[0][jind][m] = PB.z*AIXX[0][jind-jzm][m] - PC.z*AIXX[0][jind-jzm][m+1]; AIYY[0][jind][m] = PB.z*AIYY[0][jind-jzm][m] - PC.z*AIYY[0][jind-jzm][m+1]; AIZZ[0][jind][m] = PB.z*AIZZ[0][jind-jzm][m] - PC.z*AIZZ[0][jind-jzm][m+1] + 2*AIZ[0][jind-jzm][m+1]; AIXY[0][jind][m] = PB.z*AIXY[0][jind-jzm][m] - PC.z*AIXY[0][jind-jzm][m+1]; AIXZ[0][jind][m] = PB.z*AIXZ[0][jind-jzm][m] - PC.z*AIXZ[0][jind-jzm][m+1] + AIX[0][jind-jzm][m+1]; AIYZ[0][jind][m] = PB.z*AIYZ[0][jind-jzm][m] - PC.z*AIYZ[0][jind-jzm][m+1] + AIY[0][jind-jzm][m+1]; } if (jz > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jz-1)*(AI0[0][jind-2*jzm][m] - AI0[0][jind-2*jzm][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jz-1)*(AIX[0][jind-2*jzm][m] - AIX[0][jind-2*jzm][m+1]); AIY[0][jind][m] += pp*(jz-1)*(AIY[0][jind-2*jzm][m] - AIY[0][jind-2*jzm][m+1]); AIZ[0][jind][m] += pp*(jz-1)*(AIZ[0][jind-2*jzm][m] - AIZ[0][jind-2*jzm][m+1]); } for(m=0;m<=mmax-b-2;m++) { AIXX[0][jind][m] += pp*(jz-1)*(AIXX[0][jind-2*jzm][m] - AIXX[0][jind-2*jzm][m+1]); AIYY[0][jind][m] += pp*(jz-1)*(AIYY[0][jind-2*jzm][m] - AIYY[0][jind-2*jzm][m+1]); AIZZ[0][jind][m] += pp*(jz-1)*(AIZZ[0][jind-2*jzm][m] - AIZZ[0][jind-2*jzm][m+1]); AIXY[0][jind][m] += pp*(jz-1)*(AIXY[0][jind-2*jzm][m] - AIXY[0][jind-2*jzm][m+1]); AIXZ[0][jind][m] += pp*(jz-1)*(AIXZ[0][jind-2*jzm][m] - AIXZ[0][jind-2*jzm][m+1]); AIYZ[0][jind][m] += pp*(jz-1)*(AIYZ[0][jind-2*jzm][m] - AIYZ[0][jind-2*jzm][m+1]); } } } else if (jy > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.y*AI0[0][jind-jym][m] - PC.y*AI0[0][jind-jym][m+1]; for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] = PB.y*AIX[0][jind-jym][m] - PC.y*AIX[0][jind-jym][m+1]; AIY[0][jind][m] = PB.y*AIY[0][jind-jym][m] - PC.y*AIY[0][jind-jym][m+1] + AI0[0][jind-jym][m+1]; AIZ[0][jind][m] = PB.y*AIZ[0][jind-jym][m] - PC.y*AIZ[0][jind-jym][m+1]; } for(m=0;m<=mmax-b-2;m++) { AIXX[0][jind][m] = PB.y*AIXX[0][jind-jym][m] - PC.y*AIXX[0][jind-jym][m+1]; AIYY[0][jind][m] = PB.y*AIYY[0][jind-jym][m] - PC.y*AIYY[0][jind-jym][m+1] + 2*AIY[0][jind-jym][m+1]; AIZZ[0][jind][m] = PB.y*AIZZ[0][jind-jym][m] - PC.y*AIZZ[0][jind-jym][m+1]; AIXY[0][jind][m] = PB.y*AIXY[0][jind-jym][m] - PC.y*AIXY[0][jind-jym][m+1] + AIX[0][jind-jym][m+1]; AIXZ[0][jind][m] = PB.y*AIXZ[0][jind-jym][m] - PC.y*AIXZ[0][jind-jym][m+1]; AIYZ[0][jind][m] = PB.y*AIYZ[0][jind-jym][m] - PC.y*AIYZ[0][jind-jym][m+1] + AIZ[0][jind-jym][m+1]; } if (jy > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jy-1)*(AI0[0][jind-2*jym][m] - AI0[0][jind-2*jym][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jy-1)*(AIX[0][jind-2*jym][m] - AIX[0][jind-2*jym][m+1]); AIY[0][jind][m] += pp*(jy-1)*(AIY[0][jind-2*jym][m] - AIY[0][jind-2*jym][m+1]); AIZ[0][jind][m] += pp*(jy-1)*(AIZ[0][jind-2*jym][m] - AIZ[0][jind-2*jym][m+1]); } for(m=0;m<=mmax-b-2;m++) { AIXX[0][jind][m] += pp*(jy-1)*(AIXX[0][jind-2*jym][m] - AIXX[0][jind-2*jym][m+1]); AIYY[0][jind][m] += pp*(jy-1)*(AIYY[0][jind-2*jym][m] - AIYY[0][jind-2*jym][m+1]); AIZZ[0][jind][m] += pp*(jy-1)*(AIZZ[0][jind-2*jym][m] - AIZZ[0][jind-2*jym][m+1]); AIXY[0][jind][m] += pp*(jy-1)*(AIXY[0][jind-2*jym][m] - AIXY[0][jind-2*jym][m+1]); AIXZ[0][jind][m] += pp*(jy-1)*(AIXZ[0][jind-2*jym][m] - AIXZ[0][jind-2*jym][m+1]); AIYZ[0][jind][m] += pp*(jy-1)*(AIYZ[0][jind-2*jym][m] - AIYZ[0][jind-2*jym][m+1]); } } } else if (jx > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.x*AI0[0][jind-jxm][m] - PC.x*AI0[0][jind-jxm][m+1]; for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] = PB.x*AIX[0][jind-jxm][m] - PC.x*AIX[0][jind-jxm][m+1] + AI0[0][jind-jxm][m+1]; AIY[0][jind][m] = PB.x*AIY[0][jind-jxm][m] - PC.x*AIY[0][jind-jxm][m+1]; AIZ[0][jind][m] = PB.x*AIZ[0][jind-jxm][m] - PC.x*AIZ[0][jind-jxm][m+1]; } for(m=0;m<=mmax-b-2;m++) { AIXX[0][jind][m] = PB.x*AIXX[0][jind-jxm][m] - PC.x*AIXX[0][jind-jxm][m+1] + 2*AIX[0][jind-jxm][m+1]; AIYY[0][jind][m] = PB.x*AIYY[0][jind-jxm][m] - PC.x*AIYY[0][jind-jxm][m+1]; AIZZ[0][jind][m] = PB.x*AIZZ[0][jind-jxm][m] - PC.x*AIZZ[0][jind-jxm][m+1]; AIXY[0][jind][m] = PB.x*AIXY[0][jind-jxm][m] - PC.x*AIXY[0][jind-jxm][m+1] + AIY[0][jind-jxm][m+1]; AIXZ[0][jind][m] = PB.x*AIXZ[0][jind-jxm][m] - PC.x*AIXZ[0][jind-jxm][m+1] + AIZ[0][jind-jxm][m+1]; AIYZ[0][jind][m] = PB.x*AIYZ[0][jind-jxm][m] - PC.x*AIYZ[0][jind-jxm][m+1]; } if (jx > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jx-1)*(AI0[0][jind-2*jxm][m] - AI0[0][jind-2*jxm][m+1]); for(m=0;m<=mmax-b-1;m++) { AIX[0][jind][m] += pp*(jx-1)*(AIX[0][jind-2*jxm][m] - AIX[0][jind-2*jxm][m+1]); AIY[0][jind][m] += pp*(jx-1)*(AIY[0][jind-2*jxm][m] - AIY[0][jind-2*jxm][m+1]); AIZ[0][jind][m] += pp*(jx-1)*(AIZ[0][jind-2*jxm][m] - AIZ[0][jind-2*jxm][m+1]); } for(m=0;m<=mmax-b-2;m++) { AIXX[0][jind][m] += pp*(jx-1)*(AIXX[0][jind-2*jxm][m] - AIXX[0][jind-2*jxm][m+1]); AIYY[0][jind][m] += pp*(jx-1)*(AIYY[0][jind-2*jxm][m] - AIYY[0][jind-2*jxm][m+1]); AIZZ[0][jind][m] += pp*(jx-1)*(AIZZ[0][jind-2*jxm][m] - AIZZ[0][jind-2*jxm][m+1]); AIXY[0][jind][m] += pp*(jx-1)*(AIXY[0][jind-2*jxm][m] - AIXY[0][jind-2*jxm][m+1]); AIXZ[0][jind][m] += pp*(jx-1)*(AIXZ[0][jind-2*jxm][m] - AIXZ[0][jind-2*jxm][m+1]); AIYZ[0][jind][m] += pp*(jx-1)*(AIYZ[0][jind-2*jxm][m] - AIYZ[0][jind-2*jxm][m+1]); } } } else /*--- Should never happen ---*/ abort(); } /* The following fragment cannot be vectorized easily, I guess :-) */ /* Upward recursion in i with all possible j's */ for(b=0;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm + jy*jym + jz*jzm; for(a=1;a<=iang;a++) for(ix=0;ix<=a;ix++) for(iy=0;iy<=a-ix;iy++) { iz = a-ix-iy; iind = ix*ixm + iy*iym + iz*izm; if (iz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.z*AI0[iind-izm][jind][m] - PC.z*AI0[iind-izm][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { /* Electric field integrals */ AIX[iind][jind][m] = PA.z*AIX[iind-izm][jind][m] - PC.z*AIX[iind-izm][jind][m+1]; AIY[iind][jind][m] = PA.z*AIY[iind-izm][jind][m] - PC.z*AIY[iind-izm][jind][m+1]; AIZ[iind][jind][m] = PA.z*AIZ[iind-izm][jind][m] - PC.z*AIZ[iind-izm][jind][m+1] + AI0[iind-izm][jind][m+1]; } for(m=0;m<=mmax-a-b-2;m++) { /* Gradients of the electric field */ AIXX[iind][jind][m] = PA.z*AIXX[iind-izm][jind][m] - PC.z*AIXX[iind-izm][jind][m+1]; AIYY[iind][jind][m] = PA.z*AIYY[iind-izm][jind][m] - PC.z*AIYY[iind-izm][jind][m+1]; AIZZ[iind][jind][m] = PA.z*AIZZ[iind-izm][jind][m] - PC.z*AIZZ[iind-izm][jind][m+1] + 2*AIZ[iind-izm][jind][m+1]; AIXY[iind][jind][m] = PA.z*AIXY[iind-izm][jind][m] - PC.z*AIXY[iind-izm][jind][m+1]; AIXZ[iind][jind][m] = PA.z*AIXZ[iind-izm][jind][m] - PC.z*AIXZ[iind-izm][jind][m+1] + AIX[iind-izm][jind][m+1]; AIYZ[iind][jind][m] = PA.z*AIYZ[iind-izm][jind][m] - PC.z*AIYZ[iind-izm][jind][m+1] + AIY[iind-izm][jind][m+1]; } if (iz > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iz-1)* (AI0[iind-2*izm][jind][m] - AI0[iind-2*izm][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(iz-1)*(AIX[iind-2*izm][jind][m] - AIX[iind-2*izm][jind][m+1]); AIY[iind][jind][m] += pp*(iz-1)*(AIY[iind-2*izm][jind][m] - AIY[iind-2*izm][jind][m+1]); AIZ[iind][jind][m] += pp*(iz-1)*(AIZ[iind-2*izm][jind][m] - AIZ[iind-2*izm][jind][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*(iz-1)*(AIXX[iind-2*izm][jind][m] - AIXX[iind-2*izm][jind][m+1]); AIYY[iind][jind][m] += pp*(iz-1)*(AIYY[iind-2*izm][jind][m] - AIYY[iind-2*izm][jind][m+1]); AIZZ[iind][jind][m] += pp*(iz-1)*(AIZZ[iind-2*izm][jind][m] - AIZZ[iind-2*izm][jind][m+1]); AIXY[iind][jind][m] += pp*(iz-1)*(AIXY[iind-2*izm][jind][m] - AIXY[iind-2*izm][jind][m+1]); AIXZ[iind][jind][m] += pp*(iz-1)*(AIXZ[iind-2*izm][jind][m] - AIXZ[iind-2*izm][jind][m+1]); AIYZ[iind][jind][m] += pp*(iz-1)*(AIYZ[iind-2*izm][jind][m] - AIYZ[iind-2*izm][jind][m+1]); } } if (jz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jz* (AI0[iind-izm][jind-jzm][m] - AI0[iind-izm][jind-jzm][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jz*(AIX[iind-izm][jind-jzm][m] - AIX[iind-izm][jind-jzm][m+1]); AIY[iind][jind][m] += pp*jz*(AIY[iind-izm][jind-jzm][m] - AIY[iind-izm][jind-jzm][m+1]); AIZ[iind][jind][m] += pp*jz*(AIZ[iind-izm][jind-jzm][m] - AIZ[iind-izm][jind-jzm][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*jz*(AIXX[iind-izm][jind-jzm][m] - AIXX[iind-izm][jind-jzm][m+1]); AIYY[iind][jind][m] += pp*jz*(AIYY[iind-izm][jind-jzm][m] - AIYY[iind-izm][jind-jzm][m+1]); AIZZ[iind][jind][m] += pp*jz*(AIZZ[iind-izm][jind-jzm][m] - AIZZ[iind-izm][jind-jzm][m+1]); AIXY[iind][jind][m] += pp*jz*(AIXY[iind-izm][jind-jzm][m] - AIXY[iind-izm][jind-jzm][m+1]); AIXZ[iind][jind][m] += pp*jz*(AIXZ[iind-izm][jind-jzm][m] - AIXZ[iind-izm][jind-jzm][m+1]); AIYZ[iind][jind][m] += pp*jz*(AIYZ[iind-izm][jind-jzm][m] - AIYZ[iind-izm][jind-jzm][m+1]); } } } else if (iy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.y*AI0[iind-iym][jind][m] - PC.y*AI0[iind-iym][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] = PA.y*AIX[iind-iym][jind][m] - PC.y*AIX[iind-iym][jind][m+1]; AIY[iind][jind][m] = PA.y*AIY[iind-iym][jind][m] - PC.y*AIY[iind-iym][jind][m+1] + AI0[iind-iym][jind][m+1]; AIZ[iind][jind][m] = PA.y*AIZ[iind-iym][jind][m] - PC.y*AIZ[iind-iym][jind][m+1]; } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] = PA.y*AIXX[iind-iym][jind][m] - PC.y*AIXX[iind-iym][jind][m+1]; AIYY[iind][jind][m] = PA.y*AIYY[iind-iym][jind][m] - PC.y*AIYY[iind-iym][jind][m+1] + 2*AIY[iind-iym][jind][m+1]; AIZZ[iind][jind][m] = PA.y*AIZZ[iind-iym][jind][m] - PC.y*AIZZ[iind-iym][jind][m+1]; AIXY[iind][jind][m] = PA.y*AIXY[iind-iym][jind][m] - PC.y*AIXY[iind-iym][jind][m+1] + AIX[iind-iym][jind][m+1]; AIXZ[iind][jind][m] = PA.y*AIXZ[iind-iym][jind][m] - PC.y*AIXZ[iind-iym][jind][m+1]; AIYZ[iind][jind][m] = PA.y*AIYZ[iind-iym][jind][m] - PC.y*AIYZ[iind-iym][jind][m+1] + AIZ[iind-iym][jind][m+1]; } if (iy > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iy-1)* (AI0[iind-2*iym][jind][m] - AI0[iind-2*iym][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(iy-1)*(AIX[iind-2*iym][jind][m] - AIX[iind-2*iym][jind][m+1]); AIY[iind][jind][m] += pp*(iy-1)*(AIY[iind-2*iym][jind][m] - AIY[iind-2*iym][jind][m+1]); AIZ[iind][jind][m] += pp*(iy-1)*(AIZ[iind-2*iym][jind][m] - AIZ[iind-2*iym][jind][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*(iy-1)*(AIXX[iind-2*iym][jind][m] - AIXX[iind-2*iym][jind][m+1]); AIYY[iind][jind][m] += pp*(iy-1)*(AIYY[iind-2*iym][jind][m] - AIYY[iind-2*iym][jind][m+1]); AIZZ[iind][jind][m] += pp*(iy-1)*(AIZZ[iind-2*iym][jind][m] - AIZZ[iind-2*iym][jind][m+1]); AIXY[iind][jind][m] += pp*(iy-1)*(AIXY[iind-2*iym][jind][m] - AIXY[iind-2*iym][jind][m+1]); AIXZ[iind][jind][m] += pp*(iy-1)*(AIXZ[iind-2*iym][jind][m] - AIXZ[iind-2*iym][jind][m+1]); AIYZ[iind][jind][m] += pp*(iy-1)*(AIYZ[iind-2*iym][jind][m] - AIYZ[iind-2*iym][jind][m+1]); } } if (jy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jy* (AI0[iind-iym][jind-jym][m] - AI0[iind-iym][jind-jym][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jy*(AIX[iind-iym][jind-jym][m] - AIX[iind-iym][jind-jym][m+1]); AIY[iind][jind][m] += pp*jy*(AIY[iind-iym][jind-jym][m] - AIY[iind-iym][jind-jym][m+1]); AIZ[iind][jind][m] += pp*jy*(AIZ[iind-iym][jind-jym][m] - AIZ[iind-iym][jind-jym][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*jy*(AIXX[iind-iym][jind-jym][m] - AIXX[iind-iym][jind-jym][m+1]); AIYY[iind][jind][m] += pp*jy*(AIYY[iind-iym][jind-jym][m] - AIYY[iind-iym][jind-jym][m+1]); AIZZ[iind][jind][m] += pp*jy*(AIZZ[iind-iym][jind-jym][m] - AIZZ[iind-iym][jind-jym][m+1]); AIXY[iind][jind][m] += pp*jy*(AIXY[iind-iym][jind-jym][m] - AIXY[iind-iym][jind-jym][m+1]); AIXZ[iind][jind][m] += pp*jy*(AIXZ[iind-iym][jind-jym][m] - AIXZ[iind-iym][jind-jym][m+1]); AIYZ[iind][jind][m] += pp*jy*(AIYZ[iind-iym][jind-jym][m] - AIYZ[iind-iym][jind-jym][m+1]); } } } else if (ix > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.x*AI0[iind-ixm][jind][m] - PC.x*AI0[iind-ixm][jind][m+1]; for(m=0;m<=mmax-a-b-1;m++) { /* Electric field integrals */ AIX[iind][jind][m] = PA.x*AIX[iind-ixm][jind][m] - PC.x*AIX[iind-ixm][jind][m+1] + AI0[iind-ixm][jind][m+1]; AIY[iind][jind][m] = PA.x*AIY[iind-ixm][jind][m] - PC.x*AIY[iind-ixm][jind][m+1]; AIZ[iind][jind][m] = PA.x*AIZ[iind-ixm][jind][m] - PC.x*AIZ[iind-ixm][jind][m+1]; } for(m=0;m<=mmax-a-b-2;m++) { /* Gradients of the electric field */ AIXX[iind][jind][m] = PA.x*AIXX[iind-ixm][jind][m] - PC.x*AIXX[iind-ixm][jind][m+1] + 2*AIX[iind-ixm][jind][m+1]; AIYY[iind][jind][m] = PA.x*AIYY[iind-ixm][jind][m] - PC.x*AIYY[iind-ixm][jind][m+1]; AIZZ[iind][jind][m] = PA.x*AIZZ[iind-ixm][jind][m] - PC.x*AIZZ[iind-ixm][jind][m+1]; AIXY[iind][jind][m] = PA.x*AIXY[iind-ixm][jind][m] - PC.x*AIXY[iind-ixm][jind][m+1] + AIY[iind-ixm][jind][m+1]; AIXZ[iind][jind][m] = PA.x*AIXZ[iind-ixm][jind][m] - PC.x*AIXZ[iind-ixm][jind][m+1] + AIZ[iind-ixm][jind][m+1]; AIYZ[iind][jind][m] = PA.x*AIYZ[iind-ixm][jind][m] - PC.x*AIYZ[iind-ixm][jind][m+1]; } if (ix > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(ix-1)* (AI0[iind-2*ixm][jind][m] - AI0[iind-2*ixm][jind][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*(ix-1)*(AIX[iind-2*ixm][jind][m] - AIX[iind-2*ixm][jind][m+1]); AIY[iind][jind][m] += pp*(ix-1)*(AIY[iind-2*ixm][jind][m] - AIY[iind-2*ixm][jind][m+1]); AIZ[iind][jind][m] += pp*(ix-1)*(AIZ[iind-2*ixm][jind][m] - AIZ[iind-2*ixm][jind][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*(ix-1)*(AIXX[iind-2*ixm][jind][m] - AIXX[iind-2*ixm][jind][m+1]); AIYY[iind][jind][m] += pp*(ix-1)*(AIYY[iind-2*ixm][jind][m] - AIYY[iind-2*ixm][jind][m+1]); AIZZ[iind][jind][m] += pp*(ix-1)*(AIZZ[iind-2*ixm][jind][m] - AIZZ[iind-2*ixm][jind][m+1]); AIXY[iind][jind][m] += pp*(ix-1)*(AIXY[iind-2*ixm][jind][m] - AIXY[iind-2*ixm][jind][m+1]); AIXZ[iind][jind][m] += pp*(ix-1)*(AIXZ[iind-2*ixm][jind][m] - AIXZ[iind-2*ixm][jind][m+1]); AIYZ[iind][jind][m] += pp*(ix-1)*(AIYZ[iind-2*ixm][jind][m] - AIYZ[iind-2*ixm][jind][m+1]); } } if (jx > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jx* (AI0[iind-ixm][jind-jxm][m] - AI0[iind-ixm][jind-jxm][m+1]); for(m=0;m<=mmax-a-b-1;m++) { AIX[iind][jind][m] += pp*jx*(AIX[iind-ixm][jind-jxm][m] - AIX[iind-ixm][jind-jxm][m+1]); AIY[iind][jind][m] += pp*jx*(AIY[iind-ixm][jind-jxm][m] - AIY[iind-ixm][jind-jxm][m+1]); AIZ[iind][jind][m] += pp*jx*(AIZ[iind-ixm][jind-jxm][m] - AIZ[iind-ixm][jind-jxm][m+1]); } for(m=0;m<=mmax-a-b-2;m++) { AIXX[iind][jind][m] += pp*jx*(AIXX[iind-ixm][jind-jxm][m] - AIXX[iind-ixm][jind-jxm][m+1]); AIYY[iind][jind][m] += pp*jx*(AIYY[iind-ixm][jind-jxm][m] - AIYY[iind-ixm][jind-jxm][m+1]); AIZZ[iind][jind][m] += pp*jx*(AIZZ[iind-ixm][jind-jxm][m] - AIZZ[iind-ixm][jind-jxm][m+1]); AIXY[iind][jind][m] += pp*jx*(AIXY[iind-ixm][jind-jxm][m] - AIXY[iind-ixm][jind-jxm][m+1]); AIXZ[iind][jind][m] += pp*jx*(AIXZ[iind-ixm][jind-jxm][m] - AIXZ[iind-ixm][jind-jxm][m+1]); AIYZ[iind][jind][m] += pp*jx*(AIYZ[iind-ixm][jind-jxm][m] - AIYZ[iind-ixm][jind-jxm][m+1]); } } } else /*--- Should never happen ---*/ abort(); } } return; } };}; psi3/src/bin/cints/Default_Deriv2/oe_deriv2_osrr.h0000644000101500007650000000100110754417572020557 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv2_oe_deriv2_osrr_h #define _psi_src_bin_cints_Default_Deriv2_oe_deriv2_osrr_h /*! \file oe_deriv2_osrr.h \ingroup CINTS */ namespace psi { namespace CINTS { void AI_Deriv2_OSrecurs(double ***AI0, double ***AIX, double ***AIY, double ***AIZ, double ***AIXX, double ***AIXY, double ***AIXZ, double ***AIYY, double ***AIYZ, double ***AIZZ, struct coordinates PA, struct coordinates PB, struct coordinates PC, double gamma, int iang, int jang); }} #endif psi3/src/bin/cints/Default_Deriv2/symmetrize.cc0000644000101500007650000000070410757640026020206 0ustar crawdad/*! \file symmetrize.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { void symmetrize_hessian(double **hess) { int i, j; for(i=0; i < Molecule.num_atoms*3; i++) { for(j=0; j < i; j++) { hess[i][j] = hess[j][i] = (hess[i][j] + hess[j][i]); } } return; } };}; psi3/src/bin/cints/Default_Deriv2/symmetrize.h0000644000101500007650000000036010754417572020053 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv2_symmetrize_h #define _psi_src_bin_cints_Default_Deriv2_symmetrize_h /*! \file symmetrize.h \ingroup CINTS */namespace psi { namespace CINTS { void symmetrize_hessian(double **hess); }} #endif psi3/src/bin/cints/Default_Deriv2/te_deriv2_scf.cc0000644000101500007650000007327410754417572020535 0ustar crawdad/*! \file te_deriv2_scf.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "moinfo.h" #include "compute_scf_opdm.h" #include "norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "symmetrize.h" #include "small_fns.h" #include #define PK_ORDER 0 #define INCLUDE_1ST 1 #define INCLUDE_2ND 1 namespace psi { namespace CINTS { void te_deriv2_scf(void) { /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; Libderiv_t Libderiv; /* Integrals library object */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif double **hess_te; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; register int i, j, k, l, m, ii, jj, kk, ll; register int si, sj, sk, sl ; register int sii, sjj, skk, sll, slll; register int pi, pj, pk, pl ; int max_pj, max_pl; register int pii, pjj, pkk, pll ; int switch_ij, switch_kl, switch_ijkl; int center_i, center_j, center_k, center_l, center[4]; int class_size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, quartet_size; int num_prim_comb, p, max_num_prim_comb; double AB2, CD2; double *FourInd; int I, J, K, L, IJ, KL, this_quartet, num_unique_pk, unique; int si_fao, sj_fao, sk_fao, sl_fao; int coord, coord1, coord2; int di, dj; int si_arr[3], sj_arr[3], sk_arr[3], sl_arr[3]; double *data, value[12], svalue; double fac1, fac2, fac3; double ffac1, ffac2, ffac3; double d2acc[12][12], contr, pfac, perm_pf; /*--------------- Initialization ---------------*/ hess_te = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4+DERIV_LVL,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4+DERIV_LVL); init_fjt_table(&fjt_table); #endif init_libderiv_base(); /* init_libint_base(); */ max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv12(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_cart_class_size); FourInd = init_array(max_cart_class_size); /* init_libint(&Libint,BasisSet.max_am-1,max_num_prim_comb); */ #if !PK_ORDER for (sii=0; sii BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; } center_i = BasisSet.shells[si].center-1; center_j = BasisSet.shells[sj].center-1; center_k = BasisSet.shells[sk].center-1; center_l = BasisSet.shells[sl].center-1; #if 0 if (center_i == center_j || center_i == center_k || center_i == center_l || center_j == center_k || center_j == center_l || center_k == center_l) continue; #endif ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; /* Libint.AB[0] = sp_ij->AB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; */ AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n); #endif num_prim_comb++; } } } } /* for(i=0;i<40000;i++) */ build_deriv12_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libderiv,num_prim_comb); #if INCLUDE_1ST norm_quartet(Libderiv.ABCD[0], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[1], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[2], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[6], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[7], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[8], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[9], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[10], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[11], NULL, orig_am, 0); /* For all the integrals in this buffer, find the permutationally unique ones */ this_quartet = 0; for(i=0; i < ni; i++) { I = BasisSet.shells[si].fao + i - 1; for(j=0; j < nj; j++) { J = BasisSet.shells[sj].fao + j - 1; IJ = INDEX(I,J); for(k=0; k < nk; k++) { K = BasisSet.shells[sk].fao + k - 1; for(l=0; l < nl; l++,this_quartet++) { L = BasisSet.shells[sl].fao + l - 1; KL = INDEX(K,L); if(si == sj && I < J) continue; if(sk == sl && K < L) continue; if(INDEX(si,sj) == INDEX(sk,sl) && IJ < KL) continue; value[0] = Libderiv.ABCD[0][this_quartet]; value[1] = Libderiv.ABCD[1][this_quartet]; value[2] = Libderiv.ABCD[2][this_quartet]; value[6] = Libderiv.ABCD[6][this_quartet]; value[7] = Libderiv.ABCD[7][this_quartet]; value[8] = Libderiv.ABCD[8][this_quartet]; value[9] = Libderiv.ABCD[9][this_quartet]; value[10] = Libderiv.ABCD[10][this_quartet]; value[11] = Libderiv.ABCD[11][this_quartet]; /* translational invariance */ value[3] = - value[0] - value[6] - value[9]; value[4] = - value[1] - value[7] - value[10]; value[5] = - value[2] - value[8] - value[11]; ffac1 = ffac2 = ffac3 = 1.0; if(I!=J) ffac1 *= 2.0; if(K!=L) ffac1 *= 2.0; if(I!=K) ffac2 *= 2.0; if(J!=L) ffac2 *= 2.0; if(I!=L) ffac3 *= 2.0; if(J!=K) ffac3 *= 2.0; if(INDEX(I,J) != INDEX(K,L)) ffac1 *= 2.0; if(INDEX(I,K) != INDEX(J,L)) ffac2 *= 2.0; if(INDEX(I,L) != INDEX(J,K)) ffac3 *= 2.0; if((I==J && I==K) || (J==K && J==L) || (I==J && I==L) || (I==K && I==L)) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[11]; } else if(I==K || J==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[11]; } else if(J==K || I==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[0]; F[center_i*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[0]; F[center_i*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[1]; F[center_i*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[1]; F[center_i*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[2]; F[center_i*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[2]; F[center_i*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[3]; F[center_j*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[3]; F[center_j*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[4]; F[center_j*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[4]; F[center_j*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[5]; F[center_j*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[5]; F[center_j*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[6]; F[center_k*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[6]; F[center_k*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[7]; F[center_k*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[7]; F[center_k*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[8]; F[center_k*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[8]; F[center_k*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[9]; F[center_l*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[9]; F[center_l*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[10]; F[center_l*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[10]; F[center_l*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[11]; F[center_l*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[11]; F[center_l*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[11]; } else if(I==J || K==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[11]; } else { F[center_i*3][I][J] += Dens[K][L] * ffac1 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[0]; F[center_i*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[0]; F[center_i*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[1]; F[center_i*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[1]; F[center_i*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[2]; F[center_i*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[2]; F[center_i*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[3]; F[center_j*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[3]; F[center_j*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[4]; F[center_j*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[4]; F[center_j*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[5]; F[center_j*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[5]; F[center_j*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[6]; F[center_k*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[6]; F[center_k*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[7]; F[center_k*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[7]; F[center_k*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[8]; F[center_k*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[8]; F[center_k*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[9]; F[center_l*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[9]; F[center_l*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[10]; F[center_l*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[10]; F[center_l*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[11]; F[center_l*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[11]; F[center_l*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[11]; } } /* l */ } /* k */ } /* j */ } /* i */ #endif /*-------------------------------------- Form the contributions to the Hessian --------------------------------------*/ /*--- Figure out the prefactor ---*/ pfac = 1.0; if (si == sj) pfac *= 0.5; if (sk == sl) pfac *= 0.5; if (si == sk && sj == sl || si == sl && sj == sk) pfac *= 0.5; #if INCLUDE_2ND /*------------- Form FourInd -------------*/ si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; /*--- RHF or UHF case ---*/ count = 0; for (I = si_fao; I < si_fao+ni; I++) for (J = sj_fao; J < sj_fao+nj; J++) for (K = sk_fao; K < sk_fao+nk; K++) for (L = sl_fao; L < sl_fao+nl; L++) { FourInd[count] = pfac* (4.0*Dens[I][J]*Dens[K][L] - Dens[I][K]*Dens[J][L] - Dens[I][L]*Dens[K][J])* GTOs.bf_norm[orig_am[0]][I-si_fao]* GTOs.bf_norm[orig_am[1]][J-sj_fao]* GTOs.bf_norm[orig_am[2]][K-sk_fao]* GTOs.bf_norm[orig_am[3]][L-sl_fao]; count++; } center[0] = center_i; center[1] = center_j; center[2] = center_k; center[3] = center_l; /*--- d2/didj contractions, neither di nor dj equal Bxyz ---*/ for(di=0;di<12;di++) { if (di<3 || di>5) { for(dj=di;dj<12;dj++) { if (dj<3 || dj>5) { data = Libderiv.ABCD[12+di*12+dj]; contr = 0.0; for(k=0;k= PRINT_OEDERIV) print_atommat("Two-electron component of the molecular Hessian (a.u.)",hess_te); add_mat(Hess,hess_te,Hess,Molecule.num_atoms*3,Molecule.num_atoms*3); /*--------- Clean-up ---------*/ free_libderiv(&Libderiv); #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #else free_fjt_table(&fjt_table); free_fjt(); #endif free_block(hess_te); return; } };}; psi3/src/bin/cints/Default_Deriv2/te_deriv2_scf.h0000644000101500007650000000035210754417572020362 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Deriv2_te_deriv2_scf_h #define _psi_src_bin_cints_Default_Deriv2_te_deriv2_scf_h /*! \file te_deriv2_scf.h \ingroup CINTS */namespace psi { namespace CINTS { void te_deriv2_scf(void); }} #endif psi3/src/bin/cints/Default_Deriv2/te_deriv2_scf_symm.cc0000644000101500007650000011144410754417572021572 0ustar crawdad/*! \file te_deriv2_scf_symm.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "moinfo.h" #include "compute_scf_opdm.h" #include "norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "deriv1_quartet_data.h" #include "symmetrize.h" #include "hash.h" #include "small_fns.h" #include #include #define INCLUDE_1ST 1 #define INCLUDE_2ND 1 namespace psi { namespace CINTS { void te_deriv2_scf_symm(void) { /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; Libderiv_t Libderiv; /* Integrals library object */ htable_t htable; /* hashing table */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif double **hess_te; PSI_INT_LEAST64 quartet_index; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int i, j, k, l, m, ii, jj, kk, ll; int si, sj, sk, sl ; int sii, sjj, skk, sll, slll; int usi, usj, usk, usl; int usii, usjj, uskk, usll, uslll; int pi, pj, pk, pl ; int max_pj, max_pl; int pii, pjj, pkk, pll ; int switch_ij, switch_kl, switch_ijkl; int center_i, center_j, center_k, center_l, center[4]; int *si_arr, *sj_arr, *sk_arr, *sl_arr, *key_arr; int usi_arr[3], usj_arr[3], usk_arr[3], usl_arr[3]; int usi_eq_usj, usi_eq_usk, usi_eq_usl, usj_eq_usl, usk_eq_usj, usk_eq_usl; int usij_eq_uskl, usik_eq_usjl, usil_eq_uskj; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; double lambda_T = 0.5/Symmetry.nirreps; int num_unique_quartets; int max_num_unique_quartets; int plquartet; PSI_INT_LEAST64 key, key1, key2, key3; int new_quartet, htable_ptr, nstri; double q4ijkl; int class_size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, quartet_size; int num_prim_comb, p, max_num_prim_comb; double AB2, CD2; double *FourInd; int I, J, K, L, IJ, KL, this_quartet, upk, num_unique_pk, unique; int si_fao, sj_fao, sk_fao, sl_fao; int coord, coord1, coord2; int di, dj; double *data, value[12], svalue; double fac1, fac2, fac3; double ffac1, ffac2, ffac3; double d2acc[12][12], contr, pfac, perm_pf, temp; /*--------------- Initialization ---------------*/ if (Symmetry.nirreps > 1) init_htable( &htable, Symmetry.max_stab_index ); hess_te = block_matrix(Molecule.num_atoms*3,Molecule.num_atoms*3); #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4+DERIV_LVL,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4+DERIV_LVL); init_fjt_table(&fjt_table); #endif init_libderiv_base(); max_cart_class_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libderiv12(&Libderiv,BasisSet.max_am-1,max_num_prim_comb,max_cart_class_size); FourInd = init_array(max_cart_class_size); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; if (Symmetry.nirreps == 1) { si_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sj_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); } key_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); /*-------------------------------------------- generate all symmetry unique shell quartets with ordering for building the PK-matrix --------------------------------------------*/ quartet_index = 0; for (usii=0; usii 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; fac1 = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.GnG[stab_i][stab_j]][Symmetry.GnG[stab_k][stab_l]]; usi_eq_usj = (usi == usj); usi_eq_usk = (usi == usk); usi_eq_usl = (usi == usl); usj_eq_usl = (usj == usl); usk_eq_usj = (usk == usj); usk_eq_usl = (usk == usl); usij_eq_uskl = (INDEX(usi,usj) == INDEX(usk,usl)); usik_eq_usjl = (INDEX(usi,usk) == INDEX(usj,usl)); usil_eq_uskj = (INDEX(usi,usl) == INDEX(usk,usj)); if (!usi_eq_usj) fac1 *= 2.0; if (!usk_eq_usl) fac1 *= 2.0; if (usij_eq_uskl) fac1 *= 0.5; for(dcr_ij=0;dcr_ij -1) { key_arr[count] = new_quartet; count++; } if ( (key1 == key3 && key3 != key2) || (key2 == key3 && key3 != key1) || (key2 != key3 && key1 != key3 && key2 != key1)) { new_quartet = put_entry(&htable,key2,si,sk,sj,sl,0,q4ijkl,0); if (new_quartet > -1) { key_arr[count] = new_quartet; count++; } } if ( (key1 == key2 && key3 != key1) || (key2 != key3 && key1 != key3 && key1 != key2)) { new_quartet = put_entry(&htable,key3,si,sl,sk,sj,0,0,q4ijkl); if (new_quartet > -1) { key_arr[count] = new_quartet; count++; } } } } } /* petite list is ready to be used */ } else { si_arr[count] = si; sj_arr[count] = sjj; sk_arr[count] = skk; sl_arr[count] = sll; count++; } } num_unique_quartets = count; if (count > 3*max_num_unique_quartets) throw std::domain_error("Problem with hashing?"); /*---------------------------------- Compute the nonredundant quartets ----------------------------------*/ for(plquartet=0;plquartet= htable.size || htable_ptr < 0) throw std::domain_error("Problem with hashing?"); htable.table[htable_ptr].key = EMPTY_KEY; si = htable.table[htable_ptr].si; sj = htable.table[htable_ptr].sj; sk = htable.table[htable_ptr].sk; sl = htable.table[htable_ptr].sl; fac1 = htable.table[htable_ptr].q4ijkl; fac2 = htable.table[htable_ptr].q4ikjl; fac3 = htable.table[htable_ptr].q4ilkj; if (si == sj && si == sk || sj == sk && sj == sl || si == sj && si == sl || si == sk && si == sl) { fac2 = fac3 = fac1; } else if (si == sk || sj == sl) { fac1 = fac3 = (fac1 + fac3); } else if (sj == sk || si == sl) { fac1 = fac2 = (fac1 + fac2); } else if (si == sj || sk == sl) { fac3 = fac2 = (fac3 + fac2); } } #if DEBUG if (si < 0 || si >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sj < 0 || sj >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sk < 0 || sk >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sl < 0 || sl >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); #endif /* place in "ascending" angular mom- my simple way of optimizing PHG recursion (VRR) */ /* these first two are good for the HRR */ if(BasisSet.shells[si].am < BasisSet.shells[sj].am){ dum = si; si = sj; sj = dum; temp = fac2; fac2 = fac3; fac3 = temp; } if(BasisSet.shells[sk].am < BasisSet.shells[sl].am){ dum = sk; sk = sl; sl = dum; temp = fac2; fac2 = fac3; fac3 = temp; } /* this should be /good/ for the VRR */ if(BasisSet.shells[si].am + BasisSet.shells[sj].am > BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; } center_i = BasisSet.shells[si].center-1; center_j = BasisSet.shells[sj].center-1; center_k = BasisSet.shells[sk].center-1; center_l = BasisSet.shells[sl].center-1; ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; quartet_size = ni*nj*nk*nl; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libderiv.AB[0] = sp_ij->AB[0]; Libderiv.AB[1] = sp_ij->AB[1]; Libderiv.AB[2] = sp_ij->AB[2]; Libderiv.CD[0] = sp_kl->AB[0]; Libderiv.CD[1] = sp_kl->AB[1]; Libderiv.CD[2] = sp_kl->AB[2]; /* Libint.AB[0] = sp_ij->AB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; */ AB2 = Libderiv.AB[0]*Libderiv.AB[0]+ Libderiv.AB[1]*Libderiv.AB[1]+ Libderiv.AB[2]*Libderiv.AB[2]; CD2 = Libderiv.CD[0]*Libderiv.CD[0]+ Libderiv.CD[1]*Libderiv.CD[1]+ Libderiv.CD[2]*Libderiv.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else deriv1_quartet_data(&(Libderiv.PrimQuartet[num_prim_comb]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif num_prim_comb++; } } } } /* for(i=0;i<40000;i++) */ build_deriv12_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libderiv,num_prim_comb); #if INCLUDE_1ST norm_quartet(Libderiv.ABCD[0], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[1], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[2], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[6], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[7], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[8], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[9], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[10], NULL, orig_am, 0); norm_quartet(Libderiv.ABCD[11], NULL, orig_am, 0); /* For all the integrals in this buffer, find the permutationally unique ones */ this_quartet = 0; for(i=0; i < ni; i++) { I = BasisSet.shells[si].fao + i - 1; for(j=0; j < nj; j++) { J = BasisSet.shells[sj].fao + j - 1; IJ = INDEX(I,J); for(k=0; k < nk; k++) { K = BasisSet.shells[sk].fao + k - 1; for(l=0; l < nl; l++,this_quartet++) { L = BasisSet.shells[sl].fao + l - 1; KL = INDEX(K,L); if(si == sj && I < J) continue; if(sk == sl && K < L) continue; if(INDEX(si,sj) == INDEX(sk,sl) && IJ < KL) continue; value[0] = Libderiv.ABCD[0][this_quartet]; value[1] = Libderiv.ABCD[1][this_quartet]; value[2] = Libderiv.ABCD[2][this_quartet]; value[6] = Libderiv.ABCD[6][this_quartet]; value[7] = Libderiv.ABCD[7][this_quartet]; value[8] = Libderiv.ABCD[8][this_quartet]; value[9] = Libderiv.ABCD[9][this_quartet]; value[10] = Libderiv.ABCD[10][this_quartet]; value[11] = Libderiv.ABCD[11][this_quartet]; /* translational invariance */ value[3] = - value[0] - value[6] - value[9]; value[4] = - value[1] - value[7] - value[10]; value[5] = - value[2] - value[8] - value[11]; ffac1 = fac1; ffac2 = fac2; ffac3 = fac3; /* if(I!=J) ffac1 *= 2.0; if(K!=L) ffac1 *= 2.0; if(I!=K) ffac2 *= 2.0; if(J!=L) ffac2 *= 2.0; if(I!=L) ffac3 *= 2.0; if(J!=K) ffac3 *= 2.0; if(INDEX(I,J) != INDEX(K,L)) ffac1 *= 2.0; if(INDEX(I,K) != INDEX(J,L)) ffac2 *= 2.0; if(INDEX(I,L) != INDEX(J,K)) ffac3 *= 2.0;*/ if (I != J && si == sj) ffac1 *= 2.0; if (K != L && sk == sl) ffac1 *= 2.0; if (I != K && si == sk) ffac2 *= 2.0; if (J != L && sj == sl) ffac2 *= 2.0; if (I != L && si == sl) ffac3 *= 2.0; if (J != K && sj == sk) ffac3 *= 2.0; if (INDEX(I,J) != INDEX(K,L) && INDEX(si,sj) == INDEX(sk,sl)) ffac1 *= 2.0; if (INDEX(I,K) != INDEX(J,L) && INDEX(si,sk) == INDEX(sj,sl)) ffac2 *= 2.0; if (INDEX(I,L) != INDEX(J,K) && INDEX(si,sl) == INDEX(sj,sk)) ffac3 *= 2.0; if((I==J && I==K) || (J==K && J==L) || (I==J && I==L) || (I==K && I==L)) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.5 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.5 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.5 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.5 * value[11]; } else if(I==K || J==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.5 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.5 * value[11]; } else if(J==K || I==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[0]; F[center_i*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[0]; F[center_i*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[1]; F[center_i*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[1]; F[center_i*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[2]; F[center_i*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[2]; F[center_i*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[3]; F[center_j*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[3]; F[center_j*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[4]; F[center_j*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[4]; F[center_j*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[5]; F[center_j*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[5]; F[center_j*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[6]; F[center_k*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[6]; F[center_k*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[7]; F[center_k*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[7]; F[center_k*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[8]; F[center_k*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[8]; F[center_k*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * 0.75 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * 0.75 * value[9]; F[center_l*3][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[9]; F[center_l*3][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * 0.75 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * 0.75 * value[10]; F[center_l*3+1][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[10]; F[center_l*3+1][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * 0.75 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * 0.75 * value[11]; F[center_l*3+2][I][L] -= Dens[J][K] * ffac3 * 0.5 * value[11]; F[center_l*3+2][J][K] -= Dens[I][L] * ffac3 * 0.5 * value[11]; } else if(I==J || K==L) { F[center_i*3][I][J] += Dens[K][L] * ffac1 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[11]; } else { F[center_i*3][I][J] += Dens[K][L] * ffac1 * value[0]; F[center_i*3][K][L] += Dens[I][J] * ffac1 * value[0]; F[center_i*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[0]; F[center_i*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[0]; F[center_i*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[0]; F[center_i*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[0]; F[center_i*3+1][I][J] += Dens[K][L] * ffac1 * value[1]; F[center_i*3+1][K][L] += Dens[I][J] * ffac1 * value[1]; F[center_i*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[1]; F[center_i*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[1]; F[center_i*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[1]; F[center_i*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[1]; F[center_i*3+2][I][J] += Dens[K][L] * ffac1 * value[2]; F[center_i*3+2][K][L] += Dens[I][J] * ffac1 * value[2]; F[center_i*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[2]; F[center_i*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[2]; F[center_i*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[2]; F[center_i*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[2]; F[center_j*3][I][J] += Dens[K][L] * ffac1 * value[3]; F[center_j*3][K][L] += Dens[I][J] * ffac1 * value[3]; F[center_j*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[3]; F[center_j*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[3]; F[center_j*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[3]; F[center_j*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[3]; F[center_j*3+1][I][J] += Dens[K][L] * ffac1 * value[4]; F[center_j*3+1][K][L] += Dens[I][J] * ffac1 * value[4]; F[center_j*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[4]; F[center_j*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[4]; F[center_j*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[4]; F[center_j*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[4]; F[center_j*3+2][I][J] += Dens[K][L] * ffac1 * value[5]; F[center_j*3+2][K][L] += Dens[I][J] * ffac1 * value[5]; F[center_j*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[5]; F[center_j*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[5]; F[center_j*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[5]; F[center_j*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[5]; F[center_k*3][I][J] += Dens[K][L] * ffac1 * value[6]; F[center_k*3][K][L] += Dens[I][J] * ffac1 * value[6]; F[center_k*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[6]; F[center_k*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[6]; F[center_k*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[6]; F[center_k*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[6]; F[center_k*3+1][I][J] += Dens[K][L] * ffac1 * value[7]; F[center_k*3+1][K][L] += Dens[I][J] * ffac1 * value[7]; F[center_k*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[7]; F[center_k*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[7]; F[center_k*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[7]; F[center_k*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[7]; F[center_k*3+2][I][J] += Dens[K][L] * ffac1 * value[8]; F[center_k*3+2][K][L] += Dens[I][J] * ffac1 * value[8]; F[center_k*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[8]; F[center_k*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[8]; F[center_k*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[8]; F[center_k*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[8]; F[center_l*3][I][J] += Dens[K][L] * ffac1 * value[9]; F[center_l*3][K][L] += Dens[I][J] * ffac1 * value[9]; F[center_l*3][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[9]; F[center_l*3][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[9]; F[center_l*3][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[9]; F[center_l*3][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[9]; F[center_l*3+1][I][J] += Dens[K][L] * ffac1 * value[10]; F[center_l*3+1][K][L] += Dens[I][J] * ffac1 * value[10]; F[center_l*3+1][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[10]; F[center_l*3+1][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[10]; F[center_l*3+1][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[10]; F[center_l*3+1][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[10]; F[center_l*3+2][I][J] += Dens[K][L] * ffac1 * value[11]; F[center_l*3+2][K][L] += Dens[I][J] * ffac1 * value[11]; F[center_l*3+2][I][K] -= Dens[J][L] * ffac2 * 0.25 * value[11]; F[center_l*3+2][J][L] -= Dens[I][K] * ffac2 * 0.25 * value[11]; F[center_l*3+2][I][L] -= Dens[J][K] * ffac3 * 0.25 * value[11]; F[center_l*3+2][J][K] -= Dens[I][L] * ffac3 * 0.25 * value[11]; } } /* l */ } /* k */ } /* j */ } /* i */ #endif /*-------------------------------------- Form the contributions to the Hessian --------------------------------------*/ /*--- Figure out the prefactor ---*/ pfac = 1.0; if (usi == usj) pfac *= 0.5; if (usk == usl) pfac *= 0.5; if (usi == usk && usj == usl || usi == usl && usj == usk) pfac *= 0.5; #if INCLUDE_2ND /*------------- Form FourInd -------------*/ si_fao = BasisSet.shells[si].fao-1; sj_fao = BasisSet.shells[sj].fao-1; sk_fao = BasisSet.shells[sk].fao-1; sl_fao = BasisSet.shells[sl].fao-1; /*--- RHF or UHF case ---*/ count = 0; for (I = si_fao; I < si_fao+ni; I++) for (J = sj_fao; J < sj_fao+nj; J++) for (K = sk_fao; K < sk_fao+nk; K++) for (L = sl_fao; L < sl_fao+nl; L++) { FourInd[count] = pfac* (4.0*Dens[I][J]*Dens[K][L] - Dens[I][K]*Dens[J][L] - Dens[I][L]*Dens[K][J])* GTOs.bf_norm[orig_am[0]][I-si_fao]* GTOs.bf_norm[orig_am[1]][J-sj_fao]* GTOs.bf_norm[orig_am[2]][K-sk_fao]* GTOs.bf_norm[orig_am[3]][L-sl_fao]; count++; } center[0] = center_i; center[1] = center_j; center[2] = center_k; center[3] = center_l; /*--- d2/didj contractions, neither di nor dj equal Bxyz ---*/ for(di=0;di<12;di++) { if (di<3 || di>5) { for(dj=di;dj<12;dj++) { if (dj<3 || dj>5) { data = Libderiv.ABCD[12+di*12+dj]; contr = 0.0; for(k=0;k= PRINT_OEDERIV) print_atommat("Two-electron component of the molecular Hessian (a.u.)",hess_te); add_mat(Hess,hess_te,Hess,Molecule.num_atoms*3,Molecule.num_atoms*3); /*--------- Clean-up ---------*/ free_libderiv(&Libderiv); #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #else free_fjt_table(&fjt_table); free_fjt(); #endif free_block(hess_te); return; } };}; psi3/src/bin/cints/Default_Ints/0000755000101500007650000000000011146111655015242 5ustar crawdadpsi3/src/bin/cints/Default_Ints/oe_ints.cc0000644000101500007650000003632610757640026017231 0ustar crawdad/*! \file \ingroup CINTS \brief One-electron integrals. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"oe_osrr.h" #include"small_fns.h" #include"moment_ints.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #endif namespace { double** real_usotao; double* ao_to_so(double*); } namespace psi { namespace CINTS { /*--- These frequently used numbers are to avoid costs of passing parameters ---*/ static double oo2g, oog, gam; /*-------------------------------------------------------------------------- This function computes one-electron integrals and writes them out to disk --------------------------------------------------------------------------*/ void oe_ints() { struct coordinates PA, PB, AB, PC; struct shell_pair *sp; struct unique_shell_pair *usp; register int i, j, k, l, ii, jj, kk, ll; int count; int si, sj, sjj, usi, usj; int np_i, np_j; int so_i, so_j, so_ij, bf_i, bf_j; int sz; int l1, l2, m1, m2, n1, n2; int ioffset, joffset ; int ij; int ijpack; int h1; int am; int dimension ; int ni,li,nj,lj,ai,aj; int am_i, am_j; int ixm, iym, izm, jxm, jym, jzm; int indmax,iind,jind; int atom; int bf; int ud, dcr_ij, stab_i, stab_j; int *R_list; int R; int lambda_R; int *sj_arr; int iimax, jjmax; int num_unique_doublets; double a1, a2; double ab2; double x0, y0, z0; double tx, ty, tz; double ***Stmp, ***Ttmp, ***Vtmp; double **stemp, **ttemp, **vtemp, **temp, **tmp_dptr; double *S, *T, *V; double inorm, jnorm, over_pf; double *ptr1, *ptr2, norm1, norm12; double ***AI0; double **OIX, **OIY, **OIZ; #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4,UserOptions.cutoff); #endif /*--- allocate room for the one-e matrices ---*/ dimension = ioff[Symmetry.num_so]; S = init_array(dimension); V = init_array(dimension); T = init_array(dimension); /*--- allocate storage for shell blocks of one electron integrals ---*/ dimension = ioff[BasisSet.max_am]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ Stmp = (double ***) malloc(Symmetry.nirreps*sizeof(double **)); Ttmp = (double ***) malloc(Symmetry.nirreps*sizeof(double **)); Vtmp = (double ***) malloc(Symmetry.nirreps*sizeof(double **)); for(i=0;i 1) { /*--- Non-C1 symmetry case ---*/ usp = &(Symmetry.us_pairs[usi][usj]); sjj = Symmetry.us2s[usj]; stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sjj].am]; am_j = BasisSet.shells[sjj].am-1; jzm = 1; jym = am_j+1; jxm = jym*jym; R_list = Symmetry.dcr[stab_i][stab_j]; lambda_R = Symmetry.nirreps/Symmetry.dcr_deg[stab_i][stab_j]; memset(sj_arr,0,sizeof(int)*Symmetry.nirreps); count = 0; /*--- generate petite list ---*/ for(dcr_ij=0;dcr_ij 1) { stemp = Stmp[ud]; ttemp = Ttmp[ud]; vtemp = Vtmp[ud]; } sp = &(BasisSet.shell_pairs[si][sj]); AB.x = sp->AB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- zero the temporary storage for accumulating contractions ---*/ for(i=0;ia1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; OI_OSrecurs(OIX,OIY,OIZ,PA,PB,gam,am_i+2,am_j+2); /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj ; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll ; x0 = OIX[l1][l2]; y0 = OIY[m1][m2]; z0 = OIZ[n1][n2]; stemp[ai][aj] += over_pf*x0*y0*z0; tx = a2*(2*l2+1)*OIX[l1][l2] - 2*a2*a2*OIX[l1][l2+2]; if (l2 >= 2) tx -= 0.5*l2*(l2-1)*OIX[l1][l2-2]; ty = a2*(2*m2+1)*OIY[m1][m2] - 2*a2*a2*OIY[m1][m2+2]; if (m2 >= 2) ty -= 0.5*m2*(m2-1)*OIY[m1][m2-2]; tz = a2*(2*n2+1)*OIZ[n1][n2] - 2*a2*a2*OIZ[n1][n2+2]; if (n2 >= 2) tz -= 0.5*n2*(n2-1)*OIZ[n1][n2-2]; ttemp[ai][aj] += over_pf*(tx*y0*z0 + x0*ty*z0 + x0*y0*tz); aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ /*--- create all am components of si ---*/ for(atom=0;atomP[i][j][0] - Molecule.centers[atom].x; PC.y = sp->P[i][j][1] - Molecule.centers[atom].y; PC.z = sp->P[i][j][2] - Molecule.centers[atom].z; AI_OSrecurs(AI0,PA,PB,PC,gam,am_i,am_j); ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj ; iind = n1*izm + m1*iym + l1*ixm; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll ; jind = n2*jzm + m2*jym + l2*jxm; vtemp[ai][aj] += -AI0[iind][jind][0] * Molecule.centers[atom].Z_nuc * over_pf; aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } } /*--- end primitive contraction ---*/ /*--- Normalize the contracted integrals ---*/ ptr1 = GTOs.bf_norm[am_i]; ptr2 = GTOs.bf_norm[am_j]; for(i=0; i 0) { li = 2*am_i + 1; mmult(GTOs.cart2pureang[am_i],0,stemp,0,temp,0,li,ni,nj,0); for(i=0;i 0) { lj = 2*am_j + 1; mmult(stemp,0,GTOs.cart2pureang[am_j],1,temp,0,li,nj,lj,0); for(i=0;i 1) { ioffset = BasisSet.shells[si].fbf-1; for(ij=0;ijSOpair_npi[0];ij++) { i = usp->SOpair_bf_i[0][ij]; j = usp->SOpair_bf_j[0][ij]; so_i = usp->SOpair_so_i[0][ij]; so_j = usp->SOpair_so_j[0][ij]; so_ij = INDEX(so_i,so_j); S[so_ij] = T[so_ij] = 0.0; for(ud=0;ud 1) { for(i=0;i= PRINT_OEI) { fprintf(outfile," -Overlap integrals:\n\n"); print_array(S,Symmetry.num_so,outfile); fprintf(outfile,"\n -Kinetic energy integrals:\n\n"); print_array(T,Symmetry.num_so,outfile); fprintf(outfile,"\n -Nuclear attraction energy integrals:\n\n"); print_array(V,Symmetry.num_so,outfile); fprintf(outfile,"\n"); } // // If EFIELD was specified, add the contribution to the potential integrals // if (UserOptions.E_given) { moment_ints(); const int ntri_ao = ioff[BasisSet.num_ao]; double* MX; double* MY; double* MZ; double* M = init_array(ntri_ao); // Read and transform to SO basis real_usotao = BasisSet.puream ? chkpt_rd_usotao() : Symmetry.usotao; iwl_rdone(IOUnits.itapMX_AO,PSIF_AO_MX,M,ntri_ao,0,0,outfile); MX = ao_to_so(M); if (UserOptions.print_lvl >= PRINT_OEI) { fprintf(outfile,"\n -mu(x) in SO basis:\n\n"); print_array(MX,Symmetry.num_so,outfile); } iwl_rdone(IOUnits.itapMY_AO,PSIF_AO_MY,M,ntri_ao,0,0,outfile); MY = ao_to_so(M); if (UserOptions.print_lvl >= PRINT_OEI) { fprintf(outfile,"\n -mu(y) in SO basis:\n\n"); print_array(MY,Symmetry.num_so,outfile); } iwl_rdone(IOUnits.itapMZ_AO,PSIF_AO_MZ,M,ntri_ao,0,0,outfile); MZ = ao_to_so(M); if (UserOptions.print_lvl >= PRINT_OEI) { fprintf(outfile,"\n -mu(z) in SO basis:\n\n"); print_array(MZ,Symmetry.num_so,outfile); } if (BasisSet.puream) Chkpt::free(real_usotao); // E field is given in the frame specified by EFIELD_FRAME // if necessary, rotate E to the canonical frame, in which all integrals are computed double* E = new double[3]; for(int i=0; i<3; ++i) E[i] = 0.0; switch(UserOptions.E_frame) { case reference: { double** rref = chkpt_rd_rref(); for(int i=0; i<3; ++i) for(int j=0; j<3; ++j) E[i] += rref[i][j] * UserOptions.E[j]; Chkpt::free(rref); } break; case canonical: for(int i=0; i<3; ++i) E[i] = UserOptions.E[i]; break; default: throw std::runtime_error("This value for UserOptions.E_frame not supported. See documentation for keyword EFIELD_FRAME."); } fprintf(outfile,"\n EFIELD(input file) = ( "); for(int i=0; i<3; ++i) fprintf(outfile," %12.9lf ",UserOptions.E[i]); fprintf(outfile," )\n"); if (UserOptions.E_frame != canonical) { fprintf(outfile," EFIELD(%s frame) = ( ", (UserOptions.E_frame==canonical ? "canonical" : "reference")); for(int i=0; i<3; ++i) fprintf(outfile," %12.9lf ",E[i]); fprintf(outfile," )\n"); } const int ntri_so = ioff[Symmetry.num_so]; C_DAXPY(ntri_so, E[0], MX, 1, V, 1); C_DAXPY(ntri_so, E[1], MY, 1, V, 1); C_DAXPY(ntri_so, E[2], MZ, 1, V, 1); fprintf(outfile," Electric field contribution added to the one-electron potential integrals\n"); if (UserOptions.print_lvl >= PRINT_OEI) { fprintf(outfile,"\n -Nuclear attraction energy integrals (+electric field):\n\n"); print_array(V,Symmetry.num_so,outfile); } } iwl_wrtone(IOUnits.itapS,PSIF_SO_S,dimension,S); iwl_wrtone(IOUnits.itapT,PSIF_SO_T,dimension,T); iwl_wrtone(IOUnits.itapV,PSIF_SO_V,dimension,V); free(S); free(T); free(V); #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #endif return; } };}; namespace { using namespace psi::CINTS; // takes a lower triangle of a AO matrix and returns an allocated lower triangle of an SO matrix double* ao_to_so(double* M_ao_tri) { double** M_ao_sq = block_matrix(BasisSet.num_ao,BasisSet.num_ao); int ij = 0; for(int i=0; i #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"fjt.h" #endif namespace psi { namespace CINTS { /*! Recurrence relation are from the same paper - pp. 3971-3972 */ void AI_OSrecurs(double ***AI0, struct coordinates PA, struct coordinates PB, struct coordinates PC, double gamma, int iang, int jang) { int a,b,m; int izm = 1; int iym = iang + 1; int ixm = iym * iym; int jzm = 1; int jym = jang + 1; int jxm = jym * jym; int ix,iy,iz,jx,jy,jz; int iind,jind; double pp = 1/(2*gamma); int mmax = iang+jang; double tmp = sqrt(gamma)*M_2_SQRTPI; double u = gamma*(PC.x*PC.x + PC.y*PC.y + PC.z*PC.z); static double F[2*CINTS_MAX_AM+1]; #ifdef USE_TAYLOR_FM taylor_compute_fm(F,u,mmax); #else calc_f(F,mmax,u); #endif /* Computing starting integrals for recursion */ for(m=0;m<=mmax;m++) AI0[0][0][m] = tmp*F[m]; /* Upward recursion in j with i=0 */ for(b=1;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm+jy*jym+jz*jzm; if (jz > 0) { for(m=0;m<=mmax-b;m++) /* Electrostatic potential integrals */ AI0[0][jind][m] = PB.z*AI0[0][jind-jzm][m] - PC.z*AI0[0][jind-jzm][m+1]; if (jz > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jz-1)*(AI0[0][jind-2*jzm][m] - AI0[0][jind-2*jzm][m+1]); } } else if (jy > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.y*AI0[0][jind-jym][m] - PC.y*AI0[0][jind-jym][m+1]; if (jy > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jy-1)*(AI0[0][jind-2*jym][m] - AI0[0][jind-2*jym][m+1]); } } else if (jx > 0) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] = PB.x*AI0[0][jind-jxm][m] - PC.x*AI0[0][jind-jxm][m+1]; if (jx > 1) { for(m=0;m<=mmax-b;m++) AI0[0][jind][m] += pp*(jx-1)*(AI0[0][jind-2*jxm][m] - AI0[0][jind-2*jxm][m+1]); } } else throw std::domain_error(" There's some error in the AI_OSrecurs algorithm\n\n"); } /* The following fragment cannot be vectorized easily, I guess :-) */ /* Upward recursion in i with all possible j's */ for(b=0;b<=jang;b++) for(jx=0;jx<=b;jx++) for(jy=0;jy<=b-jx;jy++) { jz = b-jx-jy; jind = jx*jxm + jy*jym + jz*jzm; for(a=1;a<=iang;a++) for(ix=0;ix<=a;ix++) for(iy=0;iy<=a-ix;iy++) { iz = a-ix-iy; iind = ix*ixm + iy*iym + iz*izm; if (iz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.z*AI0[iind-izm][jind][m] - PC.z*AI0[iind-izm][jind][m+1]; if (iz > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iz-1)* (AI0[iind-2*izm][jind][m] - AI0[iind-2*izm][jind][m+1]); } if (jz > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jz* (AI0[iind-izm][jind-jzm][m] - AI0[iind-izm][jind-jzm][m+1]); } } else if (iy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.y*AI0[iind-iym][jind][m] - PC.y*AI0[iind-iym][jind][m+1]; if (iy > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(iy-1)* (AI0[iind-2*iym][jind][m] - AI0[iind-2*iym][jind][m+1]); } if (jy > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jy* (AI0[iind-iym][jind-jym][m] - AI0[iind-iym][jind-jym][m+1]); } } else if (ix > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] = PA.x*AI0[iind-ixm][jind][m] - PC.x*AI0[iind-ixm][jind][m+1]; if (ix > 1) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*(ix-1)* (AI0[iind-2*ixm][jind][m] - AI0[iind-2*ixm][jind][m+1]); } if (jx > 0) { for(m=0;m<=mmax-a-b;m++) AI0[iind][jind][m] += pp*jx* (AI0[iind-ixm][jind-jxm][m] - AI0[iind-ixm][jind-jxm][m+1]); } } else throw std::domain_error(" There's some error in the AI_OSrecurs algorithm\n\n"); } } return; } void OI_OSrecurs(double **OIX, double **OIY, double **OIZ, struct coordinates PA, struct coordinates PB, double gamma, int lmaxi, int lmaxj) { int i,j,k; double pp = 1/(2*gamma); OIX[0][0] = OIY[0][0] = OIZ[0][0] = 1.0; /* Upward recursion in j for i=0 */ OIX[0][1] = PB.x; OIY[0][1] = PB.y; OIZ[0][1] = PB.z; for(j=1;j #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"quartet_data.h" #include"iwl_tebuf.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif namespace psi { namespace CINTS { //! Two-electron integral computation. void te_ints() { const double toler = UserOptions.cutoff; /*--- ASCII file to print integrals ---*/ FILE *eriout ; /*--- Various data structures ---*/ struct iwlbuf ERIOUT; /* IWL buffer for target integrals */ struct tebuf *tot_data; /* accum. for contracted integrals */ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libint_t Libint; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif int total_te_count = 0; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; register int i, j, k, l, m, ii, jj, kk, ll; register int si, sj, sk, sl ; register int sii, sjj, skk, sll , slll; register int pi, pj, pk, pl; int max_pj, max_pl; int upk, num_unique_pk; int usi_arr[3], usj_arr[3], usk_arr[3], usl_arr[3]; int *sj_arr, *sk_arr, *sl_arr; int *sj_fbf_arr, *sk_fbf_arr, *sl_fbf_arr; int usii,usjj,uskk,usll,usi,usj,usk,usl; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size, class_size; int max_class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p; double so_int; double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *puream_data; double **plist_data; double pkblock_end_value = 0.0; double temp; /*--------------- Initialization ---------------*/ #if PRINT eriout = fopen("eriout.dat","w"); #endif iwl_buf_init(&ERIOUT, IOUnits.itap33, toler, 0, 0); #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4); init_fjt_table(&fjt_table); #endif init_libint_base(); /*------------------------- Allocate data structures -------------------------*/ max_cart_class_size = (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am]); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; tot_data = (struct tebuf*) malloc(max_num_unique_quartets*max_cart_class_size*sizeof(struct tebuf)); memset(tot_data, 0, (max_num_unique_quartets*max_cart_class_size)*sizeof(struct tebuf)); #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif if (BasisSet.puream) puream_data = (double *) malloc(sizeof(double)* (BasisSet.max_am*2-1)* ioff[BasisSet.max_am]* ioff[BasisSet.max_am]* ioff[BasisSet.max_am]); sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) { if (BasisSet.puream) max_class_size = (2*BasisSet.max_am-1)*(2*BasisSet.max_am-1)*(2*BasisSet.max_am-1)*(2*BasisSet.max_am-1); else max_class_size = max_cart_class_size; plist_data = block_matrix(max_num_unique_quartets,max_class_size); sj_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_fbf_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); } max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); init_libint(&Libint, BasisSet.max_am-1, max_num_prim_comb); /*------------------------------------------------- generate all unique shell quartets with ordering suitable for building the PK-matrix -------------------------------------------------*/ if(UserOptions.print_lvl >= PRINT_DEBUG) { fprintf(outfile," -Electron repulsion integrals:\n\n"); } for (usii=0; usii BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am){ dum = usi; usi = usk; usk = dum; dum = usj; usj = usl; usl = dum; } si = Symmetry.us2s[usi]; sjj = Symmetry.us2s[usj]; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ usp_ij = &(Symmetry.us_pairs[usi][usj]); usp_kl = &(Symmetry.us_pairs[usk][usl]); stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; ni = (BasisSet.puream ? 2*BasisSet.shells[si].am - 1 : ioff[BasisSet.shells[si].am]); nj = (BasisSet.puream ? 2*BasisSet.shells[sjj].am - 1 : ioff[BasisSet.shells[sjj].am]); nk = (BasisSet.puream ? 2*BasisSet.shells[skk].am - 1 : ioff[BasisSet.shells[skk].am]); nl = (BasisSet.puream ? 2*BasisSet.shells[sll].am - 1 : ioff[BasisSet.shells[sll].am]); class_size = ni*nj*nk*nl; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); memset(sj_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_fbf_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ij=0;dcr_ijAB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+Libint.AB[1]*Libint.AB[1]+Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+Libint.CD[1]*Libint.CD[1]+Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*--- Compute the integrals ---*/ if (am) { #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i 1) memcpy(plist_data[plquartet],data,sizeof(double)*class_size); } else { temp = 0.0; for(p=0;p 1) plist_data[plquartet][0] = temp; else { #ifdef NONDOUBLE_INTS raw_data[0] = temp; data = raw_data; #else Libint.int_stack[0] = temp; data = Libint.int_stack; #endif } } } /* end of computing "petit" list */ num = 0; if (Symmetry.nirreps > 1) { /*--- Non-C1 case ---*/ /*------------------------------------------------------------------------ Now we have everything to build SO's. Need to distinguish several cases that are slightly different from each other. To avoid extra if's inside the loops I separated them: 1) usi == usj == usk == usl 2) usi == usj != usk == usl 3) usi == usk != usj == usl 4) usi == usj 5) usk == usl 6) general case "Symmetrization" is based on Pitzer's equal contribution theorem. NOTE: only the last case is commented. ------------------------------------------------------------------------*/ bf_i = BasisSet.shells[si].fbf-1; if (usi == usj && usi == usk && usi == usl) for(irrep=0;irrepSOpair_npi[irrep]) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;kl<=ij;kl++) { so_k = usp_kl->SOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; so_int = 0.0; for(s=0;stoler) if (so_i >= so_k) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } } } } else if (usi == usj && usk == usl) for(irrep=0;irrepSOpair_npi[irrep]) && (npi_kl = usp_kl->SOpair_npi[irrep])) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; so_int = 0.0; for(s=0;stoler) if (so_i >= so_k) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } } } } else if (usi == usk && usj == usl) for(irrep=0;irrepSOpair_npi[irrep]) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;kl<=ij;kl++) { so_k = usp_kl->SOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; so_int = 0.0; for(s=0;stoler) if (so_i >= so_j) if (so_k >= so_l) if ((so_i > so_k) || (so_i == so_k && so_j >= so_l)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if ((so_i > so_l) || (so_i == so_l && so_j >= so_k)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_l; tot_data[num].l = (short int) so_k; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_l; tot_data[num].j = (short int) so_k; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if (so_k >= so_l) if ((so_j > so_k) || (so_j == so_k && so_i >= so_l)) { tot_data[num].i = (short int) so_j; tot_data[num].j = (short int) so_i; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_j; tot_data[num].l = (short int) so_i; tot_data[num++].val = so_int; } else if ((so_j > so_l) || (so_j == so_l && so_i >= so_k)) { tot_data[num].i = (short int) so_j; tot_data[num].j = (short int) so_i; tot_data[num].k = (short int) so_l; tot_data[num].l = (short int) so_k; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_l; tot_data[num].j = (short int) so_k; tot_data[num].k = (short int) so_j; tot_data[num].l = (short int) so_i; tot_data[num++].val = so_int; } } } } else if (usi == usj) for(irrep=0;irrepSOpair_npi[irrep]) && (npi_kl = usp_kl->SOpair_npi[irrep])) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; so_int = 0.0; for(s=0;stoler) if (so_k >= so_l) if ((so_i > so_k) || (so_i == so_k && so_j >= so_l)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if ((so_i > so_l) || (so_i == so_l && so_j >= so_k)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_l; tot_data[num].l = (short int) so_k; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_l; tot_data[num].j = (short int) so_k; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } } } } else if (usk == usl) for(irrep=0;irrepSOpair_npi[irrep]) && (npi_kl = usp_kl->SOpair_npi[irrep])) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; so_int = 0.0; for(s=0;stoler) if (so_i >= so_j) if ((so_i > so_k) || (so_i == so_k && so_j >= so_l)){ tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if ((so_j > so_k) || (so_j == so_k && so_i >= so_l)){ tot_data[num].i = (short int) so_j; tot_data[num].j = (short int) so_i; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_j; tot_data[num].l = (short int) so_i; tot_data[num++].val = so_int; } } } } else for(irrep=0;irrepSOpair_npi[irrep]) && (npi_kl = usp_kl->SOpair_npi[irrep])) for(ij=0;ijSOpair_bf_i[irrep][ij]; /*--- Basis function type to which this SO from usi corresponds, e.g. px, dxz, etc. ---*/ j = usp_ij->SOpair_bf_j[irrep][ij]; so_i = usp_ij->SOpair_so_i[irrep][ij]; /*--- Absolute index of this SO from usi ---*/ so_j = usp_ij->SOpair_so_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; so_k = usp_kl->SOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; #if SCF_ONLY /*--- Throw out the combinations which have SOs that belong to 4 different irreps. Such integrals don't contribute to the Fock matrices ---*/ if (UserOptions.scf_only) if (Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_j] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_k] && Symmetry.so2symblk[so_i] != Symmetry.so2symblk[so_l]) continue; #endif index = ind_offset + k*nl + l; /*--- Based on basis function types figure out which particular integral from these quartets contributes ---*/ so_int = 0.0; for(s=0;stoler) /*--- For non-zero integrals pring their indices into canonical order ---*/ if (so_i >= so_j) if (so_k >= so_l) if ((so_i > so_k) || (so_i == so_k && so_j >= so_l)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if ((so_i > so_l) || (so_i == so_l && so_j >= so_k)) { tot_data[num].i = (short int) so_i; tot_data[num].j = (short int) so_j; tot_data[num].k = (short int) so_l; tot_data[num].l = (short int) so_k; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_l; tot_data[num].j = (short int) so_k; tot_data[num].k = (short int) so_i; tot_data[num].l = (short int) so_j; tot_data[num++].val = so_int; } else if (so_k >= so_l) if ((so_j > so_k) || (so_j == so_k && so_i >= so_l)) { tot_data[num].i = (short int) so_j; tot_data[num].j = (short int) so_i; tot_data[num].k = (short int) so_k; tot_data[num].l = (short int) so_l; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_k; tot_data[num].j = (short int) so_l; tot_data[num].k = (short int) so_j; tot_data[num].l = (short int) so_i; tot_data[num++].val = so_int; } else if ((so_j > so_l) || (so_j == so_l && so_i >= so_k)) { tot_data[num].i = (short int) so_j; tot_data[num].j = (short int) so_i; tot_data[num].k = (short int) so_l; tot_data[num].l = (short int) so_k; tot_data[num++].val = so_int; } else { tot_data[num].i = (short int) so_l; tot_data[num].j = (short int) so_k; tot_data[num].k = (short int) so_j; tot_data[num].l = (short int) so_i; tot_data[num++].val = so_int; } } } } } else { /*--- C1 symmetry ---*/ /*--- Here just put non-redundant integrals to tot_data ---*/ if(usi==usj&&usk==usl&&usi==usk) { /*--- All shells are the same - the (aa|aa) case ---*/ iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = ii; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : kk ; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); if(fabs(data[index])>toler){ tot_data[num].i = (short int) (ii+ioffset); tot_data[num].j = (short int) (jj+joffset); tot_data[num].k = (short int) (kk+koffset); tot_data[num].l = (short int) (ll+loffset); tot_data[num].val = data[index]; num++; } } } } } } else if(usi==usk && usj==usl){ /*--- The (ab|ab) case ---*/ iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = nj - 1; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : nl - 1; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); if(fabs(data[index])>toler){ i = ii + ioffset; j = jj + joffset; k = kk + koffset; l = ll + loffset; if (i < j) { SWAP(i,j); SWAP(k,l); } if (i < k) { SWAP(i,k); SWAP(j,l); } tot_data[num].i = (short int) i; tot_data[num].j = (short int) j; tot_data[num].k = (short int) k; tot_data[num].l = (short int) l; tot_data[num].val = data[index]; num++; } } } } } } else { /*--- The (ab|cd) case ---*/ iimax = ni - 1; kkmax = nk - 1; for(ii=0; ii <= iimax; ii++){ jjmax = (usi==usj) ? ii : nj - 1; for(jj=0; jj <= jjmax; jj++){ for(kk=0; kk <= kkmax; kk++){ llmax = (usk==usl) ? kk : nl - 1; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); if(fabs(data[index])>toler){ i = ii + ioffset; j = jj + joffset; k = kk + koffset; l = ll + loffset; if (i < j) SWAP(i,j); if (k < l) SWAP(k,l); if ((i < k) || (i == k && j < l)) { SWAP(i,k); SWAP(j,l); } tot_data[num].i = (short int) i; tot_data[num].j = (short int) j; tot_data[num].k = (short int) k; tot_data[num].l = (short int) l; tot_data[num].val = data[index]; num++; } } } } } } } if (num) { /* Let's see if we need to write out something */ total_te_count += num; if (upk == num_unique_pk - 1) /* if this is the last quartet needed for a pk-block - let CSCF know by setting index i of the last integral to negative of itself. The only guy where this trick won't work will be (00|00). But normally (00|00) is of (ss|ss) type and is enough for computing one pk-matrix element. PK-buffer won't get overfull because of this one guy */ tot_data[num-1].i = -tot_data[num-1].i; iwl_buf_wrt_struct_nocut(&ERIOUT, tot_data, num); } if(UserOptions.print_lvl >= PRINT_DEBUG) { /* fprintf(outfile," -Electron repulsion integrals:\n\n"); */ for(n=0; n 1) { free_block(plist_data); free(sj_fbf_arr); free(sk_fbf_arr); free(sl_fbf_arr); } if (BasisSet.puream) free(puream_data); #ifdef NONDOUBLE_INTS free(raw_data); #endif #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #else free_fjt_table(&fjt_table); free_fjt(); #endif return; } };}; psi3/src/bin/cints/Default_Ints/te_ints.h0000644000101500007650000000030210754663017017063 0ustar crawdad#ifndef _psi_src_bin_cints_Default_Ints_te_ints_h #define _psi_src_bin_cints_Default_Ints_te_ints_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void te_ints(); }} #endif psi3/src/bin/cints/defines.h0000644000101500007650000001040010754663017014452 0ustar crawdad#ifndef _psi_src_bin_cints_defines_h #define _psi_src_bin_cints_defines_h /*! \file \ingroup CINTS \brief Enter brief description of file here */ /*--------------------- Customizable values ---------------------*/ #define CINTS_MAX_AM 10 /* Max ang. mom. + 1 */ #define MAX_NUM_AO 4000 /* Maximum number of AOs */ #define CUTOFF 15 /* Default cutoff on the integrals */ #define ROT_INV_TOLER 1E-4 /* Tolerance on the "rotational variance" */ #define MAX_NUM_DOUBLES 2500000 /* Default number of double words to use in MP2 */ /*---------------------------------- Flags for conditional compilation ----------------------------------*/ #define PRINT 0 /* Print two-electron integrals out? */ #define PRINT_DERIV1 0 /* Print derivative integrals? Do this *only* for no-symmetry, non-puream cases */ #define USE_MM 1 /* Use matrix multiplies rather than just nested loops in cart->puream transformation and normalization (should always be set to 1 except for testing purposes)*/ #define SPARSE_C2P 1 /* Use sparcity of cartesian to spherical harmonics transformation */ #define USE_BLAS 0 /* Use routines from vendor-provided BLAS library for 4-index transformations such as cart->puream (only if SPARSE_C2P is set 0, otherwise sparse matrix multiplies will be used), AO->MO, etc.; Use only if you have libblas.a or its other analog available */ #define SCF_ONLY 0 /* If you want to be able to compute integrals needed in SCF only if WFN=SCF - set this to 1 */ /*------------------------------------------------------------ Predefined cutoffs used while computing Fm(T) and integrals ------------------------------------------------------------*/ #define SOFT_ZERO 1E-5 /* Definition of a soft floating-point "zero" */ #define ZERO 1E-15 /* Definition of a hard floating-point "zero" */ #define EPS 1.0e-17 /* Another definition of floating-point "zero" used in computing auxiliary function */ #undef USE_TAYLOR_FM /* Use Taylor interpolation formula to compute Fm(T) */ #define TAYLOR_ORDER 6 /* Order of Taylor interpolation used to compute Fm(T) */ /*---------------------------------- Thresholds for printing out stuff ----------------------------------*/ #define PRINT_DEBUG 5 /* Print everything */ #define PRINT_INTRO 1 /* Print level to print intro overhead */ #define PRINT_OPTIONS 1 /* Print level to print options out */ #define PRINT_BASIS 3 /* Print level to print basis set information */ #define PRINT_GEOMETRY 2 /* Print level to print cartesian geometry */ #define PRINT_CCOEFF 4 /* Print level to print coupling coefficients */ #define PRINT_OPDM 4 /* Print level to print onepdms */ #define PRINT_OEI 3 /* Print level to print one-electron integrals */ #define PRINT_OEDERIV 2 /* Print level to print oe and nuclear contrinution to gradient */ #define PRINT_TEDERIV 2 /* Print level to print te contribution to gradient */ #define PRINT_MOINFO_CORR 1 /* Print level to print orbital information for correlated calculations */ /*------------------------- Default sizes for arrays -------------------------*/ #define MAXFACT 100 #define MAXNIRREPS 8 #define IOFFMAX MAX_NUM_AO /*---------------- Macro functions ----------------*/ #define MAX(a,b) (((a)>(b)) ? (a) : (b)) #define MIN(a,b) (((a)<(b)) ? (a) : (b)) #define INDEX(a,b) (((a)>(b)) ? ioff[(a)] + (b) : ioff[(b)] + (a)) #define SWAP(a,b) {dum = (a); (a) = (b); (b) = dum;} /*------ Misc. ------*/ #define NUM_TE_TYPES 4 /* Number of types of integrals to compute 0 - ERIs 1 - r12 2 - [r12,T1] 3 - [r12,T2] */ #define MkPT2_USE_IWL 1 /* How the MkPT2 routine dumps integrals to disk */ #define MkPT2_TEST 0 /* Whether to test the MkPT2 integrals by printing them on writing to IWL and reading them back in */ /*---------- DFT cutoffs ----------*/ #define WEIGHT_CUTOFF 1E-10 /* if the weighting function is lower than this, do not contract into the Fock Matrix */ #define DEN_CUTOFF 1E-10 /* If density at a point is less than this, do not contract into the Fock matrix */ #endif psi3/src/bin/cints/DFT/0000755000101500007650000000000011146111657013300 5ustar crawdadpsi3/src/bin/cints/DFT/bas_comp_functions.cc0000644000101500007650000000234510757640026017472 0ustar crawdad/*! \file bas_comp_functions.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { double calc_exp_basis(int shell_num, double rr){ int i; int shell_type; int shell_start; int shell_end; double expon,coeff; double bastmp; shell_type = BasisSet.shells[shell_num].am; shell_start = BasisSet.shells[shell_num].fprim-1; shell_end = shell_start+BasisSet.shells[shell_num].n_prims; bastmp = 0.0; for(i=shell_start;i #include #include #include #include #include #include #include"defines.h" #define EXTERN #define NIM(a,b) a < b ? a : b #include"global.h" #include #include"small_fns.h" #include"bas_comp_functions.h" #define TOL 1E-50 namespace psi { namespace CINTS { void calc_close_basis(int atom_num, int chunk_num){ int i,j,k,l,m; int chunk_center; int shell_center; int shell_type; int am2shell; int max_am; int num_ao; int ndocc; int num_shells; double chunk_rad_in; double chunk_rad_out; double chunk_rad; double bragg; double dist; double r,rr; double bastmp; struct coordinates atom_point_geom; struct coordinates shell_geom; struct atomic_grid_s *atom_grid; struct leb_chunk_s *chunk; struct close_shell_info_s *close; num_shells = BasisSet.num_shells; ndocc = MOInfo.ndocc; max_am = BasisSet.max_am; atom_grid = &(DFT_options.grid.atomic_grid[atom_num]); bragg = atom_grid->Bragg_radii; atom_point_geom = atom_grid->atom_center; chunk_center = atom_grid->atom_num; chunk = &(atom_grid->leb_chunk[chunk_num]); chunk_rad_in = chunk->spheres[0].r*bragg; chunk_rad_out = chunk->spheres[chunk->size-1].r*bragg; //bzero(DFT_options.close_shell_info.close_shells_per_am,sizeof(int)*max_am); memset((void *)DFT_options.close_shell_info.close_shells_per_am, '\0', sizeof(int)*max_am); DFT_options.close_shell_info.num_close_aos = 0; j = 0; l = 0; for(i=0;i= chunk_rad_in){ if(dist <= chunk_rad_out){ /* Doesn't matter because the atom is in the chunk */ /* so its basis functions will atomatically be accepted */ bastmp = 1.0; } else{ /* dist is greater than the outer chunk, so use the distance between the atom and the outer sphere of the chunk */ r = dist-chunk_rad_out; rr = r*r; bastmp = calc_radial_bas(am2shell,rr,r); } /* dist is less than the inner shell */ } else{ r = chunk_rad_in-dist; rr = r*r; bastmp = calc_radial_bas(am2shell,rr,r); } /*fprintf(outfile,"\natom x = %10.10lf y = %10.10lf z = %10.10lf" ,atom_point_geom.x,atom_point_geom.y,atom_point_geom.z); fprintf(outfile,"\nshell x = %10.10lf y = %10.10lf z = %10.10lf" ,shell_geom.x,shell_geom.y,shell_geom.z); fprintf(outfile,"\nshell_center = %d chunk_center = %d dist = %10.10lf",shell_center,chunk_center,dist); fprintf(outfile,"\ndist = %10.10lf",dist); fprintf(outfile,"\nchunk_rad_in = %10.10lf chunk_rad_out = %10.10lf",chunk_rad_in,chunk_rad_out); fprintf(outfile, "\nr = %e rr = %e",r,rr); fprintf(outfile, "\nbastmp = %e",bastmp);*/ /* --------------------------------- Determine whether the basis the function is close or not --------------------------------*/ if(fabs(bastmp) > TOL){ DFT_options.close_shell_info.shells_close_to_chunk[j] = am2shell; for(k=0;k #include #include #include #include #include #include #include"defines.h" #define EXTERN #define NIM(a,b) a < b ? a : b #include"global.h" #include #include"small_fns.h" #include"bas_comp_functions.h" #define TOL 1E-50 namespace psi { namespace CINTS { void calc_close_basis_u(int atom_num, int chunk_num){ int i,j,k,l,m; int chunk_center; int shell_center; int shell_type; int am2shell; int max_am; int num_ao; int aocc,bocc; int num_shells; double chunk_rad_in; double chunk_rad_out; double chunk_rad; double bragg; double dist; double r,rr; double bastmp; struct coordinates atom_point_geom; struct coordinates shell_geom; struct atomic_grid_s *atom_grid; struct leb_chunk_s *chunk; struct close_shell_info_s *close; num_shells = BasisSet.num_shells; aocc = MOInfo.alpha_occ; bocc = MOInfo.beta_occ; max_am = BasisSet.max_am; atom_grid = &(DFT_options.grid.atomic_grid[atom_num]); bragg = atom_grid->Bragg_radii; atom_point_geom = atom_grid->atom_center; chunk_center = atom_grid->atom_num; chunk = &(atom_grid->leb_chunk[chunk_num]); chunk_rad_in = chunk->spheres[0].r*bragg; chunk_rad_out = chunk->spheres[chunk->size-1].r*bragg; //bzero(DFT_options.close_shell_info.close_shells_per_am ,sizeof(int)*max_am); memset((void *)DFT_options.close_shell_info.close_shells_per_am, '\0', sizeof(int)*max_am); DFT_options.close_shell_info.num_close_aos = 0; j = 0; l = 0; for(i=0;i= chunk_rad_in){ if(dist <= chunk_rad_out){ /* Doesn't matter because the atom is in the chunk */ /* so its basis functions will atomatically be accepted */ bastmp = 1.0; } else{ /* dist is greater than the outer chunk, so use the distance between the atom and the outer sphere of the chunk */ r = dist-chunk_rad_out; rr = r*r; bastmp = calc_radial_bas(am2shell,rr,r); } /* dist is less than the inner shell */ } else{ r = chunk_rad_in-dist; rr = r*r; bastmp = calc_radial_bas(am2shell,rr,r); } /*fprintf(outfile,"\natom x = %10.10lf y = %10.10lf z = %10.10lf" ,atom_point_geom.x,atom_point_geom.y,atom_point_geom.z); fprintf(outfile,"\nshell x = %10.10lf y = %10.10lf z = %10.10lf" ,shell_geom.x,shell_geom.y,shell_geom.z); fprintf(outfile,"\nshell_center = %d chunk_center = %d dist = %10.10lf",shell_center,chunk_center,dist); fprintf(outfile,"\ndist = %10.10lf",dist); fprintf(outfile,"\nchunk_rad_in = %10.10lf chunk_rad_out = %10.10lf",chunk_rad_in,chunk_rad_out); fprintf(outfile, "\nr = %e rr = %e",r,rr); fprintf(outfile, "\nbastmp = %e",bastmp);*/ /* --------------------------------- Determine whether the basis the function is close or not --------------------------------*/ if(fabs(bastmp) > TOL){ DFT_options.close_shell_info.shells_close_to_chunk[j] = am2shell; for(k=0;k #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"bas_comp_functions.h" namespace psi { namespace CINTS { struct den_info_s calc_density(struct coordinates geom){ int i,j,k; int shell_type; int shell_start; int shell_end; int n_shells; int num_ao,ndocc; int shell_center; double x,y,z; double xa,ya,za; double rr; double rrtmp; double bastmp; double bastmp1; double den_sum; double coeff; double expon; double *norm_ptr; double *dist_atom; double *temp_arr; struct coordinates *dist_coord; struct den_info_s den_info; struct shell_pair *sp; x = geom.x; y = geom.y; z = geom.z; num_ao = BasisSet.num_ao; ndocc = MOInfo.ndocc; temp_arr = init_array(num_ao); dist_atom = init_array(Molecule.num_atoms); dist_coord = (struct coordinates *)malloc(sizeof(struct coordinates)*Molecule.num_atoms); timer_on("distance"); for(i=0;i #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"bas_comp_functions.h" namespace psi { namespace CINTS { struct den_info_s calc_density_fast(struct coordinates geom, int atom_num){ int i,j,k,l,m; int am2shell; int shell_type; int shell_start; int shell_end; int n_shells; int num_ao,ndocc; int shell_center; double x,y,z; double xa,ya,za; double rr; double rrtmp; double bastmp; double den_sum; double coeff; double expon; double *norm_ptr; double *dist_atom; double *temp_arr; double *coord_array[14]; double *expon_arr; double norm_ptr0,norm_ptr1,norm_ptr2; double norm_ptr3,norm_ptr4,norm_ptr5; double norm_ptr6,norm_ptr7,norm_ptr8; double norm_ptr9,norm_ptr10,norm_ptr11; double norm_ptr12,norm_ptr13,norm_ptr14; double xx,yy,zz,xy,xz,yz; double bxx,byy,bzz,bxy,bxz,byz; struct coordinates *dist_coord; struct leb_chunk_s *chunk; struct den_info_s den_info; struct close_shell_info_s *close; x = geom.x; y = geom.y; z = geom.z; num_ao = BasisSet.num_ao; ndocc = MOInfo.ndocc; temp_arr = init_array(ndocc); close = &(DFT_options.close_shell_info); /* --------------------------------- Compute distances from atom that the basis function is centered on to the grid point --------------------------------*/ zero_arr(DFT_options.basis,num_ao); dist_atom = init_array(Molecule.num_atoms); dist_coord = (struct coordinates *) malloc(sizeof(struct coordinates)*Molecule.num_atoms); timer_on("distance"); for(i=0;iclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; /*bastmp = calc_exp_basis(am2shell,rr);*/ for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; xx = xa*xa; xy = xa*ya; yy = ya*ya; zz = za*za; bxx = bastmp*xx; byy = bastmp*yy; bxy = bastmp*xy; bzz = bastmp*zz; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;knum_close_aos;i++) fprintf(outfile,"\nBasis[%d] = %10.10lf",i,DFT_options.basis[i]);*/ den_sum = 0.0; #if USE_BLAS C_DGEMV('t',close->num_close_aos,ndocc,1.0,close->close_COCC[0],ndocc, DFT_options.basis,1,0.0,temp_arr,1); den_sum = C_DDOT(ndocc,temp_arr,1,temp_arr,1); #else for(i=0;inum_close_aos;j++){ temp_arr[i] += close->close_COCC[j][i]*DFT_options.basis[j]; } /*fprintf(outfile,"\ntemp_arr[%d] = %10.10lf",i,temp_arr[i]);*/ } dot_arr(temp_arr,temp_arr,MOInfo.ndocc,&den_sum); #endif den_info.den = den_sum; /*fprintf(outfile,"\nden = %10.10lf",den_info.den);*/ free(temp_arr); timer_off("density"); free(dist_coord); free(dist_atom); return den_info; } };}; psi3/src/bin/cints/DFT/calc_den_fast.h0000644000101500007650000000053210754417572016227 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_calc_den_fast_h #define _psi_src_bin_cints_DFT_calc_den_fast_h /*! \file calc_den_fast.h \ingroup CINTS \brief Enter brief description of file here */ #include "data_structs.h" namespace psi { namespace CINTS { struct den_info_s calc_density_fast(struct coordinates geom, int atom_num); };} #endif psi3/src/bin/cints/DFT/calc_den_new.cc0000644000101500007650000001376410757640026016227 0ustar crawdad/*! \file calc_den_new.cc \ingroup CINTS \author Shawn Brown The code contains functions that will retrieve and process the density at a given x,y,z coord in space --------------------------------------------------*/ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { struct den_info_s calc_density_new(struct coordinates geom){ int i,j,k; int am2shell; int shell_type; int shell_start; int shell_end; int n_shells; int num_ao,ndocc; int shell_center; double x,y,z; double xa,ya,za; double rr; double rrtmp; double bastmp; double den_sum; double coeff; double expon; double *norm_ptr; double *dist_atom; double *temp_arr; struct coordinates *dist_coord; struct den_info_s den_info; struct shell_pair *sp; x = geom.x; y = geom.y; z = geom.z; num_ao = BasisSet.num_ao; ndocc = MOInfo.ndocc; temp_arr = init_array(ndocc); dist_atom = init_array(Molecule.num_atoms); dist_coord = (struct coordinates *) malloc(sizeof(struct coordinates)*Molecule.num_atoms); timer_on("distance"); for(i=0;i #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"bas_comp_functions.h" namespace psi { namespace CINTS { struct den_info_s calc_density_u(struct coordinates geom, int atom_num){ int i,j,k,l,m; int am2shell; int shell_type; int shell_start; int shell_end; int n_shells; int num_ao; int aocc,bocc; int shell_center; double x,y,z; double xa,ya,za; double rr; double rrtmp; double bastmp; double den_sum; double coeff; double expon; double *norm_ptr; double *dist_atom; double *temp_arr_a,*temp_arr_b; double *coord_array[14]; double *expon_arr; double norm_ptr0,norm_ptr1,norm_ptr2; double norm_ptr3,norm_ptr4,norm_ptr5; double norm_ptr6,norm_ptr7,norm_ptr8; double norm_ptr9,norm_ptr10,norm_ptr11; double norm_ptr12,norm_ptr13,norm_ptr14; double xx,yy,zz,xy,xz,yz; double bxx,byy,bzz,bxy,bxz,byz; struct coordinates *dist_coord; struct leb_chunk_s *chunk; struct den_info_s den_info; struct close_shell_info_s *close; x = geom.x; y = geom.y; z = geom.z; num_ao = BasisSet.num_ao; aocc = MOInfo.alpha_occ; bocc = MOInfo.beta_occ; temp_arr_a = init_array(aocc); temp_arr_b = init_array(bocc); close = &(DFT_options.close_shell_info); /* --------------------------------- Compute distances from atom that the basis function is centered on to the grid point --------------------------------*/ zero_arr(DFT_options.basis,num_ao); dist_atom = init_array(Molecule.num_atoms); dist_coord = (struct coordinates *) malloc(sizeof(struct coordinates)*Molecule.num_atoms); timer_on("distance"); for(i=0;iclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; /*bastmp = calc_exp_basis(am2shell,rr);*/ for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; xx = xa*xa; xy = xa*ya; yy = ya*ya; zz = za*za; bxx = bastmp*xx; byy = bastmp*yy; bxy = bastmp*xy; bzz = bastmp*zz; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;knum_close_aos;i++) fprintf(outfile,"\nBasis[%d]=%10.10lf",i,DFT_options.basis[i]);*/ /*print_mat(close->close_COCC_a,close->num_close_aos,aocc,outfile);*/ den_sum = 0.0; #if USE_BLAS C_DGEMV('t',close->num_close_aos,aocc,1.0,close->close_COCC_a[0],aocc, DFT_options.basis,1,0.0,temp_arr_a,1); den_info.dena = C_DDOT(aocc,temp_arr_a,1,temp_arr_a,1); C_DGEMV('t',close->num_close_aos,bocc,1.0,close->close_COCC_b[0],bocc, DFT_options.basis,1,0.0,temp_arr_b,1); den_info.denb = C_DDOT(bocc,temp_arr_b,1,temp_arr_b,1); #else for(i=0;inum_close_aos;j++){ temp_arr_a[i] += close->close_COCC_a[j][i]*DFT_options.basis[j]; } /*fprintf(outfile,"\ntemp_arr_a[%d] = %10.10lf",i,temp_arr_a[i]);*/ } dot_arr(temp_arr_a,temp_arr_a,aocc,&den_sum); den_info.dena = den_sum; den_sum=0; for(i=0;inum_close_aos;j++){ temp_arr_b[i] += close->close_COCC_b[j][i]*DFT_options.basis[j]; } /*fprintf(outfile,"\ntemp_arr[%d] = %10.10lf",i,temp_arr[i]);*/ } dot_arr(temp_arr_b,temp_arr_b,bocc,&den_sum); den_info.denb = den_sum; #endif /*fprintf(outfile,"\ndena = %10.10lf denb = %10.10lf",den_info.dena,den_info.denb);*/ free(temp_arr_a);free(temp_arr_b); timer_off("density"); free(dist_coord); free(dist_atom); return den_info; } };}; psi3/src/bin/cints/DFT/calc_den_u.h0000644000101500007650000000051710754417572015541 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_calc_den_u_h #define _psi_src_bin_cints_DFT_calc_den_u_h /*! \file calc_den_u.h \ingroup CINTS \brief Enter brief description of file here */ #include"data_structs.h" namespace psi { namespace CINTS { struct den_info_s calc_density_u(struct coordinates geom, int atom_num); };}; #endif psi3/src/bin/cints/DFT/calc_grad_fast.cc0000644000101500007650000003246710754417572016550 0ustar crawdad/*! \file calc_grad_fast.cc \ingroup CINTS \author Shawn Brown The code contains functions that will retrieve and process the density at a given x,y,z coord in space --------------------------------------------------*/ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"bas_comp_functions.h" namespace psi { namespace CINTS { struct den_info_s calc_grad_fast(struct coordinates geom, int atom_num){ int i,j,k,l,m; int am2shell; int shell_type; int shell_start; int shell_end; int n_shells; int num_ao,ndocc; int shell_center; double x,y,z,xpypz; double xa,ya,za; double bas,abas; double rr; double rrtmp; double bastmp,abastmp; double den_sum,gradx_sum,grady_sum,gradz_sum; double coeff,expon; double *norm_ptr; double *dist_atom; double *dist_xpypz; double *temp_arr,*temp_arr2; double *coord_array[14]; double *expon_arr; double norm_ptr0,norm_ptr1,norm_ptr2; double norm_ptr3,norm_ptr4,norm_ptr5; double norm_ptr6,norm_ptr7,norm_ptr8; double norm_ptr9,norm_ptr10,norm_ptr11; double norm_ptr12,norm_ptr13,norm_ptr14; double xx,yy,zz,xy,xz,yz; double bxx,byy,bzz,bxy,bxz,byz; double **Den; struct coordinates *dist_coord; struct leb_chunk_s *chunk; struct den_info_s den_info; struct close_shell_info_s *close; x = geom.x; y = geom.y; z = geom.z; num_ao = BasisSet.num_ao; ndocc = MOInfo.ndocc; temp_arr = init_array(ndocc); temp_arr2 = init_array(ndocc); close = &(DFT_options.close_shell_info); Den = init_matrix(close->num_close_aos,close->num_close_aos); /* --------------------------------- Compute distances from atom that the basis function is centered on to the grid point --------------------------------*/ zero_arr(DFT_options.basis,num_ao); zero_arr(DFT_options.gradx,num_ao); zero_arr(DFT_options.grady,num_ao); zero_arr(DFT_options.gradz,num_ao); dist_atom = init_array(Molecule.num_atoms); dist_coord = (struct coordinates *) malloc(sizeof(struct coordinates)*Molecule.num_atoms); timer_on("distance"); for(i=0;iclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; abastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; abastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; xx = xa*xa; xy = xa*ya; yy = ya*ya; zz = za*za; bxx = bastmp*xx; byy = bastmp*yy; bxy = bastmp*xy; bzz = bastmp*zz; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;kclose_shells_per_am[i];j++){ am2shell = close->shells_close_to_chunk[m]; shell_center = BasisSet.shells[am2shell].center-1; xa = dist_coord[shell_center].x; ya = dist_coord[shell_center].y; za = dist_coord[shell_center].z; rr = dist_atom[shell_center]; shell_start = BasisSet.shells[am2shell].fprim-1; shell_end = shell_start +BasisSet.shells[am2shell].n_prims; timer_on("exponent"); bastmp = 0.0; for(k=shell_start;knum_close_aos;i++) fprintf(outfile,"\nBasis[%d] = %10.10lf Grad[%d] = %10.10lf",i,DFT_options.basis[i],i,DFT_options.basis[i]); den_sum = 0.0; gradx_sum = 0.0;grady_sum = 0.0;gradz_sum = 0.0; /*#if USE_BLAS C_DGEMV('t',close->num_close_aos,ndocc,1.0,close->close_COCC[0],ndocc, DFT_options.basis,1,0.0,temp_arr,1); den_sum = C_DDOT(ndocc,temp_arr,1,temp_arr,1); #else*/ mmult(close->close_COCC,0,close->close_COCC,1,Den,0,close->num_close_aos,ndocc,close->num_close_aos,0); for(i=0;inum_close_aos;i++){ for(j=0;jnum_close_aos;j++){ den_sum += Den[i][j]*DFT_options.basis[i]*DFT_options.basis[j]; gradx_sum += Den[i][j]*(DFT_options.gradx[i]*DFT_options.basis[j]+DFT_options.gradx[j]*DFT_options.basis[i]); grady_sum += Den[i][j]*(DFT_options.grady[i]*DFT_options.basis[j]+DFT_options.grady[j]*DFT_options.basis[i]); gradz_sum += Den[i][j]*(DFT_options.gradz[i]*DFT_options.basis[j]+DFT_options.gradz[j]*DFT_options.basis[i]); } } /*for(i=0;inum_close_aos;j++){ temp_arr[i] += close->close_COCC[j][i]*DFT_options.basis[j]; temp_arr2[i] += close->close_COCC[j][i]*DFT_options.grad_basis[j]; } } dot_arr(temp_arr,temp_arr,MOInfo.ndocc,&den_sum); dot_arr(temp_arr,temp_arr2,MOInfo.ndocc,&grad_sum);*/ /*#endif*/ den_info.den = den_sum; den_info.gradx = gradx_sum; den_info.grady = grady_sum; den_info.gradz = gradz_sum; den_info.gamma = gradx_sum*gradx_sum+grady_sum*grady_sum+gradz_sum*gradz_sum; free(temp_arr); free_matrix(Den,close->num_close_aos); timer_off("density"); free(dist_coord); free(dist_atom); return den_info; } } } psi3/src/bin/cints/DFT/calc_grad_fast.h0000644000101500007650000000053010754417572016374 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_calc_grad_fast_h #define _psi_src_bin_cints_DFT_calc_grad_fast_h /*! \file calc_grad_fast.h \ingroup CINTS \brief Enter brief description of file here */ #include "data_structs.h" namespace psi { namespace CINTS { struct den_info_s calc_grad_fast(struct coordinates geom, int atom_num); };}; #endif psi3/src/bin/cints/DFT/dft_init.cc0000644000101500007650000001036710754417572015427 0ustar crawdad/*! \file dft_init.cc \ingroup CINTS \author Shawn Brown \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"functional.h" #include"functional_u.h" #include"calc_den_fast.h" #include"calc_den_u.h" #include"calc_grad_fast.h" #include"calc_close_basis.h" #include"calc_close_basis_u.h" #include"lebedev_init.h" #include"grid_init.h" #include"free_grid_structs.h" namespace psi { namespace CINTS { void dft_init(void){ int errcod; int i,j; int si,sj; int si_n_ao; int sj_n_ao; int rpointstmp; int angpointstmp; int n_shells; int elem_in_func; char *exchstring; char *corrstring; char *gridstring; char *funcstring; double tmpa, tmpb; /* DFT input parsing */ elem_in_func = 0; errcod = ip_count("FUNCTIONAL",&elem_in_func,0); if(elem_in_func == 0){ errcod=ip_string("FUNCTIONAL",&funcstring,0); if(errcod == IPE_OK){ if(!strcmp(funcstring,"XALPHA")){ UserOptions.hf_exch = 0.0; if(UserOptions.reftype == rhf){ DFT_options.exchange_func = slater_ed; DFT_options.den_calc = calc_density_fast; DFT_options.correlation_func = no_funct; } else{ DFT_options.exchange_func = slater_ed; DFT_options.den_calc = calc_density_u; DFT_options.correlation_func = no_funct; } } else throw std::domain_error("Unrecognized fucntional specified with keyword FUNCTIONALu"); } else throw std::domain_error("Must define a functional with keyword FUNCTIONAL"); } else if(elem_in_func == 2){ errcod = ip_string("FUNCTIONAL",&exchstring,1,0); if(!strcmp(exchstring,"SLATER")||!strcmp(exchstring,"S")){ UserOptions.hf_exch = 0.0; if(UserOptions.reftype == rhf){ DFT_options.exchange_func = slater_ed; DFT_options.den_calc = calc_density_fast; } else{ DFT_options.exchange_func = slater_u_ed; DFT_options.den_calc = calc_density_u; } } else if(!strcmp(exchstring,"B88")||!strcmp(exchstring,"B")){ UserOptions.hf_exch = 0.0; if(UserOptions.reftype == rhf){ DFT_options.exchange_func = Becke88_ed; DFT_options.den_calc = calc_grad_fast; exchstring[0] = '\0'; } else{ throw std::domain_error("UHF functional not implemented"); } } else if(!strcmp(exchstring,"NONE")){ UserOptions.hf_exch = 0.0; if(UserOptions.reftype == rhf){ DFT_options.exchange_func = no_funct; DFT_options.den_calc = calc_density_fast; exchstring[0] = '\0'; } else{ DFT_options.exchange_func = no_funct_u; DFT_options.den_calc = calc_density_u; exchstring[0] = '\0'; } } else throw std::domain_error("Unrecognized or nonimplemented exchange functional specified"); errcod = ip_string("FUNCTIONAL",&corrstring,1,1); if(!strcmp(corrstring,"NONE")){ UserOptions.hf_exch = 0.0; if(UserOptions.reftype == rhf){ DFT_options.correlation_func = no_funct; corrstring[0] = '\0'; } else{ DFT_options.correlation_func = no_funct_u; corrstring[0] = '\0'; } } else if(!strcmp(corrstring,"VWN5")){ if(UserOptions.reftype == rhf){ DFT_options.correlation_func = VWN5_ed; } else{ DFT_options.correlation_func = VWN5_u_ed; } } else if(!strcmp(corrstring,"VWN4")){ if(UserOptions.reftype == rhf){ DFT_options.correlation_func = VWN4_ed; } else DFT_options.correlation_func = VWN4_u_ed; } else throw std::domain_error("Unrecognized or nonimplemented correlation fuctional specified"); i = strlen(exchstring) + strlen(corrstring); if (i == 0) funcstring = strdup("NONE"); else { funcstring = (char *) malloc(sizeof(char)* (i + 1)); sprintf(funcstring,"%s%s",exchstring,corrstring); } free(exchstring); free(corrstring); } else throw std::domain_error("Something wrong in the specification of the FUNCTIONAL keyword"); } void cleanup_dft_options(DFT_options_t DFT_options){ free(DFT_options.basis); free(DFT_options.Bragg); cleanup_grid_type(DFT_options.grid); } }; }; psi3/src/bin/cints/DFT/dft_init.h0000644000101500007650000000045510754417572015266 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_dft_init_h #define _psi_src_bin_cints_DFT_dft_init_h /*! \file dft_init.h \ingroup CINTS \brief Enter brief description of file here */ namespace psi { namespace CINTS { void dft_init(void); void cleanup_dft_options(DFT_options_t DFT_options); };}; #endif psi3/src/bin/cints/DFT/free_grid_structs.cc0000644000101500007650000000326410757640026017335 0ustar crawdad/*! \file free_grid_structs.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include /* ---- Cleanup the primitive classes ---- */ namespace psi { namespace CINTS { void cleanup_sphere(leb_sphere_t sphere){ free(sphere.points); } void cleanup_prim_chunk(prim_leb_chunk_t chunk){ int i; for(i=0;i #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"physconst.h" #include"pade.h" namespace psi { namespace CINTS { struct fun_info_s slater_e(struct den_info_s den_info){ double Cx; /*= -0.930525736349100;*/ struct fun_info_s exch_info; /***************************************************/ Cx = -(9.0/4.0)*(2.0/3.0)*pow(3.0/(4.0*_pi),(1.0/3.0)); /***************************************************/ exch_info.eval = 2.0*Cx*pow(den_info.den,4.0/3.0); return exch_info; } struct fun_info_s slater_ed(struct den_info_s den_info){ double Cx /*= -0.930525736349100*/; double dCx /*= -1.240700981798800*/; struct fun_info_s exch_info; /**********************************************/ Cx = -(9.0/4.0)*(2.0/3.0)*pow(3.0/(4.0*_pi),(1.0/3.0)); dCx = -3.0*(2.0/3.0)*pow(3.0/(4.0*_pi),(1.0/3.0)); /**********************************************/ exch_info.eval = 2.0*Cx*pow(den_info.den,4.0/3.0); exch_info.dpval = dCx*pow(den_info.den,1.0/3.0); return exch_info; } /*struct density(struct den_info_s den_info){ return den_info.den; } */ struct fun_info_s no_funct(struct den_info_s den_info){ struct fun_info_s fun_info; fun_info.eval = 0.0; fun_info.dval = 0.0; fun_info.dpval = 0.0; fun_info.dgval = 0.0; return fun_info; } struct fun_info_s VWN5_e(struct den_info_s den_info){ double A = 0.0621814/2.0; double x0 = -0.10498; double b = 3.72744; double c = 12.9352; double Q = 6.1519908198; double threed4pi = 0.2387324146; double p; double ec; double x; double temp; struct fun_info_s corr_info; p = 2.0*den_info.den; temp = threed4pi/p; x = pow(temp,0.3333333333333); ec = Pade_int(x,x0,b,c,A,Q); corr_info.eval = p*ec; return corr_info; } struct fun_info_s VWN5_ed(struct den_info_s den_info){ double A = 0.0621814/2.0; double x0 = -0.10498; double b = 3.72744; double c = 12.9352; double Q = 6.1519908198; double threed4pi = 0.2387324146; double x, temp1; double dxdp; double ec,dec; double ec_sum,dec_sum; double p; struct fun_info_s corr_info; p = 2.0*den_info.den; temp1 = threed4pi/p; x = pow(temp1,0.3333333333); dxdp = -x/(3.0*p); ec = Pade_int(x,x0,b,c,A,Q);; dec = d_Pade_int(x,x0,b,c,A,Q); corr_info.eval = p*ec; corr_info.dpval = ec+p*dxdp*dec; return corr_info; } /* This is the functional in which Gaussian uses */ struct fun_info_s VWN4_e(struct den_info_s den_info){ double A = 0.0621814/2.0; double x0 = -0.409286; double b = 13.0720; double c = 42.7198; double Q = 0.04489988864; double threed4pi = 0.2387324146; double p; double ec; double x; double temp; struct fun_info_s corr_info; p = 2.0*den_info.den; temp = threed4pi/p; x = pow(temp,0.3333333333333); ec = Pade_int(x,x0,b,c,A,Q); corr_info.eval = p*ec; return corr_info; } struct fun_info_s VWN4_ed(struct den_info_s den_info){ double A = 0.0621814/2.0; double x0 = -0.409286; double b = 13.0720; double c = 42.7198; double Q = 0.04489988864; double threed4pi = 0.2387324146; double x, temp1; double dxdp; double ec,dec; double ec_sum,dec_sum; double p; struct fun_info_s corr_info; p = 2.0*den_info.den; temp1 = threed4pi/p; x = pow(temp1,0.3333333333); dxdp = -x/(3.0*p); ec = Pade_int(x,x0,b,c,A,Q);; dec = d_Pade_int(x,x0,b,c,A,Q); corr_info.eval = p*ec; corr_info.dpval = ec+p*dxdp*dec; return corr_info; } struct fun_info_s Becke88_e(struct den_info_s den_info){ double b = 0.0042; double gamma; double x; double p,p43; double fourthirds = 4.0/3.0; double threehalves = 3.0/2.0; double threefourthspi = 3.0/(4.0*_pi); double onethirds = 1.0/3.0; double sxp1; double xpsxp1; double grad; double gx; double Cx; double arcsinhx; struct fun_info_s exch_info; p = den_info.den; grad = sqrt(den_info.gamma); Cx = -threehalves*pow(threefourthspi,onethirds); /*fprintf(outfile,"\nCx = %10.15lf",Cx);*/ p43 = pow(p,fourthirds); /*fprintf(outfile,"\np43 = %10.15lf",p43); fprintf(outfile,"\ngrad = %10.10lf",grad);*/ x = grad/p43; sxp1 = sqrt(x*x+1.0); xpsxp1 = x+sxp1; arcsinhx = log(xpsxp1); /*fprintf(outfile,"\nx = %10.15lf arcsinhx = %10.15lf",x,arcsinhx);*/ gx = Cx - (b*x*x)/(1.0+6.0*b*x*arcsinhx); exch_info.eval = 2.0*p43*gx; return exch_info; } struct fun_info_s Becke88_ed(struct den_info_s den_info){ double b = 0.0042; double gamma; double x,x2; double p,p13,p43; double fourthirds = 4.0/3.0; double threehalves = 3.0/2.0; double threefourthspi = 3.0/(4.0*_pi); double onethirds = 1.0/3.0; double sxp1; double xpsxp1; double xdsxp1; double bx,bbxx6; double bx6arcsin; double onepbx6arcsin; double grad; double gx,gpx; double Cx; double arcsinhx; struct fun_info_s exch_info; p = den_info.den; grad = sqrt(den_info.gamma); Cx = -threehalves*pow(threefourthspi,onethirds); /*fprintf(outfile,"\nCx = %10.15lf",Cx);*/ p13 = pow(p,onethirds); p43 = p13*p; /*fprintf(outfile,"\np43 = %10.15lf",p43); fprintf(outfile,"\ngrad = %10.10lf",grad);*/ x = grad/p43; bx = b*x; x2 = x*x; bbxx6 = bx*bx*6.0; sxp1 = sqrt(x2+1.0); xpsxp1 = x+sxp1; xdsxp1 = x/sxp1; arcsinhx = log(xpsxp1); bx6arcsin = 6.0*bx*arcsinhx; onepbx6arcsin = 1.0+bx6arcsin; /*fprintf(outfile,"\nx = %10.15lf arcsinhx = %10.15lf",x,arcsinhx);*/ gx = Cx - (b*x2)/onepbx6arcsin; gpx = (bbxx6*(xdsxp1-arcsinhx)-2.0*bx)/(onepbx6arcsin*onepbx6arcsin); /*fprintf(outfile,"\ngpx = %10.10lf",gpx);*/ exch_info.eval = 2.0*p43*gx; exch_info.dpval = fourthirds*p13*(gx-x*gpx); exch_info.dgval = 0.5*gpx/grad; fprintf(outfile,"\ndgval = %10.10lf",exch_info.dgval); return exch_info; } };}; psi3/src/bin/cints/DFT/functional.h0000644000101500007650000000140710754417572015626 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_functional_h #define _psi_src_bin_cints_DFT_functional_h /*! \file functional.h \ingroup CINTS \brief Enter brief description of file here */ #include "data_structs.h" namespace psi { namespace CINTS { struct fun_info_s slater_e(struct den_info_s den_info); struct fun_info_s slater_ed(struct den_info_s den_info); struct fun_info_s no_funct(struct den_info_s den_info); struct fun_info_s VWN5_e(struct den_info_s den_info); struct fun_info_s VWN5_ed(struct den_info_s den_info); struct fun_info_s VWN4_e(struct den_info_s den_info); struct fun_info_s VWN4_ed(struct den_info_s den_info); struct fun_info_s Becke88_e(struct den_info_s den_info); struct fun_info_s Becke88_ed(struct den_info_s den_info); };} #endif psi3/src/bin/cints/DFT/functional_u.cc0000644000101500007650000002345410757640026016311 0ustar crawdad/*! \file functional_u.cc \ingroup CINTS functionals go here ----------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"physconst.h" #include"pade.h" namespace psi { namespace CINTS { struct fun_info_s slater_u_e(struct den_info_s den_info){ double Cx = -0.930525736349100; struct fun_info_s exch_info; /*Cx = -(9.0/4.0)*(2.0/3.0)*pow(3.0/(4.0*_pi),(1.0/3.0));*/ exch_info.eval = Cx*(pow(den_info.dena,4.0/3.0) +pow(den_info.denb,4.0/3.0)); return exch_info; } struct fun_info_s slater_u_ed(struct den_info_s den_info){ double Cx = -0.930525736349100; double dCx = -1.240700981798800; struct fun_info_s exch_info; /*dCx = -3.0*(2.0/3.0)*pow(3.0/(4.0*_pi),(1.0/3.0));*/ exch_info.eval = Cx*(pow(den_info.dena,4.0/3.0) +pow(den_info.denb,4.0/3.0)); exch_info.dvala = dCx*pow(den_info.dena,1.0/3.0); exch_info.dvalb = dCx*pow(den_info.denb,1.0/3.0); return exch_info; } struct fun_info_s no_funct_u(struct den_info_s den_info){ struct fun_info_s fun_info; fun_info.eval = 0.0; fun_info.dvala = 0.0; fun_info.dvalb = 0.0; fun_info.ddvala = 0.0; fun_info.ddvalb = 0.0; return fun_info; } /* This is the functional in which Gaussian uses */ struct fun_info_s VWN4_u_e(struct den_info_s den_info){ /* paramagnetic case*/ double Ap = 0.0621814/2.0; double x0p = -0.409286; double bp = 13.0720; double cp = 42.7198; double Qp = 0.044899888641577; /* ferromagnetic case*/ double Af = 0.0621814/4.0; double x0f = -0.743294; double bf = 20.1231; double cf = 101.578; double Qf = 1.171685277708971; /* spin stiffness*/ double Aa = -0.016886863940390; /*-1.0/(6.0*_pi*_pi)*/ double x0a = -0.228344; double ba = 1.06835; double ca = 11.4813; double Qa = 6.692072046645942; double p,pa,pb; double ea,ep,ef,beta; double ec; double eta,geta,eta2,eta4; double onepluseta; double onemineta; double d2f0 = 1.709920934161365; /* 4/9*(2^1/3-1) */ double nined8 = 9.0/8.0; double fourthirds = 4.0/3.0; double onethirds = 1.0/3.0; double x; double temp; struct fun_info_s corr_info; pa = den_info.dena; pb = den_info.denb; p = pa+pb; eta = (pa-pb)/p; eta4 = eta*eta*eta*eta; onepluseta = pow(1+eta,fourthirds); onemineta = pow(1-eta,fourthirds); geta = nined8*(onepluseta+onemineta-2.0); temp = 3.0/(4.0*_pi*p); x = pow(temp,onethirds); ep = Pade_int(x,x0p,bp,cp,Ap,Qp); ef = Pade_int(x,x0f,bf,cf,Af,Qf); ea = Pade_int(x,x0a,ba,ca,Aa,Qa); beta = ((d2f0*(ef-ep))/ea)-1.0; ec = ep+ea*geta*(1.0+(beta*eta4)); corr_info.eval = p*ec; return corr_info; } struct fun_info_s VWN4_u_ed(struct den_info_s den_info){ /* paramagnetic case*/ double Ap = 0.0621814/2.0; double x0p = -0.409286; double bp = 13.0720; double cp = 42.7198; double Qp = 0.044899888641577; /* ferromagnetic case*/ double Af = 0.0621814/4.0; double x0f = -0.743294; double bf = 20.1231; double cf = 101.578; double Qf = 1.171685277708971; /* spin stiffness*/ double Aa = -0.016886863940390; /*-1.0/(6.0*_pi*_pi)*/ double x0a = -0.228344; double ba = 1.06835; double ca = 11.4813; double Qa = 6.692072046645942; double p,pa,pb; double ea,ep,ef; double ec,dec,deca,decb; double beta,dbeta,betaplus; double dep,def,dea; double eta,detaa,detab,eta2,eta3,eta4; double geta,dgeta; double onepluseta,onemineta; double onepluseta2,onemineta2; double d2f0 = 1.709920934161365; /* 4/9*(2^1/3-1)*/ double nineeighths = 9.0/8.0; double fourthirds = 4.0/3.0; double onethirds = 1.0/3.0; double threehalves = 3.0/2.0; double x, temp; double dxdp; double term2,term3,term4a,term4b; struct fun_info_s corr_info; pa = den_info.dena; pb = den_info.denb; p = pa+pb; eta = (pa-pb)/p; detaa = (1-eta)/p; detab = -(1+eta)/p; eta2 = eta*eta; eta3 = eta2*eta; eta4 = eta2*eta2; onepluseta = pow(1+eta,fourthirds); onemineta = pow(1-eta,fourthirds); geta = nineeighths*(onepluseta+onemineta-2.0); onepluseta2 = pow(1+eta,onethirds); onemineta2 = pow(1-eta,onethirds); dgeta = threehalves*(onepluseta2-onemineta2); temp = 3.0/(4.0*_pi*p); x = pow(temp,onethirds); dxdp = -x/(3.0*p); ep = Pade_int(x,x0p,bp,cp,Ap,Qp); ef = Pade_int(x,x0f,bf,cf,Af,Qf); ea = Pade_int(x,x0a,ba,ca,Aa,Qa); dep = d_Pade_int(x,x0p,bp,cp,Ap,Qp); def = d_Pade_int(x,x0f,bf,cf,Af,Qf); dea = d_Pade_int(x,x0a,ba,ca,Aa,Qa); /*fprintf(outfile,"\nep = %e ef = %e ea = %e",ep,ef,ea); fprintf(outfile,"\ndep = %e def = %e dea = %e",dep,def,dea);*/ beta = ((d2f0*(ef-ep))/ea)-1.0; dbeta = (d2f0/ea)*(def-dep-((ef-ep)/ea)*dea); betaplus = 1.0+(beta*eta4); ec = ep+ea*geta*(1.0+(beta*eta4)); corr_info.eval = p*ec; term2 = dea*geta*betaplus; term3 = ea*geta*dbeta*eta4; term4a = (dgeta*betaplus+4.0*geta*beta*eta3)*detaa; term4b = (dgeta*betaplus+4.0*geta*beta*eta3)*detab; dec = dxdp*(dep+term2+term3); deca = dec+ea*term4a; decb = dec+ea*term4b; corr_info.dvala = ec+p*deca; corr_info.dvalb = ec+p*decb; return corr_info; } struct fun_info_s VWN5_u_e(struct den_info_s den_info){ /* paramagnetic case*/ double Ap = 0.0621814/2.0; double x0p = -0.10498; double bp = 3.72744; double cp = 12.9352; double Qp = 6.151990819759080; /* ferromagnetic case*/ double Af = 0.0621814/4.0; double x0f = -0.32500; double bf = 7.06042; double cf = 18.0578; double Qf = 4.730926909560114; /* spin stiffness */ double Aa = -0.016886863940390; /*-1.0/(6.0*_pi*_pi)*/ double x0a = -0.00475840; double ba = 1.13107; double ca = 13.0045; double Qa = 7.123108917818118; double p,pa,pb; double ea,ep,ef,beta; double ec; double eta,geta,eta2,eta4; double onepluseta; double onemineta; double d2f0 = 1.709920934161365; /* 4/9*(2^1/3-1) */ double nined8 = 9.0/8.0; double fourthirds = 4.0/3.0; double onethirds = 1.0/3.0; double x; double temp; struct fun_info_s corr_info; pa = den_info.dena; pb = den_info.denb; p = pa+pb; eta = (pa-pb)/p; eta4 = eta*eta*eta*eta; onepluseta = pow(1+eta,fourthirds); onemineta = pow(1-eta,fourthirds); geta = nined8*(onepluseta+onemineta-2.0); temp = 3.0/(4.0*_pi*p); x = pow(temp,onethirds); ep = Pade_int(x,x0p,bp,cp,Ap,Qp); ef = Pade_int(x,x0f,bf,cf,Af,Qf); ea = Pade_int(x,x0a,ba,ca,Aa,Qa); beta = ((d2f0*(ef-ep))/ea)-1.0; ec = ep+ea*geta*(1.0+(beta*eta4)); corr_info.eval = p*ec; return corr_info; } struct fun_info_s VWN5_u_ed(struct den_info_s den_info){ /* paramagnetic case*/ double Ap = 0.0621814/2.0; double x0p = -0.10498; double bp = 3.72744; double cp = 12.9352; double Qp = 6.151990819759080; /* ferromagnetic case*/ double Af = 0.0621814/4.0; double x0f = -0.32500; double bf = 7.06042; double cf = 18.0578; double Qf = 4.730926909560114; /* spin stiffness */ double Aa = -0.016886863940390; /*-1.0/(6.0*_pi*_pi)*/ double x0a = -0.00475840; double ba = 1.13107; double ca = 13.0045; double Qa = 7.123108917818118; double p,pa,pb; double ea,ep,ef; double ec,dec,deca,decb; double beta,dbeta,betaplus; double dep,def,dea; double eta,detaa,detab,eta2,eta3,eta4; double geta,dgeta; double onepluseta,onemineta; double onepluseta2,onemineta2; double d2f0 = 1.709920934161365; /* 4/9*(2^1/3-1)*/ double nineeighths = 9.0/8.0; double fourthirds = 4.0/3.0; double onethirds = 1.0/3.0; double threehalves = 3.0/2.0; double x, temp; double dxdp; double term2,term3,term4a,term4b; struct fun_info_s corr_info; pa = den_info.dena; pb = den_info.denb; p = pa+pb; eta = (pa-pb)/p; detaa = (1-eta)/p; detab = -(1+eta)/p; eta2 = eta*eta; eta3 = eta2*eta; eta4 = eta2*eta2; onepluseta = pow(1+eta,fourthirds); onemineta = pow(1-eta,fourthirds); geta = nineeighths*(onepluseta+onemineta-2.0); onepluseta2 = pow(1+eta,onethirds); onemineta2 = pow(1-eta,onethirds); dgeta = threehalves*(onepluseta2-onemineta2); temp = 3.0/(4.0*_pi*p); x = pow(temp,0.333333333); dxdp = -x/(3.0*p); ep = Pade_int(x,x0p,bp,cp,Ap,Qp); ef = Pade_int(x,x0f,bf,cf,Af,Qf); ea = Pade_int(x,x0a,ba,ca,Aa,Qa); dep = d_Pade_int(x,x0p,bp,cp,Ap,Qp); def = d_Pade_int(x,x0f,bf,cf,Af,Qf); dea = d_Pade_int(x,x0a,ba,ca,Aa,Qa); /*fprintf(outfile,"\nep = %e ef = %e ea = %e",ep,ef,ea); fprintf(outfile,"\ndep = %e def = %e dea = %e",dep,def,dea);*/ beta = ((d2f0*(ef-ep))/ea)-1.0; dbeta = (d2f0/ea)*(def-dep-((ef-ep)/ea)*dea); betaplus = 1.0+(beta*eta4); ec = ep+ea*geta*(1.0+(beta*eta4)); corr_info.eval = p*ec; term2 = dea*geta*betaplus; term3 = ea*geta*dbeta*eta4; term4a = (dgeta*betaplus+4.0*geta*beta*eta3)*detaa; term4b = (dgeta*betaplus+4.0*geta*beta*eta3)*detab; dec = dxdp*(dep+term2+term3); deca = dec+ea*term4a; decb = dec+ea*term4b; corr_info.dvala = ec+p*deca; corr_info.dvalb = ec+p*decb; return corr_info; } };}; psi3/src/bin/cints/DFT/functional_u.h0000644000101500007650000000124410754417572016151 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_functional_u_h #define _psi_src_bin_cints_DFT_functional_u_h /*! \file functional_u.h \ingroup CINTS \brief Enter brief description of file here */ #include "data_structs.h" namespace psi { namespace CINTS { struct fun_info_s slater_u_e(struct den_info_s den_info); struct fun_info_s slater_u_ed(struct den_info_s den_info); struct fun_info_s no_funct_u(struct den_info_s den_info); struct fun_info_s VWN5_u_e(struct den_info_s den_info); struct fun_info_s VWN5_u_ed(struct den_info_s den_info); struct fun_info_s VWN4_u_e(struct den_info_s den_info); struct fun_info_s VWN4_u_ed(struct den_info_s den_info); };} #endif psi3/src/bin/cints/DFT/grid_init.cc0000644000101500007650000001010411112564564015555 0ustar crawdad/*! \file grid_init.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"init_unf_prim_atomic_grid.h" #include"init_prun_prim_atomic_grid.h" #include"init_unf_conc_grid.h" #include"init_prun_conc_grid.h" #include"free_grid_structs.h" #include"bragg.h" #include"SG1.h" #include"physconst.h" namespace psi { namespace CINTS { void grid_init(){ int errcod,i,j; int depth; int num_ang_grids; int rpointstmp; int angpoints; int chunktmp; int start,end; int chunk_size; int u_atom_num; int Z_nuc; const char *gridstring; /* Contcrete Object */ grid_t *grid; /* --------------------------- Do all of the input parsing and then initialize primitive atomic grid --------------------------*/ grid = &(DFT_options.grid); depth = 0; /* read the number of Abrams chunks */ chunktmp = 4; errcod = ip_data("CHUNK_NUM","%d",&chunktmp,0); /* The SG-1 grid will be the default for now */ errcod = ip_count("GRID",&depth,0); /* If depth is 0 then it is a special gridtype */ if(depth==0){ gridstring = "SG1"; errcod = ip_string("GRID",(char **) &gridstring,0); /* This is the initialization fo the SG1 grid */ if(!strcmp(gridstring,"SG1") || !strcmp(gridstring,"SG-1")){ rpointstmp = 50; grid->pruned_info.n_param_sets = 3; grid->pruned_info.n_diff_ang_grids = 1; grid->pruned_info.n_tot_ang_grids = 5; grid->pruned_info.a2param = (int *)init_array(Symmetry.num_unique_atoms); grid->pruned_info.param_set = (struct param_set_s *)malloc(sizeof(struct param_set_s)* grid->pruned_info.n_param_sets); for(i=0;ipruned_info.n_param_sets;i++){ grid->pruned_info.param_set[i].n_ang_grids = 5; grid->pruned_info.param_set[i].alpha = init_array(grid->pruned_info.param_set[i].n_ang_grids-1); grid->pruned_info.param_set[i].angpoints = (int *) init_array(grid->pruned_info.param_set[i].n_ang_grids); grid->pruned_info.param_set[i].alpha[0] = SG1alpha1[i]; grid->pruned_info.param_set[i].alpha[1] = SG1alpha2[i]; grid->pruned_info.param_set[i].alpha[2] = SG1alpha3[i]; grid->pruned_info.param_set[i].alpha[3] = SG1alpha4[i]; for(j=0;j<5;j++){ grid->pruned_info.param_set[i].angpoints[j] = SG1angular[j]; } } for(i=0;ipruned_info.a2param[i] = SG1a2param[Z_nuc]; } grid->prim_pruned_atomic_grids = init_pruned_prim_atomic_grid(rpointstmp, chunktmp, grid->pruned_info); init_pruned_con_grid(); grid->label = "SG-1"; grid->n_rad_points = 51; } else throw std::domain_error("No Special Grids have been implemented in this code yet"); } /* if the depth is 2 then it is a EML grid that is uniform */ else if(depth == 2){ errcod = ip_data("GRID","%d",&rpointstmp,1,0); if(errcod != IPE_OK) throw std::domain_error("Problem with Grid specification: the radial points"); errcod = ip_data("GRID","%d",&angpoints,1,1); if(errcod != IPE_OK) throw std::domain_error("Problem with Grid specification: the angular points"); /* ------------------------- Construct Primitive atomic grid data ------------------------*/ grid->prim_atomic_grid = init_uniform_prim_atomic_grid(rpointstmp,angpoints,chunktmp); init_uniform_con_grid(); grid->label = "Euler-Mclaren / Lebedev Spheres"; grid->n_rad_points = rpointstmp+1; } else throw std::domain_error("Problem with Grid specification: Wrong number of elements for keyword Grid"); for(i=0;iatomic_grid[i].Bragg_radii = Bragg_radii[(int) Molecule.centers[Symmetry.ua2a[i]].Z_nuc]; } return; } };}; psi3/src/bin/cints/DFT/grid_init.h0000644000101500007650000000041710754417572015434 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_grid_init_h #define _psi_src_bin_cints_DFT_grid_init_h /*! \file grid_init.h \ingroup CINTS \brief Enter brief description of file here */ #include "data_structs.h" namespace psi { namespace CINTS { void grid_init(); };} #endif psi3/src/bin/cints/DFT/grid_init.old0000644000101500007650000001516410757640026015763 0ustar crawdad#include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include"lebedev_init.h" #include"physconst.h" #include"bragg.h" prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints,int n_angpoints,int num_chunk); struct pruned_info_s { int *alphas; int *ang_points; }; prim_atomic_grid_t init_pruned_prim_atomic_grid(int myass); grid_t grid_init(){ int errcod,i,j; int num_ang_grids; int rpointstmp; int angpoints; int chunktmp; int start,end; int chunk_size; int u_atom_num; int Z_nuc; struct pruned_info_s *pruned_info; char *gridstring; /* Abstract Classes */ prim_atomic_grid_t prim_atomic_grid; /* Contcrete Object */ grid_t grid; struct leb_chunk_s *chnk; prim_leb_chunk_t *prim_chnk; /* --------------------------- Do all of the input parsing and then initialize primitive atomic grid --------------------------*/ DFT_options.Bragg = init_array(Molecule.num_atoms); for(i=0;i 1) grid.atomic_grid[i].atom_degen = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.atom_positions[u_atom_num]] [Symmetry.atom_positions[u_atom_num]]; else grid.atomic_grid[i].atom_degen = 1; /* --- These may not exactly be the Bragg-Slater Radii ---*/ /* ------------ See Bragg.h for the reference ------------*/ grid.atomic_grid[i].Bragg_radii = Bragg_radii[(int) Molecule.centers[Symmetry.ua2a[i]].Z_nuc]; /* ---- Set up chunk information ----*/ grid.atomic_grid[i].chunk_num = prim_atomic_grid.chunk_num; grid.atomic_grid[i].leb_chunk = (struct leb_chunk_s *) malloc(sizeof(struct leb_chunk_s)*grid.atomic_grid[i].chunk_num); for(j=0;jradial_start = prim_chnk->radial_start; chnk->radial_end = prim_chnk->radial_end; chnk->size = prim_chnk->size; chnk->spheres = prim_chnk->spheres; chnk->bf_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_ao); } } return grid; } prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints,int n_angpoints,int num_chunks){ int i,j,k; int start,end; int chunk_size; double qr; double r; double rind; double n_rpoints_d; double four_pi_div_by_rps; double x,y,z; double drdq; prim_atomic_grid_t prim_atomic_grid; leb_sphere_t unit_sphere; leb_sphere_t *sph; /* Constants */ n_rpoints_d = (double) n_rpoints; four_pi_div_by_rps = 4.0*_pi/n_rpoints_d; prim_atomic_grid.chunk_num = num_chunks; /*------------------------- Initialize the unit sphere, there is only one here ---------------------------*/ unit_sphere = lebedev_init(n_angpoints); /* ------------------------ Set up primitive chunks -----------------------*/ chunk_size = n_rpoints/num_chunks; prim_atomic_grid.leb_chunk = (prim_leb_chunk_t *) malloc(sizeof(prim_leb_chunk_t)*num_chunks); for(i=0;ipoints = (leb_point_t *)malloc(sizeof(leb_point_t)*n_angpoints); for(k=0;kpoints[k].p_cart.x = unit_sphere.points[k].p_cart.x*r; sph->points[k].p_cart.y = unit_sphere.points[k].p_cart.y*r; sph->points[k].p_cart.z = unit_sphere.points[k].p_cart.z*r; sph->points[k].ang_weight = unit_sphere.points[k].ang_weight; } sph->r = r; sph->drdq = drdq; sph->n_ang_points = unit_sphere.n_ang_points; } prim_atomic_grid.leb_chunk[i].radial_start = start; prim_atomic_grid.leb_chunk[i].radial_end = end; prim_atomic_grid.leb_chunk[i].size = chunk_size; } return prim_atomic_grid; } psi3/src/bin/cints/DFT/grid_init.old20000644000101500007650000002703410757640026016044 0ustar crawdad#include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include"lebedev_init.h" #include"physconst.h" #include"bragg.h" prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints, int n_angpoints, int num_chunk); struct param_set_s { int n_ang_grids; /* Number of different lebedev spheres in atomic grid */ double *alpha; /* The cutoff parameters */ int *angpoints; /* the different angular grids */ } struct pruned_info_s { int *a2param; /* Elements tell which parameter set is used for each atom */ int n_diff_ang_grids; /* If there are more than one sets of angular grids, this is how many */ int n_total_ang_grids; /* Total number of different angular grids */ int n_param_sets; /* Number of total parameter sets */ struct param_set_s *param_set; /* The parameter sets */ }; prim_atomic_grid_t *init_pruned_prim_atomic_grid(int n_rpoints, int num_chunk, struct pruned_info_s *pruned_info); grid_t grid_init(){ int errcod,i,j; int num_ang_grids; int rpointstmp; int angpoints; int chunktmp; int start,end; int chunk_size; int u_atom_num; int Z_nuc; struct pruned_info_s pruned_info; char *gridstring; /* Abstract Classes */ prim_atomic_grid_t prim_atomic_grid; prim_atomic_grid_t *prim_atomic_pruned_grids; /* Contcrete Object */ grid_t grid; struct leb_chunk_s *chnk; prim_leb_chunk_t *prim_chnk; /* --------------------------- Do all of the input parsing and then initialize primitive atomic grid --------------------------*/ DFT_options.Bragg = init_array(Molecule.num_atoms); for(i=0;i 1) grid.atomic_grid[i].atom_degen = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.atom_positions[u_atom_num]] [Symmetry.atom_positions[u_atom_num]]; else grid.atomic_grid[i].atom_degen = 1; /* --- These may not exactly be the Bragg-Slater Radii ---*/ /* ------------ See Bragg.h for the reference ------------*/ grid.atomic_grid[i].Bragg_radii = Bragg_radii[(int) Molecule.centers[Symmetry.ua2a[i]].Z_nuc]; /* ---- Set up chunk information ----*/ /* ---- This is the only part that depends on whether you it is a pruned grid or not */ grid.atomic_grid[i].chunk_num = prim_atomic_grid.chunk_num; grid.atomic_grid[i].leb_chunk = (struct leb_chunk_s *) malloc(sizeof(struct leb_chunk_s)*grid.atomic_grid[i].chunk_num); for(j=0;jradial_start = prim_chnk->radial_start; chnk->radial_end = prim_chnk->radial_end; chnk->size = prim_chnk->size; chnk->spheres = prim_chnk->spheres; chnk->bf_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_ao); } } return grid; } prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints,int n_angpoints,int num_chunks){ int i,j,k; int start,end; int chunk_size; double qr; double r; double rind; double n_rpoints_d; double four_pi_div_by_rps; double x,y,z; double drdq; prim_atomic_grid_t prim_atomic_grid; leb_sphere_t unit_sphere; leb_sphere_t *sph; /* Constants */ n_rpoints_d = (double) n_rpoints; four_pi_div_by_rps = 4.0*_pi/n_rpoints_d; prim_atomic_grid.chunk_num = num_chunks; /*------------------------- Initialize the unit sphere, there is only one here ---------------------------*/ unit_sphere = lebedev_init(n_angpoints); /* ------------------------ Set up primitive chunks -----------------------*/ chunk_size = n_rpoints/num_chunks; prim_atomic_grid.leb_chunk = (prim_leb_chunk_t *) malloc(sizeof(prim_leb_chunk_t)*num_chunks); for(i=0;ipoints = (leb_point_t *)malloc(sizeof(leb_point_t)*n_angpoints); for(k=0;kpoints[k].p_cart.x = unit_sphere.points[k].p_cart.x*r; sph->points[k].p_cart.y = unit_sphere.points[k].p_cart.y*r; sph->points[k].p_cart.z = unit_sphere.points[k].p_cart.z*r; sph->points[k].ang_weight = unit_sphere.points[k].ang_weight; } sph->r = r; sph->drdq = drdq; sph->n_ang_points = unit_sphere.n_ang_points; } prim_atomic_grid.leb_chunk[i].radial_start = start; prim_atomic_grid.leb_chunk[i].radial_end = end; prim_atomic_grid.leb_chunk[i].size = chunk_size; } return prim_atomic_grid; } prim_atomic_grid_t *init_pruned_prim_atomic_grid(int n_rpoints, int num_chunk, struct pruned_info_s *pruned_info){ int i,j,k; int start,end; int chunk_size; int cutoff_index; double qr; double r; double rind; double rext; double n_rpoints_d; double four_pi_div_by_rps; double x,y,z; double drdq; prim_atomic_grid_t *prim_atomic_grid; leb_sphere_t *unit_sphere; leb_sphere_t *sph; /* Constants */ n_rpoints_d = (double) n_rpoints; four_pi_div_by_rps = 4.0*_pi/n_rpoints_d; /*------------------------- Initialize the unit sphere, one for each type of angular grid used ---------------------------*/ unit_sphere = (leb_sphere_t *)malloc(sizeof(leb_sphere_t)*pruned_info.n_tot_ang_grids); for(i=0;i= pruned_info.param[i].alpha[cutoff_index]) cut_off++; drdq = four_pi_div_by_rps*r*r*2.0*qr/((1-qr)*(1-qr)*(1-qr)); sph->points = (leb_point_t *)malloc(sizeof(leb_point_t)); for(l=0;lpoints[l].p_cart.x = unit_sphere[cutoff_param].points[l].p_cart.x*r; sph->points[l].p_cart.y = unit_sphere[cutoff_param].points[l].p_cart.y*r; sph->points[l].p_cart.z = unit_sphere[cutoff_param].points[l].p_cart.z*r; sph->points[l].ang_weight = unit_sphere[cutoff_param].points[l].ang_weight; } sph->r = r; sph->drdq = drdq; sph->n_ang_points = unit_sphere[cuttoff_param].n_ang_points; } prim_atomic_grid[i].leb_chunk[j].radial_start = start; prim_atomic_grid[i].leb_chunk[j].radial_end = end; prim_atomic_grid[i].leb_chunk[j].size = chunk_size; } } return prim_atomic_grid; } grid_t init_uniform_con_grid( psi3/src/bin/cints/DFT/init_close_shell_info.cc0000644000101500007650000000477310757640026020160 0ustar crawdad/*! \file init_close_shell_info.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { struct close_shell_info_s init_close_shell_info(void){ struct close_shell_info_s close; close.shells_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_shells); close.aos_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_ao); close.close_shells_per_am = (int *)malloc(sizeof(int)*BasisSet.max_am); /*close.close_COCC = (double **)malloc(sizeof(double *)*BasisSet.num_ao);*/ if(UserOptions.reftype == uhf){ close.close_COCC_a = block_matrix(BasisSet.num_ao,MOInfo.alpha_occ); close.close_COCC_b = block_matrix(BasisSet.num_ao,MOInfo.alpha_occ); } else{ close.close_COCC = block_matrix(BasisSet.num_ao,MOInfo.ndocc); } return close; } void free_close_shell_info(struct close_shell_info_s close_shell_info){ free(close_shell_info.shells_close_to_chunk); free(close_shell_info.close_shells_per_am); if(UserOptions.reftype == uhf){ free(close_shell_info.close_COCC_a); free(close_shell_info.close_COCC_b); } else{ free(close_shell_info.close_COCC); } } void print_close_shell_info(struct close_shell_info_s close){ int i; fprintf(outfile,"\nClose Shell Info Data Structure"); fprintf(outfile,"\nNumber of close AO's = %d",close.num_close_aos); fprintf(outfile,"\nNumber of close Shells = %d",close.num_close_shells); for(i=0;i #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"physconst.h" namespace psi { namespace CINTS { void init_pruned_con_grid(void){ int i,j; int u_atom_num; struct leb_chunk_s *chnk; prim_leb_chunk_t *prim_chnk; grid_t *grid; grid = &(DFT_options.grid); grid->pruned_flag = 1; grid->atomic_grid = (struct atomic_grid_s *) malloc(sizeof(struct atomic_grid_s)*Symmetry.num_unique_atoms); for(i=0;iatomic_grid[i].atom_num = u_atom_num; grid->atomic_grid[i].atom_center = Molecule.centers[u_atom_num]; /* --- Calculate the degeneracy of symmetry unique atoms ---*/ if(Symmetry.nirreps > 1) grid->atomic_grid[i].atom_degen = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.atom_positions[u_atom_num]] [Symmetry.atom_positions[u_atom_num]]; else grid->atomic_grid[i].atom_degen = 1; /* --- These may not exactly be the Bragg-Slater Radii ---*/ /* ------------ See Bragg.h for the reference ------------*/ /* grid->atomic_grid[i].Bragg_radii = Bragg_radii[(int) Molecule.centers[Symmetry.ua2a[i]].Z_nuc]; */ /* ---- Set up chunk information ----*/ /* ---- This is the only part that depends on whether you it is a pruned grid or not */ grid->atomic_grid[i].chunk_num = grid->prim_pruned_atomic_grids[grid->pruned_info.a2param[i]].chunk_num; grid->atomic_grid[i].leb_chunk = (struct leb_chunk_s *) malloc(sizeof(struct leb_chunk_s)*grid->atomic_grid[i].chunk_num); for(j=0;jatomic_grid[i].chunk_num;j++){ chnk = &(grid->atomic_grid[i].leb_chunk[j]); prim_chnk = &(grid->prim_pruned_atomic_grids[grid->pruned_info.a2param[i]].leb_chunk[j]); chnk->radial_start = prim_chnk->radial_start; chnk->radial_end = prim_chnk->radial_end; chnk->size = prim_chnk->size; chnk->spheres = prim_chnk->spheres; chnk->shells_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_ao); chnk->close_shells_per_am = (int *)malloc(sizeof(int)*BasisSet.max_am); } } return; } };}; psi3/src/bin/cints/DFT/init_prun_conc_grid.h0000644000101500007650000000047310754417572017504 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_init_prun_conc_grid_h #define _psi_src_bin_cints_DFT_init_prun_conc_grid_h /*! \file init_prun_conc_grid.h \ingroup CINTS \brief Enter brief description of file here */ #include"data_structs.h" namespace psi { namespace CINTS { void init_pruned_con_grid(void); };} #endif psi3/src/bin/cints/DFT/init_prun_prim_atomic_grid.cc0000644000101500007650000001026610757640026021217 0ustar crawdad/*! \file init_prun_prim_atomic_grid.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"lebedev_init.h" #include"physconst.h" namespace psi { namespace CINTS { prim_atomic_grid_t *init_pruned_prim_atomic_grid(int n_rpoints, int num_chunk, struct pruned_info_s pruned_info){ int i,j,k,l; int start,end; int chunk_size; int cutoff_index; int angpoints; double qr; double r; double rind; double rext; double n_rpoints_d; double four_pi_div_by_rps; double x,y,z; double drdq; prim_atomic_grid_t *prim_atomic_grid; leb_sphere_t *unit_sphere; leb_sphere_t *sph; /* Constants */ n_rpoints_d = (double) n_rpoints+1.0; four_pi_div_by_rps = 4.0*_pi/n_rpoints_d; /*------------------------- Initialize the unit sphere, one for each type of angular grid used ---------------------------*/ unit_sphere = (leb_sphere_t *)malloc(sizeof(leb_sphere_t)*pruned_info.n_tot_ang_grids); for(i=0;i= pruned_info.param_set[i].alpha[cutoff_index] && cutoff_indexpoints = (leb_point_t *)malloc(sizeof(leb_point_t)*angpoints); for(l=0;lpoints[l].p_cart.x = unit_sphere[cutoff_index].points[l].p_cart.x*r; sph->points[l].p_cart.y = unit_sphere[cutoff_index].points[l].p_cart.y*r; sph->points[l].p_cart.z = unit_sphere[cutoff_index].points[l].p_cart.z*r; sph->points[l].ang_weight = unit_sphere[cutoff_index].points[l].ang_weight; } sph->r = r; sph->drdq = drdq; sph->n_ang_points = unit_sphere[cutoff_index].n_ang_points; } prim_atomic_grid[i].leb_chunk[j].radial_start = start; prim_atomic_grid[i].leb_chunk[j].radial_end = end; prim_atomic_grid[i].leb_chunk[j].size = chunk_size; } } return prim_atomic_grid; } } } psi3/src/bin/cints/DFT/init_prun_prim_atomic_grid.h0000644000101500007650000000064110754417572021062 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_init_prun_prim_atomic_grid_h #define _psi_src_bin_cints_DFT_init_prun_prim_atomic_grid_h /*! \file init_prun_prim_atomic_grid.h \ingroup CINTS \brief Enter brief description of file here */ #include"data_structs.h" namespace psi { namespace CINTS { prim_atomic_grid_t *init_pruned_prim_atomic_grid(int n_rpoints, int num_chunk, struct pruned_info_s pruned_info); };} #endif psi3/src/bin/cints/DFT/init_unf_conc_grid.cc0000644000101500007650000000445110757640026017441 0ustar crawdad/*! \file init_unf_conc_grid.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"physconst.h" namespace psi { namespace CINTS { void init_uniform_con_grid(void){ int i,j; int u_atom_num; struct leb_chunk_s *chnk; prim_leb_chunk_t *prim_chnk; grid_t *grid; grid = &(DFT_options.grid); grid->pruned_flag = 0; grid->atomic_grid = (struct atomic_grid_s *) malloc(sizeof(struct atomic_grid_s)*Symmetry.num_unique_atoms); for(i=0;iatomic_grid[i].atom_num = u_atom_num; grid->atomic_grid[i].atom_center = Molecule.centers[u_atom_num]; /* --- Calculate the degeneracy of symmetry unique atoms ---*/ if(Symmetry.nirreps > 1) grid->atomic_grid[i].atom_degen = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.atom_positions[u_atom_num]] [Symmetry.atom_positions[u_atom_num]]; else grid->atomic_grid[i].atom_degen = 1; /* --- These may not exactly be the Bragg-Slater Radii ---*/ /* ------------ See Bragg.h for the reference ------------*/ /* grid->atomic_grid[i].Bragg_radii = Bragg_radii[(int) Molecule.centers[Symmetry.ua2a[i]].Z_nuc]; */ /* ---- Set up chunk information ----*/ /* ---- This is the only part that depends on whether you it is a pruned grid or not */ grid->atomic_grid[i].chunk_num = grid->prim_atomic_grid.chunk_num; grid->atomic_grid[i].leb_chunk = (struct leb_chunk_s *) malloc(sizeof(struct leb_chunk_s)*grid->atomic_grid[i].chunk_num); for(j=0;jatomic_grid[i].chunk_num;j++){ chnk = &(grid->atomic_grid[i].leb_chunk[j]); prim_chnk = &(grid->prim_atomic_grid.leb_chunk[j]); chnk->radial_start = prim_chnk->radial_start; chnk->radial_end = prim_chnk->radial_end; chnk->size = prim_chnk->size; chnk->spheres = prim_chnk->spheres; chnk->shells_close_to_chunk = (int *)malloc(sizeof(int)*BasisSet.num_ao); chnk->close_shells_per_am = (int *)malloc(sizeof(int)*BasisSet.max_am); } } return; } };} psi3/src/bin/cints/DFT/init_unf_conc_grid.h0000644000101500007650000000046710754417572017313 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_init_unf_conc_grid_h #define _psi_src_bin_cints_DFT_init_unf_conc_grid_h /*! \file init_unf_conc_grid.h \ingroup CINTS \brief Enter brief description of file here */ #include"data_structs.h" namespace psi { namespace CINTS { void init_uniform_con_grid(void); };} #endif psi3/src/bin/cints/DFT/init_unf_prim_atomic_grid.cc0000644000101500007650000000625510757640026021026 0ustar crawdad/*! \file init_unf_prim_atomic_grid.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"lebedev_init.h" #include"physconst.h" namespace psi { namespace CINTS { prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints,int n_angpoints,int num_chunks){ int i,j,k; int start,end; int chunk_size; int n_rpoints_plus_two; double qr; double r; double rind; double n_rpoints_d; double four_pi_div_by_rps; double x,y,z; double drdq; prim_atomic_grid_t prim_atomic_grid; leb_sphere_t unit_sphere; leb_sphere_t *sph; /* Constants */ n_rpoints_plus_two = n_rpoints+1.0; n_rpoints_d = (double) n_rpoints+1.0; four_pi_div_by_rps = 4.0*_pi/n_rpoints_d; prim_atomic_grid.chunk_num = num_chunks; /*------------------------- Initialize the unit sphere, there is only one here ---------------------------*/ unit_sphere = lebedev_init(n_angpoints); /* ------------------------ Set up primitive chunks -----------------------*/ chunk_size = n_rpoints/num_chunks; prim_atomic_grid.leb_chunk = (prim_leb_chunk_t *) malloc(sizeof(prim_leb_chunk_t)*num_chunks); for(i=0;ipoints = (leb_point_t *)malloc(sizeof(leb_point_t)*n_angpoints); for(k=0;kpoints[k].p_cart.x = unit_sphere.points[k].p_cart.x*r; sph->points[k].p_cart.y = unit_sphere.points[k].p_cart.y*r; sph->points[k].p_cart.z = unit_sphere.points[k].p_cart.z*r; sph->points[k].ang_weight = unit_sphere.points[k].ang_weight; } sph->r = r; sph->drdq = drdq; sph->n_ang_points = unit_sphere.n_ang_points; } prim_atomic_grid.leb_chunk[i].radial_start = start; prim_atomic_grid.leb_chunk[i].radial_end = end; prim_atomic_grid.leb_chunk[i].size = chunk_size; } return prim_atomic_grid; } };} psi3/src/bin/cints/DFT/init_unf_prim_atomic_grid.h0000644000101500007650000000061510754417572020667 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_init_unf_prim_atomic_grid_h #define _psi_src_bin_cints_DFT_init_unf_prim_atomic_grid_h /*! \file init_unf_prim_atomic_grid.h \ingroup CINTS \brief Enter brief description of file here */ #include"data_structs.h" namespace psi { namespace CINTS { prim_atomic_grid_t init_uniform_prim_atomic_grid(int n_rpoints,int n_angpoints,int num_chunks); };} #endif psi3/src/bin/cints/DFT/lebedev_init.cc0000644000101500007650000004211110757640026016243 0ustar crawdad/*! \file lebedev_init.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { int generate_points(int type, int start, double a, double b, double v); double *x,*y,*z,*weight; leb_sphere_t lebedev_init(int degree){ int i; int start=0; double a,b,c,v; leb_sphere_t leb_tmp; x = init_array(degree); y = init_array(degree); z = init_array(degree); weight = init_array(degree); switch (degree){ case 6: v = 0.1666666666666667; start = generate_points(1,start,a,b,v); break; case 14: v = 0.06666666666666667; start = generate_points(1,start,a,b,v); v = 0.07500000000000000; start = generate_points(3,start,a,b,v); break; case 26: v = 0.04761904761904762; start = generate_points(1,start,a,b,v); v = 0.03809523809523810; start = generate_points(2,start,a,b,v); v = 0.03214285714285714; start = generate_points(3,start,a,b,v); break; case 38: v = 0.009523809523809524; start = generate_points(1,start,a,b,v); v =0.03214285714285714; start = generate_points(3,start,a,b,v); a = 0.4597008433809831; v = 0.02857142857142857; start = generate_points(5,start,a,b,v); break; case 50: v = 0.01269841269841270; start = generate_points(1,start,a,b,v); v = 0.02257495590828924; start = generate_points(2,start,a,b,v); v = 0.02109375000000000; start = generate_points(3,start,a,b,v); a = 0.3015113445777636; v = 0.02017333553791887; start = generate_points(4,start,a,b,v); break; case 74: v = 0.0005130671797338464; start = generate_points(1,start,a,b,v); v = 0.01660406956574204; start = generate_points(2,start,a,b,v); v = -0.02958603896103896; start = generate_points(3,start,a,b,v); a = 0.4803844614152614; v = 0.02657620708215946; start = generate_points(4,start,a,b,v); a = 0.3207726489807764; v = 0.01652217099371571; start = generate_points(5,start,a,b,v); break; case 86: v = 0.01154401154401154; start = generate_points(1,start,a,b,v); v = 0.01194390908585628; start = generate_points(3,start,a,b,v); a = 0.3696028464541502; v = 0.01111055571060340; start = generate_points(4,start,a,b,v); a = 0.6943540066026664; v = 0.01187650129453714; start = generate_points(4,start,a,b,v); a = 0.3742430390903412; v = 0.01181230374690448; start = generate_points(5,start,a,b,v); break; case 110: v = 0.003828270494937162; start = generate_points(1,start,a,b,v); v = 0.009793737512487512; start = generate_points(3,start,a,b,v); a = 0.1851156353447362; v = 0.008211737283191111; start = generate_points(4,start,a,b,v); a = 0.6904210483822922; v = 0.009942814891178103; start = generate_points(4,start,a,b,v); a = 0.3956894730559419; v =0.009595471336070963; start = generate_points(4,start,a,b,v); a = 0.4783690288121502; v = 0.009694996361663028; start = generate_points(5,start,a,b,v); break; case 146: v = 0.0005996313688621381; start = generate_points(1,start,a,b,v); v = 0.007372999718620756; start = generate_points(2,start,a,b,v); v = 0.007210515360144488; start = generate_points(3,start,a,b,v); a = 0.6764410400114264; v = 0.007116355493117555; start = generate_points(4,start,a,b,v); a = 0.4174961227965453; v = 0.006753829486314477; start = generate_points(4,start,a,b,v); a = 0.1574676672039082; v = 0.007574394159054034; start = generate_points(4,start,a,b,v); a = 0.1403553811713183; b = 0.4493328323269557; v = 0.006991087353303262; start = generate_points(6,start,a,b,v); break; case 170: v = 0.005544842902037365; start = generate_points(1,start,a,b,v); v = 0.006071332770670752; start = generate_points(2,start,a,b,v); v = 0.006383674773515093; start = generate_points(3,start,a,b,v); a = 0.2551252621114134; v = 0.005183387587747790; start = generate_points(4,start,a,b,v); a = 0.6743601460362766; v = 0.006317929009813725; start = generate_points(4,start,a,b,v); a = 0.4318910696719410; v = 0.006201670006589077; start = generate_points(4,start,a,b,v); a = 0.2613931360335988; v = 0.005477143385137348; start = generate_points(5,start,a,b,v); a = 0.4990453161796037; b = 0.1446630744325115; v = 0.005968383987681156; start = generate_points(6,start,a,b,v); break; case 194: v = 0.001782340447244611; start = generate_points(1,start,a,b,v); v = 0.005716905949977102; start = generate_points(2,start,a,b,v); v = 0.005573383178848738; start = generate_points(3,start,a,b,v); a = 0.6712973442695226; v = 0.005608704082587997; start = generate_points(4,start,a,b,v); a = 0.2892465627575439; v = 0.005158237711805383; start = generate_points(4,start,a,b,v); a = 0.4446933178717437; v = 0.005518771467273614; start = generate_points(4,start,a,b,v); a = 0.1299335447650067; v = 0.004106777028169394; start = generate_points(4,start,a,b,v); a = 0.3457702197611283; v = 0.005051846064614808; start = generate_points(5,start,a,b,v); a = 0.1590417105383530; b = 0.8360360154824589; v = 0.005530248916233094; start = generate_points(6,start,a,b,v); break; /* need to add 230, 266 */ case 302: v = 0.8545911725128148E-3; start = generate_points(1,start,a,b,v); v = 0.3599119285025571E-2; start = generate_points(3,start,a,b,v); a=0.3515640345570105E+0; v=0.3449788424305883E-2; start = generate_points(4,start,a,b,v); a=0.6566329410219612E+0; v=0.3604822601419882E-2; start = generate_points(4,start,a,b,v); a=0.4729054132581005E+0; v=0.3576729661743367E-2; start = generate_points(4,start,a,b,v); a=0.9618308522614784E-1; v=0.2352101413689164E-2; start = generate_points(4,start,a,b,v); a=0.2219645236294178E+0; v=0.3108953122413675E-2; start = generate_points(4,start,a,b,v); a=0.7011766416089545E+0; v=0.3650045807677255E-2; start = generate_points(4,start,a,b,v); a=0.2644152887060663E+0; v=0.2982344963171804E-2; start = generate_points(5,start,a,b,v); a=0.5718955891878961E+0; v=0.3600820932216460E-2; start = generate_points(5,start,a,b,v); a=0.2510034751770465E+0; b=0.8000727494073952E+0; v=0.3571540554273387E-2; start = generate_points(6,start,a,b,v); a=0.1233548532583327E+0; b=0.4127724083168531E+0; v=0.3392312205006170E-2; start = generate_points(6,start,a,b,v); break; /* need to add 350, 434, 590, 770, 974, 1202, 1454, 1730, 2030, 2354, 2702, 3074, 3470, 3890, 4334, 4802, 5294, 5810*/ default: throw std::domain_error("\nAngular grid unrecognized"); } leb_tmp.n_ang_points = degree; leb_tmp.points = (leb_point_t *) malloc(degree*sizeof(leb_point_t)); for(i=0;i #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"physconst.h" namespace psi { namespace CINTS { /*! Implementation of the VWN functional extrapolation functions as given in Can J. Phys., 58, 1980 pp. 1200 */ double Pade_int(double p, double x0, double b, double c, double A, double Q){ double x,X,X0,invQ; double txpb,Qd2xpb; double term1,term2,mult1,term3,term4; double temp1,temp2,temp3,temp4,temp5,temp6,temp7; double ec; x = sqrt(p); txpb = 2.0*x+b; Qd2xpb = Q/txpb; invQ = 1.0/Q; X = 1.0/(x*x+b*x+c); X0 = 1.0/(x0*x0+b*x0+c); temp1 = x*x*X; term1 = log(temp1); temp3 = atan(Qd2xpb); term2 = 2.0*b*invQ*temp3; mult1 = b*x0*X0; temp4 = (x-x0)*(x-x0)*X; term3 = log(temp4); temp5 = 2.0*(2.0*x0+b)*invQ; term4 = temp5*atan(Qd2xpb); ec = A*(term1+term2-mult1*(term3+term4)); return ec; } double d_Pade_int(double p, double x0, double b, double c, double A, double Q){ double x,Q2,X,X0,invQ; double txpb; double Qsptxpbs; double term1,term2,term3,term4,term5,term6; double mult1; double temp1,temp2,temp3,temp4,temp5; double dec; x=sqrt(p); A=A/(2*x); Q2 = Q*Q; txpb = 2.0*x+b; Qsptxpbs = txpb*txpb+Q2; X = 1.0/(x*x+b*x+c); X0 = 1.0/(x0*x0+b*x0+c); term1 = 2.0/x; term2 = -txpb*X; term3 = -4.0*b/Qsptxpbs; mult1 = -b*x0*X0; temp3 = x-x0; term4 = 2.0/temp3; temp4 = 2.0*x0+b; term5 = -4.0*temp4/Qsptxpbs; dec = A*(term1+term2+term3+mult1*(term4+term2+term5)); return dec; } };} psi3/src/bin/cints/DFT/pade.h0000644000101500007650000000056010754417572014374 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_pade_h #define _psi_src_bin_cints_DFT_pade_h /*! \file pade.h \ingroup CINTS \brief Enter brief description of file here */ namespace psi { namespace CINTS { double Pade_int(double p, double x0, double b, double c, double A, double Q); double d_Pade_int(double p, double x0, double b, double c, double A, double Q); };} #endif psi3/src/bin/cints/DFT/SG1.h0000644000101500007650000000127410754417572014060 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_SG1_h #define _psi_src_bin_cints_DFT_SG1_h /*! \file SG1.h \ingroup CINTS \brief Enter brief description of file here These are the first Partitioning parameters for the SG-1 Grid It is in this format so that I don't have to use if statements */ namespace psi { namespace CINTS { double SG1alpha1[] = { 0.25, 0.1667, 0.10}; double SG1alpha2[] = { 0.50, 0.50, 0.40}; double SG1alpha3[] = { 1.0, 0.90, 0.80}; double SG1alpha4[] = { 4.50, 3.50, 2.50}; int SG1angular[]= { 6, 38, 86, 194, 86 }; int SG1a2param[]= { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,}; }; }; #endif psi3/src/bin/cints/DFT/weighting.cc0000644000101500007650000000525410757640026015606 0ustar crawdad/*! \file weighting.cc \ingroup CINTS \author Shawn Brown This code contains some functions used for the calculation of the weighting functions for the Becke scheme. Ref. Becke, J. Chem. Phys., Vol. 88, pg. 2547, 1988. ----------------------------------------------*/ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" /* Declare functions in this code */ namespace psi { namespace CINTS { double u_calc(int i, int j, struct coordinates geom); double v_calc(int i, int j, double uij); double f_u(double vij); double s_u(double f); double weight_calc(int atomn,struct coordinates geom,int k_order){ int i,j,k,l; int natoms; double utemp,vtemp,ftemp; double **s_mat; double *ptemp; double sum=0.0; double weight; natoms = Molecule.num_atoms; /*natoms = Symmetry.num_unique_atoms;*/ ptemp = init_array(natoms); s_mat = block_matrix(natoms,natoms); /* calculate all possible s's*/ for(i=0;i0.5) aij = 0.5; if(aij<-0.5) aij = -0.5; tmp1 = uij*uij; tmp2 = aij*(1-tmp1); tmp3 = uij+tmp2; return uij+tmp2; } };} psi3/src/bin/cints/DFT/weighting.h0000644000101500007650000000044510754417572015452 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_weighting_h #define _psi_src_bin_cints_DFT_weighting_h /*! \file weighting.h \ingroup CINTS \brief Enter brief description of file here */ namespace psi { namespace CINTS { double weight_calc(int atomn,struct coordinates geom,int k_order); };} #endif psi3/src/bin/cints/DFT/xc_fock.cc0000644000101500007650000002033410757640026015231 0ustar crawdad/*! \file xc_fock.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"dft_init.h" #include"weighting.h" #include"calc_den_fast.h" #include"calc_den.h" #include"functional.h" #include"physconst.h" #include"grid_init.h" #include"free_grid_structs.h" #include"dcr.h" #include"init_close_shell_info.h" #include"calc_close_basis.h" namespace psi { namespace CINTS { void xc_fock(void){ int i,j,k,l,m,n,q,s,t,u; int ua, atom, ua_deg; int rpoints; int ang_points; int num_ao; int point_count=0; int dum; int num; int moff,noff,mtmp,ntmp; int am2shell1,am2shell2; int shell_type1,shell_type2; int ioff1,ioff2; int chek = 1; int close_shells; int close_aos; int tmp; int nstri; double temp; double *temp_arr; double **tmpmat1; double *Gtri; /* Total and open-shell G matrices and lower triagonal form in SO basis */ double r; double rind; double rpoints_double; double ua_deg_d; double bragg; double qr; double drdq; double jacobian; double xa,ya,za; double Becke_weight; double ang_quad; double four_pi_div_by_rps; double den_val=0.0; double exch_vval=0.0; double corr_vval=0.0; double exch_eval=0.0; double corr_eval=0.0; double vval = 0.0; double eval = 0.0; double bas1 = 0.0; double bas2 = 0.0; double vvalbas = 0.0; struct coordinates geom; struct den_info_s den_info; struct xc_info_s xc_info; struct atomic_grid_s *atm_grd; struct leb_chunk_s *chnk; leb_sphere_t *sphr; leb_point_t *pnt; num_ao = BasisSet.num_ao; DFT_options.basis = (double *)malloc(sizeof(double)*num_ao); if(UserOptions.reftype == rhf) G = init_matrix(num_ao,num_ao); /* ----Initialize Close shell data structure ---- */ DFT_options.close_shell_info = init_close_shell_info(); timer_init(); timer_on("DFT"); grid_init(); /*------------------------------------------------------- Loop over symmetry-unique atoms only since integration domains around symm.-unique atoms are equivalent We are NOT employing the symmetry of angular grids about atoms in special positions (on symm. elements) like Handy & co. do -------------------------------------------------------*/ for(ua=0;uaatom_num; /*--- Cheap trick to get degeneracies of each unique atom ---*/ ua_deg = atm_grd->atom_degen; ua_deg_d = (double) ua_deg; xa = atm_grd->atom_center.x; ya = atm_grd->atom_center.y; za = atm_grd->atom_center.z; bragg = atm_grd->Bragg_radii; for(j=0;jchunk_num;j++){ chnk = &(atm_grd->leb_chunk[j]); timer_on("close basis"); calc_close_basis(ua,j); close_shells = DFT_options.close_shell_info.num_close_shells; close_aos = DFT_options.close_shell_info.num_close_aos; timer_off("close basis"); for(k=0;ksize;k++){ sphr = &(chnk->spheres[k]); r = sphr->r*bragg; /*r = 0.87895;*/ drdq = sphr->drdq*bragg*bragg*bragg; fprintf(outfile,"\nr = %e drdq = %e ang = %d",r,drdq,sphr->n_ang_points); for(l=0;ln_ang_points;l++){ pnt = &(sphr->points[l]); /* ---------------------------------- Calculate the cartesian points of the point relative to the center of mass -------------------------------------*/ geom.x = bragg*pnt->p_cart.x+xa; geom.y = bragg*pnt->p_cart.y+ya; geom.z = bragg*pnt->p_cart.z+za; /*----------------------------------- Calculate the weighting funtion ----------------------------------*/ Becke_weight = weight_calc(atom,geom,3); if(Becke_weight> WEIGHT_CUTOFF){ /*----------------------------------- Get the density information for this point ----------------------------------*/ timer_on("DEN1"); den_info = DFT_options.den_calc(geom,ua); timer_off("DEN1"); if(den_info.den > DEN_CUTOFF){ /*------------------------------------- Weight from Lebedev -----------------------------------*/ ang_quad = 4.0*_pi*pnt->ang_weight; /*------------------------------------ Calculate the potential functional and energy functional at this point -----------------------------------*/ /*fprintf(outfile,"\nua_deg = %10.10lf",ua_deg_d);*/ den_val += 2.0*ua_deg_d*drdq*ang_quad *Becke_weight*den_info.den; xc_info.exch_info = DFT_options. exchange_func(den_info); xc_info.corr_info = DFT_options. correlation_func(den_info); exch_vval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.dval; corr_vval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.dval; vval = exch_vval+corr_vval; exch_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.eval; corr_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.eval; eval += ua_deg_d*drdq*ang_quad *Becke_weight*(xc_info.exch_info.eval+ xc_info.corr_info.eval); /*------------------------------------ Update the G matrix -----------------------------------*/ timer_on("FOCK"); t=0; for(m=0;m moff) G[moff][noff] += bas2; else G[noff][moff] += bas2; } } timer_off("FOCK"); } } } } } } free_close_shell_info(DFT_options.close_shell_info); /*print_mat(G,num_ao,num_ao,outfile);*/ for(m=0;m 1 || BasisSet.puream) { tmpmat1 = block_matrix(Symmetry.num_so,BasisSet.num_ao); mmult(Symmetry.usotao,0,G,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,G,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) { mmult(Symmetry.usotao,0,Go,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,Go,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); } free_block(tmpmat1); } /*------------------------- Write G-matrices to disk -------------------------*/ nstri = ioff[Symmetry.num_so]; Gtri = init_array(nstri); sq_to_tri(G,Gtri,Symmetry.num_so); free_block(G); fprintf(outfile,"\nDFT_energy = %10.10lf",eval); fprintf(outfile,"\nX-Energy = %10.10lf",exch_eval); fprintf(outfile,"\nC-Energy = %10.10lf",corr_eval); fprintf(outfile,"\ntrace of density = %10.10lf\n",den_val); psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); psio_write_entry(IOUnits.itapDSCF,"DFT X-energy", (char *) &(exch_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT C-energy", (char *) &(corr_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT XC-energy", (char *) &(eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT Den", (char *) &(den_val), sizeof(double)); psio_write_entry(IOUnits.itapDSCF, "Total XC G-matrix" , (char *) Gtri, sizeof(double)*nstri); free(Gtri); /*-- Cleanup the DFT stuff and close files --*/ cleanup_grid_type(DFT_options.grid); psio_close(IOUnits.itapDSCF, 1); return; } };} psi3/src/bin/cints/DFT/xc_fock.h0000644000101500007650000000035710754417572015103 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_xc_fock_h #define _psi_src_bin_cints_DFT_xc_fock_h /*! \file xc_fock.h \ingroup CINTS \brief Enter brief description of file here */ namespace psi { namespace CINTS { void xc_fock(void); }} #endif psi3/src/bin/cints/DFT/xc_fock_u.cc0000644000101500007650000002220110757640026015550 0ustar crawdad/*! \file xc_fock_u.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"dft_init.h" #include"weighting.h" #include"calc_den_u.h" #include"functional_u.h" #include"physconst.h" #include"grid_init.h" #include"free_grid_structs.h" #include"dcr.h" #include"init_close_shell_info.h" #include"calc_close_basis_u.h" #include"pade.h" namespace psi { namespace CINTS { void xc_fock_u(void){ int i,j,k,l,m,n,q,s,t,u; int ua, atom, ua_deg; int rpoints; int ang_points; int num_ao; int point_count=0; int dum; int num; int moff,noff,mtmp,ntmp; int am2shell1,am2shell2; int shell_type1,shell_type2; int ioff1,ioff2; int chek = 1; int close_shells; int close_aos; int tmp; int nstri; double temp; double *temp_arr; double **tmpmat1; double *Gtria, *Gtrib; /* Total and open-shell G matrices and lower triagonal form in SO basis */ double r; double rind; double rpoints_double; double ua_deg_d; double bragg; double qr; double drdq; double jacobian; double xa,ya,za; double Becke_weight; double ang_quad; double four_pi_div_by_rps; double den_val=0.0; double exch_vval_a=0.0; double exch_vval_b=0.0; double corr_vval_a=0.0; double corr_vval_b=0.0; double exch_eval=0.0; double corr_eval=0.0; double vval_a = 0.0; double vval_b = 0.0; double eval = 0.0; double bas1 = 0.0; double bas1a = 0.0; double bas1b = 0.0; double bas2 = 0.0; double bas2a = 0.0; double bas2b = 0.0; struct coordinates geom; struct den_info_s den_info; struct xc_info_s xc_info; struct atomic_grid_s *atm_grd; struct leb_chunk_s *chnk; leb_sphere_t *sphr; leb_point_t *pnt; /*fprintf(outfile,"\nPade = %10.10lf",Pade_int(1.0,-0.00475840 ,1.13107,13.0045, -0.0337737,7.123108918));*/ num_ao = BasisSet.num_ao; DFT_options.basis = (double *)malloc(sizeof(double)*num_ao); Ga = block_matrix(num_ao,num_ao); Gb = block_matrix(num_ao,num_ao); /* ----Initialize Close shell data structure ---- */ DFT_options.close_shell_info = init_close_shell_info(); timer_init(); timer_on("DFT"); grid_init(); /*------------------------------------------------------- Loop over symmetry-unique atoms only since integration domains around symm.-unique atoms are equivalent We are NOT employing the symmetry of angular grids about atoms in special positions (on symm. elements) like Handy & co. do -------------------------------------------------------*/ for(ua=0;uaatom_num; /*--- Cheap trick to get degeneracies of each unique atom ---*/ ua_deg = atm_grd->atom_degen; ua_deg_d = (double) ua_deg; xa = atm_grd->atom_center.x; ya = atm_grd->atom_center.y; za = atm_grd->atom_center.z; bragg = atm_grd->Bragg_radii; for(j=0;jchunk_num;j++){ chnk = &(atm_grd->leb_chunk[j]); timer_on("close basis"); calc_close_basis_u(ua,j); close_shells = DFT_options.close_shell_info.num_close_shells; close_aos = DFT_options.close_shell_info.num_close_aos; timer_off("close basis"); for(k=0;ksize;k++){ sphr = &(chnk->spheres[k]); r = sphr->r*bragg; drdq = sphr->drdq*bragg*bragg*bragg; for(l=0;ln_ang_points;l++){ pnt = &(sphr->points[l]); /* ---------------------------------- Calculate the cartesian points of the point relative to the center of mass -------------------------------------*/ geom.x = bragg*pnt->p_cart.x+xa; geom.y = bragg*pnt->p_cart.y+ya; geom.z = bragg*pnt->p_cart.z+za; /*----------------------------------- Calculate the weighting funtion ----------------------------------*/ Becke_weight = weight_calc(atom,geom,3); if(Becke_weight> WEIGHT_CUTOFF){ /*----------------------------------- Get the density information for this point ----------------------------------*/ timer_on("DEN1"); /*den_info = DFT_options.den_calc(geom,ua);*/ den_info = calc_density_u(geom,ua); timer_off("DEN1"); if(den_info.dena > DEN_CUTOFF || den_info.denb > DEN_CUTOFF){ /*------------------------------------- Weight from Lebedev -----------------------------------*/ ang_quad = pnt->ang_weight; /*------------------------------------ Calculate the potential functional and energy functional at this point -----------------------------------*/ den_val += ua_deg_d*drdq*ang_quad *Becke_weight*(den_info.dena + den_info.denb); xc_info.exch_info = DFT_options. exchange_func(den_info); xc_info.corr_info = DFT_options. correlation_func(den_info); exch_vval_a = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.dvala; exch_vval_b = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.dvalb; corr_vval_a = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.dvala; corr_vval_b = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.dvalb; vval_a = exch_vval_a+corr_vval_a; vval_b = exch_vval_b+corr_vval_b; exch_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.eval; corr_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.eval;; eval += ua_deg_d*drdq*ang_quad *Becke_weight*(xc_info.exch_info.eval+ xc_info.corr_info.eval); /*------------------------------------ Update the G matrix -----------------------------------*/ timer_on("FOCK"); t=0; for(m=0;m moff){ Ga[moff][noff] += bas2a; Gb[moff][noff] += bas2b; } else{ Ga[noff][moff] += bas2a; Gb[noff][moff] += bas2b; } } } timer_off("FOCK"); } } } } } } free_close_shell_info(DFT_options.close_shell_info); for(m=0;m 1 || BasisSet.puream) { tmpmat1 = block_matrix(Symmetry.num_so,BasisSet.num_ao); mmult(Symmetry.usotao,0,Ga,0,tmpmat1,0,Symmetry.num_so, BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,Ga,0,Symmetry.num_so, BasisSet.num_ao,Symmetry.num_so,0); mmult(Symmetry.usotao,0,Gb,0,tmpmat1,0,Symmetry.num_so, BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,Gb,0,Symmetry.num_so, BasisSet.num_ao,Symmetry.num_so,0); free_block(tmpmat1); } /*------------------------- Write G-matrices to disk -------------------------*/ /*fprintf(outfile,"\nDFT_energy = %10.10lf",eval); fprintf(outfile,"\nX-Energy = %10.10lf",exch_eval); fprintf(outfile,"\nC-Energy = %10.10lf",corr_eval); fprintf(outfile,"\ntrace of density = %10.10lf\n",den_val);*/ psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); psio_write_entry(IOUnits.itapDSCF,"DFT X-energy", (char *) &(exch_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT C-energy", (char *) &(corr_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT XC-energy", (char *) &(eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT Den", (char *) &(den_val), sizeof(double)); nstri = ioff[Symmetry.num_so]; Gtria = init_array(nstri); sq_to_tri(Ga,Gtria,Symmetry.num_so); free_block(Ga); Gtrib = init_array(nstri); sq_to_tri(Gb,Gtrib,Symmetry.num_so); free_block(Gb); psio_write_entry(IOUnits.itapDSCF, "Alpha XC G-matrix" , (char *) Gtria, sizeof(double)*nstri); psio_write_entry(IOUnits.itapDSCF, "Beta XC G-matrix" , (char *) Gtrib, sizeof(double)*nstri); free(Gtria); free(Gtrib); /*-- Cleanup the DFT stuff and close files --*/ cleanup_grid_type(DFT_options.grid); psio_close(IOUnits.itapDSCF, 1); return; } };} psi3/src/bin/cints/DFT/xc_fock_u.h0000644000101500007650000000036510754417572015426 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_xc_fock_u_h #define _psi_src_bin_cints_DFT_xc_fock_u_h /*! \file xc_fock_u.h \ingroup CINTS \brief Enter brief description of file here */namespace psi { namespace CINTS { void xc_fock_u(void); }} #endif psi3/src/bin/cints/DFT/xc_grad_fock.cc0000644000101500007650000002463110757640026016232 0ustar crawdad/*! \file xc_grad_fock.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"dft_init.h" #include"weighting.h" #include"calc_den_fast.h" #include"calc_den.h" #include"calc_grad_fast.h" #include"functional.h" #include"physconst.h" #include"grid_init.h" #include"free_grid_structs.h" #include"dcr.h" #include"init_close_shell_info.h" #include"calc_close_basis.h" namespace psi { namespace CINTS { void xc_grad_fock(void){ int i,j,k,l,m,n,q,s,t,u; int ua, atom, ua_deg; int rpoints; int ang_points; int num_ao; int point_count=0; int dum; int num; int moff,noff,mtmp,ntmp; int am2shell1,am2shell2; int shell_type1,shell_type2; int ioff1,ioff2; int chek = 1; int close_shells; int close_aos; int tmp; int nstri; double temp; double *temp_arr; double *omega_arr; double **tmpmat1; double *Gtri; /* Total and open-shell G matrices and lower triagonal form in SO basis */ double r; double rind; double rpoints_double; double ua_deg_d; double bragg; double qr; double drdq; double jacobian; double xa,ya,za; double Becke_weight; double ang_quad; double four_pi_div_by_rps; double den_val=0.0; double exch_pval=0.0; double exch_gval=0.0; double corr_pval=0.0; double corr_gval=0.0; double exch_eval=0.0; double corr_eval=0.0; double pval = 0.0; double gval = 0.0; double eval = 0.0; double bas1 = 0.0; double bas2 = 0.0; double vvalbas = 0.0; double dpx,dpy,dpz; struct coordinates geom; struct den_info_s den_info; struct xc_info_s xc_info; struct atomic_grid_s *atm_grd; struct leb_chunk_s *chnk; leb_sphere_t *sphr; leb_point_t *pnt; num_ao = BasisSet.num_ao; DFT_options.basis = (double *)malloc(sizeof(double)*num_ao); DFT_options.gradx = (double *)malloc(sizeof(double)*num_ao); DFT_options.grady = (double *)malloc(sizeof(double)*num_ao); DFT_options.gradz = (double *)malloc(sizeof(double)*num_ao); DFT_options.gamma_basis = (double *)malloc(sizeof(double)*num_ao); omega_arr = (double *)malloc(sizeof(double)*num_ao); G = init_matrix(num_ao,num_ao); /* ----Initialize Close shell data structure ---- */ DFT_options.close_shell_info = init_close_shell_info(); timer_init(); timer_on("DFT"); grid_init(); /*------------------------------------------------------- Loop over symmetry-unique atoms only since integration domains around symm.-unique atoms are equivalent We are NOT employing the symmetry of angular grids about atoms in special positions (on symm. elements) like Handy & co. do -------------------------------------------------------*/ for(ua=0;uaatom_num; /*--- Cheap trick to get degeneracies of each unique atom ---*/ ua_deg = atm_grd->atom_degen; ua_deg_d = (double) ua_deg; xa = atm_grd->atom_center.x; ya = atm_grd->atom_center.y; za = atm_grd->atom_center.z; bragg = atm_grd->Bragg_radii; for(j=0;jchunk_num;j++){ chnk = &(atm_grd->leb_chunk[j]); timer_on("close basis"); calc_close_basis(ua,j); close_shells = DFT_options.close_shell_info.num_close_shells; close_aos = DFT_options.close_shell_info.num_close_aos; timer_off("close basis"); for(k=0;ksize;k++){ sphr = &(chnk->spheres[k]); r = sphr->r*bragg; /*r = 0.87895;*/ drdq = sphr->drdq*bragg*bragg*bragg; for(l=0;ln_ang_points;l++){ pnt = &(sphr->points[l]); /* ---------------------------------- Calculate the cartesian points of the point relative to the center of mass -------------------------------------*/ geom.x = bragg*pnt->p_cart.x+xa; geom.y = bragg*pnt->p_cart.y+ya; geom.z = bragg*pnt->p_cart.z+za; /*----------------------------------- Calculate the weighting funtion ----------------------------------*/ Becke_weight = weight_calc(atom,geom,3); if(Becke_weight> WEIGHT_CUTOFF){ /*----------------------------------- Get the density information for this point ----------------------------------*/ timer_on("DEN1"); /*den_info = DFT_options.den_calc(geom,ua);*/ den_info = calc_grad_fast(geom,ua); timer_off("DEN1"); if(den_info.den > DEN_CUTOFF){ /*------------------------------------- Weight from Lebedev -----------------------------------*/ ang_quad = 4.0*_pi*pnt->ang_weight; /*------------------------------------ Calculate the potential functional and energy functional at this point -----------------------------------*/ /*fprintf(outfile,"\nua_deg = %10.10lf",ua_deg_d);*/ den_val += 2.0*ua_deg_d*drdq*ang_quad *Becke_weight*den_info.den; xc_info.exch_info = DFT_options. exchange_func(den_info); xc_info.corr_info = DFT_options. correlation_func(den_info); exch_pval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.dpval; exch_gval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.dgval; corr_pval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.dpval; corr_gval = ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.dgval; pval = exch_pval+corr_pval; gval = exch_gval+corr_gval; exch_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.exch_info.eval; corr_eval += ua_deg_d*drdq*ang_quad *Becke_weight*xc_info.corr_info.eval; eval += ua_deg_d*drdq*ang_quad *Becke_weight*(xc_info.exch_info.eval+ xc_info.corr_info.eval); /*------------------------------------ Update the G matrix -----------------------------------*/ timer_on("FOCK"); t=0; /* Form omega array < p+dphiu > */ dpx = den_info.gradx; dpy = den_info.grady; dpz = den_info.gradz; /* Omega is the df/dgamma * delp . delp(basu*basv) */ /* See Benny Johnson's Thesis page 109 */ /*for(m=0;m moff) G[moff][noff] += bas2; else G[noff][moff] += bas2; } }*/ /*fprintf(outfile,"\ngval = %10.10lf",gval);*/ for(m=0;m 1 || BasisSet.puream) { tmpmat1 = block_matrix(Symmetry.num_so,BasisSet.num_ao); mmult(Symmetry.usotao,0,G,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,G,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) { mmult(Symmetry.usotao,0,Go,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,Go,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); } free_block(tmpmat1); } /*------------------------- Write G-matrices to disk -------------------------*/ nstri = ioff[Symmetry.num_so]; Gtri = init_array(nstri); sq_to_tri(G,Gtri,Symmetry.num_so); free_block(G); fprintf(outfile,"\nDFT_energy = %10.10lf",eval); fprintf(outfile,"\nX-Energy = %10.10lf",exch_eval); fprintf(outfile,"\nC-Energy = %10.10lf",corr_eval); fprintf(outfile,"\ntrace of density = %10.10lf\n",den_val); psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); psio_write_entry(IOUnits.itapDSCF,"DFT X-energy", (char *) &(exch_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT C-energy", (char *) &(corr_eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT XC-energy", (char *) &(eval), sizeof(double)); psio_write_entry(IOUnits.itapDSCF,"DFT Den", (char *) &(den_val), sizeof(double)); psio_write_entry(IOUnits.itapDSCF, "Total XC G-matrix" , (char *) Gtri, sizeof(double)*nstri); free(Gtri); /*-- Cleanup the DFT stuff and close files --*/ cleanup_grid_type(DFT_options.grid); psio_close(IOUnits.itapDSCF, 1); return; } };} psi3/src/bin/cints/DFT/xc_grad_fock.h0000644000101500007650000000040110754417572016066 0ustar crawdad#ifndef _psi_src_bin_cints_DFT_xc_grad_fock_h #define _psi_src_bin_cints_DFT_xc_grad_fock_h /*! \file xc_grad_fock.h \ingroup CINTS \brief Enter brief description of file here */namespace psi { namespace CINTS { void xc_grad_fock(void); }} #endif psi3/src/bin/cints/Documentation/0000755000101500007650000000000011146111656015473 5ustar crawdadpsi3/src/bin/cints/Documentation/commandline.html0000644000101500007650000000570310335447060020654 0ustar crawdad

Valid command-line options

  1. --oeints will cause CINTS to compute standard one-electron integrals only. Subdirectory Default_Ints had to be compiled in (it is by default).

  2. --teints will cause CINTS to compute ERIs only. Subdirectory Default_Ints had to be compiled in (it is by default).

  3. --oeprop will cause CINTS to compute one-electron property integrals (overlap, dipole moment, and integrals over electronic nabla operator) in AO basis. Subdirectory OEProp_Ints had to be compiled in (it if by default).

  4. --fock is used by CSCF to cause CINTS to form the Fock matrices directly. Subdirectory HF_Fock and DFT had to be compiled in (it is by default). Do not use this option to run CINTS standalone, as it will try to read an intermediate file produced by CSCF.

  5. --mp2 will cause CINTS to compute MP2 energy directly. Subdirectory MP2 had to be compiled in (it is by default).

  6. --deriv1 will cause CINTS to compute first-order energy derivatives. Subdirectory Default_Deriv1 had to be compiled in (it is by default).

  7. --deriv1_ints will cause CINTS to compute symmetry adapted first-order derivative integrals. Subdirectory Default_Deriv1 had to be compiled in (it is by default).

  8. --deriv2 will cause CINTS to compute second-order energy derivative components and first-order derivative Fock and overlap matrices for solving first-order CPHF equations. Subdirectory Default_Deriv2 had to be compiled in (it is by default).

  9. --mp2r12 will cause CINTS to compute non-standard MO integrals necessary to evaluate MP2-R12 energy with program MP2R12. Subdirectory MP2R12 had to be compiled in (it is NOT by default).

  10. --r12ints will cause CINTS to compute non-standard AO integrals necessary to evaluate MP2-R12 energy. Subdirectories MP2R12 and R12_Ints had to be compiled in (they are NOT by default).

No command-line options will cause CINTS to evaluate and store standard one- and two-electron integrals. It is the default and most frequently used mode.



psi3/src/bin/cints/Documentation/compile.html0000644000101500007650000000566007231153350020015 0ustar crawdad CINTS ---- machine-optimized integrals program

Configuration

  • Depending on your system environment and what capabilities of CINTS you want to enable, you might have to edit Makefile first. Add subdirectories which contain code you want to include to SUBDIRS. CLIBS will be adjusted automatically. Here's the current list of directories and the resulting additions to CLIBS:

Directory Name(s)

Function

Required Library

Default_Ints

Compute standard one-and two-electron integrals and store them out to disk

-lint

OEProp_Ints

Compute one-electron property integrals in AO basis and store them out to disk

Default_Deriv1

Evaluate energy derivatives

-lderiv

HF_Fock

Compute two-electron contribution to Fock matrices

-lint

MP2

Compute MP2 energy directly

-lint

MP2R12

Compute MO basis non-standard two-electron integrals necessary for MP2-R12 energy evaluation

-lr12

R12_Ints MP2R12

Compute SO basis non-standard two-electron integrals necessary for linear R12-theories and store them to disk

-lr12



  • If a BLAS library is available - add it to CLIBS in Makefile, set USE_BLAS in defines.h to 1, and make sure the $(BIN) target uses $(F77) as a linker rather than $(CC). If no BLAS library is available - USE_BLAS should be set to 0.

Compilation

Refer to PSI 3 Programmer's Manual for information on how to compile the package.

psi3/src/bin/cints/Documentation/description.html0000644000101500007650000001025510335447060020707 0ustar crawdad

General

Program CINTS can evaluate integrals over Gaussian functions of the following one- and two-electron operators which appear in quantum chemical theories:

  • overlap

  • electron kinetic energy

  • nuclear attraction

  • electron repulsion (ERI)

  • anticoulombic (r12-operator)

  • [r12,Ti] operator (i=1,2)

  • various one-electron property operators (currently, only dipole moment and electronic nabla operators)

First-order derivatives with respect to nuclear positions may be evaluated for the first four types of integrals. (Derivative) integrals are evaluated over symmetry-adapted Cartesian and Spherical Harmonics contracted Gaussian functions. Symmetry use is restricted to D2h and it's subgroups. The program does not have theoretical limits on the number of basis functions or the maximum angular momentum of Gaussian functions in the basis.

Tasks

As integrals are evaluated, the program can either write them out to disk (available for only up-to first-order derivative integrals) or contract them with appropriate quantities to form various entities of interest.

Disk storage

Integrals are written to disk in the new Integrals With Labels (IWL) format (see PSI 3 Programmer's Manual, section on LIBIWL). LIBIWL functions provide the interface which may be used to access integrals files. Non-zero, unique with respect to index permutations1 two-electron integrals are written in shell-quartet order, i.e. all integrals which belong to the same quartet of (symmetry unique) shells are written together. There are no markers between shell-quartets. However, there's a particular order in which shell-quartets of ERIs get stored to disk. Shell-quartets of ERIs which contribute to the same shell-quartet of supermatrix integrals P and K are written together. The last integral in each PK-block is written with its first index set to the negative of itself so that CSCF knows where it can stop and dump a complete block of P and K elements to disk.

Contraction

Depending on the keywords or command-line options specified, the following types of contractions can be performed:

  • formation of the two-electron part of Fock matrix (spin-restricted for closed- and high-spin open-shell systems and spin-unrestricted cases) from ERIs (works in conjunction with CSCF)

  • restricted integral-direct transformation to compute RHF MP2 energy

  • restricted integral-direct transformation to compute and dump MO integrals that appear in the RHF MP2-R12 energy expression (MO integrals are used by program MP2R12)

  • evaluate energy gradients at Hartree-Fock and correlated levels



1Two-electron integrals of Hermitian operators have the usual 8-fold permutation symmetry. Operator [r12,Ti] is non-Hermitian, hence a permutation of its integrals's bra and ket does not leave the integral invariant. See Wim Klopper's article in Theor. Chim. Acta..

psi3/src/bin/cints/Documentation/examples.html0000644000101500007650000000065107046653677020223 0ustar crawdad

Examples

No examples yet.



psi3/src/bin/cints/Documentation/home.html0000644000101500007650000000207707231153350017314 0ustar crawdad

CINTS

Molecular integrals package

Edward F. Valeev and Justin T. Fermann

Center for Computational Quantum Chemistry, University of Georgia,

Athens, GA

and

PSITECH, Inc.,

Watkinsville, GA

January 2000



psi3/src/bin/cints/Documentation/keywords.html0000644000101500007650000000531607570254042020240 0ustar crawdad

Valid keywords

  • PRINT - this integer determines the amount of information to be printed out. Defaults to 1; 0 if --fock is specified on command-line. Print level thresholds for some quantities of interest may be looked up in defines.h

  • CUTOFF - integer; 10^(-CUTOFF) is the cutoff on the integrals to be computed. Defaults value is 15 and can be changed by prior to compilation by editing defines.h. Keyword CUTOFF is not-used when CINTS is run in direct Hartree-Fock mode (--fock is specified).

  • S_FILE, T_FILE, V_FILE, ERI_FILE - integers specifying file numbers to store overlap, kinetic energy, potential energy, and electron-repulsion integrals. Defaults are 35, 35, 35, and 33.

  • MEMORY - number of double-precision words to use. Valid only in MP2 and MP2-R12 modes. In other modes CINTS will use the minimal amount of memory possible. Default is 2500000 (20 MB) and can be changed by editing defines.h.

  • NUM_THREADS - number of threads to use. Values higher than 1 are valid only while computing the Fock matrix and HF gradients. In other modes CINTS will use just 1 thread Default is 1

  • RESTART - whether to a calculation is a restart. At the moment, only the direct MP2-R12/A integrals transformation can be restarted. For example, if your MP2-R12/A transformation is done in several passes and the calculation terminates after a few passes, you may restart the calculation provided you preserved the transformed integrals files (files 72, 79, and 80). To do that, set RESTART=true and RESTART_TASK=i where i is the number of the pass which wasn't completed.

Other keywords, such as WFN, REFERENCE, and DERTYPE are also checked in certain modes. It is done primarily to double-check users intentions and to detect inconsistencies in the program's input.

psi3/src/bin/cints/Documentation/references.html0000644000101500007650000000331607231153350020502 0ustar crawdad

References

Optimization concepts used in CINTS:

  1. J. T. Fermann, Ph.D. Thesis, University of Georgia, 1996.

Recurrence relations for one-electron integrals and electron repulsion integrals (ERIs):

  1. S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986).

  2. M. Head-Gordon and J. A. Pople, J. Chem. Phys. 89, 5777 (1988).

Recurrence relations for integrals of two-electron operators specific to linear R12 theories:

  1. W. Klopper and R. Rohse, Theor. Chim. Acta 83, 441 (1992).

  2. E. F. Valeev and H. F. Schaefer, J. Chem. Phys. 113, 3990 (2000).

Symmetry-adapted integrals and Pitzer's equal contribution theorem:

  1. P. R. Taylor in "Lecture Notes in Quantum Chemistry 58", B. O. Roos (Ed.), Springer-Verlag, 1992.

  2. R. Pitzer, J. Chem. Phys. 58, 3111 (1973).

Direct MP2 energy:

  1. M. Head-Gordon, J. A. Pople, and M. J. Frisch, Chem. Phys. Lett. 153, 503 (1988).

  2. I. M. B. Nielsen, Ph.D. Thesis, Stanford University, 1996.



psi3/src/bin/cints/Documentation/toc.html0000644000101500007650000000224607046653677017174 0ustar crawdad

Home

Description

Compilation Manual

Command-line options

Keywords

Examples

References

psi3/src/bin/cints/Fock/0000755000101500007650000000000011146111655013543 5ustar crawdadpsi3/src/bin/cints/Fock/fock.cc0000644000101500007650000000343110754663017015005 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"read_scf_opdm.h" #include"read_scf_occ_evec.h" #include"shell_block_matrix.h" #include"hf_fock.h" #include"xc_fock.h" #include"xc_fock_u.h" #include"xc_grad_fock.h" pthread_mutex_t fock_mutex; /* Lock on the global AO matrix */ namespace psi { namespace CINTS { void fock() { int dum; int n, num; int i, j, k, l; int nstri; double temp; double **tmpmat1; double *Gtri, *Gtri_o; /* Total and open-shell G matrices and lower triagonal form in SO basis */ /*---------------------------------------- Read in the difference HF/DFT densities ----------------------------------------*/ timer_on("HF_FOCK"); read_scf_opdm(); /*------------------------------------------- Compute HF contribution to the Fock matrix -------------------------------------------*/ hf_fock(); timer_off("HF_FOCK"); /*----------------------------------- Do numerical interation for KS DFT -----------------------------------*/ if(UserOptions.make_dft){ /*--- Read in the SCF eigenvector density ---*/ read_scf_occ_evec(); /*-- Compute exch+corr contribution to the Fock matrix ---*/ if(UserOptions.reftype == rhf) xc_grad_fock(); else if(UserOptions.reftype == uhf) xc_fock_u(); else throw std::domain_error("\nUnrecognized Kohn-Sham DFT reference"); } return; } };}; psi3/src/bin/cints/Fock/fock.h0000644000101500007650000000025310754663017014646 0ustar crawdad#ifndef _psi_src_bin_cints_Fock_fock_h #define _psi_src_bin_cints_Fock_fock_h /*! \file \ingroup CINTS */ namespace psi { namespace CINTS { void fock(); }} #endif psi3/src/bin/cints/Fock/hash.cc0000644000101500007650000001270310754663017015010 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"hash.h" #define hashing_function(a) (a)%htable->size /* division method */ namespace psi { namespace CINTS { /*------------------------- Initialize hashing table -------------------------*/ void init_htable(htable_t *htable, int nirreps) { int i; switch(nirreps) { case 1: htable->size = 7; break; case 2: htable->size = 97; break; case 4: htable->size = 1543; break; case 8: default: htable->size = 24593; break; } htable->table = (htable_entry *) malloc(htable->size*sizeof(htable_entry)); for(i=0;isize;i++) htable->table[i].key = EMPTY_KEY; return; } /*------------------------- Deallocate hashing table -------------------------*/ void free_htable(htable_t *htable) { free(htable->table); htable->table = NULL; return; } /*------------------------------------------ Compute the key from four (shell) indices ------------------------------------------*/ PSI_INT_LEAST64 compute_key(int si, int sj, int sk, int sl) { PSI_INT_LEAST64 ij, kl, ijkl; PSI_INT_LEAST64 key; ij = INDEX(si,sj); kl = INDEX(sk,sl); key = (ij > kl) ? ij*(ij+1)/2 + kl : kl*(kl+1)/2 + ij; /* key = INDEX(INDEX(si,sj),INDEX(sk,sl));*/ return key; } /*---------------------------------------------------- int put_entry() : Put an entry into the hashing table. Return the location if it's a new entry, or -1 if it has been in the table. One must remember that given set of si, sj, sk, sl and the set found in the table may be a permutation of each other which belong to Q4 - group which consists of all permutations under which an ERI is unchanged (Q4 is a subgroup of T4 of order 8). Another complication is that if si == sj or sk == sl - only htable[].q4ikjl is relevant, yet due to possibility of permutations it is safer to just increment it by THE SUM of q4ikjl and q4ilkj (since one of them is zero); Let P be the permutation which transforms the given {si,sj,sk,sl} into htable[].{si,sj,sk,sl}. P must be a product of the following (commuting) operations P0 (trivial transposition), P12 (swaps si and sj), P34 (swaps sk and sl), and P12,34 = P13 P24 (swaps bra and ket). Let K be a transposition that describes the contribution of a given {si,sj,sk,sl} to the current P(si,sj|sk,sl). K must be either P0 (q4ijkl is non-zero), P23 (q4ikjl non-zero) or P24 (q4ilkj non-zero). The following set of rules may be easily derived using multiplication table of T4: P0 {P} equiv(Q4) P0 P23 P12 equiv(Q4) P24 P24 P12 equiv(Q4) P23 P23 P34 equiv(Q4) P24 P24 P34 equiv(Q4) P23 P23 P12,34 equiv(Q4) P23 P24 P12,34 equiv(Q4) P24 equiv(Q4) means equivalent up to any permutation from Q4. This means that P is either P12 or P34 we need to swap q4ikjl and q4ilkj. ----------------------------------------------------*/ int put_entry(htable_t *htable, PSI_INT_LEAST64 key, int si, int sj, int sk, int sl, double q4ijkl, double q4ikjl, double q4ilkj) { int curr_ptr; int hvalue = hashing_function(key); int return_code = -1; int P_includes_P12, P_includes_P34; curr_ptr = hvalue; while(htable->table[curr_ptr].key != key && htable->table[curr_ptr].key != EMPTY_KEY) { curr_ptr++; if (htable->size == curr_ptr) curr_ptr = 0; } if (htable->table[curr_ptr].key == EMPTY_KEY) { return_code = curr_ptr; htable->table[curr_ptr].key = key; htable->table[curr_ptr].si = si; htable->table[curr_ptr].sj = sj; htable->table[curr_ptr].sk = sk; htable->table[curr_ptr].sl = sl; htable->table[curr_ptr].q4ijkl = q4ijkl; if (si == sj || sk == sl) { htable->table[curr_ptr].q4ikjl = q4ikjl + q4ilkj; htable->table[curr_ptr].q4ilkj = 0; } else { htable->table[curr_ptr].q4ikjl = q4ikjl; htable->table[curr_ptr].q4ilkj = q4ilkj; } } else { htable->table[curr_ptr].q4ijkl += q4ijkl; if (si == sj || sk == sl) { htable->table[curr_ptr].q4ikjl += q4ikjl + q4ilkj; } else { P_includes_P34 = ( (htable->table[curr_ptr].sk == sl && htable->table[curr_ptr].sl == sk) || (htable->table[curr_ptr].sk == sj && htable->table[curr_ptr].sl == si) ); P_includes_P12 = ( (htable->table[curr_ptr].si == sj && htable->table[curr_ptr].sj == si) || (htable->table[curr_ptr].si == sl && htable->table[curr_ptr].sj == sk) ); if (P_includes_P12 ^ P_includes_P34) { htable->table[curr_ptr].q4ikjl += q4ilkj; htable->table[curr_ptr].q4ilkj += q4ikjl; } else { htable->table[curr_ptr].q4ikjl += q4ikjl; htable->table[curr_ptr].q4ilkj += q4ilkj; } } } return return_code; } /*---------------------------------------------------- Put an entry into the table. Return the location if it's a new entry, or -1 if it has been in the table ----------------------------------------------------*/ int find_entry(htable_t *htable, PSI_INT_LEAST64 key) { int curr_ptr; int hvalue = hashing_function(key); int return_code = -1; curr_ptr = hvalue; while(htable->table[curr_ptr].key != key && htable->table[curr_ptr].key != EMPTY_KEY) { curr_ptr++; if (htable->size == curr_ptr) curr_ptr = 0; } if (htable->table[curr_ptr].key == EMPTY_KEY) return -1; else return curr_ptr; } };}; psi3/src/bin/cints/Fock/hash.h0000644000101500007650000000151510754663017014651 0ustar crawdad#ifndef _psi_src_bin_cints_Fock_hash_h #define _psi_src_bin_cints_Fock_hash_h /*! \file \ingroup CINTS ----------------------------------- Declarations of htable_entry, etc. -----------------------------------*/ #include namespace psi { namespace CINTS { typedef struct { PSI_INT_LEAST64 key; int si, sj, sk, sl; double q4ijkl, q4ikjl, q4ilkj; } htable_entry; typedef struct { htable_entry *table; int size; } htable_t; #define EMPTY_KEY -1 PSI_INT_LEAST64 compute_key(int si, int sj, int sk, int sl); void init_htable(htable_t *htable, int nirreps); void free_htable(htable_t *htable); int put_entry(htable_t *htable, PSI_INT_LEAST64 key, int si, int sj, int sk, int sl, double q4ijkl, double q4ikjl, double q4iljk); int find_entry(htable_t *htable, PSI_INT_LEAST64 key); };} #endif psi3/src/bin/cints/Fock/hf_fock.cc0000644000101500007650000001673510754663017015475 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"quartet_data.h" /* From Default_Ints */ #include"norm_quartet.h" #include"hash.h" #include"transmat.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include"schwartz.h" #include"shell_block_matrix.h" using namespace std; extern pthread_mutex_t fock_mutex; namespace psi { namespace CINTS { extern void *hf_fock_thread(void *); /*--- To be accessed by all HF Fock threads ---*/ double ****Gskel, ****Gskel_o; /* Shell-blocked skeleton G matrices */ void hf_fock() { pthread_attr_t thread_attr; pthread_t *thread_id; int nstri; int count ; int dum; int g, i, j, k, l, m, ii, jj, kk, ll; int si, sj, ni, nj, li, lj, si_g, sj_g; double temp; double **tmpmat1; double ****Gfull, ****Gfull_o; /* Shell-blocked G matrices in AO basis*/ double ****Gsym, ****Gsym_o; /* Shell-blocked symmetrized (Gskel + Gskel(transp.)) G matrices */ double ***ao_type_transmat; double *Gtri, *Gtri_o; /* Total G matrices in lower*/ /* triagonal form*/ /*--------------- Initialization ---------------*/ #ifdef USE_TAYLOR_FM /* init_Taylor_Fm_Eval(BasisSet.max_am*4-4,UserOptions.cutoff);*/ init_Taylor_Fm_Eval(BasisSet.max_am*4-4,1.0E-20); #else init_fjt(BasisSet.max_am*4); #endif init_libint_base(); /*------------------------------------------ Compute integrals for Schwartz inequality ------------------------------------------*/ schwartz_eri(); /*------------------------------------ Allocate shell-blocked skeleton G's ------------------------------------*/ Gskel = init_shell_block_matrix(); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) Gskel_o = init_shell_block_matrix(); thread_id = (pthread_t *) malloc(UserOptions.num_threads*sizeof(pthread_t)); pthread_attr_init(&thread_attr); pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM); pthread_mutex_init(&fock_mutex,NULL); for(long int i=0;i 1) { ao_type_transmat = build_transmat(Symmetry.sym_oper, Symmetry.nirreps, BasisSet.max_am); Gfull = init_shell_block_matrix(); for(g=0;g 1) { Gfull_o = init_shell_block_matrix(); for(g=0;g 1 || BasisSet.puream) { tmpmat1 = block_matrix(Symmetry.num_so,BasisSet.num_ao); mmult(Symmetry.usotao,0,G,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,G,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) { mmult(Symmetry.usotao,0,Go,0,tmpmat1,0,Symmetry.num_so,BasisSet.num_ao,BasisSet.num_ao,0); mmult(tmpmat1,0,Symmetry.usotao,1,Go,0,Symmetry.num_so,BasisSet.num_ao,Symmetry.num_so,0); } free_block(tmpmat1); } /* fprintf(outfile," Closed-shell Fock matrix in SO basis:\n"); print_mat(G,Symmetry.num_so,Symmetry.num_so,outfile); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) { fprintf(outfile," Open-shell Fock matrix in SO basis:\n"); print_mat(Go,Symmetry.num_so,Symmetry.num_so,outfile); } */ /*------------------------- Write G-matrices to disk -------------------------*/ nstri = ioff[Symmetry.num_so]; Gtri = init_array(nstri); sq_to_tri(G,Gtri,Symmetry.num_so); free_block(G); psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); switch (UserOptions.reftype) { case rohf: Gtri_o = init_array(nstri); sq_to_tri(Go,Gtri_o,Symmetry.num_so); free_block(Go); psio_write_entry(IOUnits.itapDSCF, "Open-shell JX G-matrix", (char *) Gtri_o, sizeof(double)*nstri); free(Gtri_o); case rhf: psio_write_entry(IOUnits.itapDSCF, "Total JX G-matrix", (char *) Gtri, sizeof(double)*nstri); free(Gtri); break; case uhf: Gtri_o = init_array(nstri); sq_to_tri(Go,Gtri_o,Symmetry.num_so); free_block(Go); /*--- Form alpha and beta Fock matrices first and then write them out ---*/ for(i=0;i 1) { free_shell_block_matrix(Gfull); } if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) { free_shell_block_matrix(Gsym_o); if (Symmetry.nirreps > 1) free_shell_block_matrix(Gfull_o); } #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #else free_fjt(); #endif return; } };}; psi3/src/bin/cints/Fock/hf_fock.h0000644000101500007650000000026210754663017015323 0ustar crawdad#ifndef _psi_src_bin_cints_Fock_hf_fock_h #define _psi_src_bin_cints_Fock_hf_fock_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void hf_fock(); }} #endif psi3/src/bin/cints/Fock/hf_fock_thread.cc0000644000101500007650000006317010754663017017017 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"quartet_data.h" /* From Default_Ints */ #include"norm_quartet.h" #include"hash.h" #include"transmat.h" #include"read_scf_opdm.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include"schwartz.h" #include"shell_block_matrix.h" using namespace std; extern pthread_mutex_t fock_mutex; /* Used to lock Fock matrices during update */ namespace psi { namespace CINTS { extern double ****Gskel, ****Gskel_o; /* Global skeleton Fock matrices, updated in critical sections */ void *hf_fock_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; /*--- Various data structures ---*/ struct tebuf *tot_data; /* buffer for non-zero integrals */ struct shell_pair *sp_ij, *sp_kl, *sp_ik, *sp_il, *sp_jk, *sp_jl; Libint_t Libint; /* Integrals library object */ htable_t htable; /* hashing table */ #ifndef USE_TAYLOR_FM double_array_t fjt_table; /* table of auxiliary function F_m(u) for each primitive combination */ #endif int total_te_count = 0; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int g, i, j, k, l, m, ii, jj, kk, ll; int a, b, c, d; int si; /* GCC compiler screwes up if static is left out */ int sj, sk, sl, si_g, sj_g; int sii, sjj, skk, sll , slll; int sij, skl, sijkl; int pi, pj, pk, pl ; int max_pj, max_pl; int pii, pjj, pkk, pll; int upk, num_unique_pk; int usi_arr[3], usj_arr[3], usk_arr[3], usl_arr[3]; int *si_arr, *sj_arr, *sk_arr, *sl_arr, *key_arr; int usii,usjj,uskk,usll,usi,usj,usk,usl; int usi_eq_usj, usi_eq_usk, usi_eq_usl, usj_eq_usl, usk_eq_usj, usk_eq_usl; int usij_eq_uskl, usik_eq_usjl, usil_eq_uskj; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, li, lj; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p; PSI_INT_LEAST64 key, key1, key2, key3; int new_quartet, htable_ptr, nstri; PSI_INT_LEAST64 quartet_index; double so_int; double lambda_T = 0.5/Symmetry.nirreps; double AB2, CD2; double *data; double pkblock_end_value = 0.0; double temp; double **tmpmat1; double *qijkl_arr, *qikjl_arr, *qiljk_arr; double q4ijkl; double fac1, fac2, fac3; double ffac1, ffac2, ffac3; double c1, c2, c3, c4; double dmax; double ****G, ****G_o; /* Shell-blocked skeleton G matrices from this thread */ /*--- init hashing table to store and retrieve quartet data init table for Fj(T) ---*/ if (Symmetry.nirreps > 1) init_htable( &htable, Symmetry.max_stab_index ); #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif max_cart_class_size = (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am])* (ioff[BasisSet.max_am]); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); /*--- init a LIBINT object ---*/ pthread_mutex_lock(&fock_mutex); UserOptions.memory -= init_libint(&Libint,BasisSet.max_am-1,max_num_prim_comb); pthread_mutex_unlock(&fock_mutex); /*--- Allocate this thread's shell-blocked skeleton G's ---*/ G = init_shell_block_matrix(); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) G_o = init_shell_block_matrix(); tot_data = (struct tebuf*) malloc(max_cart_class_size*sizeof(struct tebuf)); if (Symmetry.nirreps == 1) { si_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sj_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); } key_arr = (int *)malloc(sizeof(int)*3*max_num_unique_quartets); c1 = 1.0 - 0.5*UserOptions.hf_exch; c2 = 1.0 - 0.25*UserOptions.hf_exch; c3 = -0.5*UserOptions.hf_exch; c4 = -0.25*UserOptions.hf_exch; /*------------------------------------------------- generate all unique shell quartets with ordering suitable for building the PK-matrix -------------------------------------------------*/ quartet_index = 0; for (usii=0; usii 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; fac1 = Symmetry.nirreps/ Symmetry.dcr_deg[Symmetry.GnG[stab_i][stab_j]][Symmetry.GnG[stab_k][stab_l]]; usi_eq_usj = (usi == usj); usi_eq_usk = (usi == usk); usi_eq_usl = (usi == usl); usj_eq_usl = (usj == usl); usk_eq_usj = (usk == usj); usk_eq_usl = (usk == usl); usij_eq_uskl = (INDEX(usi,usj) == INDEX(usk,usl)); usik_eq_usjl = (INDEX(usi,usk) == INDEX(usj,usl)); usil_eq_uskj = (INDEX(usi,usl) == INDEX(usk,usj)); if (!usi_eq_usj) fac1 *= 2.0; if (!usk_eq_usl) fac1 *= 2.0; if (usij_eq_uskl) fac1 *= 0.5; for(dcr_ij=0;dcr_ij -1) { key_arr[count] = new_quartet; count++; } if ( (key1 == key3 && key3 != key2) || (key2 == key3 && key3 != key1) || (key2 != key3 && key1 != key3 && key2 != key1)) { new_quartet = put_entry(&htable,key2,si,sk,sj,sl,0,q4ijkl,0); if (new_quartet > -1) { key_arr[count] = new_quartet; count++; } } if ( (key1 == key2 && key3 != key1) || (key2 != key3 && key1 != key3 && key1 != key2)) { new_quartet = put_entry(&htable,key3,si,sl,sk,sj,0,0,q4ijkl); if (new_quartet > -1) { key_arr[count] = new_quartet; count++; } } } } } } /* petite list is ready to be used */ } else { if(!(total_am%2)|| (BasisSet.shells[si].center!=BasisSet.shells[sjj].center)|| (BasisSet.shells[sjj].center!=BasisSet.shells[skk].center)|| (BasisSet.shells[skk].center!=BasisSet.shells[sll].center)) { si_arr[count] = si; sj_arr[count] = sjj; sk_arr[count] = skk; sl_arr[count] = sll; count++; } } } num_unique_quartets = count; if (count > 3*max_num_unique_quartets) throw std::domain_error("Problem with hashing?"); /*---------------------------------- Compute the nonredundant quartets ----------------------------------*/ for(plquartet=0;plquartet= htable.size || htable_ptr < 0) throw std::domain_error("Problem with hashing?"); htable.table[htable_ptr].key = EMPTY_KEY; si = htable.table[htable_ptr].si; sj = htable.table[htable_ptr].sj; sk = htable.table[htable_ptr].sk; sl = htable.table[htable_ptr].sl; dmax = MAX(BasisSet.shell_pairs[si][sj].Dmax, BasisSet.shell_pairs[sk][sl].Dmax); dmax = MAX(dmax, 0.25*BasisSet.shell_pairs[si][sk].Dmax); dmax = MAX(dmax, 0.25*BasisSet.shell_pairs[si][sl].Dmax); dmax = MAX(dmax, 0.25*BasisSet.shell_pairs[sj][sk].Dmax); dmax = MAX(dmax, 0.25*BasisSet.shell_pairs[sj][sl].Dmax); if (BasisSet.schwartz_eri[si][sj]*BasisSet.schwartz_eri[sk][sl]*dmax < UserOptions.cutoff) continue; fac1 = htable.table[htable_ptr].q4ijkl; fac2 = htable.table[htable_ptr].q4ikjl; fac3 = htable.table[htable_ptr].q4ilkj; if (si == sj && si == sk || sj == sk && sj == sl || si == sj && si == sl || si == sk && si == sl) { fac2 = fac3 = fac1; } else if (si == sk || sj == sl) { fac1 = fac3 = (fac1 + fac3); } else if (sj == sk || si == sl) { fac1 = fac2 = (fac1 + fac2); } else if (si == sj || sk == sl) { fac3 = fac2 = (fac3 + fac2); } } #if DEBUG if (si < 0 || si >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sj < 0 || sj >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sk < 0 || sk >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); if (sl < 0 || sl >= BasisSet.num_shells) throw std::domain_error("Problem with shell indices"); #endif /* place in "ascending" angular mom- my simple way of optimizing PHG recursion (VRR) */ /* these first two are good for the HRR */ if(BasisSet.shells[si].am < BasisSet.shells[sj].am){ dum = si; si = sj; sj = dum; temp = fac2; fac2 = fac3; fac3 = temp; } if(BasisSet.shells[sk].am < BasisSet.shells[sl].am){ dum = sk; sk = sl; sl = dum; temp = fac2; fac2 = fac3; fac3 = temp; } /* this should be /good/ for the VRR */ if(BasisSet.shells[si].am + BasisSet.shells[sj].am > BasisSet.shells[sk].am + BasisSet.shells[sl].am){ dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; } ioffset = BasisSet.shells[si].fao - 1; joffset = BasisSet.shells[sj].fao - 1; koffset = BasisSet.shells[sk].fao - 1; loffset = BasisSet.shells[sl].fao - 1; ni = ioff[BasisSet.shells[si].am]; nj = ioff[BasisSet.shells[sj].am]; nk = ioff[BasisSet.shells[sk].am]; nl = ioff[BasisSet.shells[sl].am]; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; np_k = BasisSet.shells[sk].n_prims; np_l = BasisSet.shells[sl].n_prims; orig_am[0] = BasisSet.shells[si].am-1; orig_am[1] = BasisSet.shells[sj].am-1; orig_am[2] = BasisSet.shells[sk].am-1; orig_am[3] = BasisSet.shells[sl].am-1; am = orig_am[0] + orig_am[1] + orig_am[2] + orig_am[3]; sp_ij = &(BasisSet.shell_pairs[si][sj]); sp_kl = &(BasisSet.shell_pairs[sk][sl]); sp_ik = &(BasisSet.shell_pairs[si][sk]); sp_il = &(BasisSet.shell_pairs[si][sl]); sp_jk = &(BasisSet.shell_pairs[sj][sk]); sp_jl = &(BasisSet.shell_pairs[sj][sl]); Libint.AB[0] = sp_ij->AB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+ Libint.AB[1]*Libint.AB[1]+ Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+ Libint.CD[1]*Libint.CD[1]+ Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*----------------------------------------------------- Compute the quartet and compute its contributions to appropriate blocks of Gsh and Gsh_o -----------------------------------------------------*/ if (am) { data = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint,num_prim_comb); /* zero here means no transformation to puream basis */ /* | */ data = norm_quartet(data, NULL, orig_am, 0); /*--- Here just put non-redundant integrals to tot_data ---*/ num = 0; if(si==sj && sk==sl && si==sk) { iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = ii; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : kk ; for(ll=0; ll <= llmax; ll++){ ijkl = ll+nl*(kk+nk*(jj+nj*ii)); /* if (fabs(data[ijkl])>UserOptions.cutoff) {*/ tot_data[num].i = (short int) ii; tot_data[num].j = (short int) jj; tot_data[num].k = (short int) kk; tot_data[num].l = (short int) ll; tot_data[num].val = data[ijkl]; num++; /* }*/ } } } } } else if(si==sk && sj==sl){ iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = nj - 1; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : nl - 1; for(ll=0; ll <= llmax; ll++){ ijkl = ll+nl*(kk+nk*(jj+nj*ii)); /* if(fabs(data[ijkl])>UserOptions.cutoff){*/ tot_data[num].i = (short int) ii; tot_data[num].j = (short int) jj; tot_data[num].k = (short int) kk; tot_data[num].l = (short int) ll; tot_data[num].val = data[ijkl]; num++; /* }*/ } } } } } else { iimax = ni - 1; kkmax = nk - 1; for(ii=0; ii <= iimax; ii++){ jjmax = (si == sj) ? ii : nj - 1; for(jj=0; jj <= jjmax; jj++){ for(kk=0; kk <= kkmax; kk++){ llmax = (sk == sl) ? kk : nl - 1; for(ll=0; ll <= llmax; ll++){ ijkl = ll+nl*(kk+nk*(jj+nj*ii)); /* if(fabs(data[ijkl])>UserOptions.cutoff){*/ tot_data[num].i = (short int) ii; tot_data[num].j = (short int) jj; tot_data[num].k = (short int) kk; tot_data[num].l = (short int) ll; tot_data[num].val = data[ijkl]; num++; /* }*/ } } } } } } else { temp = 0.0; for(p=0;p UserOptions.cutoff)*/ num = 1; } total_te_count += num; if (UserOptions.reftype == rhf) { for(n=0;ndmat[k][l]*(c1*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c1*ffac1); } else if (ii == kk || jj == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*(c2*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c2*ffac1); G[si][sk][i][k] += sp_jl->dmat[j][l]*(c3*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c3*ffac2); } else if (jj == kk || ii == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*(c2*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c2*ffac1); G[si][sl][i][l] += sp_jk->dmat[j][k]*(c3*ffac3); G[sj][sk][j][k] += sp_il->dmat[i][l]*(c3*ffac3); } else if (ii == jj || kk == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*(ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(ffac1); G[si][sk][i][k] += sp_jl->dmat[j][l]*(c4*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c4*ffac2); } else { G[si][sj][i][j] += sp_kl->dmat[k][l]*(ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(ffac1); G[si][sk][i][k] += sp_jl->dmat[j][l]*(c4*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c4*ffac2); G[si][sl][i][l] += sp_jk->dmat[j][k]*(c4*ffac3); G[sj][sk][j][k] += sp_il->dmat[i][l]*(c4*ffac3); } } } else if (UserOptions.reftype == uhf || UserOptions.reftype == rohf) { for(n=0;ndmat[k][l]*(c1*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c1*ffac1); G_o[si][sj][i][j] -= sp_kl->dmato[k][l]*(c3*ffac1); G_o[sk][sl][k][l] -= sp_ij->dmato[i][j]*(c3*ffac1); } else if (ii == kk || jj == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*(c2*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c2*ffac1); G[si][sk][i][k] += sp_jl->dmat[j][l]*(c3*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c3*ffac2); G_o[si][sj][i][j] -= sp_kl->dmato[k][l]*(c4*ffac1); G_o[sk][sl][k][l] -= sp_ij->dmato[i][j]*(c4*ffac1); G_o[si][sk][i][k] -= sp_jl->dmato[j][l]*(c3*ffac2); G_o[sj][sl][j][l] -= sp_ik->dmato[i][k]*(c3*ffac2); } else if (jj == kk || ii == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*(c2*ffac1); G[sk][sl][k][l] += sp_ij->dmat[i][j]*(c2*ffac1); G[si][sl][i][l] += sp_jk->dmat[j][k]*(c3*ffac3); G[sj][sk][j][k] += sp_il->dmat[i][l]*(c3*ffac3); G_o[si][sj][i][j] -= sp_kl->dmato[k][l]*(c4*ffac1); G_o[sk][sl][k][l] -= sp_ij->dmato[i][j]*(c4*ffac1); G_o[si][sl][i][l] -= sp_jk->dmato[j][k]*(c3*ffac3); G_o[sj][sk][j][k] -= sp_il->dmato[i][l]*(c3*ffac3); } else if (ii == jj || kk == ll) { G[si][sj][i][j] += sp_kl->dmat[k][l]*ffac1; G[sk][sl][k][l] += sp_ij->dmat[i][j]*ffac1; G[si][sk][i][k] += sp_jl->dmat[j][l]*(c4*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c4*ffac2); G_o[si][sk][i][k] -= sp_jl->dmato[j][l]*(c4*ffac2); G_o[sj][sl][j][l] -= sp_ik->dmato[i][k]*(c4*ffac2); } else { G[si][sj][i][j] += sp_kl->dmat[k][l]*ffac1; G[sk][sl][k][l] += sp_ij->dmat[i][j]*ffac1; G[si][sk][i][k] += sp_jl->dmat[j][l]*(c4*ffac2); G[sj][sl][j][l] += sp_ik->dmat[i][k]*(c4*ffac2); G[si][sl][i][l] += sp_jk->dmat[j][k]*(c4*ffac3); G[sj][sk][j][k] += sp_il->dmat[i][l]*(c4*ffac3); G_o[si][sk][i][k] -= sp_jl->dmato[j][l]*(c4*ffac2); G_o[sj][sl][j][l] -= sp_ik->dmato[i][k]*(c4*ffac2); G_o[si][sl][i][l] -= sp_jk->dmato[j][k]*(c4*ffac3); G_o[sj][sk][j][k] -= sp_il->dmato[i][l]*(c4*ffac3); } } } } /* end of computing "petit" list */ } /* end getting unique shell combination */ pthread_mutex_lock(&fock_mutex); { for(si=0;si 1) { free_htable(&htable); } free_libint(&Libint); free(tot_data); if (Symmetry.nirreps == 1) { free(si_arr); free(sj_arr); free(sk_arr); free(sl_arr); } free(key_arr); #ifndef USE_TAYLOR_FM free_fjt_table(&fjt_table); #endif return NULL; } };}; psi3/src/bin/cints/Fock/scf_parsing.cc0000644000101500007650000000236610754663017016367 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"dft_init.h" namespace psi { namespace CINTS { void scf_parsing(void) { int errcod; char *refstring; UserOptions.make_oei = 0; UserOptions.make_eri = 0; UserOptions.make_fock = 1; UserOptions.print_lvl = 0; UserOptions.symm_ints = 0; UserOptions.make_dft = 0; UserOptions.hf_exch = 1.0; errcod = ip_string("REFERENCE",&refstring,0); if (errcod != IPE_OK) throw std::domain_error("REFERENCE keyword is missing"); else if (!strcmp(refstring,"RHF") || !strcmp(refstring,"")) UserOptions.reftype = rhf; else if (!strcmp(refstring,"ROHF")) UserOptions.reftype = rohf; else if (!strcmp(refstring,"UHF")) UserOptions.reftype = uhf; else if (!strcmp(refstring,"RKS")){ UserOptions.reftype = rhf; UserOptions.make_dft = 1; dft_init(); } else if (!strcmp(refstring,"UKS")){ UserOptions.reftype = uhf; UserOptions.make_dft = 1; dft_init(); } else throw std::domain_error("The specified REFERENCE not implemented"); } };}; psi3/src/bin/cints/Fock/scf_parsing.h0000644000101500007650000000030010754663017016213 0ustar crawdad#ifndef _psi_src_bin_cints_Fock_scf_parsing_h #define _psi_src_bin_cints_Fock_scf_parsing_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void scf_parsing(void); }} #endif psi3/src/bin/cints/GIAO_Deriv/0000755000101500007650000000000011146111656014532 5ustar crawdadpsi3/src/bin/cints/GIAO_Deriv/giao_deriv.cc0000644000101500007650000000046410754663017017164 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include "giao_oe_deriv.h" #include "giao_te_deriv.h" #define DO_OEI 1 #define DO_TEI 1 namespace psi { namespace CINTS { void giao_deriv() { #if DO_OEI giao_oe_deriv(); #endif #if DO_TEI giao_te_deriv(); #endif } };}; psi3/src/bin/cints/GIAO_Deriv/giao_deriv.h0000644000101500007650000000030610754663017017021 0ustar crawdad#ifndef _psi_src_bin_cints_GIAO_Deriv_giao_deriv_h #define _psi_src_bin_cints_GIAO_Deriv_giao_deriv_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void giao_deriv(); }} #endif psi3/src/bin/cints/GIAO_Deriv/giao_oe_deriv.cc0000644000101500007650000004766510754663017017665 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"taylor_fm_eval.h" #include"oe_osrr.h" #include"small_fns.h" namespace psi { namespace CINTS { /*!----------------------------------------------------------------------------------------- This function computes some derivatives of integrals over GIAO Gaussians with respect to E and B fields (at E=0, B=0, i.e. in absence of external fields) and writes them out. t d2h/dBdE = -0.5 i d h/dB = 0.5 B d h/dE = - -- simply electric dipole integral, already computed, hence not computed here -----------------------------------------------------------------------------------------*/ void giao_oe_deriv() { #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4+1,UserOptions.cutoff); #endif /*--- allocate room for the one-e matrices ---*/ double** D2HDBXDEX = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBXDEY = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBXDEZ = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBYDEX = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBYDEY = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBYDEZ = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBZDEX = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBZDEY = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** D2HDBZDEZ = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DHDBX = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DHDBY = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DHDBZ = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DSDBX = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DSDBY = block_matrix(BasisSet.num_ao,BasisSet.num_ao); double** DSDBZ = block_matrix(BasisSet.num_ao,BasisSet.num_ao); /*--- allocate storage for shell blocks of one electron integrals ---*/ int dimension = ioff[BasisSet.max_am]; double** d2HdBxdExtemp = block_matrix(dimension,dimension); double** d2HdBxdEytemp = block_matrix(dimension,dimension); double** d2HdBxdEztemp = block_matrix(dimension,dimension); double** d2HdBydExtemp = block_matrix(dimension,dimension); double** d2HdBydEytemp = block_matrix(dimension,dimension); double** d2HdBydEztemp = block_matrix(dimension,dimension); double** d2HdBzdExtemp = block_matrix(dimension,dimension); double** d2HdBzdEytemp = block_matrix(dimension,dimension); double** d2HdBzdEztemp = block_matrix(dimension,dimension); double** dHdBxtemp = block_matrix(dimension,dimension); double** dHdBytemp = block_matrix(dimension,dimension); double** dHdBztemp = block_matrix(dimension,dimension); double** dSdBxtemp = block_matrix(dimension,dimension); double** dSdBytemp = block_matrix(dimension,dimension); double** dSdBztemp = block_matrix(dimension,dimension); /* Note the "+1" on the row dimension -- we are computing kinetic energy integrals with one extra quantum in the bra function here */ double** OIX = block_matrix(BasisSet.max_am+1,BasisSet.max_am+2); double** OIY = block_matrix(BasisSet.max_am+1,BasisSet.max_am+2); double** OIZ = block_matrix(BasisSet.max_am+1,BasisSet.max_am+2); /* same here -- need to compute integrals with extra quantum in the bra */ int indmax_0 = (BasisSet.max_am-1)*BasisSet.max_am*BasisSet.max_am+1; int indmax_p1 = (BasisSet.max_am)*(BasisSet.max_am+1)*(BasisSet.max_am+1)+1; double*** AI0 = init_box(indmax_p1,indmax_0,2*BasisSet.max_am+3); for (int si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; double ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- zero the temporary storage for accumulating contractions ---*/ memset(d2HdBxdExtemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBxdEytemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBxdEztemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBydExtemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBydEytemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBydEztemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBzdExtemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBzdEytemp[0],0,sizeof(double)*dimension*dimension); memset(d2HdBzdEztemp[0],0,sizeof(double)*dimension*dimension); memset(dHdBxtemp[0],0,sizeof(double)*dimension*dimension); memset(dHdBytemp[0],0,sizeof(double)*dimension*dimension); memset(dHdBztemp[0],0,sizeof(double)*dimension*dimension); memset(dSdBxtemp[0],0,sizeof(double)*dimension*dimension); memset(dSdBytemp[0],0,sizeof(double)*dimension*dimension); memset(dSdBztemp[0],0,sizeof(double)*dimension*dimension); /*--- contract by primitives here ---*/ for (int i = 0; i < BasisSet.shells[si].n_prims; i++) { double a1 = sp->a1[i]; double inorm = sp->inorm[i]; for (int j = 0; j < BasisSet.shells[sj].n_prims; j++) { double a2 = sp->a2[j]; double gam = sp->gamma[i][j]; double jnorm = sp->jnorm[j]; struct coordinates PA, PB; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; double oog = 1.0/gam; double over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; OI_OSrecurs(OIX,OIY,OIZ,PA,PB,gam,am_i+1,am_j+2); /*--- create all am components of si ---*/ int ai = 0; for(int ii = 0; ii <= am_i; ii++){ int l1 = am_i - ii; for(int jj = 0; jj <= ii; jj++){ int m1 = ii - jj; int n1 = jj; /*--- create all am components of sj ---*/ int aj = 0; for(int kk = 0; kk <= am_j; kk++){ int l2 = am_j - kk; for(int ll = 0; ll <= kk; ll++){ int m2 = kk - ll; int n2 = ll; double x00 = OIX[l1][l2]; double y00 = OIY[m1][m2]; double z00 = OIZ[n1][n2]; double x01 = OIX[l1][l2+1]; double y01 = OIY[m1][m2+1]; double z01 = OIZ[n1][n2+1]; double x10 = OIX[l1+1][l2]; double y10 = OIY[m1+1][m2]; double z10 = OIZ[n1+1][n2]; double x11 = OIX[l1+1][l2+1]; double y11 = OIY[m1+1][m2+1]; double z11 = OIZ[n1+1][n2+1]; double x0 = x00; double y0 = y00; double z0 = z00; double x1 = x01 + x00*B.x; double y1 = y01 + y00*B.y; double z1 = z01 + z00*B.z; double x2 = x11 + x10*B.x + x01*A.x + x00*A.x*B.x; double y2 = y11 + y10*B.y + y01*A.y + y00*A.y*B.y; double z2 = z11 + z10*B.z + z01*A.z + z00*A.z*B.z; double dSdB_pfac = 0.5*over_pf; double x = x1*y0*z0; double y = x0*y1*z0; double z = x0*y0*z1; dSdBxtemp[ai][aj] += dSdB_pfac * (AB.y * z - AB.z * y); dSdBytemp[ai][aj] += dSdB_pfac * (AB.z * x - AB.x * z); dSdBztemp[ai][aj] += dSdB_pfac * (AB.x * y - AB.y * x); /* dSdBxtemp[ai][aj] += 2.0*dSdB_pfac * x; dSdBytemp[ai][aj] += 2.0*dSdB_pfac * y; dSdBztemp[ai][aj] += 2.0*dSdB_pfac * z;*/ double d2BE_pfac = -0.5*over_pf; double qxx = x2*y0*z0; double qxy = x1*y1*z0; double qxz = x1*y0*z1; double qyx = qxy; double qyy = x0*y2*z0; double qyz = x0*y1*z1; double qzx = qxz; double qzy = qyz; double qzz = x0*y0*z2; d2HdBxdExtemp[ai][aj] += d2BE_pfac * ( AB.y * qzx - AB.z * qyx); d2HdBxdEytemp[ai][aj] += d2BE_pfac * ( AB.y * qzy - AB.z * qyy); d2HdBxdEztemp[ai][aj] += d2BE_pfac * ( AB.y * qzz - AB.z * qyz); d2HdBydExtemp[ai][aj] += d2BE_pfac * ( AB.z * qxx - AB.x * qzx); d2HdBydEytemp[ai][aj] += d2BE_pfac * ( AB.z * qxy - AB.x * qzy); d2HdBydEztemp[ai][aj] += d2BE_pfac * ( AB.z * qxz - AB.x * qzz); d2HdBzdExtemp[ai][aj] += d2BE_pfac * ( AB.x * qyx - AB.y * qxx); d2HdBzdEytemp[ai][aj] += d2BE_pfac * ( AB.x * qyy - AB.y * qxy); d2HdBzdEztemp[ai][aj] += d2BE_pfac * ( AB.x * qyz - AB.y * qxz); double nx = -2.0*a2*x01; if (l2 >= 1) nx += l2*OIX[l1][l2-1]; double ny = -2.0*a2*y01; if (m2 >= 1) ny += m2*OIY[m1][m2-1]; double nz = -2.0*a2*z01; if (n2 >= 1) nz += n2*OIZ[n1][n2-1]; double dB_pfac = -0.5*over_pf; dHdBxtemp[ai][aj] += dB_pfac * x00 * ( y01 * nz - z01 * ny); dHdBytemp[ai][aj] += dB_pfac * y00 * ( z01 * nx - x01 * nz); dHdBztemp[ai][aj] += dB_pfac * z00 * ( x01 * ny - y01 * nx); double tx00 = a2*(2*l2+1)*OIX[l1][l2] - 2*a2*a2*OIX[l1][l2+2]; if (l2 >= 2) tx00 -= 0.5*l2*(l2-1)*OIX[l1][l2-2]; double ty00 = a2*(2*m2+1)*OIY[m1][m2] - 2*a2*a2*OIY[m1][m2+2]; if (m2 >= 2) ty00 -= 0.5*m2*(m2-1)*OIY[m1][m2-2]; double tz00 = a2*(2*n2+1)*OIZ[n1][n2] - 2*a2*a2*OIZ[n1][n2+2]; if (n2 >= 2) tz00 -= 0.5*n2*(n2-1)*OIZ[n1][n2-2]; double tx10 = a2*(2*l2+1)*(OIX[l1+1][l2] + A.x*OIX[l1][l2]) - 2*a2*a2*(OIX[l1+1][l2+2] + A.x*OIX[l1][l2+2]); if (l2 >= 2) tx10 -= 0.5*l2*(l2-1)*(OIX[l1+1][l2-2] + A.x*OIX[l1][l2-2]); double ty10 = a2*(2*m2+1)*(OIY[m1+1][m2] + A.y*OIY[m1][m2]) - 2*a2*a2*(OIY[m1+1][m2+2] + A.y*OIY[m1][m2+2]); if (m2 >= 2) ty10 -= 0.5*m2*(m2-1)*(OIY[m1+1][m2-2] + A.y*OIY[m1][m2-2]); double tz10 = a2*(2*n2+1)*(OIZ[n1+1][n2] + A.z*OIZ[n1][n2]) - 2*a2*a2*(OIZ[n1+1][n2+2] + A.z*OIZ[n1][n2+2]); if (n2 >= 2) tz10 -= 0.5*n2*(n2-1)*(OIZ[n1+1][n2-2] + A.z*OIZ[n1][n2-2]); double xT = tx10*y0*z0 + x1*ty00*z0 + x1*y0*tz00; double yT = tx00*y1*z0 + x0*ty10*z0 + x0*y1*tz00; double zT = tx00*y0*z1 + x0*ty00*z1 + x0*y0*tz10; dB_pfac = 0.5*over_pf; dHdBxtemp[ai][aj] += dB_pfac * ( AB.y * zT - AB.z * yT); dHdBytemp[ai][aj] += dB_pfac * ( AB.z * xT - AB.x * zT); dHdBztemp[ai][aj] += dB_pfac * ( AB.x * yT - AB.y * xT); /* dHdBxtemp[ai][aj] += 2.0*dB_pfac * (tx00*y0*z0 + x0*ty00*z0+x0*y0*tz00); dHdBztemp[ai][aj] += 2.0*dB_pfac * (tx00*y0*z0 + x0*ty00*z0+x0*y0*tz00);*/ /*double T = tx00*y0*z0 + x0*ty00*z0 + x0*y0*tz00; dHdBytemp[ai][aj] += 2.0*dB_pfac*T;*/ aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ for(int atom=0;atomP[i][j][0] - Molecule.centers[atom].x; PC.y = sp->P[i][j][1] - Molecule.centers[atom].y; PC.z = sp->P[i][j][2] - Molecule.centers[atom].z; AI_OSrecurs(AI0,PA,PB,PC,gam,am_i+1,am_j); double dB_pfac = 0.5 * over_pf * (-Molecule.centers[atom].Z_nuc); int ai = 0; for(int ii = 0; ii <= am_i; ii++){ int l1 = am_i - ii; for(int jj = 0; jj <= ii; jj++){ int m1 = ii - jj; int n1 = jj ; int iind_000 = n1*izm + m1*iym + l1*ixm; int iind_100 = n1*izm + m1*iym + (l1+1)*ixm; int iind_010 = n1*izm + (m1+1)*iym + l1*ixm; int iind_001 = (n1+1)*izm + m1*iym + l1*ixm; /*--- create all am components of sj ---*/ int aj = 0; for(int kk = 0; kk <= am_j; kk++){ int l2 = am_j - kk; for(int ll = 0; ll <= kk; ll++){ int m2 = kk - ll; int n2 = ll ; int jind = n2*jzm + m2*jym + l2*jxm; double V = AI0[iind_000][jind][0]; double xV = AI0[iind_100][jind][0] + A.x * V; double yV = AI0[iind_010][jind][0] + A.y * V; double zV = AI0[iind_001][jind][0] + A.z * V; dHdBxtemp[ai][aj] += dB_pfac * ( AB.y * zV - AB.z * yV); dHdBytemp[ai][aj] += dB_pfac * ( AB.z * xV - AB.x * zV); dHdBztemp[ai][aj] += dB_pfac * ( AB.x * yV - AB.y * xV); /* dHdBxtemp[ai][aj] += dB_pfac * xV; dHdBytemp[ai][aj] += dB_pfac * yV; dHdBztemp[ai][aj] += dB_pfac * zV;*/ aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } } /*--- end primitive contraction ---*/ /*--- Normalize the contracted integrals ---*/ double* ptr1 = GTOs.bf_norm[am_i]; double* ptr2 = GTOs.bf_norm[am_j]; for(int i=0; i= PRINT_OEI) { fprintf(outfile," -dS/dB_x AO integrals:\n\n"); print_mat(DSDBX,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -dS/dB_y AO integrals:\n\n"); print_mat(DSDBY,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -dS/dB_z AO integrals:\n\n"); print_mat(DSDBZ,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -dh/dB_x AO integrals:\n\n"); print_mat(DHDBX,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -dh/dB_y AO integrals:\n\n"); print_mat(DHDBY,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -dh/dB_z AO integrals:\n\n"); print_mat(DHDBZ,BasisSet.num_ao,BasisSet.num_ao,outfile); /* fprintf(outfile," -d2h/dB_x dE_x AO integrals:\n\n"); print_mat(D2HDBXDEX,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_x dE_y AO integrals:\n\n"); print_mat(D2HDBXDEY,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_x dE_z AO integrals:\n\n"); print_mat(D2HDBXDEZ,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_y dE_x AO integrals:\n\n"); print_mat(D2HDBYDEX,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_y dE_y AO integrals:\n\n"); print_mat(D2HDBYDEY,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_y dE_z AO integrals:\n\n"); print_mat(D2HDBYDEZ,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_z dE_x AO integrals:\n\n"); print_mat(D2HDBZDEX,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_z dE_y AO integrals:\n\n"); print_mat(D2HDBZDEY,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile," -d2h/dB_z dE_z AO integrals:\n\n"); print_mat(D2HDBZDEZ,BasisSet.num_ao,BasisSet.num_ao,outfile);*/ fprintf(outfile,"\n"); } free_block(d2HdBxdExtemp); free_block(d2HdBxdEytemp); free_block(d2HdBxdEztemp); free_block(d2HdBydExtemp); free_block(d2HdBydEytemp); free_block(d2HdBydEztemp); free_block(d2HdBzdExtemp); free_block(d2HdBzdEytemp); free_block(d2HdBzdEztemp); free_block(dHdBxtemp); free_block(dHdBytemp); free_block(dHdBztemp); free_block(dSdBxtemp); free_block(dSdBytemp); free_block(dSdBztemp); free_block(D2HDBXDEX); free_block(D2HDBXDEY); free_block(D2HDBXDEZ); free_block(D2HDBYDEX); free_block(D2HDBYDEY); free_block(D2HDBYDEZ); free_block(D2HDBZDEX); free_block(D2HDBZDEY); free_block(D2HDBZDEZ); free_block(DHDBX); free_block(DHDBY); free_block(DHDBZ); free_block(DSDBX); free_block(DSDBY); free_block(DSDBZ); #ifdef USE_TAYLOR_FM free_Taylor_Fm_Eval(); #endif return; } };}; psi3/src/bin/cints/GIAO_Deriv/giao_oe_deriv.h0000644000101500007650000000032410754663017017504 0ustar crawdad#ifndef _psi_src_bin_cints_GIAO_Deriv_giao_oe_deriv_h #define _psi_src_bin_cints_GIAO_Deriv_giao_oe_deriv_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void giao_oe_deriv(void); }} #endif psi3/src/bin/cints/GIAO_Deriv/giao_te_deriv.cc0000644000101500007650000003733110757640026017655 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "moinfo.h" #include "compute_scf_opdm.h" #include "norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include "iwl_tebuf.h" #include "symmetrize.h" #include "small_fns.h" #include "compute_eri.h" namespace psi { namespace CINTS { static inline int hash(int L, int M, int N); void giao_te_deriv(void) { /*--- Various data structures ---*/ Libint_t Libint; /* Integrals library object */ struct iwlbuf G, DGDBX, DGDBY, DGDBZ; // IWL buffers /*--------------- Initialization ---------------*/ // NOTE: we are computing GIAO derivative integrals via ERIs in which one of functions // has angular momentum incremented by 1 #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4+1,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4+1); // init_fjt_table(&fjt_table); #endif init_libint_base(); int max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); init_libint(&Libint,BasisSet.max_am,max_num_prim_comb); iwl_buf_init(&G, 47, 0.0, 0, 0); iwl_buf_init(&DGDBX, IOUnits.itapdgdB[0], 0.0, 0, 0); iwl_buf_init(&DGDBY, IOUnits.itapdgdB[1], 0.0, 0, 0); iwl_buf_init(&DGDBZ, IOUnits.itapdgdB[2], 0.0, 0, 0); int max_cart_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; double* abcd_buf = new double[max_cart_size]; double* dgdBx_buf = new double[max_cart_size]; double* dgdBy_buf = new double[max_cart_size]; double* dgdBz_buf = new double[max_cart_size]; struct tebuf* g_tebuf = new struct tebuf[max_cart_size]; struct tebuf* dgdBx_tebuf = new struct tebuf[max_cart_size]; struct tebuf* dgdBy_tebuf = new struct tebuf[max_cart_size]; struct tebuf* dgdBz_tebuf = new struct tebuf[max_cart_size]; int max_cart_size_1000 = ioff[BasisSet.max_am+1]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; double* ap1bcd_buf = new double[max_cart_size_1000]; double* abcp1d_buf = new double[max_cart_size_1000]; const double dgdB_pfac = 0.5; for (int sii=0; siiAB[0]; AB.y = sp_ij->AB[1]; AB.z = sp_ij->AB[2]; CD.x = sp_kl->AB[0]; CD.y = sp_kl->AB[1]; CD.z = sp_kl->AB[2]; A = Molecule.centers[center[0]]; C = Molecule.centers[center[2]]; ABxA_plus_CDxC.x = (AB.y*A.z - AB.z*A.y) + (CD.y*C.z - CD.z*C.y); ABxA_plus_CDxC.y = (AB.z*A.x - AB.x*A.z) + (CD.z*C.x - CD.x*C.z); ABxA_plus_CDxC.z = (AB.x*A.y - AB.y*A.x) + (CD.x*C.y - CD.y*C.x); // // first compute (ab|cd) integrals // int inc[4] = {0,0,0,0}; int num_ints = compute_eri(abcd_buf, &Libint, si, sj, sk, sl, inc[0], inc[1], inc[2], inc[3], false); // These are angular momenta of Gaussians over which we compute first quartet of ERIs int gam[4]; for(int i=0; i<4; i++) gam[i] = am[i] + inc[i]; int nao[4]; nao[0] = ioff[gam[0]+1]; nao[1] = ioff[gam[1]+1]; nao[2] = ioff[gam[2]+1]; nao[3] = ioff[gam[3]+1]; int quartet_size = nao[0]*nao[1]*nao[2]*nao[3]; if (num_ints) for(int i=0; i= PRINT_DEBUG) { int ijkl = 0; for(int i=0; i UserOptions.cutoff) { fprintf(stdout, "%5d%5d%5d%5d%20.10lf\n", ii, jj, kk, ll, abcd_buf[ijkl]); } /* if (fabs(dgdBx_buf[ijkl]) > UserOptions.cutoff) { fprintf(stdout, "%5d%5d%5d%5d%20.10lf\n", ii, jj, kk, ll, dgdBx_buf[ijkl]); } if (fabs(dgdBy_buf[ijkl]) > UserOptions.cutoff) { fprintf(stdout, "%5d%5d%5d%5d%20.10lf\n", ii, jj, kk, ll, dgdBy_buf[ijkl]); } if (fabs(dgdBz_buf[ijkl]) > UserOptions.cutoff) { fprintf(stdout, "%5d%5d%5d%5d%20.10lf\n", ii, jj, kk, ll, dgdBz_buf[ijkl]); }*/ } } } } } // Write integrals out int fao[4]; fao[0] = BasisSet.shells[si].fao - 1; fao[1] = BasisSet.shells[sj].fao - 1; fao[2] = BasisSet.shells[sk].fao - 1; fao[3] = BasisSet.shells[sl].fao - 1; int ijkl = 0; for(int i=0; i /*--- Mandatory: Input and Output files, PSI file prefix ---*/ EXTERN FILE *infile; EXTERN FILE *outfile; EXTERN char *psi_file_prefix; #endif psi3/src/bin/cints/gprgid.cc0000644000101500007650000000023111112564564014444 0ustar crawdad/*! \file \ingroup CINTS \brief program id */ extern "C" { const char *gprgid() { const char *prgid = "cints"; return(prgid); } } psi3/src/bin/cints/init_globals.cc0000644000101500007650000000267410757640026015655 0ustar crawdad/*! \file \ingroup CINTS \brief Initialise global variables. */ #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { //! Initialize global variables. void init_globals() { IOUnits.itap30 = 30; IOUnits.itap33 = PSIF_SO_TEI; IOUnits.itapDSCF = PSIF_DSCF; IOUnits.itapG = PSIF_AO_TPDM; IOUnits.itapD1ERI_SO = PSIF_SO_D1ERI; IOUnits.itapR12 = PSIF_SO_R12; IOUnits.itapT1 = PSIF_SO_R12T1; IOUnits.itapERI_MO = PSIF_MO_TEI; IOUnits.itapR12_MO = PSIF_MO_R12; IOUnits.itapR12T2_MO = PSIF_MO_R12T2; IOUnits.itapD = PSIF_AO_OPDM; IOUnits.itapS = PSIF_OEI; IOUnits.itapT = PSIF_OEI; IOUnits.itapV = PSIF_OEI; IOUnits.itapS_AO = PSIF_OEI; IOUnits.itapMX_AO = PSIF_OEI; IOUnits.itapMY_AO = PSIF_OEI; IOUnits.itapMZ_AO = PSIF_OEI; IOUnits.itapQXX_AO = PSIF_OEI; IOUnits.itapQXY_AO = PSIF_OEI; IOUnits.itapQXZ_AO = PSIF_OEI; IOUnits.itapQYY_AO = PSIF_OEI; IOUnits.itapQYZ_AO = PSIF_OEI; IOUnits.itapQZZ_AO = PSIF_OEI; IOUnits.itapNablaX_AO = PSIF_OEI; IOUnits.itapNablaY_AO = PSIF_OEI; IOUnits.itapNablaZ_AO = PSIF_OEI; IOUnits.itapOEInt_Misc = PSIF_OEI; IOUnits.itapdgdB[0] = PSIF_AO_DGDBX; IOUnits.itapdgdB[1] = PSIF_AO_DGDBY; IOUnits.itapdgdB[2] = PSIF_AO_DGDBZ; return; } };}; psi3/src/bin/cints/main.cc0000644000101500007650000000723510754663017014133 0ustar crawdad/*! \defgroup CINTS cints: The Integral Computation Suite */ /*! \file \ingroup CINTS \brief Integral Computation Module */ #include #include #include #include #include #include #include #include #include #include"defines.h" #include"global.h" #include #include #include"small_fns.h" #include"parsing.h" #include"prints.h" #include"molecule.h" #include"basisset.h" #include"symm.h" #include"dcr.h" #include"gto.h" #ifdef INCLUDE_Default_Ints #include"oe_ints.h" #include"te_ints.h" #endif #ifdef INCLUDE_Fock #include"fock.h" #endif #ifdef INCLUDE_Default_Deriv1 #include"deriv1.h" #endif #ifdef INCLUDE_Default_Deriv2 void deriv1_fock(void); #include"deriv2.h" #endif #ifdef INCLUDE_OEProp_Ints #include"oeprop_ints.h" #endif #ifdef INCLUDE_MP2 #include"mp2.h" #endif #ifdef INCLUDE_MkPT2 #include"mkpt2.h" #endif #ifdef INCLUDE_R12_Ints #include"r12_te_ints.h" #endif #ifdef INCLUDE_MP2R12 #include"mp2r12.h" #endif #ifdef INCLUDE_CC #include"cc.h" #endif #ifdef INCLUDE_GIAO_Deriv #include"giao_deriv.h" #endif #include namespace psi { namespace CINTS { /*------------------------------- External functions declaration -------------------------------*/ void init_globals(); void check_max_am(); } } char *gprgid(); using namespace psi::CINTS; //! CINTS main procedure. int main(int argc, char *argv[]) { try { /*--- Local variables ---*/ int i,j,k,l,m,count; init_globals(); start_io(argc, argv); parsing(); /*--- Parse the command line ---*/ parsing_cmdline(argc,argv); print_intro(); setup(); /*--- Prepare data ---*/ init_molecule(); init_symmetry(); init_basisset(); check_max_am(); init_dcr(); init_gto(); /* If need to compute derivatives over SO -- compute SALC data */ if (UserOptions.make_deriv1 && UserOptions.symm_ints) init_cdsalc(); /*--- Print out some stuff ---*/ print_scalars(); print_basisset(); /*--- Compute the integrals ---*/ #ifdef INCLUDE_Default_Ints if (UserOptions.make_oei) { /* Molecule.Enuc = */ compute_enuc(); chkpt_wt_enuc(Molecule.Enuc); oe_ints(); } if (UserOptions.make_eri) te_ints(); #endif #ifdef INCLUDE_Fock if (UserOptions.make_fock) fock(); #endif /*--- Compute the derivative integrals ---*/ #ifdef INCLUDE_Default_Deriv1 if (UserOptions.make_deriv1) deriv1(); #endif /*--- Compute second derivative integrals ---*/ #ifdef INCLUDE_Default_Deriv2 if (UserOptions.make_deriv2) deriv2(); #endif #ifdef INCLUDE_OEProp_Ints if (UserOptions.make_oeprop) oeprop_ints(); #endif #ifdef INCLUDE_MP2 if (UserOptions.make_mp2) mp2(); #endif #ifdef INCLUDE_MkPT2 if (UserOptions.make_mkpt2_ints) run_mkpt2(); #endif #ifdef INCLUDE_R12_Ints if (UserOptions.make_r12ints) r12_te_ints(); #endif #ifdef INCLUDE_MP2R12 if (UserOptions.make_mp2r12) mp2r12(); #endif #ifdef INCLUDE_CC if (UserOptions.make_cc_bt2) direct_cc(); #endif #ifdef INCLUDE_GIAO_Deriv if (UserOptions.make_giao_deriv) giao_deriv(); #endif /*--- Cleanup ---*/ if (UserOptions.make_deriv1 && UserOptions.symm_ints) cleanup_cdsalc(); cleanup_gto(); cleanup_symmetry(); cleanup_basisset(); cleanup_molecule(); stop_io(); } catch (std::exception e) { std::cerr << e.what() << std::endl; std::cerr << "cints failed due to errors\n"; punt(const_cast(e.what())); } exit(PSI_RETURN_SUCCESS); } psi3/src/bin/cints/Makefile.in0000644000101500007650000000746511122542756014746 0ustar crawdad# # CINTS Makefile # # Edward Valeev, Eve-of-the-Fake-New-Millenium # # Edit this list of subdirectories whose content # to be included in CINTS to suit your needs. Valid subdirs are: # 1. Default_Ints # 2. OEProp_Ints # 3. Fock # 4. MP2 # 5. Default_Deriv1 # 6. Default_Deriv2 # 7. MP2R12 # 8. R12_Ints (8/30/03 EFV - doesn't work anymore, transqt needs to be fixed) # 9. CC # 10. GIAO_Deriv # 11. MkPT2 # SUBDIRS = Default_Ints OEProp_Ints Fock MP2 Default_Deriv1 Default_Deriv2 CC \ MP2R12 GIAO_Deriv MkPT2 # # Some subdirectories are not completely independent - need to perform # additional "dependency" checks: # 1. if R12_Ints included - make sure MP2R12 is included also. # 2. if Fock (DFT) is included - include DFT (Fock) as well. # ifeq ($(findstring R12_Ints,$(SUBDIRS)),R12_Ints) ifeq ($(findstring MP2R12,$(SUBDIRS)),) SUBDIRS += MP2R12 endif endif ifeq ($(findstring Fock,$(SUBDIRS)),Fock) ifeq ($(findstring DFT,$(SUBDIRS)),) SUBDIRS += DFT endif else ifeq ($(findstring DFT,$(SUBDIRS)),DFT) SUBDIRS += Fock endif endif ifeq ($(findstring Default_Deriv2,$(SUBDIRS)),Default_Deriv2) ifeq ($(findstring Default_Deriv1,$(SUBDIRS)),) SUBDIRS += Default_Deriv1 endif endif # # Most subdirectories include code that requires some "integrals" # library, like the notorious libint, which is always included. # Here we test SUBDIRS for presence of such # and form the list of the libraries. Remember that libderiv and libr12 # depend on libint, and hence need to come first for GNU ld to work. # INTLIBS := -lPSI_int ifeq ($(findstring MP2R12,$(SUBDIRS)),MP2R12) ifneq ($(findstring -lPSI_r12,$(INTLIBS)),-lPSI_r12) INTLIBS := -lPSI_r12 $(INTLIBS) endif endif ifeq ($(findstring R12_Ints,$(SUBDIRS)),R12_Ints) ifneq ($(findstring -lPSI_r12,$(INTLIBS)),-lPSI_r12) INTLIBS := -lPSI_r12 $(INTLIBS) endif endif ifeq ($(findstring Default_Deriv1,$(SUBDIRS)),Default_Deriv1) ifneq ($(findstring -lPSI_deriv,$(INTLIBS)),-lPSI_deriv) INTLIBS := -lPSI_deriv $(INTLIBS) endif endif ifeq ($(findstring Default_Deriv2,$(SUBDIRS)),Default_Deriv2) ifneq ($(findstring -lderiv,$(INTLIBS)),-lPSI_deriv) INTLIBS := -lPSI_deriv $(INTLIBS) endif endif # # These preprocessor defines will tell main.c and parsing.c what # sections of code to include # OPTIONS = $(SUBDIRS:%=-DINCLUDE_%) # # Tools will always be included # DIRS = Tools $(SUBDIRS) srcdir = @srcdir@ VPATH = @srcdir@ VPATH += $(DIRS:%=$(srcdir)/%) include ../MakeVars CFLAGS = $(CDBG) $(COPT) $(CDEF) $(COTH) $(CINC) CINC += -I$(srcdir) $(DIRS:%=-I$(srcdir)/%) CDEF += $(OPTIONS) CXXFLAGS = $(CXXDBG) $(CXXOPT) $(CXXDEF) $(CXXOTH) $(CXXINC) CXXINC += -I$(srcdir) $(DIRS:%=-I$(srcdir)/%) CXXDEF += $(OPTIONS) LDLIBS += $(BLAS) -lpthread PSILIBS = -lPSI_qt -lPSI_chkpt $(INTLIBS) -lPSI_iwl \ -lPSI_psio -lPSI_ciomr -lPSI_ipv1 ifeq ($(findstring CC,$(SUBDIRS)),CC) ifneq ($(findstring -lPSI_dpd,$(PSILIBS)),-lPSI_dpd) PSILIBS := -lPSI_dpd $(PSILIBS) endif endif CXXSRC = $(DIRS:%=%/*.cc) *.cc TRUECXXSRC = $(notdir $(shell echo `ls $(CXXSRC:%=$(srcdir)/%)`)) BINOBJ = $(TRUECXXSRC:%.cc=%.o) include ../MakeRules # DEC/Compaq Alpha systems apparently require this for threaded code ifneq (,$(findstring osf, $(target))) COPT += -pthread CXXOPT += -pthread LDFLAGS += -pthread endif install:: install_html install_man:: cints.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 install_html:: install_index install_htmlsrc install_index:: cints.html $(MKDIRS) $(DESTDIR)$(htmldir) $(INSTALL_INCLUDE) $^ $(DESTDIR)$(htmldir) HTMLSRC = $(shell echo `ls $(srcdir)/Documentation/*.html`) install_htmlsrc: $(HTMLSRC) $(MKDIRS) $(DESTDIR)$(htmldir)/CINTS $(INSTALL_INCLUDE) $(HTMLSRC) $(DESTDIR)$(htmldir)/CINTS ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif psi3/src/bin/cints/MkPT2/0000755000101500007650000000000011146111655013556 5ustar crawdadpsi3/src/bin/cints/MkPT2/mkpt2.cc0000644000101500007650000001314510754663017015136 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moinfo.h" #include"moinfo_corr.h" #include"mkpt2_ints.h" namespace psi { namespace CINTS { void run_mkpt2() { using namespace psi::CINTS::mkpt2; init_moinfo(); int nfocc = 0; int nfvir = 0; int ndocc = 0; int nactv = 0; /* Normally this would be in moinfo_corr, but it needs tweeking based on the active space */ /* This is all ripped from PSIMRCC's moinfo, eventually it should directly use a moinfo object */ ip_cwk_add(":MRCC"); int *focc = new int[Symmetry.nirreps]; int *docc = new int[Symmetry.nirreps]; int *actv = new int[Symmetry.nirreps]; int *fvir = new int[Symmetry.nirreps]; for(int i=0; i #include #include #include #include #include #include #include #include #include #include #include"defines.h" #include"psifiles.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"quartet_data.h" #include"norm_quartet.h" #include "data_structs.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include"quartet_permutations.h" #include"mkpt2_ints.h" namespace psi { namespace CINTS { namespace mkpt2 { /*------------------------------- Explicit function declarations -------------------------------*/ extern void *mkpt2_ints_thread(void *); /*-------------------------------- Varixbles common to all threads --------------------------------*/ pthread_mutex_t mkpt2_energy_mutex; pthread_mutex_t *mkpt2_sindex_mutex; pthread_cond_t mkpt2_energy_cond; MkPT2_Status_t MkPT2_Status; double *jsix_buf; double *jyix_buf; double *asij_buf; double *abij_buf; unsigned long int n_ij; unsigned long int n_xy; unsigned long int n_ab; #if MkPT2_USE_IWL iwlbuf ERIOUT; #else double * xy_buf; #endif void mkpt2_ints() { pthread_attr_t thread_attr; pthread_t *thread_id; /*--- Various data structures ---*/ Libint_t Libint; long int libint_memory; int max_bf_per_shell; int max_num_prim_comb; int i; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_length; int imin, imax, jmin; int mo_i, mo_j, mo_a, mo_b, mo_ij; int rs_offset, rsi_offset, rsp_offset; double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *rspq_ptr; double temp; double *mo_vec; double *rsiq_buf; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row; double **ix_buf; /* buffer for one |ix) ket */ double *i_row; double *jsi_row; double *jbi_row; double ixjy, iyjx, pfac; double temp1,temp2,*iq_row,*ip_row; int rs,qrs; /*--------------- Initixlization ---------------*/ #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4); #endif init_libint_base(); timer_init(); timer_on("Schwartz"); schwartz_eri(); timer_off("Schwartz"); MkPT2_Status.num_arrived = 0; /*------------------------- Allocate data structures -------------------------*/ n_ij = MOInfo.ndocc*(MOInfo.ndocc+1)/2; n_ab = MOInfo.nuocc*(MOInfo.nuocc+1)/2; n_xy = MOInfo.num_mo*(MOInfo.num_mo+1)/2; max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libint_memory = libint_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libint_memory*UserOptions.num_threads; /*--- Minimum number of I-batches - take sizes of rsiq_buf, rsix_buf, jsix_buf, jyix_buf ,abij_buf, asij_buf, rsij_buf, xy_buf into account ---*/ fprintf(outfile,"\n Computing MkPT2 integrals\n"); num_i_per_ibatch = UserOptions.memory / (UserOptions.num_threads* ( BasisSet.num_ao*max_bf_per_shell*max_bf_per_shell + /*rsiq*/ MOInfo.num_mo*max_bf_per_shell*max_bf_per_shell + /*rsix*/ MOInfo.ndocc*max_bf_per_shell*max_bf_per_shell /*rsij*/ ) + MOInfo.num_mo*MOInfo.ndocc*BasisSet.num_ao + /*jsix*/ MOInfo.nuocc*MOInfo.ndocc*BasisSet.num_ao + /*asij*/ n_ab*MOInfo.ndocc + /*abij*/ MOInfo.num_mo*MOInfo.ndocc*MOInfo.num_mo /*jyix*/ #if !MkPT2_USE_IWL + MOInfo.num_mo*MOInfo.num_mo /*xy_buf*/ #endif ); if (num_i_per_ibatch > MOInfo.ndocc) num_i_per_ibatch = MOInfo.ndocc; if (num_i_per_ibatch < 1) throw std::domain_error("Not enough memory for direct MkPT2 integrals"); num_ibatch = (MOInfo.ndocc + num_i_per_ibatch - 1) / num_i_per_ibatch; /*--- Recompute number of MOs per I-batch ---*/ num_i_per_ibatch = (MOInfo.ndocc + num_ibatch - 1) / num_ibatch; MkPT2_Status.num_ibatch = num_ibatch; MkPT2_Status.num_i_per_ibatch = num_i_per_ibatch; jsix_buf = init_array(MOInfo.ndocc*BasisSet.num_ao* num_i_per_ibatch*MOInfo.num_mo); jyix_buf = init_array(MOInfo.ndocc*MOInfo.num_mo* num_i_per_ibatch*MOInfo.num_mo); asij_buf = init_array(MOInfo.nuocc*BasisSet.num_ao*num_i_per_ibatch*MOInfo.ndocc); abij_buf = init_array(n_ab* num_i_per_ibatch*MOInfo.ndocc); #if MkPT2_USE_IWL iwl_buf_init(&ERIOUT,PSIF_MO_TEI,UserOptions.cutoff,0,0); #else xy_buf = init_array(MOInfo.num_mo*MOInfo.num_mo); #endif fprintf(outfile," Using %d %s\n\n",num_ibatch, (num_ibatch == 1) ? "pass" : "passes"); /*-------------------------- Start compute threads now --------------------------*/ thread_id = (pthread_t *) malloc(UserOptions.num_threads*sizeof(pthread_t)); pthread_attr_init(&thread_attr); pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM); pthread_mutex_init(&mkpt2_energy_mutex,NULL); pthread_cond_init(&mkpt2_energy_cond,NULL); #if LOCK_RS_SHELL mkpt2_sindex_mutex = (pthread_mutex_t *) malloc(ioff[BasisSet.num_shells]*sizeof(pthread_mutex_t)); for(i=0;i #include #include #include #include #include #include #include #include #include #include #include"defines.h" #include "psifiles.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include"quartet_permutations.h" #include"mkpt2_ints.h" #include "iwl_tebuf.h" #define SWAP1 1 namespace psi { namespace CINTS { namespace mkpt2 { void *mkpt2_ints_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; const double m_sqrt1_2 = 1/sqrt(2.0); extern MkPT2_Status_t MkPT2_Status; extern unsigned long int n_ij; extern unsigned long int n_xy; extern unsigned long int n_ab; extern pthread_mutex_t mkpt2_energy_mutex; extern pthread_mutex_t *mkpt2_sindex_mutex; extern pthread_cond_t mkpt2_energy_cond; extern double *jsix_buf; extern double *jyix_buf; extern double *asij_buf; extern double *abij_buf; /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libint_t Libint; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif int ij, kl, ik, jl, ijkl; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int i, m, p, q, r, s; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl ; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl; int max_pj, max_pl; int *sj_arr, *sk_arr, *sl_arr; int sr_fao, ss_fao, sp_fao, sq_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_prim_comb; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_length; int imin, imax; int max_bf_per_shell; int mo_a, mo_b, mo_i, mo_j, mo_x, mo_y, mo_ij; int ix; int rs_offset, rsi_offset, rsp_offset; char ixjy_key_string[80]; char ijab_key_string[80]; #if MkPT2_USE_IWL extern struct iwlbuf ERIOUT; #else extern double * xy_buf; #endif double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *rspq_ptr; double temp; double *mo_vec; double *rsiq_buf; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row, *i_row; double *ix_block_ptr,*ij_block_ptr; double *rsix_buf,*rsij_buf; /* buffer for (rs|ix) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *jsi_row,*asi_row; double *jyi_row,*abi_row; double temp1,temp2,*iq_row,*ip_row; int rs,qrs; double *scratch_buf; /* scratch used in permuting bra and ket */ /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); pthread_mutex_lock(&mkpt2_energy_mutex); init_libint(&Libint, BasisSet.max_am-1, max_num_prim_comb); pthread_mutex_unlock(&mkpt2_energy_mutex); #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif num_ibatch = MkPT2_Status.num_ibatch; num_i_per_ibatch = MkPT2_Status.num_i_per_ibatch; rsiq_buf = init_array(num_i_per_ibatch*BasisSet.num_ao* max_bf_per_shell*max_bf_per_shell); rsix_buf = init_array(num_i_per_ibatch*MOInfo.num_mo* max_bf_per_shell*max_bf_per_shell); rsij_buf = init_array(num_i_per_ibatch*MOInfo.ndocc* max_bf_per_shell*max_bf_per_shell); scratch_buf = init_array(MAX(max_cart_class_size, num_i_per_ibatch*BasisSet.num_ao* max_bf_per_shell*max_bf_per_shell)); /*----------------------------------- generate all unique shell quartets -----------------------------------*/ /*--- I-batch loop ---*/ for (ibatch=0;ibatch 1) { stab_i = Symmetry.atom_positions[BasisSet.shells[sii].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; R_list = Symmetry.dcr[stab_i][stab_j]; num_ij = Symmetry.dcr_dim[stab_i][stab_j]; } else num_ij = 1; /*--- R,S loop ---*/ for(dcr_ij=0;dcr_ij 1) R = R_list[dcr_ij]; else R = 0; si = sii; sj = BasisSet.shells[sjj].trans_vec[R]-1; /*--- "Unique" P,Q loop ---*/ for (uskk=0; uskk BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am) swap_ij_kl = 1; else swap_ij_kl = 0; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_kl = Symmetry.GnG[stab_k][stab_l]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ijkl=0;dcr_ijklAB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+Libint.AB[1]*Libint.AB[1]+Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+Libint.CD[1]*Libint.CD[1]+Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); /* if (fabs(sp_ij->Sovlp[pi][pj]*sp_kl->Sovlp[pk][pl]) > 1.0E-10)*/ #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*--- Compute the integrals ---*/ if (am) { #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i (rs|pq) ---*/ ijkl_to_klij(data,scratch_buf,np*nq,nr*ns); data = scratch_buf; /* timer_off("Pre1Swap");*/ } } else { sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; } #else if (swap_ij_kl) { dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; } else { sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; if (am /*&& (orig_am[0] + orig_am[1] != 0)*/) { /* timer_on("Pre1Swap");*/ /*--- (pq|rs) -> (rs|pq) ---*/ ijkl_to_klij(data,scratch_buf,nr*ns,np*nq); data = scratch_buf; /* timer_off("Pre1Swap");*/ } } #endif /*--- step 1 of the transformation ---*/ /* timer_on("Step 1");*/ #if !SWAP1 if (usk != usl) for(r=0;r 1) for(mo_i=0;mo_i 1) for(mo_a=0;mo_a ZERO) fprintf(outfile,"K (%3d %3d| %3d %3d) = %20.10lf\n",MOInfo.occ_to_pitzer[mo_j],mo_y,MOInfo.occ_to_pitzer[mo_i+imin],mo_x,temp); } } } } for(mo_i=0;mo_i ZERO) fprintf(outfile,"J (%3d %3d| %3d %3d) = %20.10f\n", MOInfo.occ_to_pitzer[mo_i+imin], MOInfo.occ_to_pitzer[mo_j], MOInfo.vir_to_pitzer[mo_a], MOInfo.vir_to_pitzer[mo_b],temp); } } } } #endif /*--- Files are opened and closed each pass to ensure integrity of TOCs if restart ever needed ---*/ #if !MkPT2_USE_IWL psio_open(PSIF_MO_TEI, (ibatch != 0) ? PSIO_OPEN_OLD : PSIO_OPEN_NEW); #endif /*-------------------------------------------------------------------- Write integrals out in num_mo by num_mo batches corresponding to each active ij pair for the (ix|jy) exchange like integrals. --------------------------------------------------------------------*/ for(int mo_i=0;mo_i #include #include #include #include #include extern FILE* outfile; namespace psi{ namespace CINTS{ namespace mkpt2{ void correlate(char *ptgrp, int irrep, int& nirreps_old, int& nirreps_new,int*& arr) { /* This is a hack from input!!! (ACS) */ int i; if (strcmp(ptgrp,"C1 ") == 0) nirreps_old = 1; else if (strcmp(ptgrp,"Cs ") == 0) nirreps_old = 2; else if (strcmp(ptgrp,"Ci ") == 0) nirreps_old = 2; else if (strcmp(ptgrp,"C2 ") == 0) nirreps_old = 2; else if (strcmp(ptgrp,"C2v") == 0) nirreps_old = 4; else if (strcmp(ptgrp,"D2 ") == 0) nirreps_old = 4; else if (strcmp(ptgrp,"C2h") == 0) nirreps_old = 4; else if (strcmp(ptgrp,"D2h") == 0) nirreps_old = 8; else { fprintf(outfile,"point group %s unknown.\n",ptgrp); exit(1); } arr = new int[nirreps_old]; if (irrep == 0) { /* return identity */ nirreps_new = nirreps_old; for (i=0; i #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moinfo.h" #include"moinfo_corr.h" #include"rmp2_energy.h" namespace psi { namespace CINTS { void mp2() { init_moinfo(); init_moinfo_corr(); switch(UserOptions.reftype) { case rhf: rmp2_energy(); break; default: throw std::domain_error("MP2 energy with specified REFERENCE not implemented"); } cleanup_moinfo_corr(); cleanup_moinfo(); return; } };}; psi3/src/bin/cints/MP2/mp2.h0000644000101500007650000000024310754663017014135 0ustar crawdad#ifndef _psi_src_bin_cints_MP2_mp2_h #define _psi_src_bin_cints_MP2_mp2_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void mp2(); }} #endif psi3/src/bin/cints/MP2/rmp2_energy.cc0000644000101500007650000002313610754663017016034 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include"quartet_permutations.h" #include"rmp2_energy.h" namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ extern void *rmp2_energy_thread(void *); /*-------------------------------- Variables common to all threads --------------------------------*/ pthread_mutex_t rmp2_energy_mutex; pthread_mutex_t *rmp2_sindex_mutex; pthread_cond_t rmp2_energy_cond; RMP2_Status_t RMP2_Status; double *jsia_buf; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, a - over all virtuals */ double *jbia_buf; /* buffer contains all MP2-type integrals */ /*!------------------------------------------------------- Algorithm (for the original one see Ida Nielsen's Ph.D. thesis) ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, a < nuocc, i in I (rs|ia) += Cas * (rs|is) End q, a, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2_energy.h) Loop over r in R, s in S Loop over i in I, a < nuocc, j <= i (js|ia) += Cjr * (rs|ia) (jr|ia) += Cjs * (rs|ia) End i, a, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, a < nuocc, b < nuocc (jb|ia) += Cbs * (js|ia) End r, a, b loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ void rmp2_energy() { pthread_attr_t thread_attr; pthread_t *thread_id; /*--- Various data structures ---*/ Libint_t Libint; long int libint_memory; int max_bf_per_shell; int max_num_prim_comb; int i; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_length; int imin, imax, jmin; int mo_i, mo_j, mo_a, mo_b, mo_ij; int rs_offset, rsi_offset, rsp_offset; double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *rspq_ptr; double temp; double *mo_vec; double *rsiq_buf; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row; double **ia_buf; /* buffer for one |ia) ket */ double *i_row; double *jsi_row; double *jbi_row; double iajb, ibja, pfac; double temp1,temp2,*iq_row,*ip_row; int rs,qrs; /*--------------- Initialization ---------------*/ #ifdef USE_TAYLOR_FM init_Taylor_Fm_Eval(BasisSet.max_am*4-4,UserOptions.cutoff); #else init_fjt(BasisSet.max_am*4); #endif init_libint_base(); timer_init(); timer_on("Schwartz"); schwartz_eri(); timer_off("Schwartz"); fprintf(outfile," Computing RHF MP2 energy via direct algorithm\n"); RMP2_Status.Emp2_0 = 0.0; RMP2_Status.Emp2_1 = 0.0; RMP2_Status.num_arrived = 0; /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libint_memory = libint_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libint_memory*UserOptions.num_threads; /*--- Minimum number of I-batches - take sizes of rsiq_buf, rsia_buf, jsia_buf, and jbia_buf into account ---*/ num_i_per_ibatch = UserOptions.memory / (UserOptions.num_threads*(BasisSet.num_ao*max_bf_per_shell*max_bf_per_shell + MOInfo.nactuocc*max_bf_per_shell*max_bf_per_shell) + MOInfo.nactuocc*MOInfo.nactdocc*BasisSet.num_ao + MOInfo.nactuocc*MOInfo.nactdocc*MOInfo.nactuocc); if (num_i_per_ibatch > MOInfo.nactdocc) num_i_per_ibatch = MOInfo.nactdocc; if (num_i_per_ibatch < 1) throw std::domain_error("Not enough memory for direct MP2"); num_ibatch = (MOInfo.nactdocc + num_i_per_ibatch - 1) / num_i_per_ibatch; /*--- Recompute number of MOs per I-batch ---*/ num_i_per_ibatch = (MOInfo.nactdocc + num_ibatch - 1) / num_ibatch; RMP2_Status.num_ibatch = num_ibatch; RMP2_Status.num_i_per_ibatch = num_i_per_ibatch; RMP2_Status.emp2_0 = init_array(ioff[MOInfo.ndocc]); RMP2_Status.emp2_1 = init_array(ioff[MOInfo.ndocc]); jsia_buf = init_array(MOInfo.nactdocc*BasisSet.num_ao* num_i_per_ibatch*MOInfo.nactuocc); jbia_buf = init_array(MOInfo.nactdocc*MOInfo.nactuocc* num_i_per_ibatch*MOInfo.nactuocc); fprintf(outfile," Using %d %s\n\n",num_ibatch, (num_ibatch == 1) ? "pass" : "passes"); /*-------------------------- Start compute threads now --------------------------*/ thread_id = (pthread_t *) malloc(UserOptions.num_threads*sizeof(pthread_t)); pthread_attr_init(&thread_attr); pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM); pthread_mutex_init(&rmp2_energy_mutex,NULL); pthread_cond_init(&rmp2_energy_cond,NULL); #if LOCK_RS_SHELL rmp2_sindex_mutex = (pthread_mutex_t *) malloc(ioff[BasisSet.num_shells]*sizeof(pthread_mutex_t)); for(i=0;i #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"schwartz.h" #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include"quartet_permutations.h" #include"rmp2_energy.h" #define SWAP1 1 namespace psi { namespace CINTS { void *rmp2_energy_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; const double m_sqrt1_2 = 1/sqrt(2.0); extern RMP2_Status_t RMP2_Status; extern pthread_mutex_t rmp2_energy_mutex; extern pthread_mutex_t *rmp2_sindex_mutex; extern pthread_cond_t rmp2_energy_cond; extern double *jsia_buf; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, a - over all virtuals */ extern double *jbia_buf; /* buffer contains all MP2-type integrals */ /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libint_t Libint; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif int ij, kl, ik, jl, ijkl; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int i, m, p, q, r, s; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl ; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl; int max_pj, max_pl; int *sj_arr, *sk_arr, *sl_arr; int sr_fao, ss_fao, sp_fao, sq_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_prim_comb; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_length; int imin, imax, jmin; int max_bf_per_shell; int mo_i, mo_j, mo_a, mo_b, mo_ij; int ia; int rs_offset, rsi_offset, rsp_offset; double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double *rspq_ptr; double temp; double *mo_vec; double *rsiq_buf; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row, *i_row; double *ia_block_ptr; double *rsia_buf; /* buffer for (rs|ia) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *jsi_row; double *jbi_row; double iajb, ibja, pfac, k0ijab, k1ijab, eijab, e0, e1; double temp1,temp2,*iq_row,*ip_row; int rs,qrs; double *scratch_buf; /* scratch used in permuting bra and ket */ /*--------------- Initialization ---------------*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); pthread_mutex_lock(&rmp2_energy_mutex); init_libint(&Libint, BasisSet.max_am-1, max_num_prim_comb); pthread_mutex_unlock(&rmp2_energy_mutex); #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif num_ibatch = RMP2_Status.num_ibatch; num_i_per_ibatch = RMP2_Status.num_i_per_ibatch; rsiq_buf = init_array(num_i_per_ibatch*BasisSet.num_ao* max_bf_per_shell*max_bf_per_shell); rsia_buf = init_array(num_i_per_ibatch*MOInfo.nactuocc* max_bf_per_shell*max_bf_per_shell); scratch_buf = init_array(MAX(max_cart_class_size, num_i_per_ibatch*BasisSet.num_ao* max_bf_per_shell*max_bf_per_shell)); /*----------------------------------- generate all unique shell quartets -----------------------------------*/ /*--- I-batch loop ---*/ for (ibatch=0;ibatch 1) { stab_i = Symmetry.atom_positions[BasisSet.shells[sii].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; R_list = Symmetry.dcr[stab_i][stab_j]; num_ij = Symmetry.dcr_dim[stab_i][stab_j]; } else num_ij = 1; /*--- R,S loop ---*/ for(dcr_ij=0;dcr_ij 1) R = R_list[dcr_ij]; else R = 0; si = sii; sj = BasisSet.shells[sjj].trans_vec[R]-1; /*--- "Unique" P,Q loop ---*/ for (uskk=0; uskk BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am) swap_ij_kl = 1; else swap_ij_kl = 0; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_kl = Symmetry.GnG[stab_k][stab_l]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ijkl=0;dcr_ijklAB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+Libint.AB[1]*Libint.AB[1]+Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+Libint.CD[1]*Libint.CD[1]+Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); /* if (fabs(sp_ij->Sovlp[pi][pj]*sp_kl->Sovlp[pk][pl]) > 1.0E-10)*/ #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, n*lambda_T); #endif } } } } /*--- Compute the integrals ---*/ if (am) { #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i (rs|pq) ---*/ ijkl_to_klij(data,scratch_buf,np*nq,nr*ns); data = scratch_buf; /* timer_off("Pre1Swap");*/ } } else { sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; } #else if (swap_ij_kl) { dum = si; si = sk; sk = dum; dum = sj; sj = sl; sl = dum; sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; } else { sr_fao = BasisSet.shells[si].fao - 1; ss_fao = BasisSet.shells[sj].fao - 1; sp_fao = BasisSet.shells[sk].fao - 1; sq_fao = BasisSet.shells[sl].fao - 1; nr = ioff[BasisSet.shells[si].am]; ns = ioff[BasisSet.shells[sj].am]; np = ioff[BasisSet.shells[sk].am]; nq = ioff[BasisSet.shells[sl].am]; if (am /*&& (orig_am[0] + orig_am[1] != 0)*/) { /* timer_on("Pre1Swap");*/ /*--- (pq|rs) -> (rs|pq) ---*/ ijkl_to_klij(data,scratch_buf,nr*ns,np*nq); data = scratch_buf; /* timer_off("Pre1Swap");*/ } } #endif /*--- step 1 of the transformation ---*/ /* timer_on("Step 1");*/ #if !SWAP1 if (usk != usl) for(r=0;r 1) for(mo_i=0;mo_i ZERO) fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_j+jmin,mo_b,mo_i+imin,mo_a, mo_j*MOInfo.nactuocc+mo_b, mo_i*MOInfo.nactuocc+mo_a, temp); } } } } #endif /*--- Compute a contribution to the MP2 energy from the current batch ---*/ /* timer_on("Energy");*/ for(mo_i=0;mo_i #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moinfo.h" #include"moinfo_corr.h" #include"rmp2r12_energy.h" namespace psi { namespace CINTS { void mp2r12() { int i,pitz_offset,mo_max,irrep,mo,qts_offset; double **scf_evec_so; switch(UserOptions.reftype) { case rhf: init_moinfo(); init_moinfo_corr(); rmp2r12_energy(); break; case uhf: /* This should live in Tools/moinfo_corr but I don't want to interfere with Daniel's CC code */ MOInfo.num_mo = chkpt_rd_nmo(); MOInfo.orbspi = chkpt_rd_orbspi(); MOInfo.clsdpi = chkpt_rd_clsdpi(); MOInfo.openpi = chkpt_rd_openpi(); MOInfo.frozen_docc = get_frzcpi(); MOInfo.frozen_uocc = get_frzvpi(); MOInfo.virtpi_alpha = init_int_array(Symmetry.nirreps); MOInfo.virtpi_beta = init_int_array(Symmetry.nirreps); MOInfo.mo2symblk = init_int_array(MOInfo.num_mo); MOInfo.ndocc = 0; MOInfo.nsocc = 0; MOInfo.nfrdocc = 0; MOInfo.nfruocc = 0; for(irrep=0;irrep #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"int_fjt.h" namespace psi { namespace CINTS { /*!-------------------------------------------------------------------------------- This function computes constants used in OSRR for a given quartet of primitives --------------------------------------------------------------------------------*/ void r12_quartet_data(prim_data* Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair* sp1, struct shell_pair* sp2, int am, int pi, int pj, int pk, int pl, double scale) { /*------------------------------------------------------ External data necessary to compute auxiliary function ------------------------------------------------------*/ static double F0[40] = {1.0, 1.0/3.0, 1.0/5.0, 1.0/7.0, 1.0/9.0, 1.0/11.0, 1.0/13.0, 1.0/15.0, 1.0/17.0, 1.0/19.0, 1.0/21.0, 1.0/23.0, 1.0/25.0, 1.0/27.0, 1.0/29.0, 1.0/31.0, 1.0/33.0, 1.0/35.0, 1.0/37.0, 1.0/39.0, 1.0/41.0, 1.0/43.0, 1.0/45.0, 1.0/47.0, 1.0/49.0, 1.0/51.0, 1.0/53.0, 1.0/55.0, 1.0/57.0, 1.0/59.0, 1.0/61.0, 1.0/63.0, 1.0/65.0, 1.0/67.0, 1.0/69.0, 1.0/71.0, 1.0/73.0, 1.0/75.0, 1.0/77.0, 1.0/79.0}; double small_T = UserOptions.cutoff; /*--- Use only one term in Taylor expansion of Fj(T) if T < small_T ---*/ int deriv_lvl = 1; /*---------------- Local variables ----------------*/ struct coordinates PQ, W; int i; double T; double coef1; double PQ2; double oozn; double zeta, eta, rho; zeta = sp1->gamma[pi][pj]; eta = sp2->gamma[pk][pl]; oozn = 1.0/(zeta+eta); Data->twozeta_a = 2.0*sp1->a1[pi]; Data->twozeta_b = 2.0*sp1->a2[pj]; Data->twozeta_c = 2.0*sp2->a1[pk]; Data->twozeta_d = 2.0*sp2->a2[pl]; Data->poz = eta*oozn; rho = zeta*Data->poz; Data->oo2p = 0.5/rho; coef1 = 2.0*sqrt(rho*M_1_PI)*scale*sp1->Sovlp[pi][pj]*sp2->Sovlp[pk][pl]; PQ.x = sp1->P[pi][pj][0] - sp2->P[pk][pl][0]; PQ.y = sp1->P[pi][pj][1] - sp2->P[pk][pl][1]; PQ.z = sp1->P[pi][pj][2] - sp2->P[pk][pl][2]; PQ2 = PQ.x*PQ.x; PQ2 += PQ.y*PQ.y; PQ2 += PQ.z*PQ.z; T = rho*PQ2; if (!am && deriv_lvl == 0) { /*--- Only need to compute (00|00) and (00||00) ---*/ int_fjt(fjt_table,1,T); Data->F[0] = fjt_table->d[0]*coef1; Data->ss_r12_ss = coef1*(2.0*Data->oo2p*fjt_table->d[0] + PQ2*(fjt_table->d[0] - fjt_table->d[1])); } else { Data->oo2zn = 0.5*oozn; Data->pon = zeta*oozn; Data->oo2z = 0.5/zeta; Data->oo2n = 0.5/eta; W.x = (sp1->P[pi][pj][0]*zeta+sp2->P[pk][pl][0]*eta)*oozn; W.y = (sp1->P[pi][pj][1]*zeta+sp2->P[pk][pl][1]*eta)*oozn; W.z = (sp1->P[pi][pj][2]*zeta+sp2->P[pk][pl][2]*eta)*oozn; if(T < small_T){ for(i=0; i<=am+deriv_lvl; i++) Data->F[i] = F0[i]*coef1; } else { int_fjt(fjt_table,am+deriv_lvl,T); for(i=0;i<=am+deriv_lvl;i++) Data->F[i] = fjt_table->d[i]*coef1; } Data->ss_r12_ss = 2.0*Data->oo2p*Data->F[0] + PQ2*(Data->F[0] - Data->F[1]); /* PA */ Data->U[0][0] = sp1->PA[pi][pj][0]; Data->U[0][1] = sp1->PA[pi][pj][1]; Data->U[0][2] = sp1->PA[pi][pj][2]; /* QA */ Data->U[1][0] = sp1->PA[pi][pj][0] - PQ.x; Data->U[1][1] = sp1->PA[pi][pj][1] - PQ.y; Data->U[1][2] = sp1->PA[pi][pj][2] - PQ.z; /* QC */ Data->U[2][0] = sp2->PA[pk][pl][0]; Data->U[2][1] = sp2->PA[pk][pl][1]; Data->U[2][2] = sp2->PA[pk][pl][2]; /* PC */ Data->U[3][0] = sp2->PA[pk][pl][0] + PQ.x; Data->U[3][1] = sp2->PA[pk][pl][1] + PQ.y; Data->U[3][2] = sp2->PA[pk][pl][2] + PQ.z; /* WP */ Data->U[4][0] = W.x - sp1->P[pi][pj][0]; Data->U[4][1] = W.y - sp1->P[pi][pj][1]; Data->U[4][2] = W.z - sp1->P[pi][pj][2]; /* WQ */ Data->U[5][0] = W.x - sp2->P[pk][pl][0]; Data->U[5][1] = W.y - sp2->P[pk][pl][1]; Data->U[5][2] = W.z - sp2->P[pk][pl][2]; } return; } };}; psi3/src/bin/cints/MP2R12/r12_quartet_data.h0000644000101500007650000000063110754663017017067 0ustar crawdad#ifndef _psi_src_bin_cints_MP2R12_r12_quartet_data_h #define _psi_src_bin_cints_MP2R12_r12_quartet_data_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void r12_quartet_data(prim_data* Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair* sp1, struct shell_pair* sp2, int am, int pi, int pj, int pk, int pl, double scale); }} #endif psi3/src/bin/cints/MP2R12/rmp2r12_energy.cc0000644000101500007650000002643010757640026016644 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ void make_transqt_arrays(int **first, int **last, int **fstocc, int **lstocc, int **occ, int **act2fullQTS, int **ioff3); extern void *rmp2r12_energy_thread(void *); /*-------------------------------- Variables common to all threads --------------------------------*/ pthread_mutex_t rmp2r12_energy_mutex; pthread_mutex_t *rmp2r12_sindex_mutex; pthread_cond_t rmp2r12_energy_cond; RMP2R12_Status_t RMP2R12_Status; double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals */ int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ int *fstocc, *lstocc; /* first and last occupied indices in Pitzer ordering for each symblk */ int *occ; /* Pitzer to "full"(no frozen core) QTS index mapping */ int *act2fullQTS; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ /*!------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ void rmp2r12_energy() { pthread_attr_t thread_attr; pthread_t *thread_id; Libr12_t Libr12; long int libr12_memory; int max_bf_per_shell; int max_num_prim_comb; int te_type; int i; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; /*--------------- Initialization ---------------*/ init_fjt(BasisSet.max_am*4+1); init_libr12_base(); make_transqt_arrays(&first, &last, &fstocc, &lstocc, &occ, &act2fullQTS, &ioff3); timer_init(); RMP2R12_Status.num_arrived = 0; fprintf(outfile," Performing direct AO->MO integral tranformation for the RHF MP2-R12/A energy\n"); /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libr12_memory = libr12_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libr12_memory*UserOptions.num_threads; /*--- Minimum number of I-batches - take sizes of rsiq_buf, rsix_buf, jsix_buf, and jyix_buf into account ---*/ num_i_per_ibatch = UserOptions.memory / ((NUM_TE_TYPES-1)* (UserOptions.num_threads*(BasisSet.num_ao*max_bf_per_shell*max_bf_per_shell + MOInfo.num_mo*max_bf_per_shell*max_bf_per_shell) + MOInfo.num_mo*MOInfo.nactdocc*BasisSet.num_ao + MOInfo.num_mo*MOInfo.nactdocc*MOInfo.num_mo)); if (num_i_per_ibatch > MOInfo.nactdocc) num_i_per_ibatch = MOInfo.nactdocc; if (num_i_per_ibatch < 1) throw std::domain_error("Not enough memory for direct MP2-R12/A transformation"); num_ibatch = (MOInfo.nactdocc + num_i_per_ibatch - 1) / num_i_per_ibatch; /*--- Recompute number of MOs per I-batch ---*/ num_i_per_ibatch = (MOInfo.nactdocc + num_ibatch - 1) / num_ibatch; RMP2R12_Status.num_ibatch = num_ibatch; RMP2R12_Status.num_i_per_ibatch = num_i_per_ibatch; for(te_type=0;te_type QTS ordering arrays for occupied (occ[]) orbitals */ *occ = init_int_array(MOInfo.num_mo); for(i=0; i< MOInfo.num_mo; i++) { (*occ)[i] = -1; } offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { if(h) offset += MOInfo.orbspi[h-1]; for(i=offset; i < (offset+MOInfo.clsdpi[h]); i++) { (*occ)[i] = count++; } } /* Construct active -> full QTS ordering array for occupied orbitals */ *act2fullQTS = init_int_array(MOInfo.ndocc); offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { for(i=0; i < MOInfo.frozen_docc[h]; i++) { (*act2fullQTS)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h]; } offset = 0; for(h=0; h < Symmetry.nirreps; h++) { for(i=MOInfo.frozen_docc[h]; i < MOInfo.clsdpi[h]; i++) { (*act2fullQTS)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h]; } /* Generate ioff3 array. This array gives the row offset for an ndocc x nmo matrix */ *ioff3 = init_int_array(MOInfo.ndocc); for(i=0; i < MOInfo.ndocc; i++) { (*ioff3)[i] = i*MOInfo.num_mo; } return; } } } psi3/src/bin/cints/MP2R12/rmp2r12_energy.h0000644000101500007650000000122710754663017016505 0ustar crawdad#ifndef _psi_src_bin_cints_MP2R12_rmp2r12_energy_h #define _psi_src_bin_cints_MP2R12_rmp2r12_energy_h /*! \file \ingroup CINTS */ #define LOCK_RS_SHELL 0 /*--- When updating (js|ia) and (jr|ia) in (JS|IA) lock blocks corresponding to the entire shell blocks or just the appropriate basis functions (more fine-grained in the second case) ---*/ namespace psi { namespace CINTS { void rmp2r12_energy(); namespace ump2r12_aa{ void ump2r12_energy_aa(); } namespace ump2r12_bb{ void ump2r12_energy_bb(); } typedef struct { int num_i_per_ibatch; int num_ibatch; int ibatch_first; int num_arrived; } RMP2R12_Status_t; };} #endif psi3/src/bin/cints/MP2R12/rmp2r12_energy_thread.cc0000644000101500007650000007332410754663017020201 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi { namespace CINTS { /*!------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ void *rmp2r12_energy_thread(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; extern pthread_mutex_t rmp2r12_energy_mutex; extern pthread_mutex_t *rmp2r12_sindex_mutex; extern pthread_cond_t rmp2r12_energy_cond; extern RMP2R12_Status_t RMP2R12_Status; extern double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ extern double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals */ extern int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ extern int *fstocc, *lstocc; /* first and last occupied indices in Pitzer ordering for each symblk */ extern int *occ; /* Pitzer to "full"(no frozen core) QTS index mapping */ extern int *act2fullQTS; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ extern int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ struct shell_pair *sp_ij, *sp_kl; Libr12_t Libr12; double_array_t fjt_table; int ij, kl, ik, jl, ijkl; int count, dum, status; int te_type; int n, num[NUM_TE_TYPES]; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int i, j, m, p, q, r, s, x, y; int isym, jsym, xsym, ysym; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl ; int *sj_arr, *sk_arr, *sl_arr; int sr_fao, ss_fao, sp_fao, sq_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size, class_size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; int max_bf_per_shell; int mo_i, mo_j, mo_x, mo_y; int ix, xy; int rs, qrs; int rs_offset, rsi_offset, rsp_offset; int num_prim_comb; char ij_key_string[80]; int iounits[NUM_TE_TYPES]; /* integrals file numbers */ double AB2, CD2; double *raw_data[NUM_TE_TYPES]; /* pointers to the unnormalized target quartet of integrals */ double *data[NUM_TE_TYPES]; /* pointers to the transformed normalized target quartet of integrals */ double temp; double ssss, ss_r12_ss; double *rspq_ptr; double *mo_vec; double *rsiq_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row; double *ix_block_ptr; double *rsix_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, x runs over all MOs */ double *i_row; double **jy_buf; double *xy_buf; double *jsi_row; double *jyi_row; double temp1,temp2,*iq_row,*ip_row; double *scratch_buf; /*--------------- Initialization ---------------*/ iounits[0] = IOUnits.itapERI_MO; iounits[1] = IOUnits.itapR12_MO; iounits[2] = IOUnits.itapR12T2_MO; /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; #ifdef NONDOUBLE_INTS for(i=0;i 1) { stab_i = Symmetry.atom_positions[BasisSet.shells[sii].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; R_list = Symmetry.dcr[stab_i][stab_j]; num_ij = Symmetry.dcr_dim[stab_i][stab_j]; } else num_ij = 1; /*--- R,S loop ---*/ for(dcr_ij=0;dcr_ij 1) R = R_list[dcr_ij]; else R = 0; si = sii; sj = BasisSet.shells[sjj].trans_vec[R]-1; /*--- "Unique" P,Q loop ---*/ for (uskk=0; uskk BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am) swap_ij_kl = 1; else swap_ij_kl = 0; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_kl = Symmetry.GnG[stab_k][stab_l]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ijkl=0;dcr_ijklAB[0]; Libr12.ShellQuartet.AB[1] = sp_ij->AB[1]; Libr12.ShellQuartet.AB[2] = sp_ij->AB[2]; Libr12.ShellQuartet.CD[0] = sp_kl->AB[0]; Libr12.ShellQuartet.CD[1] = sp_kl->AB[1]; Libr12.ShellQuartet.CD[2] = sp_kl->AB[2]; Libr12.ShellQuartet.AC[0] = Molecule.centers[BasisSet.shells[si].center-1].x- Molecule.centers[BasisSet.shells[sk].center-1].x; Libr12.ShellQuartet.AC[1] = Molecule.centers[BasisSet.shells[si].center-1].y- Molecule.centers[BasisSet.shells[sk].center-1].y; Libr12.ShellQuartet.AC[2] = Molecule.centers[BasisSet.shells[si].center-1].z- Molecule.centers[BasisSet.shells[sk].center-1].z; Libr12.ShellQuartet.ABdotAC = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AC[2]; Libr12.ShellQuartet.CDdotCA = -1.0*(Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.AC[2]); AB2 = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AB[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AB[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AB[2]; CD2 = Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.CD[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.CD[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.CD[2]; /*-------------------------------- contract by primitives out here --------------------------------*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) for (pj = 0; pj < np_j; pj++) for (pk = 0; pk < np_k; pk++) for (pl = 0; pl < np_l; pl++){ r12_quartet_data(&(Libr12.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, lambda_T); } if (am) { build_r12_grt[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libr12,num_prim_comb); if (swap_ij_kl) /*--- (usi usj|[r12,T1]|usk usl) = (usk usl|[r12,T2]|usi usj) ---*/ Libr12.te_ptr[2] = Libr12.te_ptr[3]; #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; for(i=0;i (pq|rs) ---*/ ijkl_to_klij(data[te_type],scratch_buf,nr*ns,np*nq); data[te_type] = scratch_buf; /* timer_off("Pre1Swap");*/ } if (usk != usl) for(mo_i=0;mo_i ZERO) { if (te_type < 2) fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_j+jmin,mo_y,mo_i+imin,mo_x, mo_j*MOInfo.num_mo+mo_y, mo_i*MOInfo.num_mo+mo_x, temp); else fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_i+imin,mo_x,mo_j+jmin,mo_y, mo_i*MOInfo.num_mo+mo_x, mo_j*MOInfo.num_mo+mo_y, temp); } } } } } } #endif /*--- Files are opened and closed each pass to ensure integrity of TOCs if restart ever needed ---*/ for(te_type=0;te_type #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi{ namespace CINTS{ extern void make_transqt_arrays_uhf(int **first, int **last, int **fstocc_alpha, int **fstocc_beta, int **lstocc_alpha, int **lstocc_beta, int **occ_alpha, int **occ_beta, int **act2fullQTS_alpha, int **act2fullQTS_beta, int **ioff3); namespace ump2r12_aa{ /*------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ /*------------------------------- Explicit function declarations -------------------------------*/ extern void *ump2r12_energy_thread_aa(void *); /*-------------------------------- Variables common to all threads --------------------------------*/ pthread_mutex_t rmp2r12_energy_mutex; pthread_mutex_t *rmp2r12_sindex_mutex; pthread_cond_t rmp2r12_energy_cond; RMP2R12_Status_t RMP2R12_Status; double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all alpha occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals (AA|AA) spin case*/ double *jsix_buf2[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all beta occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ double *jyix_buf2[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals (AA|BB) spin case */ int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ int *fstocc_alpha, *lstocc_alpha; /* first and last occupied indices in Pitzer ordering for each symblk */ int *fstocc_beta, *lstocc_beta; /* first and last occupied indices in Pitzer ordering for each symblk */ int *occ_alpha, *occ_beta; /* Pitzer to "full"(no frozen core) QTS index mapping */ int *act2fullQTS_alpha, *act2fullQTS_beta; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ void ump2r12_energy_aa() { pthread_attr_t thread_attr; pthread_t *thread_id; Libr12_t Libr12; long int libr12_memory; int max_bf_per_shell; int max_num_prim_comb; int te_type; long int i; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; /*--------------- Initialization ---------------*/ init_fjt(BasisSet.max_am*4+1); init_libr12_base(); make_transqt_arrays_uhf(&first, &last, &fstocc_alpha, &fstocc_beta, &lstocc_alpha, &lstocc_beta, &occ_alpha, &occ_beta, &act2fullQTS_alpha, &act2fullQTS_beta, &ioff3); timer_init(); RMP2R12_Status.num_arrived = 0; fprintf(outfile," Performing direct AO->MO integral tranformation for the UHF MP2-R12/A energy\n"); fprintf(outfile," (AA|AA) and (AA|BB) spin cases\n"); /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libr12_memory = libr12_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libr12_memory*UserOptions.num_threads; /*--- Minimum number of I-batches - take sizes of rsiq_buf, rsix_buf, jsix_buf, and jyix_buf into account also, jsix_buf2 and jyix_buf2 to hold the alpha-beta integrals, which are formed at the same time (ACS 01/06) ---*/ num_i_per_ibatch = UserOptions.memory / ((NUM_TE_TYPES-1)* (UserOptions.num_threads*(BasisSet.num_ao*max_bf_per_shell*max_bf_per_shell + MOInfo.num_mo*max_bf_per_shell*max_bf_per_shell) + MOInfo.num_mo*MOInfo.alpha_act_occ*BasisSet.num_ao + MOInfo.num_mo*MOInfo.alpha_act_occ*MOInfo.num_mo + MOInfo.num_mo*MOInfo.beta_act_occ*BasisSet.num_ao + MOInfo.num_mo*MOInfo.beta_act_occ*MOInfo.num_mo)); if (num_i_per_ibatch > MOInfo.alpha_act_occ) num_i_per_ibatch = MOInfo.alpha_act_occ; if (num_i_per_ibatch < 1) throw std::domain_error("Not enough memory for direct MP2-R12/A transformation"); num_ibatch = (MOInfo.alpha_act_occ + num_i_per_ibatch - 1) / num_i_per_ibatch; /*--- Recompute number of MOs per I-batch ---*/ num_i_per_ibatch = (MOInfo.alpha_act_occ + num_ibatch - 1) / num_ibatch; RMP2R12_Status.num_ibatch = num_ibatch; RMP2R12_Status.num_i_per_ibatch = num_i_per_ibatch; for(te_type=0;te_type #include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi{ namespace CINTS{ extern void make_transqt_arrays_uhf(int **first, int **last, int **fstocc_alpha, int **fstocc_beta, int **lstocc_alpha, int **lstocc_beta, int **occ_alpha, int **occ_beta, int **act2fullQTS_alpha, int **act2fullQTS_beta, int **ioff3); namespace ump2r12_bb{ /*------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ /*------------------------------- Explicit function declarations -------------------------------*/ extern void *ump2r12_energy_thread_bb(void *); /*-------------------------------- Variables common to all threads --------------------------------*/ pthread_mutex_t rmp2r12_energy_mutex; pthread_mutex_t *rmp2r12_sindex_mutex; pthread_cond_t rmp2r12_energy_cond; RMP2R12_Status_t RMP2R12_Status; double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals */ double *jsix_buf2; /* buffer for (js|ia) integrals, where j runs over all d.-o. MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ double *jyix_buf2; /* buffer contains all MP2-R12/A-type integrals */ int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ int *fstocc_alpha, *lstocc_alpha; /* first and last occupied indices in Pitzer ordering for each symblk */ int *fstocc_beta, *lstocc_beta; /* first and last occupied indices in Pitzer ordering for each symblk */ int *occ_alpha, *occ_beta; /* Pitzer to "full"(no frozen core) QTS index mapping */ int *act2fullQTS_alpha, *act2fullQTS_beta; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ void ump2r12_energy_bb() { pthread_attr_t thread_attr; pthread_t *thread_id; Libr12_t Libr12; long int libr12_memory; int max_bf_per_shell; int max_num_prim_comb; int te_type; long int i; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; /*--------------- Initialization ---------------*/ init_fjt(BasisSet.max_am*4+1); init_libr12_base(); // make_transqt_arrays_uhf(&first, &last, &fstocc_alpha, &fstocc_beta, &lstocc_alpha, &lstocc_beta, // &occ_alpha, &occ_beta, &act2fullQTS_alpha, &act2fullQTS_beta, &ioff3); timer_init(); RMP2R12_Status.num_arrived = 0; fprintf(outfile," Performing direct AO->MO integral tranformation for the UHF MP2-R12/A energy\n"); fprintf(outfile," (BB|BB) and (BB|AA) spin cases\n"); /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; /*--- Use this dirty trick to get how much memory integrals library needs ---*/ max_num_prim_comb = (BasisSet.max_num_prims* BasisSet.max_num_prims)* (BasisSet.max_num_prims* BasisSet.max_num_prims); libr12_memory = libr12_storage_required(BasisSet.max_am-1,max_num_prim_comb); UserOptions.memory -= libr12_memory*UserOptions.num_threads; /*--- Minimum number of I-batches - take sizes of rsiq_buf, rsix_buf, jsix_buf, and jyix_buf into account plus enough for the (BB|AA) spin case over the [r12,T1] operator only ACS (01/06) ---*/ num_i_per_ibatch = UserOptions.memory / ((NUM_TE_TYPES-1)* (UserOptions.num_threads*(BasisSet.num_ao*max_bf_per_shell*max_bf_per_shell + MOInfo.num_mo*max_bf_per_shell*max_bf_per_shell) + MOInfo.num_mo*MOInfo.beta_act_occ*BasisSet.num_ao + MOInfo.num_mo*MOInfo.beta_act_occ*MOInfo.num_mo) + UserOptions.num_threads*(MOInfo.num_mo*MOInfo.alpha_act_occ*BasisSet.num_ao + MOInfo.num_mo*MOInfo.alpha_act_occ*MOInfo.num_mo) ); if (num_i_per_ibatch > MOInfo.beta_act_occ) num_i_per_ibatch = MOInfo.beta_act_occ; if (num_i_per_ibatch < 1) throw std::domain_error("Not enough memory for direct MP2-R12/A transformation"); num_ibatch = (MOInfo.beta_act_occ + num_i_per_ibatch - 1) / num_i_per_ibatch; /*--- Recompute number of MOs per I-batch ---*/ num_i_per_ibatch = (MOInfo.beta_act_occ + num_ibatch - 1) / num_ibatch; RMP2R12_Status.num_ibatch = num_ibatch; RMP2R12_Status.num_i_per_ibatch = num_i_per_ibatch; for(te_type=0;te_type QTS ordering arrays for occupied (occ[]) orbitals */ /* The alpha orbitals */ *occ_alpha = init_int_array(MOInfo.num_mo); for(i=0; i< MOInfo.num_mo; i++) { (*occ_alpha)[i] = -1; } offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { if(h) offset += MOInfo.orbspi[h-1]; for(i=offset; i < (offset+MOInfo.clsdpi[h]+MOInfo.openpi[h]); i++) { (*occ_alpha)[i] = count++; } } /* The beta orbitals */ *occ_beta = init_int_array(MOInfo.num_mo); for(i=0; i< MOInfo.num_mo; i++) { (*occ_beta)[i] = -1; } offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { if(h) offset += MOInfo.orbspi[h-1]; for(i=offset; i < (offset+MOInfo.clsdpi[h]); i++) { (*occ_beta)[i] = count++; } } /* Construct active -> full QTS ordering array for occupied alpha orbitals */ *act2fullQTS_alpha = init_int_array(MOInfo.ndocc+MOInfo.nsocc); offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { for(i=0; i < MOInfo.frozen_docc[h]; i++) { (*act2fullQTS_alpha)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h] + MOInfo.openpi[h]; } offset = 0; for(h=0; h < Symmetry.nirreps; h++) { for(i=MOInfo.frozen_docc[h]; i < MOInfo.clsdpi[h] + MOInfo.openpi[h]; i++) { (*act2fullQTS_alpha)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h] + MOInfo.openpi[h]; } /* Construct active -> full QTS ordering array for occupied beta orbitals */ *act2fullQTS_beta = init_int_array(MOInfo.ndocc); offset = 0; count=0; for(h=0; h < Symmetry.nirreps; h++) { for(i=0; i < MOInfo.frozen_docc[h]; i++) { (*act2fullQTS_beta)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h]; } offset = 0; for(h=0; h < Symmetry.nirreps; h++) { for(i=MOInfo.frozen_docc[h]; i < MOInfo.clsdpi[h]; i++) { (*act2fullQTS_beta)[count] = offset+i; count++; } offset += MOInfo.clsdpi[h]; } /* Generate ioff3 array. This array gives the row offset for an ndocc x nmo matrix */ *ioff3 = init_int_array(MOInfo.ndocc); for(i=0; i < MOInfo.ndocc; i++) { (*ioff3)[i] = i*MOInfo.num_mo; } return; } }} /* End psi::CINTS namespaces */ psi3/src/bin/cints/MP2R12/ump2r12_energy_thread_aa.cc0000644000101500007650000010677510757640026020652 0ustar crawdad#include #include #include #include #include #include #include #include #include #include #include #include"defines.h" #include"psifiles.h" #define EXTERN #include"global.h" #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi{ namespace CINTS{ namespace ump2r12_aa{ /*------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ void *ump2r12_energy_thread_aa(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; extern pthread_mutex_t rmp2r12_energy_mutex; extern pthread_mutex_t *rmp2r12_sindex_mutex; extern pthread_cond_t rmp2r12_energy_cond; extern RMP2R12_Status_t RMP2R12_Status; extern double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all alpha occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ extern double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals (AA|AA) */ extern double *jsix_buf2[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all beta occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ extern double *jyix_buf2[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals (AA|BB)*/ extern int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ extern int *fstocc_alpha, *lstocc_alpha; /* first and last occupied indices in Pitzer ordering for each symblk */ extern int *fstocc_beta, *lstocc_beta; /* first and last occupied indices in Pitzer ordering for each symblk */ extern int *occ_alpha, *occ_beta; /* Pitzer to "full"(no frozen core) QTS index mapping */ extern int *act2fullQTS_alpha; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ extern int *act2fullQTS_beta; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ extern int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ struct shell_pair *sp_ij, *sp_kl; Libr12_t Libr12; double_array_t fjt_table; int ij, kl, ik, jl, ijkl; int count, dum, status; int te_type; int n, num[NUM_TE_TYPES]; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int i, j, m, p, q, r, s, x, y; int isym, jsym, xsym, ysym; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl ; int *sj_arr, *sk_arr, *sl_arr; int sr_fao, ss_fao, sp_fao, sq_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size, class_size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; int max_bf_per_shell; int mo_i, mo_j, mo_x, mo_y; int ix, xy; int rs, qrs; int rs_offset, rsi_offset, rsp_offset; int num_prim_comb; char ij_key_string[80]; int iounits[NUM_TE_TYPES]; /* integrals file numbers */ int iounits2[NUM_TE_TYPES]; /* integrals file numbers */ double AB2, CD2; double *raw_data[NUM_TE_TYPES]; /* pointers to the unnormalized target quartet of integrals */ double *data[NUM_TE_TYPES]; /* pointers to the transformed normalized target quartet of integrals */ double temp; double ssss, ss_r12_ss; double *rspq_ptr; double *mo_vec; double *rsiq_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row; double *ix_block_ptr; double *rsix_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, x runs over all MOs */ double *i_row; double **jy_buf; double *xy_buf; double *jsi_row; double *jyi_row; double temp1,temp2,*iq_row,*ip_row; double *scratch_buf; /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; #ifdef NONDOUBLE_INTS for(i=0;i 1) { stab_i = Symmetry.atom_positions[BasisSet.shells[sii].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; R_list = Symmetry.dcr[stab_i][stab_j]; num_ij = Symmetry.dcr_dim[stab_i][stab_j]; } else num_ij = 1; /*--- R,S loop ---*/ for(dcr_ij=0;dcr_ij 1) R = R_list[dcr_ij]; else R = 0; si = sii; sj = BasisSet.shells[sjj].trans_vec[R]-1; /*--- "Unique" P,Q loop ---*/ for (uskk=0; uskk BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am) swap_ij_kl = 1; else swap_ij_kl = 0; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_kl = Symmetry.GnG[stab_k][stab_l]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ijkl=0;dcr_ijklAB[0]; Libr12.ShellQuartet.AB[1] = sp_ij->AB[1]; Libr12.ShellQuartet.AB[2] = sp_ij->AB[2]; Libr12.ShellQuartet.CD[0] = sp_kl->AB[0]; Libr12.ShellQuartet.CD[1] = sp_kl->AB[1]; Libr12.ShellQuartet.CD[2] = sp_kl->AB[2]; Libr12.ShellQuartet.AC[0] = Molecule.centers[BasisSet.shells[si].center-1].x- Molecule.centers[BasisSet.shells[sk].center-1].x; Libr12.ShellQuartet.AC[1] = Molecule.centers[BasisSet.shells[si].center-1].y- Molecule.centers[BasisSet.shells[sk].center-1].y; Libr12.ShellQuartet.AC[2] = Molecule.centers[BasisSet.shells[si].center-1].z- Molecule.centers[BasisSet.shells[sk].center-1].z; Libr12.ShellQuartet.ABdotAC = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AC[2]; Libr12.ShellQuartet.CDdotCA = -1.0*(Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.AC[2]); AB2 = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AB[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AB[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AB[2]; CD2 = Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.CD[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.CD[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.CD[2]; /*-------------------------------- contract by primitives out here --------------------------------*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) for (pj = 0; pj < np_j; pj++) for (pk = 0; pk < np_k; pk++) for (pl = 0; pl < np_l; pl++){ r12_quartet_data(&(Libr12.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, lambda_T); } if (am) { build_r12_grt[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libr12,num_prim_comb); if (swap_ij_kl) /*--- (usi usj|[r12,T1]|usk usl) = (usk usl|[r12,T2]|usi usj) ---*/ Libr12.te_ptr[2] = Libr12.te_ptr[3]; #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; for(i=0;i (pq|rs) ---*/ ijkl_to_klij(data[te_type],scratch_buf,nr*ns,np*nq); data[te_type] = scratch_buf; /* timer_off("Pre1Swap");*/ } if (usk != usl) for(mo_i=0;mo_i ZERO) { if (te_type < 2) fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_j+jmin,mo_y,mo_i+imin,mo_x, mo_j*MOInfo.num_mo+mo_y, mo_i*MOInfo.num_mo+mo_x, temp); else fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_i+imin,mo_x,mo_j+jmin,mo_y, mo_i*MOInfo.num_mo+mo_x, mo_j*MOInfo.num_mo+mo_y, temp); } } } } } fprintf(outfile," Alpha Beta Transformed integrals of type %d\n",te_type); for(mo_i=0;mo_i ZERO) { if (te_type < 2) fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_j+jmin,mo_y,mo_i+imin,mo_x, mo_j*MOInfo.num_mo+mo_y, mo_i*MOInfo.num_mo+mo_x, temp); else fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_i+imin,mo_x,mo_j+jmin,mo_y, mo_i*MOInfo.num_mo+mo_x, mo_j*MOInfo.num_mo+mo_y, temp); } } } } } } #endif /*--- Files are opened and closed each pass to ensure integrity of TOCs if restart ever needed, these are the alpha-beta integrals ---*/ iounits[0] = PSIF_MO_AA_TEI; iounits[1] = PSIF_MO_AA_R12; iounits[2] = PSIF_MO_AA_R12T1; for(te_type=0;te_type #include #include #include #include #include #include #include #include #include #include #include"defines.h" #include"psifiles.h" #define EXTERN #include"global.h" #include"r12_quartet_data.h" #include"norm_quartet.h" #include"int_fjt.h" #include"quartet_permutations.h" #include"rmp2r12_energy.h" namespace psi{ namespace CINTS{ namespace ump2r12_bb{ /*------------------------------------------------------- Algorithm ***Split into threads. Each thread do the following: Loop over I batches (batch size num_i_per_batch) of active DOCC Loop over all symmetry-unique shells UR, US<=UR ***if this UR, US is to be handled by this thread - proceed, else skip to next one Find all symmetry-distinct shell doublets resulting from (UR US| Loop over all resulting shell doublets R, S Loop over all symmetry-unique shells UP, UQ<=UP Find all symmetry-distinct shell quartets resulting from (R S|UP UQ) Loop over the resulting set of P, Q doublets Evaluate (RS|PQ), (RS|r12|PQ), and (RS|[r12,T1]|PQ) Loop over p in P, q in Q, r in R, s in S, i in I (rs|iq) += Cpi * (rs|pq) (rs|ip) += Cqi * (rs|pq) same for (rs|r12|pq) and (rs|[r12,T1]|pq) End p, q, r, s, i loop End P,Q loop End UP, UQ loop Loop over r in R, s in S Loop over q < nao, x < num_mo, i in I (rs|ix) += Cxs * (rs|is) same for (rs|r12|is) and (rs|[r12,T1]|is) End q, x, i End r, s loop ***Lock (js| and (jr| (either individual or shell blocks depending on LOCK_RS_SHELL in rmp2r12_energy.h) Loop over r in R, s in S Loop over i in I, x < num_mo, j <= i (js|ix) += Cjr * (rs|ix) (jr|ix) += Cjs * (rs|ix) same for (rs|r12|ix), but (js|[r12,T1]|ix) += Cjr * (rs|[r12,T1]|ix) (jr|[r12,T1]|ix) -= Cjs * (rs|[r12,T1]|ix) <---- Note the minus sign here!!! End i, x, j loop End r, s loop ***Unlock (js| and (jr| End R, S loop End UR, US loop ***Barrier: threads wait until everyone is done ***Do the following in one thread only Loop over i in I, j <= i Loop over r < nao, x < num_mo, y < num_mo (jy|ix) += Cys * (js|ix) same for (js|r12|ix) and (js|[r12,T1]|ix) End r, x, y loop End i, j loop End I loop ***Merge all threads -------------------------------------------------------*/ void *ump2r12_energy_thread_bb(void *tnum_ptr) { const long int thread_num = (long int) tnum_ptr; const double toler = UserOptions.cutoff; extern pthread_mutex_t rmp2r12_energy_mutex; extern pthread_mutex_t *rmp2r12_sindex_mutex; extern pthread_cond_t rmp2r12_energy_cond; extern RMP2R12_Status_t RMP2R12_Status; extern double *jsix_buf[NUM_TE_TYPES]; /* buffer for (js|ia) integrals, where j runs over all beta occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ extern double *jyix_buf[NUM_TE_TYPES]; /* buffer contains all MP2-R12/A-type integrals (BB|BB) spin case*/ extern double *jsix_buf2; /* buffer for (js|ia) integrals, where j runs over all alpha occ act MOs, s runs over all AOs, i - over I-batch, x - over all MOs */ extern double *jyix_buf2; /* buffer contains all (BB|[r12,T1]|AA) integrals*/ extern int *first, *last; /* first and last absolute (Pitzer) orbital indices in symblk */ extern int *fstocc_alpha, *lstocc_alpha; /* first and last occupied indices in Pitzer ordering for each symblk */ extern int *fstocc_beta, *lstocc_beta; /* first and last occupied indices in Pitzer ordering for each symblk */ extern int *occ_alpha, *occ_beta; /* Pitzer to "full"(no frozen core) QTS index mapping */ extern int *act2fullQTS_alpha; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ extern int *act2fullQTS_beta; /* Maps "active"(taking frozen core into account) QTS into "frozen" QTS index */ extern int *ioff3; /* returns pointers to the beginning of rows in a rectangular matrix */ struct shell_pair *sp_ij, *sp_kl; Libr12_t Libr12; double_array_t fjt_table; int ij, kl, ik, jl, ijkl; int count, dum, status; int te_type; int n, num[NUM_TE_TYPES]; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int i, j, m, p, q, r, s, x, y; int isym, jsym, xsym, ysym; int p_abs, q_abs, r_abs, s_abs; int si, sj, sk, sl; int sii, sjj, skk, sll , slll; int num_ij, swap_ij_kl; int pi, pj, pk, pl ; int *sj_arr, *sk_arr, *sl_arr; int sr_fao, ss_fao, sp_fao, sq_fao; int usii,usjj,uskk,usll,usi,usj,usk,usl,usij; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int size, class_size; int max_class_size; int max_cart_class_size; int np_i, np_j, np_k, np_l; int nr, ns, np, nq; int num_ibatch, num_i_per_ibatch, ibatch, ibatch_first, ibatch_length; int imin, imax, jmin; int max_bf_per_shell; int mo_i, mo_j, mo_x, mo_y; int ix, xy; int rs, qrs; int rs_offset, rsi_offset, rsp_offset; int num_prim_comb; char ij_key_string[80]; int iounits[NUM_TE_TYPES]; /* integrals file numbers */ int iounits2[NUM_TE_TYPES]; /* integrals file numbers */ double AB2, CD2; double *raw_data[NUM_TE_TYPES]; /* pointers to the unnormalized target quartet of integrals */ double *data[NUM_TE_TYPES]; /* pointers to the transformed normalized target quartet of integrals */ double temp; double ssss, ss_r12_ss; double *rspq_ptr; double *mo_vec; double *rsiq_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, q runs over all AOs */ double *rsi_row; double *ix_block_ptr; double *rsix_buf[NUM_TE_TYPES]; /* buffer for (rs|iq) integrals, where r,s run over shell sets, i runs over I-batch, x runs over all MOs */ double *i_row; double **jy_buf; double *xy_buf; double *jsi_row; double *jyi_row; double temp1,temp2,*iq_row,*ip_row; double *scratch_buf; /*------------------------- Allocate data structures -------------------------*/ max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); max_num_unique_quartets = Symmetry.max_stab_index* Symmetry.max_stab_index* Symmetry.max_stab_index; sj_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sk_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); sl_arr = (int *)malloc(sizeof(int)*max_num_unique_quartets); if (Symmetry.nirreps > 1) max_class_size = max_cart_class_size; #ifdef NONDOUBLE_INTS for(i=0;i 1) { stab_i = Symmetry.atom_positions[BasisSet.shells[sii].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; R_list = Symmetry.dcr[stab_i][stab_j]; num_ij = Symmetry.dcr_dim[stab_i][stab_j]; } else num_ij = 1; /*--- R,S loop ---*/ for(dcr_ij=0;dcr_ij 1) R = R_list[dcr_ij]; else R = 0; si = sii; sj = BasisSet.shells[sjj].trans_vec[R]-1; /*--- "Unique" P,Q loop ---*/ for (uskk=0; uskk BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am) swap_ij_kl = 1; else swap_ij_kl = 0; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_kl = Symmetry.GnG[stab_k][stab_l]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ijkl=0;dcr_ijklAB[0]; Libr12.ShellQuartet.AB[1] = sp_ij->AB[1]; Libr12.ShellQuartet.AB[2] = sp_ij->AB[2]; Libr12.ShellQuartet.CD[0] = sp_kl->AB[0]; Libr12.ShellQuartet.CD[1] = sp_kl->AB[1]; Libr12.ShellQuartet.CD[2] = sp_kl->AB[2]; Libr12.ShellQuartet.AC[0] = Molecule.centers[BasisSet.shells[si].center-1].x- Molecule.centers[BasisSet.shells[sk].center-1].x; Libr12.ShellQuartet.AC[1] = Molecule.centers[BasisSet.shells[si].center-1].y- Molecule.centers[BasisSet.shells[sk].center-1].y; Libr12.ShellQuartet.AC[2] = Molecule.centers[BasisSet.shells[si].center-1].z- Molecule.centers[BasisSet.shells[sk].center-1].z; Libr12.ShellQuartet.ABdotAC = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AC[2]; Libr12.ShellQuartet.CDdotCA = -1.0*(Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.AC[2]); AB2 = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AB[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AB[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AB[2]; CD2 = Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.CD[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.CD[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.CD[2]; /*-------------------------------- contract by primitives out here --------------------------------*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) for (pj = 0; pj < np_j; pj++) for (pk = 0; pk < np_k; pk++) for (pl = 0; pl < np_l; pl++){ r12_quartet_data(&(Libr12.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, lambda_T); } if (am) { build_r12_grt[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libr12,num_prim_comb); if (swap_ij_kl) /*--- (usi usj|[r12,T1]|usk usl) = (usk usl|[r12,T2]|usi usj) ---*/ Libr12.te_ptr[2] = Libr12.te_ptr[3]; #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; for(i=0;i (pq|rs) ---*/ ijkl_to_klij(data[te_type],scratch_buf,nr*ns,np*nq); data[te_type] = scratch_buf; /* timer_off("Pre1Swap");*/ } if (usk != usl) for(mo_i=0;mo_i ZERO) { if (te_type < 2) fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_j+jmin,mo_y,mo_i+imin,mo_x, mo_j*MOInfo.num_mo+mo_y, mo_i*MOInfo.num_mo+mo_x, temp); else fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_i+imin,mo_x,mo_j+jmin,mo_y, mo_i*MOInfo.num_mo+mo_x, mo_j*MOInfo.num_mo+mo_y, temp); } } } } } } fprintf(outfile," Beta Alpha Transformed integrals of type %d\n",2); for(mo_i=0;mo_i ZERO) { fprintf(outfile,"<%d %d %d %d [%d] [%d] = %20.10lf\n", mo_i+imin,mo_x,mo_j+jmin,mo_y, mo_i*MOInfo.num_mo+mo_x, mo_j*MOInfo.num_mo+mo_y, temp); } } } } #endif /*--- Files are opened and closed each pass to ensure integrity of TOCs if restart ever needed ---*/ iounits[0] = PSIF_MO_BB_TEI; iounits[1] = PSIF_MO_BB_R12; iounits[2] = PSIF_MO_BB_R12T1; for(te_type=0;te_type #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { static double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double f_n(int k, int l1, int l2, double A, double B); static double int_pow(double a, int p); void angmom_ints(void) { struct coordinates PA, PB, AB, A, B; struct shell_pair *sp; register int i, j, k, l, ii, jj, kk, ll; int si, sj; int ni, nj; int l1, m1, n1, l2, m2, n2; int am_i, am_j; int ai, aj, I, J; int ioffset, joffset; int atom1, atom2; int ax, ay, az, bx, by, bz; /* nuclear coordinate indices */ int coord, ntri, ij; double a1, a2; double ab2, oog, gam; double inorm, jnorm, over_pf; double **Lx, **Ly, **Lz; struct coordinates C; double Sxy1, Sxy2, Sxz1, Sxz2; double Syx1, Syx2, Syz1, Syz2; double Szx1, Szx2, Szy1, Szy2; double S0x1, S0x2, S0y1, S0y2, S0z1, S0z2; double muxy1, muxy2, muxz1, muxz2; double muyx1, muyx2, muyz1, muyz2; double muzx1, muzx2, muzy1, muzy2; double norm1, norm12, *ptr1, *ptr2; double *scratch_x, *scratch_y, *scratch_z; Lx = block_matrix(BasisSet.num_ao, BasisSet.num_ao); Ly = block_matrix(BasisSet.num_ao, BasisSet.num_ao); Lz = block_matrix(BasisSet.num_ao, BasisSet.num_ao); scratch_x = init_array(ioff[BasisSet.num_ao]); scratch_y = init_array(ioff[BasisSet.num_ao]); scratch_z = init_array(ioff[BasisSet.num_ao]); C = UserOptions.origin; if(UserOptions.print_lvl >= PRINT_OEI) fprintf(outfile, " Reference point for ang. mom. ints. = (%5.3f, %5.3f, %5.3f)\n", C.x, C.y, C.z); for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; I = ioffset + ai; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; J = joffset + aj; /*** overlap integrals ***/ Sxy1 = Sxy2 = Sxz1 = Sxz2 = 0.0; /* (a+1x|b+1y) */ Sxy1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a+1x|b-1y) */ if(m2) Sxy2 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); /* (a+1x|b+1z) */ Sxz1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a+1x|b-1z) */ if(n2) Sxz2 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); Syx1 = Syx2 = Syz1 = Syz2 = 0.0; /* (a+1y|b+1x) */ Syx1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a+1y|b-1x) */ if(l2) Syx2 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a+1y|b+1z) */ Syz1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a+1y|b-1z) */ if(n2) Syz2 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); Szx1 = Szx2 = Szy1 = Szy2 = 0.0; /* (a+1z|b+1x) */ Szx1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a+1z|b-1x) */ if(l2) Szx2 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a+1z|b+1y) */ Szy1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a+1z|b-1y) */ if(m2) Szy2 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); S0x1 = S0x2 = S0y1 = S0y2 = S0z1 = S0z2 = 0.0; /* (a|b+1x) */ S0x1 = overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a|b-1x) */ if(l2) S0x2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a|b+1y) */ S0y1 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a|b-1y) */ if(m2) S0y2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); /* (a|b+1z) */ S0z1 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a|b-1z) */ if(n2) S0z2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); /*** moment integrals ***/ muxy1 = muxy2 = muxz1 = muxz2 = 0.0; /* (a|(x-Cx)|b+1y) */ muxy1 = Sxy1 + (A.x - C.x) * S0y1; /* (a|(x-Cx)|b+1z) */ muxz1 = Sxz1 + (A.x - C.x) * S0z1; /* (a|(x-Cx)|b-1y) */ muxy2 = Sxy2 + (A.x - C.x) * S0y2; /* (a|(x-Cx)|b-1z) */ muxz2 = Sxz2 + (A.x - C.x) * S0z2; muyx1 = muyx2 = muyz1 = muyz2 = 0.0; /* (a|(y-Cy)|b+1x) */ muyx1 = Syx1 + (A.y - C.y) * S0x1; /* (a|(y-Cy)|b+1z) */ muyz1 = Syz1 + (A.y - C.y) * S0z1; /* (a|(y-Cy)|b-1x) */ muyx2 = Syx2 + (A.y - C.y) * S0x2; /* (a|(y-Cy)|b-1z) */ muyz2 = Syz2 + (A.y - C.y) * S0z2; muzx1 = muzx2 = muzy1 = muzy2 = 0.0; /* (a|(z-Cz)|b+1x) */ muzx1 = Szx1 + (A.z - C.z) * S0x1; /* (a|(z-Cz)|b+1y) */ muzy1 = Szy1 + (A.z - C.z) * S0y1; /* (a|(z-Cz)|b+1x) */ muzx2 = Szx2 + (A.z - C.z) * S0x2; /* (a|(z-Cz)|b+1y) */ muzy2 = Szy2 + (A.z - C.z) * S0y2; /********** Lx integrals ***********/ /* (a|Lx|b) = 2 a2 * (a|(y-Cy)|b+1z) - B.z * (a|(y-Cy)|b-1z) - 2 a2 * (a|(z-Cz)|b+1y) + B.y * (a|(z-Cz)|b-1y) */ Lx[I][J] += 2.0*a2*muyz1 - n2*muyz2 - 2.0*a2*muzy1 + m2*muzy2; /********** Ly integrals ***********/ /* (a|Ly|b) = 2 a2 * (a|(z-Cz)|b+1x) - B.x * (a|(z-Cz)|b-1x) - 2 a2 * (a|(x-Cx)|b+1z) + B.z * (a|(x-Cx)|b-1z) */ Ly[I][J] += 2.0*a2*muzx1 - l2*muzx2 - 2.0*a2*muxz1 + n2*muxz2; /********** Lz integrals ***********/ /* (a|Lz|b) = 2 a2 * (a|(x-Cx)|b+1y) - B.y * (a|(x-Cx)|b-1y) - 2 a2 * (a|(y-Cy)|b+1x) + B.x * (a|(y-Cy)|b-1x) */ Lz[I][J] += 2.0*a2*muxy1 - m2*muxy2 - 2.0*a2*muyx1 + l2*muyx2; aj++; } } ai++; } } /* done with primitives */ } } /* done with contractions */ /* normalize the contracted integrals */ ptr1 = GTOs.bf_norm[am_i]; ptr2 = GTOs.bf_norm[am_j]; for(i=0; i= PRINT_OEI) { fprintf(outfile, " -AO-Basis LX AngMom Integrals:\n"); print_mat(Lx, BasisSet.num_ao, BasisSet.num_ao, outfile); fprintf(outfile, " -AO-Basis LY AngMom Integrals:\n"); print_mat(Ly, BasisSet.num_ao, BasisSet.num_ao, outfile); fprintf(outfile, " -AO-Basis LZ AngMom Integrals:\n"); print_mat(Lz, BasisSet.num_ao, BasisSet.num_ao, outfile); fprintf(outfile,"\n"); } /* dump the integrals to disk here */ iwl_wrtone(IOUnits.itapOEInt_Misc, PSIF_AO_LX, ioff[BasisSet.num_ao], scratch_x); iwl_wrtone(IOUnits.itapOEInt_Misc, PSIF_AO_LY, ioff[BasisSet.num_ao], scratch_y); iwl_wrtone(IOUnits.itapOEInt_Misc, PSIF_AO_LZ, ioff[BasisSet.num_ao], scratch_z); free(scratch_x); free(scratch_y); free(scratch_z); free_block(Lx); free_block(Ly); free_block(Lz); } /*----------------------------------------------- This computes overlap of 2 primitive gaussians -----------------------------------------------*/ double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB) { int i, j, k, l; int imax, jmax, kmax; int print = 0; double Ix, Iy, Iz; double I; double gam; double AB2; double tval, tval1, tval2 ; double norm_fact ; AB2 = AB.x*AB.x+AB.y*AB.y+AB.z*AB.z; gam = a1+a2; norm_fact = norm1*norm2; tval1 = 2*gam; imax = (l1+l2)/2; Ix = 0.0; for (i = 0; i<= imax; i++){ tval = f_n(i*2, l1, l2, PA.x, PB.x); tval2 = int_pow(tval1, i); Ix += tval*(num_ser[i])/(tval2); } jmax = (m1+m2)/2; Iy = 0.0; for (j = 0; j<= jmax; j++){ tval = f_n(j*2, m1, m2, PA.y, PB.y); tval2 = int_pow(tval1, j); Iy += tval*num_ser[j]/(tval2); } kmax = (n1+n2)/2; Iz = 0.0; for (k = 0; k<= kmax; k++){ tval = f_n(k*2, n1, n2, PA.z, PB.z); tval2 = int_pow(tval1, k); Iz += tval*num_ser[k]/(tval2); } I=exp(-1*a1*a2*AB2/gam)*Ix*Iy*Iz*sqrt(M_PI/gam)*(M_PI/gam); return I*norm_fact; } double f_n(int k, int l1, int l2, double A, double B) { int i, j; double sum = 0.0; double tval; double tmp1, tmp2, tmp3, tmp4 ; for(i=0; i<=l1; i++){ for(j=0; j<=l2; j++){ tmp1 = tmp2 = tmp3 = tmp4 = 0.0 ; if((i+j) == k){ tmp1 = int_pow(A, (l1-i)); tmp2 = int_pow(B, (l2-j)); tmp3 = bc[l1][i]; tmp4 = bc[l2][j]; tval = tmp1 * tmp2 * tmp3 * tmp4 ; sum += tval ; } } } return sum; } double int_pow(double a, int p) { register int i; double b = 1.0; for(i=0; i #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { static double overlap_int(double a1, int l1, int m1, int n1, double norm1, double a2, int l2, int m2, int n2, double norm2, struct coordinates AB, struct coordinates PA, struct coordinates PB); static double f_n(int k, int l1, int l2, double A, double B); static double int_pow(double a, int p); void moment_deriv1(void) { struct coordinates PA, PB, AB, A, B; struct shell_pair *sp; register int i, j, k, l, ii, jj, kk, ll; int si, sj; int ni, nj; int l1, m1, n1, l2, m2, n2; int am_i, am_j; int ai, aj, I, J; int ioffset, joffset; int atom1, atom2; int ax, ay, az, bx, by, bz; /* nuclear coordinate indices */ int coord, ntri, ij; double a1, a2; double ab2, oog, gam; double inorm, jnorm, over_pf; double ***mxderiv, ***myderiv, ***mzderiv; /* Form: mideriv[nuc_coord][ao][ao] */ double value1, value2, value3, value4; double norm1, norm12; double *ptr1, *ptr2; double *scratch; char *label; mxderiv = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); myderiv = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); mzderiv = (double ***) malloc(Molecule.num_atoms * 3 * sizeof(double **)); for(coord=0; coord < Molecule.num_atoms * 3; coord++) { mxderiv[coord] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); myderiv[coord] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); mzderiv[coord] = block_matrix(BasisSet.num_ao, BasisSet.num_ao); } for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; I = ioffset + ai; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; J = joffset + aj; /***************** mu-x derivatives ****************/ /**** A derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_x) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a+1_x|b) */ value2 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(l1) { /* (a-1_x|b+1_x) */ value3 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a-1_x|b) */ value4 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mxderiv[ax][I][J] -= 2.0*a1*(value1 + B.x*value2) - l1 * (value3 + B.x*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_x) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a+1_y|b) */ value2 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(m1) { /* (a-1_y|b+1_x) */ value3 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a-1_y|b) */ value4 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mxderiv[ay][I][J] -= 2.0*a1*(value1 + B.x*value2) - m1 * (value3 + B.x*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_x) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a+1_z|b) */ value2 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(n1) { /* (a-1_z|b+1_x) */ value3 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a-1_z|b) */ value4 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mxderiv[az][I][J] -= 2.0*a1*(value1 + B.x*value2) - n1 * (value3 + B.x*value4); /**** B derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_x) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a|b+1_x) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if(l2) { /* (a+1_x|b-1_x) */ value3 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a|b-1_x) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); } mxderiv[bx][I][J] -= 2.0*a2*(value1 + A.x*value2) - l2 * (value3 + A.x*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_y) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a|b+1_y) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if(m2) { /* (a+1_x|b-1_y) */ value3 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); /* (a|b-1_y) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); } mxderiv[by][I][J] -= 2.0*a2*(value1 + A.x*value2) - m2 * (value3 + A.x*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_z) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a|b+1_z) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if(n2) { /* (a+1_x|b-1_z) */ value3 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); /* (a|b-1_z) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); } mxderiv[bz][I][J] -= 2.0*a2*(value1 + A.x*value2) - n2 * (value3 + A.x*value4); /***************** mu-y derivatives ****************/ /**** A derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_y) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a+1_x|b) */ value2 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(l1) { /* (a-1_x|b+1_y) */ value3 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a-1_x|b) */ value4 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } myderiv[ax][I][J] -= 2.0*a1*(value1 + B.y*value2) - l1 * (value3 + B.y*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_y) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a+1_y|b) */ value2 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(m1) { /* (a-1_y|b+1_y) */ value3 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a-1_y|b) */ value4 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } myderiv[ay][I][J] -= 2.0*a1*(value1 + B.y*value2) - m1 * (value3 + B.y*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_y) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a+1_z|b) */ value2 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(n1) { /* (a-1_z|b+1_y) */ value3 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a-1_z|b) */ value4 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } myderiv[az][I][J] -= 2.0*a1*(value1 + B.y*value2) - n1 * (value3 + B.y*value4); /**** B derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_x) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a|b+1_x) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if(l2) { /* (a+1_y|b-1_x) */ value3 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a|b-1_x) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); } myderiv[bx][I][J] -= 2.0*a2*(value1 + A.y*value2) - l2 * (value3 + A.y*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_y) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a|b+1_y) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if(m2) { /* (a+1_y|b-1_y) */ value3 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); /* (a|b-1_y) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); } myderiv[by][I][J] -= 2.0*a2*(value1 + A.y*value2) - m2 * (value3 + A.y*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_z) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a|b+1_z) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if(n2) { /* (a+1_y|b-1_z) */ value3 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); /* (a|b-1_z) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); } myderiv[bz][I][J] -= 2.0*a2*(value1 + A.y*value2) - n2 * (value3 + A.y*value4); /***************** mu-z derivatives ****************/ /**** A derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_x|b+1_z) */ value1 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a+1_x|b) */ value2 = overlap_int(a1, l1+1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(l1) { /* (a-1_x|b+1_z) */ value3 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a-1_x|b) */ value4 = overlap_int(a1, l1-1, m1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mzderiv[ax][I][J] -= 2.0*a1*(value1 + B.z*value2) - l1 * (value3 + B.z*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_y|b+1_z) */ value1 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a+1_y|b) */ value2 = overlap_int(a1, l1, m1+1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(m1) { /* (a-1_y|b+1_z) */ value3 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a-1_y|b) */ value4 = overlap_int(a1, l1, m1-1, n1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mzderiv[ay][I][J] -= 2.0*a1*(value1 + B.z*value2) - m1 * (value3 + B.z*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_z) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a+1_z|b) */ value2 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); if(n1) { /* (a-1_z|b+1_z) */ value3 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a-1_z|b) */ value4 = overlap_int(a1, l1, m1, n1-1, inorm, a2, l2, m2, n2, jnorm, AB, PA, PB); } mzderiv[az][I][J] -= 2.0*a1*(value1 + B.z*value2) - n1 * (value3 + B.z*value4); /**** B derivatives ****/ value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_x) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); /* (a|b+1_x) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2+1, m2, n2, jnorm, AB, PA, PB); if(l2) { /* (a+1_z|b-1_x) */ value3 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); /* (a|b-1_x) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2-1, m2, n2, jnorm, AB, PA, PB); } mzderiv[bx][I][J] -= 2.0*a2*(value1 + A.z*value2) - l2 * (value3 + A.z*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_y) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); /* (a|b+1_y) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2+1, n2, jnorm, AB, PA, PB); if(m2) { /* (a+1_z|b-1_y) */ value3 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); /* (a|b-1_y) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2-1, n2, jnorm, AB, PA, PB); } mzderiv[by][I][J] -= 2.0*a2*(value1 + A.z*value2) - m2 * (value3 + A.z*value4); value1 = value2 = value3 = value4 = 0.0; /* (a+1_z|b+1_z) */ value1 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); /* (a|b+1_z) */ value2 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2+1, jnorm, AB, PA, PB); if(n2) { /* (a+1_z|b-1_z) */ value3 = overlap_int(a1, l1, m1, n1+1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); /* (a|b-1_z) */ value4 = overlap_int(a1, l1, m1, n1, inorm, a2, l2, m2, n2-1, jnorm, AB, PA, PB); } mzderiv[bz][I][J] -= 2.0*a2*(value1 + A.z*value2) - n2 * (value3 + A.z*value4); aj++; } } ai++; } } /* done with primitives */ } } /* done with contractions */ /* normalize the contracted integrals */ ptr1 = GTOs.bf_norm[am_i]; ptr2 = GTOs.bf_norm[am_j]; for(i=0; i #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"oe_osrr.h" namespace psi { namespace CINTS { /*!--------------------------------------------------------------------------- This function computes AO overlap, dipole and quadrupole moment integrals, and nabla integrals and writes them out to disk ---------------------------------------------------------------------------*/ void moment_ints() { struct coordinates PA, PB, AB, A, B; struct shell_pair *sp; struct unique_shell_pair *usp; register int i, j, k, l, ii, jj, kk, ll; int count; int si, sj; int np_i, np_j; int sz; int l1, l2, m1, m2, n1, n2; int ioffset, joffset ; int ij; int h1; int am; int dimension ; int ni,nj,ai,aj; int am_i, am_j; double a1, a2; double ab2, oog, gam; double x00, y00, z00; double x10, y10, z10; double x01, y01, z01; double x11, y11, z11; double nx, ny, nz; double **stemp, **mxtemp, **mytemp, **mztemp, **qxxtemp, **qxytemp, **qxztemp, **qyytemp, **qyztemp, **qzztemp, **nxtemp, **nytemp, **nztemp, **temp, **tmp_dptr; double *S, *MX, *MY, *MZ, *QXX, *QXY, *QXZ, *QYY, *QYZ, *QZZ, *NX, *NY, *NZ; double inorm, jnorm, over_pf; double *ptr1, *ptr2, norm1, norm12; double **OIX, **OIY, **OIZ; struct coordinates C; /*--- allocate room for the one-e matrices ---*/ dimension = ioff[BasisSet.num_ao]; S = init_array(dimension); MX = init_array(dimension); MY = init_array(dimension); MZ = init_array(dimension); QXX = init_array(dimension); QXY = init_array(dimension); QXZ = init_array(dimension); QYY = init_array(dimension); QYZ = init_array(dimension); QZZ = init_array(dimension); NX = init_array(dimension); NY = init_array(dimension); NZ = init_array(dimension); /*--- allocate storage for shell blocks of one electron integrals ---*/ dimension = ioff[BasisSet.max_am]; stemp = block_matrix(dimension,dimension); mxtemp = block_matrix(dimension,dimension); mytemp = block_matrix(dimension,dimension); mztemp = block_matrix(dimension,dimension); qxxtemp = block_matrix(dimension,dimension); qxytemp = block_matrix(dimension,dimension); qxztemp = block_matrix(dimension,dimension); qyytemp = block_matrix(dimension,dimension); qyztemp = block_matrix(dimension,dimension); qzztemp = block_matrix(dimension,dimension); nxtemp = block_matrix(dimension,dimension); nytemp = block_matrix(dimension,dimension); nztemp = block_matrix(dimension,dimension); /* Note the "+1" -- we are computing dipole and quadrupole moment integrals here */ OIX = block_matrix(BasisSet.max_am+1,BasisSet.max_am+1); OIY = block_matrix(BasisSet.max_am+1,BasisSet.max_am+1); OIZ = block_matrix(BasisSet.max_am+1,BasisSet.max_am+1); C = UserOptions.origin; if(UserOptions.print_lvl >= PRINT_OEI) fprintf(outfile, " Reference point for elec. mom. ints. = (%5.3f, %5.3f, %5.3f)\n", C.x, C.y, C.z); for (si=0; siAB[0]; AB.y = sp->AB[1]; AB.z = sp->AB[2]; ab2 = AB.x * AB.x; ab2 += AB.y * AB.y; ab2 += AB.z * AB.z; /*--- zero the temporary storage for accumulating contractions ---*/ memset(stemp[0],0,sizeof(double)*dimension*dimension); memset(mxtemp[0],0,sizeof(double)*dimension*dimension); memset(mytemp[0],0,sizeof(double)*dimension*dimension); memset(mztemp[0],0,sizeof(double)*dimension*dimension); memset(qxxtemp[0],0,sizeof(double)*dimension*dimension); memset(qxytemp[0],0,sizeof(double)*dimension*dimension); memset(qxztemp[0],0,sizeof(double)*dimension*dimension); memset(qyytemp[0],0,sizeof(double)*dimension*dimension); memset(qyztemp[0],0,sizeof(double)*dimension*dimension); memset(qzztemp[0],0,sizeof(double)*dimension*dimension); memset(nxtemp[0],0,sizeof(double)*dimension*dimension); memset(nytemp[0],0,sizeof(double)*dimension*dimension); memset(nztemp[0],0,sizeof(double)*dimension*dimension); /*--- contract by primitives here ---*/ for (i = 0; i < BasisSet.shells[si].n_prims; i++) { a1 = sp->a1[i]; inorm = sp->inorm[i]; for (j = 0; j < BasisSet.shells[sj].n_prims; j++) { a2 = sp->a2[j]; gam = sp->gamma[i][j]; jnorm = sp->jnorm[j]; PA.x = sp->PA[i][j][0]; PA.y = sp->PA[i][j][1]; PA.z = sp->PA[i][j][2]; PB.x = sp->PB[i][j][0]; PB.y = sp->PB[i][j][1]; PB.z = sp->PB[i][j][2]; oog = 1.0/gam; over_pf = exp(-a1*a2*ab2*oog)*sqrt(M_PI*oog)*M_PI*oog*inorm*jnorm; OI_OSrecurs(OIX,OIY,OIZ,PA,PB,gam,am_i+1,am_j+1); /*--- create all am components of si ---*/ ai = 0; for(ii = 0; ii <= am_i; ii++){ l1 = am_i - ii; for(jj = 0; jj <= ii; jj++){ m1 = ii - jj; n1 = jj; /*--- create all am components of sj ---*/ aj = 0; for(kk = 0; kk <= am_j; kk++){ l2 = am_j - kk; for(ll = 0; ll <= kk; ll++){ m2 = kk - ll; n2 = ll; x00 = OIX[l1][l2]; y00 = OIY[m1][m2]; z00 = OIZ[n1][n2]; x01 = OIX[l1][l2+1]; y01 = OIY[m1][m2+1]; z01 = OIZ[n1][n2+1]; x10 = OIX[l1+1][l2]; y10 = OIY[m1+1][m2]; z10 = OIZ[n1+1][n2]; x11 = OIX[l1+1][l2+1]; y11 = OIY[m1+1][m2+1]; z11 = OIZ[n1+1][n2+1]; stemp[ai][aj] += over_pf*x00*y00*z00; /*--- electrons have negative charge ---*/ mxtemp[ai][aj] -= over_pf*(x01+x00*(B.x-C.x))*y00*z00; mytemp[ai][aj] -= over_pf*x00*(y01+y00*(B.y-C.y))*z00; mztemp[ai][aj] -= over_pf*x00*y00*(z01+z00*(B.z-C.z)); qxxtemp[ai][aj] -= over_pf*(x11 + x10*(B.x-C.x) + x01*(A.x-C.x) + x00*(A.x-C.x)*(B.x-C.x))*y00*z00; qyytemp[ai][aj] -= over_pf*(y11 + y10*(B.y-C.y) + y01*(A.y-C.y) + y00*(A.y-C.y)*(B.y-C.y))*x00*z00; qzztemp[ai][aj] -= over_pf*(z11 + z10*(B.z-C.z) + z01*(A.z-C.z) + z00*(A.z-C.z)*(B.z-C.z))*x00*y00; qxytemp[ai][aj] -= over_pf*(x01+x00*(B.x-C.x))*(y01+y00*(B.y-C.y))*z00; qxztemp[ai][aj] -= over_pf*(x01+x00*(B.x-C.x))*y00*(z01+z00*(B.z-C.z)); qyztemp[ai][aj] -= over_pf*x00*(y01+y00*(B.y-C.y))*(z01+z00*(B.z-C.z)); nx = -2.0*a2*x01; if (l2 >= 1) nx += l2*OIX[l1][l2-1]; nxtemp[ai][aj] += nx*y00*z00*over_pf; ny = -2.0*a2*y01; if (m2 >= 1) ny += m2*OIY[m1][m2-1]; nytemp[ai][aj] += x00*ny*z00*over_pf; nz = -2.0*a2*z01; if (n2 >= 1) nz += n2*OIZ[n1][n2-1]; nztemp[ai][aj] += x00*y00*nz*over_pf; aj++; } } ai++; } } /*--- end cartesian components for (si,sj) with primitives (i,j) ---*/ } } /*--- end primitive contraction ---*/ /*--- Normalize the contracted integrals ---*/ ptr1 = GTOs.bf_norm[am_i]; ptr2 = GTOs.bf_norm[am_j]; for(i=0; i= PRINT_OEI) { fprintf(outfile," -Overlap AO integrals:\n\n"); print_array(S,BasisSet.num_ao,outfile); fprintf(outfile," -mu(x) AO integrals:\n\n"); print_array(MX,BasisSet.num_ao,outfile); fprintf(outfile," -mu(y) AO integrals:\n\n"); print_array(MY,BasisSet.num_ao,outfile); fprintf(outfile," -mu(z) AO integrals:\n\n"); print_array(MZ,BasisSet.num_ao,outfile); fprintf(outfile," -q(xx) AO integrals:\n\n"); print_array(QXX,BasisSet.num_ao,outfile); fprintf(outfile," -q(xy) AO integrals:\n\n"); print_array(QXY,BasisSet.num_ao,outfile); fprintf(outfile," -q(xz) AO integrals:\n\n"); print_array(QXZ,BasisSet.num_ao,outfile); fprintf(outfile," -q(yy) AO integrals:\n\n"); print_array(QYY,BasisSet.num_ao,outfile); fprintf(outfile," -q(yz) AO integrals:\n\n"); print_array(QYZ,BasisSet.num_ao,outfile); fprintf(outfile," -q(zz) AO integrals:\n\n"); print_array(QZZ,BasisSet.num_ao,outfile); fprintf(outfile," -Nabla_x AO integrals:\n\n"); print_array(NX,BasisSet.num_ao,outfile); fprintf(outfile," -Nabla_y AO integrals:\n\n"); print_array(NY,BasisSet.num_ao,outfile); fprintf(outfile," -Nabla_z AO integrals:\n\n"); print_array(NZ,BasisSet.num_ao,outfile); fprintf(outfile,"\n"); } free_block(stemp); free_block(mxtemp); free_block(mytemp); free_block(mztemp); free_block(qxxtemp); free_block(qxytemp); free_block(qxztemp); free_block(qyytemp); free_block(qyztemp); free_block(qzztemp); free_block(nxtemp); free_block(nytemp); free_block(nztemp); free(S); free(MX); free(MY); free(MZ); free(QXX); free(QXY); free(QXZ); free(QYY); free(QYZ); free(QZZ); free(NX); free(NY); free(NZ); return; } } } psi3/src/bin/cints/OEProp_Ints/moment_ints.h0000644000101500007650000000031710754663017017540 0ustar crawdad#ifndef _psi_src_bin_cints_OEProp_Ints_moment_ints_h #define _psi_src_bin_cints_OEProp_Ints_moment_ints_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void moment_ints(void); }} #endif psi3/src/bin/cints/OEProp_Ints/oeprop_ints.cc0000644000101500007650000000062110754663017017701 0ustar crawdad/*! \file \ingroup CINTS \brief Enter brief description of file here */ #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"moment_ints.h" #include"moment_deriv1.h" #include"angmom_ints.h" namespace psi { namespace CINTS { void oeprop_ints() { moment_ints(); moment_deriv1(); angmom_ints(); return; } };}; psi3/src/bin/cints/OEProp_Ints/oeprop_ints.h0000644000101500007650000000031310754663017017541 0ustar crawdad#ifndef _psi_src_bin_cints_OEProp_Ints_oeprop_ints_h #define _psi_src_bin_cints_OEProp_Ints_oeprop_ints_h /*! \file \ingroup CINTS */namespace psi { namespace CINTS { void oeprop_ints(); }} #endif psi3/src/bin/cints/parsing.cc0000644000101500007650000003432610770512553014647 0ustar crawdad/*! \file \ingroup CINTS \brief Parse the input file and command line for CINTS specific options. */ #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #ifdef INCLUDE_Fock #include"scf_parsing.h" #endif namespace psi { namespace CINTS { //! Main parsing routine for input. void parsing() { int errcod; int cutoff_exp; long int max_bytes; UserOptions.print_lvl = 1; errcod = ip_data("PRINT","%d",&(UserOptions.print_lvl),0); /*--- This piece of code from CPHF by Ed Seidl ---*/ if (ip_exist("MEMORY", 0)) { fndcor(&max_bytes, infile, outfile); UserOptions.max_memory = max_bytes / sizeof(double); } else UserOptions.max_memory = MAX_NUM_DOUBLES; UserOptions.memory = UserOptions.max_memory; cutoff_exp = CUTOFF; errcod = ip_data("CUTOFF","%d",&cutoff_exp,0); UserOptions.cutoff = 1.0/pow(10.0,(double)cutoff_exp); UserOptions.fine_structure_alpha = 1.0; errcod = ip_data("FINE_STRUCTURE_ALPHA","%lf",&(UserOptions.fine_structure_alpha),0); UserOptions.make_oei = 1; UserOptions.make_fock = 0; UserOptions.make_eri = 1; UserOptions.symm_ints = 1; errcod = ip_boolean("MAKE_ERI",&(UserOptions.make_eri),0); errcod = ip_data("S_FILE","%d",&(IOUnits.itapS),0); errcod = ip_data("T_FILE","%d",&(IOUnits.itapT),0); errcod = ip_data("V_FILE","%d",&(IOUnits.itapV),0); if (UserOptions.make_eri) errcod = ip_data("ERI_FILE","%d",&(IOUnits.itap33),0); UserOptions.empirical_dispersion = 0; errcod = ip_boolean("EMPIRICAL_DISPERSION", &UserOptions.empirical_dispersion, 0); UserOptions.scf_only = 0; errcod = ip_string("WFN",&UserOptions.wfn,0); if (UserOptions.wfn == NULL) throw std::domain_error("Keyword WFN is missing"); if ((!strcmp("SCF",UserOptions.wfn)) || (!strcmp("SCF_MVD",UserOptions.wfn))) UserOptions.scf_only = 1; UserOptions.num_threads = 1; errcod = ip_data("NUM_THREADS","%d",&(UserOptions.num_threads),0); if (UserOptions.num_threads < 1) UserOptions.num_threads = 1; UserOptions.restart = 0; errcod = ip_boolean("RESTART",&UserOptions.restart,0); if (UserOptions.restart) { errcod = ip_data("RESTART_TASK","%d",&UserOptions.restart_task,0); if (UserOptions.restart_task < 0) throw std::domain_error("RESTART_TASK < 0"); } std::vector temp(3); errcod = ip_double_array("ORIGIN", &temp[0], 3); if(errcod == IPE_OK) { UserOptions.origin.x = temp[0]; UserOptions.origin.y = temp[1]; UserOptions.origin.z = temp[2]; } else { UserOptions.origin.x = 0; UserOptions.origin.y = 0; UserOptions.origin.z = 0; } UserOptions.origin.Z_nuc = 0; UserOptions.E_given = false; if (ip_exist("EFIELD",0)) { UserOptions.E_given = true; errcod = ip_double_array("EFIELD", UserOptions.E, 3); if(errcod != IPE_OK) throw std::runtime_error("Could not read EFIELD"); else { // if the field is specified also need to query the frame char* frame; errcod = ip_string("EFIELD_FRAME",&frame,0); if (errcod == IPE_OK) { if (!strcmp(frame,"CANONICAL")) UserOptions.E_frame = canonical; else if (!strcmp(frame,"REFERENCE")) UserOptions.E_frame = reference; else throw std::invalid_argument("Invalid value for keyword EFIELD_FRAME"); free(frame); } else { UserOptions.E_frame = canonical; } } } return; } //! Parses the command line for options. void parsing_cmdline(int argc, char *argv[]) { int i, errcod; char *refstring; for (i=1; i #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"r12_quartet_data.h" #include"iwl_tebuf.h" #include"norm_quartet.h" #include"int_fjt.h" namespace psi { namespace CINTS { void r12_te_ints() { const double toler = UserOptions.cutoff; /*--- ASCII file to print integrals ---*/ FILE *teout[NUM_TE_TYPES]; char teout_filename[] = "teout0.dat"; /*--- Various data structures ---*/ struct iwlbuf TEOUT[NUM_TE_TYPES-1]; /* IWL buffer for target integrals */ int itapTE[NUM_TE_TYPES-1]; struct coordinates ericent[4]; /* coordinates of centers A, B, C, and D */ struct tebuf *tot_data[NUM_TE_TYPES]; /* accum. for contracted integrals */ struct shell_pair *sp_ij, *sp_kl; struct unique_shell_pair *usp_ij,*usp_kl; Libr12_t Libr12; double_array_t fjt_table; static char *te_operator[] = { "1/r12", "r12", "[r12,T1]" }; int total_te_count[NUM_TE_TYPES] = {0, 0, 0, 0}; int ij, kl, ik, jl, ijkl; int ioffset, joffset, koffset, loffset; int count ; int dum; int te_type; int n, num[NUM_TE_TYPES]; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; register int i, j, k, l, ii, jj, kk, ll; register int si, sj, sk, sl ; register int sii, sjj, skk, sll , slll; register int pi, pj, pk, pl ; register int pii, pjj, pkk, pll ; int upk, num_unique_pk; int usi_arr[3], usj_arr[3], usk_arr[3], usl_arr[3]; int *sj_arr, *sk_arr, *sl_arr; int *sj_fbf_arr, *sk_fbf_arr, *sl_fbf_arr; int usii,usjj,uskk,usll,usi,usj,usk,usl; int stab_i,stab_j,stab_k,stab_l,stab_ij,stab_kl; int *R_list, *S_list, *T_list; int R,S,T; int dcr_ij, dcr_kl, dcr_ijkl; int lambda_T = 1; int num_unique_quartets; int plquartet; int max_num_unique_quartets; int max_num_prim_comb; int class_size; int max_class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int so_ii, so_jj, so_kk, so_ll; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p; double so_int[NUM_TE_TYPES]; double AB2, CD2; double *data[NUM_TE_TYPES]; double *puream_data[NUM_TE_TYPES]; double **plist_data[NUM_TE_TYPES]; double pkblock_end_value = 0.0; double value; double temp; double ssss, ss_r12_ss; /*--------------- Initialization ---------------*/ #if PRINT for(te_type=0;te_typepuream transformation ---*/ for(te_type=0;te_type 1) { if (BasisSet.puream) max_class_size = (2*BasisSet.max_am-1)*(2*BasisSet.max_am-1)*(2*BasisSet.max_am-1)*(2*BasisSet.max_am-1); else max_class_size = max_cart_class_size; for(te_type=0;te_type BasisSet.shells[Symmetry.us2s[usk]].am + BasisSet.shells[Symmetry.us2s[usl]].am){ dum = usi; usi = usk; usk = dum; dum = usj; usj = usl; usl = dum; } si = Symmetry.us2s[usi]; sjj = Symmetry.us2s[usj]; skk = Symmetry.us2s[usk]; sll = Symmetry.us2s[usl]; if (Symmetry.nirreps > 1) { /*--- Non-C1 symmetry case ---*/ /*--- Generate the petite list of shell quadruplets using DCD approach of Davidson ---*/ usp_ij = &(Symmetry.us_pairs[usi][usj]); usp_kl = &(Symmetry.us_pairs[usk][usl]); stab_i = Symmetry.atom_positions[BasisSet.shells[si].center-1]; stab_j = Symmetry.atom_positions[BasisSet.shells[sjj].center-1]; stab_k = Symmetry.atom_positions[BasisSet.shells[skk].center-1]; stab_l = Symmetry.atom_positions[BasisSet.shells[sll].center-1]; stab_ij = Symmetry.GnG[stab_i][stab_j]; stab_kl = Symmetry.GnG[stab_k][stab_l]; R_list = Symmetry.dcr[stab_i][stab_j]; S_list = Symmetry.dcr[stab_k][stab_l]; T_list = Symmetry.dcr[stab_ij][stab_kl]; lambda_T = Symmetry.nirreps/Symmetry.dcr_deg[stab_ij][stab_kl]; ni = (BasisSet.puream ? 2*BasisSet.shells[si].am - 1 : ioff[BasisSet.shells[si].am]); nj = (BasisSet.puream ? 2*BasisSet.shells[sjj].am - 1 : ioff[BasisSet.shells[sjj].am]); nk = (BasisSet.puream ? 2*BasisSet.shells[skk].am - 1 : ioff[BasisSet.shells[skk].am]); nl = (BasisSet.puream ? 2*BasisSet.shells[sll].am - 1 : ioff[BasisSet.shells[sll].am]); class_size = ni*nj*nk*nl; memset(sj_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_arr,0,sizeof(int)*max_num_unique_quartets); memset(sj_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sk_fbf_arr,0,sizeof(int)*max_num_unique_quartets); memset(sl_fbf_arr,0,sizeof(int)*max_num_unique_quartets); count = 0; for(dcr_ij=0;dcr_ijAB[0]; Libr12.ShellQuartet.AB[1] = sp_ij->AB[1]; Libr12.ShellQuartet.AB[2] = sp_ij->AB[2]; Libr12.ShellQuartet.CD[0] = sp_kl->AB[0]; Libr12.ShellQuartet.CD[1] = sp_kl->AB[1]; Libr12.ShellQuartet.CD[2] = sp_kl->AB[2]; Libr12.ShellQuartet.AC[0] = Molecule.centers[BasisSet.shells[si].center-1].x- Molecule.centers[BasisSet.shells[sk].center-1].x; Libr12.ShellQuartet.AC[1] = Molecule.centers[BasisSet.shells[si].center-1].y- Molecule.centers[BasisSet.shells[sk].center-1].y; Libr12.ShellQuartet.AC[2] = Molecule.centers[BasisSet.shells[si].center-1].z- Molecule.centers[BasisSet.shells[sk].center-1].z; Libr12.ShellQuartet.ABdotAC = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AC[2]; Libr12.ShellQuartet.CDdotCA = -1.0*(Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.AC[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.AC[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.AC[2]); AB2 = Libr12.ShellQuartet.AB[0]*Libr12.ShellQuartet.AB[0]+ Libr12.ShellQuartet.AB[1]*Libr12.ShellQuartet.AB[1]+ Libr12.ShellQuartet.AB[2]*Libr12.ShellQuartet.AB[2]; CD2 = Libr12.ShellQuartet.CD[0]*Libr12.ShellQuartet.CD[0]+ Libr12.ShellQuartet.CD[1]*Libr12.ShellQuartet.CD[1]+ Libr12.ShellQuartet.CD[2]*Libr12.ShellQuartet.CD[2]; /*-------------------------------- contract by primitives out here --------------------------------*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) for (pj = 0; pj < np_j; pj++) for (pk = 0; pk < np_k; pk++) for (pl = 0; pl < np_l; pl++){ r12_quartet_data(&(Libr12.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, lambda_T); } if (am) { build_r12_grt[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libr12, num_prim_comb); /*--- copy transformed data to plist_data to be used in the symmetrization step ---*/ if (Symmetry.nirreps > 1) for(te_type=0;te_type 1) { plist_data[0][plquartet][0] = ssss; plist_data[1][plquartet][0] = ss_r12_ss; plist_data[2][plquartet][0] = Libr12.te_ptr[2][0]; plist_data[3][plquartet][0] = Libr12.te_ptr[3][0]; } else { /*-------------------------------------------------------- This was so freaking careless on my part. I forgot that in hrr_grt_order_0000 te_ptr[2] and te_ptr[3] point to int_stack[1] and int_stack[0] respectively. Therefore I have to copy these into int_stack[2] and int_stack[3] first before copying ssss and ss_r12_ss into those locations. --------------------------------------------------------*/ Libr12.int_stack[2] = Libr12.te_ptr[2][0]; Libr12.int_stack[3] = Libr12.te_ptr[3][0]; Libr12.int_stack[0] = ssss; Libr12.int_stack[1] = ss_r12_ss; data[0] = Libr12.int_stack; data[1] = Libr12.int_stack+1; data[2] = Libr12.int_stack+2; data[3] = Libr12.int_stack+3; } } } /* end of computing "petit" list */ memset(num,0,NUM_TE_TYPES*sizeof(int)); if (Symmetry.nirreps > 1) { /*--- Non-C1 case ---*/ /*------------------------------------------------------------------------ Now we have everything to build SO's. Need to distinguish several cases that are slightly different from each other. To avoid extra if's inside the loops I separated them: 1) usi == usj == usk == usl 2) usi == usj != usk == usl 3) usi == usk != usj == usl 4) usi == usj 5) usk == usl 6) general case "Symmetrization" is based on Pitzer's equal contribution theorem. The general procedure is as follows: 1) loop over irreps, if there are any SO products that arise from this usp_ij pair and belong to this irrep, loop over them (ij) 2) from ij figure out product of which SOs this is, and what AOs (or should I say, basis functions) contribute to these SO. so_i and so_j are absolute indices, but i and j are relative indices (i and j are indices of cart/puream components in usi and usj) 3) if there are any products of SOs from usp_kl that belong to irrep, loop over those (kl). Obviously, the whole point of introducing restrictions on different cases was to improve efficiency, but now it seems like a stupid idea. I should have left just one loop case. For more comments see Default_Ints/te_ints.c ------------------------------------------------------------------------*/ bf_i = BasisSet.shells[si].fbf-1; if (usi == usj && usi == usk && usi == usl || usi == usk && usj == usl) for(irrep=0;irrepSOpair_npi[irrep]) for(ij=0;ijSOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; i = usp_ij->SOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;kl<=ij;kl++) { so_k = usp_kl->SOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; k = usp_kl->SOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; index = ind_offset + k*nl + l; memset(so_int,0,NUM_TE_TYPES*sizeof(double)); for(s=0;stoler) { so_ii = so_i; so_jj = so_j; so_kk = so_k; so_ll = so_l; if (so_ii < so_jj) { SWAP(so_ii,so_jj); if (te_type == 2) /* [r12,T1] is antisymmetric WRT i and j */ so_int[te_type] *= -1.0; } if (so_kk < so_ll) { SWAP(so_kk,so_ll); if (te_type == 3) /* [r12,T2] is antisymmetric WRT to k and l */ so_int[te_type] *= -1.0; } if ((so_ii < so_kk) || (so_ii == so_kk && so_jj < so_ll)) { if (te_type < 2) { /* only eri and r12 ints have bra-ket symmetry */ SWAP(so_ii,so_kk); SWAP(so_jj,so_ll); } } tot_data[te_type][num[te_type]].i = (short int) so_ii; tot_data[te_type][num[te_type]].j = (short int) so_jj; tot_data[te_type][num[te_type]].k = (short int) so_kk; tot_data[te_type][num[te_type]].l = (short int) so_ll; tot_data[te_type][num[te_type]].val = so_int[te_type]; num[te_type]++; } } } } else for(irrep=0;irrepSOpair_npi[irrep]) && (npi_kl = usp_kl->SOpair_npi[irrep])) for(ij=0;ijSOpair_bf_i[irrep][ij]; j = usp_ij->SOpair_bf_j[irrep][ij]; so_i = usp_ij->SOpair_so_i[irrep][ij]; so_j = usp_ij->SOpair_so_j[irrep][ij]; ind_offset = (i*nj + j)*nk*nl; for(kl=0;klSOpair_bf_i[irrep][kl]; l = usp_kl->SOpair_bf_j[irrep][kl]; so_k = usp_kl->SOpair_so_i[irrep][kl]; so_l = usp_kl->SOpair_so_j[irrep][kl]; index = ind_offset + k*nl + l; memset(so_int,0,NUM_TE_TYPES*sizeof(double)); for(s=0;stoler) { so_ii = so_i; so_jj = so_j; so_kk = so_k; so_ll = so_l; if (so_ii < so_jj) { SWAP(so_ii,so_jj); if (te_type == 2) /* [r12,T1] is antisymmetric WRT i and j */ so_int[te_type] *= -1.0; } if (so_kk < so_ll) { SWAP(so_kk,so_ll); if (te_type == 3) /* [r12,T2] is antisymmetric WRT to k and l */ so_int[te_type] *= -1.0; } if ((so_ii < so_kk) || (so_ii == so_kk && so_jj < so_ll)) { if (te_type < 2) { /* only eri and r12 ints have bra-ket symmetry */ SWAP(so_ii,so_kk); SWAP(so_jj,so_ll); } } tot_data[te_type][num[te_type]].i = (short int) so_ii; tot_data[te_type][num[te_type]].j = (short int) so_jj; tot_data[te_type][num[te_type]].k = (short int) so_kk; tot_data[te_type][num[te_type]].l = (short int) so_ll; tot_data[te_type][num[te_type]].val = so_int[te_type]; num[te_type]++; } } } } } else { /*--- C1 symmetry ---*/ /*--- Here just put non-redundant integrals to tot_data ---*/ if(usi==usj&&usk==usl&&usi==usk) { /*--- All shells are the same - the (aa|aa) case ---*/ iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = ii; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : kk ; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); for(te_type=0;te_typetoler){ tot_data[te_type][num[te_type]].i = (short int) (ii+ioffset); tot_data[te_type][num[te_type]].j = (short int) (jj+joffset); tot_data[te_type][num[te_type]].k = (short int) (kk+koffset); tot_data[te_type][num[te_type]].l = (short int) (ll+loffset); tot_data[te_type][num[te_type]].val = data[te_type][index]; num[te_type]++; } } } } } } else if(usi==usk && usj==usl){ /*--- The (ab|ab) case ---*/ iimax = ni - 1; for(ii=0; ii <= iimax; ii++){ jjmax = nj - 1; for(jj=0; jj <= jjmax; jj++){ kkmax = ii; for(kk=0; kk <= kkmax; kk++){ llmax = (kk==ii)? jj : nl - 1; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); for(te_type=0;te_typetoler){ i = ii + ioffset; j = jj + joffset; k = kk + koffset; l = ll + loffset; value = data[te_type][index]; if (i < j) { SWAP(i,j); SWAP(k,l); if (te_type > 1) /* [r12,Ti] are antisymmetric WRT to i -> j, k -> l */ value *= -1.0; } if (i < k) { if (te_type < 2) { /* only eri and r12 ints have bra-ket symmetry */ SWAP(i,k); SWAP(j,l); } } tot_data[te_type][num[te_type]].i = (short int) i; tot_data[te_type][num[te_type]].j = (short int) j; tot_data[te_type][num[te_type]].k = (short int) k; tot_data[te_type][num[te_type]].l = (short int) l; tot_data[te_type][num[te_type]].val = value; num[te_type]++; } } } } } } else { /*--- The (ab|cd) case ---*/ iimax = ni - 1; kkmax = nk - 1; for(ii=0; ii <= iimax; ii++){ jjmax = (usi==usj) ? ii : nj - 1; for(jj=0; jj <= jjmax; jj++){ for(kk=0; kk <= kkmax; kk++){ llmax = (usk==usl) ? kk : nl - 1; for(ll=0; ll <= llmax; ll++){ index = ll+nl*(kk+nk*(jj+nj*ii)); for(te_type=0;te_typetoler){ i = ii + ioffset; j = jj + joffset; k = kk + koffset; l = ll + loffset; value = data[te_type][index]; if (i < j) { SWAP(i,j); if (te_type == 2) /* [r12,T1] is antisymmetric WRT i and j */ value *= -1.0; } if (k < l) { SWAP(k,l); if (te_type == 3) /* [r12,T2] is antisymmetric WRT k and l */ value *= -1.0; } if ((i < k) || (i == k && j < l)) { if (te_type < 2) { /* only eri and r12 ints have bra-ket symmetry */ SWAP(i,k); SWAP(j,l); } } tot_data[te_type][num[te_type]].i = (short int) i; tot_data[te_type][num[te_type]].j = (short int) j; tot_data[te_type][num[te_type]].k = (short int) k; tot_data[te_type][num[te_type]].l = (short int) l; tot_data[te_type][num[te_type]].val = value; num[te_type]++; } } } } } } } /*--------------- Write out ERIs ---------------*/ if (num[0]) { /* Let's see if we need to write out something */ total_te_count[0] += num[0]; if (upk == num_unique_pk - 1) /* if this is the last quartet needed for a pk-block - let CSCF know by setting index i of the last integral to negative of itself. The only guy where this trick won't work will be (00|00). But normally (00|00) is of (ss|ss) type and is enough for computing one pk-matrix element. PK-buffer won't get overfull because of this one guy */ tot_data[0][num[0]-1].i = -tot_data[0][num[0]-1].i; iwl_buf_wrt_struct_nocut(&TEOUT[0], tot_data[0], num[0]); } /*---------------- Write out r12's ----------------*/ if (num[1]) { /* Let's see if we need to write out something */ total_te_count[1] += num[1]; iwl_buf_wrt_struct_nocut(&TEOUT[1], tot_data[1], num[1]); } if (NUM_TE_TYPES > 2) { /*--------------------- Write out [r12,T1]'s ---------------------*/ if (num[2]) { /* Let's see if we need to write out something */ total_te_count[2] += num[2]; iwl_buf_wrt_struct_nocut(&TEOUT[2], tot_data[2], num[2]); } /*----------------------------------- Convert [r12,T2]'s into [r12,T1]'s -----------------------------------*/ for(i=0;i 1) { for(te_type=0;te_type 1) free(puream_data[0]); else for(te_type=0;te_type #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"shell_pairs.h" #include"small_fns.h" namespace psi { namespace CINTS { /*-------------------------------- Explicit functions declarations --------------------------------*/ static void get_primitives(void); static void get_shell_info(void); void init_basisset() { BasisSet.num_shells = chkpt_rd_nshell(); BasisSet.num_prims = chkpt_rd_nprim(); BasisSet.num_ao = chkpt_rd_nao(); BasisSet.am2shell = chkpt_rd_am2canon_shell_order(); BasisSet.shells_per_am = chkpt_rd_shells_per_am(); BasisSet.max_am = chkpt_rd_max_am()+1; BasisSet.puream = chkpt_rd_puream(); /* BasisSet.cgtos = */ get_primitives(); /* BasisSet.shells = */ get_shell_info(); /* BasisSet.shell_pairs = */ init_shell_pairs(); /*----------------------------------------------- Namespaces are not well defined in CINTS, because of this here're some overlapping inits -----------------------------------------------*/ if (BasisSet.puream && UserOptions.symm_ints) Symmetry.usotao = chkpt_rd_usotbf(); else Symmetry.usotao = chkpt_rd_usotao(); if (Symmetry.nirreps > 1 && UserOptions.symm_ints) /* Symmetry.us_pairs = */ init_unique_shell_pairs(); return; } void cleanup_basisset() { int i; dealloc_pairs(); for(i=0;i CINTS_MAX_AM) throw std::domain_error("Angular momentum limit of CINTS exceeded, reconfigure and recompile"); BasisSet.shells = (struct shell_def *) malloc(sizeof(struct shell_def)* BasisSet.num_shells); BasisSet.max_num_prims = 0; for (i=0; i BasisSet.max_num_prims) BasisSet.max_num_prims = shell_num_prims[i]; BasisSet.shells[i].fprim = prim_pointers[i]; BasisSet.shells[i].trans_vec = init_int_array(Symmetry.nirreps); for(j=0; j #include #include #include #include #include #include #include #include #include #include #include"moinfo.h" #include"moinfo_corr.h" #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" namespace psi { namespace CINTS { static int *cachefiles, **cachelist; void init_ccinfo() { int h, ij, ab, row, col, row_offset, col_offset; int nactive, nocc, nvirt, nao; int *occpi, *occ_sym; int *virtpi, *vir_sym; double **A; double **T2_MO, **T2_AO, **T2; dpdbuf4 tau; nao = BasisSet.num_ao; /* grab some basic data from CC_INFO */ psio_open(CC_INFO, PSIO_OPEN_OLD); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); occpi = init_int_array(Symmetry.nirreps); virtpi = init_int_array(Symmetry.nirreps); occ_sym = init_int_array(nactive); vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) occpi, sizeof(int)*Symmetry.nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) virtpi, sizeof(int)*Symmetry.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) occ_sym, sizeof(int)*Symmetry.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) vir_sym, sizeof(int)*Symmetry.nirreps); psio_close(CC_INFO, 1); nocc = 0; nvirt = 0; for(h=0; h < Symmetry.nirreps; h++) { nocc += occpi[h]; nvirt += virtpi[h]; } cachefiles = init_int_array(PSIO_MAXUNIT); /* assuming no caching for DPD here */ cachelist = init_int_matrix(12,12); init_moinfo(); init_moinfo_corr(); /* open the T-amplitude file for r/w */ psio_open(CC_TAMPS, PSIO_OPEN_OLD); /*--- Initialize DPD library ---*/ dpd_init(1, Symmetry.nirreps, UserOptions.memory, 0, cachefiles, cachelist, NULL, 2, occpi, occ_sym, virtpi, vir_sym); /* Grab the MO-basis T2's provided by ccenergy */ T2_MO = block_matrix(nocc*nocc,nvirt*nvirt); dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb"); row_offset = col_offset = 0; for(h=0,row=0,col=0; h < Symmetry.nirreps; h++) { dpd_buf4_mat_irrep_init(&tau, h); dpd_buf4_mat_irrep_rd(&tau, h); if(h) { row_offset += tau.params->rowtot[h-1]; col_offset += tau.params->coltot[h-1]; } for(row=0; row < tau.params->rowtot[h]; row++) { for(col=0; col < tau.params->coltot[h]; col++) { T2_MO[row_offset+row][col_offset+col] = tau.matrix[h][row][col]; } } dpd_buf4_mat_irrep_close(&tau, h); } dpd_buf4_close(&tau); /* half-transform the T2's */ A = block_matrix(nvirt, nao); T2_AO = block_matrix(nocc*nocc, nao*nao); for(ij=0; ij < nocc*nocc; ij++) { C_DGEMM('n','n',nvirt,nao,nvirt,1.0,&(T2_MO[ij][0]),nvirt, &(MOInfo.scf_evec_uocc[0][0][0]),nao,0.0,A[0],nao); C_DGEMM('t','n',nao,nao,nvirt,1.0,&(MOInfo.scf_evec_uocc[0][0][0]),nao, A[0],nao,0.0,&(T2_AO[ij][0]),nao); } free_block(A); free_block(T2_MO); /* transpose T2 to AO*AO x MO*MO */ T2 = block_matrix(nao*nao,nocc*nocc); for(ij=0; ij < nocc*nocc; ij++) for(ab=0; ab < nao*nao; ab++) T2[ab][ij] = T2_AO[ij][ab]; free_block(T2_AO); CCInfo.T2_s = T2; CCInfo.T2_t = block_matrix(nao*nao,nocc*nocc); CCInfo.nocc = nocc; CCInfo.nvirt = nvirt; free(occpi); free(occ_sym); free(virtpi); free(vir_sym); return; } void cleanup_ccinfo() { int h, ij, ab, row, col, row_offset, col_offset; int nocc, nvirt, nao; double **T2, **A, **T2_MO; dpdbuf4 tau; nocc = CCInfo.nocc; nvirt = CCInfo.nvirt; nao = BasisSet.num_ao; free_block(CCInfo.T2_s); /* transpose target T2 back to MO*MO x AO*AO */ T2 = block_matrix(nocc*nocc, nao*nao); for(ij=0; ij < nocc*nocc; ij++) { for(ab=0; ab < nao*nao; ab++) { T2[ij][ab] = CCInfo.T2_t[ab][ij]; } } free_block(CCInfo.T2_t); /* transform T2 back to MO basis */ A = block_matrix(nao,nvirt); T2_MO = block_matrix(nocc*nocc,nvirt*nvirt); for(ij=0; ij < nocc*nocc; ij++) { C_DGEMM('n','t',nao,nvirt,nao,1.0,T2[ij],nao, MOInfo.scf_evec_uocc[0][0],nao,0.0,A[0],nvirt); C_DGEMM('n','n',nvirt,nvirt,nao,1.0,MOInfo.scf_evec_uocc[0][0],nao, A[0],nvirt,0.0,T2_MO[ij],nvirt); } free_block(A); free_block(T2); /* Put T2 back into the DPD buffer */ dpd_buf4_init(&tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "New tIjAb"); row_offset = col_offset = 0; for(h=0; h < Symmetry.nirreps; h++) { dpd_buf4_mat_irrep_init(&tau, h); dpd_buf4_mat_irrep_rd(&tau, h); if(h) { row_offset += tau.params->rowtot[h-1]; col_offset += tau.params->coltot[h-1]; } for(row=0; row < tau.params->rowtot[h]; row++) { for(col=0; col < tau.params->coltot[h]; col++) { tau.matrix[h][row][col] += T2_MO[row+row_offset][col+col_offset]; } } dpd_buf4_mat_irrep_wrt(&tau, h); dpd_buf4_mat_irrep_close(&tau, h); } dpd_buf4_close(&tau); free_block(T2_MO); free_int_matrix(cachelist); free(cachefiles); dpd_close(1); /* close the T-amplitude file */ psio_close(CC_TAMPS, 1); return; } };}; psi3/src/bin/cints/Tools/ccinfo.h0000644000101500007650000000032510754417572015406 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_ccinfo_h #define _psi_src_bin_cints_Tools_ccinfo_h /*! \file ccinfo.h \ingroup CINTS */namespace psi { namespace CINTS { void init_ccinfo(); void cleanup_ccinfo(); }} #endif psi3/src/bin/cints/Tools/cdsalc.cc0000644000101500007650000000336110757640026015532 0ustar crawdad/*! \file cdsalc.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "cdsalc.h" namespace psi { namespace CINTS { void init_cdsalc() { CDSALCs.nsalcs = Molecule.num_atoms*3; const int num_cd = CDSALCs.nsalcs; CDSALCs.salc2irrep = new int[CDSALCs.nsalcs]; CDSALC_t::cd2salc_map_t* cd2salc_map = new CDSALC_t::cd2salc_map_t[num_cd]; for(int cd=0; cd #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #include "norm_quartet.h" #include "quartet_permutations.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #include"fjt.h" #endif #include "quartet_data.h" #include "symmetrize.h" #include "small_fns.h" namespace psi { namespace CINTS { static void inline switch_ij(int& a, int& b) {int dum = a; a = b; b = dum;}; int compute_eri(double* target, Libint_t* Libint, int& si, int& sj, int& sk, int& sl, int& inc1, int& inc2, int& inc3, int& inc4, const bool do_not_permute) { #ifndef USE_TAYLOR_FM static double_array_t fjt_table; init_fjt_table(&fjt_table); #endif /* place in "ascending" angular mom- my simple way of optimizing PHG recursion (VRR) */ bool switch_bra_ket = false; /* this should be /good/ for the VRR */ if ( BasisSet.shells[si].am + BasisSet.shells[sj].am + inc1 + inc2 > BasisSet.shells[sk].am + BasisSet.shells[sl].am + inc3 + inc4 ) { switch_bra_ket = true; switch_ij(si,sk); switch_ij(sj,sl); switch_ij(inc1, inc3); switch_ij(inc2, inc4); } /* these two are good for the HRR */ bool switch_bra = false; if(BasisSet.shells[si].am + inc1 < BasisSet.shells[sj].am + inc2){ switch_bra = true; switch_ij(si,sj); switch_ij(inc1,inc2); } bool switch_ket = false; if(BasisSet.shells[sk].am + inc3 < BasisSet.shells[sl].am + inc4){ switch_ket = true; switch_ij(sk,sl); switch_ij(inc3,inc4); } int am1 = BasisSet.shells[si].am - 1 + inc1; int am2 = BasisSet.shells[sj].am - 1 + inc2; int am3 = BasisSet.shells[sk].am - 1 + inc3; int am4 = BasisSet.shells[sl].am - 1 + inc4; int am = am1 + am2 + am3 + am4; int c1 = BasisSet.shells[si].center - 1; int c2 = BasisSet.shells[sj].center - 1; int c3 = BasisSet.shells[sk].center - 1; int c4 = BasisSet.shells[sl].center - 1; // If all centers are the same and angular momentum of functions is odd -- the ERI will be 0 by AM selection if ( (c1 == c2) && (c1 == c3) && (c1 == c4) && (am%2 == 1)) { return 0; } struct shell_pair* sp_ij = &(BasisSet.shell_pairs[si][sj]); struct shell_pair* sp_kl = &(BasisSet.shell_pairs[sk][sl]); Libint->AB[0] = sp_ij->AB[0]; Libint->AB[1] = sp_ij->AB[1]; Libint->AB[2] = sp_ij->AB[2]; Libint->CD[0] = sp_kl->AB[0]; Libint->CD[1] = sp_kl->AB[1]; Libint->CD[2] = sp_kl->AB[2]; double AB2 = Libint->AB[0]*Libint->AB[0]+ Libint->AB[1]*Libint->AB[1]+ Libint->AB[2]*Libint->AB[2]; double CD2 = Libint->CD[0]*Libint->CD[0]+ Libint->CD[1]*Libint->CD[1]+ Libint->CD[2]*Libint->CD[2]; /*--- Compute data for primitive quartets here ---*/ int np1 = BasisSet.shells[si].n_prims; int np2 = BasisSet.shells[sj].n_prims; int np3 = BasisSet.shells[sk].n_prims; int np4 = BasisSet.shells[sl].n_prims; /*--- Compute data for primitive quartets here ---*/ int num_prim_comb = 0; // bool si_eq_sj = (si == sj && am1 == am2); // bool sk_eq_sl = (sk == sl && am3 == am4); bool si_eq_sj = false; bool sk_eq_sl = false; for (int p1 = 0; p1 < np1; p1++) { int max_p2 = si_eq_sj ? p1+1 : np2; for (int p2 = 0; p2 < max_p2; p2++) { int m = (1 + (si_eq_sj && p1 != p2)); for (int p3 = 0; p3 < np3; p3++) { int max_p4 = sk_eq_sl ? p3+1 : np4; for (int p4 = 0; p4 < max_p4; p4++){ int n = m * (1 + (sk_eq_sl && p3 != p4)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint->PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, p1, p2, p3, p4, n); #else quartet_data(&(Libint->PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, p1, p2, p3, p4, n); #endif } } } } int nao[4]; nao[0] = ioff[am1+1]; nao[1] = ioff[am2+1]; nao[2] = ioff[am3+1]; nao[3] = ioff[am4+1]; int nbra = nao[0] * nao[1]; int nket = nao[2] * nao[3]; int size = nbra * nket; // In general we need a couple extra buffers to be able to copy and permute integrals static int max_size = ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]*ioff[BasisSet.max_am]; static double* perm_buf = new double[max_size]; static double* copy_buf = new double[max_size]; if (size > max_size) { delete[] perm_buf; delete[] copy_buf; perm_buf = new double[size]; copy_buf = new double[size]; max_size = size; } #ifdef NONDOUBLE_INTS double* raw_data = copy_buf; #endif if (am) { #ifdef NONDOUBLE_INTS REALTYPE* target_ptr = build_eri[am1][am2][am3][am4](Libint,num_prim_comb); for(i=0;iPrimQuartet; for(int p=0;pF[0]; } target[0] = (double) temp; } return size; } } } psi3/src/bin/cints/Tools/compute_eri.h0000644000101500007650000000101610754417572016456 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_compute_eri_h #define _psi_src_bin_cints_Tools_compute_eri_h /*! \file compute_eri.h \ingroup CINTS */ #include namespace psi { namespace CINTS { #ifndef __cplusplus #error "Tools/compute_eri.h cannot be used in C programs" #endif //! Returns the number of integrals computed int compute_eri(double* target, Libint_t* Libint, int& si, int& sj, int& sk, int& sl, int& inc1, int& inc2, int& inc3, int& inc4, const bool do_not_permute); } } #endif psi3/src/bin/cints/Tools/compute_scf_opdm.cc0000644000101500007650000002150110757640026017623 0ustar crawdad/*! \file compute_scf_opdm.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"prints.h" #include"small_fns.h" #define VIRT_SHELL -1000000 /* This should cause program to segfault if arrays are overrun */ namespace psi { namespace CINTS { void compute_scf_opdm() { int i,j,k,l,mo,open_1st,openshell_count,closedmos; int sh_i, sh_j, ioffset, joffset, nao_i, nao_j; int *symblk_offset; /* The pointer to the first MO in the symmetry block */ int *mo2moshell; /* array maping MO number to the mo shell */ double *occ; /* occupation vector - num_so long */ double *shell_occ; /* occupation numbers for MO shells */ double **mo_lagr; /* MO lagrangian */ double tmp, max_elem; struct shell_pair* sp; /*--- Compute offsets of symmetry blocks ---*/ symblk_offset = init_int_array(Symmetry.nirreps); symblk_offset[0] = 0; for(i=0;i 0) shell_occ[0] = 2.0; if (UserOptions.reftype != twocon) { /* single-reference case */ openshell_count = (closedmos > 0); for (i=0;i 0) { for (j=0;j 0); k = 0; for (i=0;i 0) { for (j=0;jDmax = max_elem; } } /*-------------------------------- Compute energy-weighted density --------------------------------*/ Lagr = block_matrix(BasisSet.num_ao,BasisSet.num_ao); if (UserOptions.reftype == rhf) { /*--- In closed-shell case compute energy-weighted density from SCF eigenvalues ---*/ for(i=0;i 1.0e-12) throw std::domain_error("Total density is not a sum of shell densities"); } /*--- Do this dirty trick because some people decided to keep open-shells of diff irreps separate ---*/ /*--- form a single open-shell if rohf and high-spin ---*/ /* if (UserOptions.reftype == rohf) { i = (closedmos > 0) ? 1 : 0; for(j=i+1;j= PRINT_OPDM) { for(i=0;i #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" namespace psi { namespace CINTS { /*!------------------------------------------------------------------------------------------ Generate sets of Double Coset Representatives for each combination of nuclear stabilizers (which are just subgroups of the point group). The subgroup-number correspondence is arbitrary, so I just hardwired it hoping that noone will want to go beyond D2h ------------------------------------------------------------------------------------------*/ void init_dcr() { int atom; int u,v; /*--- Local equivalents for equivalent members of Symmetry ---*/ int ***dcr; int **dcr_dim; int **dcr_deg; int **GnG; /*----------------------------- Check if need to do anything -----------------------------*/ if (!strcmp(Symmetry.symlabel,"C1 ")) return; /*------------------------------------------- C2, Ci, and Cs cases are almost identical: C1 = 0 C2/Ci/Cs = 1 -------------------------------------------*/ else if (!strcmp(Symmetry.symlabel,"C2 ") || !strcmp(Symmetry.symlabel,"Cs ") || !strcmp(Symmetry.symlabel,"Ci ")) { /*--- build DCR-related arrays ---*/ dcr_dim = init_int_matrix(2,2); dcr_dim[0][0] = 2; dcr_dim[1][0] = dcr_dim[0][1] = dcr_dim[1][1] = 1; dcr = (int ***) malloc(sizeof(int **)*2); for(u=0;u<2;u++) { dcr[u] = (int **) malloc(sizeof(int *)*2); for(v=0;v<2;v++) dcr[u][v] = (int *) malloc(sizeof(int)*dcr_dim[u][v]); } dcr[0][0][0] = 0; dcr[0][0][1] = 1; dcr[1][0][0] = dcr[0][1][0] = dcr[1][1][0] = 0; dcr_deg = init_int_matrix(2,2); dcr_deg[0][0] = dcr_deg[1][0] = dcr_deg[0][1] = 1; dcr_deg[1][1] = 2; GnG = init_int_matrix(2,2); GnG[0][0] = GnG[0][1] = GnG[1][0] = 0; GnG[1][1] = 1; /*--- convert symmetry positions to stabilizers ---*/ if (!strcmp(Symmetry.symlabel,"Cs ")) for(atom=0;atom #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"fjt.h" namespace psi { namespace CINTS { /*!------------------------- Compute F_m, 0 <= m <= n -------------------------*/ void calc_f(double *F, int n, double t) { int i, m, k; int m2; double t2; double num; double sum; double term1, term2; static double K = 1.0/M_2_SQRTPI; double et; if (t>20.0){ t2 = 2*t; et = exp(-t); t = sqrt(t); F[0] = K*erf(t)/t; for(m=0; m<=n-1; m++){ F[m+1] = ((2*m + 1)*F[m] - et)/(t2); } } /*else { for(m=0; m<=n; m++){ m2 = 2*m; num = df[m2]; i = 0; sum = 1.0/(m2+1); do{ i++; num = num*t2; term1 = num/df[m2+2*i+2]; sum += term1; } while (fabs(term1) > EPS && i < MAXFACT); F[m] = sum*exp(-t); } }*/ else { et = exp(-t); t2 = 2*t; m2 = 2*n; num = df[m2]; i=0; sum = 1.0/(m2+1); do{ i++; num = num*t2; term1 = num/df[m2+2*i+2]; sum += term1; } while (fabs(term1) > EPS && i < MAXFACT); F[n] = sum*et; for(m=n-1;m>=0;m--){ F[m] = (t2*F[m+1] + et)/(2*m+1); } } } };}; psi3/src/bin/cints/Tools/fjt.h0000644000101500007650000000031210754417572014724 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_fjt_h #define _psi_src_bin_cints_Tools_fjt_h /*! \file fjt.h \ingroup CINTS */namespace psi { namespace CINTS { void calc_f(double *F, int n, double t); }} #endif psi3/src/bin/cints/Tools/gto.cc0000644000101500007650000002261110757640026015071 0ustar crawdad/*! \file gto.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { static const int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); /*------------------------------- Explicit function declarations -------------------------------*/ static double **init_bf_norm(int); static double ***init_cart2pureang(int); static double ****init_cc2pp(int); static void init_sparse_cc2pp(int); static double xyz2lm_Coeff(int, int, int, int, int); void init_gto() { GTOs.bf_norm = init_bf_norm(BasisSet.max_am); if (BasisSet.puream && UserOptions.symm_ints) { GTOs.cart2pureang = init_cart2pureang(BasisSet.max_am); #if USE_MM && !SPARSE_C2P GTOs.cc2pp = init_cc2pp(BasisSet.max_am); #endif #if USE_MM && SPARSE_C2P init_sparse_cc2pp(BasisSet.max_am); #endif } return; } void cleanup_gto() { int l; free_matrix(GTOs.bf_norm,BasisSet.max_am); if (BasisSet.puream && UserOptions.symm_ints) { for(l=0;l= PRINT_DEBUG) { fprintf(outfile," -cart->sph.harm matrix (l = %d):\n",l); print_mat(cart2pureang[l],2*l+1,ioff[l+1],outfile); } } return cart2pureang; } double ****init_cc2pp(int max_am) { int i1,j1,l1,m1,bf1,i2,j2,l2,m2,bf2; int nc2,np2; double ****cc2pp; cc2pp = (double ****) malloc(sizeof(double ***)*max_am); for(l1=0;l1= l2 (1/13/2004) EFV ---------------------------------------------------------------------*/ cc2pp_sparse = (mat_elem ****) malloc(sizeof(mat_elem ***)*max_am); cc2pp_rowlength = (int ***) malloc(sizeof(int **)*max_am); for(l1=0;l1 ZERO) cc2pp_sparse[l1][l2][row_index][col_count].value = value; else continue; col_count++; total_count++; if (total_count == length) { scratch = (mat_elem *) realloc(scratch, sizeof(mat_elem)*increment); length += increment; } } cc2pp_rowlength[l1][l2][row_index] = col_count; } } } pp2cc_sparse = (mat_elem ****) malloc(sizeof(mat_elem ***)*max_am); pp2cc_rowlength = (int ***) malloc(sizeof(int **)*max_am); for(l1=0;l1 ZERO) pp2cc_sparse[l1][l2][row_index][col_count].value = value; else continue; col_count++; total_count++; if (total_count == length) { scratch = (mat_elem *) realloc(scratch, sizeof(mat_elem)*increment); length += increment; } } pp2cc_rowlength[l1][l2][row_index] = col_count; } } } GTOs.cc2pp_sparse = cc2pp_sparse; GTOs.cc2pp_rowlength = cc2pp_rowlength; GTOs.pp2cc_sparse = pp2cc_sparse; GTOs.pp2cc_rowlength = pp2cc_rowlength; return; } #define parity(m) ((m)%2 ? -1 : 1) /*Returns (-1)^m */ /*!--------------------------------------------------------------------------------------------- Computes transformation coefficients from cartesian to real pure angular momentum functions. See IJQC 54, 83 (1995), eqn (15). If m is negative, imaginary part is computed, whereas a positive m indicates that the real part of spherical harmonic Ylm is requested. ---------------------------------------------------------------------------------------------*/ double xyz2lm_Coeff(int l, int m, int lx, int ly, int lz) { int i,j,k,i_max; int k_min, k_max; int abs_m; int comp; int q; double pfac, pfac1, sum, sum1; abs_m = abs(m); if ((lx + ly - abs(m))%2) return 0.0; else j = (lx + ly - abs(m))/2; if (j < 0) return 0.0; /*---------------------------------------------------------------------------------------- Checking whether the cartesian polynomial contributes to the requested component of Ylm ----------------------------------------------------------------------------------------*/ comp = (m >= 0) ? 1 : -1; /* if (comp != ((abs_m-lx)%2 ? -1 : 1))*/ i = abs_m-lx; if (comp != parity(abs(i))) return 0.0; pfac = sqrt(fac[2*lx]*fac[2*ly]*fac[2*lz]*fac[l-abs_m]/(fac[2*l]*fac[l]*fac[lx]*fac[ly]*fac[lz]*fac[l+abs_m])); /* pfac = sqrt(fac[l-abs_m]/(fac[l]*fac[l]*fac[l+abs_m]));*/ pfac /= (1 << l); if (m < 0) pfac *= parity((i-1)/2); else pfac *= parity(i/2); i_max = (l-abs_m)/2; sum = 0.0; for(i=0;i<=i_max;i++) { pfac1 = bc[l][i]*bc[i][j]; if (pfac1 == 0.0) continue; else pfac1 *= (parity(i)*fac[2*(l-i)]/fac[l-abs_m-2*i]); sum1 = 0.0; k_min = MAX((lx-abs_m)/2,0); k_max = MIN(j,lx/2); for(k=k_min;k<=k_max;k++) sum1 += bc[j][k]*bc[abs_m][lx-2*k]*parity(k); sum += pfac1*sum1; } if (use_cca_integrals_standard) sum *= sqrt(df[2*l]/(df[2*lx]*df[2*ly]*df[2*lz])); if (m == 0) return pfac*sum; else return M_SQRT2*pfac*sum; } };}; psi3/src/bin/cints/Tools/gto.h0000644000101500007650000000030610754417572014735 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_gto_h #define _psi_src_bin_cints_Tools_gto_h /*! \file gto.h \ingroup CINTS */namespace psi { namespace CINTS { void init_gto(); void cleanup_gto(); }} #endif psi3/src/bin/cints/Tools/int_fjt.cc0000644000101500007650000001625310757640026015742 0ustar crawdad/*! \file int_fjt.cc \ingroup CINTS * These routines are based on the gamfun program of * Trygve Ulf Helgaker (fall 1984) * and calculates the incomplete gamma function as * described by McMurchie & Davidson, J. Comp. Phys. 26 (1978) 218. * The original routine computed the function for maximum j = 20. */ #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"int_fjt.h" namespace psi { namespace CINTS { static int maxj; static double_matrix_t gtable; static double *denomarray; static double wval_infinity; static int itable_infinity; /* Tablesize should always be at least 121. */ #define TABLESIZE 121 /*! Tabulate the incomplete gamma function and put in gtable. */ /*! * For J = JMAX a power series expansion is used, see for * example Eq.(39) given by V. Saunders in "Computational * Techniques in Quantum Chemistry and Molecular Physics", * Reidel 1975. For J < JMAX the values are calculated * using downward recursion in J. */ void init_fjt(int max) { int i,j; double denom,d2jmax1,r2jmax1,wval,d2wval,sum,term,rexpw; maxj = max; /* Check if int_fjttable has been allocated with the same maxj before */ if (gtable.d != NULL) { if (maxj+7 <= gtable.n1) return; else { free_fjt(); } } /* Allocate storage for gtable */ if (gtable.d == NULL) { gtable.n1 = maxj+7; gtable.n2 = TABLESIZE; gtable.d = block_matrix(gtable.n1,gtable.n2); } /* Tabulate the gamma function for t(=wval)=0.0. */ denom = 1.0; for (i=0; i=0; j--) { denom = denom - 2.0; gtable.d[j][i] = (gtable.d[j+1][i]*d2wval + rexpw)/denom; } } /* Form some denominators, so divisions can be eliminated below. */ if (denomarray == NULL) { denomarray = init_array(max+1); } denomarray[0] = 0.0; for (i=1; i<=max; i++) { denomarray[i] = 1.0/(2*i - 1); } wval_infinity = 2*max + 37.0; itable_infinity = (int) (10 * wval_infinity); return; } /*! This is called when the fjt routines are no longer needed, or * before they are reinitialized with a new maxj. */ void free_fjt() { free(denomarray); free_block(gtable.d); denomarray = NULL; gtable.n1 = 0; gtable.n2 = 0; gtable.d = NULL; return; } /*!--- This is clean and ugly at the same time - have to call this AFTER init_fjt() to have proper maxj ---*/ void init_fjt_table(double_array_t *table) { if (gtable.d != NULL) { table->n1 = maxj; table->d = init_array(maxj); } else throw std::domain_error("Called init_fjt_table before init_fjt"); return; } void free_fjt_table(double_array_t *table) { if (table->d != NULL) free(table->d); return; } /*! Using the tabulated incomplete gamma function in gtable, compute * the incomplete gamma function for a particular wval for all 0<=j<=J. * The result is placed in the global intermediate int_fjttable. */ void int_fjt(double_array_t *table, int J, double wval) { const double sqrpih = 0.886226925452758; const double coef2 = 0.5000000000000000; const double coef3 = -0.1666666666666667; const double coef4 = 0.0416666666666667; const double coef5 = -0.0083333333333333; const double coef6 = 0.0013888888888889; const double gfac30 = 0.4999489092; const double gfac31 = -0.2473631686; const double gfac32 = 0.321180909; const double gfac33 = -0.3811559346; const double gfac20 = 0.4998436875; const double gfac21 = -0.24249438; const double gfac22 = 0.24642845; const double gfac10 = 0.499093162; const double gfac11 = -0.2152832; const double gfac00 = -0.490; double wdif, d2wal, rexpw, /* denom, */ gval, factor, rwval, term; int i, itable, irange; if (J>maxj) { fprintf(stderr,"the int_fjt routine has been incorrectly used\n"); fprintf(stderr,"J = %d but maxj = %d\n",J,maxj); abort(); } /* Compute an index into the table. */ /* The test is needed to avoid floating point exceptions for * large values of wval. */ if (wval > wval_infinity) { itable = itable_infinity; } else { itable = (int) (10.0 * wval); } /* If itable is small enough use the table to compute int_fjttable. */ if (itable < TABLESIZE) { wdif = wval - 0.1 * itable; /* Compute fjt for J. */ table->d[J] = (((((coef6 * gtable.d[J+6][itable]*wdif + coef5 * gtable.d[J+5][itable])*wdif + coef4 * gtable.d[J+4][itable])*wdif + coef3 * gtable.d[J+3][itable])*wdif + coef2 * gtable.d[J+2][itable])*wdif - gtable.d[J+1][itable])*wdif + gtable.d[J][itable]; /* Compute the rest of the fjt. */ d2wal = 2.0 * wval; rexpw = exp(-wval); /* denom = 2*J + 1; */ for (i=J; i>0; i--) { /* denom = denom - 2.0; */ table->d[i-1] = (d2wal*table->d[i] + rexpw)*denomarray[i]; } } /* If wval <= 2*J + 36.0, use the following formula. */ else if (itable <= 20*J + 360) { rwval = 1.0/wval; rexpw = exp(-wval); /* Subdivide wval into 6 ranges. */ irange = itable/30 - 3; if (irange == 1) { gval = gfac30 + rwval*(gfac31 + rwval*(gfac32 + rwval*gfac33)); table->d[0] = sqrpih*sqrt(rwval) - rexpw*gval*rwval; } else if (irange == 2) { gval = gfac20 + rwval*(gfac21 + rwval*gfac22); table->d[0] = sqrpih*sqrt(rwval) - rexpw*gval*rwval; } else if (irange == 3 || irange == 4) { gval = gfac10 + rwval*gfac11; table->d[0] = sqrpih*sqrt(rwval) - rexpw*gval*rwval; } else if (irange == 5 || irange == 6) { gval = gfac00; table->d[0] = sqrpih*sqrt(rwval) - rexpw*gval*rwval; } else { table->d[0] = sqrpih*sqrt(rwval); } /* Compute the rest of the int_fjttable from table->d[0]. */ factor = 0.5 * rwval; term = factor * rexpw; for (i=1; i<=J; i++) { table->d[i] = factor * table->d[i-1] - term; factor = rwval + factor; } } /* For large values of wval use this algorithm: */ else { rwval = 1.0/wval; table->d[0] = sqrpih*sqrt(rwval); factor = 0.5 * rwval; for (i=1; i<=J; i++) { table->d[i] = factor * table->d[i-1]; factor = rwval + factor; } } /* printf(" %2d %12.8f %4d %12.8f\n",J,wval,itable,table->d[0]); */ return; } };}; psi3/src/bin/cints/Tools/int_fjt.h0000644000101500007650000000055110754417572015603 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_int_fjt_h #define _psi_src_bin_cints_Tools_int_fjt_h /*! \file int_fjt.h \ingroup CINTS */ namespace psi { namespace CINTS { void init_fjt(int max); void free_fjt(); void init_fjt_table(double_array_t *table); void free_fjt_table(double_array_t *table); void int_fjt(double_array_t *table, int J, double wval); };} #endif psi3/src/bin/cints/Tools/iwl_tebuf.cc0000644000101500007650000000413110754417572016262 0ustar crawdad/*! \file iwl_tebuf.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include"defines.h" #include"data_structs.h" namespace psi { namespace CINTS { /*! ** IWL_BUF_WRT_STRUCT_nocut() ** ** This function writes out an array of two-electron ** integrals using the Integrals With Labels file format ** with integrals stored in the array of struct tebuf. It DOES NOT ** use Buf->Cutoff when writing. ** Ed Valeev, May 1999 ** */ void iwl_buf_wrt_struct_nocut(struct iwlbuf *Buf, struct tebuf *Tebuf, int size) { int i,j,idx; Label *lblptr; Value *valptr; lblptr = Buf->labels; valptr = Buf->values; for (i=0; iidx; lblptr[idx++] = (Label) Tebuf[i].i; lblptr[idx++] = (Label) Tebuf[i].j; lblptr[idx++] = (Label) Tebuf[i].k; lblptr[idx++] = (Label) Tebuf[i].l; valptr[Buf->idx] = (Value) Tebuf[i].val; Buf->idx++; if (Buf->idx == Buf->ints_per_buf) { Buf->lastbuf = 0; Buf->inbuf = Buf->idx; iwl_buf_put(Buf); Buf->idx = 0; } } /* end loop over i */ return; } /*! ** IWL_BUF_WRT_STRUCT() ** ** This function writes out an array of two-electron ** integrals using the Integrals With Labels file format ** with integrals stored in the array of struct tebuf. It ** uses specified cutoff when writing. ** Ed Valeev, May 1999 ** */ void iwl_buf_wrt_struct(struct iwlbuf *Buf, struct tebuf *Tebuf, int size, double cutoff) { int i,j,idx; Label *lblptr; Value *valptr; lblptr = Buf->labels; valptr = Buf->values; for (i=0; i cutoff) { idx = 4 * Buf->idx; lblptr[idx++] = (Label) Tebuf[i].i; lblptr[idx++] = (Label) Tebuf[i].j; lblptr[idx++] = (Label) Tebuf[i].k; lblptr[idx++] = (Label) Tebuf[i].l; valptr[Buf->idx] = (Value) Tebuf[i].val; Buf->idx++; if (Buf->idx == Buf->ints_per_buf) { Buf->lastbuf = 0; Buf->inbuf = Buf->idx; iwl_buf_put(Buf); Buf->idx = 0; } } } /* end loop over i */ } };}; psi3/src/bin/cints/Tools/iwl_tebuf.h0000644000101500007650000000054110754417572016125 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_iwl_tebuf_h #define _psi_src_bin_cints_Tools_iwl_tebuf_h /*! \file iwl_tebuf.h \ingroup CINTS */namespace psi { namespace CINTS { void iwl_buf_wrt_struct_nocut(struct iwlbuf *Buf, struct tebuf *Tebuf, int size); void iwl_buf_wrt_struct(struct iwlbuf *Buf, struct tebuf *Tebuf, int size, double cutoff); }} #endif psi3/src/bin/cints/Tools/moinfo.cc0000644000101500007650000001603211035736411015561 0ustar crawdad/*! \file moinfo.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ static void print_ccoefs(void); void init_moinfo() { int i, j; int irrep, iopen; int openirrs; double **ccvecs, *alpha, *beta; double **scf_evec_so; MOInfo.Escf = chkpt_rd_escf(); MOInfo.Eref = 0.0; MOInfo.Ecorr = 0.0; /* CDS: I revised this stuff about correlation and SCF energies */ /* If SCF, can say Eref = Escf (I guess...) */ if (strcmp(UserOptions.wfn,"SCF")==0) { MOInfo.Eref = MOInfo.Escf; } else { MOInfo.Eref = chkpt_rd_eref(); } /* Note: this init_moinfo() routine is not always called! We'll need to re-grab some of the above energies in other subroutines to be positive we have them on-hand */ MOInfo.num_mo = chkpt_rd_nmo(); MOInfo.orbspi = chkpt_rd_orbspi(); MOInfo.clsdpi = chkpt_rd_clsdpi(); MOInfo.openpi = chkpt_rd_openpi(); MOInfo.virtpi = init_int_array(Symmetry.nirreps); for(irrep=0;irrep= 0) throw std::domain_error("Content of checkpoint file inconsistent with REFERENCE\n"); break; } } /*--- Number of d.-o. MOs and s.-o. MOs ---*/ MOInfo.ndocc = 0; openirrs = 0; MOInfo.nsocc = 0; for (i=0;i 0) /* add closed shells as well */ MOInfo.num_moshells++; /*--- Read in open-shell coupling coeffcients ---*/ ccvecs = chkpt_rd_ccvecs(); if (iopen != 0) { /*--- NOTE! These are Pitzer's coupling constants (a and b). To get Yamaguchi's constants (alpha and beta) use this: alpha = (1-a)/2 beta = (b-1)/4 ---*/ alpha = ccvecs[0]; beta = ccvecs[1]; } if (UserOptions.reftype == twocon) { MOInfo.tcscf_occ[0] = 2.0/(1.0-alpha[0]); MOInfo.tcscf_occ[1] = 2.0/(1.0-alpha[2]); } if (UserOptions.reftype == rohf || UserOptions.reftype == twocon) { /*--- Form square matrices of coupling coeffcients ---*/ MOInfo.Alpha = block_matrix(MOInfo.num_moshells,MOInfo.num_moshells); MOInfo.Beta = block_matrix(MOInfo.num_moshells,MOInfo.num_moshells); /* Put alpha's and beta's in Alpha and Beta */ if (MOInfo.ndocc > 0) { /* There are closed shells */ /* Closed-Closed CCs */ MOInfo.Alpha[0][0] = 2.0; MOInfo.Beta[0][0] = -1.0; if (UserOptions.reftype == rohf) { /*--- Highspin and opeh-shell singlet cases ---*/ /* Closed-Open CCs */ for(i=1;i= PRINT_CCOEFF) { fprintf(outfile," -Yamaguchi's coupling coefficients :\n\n"); fprintf(outfile," i j alpha beta \n"); fprintf(outfile," -------------------------\n"); for (i=0;i #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" #include namespace psi { namespace CINTS { /*!------------------------------------------------------------- For correlated calculations form scf_e(vec/vals)_(u)occ, and compute numbers of frozen orbitals -------------------------------------------------------------*/ void init_moinfo_corr() { int i, j; int irrep, size; int mo, mo_max; int pitz_offset, qts_offset; int errcod; double **mo_row; /*--- Read in frozen MOs ---*/ MOInfo.frozen_docc = get_frzcpi(); MOInfo.frozen_uocc = get_frzvpi(); print_moinfo_corr(); /*------------------ Compute mo2symblk ------------------*/ MOInfo.mo2symblk = init_int_array(MOInfo.num_mo); pitz_offset = 0; for(irrep=0;irrep #include #include /* isnan and isinf are defined here in IBM C/C++ compilers */ #ifdef __IBMCPP__ #include #endif #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ static void get_geometry(void); void init_molecule() { Molecule.label = chkpt_rd_label(); Molecule.num_atoms = chkpt_rd_natom(); Molecule.Rref = chkpt_rd_rref(); get_geometry(); return; } void cleanup_molecule() { free(Molecule.centers); free(Molecule.Rref); return; } void get_geometry() { int i; double *Z; /* nuclear charges */ double **g; /* cartesian geometry */ Molecule.centers = (struct coordinates *)malloc(sizeof(struct coordinates)*Molecule.num_atoms); g = chkpt_rd_geom(); Z = chkpt_rd_zvals(); /*--- move it into the appropriate struct form ---*/ for (i=0; i 1) for(i=1; i #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"transform.h" namespace psi { namespace CINTS { /*!------------------------------------------------------------------------------------ This functions processes the computed integrals quartet: 1) Normalizes cartesian components to unity; 2) Transforms integrals from cartesian to pure angular momentum basis (if needed); ------------------------------------------------------------------------------------*/ double *norm_quartet(double *data, double *puream_data, int am[4], int puream) { int ii, jj, kk, ll; int ni, nj, nk, nl; double *tmp_ptr; const double *ptr_i, *ptr_j, *ptr_k, *ptr_l; double norm_i, norm_ij, norm_ijk; #pragma disjoint (*tmp_ptr,norm_i) #pragma disjoint (*tmp_ptr,norm_ij) #pragma disjoint (*tmp_ptr,norm_ijk) /*--- numbers of integrals in each shell ---*/ ni = ioff[am[0] + 1]; nj = ioff[am[1] + 1]; nk = ioff[am[2] + 1]; nl = ioff[am[3] + 1]; /*------------------------------------------------------------------------------------ Normalize contracted integrals - right here each cartesian component in the shell has the same normalization coefficient so that only components with radial parts of x^l, y^l, and z^l are normalized to unity. After this block of code all basis functions are normalized to unity. Needed this so that integrals in terms of puream i-functions were computed properly. N.B.: possibly, LIBINT should be rewritten so that all intermediates are computed in terms of normalized functions?! ------------------------------------------------------------------------------------*/ ptr_i = GTOs.bf_norm[am[0]]; ptr_j = GTOs.bf_norm[am[1]]; ptr_k = GTOs.bf_norm[am[2]]; ptr_l = GTOs.bf_norm[am[3]]; tmp_ptr = data; for(ii=0; ii= am[1] ---*/ if (am[0]) data = transform_ijkl(data,puream_data,GTOs.cc2pp[am[0]][am[1]], GTOs.cc2pp[am[2]][am[3]],1,am[0],am[1],am[2],am[3]); else data = transform_ijkl(data,puream_data,NULL,GTOs.cc2pp[am[2]][am[3]],0, am[0],am[1],am[2],am[3]); #elif USE_MM && SPARSE_C2P /*--- N.B. am[0] >= am[1] ---*/ if (am[0]) data = transform_ijkl_sparse(data,puream_data, GTOs.pp2cc_sparse[am[0]][am[1]], GTOs.cc2pp_sparse[am[2]][am[3]], GTOs.pp2cc_rowlength[am[0]][am[1]], GTOs.cc2pp_rowlength[am[2]][am[3]], 1,am[0],am[1],am[2],am[3]); else data = transform_ijkl_sparse(data,puream_data,NULL, GTOs.cc2pp_sparse[am[2]][am[3]], NULL,GTOs.cc2pp_rowlength[am[2]][am[3]], 0,am[0],am[1],am[2],am[3]); #endif } return data; } };}; psi3/src/bin/cints/Tools/norm_quartet.h0000644000101500007650000000041510754417572016665 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_norm_quartet_h #define _psi_src_bin_cints_Tools_norm_quartet_h /*! \file norm_quartet.h \ingroup CINTS */ namespace psi { namespace CINTS { double* norm_quartet(double *data, double *puream_data, int am[4], int puream); }} #endif psi3/src/bin/cints/Tools/prints.cc0000644000101500007650000001755711112564564015632 0ustar crawdad/*! \file prints.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { void print_intro() { if (UserOptions.print_lvl >= PRINT_INTRO) { tstart(outfile); fprintf(outfile," --------------------------------------------\n"); fprintf(outfile," CINTS: An integrals program written in C\n"); fprintf(outfile," Justin T. Fermann and Edward F. Valeev\n"); fprintf(outfile," --------------------------------------------\n\n"); } return; } void print_scalars() { int i; /*---------------------- Print constants, etc. ----------------------*/ if (UserOptions.print_lvl >= PRINT_OPTIONS) { fprintf(outfile,"\n -OPTIONS:\n"); fprintf(outfile," Print level = %d\n",UserOptions.print_lvl); if (UserOptions.restart) fprintf(outfile," Restart = yes\n"); fprintf(outfile," Integral tolerance = %1.0e\n",UserOptions.cutoff); fprintf(outfile," Max. memory to use = %ld double words\n",UserOptions.max_memory); fprintf(outfile," Number of threads = %d\n",UserOptions.num_threads); fprintf(outfile," LIBINT's real type length = %d bit\n",sizeof(REALTYPE)*8); fprintf(outfile,"\n -CALCULATION CONSTANTS:\n"); fprintf(outfile," Label = %s\n", Molecule.label); fprintf(outfile," Number of atoms = %d\n", Molecule.num_atoms); if (UserOptions.print_lvl >= PRINT_BASIS) { fprintf(outfile," Number of shells = %d\n", BasisSet.num_shells); fprintf(outfile," Number of primitives = %d\n", BasisSet.num_prims); } fprintf(outfile," Number of atomic orbitals = %d\n", BasisSet.num_ao); fprintf(outfile," Number of symmetry orbitals = %d\n", Symmetry.num_so); fprintf(outfile," Maximum AM in the basis = %d\n", BasisSet.max_am - 1); if (UserOptions.fine_structure_alpha != 1.0) fprintf(outfile," Fine-structure alpha scaling = %8.4lf\n", UserOptions.fine_structure_alpha); fprintf(outfile,"\n -SYMMETRY INFORMATION;\n"); fprintf(outfile," Computational point group = %s\n", Symmetry.symlabel); fprintf(outfile," Number of irreps = %d\n", Symmetry.nirreps); if (UserOptions.print_lvl >= PRINT_BASIS) { fprintf(outfile," Number of symmetry unique shells = %d\n", Symmetry.num_unique_shells); } } if (UserOptions.print_lvl >= PRINT_GEOMETRY) { fprintf(outfile,"\n -CARTESIAN COORDINATES (a.u.):\n"); fprintf(outfile," Nuc. charge X Y Z\n"); fprintf(outfile," ------------- ----------------- ----------------- -----------------\n"); for(i=0;i= PRINT_BASIS) { fprintf(outfile,"\n -BASIS SET INFORMATION:\n"); fprintf(outfile," Prim# Exponent "); for(i=0;i= PRINT_OPDM) { fprintf(outfile," -Total density matrix in AO basis :\n"); print_mat(Dens,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile,"\n\n"); fprintf(outfile," -Energy weighted density matrix in AO basis :\n"); print_mat(Lagr,BasisSet.num_ao,BasisSet.num_ao,outfile); fprintf(outfile,"\n\n"); } return; } /*!---------------------------------------------------- May be used to print out gradients and other vector quantities associated with atoms ----------------------------------------------------*/ void print_atomvec(const char *quantity, double **vecs) { int i; fprintf(outfile,"\n -%s:\n",quantity); fprintf(outfile," Atom X Y Z\n"); fprintf(outfile," ------ ----------------- ----------------- -----------------\n"); for(i=0;i= PRINT_MOINFO_CORR) { fprintf(outfile,"\n -MO information:\n"); fprintf(outfile," Number of MOs = %d\n",MOInfo.num_mo); fprintf(outfile, " Label\t# FZDC\t# DOCC\t# SOCC\t# VIRT\t# FZVR\n"); fprintf(outfile, " -----\t------\t------\t------\t------\t------\n"); for(i=0; i < Symmetry.nirreps; i++) { fprintf(outfile, " %s\t %d\t %d\t %d\t %d\t %d\n", Symmetry.irr_labels[i],MOInfo.frozen_docc[i], MOInfo.clsdpi[i],MOInfo.openpi[i],MOInfo.virtpi[i], MOInfo.frozen_uocc[i]); } fprintf(outfile,"\n"); } fflush(outfile); return; } };}; psi3/src/bin/cints/Tools/prints.h0000644000101500007650000000063711112564564015463 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_prints_h #define _psi_src_bin_cints_Tools_prints_h /*! \file prints.h \ingroup CINTS */ namespace psi { namespace CINTS { void print_intro(); void print_scalars(); void print_basisset(); void print_quote(); void print_opdm(); void print_atomvec(const char *quantity, double **vecs); void print_atommat(const char *quantity, double **mat); void print_moinfo_corr(); };} #endif psi3/src/bin/cints/Tools/quartet_data.cc0000644000101500007650000000577610757640026016773 0ustar crawdad/*! \file quartet_data.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif namespace psi { namespace CINTS { /*!-------------------------------------------------------------------------------- This function computes constants used in OSRR for a given quartet of primitives --------------------------------------------------------------------------------*/ void quartet_data(prim_data *Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair *sp1, struct shell_pair *sp2, int am, int pi, int pj, int pk, int pl, double scale) { #define STATIC_OO2NP1 #include "static.h" /*---------------- Local variables ----------------*/ struct coordinates PQ, W; #ifdef USE_TAYLOR_FM double F[4*CINTS_MAX_AM]; #endif int i; double small_T = UserOptions.cutoff; /*--- Use only one term in Taylor expansion of Fj(T) if T < small_T ---*/ double T; double coef1; double PQ2; double oozn; double zeta, eta, rho; zeta = sp1->gamma[pi][pj]; eta = sp2->gamma[pk][pl]; oozn = 1.0/(zeta+eta); Data->poz = eta*oozn; rho = zeta*Data->poz; coef1 = 2.0*sqrt(rho*M_1_PI)*scale*sp1->Sovlp[pi][pj]*sp2->Sovlp[pk][pl]; PQ.x = sp1->P[pi][pj][0] - sp2->P[pk][pl][0]; PQ.y = sp1->P[pi][pj][1] - sp2->P[pk][pl][1]; PQ.z = sp1->P[pi][pj][2] - sp2->P[pk][pl][2]; PQ2 = PQ.x*PQ.x; PQ2 += PQ.y*PQ.y; PQ2 += PQ.z*PQ.z; T = rho*PQ2; if (!am) { #ifdef USE_TAYLOR_FM taylor_compute_fm(F,T,0); Data->F[0] = F[0]*coef1; #else int_fjt(fjt_table,0,T); Data->F[0] = fjt_table->d[0]*coef1; #endif } else { Data->oo2zn = 0.5*oozn; Data->pon = zeta*oozn; Data->oo2z = 0.5/zeta; Data->oo2n = 0.5/eta; W.x = (sp1->P[pi][pj][0]*zeta+sp2->P[pk][pl][0]*eta)*oozn; W.y = (sp1->P[pi][pj][1]*zeta+sp2->P[pk][pl][1]*eta)*oozn; W.z = (sp1->P[pi][pj][2]*zeta+sp2->P[pk][pl][2]*eta)*oozn; if(T < small_T){ for(i=0; i<=am; i++) Data->F[i] = oo2np1[i]*coef1; } else { #ifdef USE_TAYLOR_FM taylor_compute_fm(F,T,am); for(i=0;i<=am;i++) Data->F[i] = F[i]*coef1; #else int_fjt(fjt_table,am,T); for(i=0;i<=am;i++) Data->F[i] = fjt_table->d[i]*coef1; #endif } /* PA */ Data->U[0][0] = sp1->PA[pi][pj][0]; Data->U[0][1] = sp1->PA[pi][pj][1]; Data->U[0][2] = sp1->PA[pi][pj][2]; /* QC */ Data->U[2][0] = sp2->PA[pk][pl][0]; Data->U[2][1] = sp2->PA[pk][pl][1]; Data->U[2][2] = sp2->PA[pk][pl][2]; /* WP */ Data->U[4][0] = W.x - sp1->P[pi][pj][0]; Data->U[4][1] = W.y - sp1->P[pi][pj][1]; Data->U[4][2] = W.z - sp1->P[pi][pj][2]; /* WQ */ Data->U[5][0] = W.x - sp2->P[pk][pl][0]; Data->U[5][1] = W.y - sp2->P[pk][pl][1]; Data->U[5][2] = W.z - sp2->P[pk][pl][2]; } return; } };}; psi3/src/bin/cints/Tools/quartet_data.h0000644000101500007650000000062310754417572016624 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_quartet_data_h #define _psi_src_bin_cints_Tools_quartet_data_h /*! \file quartet_data.h \ingroup CINTS */ namespace psi { namespace CINTS { void quartet_data(prim_data* Data, double_array_t *fjt_table, double AB2, double CD2, struct shell_pair* sp1, struct shell_pair* sp2, int am, int pi, int pj, int pk, int pl, double scale); } } #endif psi3/src/bin/cints/Tools/quartet_permutations.cc0000644000101500007650000000255410757640026020603 0ustar crawdad/*! \file quartet_permutations.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { /*!------------------------------------- Swap ket and bra of a 4-index buffer -------------------------------------*/ void ijkl_to_klij(double *ijkl_buf, double *klij_buf, int nij, int nkl) { int ijkl = 0; for(int ij=0; ij #include #include #include"defines.h" #define EXTERN #include"global.h" #include #define MAX_ITER 100 namespace psi { namespace CINTS { /*!------------------------------------------------------ Use Newton-Raphson method to find maximum r for which the radial parts of basis functions drop below some threshold. ------------------------------------------------------*/ void init_rad_extent(double thresh) { int i; int iter; int shell, prim, first_prim, last_prim, am; const double r0 = 4.0; /* Start at 4.0 bohr ---*/ double func, dfuncdr, sum, dsumdr; double r, r_new, tmp; BasisSet.thresh = thresh; for (shell=0;shell= 0.0) { r_new *= 2.5; continue; } r_new = r - func/dfuncdr; if ( r_new <= 0.0 ) { r_new = r / 2.0; } if (iter > MAX_ITER) throw std::domain_error("Too many iterations while computing radial extents"); } while (fabs(func/thresh) >= SOFT_ZERO); BasisSet.shells[shell].rad_extent = r_new; if (UserOptions.print_lvl > PRINT_DEBUG) fprintf(outfile,"Shell# = %d Radial extent = %lf\n",shell,r_new); } return; } };}; psi3/src/bin/cints/Tools/rad_extent.h0000644000101500007650000000033210754417572016300 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_rad_extent_h #define _psi_src_bin_cints_Tools_rad_extent_h /*! \file rad_extent.h \ingroup CINTS */namespace psi { namespace CINTS { void init_rad_extent(double thresh) }} #endif psi3/src/bin/cints/Tools/read_gen_opdm.cc0000644000101500007650000000201110757640026017053 0ustar crawdad/*! \file read_gen_opdm.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"prints.h" namespace psi { namespace CINTS { void read_gen_opdm() { int natri = ioff[BasisSet.num_ao]; double *dens, *lagr; dens = init_array(natri); lagr = init_array(natri); psio_open(IOUnits.itapD, PSIO_OPEN_OLD); psio_read_entry(IOUnits.itapD, "AO-basis OPDM", (char *) dens, sizeof(double)*natri); psio_read_entry(IOUnits.itapD, "AO-basis Lagrangian", (char *) lagr, sizeof(double)*natri); psio_close(IOUnits.itapD, 1); /* convert to square forms */ Dens = block_matrix(BasisSet.num_ao,BasisSet.num_ao); Lagr = block_matrix(BasisSet.num_ao,BasisSet.num_ao); tri_to_sq(dens,Dens,BasisSet.num_ao); tri_to_sq(lagr,Lagr,BasisSet.num_ao); free(dens); free(lagr); print_opdm(); return; } };}; psi3/src/bin/cints/Tools/read_gen_opdm.h0000644000101500007650000000044410754417572016732 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_read_gen_opdm_h #define _psi_src_bin_cints_Tools_read_gen_opdm_h /*! \file read_gen_opdm.h \ingroup CINTS */namespace psi { namespace CINTS { void read_gen_opdm(); void read_density(FILE *fpo, double ***Dens, double ***WDens, int num_ao); }} #endif psi3/src/bin/cints/Tools/read_scf_occ_evec.cc0000644000101500007650000000616610757640026017703 0ustar crawdad/*! \file read_scf_occ_evec.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" namespace psi { namespace CINTS { void read_scf_occ_evec(void) { int i, j, k, l, jj, ij; int nstri; int nstria,nstrib; int num_so,num_ao,num_mo,ndocc; int aocc,bocc; int bas_off; int shell_start,shell_end,shell_type; double **SO_cmat, **SO_cmato; double **Cocc_un; /* Read All information necessary to do DFT procedure with Eigenvector */ psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); psio_read_entry(IOUnits.itapDSCF, "Number of MOs", (char *) &(MOInfo.num_mo), sizeof(int)); if(UserOptions.reftype == uhf){ psio_read_entry(IOUnits.itapDSCF, "Number of Alpha DOCC", (char *) &(MOInfo.alpha_occ),sizeof(int)); psio_read_entry(IOUnits.itapDSCF, "Number of Beta DOCC", (char *) &(MOInfo.beta_occ),sizeof(int)); } else{ psio_read_entry(IOUnits.itapDSCF, "Number of DOCC", (char *) &(MOInfo.ndocc),sizeof(int)); } /*------------------- Variables needed -------------------*/ num_ao = BasisSet.num_ao; num_so = Symmetry.num_so; num_mo = MOInfo.num_mo; ndocc = MOInfo.ndocc; nstri = num_mo*ndocc; aocc = MOInfo.alpha_occ; bocc = MOInfo.beta_occ; nstria = num_mo*aocc; nstrib = num_mo*bocc; if (UserOptions.reftype == uhf){ SO_cmat = block_matrix(num_so,aocc); SO_cmato = block_matrix(num_so,bocc); psio_read_entry(IOUnits.itapDSCF, "Alpha Occupied SCF Eigenvector", (char *) &(SO_cmat[0][0]), sizeof(double)*nstria); psio_read_entry(IOUnits.itapDSCF, "Beta Occupied SCF Eigenvector", (char *) &(SO_cmato[0][0]), sizeof(double)*nstrib); } else { SO_cmat = block_matrix(num_so,ndocc); psio_read_entry(IOUnits.itapDSCF, "Occupied SCF Eigenvector", (char *) &(SO_cmat[0][0]), sizeof(double)*nstri); } psio_close(IOUnits.itapDSCF, 1); /*---------------------- transform to AO basis ----------------------*/ /*fprintf(outfile,"\nUSOTAO matrix"); print_mat(Symmetry.usotao,num_so,num_ao,outfile); fprintf(outfile,"\nSO Cmat"); print_mat(SO_cmat,num_so,num_mo,outfile); */ if(UserOptions.reftype == uhf){ Cocca = block_matrix(num_ao,aocc); mmult(Symmetry.usotao,1,SO_cmat,0,Cocca,0,num_ao,num_so,aocc,0); free_block(SO_cmat); Coccb = block_matrix(num_ao,bocc); mmult(Symmetry.usotao,1,SO_cmato,0,Coccb,0,num_ao,num_so,bocc,0); free_block(SO_cmato); } else{ Cocc = block_matrix(num_ao,ndocc); mmult(Symmetry.usotao,1,SO_cmat,0,Cocc,0,num_ao,num_so,ndocc,0); free_block(SO_cmat); } /*-------------------------- Remove after done testing --------------------------*/ /* fprintf(outfile,"\nCocca"); print_mat(Cocca,num_ao,aocc,outfile); fprintf(outfile,"\nCoccb"); print_mat(Coccb,num_ao,bocc,outfile);*/ return; } };}; psi3/src/bin/cints/Tools/read_scf_occ_evec.h0000644000101500007650000000035010754417572017537 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_read_scf_occ_evec_h #define _psi_src_bin_cints_Tools_read_scf_occ_evec_h /*! \file read_scf_occ_evec.h \ingroup CINTS */namespace psi { namespace CINTS { void read_scf_occ_evec(void); }} #endif psi3/src/bin/cints/Tools/read_scf_opdm.cc0000644000101500007650000001755110757640026017074 0ustar crawdad/*! \file read_scf_opdm.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #define EXTERN #include "global.h" #define OFFDIAG_DENS_FACTOR 0.5 namespace psi { namespace CINTS { void read_scf_opdm() { int i, j, ij, nao_i, nao_j, sh_i, sh_j; int ioffset, joffset; int nstri = ioff[Symmetry.num_so]; double *dens, *denso; double **sq_dens, **sq_denso; double **tmp_mat; double pfac; double max_elem, temp; struct shell_pair* sp; psio_open(IOUnits.itapDSCF, PSIO_OPEN_OLD); psio_read_entry(IOUnits.itapDSCF, "Integrals cutoff", (char *) &(UserOptions.cutoff), sizeof(double)); dens = init_array(nstri); if (UserOptions.reftype == rohf || UserOptions.reftype == uhf) denso = init_array(nstri); if (UserOptions.reftype == uhf) { denso = init_array(nstri); psio_read_entry(IOUnits.itapDSCF, "Difference Alpha Density", (char *) dens, sizeof(double)*nstri); psio_read_entry(IOUnits.itapDSCF, "Difference Beta Density", (char *) denso, sizeof(double)*nstri); /*--- Form total and open-shell (spin) density matrices first ---*/ for(i=0;idmato == NULL) sp->dmato = block_matrix(nao_i,nao_j); max_elem = sp->Dmax; for(i=0;idmato[i][j] = sq_denso[ioffset+i][joffset+j]; temp = fabs(temp); if (max_elem < temp) max_elem = temp; } sp->Dmax = max_elem; } } free_matrix(sq_denso,BasisSet.num_ao); for(sh_i=0;sh_idmat == NULL) sp->dmat = block_matrix(nao_i,nao_j); max_elem = -1.0; for(i=0;idmat[i][j] = sq_dens[ioffset+i][joffset+j]; temp = fabs(temp); if (max_elem < temp) max_elem = temp; } sp->Dmax = MAX(sp->Dmax,max_elem); } } free_matrix(sq_dens,BasisSet.num_ao); break; case uhf: for(sh_i=0;sh_idmato == NULL) if (sp->dmata == NULL) sp->dmato = block_matrix(nao_i,nao_j); else { sp->dmato = sp->dmata; sp->dmata = NULL; } max_elem = sp->Dmax; for(i=0;idmato[i][j] = sq_denso[ioffset+i][joffset+j]; temp = fabs(temp); if (max_elem < temp) max_elem = temp; } sp->Dmax = max_elem; } } free_matrix(sq_denso,BasisSet.num_ao); for(sh_i=0;sh_idmat == NULL) if (sp->dmatb == NULL) sp->dmat = block_matrix(nao_i,nao_j); else { sp->dmat = sp->dmatb; sp->dmatb = NULL; } max_elem = sp->Dmax; for(i=0;idmat[i][j] = sq_dens[ioffset+i][joffset+j]; temp = fabs(temp); if (max_elem < temp) max_elem = temp; } sp->Dmax = MAX(sp->Dmax,max_elem); } } free_matrix(sq_dens,BasisSet.num_ao); break; case rhf: for(sh_i=0;sh_idmat == NULL) sp->dmat = block_matrix(nao_i,nao_j); max_elem = -1.0; for(i=0;idmat[i][j] = sq_dens[ioffset+i][joffset+j]; temp = fabs(temp); if (max_elem < temp) max_elem = temp; } sp->Dmax = max_elem; } } free_matrix(sq_dens,BasisSet.num_ao); break; } return; } };}; psi3/src/bin/cints/Tools/read_scf_opdm.h0000644000101500007650000000032510754417572016732 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_read_scf_opdm_h #define _psi_src_bin_cints_Tools_read_scf_opdm_h /*! \file read_scf_opdm.h \ingroup CINTS */namespace psi { namespace CINTS { void read_scf_opdm(); }} #endif psi3/src/bin/cints/Tools/schwartz.cc0000644000101500007650000001552610757640026016154 0ustar crawdad/*! \file schwartz.cc \ingroup CINTS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"quartet_data.h" #include"norm_quartet.h" #ifdef USE_TAYLOR_FM #include"taylor_fm_eval.h" #else #include"int_fjt.h" #endif #include"schwartz.h" namespace psi { namespace CINTS { void schwartz_eri() { /*--- Various data structures ---*/ struct shell_pair *sp_ij, *sp_kl; Libint_t Libint; #ifndef USE_TAYLOR_FM double_array_t fjt_table; #endif int ij, kl, ik, jl, ijkl; int count ; int dum; int n, num; int total_am, am; int orig_am[4]; int pkblock_end_index = -1; int g, i, j, k, l, m, ii, jj, kk, ll; int a, b, c, d; int amax, bmax, cmax, dmax; int si; /* GCC compiler screwes up if static is left out */ int sj, sk, sl, si_g, sj_g; int sii, sjj, skk, sll , slll; int sij, skl, sijkl; int pi, pj, pk, pl ; int max_pj, max_pl; int pii, pjj, pkk, pll; int upk, num_unique_pk; int max_num_unique_quartets; int max_num_prim_comb; int max_bf_per_shell; int size, class_size; int max_cart_class_size; int bf_i, bf_j, bf_k, bf_l, so_i, so_j, so_k, so_l, s; int np_i, np_j, np_k, np_l; int ni, nj, nk, nl, li, lj; int index; int iimax, jjmax, kkmax, llmax; int irrep, npi_ij, npi_kl, npi_ik, npi_jl, ind_offset; int num_prim_comb, p; int effective = 0; /* Flag to check the effectiveness of prescreening */ double AB2, CD2; double *raw_data; /* pointer to the unnormalized taregt quartet of integrals */ double *data; /* pointer to the transformed normalized target quartet of integrals */ #ifdef NONDOUBLE_INTS REALTYPE *target_ints; /* Pointer to the location of the target quartet on the stack of integrals quartets if libint.a is using other than regular doubles */ #endif double temp; double max_elem; BasisSet.schwartz_eri = block_matrix(BasisSet.num_shells,BasisSet.num_shells); /*--------------- Initialization ---------------*/ /* init_fjt(BasisSet.max_am*4);*/ #ifndef USE_TAYLOR_FM init_fjt_table(&fjt_table); #endif max_bf_per_shell = ioff[BasisSet.max_am]; max_cart_class_size = (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell)* (max_bf_per_shell); #ifdef NONDOUBLE_INTS raw_data = init_array(max_cart_class_size); #endif max_num_prim_comb = (BasisSet.max_num_prims*BasisSet.max_num_prims)* (BasisSet.max_num_prims*BasisSet.max_num_prims); UserOptions.memory -= init_libint(&Libint,BasisSet.max_am-1,max_num_prim_comb); /*------------------------------------------------- generate all shell quartets suitable for building the PK-matrix -------------------------------------------------*/ for (sii=0; siiAB[0]; Libint.AB[1] = sp_ij->AB[1]; Libint.AB[2] = sp_ij->AB[2]; Libint.CD[0] = sp_kl->AB[0]; Libint.CD[1] = sp_kl->AB[1]; Libint.CD[2] = sp_kl->AB[2]; AB2 = Libint.AB[0]*Libint.AB[0]+ Libint.AB[1]*Libint.AB[1]+ Libint.AB[2]*Libint.AB[2]; CD2 = Libint.CD[0]*Libint.CD[0]+ Libint.CD[1]*Libint.CD[1]+ Libint.CD[2]*Libint.CD[2]; /*--- Compute data for primitive quartets here ---*/ num_prim_comb = 0; for (pi = 0; pi < np_i; pi++) { max_pj = (si == sj) ? pi+1 : np_j; for (pj = 0; pj < max_pj; pj++) { m = (1 + (si == sj && pi != pj)); for (pk = 0; pk < np_k; pk++) { max_pl = (sk == sl) ? pk+1 : np_l; for (pl = 0; pl < max_pl; pl++){ n = m * (1 + (sk == sl && pk != pl)); #ifdef USE_TAYLOR_FM quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), NULL, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, (double)n); #else quartet_data(&(Libint.PrimQuartet[num_prim_comb++]), &fjt_table, AB2, CD2, sp_ij, sp_kl, am, pi, pj, pk, pl, (double)n); #endif } } } } /*------------------------------------------------- Compute the quartet and find the largest element -------------------------------------------------*/ if (am) { #ifdef NONDOUBLE_INTS size = ioff[BasisSet.shells[si].am]*ioff[BasisSet.shells[sj].am]* ioff[BasisSet.shells[sk].am]*ioff[BasisSet.shells[sl].am]; target_ints = build_eri[orig_am[0]][orig_am[1]][orig_am[2]][orig_am[3]](&Libint, num_prim_comb); for(i=0;i max_elem){ max_elem = fabs(data[ijkl]); } } } } else { temp = 0.0; for(p=0;p #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { double ****init_shell_block_matrix() { int si, sj; int ni, nj; double ****data; data = (double****) malloc(BasisSet.num_shells*sizeof(double***)); for(si=0;si #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include #include"small_fns.h" namespace psi { namespace CINTS { /*------------------------------- Explicit function delcarations -------------------------------*/ static double s_ovlp(double, double, double, double, double); static long int memory_to_store_shell_pairs(); /*!---------------------------------------------------- shell_pair includes pointers to dynamically allocated data. To minimize overhead and to be able to predict how much memory is needed I create a locally visible stack that's used to distribute memory chunks ----------------------------------------------------*/ static double *stack; void init_shell_pairs() { struct shell_pair **pairs, *sp; struct coordinates P, PA, PB, AB; struct coordinates *atom_i, *atom_j; int i, j; int si, sj, np_i, np_j; long int memd; double a1, a2, ab2, gam, inorm, jnorm; double *curr_stack_ptr; /*--- estimate storage requirement for the dynamically allocated parts of shell_pair structure ---*/ memd = memory_to_store_shell_pairs(); if (memd > UserOptions.memory) throw std::domain_error("Not enough memory to store shell pair data. Need more memory."); UserOptions.memory -= memd; stack = (double *) malloc(sizeof(double)*memd); curr_stack_ptr = stack; /*--- allocate room for the shell pairs ---*/ pairs = (struct shell_pair **)malloc(sizeof(struct shell_pair *)*BasisSet.num_shells); for(i=0; ix - atom_j->x; AB.y = atom_i->y - atom_j->y; AB.z = atom_i->z - atom_j->z; ab2 = AB.x*AB.x+AB.y*AB.y+AB.z*AB.z; sp = &(pairs[si][sj]); sp->i = si; sp->j = sj; sp->AB[0] = AB.x; sp->AB[1] = AB.y; sp->AB[2] = AB.z; np_i = BasisSet.shells[si].n_prims; np_j = BasisSet.shells[sj].n_prims; sp->a1 = curr_stack_ptr; curr_stack_ptr += np_i; sp->a2 = curr_stack_ptr; curr_stack_ptr += np_j; sp->gamma = (double **) malloc(np_i*sizeof(double *)); for(i=0;igamma[i] = curr_stack_ptr; curr_stack_ptr += np_j; } sp->inorm = curr_stack_ptr; curr_stack_ptr += np_i; sp->jnorm = curr_stack_ptr; curr_stack_ptr += np_j; sp->Sovlp = (double **) malloc(np_i*sizeof(double *)); for(i=0;iSovlp[i] = curr_stack_ptr; curr_stack_ptr += np_j; } sp->P = (double ***) malloc(np_i*sizeof(double **)); sp->PA = (double ***) malloc(np_i*sizeof(double **)); sp->PB = (double ***) malloc(np_i*sizeof(double **)); for(i=0;iP[i] = (double **) malloc(np_j*sizeof(double *)); sp->PA[i] = (double **) malloc(np_j*sizeof(double *)); sp->PB[i] = (double **) malloc(np_j*sizeof(double *)); for(j=0;jP[i][j] = curr_stack_ptr; curr_stack_ptr += 3; sp->PA[i][j] = curr_stack_ptr; curr_stack_ptr += 3; sp->PB[i][j] = curr_stack_ptr; curr_stack_ptr += 3; } } /*--- loop over primitives here ---*/ for (i = 0; i < np_i; i++){ a1 = BasisSet.cgtos[BasisSet.shells[si].fprim+i-1].exp; inorm = BasisSet.cgtos[BasisSet.shells[si].fprim+i-1].ccoeff[BasisSet.shells[si].am-1]; sp->a1[i] = a1; sp->inorm[i] = inorm; for (j = 0; j < np_j; j++){ a2 = BasisSet.cgtos[BasisSet.shells[sj].fprim+j-1].exp; gam = a1 + a2; jnorm = BasisSet.cgtos[BasisSet.shells[sj].fprim+j-1].ccoeff[BasisSet.shells[sj].am-1]; P.x = (atom_i->x*a1 + atom_j->x*a2)/gam; P.y = (atom_i->y*a1 + atom_j->y*a2)/gam; P.z = (atom_i->z*a1 + atom_j->z*a2)/gam; PA.x = P.x - atom_i->x; PA.y = P.y - atom_i->y; PA.z = P.z - atom_i->z; PB.x = P.x - atom_j->x; PB.y = P.y - atom_j->y; PB.z = P.z - atom_j->z; /*--- copy init data into pairs array in prep for eri evaluation ---*/ sp->a2[j] = a2; sp->gamma[i][j] = a1+a2; sp->jnorm[j] = jnorm; sp->P[i][j][0] = P.x; sp->P[i][j][1] = P.y; sp->P[i][j][2] = P.z; sp->PA[i][j][0] = PA.x; sp->PA[i][j][1] = PA.y; sp->PA[i][j][2] = PA.z; sp->PB[i][j][0] = PB.x; sp->PB[i][j][1] = PB.y; sp->PB[i][j][2] = PB.z; sp->Sovlp[i][j] = s_ovlp(a1,a2,inorm,jnorm,ab2); sp->dmat = NULL; sp->dmato = NULL; sp->dmata = NULL; sp->dmatb = NULL; } } } } BasisSet.shell_pairs = pairs; return; } void init_unique_shell_pairs(void) { struct unique_shell_pair **pairs; int i,j,count; int us,usi,usj,si,sj; int nbfi, nbfj; int bf_i,bf_j,max_bf_j; int shell,first_bf,last_bf,num_bf,bf; int so,irrep,irr_i,irr_j,max_irr_j; int so_i, so_j; int *count_irr; int ***bf_so; count_irr = init_int_array(Symmetry.nirreps); bf_so = (int ***) malloc(Symmetry.num_unique_shells*sizeof(int **)); for(us=0;usdmato != NULL) free_block(sp->dmat); if (sp->dmat != NULL) free_block(sp->dmato); if (sp->dmato != NULL) free_block(sp->dmata); if (sp->dmat != NULL) free_block(sp->dmatb); } for(si=0;si 1 && UserOptions.symm_ints) for(i=0;i #include #include #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { void setup() { register int i, j; ioff[0] = 0; for (i=1; i #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { /*------------------------------- Explicit function declarations -------------------------------*/ static void init_dp_table(void); void init_symmetry() { int i, j, count; Symmetry.symlabel = chkpt_rd_sym_label(); Symmetry.nirreps = chkpt_rd_nirreps(); Symmetry.num_so = chkpt_rd_nso(); Symmetry.num_unique_atoms = chkpt_rd_num_unique_atom(); Symmetry.num_unique_shells = chkpt_rd_num_unique_shell(); Symmetry.atom_positions = chkpt_rd_atom_position(); Symmetry.ua2a = chkpt_rd_ua2a(); Symmetry.us2s = chkpt_rd_us2s(); Symmetry.sopi = chkpt_rd_sopi(); Symmetry.sym_oper = chkpt_rd_symoper(); Symmetry.irr_labels = chkpt_rd_irr_labs(); Symmetry.ict = chkpt_rd_ict(); Symmetry.cartrep = chkpt_rd_cartrep(); Symmetry.cdsalcpi = chkpt_rd_cdsalcpi(); Symmetry.cdsalc2cd = chkpt_rd_cdsalc2cd(); Symmetry.cdsalc_ioffset = init_int_array(Symmetry.nirreps); Symmetry.cdsalc_ioffset[0] = 0; for(i=1;i 1) free_int_matrix(Symmetry.dp_table); free(Symmetry.sopi); free_block(Symmetry.usotao); free(Symmetry.us2s); free(Symmetry.atom_positions); free(Symmetry.cartrep); return; } /*!---------------------------------------------------------------------- Compute direct product multiplication table for the given point group NOTE: This matrix is really pointless at the moment, I left it here just in case ----------------------------------------------------------------------*/ void init_dp_table(void) { int i,j; Symmetry.dp_table = init_int_matrix(Symmetry.nirreps, Symmetry.nirreps); for(i=0;i #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { void free_Taylor_Fm_Eval(); static void compute_fm(double *F, double T, unsigned int l) { return; } /*------------------------------------------------------ Initialize Taylor_Fm_Eval object (computes incomplete gamma function via Taylor interpolation) ------------------------------------------------------*/ void init_Taylor_Fm_Eval(unsigned int mmax, double epsilon) { int i, m; int T_idx; double T, T_new; double egamma, func, dfuncdT; double term, sum, denom, rel_error; /* if (mmax == 0) throw std::domain_error("Called init_Taylor_Fm_Eval with argument of zero");*/ Taylor_Fm_Eval.cutoff = epsilon; /*--------------------------------------- We are doing Taylor interpolation with n=TAYLOR_ORDER terms here: error <= delT^n/(n+1)! ---------------------------------------*/ Taylor_Fm_Eval.order_interp = TAYLOR_ORDER; Taylor_Fm_Eval.delT = 2.0*pow(Taylor_Fm_Eval.cutoff*fac[Taylor_Fm_Eval.order_interp+1], 1.0/Taylor_Fm_Eval.order_interp); Taylor_Fm_Eval.max_m = mmax + Taylor_Fm_Eval.order_interp - 1; /*------------------------------------------------ Check if Taylor_Fm_Eval has been initialized with the same mmax before: 2) yes - re-initialize again 3) no - initialize ------------------------------------------------*/ if (Taylor_Fm_Eval.grid != NULL || Taylor_Fm_Eval.T_crit != NULL) { free_Taylor_Fm_Eval(); } Taylor_Fm_Eval.T_crit = init_array(Taylor_Fm_Eval.max_m + 1); /*--- m=0 is included! ---*/ Taylor_Fm_Eval.max_T = 0; /*--- Figure out T_crit for each m and put into the T_crit ---*/ for(m=Taylor_Fm_Eval.max_m;m>=0;m--) { /*------------------------------------------ Damped Newton-Raphson method to solve T^{m-0.5}*exp(-T) = epsilon*Gamma(m+0.5) The solution is the max T for which to do the interpolation ------------------------------------------*/ T = -log(epsilon); egamma = epsilon*sqrt(M_PI)*df[2*m]/pow(2,m); T_new = T; do { const double damping_factor = 0.2; double deltaT, max_deltaT, sign_deltaT; T = T_new; /* f(T) = the difference between LHS and RHS of the equation above */ func = pow(T,m-0.5) * exp(-T) - egamma; dfuncdT = ((m-0.5) * pow(T,m-1.5) - pow(T,m-0.5)) * exp(-T); /* f(T) has 2 roots and has a maximum in between. If f'(T) > 0 we are to the left of the hump. Make a big step to the right. */ if (dfuncdT > 0.0) T_new *= 2.0; else { /* damp the step */ deltaT = -func/dfuncdT; sign_deltaT = (deltaT > 0.0) ? 1.0 : -1.0; max_deltaT = damping_factor * T; if (fabs(deltaT) > max_deltaT) deltaT = sign_deltaT * max_deltaT; T_new = T + deltaT; } } while (fabs(func/egamma) >= SOFT_ZERO); Taylor_Fm_Eval.T_crit[m] = T_new; T_idx = (int) floor(T_new/Taylor_Fm_Eval.delT); if (T_idx > Taylor_Fm_Eval.max_T) Taylor_Fm_Eval.max_T = T_idx; } /*------------------------------------------------------- Tabulate the gamma function from t=delT to T_crit[m]: 1) include T=0 though the table is empty for T=0 since Fm(0) is simple to compute 2) modified MacLaurin series converges fastest for the largest m -> use it to compute Fmmax(T) see JPC 94, 5564 (1990). 3) then either use the series to compute the rest of the row or maybe use downward recursion -------------------------------------------------------*/ Taylor_Fm_Eval.grid = block_matrix(Taylor_Fm_Eval.max_T+1,Taylor_Fm_Eval.max_m+1); /*--- do the mmax first ---*/ for(m=0;m<=Taylor_Fm_Eval.max_m;m++) for(T_idx = Taylor_Fm_Eval.max_T; T_idx >= 0; T_idx--) { T = T_idx*Taylor_Fm_Eval.delT; denom = (m+0.5); term = 0.5*exp(-T)/denom; sum = term; do { denom += 1.0; term *= T/denom; sum += term; rel_error = term/sum; } while (rel_error >= Taylor_Fm_Eval.cutoff); Taylor_Fm_Eval.grid[T_idx][m] = sum; } /*--- final touch - set the pointer to the function to compute Fm(T) ---*/ Taylor_Fm_Eval.compute_Fm = compute_fm; return; } void free_Taylor_Fm_Eval() { free(Taylor_Fm_Eval.T_crit); Taylor_Fm_Eval.T_crit = NULL; free_block(Taylor_Fm_Eval.grid); Taylor_Fm_Eval.grid = NULL; return; } void taylor_compute_fm(double *F, double T, unsigned int l) { int m; unsigned int T_ind; double T_crit, two_T, exp_mT, h, F_m, F_mp1; double *F_row; #define STATIC_OO2NP1 #define STATIC_OON #include "static.h" T_crit = Taylor_Fm_Eval.T_crit[l]; two_T = 2.0*T; /*------------------------ First compute Fl(T) ... ------------------------*/ if (T > T_crit) { /*--- Asymptotic formula ---*/ F[l] = df[2*l]*sqrt(M_PI/2)/pow(two_T,l+0.5); } else { /*--- Taylor interpolation ---*/ T_ind = (unsigned int) floor(0.5+T/Taylor_Fm_Eval.delT); h = T_ind*Taylor_Fm_Eval.delT - T; F_row = Taylor_Fm_Eval.grid[T_ind] + l; F[l] = F_row[0] + h*(F_row[1] + oon[2]*h*(F_row[2] + oon[3]*h*(F_row[3] + oon[4]*h*(F_row[4] + oon[5]*h*(F_row[5]))))); } /*------------------------------------ And then do downward recursion in m ------------------------------------*/ if (l > 0) { F_mp1 = F[l]; exp_mT = exp(-T); for(m=l-1;m>=0;m--) { F_m = (exp_mT + two_T*F_mp1)*oo2np1[m]; F[m] = F_m; F_mp1 = F_m; } } return; } };}; psi3/src/bin/cints/Tools/taylor_fm_eval.h0000644000101500007650000000053210754417572017150 0ustar crawdad#ifndef _psi_src_bin_cints_Tools_taylor_fm_eval_h #define _psi_src_bin_cints_Tools_taylor_fm_eval_h /*! \file taylor_fm_eval.h \ingroup CINTS */ namespace psi { namespace CINTS { void init_Taylor_Fm_Eval(unsigned int mmax, double epsilon); void taylor_compute_fm(double *F, double T, unsigned int l); void free_Taylor_Fm_Eval(); };}; #endif psi3/src/bin/cints/Tools/transform.cc0000644000101500007650000001527110754417572016324 0ustar crawdad/*! \file transform.cc \ingroup CINTS \brief Enter brief description of file here ------------------------------------------------------------------------------------------------- Functions for performing four-index transformation from cartesian to pure angular momentum basis -------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { #if !USE_MM void transform_i(double *data, double *puream_data, double **c2p, int am_i, int nj, int nk, int nl) { register int i,j,k,l; int step = nj*nk*nl; int offset; double *ii; int ni, nsph, isph; double tmp; ni = ioff[am_i + 1]; nsph = 2*am_i + 1; for(j=0;j #include #include #include #include #include #include"defines.h" #define EXTERN #include"global.h" #include namespace psi { namespace CINTS { /*!------------------------------------------------------------------------------------ This function builds matrices of transformation coefficients for basis functions of each angular momentum type present in the basis ------------------------------------------------------------------------------------*/ double ***build_transmat(int *sym_oper, int nirreps, int max_am) { int i,j,l; int irr,coeff,ao,ao_max; int oper,symop; int **xexp_ao, **yexp_ao, **zexp_ao; int symX[8], symY[8], symZ[8]; int x,y,z; double ***ao_type_transmat; /*------------------------------------------------------------------------------------- Initialize global arrays of x, y, and z exponents for particular basis function type -------------------------------------------------------------------------------------*/ xexp_ao = init_int_matrix(max_am,ioff[max_am]); yexp_ao = init_int_matrix(max_am,ioff[max_am]); zexp_ao = init_int_matrix(max_am,ioff[max_am]); for(l=0;l #include #include #include namespace psi { namespace cis { struct onestack { double value; int i; int a; }; void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen); void amp_write_T1(dpdfile2 *T1, int length, FILE *outfile) { int m, h, nirreps, Gia; int i, I, a, A, numt1; double value; struct onestack *t1stack; nirreps = T1->params->nirreps; Gia = T1->my_irrep; t1stack = (struct onestack *) malloc(length * sizeof(struct onestack)); for(m=0; m < length; m++) { t1stack[m].value = 0; t1stack[m].i = 0; t1stack[m].a = 0; } dpd_file2_mat_init(T1); dpd_file2_mat_rd(T1); numt1 = 0; for(h=0; h < nirreps; h++) { numt1 += T1->params->rowtot[h] * T1->params->coltot[h^Gia]; for(i=0; i < T1->params->rowtot[h]; i++) { I = T1->params->roworb[h][i]; for(a=0; a < T1->params->coltot[h^Gia]; a++) { A = T1->params->colorb[h][a]; value = T1->matrix[h][i][a]; for(m=0; m < length; m++) { if((fabs(value) - fabs(t1stack[m].value)) > 1e-12) { onestack_insert(t1stack, value, I, A, m, length); break; } } } } } dpd_file2_mat_close(T1); for(m=0; m < ((numt1 < length) ? numt1 : length); m++) if(fabs(t1stack[m].value) > 1e-6) fprintf(outfile, "\t %3d %3d %20.10f\n", t1stack[m].i, t1stack[m].a, t1stack[m].value); free(t1stack); } void onestack_insert(struct onestack *stack, double value, int i, int a, int level, int stacklen) { int l; struct onestack temp; temp = stack[level]; stack[level].value = value; stack[level].i = i; stack[level].a = a; value = temp.value; i = temp.i; a = temp.a; for(l=level; l < stacklen-1; l++) { temp = stack[l+1]; stack[l+1].value = value; stack[l+1].i = i; stack[l+1].a = a; value = temp.value; i = temp.i; a = temp.a; } } }} // namespace psi::cis psi3/src/bin/cis/build_A.cc0000644000101500007650000001733510754663017014206 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { /* build_A(): Builds the CIS response matrix A, which is expressed in ** spin-orbitals as: ** ** A(ai,bj) = delta_ij f_ab - delta_ab f_ij - ** ** This routine will build each spin component of the entire matrix ** for later in-core diagonalization. ** ** RHF references: ** A(AI,BJ) = delta_IJ f_AB - delta_AB f_IJ + 2 - ** ** UHF and ROHF references: ** A(AI,BJ) = delta_IJ f_AB - delta_AB f_IJ - ** A(ai,bj) = delta_ij f_ab - delta_ab f_ij - ** A(AI,bj) = ** ** TDC, July 2002 */ void build_A(void) { int h, nirreps; int a, b, i, j, ai, bj, A, B, I, J, Asym, Bsym, Isym, Jsym; dpdbuf4 C, D, Amat, A_AA, A_BB, A_AB; dpdfile2 fIJ, fij, fAB, fab; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D "); dpd_buf4_sort(&D, CC_MISC, rpsq, 11, 11, "A(AI,BJ)"); dpd_buf4_close(&D); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); dpd_buf4_scm(&Amat, 2); dpd_buf4_close(&Amat); dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C "); dpd_buf4_sort_axpy(&C, CC_MISC, qpsr, 11, 11, "A(AI,BJ)", -1); dpd_buf4_sort(&C, CC_MISC, qpsr, 11, 11, "A(AI,BJ) triplet"); dpd_buf4_close(&C); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ) triplet"); dpd_buf4_scm(&Amat, -1); dpd_buf4_close(&Amat); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(ai=0; ai < Amat.params->rowtot[h]; ai++) { a = Amat.params->roworb[h][ai][0]; i = Amat.params->roworb[h][ai][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(bj=0; bj < Amat.params->coltot[h]; bj++) { b = Amat.params->colorb[h][bj][0]; j = Amat.params->colorb[h][bj][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][ai][bj] -= fIJ.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][ai][bj] += fAB.matrix[Asym][A][B]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&Amat, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ) triplet"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(ai=0; ai < Amat.params->rowtot[h]; ai++) { a = Amat.params->roworb[h][ai][0]; i = Amat.params->roworb[h][ai][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(bj=0; bj < Amat.params->coltot[h]; bj++) { b = Amat.params->colorb[h][bj][0]; j = Amat.params->colorb[h][bj][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][ai][bj] -= fIJ.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][ai][bj] += fAB.matrix[Asym][A][B]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); } else if(params.ref == 2) { /** UHF **/ /** --> A(AI,BJ) **/ dpd_buf4_init(&C, CC_CINTS, 0, 20, 20, 20, 20, 0, "C "); dpd_buf4_sort(&C, CC_MISC, qrsp, 21, 21, "A(AI,BJ)"); dpd_buf4_close(&C); dpd_buf4_init(&Amat, CC_MISC, 0, 21, 21, 21, 21, 0, "A(AI,BJ)"); dpd_buf4_scm(&Amat, -1); dpd_buf4_close(&Amat); /** --> A(ai,bj) **/ dpd_buf4_init(&C, CC_CINTS, 0, 30, 30, 30, 30, 0, "C "); dpd_buf4_sort(&C, CC_MISC, qrsp, 31, 31, "A(ai,bj)"); dpd_buf4_close(&C); dpd_buf4_init(&Amat, CC_MISC, 0, 31, 31, 31, 31, 0, "A(ai,bj)"); dpd_buf4_scm(&Amat, -1); dpd_buf4_close(&Amat); /** --> A(AI,bj) **/ dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_sort(&D, CC_MISC, rpsq, 21, 31, "A(AI,bj)"); dpd_buf4_close(&D); dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); dpd_buf4_init(&Amat, CC_MISC, 0, 21, 21, 21, 21, 0, "A(AI,BJ)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(ai=0; ai < Amat.params->rowtot[h]; ai++) { a = Amat.params->roworb[h][ai][0]; i = Amat.params->roworb[h][ai][1]; A = fAB.params->rowidx[a]; I = fIJ.params->rowidx[i]; Asym = fAB.params->psym[a]; Isym = fIJ.params->psym[i]; for(bj=0; bj < Amat.params->coltot[h]; bj++) { b = Amat.params->colorb[h][bj][0]; j = Amat.params->colorb[h][bj][1]; B = fAB.params->colidx[b]; J = fIJ.params->colidx[j]; Bsym = fAB.params->qsym[b]; Jsym = fIJ.params->qsym[j]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][ai][bj] -= fIJ.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][ai][bj] += fAB.matrix[Asym][A][B]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_buf4_init(&Amat, CC_MISC, 0, 31, 31, 31, 31, 0, "A(ai,bj)"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Amat, h); dpd_buf4_mat_irrep_rd(&Amat, h); for(ai=0; ai < Amat.params->rowtot[h]; ai++) { a = Amat.params->roworb[h][ai][0]; i = Amat.params->roworb[h][ai][1]; A = fab.params->rowidx[a]; I = fij.params->rowidx[i]; Asym = fab.params->psym[a]; Isym = fij.params->psym[i]; for(bj=0; bj < Amat.params->coltot[h]; bj++) { b = Amat.params->colorb[h][bj][0]; j = Amat.params->colorb[h][bj][1]; B = fab.params->colidx[b]; J = fij.params->colidx[j]; Bsym = fab.params->qsym[b]; Jsym = fij.params->qsym[j]; if((A==B) && (Isym==Jsym)) Amat.matrix[h][ai][bj] -= fij.matrix[Isym][I][J]; if((I==J) && (Asym==Bsym)) Amat.matrix[h][ai][bj] += fab.matrix[Asym][A][B]; } } dpd_buf4_mat_irrep_wrt(&Amat, h); dpd_buf4_mat_irrep_close(&Amat, h); } dpd_buf4_close(&Amat); dpd_file2_mat_close(&fab); dpd_file2_close(&fab); dpd_file2_mat_close(&fAB); dpd_file2_close(&fAB); dpd_file2_mat_close(&fij); dpd_file2_close(&fij); dpd_file2_mat_close(&fIJ); dpd_file2_close(&fIJ); } } }} // namespace psi::cis psi3/src/bin/cis/cache.cc0000644000101500007650000003751410757640026013711 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include namespace psi { namespace cis { void cache_abcd_rhf(int **cachelist); void cache_iabc_rhf(int **cachelist); void cache_ijab_rhf(int **cachelist); void cache_iajb_rhf(int **cachelist); void cache_ijka_rhf(int **cachelist); void cache_ijkl_rhf(int **cachelist); void cache_abcd_uhf(int **cachelist); void cache_iabc_uhf(int **cachelist); void cache_ijab_uhf(int **cachelist); void cache_iajb_uhf(int **cachelist); void cache_ijka_uhf(int **cachelist); void cache_ijkl_uhf(int **cachelist); int **cacheprep_uhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(32,32); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_uhf(cachelist); cache_ijka_uhf(cachelist); cache_ijab_uhf(cachelist); cache_iajb_uhf(cachelist); cache_iabc_uhf(cachelist); cache_abcd_uhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } int **cacheprep_rhf(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl_rhf(cachelist); cache_ijka_rhf(cachelist); cache_ijab_rhf(cachelist); cache_iajb_rhf(cachelist); cache_iabc_rhf(cachelist); cache_abcd_rhf(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd_uhf(int **cachelist) { /* */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; /* */ cachelist[15][15] = 1; cachelist[15][16] = 1; cachelist[15][17] = 1; cachelist[15][18] = 1; cachelist[15][19] = 1; cachelist[16][15] = 1; cachelist[16][16] = 1; cachelist[16][17] = 1; cachelist[16][18] = 1; cachelist[16][19] = 1; cachelist[17][15] = 1; cachelist[17][16] = 1; cachelist[17][17] = 1; cachelist[17][18] = 1; cachelist[17][19] = 1; cachelist[18][15] = 1; cachelist[18][16] = 1; cachelist[18][17] = 1; cachelist[18][18] = 1; cachelist[18][19] = 1; cachelist[19][15] = 1; cachelist[19][16] = 1; cachelist[19][17] = 1; cachelist[19][18] = 1; cachelist[19][19] = 1; /* */ cachelist[28][28] = 1; cachelist[29][29] = 1; cachelist[28][29] = 1; cachelist[29][28] = 1; } void cache_abcd_rhf(int **cachelist) { /* */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc_rhf(int **cachelist) { /* */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_iabc_uhf(int **cachelist) { /* */ cachelist[20][5] = 1; cachelist[20][6] = 1; cachelist[20][7] = 1; cachelist[20][8] = 1; cachelist[20][9] = 1; cachelist[21][5] = 1; cachelist[21][6] = 1; cachelist[21][7] = 1; cachelist[21][8] = 1; cachelist[21][9] = 1; /* */ cachelist[5][20] = 1; cachelist[5][21] = 1; cachelist[6][20] = 1; cachelist[6][21] = 1; cachelist[7][20] = 1; cachelist[7][21] = 1; cachelist[8][20] = 1; cachelist[8][21] = 1; cachelist[9][20] = 1; cachelist[9][21] = 1; /* */ cachelist[30][15] = 1; cachelist[30][16] = 1; cachelist[30][17] = 1; cachelist[30][18] = 1; cachelist[30][19] = 1; cachelist[31][15] = 1; cachelist[31][16] = 1; cachelist[31][17] = 1; cachelist[31][18] = 1; cachelist[31][19] = 1; /* */ cachelist[15][30] = 1; cachelist[15][31] = 1; cachelist[16][30] = 1; cachelist[16][31] = 1; cachelist[17][30] = 1; cachelist[17][31] = 1; cachelist[18][30] = 1; cachelist[18][31] = 1; cachelist[19][30] = 1; cachelist[19][31] = 1; /* */ cachelist[24][28] = 1; cachelist[24][29] = 1; cachelist[25][28] = 1; cachelist[25][29] = 1; /* */ cachelist[28][24] = 1; cachelist[28][25] = 1; cachelist[29][24] = 1; cachelist[29][25] = 1; } void cache_ijab_rhf(int **cachelist) { /* */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_ijab_uhf(int **cachelist) { /* */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; /* */ cachelist[10][15] = 1; cachelist[10][16] = 1; cachelist[10][17] = 1; cachelist[10][18] = 1; cachelist[10][19] = 1; cachelist[11][15] = 1; cachelist[11][16] = 1; cachelist[11][17] = 1; cachelist[11][18] = 1; cachelist[11][19] = 1; cachelist[12][15] = 1; cachelist[12][16] = 1; cachelist[12][17] = 1; cachelist[12][18] = 1; cachelist[12][19] = 1; cachelist[13][15] = 1; cachelist[13][16] = 1; cachelist[13][17] = 1; cachelist[13][18] = 1; cachelist[13][19] = 1; cachelist[14][15] = 1; cachelist[14][16] = 1; cachelist[14][17] = 1; cachelist[14][18] = 1; cachelist[14][19] = 1; /* */ cachelist[15][10] = 1; cachelist[15][11] = 1; cachelist[15][12] = 1; cachelist[15][13] = 1; cachelist[15][14] = 1; cachelist[16][10] = 1; cachelist[16][11] = 1; cachelist[16][12] = 1; cachelist[16][13] = 1; cachelist[16][14] = 1; cachelist[17][10] = 1; cachelist[17][11] = 1; cachelist[17][12] = 1; cachelist[17][13] = 1; cachelist[17][14] = 1; cachelist[18][10] = 1; cachelist[18][11] = 1; cachelist[18][12] = 1; cachelist[18][13] = 1; cachelist[18][14] = 1; cachelist[19][10] = 1; cachelist[19][11] = 1; cachelist[19][12] = 1; cachelist[19][13] = 1; cachelist[19][14] = 1; /* */ cachelist[22][28] = 1; cachelist[23][28] = 1; cachelist[22][29] = 1; cachelist[23][29] = 1; /* */ cachelist[28][22] = 1; cachelist[28][23] = 1; cachelist[29][22] = 1; cachelist[29][23] = 1; } void cache_iajb_rhf(int **cachelist) { /* */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_iajb_uhf(int **cachelist) { /* */ cachelist[20][20] = 1; cachelist[20][21] = 1; cachelist[21][20] = 1; cachelist[21][21] = 1; /* */ cachelist[30][30] = 1; cachelist[30][31] = 1; cachelist[31][30] = 1; cachelist[31][31] = 1; /* */ cachelist[24][24] = 1; cachelist[24][25] = 1; cachelist[25][24] = 1; cachelist[25][25] = 1; } void cache_ijka_rhf(int **cachelist) { /* */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijka_uhf(int **cachelist) { /* */ cachelist[0][20] = 1; cachelist[0][21] = 1; cachelist[1][20] = 1; cachelist[1][21] = 1; cachelist[2][20] = 1; cachelist[2][21] = 1; cachelist[3][20] = 1; cachelist[3][21] = 1; cachelist[4][20] = 1; cachelist[4][21] = 1; /* */ cachelist[20][0] = 1; cachelist[20][1] = 1; cachelist[20][2] = 1; cachelist[20][3] = 1; cachelist[20][4] = 1; cachelist[21][0] = 1; cachelist[21][1] = 1; cachelist[21][2] = 1; cachelist[21][3] = 1; cachelist[21][4] = 1; /* */ cachelist[10][30] = 1; cachelist[10][31] = 1; cachelist[11][30] = 1; cachelist[11][31] = 1; cachelist[12][30] = 1; cachelist[12][31] = 1; cachelist[13][30] = 1; cachelist[13][31] = 1; cachelist[14][30] = 1; cachelist[14][31] = 1; /* */ cachelist[30][10] = 1; cachelist[30][11] = 1; cachelist[30][12] = 1; cachelist[30][13] = 1; cachelist[30][14] = 1; cachelist[31][10] = 1; cachelist[31][11] = 1; cachelist[31][12] = 1; cachelist[31][13] = 1; cachelist[31][14] = 1; /* */ cachelist[22][24] = 1; cachelist[22][25] = 1; cachelist[23][24] = 1; cachelist[23][25] = 1; /* */ cachelist[24][22] = 1; cachelist[25][22] = 1; cachelist[24][23] = 1; cachelist[25][23] = 1; } void cache_ijkl_rhf(int **cachelist) { /* */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } void cache_ijkl_uhf(int **cachelist) { /* */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; /* */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[10][12] = 1; cachelist[10][13] = 1; cachelist[10][14] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; cachelist[11][12] = 1; cachelist[11][13] = 1; cachelist[11][14] = 1; cachelist[12][10] = 1; cachelist[12][11] = 1; cachelist[12][12] = 1; cachelist[12][13] = 1; cachelist[12][14] = 1; cachelist[13][10] = 1; cachelist[13][11] = 1; cachelist[13][12] = 1; cachelist[13][13] = 1; cachelist[13][14] = 1; cachelist[14][10] = 1; cachelist[14][11] = 1; cachelist[14][12] = 1; cachelist[14][13] = 1; cachelist[14][14] = 1; /* */ cachelist[22][22] = 1; cachelist[22][23] = 1; cachelist[23][22] = 1; cachelist[23][23] = 1; } void cachedone_uhf(int **cachelist) { free_int_matrix(cachelist); } void cachedone_rhf(int **cachelist) { free_int_matrix(cachelist); } }} // namespace psi::cis psi3/src/bin/cis/cis.cc0000644000101500007650000002311211112564564013407 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include "Params.h" #include "MOInfo.h" #include "Local.h" #include "globals.h" namespace psi { namespace cis { void init_io(int argc, char *argv[]); void title(void); void exit_io(void); int **cacheprep_uhf(int level, int *cachefiles); int **cacheprep_rhf(int level, int *cachefiles); void cachedone_rhf(int **cachelist); void cachedone_uhf(int **cachelist); void get_moinfo(void); void get_params(void); void cleanup(void); void build_A(void); void d_corr(void); void local_init(void); void local_done(void); void amp_write_T1(dpdfile2 *T1, int length, FILE *outfile); void diag(void); }} // namespace psi::cis using namespace psi::cis; int main(int argc, char *argv[]) { char lbl[32]; int **cachelist, *cachefiles; int h, i, j, jj, k, nroot, a, max_j, max_a; double *weakp, value, d_value, **B_PAO; double *Bt, max_val, test_val, sum_val; int *spin, count, ivalue; dpdfile2 B; init_io(argc, argv); title(); get_moinfo(); get_params(); cachefiles = init_int_array(PSIO_MAXUNIT); if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/ cachelist = cacheprep_rhf(0, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym); } else if(params.ref == 2) { /** UHF **/ cachelist = cacheprep_uhf(0, cachefiles); dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym); } /* build components of CIS response matrix, A */ build_A(); /* diagonalize A within each irrep */ diag(); /* moved up with impunity??? */ if(params.local) local_init(); /* print eigenvalues and largest components of eigenvectors in ascending order */ if(params.ref == 0) { fprintf(outfile, "\tRHF-CIS Singlet Excitation Energies:\n"); fprintf(outfile, "\t------------------------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1 \n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.singlet_evals[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); fprintf(outfile, "\nLargest components of singlet excited wave function #%d/#%d:\n", h, i); sprintf(lbl, "BIA(%d)[%d] singlet", i, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); amp_write_T1(&B, 5, outfile); dpd_file2_close(&B); } } fprintf(outfile, "\n"); fprintf(outfile, "\tRHF-CIS Triplet Excitation Energies:\n"); fprintf(outfile, "\t------------------------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1 \n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.triplet_evals[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); fprintf(outfile, "\nLargest components of triplet excited wave function #%d/#%d:\n", h, i); sprintf(lbl, "BIA(%d)[%d] triplet", i, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); amp_write_T1(&B, 5, outfile); dpd_file2_close(&B); fprintf(outfile, "\n"); } } fprintf(outfile, "\n"); } fflush(outfile); /* compute the (D) correction to each CIS singlet excitation energy */ d_corr(); fprintf(outfile, "\n"); if(params.local) local_done(); /* print corrected eigenvalues in ascending order */ if(params.ref == 0) { fprintf(outfile, "\tRHF-CIS(D) Singlet Corrections:\n"); fprintf(outfile, "\t-------------------------------\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1 \n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.singlet_d[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); fprintf(outfile, "\tRHF-CIS(D) Singlet Excitation Energies:\n"); fprintf(outfile, "\t---------------------------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1 \n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.singlet_evals[h][i]; value += moinfo.singlet_d[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); if(params.local) { fprintf(outfile, "\tRHF-CIS(D) Weak Pair Corrections:\n"); fprintf(outfile, "\t---------------------------------\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1 \n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.singlet_weakp[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); } } else if(params.ref == 2) { fprintf(outfile, "\tUHF-CIS Excitation Energies:\n"); fprintf(outfile, "\t----------------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1\n"); fprintf(outfile, "\t ---- ----- ------------------ --------- -----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.uhf_evals[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); fprintf(outfile, "\tUHF-CIS(D) Corrections:\n"); fprintf(outfile, "\t-----------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1\n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.uhf_d[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); fprintf(outfile, "\tUHF-CIS(D) Excitation Energies:\n"); fprintf(outfile, "\t-------------------------------\n\n"); fprintf(outfile, "\t Root Irrep Hartree eV cm-1\n"); fprintf(outfile, "\t ---- ----- ------------------ --------- ----------\n"); for(h=0; h < moinfo.nirreps; h++) { for(i=0; i < params.rpi[h]; i++) { value = moinfo.uhf_evals[h][i]; value += moinfo.uhf_d[h][i]; fprintf(outfile, "CIS State %4d %3s %18.14f %9.5f %10.2f\n", i, moinfo.labels[h], value, value*_hartree2ev, value*_hartree2wavenumbers); } } fprintf(outfile, "\n"); } dpd_close(0); if(params.ref == 0 || params.ref == 1) cachedone_rhf(cachelist); else if(params.ref == 2) cachedone_uhf(cachelist); free(cachefiles); cleanup(); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CIS"; return(prgid); }} namespace psi { namespace cis { void init_io(int argc, char *argv[]) { char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); psio_open(CC_INFO, 1); psio_open(CC_OEI, 1); psio_open(CC_CINTS, 1); psio_open(CC_DINTS, 1); psio_open(CC_EINTS, 1); psio_open(CC_FINTS, 1); psio_open(CC_DENOM, 1); psio_open(CC_MISC, 0); psio_open(CC_TMP0, 0); psio_open(CC_TMP1, 0); } void title(void) { fprintf(outfile, "\t\t\t*************************\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t* CIS *\n"); fprintf(outfile, "\t\t\t* *\n"); fprintf(outfile, "\t\t\t*************************\n"); } void exit_io(void) { psio_close(CC_INFO, 1); psio_close(CC_OEI, 1); psio_close(CC_CINTS, 1); psio_close(CC_DINTS, 1); psio_close(CC_EINTS, 1); psio_close(CC_FINTS, 1); psio_close(CC_DENOM, 1); psio_close(CC_MISC, 1); psio_close(CC_TMP0, 0); psio_close(CC_TMP1, 0); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } }} // namespace psi::cis psi3/src/bin/cis/d_corr.cc0000644000101500007650000001733110757640026014111 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void mp2(void); void Fab_build(void); void Fij_build(void); void Fkc_build(int, int, enum Spin); void v_build(int, int, enum Spin); void Z_build(int, int, enum Spin); int U_build(int, int, double, enum Spin); void denom(int irrep, double root); void d_corr(void) { int h, root, errcod, ij, ab; char lbl[32]; double e1, e2_AA, e2_BB, e2_AB, e2; double **singlet_d, **singlet_weakp, **triplet_d, **uhf_d, *pair_energy; dpdfile2 F, B, B_A, B_B, V, V_A, V_B; dpdbuf4 D, U, Z; /* compute the first-order ground-state wfn and MP2 energy */ mp2(); /* Compute intermediates Fab and Fij */ Fab_build(); Fij_build(); if(params.ref == 0) { /** RHF **/ singlet_d = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) singlet_d[h] = init_array(params.rpi[h]); moinfo.singlet_d = singlet_d; if(params.local) { singlet_weakp = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) singlet_weakp[h] = init_array(params.rpi[h]); moinfo.singlet_weakp = singlet_weakp; pair_energy = init_array(local.nocc*local.nocc); } triplet_d = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) triplet_d[h] = init_array(params.rpi[h]); moinfo.triplet_d = triplet_d; } else if(params.ref == 2) { /** UHF **/ uhf_d = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) uhf_d[h] = init_array(params.rpi[h]); moinfo.uhf_d = uhf_d; } /** loop over the desired roots **/ for(h=0; h < moinfo.nirreps; h++) { if(params.ref == 0) { /** RHF **/ for(root=0; root < params.rpi[h]; root++) { /* build the Fkc intermediate for this root */ Fkc_build(h, root, singlet); /* build the v1 intermediate */ v_build(h, root, singlet); /* e1 = b_i^a v_i^a */ sprintf(lbl, "BIA(%d)[%d] singlet", root, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); sprintf(lbl, "VIA[%d]", h); dpd_file2_init(&V, CC_MISC, h, 0, 1, lbl); e1 = dpd_file2_dot(&V, &B); dpd_file2_close(&V); dpd_file2_close(&B); /* compute the first-order excited-state doubles: u_ij^ab = { b_i^c - b_j^c + b_k^b - b_k^a}/(D_ij^ab + w) */ Z_build(h, root, singlet); /* generate the necessary denominators */ denom(h, moinfo.singlet_evals[h][root]); errcod = U_build(h, root, moinfo.singlet_evals[h][root], singlet); if(!errcod) { /* e2 = 1/4 [ u_ij^ab * ( b_i^c - b_j^c + b_k^b - b_k^a ) */ sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 0, 5, 0, 5, 0, lbl); e2 = dpd_buf4_dot(&Z, &U); dpd_buf4_close(&U); dpd_buf4_close(&Z); /* fprintf(outfile, "Singlet: irrep = %d; root = %d; e1 = %20.14f\n", h, root, e1); */ /* fprintf(outfile, "Singlet: irrep = %d; root = %d; e2 = %20.14f\n", h, root, e2); */ singlet_d[h][root] = e1 + e2; if(params.local) { /* compute the weak-pair E2 correction */ sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 0, 5, 0, 5, 0, lbl); dpd_buf4_mat_irrep_init(&U, 0); dpd_buf4_mat_irrep_rd(&U, 0); dpd_buf4_mat_irrep_init(&Z, 0); dpd_buf4_mat_irrep_rd(&Z, 0); singlet_weakp[h][root] = 0.0; for(ij=0; ij < local.nocc*local.nocc; ij++) { if(local.weak_pairs[ij]) { for(ab=0; ab < local.nvir*local.nvir; ab++) { singlet_weakp[h][root] += Z.matrix[0][ij][ab] * U.matrix[0][ij][ab]; } } pair_energy[ij] = 0.0; for(ab=0; ab < local.nvir*local.nvir; ab++) pair_energy[ij] += Z.matrix[0][ij][ab] * U.matrix[0][ij][ab]; } dpd_buf4_mat_irrep_close(&Z, 0); dpd_buf4_mat_irrep_close(&U, 0); dpd_buf4_close(&Z); dpd_buf4_close(&U); sprintf(lbl, "CIS(D) Pair Energies (%d)", root); psio_write_entry(CC_INFO, lbl, (char *) pair_energy, local.nocc*local.nocc*sizeof(double)); } } else singlet_d[h][root] = 0.0; } for(root=0; root < params.rpi[h]; root++) { /* Fkc_build(h, root, triplet); v_build(h, root, triplet); sprintf(lbl, "BIA(%d)[%d] triplet", root, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); sprintf(lbl, "VIA[%d]", h); dpd_file2_init(&V, CC_MISC, h, 0, 1, lbl); e1 = dpd_file2_dot(&V, &B); dpd_file2_close(&V); dpd_file2_close(&B); Z_build(h, root, triplet); denom(h, moinfo.triplet_evals[h][root]); sprintf(lbl, "ZIjAb[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "dIjAb[%d]", h); dpd_buf4_init(&D, CC_MISC, h, 0, 5, 0, 5, 0, lbl); dpd_buf4_dirprd(&D, &U); dpd_buf4_close(&D); dpd_buf4_close(&U); sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "ZIjAb[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 0, 5, 0, 5, 0, lbl); e2 = dpd_buf4_dot(&Z, &U); dpd_buf4_close(&U); dpd_buf4_close(&Z); */ /* fprintf(outfile, "Triplet: irrep = %d; root = %d; e1 = %20.14f\n", h, root, e1); */ /* fprintf(outfile, "Triplet: irrep = %d; root = %d; e1 = %20.14f\n", h, root, e2); */ /* triplet_d[h][root] = e1 + e2; */ } } else if(params.ref == 2) { /** UHF **/ for(root=0; root < params.rpi[h]; root++) { /* build the Fkc intermediate for this root */ Fkc_build(h, root, uhf); /* build the v1 intermediate */ v_build(h, root, uhf); /* e1 = b_i^a v_i^a */ sprintf(lbl, "BIA(%d)[%d]", root, h); dpd_file2_init(&B_A, CC_OEI, h, 0, 1, lbl); sprintf(lbl, "Bia(%d)[%d]", root, h); dpd_file2_init(&B_B, CC_OEI, h, 2, 3, lbl); sprintf(lbl, "VIA[%d]", h); dpd_file2_init(&V_A, CC_MISC, h, 0, 1, lbl); sprintf(lbl, "Via[%d]", h); dpd_file2_init(&V_B, CC_MISC, h, 2, 3, lbl); e1 = dpd_file2_dot(&V_A, &B_A); e1 += dpd_file2_dot(&V_B, &B_B); dpd_file2_close(&V_A); dpd_file2_close(&V_B); dpd_file2_close(&B_A); dpd_file2_close(&B_B); /* compute the first-order excited-state doubles: z_ij^ab = { b_i^c - b_j^c + b_k^b - b_k^a}/(D_ij^ab + w) */ Z_build(h, root, uhf); /* generate the necessary denominators */ denom(h, moinfo.uhf_evals[h][root]); U_build(h, root, moinfo.uhf_evals[h][root], uhf); /* e2 = 1/4 [ u_ij^ab * ( b_i^c - b_j^c + b_k^b - b_k^a ) */ sprintf(lbl, "UIJAB[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "ZIJAB[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 2, 7, 2, 7, 0, lbl); e2_AA = dpd_buf4_dot(&Z, &U); dpd_buf4_close(&U); dpd_buf4_close(&Z); sprintf(lbl, "Uijab[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "Zijab[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 12, 17, 12, 17, 0, lbl); e2_BB = dpd_buf4_dot(&Z, &U); dpd_buf4_close(&U); dpd_buf4_close(&Z); sprintf(lbl, "UIjAb[%d]", h); dpd_buf4_init(&U, CC_MISC, h, 22, 28, 22, 28, 0, lbl); sprintf(lbl, "ZIjAb[%d]", h); dpd_buf4_init(&Z, CC_MISC, h, 22, 28, 22, 28, 0, lbl); e2_AB = dpd_buf4_dot(&Z, &U); dpd_buf4_close(&U); dpd_buf4_close(&Z); uhf_d[h][root] = e1 + e2_AA + e2_BB + e2_AB; } } } if(params.local) free(pair_energy); } }} // namespace psi::cis psi3/src/bin/cis/denom.cc0000644000101500007650000001371210754663017013744 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void denom(int irrep, double root) { int Gij, Gab; int ij, ab, i, j, a, b, I, J, A, B, isym, jsym, asym, bsym; int nirreps; int *occpi, *virtpi, *occ_off, *vir_off; int *aoccpi, *avirtpi, *aocc_off, *avir_off; int *boccpi, *bvirtpi, *bocc_off, *bvir_off; double fii, fjj, faa, fbb; dpdfile2 fIJ, fij, fAB, fab; dpdbuf4 D; char lbl[32]; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ occpi = moinfo.occpi; virtpi = moinfo.virtpi; occ_off = moinfo.occ_off; vir_off = moinfo.vir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 0, 0, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 1, 1, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); sprintf(lbl, "dIjAb[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); for(Gij=0; Gij < nirreps; Gij++) { dpd_buf4_mat_irrep_init(&D, Gij); for(ij=0; ij < D.params->rowtot[Gij]; ij++) { i = D.params->roworb[Gij][ij][0]; j = D.params->roworb[Gij][ij][1]; isym = D.params->psym[i]; jsym = D.params->qsym[j]; I = i - occ_off[isym]; J = j - occ_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; for(ab=0; ab < D.params->coltot[Gij^irrep]; ab++) { a = D.params->colorb[Gij^irrep][ab][0]; b = D.params->colorb[Gij^irrep][ab][1]; asym = D.params->rsym[a]; bsym = D.params->ssym[b]; A = a - vir_off[asym]; B = b - vir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; D.matrix[Gij][ij][ab] = 1.0/(fii + fjj - faa - fbb + root); } } dpd_buf4_mat_irrep_wrt(&D, Gij); dpd_buf4_mat_irrep_close(&D, Gij); } dpd_buf4_close(&D); } else if(params.ref == 2) { /** UHF **/ aoccpi = moinfo.aoccpi; boccpi = moinfo.boccpi; avirtpi = moinfo.avirtpi; bvirtpi = moinfo.bvirtpi; aocc_off = moinfo.aocc_off; bocc_off = moinfo.bocc_off; avir_off = moinfo.avir_off; bvir_off = moinfo.bvir_off; dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fIJ); dpd_file2_mat_rd(&fIJ); dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij"); dpd_file2_mat_init(&fij); dpd_file2_mat_rd(&fij); dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fAB); dpd_file2_mat_rd(&fAB); dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab"); dpd_file2_mat_init(&fab); dpd_file2_mat_rd(&fab); sprintf(lbl, "dIJAB[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 1, 6, 1, 6, 0, lbl); for(Gij=0; Gij < nirreps; Gij++) { dpd_buf4_mat_irrep_init(&D, Gij); for(ij=0; ij < D.params->rowtot[Gij]; ij++) { i = D.params->roworb[Gij][ij][0]; j = D.params->roworb[Gij][ij][1]; isym = D.params->psym[i]; jsym = D.params->qsym[j]; I = i - aocc_off[isym]; J = j - aocc_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fIJ.matrix[jsym][J][J]; for(ab=0; ab < D.params->coltot[Gij^irrep]; ab++) { a = D.params->colorb[Gij^irrep][ab][0]; b = D.params->colorb[Gij^irrep][ab][1]; asym = D.params->rsym[a]; bsym = D.params->ssym[b]; A = a - avir_off[asym]; B = b - avir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fAB.matrix[bsym][B][B]; D.matrix[Gij][ij][ab] = 1.0/(fii + fjj - faa - fbb + root); } } dpd_buf4_mat_irrep_wrt(&D, Gij); dpd_buf4_mat_irrep_close(&D, Gij); } dpd_buf4_close(&D); sprintf(lbl, "dijab[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 11, 16, 11, 16, 0, lbl); for(Gij=0; Gij < nirreps; Gij++) { dpd_buf4_mat_irrep_init(&D, Gij); for(ij=0; ij < D.params->rowtot[Gij]; ij++) { i = D.params->roworb[Gij][ij][0]; j = D.params->roworb[Gij][ij][1]; isym = D.params->psym[i]; jsym = D.params->qsym[j]; I = i - bocc_off[isym]; J = j - bocc_off[jsym]; fii = fij.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; for(ab=0; ab < D.params->coltot[Gij^irrep]; ab++) { a = D.params->colorb[Gij^irrep][ab][0]; b = D.params->colorb[Gij^irrep][ab][1]; asym = D.params->rsym[a]; bsym = D.params->ssym[b]; A = a - bvir_off[asym]; B = b - bvir_off[bsym]; faa = fab.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; D.matrix[Gij][ij][ab] = 1.0/(fii + fjj - faa - fbb + root); } } dpd_buf4_mat_irrep_wrt(&D, Gij); dpd_buf4_mat_irrep_close(&D, Gij); } dpd_buf4_close(&D); sprintf(lbl, "dIjAb[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); for(Gij=0; Gij < nirreps; Gij++) { dpd_buf4_mat_irrep_init(&D, Gij); for(ij=0; ij < D.params->rowtot[Gij]; ij++) { i = D.params->roworb[Gij][ij][0]; j = D.params->roworb[Gij][ij][1]; isym = D.params->psym[i]; jsym = D.params->qsym[j]; I = i - aocc_off[isym]; J = j - bocc_off[jsym]; fii = fIJ.matrix[isym][I][I]; fjj = fij.matrix[jsym][J][J]; for(ab=0; ab < D.params->coltot[Gij^irrep]; ab++) { a = D.params->colorb[Gij^irrep][ab][0]; b = D.params->colorb[Gij^irrep][ab][1]; asym = D.params->rsym[a]; bsym = D.params->ssym[b]; A = a - avir_off[asym]; B = b - bvir_off[bsym]; faa = fAB.matrix[asym][A][A]; fbb = fab.matrix[bsym][B][B]; D.matrix[Gij][ij][ab] = 1.0/(fii + fjj - faa - fbb + root); } } dpd_buf4_mat_irrep_wrt(&D, Gij); dpd_buf4_mat_irrep_close(&D, Gij); } dpd_buf4_close(&D); dpd_file2_mat_close(&fIJ); dpd_file2_mat_close(&fij); dpd_file2_mat_close(&fAB); dpd_file2_mat_close(&fab); dpd_file2_close(&fIJ); dpd_file2_close(&fij); dpd_file2_close(&fAB); dpd_file2_close(&fab); } } }} // namespace psi::cis psi3/src/bin/cis/diag.cc0000644000101500007650000001555310757640026013551 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void diag(void) { int h, i, dim, dim_A, dim_B; int nroot, root; int ai, bj, ck, c, k, C, K, Ksym; double **A, *eps, **v; char lbl[32]; dpdbuf4 A_AA, A_BB, A_AB; dpdfile2 B; double **singlet_evals, **triplet_evals, **uhf_evals; if(params.ref == 0) { /**RHF **/ singlet_evals = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) singlet_evals[h] = init_array(params.rpi[h]); dpd_buf4_init(&A_AA, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ)"); for(h=0; h < moinfo.nirreps; h++) { dim = A_AA.params->rowtot[h]; eps = init_array(dim); v = block_matrix(dim, dim); dpd_buf4_mat_irrep_init(&A_AA, h); dpd_buf4_mat_irrep_rd(&A_AA, h); if(!strcmp(params.diag_method,"FULL")) sq_rsp(dim, dim, A_AA.matrix[h], eps, 1, v, 1e-14); else if(!strcmp(params.diag_method,"DAVIDSON")) { nroot = david(A_AA.matrix[h], dim, params.rpi[h], eps, v, params.convergence, 0); if(nroot != params.rpi[h]) fprintf(outfile, "\tDavidson algorithm converged only %d roots in irrep %d.\n", nroot, h); } dpd_buf4_mat_irrep_close(&A_AA, h); /* fprintf(outfile, "RHF-CIS Singlet Eigenvectors for irrep %d:\n", h); print_mat(v, dim, params.rpi[h], outfile); */ /* Store the eigenvectors in DPD entries and save the eigenvalues*/ for(root=0; root < params.rpi[h]; root++) { sprintf(lbl, "BIA(%d)[%d] singlet", root, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); dpd_file2_mat_init(&B); for(ck=0; ck < dim; ck++) { c = A_AA.params->roworb[h][ck][0]; k = A_AA.params->roworb[h][ck][1]; K = B.params->rowidx[k]; C = B.params->colidx[c]; Ksym = B.params->psym[k]; B.matrix[Ksym][K][C] = v[ck][root]; } dpd_file2_mat_wrt(&B); dpd_file2_mat_close(&B); dpd_file2_close(&B); singlet_evals[h][root] = eps[root]; } free(eps); free_block(v); } dpd_buf4_close(&A_AA); triplet_evals = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) triplet_evals[h] = init_array(params.rpi[h]); dpd_buf4_init(&A_AA, CC_MISC, 0, 11, 11, 11, 11, 0, "A(AI,BJ) triplet"); for(h=0; h < moinfo.nirreps; h++) { dim = A_AA.params->rowtot[h]; eps = init_array(dim); v = block_matrix(dim, dim); dpd_buf4_mat_irrep_init(&A_AA, h); dpd_buf4_mat_irrep_rd(&A_AA, h); if(!strcmp(params.diag_method, "FULL")) sq_rsp(dim, dim, A_AA.matrix[h], eps, 1, v, 1e-14); else if(!strcmp(params.diag_method,"DAVIDSON")) { nroot = david(A_AA.matrix[h], dim, params.rpi[h], eps, v, params.convergence, 0); if(nroot != params.rpi[h]) fprintf(outfile, "\tDavidson algorithm converged only %d roots in irrep %d.\n", nroot, h); } dpd_buf4_mat_irrep_close(&A_AA, h); /* Store the eigenvectors in DPD entries and save the eigenvalues*/ for(root=0; root < params.rpi[h]; root++) { sprintf(lbl, "BIA(%d)[%d] triplet", root, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); dpd_file2_mat_init(&B); for(ck=0; ck < dim; ck++) { c = A_AA.params->roworb[h][ck][0]; k = A_AA.params->roworb[h][ck][1]; K = B.params->rowidx[k]; C = B.params->colidx[c]; Ksym = B.params->psym[k]; B.matrix[Ksym][K][C] = v[ck][root]; } dpd_file2_mat_wrt(&B); dpd_file2_mat_close(&B); dpd_file2_close(&B); triplet_evals[h][root] = eps[root]; } free(eps); free_block(v); } dpd_buf4_close(&A_AA); moinfo.singlet_evals = singlet_evals; moinfo.triplet_evals = triplet_evals; } else if(params.ref == 2) { /** UHF **/ uhf_evals = (double **) malloc(moinfo.nirreps * sizeof(double *)); for(h=0; h < moinfo.nirreps; h++) uhf_evals[h] = init_array(params.rpi[h]); dpd_buf4_init(&A_AA, CC_MISC, 0, 21, 21, 21, 21, 0, "A(AI,BJ)"); dpd_buf4_init(&A_BB, CC_MISC, 0, 31, 31, 31, 31, 0, "A(ai,bj)"); dpd_buf4_init(&A_AB, CC_MISC, 0, 21, 31, 21, 31, 0, "A(AI,bj)"); for(h=0; h < moinfo.nirreps; h++) { dim_A = A_AA.params->rowtot[h]; dim_B = A_BB.params->rowtot[h]; dim = dim_A + dim_B; A = block_matrix(dim, dim); eps = init_array(dim); v = block_matrix(dim, dim); dpd_buf4_mat_irrep_init(&A_AA, h); dpd_buf4_mat_irrep_rd(&A_AA, h); for(ai=0; ai < dim_A; ai++) for(bj=0; bj < dim_A; bj++) A[ai][bj] = A_AA.matrix[h][ai][bj]; dpd_buf4_mat_irrep_close(&A_AA, h); dpd_buf4_mat_irrep_init(&A_BB, h); dpd_buf4_mat_irrep_rd(&A_BB, h); for(ai=0; ai < dim_B; ai++) for(bj=0; bj < dim_B; bj++) A[ai+dim_A][bj+dim_A] = A_BB.matrix[h][ai][bj]; dpd_buf4_mat_irrep_close(&A_BB, h); dpd_buf4_mat_irrep_init(&A_AB, h); dpd_buf4_mat_irrep_rd(&A_AB, h); for(ai=0; ai < dim_A; ai++) for(bj=0; bj < dim_B; bj++) A[ai][bj+dim_A] = A[bj+dim_A][ai] = A_AB.matrix[h][ai][bj]; dpd_buf4_mat_irrep_close(&A_AB, h); if(!strcmp(params.diag_method,"FULL")) sq_rsp(dim, dim, A, eps, 1, v, 1e-12); else if(!strcmp(params.diag_method,"DAVIDSON")) { nroot = david(A, dim, params.rpi[h], eps, v, params.convergence, 0); if(nroot != params.rpi[h]) fprintf(outfile, "\tDavidson algorithm converged only %d roots in irrep %d.\n", nroot, h); } /* fprintf(outfile, "UHF-CIS Eigenvectors for irrep %d:\n", h); print_mat(v, dim, params.rpi[h], outfile); */ /* Store the eigenvectors in DPD entries and save the eigenvalues */ for(root=0; root < params.rpi[h]; root++) { sprintf(lbl, "BIA(%d)[%d]", root, h); dpd_file2_init(&B, CC_OEI, h, 0, 1, lbl); dpd_file2_mat_init(&B); for(ck=0; ck < dim_A; ck++) { c = A_AA.params->roworb[h][ck][0]; k = A_AA.params->roworb[h][ck][1]; K = B.params->rowidx[k]; C = B.params->colidx[c]; Ksym = B.params->psym[k]; B.matrix[Ksym][K][C] = v[ck][root]; } dpd_file2_mat_wrt(&B); dpd_file2_mat_close(&B); dpd_file2_close(&B); sprintf(lbl, "Bia(%d)[%d]", root, h); dpd_file2_init(&B, CC_OEI, h, 2, 3, lbl); dpd_file2_mat_init(&B); for(ck=0; ck < dim_B; ck++) { c = A_BB.params->roworb[h][ck][0]; k = A_BB.params->roworb[h][ck][1]; K = B.params->rowidx[k]; C = B.params->colidx[c]; Ksym = B.params->psym[k]; B.matrix[Ksym][K][C] = v[ck+dim_A][root]; } dpd_file2_mat_wrt(&B); dpd_file2_mat_close(&B); dpd_file2_close(&B); uhf_evals[h][root] = eps[root]; } free(eps); free_block(v); free_block(A); } dpd_buf4_close(&A_AA); dpd_buf4_close(&A_BB); dpd_buf4_close(&A_AB); moinfo.uhf_evals = uhf_evals; } } }} // namespace psi::cis psi3/src/bin/cis/Fab.cc0000644000101500007650000000351610754663017013333 0ustar crawdad/*! \defgroup CIS cis: Compute CI singles for excited states */ /*! \file \ingroup CIS \brief Compute CI singles for excited states */ #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void Fab_build(void) { dpdfile2 F; dpdbuf4 D, T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&F, CC_MISC, 0, 1, 1, "FAB"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2 - "); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 3, 3, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&F, CC_MISC, 0, 1, 1, "FAB"); dpd_buf4_init(&D, CC_DINTS, 0, 2, 5, 2, 5, 0, "D (I>J,AB)"); dpd_buf4_init(&T2, CC_MISC, 0, 2, 5, 2, 7, 0, "MP2 tIJAB"); dpd_contract442(&T2, &D, &F, 3, 3, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 2, 2, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 3, 3, "Fab"); dpd_buf4_init(&D, CC_DINTS, 0, 12, 15, 12, 15, 0, "D (i>j,ab)"); dpd_buf4_init(&T2, CC_MISC, 0, 12, 15, 12, 17, 0, "MP2 tijab"); dpd_contract442(&T2, &D, &F, 3, 3, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 3, 3, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); } } }} // namespace psi::cis psi3/src/bin/cis/Fij.cc0000644000101500007650000000341410754663017013350 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void Fij_build(void) { dpdfile2 F; dpdbuf4 D, T2; if(params.ref == 0) { /** RHF **/ dpd_file2_init(&F, CC_MISC, 0, 0, 0, "FIJ"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2 - "); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); } else if(params.ref == 2) { /** UHF **/ dpd_file2_init(&F, CC_MISC, 0, 0, 0, "FIJ"); dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D (IJ,A>B)"); dpd_buf4_init(&T2, CC_MISC, 0, 0, 7, 2, 7, 0, "MP2 tIJAB"); dpd_contract442(&T2, &D, &F, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 0, 0, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 2, 2, "Fij"); dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D (ij,a>b)"); dpd_buf4_init(&T2, CC_MISC, 0, 10, 17, 12, 17, 0, "MP2 tijab"); dpd_contract442(&T2, &D, &F, 0, 0, -1, 0); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_contract442(&T2, &D, &F, 1, 1, -1, 1); dpd_buf4_close(&T2); dpd_buf4_close(&D); dpd_file2_close(&F); } } }} // namespace psi::cis psi3/src/bin/cis/Fkc.cc0000644000101500007650000000417210757640026013343 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void Fkc_build(int irrep, int root, enum Spin spin) { char lbl[32]; dpdfile2 B, F, B_A, B_B; dpdbuf4 D; if(params.ref == 0) { /** RHF **/ if(spin == singlet) sprintf(lbl, "BIA(%d)[%d] singlet", root, irrep); else sprintf(lbl, "BIA(%d)[%d] triplet", root, irrep); dpd_file2_init(&B, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "FKC(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 0, 1, lbl); if(spin == singlet) { dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2 - "); dpd_dot13(&B, &D, &F, 0, 0, 1, 0); } else { dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D "); dpd_dot14(&B, &D, &F, 0, 0, -1, 0); } dpd_buf4_close(&D); dpd_file2_close(&F); dpd_file2_close(&B); } else if(params.ref == 2) { /** UHF **/ sprintf(lbl, "BIA(%d)[%d]", root, irrep); dpd_file2_init(&B_A, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "Bia(%d)[%d]", root, irrep); dpd_file2_init(&B_B, CC_OEI, irrep, 2, 3, lbl); sprintf(lbl, "FKC(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 0, 1, lbl); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D "); dpd_dot13(&B_A, &D, &F, 0, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_dot24(&B_B, &D, &F, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&F); sprintf(lbl, "Fkc(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 2, 3, lbl); dpd_buf4_init(&D, CC_DINTS, 0, 10, 15, 10, 15, 0, "D "); dpd_dot13(&B_B, &D, &F, 0, 0, 1, 0); dpd_buf4_close(&D); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_dot13(&B_A, &D, &F, 0, 0, 1, 1); dpd_buf4_close(&D); dpd_file2_close(&F); dpd_file2_close(&B_A); dpd_file2_close(&B_B); } } }} // namespace psi::cis psi3/src/bin/cis/get_moinfo.cc0000644000101500007650000001403010757640026014760 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { /* ** get_moinfo(): Routine to obtain basic orbital information from ** CHKPT and CC_INFO. ** ** T. Daniel Crawford, October 1996 ** Modified by TDC, March 1999 */ void get_moinfo(void) { int i, h, p, q, errcod, nactive, nirreps; psio_address next; chkpt_init(PSIO_OPEN_OLD); moinfo.nirreps = chkpt_rd_nirreps(); moinfo.nmo = chkpt_rd_nmo(); moinfo.nso = chkpt_rd_nso(); moinfo.labels = chkpt_rd_irr_labs(); moinfo.enuc = chkpt_rd_enuc(); moinfo.escf = chkpt_rd_escf(); moinfo.orbspi = chkpt_rd_orbspi(); moinfo.clsdpi = chkpt_rd_clsdpi(); moinfo.openpi = chkpt_rd_openpi(); chkpt_close(); nirreps = moinfo.nirreps; psio_read_entry(CC_INFO, "Reference Wavefunction", (char *) &(params.ref), sizeof(int)); /* Get frozen and active orbital lookups from CC_INFO */ moinfo.frdocc = init_int_array(nirreps); moinfo.fruocc = init_int_array(nirreps); psio_read_entry(CC_INFO, "Frozen Core Orbs Per Irrep", (char *) moinfo.frdocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Frozen Virt Orbs Per Irrep", (char *) moinfo.fruocc, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); if(params.ref == 2) { /** UHF **/ moinfo.aoccpi = init_int_array(nirreps); moinfo.boccpi = init_int_array(nirreps); moinfo.avirtpi = init_int_array(nirreps); moinfo.bvirtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orbs Per Irrep", (char *) moinfo.aoccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orbs Per Irrep", (char *) moinfo.boccpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orbs Per Irrep", (char *) moinfo.avirtpi, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orbs Per Irrep", (char *) moinfo.bvirtpi, sizeof(int)*moinfo.nirreps); moinfo.aocc_sym = init_int_array(nactive); moinfo.bocc_sym = init_int_array(nactive); moinfo.avir_sym = init_int_array(nactive); moinfo.bvir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Symmetry", (char *) moinfo.aocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Occ Orb Symmetry", (char *) moinfo.bocc_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Symmetry", (char *) moinfo.avir_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Beta Virt Orb Symmetry", (char *) moinfo.bvir_sym, sizeof(int)*nactive); moinfo.aocc_off = init_int_array(moinfo.nirreps); moinfo.bocc_off = init_int_array(moinfo.nirreps); moinfo.avir_off = init_int_array(moinfo.nirreps); moinfo.bvir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Occ Orb Offsets", (char *) moinfo.aocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Occ Orb Offsets", (char *) moinfo.bocc_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Alpha Virt Orb Offsets", (char *) moinfo.avir_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Beta Virt Orb Offsets", (char *) moinfo.bvir_off, sizeof(int)*moinfo.nirreps); } else { /** RHF or ROHF **/ moinfo.occpi = init_int_array(nirreps); moinfo.virtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) moinfo.occpi, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) moinfo.virtpi, sizeof(int)*nirreps); moinfo.occ_sym = init_int_array(nactive); moinfo.vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) moinfo.occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) moinfo.vir_sym, sizeof(int)*nactive); moinfo.occ_off = init_int_array(moinfo.nirreps); moinfo.vir_off = init_int_array(moinfo.nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) moinfo.occ_off, sizeof(int)*moinfo.nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) moinfo.vir_off, sizeof(int)*moinfo.nirreps); } /* Adjust clsdpi array for frozen orbitals */ for(i=0; i < nirreps; i++) moinfo.clsdpi[i] -= moinfo.frdocc[i]; moinfo.uoccpi = init_int_array(moinfo.nirreps); for(i=0; i < nirreps; i++) moinfo.uoccpi[i] = moinfo.orbspi[i] - moinfo.clsdpi[i] - moinfo.openpi[i] - moinfo.fruocc[i] - moinfo.frdocc[i]; psio_read_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref), sizeof(double)); fprintf(outfile,"\n\tNuclear Rep. energy (chkpt) = %20.15f\n",moinfo.enuc); fprintf(outfile, "\tSCF energy (chkpt) = %20.15f\n",moinfo.escf); fprintf(outfile, "\tReference energy (file100) = %20.15f\n",moinfo.eref); } /* Frees memory allocated in get_moinfo() and dumps out the energy. */ void cleanup(void) { int i; free(moinfo.orbspi); free(moinfo.clsdpi); free(moinfo.openpi); free(moinfo.uoccpi); free(moinfo.fruocc); free(moinfo.frdocc); for(i=0; i < moinfo.nirreps; i++) free(moinfo.labels[i]); free(moinfo.labels); if(params.ref == 2) { free(moinfo.aoccpi); free(moinfo.boccpi); free(moinfo.avirtpi); free(moinfo.bvirtpi); free(moinfo.aocc_sym); free(moinfo.bocc_sym); free(moinfo.avir_sym); free(moinfo.bvir_sym); free(moinfo.aocc_off); free(moinfo.bocc_off); free(moinfo.avir_off); free(moinfo.bvir_off); } else { free(moinfo.occpi); free(moinfo.virtpi); free(moinfo.occ_sym); free(moinfo.vir_sym); free(moinfo.occ_off); free(moinfo.vir_off); } } }} // namespace psi::cis psi3/src/bin/cis/get_params.cc0000644000101500007650000001350311100406637014747 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void get_params() { int h, i, j, errcod, ref, iconv, max_dim; char *cachetype = NULL; char *junk; errcod = ip_string("WFN", &(params.wfn), 0); if(strcmp(params.wfn, "CCSD") && strcmp(params.wfn, "CCSD_T") && strcmp(params.wfn, "EOM_CCSD") && strcmp(params.wfn, "CIS")) { fprintf(outfile, "Invalid value of input keyword WFN: %s\n", params.wfn); exit(PSI_RETURN_FAILURE); } errcod = ip_string("REFERENCE", &(junk),0); /* if no reference is given, assume rhf */ if (errcod != IPE_OK) { ref = 0; } else { if(!strcmp(junk, "RHF")) ref = 0; else if(!strcmp(junk, "ROHF")) ref = 1; else if(!strcmp(junk, "UHF")) ref = 2; else { printf("Invalid value of input keyword REFERENCE: %s\n", junk); exit(PSI_RETURN_FAILURE); } free(junk); } /* Make sure the value of ref matches that from CC_INFO */ if(params.ref != ref) { printf("Value of REFERENCE from input.dat (%1d) and CC_INFO (%1d) do not match!\n", ref, params.ref); exit(PSI_RETURN_FAILURE); } local.amp_print_cutoff = 0.60; errcod = ip_data("LOCAL_AMP_PRINT_CUTOFF","%lf",&(local.amp_print_cutoff),0); params.print = 0; errcod = ip_data("PRINT", "%d", &(params.print),0); params.maxiter = 500; errcod = ip_data("MAXITER","%d",&(params.maxiter),0); params.convergence = 1e-7; errcod = ip_data("CONVERGENCE","%d",&(iconv),0); if(errcod == IPE_OK) params.convergence = 1.0*pow(10.0,(double) -iconv); params.rpi = (int *) malloc(moinfo.nirreps * sizeof(int)); if (ip_exist("STATES_PER_IRREP",0)) { ip_count("STATES_PER_IRREP", &i, 0); if (i != moinfo.nirreps) { fprintf(outfile,"Dim. of states_per_irrep vector must be %d\n", moinfo.nirreps) ; exit(PSI_RETURN_FAILURE); } for (i=0;i max_dim) { fprintf(outfile, "\n\tRequested no. of roots for irrep %d exceeds basis limit.\n", h); fprintf(outfile, "\tSetting rpi[%d] = %d.\n", h, max_dim); params.rpi[h] = max_dim; } } if(ip_exist("DIAG_METHOD",0)) { errcod = ip_string("DIAG_METHOD", &(params.diag_method), 0); if(strcmp(params.diag_method,"DAVIDSON") && strcmp(params.diag_method,"FULL")) { fprintf(outfile, "Invalid diagonalization method requested: %s\n", params.diag_method); exit(PSI_RETURN_FAILURE); } } else { params.diag_method = (char *) malloc(9 * sizeof(char)); sprintf(params.diag_method, "%s", "DAVIDSON"); } params.local = 0; errcod = ip_boolean("LOCAL", &(params.local),0); local.cutoff = 0.02; errcod = ip_data("LOCAL_CUTOFF", "%lf", &(local.cutoff), 0); if(ip_exist("LOCAL_METHOD",0)) { errcod = ip_string("LOCAL_METHOD", &(local.method), 0); if(strcmp(local.method,"AOBASIS") && strcmp(local.method,"WERNER")) { fprintf(outfile, "Invalid local correlation method: %s\n", local.method); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.method = (char *) malloc(7 * sizeof(char)); sprintf(local.method, "%s", "WERNER"); } if(ip_exist("LOCAL_WEAKP",0)) { errcod = ip_string("LOCAL_WEAKP", &(local.weakp), 0); if(strcmp(local.weakp,"MP2") && strcmp(local.weakp,"NEGLECT") && strcmp(local.weakp,"NONE")) { fprintf(outfile, "Invalid method for treating local pairs: %s\n", local.weakp); exit(PSI_RETURN_FAILURE); } } else if(params.local) { local.weakp = (char *) malloc(4 * sizeof(char)); sprintf(local.weakp, "%s", "MP2"); } local.ghost = -1; if(ip_exist("LOCAL_GHOST",0)) errcod = ip_data("LOCAL_GHOST", "%d", &(local.ghost), 0); fndcor(&(params.memory),infile,outfile); fprintf(outfile, "\n\tInput parameters:\n"); fprintf(outfile, "\t-----------------\n"); fprintf(outfile, "\tWave function = %6s\n", params.wfn); fprintf(outfile, "\tReference wfn = %5s\n", (params.ref == 0) ? "RHF" : ((params.ref == 1) ? "ROHF" : "UHF")); fprintf(outfile, "\tMemory (Mbytes) = %5.1f\n",params.memory/1e6); fprintf(outfile, "\tRoots sought per irrep = "); for (i=0;i namespace psi { namespace cis { /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } EXTERN struct MOInfo moinfo; EXTERN struct Params params; EXTERN struct Local local; enum Spin {singlet, triplet, uhf}; }} // namespace psi::cis psi3/src/bin/cis/local.cc0000644000101500007650000006310510757640026013733 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { /*! ** local_init(): Set up parameters of local excitation domains. ** ** The orbital domains constructed here are based on those described ** in Broughton and Pulay, J. Comp. Chem. 14, 736-740 (1993). The ** localization of the occupied orbitals is done elsewhere (see the ** program "local"). Pair domains are defined as the union of pairs ** of single occupied orbital domains. "Weak pairs", which are ** defined as pair domains whose individual occupied orbital domains ** have no atoms in common, are identified (cf. int *weak_pairs). ** ** TDC, Jan-June 2002 */ void local_init(void) { int i, j, k, ij, stat, a, b, r, l, I, L; int nmo, nso, nocc, nocc_all, nvir, noei, nirreps, nfzc; double **C; /* AO -> localized MO transformation matrix */ double **Ci; /* localized MO -> AO transformation matrix */ double **D; /* 1/2 SCF closed-shell density matrix (AO) */ double **Rt, **Rt_full; /* Projected, redundant virtual transform (R-tilde) */ double **S; /* AO overlap */ double **St; /* Projected virtual overlap */ double **Xt; /* Projected, non-redundant virtual transform (X-tilde) */ double ***V; /* MO -> projected, redundant virtual transform */ double **Fmo;/* MO basis Fock matrix */ double **F; /* AO basis Fock matrix */ double **Ft; /* Projected, redundant virtual Fock matrix */ double **Fbar; /* Projected, non-redundant virtual Fock matrix */ double ***W; /* Transformation matrix from tilde -> bar for each ij pair*/ double *eps_occ; /* occupied orbital energies for local denominators */ double **eps_vir; /* virtual orbital energies for local denominators */ double **X, **Y; double *evals, **evecs; double *eps_all; /* All MO energies */ dpdfile2 fock, FMI, FAE; int natom, atom, am, offset, nshell, shell_length, next_atom; int row, col, max, m, errcod, cnt; int *rank, *boolean, *ipiv; int *l_length, *aostart, *aostop, *ao2atom; int *stype, *snuc; int **domain, *domain_len, **pairdomain, *pairdom_len, *pairdom_nrlen; int *weak_pairs; double *fR, cutoff, *charge, *SR, *Z, tmp, *ss; int print_test, num_entries, entry_len, orbital; int t1_length, t2_length, puream, weak; double norm; int num_zero; double **U, **R, **WW, **RS; chkpt_init(PSIO_OPEN_OLD); C = chkpt_rd_scf(); natom = chkpt_rd_natom(); nshell = chkpt_rd_nshell(); puream = chkpt_rd_puream(); eps_all = chkpt_rd_evals(); stype = chkpt_rd_stype(); snuc = chkpt_rd_snuc(); chkpt_close(); timer_on("Local"); /* C1 symmetry only */ nirreps = moinfo.nirreps; if(nirreps != 1) { fprintf(outfile, "\nError: localization must use C1 symmetry.\n"); exit(PSI_RETURN_FAILURE); } nso = moinfo.nso; nmo = moinfo.nmo; /* should be the same as nso */ if(nmo != nso) { fprintf(outfile, "\nError: NMO != NSO! %d != %d\n", nmo, nso); exit(PSI_RETURN_FAILURE); } nocc = moinfo.occpi[0]; /* active doubly occupied orbitals */ nfzc = moinfo.frdocc[0]; /* frozen doubly occupied orbitals */ nocc_all = nocc + nfzc; /* all doubly occupied orbitals */ nvir = moinfo.virtpi[0]; /* active virtual orbitals */ local.nso = nso; local.natom = natom; local.nocc = nocc; local.nvir = nvir; /* A couple of scratch arrays */ X = block_matrix(nso, nso); Y = block_matrix(nso, nso); /* Invert C */ Ci = block_matrix(nso, nso); for(i=0; i < nso; i++) for(j=0; j < nso; j++) Y[i][j] = C[i][j]; invert_matrix(C, Ci, nso, outfile); for(i=0; i < nso; i++) for(j=0; j < nso; j++) C[i][j] = Y[i][j]; /* fprintf(outfile, "\n\tC inverse (Ci):\n"); print_mat(Ci, nso, nso, outfile); */ /* Compute the AO-basis overlap integrals */ /* S = block_matrix(nso,nso); C_DGEMM('t','n',nso,nso,nso,1.0,&(Ci[0][0]),nso,&(Ci[0][0]),nso, 0.0,&(S[0][0]),nso); */ /* Get the overlap integrals -- these should be identical to AO S */ noei = nso*(nso+1)/2; ss = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_SO_S,ss,noei,0,0,outfile); S = block_matrix(nso,nso); for(i=0,ij=0; i < nso; i++) for(j=0; j <= i; j++,ij++) { S[i][j] = S[j][i] = ss[ij]; } free(ss); /* fprintf(outfile, "\n\tAO Overlap (S)\n"); print_mat(S, nso, nso, outfile); */ /* Build the SCF closed-shell density matrix/2 */ D = block_matrix(nso,nso); for(i=0; i < nso; i++) for(j=0; j < nso; j++) for(k=0; k < nocc_all; k++) D[i][j] += C[i][k] * C[j][k]; /* fprintf(outfile, "\n\tAO-basis SCF Density (D):\n"); print_mat(D, nso, nso, outfile); */ /* Compute the length of each AM block */ l_length = init_int_array(LIBINT_MAX_AM); l_length[0] = 1; for(l=1; l < LIBINT_MAX_AM; l++) { if(puream) l_length[l] = 2 * l + 1; else l_length[l] = l_length[l-1] + l + 1; } /* Set up the atom->AO and AO->atom lookups */ aostart = init_int_array(natom); aostop = init_int_array(natom); for(i=0,atom=-1,offset=0; i < nshell; i++) { am = stype[i] - 1; shell_length = l_length[am]; if(atom != snuc[i] - 1) { if(atom != -1) aostop[atom] = offset-1; atom = snuc[i]-1; aostart[atom] = offset; } offset += shell_length; } aostop[atom] = offset-1; ao2atom = init_int_array(nso); for(i=0; i < natom; i++) for(j=aostart[i]; j <= aostop[i]; j++) ao2atom[j] = i; free(stype); free(snuc); /************* Build the orbital domains ************/ domain = init_int_matrix(nocc, natom); domain_len = init_int_array(nocc); charge = init_array(natom); rank = init_int_array(natom); boolean = init_int_array(natom); SR = init_array(nso); Z = init_array(nso); ipiv = init_int_array(nso); fR = init_array(nocc); for(i=nfzc; i < nocc_all; i++) { /* Compute the contribution of each atom to this orbital's charge/population */ for(j=0; j < natom; j++) { charge[j] = 0.0; for(k=aostart[j]; k <= aostop[j]; k++) { tmp = 0.0; for(l=0; l < nso; l++) tmp += S[k][l] * C[l][i]; tmp *= C[k][i]; charge[j] += tmp; } } /* Rank the atomic contributions to the orbital's charge */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* find the overall maximum */ if(fabs(charge[j]) >= fabs(charge[max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* find an unused max */ for(k=0; k < natom; k++) if((fabs(charge[k]) >= fabs(charge[max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* Build the orbital's domain starting in order of decreasing charge contribution */ for(j=0; j < nso; j++) { SR[j] = 0.0; for(k=0; k < nso; k++) SR[j] += S[j][k] * C[k][i]; } domain[i-nfzc][rank[0]] = 1; /* at least one atom must be in the domain */ domain_len[i-nfzc] = 1; fR[i-nfzc] = 1.0; next_atom = 1; while(fabs(fR[i-nfzc]) > local.cutoff) { /* Completeness check */ for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) { Z[row] = SR[k]; for(l=0,col=0; l < natom; l++) { if(domain[i-nfzc][l]) { for(m=aostart[l]; m <= aostop[l]; m++,col++) X[row][col] = S[k][m]; } } /* l */ } /* k */ } } /* j */ errcod = C_DGESV(row, 1, &(X[0][0]), nso, &(ipiv[0]), &(Z[0]), nso); if(errcod) { fprintf(outfile, "\nError in DGESV return in orbital domain construction.\n"); exit(PSI_RETURN_FAILURE); } fR[i-nfzc] = 1.0; for(j=0,row=0; j < natom; j++) { if(domain[i-nfzc][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) for(l=0; l < nso; l++) fR[i-nfzc] -= Z[row] * S[k][l] * C[l][i]; } } /* Augment the domain if necessary */ if(fabs(fR[i-nfzc]) > local.cutoff) { domain[i-nfzc][rank[next_atom++]] = 1; domain_len[i-nfzc]++; } } /* cutoff check */ } /* i */ /* Allow user adjustment of selected domains */ if(ip_exist("DOMAINS",0)) { ip_count("DOMAINS", &num_entries,0); for(i=0; i < num_entries; i++) { ip_count("DOMAINS", &entry_len, 1, i); ip_data("DOMAINS", "%d", &orbital, 2, i, 0); /* Clear out the current domain for this orbital */ /* for(j=0; j < natom; j++) domain[orbital][j] = 0; domain_len[orbital] = 0; */ for(j=1; j < entry_len; j++) { errcod = ip_data("DOMAINS","%d", &atom,2,i,j); domain[orbital][atom] = 1; domain_len[orbital]++; } } } /* Print the orbital domains */ max = 0; for(i=0; i < nocc; i++) if(domain_len[i] > max) max = domain_len[i]; fprintf(outfile, "\n ****** Occupied Orbital Domains ******\n"); fprintf(outfile, " Orbital Domain"); for(i=0; i < max-2; i++) fprintf(outfile, " "); /* formatting junk */ fprintf(outfile, " Completeness\n"); fprintf(outfile, " ------- ------"); for(i=0; i < max-2; i++) fprintf(outfile, "---"); /* more formatting junk */ fprintf(outfile, " ------------\n"); for(i=0; i < nocc; i++) { fprintf(outfile, " %2d ",i); for(j=0,cnt=0; j < natom; j++) if(domain[i][j]) { fprintf(outfile, " %2d", j); cnt++; } if(cnt < max) for(; cnt < max; cnt++) fprintf(outfile, " "); fprintf(outfile, " %7.5f\n", fR[i]); } fflush(outfile); /* Build the pair domains */ pairdomain = init_int_matrix(nocc*nocc,natom); pairdom_len = init_int_array(nocc*nocc); for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) for(k=0; k < natom; k++) { if(domain[i][k] || domain[j][k]) { pairdomain[ij][k] = 1; pairdom_len[ij] += aostop[k] - aostart[k] + 1; } } /* Identify and/or remove weak pairs */ weak_pairs = init_int_array(nocc*nocc); fprintf(outfile, "\n"); for(i=0,ij=0; i < nocc; i++) for(j=0; j < nocc; j++,ij++) { weak = 1; for(k=0; k < natom; k++) if(domain[i][k] && domain[j][k] && local.ghost != k) weak = 0; if(weak && strcmp(local.weakp,"NONE")) { weak_pairs[ij] = 1; if(!strcmp(local.weakp,"MP2")) fprintf(outfile, "\tPair %d %d [%d] is weak and will be treated with MP2.\n", i, j, ij); else if(!strcmp(local.weakp,"NEGLECT")) { fprintf(outfile, "\tPair %d %d = [%d] is weak and will be deleted.\n", i, j, ij); } } else weak_pairs[ij] = 0; } /* Compute the total number of singles and doubles */ t1_length = t2_length = 0; for(i=0,ij=0; i < nocc; i++) { t1_length += domain_len[i]; for(j=0; j < nocc; j++,ij++) { for(k=0; k < natom; k++) { for(l=0; l < natom; l++) { if(pairdomain[ij][k] && pairdomain[ij][l] && !weak_pairs[ij]) { for(a=aostart[k]; a <= aostop[k]; a++) for(b=aostart[l]; b <= aostop[l]; b++) t2_length++; } } } } } /* Print excitation space reduction info */ fprintf(outfile, "\n\tT1 Length = %d (local), %d (canonical)\n", t1_length, nocc*nvir); fprintf(outfile, "\tT2 Length = %d (local), %d (canonical)\n\n", t2_length, nocc*nocc*nvir*nvir); fflush(outfile); local.domain = domain; local.pairdomain = pairdomain; local.pairdom_len = pairdom_len; local.weak_pairs = weak_pairs; local.aostart = aostart; local.aostop = aostop; free(ao2atom); free(l_length); free(charge); free(rank); free(boolean); free(SR); free(Z); free(ipiv); free(fR); print_test = 0; ip_boolean("DOMAIN_PRINT",&(print_test),0); if(print_test) { fprintf(outfile, "Printing of orbital domains requested...exiting.\n\n"); exit(PSI_RETURN_FAILURE); } /************* Orbital Domains Complete ***************/ /* Compute the complete virtual space projector */ Rt_full = block_matrix(nso,nso); for(i=0; i < nso; i++) Rt_full[i][i] = 1.0; C_DGEMM('n','n',nso,nso,nso,-1.0,&(D[0][0]),nso,&(S[0][0]),nso, 1.0,&(Rt_full[0][0]),nso); /* fprintf(outfile, "\n\tVirtual-Space Projector (R-tilde):\n"); print_mat(Rt_full, nso, nso, outfile); */ /* Compute the norm of each PAO */ for(i=0; i < nso; i++) { norm = 0.0; for(j=0; j < nso; j++) { norm += Rt_full[j][i] * Rt_full[j][i]; } norm = sqrt(norm); if(norm < 0.1) { fprintf(outfile, "\tNorm of orbital %4d = %20.12f...deleteing\n", i, norm); for(j=0; j < nso; j++) Rt_full[j][i] = 0.0; } } fprintf(outfile, "\n"); fflush(outfile); /* Grab the MO-basis Fock matrix */ Fmo = block_matrix(nso, nso); for(i=0; i < nfzc; i++) Fmo[i][i] = eps_all[i]; dpd_file2_init(&fock, CC_OEI, 0, 0, 0, "fIJ"); dpd_file2_mat_init(&fock); dpd_file2_mat_rd(&fock); for(i=0; i < nocc; i++) for(j=0; j < nocc; j++) Fmo[i+nfzc][j+nfzc] = fock.matrix[0][i][j]; dpd_file2_mat_close(&fock); dpd_file2_close(&fock); dpd_file2_init(&fock, CC_OEI, 0, 1, 1, "fAB"); dpd_file2_mat_init(&fock); dpd_file2_mat_rd(&fock); for(i=0; i < nvir; i++) for(j=0; j < nvir; j++) Fmo[i+nfzc+nocc][j+nfzc+nocc] = fock.matrix[0][i][j]; dpd_file2_mat_close(&fock); dpd_file2_close(&fock); /* fprintf(outfile, "\n\tMO Basis Fock matrix:\n"); print_mat(Fmo, nso, nso, outfile); */ /* Build the AO-basis Fock matrix */ F = block_matrix(nso,nso); C_DGEMM('t','n',nso,nso,nso,1.0,&(Ci[0][0]),nso,&(Fmo[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('n','n',nso,nso,nso,1.0,&(X[0][0]),nso,&(Ci[0][0]),nso, 0.0,&(F[0][0]),nso); /* Build the occupied orbital energy list */ eps_occ = init_array(nocc); for(i=0;i < nocc; i++) eps_occ[i] = Fmo[i+nfzc][i+nfzc]; /* fprintf(outfile, "\n\tAO-Basis Fock Matrix:\n"); print_mat(F, nso, nso, outfile); */ /* Compute R^+ S for virtual orbitals */ RS = block_matrix(nvir,nso); for(a=0; a < nvir; a++) for(i=0; i < nso; i++) X[i][a] = C[i][a+nocc_all]; C_DGEMM('t','n',nvir,nso,nso,1.0,&(X[0][0]),nso,&(S[0][0]),nso,0.0,&(RS[0][0]),nso); /* Build the virtual metric and W transforms for each pair domain */ Rt = block_matrix(nso, nso); W = (double ***) malloc(nocc * nocc * sizeof(double **)); V = (double ***) malloc(nocc * nocc * sizeof(double **)); eps_vir = (double **) malloc(nocc * nocc * sizeof(double *)); pairdom_nrlen = init_int_array(nocc * nocc); /* dimension of non-redundant basis */ num_zero = 0; for(ij=0; ij < nocc * nocc; ij++) { if(pairdom_len[ij]) { zero_mat(Rt, nso, nso); /* Build the virtual space projector for this pair */ for(k=0,L=0; k < natom; k++) { if(pairdomain[ij][k]) { for(l=aostart[k]; l <= aostop[k]; l++,L++) { for(m=0; m < nso; m++) { Rt[m][L] = Rt_full[m][l]; } } } } /* Compute the MO -> projected virtual transformation matrix */ V[ij] = block_matrix(nvir,pairdom_len[ij]); C_DGEMM('n','n',nvir,pairdom_len[ij],nso,1.0,&(RS[0][0]),nso,&(Rt[0][0]),nso,0.0, &(V[ij][0][0]),pairdom_len[ij]); /* Virtual space metric */ St = block_matrix(pairdom_len[ij],pairdom_len[ij]); C_DGEMM('n','n',nso,pairdom_len[ij],nso,1.0,&(S[0][0]),nso,&(Rt[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('t','n',pairdom_len[ij],pairdom_len[ij],nso,1.0,&(Rt[0][0]),nso,&(X[0][0]),nso, 0.0,&(St[0][0]),pairdom_len[ij]); /* fprintf(outfile, "\n\tVirtual-Space Metric (S-tilde) for ij = %d:\n", ij); print_mat(St, pairdom_len[ij], pairdom_len[ij], outfile); */ /* Diagonalize metric */ evals = init_array(pairdom_len[ij]); evecs = block_matrix(pairdom_len[ij],pairdom_len[ij]); sq_rsp(pairdom_len[ij],pairdom_len[ij],St,evals,1,evecs,1e-12); /* Count the number of zero eigenvalues */ for(i=0,cnt=0; i < pairdom_len[ij]; i++) if(evals[i] <= 1e-6) cnt++; pairdom_nrlen[ij] = pairdom_len[ij]-cnt; /* fprintf(outfile, "\n\tS-tilde eigenvalues for ij = %d:\n", ij); for(i=0; i < pairdom_len[ij]; i++) fprintf(outfile, "\t%d %20.12f\n", i, evals[i]); fprintf(outfile, "\n\tS-tilde eigenvectors for ij = %d:\n", ij); print_mat(evecs,pairdom_len[ij],pairdom_len[ij],outfile); */ /* Build the projected, non-redundant transform (X-tilde) */ Xt = block_matrix(pairdom_len[ij],pairdom_nrlen[ij]); for(i=0,I=0; i < pairdom_len[ij]; i++) { if(evals[i] > 1e-6) { for(j=0; j < pairdom_len[ij]; j++) Xt[j][I] = evecs[j][i]/sqrt(evals[i]); I++; } else num_zero++; } /* fprintf(outfile, "\n\tTransform to non-redundant, projected virtuals (X-tilde) for ij = %d:\n", ij); print_mat(Xt, pairdom_len[ij], pairdom_nrlen[ij], outfile); */ free_block(evecs); free(evals); /* Build the projected (redundant) virtual Fock matrix */ Ft = block_matrix(pairdom_len[ij], pairdom_len[ij]); C_DGEMM('t','n',pairdom_len[ij],nso,nso,1.0,&(Rt[0][0]),nso,&(F[0][0]),nso, 0.0,&(X[0][0]),nso); C_DGEMM('n','n',pairdom_len[ij],pairdom_len[ij],nso,1.0,&(X[0][0]),nso,&(Rt[0][0]),nso, 0.0,&(Ft[0][0]),pairdom_len[ij]); /* Project the Fock matrix into the non-redundant virtual space */ Fbar = block_matrix(pairdom_nrlen[ij],pairdom_nrlen[ij]); C_DGEMM('t','n',pairdom_nrlen[ij],pairdom_len[ij],pairdom_len[ij],1.0, &(Xt[0][0]),pairdom_nrlen[ij],&(Ft[0][0]),pairdom_len[ij],0.0,&(X[0][0]),nso); C_DGEMM('n','n',pairdom_nrlen[ij],pairdom_nrlen[ij],pairdom_len[ij],1.0, &(X[0][0]),nso,&(Xt[0][0]),pairdom_nrlen[ij],0.0,&(Fbar[0][0]),pairdom_nrlen[ij]); /* fprintf(outfile, "\n\tFbar matrix for ij = %d:\n", ij); print_mat(Fbar,pairdom_nrlen[ij],pairdom_nrlen[ij],outfile); */ /* Diagonalize Fbar */ evals = init_array(pairdom_nrlen[ij]); evecs = block_matrix(pairdom_nrlen[ij],pairdom_nrlen[ij]); sq_rsp(pairdom_nrlen[ij],pairdom_nrlen[ij],Fbar,evals,1,evecs,1e-12); /* fprintf(outfile, "\n\tFbar eigenvectors for ij = %d:\n", ij); print_mat(evecs,pairdom_nrlen[ij],pairdom_nrlen[ij],outfile); */ /* Finally, build the W matrix */ W[ij] = block_matrix(pairdom_len[ij],pairdom_nrlen[ij]); C_DGEMM('n','n',pairdom_len[ij],pairdom_nrlen[ij],pairdom_nrlen[ij],1.0, &(Xt[0][0]),pairdom_nrlen[ij],&(evecs[0][0]),pairdom_nrlen[ij], 0.0,&(W[ij][0][0]),pairdom_nrlen[ij]); /* fprintf(outfile, "\n\tW Transformation Matrix for ij = %d:\n", ij); print_mat(W,pairdom_len[ij],pairdom_nrlen[ij],outfile); */ /* build the orbital energy list */ eps_vir[ij] = init_array(pairdom_nrlen[ij]); for(i=0; i < pairdom_nrlen[ij]; i++) eps_vir[ij][i] = evals[i]; /* virtual orbital energies */ /* fprintf(outfile, "\n\tVirtual orbital Energies for ij = %d:\n", ij); for(i=0; i < pairdom_nrlen[ij]; i++) fprintf(outfile, "%d %20.12f\n", i, eps_vir[ij][i]); */ free(evals); free_block(evecs); free_block(St); free_block(Xt); free_block(Fbar); free(Ft); } /* if(pairdom_len[ij]) */ } /* ij loop */ free_block(RS); free_block(F); free_block(Fmo); free_block(S); free_block(Rt_full); free_block(D); free_block(Ci); free_block(C); free_block(X); free_block(Y); local.W = W; local.V = V; local.eps_occ = eps_occ; local.eps_vir = eps_vir; local.pairdom_nrlen = pairdom_nrlen; local.weak_pair_energy = 0.0; fprintf(outfile, "\tLocalization parameters ready.\n\n"); fflush(outfile); timer_off("Local"); } /* ** local_done(): */ void local_done(void) { int i; free(local.eps_occ); for(i=0; i < local.nocc*local.nocc; i++) { if(local.pairdom_len[i]) { free_block(local.W[i]); free_block(local.V[i]); free(local.eps_vir[i]); } } free(local.W); free(local.V); free(local.eps_vir); free(local.aostart); free(local.aostop); free_int_matrix(local.pairdomain); free_int_matrix(local.domain); free(local.pairdom_len); free(local.pairdom_nrlen); free(local.weak_pairs); fprintf(outfile, "\tLocal parameters free.\n"); } void local_filter_T2(dpdbuf4 *T2) { int ij, i, j, a, b, ab; int nso, nocc, nvir; int *pairdom_len, *pairdom_nrlen, *weak_pairs; double ***V, ***W, *eps_occ, **eps_vir; double **X1, **X2, **T2tilde, **T2bar; nso = local.nso; nocc = local.nocc; nvir = local.nvir; V = local.V; W = local.W; eps_occ = local.eps_occ; eps_vir = local.eps_vir; pairdom_len = local.pairdom_len; pairdom_nrlen = local.pairdom_nrlen; weak_pairs = local.weak_pairs; /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', pairdom_len[ij], nvir, nvir, 1.0, &(V[ij][0][0]), pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', pairdom_len[ij], pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(V[ij][0][0]), pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', pairdom_nrlen[ij], pairdom_len[ij], pairdom_len[ij], 1.0, &(W[ij][0][0]), pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', pairdom_nrlen[ij], pairdom_nrlen[ij], pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(W[ij][0][0]), pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < pairdom_nrlen[ij]; a++) { for(b=0; b < pairdom_nrlen[ij]; b++) { T2bar[a][b] /= (eps_occ[i] + eps_occ[j] - eps_vir[ij][a] - eps_vir[ij][b]); } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', pairdom_len[ij], pairdom_nrlen[ij], pairdom_nrlen[ij], 1.0, &(W[ij][0][0]), pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', pairdom_len[ij], pairdom_len[ij], pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(W[ij][0][0]), pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, pairdom_len[ij], pairdom_len[ij], 1.0, &(V[ij][0][0]), pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(V[ij][0][0]), pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); } void local_filter_U2(dpdbuf4 *T2, double lambda) { int ij, i, j, a, b, ab; int nso, nocc, nvir; int *pairdom_len, *pairdom_nrlen, *weak_pairs; double ***V, ***W, *eps_occ, **eps_vir; double **X1, **X2, **T2tilde, **T2bar; nso = local.nso; nocc = local.nocc; nvir = local.nvir; V = local.V; W = local.W; eps_occ = local.eps_occ; eps_vir = local.eps_vir; pairdom_len = local.pairdom_len; pairdom_nrlen = local.pairdom_nrlen; weak_pairs = local.weak_pairs; /* Grab the MO-basis T2's */ dpd_buf4_mat_irrep_init(T2, 0); dpd_buf4_mat_irrep_rd(T2, 0); X1 = block_matrix(nso,nvir); X2 = block_matrix(nvir,nso); T2tilde = block_matrix(nso,nso); T2bar = block_matrix(nvir, nvir); for(i=0,ij=0; i < nocc; i++) { for(j=0; j < nocc; j++,ij++) { /* Transform the virtuals to the redundant projected virtual basis */ C_DGEMM('t', 'n', pairdom_len[ij], nvir, nvir, 1.0, &(V[ij][0][0]), pairdom_len[ij], &(T2->matrix[0][ij][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n', 'n', pairdom_len[ij], pairdom_len[ij], nvir, 1.0, &(X1[0][0]), nvir, &(V[ij][0][0]), pairdom_len[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the virtuals to the non-redundant virtual basis */ C_DGEMM('t', 'n', pairdom_nrlen[ij], pairdom_len[ij], pairdom_len[ij], 1.0, &(W[ij][0][0]), pairdom_nrlen[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 'n', pairdom_nrlen[ij], pairdom_nrlen[ij], pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(W[ij][0][0]), pairdom_nrlen[ij], 0.0, &(T2bar[0][0]), nvir); /* Divide the new amplitudes by the denominators */ for(a=0; a < pairdom_nrlen[ij]; a++) { for(b=0; b < pairdom_nrlen[ij]; b++) { T2bar[a][b] /= (eps_occ[i] + eps_occ[j] - eps_vir[ij][a] - eps_vir[ij][b] + lambda); } } /* Transform the new T2's to the redundant virtual basis */ C_DGEMM('n', 'n', pairdom_len[ij], pairdom_nrlen[ij], pairdom_nrlen[ij], 1.0, &(W[ij][0][0]), pairdom_nrlen[ij], &(T2bar[0][0]), nvir, 0.0, &(X1[0][0]), nvir); C_DGEMM('n','t', pairdom_len[ij], pairdom_len[ij], pairdom_nrlen[ij], 1.0, &(X1[0][0]), nvir, &(W[ij][0][0]), pairdom_nrlen[ij], 0.0, &(T2tilde[0][0]), nso); /* Transform the new T2's to the MO basis */ C_DGEMM('n', 'n', nvir, pairdom_len[ij], pairdom_len[ij], 1.0, &(V[ij][0][0]), pairdom_len[ij], &(T2tilde[0][0]), nso, 0.0, &(X2[0][0]), nso); C_DGEMM('n', 't', nvir, nvir, pairdom_len[ij], 1.0, &(X2[0][0]), nso, &(V[ij][0][0]), pairdom_len[ij], 0.0, &(T2->matrix[0][ij][0]), nvir); } } free_block(X1); free_block(X2); free_block(T2tilde); free_block(T2bar); /* Write the updated MO-basis T2's to disk */ dpd_buf4_mat_irrep_wrt(T2, 0); dpd_buf4_mat_irrep_close(T2, 0); } }} // namespace psi::cis psi3/src/bin/cis/Local.h0000644000101500007650000000106210754663017013531 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ namespace psi { namespace cis { struct Local { int natom; int nso; int nocc; int nvir; int *aostart; int *aostop; int **domain; int **pairdomain; int *pairdom_len; int *pairdom_nrlen; int *weak_pairs; int ghost; double ***V; double ***W; double *eps_occ; double **eps_vir; double cutoff; char *method; char *weakp; char *precon; double weak_pair_energy; double **U; double **WW; double amp_print_cutoff; }; }} // namespace psi::cis psi3/src/bin/cis/Makefile.in0000644000101500007650000000100610677315464014375 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ Fab.cc U.cc build_A.cc d_corr.cc get_moinfo.cc mp2.cc \ Fij.cc Z.cc cache.cc denom.cc get_params.cc v.cc \ Fkc.cc amp_write.cc cis.cc diag.cc local.cc \ BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif psi3/src/bin/cis/MOInfo.h0000644000101500007650000000541610754663017013635 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ namespace psi { namespace cis { struct MOInfo { int nirreps; /* no. of irreducible representations */ int nmo; /* no. of molecular orbitals */ int nso; /* no. of symmetry orbitals */ int *orbspi; /* no. of MOs per irrep */ int *orbsym; /* orbital symmetry (Pitzer/SO) */ int *clsdpi; /* no. of closed-shells per irrep excl. frdocc */ int *openpi; /* no. of open-shells per irrep */ int *uoccpi; /* no. of unoccupied orbitals per irr. ex. fruocc */ int *frdocc; /* no. of frozen core orbitals per irrep */ int *fruocc; /* no. of frozen unoccupied orbitals per irrep */ char **labels; /* irrep labels */ int *occpi; /* no. of occupied orbs. (incl. open) per irrep */ int *aoccpi; /* no. of alpha occupied orbs. (incl. open) per irrep */ int *boccpi; /* no. of beta occupied orbs. (incl. open) per irrep */ int *virtpi; /* no. of virtual orbs. (incl. open) per irrep */ int *avirtpi; /* no. of alpha virtual orbs. (incl. open) per irrep */ int *bvirtpi; /* no. of beta virtual orbs. (incl. open) per irrep */ int *occ_sym; /* relative occupied index symmetry */ int *aocc_sym; /* relative alpha occupied index symmetry */ int *bocc_sym; /* relative beta occupied index symmetry */ int *vir_sym; /* relative virtual index symmetry */ int *avir_sym; /* relative alpha virtual index symmetry */ int *bvir_sym; /* relative beta virtual index symmetry */ int *occ_off; /* occupied orbital offsets within each irrep */ int *aocc_off; /* occupied alpha orbital offsets within each irrep */ int *bocc_off; /* occupied beta orbital offsets within each irrep */ int *vir_off; /* virtual orbital offsets within each irrep */ int *avir_off; /* virtual alpha orbital offsets within each irrep */ int *bvir_off; /* virtual beta orbital offsets within each irrep */ double enuc; /* Nuclear repulsion energy */ double escf; /* SCF energy (from chkpt) */ double eref; /* Reference energy (file100) */ double **singlet_evals;/* RHF-CIS singlet excitation energies */ double **singlet_d; /* RHF-CIS(D) singlet excitation corrections */ double **singlet_weakp;/* RHF-CIS(D) singlet weak-pair corrections */ double **triplet_evals;/* RHF-CIS triplet excitation energies */ double **triplet_d; /* RHF-CIS triplet excitation corrections */ double **uhf_evals; /* UHF-CIS excitation energies */ double **uhf_d; /* UHF-CIS excitation corrections */ }; }} // namespace psi::cis psi3/src/bin/cis/mp2.cc0000644000101500007650000001366410757640026013344 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void local_filter_T1(dpdfile2 *T1); void local_filter_T2(dpdbuf4 *T2); void mp2(void) { int iter, h, nirreps, row, col; double energy, conv, rms, value; dpdfile2 F; dpdbuf4 D, T2, newT2, Z; nirreps = moinfo.nirreps; if(params.ref == 0) { /** RHF **/ /* build initial guess amplitudes */ dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D "); dpd_buf4_copy(&D, CC_MISC, "MP2 tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); if(params.local) local_filter_T2(&T2); else { dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); } dpd_buf4_copy(&T2, CC_MISC, "New MP2 tIjAb"); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2 - "); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); energy = dpd_buf4_dot(&D, &T2); dpd_buf4_close(&T2); dpd_buf4_close(&D); if(params.local) { fprintf(outfile, "\n\tSolving for LMP2 wave function:\n"); fprintf(outfile, "\t-------------------------------\n"); fprintf(outfile, "\titer = %d LMP2 Energy = %20.14f\n", 0, energy); } else { fprintf(outfile, "\n\tSolving for MP2 wave function:\n"); fprintf(outfile, "\t-------------------------------\n"); fprintf(outfile, "\titer = %d MP2 Energy = %20.14f\n", 0, energy); } conv = 0; for(iter=1; iter < params.maxiter; iter++) { dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D "); dpd_buf4_copy(&D, CC_MISC, "New MP2 tIjAb Increment"); dpd_buf4_close(&D); dpd_buf4_init(&newT2, CC_MISC, 0, 0, 5, 0, 5, 0, "New MP2 tIjAb Increment"); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract424(&T2, &F, &newT2, 1, 0, 1, -1, 1); dpd_contract244(&F, &T2, &newT2, 0, 0, 0, -1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract244(&F, &T2, &newT2, 1, 2, 1, 1, 1); dpd_contract424(&T2, &F, &newT2, 3, 1, 0, 1, 1); dpd_file2_close(&F); dpd_buf4_close(&T2); if(params.local) { local_filter_T2(&newT2); } else { dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb"); dpd_buf4_dirprd(&D, &newT2); dpd_buf4_close(&D); } dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_MISC, 0, 0, 5, 0, 5, 0, "New MP2 tIjAb"); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "New MP2 tIjAb Increment"); dpd_buf4_axpy(&T2, &newT2, 1); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2 - "); energy = dpd_buf4_dot(&D, &newT2); dpd_buf4_close(&D); dpd_buf4_close(&newT2); dpd_buf4_init(&newT2, CC_MISC, 0, 0, 5, 0, 5, 0, "New MP2 tIjAb"); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); rms = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&newT2, h); dpd_buf4_mat_irrep_rd(&newT2, h); dpd_buf4_mat_irrep_init(&T2, h); dpd_buf4_mat_irrep_rd(&T2, h); for(row=0; row < T2.params->rowtot[h]; row++) for(col=0; col < T2.params->coltot[h]; col++) { value = newT2.matrix[h][row][col] - T2.matrix[h][row][col]; rms += value * value; } dpd_buf4_mat_irrep_close(&T2, h); dpd_buf4_mat_irrep_close(&newT2, h); } dpd_buf4_close(&T2); dpd_buf4_close(&newT2); rms = sqrt(rms); if(params.local) { fprintf(outfile, "\titer = %d LMP2 Energy = %20.14f RMS = %4.3e\n", iter, energy, rms); } else { fprintf(outfile, "\titer = %d MP2 Energy = %20.14f RMS = %4.3e\n", iter, energy, rms); } if(rms < params.convergence) { conv = 1; fprintf(outfile, "\n\tMP2 iterations converged.\n\n"); break; } else { dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "New MP2 tIjAb"); dpd_buf4_copy(&T2, CC_MISC, "MP2 tIjAb"); dpd_buf4_close(&T2); } } if(!conv) { fprintf(outfile, "\n\tMP2 iterative procedure failed.\n"); exit(PSI_RETURN_FAILURE); } /* spin adapt the final amplitudes */ dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); dpd_buf4_sort(&T2, CC_TMP0, pqsr, 0, 5, "MP2 tIjbA"); dpd_buf4_copy(&T2, CC_MISC, "MP2 2 tIjAb - tIjbA"); dpd_buf4_close(&T2); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 2 tIjAb - tIjbA"); dpd_buf4_scm(&T2, 2); dpd_buf4_init(&Z, CC_TMP0, 0, 0, 5, 0, 5, 0, "MP2 tIjbA"); dpd_buf4_axpy(&Z, &T2, -1); dpd_buf4_close(&Z); dpd_buf4_close(&T2); } else if(params.ref == 2) { /** UHF **/ dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D (I>J,A>B)"); dpd_buf4_copy(&D, CC_MISC, "MP2 tIJAB"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_MISC, 0, 2, 7, 2, 7, 0, "MP2 tIJAB"); dpd_buf4_init(&D, CC_DENOM, 0, 1, 6, 1, 6, 0, "dIJAB"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D (i>j,a>b)"); dpd_buf4_copy(&D, CC_MISC, "MP2 tijab"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_MISC, 0, 12, 17, 12, 17, 0, "MP2 tijab"); dpd_buf4_init(&D, CC_DENOM, 0, 11, 16, 11, 16, 0, "dijab"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D "); dpd_buf4_copy(&D, CC_MISC, "MP2 tIjAb"); dpd_buf4_close(&D); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_buf4_init(&D, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb"); dpd_buf4_dirprd(&D, &T2); dpd_buf4_close(&D); dpd_buf4_close(&T2); } } }} // namespace psi::cis psi3/src/bin/cis/Params.h0000644000101500007650000000052010754663017013720 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ namespace psi { namespace cis { /* Input parameters */ struct Params { long int memory; char *wfn; char *diag_method; double convergence; int maxiter; int ref; int cis_ref; int print; int *rpi; int local; }; }} // namespace psi::cis psi3/src/bin/cis/U.cc0000644000101500007650000001317010757640026013042 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void local_filter_U2(dpdbuf4 *T2, double lambda); int U_build(int irrep, int root, double lambda, enum Spin spin) { char lbl[32]; int iter, h, nirreps, row, col; double energy, conv, rms, value; dpdfile2 F; dpdbuf4 Z, U, Unew, D; nirreps = moinfo.nirreps; timer_on("Uijab"); if(params.ref == 0) { /** RHF **/ /* build initial guess amplitudes */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); if(params.local) local_filter_U2(&U, lambda); else { sprintf(lbl, "dIjAb[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_dirprd(&D, &U); dpd_buf4_close(&D); } sprintf(lbl, "New UIjAb[%d]", irrep); dpd_buf4_copy(&U, CC_MISC, lbl); dpd_buf4_close(&U); /* fprintf(outfile, "\n\tSolving for U2(%d)[%d] wave function:\n", root, irrep); fprintf(outfile, "\t-------------------------------------\n"); */ conv = 0; for(iter=0; iter < params.maxiter; iter++) { sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "New UIjAb[%d] Increment", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "New UIjAb[%d] Increment", irrep); dpd_buf4_init(&Unew, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&U, &Unew, -lambda); dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ"); dpd_contract424(&U, &F, &Unew, 1, 0, 1, -1, 1); dpd_contract244(&F, &U, &Unew, 0, 0, 0, -1, 1); dpd_file2_close(&F); dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB"); dpd_contract244(&F, &U, &Unew, 1, 2, 1, 1, 1); dpd_contract424(&U, &F, &Unew, 3, 1, 0, 1, 1); dpd_file2_close(&F); dpd_buf4_close(&U); if(params.local) local_filter_U2(&Unew, lambda); else { sprintf(lbl, "dIjAb[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_dirprd(&D, &Unew); dpd_buf4_close(&D); } rms = 0.0; for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&Unew, h); dpd_buf4_mat_irrep_rd(&Unew, h); for(row=0; row < U.params->rowtot[h]; row++) for(col=0; col < U.params->coltot[h^irrep]; col++) { value = Unew.matrix[h][row][col]; rms += value * value; } dpd_buf4_mat_irrep_close(&Unew, h); } dpd_buf4_close(&Unew); rms = sqrt(rms); sprintf(lbl, "New UIjAb[%d]", irrep); dpd_buf4_init(&Unew, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "New UIjAb[%d] Increment", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&U, &Unew, 1); dpd_buf4_close(&U); /* fprintf(outfile, "\titer = %d RMS = %4.3e\n", iter, rms); */ if(rms < params.convergence) { conv = 1; fprintf(outfile, "\tU2(%d)[%d] iterations converged. iter = %d RMS = %4.3e\n", root, irrep, iter, rms); break; } else { sprintf(lbl, "New UIjAb[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_copy(&U, CC_MISC, lbl); dpd_buf4_close(&U); } } if(!conv) { fprintf(outfile, "\n\tU2(%d)[%d] iterative procedure failed. RMS = %4.3e\n", root, irrep, rms); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&U, 0.0); dpd_buf4_close(&U); return 1; fflush(outfile); } fflush(outfile); } else if(params.ref == 0) { /** UHF **/ /* U(IJ,AB) <-- Z(IJ,AB) * D(IJ,AB) */ sprintf(lbl, "ZIJAB[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "UIJAB[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "UIJAB[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 2, 7, 2, 7, 0, lbl); sprintf(lbl, "dIJAB[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 1, 6, 1, 6, 0, lbl); dpd_buf4_dirprd(&D, &U); dpd_buf4_close(&D); dpd_buf4_close(&U); /* U(ij,ab) <-- Z(ij,ab) * D(ij,ab) */ sprintf(lbl, "Zijab[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "Uijab[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "Uijab[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 12, 17, 12, 17, 0, lbl); sprintf(lbl, "dijab[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 11, 16, 11, 16, 0, lbl); dpd_buf4_dirprd(&D, &U); dpd_buf4_close(&D); dpd_buf4_close(&U); /* U(Ij,Ab) <-- Z(Ij,Ab) * D(Ij,Ab) */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "UIjAb[%d]", irrep); dpd_buf4_init(&U, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); sprintf(lbl, "dIjAb[%d]", irrep); dpd_buf4_init(&D, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); dpd_buf4_dirprd(&D, &U); dpd_buf4_close(&D); dpd_buf4_close(&U); } timer_off("Uijab"); return 0; } }} // namespace psi::cis psi3/src/bin/cis/v.cc0000644000101500007650000000670010757640026013104 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void v_build(int irrep, int root, enum Spin spin) { char lbl[32]; dpdfile2 B, V, B_A, B_B, V_A, V_B, F; dpdbuf4 T2; if(params.ref == 0) { /** RHF **/ if(spin == singlet) sprintf(lbl, "BIA(%d)[%d] singlet", root, irrep); else sprintf(lbl, "BIA(%d)[%d] triplet", root, irrep); dpd_file2_init(&B, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "VIA[%d]", irrep); dpd_file2_init(&V, CC_MISC, irrep, 0, 1, lbl); dpd_file2_init(&F, CC_MISC, 0, 1, 1, "FAB"); dpd_contract222(&B, &F, &V, 0, 0, 1, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 0, 0, "FIJ"); dpd_contract222(&F, &B, &V, 0, 1, 1, 1); dpd_file2_close(&F); sprintf(lbl, "FKC(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 0, 1, lbl); if(spin == singlet) { dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 2 tIjAb - tIjbA"); dpd_dot24(&F, &T2, &V, 0, 0, 1, 1); } else { dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 0, 5, 0, "MP2 tIjAb"); dpd_dot23(&F, &T2, &V, 0, 0, -1, 1); } dpd_buf4_close(&T2); dpd_file2_close(&F); dpd_file2_close(&V); dpd_file2_close(&B); } else if(params.ref == 2) { /** UHF **/ sprintf(lbl, "BIA(%d)[%d]", root, irrep); dpd_file2_init(&B_A, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "Bia(%d)[%d]", root, irrep); dpd_file2_init(&B_B, CC_OEI, irrep, 2, 3, lbl); sprintf(lbl, "VIA[%d]", irrep); dpd_file2_init(&V_A, CC_MISC, irrep, 0, 1, lbl); sprintf(lbl, "Via[%d]", irrep); dpd_file2_init(&V_B, CC_MISC, irrep, 2, 3, lbl); dpd_file2_init(&F, CC_MISC, 0, 1, 1, "FAB"); dpd_contract222(&B_A, &F, &V_A, 0, 0, 1, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 0, 0, "FIJ"); dpd_contract222(&F, &B_A, &V_A, 0, 1, 1, 1); dpd_file2_close(&F); sprintf(lbl, "FKC(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 0, 1, lbl); dpd_buf4_init(&T2, CC_MISC, 0, 0, 5, 2, 7, 0, "MP2 tIJAB"); dpd_dot24(&F, &T2, &V_A, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&F); sprintf(lbl, "Fkc(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 2, 3, lbl); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_dot24(&F, &T2, &V_A, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 3, 3, "Fab"); dpd_contract222(&B_B, &F, &V_B, 0, 0, 1, 0); dpd_file2_close(&F); dpd_file2_init(&F, CC_MISC, 0, 2, 2, "Fij"); dpd_contract222(&F, &B_B, &V_B, 0, 1, 1, 1); dpd_file2_close(&F); sprintf(lbl, "Fkc(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 2, 3, lbl); dpd_buf4_init(&T2, CC_MISC, 0, 10, 15, 12, 17, 0, "MP2 tijab"); dpd_dot24(&F, &T2, &V_B, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&F); sprintf(lbl, "FKC(%d)[%d]", root, irrep); dpd_file2_init(&F, CC_MISC, irrep, 0, 1, lbl); dpd_buf4_init(&T2, CC_MISC, 0, 22, 28, 22, 28, 0, "MP2 tIjAb"); dpd_dot13(&F, &T2, &V_B, 0, 0, 1, 1); dpd_buf4_close(&T2); dpd_file2_close(&F); dpd_file2_close(&V_A); dpd_file2_close(&V_B); dpd_file2_close(&B_A); dpd_file2_close(&B_B); } } }} // namespace psi::cis psi3/src/bin/cis/Z.cc0000644000101500007650000002030510757640026013045 0ustar crawdad/*! \file \ingroup CIS \brief Enter brief description of file here */ #include #include #include #include "MOInfo.h" #include "Params.h" #include "Local.h" #define EXTERN #include "globals.h" namespace psi { namespace cis { void Z_build(int irrep, int root, enum Spin spin) { char lbl[32]; dpdfile2 B, B_A, B_B; dpdbuf4 X, X1, X2, Z, F, E; if(params.ref == 0) { /** RHF **/ if(spin == singlet) sprintf(lbl, "BIA(%d)[%d] singlet", root, irrep); else sprintf(lbl, "BIA(%d)[%d] triplet", root, irrep); dpd_file2_init(&B, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_scm(&Z, 0.0); /* X(Ij,Ab) <-- b(I,C) */ sprintf(lbl, "XbAjI[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 5, 0, 5, 0, 0, lbl); dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F "); dpd_contract424(&F, &B, &X, 1, 1, 0, 1, 0); dpd_buf4_close(&F); sprintf(lbl, "XjIbA[%d]", irrep); dpd_buf4_sort(&X, CC_TMP0, rspq, 0, 5, lbl); dpd_buf4_close(&X); sprintf(lbl, "XjIbA[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); if(spin == singlet) dpd_buf4_axpy(&X, &Z, 1); else dpd_buf4_axpy(&X, &Z, -1); sprintf(lbl, "XIjAb[%d]", irrep); dpd_buf4_sort(&X, CC_TMP0, qpsr, 0, 5, lbl); dpd_buf4_close(&X); sprintf(lbl, "XIjAb[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X, &Z, 1); dpd_buf4_close(&X); /* X(Ij,Ab) <-- - B(k,b) */ sprintf(lbl, "XIjAb[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E "); dpd_contract424(&E, &B, &X, 1, 0, 0, -1, 0); dpd_buf4_close(&E); sprintf(lbl, "XjIbA[%d]", irrep); dpd_buf4_sort(&X, CC_TMP1, qpsr, 0, 5, lbl); dpd_buf4_axpy(&X, &Z, 1); dpd_buf4_close(&X); sprintf(lbl, "XjIbA[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl); if(spin == singlet) dpd_buf4_axpy(&X, &Z, 1); else dpd_buf4_axpy(&X, &Z, -1); dpd_buf4_close(&X); /* Spin-adapt Z */ if(spin == singlet) { sprintf(lbl, "ZIjbA[%d]", irrep); dpd_buf4_sort(&Z, CC_TMP1, pqsr, 0, 5, lbl); sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "ZIjbA[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X, &Z, -0.5); dpd_buf4_close(&X); } else { sprintf(lbl, "ZIjbA[%d]", irrep); dpd_buf4_sort(&Z, CC_TMP1, pqsr, 0, 5, lbl); sprintf(lbl, "(ZIjAb + 1/2 ZIjbA)[%d]", irrep); dpd_buf4_copy(&Z, CC_MISC, lbl); dpd_buf4_close(&Z); sprintf(lbl, "(ZIjAb + 1/2 ZIjbA)[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl); sprintf(lbl, "ZIjbA[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl); dpd_buf4_axpy(&X, &Z, 0.5); dpd_buf4_close(&X); } dpd_buf4_close(&Z); dpd_file2_close(&B); } else if(params.ref == 2) { /** UHF **/ sprintf(lbl, "BIA(%d)[%d]", root, irrep); dpd_file2_init(&B_A, CC_OEI, irrep, 0, 1, lbl); sprintf(lbl, "Bia(%d)[%d]", root, irrep); dpd_file2_init(&B_B, CC_OEI, irrep, 2, 3, lbl); /* X(IJ,AB) <-- b(I,C) */ sprintf(lbl, "XIJAB[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl); dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F "); dpd_contract244(&B_A, &F, &X, 1, 0, 0, 1, 0); dpd_buf4_close(&F); sprintf(lbl, "XJIAB[%d]", irrep); dpd_buf4_sort(&X, CC_TMP0, qprs, 0, 7, lbl); dpd_buf4_close(&X); sprintf(lbl, "XIJAB[%d]", irrep); dpd_buf4_init(&X1, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl); sprintf(lbl, "XJIAB[%d]", irrep); dpd_buf4_init(&X2, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); sprintf(lbl, "ZIJAB[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 0, 7, 2, 7, 0, lbl); dpd_buf4_scm(&Z, 0.0); dpd_buf4_axpy(&X1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_close(&X1); /* X(IJ,AB) <-- - B(K,B) */ sprintf(lbl, "XIJAB[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl); dpd_buf4_init(&E, CC_EINTS, 0, 2, 21, 2, 21, 0, "E (I>J,AK)"); dpd_contract424(&E, &B_A, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&E); sprintf(lbl, "XIJBA[%d]", irrep); dpd_buf4_sort(&X, CC_TMP1, pqsr, 2, 5, lbl); dpd_buf4_close(&X); sprintf(lbl, "XIJAB[%d]", irrep); dpd_buf4_init(&X1, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl); sprintf(lbl, "XIJBA[%d]", irrep); dpd_buf4_init(&X2, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); sprintf(lbl, "ZIJAB[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 2, 5, 2, 7, 0, lbl); dpd_buf4_axpy(&X1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_close(&X1); /* X(ij,ab) <-- b(i,c) */ sprintf(lbl, "Xijab[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl); dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F "); dpd_contract244(&B_B, &F, &X, 1, 0, 0, 1, 0); dpd_buf4_close(&F); sprintf(lbl, "Xjiab[%d]", irrep); dpd_buf4_sort(&X, CC_TMP0, qprs, 10, 17, lbl); dpd_buf4_close(&X); sprintf(lbl, "Xijab[%d]", irrep); dpd_buf4_init(&X1, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl); sprintf(lbl, "Xjiab[%d]", irrep); dpd_buf4_init(&X2, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); sprintf(lbl, "Zijab[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 10, 17, 12, 17, 0, lbl); dpd_buf4_scm(&Z, 0.0); dpd_buf4_axpy(&X1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_close(&X1); /* X(ij,ab) <-- - B(k,b) */ sprintf(lbl, "Xijab[%d]", irrep); dpd_buf4_init(&X, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl); dpd_buf4_init(&E, CC_EINTS, 0, 12, 31, 12, 31, 0, "E (i>j,ak)"); dpd_contract424(&E, &B_B, &X, 3, 0, 0, 1, 0); dpd_buf4_close(&E); sprintf(lbl, "Xijba[%d]", irrep); dpd_buf4_sort(&X, CC_TMP1, pqsr, 12, 15, lbl); dpd_buf4_close(&X); sprintf(lbl, "Xijab[%d]", irrep); dpd_buf4_init(&X1, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl); sprintf(lbl, "Xijba[%d]", irrep); dpd_buf4_init(&X2, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl); dpd_buf4_axpy(&X2, &X1, -1); dpd_buf4_close(&X2); sprintf(lbl, "Zijab[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 12, 15, 12, 17, 0, lbl); dpd_buf4_axpy(&X1, &Z, 1); dpd_buf4_close(&Z); dpd_buf4_close(&X1); /* Z(Ij,Ab) <-- b(I,C) */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F "); dpd_contract244(&B_A, &F, &Z, 1, 0, 0, 1, 0); dpd_buf4_close(&F); dpd_buf4_close(&Z); /* X(jI,bA) <-- - b(j,c) */ sprintf(lbl, "XIjAb[%d]", irrep); dpd_buf4_init(&X, CC_TMP0, irrep, 23, 29, 23, 29, 0, lbl); dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F "); dpd_contract244(&B_B, &F, &X, 1, 0, 0, 1, 0); dpd_buf4_close(&F); /* X(jI,bA) --> Z(Ij,Ab) */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_sort_axpy(&X, CC_MISC, qpsr, 22, 28, lbl, 1); dpd_buf4_close(&X); /* Z(Ij,Ab) <-- - b(k,b) */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E "); dpd_contract424(&E, &B_B, &Z, 3, 0, 0, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&Z); /* Z(Ij,Ab) <-- - b(K,A) */ sprintf(lbl, "ZIjAb[%d]", irrep); dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl); dpd_buf4_init(&E, CC_EINTS, 0, 24, 22, 24, 22, 0, "E "); dpd_contract244(&B_A, &E, &Z, 0, 0, 1, -1, 1); dpd_buf4_close(&E); dpd_buf4_close(&Z); dpd_file2_close(&B_A); dpd_file2_close(&B_B); } } }} // namespace psi::cis psi3/src/bin/clag/0000755000101500007650000000000011146111666012451 5ustar crawdadpsi3/src/bin/clag/ci_energy.cc0000644000101500007650000000746710757640026014746 0ustar crawdad/*! \file \ingroup CLAG \brief Compute the CI Lagrangian */ /*! \defgroup CLAG clag: Compute the CI Lagrangian */ /*****************************************************************************/ /*ci_energy - This is a program to calculate the CI energy for a CI */ /* or MCSCF wavefunction given the one- and two-particle density */ /* matrix, the one-electron MO integrals Him, and the two-electron */ /* MO integrals (im,kl) */ /* */ /* Brian Hoffman */ /* Matt Leininger */ /*****************************************************************************/ #include #include #include #include extern "C" { extern FILE *infile; extern FILE *outfile; } namespace psi { namespace clag { #define INDEX(x,y) ((x>y) ? ioff[x] + y : ioff[y] + x) #define CI_DIFF 1.0E-10 extern int *ioff; extern int print_lvl; /*****************************************************************************/ /* The main function */ /*****************************************************************************/ void ci_energy(double **OPDM, double *TPDM, double *h, double *TwoElec, int nbf, double enuc, double eci_chkpt, double lagtr) { int i,j; /* indecies of lagrangian element */ int m,k,l; /* indecies of integrals needed */ int ij,kl,ijkl; /* integral indecies combined */ int Tij, Tkl, Tijkl; /* TPDM indecies combined */ double OEsum = 0.0; /* QjmHim sumed over MO index m */ double TEsum = 0.0; /* Gjmkl(im,kl) summed over m,k,l */ double e_ci = 0.0; /* the CI energy */ double diff; /* diff between e_ci and eci_chkpt */ for (i=0; i CI_DIFF) { fprintf(outfile, "Calculated CI Energy differs from the CI Energy in checkpoint file\n"); fprintf(outfile,"ECI Calc. = %lf\n", e_ci); fprintf(outfile,"ECI Chkpt = %lf\n", eci_chkpt); } if (print_lvl > 0) { fprintf(outfile,"\nCheck CI Energy\n\n"); fprintf(outfile,"One-electron contribution = %20.10lf\n", OEsum); fprintf(outfile,"Two-electron contribution = %20.10lf\n", TEsum); fprintf(outfile,"Total electronic energy = %20.10lf\n", e_ci); fprintf(outfile,"Trace of lagrangian = %20.10lf\n", lagtr); fprintf(outfile,"Nuclear repulsion energy = %20.10f\n", enuc); fprintf(outfile,"Total CI Energy = %20.10lf\n", e_ci); fprintf(outfile,"CI Energy from chkpt file = %20.10lf\n", eci_chkpt); } } }} // end namespace psi::clag psi3/src/bin/clag/clag.10000644000101500007650000003164007252264020013441 0ustar crawdad.ds OS UNIX .\" @(#)tmac.an 1.37 90/02/04 SMI; .ds ]W Psi Release 1.1 ' # month name . \".if "\nd"0" .nr m \n(mo-1 . \".if "\nm"0" .ds ]m January . \".if "\nm"1" .ds ]m February . \".if "\nm"2" .ds ]m March . \".if "\nm"3" .ds ]m April . \".if "\nm"4" .ds ]m May . \".if "\nm"5" .ds ]m June . \".if "\nm"6" .ds ]m July . \".if "\nm"7" .ds ]m August . \".if "\nm"8" .ds ]m September . \".if "\nm"9" .ds ]m October . \".if "\nm"10" .ds ]m November . \".if "\nm"11" .ds ]m December ' # set the date . \".if n \{.nr m \nm+1 . \". ie \nd .ds ]W Modified \nm/\nd/\ny . \". el .ds ]W Printed \n(mo/\n(dy/\n(yr\} . \".if t \{.ie \nd .ds ]W \*(]m \nd, 19\ny . \". el .ds ]W \*(]m \n(dy, 19\n(yr\} ' # end of commented out chunk .if t .tr *\(** .ie n \{\ . ds lq \&"\" . ds rq \&"\" .\} .el \{\ . ds rq '' . ds lq `` .\} .de UC . \".if t \{\ . \". ie "\\$1"" .ds ]W 3rd Berkeley Distribution . \". ie "\\$1"4" .ds ]W \\$1th Berkeley Distribution . \". el .ds ]w \\$2 \\$1 BSD . \".\} .. ' # reset the basic page layout .de }E .}f .in \\n()Ru+\\n(INu .ll \\n(LLu .. ' # default tabs .de DT 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .. ' # set type font and size .de }f .ps 10 .ft 1 .. ' # handle the head of the page .de }H .ev 1 .}C 'sp .5i .ft 1 .ps 10 .tl \\*(]H\\*(]D\\*(]H 'sp .5i .ev .ns .. ' # handle the foot of the page .de }F .ev 1 .ft 1 .ps 10 'sp .5i .if !\\nD .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if o .tl \\*(]W\\*(]L\\*(PN% .if \\nD .if e .tl \\*(PN%\\*(]L\\*(]W .if !\\nX 'bp .if \\nX .if \\n%>=\\nX \{\ .ds PN \\n% .pn 1 .af % a .nr X 0 'bp 1\} .if \\nX .if \\n%<\\nX 'bp .ev .. ' # the cut mark -- we don't need this -- Henry . \".if n .ig . \".de }C . \".po .1i . \".tl '-' . \".po . \".. ' # the final cut mark -- we don't need this -- Henry . \".de }M . \".}N . \".wh -1p }C . \".ll \\n(LLu . \".. ' # no runout unless there was a .TH .de }K .}N .pl 1 .ll \\n(LLu .. .em }K ' # set title and heading .de TH .PD .DT .if n .nr IN .5i .if t .nr IN .5i .ll 6.5i .nr LL \\n(.l .ds ]H \\$1\|(\|\\$2\|) .ds ]D MISC. REFERENCE MANUAL PAGES .if '\\$2'1' .ds ]D PSI COMMANDS FOR \\*(pT .if '\\$2'2' .ds ]D PSI COMMON INPUT FOR \\*(pT .if '\\$2'3' .ds ]D PSI PROCEDURES FOR \\*(pT .if '\\$2'4' .ds ]D PSI EXAMPLES FOR \\*(pT .if '\\$2'5' .ds ]D PSI LIBRARY .if !'\\$4'' .ds ]W \\$4 .if !'\\$5'' .ds ]D \\$5 .wh 0 }H .if t .wh -1i }F .if n .wh -1.167i }F .em }M .if !\\n(nl .if !\\nP .nr P 1 .if !\\n(nl .if \\nP .pn \\nP .if \\nX .if \\nP>=\\nX \{\ .ds PN \\nP .pn 1 .af % a .nr X 0 \} .if !\\n(nl .if \\nP .nr P 0 .if \\nC .if \\n(nl .bp .if !\\nC .if \\n(nl .bp 1 .ds ]L Last change: \\$3 .}E .DT .nr )I .5i .nr )R 0 . \".if n .na .mk ka .if !'\\n(ka'-1' .bp .. ' # IX - Make an Index Entry .de IX .if \\nF .tm .IE\tENTRY\t\\$1\t\\$2\t\\$3\t\\$4\t\\$5\t\\$6\t\\*(PN\\n% .. ' # TX - Resolve a Title Reference .de TX .ds Tx "UNKNOWN TITLE ABBREVIATION: \\$1 .if '\\$1'GSBG' .ds Tx "Getting Started .if '\\$1'SUBG' .ds Tx "Customizing SunOS .if '\\$1'SHBG' .ds Tx "Basic Troubleshooting .if '\\$1'SVBG' .ds Tx "SunView User's Guide .if '\\$1'MMBG' .ds Tx "Mail and Messages .if '\\$1'DMBG' .ds Tx "Doing More with SunOS .if '\\$1'UNBG' .ds Tx "Using the Network .if '\\$1'GDBG' .ds Tx "Games, Demos & Other Pursuits .if '\\$1'CHANGE' .ds Tx "SunOS 4.1 Release Manual .if '\\$1'INSTALL' .ds Tx "Installing SunOS 4.1 .if '\\$1'ADMIN' .ds Tx "System and Network Administration .if '\\$1'SECUR' .ds Tx "Security Features Guide .if '\\$1'PROM' .ds Tx "PROM User's Manual .if '\\$1'DIAG' .ds Tx "Sun System Diagnostics .if '\\$1'SUNDIAG' .ds Tx "Sundiag User's Guide .if '\\$1'MANPAGES' .ds Tx "SunOS Reference Manual .if '\\$1'REFMAN' .ds Tx "SunOS Reference Manual .if '\\$1'SSI' .ds Tx "Sun System Introduction .if '\\$1'SSO' .ds Tx "System Services Overview .if '\\$1'TEXT' .ds Tx "Editing Text Files .if '\\$1'DOCS' .ds Tx "Formatting Documents .if '\\$1'TROFF' .ds Tx "Using \&\fBnroff\fP and \&\fBtroff\fP .if '\\$1'INDEX' .ds Tx "Global Index .if '\\$1'CPG' .ds Tx "C Programmer's Guide .if '\\$1'CREF' .ds Tx "C Reference Manual .if '\\$1'ASSY' .ds Tx "Assembly Language Reference .if '\\$1'PUL' .ds Tx "Programming Utilities and Libraries .if '\\$1'DEBUG' .ds Tx "Debugging Tools .if '\\$1'NETP' .ds Tx "Network Programming .if '\\$1'DRIVER' .ds Tx "Writing Device Drivers .if '\\$1'STREAMS' .ds Tx "STREAMS Programming .if '\\$1'SBDK' .ds Tx "SBus Developer's Kit .if '\\$1'WDDS' .ds Tx "Writing Device Drivers for the SBus .if '\\$1'FPOINT' .ds Tx "Floating-Point Programmer's Guide .if '\\$1'SVPG' .ds Tx "SunView\ 1 Programmer's Guide .if '\\$1'SVSPG' .ds Tx "SunView\ 1 System Programmer's Guide .if '\\$1'PIXRCT' .ds Tx "Pixrect Reference Manual .if '\\$1'CGI' .ds Tx "SunCGI Reference Manual .if '\\$1'CORE' .ds Tx "SunCore Reference Manual .if '\\$1'4ASSY' .ds Tx "Sun-4 Assembly Language Reference .if '\\$1'SARCH' .ds Tx "\s-1SPARC\s0 Architecture Manual . # non-Sun titles .if '\\$1'KR' .ds Tx "The C Programming Language \fI\\*(Tx\fP\\$2 .. ' # section heading .de SH .}X 0 .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .. ' # sub section heading .de SS .}X .25i "" "" .nr )E 2 \&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 .br .. ' # subroutine for section heading .de }X .}E .ti \\$1 .sp \\n()Pu .ne 2 .nr )R 0 .fi .it 1 }N .SM .B .. ' # end of SH (cf }X above and }N below) .de }2 .nr )E 0 .}E .nr )I .5i .ns .. ' # italic .de I .ft 2 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # bold .de B .ft 3 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # small .de SM .ps 9 .it 1 }N .if !"\\$1"" \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 .. ' # combinations of Roman, italic, bold .de RI .}S 1 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de VS 'if '\\$1'4' .mc \s12\(br\s0 .. .de VE 'mc .. .de RB .}S 1 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IR .}S 2 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de IB .}S 2 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BR .}S 3 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de BI .}S 3 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. ' # make special case of shift out of italic .de }S .ds ]F .if "\\$1"2" .if !"\\$5"" .ds ]F\^ .ie !"\\$4"" .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" .el \\$3 .}f .. ' # small and boldface .de SB \&\fB\s-1\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6\s0\fR .. ' # paragraph .de LP .PP .. .de PP .sp \\n()Pu .ne 2 .}E .nr )I .5i .ns .. ' # paragraph distance .de PD .if t .nr )P .4v .if n .nr )P 1v .if !"\\$1"" .nr )P \\$1v .. ' # hanging indent .de HP .sp \\n()Pu .ne 2 .if !"\\$1"" .nr )I \\$1n .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n()Ru+\\n(INu .}f .. ' # indented paragraph .de IP .TP \\$2 \&\\$1 .. ' # hanging label .de TP .if !"\\$1"" .nr )I \\$1n .sp \\n()Pu .in \\n()Ru .nr )E 1 .ns .it 1 }N .di ]B .. ' # end of TP (cf }N below) .de }1 .ds ]X \&\\*(]B\\ .nr )E 0 .if !"\\$1"" .nr )I \\$1n .}f .ll \\n(LLu .in \\n()Ru+\\n(INu+\\n()Iu .ti \\n(INu .ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X .br\} .el \\*(]X\h|\\n()Iu+\\n()Ru\c .}f .. ' # handle end of 1-line features .de }N .if \\n()E .br .di .if "\\n()E"0" .}f .if "\\n()E"1" .}1 .if "\\n()E"2" .}2 .nr )E 0 .. ' # increase relative indent .de RS .nr ]\\n+()p \\n()I .nr )\\n()p \\n()R .ie !"\\$1"" .nr )R +\\$1n .el .nr )R +\\n()I .nr )I .5i .}E .. ' # decrease relative indent .de RE .if !"\\$1"" \{.ie "\\$1"0" .nr )p 1 1 . el .nr )p \\$1 1\} .ds ]i \\*(]I\\n()p .ds ]r \\*(]R\\n()p .nr )I \\*(]i .nr )R \\*(]r .if \\n()p .nr )p -1 .}E .. .nr )p 0 1 .ds ]I \\\\n(] .ds ]R \\\\n() .bd S 3 3 .if t .ds R \(rg .if n .ds R (Reg.) .ds S \s10 .hy 14 .if !'\*(Lv'ADVANCED' .ig .ds pT \*(Lv \*(OS USERS .. .if '\*(Lv'ADVANCED' .ig .ds pT \*(OS USERS .. .ds ]W Psi Release 2.0 .\" This is used to ignore blanks on a line .\" Its purpose is to make the troff input look prettier. .de __ \\$1 .. .\" Start List .de sL \" .sL: start an optional list .di dL .LP \" This resets some things, apparently .nf .. .\" End List .de eL \" .eL: end an optional list under heading $1 .di .fi .\" The number 40 on the following line must be change if sL or eL are changed .if \\n(dn>40 \{\ .\"SH \\$1 -- \\n(dn \" Use this line for debugging .SH \\$1 .nf .dL .fi .\} .. .\" The input skip string, used to space headings. .ds sS \0\0\0\0\0\0\0 .\" Input Section Header .iS .de iS .LP .nf \\$1 .fi .. .\" Input Line .de iL .IP "\\$1" 7 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option .de iO .IP "\\*(sS\\$1" 14 .if !'\\$2'' \{\ \\$2 .\} .. .\" Input Option Value .de iV .IP "\\*(sS\\*(sS\\$1" 21 .if !'\\$2'' \{\ \\$2 .\} .. .\" Start CMS .de sC .if !'\\*(OS'CMS' .ig eC .. .\" End Advanced with .eC .\" Start UNIX .de sU .if !'\\*(OS'UNIX' .ig eU .. .\" End Advanced with .eU .\" Start Advanced .de sA .if !'\\*(Lv'ADVANCED' .ig eA .. .\" End Advanced with .eA .\" Start Beginner .de sB .if !'\\*(Lv'' .ig eB .. .\" End Beginner with .eB .\" Psi Name .de pN \" .pN: convert a generic file name to a specific name .ta 2.5in .if '\*(OS'CMS' \{\ . ds pO \\$1 . if '\\$1'OUTPUT' .ds pO \" Unix only . if '\\$1'BASIS' .ds pO BASIS DATA . if '\\$1'PBASIS' .ds pO PBASIS DATA . if '\\$1'HVIB_IN' .ds pO HVIB15 . if '\\$1'HVIB_OUT' .ds pO FILE15 . if '\\$1'FILE91A' .ds pO FILE91 . if '\\$1'FILE92A' .ds pO FILE92 . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .if '\*(OS'UNIX' \{\ . ds pO \\$1 . if '\\$1'INPUT' .ds pO input.dat . if '\\$1'LMO' .ds pO lmo.dat . if '\\$1'CONTOUR' .ds pO contour.ps . if '\\$1'CMO' .ds pO cmo.dat . if '\\$1'BASIS' .ds pO basis.dat . if '\\$1'PBASIS' .ds pO pbasis.dat . if '\\$1'RESUL1' .ds pO resul1.dat . if '\\$1'RESUL2' .ds pO resul2.dat . if '\\$1'RESUL3' .ds pO \" CMS only . if '\\$1'SLOFILE' .ds pO \" CMS only . if '\\$1'INTDERO' .ds pO \" CMS only . if '\\$1'MAKEFT' .ds pO resul3.dat . if '\\$1'INTDER1' .ds pO intder1.dat . if '\\$1'INTDIFO' .ds pO intdifo.dat . if '\\$1'IDER' .ds pO ider.dat . if '\\$1'OPDM48' .ds pO file51.dat . if '\\$1'HVIB_IN' .ds pO file15.dat . if '\\$1'HVIB_OUT' .ds pO file16.dat . if '\\$1'FILE12A' .ds pO file12a.dat . if '\\$1'FILE16A' .ds pO file16a.dat . if '\\$1'FILE21A' .ds pO file21a.dat . if '\\$1'FILE11' .ds pO file11.dat . if '\\$1'FILE12' .ds pO file12.dat . if '\\$1'FILE13' .ds pO file13.dat . if '\\$1'FILE14' .ds pO file14.dat . if '\\$1'TOTAL15' .ds pO total15.dat . if '\\$1'TOTAL20' .ds pO total20.dat . if '\\$1'FILE15' .ds pO file15.dat . if '\\$1'FILE16' .ds pO file16.dat . if '\\$1'FILE17' .ds pO file17.dat . if '\\$1'FILE18' .ds pO file18.dat . if '\\$1'FILE19' .ds pO file19.dat . if '\\$1'FILE20' .ds pO file20.dat . if '\\$1'FILE21' .ds pO file21.dat . if '\\$1'FILE22' .ds pO file22.dat . if '\\$1'FILE23' .ds pO file23.dat . if '\\$1'FILE24' .ds pO file24.dat . if '\\$1'FILE25' .ds pO file25.dat . if '\\$1'FILE91A' .ds pO file91a.dat . if '\\$1'FILE92A' .ds pO file92a.dat . if '\\$1'CHECK' .ds pO tape3.dat . if '\\$1'OUTPUT' .ds pO output.dat\" Unix only . if '\\$1'FILE6' .ds pO \" CMS only . if '\\$1'BMAT' .ds pO input.dat . if '\\$1'INTCO' .ds pO intco.dat . if '\\$1'GEOM' .ds pO geom.dat . if '\\$1'FCONST' .ds pO fconst.dat . if !'\\*(pO'' \\$3\\*(pO\\$2 .\} .. \" End of .pN macro definition .TH clag 1 " 21 June, 1996" "\*(]W" "\*(]D" . \" . \" Notice of Document Modification . \" . \" man page created by Matt Leininger, 21 June 96 . \" . \" .SH NAME clag \- Lagrangian Program written in C. .SH DESCRIPTION .LP The program .B clag forms the lagrangian matrix from the one and two particle density matrices and the one and two electron integrals. The lagrangian is used for MCSCF and CI derivative calculations. .SH REFERENCES .LP Lagrangian: .IP "1." A New Dimension to Quantum Chemistry, Y. Yamaguchi, Y. Osamura, J.D. Goddard, H. F. Schaefer III, Oxford Univ. Press, (1994). .sL .pN INPUT " Input file" .pN FILE71 " Transformed one-electron integrals" .pN FILE72 " Transformed two-electron integrals" .pN FILE73 " One-Particle Density Matrix" .pN FILE74 " Two-Particle Density Matrix" .eL "FILES REQUIRED" .sL .pN FILE75 " Lagrangian" .pN OUTPUT .eL "FILES UPDATED" .SH INPUT FORMAT .LP The input for this program is read from the file .pN INPUT . The following keywords are valid: .IP "\fBPRINT =\fP \fIinteger\fP" This option determines the verbosity of the output. A value of 0 prints nothing, a value of 1 prints calculated ci energy and the various components of the ci energy, a value of 2 prints the one- and two-electron contributions to the MO lagrangian as well as the MO lagrangian, a value of 3 prints the one-particle density matrix, and a value of 4 prints the two-particle density matrix. Do not use print = 4 unless the test case is very small. .IP "\fBWRITE_CAS_FILES =\fP \fIboolean\fP" If TRUE, then write out the following files in canonical form (p>=q, r>=s, pq>=rs) in Pitzer order: one-electron integrals (file81), two-electron integrals (file82), one-particle density matrix (file83), two-particle density matrix (file84), lagrangian (file85). This is temporary and is intended to aid in linking DETCI with CASSCF. psi3/src/bin/clag/clag.cc0000644000101500007650000003131111112564564013667 0ustar crawdad/*! \file \ingroup CLAG \brief Main file for CI Lagrangian computation */ /****************************************************************************/ /* clag: the main controlling program for calculating the lagrangian and CI */ /* energy. The lagrangian is written to file 75 and the CI energy is */ /* printed in the output as a simple check */ /****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "clag.h" extern "C" { FILE *outfile; /* pointer to the output file */ FILE *infile; /* pointer to the input file */ char *psi_file_prefix; /* pointer to the file prefix string */ } namespace psi { namespace clag { #define INDEX(i,j) ( (i>j) ? (ioff[(i)] + (j)): (ioff[(j)] + (i)) ) /* ** define input parsing files and ioff array */ int *ioff; /* the ioff array */ int print_lvl=1; /* diagnostic info flag */ }} // end namespace psi::clag /***************************************************************************/ /* The main procedure */ /***************************************************************************/ using namespace psi::clag; main(int argc, char **argv) { double **opdm; /* the one particle density matrix */ double *tpdm; /* the two particle density matrix */ double **lag; /* the lagrangian we are finding */ int i,j,ij; /* a simple running variable */ int errcod; /* error flag for input parsing */ int ntri, ntri2; /* number of one and two e ints */ int nmo; /* number of molecular orbitals */ int nfzv; /* number of frozen virtual orbs */ int npop; /* number of populated orbitals; or nmo - nfzv */ int *orbspi; /* orbitals per irrep array */ int *docc; /* doubly occupied orbs per irrep */ int *socc; /* singly occupied orbs per irrep */ int *frdocc; /* frozen doubly occupied array */ int *cor; /* restricted core */ int *vir; /* restricted virtuals */ int *fruocc; /* frozen unoccupied orb array */ int **ras_opi; /* orbs per [ras_space][irrep] */ int *pitz_to_corr; /* map orbs Pitzer->correlated ord */ int *corr_to_pitz; /* map orbs correlated order->Pitz */ int nirreps; /* number of irreps */ double efzc; /* frozen core energy */ int oei_file = PSIF_OEI; /* where 1e mo ints are stored */ int oei_erase = 0; /* 0=do not erase 1e ints 1=do */ int tei_file = PSIF_MO_TEI; /* where 2e mo ints are stored */ int opdm_file = PSIF_MO_OPDM; /* file number for one-pdm */ int tpdm_file = PSIF_MO_TPDM; /* file number for two-pdm */ int lag_file = PSIF_MO_LAG; /* file number for largrangian */ /* the following was for Yukio Yamaguchi's CAS code, I think * normally we would be using DETCAS now */ int cas_onel_file = 81; /* CAS interface one-elec ints file*/ int cas_twoel_file = 82; /* CAS interface two-elec ints file*/ int cas_opdm_file = 83; /* CAS interface onepdm file */ int cas_tpdm_file = 84; /* CAS interface twopdm file */ int cas_lag_file = 85; /* CAS interface lagrangian file */ int write_cas_files = 0; /* write out a files for CASSCF? */ double *onel_ints, *twoel_ints; /* 1e and 2e ints */ double enuc = 0.0; /* nuclear repulsion energy */ double eci_chkpt; /* ci energy from checkpoint file */ double lagtr; /* trace of lagrangian */ /* ** initialize the io parser */ init_io(argc,argv); errcod = ip_data("PRINT","%d", &print_lvl,0); errcod = ip_boolean("WRITE_CAS_FILES", &write_cas_files,0); /* ** print out header information */ fprintf(outfile,"CLAG: PROGRAM TO FORM LAGRANGIAN AND CALCULATE CI ENERGY\n"); fprintf(outfile,"WRITTEN BY DAVID SHERRILL, BRIAN HOFFMAN, "); fprintf(outfile,"AND MATT LEININGER\n"); /* ** calculate some needed numbers */ chkpt_init(PSIO_OPEN_OLD); nmo = chkpt_rd_nmo(); enuc = chkpt_rd_enuc(); eci_chkpt = chkpt_rd_etot(); nirreps = chkpt_rd_nirreps(); orbspi = chkpt_rd_orbspi(); docc = chkpt_rd_clsdpi(); socc = chkpt_rd_openpi(); chkpt_close(); frdocc = init_int_array(nirreps); fruocc = init_int_array(nirreps); cor = init_int_array(nirreps); vir = init_int_array(nirreps); ras_opi = init_int_matrix(MAX_RAS_SPACES,nirreps); pitz_to_corr = init_int_array(nmo); /* get orbital information */ ras_set2(nirreps, nmo, 1, 1, orbspi, docc, socc, frdocc, fruocc, cor, vir, ras_opi, pitz_to_corr, 1, 0); /* get the array which maps correlated orbitals back to pitzer order */ corr_to_pitz = init_int_array(nmo); for (i=0; i4) { fprintf(outfile, "\nOne-electron integrals\n"); } if (!iwl_rdone(oei_file, PSIF_MO_OEI, onel_ints, ntri, oei_erase, (print_lvl>4), outfile)) { fprintf(outfile, "Failed to read one-electron integrals\n"); exit(1); } if (print_lvl>4) { fprintf(outfile, "\nTwo-electron integrals\n"); } iwl_rdtwo(tei_file, twoel_ints, ioff, nmo, 0, 0, (print_lvl>4), outfile); /* ** test the trace of the pdms */ trace_opdm(opdm, npop); trace_tpdm(tpdm, npop); /* ** form lagrangian matrix and write to file 75 */ lag = block_matrix(nmo,nmo); lagtr = lagcalc(opdm,tpdm,onel_ints,twoel_ints,lag,nmo,npop, print_lvl,lag_file); ci_energy(opdm, tpdm, onel_ints, twoel_ints, npop, enuc, eci_chkpt, lagtr); /* ** write out the two-pdm in a form that the CAS program will like ** this is obsolete stuff for the very old CAS program of YY's, we ** aren't using that anymore. --- CDS 8/26/03 ** if (write_cas_files) { onel_to_cas(onel_ints, corr_to_pitz, nmo, print_lvl, cas_onel_file); twoel_to_cas(twoel_ints, corr_to_pitz, nmo, print_lvl, cas_twoel_file); onepdm_to_cas(opdm, corr_to_pitz, nmo, npop, print_lvl, cas_opdm_file); twopdm_to_cas(tpdm, corr_to_pitz, nmo, npop, print_lvl, cas_tpdm_file); lag_to_cas(lag, corr_to_pitz, nmo, print_lvl, cas_lag_file); } */ /* ** free memory */ free(docc); free(socc); free(frdocc); free(fruocc); free_int_matrix(ras_opi); free(onel_ints); free(twoel_ints); free_block(opdm); free(tpdm); free_block(lag); /* ** close files and end the program */ close_io(); return(0); } namespace psi { namespace clag { /****************************************************************************/ /* init_io(): Function opens input and output files */ /****************************************************************************/ void init_io(int argc, char **argv) { int i; int num_extra_args=0; char **extra_args; extra_args = (char **) malloc(argc*sizeof(char *)); for (i=1; i 0) tstart(outfile); psio_init(); psio_ipv1_config(); } /****************************************************************************/ /* close_io(): Function closes down I/O and exits */ /****************************************************************************/ void close_io(void) { psio_done(); if (print_lvl > 0) tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } /****************************************************************************/ /* rdopdm: reads the one particle density matrix from opdm_file */ /* and returns opdm as an in core matrix */ /* Upgraded to libpsio 6/03 by CDS */ /****************************************************************************/ double **rdopdm(int nbf, int print_lvl, int opdm_file) { int i, root, errcod; double **opdm; char opdm_key[80]; psio_open(opdm_file, PSIO_OPEN_OLD); opdm = block_matrix(nbf, nbf); /* if the user hasn't specified a root, just get "the" onepdm */ if (!ip_exist("ROOT",0)) { psio_read_entry(opdm_file, "MO-basis OPDM", (char *) opdm[0], nbf*nbf*sizeof(double)); } else { root = 1; errcod = ip_data("ROOT","%d",&root,0); sprintf(opdm_key, "MO-basis OPDM Root %d", root); psio_read_entry(opdm_file, opdm_key, (char *) opdm[0], nbf*nbf*sizeof(double)); } if (print_lvl > 2) { fprintf(outfile,"One-Particle Density Matrix\n"); print_mat(opdm, nbf, nbf, outfile); fprintf(outfile,"\n\n"); } psio_close(opdm_file,1); return (opdm); } /****************************************************************************/ /* rdtpdm: reads the two particle density matrix from tpdm_file */ /* and returns the tpdm as an array */ /****************************************************************************/ double *rdtpdm(int nbf, int print_lvl, int tpdm_file) { double *tpdm; int numslots, sqnbf; int *ioff_lt, i; /* offsets for left (or right) indices */ struct iwlbuf TBuff; iwl_buf_init(&TBuff, tpdm_file, 0.0, 1, 1); sqnbf = nbf*nbf ; numslots = (sqnbf*(sqnbf+1))/2 ; tpdm = init_array(numslots); /* Construct the ioff_lt array (same here as ioff_rt) : different than * regular ioff because there is no perm symmetry between left indices * or right indices. */ ioff_lt = init_int_array(nbf); for (i=0; i5), outfile); if (print_lvl > 3) { fprintf(outfile,"Two-Particle Density Matrix\n"); print_array(tpdm, sqnbf, outfile); fprintf(outfile,"\n\n"); } iwl_buf_close(&TBuff, 1); free(ioff_lt); return (tpdm); } /***************************************************************************/ /* trace_opdm: test the trace of the one-particle density matrix */ /***************************************************************************/ void trace_opdm(double **opdm, int nbf) { int i; double sum; for (sum=0.0,i=0; i #include #include #include #include extern "C" { extern FILE *infile; extern FILE *outfile; } namespace psi { namespace clag { #define INDEX(x,y) ((x>y) ? ioff[x] + y : ioff[y] + x) extern int *ioff; /***************************************************************************/ /* The main function */ /***************************************************************************/ double lagcalc(double **OPDM, double *TPDM, double *h, double *TwoElec, double **lag, int nmo, int npop, int print_lvl, int lag_file) { int i,j; /* indecies of lagrangian element */ int m,k,l; /* indecies of integrals needed */ int im,kl,imkl; /* integral indecies combined */ int Tjm,Tmj,Tkl,Tjmkl,Tmjkl; /* TPDM indices combined */ double **oe_lag; /* One-electron part of lagrangian */ double **te_lag; /* Two-electron part of lagrangian */ double OEsum; /* QjmHim sumed over MO index m */ double TEsum; /* Gjmkl(im,kl) summed over m,k,l */ double lagtrace; /* Trace of the Lagrangian (as a check) */ psio_open(lag_file, PSIO_OPEN_OLD); oe_lag = block_matrix(nmo, nmo); te_lag = block_matrix(nmo, nmo); for (i=0; i 1) { fprintf(outfile,"\n\n One-electron part of the Lagrangian"); print_mat(oe_lag, nmo, nmo, outfile); fprintf(outfile,"\n\n Two-electron part of the Lagrangian"); print_mat(te_lag, nmo, nmo, outfile); fprintf(outfile,"\nLagrangian Matrix\n\n"); print_mat(lag, nmo, nmo, outfile); } psio_close(lag_file, 1); free_block(oe_lag); free_block(te_lag); return(lagtrace); } }} // end namespace psi::clag psi3/src/bin/clag/Makefile.in0000644000101500007650000000074210764260211014515 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(BLAS) PSILIBS = libPSI_qt.a libPSI_chkpt.a libPSI_iwl.a -lPSI_psio libPSI_ciomr.a libPSI_ipv1.a CSRC = CXXSRC = clag.cc lagcalc.cc ci_energy.cc BINOBJ = $(CSRC:%.c=%.o) $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: clag.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 psi3/src/bin/cphf/0000755000101500007650000000000011146111657012463 5ustar crawdadpsi3/src/bin/cphf/build_dipder.cc0000644000101500007650000002347010757640026015432 0ustar crawdad/*! \file \ingroup CPHF \brief Evaluate total dipole moment derivatives */ /*! \defgroup CPHF cphf: Solve the Coupled-Perturbed Hartree-Fock Equations */ #include #include #include #include #include #include #include #include #include #define EXTERN #include "globals.h" /* build_dipder(): Compute the total dipole moment derivatives from ** the derivative dipole integrals computed by "cints --oeprop" and ** the nuclear-perturbation CPHF coefficients computed in cphf_X(). ** The equation for the electronic contribution to the dipole ** derivatives is (MO basis): ** ** (d mu/d X)_elec = 4 UX_ai * d_ai - 2 SX_ij d_ij + 2 (d^X)_ii ** ** where X is a nuclear coordinate, d_pq is a dipole moment integral, ** (d^X)_pq is a derivative dipole moment integral, UX_pq is a CPHF ** coefficient, and SX_pq is an overlap derivative. Summation over ** all indices is implied. The nuclear contribution to the dipole ** derivatives is simple: ** ** (d mu_g/d X)_nuc = delta(g,X) Z_X ** ** where mu_g is the g-th component of the dipole moment (x, y, or z), ** and Z_X is the nuclear Z-value for the atom associated with ** coordinate X. ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.17, ** esp. pp. 326-328. ** ** TDC, October 2002 */ namespace psi { namespace cphf { void build_dipder(double ***UX) { int coord, ij, stat; int i, isym, ifirst, ilast; int j, jsym, jfirst, jlast; int a, asym, afirst, alast; double ***MU, **S; double *scratch, *scratch2; char *label; double **TMP1, **TMP2; double **MUX, **MUY, **MUZ; /* derivative dipole integrals */ FILE *file17; MU = (double ***) malloc(3 * sizeof(double **)); for(i=0; i < 3; i++) MU[i] = block_matrix(nmo,nmo); /* Grab the MO-basis dipole integrals from disk */ scratch = init_array(ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MX, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[0][i][j] = MU[0][j][i] = scratch[ij]; zero_arr(scratch,ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MY, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[1][i][j] = MU[1][j][i] = scratch[ij]; zero_arr(scratch,ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MZ, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[2][i][j] = MU[2][j][i] = scratch[ij]; zero_arr(scratch,ntri); S = block_matrix(nmo,nmo); label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); scratch2 = init_array(noei_ao); TMP1 = block_matrix(nao, nao); TMP2 = block_matrix(nao, nao); MUX = block_matrix(nmo,nmo); MUY = block_matrix(nmo,nmo); MUZ = block_matrix(nmo,nmo); /* Build the total dipole moment derivatives */ for(coord=0; coord < natom*3; coord++) { /* Grab the MO-basis overlap derivatives from disk */ sprintf(label, "MO-basis Overlap Derivs (%d)", coord); stat = iwl_rdone(PSIF_OEI, label, scratch, ntri, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) S[i][j] = S[j][i] = scratch[ij]; for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++) { dipder[0][coord] -= 2.0 * S[i][j] * MU[0][i][j]; dipder[1][coord] -= 2.0 * S[i][j] * MU[1][i][j]; dipder[2][coord] -= 2.0 * S[i][j] * MU[2][i][j]; } } } } for(asym=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { dipder[0][coord] += 4.0 * UX[coord][a][i] * MU[0][a][i]; dipder[1][coord] += 4.0 * UX[coord][a][i] * MU[1][a][i]; dipder[2][coord] += 4.0 * UX[coord][a][i] * MU[2][a][i]; } } } } /* Read AO-basis dipole derivative integrals from disk and transform to MO basis*/ sprintf(label, "AO-basis MUX Derivs (%d)", coord); stat = iwl_rdone(PSIF_OEI, label, scratch2, noei_ao, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP1[i][j] = TMP1[j][i] = scratch2[ij]; /* fprintf(outfile, "AO-basis MUX (%d)", coord); print_mat(TMP1, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP1[0][0]),nao,&(usotao[0][0]),nao, 0,&(TMP2[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(TMP2[0][0]),nao, 0,&(TMP1[0][0]),nao); C_DGEMM('n','n',nso,nmo,nso,1,&(TMP1[0][0]),nao,&(scf[0][0]),nmo, 0,&(TMP2[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(TMP2[0][0]),nao, 0,&(MUX[0][0]),nmo); /* fprintf(outfile, "MO-basis MUX (%d)", coord); print_mat(MUX, nmo, nmo, outfile); */ sprintf(label, "AO-basis MUY Derivs (%d)", coord); stat = iwl_rdone(PSIF_OEI, label, scratch2, noei_ao, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP1[i][j] = TMP1[j][i] = scratch2[ij]; /* fprintf(outfile, "AO-basis MUY (%d)", coord); print_mat(TMP1, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP1[0][0]),nao,&(usotao[0][0]),nao, 0,&(TMP2[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(TMP2[0][0]),nao, 0,&(TMP1[0][0]),nao); C_DGEMM('n','n',nso,nmo,nso,1,&(TMP1[0][0]),nao,&(scf[0][0]),nmo, 0,&(TMP2[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(TMP2[0][0]),nao, 0,&(MUY[0][0]),nmo); /* fprintf(outfile, "MO-basis MUY (%d)", coord); print_mat(MUY, nmo, nmo, outfile); */ sprintf(label, "AO-basis MUZ Derivs (%d)", coord); stat = iwl_rdone(PSIF_OEI, label, scratch2, noei_ao, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) TMP1[i][j] = TMP1[j][i] = scratch2[ij]; /* fprintf(outfile, "AO-basis MUZ (%d)", coord); print_mat(TMP1, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP1[0][0]),nao,&(usotao[0][0]),nao, 0,&(TMP2[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(TMP2[0][0]),nao, 0,&(TMP1[0][0]),nao); C_DGEMM('n','n',nso,nmo,nso,1,&(TMP1[0][0]),nao,&(scf[0][0]),nmo, 0,&(TMP2[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(TMP2[0][0]),nao, 0,&(MUZ[0][0]),nmo); /* fprintf(outfile, "MO-basis MUZ (%d)", coord); print_mat(MUZ, nmo, nmo, outfile); */ for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { dipder[0][coord] += 2.0 * MUX[i][i]; dipder[1][coord] += 2.0 * MUY[i][i]; dipder[2][coord] += 2.0 * MUZ[i][i]; } } } fprintf(outfile,"\n\tAtomic Polar Tensor:\n"); fprintf(outfile,"\n\tUnits: au\n"); fprintf(outfile,"\n\tTerms: Electronic\n"); fprintf(outfile,"\n\t Ex\t\t Ey\t\t Ez\n"); for(i=0; i 4) { fprintf(outfile, "\n\tDipole Derivatives W.R.T. Cartesian Coordinates (debye/a0):\n"); print_mat(dipder, 3, natom*3, outfile); } /* Convert to debye/A */ for(i=0; i < 3; i++) for(j=0; j < natom*3; j++) dipder[i][j] /= _bohr2angstroms; /* fprintf(outfile, "\n\tDipole Derivatives W.R.T. Cartesian Coordinates (debye/A):\n"); print_mat(dipder, 3, natom*3, outfile); */ /* write the dipole derivatives to file17 in the PSI2 standard format */ ffile(&file17, "file17.dat", 0); fprintf(file17, "%5d%5d\n", natom, natom*3); for(i=0; i < 3; i++) { for(j=0; j < natom; j++) { fprintf(file17, "%20.10f%20.10f%20.10f\n", dipder[i][j*3], dipder[i][j*3+1], dipder[i][j*3+2]); } } fclose(file17); free_block(MUX); free_block(MUY); free_block(MUZ); free_block(TMP1); free_block(TMP2); free(scratch2); free_block(S); free(label); for(i=0; i < 3; i++) free_block(MU[i]); free(MU); free(scratch); } }} // namespace psi::cphf psi3/src/bin/cphf/build_hessian.cc0000644000101500007650000001121510757640026015607 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #include #include #define EXTERN #include "globals.h" /* build_hessian(): Compute the vibrational (Cartesian) hessian using ** the skeleton second derivatives, the derivative Fock integrals, and ** the derivative overlap integrals computed by "cints --deriv2", as ** well as the nuclear-perturbation CPHF coefficients computed in ** cphf_X(). The equation for the electronic contribution to the ** Hessian is (MO basis): ** ** d E/da db = E^ab - 2 (S^ab)_ii eps_i - 2 (eta^ab)_ii eps_i ** + 4 [ (U^b)_pj (F^a)_pj + (U^a)_pj (F^b)_pj ] ** + 4 (U^a)_pj (U^b)_pj eps_i ** + 4 (U^a)_pj (U^b)_ql [ 4(pj|ql) - (pq|jl) - (pl|jq) ] ** ** where E^ab is the energy expression evaluated using ** second-derivative integrals, S^ab is the overlap second derivative ** integrals, eps_p is the energy of orbital p, U^a and U^b are CPHF ** coefficients, F^a and F^b are derivative Fock integrals, and eta^ab ** is defined as ** ** (eta^ab)_pq = [(U^a)_pr (U^b)_qr + (U^a)_pr (U^b)_qr ** - (S^a)_pr (S^b)_qr - (S^a)_pr (S^b)_qr ] ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.4, ** esp. pp. 60-63. ** ** TDC, December 2001 (revised October 2002) */ namespace psi { namespace cphf { void build_hessian(double ***F, double ***S, double **A, double ***U, double **hessian) { int coord, coord_a, coord_b; int i, isym, ifirst, ilast; int m; int p, psym, pfirst, plast; int j, jsym, jfirst, jlast; int q, qsym, qfirst, qlast; int l, lsym, lfirst, llast; int pj, ql ; double *eta; FILE *file15; /* grab skeleton derivatives from cints --deriv2 **/ psio_open(PSIF_DERINFO, PSIO_OPEN_OLD); psio_read_entry(PSIF_DERINFO, "Skeleton Hessian", (char *) hessian[0], natom*3*natom*3*sizeof(double)); psio_close(PSIF_DERINFO, 1); if (print_lvl > 5) { fprintf(outfile,"Skeleton Hessian\n"); print_mat(hessian, natom*3, natom*3, outfile); } eta = init_array(nmo); for(coord_a=0; coord_a < natom*3; coord_a++) { for(coord_b=0; coord_b < natom*3; coord_b++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { eta[i] = 0.0; for(m=0; m < nmo; m++) { eta[i] += (2.0 * U[coord_a][i][m] * U[coord_b][i][m] - 2.0 * S[coord_a][i][m] * S[coord_b][i][m]); } } } for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { hessian[coord_a][coord_b] -= 2.0 * eta[i] * evals[i]; } } for(psym=0; psym < nirreps; psym++) { pfirst = first[psym]; plast = last[psym]; for(p=pfirst; p <= plast; p++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++) { pj = INDEX(p,j); hessian[coord_a][coord_b] += 4.0 * (U[coord_b][p][j] * F[coord_a][p][j] + U[coord_a][p][j] * F[coord_b][p][j]); hessian[coord_a][coord_b] += 4.0 * U[coord_a][p][j] * U[coord_b][p][j] * evals[p]; for(qsym=0; qsym < nirreps; qsym++) { qfirst = first[qsym]; qlast = last[qsym]; for(q=qfirst; q <= qlast; q++) { for(lsym=0; lsym < nirreps; lsym++) { lfirst = ofirst[lsym]; llast = olast[lsym]; for(l=lfirst; l <= llast; l++) { ql = INDEX(q,l); hessian[coord_a][coord_b] -= 4.0 * U[coord_a][p][j] * U[coord_b][q][l] * A[pj][ql]; } } } } } } } } } } free(eta); /* fprintf(outfile, "\n\tSCF Molecular Hessian:\n"); print_mat(hessian, natom*3, natom*3, outfile); */ /* write the hessian to file15 in the PSI2 standard format */ ffile(&file15, "file15.dat", 0); fprintf(file15, "%5d%5d\n", natom, natom*6); for(i=0; i < natom*3; i++) { for(j=0; j < natom; j++) { fprintf(file15, "%20.10f%20.10f%20.10f\n", hessian[i][j*3], hessian[i][j*3+1], hessian[i][j*3+2]); } } fclose(file15); } }} // namespace psi::cphf psi3/src/bin/cphf/cphf.cc0000644000101500007650000001375011112564564013722 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ /* ** CPHF: Program to solve the Coupled Perturbed Hartree-Fock equations ** for nuclear and electric field perturbations and to compute ** electric polarizabilities, harmonic vibrational frequencies, and IR ** intensities. ** ** Limitations of and future plans for this code: ** ** (1) Spin-restricted closed-shell Hartree-Fock (RHF) wave functions ** only. Extension to ROHF and UHF cases is needed. ** ** (2) All two-electron integrals are held in core and used in the MO ** basis. Out-of-core and AO-based algorithms are needed in mohess.c, ** cphf_X.c, and build_hessian.c in order to handle larger basis sets ** and to avoid the two-electron integral transformation. ** ** (3) Symmetry-blocking is used in most of the loops, but is not ** actually used to improve storage or computational order. I've put ** this off because the nuclear perturbations (x, y, and z on each ** nucleus) are not yet symmetry-adapted. Some effort in this area is ** needed. ** ** (4) Thermodynamic functions, including enthalpies, entropies, heat ** capacities, free energies, and partition functions can be computed, ** given the vibrational data computed in vibration.c. ** ** TDC, December 2001 and October 2002 */ #include #include #include #include #include #include #include #include #include #include #include "globals.h" namespace psi { namespace cphf { void init_io(int argc, char *argv[]); void exit_io(void); void title(void); void init_ioff(void); void setup(void); void cleanup(void); void out_of_core(double ***, double ***, double ***, double **); void sort_B(double ***, double **); void sort_A(double **, double **); void mohess(double **); void cphf_X(double ***, double **, double **, double ***); void cphf_F(double **, double ***); void polarize(double ***); void build_hessian(double ***, double ***, double **, double ***, double **); void build_dipder(double ***); void vibration(double **, double **); void cphf_B(double ***, double **); }} // namespace psi::cphf int main(int argc, char *argv[]) { using namespace psi::cphf; int errcod = 0; int coord = 0; double ***F; double ***S; double ***B; double **A; double **Baijk; double **Aaibj; double ***UX; double ***UF; double **hessian; double **L; init_io(argc,argv); title(); init_ioff(); timer_init(); timer_on("CPHF Main"); print_lvl = 0; errcod = ip_data("PRINT", "%d", &(print_lvl), 0); setup(); F = (double ***) malloc(natom*3 * sizeof(double **)); S = (double ***) malloc(natom*3 * sizeof(double **)); B = (double ***) malloc(natom*3 * sizeof(double **)); for(coord=0; coord < natom*3; coord++) { F[coord] = block_matrix(nmo, nmo); S[coord] = block_matrix(nmo, nmo); B[coord] = block_matrix(nmo, nmo); } A = block_matrix(num_pq,num_pq); out_of_core(F, S, B, A); Baijk = block_matrix(natom*3, num_ai); sort_B(B, Baijk); for(coord=0; coord < natom*3; coord++) { free_block(B[coord]); } free(B); Aaibj = block_matrix(num_ai,num_ai); sort_A(A, Aaibj); mohess(Aaibj); UX = (double ***) malloc(natom*3 * sizeof(double **)); for(coord=0; coord < natom*3; coord++) { UX[coord] = block_matrix(nmo,nmo); } cphf_X(S, Baijk, Aaibj, UX); if (X_only) { /* only compute cphf coefficients, then quit */ free_block(A); free_block(Baijk); free_block(Aaibj); for(coord=0; coord < natom*3; coord++) { free_block(UX[coord]); free_block(F[coord]); free_block(S[coord]); } free(UX); free(F); free(S); timer_off("CPHF Main"); timer_done(); exit_io(); exit(PSI_RETURN_SUCCESS); } UF = (double ***) malloc(3 * sizeof(double **)); for(coord=0; coord < 3; coord++) UF[coord] = block_matrix(nmo,nmo); cphf_F(Aaibj, UF); polarize(UF); hessian = block_matrix(natom*3, natom*3); build_hessian(F, S, A, UX, hessian); dipder = block_matrix(3, natom*3); dipder_q = block_matrix(3, natom*3); build_dipder(UX); L = block_matrix(natom*3, natom*3); vibration(hessian,L); cphf_B(UX,L); cleanup(); free_block(A); free_block(Baijk); free_block(Aaibj); for(coord=0; coord < natom*3; coord++) { free_block(UX[coord]); free_block(F[coord]); free_block(S[coord]); } for(coord=0; coord < 3; coord++) { free_block(UF[coord]); } free(UX); free(UF); free(F); free(S); free_block(hessian); free_block(dipder); free_block(L); timer_off("CPHF Main"); timer_done(); exit_io(); exit(PSI_RETURN_SUCCESS); } namespace psi { namespace cphf { extern "C" { extern const char *gprgid(void); }; void init_io(int argc, char *argv[]) { int i, num_unparsed; char *progid, *argv_unparsed[100]; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); X_only = 0; for (i=1, num_unparsed=0; i #include #include #include #include #include #include #include #include #include #define EXTERN #include "globals.h" /* Convert atomic unit of magnetic flux density to tesla */ #define _aumfd2tesla 2.35051742E5 namespace psi { namespace cphf { void zval_to_symbol(double,char*); /* cphf_B(): Solve the first-order CPHF equations for a magnetic ** field perturbation. ** ** The CPHF equations are: ** ** A U^a = B0^a ** ** where A is the MO hessian for a complex perburbation, U^a is the ** orbital response (CPHF) coefficient, and B0^a is the ** perturbation-dependent inhomogenous factor. For magnetic field ** perturbations, B0^a is given by (MO basis): ** ** (B0^a)_ai = (mu^a)_ai ** ** where (mu^a)_pq is a magnetic dipole moment integral. ** */ void cphf_B(double ***UX, double **lx) { int stat, coord; double *scratch; double ***B; double **B0; double **TMP; double **X; char *label; int a, asym, afirst, alast; int i, isym, ifirst, ilast; int b, bsym, bfirst, blast; int j, jsym, jfirst, jlast; int ab, ij, ib, aj, abij, ajib; int AI, BJ; int *ipiv, error; double **A, ***UB; double **I, **I_q; double ***S; double cutoff = 0.0; int endflag = 0; int bufsize = 0; int labelindex = 0; double intvalue = 0; struct iwlbuf buffer; int p, q, r, s; int pq, rs; int p_, q_, r_, s_; int n; int ai, bj, bi; double **A0; double tmp; double *eval; double **evec; double *rotstr; /* Compute MO Hessian for a complex perturbation (IC) Hessian eigenvalues will be negative: A[AI][BJ] = (a==b) * (i==j) * (evals[i] - evals[a]); A[AI][BJ] += ints[abij] - ints[ajib]; Hessian eigenvalues will be positive: A[AI][BJ] = (a==b) * (i==j) * (evals[a] - evals[i]); A[AI][BJ] += ints[ajib] - ints[abij]; */ ints = init_array(ntei); iwl_rdtwo(PSIF_MO_TEI, ints, ioff, nmo, 0, 0, 0, outfile); A = block_matrix(num_ai, num_ai); for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { for(bsym=0,BJ=0; bsym < nirreps; bsym++) { bfirst = vfirst[bsym]; blast = vlast[bsym]; for(b=bfirst; b <= blast; b++) { ab = INDEX(a,b); ib = INDEX(i,b); for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++,BJ++) { ij = INDEX(i,j); aj = INDEX(a,j); abij = INDEX(ab,ij); ajib = INDEX(aj,ib); A[AI][BJ] = (a==b) * (i==j) * (evals[a] - evals[i]); A[AI][BJ] += ints[ajib] - ints[abij]; } } } } } } } } free(ints); //fprintf(outfile, "\nMO Hessian (IC):\n"); //print_mat(A, num_ai, num_ai, outfile); /* Compute MO Hessian for a complex perturbation (OC) */ /* A = block_matrix(num_ai, num_ai); iwl_buf_init(&buffer, PSIF_MO_TEI, cutoff, 1, 1); while (endflag == 0) { bufsize = buffer.inbuf; endflag = buffer.lastbuf; labelindex = 0; for (n = 0; n < bufsize; n++) { p = abs(buffer.labels[labelindex++]); q = buffer.labels[labelindex++]; r = buffer.labels[labelindex++]; s = buffer.labels[labelindex++]; intvalue = buffer.values[n]; pq = INDEX(p,q); rs = INDEX(r,s); p_ = qtsorder[p]; q_ = qtsorder[q]; r_ = qtsorder[r]; s_ = qtsorder[s]; if (p!=q && r!=s && pq!=rs) { if (p_ < ndocc && q_ < ndocc && r_ >= ndocc && s_ >= ndocc) { ai = (r_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + q_; aj = (r_-ndocc) * ndocc + q_; bi = (s_-ndocc) * ndocc + p_; A[ai][bj] -= intvalue; A[aj][bi] -= intvalue; A[bi][aj] -= intvalue; A[bj][ai] -= intvalue; } else if (p_ < ndocc && q_ >= ndocc && r_ < ndocc && s_ >= ndocc) { ai = (q_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + r_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ < ndocc && s_ >= ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (s_-ndocc) * ndocc + r_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ >= ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (r_-ndocc) * ndocc + s_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ >= ndocc && r_ < ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + r_; bj = (q_-ndocc) * ndocc + s_; aj = (p_-ndocc) * ndocc + s_; bi = (q_-ndocc) * ndocc + r_; A[ai][bj] -= intvalue; A[aj][bi] -= intvalue; A[bi][aj] -= intvalue; A[bj][ai] -= intvalue; } } else if (p!=q && r!=s && pq==rs) { if (p_ < ndocc && q_ >= ndocc && r_ < ndocc && s_ >= ndocc) { ai = (q_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + r_; A[ai][bj] += intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ < ndocc && s_ >= ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (s_-ndocc) * ndocc + r_; A[ai][bj] += intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ >= ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (r_-ndocc) * ndocc + s_; A[ai][bj] += intvalue; } else if (p_ >= ndocc && q_ >= ndocc && r_ < ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + r_; bj = (q_-ndocc) * ndocc + s_; aj = (p_-ndocc) * ndocc + s_; bi = (q_-ndocc) * ndocc + r_; A[ai][bj] -= intvalue; A[aj][bi] -= intvalue; A[bi][aj] -= intvalue; A[bj][ai] -= intvalue; } } else if (p!=q && r==s) { if (p_ < ndocc && q_ < ndocc && r_ >= ndocc && s_ >= ndocc) { ai = (r_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + q_; aj = (r_-ndocc) * ndocc + q_; bi = (s_-ndocc) * ndocc + p_; A[ai][bj] -= intvalue; A[aj][bi] -= intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ >= ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (r_-ndocc) * ndocc + s_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ >= ndocc && r_ < ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + r_; bj = (q_-ndocc) * ndocc + s_; aj = (p_-ndocc) * ndocc + s_; bi = (q_-ndocc) * ndocc + r_; A[ai][bj] -= intvalue; A[bi][aj] -= intvalue; } } else if (p==q && r!=s) { if (p_ < ndocc && q_ < ndocc && r_ >= ndocc && s_ >= ndocc) { ai = (r_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + q_; aj = (r_-ndocc) * ndocc + q_; bi = (s_-ndocc) * ndocc + p_; A[ai][bj] -= intvalue; A[bi][aj] -= intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ < ndocc && s_ >= ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (s_-ndocc) * ndocc + r_; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ >= ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (r_-ndocc) * ndocc + s_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ >= ndocc && r_ < ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + r_; bj = (q_-ndocc) * ndocc + s_; aj = (p_-ndocc) * ndocc + s_; bi = (q_-ndocc) * ndocc + r_; A[ai][bj] -= intvalue; A[aj][bi] -= intvalue; } } else if (p==q && r==s && pq!=rs) { if (p_ < ndocc && q_ < ndocc && r_ >= ndocc && s_ >= ndocc) { ai = (r_-ndocc) * ndocc + p_; bj = (s_-ndocc) * ndocc + q_; A[ai][bj] -= intvalue; } else if (p_ >= ndocc && q_ < ndocc && r_ >= ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + q_; bj = (r_-ndocc) * ndocc + s_; A[ai][bj] += intvalue; A[bj][ai] += intvalue; } else if (p_ >= ndocc && q_ >= ndocc && r_ < ndocc && s_ < ndocc) { ai = (p_-ndocc) * ndocc + r_; bj = (q_-ndocc) * ndocc + s_; A[ai][bj] -= intvalue; } } } if (endflag == 0) { iwl_buf_fetch(&buffer); } } iwl_buf_close(&buffer,1); for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { for(bsym=0,BJ=0; bsym < nirreps; bsym++) { bfirst = vfirst[bsym]; blast = vlast[bsym]; for(b=bfirst; b <= blast; b++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++,BJ++) { A[AI][BJ] += (a==b) * (i==j) * (evals[a] - evals[i]); } } } } } } } }*/ /* Diagonalize Magnetic Hessian */ /* eval = init_array(num_ai); evec = block_matrix(num_ai,num_ai); sq_rsp(num_ai,num_ai,A,eval,0,evec,1E-14); fprintf(outfile, "\n\tMagnetic Hessian Eigenvalues\n\n"); for(i=0; i SO */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP,nao,nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); /* Transform from SO -> MO */ C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); zero_mat(TMP,nao,nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(S[coord][0][0]),nmo); //fprintf(outfile,"\nHalf-Diff S[%d] (MO):\n",coord); //print_mat(S[coord],nmo,nmo,outfile); } free_block(TMP); free_block(X); /* Atomic Axial Tensor */ I = block_matrix(3, natom*3); for(coord=0; coord < natom*3; coord++) { for(asym=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { I[0][coord] += 2.0 * UX[coord][a][i] * UB[0][a][i]; I[1][coord] += 2.0 * UX[coord][a][i] * UB[1][a][i]; I[2][coord] += 2.0 * UX[coord][a][i] * UB[2][a][i]; } } } } } for(coord=0; coord < natom*3; coord++) { for(asym=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { I[0][coord] += 2.0 * UB[0][a][i] * S[coord][i][a]; I[1][coord] += 2.0 * UB[1][a][i] * S[coord][i][a]; I[2][coord] += 2.0 * UB[2][a][i] * S[coord][i][a]; } } } } } /* for(coord=0; coord < natom*3; coord++) { I[0][coord] *= _bohr2angstroms * _aumfd2tesla * 1E-6; I[1][coord] *= _bohr2angstroms * _aumfd2tesla * 1E-6; I[2][coord] *= _bohr2angstroms * _aumfd2tesla * 1E-6; } fprintf(outfile,"\nAtomic Axial Tensor I (10^-6 Angstrom^-1 T^-1):\n"); print_mat(I,3,natom*3,outfile); */ /* Nuclear Contribution to the AAT: Levi-Civita tensor epsilon_{ijk} i=0 j=1 k=2 epsilon_{012}=+1 i=0 j=2 k=1 epsilon_{021}=-1 i=1 j=0 k=2 epsilon_{102}=-1 i=2 j=1 k=0 epsilon_{210}=-1 i=1 j=2 k=0 epsilon_{120}=+1 i=2 j=0 k=1 epsilon_{201}=+1 */ fprintf(outfile,"\n\tElectronic Contributions to AAT (au):\n"); fprintf(outfile,"\n\t Bx\t\t By\t\t Bz\n"); for(i=0; i= (3*natom-nnc); i--) for(j=0; j<3; j++) rotstr[i] += dipder_q[j][i] * I_q[j][i]; fprintf(outfile,"\n\tRotational Strength (au):\n\n"); for(i=natom*3-1; i >= (natom*3-nnc); i--) { fprintf(outfile," Q%d\t%20.15lf\n",(3*natom-i),rotstr[i]); } fprintf(outfile,"\n\tRotational Strength (10^-44 esu^2 cm^2):\n\n"); for(i=natom*3-1; i >= (natom*3-nnc); i--) { tmp = (-1e-36*_bohr2angstroms*_h*rotstr[i]*1e10*1e44)/(_amu2kg*2*_pi*_c); fprintf(outfile," Q%d\t%20.15lf\n",(3*natom-i),tmp); } for(coord=0; coord < 3; coord++) { free_block(UB[coord]); free_block(S[coord]); } free_block(I); free_block(I_q); free_block(dipder_q); free(label); } }} // namespace psi::cphf psi3/src/bin/cphf/cphf_F.cc0000644000101500007650000001554210757640026014172 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { /* cphf_F(): Solve the first-order CPHF equations for an electric ** field perturbation. ** ** The CPHF equations are: ** ** A U^a = B0^a ** ** where A is the MO hessian [computed in mohess()], U^a is the ** orbital response (CPHF) coefficient, and B0^a is the ** perturbation-dependent inhomogenous factor. For electric field ** perturbations, B0^a is given by (MO basis): ** ** (B0^a)_ai = (mu^a)_ai ** ** where (mu^a)_pq is a dipole moment integral. ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.10, ** pp. 128-132 and Ch.16, pp. 332-333. ** ** TDC, October 2002 */ void cphf_F(double **Aaibj, double ***U) { int noei, stat, coord; double ***B, *scratch, **B0, **Acopy; double **TMP, **X; char *label; int a, asym, afirst, alast; int i, isym, ifirst, ilast; int AI, j, ij; int *ipiv, error; /* Allocate space for the B vectors */ B = (double ***) malloc(3 * sizeof(double **)); for(coord=0; coord < 3; coord++) B[coord] = block_matrix(nmo,nmo); /* Transform dipole integrals to the MO basis and save on disk */ TMP = block_matrix(nao, nao); X = block_matrix(nao, nao); scratch = init_array(noei_ao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_MX, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } /* fprintf(outfile, "\tAO-basis MuX Integrals:\n"); print_mat(TMP, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); zero_mat(TMP, nao, nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); /* fprintf(outfile, "\tSO-basis MuX Integrals:\n"); print_mat(TMP, nso, nso, outfile); */ C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(B[0][0][0]),nmo); /* fprintf(outfile, "\tMO-basis MuX Integrals:\n"); print_mat(B[0], nmo, nmo, outfile); */ for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) scratch[ij] = B[0][i][j]; iwl_wrtone(PSIF_OEI, PSIF_MO_MX, ntri, scratch); zero_arr(scratch,noei_ao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_MY, scratch, noei_ao, 0, 0, outfile); zero_mat(TMP, nao, nao); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } /* fprintf(outfile, "\tAO-basis MuY Integrals:\n"); print_mat(TMP, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); /* fprintf(outfile, "\tSO-basis MuY Integrals:\n"); print_mat(TMP, nso, nso, outfile); */ C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(B[1][0][0]),nmo); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) scratch[ij] = B[1][i][j]; iwl_wrtone(PSIF_OEI, PSIF_MO_MY, ntri, scratch); zero_arr(scratch,noei_ao); stat = iwl_rdone(PSIF_OEI, PSIF_AO_MZ, scratch, noei_ao, 0, 0, outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } /* fprintf(outfile, "\tAO-basis MuZ Integrals:\n"); print_mat(TMP, nao, nao, outfile); */ C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(usotao[0][0]),nao, 0,&(X[0][0]),nao); C_DGEMM('n','n',nso,nso,nao,1,&(usotao[0][0]),nao,&(X[0][0]),nao, 0,&(TMP[0][0]),nao); /* fprintf(outfile, "\tSO-basis MuZ Integrals:\n"); print_mat(TMP, nso, nso, outfile); */ C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(scf[0][0]),nmo, 0,&(X[0][0]),nao); C_DGEMM('t','n',nmo,nmo,nso,1,&(scf[0][0]),nmo,&(X[0][0]),nao, 0,&(B[2][0][0]),nmo); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) scratch[ij] = B[2][i][j]; iwl_wrtone(PSIF_OEI, PSIF_MO_MZ, ntri, scratch); free_block(TMP); free_block(X); free(scratch); /* fprintf(outfile, "\tSCF MO's:\n"); print_mat(scf, nso, nmo, outfile); fprintf(outfile, "\tMO-basis MuX Integrals:\n"); print_mat(B[0], nmo, nmo, outfile); fprintf(outfile, "\tMO-basis MuY Integrals:\n"); print_mat(B[1], nmo, nmo, outfile); fprintf(outfile, "\tMO-basis MuZ Integrals:\n"); print_mat(B[2], nmo, nmo, outfile); */ /* Sort the B's into vector storage */ B0 = block_matrix(3, num_ai); for(coord=0; coord < 3; coord++) { for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym = 0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { B0[coord][AI] = B[coord][a][i]; } } } } } ipiv = init_int_array(num_ai); /* Solve the CPHF equations */ Acopy = block_matrix(num_ai, num_ai); /* keep a copy of A */ memcpy(Acopy[0], Aaibj[0], num_ai*num_ai*sizeof(double)); for(coord=0; coord < 3; coord++) { error = C_DGESV(num_ai, 1, &(Aaibj[0][0]), num_ai, &(ipiv[0]), &(B0[coord][0]), num_ai); /* Recopy A because DGESV corrupts it */ memcpy(Aaibj[0], Acopy[0], num_ai*num_ai*sizeof(double)); } /* Sort the U matrices to matrix form */ for(coord=0; coord < 3; coord++) { for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { U[coord][a][i] = B0[coord][AI]; } } } } } if (print_lvl > 5) { for(coord=0; coord < 3; coord++) { fprintf(outfile, "\nUF[%d] Matrix (MO):\n", coord); print_mat(U[coord], nmo, nmo, outfile); } } /* Dump the U matrices out to disk */ label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); psio_open(PSIF_CPHF, 1); for(coord=0; coord < 3; coord++) { sprintf(label, "UF(%d)", coord); psio_write_entry(PSIF_CPHF, label, (char *) &(U[coord][0][0]), nmo*nmo*sizeof(double)); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; } psio_close(PSIF_CPHF, 1); for(coord=0; coord < 3; coord++) free_block(B[coord]); free(B); free_block(B0); free_block(Acopy); } }} // namespace psi::cphf psi3/src/bin/cphf/cphf_X.cc0000644000101500007650000001157710757640026014220 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { /* cphf_X(): Solve the first-order CPHF equations for a nuclear ** perturbation. ** ** The CPHF equations are: ** ** A U^a = B0^a ** ** where A is the MO hessian [computed in mohess()], U^a is the ** orbital response (CPHF) coefficient, and B0^a is the ** perturbation-dependent inhomogenous factor. B0^a is given by (MO ** basis): ** ** (B0^a)_ai = (F^a)_ai - (S^a)_ai eps_i - (S^a)_jk [ 2 (ai|jk) - ** (aj|ik) ] ** ** where (F^a)_pq is a Fock derivative and (S^a)_pq is an overlap ** derivative. ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.10, ** esp. pp. 128-132. ** ** Also see N.C. Handy, R.D. Amos, J.F. Gaw, J.E. Rice, and ** E.D. Simandiras, "The elimination of singularities in derivative ** calculations," Chem. Phys. Lett. 120, 151 (1985) for an explanation ** of the treatment of dependent-pairs in the U coefficients. ** ** TDC, December 2001 (revised October 2002) */ void cphf_X(double ***S, double **Baijk, double **Aaibj, double ***U) { int coord, coord_a, coord_b, AI, *ipiv, error; double **Acopy; double *inbuf, value; char *label; int p, q, k, l, a, i, j, m, pq, kl, pk, qk, ql, pl, pj, jq, jl, ij; int pqkl, pkql, plqk, pjql, pqjl, pljq; int pfirst, plast, qfirst, qlast, kfirst, klast, lfirst, llast; int afirst, alast, ifirst, ilast, jfirst, jlast; int psym, qsym, ksym, lsym, asym, isym, jsym; ipiv = init_int_array(num_ai); /* Solve the CPHF equations */ Acopy = block_matrix(num_ai, num_ai); /* keep a copy of A */ memcpy(Acopy[0], Aaibj[0], num_ai*num_ai*sizeof(double)); for(coord=0; coord < natom*3; coord++) { error = C_DGESV(num_ai, 1, &(Aaibj[0][0]), num_ai, &(ipiv[0]), &(Baijk[coord][0]), num_ai); /* Recopy A because DGESV corrupts it */ memcpy(Aaibj[0], Acopy[0], num_ai*num_ai*sizeof(double)); } /* Sort the U matrices to matrix form */ for(coord=0; coord < natom*3; coord++) { for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { U[coord][a][i] = Baijk[coord][AI]; } } } } } if (print_lvl > 5) { for(coord=0; coord < natom*3; coord++) { fprintf(outfile, "\nU[%d] Matrix (Baikj):\n", coord); print_mat(U[coord], nmo, nmo, outfile); } } /* Add the dependent pairs on the lower triangle */ for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; (j <= jlast) && (j <= i); j++) { if(i==j) continue; /* apply only to non-diagonal terms */ /* this is the Handy -1/2 S trick for dependent pairs */ for(coord=0; coord < natom*3; coord++) { U[coord][i][j] = -0.5 * S[coord][i][j]; } } } } } /* Add the upper triangle */ for(coord=0; coord < natom*3; coord++) { /* dependent pairs */ for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { U[coord][i][i] -= 0.5 * S[coord][i][i]; for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; (j <= jlast) && (j < i); j++) U[coord][j][i] = -U[coord][i][j] - S[coord][i][j]; } } } /* independent pairs */ for(asym=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { U[coord][i][a] = -U[coord][a][i] - S[coord][a][i]; } } } } } /* Write the U matrices out to disk */ label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); psio_open(PSIF_CPHF, 1); for(coord=0; coord < natom*3; coord++) { sprintf(label, "UX(%d)", coord); psio_write_entry(PSIF_CPHF, label, (char *) &(U[coord][0][0]), nmo*nmo*sizeof(double)); for(i=0; i < PSIO_KEYLEN; i++) label[i] = '\0'; if(print_lvl > 5) { fprintf(outfile, "\nU[%d] Matrix (MO):\n", coord); print_mat(U[coord], nmo, nmo, outfile); } } psio_close(PSIF_CPHF, 1); free_block(Acopy); } }} // namespace psi::cphf psi3/src/bin/cphf/globals.h0000644000101500007650000000207010754663017014264 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #ifndef _psi_bin_cphf_globals_h_ #define _psi_bin_cphf_globals_h_ /* Global variables */ #ifdef EXTERN #undef EXTERN #define EXTERN extern #else #define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } namespace psi { namespace cphf { EXTERN int *ioff; #define IOFF_MAX 32641 #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) EXTERN int X_only; /* only compute cphf coefficients, then stop */ /* setup.c */ EXTERN int natom, nmo, nso, nao, nirreps, ndocc, nuocc; EXTERN int ntri, num_ai, num_pi, num_pq, ntei, noei, noei_ao; EXTERN int *orbspi, *clsdpi, *openpi, *uoccpi; EXTERN int *frdoccpi, *fruoccpi, *qtsorder; EXTERN double *evals, *zvals, *ints, **scf, **usotao, **geom; EXTERN int *first, *last, *ofirst, *olast, *vfirst, *vlast; EXTERN int rottype, nnc; EXTERN char **asymbol; EXTERN double **dipder, **dipder_q; EXTERN int print_lvl; void zval_to_symbol(double zval, char *sym); }} // namespace psi::cphf #endif // header file psi3/src/bin/cphf/Makefile.in0000644000101500007650000000072310677243404014536 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = cphf.cc setup.cc out_of_core.cc mohess.cc cphf_X.cc cphf_F.cc \ polarize.cc build_hessian.cc build_dipder.cc vibration.cc cphf_B.cc \ zval_to_symbol.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif psi3/src/bin/cphf/mohess.cc0000644000101500007650000000534210757640026014300 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { /* mohess(): Builds the molecular orbital hessian matrix, which is ** needed for solving the CPHF equations and for Hartree-Fock wave ** function stability analysis. ** ** The MO hessian may be expressed as: ** ** A_ai,bj = delta_ab delta_ij (eps_i - eps_a) ** - [4 (ai|bj) - (ab|ij) - (aj|ib) ] ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.10, ** esp. pp. 128-132. ** ** Note that, although the loop structure here involves irreps, ** symmetry is only used because of the Pitzer ordering of the MO's ** (all orbitals together in each irrep). Symmetry is not actually ** used to streamline the calculation or storage. This could be done ** (and *should* be) by computing offsets for symmetry blocks similar ** to the direct-product decomposition approach used in the PSI3 ** coupled cluster codes. However, when the CPHF equations are ** solved, the perturbations themselves must be symmetrized or the ** irrep structure of the CPHF coefficients will be lost. ** ** TDC, December 2001 (revised October 2002) */ void mohess(double **Aaibj) { int asym, isym, bsym, jsym; int a, i, b, j; int afirst, alast, ifirst, ilast; int bfirst, blast, jfirst, jlast; int AI, BJ; for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { for(bsym=0,BJ=0; bsym < nirreps; bsym++) { bfirst = vfirst[bsym]; blast = vlast[bsym]; for(b=bfirst; b <= blast; b++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++,BJ++) { Aaibj[AI][BJ] += (a==b) * (i==j) * (evals[i] - evals[a]); } } } } } } } } if (print_lvl > 5) { fprintf(outfile, "MO Hessian A(ai,bj): \n"); print_mat(Aaibj, num_ai, num_ai, outfile); } /* dump the hessian to disk */ psio_open(PSIF_CPHF, 1); psio_write_entry(PSIF_CPHF, "RHF MO Hessian", (char *) Aaibj[0], num_ai*num_ai*sizeof(double)); psio_close(PSIF_CPHF, 1); return; } }} // namespace psi::cphf psi3/src/bin/cphf/out_of_core.cc0000644000101500007650000005626210757640026015314 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { void out_of_core(double ***F, double ***S, double ***B, double **A) { int coord; int i, j, ij; double value; double *inbuf; char *label; double cutoff = 0.0; int k, l, n; int ii, jj, kk; int ji, ik, ki, il, li; int jk, kj, kl, lk, jl, lj; int iq, jq, kq, lq; int tmp = 0; int endflag = 0; int bufsize = 0; int labelindex = 0; double intvalue = 0; struct iwlbuf buffer; /* Grab the MO-basis overlap and Fock derivative integrals from disk */ label = (char *) malloc(PSIO_KEYLEN * sizeof(char)); inbuf = init_array(ntri); for(coord=0; coord < natom*3; coord++) { sprintf(label, "MO-basis Fock Derivs (%d)", coord); iwl_rdone(PSIF_OEI, label, inbuf, ntri, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) { label[i] = '\0'; } for(i=0, ij=0; i < nmo; i++) { for(j=0; j <= i; j++, ij++) { F[coord][i][j] = F[coord][j][i] = inbuf[ij]; } } if(print_lvl > 5) { fprintf(outfile, "F[%d] Deriv (MO):\n", coord); print_mat(F[coord], nmo, nmo, outfile); } } for(coord=0; coord < natom*3; coord++) { sprintf(label, "MO-basis Overlap Derivs (%d)", coord); iwl_rdone(PSIF_OEI, label, inbuf, ntri, 0, 0, NULL); for(i=0; i < PSIO_KEYLEN; i++) { label[i] = '\0'; } for(i=0, ij=0; i < nmo; i++) { for(j=0; j <= i; j++, ij++) { S[coord][i][j] = S[coord][j][i] = inbuf[ij]; } } if(print_lvl > 5) { fprintf(outfile, "S[%d] Deriv (MO):\n", coord); print_mat(S[coord], nmo, nmo, outfile); } } /* Fock and overlap derivative components */ for(coord=0; coord < natom*3; coord++) { for(i=0; i < nmo; i++) { for(j=0; j < nmo; j++) { B[coord][i][j] = F[coord][i][j] - S[coord][i][j] * evals[j]; } } if(print_lvl > 5) { fprintf(outfile, "B[%d]_ij = F_ij-S_ij*e_j:\n", coord); print_mat(B[coord], nmo, nmo, outfile); } } free(inbuf); free(label); /* Two-Electron Integrals Out-Of-Core * * Out-of-Core Cases * Case 1 : (pp|pp) * Case 2 : (pp|pq) * Case 3 : (pq|qq) * Case 4 : (pp|qq) * Case 5 : (pq|pq) * Case 6 : (pp|qr) * Case 7 : (pq|qr) * Case 8 : (pq|pr) * Case 9 : (pq|rq) * Case 10 : (pq|rr) * Case 11 : (pq|rs) * * MO basis * B_a_pq = -S_a_rs*(2*(pq|rs)-(pr|qs)) * A_pq,rs = -4*(pq|rs)+(pr|qs)+(ps|qr) * */ /* Prepare arrays in QTS ordering so * the integrals can be screened according * to orbital space; this is needed for * the B-matrix. */ qtsorder = init_int_array(nmo); reorder_qt(clsdpi, openpi, frdoccpi, fruoccpi, qtsorder, orbspi, nirreps); iwl_buf_init(&buffer, PSIF_MO_TEI, cutoff, 1, 1); while (endflag == 0) { bufsize = buffer.inbuf; endflag = buffer.lastbuf; labelindex = 0; for (n = 0; n < bufsize; n++) { /* Pitzer ordering */ i = abs(buffer.labels[labelindex++]); j = buffer.labels[labelindex++]; k = buffer.labels[labelindex++]; l = buffer.labels[labelindex++]; intvalue = buffer.values[n]; /* QTS ordering */ iq = qtsorder[i]; jq = qtsorder[j]; kq = qtsorder[k]; lq = qtsorder[l]; /* Case 1 : (pp|pp) */ if ((i == j) && (j == k) && (k == l)) { /* (oo|oo) */ if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= S[coord][i][i] * intvalue; } } ii = INDEX(i,i); A[ii][ii] -= 2 * intvalue; } /* Case 2 : (pp|pq) */ else if ((i == j) && (j == k)) { /* (oo|ov) */ if (iq < ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][l] -= S[coord][i][i] * intvalue; B[coord][l][i] -= S[coord][i][i] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= 2 * S[coord][i][l] * intvalue; B[coord][i][l] -= S[coord][i][i] * intvalue; B[coord][l][i] -= S[coord][i][i] * intvalue; } } ii = INDEX(i,i); il = INDEX(i,l); A[ii][il] -= 2 * intvalue; A[il][ii] -= 2 * intvalue; } /* Case 3 : (pq|qq) */ else if ((j == k) && (k == l)) { /* (vo|oo) */ if (iq >= ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= S[coord][j][j] * intvalue; B[coord][j][i] -= S[coord][j][j] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= S[coord][j][j] * intvalue; B[coord][j][i] -= S[coord][j][j] * intvalue; B[coord][j][j] -= 2 * S[coord][i][j] * intvalue; } } ij = INDEX(i,j); jj = INDEX(j,j); A[ij][jj] -= 2 * intvalue; A[jj][ij] -= 2 * intvalue; } /* Case 4 : (pp|qq) */ else if (i == j && k == l) { /* (vv|oo) */ if (iq >= ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= 2 * S[coord][k][k] * intvalue; } } /* (oo|vv) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][k] -= 2 * S[coord][i][i] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= 2 * S[coord][k][k] * intvalue; B[coord][k][k] -= 2 * S[coord][i][i] * intvalue; B[coord][i][k] += S[coord][i][k] * intvalue; B[coord][k][i] += S[coord][i][k] * intvalue; } } ii = INDEX(i,i); kk = INDEX(k,k); ik = INDEX(i,k); A[ik][ik] += 1 * intvalue; A[ii][kk] -= 4 * intvalue; A[kk][ii] -= 4 * intvalue; } /* Case 5 : (pq|pq) */ else if ((i == k) && (j == l)) { /* (vo|vo) */ if (iq >= ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] += S[coord][j][j] * intvalue; } } /* (ov|ov) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][j] += S[coord][i][i] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][i][j] * intvalue; B[coord][j][i] -= 3 * S[coord][i][j] * intvalue; B[coord][i][i] += S[coord][j][j] * intvalue; B[coord][j][j] += S[coord][i][i] * intvalue; } } ij = INDEX(i,j); ii = INDEX(i,i); jj = INDEX(j,j); A[ij][ij] -= 3 * intvalue; A[ii][jj] += 2 * intvalue; A[jj][ii] += 2 * intvalue; } /* Case 6 : (pp|qr) */ else if (k != l && i == j) { /* (vv|oo) */ if (iq >= ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= 4 * S[coord][k][l] * intvalue; } } /* (oo|vv) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 2 * S[coord][i][i] * intvalue; B[coord][l][k] -= 2 * S[coord][i][i] * intvalue; } } /* (oo|vo) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 2 * S[coord][i][i] * intvalue; B[coord][l][k] -= 2 * S[coord][i][i] * intvalue; B[coord][i][k] += S[coord][i][l] * intvalue; B[coord][k][i] += S[coord][i][l] * intvalue; } } /* (oo|ov) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 2 * S[coord][i][i] * intvalue; B[coord][l][k] -= 2 * S[coord][i][i] * intvalue; B[coord][i][l] += S[coord][i][k] * intvalue; B[coord][l][i] += S[coord][i][k] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] -= 4 * S[coord][k][l] * intvalue; B[coord][k][l] -= 2 * S[coord][i][i] * intvalue; B[coord][l][k] -= 2 * S[coord][i][i] * intvalue; B[coord][i][k] += S[coord][i][l] * intvalue; B[coord][k][i] += S[coord][i][l] * intvalue; B[coord][i][l] += S[coord][i][k] * intvalue; B[coord][l][i] += S[coord][i][k] * intvalue; } } ii = INDEX(i,i); kl = INDEX(k,l); ik = INDEX(i,k); il = INDEX(i,l); A[ii][kl] -= 4 * intvalue; A[kl][ii] -= 4 * intvalue; A[ik][il] += 1 * intvalue; A[il][ik] += 1 * intvalue; } /* Case 7 : (pq|qr) */ else if (i != l && j == k) { /* (vo|ov) */ if (iq >= ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][l] += S[coord][j][j] * intvalue; B[coord][l][i] += S[coord][j][j] * intvalue; } } /* (ov|vo) */ else if (iq < ndocc && jq >= ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][j] += 2 * S[coord][i][l] * intvalue; } } /* (oo|ov) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][l] -= 3 * S[coord][i][j] * intvalue; B[coord][l][j] -= 3 * S[coord][i][j] * intvalue; B[coord][i][l] += S[coord][j][j] * intvalue; B[coord][l][i] += S[coord][j][j] * intvalue; } } /* (vo|oo) */ else if (iq >= ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][j][l] * intvalue; B[coord][j][i] -= 3 * S[coord][j][l] * intvalue; B[coord][i][l] += S[coord][j][j] * intvalue; B[coord][l][i] += S[coord][j][j] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][j][l] * intvalue; B[coord][j][i] -= 3 * S[coord][j][l] * intvalue; B[coord][j][l] -= 3 * S[coord][i][j] * intvalue; B[coord][l][j] -= 3 * S[coord][i][j] * intvalue; B[coord][j][j] += 2 * S[coord][i][l] * intvalue; B[coord][i][l] += S[coord][j][j] * intvalue; B[coord][l][i] += S[coord][j][j] * intvalue; } } ij = INDEX(i,j); jl = INDEX(j,l); il = INDEX(i,l); jj = INDEX(j,j); A[ij][jl] -= 3 * intvalue; A[jl][ij] -= 3 * intvalue; A[il][jj] += 2 * intvalue; A[jj][il] += 2 * intvalue; } /* Case 8 : (pq|pr) */ else if (j != l && i == k) { /* (vo|vo) */ if (iq >= ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][i] += 2 * S[coord][j][l] * intvalue; } } /* (ov|ov) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][l] += S[coord][i][i] * intvalue; B[coord][l][j] += S[coord][i][i] * intvalue; } } /* (oo|ov) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][l] -= 3 * S[coord][i][j] * intvalue; B[coord][l][i] -= 3 * S[coord][i][j] * intvalue; B[coord][j][l] += S[coord][i][i] * intvalue; B[coord][l][j] += S[coord][i][i] * intvalue; } } /* (ov|oo) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][i][l] * intvalue; B[coord][j][i] -= 3 * S[coord][i][l] * intvalue; B[coord][j][l] += S[coord][i][i] * intvalue; B[coord][l][j] += S[coord][i][i] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][i][l] * intvalue; B[coord][j][i] -= 3 * S[coord][i][l] * intvalue; B[coord][i][l] -= 3 * S[coord][i][j] * intvalue; B[coord][l][i] -= 3 * S[coord][i][j] * intvalue; B[coord][i][i] += 2 * S[coord][j][l] * intvalue; B[coord][j][l] += S[coord][i][i] * intvalue; B[coord][l][j] += S[coord][i][i] * intvalue; } } ij = INDEX(i,j); il = INDEX(i,l); ii = INDEX(i,i); jl = INDEX(j,l); A[ij][il] -= 3 * intvalue; A[il][ij] -= 3 * intvalue; A[ii][jl] += 2 * intvalue; A[jl][ii] += 2 * intvalue; } /* Case 9 : (pq|rq) */ else if (i !=k && j == l) { /* (vo|vo) */ if (iq >= ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][k] += S[coord][j][j] * intvalue; B[coord][k][i] += S[coord][j][j] * intvalue; } } /* (ov|ov) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][j] += 2 * S[coord][i][k] * intvalue; } } /* (oo|vo) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][k] -= 3 * S[coord][i][j] * intvalue; B[coord][k][j] -= 3 * S[coord][i][j] * intvalue; B[coord][i][k] += S[coord][j][j] * intvalue; B[coord][k][i] += S[coord][j][j] * intvalue; } } /* (vo|oo) */ else if (iq >= ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][j][k] * intvalue; B[coord][j][i] -= 3 * S[coord][j][k] * intvalue; B[coord][i][k] += S[coord][j][j] * intvalue; B[coord][k][i] += S[coord][j][j] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 3 * S[coord][j][k] * intvalue; B[coord][j][i] -= 3 * S[coord][j][k] * intvalue; B[coord][j][k] -= 3 * S[coord][i][j] * intvalue; B[coord][k][j] -= 3 * S[coord][i][j] * intvalue; B[coord][j][j] += 2 * S[coord][i][k] * intvalue; B[coord][i][k] += S[coord][j][j] * intvalue; B[coord][k][i] += S[coord][j][j] * intvalue; } } ij = INDEX(i,j); kj = INDEX(k,j); jj = INDEX(j,j); ik = INDEX(i,k); A[ij][kj] -= 3 * intvalue; A[kj][ij] -= 3 * intvalue; A[jj][ik] += 2 * intvalue; A[ik][jj] += 2 * intvalue; } /* Case 10 : (pq|rr) */ else if (i != j && k == l) { /* (vv|oo) */ if (iq >= ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 2 * S[coord][k][k] * intvalue; B[coord][j][i] -= 2 * S[coord][k][k] * intvalue; } } /* (oo|vv) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][k] -= 4 * S[coord][i][j] * intvalue; } } /* (ov|oo) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 2 * S[coord][k][k] * intvalue; B[coord][j][i] -= 2 * S[coord][k][k] * intvalue; B[coord][j][k] += S[coord][i][k] * intvalue; B[coord][k][j] += S[coord][i][k] * intvalue; } } /* (vo|oo) */ else if (iq >= ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 2 * S[coord][k][k] * intvalue; B[coord][j][i] -= 2 * S[coord][k][k] * intvalue; B[coord][i][k] += S[coord][j][k] * intvalue; B[coord][k][i] += S[coord][j][k] * intvalue; } } /* (oo|oo) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][k] -= 4 * S[coord][i][j] * intvalue; B[coord][i][j] -= 2 * S[coord][k][k] * intvalue; B[coord][j][i] -= 2 * S[coord][k][k] * intvalue; B[coord][i][k] += S[coord][j][k] * intvalue; B[coord][k][i] += S[coord][j][k] * intvalue; B[coord][j][k] += S[coord][i][k] * intvalue; B[coord][k][j] += S[coord][i][k] * intvalue; } } ij = INDEX(i,j); kk = INDEX(k,k); ik = INDEX(i,k); jk = INDEX(j,k); A[ij][kk] -= 4 * intvalue; A[kk][ij] -= 4 * intvalue; A[ik][jk] += 1 * intvalue; A[jk][ik] += 1 * intvalue; } /* Case 11 : (pq|rs) */ else if (i != j && j != k && k != l) { /* (vv|oo) */ if (iq >= ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 4 * S[coord][k][l] * intvalue; B[coord][j][i] -= 4 * S[coord][k][l] * intvalue; } } /* (vo|ov) */ else if (iq >= ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][l] += S[coord][j][k] * intvalue; B[coord][l][i] += S[coord][k][j] * intvalue; } } /* (vo|vo) */ else if (iq >= ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][k] += S[coord][j][l] * intvalue; B[coord][k][i] += S[coord][l][j] * intvalue; } } /* (ov|ov) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][l] += S[coord][i][k] * intvalue; B[coord][l][j] += S[coord][i][k] * intvalue; } } /* (ov|vo) */ else if (iq < ndocc && jq >= ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][j][k] += S[coord][i][l] * intvalue; B[coord][k][j] += S[coord][i][l] * intvalue; } } /* (oo|vv) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 4 * S[coord][i][j] * intvalue; B[coord][l][k] -= 4 * S[coord][i][j] * intvalue; } } /* (vo|oo) */ else if (iq >= ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 4 * S[coord][k][l] * intvalue; B[coord][j][i] -= 4 * S[coord][k][l] * intvalue; B[coord][i][l] += S[coord][j][k] * intvalue; B[coord][l][i] += S[coord][k][j] * intvalue; B[coord][i][k] += S[coord][j][l] * intvalue; B[coord][k][i] += S[coord][l][j] * intvalue; } } /* (ov|oo) */ else if (iq < ndocc && jq >= ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 4 * S[coord][k][l] * intvalue; B[coord][j][i] -= 4 * S[coord][k][l] * intvalue; B[coord][j][l] += S[coord][i][k] * intvalue; B[coord][l][j] += S[coord][i][k] * intvalue; B[coord][j][k] += S[coord][i][l] * intvalue; B[coord][k][j] += S[coord][i][l] * intvalue; } } /* (oo|vo) */ else if (iq < ndocc && jq < ndocc && kq >= ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 4 * S[coord][i][j] * intvalue; B[coord][l][k] -= 4 * S[coord][i][j] * intvalue; B[coord][j][k] += S[coord][i][l] * intvalue; B[coord][k][j] += S[coord][i][l] * intvalue; B[coord][i][k] += S[coord][j][l] * intvalue; B[coord][k][i] += S[coord][l][j] * intvalue; } } /* (oo|ov) */ else if (iq < ndocc && jq < ndocc && kq < ndocc && lq >= ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][k][l] -= 4 * S[coord][i][j] * intvalue; B[coord][l][k] -= 4 * S[coord][i][j] * intvalue; B[coord][j][l] += S[coord][i][k] * intvalue; B[coord][l][j] += S[coord][i][k] * intvalue; B[coord][i][l] += S[coord][j][k] * intvalue; B[coord][l][i] += S[coord][k][j] * intvalue; } } /* (oo|oo) */ else if(iq < ndocc && jq < ndocc && kq < ndocc && lq < ndocc) { for (coord = 0; coord < natom * 3; coord++) { B[coord][i][j] -= 4 * S[coord][k][l] * intvalue; B[coord][j][i] -= 4 * S[coord][k][l] * intvalue; B[coord][k][l] -= 4 * S[coord][i][j] * intvalue; B[coord][l][k] -= 4 * S[coord][i][j] * intvalue; B[coord][i][k] += S[coord][j][l] * intvalue; B[coord][k][i] += S[coord][j][l] * intvalue; B[coord][i][l] += S[coord][j][k] * intvalue; B[coord][l][i] += S[coord][j][k] * intvalue; B[coord][j][k] += S[coord][i][l] * intvalue; B[coord][k][j] += S[coord][i][l] * intvalue; B[coord][j][l] += S[coord][i][k] * intvalue; B[coord][l][j] += S[coord][i][k] * intvalue; } } ij = INDEX(i,j); kl = INDEX(k,l); ik = INDEX(i,k); jl = INDEX(j,l); il = INDEX(i,l); jk = INDEX(j,k); A[ij][kl] -= 4 * intvalue; A[kl][ij] -= 4 * intvalue; A[ik][jl] += 1 * intvalue; A[jl][ik] += 1 * intvalue; A[il][jk] += 1 * intvalue; A[jk][il] += 1 * intvalue; } } /* end of for loop: buffer */ if (endflag == 0) { iwl_buf_fetch(&buffer); } } /* End of while loop: out-of-core */ iwl_buf_close(&buffer,1); if(print_lvl > 5) { for(coord=0; coord < 3*natom; coord++) { fprintf(outfile, "B(p,q)[%d] (MO):\n", coord); print_mat(B[coord], nmo, nmo, outfile); } } } void sort_B(double ***B, double **Baijk) { int coord, a, i, AI; int asym, isym; int afirst, alast; int ifirst, ilast; for(coord=0; coord < natom*3; coord++) { for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym = 0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { Baijk[coord][AI] = B[coord][a][i]; } } } } } return; } void sort_A(double **A, double **Aaibj) { int asym, isym, bsym, jsym, psym, qsym; int a, i, b, j, p, q; int ai, bj, pi, qj; int AI, BJ, PI, QJ; int afirst, alast, ifirst, ilast; int bfirst, blast, jfirst, jlast; int pfirst, plast, qfirst, qlast; for(asym=0,AI=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++,AI++) { ai = INDEX(a,i); for(bsym=0,BJ=0; bsym < nirreps; bsym++) { bfirst = vfirst[bsym]; blast = vlast[bsym]; for(b=bfirst; b <= blast; b++) { for(jsym=0; jsym < nirreps; jsym++) { jfirst = ofirst[jsym]; jlast = olast[jsym]; for(j=jfirst; j <= jlast; j++,BJ++) { bj = INDEX(b,j); Aaibj[AI][BJ] = A[ai][bj]; } } } } } } } } return; } }} // namespace psi::cphf psi3/src/bin/cphf/polarize.cc0000644000101500007650000000770410757640026014633 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { /* polarize(): Compute the total polarizability from the dipole moment ** integrals computed by "cints --oeprop" and the field-perturbation ** CPHF coefficients computed in cphf_F(). The equation for the ** polarizability is (MO basis): ** ** alpha_fg = - 4 (U^g)_ai (mu^f)_ai ** ** where (U^g)_pq is a CPHF coefficient and (mu^f)_pq is a dipole ** moment integral. Summation over all indices is implied. ** ** In addition, the dipole moment is computed, just because we have ** the integrals and it's easy: ** ** mu^f = (mu^f)_elec + (mu^f)_nuc = 2 (mu^f)_ii + R_Af Z_A ** ** For more details (and clearer notation) see: ** ** Y. Yamaguchi et al., "A New Dimension to Quantum Chemistry: ** Analytic Derivative Methods in Ab Initio Molecular Electronic ** Structure Theory", Oxford Press, New York, 1994. Ch.17, ** esp. pp. 314-317. ** ** TDC, October 2002 */ void polarize(double ***UF) { double **alpha; double ***MU, *mu; double *scratch; int stat, f, g, j, ij; int a, asym, afirst, alast; int i, isym, ifirst, ilast; MU = (double ***) malloc(3 * sizeof(double **)); for(i=0; i < 3; i++) MU[i] = block_matrix(nmo,nmo); /* Grab the MO-basis dipole integrals from disk */ scratch = init_array(ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MX, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[0][i][j] = MU[0][j][i] = scratch[ij]; zero_arr(scratch,ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MY, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[1][i][j] = MU[1][j][i] = scratch[ij]; zero_arr(scratch,ntri); stat = iwl_rdone(PSIF_OEI, PSIF_MO_MZ, scratch, ntri, 0, 0, outfile); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) MU[2][i][j] = MU[2][j][i] = scratch[ij]; if(print_lvl & 2) { fprintf(outfile, "MO Mu-X Ints:\n"); print_mat(MU[0], nmo, nmo, outfile); fprintf(outfile, "MO Mu-Y Ints:\n"); print_mat(MU[1], nmo, nmo, outfile); fprintf(outfile, "MO Mu-Z Ints:\n"); print_mat(MU[2], nmo, nmo, outfile); } free(scratch); /* Compute the dipole moment */ mu = init_array(3); for(f=0; f < 3; f++) { /* electronic contribution */ for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) mu[f] += 2.0 * MU[f][i][i]; } /* nuclear contribution */ for(a=0; a < natom; a++) { mu[f] += geom[a][f] * zvals[a]; } } fprintf(outfile, "\n\tHartree-Fock Electric Dipole Moments:\n"); fprintf(outfile, "\t------------------------------------\n"); for(f=0; f < 3; f++) { fprintf(outfile, "\tmu[%d] = %10.6f (e a0) = %10.6f (debye)\n", f, mu[f], mu[f]*_dipmom_au2debye); } fprintf(outfile, "\n\tTotal dipole moment (debye) = %20.10f\n", sqrt(mu[0]*mu[0] + mu[1]*mu[1] + mu[2]*mu[2])*_dipmom_au2debye); free(mu); /* Compute the polarizability tensor */ alpha = block_matrix(3,3); for(f=0; f < 3; f++) { for(g=0; g < 3; g++) { for(asym=0; asym < nirreps; asym++) { afirst = vfirst[asym]; alast = vlast[asym]; for(a=afirst; a <= alast; a++) { for(isym=0; isym < nirreps; isym++) { ifirst = ofirst[isym]; ilast = olast[isym]; for(i=ifirst; i <= ilast; i++) { alpha[f][g] -= 4.0 * UF[g][a][i] * MU[f][a][i]; } } } } } } fprintf(outfile, "\n\tHartree-Fock Electric Polarizability Tensor [(e^2 a0^2)/E_h]:\n"); fprintf(outfile, "\t---------------------------------------------------------------\n"); print_mat(alpha,3,3,outfile); for(i=0; i < 3; i++) free_block(MU[i]); free(MU); free_block(alpha); } }} // namespace psi::cphf psi3/src/bin/cphf/setup.cc0000644000101500007650000000562110757640026014142 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ #include #include #include #include #define EXTERN #include "globals.h" namespace psi { namespace cphf { void setup(void) { int i, coord, h, foffset, loffset; chkpt_init(PSIO_OPEN_OLD); natom = chkpt_rd_natom(); nmo = chkpt_rd_nmo(); nso = chkpt_rd_nso(); nao = chkpt_rd_nao(); evals = chkpt_rd_evals(); nirreps = chkpt_rd_nirreps(); orbspi = chkpt_rd_orbspi(); clsdpi = chkpt_rd_clsdpi(); zvals = chkpt_rd_zvals(); scf = chkpt_rd_scf(); usotao = chkpt_rd_usotao(); geom = chkpt_rd_geom(); rottype = chkpt_rd_rottype(); chkpt_close(); // Number of normal coordinates if(rottype==3) nnc = (3*natom-5); else nnc = (3*natom-6); asymbol = (char**)malloc(natom*3*sizeof(char*)); for(i=0; i #include #include #include #include #include #include #include #include #include #include #define EXTERN #include "globals.h" #define _D2esucm 1e-18 namespace psi { namespace cphf { /* vibration(): Computes the harmonic vibrational frequencies and IR ** integrated absorption coefficients (intensities) using the ** cartesian hessian from build_hessian() and dipole derivatives from ** build_dipder(). ** ** The procedure for computing the normal modes is described in: ** ** E.B. Wilson, J.C Decius, and P.C. Cross, "Molecular Vibrations: ** The Theory of Infrared and Raman Vibrational Spectra", Dover, New ** York, 1955. ** ** The relationship between IR intensities and dipole derivatives is ** described in the same text (Ch. 7) as well as in: ** ** I. Mills, T. Cvitas, K. Homann, N. Kallay, and K. Kuchitsu, ** "Quantities, Units, and Symbols in Physical Chemistry", Oxford, ** London, 1993, pp. 33-35. ** ** B.S. Galabov and T. Dudev, "Vibrational Intensities", v.22 of ** Vibrational Spectra and Structure, J.R. Durig, ed., Elsevier, 1996, ** pp. 2-12. ** ** G. Zerbi, "Introduction to the Theory of Vibrational Frequencies ** and Vibrational Intensities," in Vibrational Intensities in ** Infrared and Raman Spectroscopy, v.20 of Studies in Physical and ** Theoretical Chemistry, W.B. Person and G. Zerbi, eds., Elsevier ** 1982, pp. 45-51. ** ** TDC, October 2002. */ void vibration(double **hessian, double **lx) { int i, j, k; double **M, *irint; double **TMP; double *km, k_convert, cm_convert; double *work; int stat; double dipder_conv, ir_prefactor; double ds; double freq; /* Print out the force constants for subsequent optimizations */ TMP = block_matrix(natom*3,natom*3); for(i=0; i<3*natom; i++) { for(j=0; j<3*natom; j++) TMP[i][j] = hessian[i][j] * _hartree2J * 1.0E18 / (_bohr2angstroms * _bohr2angstroms); } psio_open(PSIF_OPTKING,PSIO_OPEN_OLD); fprintf(outfile,"\n\tWriting Cartesian Force Constants to PSIF_OPTKING file\n"); psio_write_entry(PSIF_OPTKING, "Cartesian Force Constants", (char *) &(TMP[0][0]),3*natom*3*natom*sizeof(double)); psio_close(PSIF_OPTKING,1); // fprintf(outfile, "\n\tHessian matrix in aJ/Ang^2:\n"); // print_mat(TMP, natom*3, natom*3, outfile); free_block(TMP); /* mass-weight the hessian */ M = block_matrix(natom*3, natom*3); for(i=0; i < natom; i++) { for(j=0; j < 3; j++) { M[i*3+j][i*3+j] = 1/sqrt(an2masses[(int) zvals[i]]); } } //fprintf(outfile, "\n\tM^-1/2 matrix:\n"); //print_mat(M, natom*3, natom*3, outfile); TMP = block_matrix(natom*3,natom*3); C_DGEMM('n','n', natom*3, natom*3, natom*3, 1.0, &(M[0][0]), natom*3, &(hessian[0][0]), natom*3, 0.0, &(TMP[0][0]), natom*3); C_DGEMM('n','n', natom*3, natom*3, natom*3, 1.0, &(TMP[0][0]), natom*3, &(M[0][0]), natom*3, 0.0, &(hessian[0][0]), natom*3); free_block(TMP); //fprintf(outfile, "\n\tMass-Weighted Hessian matrix:\n"); //print_mat(hessian, natom*3, natom*3, outfile); /* diagonalize mass-weighted hessian */ km = init_array(natom*3); /* mass-weighted force constants */ work = init_array(natom*3*3); /* scratch array */ if(stat = C_DSYEV('v','u',natom*3,&(hessian[0][0]),natom*3,&(km[0]),&(work[0]),natom*3*3)) { fprintf(outfile, "vibration(): Error in hessian diagonalization. stat = %d\n", stat); exit(PSI_RETURN_FAILURE); } /* fprintf(outfile, "\n\tEigenvalues of Diagonalized Hessian Matrix\n"); for(i=0; i= (natom*3-nnc); i--) { fprintf(outfile,"%12.6lf\n",irint[i]); } */ k_convert = _hartree2J/(_bohr2m * _bohr2m * _amu2kg); cm_convert = 1.0/(2.0 * _pi * _c * 100.0); /* fprintf(outfile,"\nDipole Strength (10^-40 esu^2 cm^2):\n"); for(i=natom*3-1; i >= (natom*3-nnc); i--) { freq = cm_convert*sqrt(k_convert*km[i]); ds = (_h*_D2esucm*_D2esucm*irint[i]*1e40)/(_amu2kg*2*_c*4*_pi*_pi*100*freq*1e-20); fprintf(outfile,"%10.4lf\n",ds); } */ /* conversion factor from D^2/(A^2 amu) to C^2/kg */ dipder_conv = _dipmom_debye2si*_dipmom_debye2si/(1e-20 * _amu2kg); for(i=0; i < natom*3; i++) irint[i] *= dipder_conv; /* IR integrated absorption coefficient prefactor */ ir_prefactor = _na * _pi/(3.0 * _c * _c * 4.0 * _pi * _e0 * 1000.0); /* fprintf(outfile, "\n\tIR conversion = %20.10f\n", dipder_conv * ir_prefactor); */ /* compute the frequencies and spit them out in a nice table */ fprintf(outfile, "\n\t Harmonic Frequency Infrared Intensity\n"); fprintf(outfile, "\t (cm-1) (km/mol) \n"); fprintf(outfile, "\t-----------------------------------------------\n"); k_convert = _hartree2J/(_bohr2m * _bohr2m * _amu2kg); cm_convert = 1.0/(2.0 * _pi * _c * 100.0); for(i=natom*3-1; i >= 0; i--) { if(km[i] < 0.0) fprintf(outfile, "\t %3d %17.3fi %10.4f\n", (natom*3-i), cm_convert * sqrt(-k_convert * km[i]), irint[i]*ir_prefactor); else fprintf(outfile, "\t %3d %17.3f %10.4f\n", (natom*3-i), cm_convert * sqrt(k_convert * km[i]), irint[i]*ir_prefactor); } fprintf(outfile, "\t-----------------------------------------------\n"); fprintf(outfile, "\nNormal Modes (mass-weighted)\n"); for(i=0; i < 3*natom; i++) { if (fabs(cm_convert * sqrt(k_convert * fabs(km[i]))) < 5.0) continue; if(km[i] < 0.0) fprintf(outfile, "\n Frequency: %6.2fi\n", cm_convert * sqrt(-k_convert * km[i])); else fprintf(outfile, "\n Frequency: %6.2f\n", cm_convert * sqrt(k_convert * km[i])); fprintf(outfile, "\t X Y Z \t\n"); for(j=0; j < natom; j++) { fprintf(outfile, " %s \t", asymbol[3*j]); for(k=0; k < 3; k++) { fprintf(outfile, "%8.3f", lx[3*j+k][i]); } fprintf(outfile, "\n"); } } free(work); free(irint); free_block(M); free(km); } }} // namespace psi::cphf psi3/src/bin/cphf/zval_to_symbol.cc0000644000101500007650000001015710757640026016045 0ustar crawdad/*! \file \ingroup CPHF \brief Enter brief description of file here */ /*** ZVAL_TO_SYMBOL() return atom symbol ***/ #include #include #include namespace psi { namespace cphf { void zval_to_symbol(double zval, char *sym) { int z; z = (int) zval; if (z==0) strcpy(sym,"G"); else if (z==1) strcpy(sym,"H"); else if (z==2) strcpy(sym,"HE"); else if (z==3) strcpy(sym,"LI"); else if (z==4) strcpy(sym,"BE"); else if (z==5) strcpy(sym,"B"); else if (z==6) strcpy(sym,"C"); else if (z==7) strcpy(sym,"N"); else if (z==8) strcpy(sym,"O"); else if (z==9) strcpy(sym,"F"); else if (z==10) strcpy(sym,"NE"); else if (z==11) strcpy(sym,"NA"); else if (z==12) strcpy(sym,"MG"); else if (z==13) strcpy(sym,"AL"); else if (z==14) strcpy(sym,"SI"); else if (z==15) strcpy(sym,"P"); else if (z==16) strcpy(sym,"S"); else if (z==17) strcpy(sym,"CL"); else if (z==18) strcpy(sym,"AR"); else if (z==19) strcpy(sym,"K"); else if (z==20) strcpy(sym,"CA"); else if (z==21) strcpy(sym,"SC"); else if (z==22) strcpy(sym,"TI"); else if (z==23) strcpy(sym,"V"); else if (z==24) strcpy(sym,"CR"); else if (z==25) strcpy(sym,"MN"); else if (z==26) strcpy(sym,"FE"); else if (z==27) strcpy(sym,"CO"); else if (z==28) strcpy(sym,"NI"); else if (z==29) strcpy(sym,"CU"); else if (z==30) strcpy(sym,"ZN"); else if (z==31) strcpy(sym,"GA"); else if (z==32) strcpy(sym,"GE"); else if (z==33) strcpy(sym,"AS"); else if (z==34) strcpy(sym,"SE"); else if (z==35) strcpy(sym,"BR"); else if (z==36) strcpy(sym,"KR"); else if (z==37) strcpy(sym,"RB"); else if (z==38) strcpy(sym,"SR"); else if (z==39) strcpy(sym,"Y"); else if (z==40) strcpy(sym,"ZR"); else if (z==41) strcpy(sym,"NB"); else if (z==42) strcpy(sym,"MO"); else if (z==43) strcpy(sym,"TC"); else if (z==44) strcpy(sym,"RU"); else if (z==45) strcpy(sym,"RH"); else if (z==46) strcpy(sym,"PD"); else if (z==47) strcpy(sym,"AG"); else if (z==48) strcpy(sym,"CD"); else if (z==49) strcpy(sym,"IN"); else if (z==50) strcpy(sym,"SN"); else if (z==51) strcpy(sym,"SB"); else if (z==52) strcpy(sym,"TE"); else if (z==53) strcpy(sym,"I"); else if (z==54) strcpy(sym,"XE"); else if (z==55) strcpy(sym,"CS"); else if (z==56) strcpy(sym,"BA"); else if (z==57) strcpy(sym,"LA"); else if (z==58) strcpy(sym,"CE"); else if (z==59) strcpy(sym,"PR"); else if (z==60) strcpy(sym,"ND"); else if (z==61) strcpy(sym,"PM"); else if (z==62) strcpy(sym,"SM"); else if (z==63) strcpy(sym,"EU"); else if (z==64) strcpy(sym,"GD"); else if (z==65) strcpy(sym,"TB"); else if (z==66) strcpy(sym,"DY"); else if (z==67) strcpy(sym,"HO"); else if (z==68) strcpy(sym,"ER"); else if (z==69) strcpy(sym,"TM"); else if (z==70) strcpy(sym,"TY"); else if (z==71) strcpy(sym,"LU"); else if (z==72) strcpy(sym,"HF"); else if (z==73) strcpy(sym,"TA"); else if (z==74) strcpy(sym,"W"); else if (z==75) strcpy(sym,"RE"); else if (z==76) strcpy(sym,"OS"); else if (z==77) strcpy(sym,"IR"); else if (z==78) strcpy(sym,"PT"); else if (z==79) strcpy(sym,"AU"); else if (z==80) strcpy(sym,"HG"); else if (z==81) strcpy(sym,"TL"); else if (z==82) strcpy(sym,"PB"); else if (z==83) strcpy(sym,"BI"); else if (z==84) strcpy(sym,"PO"); else if (z==85) strcpy(sym,"AT"); else if (z==86) strcpy(sym,"RN"); else if (z==87) strcpy(sym,"FR"); else if (z==88) strcpy(sym,"RA"); else if (z==89) strcpy(sym,"AC"); else if (z==90) strcpy(sym,"TH"); else if (z==91) strcpy(sym,"PA"); else if (z==92) strcpy(sym,"U"); else if (z==93) strcpy(sym,"NP"); else if (z==94) strcpy(sym,"PU"); else if (z==95) strcpy(sym,"AM"); else if (z==96) strcpy(sym,"CM"); else if (z==97) strcpy(sym,"BK"); else if (z==98) strcpy(sym,"CF"); else if (z==99) strcpy(sym,"ES"); else if (z==100) strcpy(sym,"FM"); else if (z==101) strcpy(sym,"MD"); else if (z==102) strcpy(sym,"NO"); else if (z==103) strcpy(sym,"UNQ"); else if (z==104) strcpy(sym,"UNP"); else if (z==105) strcpy(sym,"UNH"); else if (z==106) strcpy(sym,"UNS"); return ; } }} // namespace psi::cphf psi3/src/bin/cscf/0000755000101500007650000000000011146111666012461 5ustar crawdadpsi3/src/bin/cscf/check_rot.cc0000644000101500007650000000762510757640026014747 0ustar crawdad/*! \defgroup CSCF cscf: Hartree-Fock Self-Consistent-Field Module */ /*! ** \file ** \ingroup CSCF ** \brief Check MO rotation to make sure C cols haven't swapped ** ** Check the MO rotation performed in rotate_vector() to make sure that ** columns of the C matrix haven't swapped. If so, swap them (and their ** eigenvalues) back to the correct ordering. ** ** David Sherrill and Daniel Crawford, July 1995 ** */ #include #include #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void swap_vectors(double **c, int nn, int j, int i); /*! ** check_rot(): Check if a rotation has swapped columns of C ** ** \param nn = number of SO's in an irrep ** \param num_mo = number of MO's in an irrep ** \param cold = old C matrix ** \param cnew = new C matrix ** \param smat_pac = S matrix, packed lower triangular ** \param fock_evals = Fock matrix eigenvalues ** \param irrep = which irrep we're working on (starts from zero) ** ** Returns: none ** \ingroup CSCF */ void check_rot(int nn, int num_mo, double **cold, double **cnew, double *smat_pac, double *fock_evals, int irrep) { int i,j,jmaxcoeff,swapped; double maxcoeff=0.0, tval; double **smat; double **tmp1, **tmp2; static int printed=0; int count=0; smat = init_matrix(nn,nn); tmp1 = init_matrix(nn,nn); tmp2 = init_matrix(nn,nn); tri_to_sq(smat_pac,smat,nn); do { swapped = 0; /* mxmb(cnew,nn,1,smat,1,nn,tmp1,1,nn,nn,nn,nn); mxmb(tmp1,1,nn,cold,1,nn,tmp2,1,nn,nn,nn,nn);*/ mmult(cnew,1,smat,0,tmp1,0,num_mo,nn,nn,0); mmult(tmp1,0,cold,0,tmp2,0,num_mo,nn,num_mo,0); /* fprintf(outfile, "C_New Matrix:\n"); print_mat(cnew,nn,nn,outfile); fprintf(outfile, "C_New * S * C_old:\n"); print_mat(tmp2,nn,nn,outfile); */ for(i=0; i < num_mo; i++) { maxcoeff = 0.0; for(j=0; j < num_mo; j++) { if(fabs(tmp2[j][i]) > maxcoeff) { maxcoeff = fabs(tmp2[j][i]); jmaxcoeff = j; } } if (maxcoeff < 0.75) { fprintf(outfile, "\n Warning! Diagonality check C'SC gives "); fprintf(outfile, "a maximum element of\n %lf for (%d,%d)\n", maxcoeff, jmaxcoeff+1, i+1); fprintf(outfile, " Won't perform MO swapping for this column\n"); } else if (jmaxcoeff != i) { swap_vectors(cnew,nn,jmaxcoeff,i); tval = fock_evals[jmaxcoeff]; fock_evals[jmaxcoeff] = fock_evals[i]; fock_evals[i] = tval; swapped = 1; count++; if (!printed) { fprintf(outfile, "\n Warning! MO rotation swapped columns of C matrix\n"); printed = 1; } fprintf(outfile, " Swapping back columns %d and %d for irrep %d\n", jmaxcoeff+1,i+1,irrep+1); break; } } } while(swapped && count < 50); if (count == 50) { fprintf(outfile, "(check_rot): This is bad. Tried 50 swaps for "); fprintf(outfile, "irrep %d!\n", irrep+1); fprintf(outfile, " You may want to set check_rot = false\n"); } free_matrix(smat,nn); free_matrix(tmp1,nn); free_matrix(tmp2,nn); /* fprintf(outfile, "C_New Matrix(after phase change):\n"); print_mat(cnew,nn,nn,outfile); */ } /*! ** swap_vectors(): Swap two vectors of an SCF coefficient matrix ** ** \param C = SCF coefficient matrix ** \param nn = number of rows in C matrix (number of SO's in that irrep) ** \param j = one of the columns to swap ** \param i = the other column to swap ** ** Returns: none ** \ingroup CSCF */ void swap_vectors(double **c, int nn, int j, int i) { int k; double tmp; for(k=0; k < nn; k++) { tmp = c[k][j]; c[k][j] = c[k][i]; c[k][i] = tmp; } } }} // namespace psi::cscf psi3/src/bin/cscf/cleanup.cc0000644000101500007650000012520711116052413014415 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.32 2007/04/05 15:45:25 crawdad * Fixed a few memory leaks identified by valgrind. -TDC * /* Revision 1.31 2005/11/10 16:37:50 evaleev /* Added CHECK_MO_ORTHONORMALITY input keyword. Useful for debugging. /* /* Revision 1.30 2004/08/12 19:13:32 crawdad /* Corrected computation of for UHF references. The equations were /* coded correctly, but variable types screwed up results for doublets, /* quartets, etc. -TDC /* /* Revision 1.29 2004/05/03 04:32:40 crawdad /* Major mods based on merge with stable psi-3-2-1 release. Note that this /* version has not been fully tested and some scf-optn test cases do not run /* correctly beccause of changes in mid-March 2004 to optking. /* -TDC /* /* Revision 1.28.4.1 2004/04/01 22:04:49 evaleev /* A critical bug: lagrangian was not written out to chkpt file correctly /* thanks to missing symblk offsets in computing MO indices. ROHF HF gradients /* now work correctly. /* /* Revision 1.28 2003/08/17 22:57:37 crawdad /* Removing libfile30 from the repository. I believe that all code reference /* to the library have also been properly removed. The current version /* passes all test cases on my systems. /* -TDC /* /* Revision 1.27 2003/08/09 17:39:56 crawdad /* I added the ability to determine frozen core orbitals for UHF references to /* cleanup.c. I also commented out ip_cwk_clear and ip_cwk_add calls in /* cleanup.c, guess.c, scf_input.c and scf_iter_2.c. These calls were (1) poor /* design and (2) interfering with default ip_tree behavior needed to simplify /* the format of input.dat. /* -TDC /* /* Revision 1.26 2003/05/19 22:26:26 crawdad /* Added phase corrections for UHF orbitals. /* -TDC /* /* Revision 1.25 2003/05/06 20:47:22 evaleev /* CSCF can now find frzvpi from the eigenvalues. /* /* Revision 1.24 2003/05/02 15:39:23 evaleev /* Added ability to figure out the number of frozen doubly occupied orbitals in each irrep. /* /* Revision 1.23 2003/04/14 17:25:47 sherrill /* Change "total energy" to "SCF total energy" to make more explicit for /* new users. Yeah, this will probably break some test case perl scripts /* temporarily :) /* /* Revision 1.22 2002/12/22 17:01:14 evaleev /* Updated cints, cscf, psi3 (probably not complete) and transqt to use psi_start/psi_stop. /* /* Revision 1.21 2002/12/06 20:39:08 evaleev /* Write total SCF energy as reference energy as well. /* /* Revision 1.20 2002/12/06 15:50:32 crawdad /* Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as /* necessary. This is new for the PSI3 execution driver. /* -TDC /* /* Revision 1.19 2002/11/24 22:52:17 crawdad /* Merging the gbye-file30 branch into the main trunk. /* -TDC /* /* Revision 1.18.2.4 2002/11/23 21:54:45 crawdad /* Removal of mxcoef stuff for chkpt runs. /* -TDC /* /* Revision 1.18.2.3 2002/11/23 19:35:14 sherrill /* re-institute writing scf vector to file30 if !USE_LIBCHKPT /* /* Revision 1.18.2.2 2002/10/01 22:16:28 sherrill /* Fix a few minor libchkpt/libfile30 things (one define condition was /* backwards), turn off libfile30 unless we're really using it, and /* clean up a stupid mistake for the orthog_only option ---CDS /* /* Revision 1.18.2.1 2002/07/29 23:08:30 evaleev /* A major set of changes designed to convert all psi modules to use libchkpt. /* /* Revision 1.18 2002/05/30 20:16:49 crawdad /* Accidentally left dmalloc calls in place. Fixed. /* -TDC /* /* Revision 1.17 2002/05/30 12:57:08 crawdad /* Buf fix. psio_done() was called before chkpt_close(). /* -TDC /* /* Revision 1.16 2002/05/07 22:40:56 sherrill /* Fix missing s=&scf_info[k] in UHF case for evals, fix missing bracket /* in RHF case. /* /* Revision 1.15 2002/04/28 04:34:10 crawdad /* Finshed initial additions for mirroring old file30 with new PSIF_CHKPT. I /* believe that everything cscf wrote to file30 is also written to PSIF_CHKPT. /* Now ready to start converting other codes to libchkpt. /* -TDC /* /* Revision 1.14 2002/04/27 22:28:48 crawdad /* More changes to cleanup in preparation for libchkpt conversion. /* -TDC /* /* Revision 1.13 2002/04/27 18:33:20 crawdad /* Working on changes for new libchkpt code. Current version does no reading /* from chkpt yet. /* -TDC /* /* Revision 1.12 2002/03/25 03:16:51 sherrill /* Changed name of mxcoef keyword to Mxcoef /* /* Revision 1.11 2002/03/25 03:05:45 crawdad /* More additions for new chkpoint file. /* -TDC /* /* Revision 1.10 2002/03/25 02:17:36 janssen /* Get rid of tmpl. Use new naming scheme for libipv1 includes. /* /* Revision 1.9 2002/03/25 01:07:59 crawdad /* Some changes to cleanup et al. to write SCF-generated data to both old /* file30 and new chkpt. /* -TDC /* /* Revision 1.8 2002/03/25 00:02:00 sherrill /* Add libpsio /* /* Revision 1.7 2002/01/04 18:03:24 crawdad /* Minor change to set phase_check flag to true when starting from a core /* guess. This is to allow correlated calculations that might have stopped /* due to slow convergence to restart. /* -TDC /* /* Revision 1.6 2001/06/29 20:39:27 evaleev /* Modified cscf to use libpsio to store supermatrix files. /* /* Revision 1.5 2001/05/31 01:12:25 sherrill /* fix up printing orbital eigenvalues, now does TCSCF too! /* /* Revision 1.4 2001/04/11 19:31:46 sherrill /* I removed printing all MO's by default, since this gets pretty big /* and useless for many of the molecules of interest today. I added /* a nice subroutine to print out orbital eigenvalues. It seems /* to work for RHF/ROHF/UHF but is probably broken for TCSCF, which /* I'll try to check later. /* /* Revision 1.3 2000/10/13 19:51:19 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new /* "Mo-projection-capable" INPUT. /* /* Revision 1.2 2000/08/23 17:15:15 sbrown /* Added portions to separate out the correlation and exchange energy at the /* end the calculation as well as do the consistency check on the integrated /* density. /* /* Revision 1.1.1.1 2000/02/04 22:52:28 evaleev /* Started PSI 3 repository /* /* Revision 1.7 1999/11/11 21:04:36 evaleev /* A very minor fix. /* * Revision 1.6 1999/11/02 23:55:54 localpsi * Shawn Brown - (11/2/99) Modified to the code in a few major ways. * * 1. Added the capability to do UHF. All of the features available with the * other refrences have been added for UHF. * * 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a * map) This entailed adding a pointer array right after the header in the SCF * section of file30 that pointed to all of the data for the SCF caclulation. * Functions were added to libfile30 to account for this and they are * incorporated in this code. * * 3. Updated and fixed all of the problems associated with my previous * guessing code. The code no longer uses OPENTYPE to specify the type of * occupation. The keword REFERENCE and MULTP can now be used to indicate any * type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet * ROHF calculation) This code was moved to occ_fun.c. The code can also * guess at any multplicity in a highspin case, provided enough electrons. * /* Revision 1.5 1999/10/22 19:47:17 evaleev /* A direct SCF-enabled version (set DIRECT_SCF=TRUE in input.dat). /* /* Revision 1.4 1999/10/11 17:03:17 evaleev /* Modified the location of nmo in mconst array in file 30. /* /* Revision 1.3 1999/08/19 14:44:16 evaleev /* Tiny fix in cleanup(). /* /* Revision 1.2 1999/08/17 19:04:13 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add /* some. The progrem prints out a warning if near-linear dependencies are /* found. TRANSQT and a whole bunch of other codes has to be fixed to /* work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:25 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed */ #define EXTERN #include "includes.h" #include "common.h" #include #include #include namespace psi { namespace cscf { /* TDC(6/20/96) - Prototype for phase() */ int phase(void); double ssquare(void); static int* compute_frzcpi(int); static int* compute_frzvpi(int); void cleanup() { int i,j,k,ij,ijk,m,nn,num_mo; int mpoint,mconst,mcalcs,loccal; int nx,ntri; int newvec; int nat,iend,ierr,ci_calc,irot,nbfao; int numso; int n_there[20],nc[10],no[10]; int mo_print; int errcod; const char *ci_type="SCF"; const char *der_type="FIRST"; double occj,occk; double ekin,epot,enpot,ovlp,virial,num_elec,s2; double *scr_arr, *lagrangian, **lagr, **ccvecs; double **scr1, **scr2; double *temp; struct symm *s; int *pointers; /* Array to hold pointers to the scf info */ char **labs; void print_mo_eigvals(void); psio_address chkptr; int tmp_iopen; int row, col; int nfzc, nfzv, *frzcpi, *frzvpi; /* ip_cwk_clear(); ip_cwk_add(":DEFAULT"); ip_cwk_add(":SCF"); */ ci_calc=irot=0; errcod = ip_string("WFN",(char **) &ci_type,0); errcod = ip_string("DERTYPE",(char **) &der_type,0); if(strcmp(ci_type,"SCF")) ci_calc=1; if(ci_calc && iopen) irot=1; if(strcmp(der_type,"FIRST") && strcmp(der_type,"NONE")) irot=0; errcod = ip_boolean("ROTATE",&irot,0); mo_print = 0; errcod = ip_boolean("PRINT_MOS",&mo_print,0); /* TDC(6/19/96) - If we're not rotating, check the phases on the MOs, and correct them, if possible. */ if(!irot) { if(phase_check) phase_check = phase(); } /* first print mo's, then rotate if this is a ci */ if (mo_print) { if(uhf) { print_mos("Alpha",spin_info[0].scf_spin); print_mos("Beta",spin_info[1].scf_spin); } else { print_mos("Alpha",scf_info); if (print&4) print_mos_aobasis("Alpha",scf_info); } } if(irot) rotate_vector(); else if(iopen) fprintf(outfile,"\n%8cWFN is %s so no rotation\n",' ',ci_type); /* TDC(6/20/96) - If we've rotated the orbitals, check the phases on the MOs, and correct them, if possible. */ if(irot) { if(phase_check) phase_check = phase(); } /* TDC(1/4/02) If we've started from a core guess, allow a restart of correlated calcs */ if(inflg==2) phase_check = 1; chkpt_wt_nsymhf(n_so_typs); chkpt_wt_nmo(nmo); tmp_iopen = ioff[n_open]; if(twocon) tmp_iopen = -tmp_iopen; chkpt_wt_iopen(tmp_iopen); nx = nmo*(nmo+1)/2; /* STB(10/28/99) - Flag to tell what reference is being used*/ chkpt_wt_ref(refnum); /* TDC(6/19/96) - Set the phase_check flag here */ chkpt_wt_phase_check(phase_check); chkpt_wt_etot(etot); chkpt_wt_escf(etot); chkpt_wt_eref(etot); /* These new arrays for PSIF_CHKPT contain data for ALL irreps */ for(i=0; i < num_ir; i++) { s=&scf_info[i]; n_there[i]=s->num_mo; nc[i]=s->nclosed; no[i]=s->nopen; } chkpt_wt_orbspi(n_there); chkpt_wt_clsdpi(nc); chkpt_wt_openpi(no); for(i=0; i < num_ir; i++) n_there[i] = nc[i] = no[i] = 0; /* Figure out frozen core orbitals in each irrep and write them out*/ nfzc = chkpt_rd_nfzc(); nfzv = chkpt_rd_nfzv(); frzcpi = compute_frzcpi(nfzc); frzvpi = compute_frzvpi(nfzv); chkpt_wt_frzcpi(frzcpi); chkpt_wt_frzvpi(frzvpi); /* reorder MO coefficients and eigenvectors */ if (reorder == std::string("AFTER")) { if (uhf) { fprintf(outfile,"\n mo's will be reordered\n"); for(int m=0; m<2; ++m) { int offset = 0; for (i=0; i < num_ir; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; double* scr_arr = init_array(num_mo); double** scr_mat = block_matrix(nn,num_mo); double* occ_copy = init_array(num_mo); double** cmat = spin_info[m].scf_spin[i].cmat; double* evals = spin_info[m].scf_spin[i].fock_evals; double* occ = spin_info[m].scf_spin[i].occ_num; for (j=0; j < num_mo; j++) { const int jnew = moorder[j+offset] - offset; for (k=0; k < nn ; k++) { scr_mat[k][jnew]=cmat[k][j]; } scr_arr[jnew] = evals[j]; occ_copy[jnew] = occ[j]; } for (j=0; j < nn ; j++) { for (k=0; k < num_mo ; k++) cmat[j][k] = scr_mat[j][k]; evals[j] = scr_arr[j]; occ[j] = occ_copy[j]; } fprintf(outfile,"\n reordered %s mo's for irrep %s\n", (m == 0) ? "Alpha" : "Beta", s->irrep_label); eigout(cmat, evals, occ, nn, num_mo, outfile); offset += num_mo; free_block(scr_mat); free(scr_arr); free(occ); } } } } else { fprintf(outfile,"\n mo's will be reordered\n"); int offset = 0; for (i=0; i < num_ir; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; double* scr_arr = init_array(num_mo); double** scr_mat = block_matrix(nn,num_mo); double* occ_copy = init_array(num_mo); for (j=0; j < num_mo; j++) { const int jnew = moorder[j+offset] - offset; for (k=0; k < nn ; k++) { scr_mat[k][jnew]=s->cmat[k][j]; } scr_arr[jnew] = s->fock_evals[j]; occ_copy[jnew] = s->occ_num[j]; } for (j=0; j < nn ; j++) { for (k=0; k < num_mo ; k++) s->cmat[j][k] = scr_mat[j][k]; s->fock_evals[j] = scr_arr[j]; s->occ_num[j] = occ_copy[j]; } fprintf(outfile,"\n reordered mo's for irrep %s\n", s->irrep_label); eigout(s->cmat, s->fock_evals, s->occ_num, nn, num_mo, outfile); offset += num_mo; free_block(scr_mat); free(scr_arr); free(occ_copy); } } } // non-UHF } // end of if REORDER /* Write eigenvectors and eigenvalues to new PSIF_CHKPT */ scr_arr = init_array(nmo); if(uhf) { for(m=0; m<2; m++) { for(k=0,i=0; k < num_ir; k++) { s=&scf_info[k]; for(j=0; j < s->num_mo; j++,i++) scr_arr[i] = spin_info[m].scf_spin[k].fock_evals[j]; } if(m==0) chkpt_wt_alpha_evals(scr_arr); else chkpt_wt_beta_evals(scr_arr); } } else { for(k=0,i=0; k < num_ir; k++) { s=&scf_info[k]; for(j=0; j < s->num_mo; j++,i++) { scr_arr[i] = s->fock_evals[j]; } } chkpt_wt_evals(scr_arr); } free(scr_arr); /* This will write the full SCF matrices (including zeroes) */ scr1 = block_matrix(nbfso,nmo); if(uhf) { for(m=0; m < 2; m++) { zero_mat(scr1, nbfso, nmo); for(k=0,row=0,col=0; k < num_ir; k++) { s=&scf_info[k]; for(i=0; i < s->num_so; i++) { for(j=0; j < s->num_mo; j++) { scr1[i+row][j+col] = spin_info[m].scf_spin[k].cmat[i][j]; } } row += s->num_so; col += s->num_mo; } if(m==0) chkpt_wt_alpha_scf(scr1); else chkpt_wt_beta_scf(scr1); } } else { for(k=0,row=0,col=0; k < num_ir; k++) { double** s_sq; double** tmp; s=&scf_info[k]; if (s->num_mo) { /* Test normalization of MOs */ if (check_mo_orthonormality) { fprintf(outfile," -Testing orthonormality of MOs in symmetry block %d\n",k); fprintf(outfile," -overlap matrix:\n"); print_array(s->smat,s->num_so,outfile); fprintf(outfile," -MOs:\n"); print_mat(s->cmat,s->num_so,s->num_mo,outfile); s_sq = block_matrix(s->num_so,s->num_so); tri_to_sq(s->smat,s_sq,s->num_so); tmp = block_matrix(s->num_so,s->num_so); mmult(s_sq,0,s->cmat,0,tmp,0,s->num_so,s->num_so,s->num_so,0); mmult(s->cmat,1,tmp,0,s_sq,0,s->num_mo,s->num_so,s->num_mo,0); fprintf(outfile," -Ct.S.C:\n"); print_mat(s_sq,s->num_mo,s->num_mo,outfile); free_block(s_sq); free_block(tmp); } for(i=0; i < s->num_so; i++) { for(j=0; j < s->num_mo; j++) { scr1[i+row][j+col] = s->cmat[i][j]; } } row += s->num_so; col += s->num_mo; } } chkpt_wt_scf(scr1); } free_block(scr1); /* write open-shell coupling coefficients */ if(iopen){ ccvecs = block_matrix(2,ioff[n_open]); for(i=0; i < ioff[n_open]; i++) { ccvecs[0][i] = alpha[i]; ccvecs[1][i] = beta[i]; } chkpt_wt_ccvecs(ccvecs); free_block(ccvecs); } /* calculate mo lagrangian and write to file30 */ /* also write mo fock matrices to file49 */ lagrangian = (double *) init_array(nx); lagr = block_matrix(nmo,nmo); if(uhf){ for(m=0;m<2;m++){ for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if(nn=s->num_so) { num_mo = s->num_mo; //bzero(spin_info[m].scf_spin[i].fock_pac,sizeof(double)*ioff[nn]); memset(spin_info[m].scf_spin[i].fock_pac, '\0', sizeof(double)*ioff[nn]); for (j=0; j < num_mo ; j++) if (spin_info[m].scf_spin[i].occ_num[j] == 1.0) spin_info[m].scf_spin[i].fock_pac[ioff[j]+j] = 1.0*spin_info[m].scf_spin[i].fock_evals[j]; } } for(k=ijk=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { num_mo = scf_info[k].num_mo; for(i=0; i < num_mo ; i++) for(j=0; j <= i ; j++) { lagrangian[ioff[i+ijk]+j+ijk] = spin_info[m].scf_spin[k].fock_pac[ioff[i]+j]; lagr[i][j] = lagr[j][i] = spin_info[m].scf_spin[k].fock_pac[ioff[i]+j]; } ijk += num_mo; } } if(m==0) chkpt_wt_alpha_lagr(lagr); else chkpt_wt_beta_lagr(lagr); } } else{ if (iopen) { scr1 = (double **) init_matrix(nsfmax,nsfmax); scr2 = (double **) init_matrix(nsfmax,nsfmax); for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if(nn=s->num_so) { num_mo = s->num_mo; tri_to_sq(s->fock_pac,scr2,nn); /* mxmb(s->cmat,nn,1,scr2,1,nn,scr1,1,nn,nn,nn,nn); mxmb(scr1,1,nn,s->cmat,1,nn,scr2,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,scr2,0,scr1,0,num_mo,nn,nn,0); mmult(scr1,0,s->cmat,0,scr2,0,num_mo,nn,num_mo,0); sq_to_tri(scr2,s->gmat,num_mo); tri_to_sq(s->fock_open,scr2,nn); /* mxmb(s->cmat,nn,1,scr2,1,nn,scr1,1,nn,nn,nn,nn); mxmb(scr1,1,nn,s->cmat,1,nn,scr2,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,scr2,0,scr1,0,num_mo,nn,nn,0); mmult(scr1,0,s->cmat,0,scr2,0,num_mo,nn,num_mo,0); sq_to_tri(scr2,s->gmato,num_mo); //bzero(s->fock_pac,sizeof(double)*ioff[nn]); memset(s->fock_pac,'\0',sizeof(double)*ioff[nn]); for (j=ij=0; j < num_mo ; j++) { for (k=0; k <= j ; k++,ij++) { occj = s->occ_num[j]; occk = s->occ_num[k]; if(!twocon) { if (occj == 2.0 && occk == 2.0 || occj == 2.0 && occk == 1.0 || occj == 1.0 && occk == 2.0) s->fock_pac[ij] = 2.0*s->gmat[ij]; else if (occj == 1.0 && occk == 1.0) s->fock_pac[ij] = s->gmato[ij]; else s->fock_pac[ij] = 0.0; } else { if (occj == 2.0 && occk || occk == 2.0 && occj) s->fock_pac[ij] = 2.0*s->gmat[ij]; else if (occj && occk) s->fock_pac[ij] = occj*s->gmato[ij]; else s->fock_pac[ij] = 0.0; } } } } } free_matrix(scr1,nsfmax); free_matrix(scr2,nsfmax); } else { for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if(nn=s->num_so) { num_mo = s->num_mo; //bzero(s->fock_pac,sizeof(double)*ioff[nn]); memset(s->fock_pac,'\0',sizeof(double)*ioff[nn]); for (j=0; j < num_mo ; j++) if (s->occ_num[j] == 2.0) s->fock_pac[ioff[j]+j] = 2.0*s->fock_evals[j]; } } } for(k=ijk=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { num_mo = scf_info[k].num_mo; for(i=0; i < num_mo ; i++) for(j=0; j <= i ; j++) { lagrangian[ioff[i+ijk]+j+ijk] = scf_info[k].fock_pac[ioff[i]+j]; lagr[i+ijk][j+ijk] = lagr[j+ijk][i+ijk] = scf_info[k].fock_pac[ioff[i]+j]; } ijk += num_mo; } } chkpt_wt_lagr(lagr); } free(lagrangian); free_block(lagr); if(ci_calc && iopen && irot) { fprintf(outfile, "\n ci_typ is %s so mo vector will be rotated\n",ci_type); if (mo_print) print_mos("Alpha",scf_info); } num_elec = ekin = enpot = ovlp = 0.0; for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; for (j=0; j < ioff[nn] ; j++) { ekin += s->pmat[j]*s->tmat[j]; enpot += s->pmat[j]*s->hmat[j]; ovlp += s->pmat[j]*s->smat[j]; } if(uhf) num_elec += spin_info[1].scf_spin[i].noccup +spin_info[0].scf_spin[i].noccup; else for (j=0; j < num_mo ; j++) num_elec += s->occ_num[j]; } } ovlp /= num_elec; epot = etot-ekin; enpot -= ekin; virial = epot/etot; if(uhf) s2 = ssquare(); /* Print just the orbital eigenvalues --- CDS 4/01 */ print_mo_eigvals(); /*if(print & 1){ print_mos_new(); }*/ /* TDC (04/04/07) -- some old cleanups */ free(reference); fprintf(outfile,"\n%6c* SCF total energy = %20.12f\n",' ',etot); if(ksdft){ fprintf(outfile,"%8ccoulomb energy = %20.12f\n" ,' ',coulomb_energy); fprintf(outfile,"%8cexchange energy = %20.12f\n" ,' ' ,exch_energy); fprintf(outfile,"%8ccorrelation energy = %20.12f\n" ,' ',corr_energy); } fprintf(outfile,"%8ckinetic energy = %20.12f\n",' ',ekin); fprintf(outfile,"%8cnuc. attr. energy = %20.12f\n",' ',enpot); fprintf(outfile,"%8celec. rep. energy = %20.12f\n",' ',epot-enpot); fprintf(outfile,"%8cpotential energy = %20.12f\n",' ',epot); fprintf(outfile,"%8cvirial theorem = %20.12f\n",' ',virial); fprintf(outfile,"%8cwavefunction norm = %20.12f\n",' ',ovlp); if(uhf) fprintf(outfile,"%8c = %20.12f\n",' ',s2); /*--- Warn user if some basis functions were dropped ---*/ if (nmo != nbasis) { fprintf(outfile,"\n Near-linear dependencies in the basis were eliminated.\n"); fprintf(outfile, " Proceed at your own risk!\n"); } chkpt_close(); if(!direct_scf){ psio_close(Pmat.unit, 0); psio_close(PKmat.unit, 0); } if(!converged) fprintf(outfile,"\n%8cCalculation has not converged!\n",' '); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); if(!converged) exit(PSI_RETURN_FAILURE); exit(PSI_RETURN_SUCCESS); } void print_mos(const char* spincase, const struct symm* scfinfo) { int i,nn,num_mo; for (i=0; i < num_ir; i++) { const struct symm* s = &scfinfo[i]; if (nn=s->num_so) { num_mo = s->num_mo; fprintf(outfile, "\n %s molecular orbitals for irrep %s\n", spincase, s->irrep_label); eigout(s->cmat, s->fock_evals, s->occ_num, nn, num_mo, outfile); } } } void print_mos_aobasis(const char* spincase, const struct symm* scfinfo) { if (!chkpt_rd_puream()) { print_mos_cartaobasis(spincase,scfinfo); return; } double** usotbf = chkpt_rd_usotbf(); const int num_bf = chkpt_rd_nso(); int so_offset = 0; for (int i=0; i < num_ir; i++) { const struct symm* s = &scfinfo[i]; const int num_so = s->num_so; if (num_so) { double** usotbf_blk = block_matrix(num_so,num_bf); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(static_cast(usotbf[so_offset]),static_cast(usotbf_blk[0]),num_so*num_bf*sizeof(double)); */ memcpy(static_cast(usotbf_blk[0]),static_cast(usotbf[so_offset]),num_so*num_bf*sizeof(double)); const int num_mo = s->num_mo; double** cmat_bf = block_matrix(num_bf,num_mo); mmult(usotbf_blk,1,s->cmat,0,cmat_bf,0,num_bf,num_so,num_mo,0); fprintf(outfile, "\n %s molecular orbitals (in AO basis) for irrep %s\n", spincase, s->irrep_label); eigout(cmat_bf, s->fock_evals, s->occ_num, num_bf, num_mo, outfile); free_block(usotbf_blk); free_block(cmat_bf); } so_offset += num_so; } free_block(usotbf); } void print_mos_cartaobasis(const char* spincase, const struct symm* scfinfo) { double** usotao = chkpt_rd_usotao(); const int num_ao = chkpt_rd_nao(); int so_offset = 0; for (int i=0; i < num_ir; i++) { const struct symm* s = &scfinfo[i]; const int num_so = s->num_so; if (num_so) { double** usotao_blk = block_matrix(num_so,num_ao); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(static_cast(usotao[so_offset]),static_cast(usotao_blk[0]),num_so*num_ao*sizeof(double)); */ memcpy(static_cast(usotao_blk[0]),static_cast(usotao[so_offset]),num_so*num_ao*sizeof(double)); const int num_mo = s->num_mo; double** cmat_ao = block_matrix(num_ao,num_mo); mmult(usotao_blk,1,s->cmat,0,cmat_ao,0,num_ao,num_so,num_mo,0); fprintf(outfile, "\n %s molecular orbitals (in AO basis) for irrep %s\n", spincase, s->irrep_label); eigout(cmat_ao, s->fock_evals, s->occ_num, num_ao, num_mo, outfile); free_block(usotao_blk); free_block(cmat_ao); } so_offset += num_so; } free_block(usotao); } /* STB(11/2/99) - This function does not at the moment, hence why it is commented out above*/ void print_mos_new() { int i; int ncl_tot = 0; int nop_tot = 0; int num_mo = 0; for(i=0;i < num_ir;i++){ ncl_tot+= scf_info[i].nclosed; nop_tot+= scf_info[i].nopen; num_mo += scf_info[i].num_mo; } sortev(); fprintf(outfile,"\n\n Molecular Orbitals\n"); fprintf(outfile," Symmetry OCC Energy\n"); fprintf(outfile," -------- --- ------------------\n"); for(i = 0; i < ncl_tot; i++) fprintf(outfile," %4s 2 %14.7lf\n",scf_info[symm_tot[i]].irrep_label,ener_tot[i]); for(i = ncl_tot; i < ncl_tot + nop_tot; i++) fprintf(outfile," %4s 1 %14.7lf\n",scf_info[symm_tot[i]].irrep_label,ener_tot[i]); fprintf(outfile," -----------------------------------\n"); for(i = ncl_tot + nop_tot; i < num_mo; i++) fprintf(outfile," %4s 0 %14.7lf\n",scf_info[symm_tot[i]].irrep_label,ener_tot[i]); fprintf(outfile," -------- --- ------------------\n\n"); fflush(outfile); } /* Function to calculate the S^2 value for UHF */ /* See Szabo and Ostlund pg. 107 */ /* for the formula */ double ssquare(void){ int i,j,k,nn,n; int num_mo; double ss=0.0; double na=0; double nb=0; double nm=0; double nh=0.0; double **scr1,**scr2,**S; struct symm *s; scr1 = (double **)init_matrix(nsfmax,nsfmax); scr2 = (double **)init_matrix(nsfmax,nsfmax); /* Calculate the overlap matrix elements */ for(i = 0;i < num_ir;i++){ na += spin_info[0].scf_spin[i].noccup; nb += spin_info[1].scf_spin[i].noccup; s = &scf_info[i]; if(nn = s->num_so){ num_mo = s->num_mo; tri_to_sq(s->smat,scr1,nn); /* Transform the Overlap matrix to the MO basis */ mmult(spin_info[0].scf_spin[i].cmat,1,scr1,0,scr2,0,num_mo,nn,nn,0); mmult(scr2,0,spin_info[1].scf_spin[i].cmat,0,scr1,0,num_mo,nn,num_mo,0); for(j = 0; j < spin_info[0].scf_spin[i].noccup; j++){ for(k = 0;k < spin_info[1].scf_spin[i].noccup; k++){ ss -= scr1[j][k]*scr1[j][k]; } } } } /* Calculate the occupation part of the equation */ nm = (na-nb)/2.0; nh = (nm*(nm+1))+nb; ss += (nm*(nm+1))+nb; free_matrix(scr1,nsfmax); free_matrix(scr2,nsfmax); return fabs(ss); } /* ** print_mo_eigvals() ** ** Print out the MO eigenvalues, both RHF and UHF case ** C. David Sherrill ** April 2001 */ void print_mo_eigvals(void) { int i,irrep,done,lowest_irrep,printctr=0; int num_closed, num_open, num_mo, num_virt, intocc; int *counter; int *sorted_counter, **sorted_irreps, **sorted_index; double **sorted_evals; double tval,lowest,occup; double OCCTOL; OCCTOL = 1.0E-6; num_closed = num_open = num_mo = num_virt = 0; counter = init_int_array(num_ir); fprintf(outfile, "\nOrbital energies (a.u.):\n"); /* TWOCON case */ if (twocon) { /* Ok, just go through and pick out the lowest one each time */ done = 0; printctr = 1; while (!done) { lowest = 1E9; lowest_irrep = 0; done = 1; for (irrep=0; irrep < num_ir; irrep++) { if (counter[irrep] == scf_info[irrep].num_mo) continue; done = 0; if ((tval = scf_info[irrep].fock_evals[counter[irrep]]) < lowest) { lowest = tval; lowest_irrep = irrep; occup = scf_info[lowest_irrep].occ_num[counter[lowest_irrep]]; } } if (!done) { fprintf(outfile, " %3d%3s %9.4lf (%5.3lf) ", ++(counter[lowest_irrep]), scf_info[lowest_irrep].irrep_label, lowest, occup); if ((printctr % 3) == 0) fprintf(outfile, "\n"); printctr++; } } fprintf(outfile, "\n"); } /* RHF/ROHF case */ else if (!uhf) { /* Need to count up how many there are of each type */ /* I'm not sure what the nopen/nhalf distinction is ... */ /* It appears that nopen is used for both high-spin and twocon */ for (irrep=0; irrep < num_ir; irrep++) { num_closed += scf_info[irrep].nclosed; num_open += scf_info[irrep].nopen + scf_info[irrep].nhalf; num_mo += scf_info[irrep].num_mo; } num_virt = num_mo - num_closed - num_open; sorted_counter = init_int_array(3); sorted_index = init_int_matrix(3,num_mo); sorted_irreps = init_int_matrix(3,num_mo); sorted_evals = init_matrix(3,num_mo); /* Ok, just go through and pick out the lowest one each time */ done = 0; while (!done) { lowest = 1E9; lowest_irrep = 0; done = 1; for (irrep=0; irrep < num_ir; irrep++) { if (counter[irrep] == scf_info[irrep].num_mo) continue; done = 0; if ((tval = scf_info[irrep].fock_evals[counter[irrep]]) < lowest) { lowest = tval; lowest_irrep = irrep; /* now figure out where to store it */ occup = scf_info[lowest_irrep].occ_num[counter[lowest_irrep]]; } } if (!done) { if (fabs(occup - 2.0) < OCCTOL) intocc = 2; else if (fabs(occup - 1.0) < OCCTOL) intocc = 1; else if (fabs(occup - 0.0) < OCCTOL) intocc = 0; else { fprintf(outfile, "(print_mo_eigvals): I found an orbital with %f electrons...\n", occup); return; } sorted_irreps[intocc][sorted_counter[intocc]] = lowest_irrep; sorted_evals[intocc][sorted_counter[intocc]] = lowest; sorted_index[intocc][sorted_counter[intocc]] = counter[lowest_irrep]; counter[lowest_irrep]++; sorted_counter[intocc]++; } } fprintf(outfile, "\n Doubly occupied orbitals\n"); for (i=0,printctr=1; i 0) { fprintf(outfile, "\n Singly occupied orbitals\n"); for (i=0,printctr=1; inum_so; i++) { for(j=0; j < s->num_mo; j++) { scr1[i+row][j+col] = spin_info[m].scf_spin[k].cmat[i][j]; } } row += s->num_so; col += s->num_mo; } if(m==0) chkpt_wt_alpha_scf(scr1); else chkpt_wt_beta_scf(scr1); } } else { for(k=0,row=0,col=0; k < num_ir; k++) { s=&scf_info[k]; for(i=0; i < s->num_so; i++) { for(j=0; j < s->num_mo; j++) { scr1[i+row][j+col] = s->cmat[i][j]; } } row += s->num_so; col += s->num_mo; } chkpt_wt_scf(scr1); } free_block(scr1); } /*---------------------------------------------------------------------- Figure out number of frozen DOCC's in each irrep from the eigenvalues ----------------------------------------------------------------------*/ static int* compute_frzcpi(int nfzc) { int mo, nmo, docc, irrep; double last_lowest = -1.0E100; double lowest_eval; int lowest_eval_irrep; double *evals, eval; struct symm *s; int *frzcpi; int *frzcpi_a, *frzcpi_b; if (!uhf) { frzcpi = init_int_array(num_ir); for(docc=0; doccfock_evals; nmo = s->num_mo; for(mo=0; mo last_lowest) { lowest_eval = eval; lowest_eval_irrep = irrep; } } } last_lowest = lowest_eval; frzcpi[lowest_eval_irrep]++; } } else { /* first check alpha evals to generate frzcpi_a */ frzcpi_a = init_int_array(num_ir); last_lowest = -1.0E100; for(docc=0; docc < nfzc; docc++) { lowest_eval = 1.0E100; for(irrep=0; irrep < num_ir; irrep++) { s = &scf_info[irrep]; evals = spin_info[0].scf_spin[irrep].fock_evals; nmo = s->num_mo; for(mo=0; mo < nmo; mo++) { eval = evals[mo]; if(eval < lowest_eval && eval > last_lowest) { lowest_eval = eval; lowest_eval_irrep = irrep; } } } last_lowest = lowest_eval; frzcpi_a[lowest_eval_irrep]++; } /* then check beta evals to generate frzcpi_b */ frzcpi_b = init_int_array(num_ir); last_lowest = -1.0E100; for(docc=0; docc < nfzc; docc++) { lowest_eval = 1.0E100; for(irrep=0; irrep < num_ir; irrep++) { s = &scf_info[irrep]; evals = spin_info[1].scf_spin[irrep].fock_evals; nmo = s->num_mo; for(mo=0; mo < nmo; mo++) { eval = evals[mo]; if(eval < lowest_eval && eval > last_lowest) { lowest_eval = eval; lowest_eval_irrep = irrep; } } } last_lowest = lowest_eval; frzcpi_b[lowest_eval_irrep]++; } /* finally compare the alpha and beta arrays for consistency */ for(irrep=0; irrep < num_ir; irrep++) { if(frzcpi_a[irrep] != frzcpi_b[irrep]) { fprintf(outfile,"Error generating frzcpi array: alpha and beta core do not match.\n"); exit(PSI_RETURN_FAILURE); } } free(frzcpi_b); frzcpi = frzcpi_a; } return frzcpi; } /*---------------------------------------------------------------------- Figure out number of frozen UOCC's in each irrep from the eigenvalues ----------------------------------------------------------------------*/ static int* compute_frzvpi(int nfzv) { int mo, nmo, uocc, irrep; double last_highest = 1.0E100; double highest_eval; int highest_eval_irrep; double *evals, eval; struct symm *s; int *frzvpi; int *frzvpi_a, *frzvpi_b; frzvpi = init_int_array(num_ir); if (!uhf) { for(uocc=0; uoccfock_evals; nmo = s->num_mo; for(mo=0; mo highest_eval && eval < last_highest) { highest_eval = eval; highest_eval_irrep = irrep; } } } last_highest = highest_eval; frzvpi[highest_eval_irrep]++; } } else { /* first check alpha evals to generate frzvpi_a */ frzvpi_a = init_int_array(num_ir); last_highest = 1.0E100; for(uocc=0; uocc < nfzv; uocc++) { highest_eval = 1.0E100; for(irrep=0; irrep < num_ir; irrep++) { s = &scf_info[irrep]; evals = spin_info[0].scf_spin[irrep].fock_evals; nmo = s->num_mo; for(mo=0; mo < nmo; mo++) { eval = evals[mo]; if(eval > highest_eval && eval < last_highest) { highest_eval = eval; highest_eval_irrep = irrep; } } } last_highest = highest_eval; frzvpi_a[highest_eval_irrep]++; } /* then check beta evals to generate frzvpi_b */ frzvpi_b = init_int_array(num_ir); last_highest = 1.0E100; for(uocc=0; uocc < nfzv; uocc++) { highest_eval = 1.0E100; for(irrep=0; irrep < num_ir; irrep++) { s = &scf_info[irrep]; evals = spin_info[1].scf_spin[irrep].fock_evals; nmo = s->num_mo; for(mo=0; mo < nmo; mo++) { eval = evals[mo]; if(eval > highest_eval && eval < last_highest) { highest_eval = eval; highest_eval_irrep = irrep; } } } last_highest = highest_eval; frzvpi_b[highest_eval_irrep]++; } /* finally compare the alpha and beta arrays for consistency */ for(irrep=0; irrep < num_ir; irrep++) { if(frzvpi_a[irrep] != frzvpi_b[irrep]) { fprintf(outfile,"Error generating frzcpi array: alpha and beta core do not match.\n"); exit(PSI_RETURN_FAILURE); } } free(frzvpi_b); frzvpi = frzvpi_a; } return frzvpi; } }} // namespace psi::cscf psi3/src/bin/cscf/cmatsplit.cc0000644000101500007650000000212310754663017014774 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* ------------------------------------ cmatsplit - takes cmat and splits the scf_info struct into two spin struct cmats. Also intend to add a mixing here to force convergence to UHF solutions. -------------------------------------*/ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void cmatsplit(void){ int i,j,k,l; int nn, nmo; double temp; for(i=0;i libciomr/libciomr.h /* /* Revision 1.10 2001/06/29 20:39:27 evaleev /* Modified cscf to use libpsio to store supermatrix files. /* /* Revision 1.9 2001/01/04 14:13:34 sbrown /* Fixed the problem with iconv: The new versions of linux had iconv already /* assigned to something else so I changed all references of it to scf_conv. /* /* Revision 1.8 2000/12/05 19:40:02 sbrown /* Added Unrestricted Kohn-Sham DFT. /* /* Revision 1.7 2000/10/13 19:51:19 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.6 2000/08/23 17:15:16 sbrown /* Added portions to separate out the correlation and exchange energy at the /* end the calculation as well as do the consistency check on the integrated /* density. /* /* Revision 1.5 2000/07/10 18:03:30 sbrown /* Enabling cscf to send over just the occupied SCF eigenvector for DFT /* calculations. Only done for the RHF case. /* /* Revision 1.4 2000/06/22 22:14:58 evaleev /* Modifications for KS DFT. Reading in XC Fock matrices and XC energy in formg_direct need to be uncommented (at present those are not produced by CINTS yet). /* /* Revision 1.3 2000/06/02 13:32:14 kenny /* /* /* Added dynamic integral accuracy cutoffs for direct scf. Added a few global /* variables. Added keyword 'dyn_acc'; true--use dynamic cutoffs. Use of /* 'dconv' and 'delta' to keep track of density convergence somewhat awkward, /* but avoids problems when accuracy is switched and we have to wipe out density /* matrices. Also added error message and exit if direct rohf singlet is /* attempted since it doesn't work. /* --Joe Kenny /* /* Revision 1.2 2000/03/28 15:45:31 evaleev /* Increased the MAX_BASIS and MAXIOFF to 4096 /* * Revision 1.1.1.1 2000/02/04 22:52:29 evaleev * Started PSI 3 repository * /* Revision 1.10 1999/11/11 21:15:13 localpsi /* Altered cscf to do some guess at the multiplicity from SOCC. -STB (11/11/99) /* /* OH and in case your wondering who localpsi is, it is the superuser on my pc /* that contains my psi files. /* /* Revision 1.9 1999/11/04 19:24:28 localpsi /* STB (11/4/99) - Added the orb_mix feature which is equivalent to guess = mix /* in G94 and also fixed restarting so that if you have different wavefuntions, /* everything works. Also if you specify no DOCC and SOCC and restart, if the /* wavefunctions are different, it will guess again. /* /* Revision 1.8 1999/11/02 23:55:55 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.7 1999/11/02 18:10:12 evaleev /* Direct SCF improved /* /* Revision 1.6 1999/10/22 19:47:17 evaleev /* A direct SCF-enabled version (set DIRECT_SCF=TRUE in input.dat). /* /* Revision 1.5 1999/08/17 19:04:13 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.4 1999/08/11 19:24:53 evaleev /* Unhardwired the size of the ioff array (set it to 1024 for now) and increased MAX_BASIS to 1024. /* /* Revision 1.3 1999/08/11 18:39:03 evaleev /* Added some checks on the lowest eigenvalue of the overlap matrix. /* /* Revision 1.2 1999/07/24 18:13:49 crawdad /* Renamed variable "nint" to "cscf_nint" to avoid DEC compiler type conflict. /* -Daniel /* * Revision 1.1.1.1 1999/04/12 16:59:25 evaleev * Added a version of CSCF that can work with CINTS. * -Ed * */ #ifndef _psi_bin_cscf_common_h_ #define _psi_bin_cscf_common_h_ #include #include #include #include #include #include #define MAX_BASIS 4096 #define MAXIOFF 4096 #define SMAT 0 #define TMAT 1 #define VMAT 2 #ifdef EXTERN # undef EXTERN # define EXTERN extern #else # define EXTERN #endif extern "C" { EXTERN FILE *infile, *outfile; EXTERN char *psi_file_prefix; } namespace psi { namespace cscf { EXTERN FILE *JK,*gmat,*diis_out; EXTERN double dampsv; /* scale factor in diis */ EXTERN double repnuc; /* nuclear repulsion */ EXTERN double etot; /* electronic and total energies */ EXTERN double exc; /* KS DFT exchange-correlation energy */ EXTERN double exch_energy; /* KS DFT exchange energy */ EXTERN double corr_energy; /* KS DFT correlation energy */ EXTERN double coulomb_energy; /* Coulomb energy */ EXTERN double den_trace; /* KS DFT trace of the density */ EXTERN double lshift; /* levelshift */ EXTERN int stop_lshift; /* cycle to turn off levelshift */ EXTERN double diiser; /* max off-diag. element in MO fock mat. */ EXTERN double save_ci1,save_ci2; /* ci coefficients for tcscf */ EXTERN double dampd; EXTERN double dampo; EXTERN double eri_cutoff; /* accuracy of integrals to request from cints if doing direct */ EXTERN int direct_scf; /* 1 to request direct formation of the Fock matrices */ EXTERN int diisflg; /* 0 for diis, 1 disables diis */ EXTERN int scf_conv; /* dmat convg. criterion */ EXTERN int iopen; /* 0 for closed, 1 for open, 2 for twocon */ EXTERN int inflg; /* 0 default, 1 use old guess, 2 use core H */ EXTERN int hcore_guess; /* 0 -- obtain using diagonalization of H(core) in orthogonalized SO, 1 -- diagonalize H(core) in nonorthogonal SO (this hack is borrowed from MPQC's OneBodyWavefunction::hcore_guess() */ EXTERN int print; /* print flag */ EXTERN int fock_typ; /* 0 for default, 1 for simpler op sh fock m */ EXTERN int ndiis; /* # of error matrices to keep in diis */ EXTERN int it_diis; /* iteration to begin diis extrapolation */ EXTERN int itmax; /* max iterations */ EXTERN int use_iwl; /* use IWL format */ EXTERN int delete_ints; /* delete ints? */ EXTERN int delete_1e; /* delete one-electron ints? */ EXTERN int delete_2e; /* delete two-electron ints? */ EXTERN int reset_occ; /* reset occupations? */ EXTERN int multp; /* multiplicity of the molecule */ EXTERN int mflag; /* 1 if multp specified */ EXTERN int charge; /* charge of the molecule */ EXTERN int natom; /* number of atoms in the molecule */ EXTERN int nelec; /* number of electrons in the molecule */ EXTERN int nbfso; /* total number of symmetry-adapted basis functions */ EXTERN int nmo; /* total number of molecular orbitals */ EXTERN char *reference; /* RHF,UHF,ROHF,TCSCF,RKS,UKS */ EXTERN char *functional; /* KS DFT functional name, just to print out */ EXTERN reftype refnum; EXTERN int exitflag; /* remove the after debugging */ EXTERN int mo_out; /* 1 if display orbitals in new format at end*/ EXTERN int n_so_typs; /* number of irreps w/ non-zero num of so's */ EXTERN int nbasis; /* # basis functions */ EXTERN int nsfmax; /* max # of so's per irrep */ EXTERN int n_closed; /* total number of closed shells */ EXTERN int n_open; /* # open shells */ EXTERN int a_elec; /* # of alpha electrons */ EXTERN int b_elec; /* # of beta electrons */ EXTERN int num_ir; /* # of symmetry types */ EXTERN int mxcoef2; /* sum of ioff[# so's per irrep] */ EXTERN int readflg; /* 1 if using buffered io */ EXTERN int maxbuf; /* number of integrals per buffer */ EXTERN int num_bufs; /* number of buffers used */ EXTERN int num_ints; /* total integrals written to supermatrix */ EXTERN int iter; /* iteration */ EXTERN int converged; /* 1 if converged */ EXTERN int hsos; /* 1 if high spin open shell */ EXTERN int singlet; /* 1 if open shell singlet */ EXTERN int uhf; /* 1 if uhf 0 if RHF or ROHF */ EXTERN int special; /* 1 if OPENTYPE=special */ EXTERN int twocon; /* 1 if tcscf */ EXTERN int ksdft; /* 1 if Kohn-Sham DFT */ EXTERN int mixing; /* 1 if mixing for UHF, default is 0 */ EXTERN int cscf_nint; /* number of pki ints in present batch */ EXTERN int opshl1,opshl2; EXTERN int opblk1,opblk2; EXTERN int second_root; /* get the second root of the MCSCF */ EXTERN int icheck_rot; /* check orbital rotations? */ EXTERN int check_mo_orthonormality; EXTERN int ediff; EXTERN int itap30,itap34,itapS,itapT,itapV,itap33,itap92,itap93,itapDSCF; EXTERN double alpha1,alpha2,alpha3; /* two configuration things */ EXTERN int ioff[MAXIOFF]; /* matrix offsets */ EXTERN double *alpha, *beta; /* arrays with energy coupling coeffs */ EXTERN double *zvals; /* array for nuclear charges */ EXTERN int *symm_tot; /* array containing the orbital symmetries in order of energy */ EXTERN double *ener_tot; /* array containing the orbital energies in order */ EXTERN std::string reorder; /* valid values are "BEFORE" and "AFTER" */ EXTERN std::vector moorder; /* maps MOs to the new order */ EXTERN int *i10; EXTERN union psi_buffer { int *lbli; double *pki; double **pki_p; } oubuf; EXTERN struct pkbuf { int unit; char *key; psio_address bufpos; } Pmat, PKmat; EXTERN struct symm { double *smat; double *tmat; double *hmat; double *fock_pac; double *fock_open; double *fock_eff; double *fock_evals; double *gmat; double *gmato; double *xcmat; /* Exchange-correlation Fock matrix for KS DFT */ double *pmat; /* Closed-shell density matrix in RHF, alpha or beta in UHF) */ double *pmato; double *pmat2; double *pmato2; double *dpmat; double *dpmato; double **cmat; /* MO eigenvector in terms of SOs */ double **ucmat; /* MO eigenvector in terms of orthogonal SOs (see sahalf) */ /* STB(4/1/98) - Added array for saving evalues of core H */ double *hevals; /* TDC(6/19/96) - Added array for saving original MO vector */ double **cmat_orig; double **sahalf; /* Transformation matrix from SO to orthogonal SO basis (num_so by num_mo) The core Hamiltonian eigenvector is factored in! */ double **pinv; /* The overlap matrix reconstructed using SVD */ double *occ_num; int nclosed; int nopen; int nhalf; /* who in the hell needs to know the degeneracy of irreps in Abelian subgroups??? */ /* int degeneracy; */ int num_so; /* Number of SOs in this symmetry block */ int num_mo; /* Number of MOs in this symmetry block, may be different from num_so */ int os_num; int ideg; char *irrep_label; /* STB -7/2/99 I know this is a little redundant but it is for UHF */ int noccup; } *scf_info; /* STB - 10/11/99 - structure added to handle spin */ EXTERN struct spin { struct symm *scf_spin; const char *spinlabel; } *spin_info; /* TDC(6/19/96) - Added flag for success or failure of phase checking routine */ EXTERN int phase_check; /* EFV(10/24/98) - Added an array that maps an SO number to the symmetry block number */ EXTERN int *so2symblk; /* JPK(6/1/00) added variables for dynamic integral accuracy in direct scf*/ EXTERN int tight_ints, ok_ints, /*keeps track of acccuracy being used*/ dyn_acc, /*1 for dynamic integral accuracy, else 0*/ acc_switch; /*accuracy switch: 1 -> accuracy has been switched*/ EXTERN double delta; /*just another density convergence variable*/ void occ_init(); void init_scf(); void init_scf2(); void init_uhf(); void scf_input(ip_value_t *); void rdone_iwl(); void form_vec(); void shalf(); void guess(); void schmit(int); void schmit_uhf(int); void print_mos(const char* spincase, const struct symm* scfinfo); void print_mos_aobasis(const char* spincase, const struct symm* scfinfo); void print_mos_cartaobasis(const char* spincase, const struct symm* scfinfo); void dmat(); void dmatuhf(); void cmatsplit(); void rdtwo(); void formg_direct(); void scf_iter(); void scf_iter_2(); void uhf_iter(); void cleanup(); void sortev(); void rotate_vector(); void sdot(double** a, double** b, int n, double* value); void errchk(int errcod, const char* token); int ecalc(double incr); void occ_calc(); void diis(double** scr1, double** scr2, double** scr3, double* c1, double* c2, double cim, int newci); void formg_open(); void formg_closed(); void dmat_2(int opblk); void formg_two(int iju, int* optest); void occ_read(); void occ_out(void); void diis_uhf(void); void orb_mix(void); }} // namespace psi::cscf #endif // header guard psi3/src/bin/cscf/cscf.10000644000101500007650000003015511107344622013462 0ustar crawdad.TH cscf 1 "30 May, 1991" "\*(]W" "\*(]D" .SH NAME cscf \- solves the Hartree-Fock equations .SH DESCRIPTION .LP The program .B cscf carries out the iterative procedure to solve the Hartree-Fock equations. .LP This program is restricted to .if n D2h .if t D\s-2\d2h\u\s0 symmetry and its subgroups and the orbital occupations are required to be integers. Thus, certain pure angular momentum states derived from partial occupation of degenerate orbitals cannot be obtained with the present codes. For example, the .if n 2PIu (doublet PI u) .if t \s-2\u2\d\s0\(*P\s-2\du\u\s0 state of linear O-N-O derived from the lowest energy linear .if n (pi u)1 .if t \(*p\s-2\d\zu\u\u1\d\s0 configuration may only be computed as the .if n 2B2u (doublet B2u) .if t \s-2\u2\d\s0B\s-2\d2u\u\s0 or .if n 2B3u (doublet B 3u) .if t \s-2\u2\d\s0B\s-2\d3u\u\s0 component of the .if n 2PIu (doublet PI u) .if t \s-2\u2\d\s0\(*P\s-2\du\u\s0 state, and the resulting spatial wavefunction will not have .if n PI .if t \(*P symmetry. In a certain sense, however, this is desirable, as the energy will be a continuous function of the bending angle. Calculating the energy of bent configurations as .if n 2B2u (doublet B 2u) .if t \s-2\u2\d\s0B\s-2\d2u\u\s0 or .if n 2B3u (doublet B 3u) .if t \s-2\u2\d\s0B\s-2\d3u\u\s0 and doing a pure .if n 2PIu (doublet PI u) .if t \s-2\u2\d\s0\(*P\s-2\du\u\s0 state at linear geometries results in a pronounced discontinuity. .LP For the most part, triplet states resulting from double occupation of a doubly degenerate orbital, such as the .if n 3A2 (triplet A 2) .if t \s-2\u3\d\s0A\s-2\d2\u\s0 state resulting from the .if n (e')2 .if t e\(fm\s-2\u2\d\s0 or .if n (e")2 .if t e\(fm\(fm\s-2\u2\d\s0 configurations in .if n D3h .if t D\s-2\d3h\u\s0 symmetry, or the .if n 3SIGMAg (triplet SIGMA g) .if t \s-2\u3\d\s0\(*S\s-2\dg\u\s0 state of a .if n (pi g)2 .if t \(*p\s-2\d\zg\u\u2\d\s0 or .if n (pi u)2 .if t \(*p\s-2\d\zu\u\u2\d\s0 configuration in .if n Dinfh (D infinity h) .if t D\s-2\d\(ifh\u\s0 symmetry, will have the proper spatial symetry. The singlet states resulting from these same electronic configurations are inherently multiconfiguration and, as such, are not well represented by single configuration wavefunctions. .SH REFERENCES .LP PK-file method: .IP "1." R. C. Raffenetti, Chem. Phys. Lett. 20 (1973) 335. .LP Molecular symmetry and closed shell HF calculations: .IP "1." M.Dupuis, and H.F.King, Int. J. Quant. Chem. 11 (1977) 613. .LP DIIS for closed shell: .IP "1." P. Pulay, Chem. Phys. Lett. 73 (1980) 393. .IP "2." P. Pulay, J. Comp. Chem. 3 (1982) 556. .LP Coupling coefficients (alpha and beta) for open shell: .IP "1." C. C. J. Roothaan, Rev. Mod. Phys. 32 (1960) 179. .LP Damping: .IP "1." D. R. Hartree, "The Calculation of Atomic Structures" (Wiley: New York) 1957. .IP "2." M. C. Zerner and M. Hehenberger, Chem. Phys. Lett. 62 (1979) 550. .LP Level shifting: .IP "1." V. R. Saunders and I. H. Hillier, Int. J. Quant. Chem. 7 (1973) 699. .sL .pN INPUT .pN FILE30 .pN FILE34 .eL "FILES REQUIRED" .sL .pN FILE92 .pN FILE93 .eL "TEMPORARY FILES USED" .sL .pN OUTPUT .pN FILE30 " (MO coefficients)" .eL "FILES UPDATED" .sL .pN CHECK .pN FILE6 .pN FILE31 .pN FILE49 .pN FILE47 .eL "FILES GENERATED" .SH CONVERGING \fBCSCF\fP .LP For difficult open shell cases, it is recommended that an appropriate closed shell calculation be run first (add or remove an extra electron) and that this SCF vector then be used as a guess for the desired open shell wavefunction. For TCSCF cases, it is always wise to run a closed shell (or perhaps the appropriate triplet) SCF first and then use this as a guess for the TCSCF. .LP For open shell systems, a level shift value of 0.5 to 3.0 is recommended. Start with a high value (2.0 - 3.0) for the first SCF calculation and then reduce it (to 0.5 - 1.0) for subsequent runs which use a converged SCF vector as the starting point. .LP It is extremely important to note that this version of the code no longer supports \fBOPENTYPE. One must use the new keywords \fBREFERENCE and \fBMULTP to specify the type of SCF needed. .SH INPUT FORMAT .\" ---------------------------------------- Commonly used input here: .LP The .B cscf program searches through the default keyword path (first .B SCF and then .BR DEFAULT ) for the following keywords: .IP "\fBLABEL =\fP \fIstring\fP" This is a character string to be included in the output. This string is not used by the program. There is no default. .IP "\fBWFN =\fP \fIstring\fP" This is the type of wavefunction which is ultimately desired. The default is .BR SCF . .IP "\fBOPENTYPE \fBis \fBno \fBlonger \fBsupported" .IP "\fBREFERENCE =\fP \fIstring\fP" This specifies the type of SCF calculation one wants to do. It can be one of .B RHF (for a closed shell singlet), .B ROHF (for a restricted open shell calculation), .B UHF (for an unrestricted open shell calculation), .B TWOCON (for a two configuration singlet), or .BR SPECIAL . If \fBSPECIAL\fP is given, then .if n alpha .if t \(*a and .if n beta .if t \(*b coupling coefficients must be given with the .B ALPHA and .B BETA keywords. The default is .BR RHF . .IP "\fBMULTP=\fP \fIinteger\fP" Specifies the multiplicity of the molecule. Default is singlet. .IP "\fBCHARGE=\fP \fIinteger\fP" Specifies the charge of the molecule. Defauly is 0. .IP "\fBDOCC =\fP \fIinteger_vector\fP" This gives the number of doubly occupied orbitals in each irreducible representation. There is no default. If this is not given, CSCF will attempt to guess at the occupations using the core hamiltonian. .IP "\fBSOCC =\fP \fIinteger_vector\fP" This gives the number of singly occupied orbitals in each irreducible representation. There is no default. .IP "\fBDERTYPE =\fP \fIstring\fP" This specifies the order of derivative that is to eventually be done. It is used by the .B scf program to determine if certain files are to be written and it is also used to determine the default convergence of the wavefunction. The default is .BR FIRST . .IP "\fBMAXITER =\fP \fIinteger\fP" This gives the maximum number of iterations. The default is 40. .IP "\fBCONVERGENCE =\fP \fIinteger\fP" This specifies how tightly the wavefunction will be converged. Convergence is determined by comparing the RMS change in the density matrix ("delta P") to the given value. The convergence criterion is .if n 10**(\-\fIinteger\fP). .if t 10\s-2\u(\-\fIinteger\fP)\d\s0. The default is 7 if both \fBDERTYPE = NONE\fP and \fBWFN = SCF\fP are given and 10 otherwise. .IP "\fBLEVELSHIFT =\fP \fIreal\fP" This specifies the level shift. The default is 1. .IP "\fBDIRECT = \fP \fIboolean\fP" Specifies whether to do the SCF calculation with an integral direct technique. The default is false. .IP "\fBPRINT_MOS = \fP \fIboolean\fP" Specifies whether to print the molecular orbitals or not. The default is false. .\" ---------------------------------------- Uncommonly used input here: .LP There are also a large number of less commonly used input parameters. If you do not understand what the following options mean, then make sure that they do not appear in your input. The defaults will work in the overwhelming majority of cases. These are specified with the following keywords: .IP "\fBDELETE_INTS =\fP \fIboolean\fP" Integrals files will be erased if \fBWFN = SCF\fP and \fBDERTYPE = FIRST\fP or \fBDERTYPE = NONE\fP. If you wish to keep integrals files then set \fBDELETE_INTS\fP = false. The default is true. .IP "\fBREORDER =\fP \fIstring\fP" The parameter controls reordering of molecular orbitals. If set to \fBBEFORE\fP then the guess orbitals from checkpoint file will be reordered. If set to \fBAFTER\fP, converged orbitals will be reordered before being written to the checkpoint file. In either case \fBMOORDER\fP parameter must be given to specify the reordering map. The default is not to reorder orbitals. .IP "\fBMOORDER =\fP \fIinteger_vector\fP" This specifies a molecular orbital reordering vector. It will only be used if \fBREORDER\fP is set. This vector maps every orbital to its new index, e.g. \fBMOORDER = (0 2 1)\fP specifies that after reordering orbitals 1 and 2 will be swapped. The rank of this vector is the same as the number of MOs. The indices are in Pitzer order (ordered by symmetry, then by energy within each symmetry block), base-0. CSCF will likely fail if the given MOORDER mixes orbitals from different irreps. There is no default. .if n .ds MM MM .if t .ds MM n\s-2\dsocc\u\s0 .IP "\fBALPHA =\fP \fIreal_vector\fP" If \fBOPENTYPE = SPECIAL\fR, then this parameter gives the .if n alpha .if t \(*a coupling coefficients. The number of elements in this vector is \*(MM(\*(MM+1)/2, where \*(MM is the number of irreducible representations containing singly occupied molecular orbitals. There is no default. .IP "\fBBETA =\fP \fIreal_vector\fP" If \fBOPENTYPE = SPECIAL\fR, then this parameter gives the .if n beta .if t \(*b coupling coefficients. The number of elements in this vector is \*(MM(\*(MM+1)/2, where \*(MM is the number of irreducible representations containing singly occupied molecular orbitals. There is no default. .IP "\fBGUESS =\fP \fIstring\fP" This option determines the type of initial guess at the eigenvector CSCF will use. The only valid option at the moment are : (1) \fBGUESS = CORE\fP, which causes it to use core Hamiltonian eigenvector to start the calculation; (2) \fBGUESS = AUTO\fP which results in an attempt to use the MO vector in the checkpoint file, or resorts to core guess if there is no eigenvector in that file. The default if \fBAUTO\fP. .IP "\fBIPRINT =\fP \fIinteger\fP" This is a print option. The default is 0. .IP "\fBMO_OUT =\fP \fIboolean\fP" Prints out the orbitals with symmetry and occupations at the end of the calculation. Default is true. .IP "\fBROTATE =\fP \fIboolean\fP" The molecular orbitals will not be rotated if this is false. The rotation only affects the virtual orbitals for open shell systems. This parameter must be true for correlated gradients and it must be false for second and higher derivatives. The default is false if \fBWFN = SCF\fP and true otherwise. .IP "\fBCHECK_ROT =\fP \fIboolean\fP" Check the molecular orbital rotation described above to ensure that no columns of the SCF eigenvector matrix are swapped by the rotation. Has no effect if \fBROTATE = false\fP. The default is true. .IP "\fBCHECK_MO_ORTHOGONALITY =\fP \fIboolean\fP" Check if the molecular orbitals are orthonormal. Useful for debugging only. The default is false. .IP "\fBDIIS =\fP \fIboolean\fP" This determines whether diis will be used. The default is true. .IP "\fBDIISSTART =\fP \fIinteger\fP" This gives the first iteration for which DIIS will be used. The default is 0. .IP "\fBNDIIS =\fP \fIinteger\fP" This gives the number of error matrices to use in the diis procedure. The default is 6 for closed shell, 4 for open shell, and 3 for tcscf. .IP "\fBDIISDAMP =\fP \fIreal\fP" This gives the damping factor for the diis procedure. The default is 0.0 for closed shell, 0.02 for open shell, and 0.01 for tcscf. .IP "\fBINCR =\fP \fIreal\fP" This is used in tcscf to determine how often the ci coefficients are recalculated. A small number (~0.25) will cause them to be recalculated nearly every scf iteration. The default is 0.25. .IP "\fBDYN_ACC = \fP \fIboolean\fP" When performing direct scf this specifies whether dynamic integral accuracy cutoffs will be used. Default is true (use dynamic cutoffs). Initial iterations are performed with integrals accurate to six digits. After density is converged to 10^-5 or 30 iterations are completed, full integral accuracy is used. If scf convergence problems are experienced disabling dynamic cutoffs by setting this variable to false might help. .IP "\fBORTHOG_ONLY = \fP \fIboolean\fP" Sometimes in CASSCF or other non-HF/KS schemes for orbital optimization, it is useful to reorthogonalize MO's from other geometries for the current geometry so they can be used as an initial guess for the new MO's. This can be performed by running CSCF with \fBORTHOG_ONLY = true\fP. After the orbitals are orthogonalized, the program will quit without performing an SCF computation. This keyword will be ignored if there are no previous orbitals in the checkpoint file. Defaults to \fBtrue\fP if \fBWFN = DETCAS\fP. psi3/src/bin/cscf/cscf.cc0000644000101500007650000004341311112564564013715 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* /*************************************************************************/ /* */ /* CSCF: */ /* Written by Edward Seidl (a NON-hog) */ /* September 1990 */ /* Parts liberally ripped off from HFS group SCF */ /* code written in FORTRAN (Boo!!!) */ /* */ /* modified April 17, 1991 to use new input format developed by */ /* Curtis Janssen */ /**************************************************************************/ /* */ /* Description of input */ /* */ /* LABEL = string */ /* This is a character string to be included in the output. */ /* There is no default. */ /* */ /* WFN = string */ /* This is the type of wavefunction which is ultimately desired. */ /* The default is SCF. */ /* */ /* DIRECT_SCF = boolean */ /* Flag to request the direct formation of the Fock matrix */ /* */ /* OPENTYPE = string */ /* This specifies the state desired. It can be one of NONE */ /* (for a closed shell singlet), SINGLET (for an open shell */ /* singlet), HIGHSPIN (for any high spin open shell system), */ /* TWOCON (for a two configuration singlet), or SPECIAL. */ /* If SPECIAL is given, then alpha and beta coupling */ /* coefficients must be given with the ALPHA and BETA keywords. */ /* The default is NONE. */ /* */ /* DOCC = integer_vector */ /* This gives the number of doubly occupied orbitals in each */ /* irreducible representation. There is no default. */ /* */ /* SOCC = integer_vector */ /* This gives the number of singly occupied orbitals in each */ /* irreducible representation. If OPENTYPE = NONE this defaults */ /* to the zero vector. Otherwise, there is no default. */ /* */ /* DERTYPE = string */ /* This specifies the order of derivative that is to even- */ /* tually be done. It is used by the scf program to */ /* determine if certain files are to be written and it is */ /* also used to determine the default convergence of the */ /* wavefunction. The default is FIRST. */ /* */ /* MAXITER = integer */ /* This gives the maximum number of iterations. The default */ /* is 40. */ /* */ /* CONVERGENCE = integer */ /* The convergence criterion is 10**(-integer). The default is */ /* 7 if both DERTYPE = NONE and WFN = SCF are given and 10 */ /* otherwise. */ /* */ /* LEVELSHIFT = real */ /* This specifies the level shift. The default is 1.0. */ /* */ /* */ /* There are also a large number of less commonly used input */ /* parameters. If you do not understand what the following */ /* options mean, then make sure that they do not appear in your */ /* input. The defaults will work in the overwhelming majority */ /* of cases. These are specified with the following keywords: */ /* */ /* */ /* REORDER = boolean */ /* The molecular orbitals will be reordered if this is */ /* true, in which case, the MOORDER parameter must be */ /* present. The default is false. */ /* */ /* MOORDER = integer_vector */ /* This specifies a molecular orbital reordering vector. */ /* It will only be used if REORDER = YES. This vector */ /* contains first the ordering for the orbitals in the */ /* first irreducible representation and then the second */ /* and so on. The first orbital of each irreducible */ /* representation is numbered 1. There is no default. */ /* */ /* ALPHA = real_vector */ /* If OPENTYPE = SPECIAL, then this parameter gives the */ /* alpha coupling coefficients. The number of elements in */ /* this vector is MM(MM+1)/2, where MM is the number of */ /* irreducible representations containing singly occupied */ /* molecular orbitals. There is no default. */ /* */ /* BETA = real_vector */ /* If OPENTYPE = SPECIAL, then this parameter gives the */ /* beta coupling coefficients. The number of elements in */ /* this vector is MM(MM+1)/2, where MM is the number of */ /* irreducible representations containing singly occupied */ /* molecular orbitals. There is no default. */ /* */ /* RESTART = boolean */ /* The calculation will restart from the old wavefunction */ /* if RESTART is true. If the old wavefunction does not */ /* exist, then the cscf program will generate its own ini- */ /* tial guess automatically. Possible values for this */ /* parameter are TRUE, YES, 1, FALSE, NO, and 0. The */ /* default is true. */ /* */ /* IPRINT = integer */ /* This is a print option. The default is 0. */ /* */ /* ROTATE = boolean */ /* The molecular orbitals will not be rotated if this is */ /* false. The rotation only affects the virtual orbitals */ /* for open shell systems. This parameter must be true */ /* for correlated gradients and it must be false for */ /* second and higher derivatives. The default is false if */ /* WFN = SCF and true otherwise. */ /* */ /* DIIS = boolean */ /* This determines whether diis will be used. The default is */ /* false for OPENTYPE = TWOCON and true otherwise. */ /* */ /* NDIIS = integer */ /* This gives the number of error matrices to use in the diis */ /* procedure. The default is 6 for closed shell, 4 for open */ /* shell, and 3 for tcscf. */ /* */ /* DIISSTART = integer */ /* This gives the first iteration for which DIIS will be */ /* used. The default is 0. */ /* */ /* DIISDAMP = real */ /* This gives the damping factor for the diis procedure. The */ /* default is 0.0 for closed shell, 0.02 for open shell, and */ /* 0.01 for tcscf. */ /* */ /* INCR = real */ /* This is used in tcscf to determine how often the ci */ /* coefficients are recalculated. A small number (~0.25) */ /* will cause them to be recalculated nearly every scf */ /* iteration. The default is 0.5. */ /* */ /* */ /* FOCK_TYPE = integer */ /* Only used for tcscf and open shell calculations. */ /* If FOCK_TYPE = 0 use a simple form for fock_eff */ /* " " = 1 use form of fock_eff suitable for */ /* high-spin cases */ /* " " > 1 experimental fock matrices */ /* */ /**************************************************************************/ /*------------------------------------------------------------------------- READ THIS FIRST: This code is a hack of the original CSCF which employed symmetric orthogonalization procedure. This code uses the canonical orthogonalization procedure. To decrease the amount of rewriting I had to do I left the initialization part (init_scf and init_scf2) intact. Thus, although I have to allocate more space than I need, I should be fine otherwise. - Edward Valeev, August'99 -------------------------------------------------------------------------*/ #include "includes.h" #include "common.h" #include #include #include #include namespace psi { namespace cscf { void print_initial_vec(); extern void write_scf_matrices(void); }} int main(int argc,char* argv[]) { using namespace psi::cscf; int i,nn; const char *prog_name="CSCF3.0: An SCF program written in C"; const char *output="APPEND "; struct symm *s; ip_value_t *ipvalue=NULL; int errcod, orthog_only, mo_print; char *wfn; errcod = psi_start(&infile,&outfile,&psi_file_prefix,argc-1, argv+1, 0); if (errcod != PSI_RETURN_SUCCESS) exit(PSI_RETURN_FAILURE); ip_cwk_add(":SCF"); tstart(outfile); fprintf(outfile,"\n%13c------------------------------------------\n",' '); fprintf(outfile,"\n%16c%s\n",' ',prog_name); fprintf(outfile,"\n%14cWritten by too many people to mention here\n",' '); fprintf(outfile,"\n%13c------------------------------------------\n",' '); itap30 = 30; itap33 = PSIF_SO_TEI; itap34 = 34; itapS = PSIF_OEI; itapT = PSIF_OEI; itapV = PSIF_OEI; /* itapS = PSIF_SO_S; itapT = PSIF_SO_T; itapV = PSIF_SO_V; */ itapDSCF = PSIF_DSCF; itap92 = PSIF_SO_PKSUPER1; itap93 = PSIF_SO_PKSUPER2; /* JPK 6/1/00 integral accuracy: dynamic(default)=1, static=0 */ dyn_acc = 1; eri_cutoff = 1.0E-14; ip_boolean("DYN_ACC",&dyn_acc,0); tight_ints=0; delta = 1.0; /* CDS 3/6/02 add flag to do only orthogonalization */ errcod = ip_string("WFN",&wfn,0); if (strcmp(wfn,"DETCAS")==0 || strcmp(wfn,"CASSCF")==0 || strcmp(wfn,"RASSCF")==0) orthog_only = 1; else orthog_only = 0; ip_boolean("ORTHOG_ONLY",&orthog_only,0); free(wfn); /* open integrals file(s) */ psio_init(); psio_ipv1_config(); /* STB (6/30/99) - Function added because in order to initialize things one must know whether you are doing UHF or restricted */ chkpt_init(PSIO_OPEN_OLD); occ_init(); /* initialize some constants and arrays */ if (uhf) init_uhf(); else init_scf(); /* read input.dat, get occupations, flags, etc. */ scf_input(ipvalue); /* we can't just orthogonalize the orbitals if there aren't any */ if (inflg != 1) orthog_only = 0; /* set up other useful arrays */ init_scf2(); /* get one electron integrals */ rdone_iwl(); if(print & 1) { for (i=0; i < num_ir; i++) { s = &scf_info[i]; if (nn=s->num_so) { fprintf(outfile,"\nsmat for irrep %s\n",s->irrep_label); print_array(s->smat,nn,outfile); fprintf(outfile,"\ntmat for irrep %s\n",s->irrep_label); print_array(s->tmat,nn,outfile); fprintf(outfile,"\nhmat for irrep %s\n",s->irrep_label); print_array(s->hmat,nn,outfile); } } } /* form S-1/2 matrix sahalf */ shalf(); if (print & 1) { for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { fprintf(outfile,"\nsahalf for irrep %s\n",s->irrep_label); print_mat(s->sahalf,nn,s->num_mo,outfile); } } } /* if no initial vector, form one from core hamiltonian */ if (inflg == 2) form_vec(); fflush(outfile); /* guess or designate orbital occupations*/ guess(); /* orthogonalize old vector and form first density matrix */ if (inflg == 1) { if(uhf) schmit_uhf(1); else schmit(1); } /* Print out the first vector */ if (print & 2) print_initial_vec(); /* if we are only orthogonalizing, then quit here */ if (orthog_only) { fprintf(outfile, "Only orbital orthogonalization has been performed\n"); mo_print = 0; errcod = ip_boolean("PRINT_MOS",&mo_print,0); if (mo_print) print_mos("Alpha",scf_info); write_scf_matrices(); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); exit(PSI_RETURN_SUCCESS); } if (!twocon){ if(!uhf) dmat(); else{ /*--- Prepare alpha and beta eigenvectors from the core Hamiltonian guess ---*/ if(inflg == 2) cmatsplit(); dmatuhf(); } } /* Decide how to form the Fock matrix */ if (!direct_scf) { /* read in tei's and form supermatrix */ num_ints = 0; num_bufs = 0; Pmat.unit = itap92; Pmat.key = strdup("P-supermatrix"); Pmat.bufpos = PSIO_ZERO; PKmat.unit = itap93; PKmat.key = strdup("PK-supermatrix"); PKmat.bufpos = PSIO_ZERO; psio_open(Pmat.unit,PSIO_OPEN_NEW); psio_open(PKmat.unit,PSIO_OPEN_NEW); rdtwo(); } else { /* form the Fock matrix directly */ /*check for rohf singlet...doesn't work direct*/ if(!uhf && singlet) { fprintf(outfile,"\n rohf open shell singlet doesn't work direct\n"); fprintf(outfile," remove 'direct_scf = true' from input\n"); fprintf(stderr,"rohf open shell singlet doesn't work direct\n"); fprintf(stderr,"remove 'direct_scf = true' from input\n"); chkpt_close(); psio_done(); exit(PSI_RETURN_FAILURE); } formg_direct(); if(dyn_acc) fprintf(outfile,"\n Using inexpensive integrals"); } /* iterate */ iter = 0; converged = 0; if(twocon) scf_iter_2(); else if(uhf) uhf_iter(); else scf_iter(); cleanup(); psio_done(); } namespace psi { namespace cscf { void print_initial_vec() { int irrep, nso, nmo; struct symm *s; for(irrep=0;irrepnum_so) nmo = s->num_mo; if (uhf) { fprintf(outfile,"\n Initial alpha vector for irrep %s\n",s->irrep_label); print_mat(spin_info[0].scf_spin[irrep].cmat,nso,nmo,outfile); fprintf(outfile,"\n Initial beta vector for irrep %s\n",s->irrep_label); print_mat(spin_info[1].scf_spin[irrep].cmat,nso,nmo,outfile); } else { fprintf(outfile,"\nInitial vector for irrep %s\n",s->irrep_label); print_mat(s->cmat,nso,nmo,outfile); } } return; } }} // namespace psi::cscf psi3/src/bin/cscf/dft_inputs.cc0000644000101500007650000000444411112564564015157 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ #define EXTERN #include "includes.h" #include "common.h" #include #include namespace psi { namespace cscf { char *determine_functional(void){ int errcod; int depth; int i; char *exch_str,*corr_str; char *functional; depth = 0; errcod = ip_count("FUNCTIONAL",&depth,0); if(depth == 0){ errcod = ip_string("FUNCTIONAL",&functional,0); if(errcod != IPE_OK){ fprintf(outfile," Must specify a functional when using ks-dft\n"); exit(PSI_RETURN_FAILURE); } } else if(depth == 2){ errcod = ip_string("FUNCTIONAL",&exch_str,1,0); if(errcod != IPE_OK){ fprintf(outfile, " Exchange functional specification is invalid or missing.\n"); exit(PSI_RETURN_FAILURE); } errcod = ip_string("FUNCTIONAL",&corr_str,1,1); if(errcod != IPE_OK){ fprintf(outfile, " Correlation functional specification is invalid or missing.\n"); exit(PSI_RETURN_FAILURE); } if (!strcmp(exch_str,"NONE")) exch_str[0] = '\0'; if (!strcmp(corr_str,"NONE")) corr_str[0] = '\0'; i = strlen(exch_str) + strlen(corr_str); if (i == 0) functional = strdup("NONE"); else { functional = (char *) malloc(sizeof(char)* (i + 1)); sprintf(functional,"%s%s",exch_str,corr_str); } free(exch_str); free(corr_str); } else{ fprintf(outfile,"\nwrong number of records in FUNCTIONAL keyword"); exit(PSI_RETURN_FAILURE); } return functional; } const char *determine_grid(void){ int errcod; int depth; int i; const char *grid_str; char *r,*ang; const char *Euler = "Euler-Mclaren / Lebedev"; depth = 0; errcod = ip_count("GRID",&depth,0); if(depth == 0){ grid_str = "SG-1"; errcod = ip_string("GRID",(char **) &grid_str,0); } else if(depth == 2){ errcod = ip_string("GRID",&r,1,0); errcod = ip_string("GRID",&ang,1,1); i = strlen(Euler)+strlen(r)+strlen(ang); grid_str = (char *)malloc(sizeof(char)*(i+1)); sprintf((char *) grid_str,"%s %s %s",Euler,r,ang); free(r);free(ang); } else{ fprintf(outfile,"\nProblem with Grid specification: Wrong number of elements for keyword Grid"); exit(PSI_RETURN_FAILURE); } return grid_str; } }} // namespace psi::cscf psi3/src/bin/cscf/diis.cc0000644000101500007650000002133611112564564013727 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2004/05/03 04:32:40 crawdad * Major mods based on merge with stable psi-3-2-1 release. Note that this * version has not been fully tested and some scf-optn test cases do not run * correctly beccause of changes in mid-March 2004 to optking. * -TDC * /* Revision 1.1.1.1.12.2 2004/04/21 15:45:07 evaleev /* Modified DIIS algorithm for RHF and ROHF to work in OSO basis rather than in /* AO basis, to avoid difficulties of transforming between MO and AO bases /* when linear dependencies are present. /* /* Revision 1.1.1.1.12.1 2004/04/06 21:29:05 crawdad /* Corrections to the RHF/ROHF DIIS algorithm, which was simply incorrect. /* The backtransformation of the DIIS error vectors to the AO basis was not /* mathematically right. /* -TDC and EFV /* /* Revision 1.1.1.1 2000/02/04 22:52:29 evaleev /* Started PSI 3 repository /* /* Revision 1.3 1999/11/02 23:55:55 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.2 1999/08/17 19:04:13 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:25 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { extern double delta; static double *btemp, **bold, **bmat; static struct diis_mats { double ***fock_c; /* Closed-shell Fock matrix in AO basis */ double ***fock_o; /* Open-shell Fock matrix in AO basis */ double ***error; /* Error matrix in AO basis */ } *diism,dtemp; void diis(double** scr1, double** scr2, double** scr3, double* c1, double* c2, double cim, int newci) { int i,j,k,ij; int errcod; int m,nn,num_mo; double occi, occj; int _try = 0; int last = iter-1; int col = iter+1; double etemp, dotp, norm, determ, etempo; double scale; struct symm *s; struct diis_mats *d; int diis_print=0; double **C; /* AO->MO transform = P^-1 * C */ double **X, **S; /* scratch matrix */ double **tmp1; if(diism == NULL) { bmat = (double **) block_matrix(ndiis+1,ndiis+1); bold = (double **) block_matrix(ndiis,ndiis); btemp = (double *) init_array(ndiis+1); diism = (struct diis_mats *) malloc(sizeof(struct diis_mats)*ndiis); for(i=0; i < ndiis ; i++) { diism[i].fock_c = (double ***) malloc(sizeof(double **)*num_ir); if(iopen) diism[i].fock_o = (double ***) malloc(sizeof(double **)*num_ir); diism[i].error = (double ***) malloc(sizeof(double **)*num_ir); for(j=0; j < num_ir ; j++) { if(nn=scf_info[j].num_so) { num_mo = scf_info[j].num_mo; diism[i].fock_c[j] = (double **) block_matrix(nn,nn); if(iopen) diism[i].fock_o[j] = (double **) block_matrix(nn,nn); diism[i].error[j] = (double **) block_matrix(num_mo,num_mo); } } } } scale = 1.0 + dampsv; if (iter > ndiis) { last = ndiis-1; col = ndiis+1; dtemp = diism[0]; for (i=0; i < last ; i++) { diism[i] = diism[i+1]; } diism[last] = dtemp; } /* Debugging stuff */ errcod = ip_boolean("DIIS_PRINT",&diis_print,0); if(iter == 1 && diis_print) ffile(&diis_out,"diis_out.dat",0); /* save ao fock matrices in fock_save */ d = &diism[last]; for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if(nn=s->num_so) { num_mo = s->num_mo; tri_to_sq(s->fock_pac,d->fock_c[m],nn); if(iopen) tri_to_sq(s->fock_open,d->fock_o[m],nn); /* form error matrix in mo basis */ mmult(s->cmat,1,d->fock_c[m],0,scr1,0,num_mo,nn,nn,0); mmult(scr1,0,s->cmat,0,scr2,0,num_mo,nn,num_mo,0); if(iopen) { mmult(s->cmat,1,d->fock_o[m],0,scr1,0,num_mo,nn,nn,0); mmult(scr1,0,s->cmat,0,scr3,0,num_mo,nn,num_mo,0); } for (i=0; i < num_mo; i++) { occi = s->occ_num[i]; for (j=0; j <= i ; j++ ) { occj = s->occ_num[j]; if (!iopen) { if (occi == 0.0 && occj != 0.0 ) { scr1[i][j]= scr2[i][j]; scr1[j][i]= scr2[i][j]; } else { scr1[i][j]=scr1[j][i]=0.0; } } else if(!twocon) { if ((occi == 1.0 || occi == 0.5) && occj == 2.0 ) etemp = scr2[i][j]-0.5*scr3[i][j]; else if(occi == 0.0) { if (occj == 2.0) etemp = scr2[i][j]; else if (occj != 0.0) etemp = 0.5*scr3[i][j]; else etemp = 0.0; } else etemp = 0.0; scr1[i][j] = scr1[j][i] = etemp; } else { if (occi != 2.0 && occi != 0.0 && occj == 2.0 ) etemp = cim*(c1[m]*scr2[i][j]-c2[m]*scr3[i][j]); else if(occi == 0.0) { if (occj == 2.0) etemp = scr2[i][j]; else if (occj != 0.0) etemp = cim*scr3[i][j]; else etemp = 0.0; } else etemp = 0.0; scr1[i][j] = scr1[j][i] = etemp; } } } /* transform the error matrix into the OSO basis */ X = block_matrix(num_mo, num_mo); C_DGEMM('n', 'n', num_mo, num_mo, num_mo, 1.0, s->ucmat[0], num_mo, scr1[0], nsfmax, 0.0, X[0], num_mo); C_DGEMM('n', 't', num_mo, num_mo, num_mo, 1.0, X[0], num_mo, s->ucmat[0], num_mo, 0.0, d->error[m][0], num_mo); free_block(X); for(i=0; i < num_mo ; i++) { for(j=0; j <= i ; j++) { etemp=fabs(scr1[i][j]); diiser = MAX0(diiser,etemp); } } } } /* then set up b matrix */ if (iter > ndiis) { for (i=0; i < last ; i++) { for (j=0; j <= i ; j++) { bold[i][j]=bold[j][i]=bold[i+1][j+1]; } } } for (i=0; i <= last ; i++) { etemp=0.0; for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if(nn=s->num_so) { num_mo = s->num_mo; sdot(diism[i].error[m],diism[last].error[m],num_mo,&dotp); etemp += dotp; } } bold[i][last]=bold[last][i] = etemp; } bmat[0][0] = 0.0; btemp[0] = -1.0; norm = 1.0/bold[0][0]; for (i=1; i <= last+1 ; i++) { bmat[i][0]=bmat[0][i] = -1.0; btemp[i] = 0.0; for (j=1; j <= i ; j++) { bmat[i][j]=bmat[j][i] = bold[i-1][j-1]*norm; if(i==j) bmat[i][j] *= scale; } } if(diis_print){ fprintf(diis_out,"\nBMAT for iter %d",iter); print_mat(bmat,col,col,diis_out); } if (iter-1) { flin(bmat,btemp,col,1,&determ); /* test for poorly conditioned equations */ while (fabs(determ) < 1.0e-19 && _try < last) { _try++; col--; bmat[0][0] = 0.0; btemp[0] = -1.0; norm=1.0/bold[_try][_try]; for (i=1; i <= ndiis-_try ; i++) { bmat[i][0]=bmat[0][i] = -1.0; for (j=1; j <= i ; j++) { bmat[i][j]=bmat[j][i]=bold[i+_try-1][j+_try-1]*norm; if(i==j) bmat[i][j] *= scale; } btemp[i] = 0.0; } if(diis_print){ fprintf(diis_out,"\nCorrected BMAT for iter %d",iter); print_mat(bmat,col,col,diis_out); } flin(bmat,btemp,col,1,&determ); } if(fabs(determ) < 10.0e-20) { printf(" try %d no good\n",_try); return; } if(iter >= it_diis) { for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if(nn=s->num_so) { for (i=ij=0; i < nn ; i++) { for (j=0; j <= i ; j++,ij++) { int kk=1; etemp=0.0; etempo=0.0; for (k=_try; k < last+1 ; k++) { if(iopen) etempo += btemp[kk]*diism[k].fock_o[m][i][j]; etemp += btemp[kk]*diism[k].fock_c[m][i][j]; kk++; } if(iopen) s->fock_open[ij] = etempo; s->fock_pac[ij] = etemp; } } } } } } } }} // namespace psi::cscf psi3/src/bin/cscf/diis2_uhf.cc0000644000101500007650000001624610754663017014663 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* diis_uhf(): DIIS extrapolation for the UHF SCF procedure. This version ** uses Pulay's method [see P. Pulay, J. Comp. Chem. 3, 556-560 (1982)]. ** ** (1) The elements of the B-matrix are taken to be the sums of the dot products ** involving alpha and beta error vectors: B_ij = _alpha + _beta. ** I tried independent extrapolation of alpha and beta, but this failed horribly. ** ** (2) The overlap matrix used for the expression e = FDS - SDF is the ** P^-1 built in shalf.c rather than the true overlap. This is ** important for linearly dependent basis sets, I think. ** ** The original version of this code was written by S. Brown, ** ca. 11/99. This version was written by TDC, 4/04. */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { extern double delta; static double *btemp, **bold, **bmat; static struct diis_data { double ****fock; double ****error; } *diism, dtemp; void diis_uhf(void) { int i,j,k,ij, kk; int errcod; int a,b,c,e; int m,n,nn,mm,num_mo; int last, col, _try; double etemp, dotp, norm, determ; double scale; struct symm *s; struct diis_data *d; int diis_print; double **S, **F, **D, **X, **Y, **Z; double sum, maximum; if(diism == NULL){ /* first call, so allocate memory */ /* use one DIIS b-matrix for alpha+beta error vectors */ bmat = block_matrix(ndiis+1,ndiis+1); bold = block_matrix(ndiis,ndiis); btemp = init_array(ndiis+1); diism = (struct diis_data *) malloc(sizeof(struct diis_data)*ndiis); for(m=0; m < ndiis ; m++) { d = &diism[m]; d->fock = (double ****) malloc(2 * sizeof(double ***)); d->error = (double ****) malloc(2 * sizeof(double ***)); for(n=0; n < 2; n++) { d->fock[n] = (double ***) malloc(num_ir * sizeof(double **)); d->error[n] = (double ***) malloc(num_ir * sizeof(double **)); for(j=0;j < num_ir; j++){ if(nn=scf_info[j].num_so) { d->fock[n][j] = block_matrix(nn,nn); d->error[n][j] = block_matrix(nn,nn); } } } } } scale = 1.0 + dampsv; S = block_matrix(nsfmax,nsfmax); /* to store overlap matrix for DIIS */ D = block_matrix(nsfmax,nsfmax); /* to store density matrix for DIIS */ X = block_matrix(nsfmax,nsfmax); /* temp matrix for DIIS */ Z = block_matrix(nsfmax,nsfmax); /* temp matrix for DIIS */ last = iter-1; col = iter+1; if(iter > ndiis) { last = ndiis-1; col = ndiis+1; } if (iter > ndiis) { /* shift DIIS structs up */ dtemp = diism[0]; for (i=0; i < last ; i++) { diism[i] = diism[i+1]; } diism[last] = dtemp; } diis_print = 0; errcod = ip_boolean("DIIS_PRINT",&diis_print,0); if(iter == 1 && diis_print) ffile(&diis_out,"diis_out.dat",0); d = &diism[last]; for(n=0; n < 2; n++){ for(m=0; m < num_ir; m++) { s = &scf_info[m]; if(nn=s->num_so) { num_mo = s->num_mo; /* zero_mat(S, nsfmax, nsfmax); tri_to_sq(scf_info[m].smat, S, nn); */ /* Generate the density for this irrep */ zero_mat(D, nsfmax, nsfmax); C_DGEMM('n', 't', nn, nn, spin_info[n].scf_spin[m].noccup, 1.0, spin_info[n].scf_spin[m].cmat[0], nn, spin_info[n].scf_spin[m].cmat[0], nn, 0.0, D[0], nsfmax); zero_mat(X, nsfmax, nsfmax); zero_mat(Z, nsfmax, nsfmax); tri_to_sq(spin_info[n].scf_spin[m].fock_pac, d->fock[n][m], nn); /* SDF */ C_DGEMM('n', 'n', nn, nn, nn, 1.0, s->pinv[0], nn, D[0], nsfmax, 0.0, X[0], nsfmax); C_DGEMM('n', 'n', nn, nn, nn, 1.0, X[0], nsfmax, d->fock[n][m][0], nn, 0.0, Z[0], nsfmax); zero_mat(X, nsfmax, nsfmax); /* FDS - SDF */ C_DGEMM('n', 'n', nn, nn, nn, 1.0, d->fock[n][m][0], nn, D[0], nsfmax, 0.0, X[0], nsfmax); C_DGEMM('n', 'n', nn, nn, nn, 1.0, X[0], nsfmax, s->pinv[0], nn, -1.0, Z[0], nsfmax); /* Transform the error vector to the orthogonal AO basis */ C_DGEMM('t', 'n', num_mo, nn, nn, 1.0, s->sahalf[0], nn, Z[0], nsfmax, 0.0, X[0], nsfmax); C_DGEMM('n', 'n', num_mo, num_mo, nn, 1.0, X[0], nsfmax, s->sahalf[0], nn, 0.0, d->error[n][m][0], nn); /* for(i=0; i < nn; i++) for(j=0; j < nn; j++) d->error[n][m][i][j] = Z[i][j]; */ for(i=0; i < num_mo; i++) for(j=0; j <= i; j++) { etemp = fabs(d->error[n][m][i][j]); diiser = MAX0(diiser,etemp); } } } } free_block(S); free_block(D); free_block(X); free_block(Z); if(iter > ndiis) { for(i=0; i < last; i++) { for(j=0; j <= i; j++) { bold[i][j] = bold[j][i] = bold[i+1][j+1]; } } } for(i=0; i <= last; i++) { etemp = 0.0; for(n=0; n < 2; n++) { for(m=0; m < num_ir; m++) { s = &scf_info[m]; if(nn=s->num_so) { sdot(diism[i].error[n][m], diism[last].error[n][m], s->num_mo, &dotp); etemp += dotp; } } } bold[i][last] = bold[last][i] = etemp; } if(diis_print) { fprintf(diis_out, "\nRaw BMAT for iter %d.\n", iter); print_mat(bold, last+1, last+1, diis_out); } bmat[0][0] = 0.0; btemp[0] = -1.0; /* norm = 1.0/bold[n][0][0]; */ for(i=1; i <= last+1; i++) { bmat[i][0] = bmat[0][i] = -1.0; btemp[i] = 0.0; for(j=1; j <= i; j++) { bmat[i][j] = bmat[j][i] = bold[i-1][j-1]; if(i==j) bmat[i][j] *= scale; } } /* find the maximum in B and scale all the elements */ maximum = fabs(bmat[1][1]); for(i=1; i <= last+1; i++) { for(j=1; j <= i; j++) { if(fabs(bmat[i][j]) > maximum) maximum = fabs(bmat[i][j]); } } for(i=1; i <= last+1; i++) { for(j=1; j <= last+1; j++) { bmat[i][j] /= maximum; } } if(diis_print){ fprintf(diis_out,"\nBMAT for iter %d\n", iter); print_mat(bmat,col,col,diis_out); } if(iter-1) { flin(bmat,btemp,col,1,&determ); if(diis_print) { fprintf(diis_out, "BMAT determinant for iter %d = %20.12f\n", iter, determ); fprintf(diis_out, "DIIS coeffs for iter %d\n", iter); sum = 0; for(i=0; i < col; i++) { fprintf(diis_out, "%d %20.12f\n", i, btemp[i]); if(i) sum += btemp[i]; } fprintf(diis_out, "sum of DIIS coeffs for iter %d = %20.12f\n", iter, sum); } _try = 0; while(fabs(determ) < 1.0e-19 && _try < last) { _try++; col--; bmat[0][0] = 0.0; btemp[0] = -1.0; norm = 1.0/bold[_try][_try]; for(i=1; i <= ndiis-_try; i++) { bmat[i][0] = bmat[0][i] = -1.0; btemp[i] = 0.0; for(j=1; j <= i; j++) { bmat[i][j] = bmat[j][i] = bold[i+_try-1][j+_try-1]*norm; if(i==j) bmat[i][j] *= scale; } } if(diis_print) { fprintf(diis_out, "\nCorrected BMAT for iter %d\n", iter); print_mat(bmat, col, col, diis_out); } flin(bmat, btemp, col, 1, &determ); } if(fabs(determ) < 1e-20) { printf("\nDIIS extrapolation failed in iter %d\n", iter); return; } if((iter >= it_diis)) { for(n=0; n < 2; n++) { for(m=0; m < num_ir; m++) { s = &scf_info[m]; if(nn=s->num_so) { num_mo = s->num_mo; for(i=0,ij=0; i < nn; i++) { for(j=0; j <= i; j++,ij++) { etemp =0.0; for(k=_try,kk=1; k < last+1; k++,kk++) etemp += btemp[kk] * diism[k].fock[n][m][i][j]; spin_info[n].scf_spin[m].fock_pac[ij] = etemp; } } } } } } } /* if(iter-1) */ } }} // namespace psi::cscf psi3/src/bin/cscf/dmat.cc0000644000101500007650000002035011112564564013717 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.8 2002/04/03 02:06:01 janssen * Finish changes to use new include paths for libraries. * /* Revision 1.7 2000/12/05 19:40:03 sbrown /* Added Unrestricted Kohn-Sham DFT. /* /* Revision 1.6 2000/07/10 18:03:30 sbrown /* Enabling cscf to send over just the occupied SCF eigenvector for DFT /* calculations. Only done for the RHF case. /* /* Revision 1.5 2000/07/06 20:04:01 sbrown /* Added capabilities to send the eigenvector to cints for DFT /* calculations. /* /* Revision 1.4 2000/06/26 19:04:09 sbrown /* Added DFT capapbilities to interface with cints using direct scf /* /* Revision 1.3 2000/06/22 22:14:59 evaleev /* Modifications for KS DFT. Reading in XC Fock matrices and XC energy in formg_direct need to be uncommented (at present those are not produced by CINTS yet). /* /* Revision 1.2 2000/06/02 13:32:15 kenny /* /* /* Added dynamic integral accuracy cutoffs for direct scf. Added a few global /* variables. Added keyword 'dyn_acc'; true--use dynamic cutoffs. Use of /* 'dconv' and 'delta' to keep track of density convergence somewhat awkward, /* but avoids problems when accuracy is switched and we have to wipe out density /* matrices. Also added error message and exit if direct rohf singlet is /* attempted since it doesn't work. /* --Joe Kenny /* /* Revision 1.1.1.1 2000/02/04 22:52:29 evaleev /* Started PSI 3 repository /* /* Revision 1.6 1999/11/17 19:40:45 evaleev /* Made all the adjustments necessary to have direct UHF working. Still doesn't work though.. /* /* Revision 1.5 1999/11/02 23:23:42 evaleev /* Commented out a line in dmat.. /* /* Revision 1.4 1999/11/02 18:10:13 evaleev /* Direct SCF improved /* /* Revision 1.3 1999/10/22 19:47:18 evaleev /* A direct SCF-enabled version (set DIRECT_SCF=TRUE in input.dat). /* /* Revision 1.2 1999/08/17 19:04:14 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:25 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed /* * Revision 1.1 1991/06/15 20:22:21 seidl * Initial revision * */ #define EXTERN #include #include "includes.h" #include "common.h" namespace psi { namespace cscf { void dmat() { int i,j,k,l,ij,jj,kk,nn; int max, off, ntri, joff; int ndocc,nsocc,nhocc; double ptempc,ptempo,ctmp; double **cmat; double *dmat; extern double delta; struct symm *s; for (l=0; l < num_ir ; l++) { s = &scf_info[l]; if (nn=s->num_so) { ndocc = s->nclosed; nsocc = s->nopen; nhocc = 0; if(s->nhalf) nhocc=1; for (i=ij=0; i < nn ; i++ ) { for (j=0; j < i; j++,ij++) { ptempc=ptempo=0.0; for (k=0; k < ndocc ; k++) ptempc += 4.0*s->cmat[i][k]*s->cmat[j][k]; for (k=ndocc; k < ndocc+nsocc ; k++) ptempo += 2.0*s->occ_num[k]*s->cmat[i][k]*s->cmat[j][k]; for (k=ndocc+nsocc; k < ndocc+nsocc+nhocc ; k++) ptempo += 2.0*s->occ_num[k]*s->cmat[i][k]*s->cmat[j][k]; if(iopen) { s->dpmato[ij] = ptempo - s->pmato[ij]; s->pmato[ij] = ptempo; } s->dpmat[ij] = ptempc+ptempo - s->pmat[ij]; s->pmat[ij] = ptempc+ptempo; } ptempc=ptempo=0.0; for (k=0; k < ndocc ; k++) { ctmp=s->cmat[i][k]; ptempc += 2.0*ctmp*ctmp; } for (k=ndocc; k < ndocc+nsocc ; k++) { ctmp=s->cmat[i][k]; ptempo += ctmp*ctmp*s->occ_num[k]; } for (k=ndocc+nsocc; k < ndocc+nsocc+nhocc ; k++) { ctmp=s->cmat[i][k]; ptempo += ctmp*ctmp*s->occ_num[k]; } if(iopen) { s->dpmato[ij] = ptempo - s->pmato[ij]; s->pmato[ij] = ptempo; } s->dpmat[ij] = ptempc+ptempo - s->pmat[ij]; s->pmat[ij] = ptempc+ptempo; ij++; } if(print & 4) { fprintf(outfile, "\ntotal density matrix for irrep %s",s->irrep_label); print_array(s->pmat,nn,outfile); print_array(s->dpmat,nn,outfile); if(iopen) { fprintf(outfile,"\nopen-shell density matrix for irrep %s", s->irrep_label); print_array(s->pmato,nn,outfile); print_array(s->dpmato,nn,outfile); } } } } /*----------------------- Handle direct SCF here -----------------------*/ if(direct_scf) { /*decide what accuracy to request for direct_scf*/ if (dyn_acc) { if((iter<30)&&(tight_ints==0)&&(delta>1.0E-5)) { eri_cutoff=1.0E-6; } if((tight_ints==0)&&(delta<=1.0E-5)){ fprintf(outfile," Switching to full integral accuracy\n"); acc_switch=1; tight_ints=1; eri_cutoff=1.0E-14; } } psio_open(itapDSCF,PSIO_OPEN_NEW); psio_write_entry(itapDSCF, "Integrals cutoff", (char *) &eri_cutoff, sizeof(double)); ntri = nbasis*(nbasis+1)/2; /*--- Get full dpmat ---*/ dmat = init_array(ntri); for(i=0;inum_so) { ndocc = s->nclosed; if (l == opblk) ndocc++; ij=0; for (i=0; i < n ; i++) { for (j=0; j < i; j++,ij++) { ptempc=0.0; for (k=0; k < ndocc ; k++) { ptempc += 4.0*s->cmat[i][k]*s->cmat[j][k]; } if(opblk==opblk1) s->pmato2[ij] = ptempc; else s->pmat2[ij] = ptempc; } ptempc=0.0; for (k=0; k < ndocc ; k++) { ctmp=s->cmat[i][k]; ptempc += 2.0*ctmp*ctmp; } if(opblk==opblk1) s->pmato2[ij] = ptempc; else s->pmat2[ij] = ptempc; ij++; } if(print & 4) { if(opblk==opblk1) { fprintf(outfile, "\ndensity matrix 1 for irrep %s",s->irrep_label); print_array(s->pmato2,n,outfile); } else { fprintf(outfile, "\ndensity matrix 1 for irrep %s",s->irrep_label); print_array(s->pmat2,n,outfile); } } } } } }} // namespace psi::cscf psi3/src/bin/cscf/dmatuhf.cc0000644000101500007650000002161411112564564014426 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.6 2004/05/03 04:32:40 crawdad * Major mods based on merge with stable psi-3-2-1 release. Note that this * version has not been fully tested and some scf-optn test cases do not run * correctly beccause of changes in mid-March 2004 to optking. * -TDC * /* Revision 1.5.8.1 2004/04/10 19:41:32 crawdad /* Fixed the DIIS code for UHF cases. The new version uses the Pulay scheme of /* building the error vector in the AO basis as FDS-SDF, followed by xformation /* into the orthogonal AO basis. This code converges faster for test cases /* like cc8, but fails for linearly dependent basis sets for unknown reasons. /* -TDC /* /* Revision 1.5 2002/04/03 02:06:01 janssen /* Finish changes to use new include paths for libraries. /* /* Revision 1.4 2000/12/05 19:40:03 sbrown /* Added Unrestricted Kohn-Sham DFT. /* /* Revision 1.3 2000/06/22 22:15:00 evaleev /* Modifications for KS DFT. Reading in XC Fock matrices and XC energy in formg_direct need to be uncommented (at present those are not produced by CINTS yet). /* /* Revision 1.2 2000/06/02 13:32:15 kenny /* /* /* Added dynamic integral accuracy cutoffs for direct scf. Added a few global /* variables. Added keyword 'dyn_acc'; true--use dynamic cutoffs. Use of /* 'dconv' and 'delta' to keep track of density convergence somewhat awkward, /* but avoids problems when accuracy is switched and we have to wipe out density /* matrices. Also added error message and exit if direct rohf singlet is /* attempted since it doesn't work. /* --Joe Kenny /* /* Revision 1.1.1.1 2000/02/04 22:52:33 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/11/17 19:40:46 evaleev /* Made all the adjustments necessary to have direct UHF working. Still doesn't work though.. /* /* Revision 1.1 1999/11/02 23:55:56 sbrown /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.1.1.1 1999/04/12 16:59:25 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed /* * Revision 1.1 1991/06/15 20:22:21 seidl * Initial revision * */ #define EXTERN #include #include "includes.h" #include "common.h" namespace psi { namespace cscf { void dmatuhf() { int i,j,k,l,ij,n,m,jj,kk; int max, off, ntri; int ndocc; int nn; double ptemp,ctmp; struct symm *s; struct spin *sp; double *dmat; double **cmat; for(m = 0; m < 2; m++){ for (l=0; l < num_ir ; l++) { sp = &spin_info[m]; if (n=scf_info[l].num_so) { ndocc = sp->scf_spin[l].noccup; for (i=ij=0; i < n ; i++ ) { /*-------------------------------------- OFF DIAGONAL ELEMENTS -------------------------------------*/ for (j=0; j scf_spin[l].cmat[i][k] *sp->scf_spin[l].cmat[j][k]; sp->scf_spin[l].dpmat[ij] = ptemp - sp->scf_spin[l].pmat[ij]; sp->scf_spin[l].pmat[ij] = ptemp; } /*---------------------------------- DIAGONAL ELEMENTS --------------------------------*/ ptemp = 0.0; for (k=0; k < ndocc ; k++) { ctmp=sp->scf_spin[l].cmat[i][k]; ptemp += ctmp*ctmp; } sp->scf_spin[l].dpmat[ij] = ptemp - sp->scf_spin[l].pmat[ij]; sp->scf_spin[l].pmat[ij] = ptemp; ij++; } if(print & 4) { fprintf(outfile, "\nSpin case %d density matrix for irrep %s",m,scf_info[l].irrep_label); print_array(spin_info[m].scf_spin[l].pmat, scf_info[l].num_so,outfile); } } } } for(l=0;l < num_ir; l++){ if(nn=scf_info[l].num_so) { for(ij=0;ij1.0E-5)) { eri_cutoff=1.0E-6; } if((tight_ints==0)&&(delta<=1.0E-5)){ fprintf(outfile," Switching to full integral accuracy\n"); acc_switch=1; tight_ints=1; eri_cutoff=1.0E-14; } } psio_open(itapDSCF, PSIO_OPEN_NEW); psio_write_entry(itapDSCF, "Integrals cutoff", (char *) &eri_cutoff, sizeof(double)); ntri = nbasis*(nbasis+1)/2; dmat = init_array(ntri); /*--- Get full dpmata ---*/ for(i=0;inum_so) { for (i=ij=0; i < nn ; i++) { for (j = 0 ; j <= i ; j++,ij++) { oe_energy += 0.5*s->pmat[ij]*s->hmat[ij]; if(uhf) { te_energy += 0.5*((spin_info[0].scf_spin[k].pmat[ij] *spin_info[0].scf_spin[k].fock_pac[ij]) +(spin_info[1].scf_spin[k].pmat[ij] *spin_info[1].scf_spin[k].fock_pac[ij])); } else if(!iopen) { te_energy += 0.5*s->pmat[ij]*s->fock_pac[ij]; } else { te_energy += 0.5*s->pmat[ij]*s->fock_pac[ij] - 0.5*s->pmato[ij]*s->gmato[ij]; } } } if (iter) { if(uhf){ for (i = 0; i < ioff[nn] ; i++) { dtmp = spin_info[0].scf_spin[k].dpmat[i]; dtmp1 = spin_info[1].scf_spin[k].dpmat[i]; delta += dtmp*dtmp; delta += dtmp1*dtmp1; } } else { for (i = 0; i < ioff[nn] ; i++) { dtmp = s->dpmat[i]; delta += dtmp*dtmp; } } } } } neelec = oe_energy + te_energy; /*JPK(6/1/00) dynamic integral accuracy modifications*/ dconv = sqrt(delta)/mxcoef2; delta = dconv; if(acc_switch==1 || iter==0) { delta=1.0; acc_switch=0; } coulomb_energy = neelec; if (ksdft){ neelec += exc; /*printf("XC_energy = %10.10lf",exc);*/ } etot = repnuc + neelec; edif = eelec - neelec; ediff = edif; if (!iter) fprintf(outfile,"\n iter total energy delta E delta P diiser\n"); fprintf(outfile, "%5d %20.10f %15.6e %15.6e %15.6e\n", ++iter, etot, edif, dconv, diiser); if (print & 2) { fprintf(outfile, "one-electron energy = %25.15f\n", oe_energy); fprintf(outfile, "two-electron energy = %25.15f\n", te_energy); fprintf(outfile, "coulomb energy = %25.15f\n",coulomb_energy); fprintf(outfile, "* SCF total energy = %25.15f\n", etot); } fflush(outfile); diiser=0.0; if ( delta < plimit && iter > 1) { converged=1; if(!iopen || iopen && fock_typ >= 2) cleanup(); } eelec = neelec; cinext = pow(10.0,-twocut); if (delta < cinext && delta && !converged) { twocut += incr; return(1); } else return(0); } }} // namespace psi::cscf psi3/src/bin/cscf/errchk.cc0000644000101500007650000000237711112564564014261 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2002/03/25 02:17:36 janssen * Get rid of tmpl. Use new naming scheme for libipv1 includes. * /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/08/17 19:04:14 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #include #include namespace psi { namespace cscf { void errchk(int errcod, const char* token) { if (errcod) { fprintf(stderr,"ERROR: %s\n",ip_error_message(errcod)); fprintf(stderr,"TOKEN: %s\n",token); } } }} // namespace psi::cscf psi3/src/bin/cscf/findit.cc0000644000101500007650000001752211116052413014243 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2002/12/06 15:50:32 crawdad * Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as * necessary. This is new for the PSI3 execution driver. * -TDC * /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.3 1999/08/17 19:04:14 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.2 1999/07/24 18:13:51 crawdad /* Renamed variable "nint" to "cscf_nint" to avoid DEC compiler type conflict. /* -Daniel /* * Revision 1.1.1.1 1999/04/12 16:59:26 evaleev * Added a version of CSCF that can work with CINTS. * -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { extern double *pa, *pb; extern int *inext; extern unsigned int *lbij,*lbkl; extern int intmx; static int old_nint=25920; void findit(int ii, int jj, int kk, int ll, int ism, int ksm, double value, int iab) { register int i,j; unsigned int *ijtmp, *kltmp; int *nxtmp; int p1,p2,p3; int noi,nok; int next,start; int lij,lkl; int keep=128; int keep2=127; int d2i = sizeof(double)/sizeof(int); double *patmp, *pbtmp; if(nbasis > 150) { keep=1024; keep2=1023; } /* if(!inext) inext = (int *) init_array((int) (keep+intmx)/d2i); */ if (!inext) inext = (int *) init_int_array(keep+intmx); noi = scf_info[ism].nopen+scf_info[ism].nhalf; nok = scf_info[ksm].nopen+scf_info[ksm].nhalf; lij = ioff[ii]+jj; lkl = ioff[kk]+ll; if(!cscf_nint) { //bzero(inext,sizeof(int)*old_nint); memset(inext,'\0',sizeof(int)*old_nint); //bzero(&inext[intmx],sizeof(int)*keep); memset(&inext[intmx],'\0',sizeof(int)*keep); } start = 2*lij + lkl; start = (start & keep2) + intmx; L1: next=inext[start]; if(next) { if (lbij[next-1] == lij && lbkl[next-1] == lkl) i=next-1; else { start = next; goto L1; } } else { i=cscf_nint; if(cscf_nint >= intmx) { fprintf(outfile,"\n increasing size of buffers in findit\n"); fprintf(outfile," intmx was %d, is %d\n",intmx,intmx*2); fflush(outfile); intmx*=2; /* i don't use realloc because strange things were happening */ /* nxtmp = (int *) init_array((int) (keep+intmx)/d2i); */ nxtmp = (int *) init_int_array(keep+intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(inext,nxtmp,(int)sizeof(int)*(intmx/2)); */ memcpy(nxtmp,inext,(int)sizeof(int)*(intmx/2)); for(j=0; j < keep ; j++) nxtmp[j+intmx]=inext[j+intmx/2]; free(inext); inext=nxtmp; /* ijtmp = (unsigned int *) init_array(intmx/d2i); */ ijtmp = (unsigned int *) init_int_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(lbij,ijtmp,sizeof(int)*(intmx/2)); */ memcpy(ijtmp,lbij,sizeof(int)*(intmx/2)); free(lbij); lbij = ijtmp; /* kltmp = (unsigned int *) init_array(intmx/d2i); */ kltmp = (unsigned int *) init_int_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(lbkl,kltmp,sizeof(int)*(intmx/2)); */ memcpy(kltmp,lbkl,sizeof(int)*(intmx/2)); free(lbkl); lbkl = kltmp; patmp = (double *) init_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(pa,patmp,sizeof(double)*(intmx/2)); */ memcpy(patmp,pa,sizeof(double)*(intmx/2)); free(pa); pa = patmp; pbtmp = (double *) init_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(pb,pbtmp,sizeof(double)*(intmx/2)); */ memcpy(pbtmp,pb,sizeof(double)*(intmx/2)); free(pb); pb = pbtmp; if(inext==NULL || lbij==NULL || lbkl==NULL) { fprintf(outfile,"\n pathological problems with realloc in findit\n"); fprintf(outfile," try upping intmx to %d\n",intmx); fflush(outfile); exit(PSI_RETURN_FAILURE); } start = 2*lij + lkl; start = (start & keep2) + intmx; } inext[start] = ++cscf_nint; lbij[i] = lij; lbkl[i] = lkl; pa[i] = pb[i] = 0.0; } value = (lij == lkl) ? value*0.5 : value; /* EFV 10/27/98 fprintf(outfile,"%3d %3d %3d %3d %3d %3d %lf\n",lbij[i],lbkl[i],ii,jj,kk,ll,value); */ switch(iab) { case 1: pa[i] += value; if(noi && nok) { if(special) { p1 = MAX0(scf_info[ism].os_num,scf_info[ksm].os_num); p2 = MIN0(scf_info[ism].os_num,scf_info[ksm].os_num); p3 = ioff[p1]+p2; pb[i] += alpha[p3]*value; } } break; case 2: pa[i] -= 0.25*value; if(noi && nok) { if(hsos) pb[i] += 0.25*value; else if(singlet) { if (ism != ksm) pb[i] -= 0.75*value; else pb[i] += 0.25*value; } else if(twocon) { if (ism != ksm) pb[i] += 0.25*value; } else { p1 = MAX0(scf_info[ism].os_num,scf_info[ksm].os_num); p2 = MIN0(scf_info[ism].os_num,scf_info[ksm].os_num); p3 = ioff[p1]+p2; pb[i] += 0.25*beta[p3]*value; } } break; case 3: pa[i] += 0.75*value; if(noi && nok) { if(hsos) pb[i] += 0.25*value; else if(singlet) { if (ism != ksm) pb[i] -= 0.75*value; else pb[i] += 0.25*value; } else if(twocon) { if (ism != ksm) pb[i] += 0.25*value; } else { p1 = MAX0(scf_info[ism].os_num,scf_info[ksm].os_num); p2 = MIN0(scf_info[ism].os_num,scf_info[ksm].os_num); p3 = ioff[p1]+p2; pb[i] += (alpha[p3] + 0.25*beta[p3])*value; } } break; case 4: pa[i] -= 0.5*value; if(noi && nok) { if(hsos) pb[i] = 0.5*value; else if(singlet) { if (ism != ksm) pb[i] -= 1.5*value; else pb[i] += 0.5*value; } else if(twocon) { if (ism != ksm) pb[i] += 0.5*value; } else { p1 = MAX0(scf_info[ism].os_num,scf_info[ksm].os_num); p2 = MIN0(scf_info[ism].os_num,scf_info[ksm].os_num); p3 = ioff[p1]+p2; pb[i] += 0.5*beta[p3]*value; } } break; case 5: pa[i] = 0.5*value; if(noi && nok) { if(hsos) pb[i] = 0.5*value; else if(singlet) { if (ism != ksm) pb[i] = -1.5*value; else pb[i] = 0.5*value; } else if(twocon) { if (ism != ksm) pb[i] += 0.5*value; } else { p1 = MAX0(scf_info[ism].os_num,scf_info[ksm].os_num); p2 = MIN0(scf_info[ism].os_num,scf_info[ksm].os_num); p3 = ioff[p1]+p2; pb[i] = (alpha[p3] + 0.5*beta[p3])*value; } } } old_nint=cscf_nint; } }} // namespace psi::cscf psi3/src/bin/cscf/findit_uhf.cc0000644000101500007650000001422711116052413015104 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2002/12/06 15:50:32 crawdad * Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as * necessary. This is new for the PSI3 execution driver. * -TDC * /* Revision 1.1.1.1 2000/02/04 22:52:33 evaleev /* Started PSI 3 repository /* /* Revision 1.1 1999/11/02 23:55:57 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed /* * Revision 1.3 1996/11/26 05:20:52 sherrill * Add casts in front of init_int_array() calls to avoid compiler warnings * (really should include libciomr everywhere instead but that causes more * warnings because wwritw's need casts to char *). Also fixed problem * where phase() was trying to free unallocated memory. * * Revision 1.2 1995/11/07 19:24:05 sherrill * Replace all initializations of integer arrays with calls to init_int_array(). * There had been problems with using init_array() because the division by * the doubles-to-int factor was rounding off (integer division). * * Revision 1.1 1991/06/15 20:22:25 seidl * Initial revision * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { extern double *pa, *pb; extern int *inext; extern unsigned int *lbij,*lbkl; extern int intmx; static int old_nint=25920; void findit_uhf(int ii, int jj, int kk, int ll, int ism, int ksm, double value, int iab) { register int i,j; unsigned int *ijtmp, *kltmp; int *nxtmp; int p1,p2,p3; int noi,nok; int next,start; int lij,lkl; int keep=128; int keep2=127; int d2i = sizeof(double)/sizeof(int); double *patmp, *pbtmp; if(nbasis > 150) { keep=1024; keep2=1023; } /* if(!inext) inext = (int *) init_array((int) (keep+intmx)/d2i); */ if (!inext) inext = (int *) init_int_array(keep+intmx); noi = scf_info[ism].nopen+scf_info[ism].nhalf; nok = scf_info[ksm].nopen+scf_info[ksm].nhalf; lij = ioff[ii]+jj; lkl = ioff[kk]+ll; if(!cscf_nint) { //bzero(inext,sizeof(int)*old_nint); memset(inext,'\0',sizeof(int)*old_nint); //bzero(&inext[intmx],sizeof(int)*keep); memset(&inext[intmx],'\0',sizeof(int)*keep); } start = 2*lij + lkl; start = (start & keep2) + intmx; L1: next=inext[start]; if(next) { if (lbij[next-1] == lij && lbkl[next-1] == lkl) i=next-1; else { start = next; goto L1; } } else { i=cscf_nint; if(cscf_nint >= intmx) { fprintf(outfile,"\n increasing size of buffers in findit\n"); fprintf(outfile," intmx was %d, is %d\n",intmx,intmx*2); fflush(outfile); intmx*=2; /* i don't use realloc because strange things were happening */ /* nxtmp = (int *) init_array((int) (keep+intmx)/d2i); */ nxtmp = (int *) init_int_array(keep+intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(inext,nxtmp,(int)sizeof(int)*(intmx/2)); */ memcpy(nxtmp,inext,(int)sizeof(int)*(intmx/2)); for(j=0; j < keep ; j++) nxtmp[j+intmx]=inext[j+intmx/2]; free(inext); inext=nxtmp; /* ijtmp = (unsigned int *) init_array(intmx/d2i); */ ijtmp = (unsigned int *) init_int_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(lbij,ijtmp,sizeof(int)*(intmx/2)); */ memcpy(ijtmp,lbij,sizeof(int)*(intmx/2)); free(lbij); lbij = ijtmp; /* kltmp = (unsigned int *) init_array(intmx/d2i); */ kltmp = (unsigned int *) init_int_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(lbkl,kltmp,sizeof(int)*(intmx/2)); */ memcpy(kltmp,lbkl,sizeof(int)*(intmx/2)); free(lbkl); lbkl = kltmp; patmp = (double *) init_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(pa,patmp,sizeof(double)*(intmx/2)); */ memcpy(patmp,pa,sizeof(double)*(intmx/2)); free(pa); pa = patmp; pbtmp = (double *) init_array(intmx); /* Jeff Hammond: bcopy(s,d,n) -> memcpy(d,s,n) bcopy(pb,pbtmp,sizeof(double)*(intmx/2)); */ memcpy(pbtmp,pb,sizeof(double)*(intmx/2)); free(pb); pb = pbtmp; if(inext==NULL || lbij==NULL || lbkl==NULL) { fprintf(outfile,"\n pathological problems with realloc in findit\n"); fprintf(outfile," try upping intmx to %d\n",intmx); fflush(outfile); exit(PSI_RETURN_FAILURE); } start = 2*lij + lkl; start = (start & keep2) + intmx; } inext[start] = ++cscf_nint; lbij[i] = lij; lbkl[i] = lkl; pa[i] = pb[i] = 0.0; } /*value = (lij == lkl) ? value*0.5 : value;*/ switch(iab) { case 1: pa[i] += value; break; case 2: pb[i] += 0.50*value; break; case 3: pa[i] += value; pb[i] += 0.50*value; break; case 4: pa[i] +=value; pb[i] +=value; break; case 5: pb[i] +=value; break; } old_nint=cscf_nint; } }} // namespace psi::cscf psi3/src/bin/cscf/form_vec.cc0000644000101500007650000001046511112564564014600 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.9 2004/05/03 04:32:40 crawdad * Major mods based on merge with stable psi-3-2-1 release. Note that this * version has not been fully tested and some scf-optn test cases do not run * correctly beccause of changes in mid-March 2004 to optking. * -TDC * /* Revision 1.8.8.1 2004/04/10 19:41:32 crawdad /* Fixed the DIIS code for UHF cases. The new version uses the Pulay scheme of /* building the error vector in the AO basis as FDS-SDF, followed by xformation /* into the orthogonal AO basis. This code converges faster for test cases /* like cc8, but fails for linearly dependent basis sets for unknown reasons. /* -TDC /* /* Revision 1.8 2002/04/03 02:06:01 janssen /* Finish changes to use new include paths for libraries. /* /* Revision 1.7 2002/03/25 02:51:57 janssen /* libciomr.h -> libciomr/libciomr.h /* /* Revision 1.6 2000/10/13 19:51:20 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.5 2000/07/10 18:03:31 sbrown /* Enabling cscf to send over just the occupied SCF eigenvector for DFT /* calculations. Only done for the RHF case. /* /* Revision 1.4 2000/07/06 21:06:05 sbrown /* Fixed a seg fault inf form_vec.c /* /* Revision 1.3 2000/07/06 20:04:01 sbrown /* Added capabilities to send the eigenvector to cints for DFT /* calculations. /* /* Revision 1.2 2000/07/05 21:47:30 sbrown /* Enabled the code to export the SCF eigenvector to CINTS when doing DFT. /* /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" #include #include namespace psi { namespace cscf { void form_vec() { int i,nn,num_mo; int j,k,l; double **ctrans; double **temp; double **sqhmat; double **sqhmat2; double tol=1.0e-20; struct symm *s; ctrans = (double **) init_matrix(nsfmax,nsfmax); temp = (double **) init_matrix(nsfmax,nsfmax); sqhmat = (double **) init_matrix(nsfmax,nsfmax); sqhmat2 = (double **) init_matrix(nsfmax,nsfmax); double* hevals = init_array(nsfmax); for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; tri_to_sq(s->hmat,sqhmat,nn); mmult(s->sahalf,1,sqhmat,0,temp,0,num_mo,nn,nn,0); mmult(temp,0,s->sahalf,0,sqhmat2,0,num_mo,nn,num_mo,0); // This hack is borrowed from MPQC. Important enough to implement! if (hcore_guess == 1 && num_mo == nn) { // MPQC uses eigenvalues of the core hamiltonian in a nonorthogonal basis // to assign occupations. It seems to work better than the usual method. // right now this is an undocumented capability and not enabled by default sq_rsp(num_mo,num_mo,sqhmat,s->hevals,1,ctrans,tol); sq_rsp(num_mo,num_mo,sqhmat2,hevals,1,ctrans,tol); } else { sq_rsp(num_mo,num_mo,sqhmat2,s->hevals,1,ctrans,tol); } mxmb(s->sahalf,1,0,ctrans,1,0,s->cmat,1,0,nn,num_mo,num_mo); for(k=0;k < nn; k++) for(l=0;l < num_mo; l++) s->sahalf[k][l]=s->cmat[k][l]; if (print & 2) { double* occs = init_array(num_mo); fprintf(outfile, "\nguess vector for irrep %s\n", s->irrep_label); //print_mat(s->cmat, nn, num_mo, outfile); eigout(s->cmat, s->hevals, occs, nn, num_mo, outfile); free(occs); } } } free(hevals); free_matrix(ctrans,nsfmax); free_matrix(temp,nsfmax); free_matrix(sqhmat,nsfmax); free_matrix(sqhmat2,nsfmax); } }} // namespace psi::cscf psi3/src/bin/cscf/formg2.cc0000644000101500007650000001443311112564564014173 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2001/06/29 20:39:28 evaleev * Modified cscf to use libpsio to store supermatrix files. * /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { static double *gtmp2,*gtmpo2,*ptmp2,*ptmpo2; extern int num_bufs_c,num_bufs_o,readflgc,readflgo; extern struct c_pkints { int ij; int kl; double pval; } *c_outbuf; extern struct o_pkints { int ij; int kl; double pval; double qval; } *o_outbuf; extern int lasto,lastc; extern int wherec; extern int whereo; extern int *int_nums_c; extern int *int_nums_o; void formg_two(int iju, int* optest) { register int i,j,k,joff,nn; register int ij,kl; int ilast,num; int tmpsiz; double dotest,tmpval,qtemp; struct o_pkints *o_temp; struct c_pkints *c_temp; tmpsiz=ioff[nbasis]; if(gtmp2 == NULL) { gtmp2 = (double *) init_array(tmpsiz); gtmpo2 = (double *) init_array(tmpsiz); ptmp2 = (double *) init_array(tmpsiz); ptmpo2 = (double *) init_array(tmpsiz); } else { //bzero(gtmp2,sizeof(double)*tmpsiz); memset(gtmp2,'\0',sizeof(double)*tmpsiz); //bzero(gtmpo2,sizeof(double)*tmpsiz); memset(gtmpo2,'\0',sizeof(double)*tmpsiz); } for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) for(j=0; j <= i ; j++) { #if NEW2C ptmp2[ioff[i+joff]+j+joff] = scf_info[k].dpmat[ioff[i]+j]; ptmpo2[ioff[i+joff]+j+joff] = scf_info[k].dpmato[ioff[i]+j]; #else ptmp2[ioff[i+joff]+j+joff] = scf_info[k].pmat[ioff[i]+j]; ptmpo2[ioff[i+joff]+j+joff] = scf_info[k].pmato[ioff[i]+j]; #endif } joff += nn; } } if(!wherec) { /* int_nums_o = (int *) init_array(num_bufs_o+1); */ int_nums_o = (int *) init_int_array(num_bufs_o+1); /* int_nums_c = (int *) init_array(num_bufs_c+1); */ int_nums_c = (int *) init_int_array(num_bufs_c+1); for(i=1; i < num_bufs_o ; i++) int_nums_o[i]=maxbuf; for(i=1; i < num_bufs_c ; i++) int_nums_c[i]=maxbuf; int_nums_o[num_bufs_o]=lasto; int_nums_c[num_bufs_c]=lastc; whereo=num_bufs_o; wherec=num_bufs_c; } num=int_nums_o[whereo]; for (j=0; j < num_bufs_o ; j++) { o_temp = o_outbuf; for (i=num; i ; i--,o_temp++) { ij = (*o_temp).ij; kl = (*o_temp).kl; tmpval = (*o_temp).pval; dotest = (*o_temp).qval; gtmp2[ij] += ptmp2[kl]*tmpval; gtmp2[kl] += ptmp2[ij]*tmpval; if(optest[ij] && optest[kl]) { if (ij < iju) { gtmpo2[ij] += alpha1*ptmpo2[kl]*tmpval; gtmpo2[kl] += alpha1*ptmpo2[ij]*tmpval; } else if (kl < iju) { qtemp = tmpval + alpha2*dotest; gtmpo2[ij] += ptmpo2[kl]*qtemp; gtmpo2[kl] += ptmpo2[ij]*qtemp; } else { gtmpo2[ij] += alpha3*ptmpo2[kl]*tmpval; gtmpo2[kl] += alpha3*ptmpo2[ij]*tmpval; } } } if (readflgo && j < num_bufs_o-1) { if(whereo==num_bufs_o) { PKmat.bufpos = PSIO_ZERO; whereo=0; } whereo++; num=int_nums_o[whereo]; psio_read(PKmat.unit, PKmat.key, (char *) o_outbuf, sizeof(struct o_pkints)*num, PKmat.bufpos, &(PKmat.bufpos)); } } num=int_nums_c[wherec]; for (j=0; j < num_bufs_c ; j++) { c_temp = c_outbuf; for (i=num; i ; i--,c_temp++) { ij = (*c_temp).ij; kl = (*c_temp).kl; tmpval = (*c_temp).pval; gtmp2[ij] += ptmp2[kl]*tmpval; gtmp2[kl] += ptmp2[ij]*tmpval; if(optest[ij] && optest[kl]) { if (ij < iju) { gtmpo2[ij] += alpha1*ptmpo2[kl]*tmpval; gtmpo2[kl] += alpha1*ptmpo2[ij]*tmpval; } else if (kl < iju) { gtmpo2[ij] += ptmpo2[kl]*tmpval; gtmpo2[kl] += ptmpo2[ij]*tmpval; } else { gtmpo2[ij] += alpha3*ptmpo2[kl]*tmpval; gtmpo2[kl] += alpha3*ptmpo2[ij]*tmpval; } } } if (readflgc && j < num_bufs_c-1) { if(wherec==num_bufs_c) { Pmat.bufpos = PSIO_ZERO; wherec=0; } wherec++; num=int_nums_c[wherec]; psio_read(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*num, Pmat.bufpos, &(Pmat.bufpos)); } } for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) for(j=0; j <= i ; j++) { #if NEW2C scf_info[k].gmat[ioff[i]+j] += gtmp2[ioff[i+joff]+j+joff]; scf_info[k].gmato[ioff[i]+j] += gtmpo2[ioff[i+joff]+j+joff]; #else scf_info[k].gmat[ioff[i]+j] = gtmp2[ioff[i+joff]+j+joff]; scf_info[k].gmato[ioff[i]+j] = gtmpo2[ioff[i+joff]+j+joff]; #endif } joff += nn; if(print & 32) { fprintf(outfile,"\n gmat for irrep %s\n",scf_info[k].irrep_label); print_array(scf_info[k].gmat,nn,outfile); fprintf(outfile,"\n gmato for irrep %s\n",scf_info[k].irrep_label); print_array(scf_info[k].gmato,nn,outfile); } } } } }} // namespace psi::cscf psi3/src/bin/cscf/formg_direct.cc0000644000101500007650000001260511112564564015442 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ #define EXTERN #include #include "includes.h" #include "common.h" namespace psi { namespace cscf { void formg_direct() { double *gtmp; int stat; int i,j,k,jj,kk,l,off,joff,nn,max; int ntri = ioff[nbasis]; double den_percent; /*----------------------------------- Call CINTS to do all the dirty job Check if it ran fine -----------------------------------*/ if(exitflag) exit(PSI_RETURN_FAILURE); stat = system("cints --fock"); switch (stat) { case 0: /* everything is OK */ break; default: /* Something went wrong */ fprintf(outfile," formg_direct: System call to CINTS failed. Check to see if it's in your PATH\n"); fprintf(stderr,"System call to CINTS failed. Check to see if it's in your PATH.\n"); exit(PSI_RETURN_FAILURE); } gtmp = (double *) init_array(ntri); /*---------------------------------------------------- Zero-out ERI-dependent portions of the Fock matrix if ERI accuracy has just been switched (see dmat.c) ----------------------------------------------------*/ if(acc_switch) { if (uhf) { for(k=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { spin_info[0].scf_spin[k].gmat[ioff[i]+j] = 0.0; spin_info[1].scf_spin[k].gmat[ioff[i]+j] = 0.0; } } } } } else if (iopen) { for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { scf_info[k].gmat[ioff[i]+j] = 0.0; scf_info[k].gmato[ioff[i]+j] = 0.0; } } } } } else { for(i=0;i 1E-3){ fprintf(outfile,"\nWarning, Numerically Integrated Density Inaccurate"); fprintf(outfile,"\nNum of Electrons = %d",nelec); fprintf(outfile,"\nNum from Trace = %5.5lf",den_trace); fprintf(outfile,"\nAbsolute Error = %%%5.5lf\n\n",den_percent); } } if (uhf) { psio_read_entry(itapDSCF, "Alpha JX G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { spin_info[0].scf_spin[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } psio_read_entry(itapDSCF, "Beta JX G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { spin_info[1].scf_spin[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } if (ksdft) { psio_read_entry(itapDSCF, "Alpha XC G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { spin_info[0].scf_spin[k].xcmat[ioff[i]+j] = gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } psio_read_entry(itapDSCF, "Beta XC G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { spin_info[1].scf_spin[k].xcmat[ioff[i]+j] = gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } } } else { psio_read_entry(itapDSCF, "Total JX G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { scf_info[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } if (ksdft) { psio_read_entry(itapDSCF, "Total XC G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { scf_info[k].xcmat[ioff[i]+j] = gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } } if (iopen) { psio_read_entry(itapDSCF, "Open-shell JX G-matrix", (char *) gtmp, sizeof(double)*ntri); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { for(j=0; j <= i ; j++) { scf_info[k].gmato[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; } } } joff += nn; } } } psio_close(itapDSCF, 1); free(gtmp); return; } }} // namespace psi::cscf psi3/src/bin/cscf/formgc.cc0000644000101500007650000000606511112564564014256 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2001/06/29 20:39:29 evaleev * Modified cscf to use libpsio to store supermatrix files. * /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.3 1999/10/22 19:47:18 evaleev /* A direct SCF-enabled version (set DIRECT_SCF=TRUE in input.dat). /* /* Revision 1.2 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { static double *gtmp,*ptmp; extern struct c_pkints { int ij; int kl; double pval; } *c_outbuf; extern int last; static int where=0; static int *int_nums; void formg_closed() { register int i,j,k,joff,nn; register int ij,kl; int ilast,num; int tmpsiz; double tmpval; struct c_pkints *ctmp; tmpsiz = ioff[nbasis]; if(gtmp == NULL) { gtmp = (double *) init_array(tmpsiz); ptmp = (double *) init_array(tmpsiz); } else memset(gtmp,'\0',sizeof(double)*tmpsiz); for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) for(j=0; j <= i ; j++) ptmp[ioff[i+joff]+j+joff] = scf_info[k].dpmat[ioff[i]+j]; joff += nn; } } if(!where) { /* int_nums = (int *) init_array(num_bufs+1); */ int_nums = (int *) init_int_array(num_bufs+1); for(i=1; i < num_bufs ; i++) int_nums[i]=maxbuf; int_nums[num_bufs]=last; where=num_bufs; } num=int_nums[where]; for (j=0; j < num_bufs; j++) { ctmp = c_outbuf; for (i=num; i ; i--,ctmp++) { ij = (*ctmp).ij; kl = (*ctmp).kl; tmpval = (*ctmp).pval; gtmp[ij] += ptmp[kl]*tmpval; gtmp[kl] += ptmp[ij]*tmpval; } if (readflg && j < num_bufs-1) { if(where==num_bufs) { where=0; Pmat.bufpos = PSIO_ZERO; } where++; num=int_nums[where]; psio_read(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*num, Pmat.bufpos, &(Pmat.bufpos)); } } for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) for(j=0; j <= i ; j++) scf_info[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; joff += nn; } } } }} // namespace psi::cscf psi3/src/bin/cscf/formgo.cc0000644000101500007650000001635711112564564014277 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.2 2001/06/29 20:39:29 evaleev * Modified cscf to use libpsio to store supermatrix files. * /* Revision 1.1.1.1 2000/02/04 22:52:30 evaleev /* Started PSI 3 repository /* /* Revision 1.4 1999/11/17 19:40:46 evaleev /* Made all the adjustments necessary to have direct UHF working. Still doesn't work though.. /* /* Revision 1.3 1999/11/02 23:55:57 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.2 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { static double *gtmp,*gtmpo,*gtmpo2,*ptmp,*ptmpo,*ptmpo2; extern int num_bufs_c,num_bufs_o,readflgc,readflgo; extern struct c_pkints { int ij; int kl; double pval; } *c_outbuf; extern struct o_pkints { int ij; int kl; double pval; double qval; } *o_outbuf; extern int lasto,lastc; int wherec=0; int whereo=0; int *int_nums_c; int *int_nums_o; void formg_open() { register int i,j,k,joff,nn; register int ij,kl; int ilast,num; int tmpsiz; double dotest,tmpval; struct o_pkints *o_temp; struct c_pkints *c_temp; tmpsiz=ioff[nbasis]; if(gtmp == NULL) { gtmp = (double *) init_array(tmpsiz); gtmpo = (double *) init_array(tmpsiz); ptmp = (double *) init_array(tmpsiz); ptmpo = (double *) init_array(tmpsiz); if(uhf){ gtmpo2 = (double *) init_array(tmpsiz); ptmpo2 = (double *) init_array(tmpsiz); } } else { memset(gtmp,'\0',sizeof(double)*tmpsiz); memset(gtmpo,'\0',sizeof(double)*tmpsiz); if(uhf) memset(gtmpo2,'\0',sizeof(double)*tmpsiz); } for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { if(twocon) { for(j=0; j <= i ; j++) { ptmp[ioff[i+joff]+j+joff] = scf_info[k].pmat2[ioff[i]+j]; ptmpo[ioff[i+joff]+j+joff] = scf_info[k].pmato2[ioff[i]+j]; } } else if(uhf){ for(j=0; j <= i ; j++) { ptmp[ioff[i+joff]+j+joff] = scf_info[k].dpmat[ioff[i]+j]; ptmpo[ioff[i+joff]+j+joff] = -spin_info[0].scf_spin[k].dpmat[ioff[i]+j]; ptmpo2[ioff[i+joff]+j+joff] = -spin_info[1].scf_spin[k].dpmat[ioff[i]+j]; } } else { for(j=0; j <= i ; j++) { ptmp[ioff[i+joff]+j+joff] = scf_info[k].dpmat[ioff[i]+j]; ptmpo[ioff[i+joff]+j+joff] = scf_info[k].dpmato[ioff[i]+j]; } } } joff += nn; } } if(!wherec) { /* int_nums_o = (int *) init_array(num_bufs_o+1); */ int_nums_o = (int *) init_int_array(num_bufs_o+1); /* int_nums_c = (int *) init_array(num_bufs_c+1); */ int_nums_c = (int *) init_int_array(num_bufs_c+1); for(i=1; i < num_bufs_o ; i++) int_nums_o[i]=maxbuf; for(i=1; i < num_bufs_c ; i++) int_nums_c[i]=maxbuf; int_nums_o[num_bufs_o]=lasto; int_nums_c[num_bufs_c]=lastc; whereo=num_bufs_o; wherec=num_bufs_c; } num=int_nums_o[whereo]; for (j=0; j < num_bufs_o ; j++) { o_temp = o_outbuf; for (i=num; i ; i--,o_temp++) { ij = (*o_temp).ij; kl = (*o_temp).kl; tmpval = (*o_temp).pval; dotest = (*o_temp).qval; if(uhf){ gtmp[ij] += ptmp[kl]*tmpval; gtmpo[ij] += ptmpo[kl]*dotest; gtmpo2[ij] += ptmpo2[kl]*dotest; if(ij!=kl){ gtmp[kl] += ptmp[ij]*tmpval; gtmpo[kl] += ptmpo[ij]*dotest; gtmpo2[kl] += ptmpo2[ij]*dotest; } } else{ gtmp[ij] += ptmp[kl]*tmpval; gtmp[kl] += ptmp[ij]*tmpval; gtmpo[ij] += ptmpo[kl]*dotest; gtmpo[kl] += ptmpo[ij]*dotest; } } if (readflgo && j < num_bufs_o-1) { if(whereo==num_bufs_o) { PKmat.bufpos = PSIO_ZERO; whereo=0; } whereo++; num=int_nums_o[whereo]; psio_read(PKmat.unit, PKmat.key, (char *) o_outbuf, sizeof(struct o_pkints)*num, PKmat.bufpos, &(PKmat.bufpos)); } } num=int_nums_c[wherec]; for (j=0; j < num_bufs_c ; j++) { c_temp = c_outbuf; for (i=num; i ; i--,c_temp++) { ij = (*c_temp).ij; kl = (*c_temp).kl; tmpval = (*c_temp).pval; gtmp[ij] += ptmp[kl]*tmpval; gtmp[kl] += ptmp[ij]*tmpval; } if (readflgc && j < num_bufs_c-1) { if(wherec==num_bufs_c) { Pmat.bufpos = PSIO_ZERO; wherec=0; } wherec++; num=int_nums_c[wherec]; psio_read(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*num, Pmat.bufpos, &(Pmat.bufpos)); } } for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) { if(twocon) { for(j=0; j <= i ; j++) { scf_info[k].dpmat[ioff[i]+j] = gtmp[ioff[i+joff]+j+joff]; scf_info[k].dpmato[ioff[i]+j] = gtmpo[ioff[i+joff]+j+joff]; } } else if(uhf){ for(j=0; j <=i; j++){ spin_info[0].scf_spin[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff] +gtmpo[ioff[i+joff]+j+joff]; spin_info[1].scf_spin[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff] +gtmpo2[ioff[i+joff]+j+joff]; } } else { for(j=0; j <= i ; j++) { scf_info[k].gmat[ioff[i]+j] += gtmp[ioff[i+joff]+j+joff]; scf_info[k].gmato[ioff[i]+j] += gtmpo[ioff[i+joff]+j+joff]; } } } joff += nn; } } } }} // namespace psi::cscf psi3/src/bin/cscf/gprgid.cc0000644000101500007650000000170211112564564014246 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.1 2000/02/04 22:52:30 evaleev * Initial revision * /* Revision 1.2 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:26 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ extern "C" const char *gprgid() { const char *prgid = "SCF"; return(prgid); } psi3/src/bin/cscf/guess.cc0000644000101500007650000001703510754663017014132 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /*-------------------------------------------------------- guess.c: Function that reads the guessing parameters from input and then either uses them to form an initial guess or calculates an initial guess from multiplicity and the charge using a diagonalization of the core guess. ---------------------------------------------------------*/ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { void guess() { struct symm *s; int i,j,k,m,l,o; int errcod; int nc,no,nh,nn; int netmp=0; int size; int optri; char *guess_opt,*occ_fix_str; reftype reftmp; int mguess; /* ip_cwk_clear(); ip_cwk_add(":DEFAULT"); ip_cwk_add(":SCF"); */ /*--- Set occupations to zero----*/ for(i=0; i < num_ir; i++){ scf_info[i].nclosed=0; scf_info[i].nopen=0; } /* ---- Get reference type for comparison for restarting ----*/ if(inflg == 1) reftmp = (reftype) chkpt_rd_ref(); /*---If first calculation either read occupations from DOCC or form an initial guess---*/ /* check checkpoint flag to see if occupations in ckhpt file should be forced; this is needed to override DOCC vectors in finite difference calculations */ if ( chkpt_rd_override_occ() ) { occ_read(); } else { errcod = ip_exist("DOCC",0); if(errcod) { fprintf(outfile,"\n Using DOCC and SOCC to \n"); fprintf(outfile," determine occupations\n\n"); errcod = ip_count("DOCC",&size,0); if(errcod == IPE_OK && size != num_ir) { fprintf(outfile,"\n DOCC array is the wrong size\n"); fprintf(outfile," is %d, should be %d\n",size,num_ir); exit(PSI_RETURN_FAILURE); } if(errcod != IPE_OK && !iopen) { fprintf(outfile,"\n try adding some electrons buddy!\n"); fprintf(outfile," need DOCC\n"); exit(PSI_RETURN_FAILURE); } if(iopen || uhf) { errcod = ip_count("SOCC",&size,0); if(errcod == IPE_OK && size != num_ir) { fprintf(outfile,"\n SOCC array is the wrong size\n"); fprintf(outfile," is %d, should be %d\n",size,num_ir); exit(PSI_RETURN_FAILURE); } errcod = ip_count("HOCC",&size,0); if(errcod == IPE_OK && size != num_ir) { fprintf(outfile,"\n HOCC array is the wrong size\n"); fprintf(outfile," is %d, should be %d\n",size,num_ir); exit(PSI_RETURN_FAILURE); } } for (i=0; i < num_ir; i++) { errcod = ip_data("DOCC","%d" ,&scf_info[i].nclosed,1,i); if(iopen || uhf) errcod = ip_data("SOCC","%d" ,&scf_info[i].nopen,1,i); if(iopen || uhf) errcod = ip_data("HOCC","%d" ,&scf_info[i].nhalf,1,i); } /* STB (10/29/99) Make sure that DOCC and SOCC have the right number of electrons in them */ for(i = 0;inopen|| s->nhalf) n_open++; if (nn = s->num_so) { nc = s->nclosed; no = s->nopen; nh = s->nhalf; if ( (nn < nc + no + nh) ||(nc < 0) ||(no < 0) ||(nh < 0)) { const char* fmt = "cscf: invalid number of electrons in irrep %d\n"; fprintf(stderr,fmt,i); fprintf(outfile,fmt,i); exit(PSI_RETURN_FAILURE); } if(uhf){ spin_info[0].scf_spin[i].noccup = nc+no; spin_info[1].scf_spin[i].noccup = nc; if(nh != 0){ fprintf(outfile,"\nCannot use HOCC with UHF\n"); exit(PSI_RETURN_FAILURE); } } if(iopen) { s->fock_eff = (double *) init_array(ioff[nn]); s->fock_open = (double *) init_array(ioff[nn]); s->pmato = (double *) init_array(ioff[nn]); s->dpmato = (double *) init_array(ioff[nn]); s->gmato = (double *) init_array(ioff[nn]); } if(twocon) { s->pmat2 = (double *) init_array(ioff[nn]); s->pmato2 = (double *) init_array(ioff[nn]); } if(uhf){ for(j=0; j < nc+no; j++) spin_info[0].scf_spin[i].occ_num[j] = 1.0; for(j=0;j < nc; j++) spin_info[1].scf_spin[i].occ_num[j] = 1.0; } else{ for (j=0; j < nc ; j++) { s->occ_num[j] = 2.0; } for (j=nc; j < nc+no ; j++) { s->occ_num[j] = 1.0; } if(nh) s->occ_num[nc+no] = nh*0.5; } } } optri = n_open*(n_open+1)/2; if (iopen) { int mm1=1,mm2=1; if(optri == 0){ fprintf(outfile,"\nNot an open shell molecule.\n"); fprintf(outfile,"Re-check opentype!!!!\n\n"); exit(PSI_RETURN_FAILURE); } if(iter == 0 || print & 1){ fprintf(outfile,"\n open-shell energy coeffs\n"); fprintf(outfile," open shell pair alpha beta\n");} optri = (n_open*(n_open+1))/2; alpha = (double *) init_array(ioff[optri]); beta = (double *) init_array(ioff[optri]); if (twocon) { if(n_open == 2) { alpha[0] = 0.0; alpha[1] = 0.0; alpha[2] = 0.0; beta[0] = 0.0; beta[1] = 1.0; beta[2] = 0.0; } else { fprintf(outfile, "this program cannot handle same symmetry\n"); fprintf(outfile," tcscf. try SCFX\n"); exit(PSI_RETURN_FAILURE); } } else if(singlet) { if(n_open == 2) { alpha[0] = 0.0; alpha[0] = 0.0; alpha[1] = 0.0; alpha[2] = 0.0; beta[0] = 1.0; beta[1] = -3.0; beta[2] = 1.0; } else { fprintf(outfile, "this program cannot handle same symmetry\n"); fprintf(outfile," singlets. try SCFX\n"); exit(PSI_RETURN_FAILURE); } } else if(hsos) { for(i=0; i < optri ; i++) { alpha[i]=0.0; beta[i]=1.0; } } else { for (i=0; i < optri ; i++) { errcod = ip_data("ALPHA","%lf",&alpha[i],1,i); errcod = ip_data("BETA","%lf",&beta[i],1,i); beta[i] = -beta[i]; } } for (i=0; i < optri; i++) { if(iter == 0 || print & 1) fprintf(outfile," %d %d %f %f\n",mm1,mm2, alpha[i],-beta[i]); mm2++; if (mm2 > mm1) { mm1++; mm2 = 1; } } } } }} // namespace psi::cscf psi3/src/bin/cscf/includes.h0000644000101500007650000000065510757640026014452 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ #ifndef _psi_bin_cscf_includes_h_ #define _psi_bin_cscf_includes_h_ #include #include #include #include #include #include #include #include #define MIN0(a,b) ((a)<(b)) ? (a) : (b) #define MAX0(a,b) ((a)>(b)) ? (a) : (b) #endif // header guard psi3/src/bin/cscf/init_scf.cc0000644000101500007650000002113611112564564014573 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.12 2004/05/03 04:32:40 crawdad * Major mods based on merge with stable psi-3-2-1 release. Note that this * version has not been fully tested and some scf-optn test cases do not run * correctly beccause of changes in mid-March 2004 to optking. * -TDC * /* Revision 1.11.4.1 2004/04/06 21:29:05 crawdad /* Corrections to the RHF/ROHF DIIS algorithm, which was simply incorrect. /* The backtransformation of the DIIS error vectors to the AO basis was not /* mathematically right. /* -TDC and EFV /* /* Revision 1.11 2003/08/17 22:57:37 crawdad /* Removing libfile30 from the repository. I believe that all code reference /* to the library have also been properly removed. The current version /* passes all test cases on my systems. /* -TDC /* /* Revision 1.10 2003/04/10 20:36:01 crawdad /* Modifications to cscf to account for *very* large cases. Mainly converted /* terms to unsigned ints and more carefully computed pk-block sizes to avoid /* overflows. /* -TDC /* /* Revision 1.9 2002/11/24 22:52:17 crawdad /* Merging the gbye-file30 branch into the main trunk. /* -TDC /* /* Revision 1.8.2.1 2002/07/29 23:08:30 evaleev /* A major set of changes designed to convert all psi modules to use libchkpt. /* /* Revision 1.8 2002/05/15 02:29:14 sherrill /* Read from checkpoint /* /* Revision 1.7 2002/04/03 02:06:01 janssen /* Finish changes to use new include paths for libraries. /* /* Revision 1.6 2002/03/24 18:31:19 crawdad /* NOW it works. /* -TDC /* /* Revision 1.5 2002/03/24 18:30:08 crawdad /* Beginning mods for libpsio-based file30. Current version works. /* -TDC /* /* Revision 1.4 2002/03/24 17:28:14 crawdad /* Minor modifications in preparation for conversion to libpsio-based file30. /* -TDC /* /* Revision 1.3 2000/10/13 19:51:21 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.2 2000/06/22 22:15:01 evaleev /* Modifications for KS DFT. Reading in XC Fock matrices and XC energy in formg_direct need to be uncommented (at present those are not produced by CINTS yet). /* /* Revision 1.1.1.1 2000/02/04 22:52:31 evaleev /* Started PSI 3 repository /* /* Revision 1.6 1999/11/11 16:00:38 localpsi /* Fixed minor bug in occupations. STB (11/11/99) /* /* Revision 1.5 1999/11/04 19:24:29 localpsi /* STB (11/4/99) - Added the orb_mix feature which is equivalent to guess = mix /* in G94 and also fixed restarting so that if you have different wavefuntions, /* everything works. Also if you specify no DOCC and SOCC and restart, if the /* wavefunctions are different, it will guess again. /* /* Revision 1.4 1999/11/02 18:10:13 evaleev /* Direct SCF improved /* /* Revision 1.3 1999/08/17 19:04:15 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.2 1999/08/11 19:24:53 evaleev /* Unhardwired the size of the ioff array (set it to 1024 for now) and increased MAX_BASIS to 1024. /* /* Revision 1.1.1.1 1999/04/12 16:59:27 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { void init_scf() { int i,jj; int nn,isadr; int nkind,junk; int degen[20],*num_so; char char_dum[80]; char **irr_labs; ioff[0] = 0; for (i = 1; i < MAXIOFF ; i++) { ioff[i] = ioff[i-1] + i; } /* EFV 10/24/98 All requests for file30 should be handled with libfile30 but for now I'll use wreadw */ num_ir = chkpt_rd_nirreps(); num_so = chkpt_rd_sopi(); repnuc = chkpt_rd_enuc(); irr_labs = chkpt_rd_irr_labs(); /* now initialize scf_info */ n_so_typs=0; nsfmax=0; nbasis=0; scf_info = (struct symm *) malloc(sizeof(struct symm)*num_ir); /* compute nsfmax */ for(i=0; i < num_ir; i++) { nn = num_so[i]; if(nn > nsfmax) nsfmax = nn; } jj=0; for(i=0; i < num_ir ; i++) { scf_info[i].num_so = nn = num_so[i]; /* EFV 10/24/98 degeneracy = 1 scf_info[i].degeneracy = degen[i]; */ scf_info[i].nclosed = 0; scf_info[i].nopen = 0; scf_info[i].nhalf = 0; scf_info[i].os_num = 0; scf_info[i].ideg = 0; scf_info[i].irrep_label = irr_labs[i]; /* scf_info[i].irrep_label[4] = '\0';*/ jj += 4; nbasis += nn; if (nn) { n_so_typs++; /* if (nn > nsfmax) nsfmax = nn; */ scf_info[i].smat = (double *) init_array(ioff[nn]); scf_info[i].tmat = (double *) init_array(ioff[nn]); scf_info[i].hmat = (double *) init_array(ioff[nn]); scf_info[i].pmat = (double *) init_array(ioff[nn]); scf_info[i].pmato = (double *) NULL; scf_info[i].pmat2 = (double *) NULL; scf_info[i].pmato2 = (double *) NULL; scf_info[i].dpmat = (double *) init_array(ioff[nn]); scf_info[i].dpmato = (double *) NULL; scf_info[i].fock_pac = (double *) init_array(ioff[nn]); scf_info[i].fock_eff = (double *) NULL; scf_info[i].fock_open = (double *) NULL; scf_info[i].gmat = (double *) init_array(ioff[nn]); scf_info[i].gmato = (double *) NULL; scf_info[i].occ_num = (double *) init_array(nn); scf_info[i].fock_evals = (double *) init_array(nn); scf_info[i].cmat = block_matrix(nn,nn); /* TDC(6/19/96) - Added array for saving original MO vector */ scf_info[i].cmat_orig = block_matrix(nn,nn); scf_info[i].sahalf = block_matrix(nn,nn); scf_info[i].pinv = block_matrix(nn,nn); /* STB(4/1/98) - Added array to store the eigenvalues of the core hamiltonian for mo guessing*/ scf_info[i].hevals = (double *) init_array(nn); /* Need separate XC Fock for KS DFT */ if (ksdft) scf_info[i].xcmat = init_array(ioff[nn]); } } /* read in number of atoms and nuclear charges and total number of MO*/ natom = chkpt_rd_natom(); zvals = chkpt_rd_zvals(); nbfso = chkpt_rd_nso(); /* Initialize arrays to hold energy and symmetry arrays */ ener_tot = (double *) init_array(nbfso); symm_tot = (int *) init_int_array(nbfso); } void init_scf2() { int i,j,k; int n,nn,m,mm; int junk; unsigned int opconst,outbuf,mxcoef3,ntri,mtri; struct symm *s; opconst = (iopen) ? 3 : 2; mtri = ioff[scf_info[0].num_so]; mxcoef3 = opconst*(mtri*(mtri+1)/2); scf_info[0].ideg = 0; so2symblk = init_int_array(nbasis); junk=j=0; for (i=0; i < num_ir ; i++) { s = &scf_info[i]; nn = s->num_so; if (i) { m = ioff[nn]; mm = m*(m+1)/2; mxcoef3 += opconst*ioff[nn]*mtri; mxcoef3 += opconst*mm; mtri += m; if (nn <= 0) s->ideg = scf_info[i-1].ideg; else { do { n=scf_info[j].num_so; j++; } while(!n); s->ideg = scf_info[i-1].ideg+n; } } for(k=s->ideg;kideg+nn;k++) so2symblk[k] = i; if(s->nopen || s->nhalf) s->os_num = junk++; } ntri = nbasis*(nbasis+1)/2; if (direct_scf) { /* No I/O will be done */ fprintf(outfile, "\n direct formation of the Fock matrix is requested\n"); } else { /* Figure out the size of the PK-buffers */ readflg = 0; maxbuf = mxcoef3/opconst+5; outbuf = 884736; outbuf = MIN0(outbuf,mxcoef3); if(outbuf == 884736) { unsigned int pass = mxcoef3/outbuf+1; readflg = 1; maxbuf = (mxcoef3/pass)/opconst + 2; if(iopen) maxbuf /= 2; #if defined(AIXV3)||defined(SGI) maxbuf= (iopen) ? 8192*3 : 8192*5; pass = mxcoef3/(maxbuf*opconst)+1; #endif fprintf(outfile, "\n using buffered io, %u buffers, each %u bytes in size\n", pass,maxbuf*opconst*sizeof(double)); if(print) fprintf(outfile," mxcoef3 = %u maxbuf = %u\n",mxcoef3,maxbuf); if(print) fprintf(outfile," outbuf = %u\n",outbuf); } else fprintf(outfile,"\n keeping integrals in %u bytes of core\n", maxbuf*opconst*sizeof(double)); } fflush(outfile); return; } }} // namespace psi::cscf psi3/src/bin/cscf/init_uhf.cc0000644000101500007650000000760011112564564014602 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /************************************************** init_uhf.c - separate code to initialize UHF By Shawn Brown **************************************************/ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { void init_uhf() { int i,m,jj; int nn,isadr; int nkind,junk; int degen[20],*num_so; char char_dum[80]; char **irr_labs; struct spin *sp; ioff[0] = 0; for (i = 1; i < 1024 ; i++) { ioff[i] = ioff[i-1] + i; } /* EFV 10/24/98 All requests for file30 should be handled with libfile30 but for now I'll use wreadw */ num_ir = chkpt_rd_nirreps(); num_so = chkpt_rd_sopi(); repnuc = chkpt_rd_enuc(); irr_labs = chkpt_rd_irr_labs(); /* now initialize scf_info */ n_so_typs=0; nsfmax=0; nbasis=0; scf_info = (struct symm *) malloc(sizeof(struct symm)*num_ir); /* STB 6/30/99 Initialize structures to hold the information with spin spin in mind */ spin_info = (struct spin *) malloc(sizeof(struct spin)*2); /* compute nsfmax */ for(i=0; i < num_ir; i++) { nn = num_so[i]; if(nn > nsfmax) nsfmax = nn; } for(m=0;m<2;m++){ spin_info[m].scf_spin = (struct symm *) malloc(sizeof(struct symm)*num_ir); } jj=0; for(i=0; i < num_ir ; i++) { scf_info[i].num_so = nn = num_so[i]; /* EFV 10/24/98 degeneracy = 1 scf_info[i].degeneracy = degen[i]; */ scf_info[i].nclosed = 0; scf_info[i].nopen = 0; scf_info[i].nhalf = 0; scf_info[i].os_num = 0; scf_info[i].ideg = 0; scf_info[i].irrep_label = irr_labs[i]; /* scf_info[i].irrep_label[4] = '\0';*/ jj += 4; nbasis += nn; if (nn) { n_so_typs++; scf_info[i].smat = init_array(ioff[nn]); scf_info[i].tmat = init_array(ioff[nn]); scf_info[i].hmat = init_array(ioff[nn]); scf_info[i].sahalf = block_matrix(nn,nn); scf_info[i].pinv = block_matrix(nn,nn); scf_info[i].occ_num = init_array(nn); /* STB (6/30/99) - There is no P matrix in UHF only J and K/2 */ scf_info[i].dpmat = init_array(ioff[nn]); scf_info[i].pmat = init_array(ioff[nn]); scf_info[i].cmat = block_matrix(nn,nn); /* STB(4/1/98) - Added array to store the eigenvalues of the core hamiltonian for mo guessing*/ scf_info[i].hevals = init_array(nn); for(m=0;m<2;m++){ sp = &spin_info[m]; sp->scf_spin[i].irrep_label = scf_info[i].irrep_label; sp->scf_spin[i].dpmat = init_array(ioff[nn]); sp->scf_spin[i].dpmato = NULL; sp->scf_spin[i].pmat = init_array(ioff[nn]); sp->scf_spin[i].pmato = NULL; sp->scf_spin[i].fock_pac = init_array(ioff[nn]); sp->scf_spin[i].gmat = init_array(ioff[nn]); sp->scf_spin[i].gmato = NULL; sp->scf_spin[i].occ_num = init_array(nn); sp->scf_spin[i].fock_evals = init_array(nn); sp->scf_spin[i].cmat = block_matrix(nn,nn); /* TDC(6/19/96) - Added array for saving original MO vector */ sp->scf_spin[i].cmat_orig = block_matrix(nn,nn); /* STB(4/1/98) - Added array to store the eigenvalues of the core hamiltonian for mo guessing*/ sp->scf_spin[i].hevals = init_array(nn); /* Need separate XC Fock for KS DFT */ if (ksdft) sp->scf_spin[i].xcmat = init_array(ioff[nn]); } } } /* read in number of atoms and nuclear charges and total number of MO*/ natom = chkpt_rd_natom(); zvals = chkpt_rd_zvals(); nbfso = chkpt_rd_nso(); /* Character label for Spin */ spin_info[0].spinlabel = "Alpha"; spin_info[1].spinlabel = "Beta"; /* Initialize arrays to hold energy and symmetry arrays */ ener_tot = init_array(nbfso); symm_tot = init_int_array(nbfso); } }} // namespace psi::cscf psi3/src/bin/cscf/Makefile.in0000644000101500007650000000202610764260211014522 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) PSILIBS = -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ cscf.cc cleanup.cc dft_inputs.cc diis.cc dmat.cc \ dmat_2.cc ecalc.cc errchk.cc findit.cc \ formg2.cc formgc.cc formgo.cc form_vec.cc gprgid.cc init_scf.cc \ packit_c.cc packit_o.cc rdone.cc rdtwo.cc rotate_vector.cc scf_input.cc \ scf_iter.cc scf_iter_2.cc schmit.cc sdot.cc shalf.cc check_rot.cc phases.cc\ guess.cc sortev.cc occ_fun.cc init_uhf.cc cmatsplit.cc dmatuhf.cc \ findit_uhf.cc uhf_iter.cc schmit_uhf.cc diis2_uhf.cc formg_direct.cc \ orb_mix.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules # Problems with optimization on with gcc-4.1.X compilers (TDC,4/4/07) packit_o.o: packit_o.cc $(CXX) $(CXXDBG) $(CXXDEF) $(CXXOTH) $(CXXINC) -c $< $(OUTPUT_OPTION) ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: cscf.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 psi3/src/bin/cscf/occ_fun.cc0000644000101500007650000002262710754663017014423 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /*****************************************************/ /* */ /* occ_init - This function will take care of */ /* all of the input parameters */ /* concerning occupations */ /* occ_calc - Determines the occupations from */ /* multiplicity and charge */ /* */ /* By Shawn Brown - 6/23/99 */ /*****************************************************/ #define EXTERN #include "includes.h" #include "common.h" #include #include namespace psi { namespace cscf { /* Read the Opentype */ void occ_init(void){ int i; int errcod; int mguess=0; int open; iopen=0; mflag=0; uhf=special=twocon=hsos=singlet=0; num_ir = chkpt_rd_nirreps(); multp=1; if(ip_exist("MULTIPLICITY", 0)) errcod = ip_data("MULTIPLICITY","%d",&multp,0); else if(ip_exist("MULTI", 0)) errcod = ip_data("MULTI","%d",&multp,0); else if(ip_exist("MULTP", 0)) errcod = ip_data("MULTP","%d",&multp,0); else { /*open = (int *) init_array(num_ir);*/ if(ip_exist("SOCC",0)){ for(i=0;i 1) hsos = 1; } else if(!strcmp(reference,"TWOCON")){ refnum = ref_tcscf; /*TCSCF for file30 flag */ iopen = 2; twocon = 1; } else if(!strcmp(reference,"SPECIAL")){ /* NO FILE30 flag for Special */ iopen = 1; special = 1; } else if(!strcmp(reference,"UHF")){ refnum = ref_uhf; /* UHF for file30 flag */ uhf = 1; } else if(!strcmp(reference,"RKS")){ refnum = ref_rks; /* flag for spin-restricted Kohn-Sham DFT */ ksdft = 1; } else if(!strcmp(reference,"UKS")){ refnum = ref_uks; /* flag for spin-unrestricted Kohn-Sham DFT */ uhf = 1; ksdft = 1; } else{ if(multp != 1){ fprintf(outfile, "\n Please specify an open shell reference\n"); fprintf(outfile," with multpicity > 1\n"); fprintf(outfile," multiplicity = %d\n",multp); fprintf(outfile," reference = %s\n",reference); exit(PSI_RETURN_FAILURE); } } } /* Read Charge same as above */ charge=0; errcod = ip_data("CHARGE","%d",&charge,0); /* read in number of atoms and nuclear charges and total number of MO*/ natom = chkpt_rd_natom(); zvals = chkpt_rd_zvals(); nbfso = chkpt_rd_nso(); /* Let's make sure that the molecule can have the specified multiplicity */ nelec = 0; for(i=0; i < natom;i++) { nelec = nelec + zvals[i]; } nelec = nelec - charge; if(multp == 1 && iopen == 0) { if(nelec%2==1) { fprintf(outfile,"\n Impossible multiplicity with charge"); fprintf(outfile," and # of electrons specified\n\n"); fprintf(outfile,"\nMultiplicity = %d\nCharge = %d",multp,charge); fprintf(outfile,"\nNumber of Electrons = %d\n",nelec); exit(PSI_RETURN_FAILURE); } } else if(multp == 3 || (multp == 1 && singlet == 1)) { if(nelec%2==1) { fprintf(outfile,"\n Impossible multiplicity with charge"); fprintf(outfile," and # of electrons specified\n\n"); fprintf(outfile,"\nMultiplicity = %d\nCharge = %d",multp,charge); fprintf(outfile,"\nNumber of Electrons = %d\n",nelec); exit(PSI_RETURN_FAILURE); } } else if(multp%2 == 1 && nelec%2 ==1){ fprintf(outfile,"\nImpossible multiplicity with charge"); fprintf(outfile," and # of electrons specified\n"); fprintf(outfile,"\nMultiplicity = %d\nCharge = %d",multp,charge); fprintf(outfile,"\nNumber of Electrons = %d\n",nelec); exit(PSI_RETURN_FAILURE); } else if(multp%2 == 0 && nelec%2 ==0){ fprintf(outfile,"\nImpossible multiplicity with charge"); fprintf(outfile," and # of electrons specified\n"); fprintf(outfile,"\nMultiplicity = %d\nCharge = %d",multp,charge); fprintf(outfile,"\nNumber of Electrons = %d\n",nelec); exit(PSI_RETURN_FAILURE); } else { fprintf(outfile, "\nCannot check consistency of the multiplicity\n"); fprintf(outfile,"\nand number of electrons, double check\n"); fprintf(outfile,"your occupations\n\n"); } } void occ_calc(void){ int i,j; int a,b; /* zero out occupations */ for(i=0; i 0) { tval = spin_info[spin].scf_spin[irr].fock_evals[spin_info[spin].scf_spin[irr].noccup-1]; if (!found_guess) { homo_irrep[spin] = irr; homo_energy[spin] = tval; found_guess = 1; } else { if (tval > homo_energy[spin]) { homo_energy[spin] = tval; homo_irrep[spin] = irr; } } } } if (!found_guess) { fprintf(outfile, "cscf: (orb_mix): Can't find a valid guess for HOMO irrep!\n"); exit(PSI_RETURN_FAILURE); } */ /* now try to figure out where the LUMO is */ /* for (irr=0,found_guess=0; irr spin_info[spin].scf_spin[irr].noccup) { tval = spin_info[spin].scf_spin[irr].fock_evals[spin_info[spin].scf_spin[irr].noccup]; if (!found_guess) { lumo_irrep[spin] = irr; lumo_energy[spin] = tval; found_guess = 1; } else { if (tval < lumo_energy[spin]) { lumo_energy[spin] = tval; lumo_irrep[spin] = irr; } } } } if (!found_guess) { fprintf(outfile, "cscf: (orb_mix): Can't find a valid guess for LUMO irrep!\n"); exit(PSI_RETURN_FAILURE); } if (print > 1) { fprintf(outfile, "Identified alpha HOMO as irrep %s, energy %12.6lf\n", scf_info[homo_irrep[0]].irrep_label, homo_energy[0]); fprintf(outfile, "Identified alpha LUMO as irrep %s, energy %12.6lf\n", scf_info[lumo_irrep[0]].irrep_label, lumo_energy[0]); } */ /* now see if HOMO and LUMO have the same irrep! */ /* if (homo_irrep[spin] != lumo_irrep[spin]) { fprintf(outfile, "Identified HOMO as irrep %s, energy %12.6lf\n", scf_info[homo_irrep[spin]].irrep_label, homo_energy[spin]); fprintf(outfile, "Identified LUMO as irrep %s, energy %12.6lf\n", scf_info[lumo_irrep[spin]].irrep_label, lumo_energy[spin]); fprintf(outfile, "\tHOMO and LUMO have different irreps.\n"); fprintf(outfile, "\tWill use lowest unoccupied from irrep %s instead\n", scf_info[homo_irrep[spin]].irrep_label); lumo_irrep[spin] = homo_irrep[spin]; } */ /* now do the same for beta as for alpha */ /* homo_irrep[1] = homo_irrep[0]; lumo_irrep[1] = lumo_irrep[0]; if (print > 4) { for (spin=0; spin<2; spin++) { num_mo = scf_info[lumo_irrep[spin]].num_mo; fprintf(outfile,"\n C matrix before mixing (%s spin)\n", spin == 0 ? "alpha" : "beta"); print_mat(spin_info[spin].scf_spin[lumo_irrep[spin]].cmat, num_mo,num_mo,outfile); } } */ /* figure out mixing coefficients */ mixing_fraction = 0.5; errcod = ip_data("MIXING_FRACTION","%lf",&mixing_fraction,0); c1 = cos(mixing_fraction*PI/2.0); c2 = sin(mixing_fraction*PI/2.0); fprintf(outfile, " Mixing HOMO and LUMO by %d percent\n", (int) (mixing_fraction * 100.0)); fprintf(outfile, " Mixing coefficients are %lf and %lf\n", c1, c2); /* Now mix HOMO and LUMO for each spin */ for (irr=0; irr 4) { */ fprintf(outfile, "%5s C matrix before mixing (%s spin)\n", scf_info[irr].irrep_label, (spin==0) ? "alpha" : "beta"); print_mat(spin_info[spin].scf_spin[irr].cmat,num_so,num_mo,outfile); /* } */ homo_orb = spin_info[spin].scf_spin[irr].noccup-1; lumo_orb = homo_orb+1; if (homo_orb < 0 || lumo_orb < 0 || homo_orb >= scf_info[irr].num_mo || lumo_orb >= scf_info[irr].num_mo) continue; for (i=0; i 4) { */ fprintf(outfile, "%5s C matrix after mixing (%s spin)\n", scf_info[irr].irrep_label, (spin==0) ? "alpha" : "beta"); print_mat(spin_info[spin].scf_spin[irr].cmat,num_so,num_mo,outfile); /* } */ } /* end loop over spins */ } /* end loop over irreps */ } void orb_mix(void) { int i, num_mo, num_so, spin, irr, homo_orb, lumo_orb, errcod; double c1, c2, M, norm, **C; fprintf(outfile, "\n ***** Orbital Mixing being used to find unique UHF solution *****\n"); /* which spin to mix... just do alpha */ spin = 0; /* figure out mixing coefficients */ M = 0.5; errcod = ip_data("MIXING_FRACTION","%lf",&M,0); norm = 1.0 / sqrt(1.0+M*M); fprintf(outfile, " Mixing HOMO and LUMO by %d percent\n", (int) (M * 100.0)); /* Now mix HOMO and LUMO for each spin */ for (irr=0; irr 4) { */ fprintf(outfile, "%5s C matrix before mixing (%s spin)\n", scf_info[irr].irrep_label, (spin==0) ? "alpha" : "beta"); print_mat(spin_info[spin].scf_spin[irr].cmat,num_so,num_mo,outfile); /* } */ homo_orb = spin_info[spin].scf_spin[irr].noccup-1; lumo_orb = homo_orb+1; if (homo_orb < 0 || lumo_orb < 0 || homo_orb >= scf_info[irr].num_mo || lumo_orb >= scf_info[irr].num_mo) continue; C = spin_info[spin].scf_spin[irr].cmat; for (i=0; i 4) { */ fprintf(outfile, "%5s C matrix after mixing (%s spin)\n", scf_info[irr].irrep_label, (spin==0) ? "alpha" : "beta"); print_mat(spin_info[spin].scf_spin[irr].cmat,num_so,num_mo,outfile); /* } */ } /* end loop over irreps */ } }} // namespace psi::cscf psi3/src/bin/cscf/packit_c.cc0000644000101500007650000001404411112564564014552 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.4 2003/04/10 20:36:01 crawdad * Modifications to cscf to account for *very* large cases. Mainly converted * terms to unsigned ints and more carefully computed pk-block sizes to avoid * overflows. * -TDC * /* Revision 1.3 2002/12/06 15:50:32 crawdad /* Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as /* necessary. This is new for the PSI3 execution driver. /* -TDC /* /* Revision 1.2 2001/06/29 20:39:29 evaleev /* Modified cscf to use libpsio to store supermatrix files. /* /* Revision 1.1.1.1 2000/02/04 22:52:31 evaleev /* Started PSI 3 repository /* /* Revision 1.5 1999/11/04 19:24:30 localpsi /* STB (11/4/99) - Added the orb_mix feature which is equivalent to guess = mix /* in G94 and also fixed restarting so that if you have different wavefuntions, /* everything works. Also if you specify no DOCC and SOCC and restart, if the /* wavefunctions are different, it will guess again. /* /* Revision 1.4 1999/11/02 23:55:58 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.3 1999/08/17 19:04:16 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.2 1999/07/24 18:13:52 crawdad /* Renamed variable "nint" to "cscf_nint" to avoid DEC compiler type conflict. /* -Daniel /* * Revision 1.1.1.1 1999/04/12 16:59:27 evaleev * Added a version of CSCF that can work with CINTS. * -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { int last; extern double *pa, *pb; static int ibl=0; static double *gtmp,*ptmp; struct c_pkints { int ij; int kl; double pval; } *c_outbuf; void packit_closed(unsigned int* lbij, unsigned int* lbkl, int endflg) { int i,j,k,joff,ij,kl; int lmax,ijkl,l; int tmpsiz,nn; double pval; double tol = 10e-14; unsigned int pk_size; if(!c_outbuf) { pk_size = maxbuf*sizeof(struct c_pkints); if((c_outbuf=(struct c_pkints *) malloc(pk_size))==NULL) { fprintf(stderr,"cannot allocate memory for c_outbuf in packit\n"); fprintf(stderr, "size = %ud\n", pk_size); exit(PSI_RETURN_FAILURE); } } tmpsiz = ioff[nbasis]; if(gtmp==NULL) { gtmp = (double *) init_array(tmpsiz); ptmp = (double *) init_array(tmpsiz); /*testpk = (double *) init_array(ioff[tmpsiz]);*/ for(k=joff=0; k < num_ir ; k++) { if(nn=scf_info[k].num_so) { for(i=0; i < nn ; i++) for(j=0; j <= i ; j++) ptmp[ioff[i+joff]+j+joff] = scf_info[k].pmat[ioff[i]+j]; joff += nn; } } } if(!endflg) { for(i=0; i < cscf_nint ; i++) { pval=pa[i]; ij = lbij[i]; kl = lbkl[i]; if(print & 128) fprintf(outfile,"%5d%5d%9.5f\n",ij,kl,pval); if (fabs(pval) >= tol) { c_outbuf[ibl].ij = ij; c_outbuf[ibl].kl = kl; c_outbuf[ibl].pval = pval; gtmp[ij] += ptmp[kl]*pval; gtmp[kl] += ptmp[ij]*pval; /*testpk[ioff[ij]+kl] = pval;*/ ibl++; if (ibl >= maxbuf) { if(readflg) psio_write(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*maxbuf, Pmat.bufpos, &(Pmat.bufpos)); num_ints += ibl; if(print & 16) fprintf(outfile,"buf %3d: ibl = %10d\n",num_bufs,ibl); fflush(outfile); num_bufs++; ibl=0; } } } cscf_nint=0; } /* testing stuff */ else { /*for(i=0;i= tol || fabs(qval) >= tol) { if(!uhf){ if(qval) { o_outbuf[iblo].ij = ij; o_outbuf[iblo].kl = kl; o_outbuf[iblo].pval = pval; o_outbuf[iblo].qval = qval; if(!twocon) { gtmp[ij] += ptmp[kl]*pval; gtmp[kl] += ptmp[ij]*pval; gtmpo[ij] += ptmpo[kl]*qval; gtmpo[kl] += ptmpo[ij]*qval; } iblo++; if (iblo >= maxbuf) { readflgo=1; psio_write(PKmat.unit, PKmat.key, (char *) o_outbuf, sizeof(struct o_pkints)*maxbuf, PKmat.bufpos, &(PKmat.bufpos)); num_ints_o += iblo; num_bufs_o++; iblo=0; } } else { c_outbuf[iblc].ij = ij; c_outbuf[iblc].kl = kl; c_outbuf[iblc].pval = pval; if(!twocon) { gtmp[ij] += ptmp[kl]*pval; gtmp[kl] += ptmp[ij]*pval; } iblc++; if (iblc >= maxbuf) { readflgc=1; psio_write(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*maxbuf, Pmat.bufpos, &(Pmat.bufpos)); num_ints_c += iblc; num_bufs_c++; iblc=0; } } } else{ o_outbuf[iblo].ij = ij; o_outbuf[iblo].kl = kl; o_outbuf[iblo].pval = pval; o_outbuf[iblo].qval = qval; /*testj[ioff[ij]+kl] = pval; testk[ioff[ij]+kl] = qval;*/ gtmp[ij] += ptmp[kl]*pval; gtmpo[ij] += ptmpo[kl]*qval; gtmpo2[ij] += ptmpo2[kl]*qval; if(ij!=kl){ gtmp[kl] += ptmp[ij]*pval; gtmpo[kl] += ptmpo[ij]*qval; gtmpo2[kl] += ptmpo2[ij]*qval; } iblo++; if (iblo >= maxbuf) { readflgo=1; psio_write(PKmat.unit, PKmat.key, (char *) o_outbuf, sizeof(struct o_pkints)*maxbuf, PKmat.bufpos, &(PKmat.bufpos)); num_ints_o += iblo; num_bufs_o++; iblo=0; } } } } cscf_nint=0; } else { num_ints_o += iblo; num_ints_c += iblc; num_bufs_c++; num_bufs_o++; fprintf(outfile,"\n%10d integrals written to file92 in %3d buffers\n", num_ints_o,num_bufs_o); fprintf(outfile,"%10d integrals written to file93 in %3d buffers\n", num_ints_c,num_bufs_c); lasto = iblo; lastc = iblc; if(readflgo) psio_write(PKmat.unit, PKmat.key, (char *) o_outbuf, sizeof(struct o_pkints)*iblo, PKmat.bufpos, &(PKmat.bufpos)); if(readflgc) psio_write(Pmat.unit, Pmat.key, (char *) c_outbuf, sizeof(struct c_pkints)*iblc, Pmat.bufpos, &(Pmat.bufpos)); /* testing stuff */ /* for(i=0;i #include #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { /* ** PHASE.C ** ** This routine forms the product: C_new(t)*S*C_old = ~I to check the ** phases of the MOs. When a phase change occurs, the new MO is ** corrected. If MO swapping occurs, the phase_check flag is set to zero ** and later written to file30. This prevents the correlated routines ** from trying to restart from the old wavefunction. ** ** T. Daniel Crawford 6/19/96 ** ** Modified to include UHF orbitals. ** -TDC, 5/03 ** */ int phase(void) { int i, j, k, m; int nn, num_mo, row_max; int phase_chk; double maxvalue; double **smat, **tmp, **identity; double ***cnew; struct symm *s; phase_chk = 1; maxvalue = 0.0; cnew = (double ***) malloc(num_ir * sizeof(double **)); if(uhf) { for(m=0; m < 2; m++) { for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; cnew[k] = block_matrix(nn, num_mo); for(j=0; j < nn; j++) for(i=0; i < num_mo; i++) cnew[k][j][i] = spin_info[m].scf_spin[k].cmat[j][i]; } } for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; smat = block_matrix(nn, nn); tmp = block_matrix(num_mo, nn); identity = block_matrix(num_mo, num_mo); tri_to_sq(s->smat, smat, nn); mmult(cnew[k],1,smat,0,tmp,0,num_mo,nn,nn,0); mmult(tmp,0,spin_info[m].scf_spin[k].cmat_orig,0,identity,0,num_mo,nn,num_mo,0); for(j=0; j < num_mo; j++) { maxvalue = 0.0; for(i=0; i < num_mo; i++) { if(fabs(identity[j][i]) > maxvalue) { maxvalue = fabs(identity[j][i]); row_max = i; } } if(row_max != j) phase_chk = 0; } if(phase_chk) { for(i=0; i < num_mo; i++) { if(identity[i][i] < 0.0) for(j=0; j < nn; j++) cnew[k][j][i] = -(cnew[k][j][i]); } } free_block(smat); free_block(tmp); free_block(identity); } } if(phase_chk) { fprintf(outfile, "\n Correcting phases of orbitals of spin type %1d.\n", m); for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; for(j=0; j < nn; j++) for(i=0; i < num_mo; i++) spin_info[m].scf_spin[k].cmat[j][i] = cnew[k][j][i]; free_block(cnew[k]); } } } else fprintf(outfile, "\n No phase correction for spin type %1d possible.\n", m); } } else { /* Make a copy of the new MO vector */ for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; cnew[k] = init_matrix(nn,num_mo); for(j=0; j < nn; j++) for(i=0; i < num_mo; i++) cnew[k][j][i] = s->cmat[j][i]; } /* fprintf(outfile, "MOs for Irrep %d\n", k); print_mat(cnew[k], nn, num_mo, outfile); */ } for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; smat = init_matrix(nn,nn); tmp = init_matrix(num_mo,nn); identity = init_matrix(num_mo,num_mo); /* Unpack the overlap matrix */ tri_to_sq(s->smat,smat,nn); /* Form ~I = C^t(new) * S * C(old) */ /* mxmb(cnew[k],nn,1,smat,1,nn,tmp,1,nn,nn,nn,nn); mxmb(tmp,1,nn,s->cmat_orig,1,nn,identity,1,nn,nn,nn,nn);*/ mmult(cnew[k],1,smat,0,tmp,0,num_mo,nn,nn,0); mmult(tmp,0,s->cmat_orig,0,identity,0,num_mo,nn,num_mo,0); /* fprintf(outfile, "Approximate Identity Matrix for Irrep %d\n", k); print_mat(identity, num_mo, num_mo, outfile); */ /* Check for MO swapping */ for(j=0; j < num_mo; j++) { maxvalue = 0.0; for(i=0; i < num_mo; i++) { if(fabs(identity[j][i]) > maxvalue) { maxvalue = fabs(identity[j][i]); row_max = i; } } if(row_max != j) phase_chk = 0; } /* Now correct the MO phases, if necessary */ if(phase_chk) { for(i=0; i < num_mo; i++) { if(identity[i][i] < 0.0) { for(j=0; j < nn; j++) cnew[k][j][i] = -(cnew[k][j][i]); } } /* fprintf(outfile, "Corrected MOs for irrep %d\n", k); print_mat(cnew[k], nn, num_mo, outfile); */ } free_matrix(smat,nn); free_matrix(tmp,num_mo); free_matrix(identity,num_mo); } } /* Finally, put the corrected MOs back into s->cmat if no swapping occurred */ if(phase_chk) { fprintf(outfile, "\n Correcting phases of orbitals.\n"); for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; for(j=0; j < nn; j++) for(i=0; i < num_mo; i++) s->cmat[j][i] = cnew[k][j][i]; free_matrix(cnew[k],nn); } } } else fprintf(outfile, "\n No phase correction possible.\n"); } free(cnew); return(phase_chk); } }} // namespace psi::cscf psi3/src/bin/cscf/rdone.cc0000644000101500007650000000770311112564564014110 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.7 2004/10/08 17:33:41 nruss * Modified iwl_rdone() to acept boolean for deleteing one-electron ints. -NJR * /* Revision 1.6 2002/12/06 15:50:32 crawdad /* Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as /* necessary. This is new for the PSI3 execution driver. /* -TDC /* /* Revision 1.5 2002/04/03 02:06:01 janssen /* Finish changes to use new include paths for libraries. /* /* Revision 1.4 2002/03/06 22:44:41 sherrill /* Add new keyword orthog_only = true to just orthogonalize orbitals and do /* nothing else. /* /* Revision 1.3 2001/06/21 21:00:37 crawdad /* I have simplified the libiwl functions iwl_rdone() and iwl_wrtone() to only /* read and write one-electron quantities and to more explicitly use the libpsio /* structure to allow multiple quantities in a single one-electron IWL file. /* The frozen-core energy is no longer dealt with in these functions, but is /* now handled in libfile30. The argument lists for these functions have /* therefore changed quite a lot, and I've tried to correct all the PSI3 /* codes that are affected. /* -TDC /* /* Revision 1.2 2000/10/13 19:51:21 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.1.1.1 2000/02/04 22:52:31 evaleev /* Started PSI 3 repository /* /* Revision 1.3 1999/11/02 18:10:14 evaleev /* Direct SCF improved /* /* Revision 1.2 1999/08/17 19:04:16 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:27 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { void rdone_iwl() { int stat; int ntri = ioff[nbasis]; int i,j,k,jj,kk; int max,off; double *ints; double e_fzc; /* If it's a direct SCF run - tell CINTS to compute one-electron integrals */ if (direct_scf) { stat = system("cints --oeints"); switch (stat) { case 0: /* CINTS ran successfully - continue */ break; default: /* Something went wrong */ fprintf(outfile," rdone_iwl: System call to CINTS failed. Check to see if it's in your PATH\n"); fprintf(stderr,"System call to CINTS failed. Check to see if it's in your PATH.\n"); exit(PSI_RETURN_FAILURE); } } ints = init_array(ntri); /* S integrals */ stat = iwl_rdone(itapS,PSIF_SO_S,ints,ntri,0, 0, outfile); for(i=0;i #include namespace psi { namespace cscf { double *pa, *pb; int *inext; unsigned int *lbij,*lbkl; int intmx=25920; /*int intmx=51840;*/ extern void findit(int ii, int jj, int kk, int ll, int ism, int ksm, double value, int iab); extern void findit_uhf(int ii, int jj, int kk, int ll, int ism, int ksm, double value, int iab); extern void packit_closed(unsigned int* lbij, unsigned int* lbkl, int endflg); extern void packit_open(unsigned int* lbij, unsigned int* lbkl, int endflg); void rdtwo() { int ilsti, nbuf; int ibufsz = 8942; int ibufqt = 2236; int i; int iii; int fi; int errcod; int ior, ism, jor, jsm; int kor, ksm, lor, lsm; int ii,jj,kk,ll; int p1,p2; int d2i = sizeof(double)/sizeof(int); double pki_int; int *tmp; union psi_buffer inbuf; struct iwlbuf ERIIN; int pk_flush; double *ints; cscf_nint=0; if(nbasis > 150) intmx *= 4; iwl_buf_init(&ERIIN,itap33,0.0,1,1); fprintf(outfile," reading integrals in the IWL format from files 33,35,36,37\n"); pa = (double *) init_array(intmx); pb = (double *) init_array(intmx); /* lbij = (unsigned int *) init_array((int) intmx/d2i); */ /* lbkl = (unsigned int *) init_array((int) intmx/d2i); */ lbij = (unsigned int *) init_int_array(intmx); lbkl = (unsigned int *) init_int_array(intmx); do { ilsti = ERIIN.lastbuf; nbuf = ERIIN.inbuf; if (print & 8) fprintf(outfile,"%5d\n",nbuf); fi = 0; for (i=0 ; i < nbuf ; i++,tmp += 2) { ii = ERIIN.labels[fi]; jj = ERIIN.labels[fi+1]; kk = ERIIN.labels[fi+2]; ll = ERIIN.labels[fi+3]; pki_int = ERIIN.values[i]; pk_flush = 0; /* If the first index is negative - it's the last integral necessary for a pk-block Set the flushing flag.. Hey, and we need the positive index back */ if (ii < 0) { pk_flush = 1; ii = abs(ii); } ism = so2symblk[ii]; jsm = so2symblk[jj]; ksm = so2symblk[kk]; lsm = so2symblk[ll]; ior = ii - scf_info[ism].ideg; jor = jj - scf_info[jsm].ideg; kor = kk - scf_info[ksm].ideg; lor = ll - scf_info[lsm].ideg; fi += 4; if (print & 128) fprintf(outfile," i = %d j = %d k = %d l = %d %lf\n",ii,jj,kk,ll,pki_int); if(!uhf){ if (ism == jsm && ksm == lsm && ism == ksm) { if (ior == jor && ior == kor || jor == kor && jor == lor) { findit(ii,jj,kk,ll,ism,ksm,pki_int,5); } else if (ior == kor || jor == lor) { findit(ii,jj,kk,ll,ism,ksm,pki_int,3); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit(ii,kk,p1,p2,ism,ksm,pki_int,4); } else if (jor == kor) { findit(ii,jj,kk,ll,ism,ksm,pki_int,3); findit(ii,ll,jj,kk,ism,ksm,pki_int,4); } else if (ior == jor || kor == lor) { findit(ii,jj,kk,ll,ism,ksm,pki_int,1); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit(ii,kk,p1,p2,ism,ksm,pki_int,2); } else { findit(ii,jj,kk,ll,ism,ksm,pki_int,1); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit(ii,kk,p1,p2,ism,ksm,pki_int,2); p1 = MAX0(jj,kk); p2 = MIN0(jj,kk); findit(ii,ll,p1,p2,ism,ksm,pki_int,2); } } else if (ism == jsm) { findit(ii,jj,kk,ll,ism,ksm,pki_int,1); } else if (ism == ksm) { if (ior == kor || jor == lor) { p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit(ii,kk,p1,p2,ism,jsm,pki_int,4); } else { p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit(ii,kk,p1,p2,ism,jsm,pki_int,2); } } } else{ if (ism == jsm && ksm == lsm && ism == ksm) { if (ior == jor && ior == kor || jor == kor && jor == lor) { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,4); } else if (ior == kor || jor == lor) { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,3); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit_uhf(ii,kk,p1,p2,ism,ksm,pki_int,5); } else if (jor == kor) { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,3); findit_uhf(ii,ll,jj,kk,ism,ksm,pki_int,5); } else if (ior == jor || kor == lor) { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,1); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit_uhf(ii,kk,p1,p2,ism,ksm,pki_int,2); } else { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,1); p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit_uhf(ii,kk,p1,p2,ism,ksm,pki_int,2); p1 = MAX0(jj,kk); p2 = MIN0(jj,kk); findit_uhf(ii,ll,p1,p2,ism,ksm,pki_int,2); } } else if (ism == jsm) { findit_uhf(ii,jj,kk,ll,ism,ksm,pki_int,1); } else if (ism == ksm) { if (ior == kor || jor == lor) { p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit_uhf(ii,kk,p1,p2,ism,ksm,pki_int,5); } else { p1 = MAX0(jj,ll); p2 = MIN0(jj,ll); findit_uhf(ii,kk,p1,p2,ism,jsm,pki_int,2); } } } if(pk_flush && cscf_nint) { if(iopen || uhf) packit_open(lbij,lbkl,0); else packit_closed(lbij,lbkl,0); } } if (!ilsti) iwl_buf_fetch(&ERIIN); } while(!ilsti); if(iopen || uhf) packit_open(lbij,lbkl,1); else packit_closed(lbij,lbkl,1); if(!iopen || !uhf) fprintf(outfile," wrote %d integrals to file92\n",num_ints); free(pa); free(pb); free(lbij); free(lbkl); free(inext); iwl_buf_close(&ERIIN,!delete_2e); } }} // namespace psi::cscf psi3/src/bin/cscf/rotate_vector.cc0000644000101500007650000000654611112564564015665 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.1 2000/02/04 22:52:32 evaleev * Initial revision * /* Revision 1.2 1999/08/17 19:04:17 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:27 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void check_rot(int nn, int num_mo, double **cold, double **cnew, double *smat_pac, double *fock_evals, int irrep); extern void formg_two(int iju, int* optest); extern void formg_open(); void rotate_vector() { int i,j,ij,k,nn,num_mo; int nc,no; int joff,oj; int *optest,iju=0; double **scr1,**scr2,**scr3; double tol=1.0e-15; struct symm *s; scr1 = (double **) init_matrix(nsfmax,nsfmax); scr2 = (double **) init_matrix(nsfmax,nsfmax); scr3 = (double **) init_matrix(nsfmax,nsfmax); dmat(); if(twocon) { /* optest = (int *) init_array(ioff[nbasis]/2); */ optest = (int *) init_int_array(ioff[nbasis]); /* find open shells */ for (i=0; i < num_ir ; i++) { iju += scf_info[i].num_so; if(scf_info[i].nopen) { iju = ioff[iju]; break; } } /* set up array of flags indicating open shells */ for (k=0,joff=0; k < num_ir ; k++) { s = &scf_info[k]; if (nn=s->num_so) { for (i=0; i < nn ; i++) for (j=0; j <= i ; j++) if(s->nopen) optest[ioff[i+joff]+j+joff] = 1; joff += nn; } } formg_two(iju,optest); } else formg_open(); for(i=0; i < num_ir ; i++) { s = &scf_info[i]; if(nn=s->num_so) { num_mo = s->num_mo; nc=s->nclosed; no=s->nopen; add_arr(s->hmat,s->gmat,s->fock_pac,ioff[nn]); tri_to_sq(s->fock_pac,scr1,nn); mmult(s->cmat,1,scr1,0,scr2,0,num_mo,nn,nn,0); mmult(scr2,0,s->cmat,0,scr1,0,num_mo,nn,num_mo,0); zero_mat(scr2,nn,nn); for(j=0; j < nc ; j++) for(k=0; k < nc ; k++) scr2[j][k]=scr1[j][k]; for(j=nc; j < nc+no ; j++) for(k=nc; k < nc+no ; k++) scr2[j][k]=scr1[j][k]; for(j=nc+no; j < num_mo ; j++) for(k=nc+no; k < num_mo ; k++) scr2[j][k]=scr1[j][k]; sq_rsp(num_mo,num_mo,scr2,s->fock_evals,1,scr3,tol); mmult(s->cmat,0,scr3,0,scr2,0,nn,num_mo,num_mo,0); if (icheck_rot) check_rot(nn, num_mo, s->cmat, scr2, s->smat, s->fock_evals, i); for(j=0; j < nn ; j++) for(k=0; k < num_mo ; k++) s->cmat[j][k]=scr2[j][k]; } } free_matrix(scr1,nsfmax); free_matrix(scr2,nsfmax); free_matrix(scr3,nsfmax); } }} // namespace psi::cscf psi3/src/bin/cscf/scf_input.cc0000644000101500007650000003255111110301757014761 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ #define EXTERN #include "includes.h" #include "common.h" #include #include namespace psi { namespace cscf { char *determine_functional(void); char *determine_grid(void); void scf_input(ip_value_t* ipvalue) { int i,j,k,ijk,m; double elast; double **scr_mat; char *alabel,*optyp,*wfn,*dertype,*guess,*jobtype; char *grid_str; char cjunk[80]; int nc,no,nh,nn,num_mo; int ncalcs; int optri,ierr,nat; int errcod; int size; int phase_chk; int mo_offset, so_offset; struct symm *s; reftype reftmp; int depth; int *mopi; /* ip_cwk_clear(); ip_cwk_add(":DEFAULT"); ip_cwk_add(":SCF"); */ if(ipvalue) ip_print_value(stdout,ipvalue); errcod = ip_string("LABEL",&alabel,0); if(errcod == IPE_OK) fprintf(outfile," label = %s\n",alabel); direct_scf = 0; errcod = ip_boolean("DIRECT",&direct_scf,0); /* Can do KS DFT direct only */ if (ksdft) direct_scf=1; mixing = 0; errcod = ip_boolean("ORB_MIX",&mixing,0); /*----------------------------------------------------- Which type of guess to use. Sets inflg to: 0 (AUTO,default) - check if there's an old vector in file30, set inflg to 1 on yes, to 2 otherwise. 1 - use old vector in file30 2 (GUESS=CORE) - use core guess -----------------------------------------------------*/ if(!ip_exist("GUESS",0)) { guess = strdup("AUTO"); inflg=0; } else { errcod = ip_string("GUESS",&guess,0); if (!strcmp(guess,"AUTO")) inflg=0; else if (!strcmp(guess,"CORE")) inflg=2; } hcore_guess = 0; if(ip_exist("HCORE_GUESS",0)) { char* token; errcod = ip_string("HCORE_GUESS",&token,0); if (!strcmp(token,"NEW")) hcore_guess = 1; } reset_occ = 0; errcod = ip_boolean("RESET_OCCUPATIONS",&reset_occ,0); char* reorder_cstr = 0; errcod = ip_string("REORDER",&reorder_cstr,0); if(reorder_cstr) { reorder = std::string(reorder_cstr); if (reorder != std::string("BEFORE") && reorder != std::string("AFTER") ) reorder.clear(); } if (!reorder.empty()) { errcod = ip_count("MOORDER",&size,0); errchk(errcod,"MOORDER"); if(errcod != IPE_OK) { fprintf(outfile,"\nREORDER given, but MOORDER not found\n"); exit(PSI_RETURN_FAILURE); } else { if(size > nbasis) { fprintf(outfile,"\nkeyword array MOORDER is too long\n"); exit(PSI_RETURN_FAILURE); } moorder.resize(size); for(i=0; i < size ; i++) { errcod = ip_data("MOORDER","%d",&(moorder[i]),1,i); errchk(errcod,"MOORDER"); } // TODO need to make sure that reordering does not mix irreps } } /* Remove after debugging. Stop cscf right before going to cints */ exitflag = 0; errcod = ip_boolean("EXIT_CINTS",&exitflag,0); itmax = 100; errcod = ip_data("MAXITER","%d",&itmax,0); it_diis = 0; errcod = ip_data("DIISSTART","%d",&it_diis,0); print = 0; errcod = ip_data("IPRINT","%d",&print,0); fock_typ = 0; errcod = ip_data("FOCK_TYPE","%d",&fock_typ,0); second_root = 0; if (twocon) { errcod = ip_boolean("SECOND_ROOT",&second_root,0); } icheck_rot = 1; errcod = ip_boolean("CHECK_ROT",&icheck_rot,0); check_mo_orthonormality = 0; errcod = ip_boolean("CHECK_MO_ORTHONORMALITY",&check_mo_orthonormality,0); ndiis = (iopen) ? 4 : 6; if(twocon) ndiis = 3; errcod = ip_data("NDIIS","%d",&ndiis,0); if(ipvalue) ip_print_tree(stdout,NULL); scf_conv = 7; if(ipvalue) ip_print_value(stdout,ipvalue); errcod = ip_string("WFN",&wfn,0); if(ipvalue) ip_print_value(stdout,ipvalue); errcod = ip_string("DERTYPE",&dertype,0); if(errcod == IPE_KEY_NOT_FOUND) { // no dertype given errcod = ip_string("JOBTYPE",&jobtype,0); if(errcod == IPE_KEY_NOT_FOUND) { // no jobtype given jobtype = strdup("SP"); } if (!strcmp(jobtype,"FREQ")) { dertype = (char *) malloc(sizeof(char)*7); strcpy(dertype,"SECOND"); } else { dertype = (char *) malloc(sizeof(char)*5); strcpy(dertype,"NONE"); } free(jobtype); } if(strcmp(wfn,"SCF")) scf_conv = 10; if(!strcmp(dertype,"FIRST")) scf_conv = 10; if(!strcmp(dertype,"SECOND")) scf_conv = 12; /* for freq finite difference calculations */ errcod = ip_string("JOBTYPE",&jobtype,0); if (errcod == IPE_OK) if (!strcmp(jobtype,"FREQ")) scf_conv = 12; errcod = ip_data("CONVERGENCE","%d",&scf_conv,0); if (ksdft){ functional = (char *)determine_functional(); grid_str = (char *)determine_grid(); } if(ipvalue) ip_print_value(stdout,ipvalue); fprintf(outfile," wfn = %s\n",wfn); fprintf(outfile," reference = %s\n",reference); if (ksdft) { fprintf(outfile," functional = %s\n",functional); fprintf(outfile," DFT grid = %s\n",grid_str); } fprintf(outfile," multiplicity = %d\n",multp); fprintf(outfile," charge = %d\n",charge); fprintf(outfile," direct = %s\n",(direct_scf) ? "true" : "false"); if(direct_scf) fprintf(outfile," dyn_acc = %s\n",(dyn_acc) ? "true" : "false"); fprintf(outfile," dertype = %s\n",dertype); fprintf(outfile," convergence = %d\n",scf_conv); fprintf(outfile," maxiter = %d\n",itmax); fprintf(outfile," guess = %s\n",guess); free(guess); if(print) fprintf(outfile," iprint = %d\n",print); if (second_root) fprintf(outfile," second_root = TRUE\n"); diisflg = 1; errcod = ip_boolean("DIIS",&diisflg,0); /* the convention is to set it to the opposite of it's meaning? */ diisflg = !diisflg; fprintf (outfile,"\n nuclear repulsion energy %22.13f\n",repnuc); fflush(outfile); nat = chkpt_rd_natom(); ncalcs = chkpt_rd_ncalcs(); /* if inflg is 0 and this isn't the first calc, then get the old vector */ /* from file30. if inflg is 2, just use core hamiltonian guess */ /* if inflg is 1, get old vector no matter what ncalcs is */ if ((inflg==0 && ncalcs) || inflg == 1) { inflg = 1; optri = abs(chkpt_rd_iopen()); reftmp = (reftype) chkpt_rd_ref(); fprintf(outfile,"\n using old vector from file30 as initial guess\n"); /* get old energy from file30 */ elast = chkpt_rd_escf(); fprintf(outfile," energy from old vector: %14.8f\n",elast); so_offset = 0; mo_offset = 0; /* Add MO's per/irrep for scf_info */ mopi = chkpt_rd_orbspi(); for(k=0; k < num_ir; k++) scf_info[k].num_mo = mopi[k]; free(mopi); const int nmo = chkpt_rd_nmo(); /* ---------------------------------------------------- ** This is the UHF part of the restarting algorithm ** STB (10/29/99) ** **----------------------------------------------------*/ if(uhf){ /* if the reference is not UHF, then just read in the vector for the restricted calculation into both */ if(reftmp != ref_uhf && reftmp != ref_uks){ for(k=0; k < num_ir ; k++) { s = &scf_info[k]; if(nn=s->num_so) { spin_info[0].scf_spin[k].cmat = chkpt_rd_scf_irrep(k); spin_info[1].scf_spin[k].cmat = chkpt_rd_scf_irrep(k); } } } else{ for(k=0; k < num_ir ; k++) { s = &scf_info[k]; if(nn=s->num_so) { spin_info[0].scf_spin[k].cmat = chkpt_rd_alpha_scf_irrep(k); spin_info[1].scf_spin[k].cmat = chkpt_rd_beta_scf_irrep(k); } } } for(m=0;m<2;m++){ for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; for(i=0; i < nn; i++) for(j=0; j < num_mo; j++) spin_info[m].scf_spin[k].cmat_orig[i][j] = spin_info[m].scf_spin[k].cmat[i][j]; } } } phase_check = 1; /* reorder vector now if reorder == BEFORE */ if (reorder == std::string("BEFORE")) { int loff = 0; int jnew; /* TDC(6/19/96) - If the vector is re-ordered, don't allow phase_checking */ phase_check = 0; // just in case, check that the length of moorder equals the number of MOs if (moorder.size() != nmo) { fprintf(outfile,"\nlength of MOORDER != nmo\n"); exit(PSI_RETURN_FAILURE); } fprintf(outfile,"\n mo's will be reordered\n"); for (m=0;m<2;m++){ for (i=0; i < num_ir; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; scr_mat = (double **) init_matrix(nn,num_mo); for (j=0; j < num_mo; j++) { jnew = moorder[j+loff] - loff; for (k=0; k < nn ; k++) { scr_mat[k][jnew] =spin_info[m].scf_spin[i].cmat[k][j]; } } for (j=0; j < nn ; j++) for (k=0; k < num_mo ; k++) spin_info[m].scf_spin[i].cmat[j][k] = scr_mat[j][k]; fprintf(outfile,"\n reordered %s mo's for irrep %s\n", spin_info[m].spinlabel,s->irrep_label); print_mat(spin_info[m].scf_spin[i].cmat,nn,num_mo,outfile); loff += num_mo; free_matrix(scr_mat,nn); } } } } } else{ for(k=0; k < num_ir ; k++) { s = &scf_info[k]; if(nn=s->num_so) { s->cmat = chkpt_rd_scf_irrep(k); } } /* TDC(6/19/96) - Make a copy of the vector for later MO phase checking and temporarily set the phase_check flag to true */ for(k=0; k < num_ir; k++) { s = &scf_info[k]; if(nn=s->num_so) { num_mo = s->num_mo; for(i=0; i < nn; i++) for(j=0; j < num_mo; j++) s->cmat_orig[i][j] = s->cmat[i][j]; } } phase_check = 1; /* reorder vector now if reorder == BEFORE */ if (reorder == std::string("BEFORE")) { int loff = 0; int jnew; /* TDC(6/19/96) - If the vector is re-ordered, don't allow phase_checking */ phase_check = 0; // just in case, check that the length of moorder equals the number of MOs if (moorder.size() != nmo) { fprintf(outfile,"\nlength of MOORDER != nmo\n"); exit(PSI_RETURN_FAILURE); } fprintf(outfile,"\n mo's will be reordered\n"); for (i=0; i < num_ir; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; scr_mat = (double **) init_matrix(nn,num_mo); for (j=0; j < num_mo; j++) { jnew = moorder[j+loff] - loff; for (k=0; k < nn ; k++) { scr_mat[k][jnew]=s->cmat[k][j]; } } for (j=0; j < nn ; j++) for (k=0; k < num_mo ; k++) s->cmat[j][k] = scr_mat[j][k]; fprintf(outfile,"\n reordered mo's for irrep %s\n", s->irrep_label); print_mat(s->cmat,nn,num_mo,outfile); loff += num_mo; free_matrix(scr_mat,nn); } } } } } else { inflg = 2; fprintf(outfile," first run, so defaulting to core-hamiltonian guess\n"); /* TDC(6/19/96) - If not starting from old vector, don't allow phase checking */ phase_check = 0; } /* TDC(6/20/96) - Check to see if the user will let us do phase correction. The default has already been set above. */ phase_chk = 1; errcod = ip_boolean("PHASE",&phase_chk,0); if(phase_check && phase_chk) phase_check = 1; else phase_check = 0; /* read in damping factor and level shift */ dampsv= (iopen) ? 0.02 : 0.0; if(twocon) dampsv = 0.01; errcod = ip_data("DIISDAMP","%lf",&dampsv,0); lshift=1.0; errcod = ip_data("LEVELSHIFT","%lf",&lshift,0); if(!iopen && fabs(lshift) > 0.0) lshift = 0.1; stop_lshift=10; errcod = ip_data("STOP_LEVELSHIFT","%d",&stop_lshift,0); dampd=1.0; errcod = ip_data("DAMPD","%lf",&dampd,0); dampo=1.0; errcod = ip_data("DAMPO","%lf",&dampo,0); fprintf(outfile,"\n level shift = %f\n",lshift); fprintf(outfile,"\n level shifting will stop after %d cycles\n",stop_lshift); if(!diisflg) { fprintf(outfile," diis scale factor = %f\n",dampsv+1.0); fprintf(outfile," iterations before extrapolation = %d\n",it_diis); fprintf(outfile," %d error matrices will be kept\n",ndiis); } else fprintf(outfile,"\n diis turned off\n"); switch (fock_typ) { case 0: break; case 1: fprintf(outfile,"\n a fock matrix for high spin will be used\n"); fprintf(outfile," this form may not work well with diis\n"); break; default: fprintf(outfile,"\n an experimental fock matrix will be used\n"); fprintf(outfile," the management will not be held responsible for the results\n"); } /* EFV 10/24/98 Check if delete integrals */ delete_ints = 0; if(!strcmp(wfn,"SCF") && (!strcmp(dertype,"FIRST") || !strcmp(dertype,"NONE"))) delete_ints = 1; errcod = ip_boolean("DELETE_INTS",&delete_ints,0); /* These keywords will work only with IWL format */ delete_1e = delete_ints; errcod = ip_boolean("DELETE_1E",&delete_1e,0); delete_2e = delete_ints; errcod = ip_boolean("DELETE_2E",&delete_2e,0); fflush(outfile); } }} // namespace psi::cscf psi3/src/bin/cscf/scf_iter.cc0000644000101500007650000003342311112564564014575 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.11 2007/04/05 15:45:25 crawdad * Fixed a few memory leaks identified by valgrind. -TDC * /* Revision 1.10 2004/05/03 04:32:40 crawdad /* Major mods based on merge with stable psi-3-2-1 release. Note that this /* version has not been fully tested and some scf-optn test cases do not run /* correctly beccause of changes in mid-March 2004 to optking. /* -TDC /* /* Revision 1.9.8.2 2004/04/21 15:45:07 evaleev /* Modified DIIS algorithm for RHF and ROHF to work in OSO basis rather than in /* AO basis, to avoid difficulties of transforming between MO and AO bases /* when linear dependencies are present. /* /* Revision 1.9.8.1 2004/04/06 21:29:05 crawdad /* Corrections to the RHF/ROHF DIIS algorithm, which was simply incorrect. /* The backtransformation of the DIIS error vectors to the AO basis was not /* mathematically right. /* -TDC and EFV /* /* Revision 1.9 2002/04/03 02:06:01 janssen /* Finish changes to use new include paths for libraries. /* /* Revision 1.8 2000/07/10 18:03:34 sbrown /* Enabling cscf to send over just the occupied SCF eigenvector for DFT /* calculations. Only done for the RHF case. /* /* Revision 1.7 2000/07/06 20:04:02 sbrown /* Added capabilities to send the eigenvector to cints for DFT /* calculations. /* /* Revision 1.6 2000/07/05 21:47:31 sbrown /* Enabled the code to export the SCF eigenvector to CINTS when doing DFT. /* /* Revision 1.5 2000/06/27 21:12:33 evaleev /* . /* /* Revision 1.4 2000/06/27 21:08:11 evaleev /* Fixed a minor string manipulation problem in scf_input.c /* /* Revision 1.3 2000/06/26 19:04:12 sbrown /* Added DFT capapbilities to interface with cints using direct scf /* /* Revision 1.2 2000/06/22 22:15:02 evaleev /* Modifications for KS DFT. Reading in XC Fock matrices and XC energy in formg_direct need to be uncommented (at present those are not produced by CINTS yet). /* /* Revision 1.1.1.1 2000/02/04 22:52:32 evaleev /* Started PSI 3 repository /* /* Revision 1.6 1999/11/04 19:24:31 localpsi /* STB (11/4/99) - Added the orb_mix feature which is equivalent to guess = mix /* in G94 and also fixed restarting so that if you have different wavefuntions, /* everything works. Also if you specify no DOCC and SOCC and restart, if the /* wavefunctions are different, it will guess again. /* /* Revision 1.5 1999/11/02 23:56:00 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.4 1999/10/22 19:47:19 evaleev /* A direct SCF-enabled version (set DIRECT_SCF=TRUE in input.dat). /* /* Revision 1.3 1999/10/11 17:03:18 evaleev /* Modified the location of nmo in mconst array in file 30. /* /* Revision 1.2 1999/08/17 19:04:17 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The program prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes have to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:28 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { void scf_iter() { int i,j,k,m,ij; int max,off,jj,kk; int ntri; int nn,num_mo,newci; double cimax=0; double occi, occj, occ0, den; double **scr; double **cmat; double *c1, *c2; double **fock_c, **fock_o; double **fock_ct; double **ctrans; double tol = 1.0e-14; struct symm *s; diiser = 0.0; scr = (double **) block_matrix(nsfmax,nsfmax); fock_c = (double **) block_matrix(nsfmax,nsfmax); fock_ct = (double **) block_matrix(nsfmax,nsfmax); ctrans = (double **) block_matrix(nsfmax,nsfmax); if(iopen) { c1 = (double *) init_array(num_ir); c2 = (double *) init_array(num_ir); fock_o = (double **) block_matrix(nsfmax,nsfmax); } for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; s->ucmat = block_matrix(num_mo, num_mo); for(j=0; jucmat[j][j] = 1.0; } } /* set up c1 and c2 */ if(iopen) { for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; for (j=0; j < num_mo ; j++) { if(s->occ_num[j]==2.0) c1[i]=2.0; if(s->occ_num[j]==1.0) c2[i]=1.0; if(s->occ_num[j]==0.5) c2[i]=0.5; if(s->occ_num[j]==1.5) c2[i]=1.5; } den = c1[i]-c2[i]; if(den) { c1[i] /= den; c2[i] /= den; } } } } /* and iterate */ for (iter=0; iter < itmax ; ) { if(print & 4) { for(m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { fprintf(outfile, "\ngmat for irrep %s",s->irrep_label); print_array(s->gmat,nn,outfile); if(iopen) { fprintf(outfile, "\ngmato for irrep %s",s->irrep_label); print_array(s->gmato,nn,outfile); } if (ksdft) { fprintf(outfile, "\nxcmat for irrep %s",s->irrep_label); print_array(s->xcmat,nn,outfile); } } } } for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { /* form fock matrix = h+g */ add_arr(s->hmat,s->gmat,s->fock_pac,ioff[nn]); /* for open shell, form fock_open = h+g-q */ if(iopen) { for (i=0; i < ioff[nn] ; i++) s->fock_open[i]=s->fock_pac[i]-s->gmato[i]; } } } /*---------------------------------------------------- In KS DFT case, Fock matrix doesn't include Fxc yet add them up only after the computation of energy ----------------------------------------------------*/ ecalc(tol); if (ksdft) { /* now form f = h + g + fxc */ /* it should be alright to use fock_pac as 2 arguments */ for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { add_arr(s->fock_pac,s->xcmat,s->fock_pac,ioff[nn]); if(print & 4) { fprintf(outfile,"\n J+X+C gmat for irrep %d",s->irrep_label); print_array(s->fock_pac,nn,outfile); } } } } /* create new fock matrix in fock_pac or fock_eff */ if(!diisflg) diis(scr,fock_c,fock_ct,c1,c2,cimax,newci); if(iopen) { for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { num_mo = s->num_mo; /* transform fock_pac to mo basis */ tri_to_sq(s->fock_pac,fock_ct,nn); /* mxmb(s->cmat,nn,1,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,s->cmat,1,nn,fock_c,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,s->cmat,0,fock_c,0,num_mo,nn,num_mo,0); /* transform fock_open to mo basis */ tri_to_sq(s->fock_open,fock_ct,nn); /* mxmb(s->cmat,nn,1,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,s->cmat,1,nn,fock_o,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,s->cmat,0,fock_o,0,num_mo,nn,num_mo,0); /* form effective fock matrix in mo basis */ ij=0; occ0 = s->occ_num[0]; for (i=0; i < num_mo; i++ ) { for (j=0; j <= i; j++) { occi = s->occ_num[i]; occj = s->occ_num[j]; /* default: Guest & Saunders general form */ if(iter < itmax-1 && !converged && !fock_typ) { if(occi == occj) s->fock_eff[ij] = fock_c[i][j]; else if(occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else { if(occj==2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } } /* Guest & Saunders' form for high spin */ else if(iter < itmax-1 && !converged && fock_typ == 1) { if (occi == occj || occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else if (occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* test form (fo fo fo) */ else if(iter < itmax-1 && !converged && fock_typ == 2) { if (occi == occj) s->fock_eff[ij] = fock_o[i][j]; else if(occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else if(occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* test form a*(fc fc fc) */ else if(iter < itmax-1 && !converged && fock_typ == 3) { if (occi == occj) s->fock_eff[ij] = dampd*fock_c[i][j]; else if(occi) s->fock_eff[ij] = dampo*(2.0*fock_c[i][j]-fock_o[i][j]); else if(occj == 2.0) s->fock_eff[ij] = dampo*fock_c[i][j]; else s->fock_eff[ij] = dampo*fock_o[i][j]; } /* test form a*(fo fo fo) */ else if(iter < itmax-1 && !converged && fock_typ == 4) { if (occi == occj) s->fock_eff[ij] = dampd*fock_o[i][j]; else if(occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else if(occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* test form a*(2fc-fo 2fc-fo 2fc-fo) */ else if(iter < itmax-1 && !converged && fock_typ == 5) { if (occi == occj) s->fock_eff[ij] = dampd*(2.0*fock_c[i][j]-fock_o[i][j]); else if(occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else if(occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* form for converged wavefunction */ else { if (occi == 2.0) s->fock_eff[ij]=fock_c[i][j]; else if(occj != 2.0) s->fock_eff[ij]=fock_o[i][j]; else { if(occi) s->fock_eff[ij] = 2.0*fock_c[i][j]-fock_o[i][j]; else s->fock_eff[ij]=fock_c[i][j]; } } if(j==i) { #if 1 if (occi == occ0 && occi) s->fock_eff[ij] -= lshift; else if (occi) s->fock_eff[ij] -= 0.5*lshift; #else if (occi == 1.0) s->fock_eff[ij] += 0.5*lshift; else if (occi == 0.0) s->fock_eff[ij] += 0.5*(lshift+0.1); #endif } ij++; } } } } } for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { num_mo = s->num_mo; occ0 = s->occ_num[0]; if(iopen) { rsp(num_mo,num_mo,ioff[num_mo],s->fock_eff,s->fock_evals,1,ctrans,tol); /* mxmb(s->cmat,1,nn,ctrans,1,nn,scr,1,nn,nn,nn,nn);*/ mmult(s->cmat,0,ctrans,0,scr,0,nn,num_mo,num_mo,0); for (i=0; i < num_mo; i++) { occi = s->occ_num[i]; #if 1 if (occi == occ0 && occi) s->fock_evals[i] += lshift; else if (occi) s->fock_evals[i] += 0.5*lshift; #else if (occi == 1.0) s->fock_evals[i] -= 0.5*lshift; else if (occi == 0.0) s->fock_evals[i] -= 0.5*(lshift+0.1); #endif } for(i=0; i < nn; i++) for (j=0; j < num_mo; j++) s->cmat[i][j] = scr[i][j]; mmult(s->ucmat,0,ctrans,0,scr,0,num_mo,num_mo,num_mo,0); for(i=0; i < num_mo; i++) for (j=0; j < num_mo; j++) s->ucmat[i][j] = scr[i][j]; } else { /* transform fock_pac to mo basis */ tri_to_sq(s->fock_pac,fock_ct,nn); /* mxmb(s->cmat,nn,1,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,s->cmat,1,nn,fock_c,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,s->cmat,0,fock_c,0,num_mo,nn,num_mo,0); /* diagonalize fock_c to get ctrans */ sq_rsp(num_mo,num_mo,fock_c,s->fock_evals,1,ctrans,tol); if(print & 4) { fprintf(outfile,"\n eigenvector for irrep %s\n", s->irrep_label); eivout(ctrans,s->fock_evals,num_mo,num_mo,outfile); } /* mxmb(s->cmat,1,nn,ctrans,1,nn,scr,1,nn,nn,nn,nn);*/ mmult(s->cmat,0,ctrans,0,scr,0,nn,num_mo,num_mo,0); if(print & 4) { fprintf(outfile,"\n eigenvector after irrep %s\n", s->irrep_label); print_mat(scr,nn,num_mo,outfile); } for (i=0; i < nn; i++) for (j=0; j < num_mo; j++) s->cmat[i][j] = scr[i][j]; mmult(s->ucmat,0,ctrans,0,scr,0,num_mo,num_mo,num_mo,0); for(i=0; i < num_mo; i++) for (j=0; j < num_mo; j++) s->ucmat[i][j] = scr[i][j]; } } } if(converged) { free_block(scr); free_block(fock_c); free_block(fock_ct); free_block(ctrans); if(iopen) { free_block(fock_o); free(c1); free(c2); } cleanup(); } schmit(1); if(print & 4) { for(i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; fprintf(outfile,"\northogonalized mos irrep %s\n", s->irrep_label); print_mat(s->cmat,nn,num_mo,outfile); } } } /* reset occupations if needed */ if (reset_occ) { sortev(); occ_calc(); } /* form new density matrix */ dmat(); /* and form new fock matrix */ if(iter < itmax) { if (direct_scf) formg_direct(); else { if(iopen) formg_open(); else formg_closed(); } } } /* Clean up */ for(i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) free_block(s->ucmat); } } }} // namespace psi::cscf psi3/src/bin/cscf/scf_iter_2.cc0000644000101500007650000003312411112564564015014 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.3 2003/08/09 17:39:56 crawdad * I added the ability to determine frozen core orbitals for UHF references to * cleanup.c. I also commented out ip_cwk_clear and ip_cwk_add calls in * cleanup.c, guess.c, scf_input.c and scf_iter_2.c. These calls were (1) poor * design and (2) interfering with default ip_tree behavior needed to simplify * the format of input.dat. * -TDC * /* Revision 1.2 2002/03/25 02:17:36 janssen /* Get rid of tmpl. Use new naming scheme for libipv1 includes. /* /* Revision 1.1.1.1 2000/02/04 22:52:32 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/08/17 19:04:17 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:28 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ #define EXTERN #include "includes.h" #include "common.h" #include namespace psi { namespace cscf { /* scf procedure for two-configuration scf */ void scf_iter_2() { int i,j,k,m,ij; int joff; int nn,num_mo; int iju=0; int newci=1; int opblk=0; int *optest; int errcod; double ciconv = 10.0e-9; // FAE it was 10.0e-9 double c1i,c1ii; double eci1,eci2,eci3; double ci1,ci2,ci1old,term,hoff,amax,cn,sn; double cimax,cimin,incr; double occi, occj, occ0, den; double **scr; double *c1, *c2; double **fock_c, **fock_o; double **fock_ct,**fock_eff; double **ctrans; double tol = 1.0e-16; struct symm *s; diiser = 0.0; /* optest = (int *) init_array(ioff[nbasis]/2); */ optest = (int *) init_int_array(ioff[nbasis]); scr = (double **) init_matrix(nsfmax,nsfmax); fock_c = (double **) init_matrix(nsfmax,nsfmax); fock_ct = (double **) init_matrix(nsfmax,nsfmax); ctrans = (double **) init_matrix(nsfmax,nsfmax); c1 = (double *) init_array(num_ir); c2 = (double *) init_array(num_ir); fock_o = (double **) init_matrix(nsfmax,nsfmax); for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; s->ucmat = block_matrix(num_mo, num_mo); for(j=0; jucmat[j][j] = 1.0; } } /* ip_cwk_clear(); ip_cwk_add(":DEFAULT"); ip_cwk_add(":SCF"); */ incr=0.25; errcod = ip_data("INCR","%lf",&incr,0); fprintf(outfile,"\n tcscf increment = %f\n",incr); /* find open shells */ for (i=0; i < num_ir ; i++) { iju += scf_info[i].num_mo; if(scf_info[i].nopen) { iju = ioff[iju]; break; } } for (i=0; i < num_ir ; i++) { s= &scf_info[i]; if(nn=s->num_so) { num_mo = s->num_mo; for (j=0; j < num_mo ; j++) { if (s->occ_num[j] == 1.0) { if (!opblk) { opblk++; opshl1 = j; opblk1 = i; } else { opshl2 = j; opblk2 = i; } } } } } /* set up array of flags indicating open shells */ for (k=joff=0; k < num_ir ; k++) { s = &scf_info[k]; if (nn=s->num_so) { for (i=0; i < nn ; i++) for (j=0; j <= i ; j++) if(s->nopen) optest[ioff[i+joff]+j+joff] = 1; joff += nn; } } /* set up c1 and c2 */ for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; for (j=0; j < num_mo ; j++) { if(s->occ_num[j]==2.0) c1[i]=2.0; if(s->occ_num[j]==1.0) c2[i]=1.0; } if(i == opblk1) c1i=c1[i]; if(i == opblk2) c1ii=c1[i]; den = c1[i]-c2[i]; if(den != 0.0) { c1[i] /= den; c2[i] /= den; } } } ci1 = 1.0; ci1old = 0.0; // FAE Give it some arbitrary value /* and iterate */ if (second_root) fprintf(outfile, "Warning: Finding second root of TCSCF\n\n"); for (iter=0; iter < itmax ; ) { if(iter==stop_lshift){ lshift = 1.0; fprintf(outfile,"Setting level shift to %lf\n",lshift); } schmit(1); if(!newci || fabs(ci1old-ci1) < ciconv && iter) goto L2; /* do some funky stuff to get coeffs ? */ dmat_2(opblk1); dmat_2(opblk2); for (i=0; i < num_ir ; i++) { double d1,d2; s = &scf_info[i]; if (nn=s->num_so) { for (j=0; j < ioff[nn] ; j++) { d1 = s->pmat2[j]; d2 = s->pmato2[j]; s->pmat2[j] = d1+d2; s->pmato2[j] = d1-d2; } } } formg_open(); eci1 = eci2 = eci3 = 0.0; for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { for (j=0; j < ioff[nn] ; j++) { eci1 += s->pmato2[j]*s->hmat[j]; eci2 += s->pmato2[j]*s->dpmat[j]; eci3 += s->pmato2[j]*s->dpmato[j]; } } } term = 0.5*(eci1+0.5*eci2); hoff = -0.25*eci3; amax = term*term + hoff*hoff; amax = sqrt(amax); if(term < 0.0) amax = -(amax); cn = (amax+term)/(2*amax); cn = sqrt(cn); sn = hoff/(cn*(amax+amax)); ci1old = ci1; if (!second_root) { if(term >= 0.0) { ci1 = cn; ci2 = -sn; } else { ci1=sn; ci2=cn; } } else { if(term >= 0.0) { ci1 = sn; ci2 = cn; } else { ci1=cn; ci2=-sn; } } save_ci1 = ci1; save_ci2 = ci2; scf_info[opblk1].occ_num[opshl1] = ci1*ci1*2.0; scf_info[opblk2].occ_num[opshl2] = ci2*ci2*2.0; den = c1i-scf_info[opblk1].occ_num[opshl1]; c1[opblk1] = c1i/den; c2[opblk1] = scf_info[opblk1].occ_num[opshl1]/den; den = c1ii-scf_info[opblk2].occ_num[opshl2]; c1[opblk2] = c1ii/den; c2[opblk2] = scf_info[opblk2].occ_num[opshl2]/den; alpha1 = 1.0 - 2.0/scf_info[opblk1].occ_num[opshl1]; alpha2 = -1.0/(ci1*ci2); alpha3 = 1.0 - 2.0/scf_info[opblk2].occ_num[opshl2]; cimax = MAX0(ci1,ci2); cimin = MIN0(ci1,ci2); cimax = 1.0/(cimax*cimax+dampsv); if(fabs(cimin) >= 0.1) cimax = 1.0; fprintf(outfile," ci coeffs %14.10f %14.10f\n",ci1,ci2); L2: /* form density matrix */ dmat(); /* form g matrix */ formg_two(iju,optest); for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn = s->num_so) { /* form fock matrix = h+g */ add_arr(s->hmat,s->gmat,s->fock_pac,ioff[nn]); /* form fock_open = h+g-q */ for (i=0; i < ioff[nn] ; i++) s->fock_open[i]=s->fock_pac[i]-s->gmato[i]; } } newci = ecalc(incr); /* create new fock matrix in fock_eff */ if(!diisflg) diis(scr,fock_c,fock_ct,c1,c2,cimax,newci); for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { num_mo = s->num_mo; /* transform fock_pac to mo basis */ tri_to_sq(s->fock_pac,fock_ct,nn); /* mxmb(s->cmat,nn,1,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,s->cmat,1,nn,fock_c,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,s->cmat,0,fock_c,0,num_mo,nn,num_mo,0); /* transform fock_open to mo basis */ tri_to_sq(s->fock_open,fock_ct,nn); /* mxmb(s->cmat,nn,1,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,s->cmat,1,nn,fock_o,1,nn,nn,nn,nn);*/ mmult(s->cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,s->cmat,0,fock_o,0,num_mo,nn,num_mo,0); /* form effective fock matrix in mo basis */ occ0 = s->occ_num[0]; for (i=ij=0; i < num_mo; i++) { for (j=0; j <= i; j++,ij++) { occi = s->occ_num[i]; occj = s->occ_num[j]; /* default: Guest & Saunders general form */ if(iter < itmax-1 && !converged && !fock_typ) { if(occi == occj) s->fock_eff[ij] = fock_c[i][j]; else if(occi) s->fock_eff[ij] = cimax*(c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]); else { if(occj==2.0) s->fock_eff[ij] = cimax*fock_c[i][j]; else s->fock_eff[ij] = cimax*fock_o[i][j]; } } /* Guest & Saunders' form for high spin */ else if(iter < itmax-1 && !converged && fock_typ == 1) { if (occi == occj || occi) s->fock_eff[ij] = c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]; else if (occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* test form (fo fo fo) */ else if(iter < itmax-1 && !converged && fock_typ == 2) { if (occi == occj) s->fock_eff[ij] = fock_o[i][j]; else if(occi) s->fock_eff[ij] = c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]; else if(occj == 2.0) s->fock_eff[ij] = fock_c[i][j]; else s->fock_eff[ij] = fock_o[i][j]; } /* test form a*(fc fc fc) */ else if(iter < itmax-1 && !converged && fock_typ == 3) { if (occi == occj) s->fock_eff[ij] = dampd*fock_c[i][j]; else if(occi) s->fock_eff[ij] = dampo*(c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]); else if(occj == 2.0) s->fock_eff[ij] = dampo*fock_c[i][j]; else s->fock_eff[ij] = dampo*fock_o[i][j]; } /* test form a*(fo fo fo) */ else if(iter < itmax-1 && !converged && fock_typ == 4) { if (occi == occj) s->fock_eff[ij] = dampd*fock_o[i][j]; else if(occi) s->fock_eff[ij] = dampo*(c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]); else if(occj == 2.0) s->fock_eff[ij] = dampo*fock_c[i][j]; else s->fock_eff[ij] = dampo*fock_o[i][j]; } /* test form a*(2fc-fo 2fc-fo 2fc-fo) */ else if(iter < itmax-1 && !converged && fock_typ == 5) { if (occi == occj) s->fock_eff[ij] = dampd*(c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]); else if(occi) s->fock_eff[ij] = dampo*(c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]); else if(occj == 2.0) s->fock_eff[ij] = dampo*fock_c[i][j]; else s->fock_eff[ij] = dampo*fock_o[i][j]; } /* form for converged wavefunction */ else { if (occi == 2.0) s->fock_eff[ij]=fock_c[i][j]; else if(occj != 2.0) s->fock_eff[ij]=fock_o[i][j]; else { if(occi) s->fock_eff[ij] = c1[m]*fock_c[i][j]-c2[m]*fock_o[i][j]; else s->fock_eff[ij]=fock_c[i][j]; } } if(j==i) { if (occi == occ0 && occi) s->fock_eff[ij] -= lshift; else if (occi) s->fock_eff[ij] -= 0.5*lshift; } } } } } for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { num_mo = s->num_mo; occ0 = s->occ_num[0]; rsp(num_mo,num_mo,ioff[num_mo],s->fock_eff,s->fock_evals,1,ctrans,tol); /* mxmb(s->cmat,1,nn,ctrans,1,nn,scr,1,nn,nn,nn,nn);*/ mmult(s->cmat,0,ctrans,0,scr,0,nn,num_mo,num_mo,0); for (i=0; i < num_mo; i++) { occi = s->occ_num[i]; if (occi == occ0 && occi) s->fock_evals[i] += lshift; else if (occi) s->fock_evals[i] += 0.5*lshift; } for(i=0; i < nn; i++) for (j=0; j < num_mo; j++) s->cmat[i][j] = scr[i][j]; } } if(converged) { free_matrix(scr,nsfmax); free_matrix(fock_c,nsfmax); free_matrix(fock_ct,nsfmax); free_matrix(ctrans,nsfmax); free_matrix(fock_o,nsfmax); free(c1); free(c2); free(optest); /* Clean up */ for(i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) free_block(s->ucmat); } cleanup(); } } } }} // namespace psi::cscf psi3/src/bin/cscf/schmit.cc0000644000101500007650000000616411112564564014270 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.3 2002/12/06 15:50:32 crawdad * Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as * necessary. This is new for the PSI3 execution driver. * -TDC * /* Revision 1.2 2000/10/13 19:51:22 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.1.1.1 2000/02/04 22:52:32 evaleev /* Started PSI 3 repository /* /* Revision 1.2 1999/08/17 19:04:18 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:28 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed /* * Revision 1.1 1991/06/15 20:22:42 seidl * Initial revision * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void schmit(int all) { int i,j,ij,nn,num_mo; int n,m,ncol; double *v,**ctmp,vtmp; struct symm *s; v = (double *) init_array(nsfmax); ctmp = (double **) init_matrix(nsfmax,nsfmax); for(n=0; n < num_ir ; n++) { s= &scf_info[n]; if(nn=s->num_so) { num_mo = s->num_mo; for (i=0; i < nn ; i++) for (j=0; j < num_mo ; j++) ctmp[j][i] = s->cmat[i][j]; ncol = s->nclosed + s->nopen; if(s->nhalf) ncol++; if(all) ncol = num_mo; if(!ncol) continue; for(m=0; m < ncol ; m++) { v[0]=ctmp[m][0]*s->smat[0]; for(i=1; i < nn ; i++) { for(j=0,vtmp=0.0; j < i ; j++) { ij=ioff[i]+j; vtmp += ctmp[m][j]*s->smat[ij]; v[j] += ctmp[m][i]*s->smat[ij]; } v[i] = vtmp+ctmp[m][i]*s->smat[ioff[i]+j]; } for(i=0,vtmp=0.0; i < nn ; i++) vtmp += v[i]*ctmp[m][i]; if(!vtmp) { exit(PSI_RETURN_FAILURE); } if(vtmp < 10.0e-20) vtmp = 10.0e-20; vtmp = 1.0/sqrt(vtmp); for(i=0; i < nn ; i++) { v[i] *= vtmp; ctmp[m][i] *= vtmp; } if(m < ncol-1) { for(i=m+1,vtmp=0.0; i < ncol ; i++) { for(j=0,vtmp=0.0; jcmat[i][j] = ctmp[j][i]; } } free(v); free_matrix(ctmp,nsfmax); } }} // namespace psi::cscf psi3/src/bin/cscf/schmit_uhf.cc0000644000101500007650000000651211112564564015127 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.3 2002/12/06 15:50:32 crawdad * Changed all exit values to PSI_RETURN_SUCCESS or PSI_RETURN_FAILURE as * necessary. This is new for the PSI3 execution driver. * -TDC * /* Revision 1.2 2000/10/13 19:51:22 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.1.1.1 2000/02/04 22:52:34 evaleev /* Started PSI 3 repository /* /* Revision 1.1 1999/11/02 23:56:00 localpsi /* Shawn Brown - (11/2/99) Modified to the code in a few major ways. /* /* 1. Added the capability to do UHF. All of the features available with the /* other refrences have been added for UHF. /* /* 2. For UHF, I had to alter the structure of file30. (See cleanup.c for a /* map) This entailed adding a pointer array right after the header in the SCF /* section of file30 that pointed to all of the data for the SCF caclulation. /* Functions were added to libfile30 to account for this and they are /* incorporated in this code. /* /* 3. Updated and fixed all of the problems associated with my previous /* guessing code. The code no longer uses OPENTYPE to specify the type of /* occupation. The keword REFERENCE and MULTP can now be used to indicate any /* type of calculation. (e.g. ROHF with MULTP of 1 is an open shell singlet /* ROHF calculation) This code was moved to occ_fun.c. The code can also /* guess at any multplicity in a highspin case, provided enough electrons. /* /* Revision 1.1.1.1 1999/04/12 16:59:28 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed /* * Revision 1.1 1991/06/15 20:22:42 seidl * Initial revision * */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void schmit_uhf(int all) { int i,j,ij,nn,num_mo; int n,m,t,ncol; double *v,**ctmp,vtmp; struct symm *s; struct spin *sp; v = (double *) init_array(nsfmax); ctmp = (double **) init_matrix(nsfmax,nsfmax); for(t=0;t < 2; t++){ sp = &spin_info[t]; for(n=0; n < num_ir ; n++) { s= &scf_info[n]; if(nn=s->num_so) { num_mo = s->num_mo; for (i=0; i < nn ; i++) for (j=0; j < num_mo ; j++) ctmp[j][i] = sp->scf_spin[n].cmat[i][j]; ncol = sp->scf_spin[n].noccup; if(s->nhalf) ncol++; if(all) ncol = num_mo; if(!ncol) continue; for(m=0; m < ncol ; m++) { v[0]=ctmp[m][0]*s->smat[0]; for(i=1; i < nn ; i++) { for(j=0,vtmp=0.0; j < i ; j++) { ij=ioff[i]+j; vtmp += ctmp[m][j]*s->smat[ij]; v[j] += ctmp[m][i]*s->smat[ij]; } v[i] = vtmp+ctmp[m][i]*s->smat[ioff[i]+j]; } for(i=0,vtmp=0.0; i < nn ; i++) vtmp += v[i]*ctmp[m][i]; if(!vtmp) { exit(PSI_RETURN_FAILURE); } if(vtmp < 10.0e-20) vtmp = 10.0e-20; vtmp = 1.0/sqrt(vtmp); for(i=0; i < nn ; i++) { v[i] *= vtmp; ctmp[m][i] *= vtmp; } if(m < ncol-1) { for(i=m+1,vtmp=0.0; i < ncol ; i++) { for(j=0,vtmp=0.0; jscf_spin[n].cmat[i][j] = ctmp[j][i]; } } } free(v); free_matrix(ctmp,nsfmax); } }} // namespace psi::cscf psi3/src/bin/cscf/sdot.cc0000644000101500007650000000270511112564564013747 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.1 2000/02/04 22:52:32 evaleev * Initial revision * /* Revision 1.2 1999/08/17 19:04:18 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.1.1.1 1999/04/12 16:59:27 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void sdot(double** a, double** b, int n, double* value) { register int i,j; double *ta, *tb, tval; tval = 0.0; for (i=0; i < n; i++) { ta = a[i]; tb = b[i]; for (j=0; j <= i; j++,ta++,tb++) { tval += (*ta) * (*tb); } } *value = tval; } void vdot(double* a, double* b, int n, double* value) { int i; double tval=0.0; for(i=0; i < n ; i++) tval += a[i]*b[i]; *value = tval; } }} // namespace psi::cscf psi3/src/bin/cscf/shalf.cc0000644000101500007650000001215011112564564014066 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /* $Log$ * Revision 1.5 2007/04/05 15:45:25 crawdad * Fixed a few memory leaks identified by valgrind. -TDC * /* Revision 1.4 2004/05/03 04:32:40 crawdad /* Major mods based on merge with stable psi-3-2-1 release. Note that this /* version has not been fully tested and some scf-optn test cases do not run /* correctly beccause of changes in mid-March 2004 to optking. /* -TDC /* /* Revision 1.3.6.4 2004/04/21 15:45:07 evaleev /* Modified DIIS algorithm for RHF and ROHF to work in OSO basis rather than in /* AO basis, to avoid difficulties of transforming between MO and AO bases /* when linear dependencies are present. /* /* Revision 1.3.6.3 2004/04/10 19:41:32 crawdad /* Fixed the DIIS code for UHF cases. The new version uses the Pulay scheme of /* building the error vector in the AO basis as FDS-SDF, followed by xformation /* into the orthogonal AO basis. This code converges faster for test cases /* like cc8, but fails for linearly dependent basis sets for unknown reasons. /* -TDC /* /* Revision 1.3.6.2 2004/04/09 00:16:29 evaleev /* Added messages explaining why DGETRF and DGETRI most likely fail. /* /* Revision 1.3.6.1 2004/04/06 21:29:05 crawdad /* Corrections to the RHF/ROHF DIIS algorithm, which was simply incorrect. /* The backtransformation of the DIIS error vectors to the AO basis was not /* mathematically right. /* -TDC and EFV /* /* Revision 1.3 2002/11/24 22:52:17 crawdad /* Merging the gbye-file30 branch into the main trunk. /* -TDC /* /* Revision 1.2.6.1 2002/11/23 21:54:45 crawdad /* Removal of mxcoef stuff for chkpt runs. /* -TDC /* /* Revision 1.2 2000/10/13 19:51:22 evaleev /* Cleaned up a lot of stuff in order to get CSCF working with the new "Mo-projection-capable" INPUT. /* /* Revision 1.1.1.1 2000/02/04 22:52:33 evaleev /* Started PSI 3 repository /* /* Revision 1.3 1999/08/17 19:04:18 evaleev /* Changed the default symmetric orthogonalization to the canonical /* orthogonalization. Now, if near-linear dependencies in the basis are found, /* eigenvectors of the overlap matrix with eigenvalues less than 1E-6 will be /* left out. This will lead to num_mo != num_so, i.e. SCF eigenvector is no /* longer a square matrix. Had to rework some routines in libfile30, and add some. /* The progrem prints out a warning if near-linear dependencies are found. TRANSQT /* and a whole bunch of other codes has to be fixed to work with such basis sets. /* /* Revision 1.2 1999/08/11 18:39:03 evaleev /* Added some checks on the lowest eigenvalue of the overlap matrix. /* /* Revision 1.1.1.1 1999/04/12 16:59:28 evaleev /* Added a version of CSCF that can work with CINTS. /* -Ed * */ /* construct S-1/2 matrix 'sahalf' using CANONICAL orthogonalization */ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void shalf(void) { int i,nn,num_mo; int ii,jj,kk; double *eig_vals, **eig_vecs; double **shalf; double tol = 1.0e-20; double min_eval = 100000.0; struct symm *s; int info, lwork, *ipiv; double *work, **P, **T, **X; eig_vals = (double *) init_array(nsfmax); eig_vecs = (double **) init_matrix(nsfmax,nsfmax); shalf = block_matrix(nsfmax,nsfmax); #if !USE_LIBCHKPT mxcoef = 0; #endif mxcoef2 = 0; nmo = 0; /* diagonalize smat to get eigenvalues and eigenvectors */ for (i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { rsp(nn,nn,ioff[nn],s->smat,eig_vals,1,eig_vecs,tol); /*--- Find the lowest eigenvalue ---*/ for(ii=0; ii < nn ; ii++) if (eig_vals[ii] < min_eval) min_eval = eig_vals[ii]; if(print & 64) { fprintf(outfile,"\noverlap eigenstuff\n"); eivout(eig_vecs,eig_vals,nn,nn,outfile); } /*--- Go through the eigenvalues and "throw away" the dangerously small ones ---*/ num_mo = 0; for(ii=0; ii < nn ; ii++) if (eig_vals[ii] >= LINDEP_CUTOFF) { eig_vals[ii] = 1.0/sqrt(eig_vals[ii]); num_mo++; } s->num_mo = num_mo; #if !USE_LIBCHKPT mxcoef += num_mo * nn; #endif mxcoef2 += ioff[nn]; nmo += num_mo; if (num_mo < nn) fprintf(outfile,"\n In symblk %d %d eigenvectors of S with eigenvalues < %lf are thrown away", i,nn-num_mo,LINDEP_CUTOFF); /* form 'sahalf' matrix sahalf = U*(s-1/2) */ for (ii=0; ii < nn ; ii++) for (jj=0; jj < num_mo ; jj++) s->sahalf[ii][jj] += eig_vecs[ii][jj+nn-num_mo]*eig_vals[jj+nn-num_mo]; /* form 'shalf' matrix shalf = U*(s^1/2) */ for (ii=0; ii < nn ; ii++) for (jj=0; jj < num_mo ; jj++) shalf[ii][jj] = eig_vecs[ii][jj+nn-num_mo]*(1.0/eig_vals[jj+nn-num_mo]); /* fprintf(outfile, "S^-1/2 Original:\n"); print_mat(s->sahalf, nn, num_mo, outfile); */ /* new transformation matrix for the DIIS error vectors: P^-1 = S^{1/2} * (S^{1/2})^+ */ C_DGEMM('n', 't', nn, nn, num_mo, 1.0, shalf[0], nsfmax, shalf[0], nsfmax, 0.0, s->pinv[0], nn); } } free(eig_vals); free_matrix(eig_vecs,nsfmax); fprintf(outfile,"\n The lowest eigenvalue of the overlap matrix was %e\n\n", min_eval); } }} // namespace psi::cscf psi3/src/bin/cscf/sortev.cc0000644000101500007650000000426310754663017014325 0ustar crawdad/*! \file \ingroup CSCF \brief Enter brief description of file here */ /*------------------------------------------------------------- sortev.c-a routine for sorting the energies and symmetries of of orbitals into two arrays containing the symmetries of the orbitals and the other containing the energies ----------------------------------------------------------*/ #define EXTERN #include "includes.h" #include "common.h" namespace psi { namespace cscf { void sortev() { int i,j,k; static int *ct; static int *pt; int rep; double lowvalue; int elect; struct symm *s; int num_arr,flag; int num_mo = 0; ct = (int *) init_int_array(num_ir);/*counter map array*/ pt = (int *) init_int_array(num_ir);/*pointer map array*/ elect = 1; num_arr = num_ir; for(i=0; i < num_arr;i++) { ct[i]=0; pt[i]=i; num_mo += scf_info[i].num_mo; } /* if this function is used anytime besides the first iteration the eigenvalues must be converted to the arrays scf_info.hevals*/ if(iter != 0 && iopen !=1 || converged) for(i=0; i < num_ir; i++) for(j=0; j < scf_info[i].num_mo; j++) scf_info[i].hevals[j] = scf_info[i].fock_evals[j]; /* excluding irreps that have zero so's out of consideration */ for(i=0; i < num_arr; i++) if(ct[pt[i]]==scf_info[pt[i]].num_mo) { if(i != num_arr-1) { for(j=i;j scf_info[pt[j]].hevals[ct[pt[j]]]) { lowvalue = scf_info[pt[j]].hevals[ct[pt[j]]]; rep = pt[j]; flag = j; } /* Checking if have any SOs left in irrep rep */ ct[rep]++; if(ct[rep]==scf_info[rep].num_mo) { if(flag != num_arr-1) { for(j=flag;jspinlabel,scf_info[m].irrep_label); print_array(sp->scf_spin[m].gmat,nn,outfile); if (ksdft) { fprintf(outfile, "\n%s xcmat for irrep %s",sp->spinlabel,scf_info[m].irrep_label); print_array(sp->scf_spin[m].xcmat,nn,outfile); } } } } for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { /* if(!m && !t) { fprintf(outfile, "Fock matrix in top of uhf_iter:\n"); print_array(sp->scf_spin[m].fock_pac, nn, outfile); } */ /* form fock matrix = h+g */ add_arr(s->hmat,sp->scf_spin[m].gmat, sp->scf_spin[m].fock_pac,ioff[nn]); } } } /*---------------------------------------------------- In KS DFT case, Fock matrix doesn't include Fxc yet add them up only after the computation of energy ----------------------------------------------------*/ ecalc(tol); if (ksdft) { /* now form f = h + g + fxc */ /* it should be alright to use fock_pac as 2 arguments */ for(t = 0; t<2 ;t++){ sp = &spin_info[t]; for (m=0; m < num_ir ; m++) { s = &(sp->scf_spin[m]); if (nn=scf_info[m].num_so) add_arr(s->fock_pac,s->xcmat,s->fock_pac,ioff[nn]); if(print & 4) { fprintf(outfile,"\n%s fock for irrep %s" ,sp->spinlabel,scf_info[m].irrep_label); print_array(sp->scf_spin[m].fock_pac,nn,outfile); } } } } /* create new fock matrix in fock_pac or fock_eff */ if(!diisflg) diis_uhf(); for(t=0;t<2;t++){ sp = &spin_info[t]; for (m=0; m < num_ir ; m++) { s = &scf_info[m]; if (nn=s->num_so) { num_mo = s->num_mo; /* if(!m && !t) { fprintf(outfile, "\nuhf_iter Fock matrix irrep %d spin %d iter %d\n", m, t, iter); print_array(sp->scf_spin[m].fock_pac, nn, outfile); } */ /* transform fock_pac to mo basis */ tri_to_sq(sp->scf_spin[m].fock_pac,fock_ct,nn); /* mxmb(sp->scf_spin[m].cmat,nn,1 ,fock_ct,1,nn,scr,1,nn,nn,nn,nn); mxmb(scr,1,nn,sp->scf_spin[m].cmat,1 ,nn,fock_c,1,nn,nn,nn,nn);*/ mmult(sp->scf_spin[m].cmat,1,fock_ct,0,scr,0,num_mo,nn,nn,0); mmult(scr,0,sp->scf_spin[m].cmat,0,fock_c,0,num_mo,nn,num_mo,0); /* if(!m && !t) { fprintf(outfile, "\nMO uhf_iter Fock matrix irrep %d spin %d iter %d\n", m, t, iter); print_mat(fock_c, num_mo, num_mo, outfile); } */ /* diagonalize fock_c to get ctrans */ sq_rsp(num_mo,num_mo,fock_c,sp->scf_spin[m].fock_evals ,1,ctrans,tol); if(print & 4) { fprintf(outfile,"\n %s eigenvector for irrep %s\n" ,sp->spinlabel,s->irrep_label); eivout(ctrans,sp->scf_spin[m].fock_evals,num_mo,num_mo,outfile); } /* mxmb(sp->scf_spin[m].cmat,1,nn, ctrans,1,nn,scr,1,nn,nn,nn,nn);*/ mmult(sp->scf_spin[m].cmat,0,ctrans,0,scr,0,nn,num_mo,num_mo,0); if(print & 4) { fprintf(outfile,"\n %s eigenvector after irrep %s\n", sp->spinlabel,s->irrep_label); print_mat(scr,nn,num_mo,outfile); } for (i=0; i < nn; i++) for (j=0; j < num_mo; j++) sp->scf_spin[m].cmat[i][j] = scr[i][j]; } } if(converged) { free_block(scr); free_block(fock_c); free_block(fock_ct); free_block(ctrans); exit(PSI_RETURN_FAILURE); cleanup(); } } schmit_uhf(1); if(print & 4) { for(j=0; j < 2; j++){ for(i=0; i < num_ir ; i++) { s = &scf_info[i]; if (nn=s->num_so) { num_mo = s->num_mo; fprintf(outfile,"\northogonalized mos irrep %s\n", s->irrep_label); print_mat(spin_info[j].scf_spin[i].cmat,nn,num_mo,outfile); } } } } if(mixing && iter ==1) orb_mix(); /* form new density matrix */ dmatuhf(); /* and form new fock matrix */ if(iter < itmax) { if (!direct_scf) formg_open(); else formg_direct(); } } } }} // namespace psi::cscf psi3/src/bin/cusp/0000755000101500007650000000000011146111671012511 5ustar crawdadpsi3/src/bin/cusp/cache.cc0000644000101500007650000001310210757640026014070 0ustar crawdad/*! \file \ingroup CUSP \brief Enter brief description of file here */ #include #include #include #include #include namespace psi { namespace cusp { void cache_abcd(int **cachelist); void cache_iabc(int **cachelist); void cache_ijab(int **cachelist); void cache_iajb(int **cachelist); void cache_ijka(int **cachelist); void cache_ijkl(int **cachelist); int **cacheprep(int level, int *cachefiles) { int **cachelist; /* The listing of CC files whose entries may be cached */ cachefiles[CC_AINTS] = 1; cachefiles[CC_BINTS] = 1; cachefiles[CC_CINTS] = 1; cachefiles[CC_DINTS] = 1; cachefiles[CC_EINTS] = 1; cachefiles[CC_FINTS] = 1; cachefiles[CC_DENOM] = 1; cachefiles[CC_TAMPS] = 1; cachefiles[CC_LAMPS] = 1; cachefiles[CC_HBAR] = 1; /* The listing of DPD patterns which may be cached */ cachelist = init_int_matrix(12,12); if(level == 0) return cachelist; else if(level == 1) { /*** Cache oooo and ooov ***/ cache_ijkl(cachelist); cache_ijka(cachelist); return cachelist; } else if(level == 2) { /*** Cache oooo, ooov, oovv, and ovov ***/ cache_ijkl(cachelist); cache_ijka(cachelist); cache_ijab(cachelist); cache_iajb(cachelist); return cachelist; } else if(level == 3) { /*** Cache, oooo, oov, oovv, ovov, and ovvv ***/ cache_ijkl(cachelist); cache_ijka(cachelist); cache_ijab(cachelist); cache_iajb(cachelist); cache_iabc(cachelist); return cachelist; } else if(level == 4) { /*** Cache everything ***/ cache_ijkl(cachelist); cache_ijka(cachelist); cache_ijab(cachelist); cache_iajb(cachelist); cache_iabc(cachelist); cache_abcd(cachelist); return cachelist; } else { printf("Error: invalid cache level!\n"); exit(PSI_RETURN_FAILURE); } } void cache_abcd(int **cachelist) { /* */ cachelist[5][5] = 1; cachelist[5][6] = 1; cachelist[5][7] = 1; cachelist[5][8] = 1; cachelist[5][9] = 1; cachelist[6][5] = 1; cachelist[6][6] = 1; cachelist[6][7] = 1; cachelist[6][8] = 1; cachelist[6][9] = 1; cachelist[7][5] = 1; cachelist[7][6] = 1; cachelist[7][7] = 1; cachelist[7][8] = 1; cachelist[7][9] = 1; cachelist[8][5] = 1; cachelist[8][6] = 1; cachelist[8][7] = 1; cachelist[8][8] = 1; cachelist[8][9] = 1; cachelist[9][5] = 1; cachelist[9][6] = 1; cachelist[9][7] = 1; cachelist[9][8] = 1; cachelist[9][9] = 1; } void cache_iabc(int **cachelist) { /* */ cachelist[10][5] = 1; cachelist[10][6] = 1; cachelist[10][7] = 1; cachelist[10][8] = 1; cachelist[10][9] = 1; cachelist[11][5] = 1; cachelist[11][6] = 1; cachelist[11][7] = 1; cachelist[11][8] = 1; cachelist[11][9] = 1; /* */ cachelist[5][10] = 1; cachelist[5][11] = 1; cachelist[6][10] = 1; cachelist[6][11] = 1; cachelist[7][10] = 1; cachelist[7][11] = 1; cachelist[8][10] = 1; cachelist[8][11] = 1; cachelist[9][10] = 1; cachelist[9][11] = 1; } void cache_ijab(int **cachelist) { /* */ cachelist[0][5] = 1; cachelist[0][6] = 1; cachelist[0][7] = 1; cachelist[0][8] = 1; cachelist[0][9] = 1; cachelist[1][5] = 1; cachelist[1][6] = 1; cachelist[1][7] = 1; cachelist[1][8] = 1; cachelist[1][9] = 1; cachelist[2][5] = 1; cachelist[2][6] = 1; cachelist[2][7] = 1; cachelist[2][8] = 1; cachelist[2][9] = 1; cachelist[3][5] = 1; cachelist[3][6] = 1; cachelist[3][7] = 1; cachelist[3][8] = 1; cachelist[3][9] = 1; cachelist[4][5] = 1; cachelist[4][6] = 1; cachelist[4][7] = 1; cachelist[4][8] = 1; cachelist[4][9] = 1; /* */ cachelist[5][0] = 1; cachelist[5][1] = 1; cachelist[5][2] = 1; cachelist[5][3] = 1; cachelist[5][4] = 1; cachelist[6][0] = 1; cachelist[6][1] = 1; cachelist[6][2] = 1; cachelist[6][3] = 1; cachelist[6][4] = 1; cachelist[7][0] = 1; cachelist[7][1] = 1; cachelist[7][2] = 1; cachelist[7][3] = 1; cachelist[7][4] = 1; cachelist[8][0] = 1; cachelist[8][1] = 1; cachelist[8][2] = 1; cachelist[8][3] = 1; cachelist[8][4] = 1; cachelist[9][0] = 1; cachelist[9][1] = 1; cachelist[9][2] = 1; cachelist[9][3] = 1; cachelist[9][4] = 1; } void cache_iajb(int **cachelist) { /* */ cachelist[10][10] = 1; cachelist[10][11] = 1; cachelist[11][10] = 1; cachelist[11][11] = 1; } void cache_ijka(int **cachelist) { /* */ cachelist[0][10] = 1; cachelist[0][11] = 1; cachelist[1][10] = 1; cachelist[1][11] = 1; cachelist[2][10] = 1; cachelist[2][11] = 1; cachelist[3][10] = 1; cachelist[3][11] = 1; cachelist[4][10] = 1; cachelist[4][11] = 1; /* */ cachelist[10][0] = 1; cachelist[10][1] = 1; cachelist[10][2] = 1; cachelist[10][3] = 1; cachelist[10][4] = 1; cachelist[11][0] = 1; cachelist[11][1] = 1; cachelist[11][2] = 1; cachelist[11][3] = 1; cachelist[11][4] = 1; } void cache_ijkl(int **cachelist) { /* */ cachelist[0][0] = 1; cachelist[0][1] = 1; cachelist[0][2] = 1; cachelist[0][3] = 1; cachelist[0][4] = 1; cachelist[1][0] = 1; cachelist[1][1] = 1; cachelist[1][2] = 1; cachelist[1][3] = 1; cachelist[1][4] = 1; cachelist[2][0] = 1; cachelist[2][1] = 1; cachelist[2][2] = 1; cachelist[2][3] = 1; cachelist[2][4] = 1; cachelist[3][0] = 1; cachelist[3][1] = 1; cachelist[3][2] = 1; cachelist[3][3] = 1; cachelist[3][4] = 1; cachelist[4][0] = 1; cachelist[4][1] = 1; cachelist[4][2] = 1; cachelist[4][3] = 1; cachelist[4][4] = 1; } }} // namespace psi::cusp psi3/src/bin/cusp/cusp.cc0000644000101500007650000002642711112564564014013 0ustar crawdad/*! \defgroup CUSP Add a description of the group CUSP */ /*! \file \ingroup CUSP \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } namespace psi { namespace cusp { void init_io(int argc, char *argv[]); void exit_io(void); void compute_delta(double **delta, double x, double y, double z); int **cacheprep(int level, int *cachefiles); void local(void); }} using namespace psi::cusp; int main(int argc, char *argv[]) { int n, i, j, h, offset; int nmo, nso, natom, nirreps; int *clsdpi, *openpi, *orbspi; int nactive, row, col; int p,q,r,s,P,Q,R,S; int *qt_occ, *qt_vir; double **delta, **geom, **D; double **delta1, **delta2; double x, y, z, dens, average, theta; unsigned long int next; dpdbuf4 G, A; dpdfile2 g; long int memory; int *occpi, *virtpi, *occ_sym, *vir_sym, *occ_off, *vir_off; int *socc; int **cachelist, *cachefiles; FILE *data; FILE *data1; FILE *data2; double two_energy; double **scf_local; init_io(argc, argv); chkpt_init(PSIO_OPEN_OLD); nmo = chkpt_rd_nmo(); nso = chkpt_rd_nso(); geom = chkpt_rd_geom(); natom = chkpt_rd_natom(); nirreps = chkpt_rd_nirreps(); clsdpi = chkpt_rd_clsdpi(); openpi = chkpt_rd_openpi(); orbspi = chkpt_rd_orbspi(); chkpt_close(); /* local(); exit(PSI_RETURN_FAILURE); */ /*** Build the QT-ordered SCF density ***/ /* D = block_matrix(nmo,nmo); for(h=offset=0; h < nirreps; h++) { for(i=0; i < clsdpi[h]; i++) D[i+offset][i+offset] = 2.0; for(i=clsdpi[h]; i < clsdpi[h] + openpi[h]; i++) D[i+offset][i+offset] = 1.0; offset += clsdpi[h] + openpi[h]; } free(clsdpi); free(openpi); free(orbspi); */ /* fprintf(outfile, "\nSCF Density (MO):\n"); fprintf(outfile, "-----------------\n"); print_mat(D,nmo,nmo,outfile); */ /*** Compute the SCF density at each nucleus ***/ /* delta = block_matrix(nmo,nmo); for(n=0; n < natom; n++) { x = geom[n][0]; y = geom[n][1]; z = geom[n][2]; compute_delta(delta, x, y, z); dens = 0.0; for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) dens += delta[i][j] * D[i][j]; fprintf(outfile,"\n\tdens(%5.3f,%5.3f,%5.3f) = %20.10f\n",x,y,z,dens); } free_block(delta); */ psio_read_entry(CC_INFO, "No. of Active Orbitals", (char *) &(nactive), sizeof(int)); qt_occ = init_int_array(nactive); qt_vir = init_int_array(nactive); psio_read_entry(CC_INFO, "CC->QT Active Occ Order", (char *) qt_occ, sizeof(int)*nactive); psio_read_entry(CC_INFO, "CC->QT Active Virt Order", (char *) qt_vir, sizeof(int)*nactive); occpi = init_int_array(nirreps); virtpi = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orbs Per Irrep", (char *) occpi, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orbs Per Irrep", (char *) virtpi, sizeof(int)*nirreps); occ_sym = init_int_array(nactive); vir_sym = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Occ Orb Symmetry", (char *) occ_sym, sizeof(int)*nactive); psio_read_entry(CC_INFO, "Active Virt Orb Symmetry", (char *) vir_sym, sizeof(int)*nactive); occ_off = init_int_array(nirreps); vir_off = init_int_array(nirreps); psio_read_entry(CC_INFO, "Active Occ Orb Offsets", (char *) occ_off, sizeof(int)*nirreps); psio_read_entry(CC_INFO, "Active Virt Orb Offsets", (char *) vir_off, sizeof(int)*nirreps); socc = init_int_array(nactive); psio_read_entry(CC_INFO, "Active Socc Orbital Boolean", (char *) socc, sizeof(int)*nactive); /*** Get the correlated density ***/ /* D = block_matrix(nactive,nactive); rfile(PSIF_MO_OPDM); next = 0; for(i=0; i < nactive; i++) wreadw(PSIF_MO_OPDM, (char *) D[i], sizeof(double)*nactive, next, &next); rclose(PSIF_MO_OPDM, 3); */ /* fprintf(outfile, "\nCCSD Density (MO):\n"); fprintf(outfile, "------------------\n"); print_mat(D,nmo,nmo,outfile); */ /*** Compute the CCSD density at each nucleus ***/ /* delta = block_matrix(nactive,nactive); for(n=0; n < natom; n++) { x = geom[n][0]; y = geom[n][1]; z = geom[n][2]; compute_delta(delta, x, y, z); dens = 0.0; for(i=0; i < nactive; i++) for(j=0; j < nactive; j++) dens += delta[i][j] * D[i][j]; fprintf(outfile,"\n\tdens(%5.3f,%5.3f,%5.3f) = %20.10f\n",x,y,z,dens); } free_block(delta); free_block(geom); free_block(D); */ /* Initialize the DPD library */ cachefiles = init_int_array(PSIO_MAXUNIT); cachelist = cacheprep(2, cachefiles); fndcor(&(memory),infile,outfile); dpd_init(0, nirreps, memory, 0, cachefiles, cachelist, NULL, 2, occpi, occ_sym, virtpi, vir_sym); delta1 = block_matrix(nmo,nmo); delta2 = block_matrix(nmo,nmo); ffile(&data, "data", 0); compute_delta(delta1, 0.0,0.0,1.0); x = 0.0; for(theta=-_pi; theta <= _pi; theta += _pi/64.0) { dens = 0.0; two_energy = 0.0; y = sin(theta); z = cos(theta); compute_delta(delta2, x, y, z); dpd_buf4_init(&A, CC_AINTS, 0, 0, 0, 0, 0, 0, "A "); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); dpd_buf4_mat_irrep_init(&A, h); dpd_buf4_mat_irrep_rd(&A, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_occ[p]; q = G.params->roworb[h][row][1]; Q = qt_occ[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_occ[r]; s = G.params->colorb[h][col][1]; S = qt_occ[s]; dens += G.matrix[h][row][col] * delta1[P][R] * delta2[Q][S]; /* Reference contributions to two-electron density */ if(P==R && Q==S) { if(!socc[P] && !socc[Q]) { /* dens += 2.0 * delta1[P][R] * delta2[Q][S]; */ two_energy += 2.0 * A.matrix[h][row][col]; } else if(socc[P] && !socc[Q]) { /* dens += 2.0 * delta1[P][R] * delta2[Q][S]; */ two_energy += 2.0 * A.matrix[h][row][col]; } else if(socc[P] && socc[Q]) { /* dens += 0.5 * delta1[P][R] * delta2[Q][S]; */ two_energy += 0.5 * A.matrix[h][row][col]; } } if (P==S && Q==R) { if(!socc[P] && !socc[Q]) { /* dens -= delta1[P][R] * delta2[Q][S]; */ two_energy -= A.matrix[h][row][col]; } else if(socc[P] && !socc[Q]) { /* dens -= delta1[P][R] * delta2[Q][S]; */ two_energy -= A.matrix[h][row][col]; } else if(socc[P] && socc[Q]) { /* dens -= 0.5 * delta1[P][R] * delta2[Q][S]; */ two_energy -= 0.5 * A.matrix[h][row][col]; } } } } dpd_buf4_mat_irrep_close(&A, h); dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&A); dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_vir[p]; q = G.params->roworb[h][row][1]; Q = qt_vir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_vir[r]; s = G.params->colorb[h][col][1]; S = qt_vir[s]; dens += G.matrix[h][row][col] * delta1[P][R] * delta2[Q][S]; } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_occ[p]; q = G.params->roworb[h][row][1]; Q = qt_occ[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_occ[r]; s = G.params->colorb[h][col][1]; S = qt_vir[s]; average = 0.5 * (delta1[P][R] * delta2[Q][S] + delta1[Q][S] * delta2[P][R]); dens += 2.0* G.matrix[h][row][col] * average; } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_vir[p]; q = G.params->roworb[h][row][1]; Q = qt_occ[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_vir[r]; s = G.params->colorb[h][col][1]; S = qt_vir[s]; average = 0.5 * (delta1[P][R] * delta2[Q][S] + delta1[Q][S] * delta2[P][R]); dens += 2.0* G.matrix[h][row][col] * average; } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_occ[p]; q = G.params->roworb[h][row][1]; Q = qt_occ[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_vir[r]; s = G.params->colorb[h][col][1]; S = qt_vir[s]; average = 0.5 * (delta1[P][R] * delta2[Q][S] + delta1[Q][S] * delta2[P][R]); dens += G.matrix[h][row][col] * delta1[P][R] * delta2[Q][S]; } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA"); for(h=0; h < nirreps; h++) { dpd_buf4_mat_irrep_init(&G, h); dpd_buf4_mat_irrep_rd(&G, h); for(row=0; row < G.params->rowtot[h]; row++) { p = G.params->roworb[h][row][0]; P = qt_occ[p]; q = G.params->roworb[h][row][1]; Q = qt_vir[q]; for(col=0; col < G.params->coltot[h]; col++) { r = G.params->colorb[h][col][0]; R = qt_occ[r]; s = G.params->colorb[h][col][1]; S = qt_vir[s]; average = 0.5 * (delta1[P][R] * delta2[Q][S] + delta1[Q][S] * delta2[P][R]); dens += G.matrix[h][row][col] * average; } } dpd_buf4_mat_irrep_close(&G, h); } dpd_buf4_close(&G); fprintf(data, "%4.2f %20.10f\n", theta, dens); } printf("SCF Two-Electron Energy = %20.15f\n", two_energy); dpd_close(0); exit_io(); exit(PSI_RETURN_SUCCESS); } extern "C" {const char *gprgid() { const char *prgid = "CCONTOUR"; return(prgid); }} namespace psi { namespace cusp { void init_io(int argc, char *argv[]) { int i; char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); ip_cwk_add(progid); free(progid); tstart(outfile); psio_init(); psio_ipv1_config(); /* Open all dpd data files here */ for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1); } void exit_io(void) { int i; /* Close all dpd data files here */ for(i=CC_MIN; i <= CC_MAX; i++) psio_close(i,1); psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } }} // namespace psi::cusp psi3/src/bin/cusp/delta.cc0000644000101500007650000000541610757640026014127 0ustar crawdad/*! \file \ingroup CUSP \brief Enter brief description of file here */ /* ** delta(): Compute the MO-basis delta-function for a given point. ** TDC, June 2001 */ #include #include #include #include #include #include #include namespace psi { namespace cusp { int nmo, nao; double **scf, **u; void compute_phi(double *phi, double x, double y, double z); void setup_delta(void); void compute_delta(double **delta, double x, double y, double z) { int i, j; double *phi_ao, *phi_so, *phi_mo; setup_delta(); phi_ao = init_array(nao); /* AO function values */ phi_so = init_array(nmo); /* SO function values */ phi_mo = init_array(nmo); /* MO function values */ compute_phi(phi_ao, x, y, z); /* for(i=0; i < nao; i++) printf("%d %20.10f\n", i, phi_ao[i]); */ /* Transform the basis function values to the MO basis */ C_DGEMV('n', nmo, nao, 1.0, &(u[0][0]), nao, &(phi_ao[0]), 1, 0.0, &(phi_so[0]), 1); C_DGEMV('t', nmo, nmo, 1.0, &(scf[0][0]), nmo, &(phi_so[0]), 1, 0.0, &(phi_mo[0]), 1); /* for(i=0; i < nmo; i++) printf("%d %20.10f\n", i, phi_mo[i]); */ /* Build the MO-basis delta function */ for(i=0; i < nmo; i++) for(j=0; j < nmo; j++) delta[i][j] = phi_mo[i] * phi_mo[j]; free(phi_ao); free(phi_so); free(phi_mo); } void setup_delta(void) { static int done=0; int i, I, j, errcod; int nirreps, nfzc, nfzv; int *order, *clsdpi, *openpi, *orbspi, *fruocc, *frdocc; double **scf_pitzer; if(done) return; chkpt_init(PSIO_OPEN_OLD); nmo = chkpt_rd_nmo(); nao = chkpt_rd_nao(); nirreps = chkpt_rd_nirreps(); clsdpi = chkpt_rd_clsdpi(); openpi = chkpt_rd_openpi(); orbspi = chkpt_rd_orbspi(); scf_pitzer = chkpt_rd_scf(); u = chkpt_rd_usotao(); chkpt_close(); frdocc = init_int_array(nirreps); fruocc = init_int_array(nirreps); errcod = ip_int_array("FROZEN_DOCC", frdocc, nirreps); errcod = ip_int_array("FROZEN_UOCC", fruocc, nirreps); nfzc = nfzv = 0; for(i=0; i < nirreps; i++) { nfzc += frdocc[i]; nfzv += fruocc[i]; } /* if(nfzc || nfzv) { printf("Frozen orbitals not yet coded!\n"); exit(PSI_RETURN_FAILURE); } */ /*** Get the Pitzer -> QT reordering array ***/ order = init_int_array(nmo); reorder_qt(clsdpi, openpi, frdocc, fruocc, order, orbspi, nirreps); /*** Arrange the SCF eigenvectors into QT ordering ***/ scf = block_matrix(nmo, nmo); for(i=0; i < nmo; i++) { I = order[i]; /* Pitzer --> QT */ for(j=0; j < nmo; j++) scf[j][I] = scf_pitzer[j][i]; } free(order); free(clsdpi); free(openpi); free(orbspi); free(fruocc); free(frdocc); free_block(scf_pitzer); done = 1; return; } }} // namespace psi::cusp psi3/src/bin/cusp/local.cc0000644000101500007650000003251510757640026014130 0ustar crawdad/*! \file \ingroup CUSP \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include #include extern FILE *outfile; namespace psi { namespace cusp { void local(void) { int iter, s, t, A, k, l, m, inew, iold, max; int i, j, ij, am, atom, shell_length, offset, stat; int nirreps, nao, nmo, nso, natom, nshell, noei, nocc; int *stype, *snuc, *aostart, *aostop, *ao2atom, *l_length; int *clsdpi, *openpi, *orbspi, *dummy, *order; double *ss, **S, **scf, **u, **Ctmp, **C, *evals_tmp, *evals; double P, PiiA, Pst, Pss, Ptt, Ast, Bst, AB; double Uss, Utt, Ust, Uts, Cks, Ckt, **U, **V, **VV, **F; double cos4a, alpha, alphamax, alphalast, conv; double **R, **D; double norm, *charge, tmp; double *SR, **X, *Z; int row, col, junk; int *rank, *boolean, **domain, next_atom; int *orb_order, *orb_boolean; double fR, cutoff, det; double **TMP, **MuX, **MuY, **MuZ, *scratch; chkpt_init(PSIO_OPEN_OLD); nao = chkpt_rd_nao(); nmo = chkpt_rd_nmo(); nso = nmo; natom = chkpt_rd_natom(); nshell = chkpt_rd_nshell(); stype = chkpt_rd_stype(); snuc = chkpt_rd_snuc(); u = chkpt_rd_usotao(); nirreps = chkpt_rd_nirreps(); clsdpi = chkpt_rd_clsdpi(); openpi = chkpt_rd_openpi(); orbspi = chkpt_rd_orbspi(); scf = chkpt_rd_scf(); evals_tmp = chkpt_rd_evals(); chkpt_close(); /* Compute the length of each AM block */ junk = LIBINT_MAX_AM; l_length = init_int_array(LIBINT_MAX_AM); l_length[0] = 1; for(l=0; l < (LIBINT_MAX_AM); l++) if(l) l_length[l] = l_length[l-1] + l + 1; /* Set up the atom->AO and AO->atom lookup arrays */ aostart = init_int_array(natom); aostop = init_int_array(natom); for(i=0,atom=-1,offset=0; i < nshell; i++) { am = stype[i] - 1; shell_length = l_length[am]; if(atom != snuc[i]-1) { if(atom != -1) aostop[atom] = offset-1; atom = snuc[i]-1; aostart[atom] = offset; } offset += shell_length; } aostop[atom] = offset-1; ao2atom = init_int_array(nao); for(i=0; i < natom; i++) for(j=aostart[i]; j <= aostop[i]; j++) ao2atom[j] = i; /* Get the overlap integrals */ noei = nmo*(nmo+1)/2; ss = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_S,ss,noei,0,0,outfile); S = block_matrix(nao,nao); for(i=0,ij=0; i < nmo; i++) for(j=0; j <= i; j++,ij++) { S[i][j] = S[j][i] = ss[ij]; } free(ss); /* transform the MO coefficients to the AO basis */ Ctmp = block_matrix(nao,nmo); C_DGEMM('t','n',nao,nmo,nso,1,&(u[0][0]),nao,&(scf[0][0]),nmo, 0,&(Ctmp[0][0]),nmo); /* Sort the MOs to an occupation ordering */ dummy = init_int_array(nmo); order = init_int_array(nmo); C = block_matrix(nao,nmo); evals = init_array(nmo); reorder_qt(clsdpi, openpi, dummy, dummy, order, orbspi, nirreps); for(i=0; i < nmo; i++) { inew = order[i]; for(j=0; j < nao; j++) C[j][inew] = Ctmp[j][i]; evals[inew] = evals_tmp[i]; } free(dummy); free(order); free_block(Ctmp); free(evals_tmp); /* Grab the dipole moment integrals and transform them to the MO basis */ /* TMP = block_matrix(nao,nao); X = block_matrix(nao,nmo); scratch = init_array(noei); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MX,scratch,noei,0,0,outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } zero_arr(scratch,noei); MuX = block_matrix(nmo,nmo); C_DGEMM('n','n',nao,nmo,nao,1,&(TMP[0][0]),nao,&(C[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nao,1,&(C[0][0]),nmo,&(X[0][0]),nmo, 0,&(MuX[0][0]),nmo); fprintf(outfile, "\tMO-basis MuX:\n"); print_mat(MuX,nmo,nmo,outfile); free_block(MuX); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MY,scratch,noei,0,0,outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } zero_arr(scratch,noei); MuY = block_matrix(nmo,nmo); C_DGEMM('n','n',nao,nmo,nao,1,&(TMP[0][0]),nao,&(C[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nao,1,&(C[0][0]),nmo,&(X[0][0]),nmo, 0,&(MuY[0][0]),nmo); fprintf(outfile, "\tMO-basis MuY:\n"); print_mat(MuY,nmo,nmo,outfile); free_block(MuY); stat = iwl_rdone(PSIF_OEI,PSIF_AO_MZ,scratch,noei,0,0,outfile); for(i=0,ij=0; i < nao; i++) for(j=0; j <= i; j++,ij++) { TMP[i][j] = TMP[j][i] = scratch[ij]; } zero_arr(scratch,noei); MuZ = block_matrix(nmo,nmo); C_DGEMM('n','n',nao,nmo,nao,1,&(TMP[0][0]),nao,&(C[0][0]),nmo, 0,&(X[0][0]),nmo); C_DGEMM('t','n',nmo,nmo,nao,1,&(C[0][0]),nmo,&(X[0][0]),nmo, 0,&(MuZ[0][0]),nmo); fprintf(outfile, "\tMO-basis MuZ:\n"); print_mat(MuZ,nmo,nmo,outfile); free_block(MuZ); free_block(TMP); free_block(X); free(scratch); exit(PSI_RETURN_FAILURE); */ /* fprintf(outfile, "\tCanonical MO's:\n"); print_mat(C,nao,nmo,outfile); */ /* Compute nocc --- closed-shells only */ for(i=0,nocc=0; i < nirreps; i++) { if(openpi[i]) exit(PSI_RETURN_FAILURE); nocc += clsdpi[i]; } /* for(i=0; i < nocc; i++) fprintf(outfile, "%d %20.15f\n", i, evals[i]); */ fprintf(outfile, "Number of doubly occupied orbitals: %d\n", nocc); fprintf(outfile, "\tIter Pop. Localization Max. Rotation Angle Conv\n"); fprintf(outfile, "\t------------------------------------------------------------\n"); U = block_matrix(nocc, nocc); V = block_matrix(nocc, nocc); for(i=0; i < nocc; i++) V[i][i] = 1.0; VV = block_matrix(nocc, nocc); for(iter=0; iter < 100; iter++) { P = 0.0; for(i=0; i < nocc; i++) { for(A=0; A < natom; A++) { PiiA = 0.0; for(l=aostart[A]; l <= aostop[A]; l++) for(k=0; k < nao; k++) PiiA += C[k][i] * C[l][i] * S[k][l]; P += PiiA * PiiA; } } /* Compute 2x2 rotations to Pipek-Mezey localization */ alphamax = 0.0; for(s=0; s < nocc; s++) { for(t=0; t < s; t++) { Ast = Bst = 0.0; for(A=0; A < natom; A++) { Pst = Pss = Ptt = 0.0; for(l=aostart[A]; l <= aostop[A]; l++) { for(k=0; k < nao; k++) { Pst += 0.5 * (C[k][s] * C[l][t] + C[l][s] * C[k][t]) * S[k][l]; Pss += C[k][s] * C[l][s] * S[k][l]; Ptt += C[k][t] * C[l][t] * S[k][l]; } } Ast += Pst * Pst - 0.25 * (Pss - Ptt) * (Pss - Ptt); Bst += Pst * (Pss - Ptt); } /* A-loop */ /* Compute the rotation angle */ AB = Ast * Ast + Bst * Bst; if(fabs(AB) > 0.0) { cos4a = -Ast/sqrt(AB); alpha = 0.25 * acos(cos4a) * (Bst > 0 ? 1 : -1); } else alpha = 0.0; /* Keep up with the maximum 2x2 rotation angle */ alphamax = (alpha > alphamax ? alpha : alphamax); Uss = cos(alpha); Utt = cos(alpha); Ust = sin(alpha); Uts = -Ust; /* Now do the rotation */ for(k=0; k < nao; k++) { Cks = C[k][s]; Ckt = C[k][t]; C[k][s] = Uss * Cks + Ust * Ckt; C[k][t] = Uts * Cks + Utt * Ckt; } zero_mat(U, nocc, nocc); for(i=0; i < nocc; i++) U[i][i] = 1.0; U[s][s] = Uss; U[t][t] = Utt; U[s][t] = Ust; U[t][s] = Uts; zero_mat(VV, nocc, nocc); for(i=0; i < nocc; i++) { for(j=0; j < nocc; j++) { for(k=0; k < nocc; k++) { VV[i][j] += V[i][k] * U[j][k]; } } } for(i=0; i < nocc; i++) for(j=0; j < nocc; j++) V[i][j] = VV[i][j]; } /* t-loop */ } /* s-loop */ conv = fabs(alphamax - alphalast); fprintf(outfile, "\t%4d %20.10f %20.10f %4.3e\n", iter, P, alphamax, conv); if(iter && (conv < 1e-12)) break; alphalast = alphamax; fflush(outfile); } /* iter-loop */ /* print_mat(V, nocc, nocc, outfile); */ /* Transform occupied orbital eigenvalues */ F = block_matrix(nocc, nocc); for(i=0; i < nocc; i++) for(j=0; j < nocc; j++) for(k=0; k < nocc; k++) F[i][j] += V[k][i] * evals[k] * V[k][j]; fprintf(outfile, "\nTransformed Orbital Energies:\n"); print_mat(F, nocc, nocc, outfile); /* Compute a reordering array based on the diagonal elements of F */ orb_order = init_int_array(nocc); orb_boolean = init_int_array(nocc); for(i=0; i < nocc; i++) { orb_order[i] = 0; orb_boolean[i] = 0; } for(i=0,max=0; i < nocc; i++) /* First, find the overall maximum */ if(fabs(F[i][i]) > fabs(F[max][max])) max = i; orb_order[0] = max; orb_boolean[max] = 1; for(i=1; i < nocc; i++) { max = 0; while(orb_boolean[max]) max++; /* Find an unused max */ for(j=0; j < nocc; j++) if((fabs(F[j][j]) >= fabs(F[max][max])) && !orb_boolean[j]) max = j; orb_order[i] = max; orb_boolean[max] = 1; } /* for(i=0; i < nocc; i++) fprintf(outfile, "%d %d\n", i, orb_order[i]); fprintf(outfile, "\n\tPipek-Mezey Localized MO's (before sort):\n"); print_mat(C, nao, nmo, outfile); */ /* Now reorder the localized MO's according to F */ Ctmp = block_matrix(nao,nocc); for(i=0; i < nocc; i++) for(j=0; j < nao; j++) Ctmp[j][i] = C[j][i]; for(i=0; i < nocc; i++) { iold = orb_order[i]; for(j=0; j < nao; j++) C[j][i] = Ctmp[j][iold]; evals[i] = F[iold][iold]; } free_block(Ctmp); /* fprintf(outfile, "\n\tAO Overlap Integrals:\n"); print_mat(S, nao, nao, outfile); */ /* fprintf(outfile, "\n\tPipek-Mezey Localized MO's (after sort):\n"); print_mat(C, nao, nmo, outfile); */ /* Check MO normalization */ for(i=0; i < nmo; i++) { norm = 0.0; for(j=0; j < nao; j++) for(k=0; k < nao; k++) { norm += C[j][i] * C[k][i] * S[j][k]; } /* fprintf(outfile, "norm[%d] = %20.10f\n", i, norm); */ } /* Construct orbital domains and check for completeness */ charge = init_array(natom); rank = init_int_array(natom); domain = init_int_matrix(nocc,natom); boolean = init_int_array(natom); SR = init_array(nao); X = block_matrix(nao,nao); Z = init_array(nao); cutoff = 0.001; /* Completness cutoff value */ for(i=0; i < nocc; i++) { zero_arr(charge,natom); zero_int_array(rank,natom); zero_int_array(boolean,natom); /* Compute the contribution of each atom to this orbital's charge */ for(j=0; j < natom; j++) { charge[j] = 0.0; for(k=aostart[j]; k <= aostop[j]; k++) { tmp = 0.0; for(l=0; l < nao; l++) tmp += S[k][l] * C[l][i]; tmp *= C[k][i]; charge[j] += tmp; } /* fprintf(outfile, "orbital %d charge[%d] = %20.10f\n", i,j,charge[j]); */ } /* Now rank the atoms' contributions */ for(j=0; j < natom; j++) { rank[j] = 0; boolean[j] = 0; } for(j=0,max=0; j < natom; j++) /* First, find the overall maximum */ if(fabs(charge[j]) > fabs(charge[max])) max = j; rank[0] = max; boolean[max] = 1; for(j=1; j < natom; j++) { max = 0; while(boolean[max]) max++; /* Find an unused max */ for(k=0; k < natom; k++) if((fabs(charge[k]) >= fabs(charge[max])) && !boolean[k]) max = k; rank[j] = max; boolean[max] = 1; } /* for(j=0; j < natom; j++) fprintf(outfile, "%d charge = %20.10f rank = %d\n", j, charge[j], rank[j]); */ /* Now build the domain */ zero_arr(SR,nao); zero_mat(X,nao,nao); zero_arr(Z,nao); for(j=0; j < nao; j++) for(k=0; k < nao; k++) SR[j] += S[j][k] * C[k][i]; domain[i][rank[0]] = 1; /* by default */ fR = 1.0; next_atom = 1; while(fabs(fR) > cutoff) { for(j=0,row=0; j < natom; j++) { if(domain[i][j]) { /* If this atom is in the domain... */ for(k=aostart[j]; k <= aostop[j]; k++,row++) { Z[row] = SR[k]; for(l=0,col=0; l < natom; l++) { if(domain[i][l]) { for(m=aostart[l]; m <= aostop[l]; m++,col++) X[row][col] = S[k][m]; } } } } } /* print_mat(X, row, col, outfile); */ /* Solve X * Y = Z */ /* stat = pople(X, Z, row, 1, 1e-8, outfile, 0); */ /* row should equal col */ flin(X, Z, row, 1, &det); stat = 0; if(!stat) { /* fprintf(outfile, "\n\tR' coefficients:\n"); for(j=0; j < nao; j++) fprintf(outfile, "%d %20.10f\n", j, Z[j]); */ /* Now check the completeness of the chosen domain */ fR = 1.0; for(j=0,row=0; j < natom; j++) { if(domain[i][j]) { for(k=aostart[j]; k <= aostop[j]; k++,row++) for(l=0; l < nao; l++) fR -= Z[row] * S[k][l] * C[l][i]; } } /* fprintf(outfile, "\n\tCompleteness check %d = %20.10f\n", i, fR); */ /* Augment the domain if necessary */ if(fabs(fR) > cutoff) domain[i][rank[next_atom++]] = 1; } else fR = 0; } /* Print out info on the domain */ if(!stat) { fprintf(outfile, "Domain of Occupied Orbital %d:", i); for(j=0; j < natom; j++) if(domain[i][j]) fprintf(outfile, "%2d ", j+1); fprintf(outfile, " Completeness = %20.10f\n", fR); } else fprintf(outfile, "Problem with R' for orbital %d.\n", i); fflush(outfile); } /* Build the SCF closed-shell density matrix/2 */ /* D = block_matrix(nao,nao); for(i=0; i < nao; i++) for(j=0; j < nao; j++) for(k=0; k < nocc; k++) D[i][j] += C[i][k] * C[j][k]; fprintf(outfile, "\n\tAO-basis SCF Density:\n"); print_mat(D, nao, nao, outfile); */ /* Compute the virtual space projector */ /* R = block_matrix(nao,nao); for(i=0; i < nao; i++) R[i][i] = 1.0; C_DGEMM('n','n',nao,nao,nao,-1.0,&(D[0][0]),nao,&(S[0][0]),nao, 1.0,&(R[0][0]),nao); fprintf(outfile, "\n\tVirtual-Space Projector:\n"); print_mat(R, nao, nao, outfile); */ } }} // namespace psi::cusp psi3/src/bin/cusp/Makefile.in0000644000101500007650000000054710677317165014602 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(BLAS) PSILIBS = -lPSI_dpd -lPSI_qt -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = \ cusp.cc phi.cc delta.cc cache.cc local.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif psi3/src/bin/cusp/phi.cc0000644000101500007650000000665410757640026013623 0ustar crawdad/*! \file \ingroup CUSP \brief Enter brief description of file here */ /* ** phi(): Compute the values of the atomic orbitals at a given point. ** -TDC, June 2001 */ #include #include #include #include #include #include #include #include /* for the maximum angluar momentum, LIBINT_MAX_AM */ #include #include namespace psi { namespace cusp { #define MAXFACT 100 extern int nao; int natom, nprim, nshell; int *stype, *snuc, *snumg, *sprim; double *a, *c, **geom, df[MAXFACT], **norm; int **xexp, **yexp, **zexp, *l_length; void setup_phi(void) { static int use_cca_integrals_standard = (PSI_INTEGRALS_STANDARD == 1); static int done=0; int i,l,j,ao; if(done) return; chkpt_init(PSIO_OPEN_OLD); nao = chkpt_rd_nao(); natom = chkpt_rd_natom(); nprim = chkpt_rd_nprim(); nshell = chkpt_rd_nshell(); stype = chkpt_rd_stype(); snuc = chkpt_rd_snuc(); snumg = chkpt_rd_snumg(); sprim = chkpt_rd_sprim(); a = chkpt_rd_exps(); c = chkpt_rd_contr(); geom = chkpt_rd_geom(); chkpt_close(); /* compute double factorial --- df[n] = (n-1)!! */ df[0] = 1.0; df[1] = 1.0; df[2] = 1.0; for(i=3; i < MAXFACT; i++) df[i] = (i-1) * df[i-2]; /* Compute the AO ordering within a shell and the angle-independent normalization contants */ xexp = (int **) malloc(LIBINT_MAX_AM * sizeof(int *)); yexp = (int **) malloc(LIBINT_MAX_AM * sizeof(int *)); zexp = (int **) malloc(LIBINT_MAX_AM * sizeof(int *)); norm = (double **) malloc(LIBINT_MAX_AM * sizeof(double *)); l_length = init_int_array(LIBINT_MAX_AM); l_length[0] = 1; for(l=0; l < (LIBINT_MAX_AM); l++) { if(l) l_length[l] = l_length[l-1] + l + 1; xexp[l] = init_int_array(l_length[l]); yexp[l] = init_int_array(l_length[l]); zexp[l] = init_int_array(l_length[l]); norm[l] = init_array(l_length[l]); for(i=0,ao=0; i <= l; i++) { for(j=0; j <= i; j++) { xexp[l][ao] = l - i; yexp[l][ao] = i - j; zexp[l][ao] = j; if (use_cca_integrals_standard) norm[l][ao] = 1.0; else norm[l][ao] = sqrt(df[2*l]/(df[2*(l-i)]*df[2*(i-j)]*df[2*j])); /* printf("%d %d %20.10f\n", l, ao, norm[l][ao]); */ ao++; } } } done = 1; } void compute_phi(double *phi, double x, double y, double z) { int i, j, l, firstp, lastp; int am, atom, ao; double cexpr, dx, dy, dz, rr; setup_phi(); /* Loop over the shells */ for(i=0,ao=0; i < nshell; i++) { firstp = sprim[i]-1; lastp = firstp + snumg[i]; atom = snuc[i] - 1; dx = x - geom[atom][0]; dy = y - geom[atom][1]; dz = z - geom[atom][2]; /* Compute r^2 for this center */ rr = dx*dx + dy*dy + dz*dz; /* Angular momentum level for this shell */ am = stype[i] - 1; if(am > LIBINT_MAX_AM) { printf("Angular momentum max. exceeded.\n"); exit(PSI_RETURN_FAILURE); } /* Loop over the primitive Gaussians in this shell */ cexpr = 0; for(j=firstp; j < lastp; j++) { cexpr += c[j] * exp(-a[j] * rr); } for(l=0; l < l_length[am]; l++) { phi[ao+l] += pow(dx,(double) xexp[am][l]) * pow(dy,(double) yexp[am][l]) * pow(dz,(double) zexp[am][l]) * cexpr * norm[am][l]; } ao += l_length[am]; } } }} // namespace psi::cusp psi3/src/bin/dboc/0000755000101500007650000000000011146111671012446 5ustar crawdadpsi3/src/bin/dboc/ci_overlap.cc0000644000101500007650000001027011112537333015100 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include "ci_overlap.h" using namespace psi::dboc; namespace { // Packages ptr to CIOverlap and thread id typedef std::pair objptr_id_t; void* thread_compute(void* objptr_id_voidptr) { objptr_id_t* objptr_id = static_cast(objptr_id_voidptr); int tid = objptr_id->second; CIOverlap* obj = objptr_id->first; // call obj->thread_compute(tid); return 0; } }; CIOverlap::CIOverlap(SlaterDetVector* vecbra, SlaterDetVector* vecket, StringBlockedMatrix& ovlp_a, StringBlockedMatrix& ovlp_b, unsigned int nthreads) : vecbra_(vecbra), vecket_(vecket), ovlp_a_(ovlp_a), ovlp_b_(ovlp_b), nthreads_(nthreads), evaluated_(false), S_((FLOAT)0.0), threadgrp_(nthreads) { } CIOverlap::~CIOverlap() { } void CIOverlap::compute() { // // Loop over string block quartets, inside the loop spawn threads, accumulate the result // const int nblksbra_a = ovlp_a_.strblk_bra()->nblocks(); const int nblksbra_b = ovlp_b_.strblk_bra()->nblocks(); const int nblksket_a = ovlp_a_.strblk_ket()->nblocks(); const int nblksket_b = ovlp_b_.strblk_ket()->nblocks(); // loop over string overlap blocks and then loop over all determinant pairs whose overlap // can be computed using these string overlap blocks for(int bk_a=0; bk_athread_compute(0); for(int t=1;tsdset->size; int IJ = 0; for(int I=0; Isdset->dets + I; int Istra = detI->alphastring; int Istrb = detI->betastring; // skip this determinant if these string overlap blocks don't contribute if (bk_a != strblks_ket_a.block(Istra) || bk_b != strblks_ket_b.block(Istrb)) continue; FLOAT cI = vecket_->coeffs[I]; const int istra = strblks_ket_a.rel_to_block_begin(Istra); const int istrb = strblks_ket_b.rel_to_block_begin(Istrb); for(int J=0; Jsdset->dets + J; int Jstra = detJ->alphastring; int Jstrb = detJ->betastring; // skip this determinant if these string overlap blocks don't contribute if (bb_a != strblks_bra_a.block(Jstra) || bb_b != strblks_bra_b.block(Jstrb)) continue; FLOAT cJ = vecbra_->coeffs[J]; const int jstra = strblks_bra_a.rel_to_block_begin(Jstra); const int jstrb = strblks_bra_b.rel_to_block_begin(Jstrb); FLOAT S = Sa[jstra][istra] * Sb[jstrb][istrb]; FLOAT contrib = cJ * S * cI; S_tot += contrib; } } threadgrp_.Sthr[tid] += S_tot; } psi3/src/bin/dboc/ci_overlap.h0000644000101500007650000000346510754663017014764 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_bin_dboc_cioverlap_h_ #define _psi3_bin_dboc_cioverlap_h_ #include #include "stringblocks.h" namespace psi{ namespace dboc { /// Computes overlap between 2 CI vectors. Uses precomputed string overlap matrix for alpha and beta spins. class CIOverlap { public: CIOverlap(SlaterDetVector* vecbra, SlaterDetVector* vecket, StringBlockedMatrix& ovlp_a, StringBlockedMatrix& ovlp_b, unsigned int nthreads); ~CIOverlap(); SlaterDetVector* vecbra() const { return vecbra_; } SlaterDetVector* vecket() const { return vecket_; } StringBlockedMatrix& ovlp_a() const { return ovlp_a_; } StringBlockedMatrix& ovlp_b() const { return ovlp_b_; } unsigned int nthreads() const { return nthreads_; } void compute(); /// Returns the value of the overlap double value() const; // thread body -- computes overlaps for all determinants whose strings belong to blocks specified in threadgrp_ void thread_compute(int tid); private: SlaterDetVector* vecbra_; SlaterDetVector* vecket_; StringBlockedMatrix& ovlp_a_; StringBlockedMatrix& ovlp_b_; unsigned int nthreads_; bool evaluated_; FLOAT S_; class ThreadGrp { public: ThreadGrp(int nthreads) : blkbra_a(0), blkbra_b(0), blkket_a(0), blkket_b(0), Sthr(new FLOAT[nthreads]) { for(int t=0; t #include #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #include "molecule.h" #include "moinfo.h" #include "params.h" #include "hfwfn.h" #if defined HAVE_DECL_SETENV && !HAVE_DECL_SETENV extern int setenv(const char *, const char *, int); #endif extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } extern "C" const char *gprgid(); namespace psi { namespace dboc { /* Function prototypes */ static void init_io(int argc, char *argv[]); static void exit_io(); void done(const char * message); static void parsing(); static void read_molecule(); static double eval_dboc(); extern void print_intro(); extern void print_params(); extern void print_geom(); extern void setup_geoms(); extern double eval_derwfn_overlap(bool symm_coord); extern void read_moinfo(); /*--- Global structures ---*/ Molecule_t Molecule; MOInfo_t MOInfo; Params_t Params; BasisSet* BasisSets[MAX_NUM_DISP]; // Array of pointers to basis set objects with current coordinate displaced by +delta, -delta, +2delta, and -2delta, respectively HFWavefunction* HFVectors[MAX_NUM_DISP]; // Array of pointers to HF wavefunctions for displacements by +delta, -delta, +2delta, and -2delta, respectively const char* CI_Vector_Labels[MAX_NUM_DISP] = { "R0-delta CI Vector", "R0+delta CI Vector", "R0-2delta CI Vector", "R0+2delta CI Vector" }; const int MAX_GEOM_STRING=20; }} // namespace psi::dboc int main(int argc, char *argv[]) { using namespace psi::dboc; int i,j; int natom, num, junk; double **geom, *zvals; char *geom_string; FILE *geometry; init_io(argc,argv); read_molecule(); parsing(); print_intro(); print_geom(); print_params(); #if USE_MOINFO read_moinfo(); #endif setup_geoms(); double E_dboc = eval_dboc(); fprintf(outfile," E(DBOC) = %25.15lf a.u.\n",E_dboc); fprintf(outfile," E(DBOC) = %25.5lf cm^{-1}\n\n",E_dboc*_hartree2wavenumbers); exit_io(); exit(0); } namespace psi { namespace dboc { /*--- parsing ---*/ void parsing() { int errcod; errcod = ip_string("LABEL",&Params.label,0); if (errcod != IPE_OK) { Params.label = new char[1]; Params.label[0] = '\0'; } errcod = ip_string("WFN",&Params.wfn,0); if (errcod != IPE_OK) done("Keyword WFN is not found"); char *reftype; errcod = ip_string("REFERENCE",&reftype,0); if (errcod != IPE_OK) done("Keyword REFERENCE is not found"); else if (!strcmp(reftype,"RHF")) Params.reftype = Params_t::rhf; else if (!strcmp(reftype,"ROHF")) Params.reftype = Params_t::rohf; else if (!strcmp(reftype,"UHF")) Params.reftype = Params_t::uhf; else done("This HF reference is not supported at the moment"); free(reftype); Params.delta = 0.0005; errcod = ip_data(":DBOC:DISPLACEMENT","%lf",&Params.delta,0); // how much memory to use? long max_memory; fndcor(&max_memory,infile,outfile); Params.max_memory = static_cast(max_memory); Params.memory = Params.max_memory; // number of compute threads int num_threads = 1; errcod = ip_data("NUM_THREADS","%d",&num_threads,0); Params.num_threads = num_threads; Params.print_lvl = 1; errcod = ip_data("PRINT","%d",&Params.print_lvl,0); int coords_given = ip_exist(":DBOC:COORDS",0); if (coords_given) { Params.ncoord = 0; ip_count(":DBOC:COORDS",&Params.ncoord,0); if (Params.ncoord == 0) done("Keyword COORDS should be a vector of 3-element vectors"); Params.coords = new Params_t::Coord_t[Params.ncoord]; for(int coord=0; coord= Molecule.natom*3) done("Keyword COORDS contains an out-of-bounds index"); errcod = ip_data(":DBOC:COORDS","%lf",&Params.coords[coord].coeff,2,coord,1); char *tmpstr; errcod = ip_string(":DBOC:COORDS",&tmpstr,2,coord,2); if (!strcmp(tmpstr,"SYMM")) Params.coords[coord].symm = true; else if (!strcmp(tmpstr,"NONSYMM")) Params.coords[coord].symm = false; else done("Keyword COORDS contains an illegal symmetry specifier"); free(tmpstr); Params.coords[coord].atom = Params.coords[coord].index/3; Params.coords[coord].xyz = Params.coords[coord].index%3; } } else { Params.ncoord = 3*Molecule.nuniques; Params.coords = new Params_t::Coord_t[Params.ncoord]; int coord = 0; for(int ua=0; uaset_center(a,geom_m_ref[a]); // Read in the "-delta" displaced HF wavefunction HFVectors[MinusDelta] = new HFWavefunction(); // For CI method rename the saved wave function if (!strcmp(Params.wfn,"DETCI") || !strcmp(Params.wfn,"DETCAS")) { SlaterDetVector *vec; slaterdetvector_read(PSIF_CIVECT,"CI vector",&vec); slaterdetvector_write(PSIF_CIVECT,CI_Vector_Labels[0],vec); slaterdetvector_delete_full(vec); clean_detci_mess(); } } void run_psi_otherdisp(int disp) { int disp_coord = (disp-1)%Params.disp_per_coord; int coord = (disp-1)/Params.disp_per_coord; int symm = Params.coords[coord].symm; // If this is an odd displacement means it's a plus displacement. If plus and minus // displacements are equivalent for this coord (symm == true) then an equivalent // displacement has JUST been computed. No need to compute the wave function // again -- just run input, get the rref, and save the wave function. if (!symm || (symm && disp_coord%2 == 0)) { char *inputcmd = new char[80]; sprintf(inputcmd,"input --geomdat %d",disp); int errcod = system(inputcmd); if (errcod) { done("input failed"); } errcod = system("psi3 --dboc --noinput --messy"); if (errcod) { done("psi3 failed"); } delete[] inputcmd; // Read in the new displaced HF wavefunction HFVectors[disp_coord] = new HFWavefunction(); } else { // Read in the previous displaced HF wavefunction HFVectors[disp_coord] = new HFWavefunction(); // only need to update rref char *inputcmd = new char[80]; sprintf(inputcmd,"input --savemos --geomdat %d",disp); int errcod = system(inputcmd); if (errcod) { done("input failed"); } delete[] inputcmd; chkpt_init(PSIO_OPEN_OLD); double** rref_p = chkpt_rd_rref(); chkpt_close(); HFVectors[disp_coord]->set_rref(rref_p); free_block(rref_p); } // For CI method rename the saved wave function if (!strcmp(Params.wfn,"DETCI") || !strcmp(Params.wfn,"DETCAS")) { SlaterDetVector *vec; slaterdetvector_read(PSIF_CIVECT,"CI vector",&vec); slaterdetvector_write(PSIF_CIVECT,CI_Vector_Labels[disp_coord],vec); slaterdetvector_delete_full(vec); clean_detci_mess(); } } // // This function creates basis set objects for each displacement // void init_basissets(Params_t::Coord_t* coord) { // BasisSetP1 int atom = coord->index/3; int xyz = coord->index%3; double AplusD[3]; for(int i=0; i<3; i++) AplusD[i] = BasisSets[MinusDelta]->get_center(atom, i); AplusD[xyz] += 2.0*Params.delta; BasisSets[PlusDelta] = new BasisSet(*BasisSets[MinusDelta]); BasisSets[PlusDelta]->set_center(atom,AplusD); if (Params.disp_per_coord == 4) { // BasisSetP2 double Aplus2D[3]; for(int i=0; i<3; i++) Aplus2D[i] = AplusD[i]; Aplus2D[xyz] += Params.delta; BasisSets[Plus2Delta] = new BasisSet(*BasisSets[MinusDelta]); BasisSets[Plus2Delta]->set_center(atom,Aplus2D); // BasisSetM2 double Aminus2D[3]; for(int i=0; i<3; i++) Aminus2D[i] = Aplus2D[i]; Aminus2D[xyz] -= 4.0*Params.delta; BasisSets[Minus2Delta] = new BasisSet(*BasisSets[MinusDelta]); BasisSets[Minus2Delta]->set_center(atom,Aminus2D); } } // // This function destroys basis set objects for each displacement // void delete_basissets(Params_t::Coord_t* coord) { BasisSets[MinusDelta]->~BasisSet(); BasisSets[PlusDelta]->~BasisSet(); if (Params.disp_per_coord == 4) { BasisSets[Minus2Delta]->~BasisSet(); BasisSets[Plus2Delta]->~BasisSet(); } } // // This function destroys HFWavefunction objects for each displacement // void delete_hfwfns(Params_t::Coord_t* coord) { HFVectors[MinusDelta]->~HFWavefunction(); HFVectors[PlusDelta]->~HFWavefunction(); if (Params.disp_per_coord == 4) { HFVectors[Minus2Delta]->~HFWavefunction(); HFVectors[Plus2Delta]->~HFWavefunction(); } } double eval_dboc() { double* atomic_mass = get_atomic_masses(); const int ndisp = Params.disp_per_coord * Params.ncoord; double E_dboc = 0.0; for(int disp=1; disp<=ndisp;) { int current_coord = (disp-1)/Params.disp_per_coord; Params_t::Coord_t* coord = &(Params.coords[current_coord]); int atom = coord->index/3; int xyz = coord->index%3; const bool symm = coord->symm; run_psi_firstdisp(disp); disp++; for(int i=1;icoeff; if (Params.print_lvl >= PrintLevels::print_params) { char xyz = 'x'; xyz = (coord->xyz == 1) ? 'y' : xyz; xyz = (coord->xyz == 2) ? 'z' : xyz; fprintf(outfile," = %25.15lf\n", del2); fprintf(outfile," DBOC contribution = %20.10lf a.u.\n\n", E_i); fflush(outfile); } E_dboc += E_i; // For CI method purge the file with saved wave functions as the point group may change if (!strcmp(Params.wfn,"DETCI") || !strcmp(Params.wfn,"DETCAS")) { psio_open(PSIF_CIVECT,PSIO_OPEN_NEW); psio_close(PSIF_CIVECT,0); } // it's safe to do psiclean now int errcod = system("psiclean"); if (errcod) { done("psiclean"); } delete_basissets(coord); delete_hfwfns(coord); } return E_dboc; } static char *orig_psi_output_env; void init_io(int argc, char *argv[]) { int i; char *progid; progid = (char *) malloc(strlen(gprgid())+2); sprintf(progid, ":%s",gprgid()); int errcod = psi_start(&infile,&outfile,&psi_file_prefix,argc-1,argv+1,0); if (errcod != PSI_RETURN_SUCCESS) throw std::runtime_error("init_io -- psi_start failed"); ip_cwk_add(progid); tstart(outfile); psio_init(); psio_ipv1_config(); // Psi modules called by dboc should read from the same input file // set the value of PSI_INPUT for the duration of this run char* ifname = psi_ifname(); #if HAVE_PUTENV char* tmpstr1 = (char *) malloc(11+strlen(ifname)); sprintf(tmpstr1, "PSI_INPUT=%s", ifname); putenv(tmpstr1); #elif HAVE_SETENV setenv("PSI_INPUT",ifname,1); #else #error "Have neither putenv nor setenv. Something must be very broken on this system." #endif // Psi modules called by dboc should write to a different output file // reset the value of PSI_OUTPUT for the duration of this run orig_psi_output_env = getenv("PSI_OUTPUT"); char* ofname = (char*) malloc(strlen(psi_ofname())+2+strlen("dboc.findif.out")); sprintf(ofname, "%s.dboc.findif.out", psi_ofname()); #if HAVE_PUTENV char* tmpstr2 = (char *) malloc(12+strlen(ofname)); sprintf(tmpstr2, "PSI_OUTPUT=%s", ofname); putenv(tmpstr2); #elif HAVE_SETENV setenv("PSI_OUTPUT",ofname,1); #else #error "Have neither putenv nor setenv. Something must be very broken on this system." #endif free(progid); } void exit_io() { psio_done(); tstop(outfile); psi_stop(infile,outfile,psi_file_prefix); } void done(const char *message) { char* errmsg; errmsg = (char *) new char[strlen(message)+7]; sprintf(errmsg,"DBOC: %s",message); fprintf(outfile,"ERROR %s",errmsg); exit_io(); throw std::runtime_error(errmsg); delete[] errmsg; } }} // namespace psi::dboc extern "C" const char *gprgid() { const char *prgid = "DBOC"; return(const_cast(prgid)); } psi3/src/bin/dboc/defines.h0000644000101500007650000000067510754663017014256 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_dboc_defines_h_ #define _psi3_dboc_defines_h_ namespace psi{ namespace dboc { const int MAX_NUM_DISP=4; typedef enum { MinusDelta = 0, PlusDelta = 1, Minus2Delta = 2, Plus2Delta = 3} DisplacementIndex; }} /* namespace psi::dboc */ //#define LONG_DOUBLE 1 // Use long doubles for FLOAT #define USE_MOINFO 0 // set to 1 if using MOInfo #endif psi3/src/bin/dboc/dets.h0000644000101500007650000000121610754663017013570 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_dboc_dets_h_ #define _psi3_dboc_dets_h_ namespace psi{ namespace dboc { /// Det is a determinant to be sorted according to "indices" Ia and Ib (can be string indices, block indices, etc.) struct Det { int Ia; int Ib; }; typedef std::pair DetI; // Determinant + index inline bool detcomp(DetI i, DetI j) { const int Ia = i.second.Ia; const int Ib = i.second.Ib; const int Ja = j.second.Ia; const int Jb = j.second.Ib; if (Ia < Ja) return true; if (Ia == Ja) return Ib < Jb; return false; } }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/float.h0000644000101500007650000000056310754663017013742 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_dboc_float_h_ #define _psi3_dboc_float_h_ #include "defines.h" #if LONG_DOUBLE typedef long double FLOAT; #else typedef double FLOAT; #endif #if LONG_DOUBLE # ifdef AIX # define FABS fabsl # else # define FABS fabs # endif #else # define FABS fabs #endif #endif psi3/src/bin/dboc/geom.cc0000644000101500007650000000437710757640026013727 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include "molecule.h" #include "params.h" namespace { void append_geom(FILE *geomdat, double **geom, int disp); } namespace psi { namespace dboc { extern Molecule_t Molecule; extern Params_t Params; void setup_geoms() { const int disp_per_coord = Params.disp_per_coord; const double delta = Params.delta; int d; int coord, disp, atom, xyz; FILE *geometry; /*--- Open geom.dat for writing ---*/ ffile(&geometry, "geom.dat", 0); fprintf(geometry,"input:(\n"); /*--- make a local copy of reference geometry ---*/ double **geom_copy = block_matrix(Molecule.natom,3); for(atom=0; atomindex/3; int xyz = c->index%3; for(d=-1; d<=1; d+=2,disp++) { geom_copy[atom][xyz] += d*delta; append_geom(geometry,geom_copy,disp); geom_copy[atom][xyz] -= d*delta; } if (Params.disp_per_coord == 4) for(d=-2; d<=2; d+=4,disp++) { geom_copy[atom][xyz] += d*delta; append_geom(geometry,geom_copy,disp); geom_copy[atom][xyz] -= d*delta; } } free_block(geom_copy); fprintf(geometry,")\n"); fclose(geometry); } }} // namespace psi::dboc namespace { using namespace psi::dboc; void append_geom(FILE *geomdat, double **geom, int disp) { fprintf(geomdat,"%% DBOC cartesian displacement %d\n",disp); fprintf(geomdat,"geometry%d = (\n",disp); for(int atom=0; atom #include #include #include #include #include "hfwfn.h" using namespace std; using namespace psi::dboc; HFWavefunction::HFWavefunction() { int unit_opened = 1; if (!psio_open_check(PSIF_CHKPT)) { chkpt_init(PSIO_OPEN_OLD); unit_opened = 0; } num_mo_ = chkpt_rd_nmo(); num_so_ = chkpt_rd_nso(); num_ao_ = chkpt_rd_nao(); refnum_ = (reftype) chkpt_rd_ref(); nirreps_ = chkpt_rd_nirreps(); clsdpi_ = chkpt_rd_clsdpi(); openpi_ = chkpt_rd_openpi(); orbspi_ = chkpt_rd_orbspi(); ndocc_ = nsocc_ = 0; for(int i=0; i namespace psi { namespace dboc { class HFWavefunction { int num_mo_; int num_so_; int num_ao_; reftype refnum_; int ndocc_; int nsocc_; int nirreps_; int *clsdpi_; int *openpi_; int *orbspi_; double **alpha_evec_; double **beta_evec_; double **aotoso_; double **rref_; public: HFWavefunction(); ~HFWavefunction(); int num_mo(); int num_so(); int ndocc(); int nsocc(); int nalpha(); int nbeta(); int num_ao(); int nirreps(); int* clsdpi(); int* openpi(); int* orbspi(); double** alpha_evec(); double** beta_evec(); double** aotoso(); double** rref(); void set_rref(double**); }; }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/linalg.cc0000644000101500007650000001115010764336554014237 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ // // Local definitions for matrix operations: (de)allocation, product, LU decomposition // // NOTE: on IBM AIX 4.3.3 with IBM VisualAge C++ 5.0.2.0 delete[] doesn't seem // to release the memory and memory leaks result. Using malloc/free instead. #include #include #include #include #include #include "params.h" #include "linalg.h" namespace psi { namespace dboc { extern void done(const char * message); extern Params_t Params; FLOAT** create_matrix(int a, int b) { FLOAT** M; if (a>=0 && b>=0) { // Enough memory given by user? size_t memory_needed = sizeof(FLOAT*)*a + sizeof(FLOAT)*a*b; if (memory_needed > Params.memory) { std::ostringstream oss; oss << "create_matrix failed -- would exceed user-specified memory" << std::endl << " need " << memory_needed << " bytes (nrow = " << a << ", ncol = " << b << ")" << std::endl << " have " << Params.memory << " bytes" << std::endl; done(oss.str().c_str()); } Params.memory -= memory_needed; M = (FLOAT**) malloc(sizeof(FLOAT*)*a); if (M == NULL) { done("create_matrix failed -- probably not enough memory."); } M[0] = (FLOAT*) malloc(sizeof(FLOAT)*a*b); if (M[0] == NULL) { done("create_matrix failed -- probably not enough memory."); } for(int i=1; i kk) nn=kk; ll = 2*(nn-ii+1)+1; fprintf (out,"\n"); for (i=ii; i <= nn; i++) fprintf(out," %5d",i); fprintf (out,"\n"); for (i=0; i < m; i++) { fprintf (out,"\n%5d",i+1); for (j=ii-1; j < nn; j++) { #if LONG_DOUBLE fprintf (out,"%12.7Lf",a[i][j]); #else fprintf (out,"%12.7lf",a[i][j]); #endif } } fprintf (out,"\n"); if (n <= kk) { fflush(out); return; } ii=kk; goto L200; } FLOAT** convert_matrix(double **m, int a, int b, int transpose) { int nrow = transpose ? b : a; int ncol = transpose ? a : b; FLOAT** M = create_matrix(nrow, ncol); if (!transpose) { int nelem = nrow*ncol; FLOAT* Melem = M[0]; double* melem = m[0]; for(int elem=0; elem big) big=temp; } if (big == 0.0) { *d = 0.0; return; } vv[i] = 1.0/big; } for (j=0; j < n ; j++) { for (i=0; i < j ; i++) { sum = a[i][j]; for (k=0; k < i ; k++) sum -= a[i][k]*a[k][j]; a[i][j] = sum; } big = 0.0; for (i=j ; i < n ; i++) { sum=a[i][j]; for (k=0; k < j ; k++) sum -= a[i][k]*a[k][j]; a[i][j] = sum; if ((dum=vv[i]*fabs(sum)) >= big) { big = dum; imax = i; } } if (j != imax) { for (k=0; k < n; k++) { dum=a[imax][k]; a[imax][k]=a[j][k]; a[j][k]=dum; } *d = -(*d); vv[imax]=vv[j]; } indx[j]=imax; if (a[j][j] == 0.0) a[j][j] = TINY; if (j != n-1) { dum = 1.0/a[j][j]; for (i=j+1; i < n ; i++) a[i][j] *= dum; } } } }} /* namespace psi::dboc */ psi3/src/bin/dboc/linalg.h0000644000101500007650000000116610754663017014103 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_dboc_linalg_h_ #define _psi3_dboc_linalg_h_ #include "float.h" #include namespace psi { namespace dboc { FLOAT** create_matrix(int a, int b); void delete_matrix(FLOAT** M); void delete_matrix(FLOAT** M, int nrow, int ncol); FLOAT** convert_matrix(double **M, int a, int b, int transpose); void print_mat(FLOAT** a, int m, int n, FILE* out); int matrix_mult(FLOAT** A, int arow, int acol, FLOAT** B, int brow, int bcol, FLOAT** C); void lu_decom(FLOAT** a, int n, int* indx, FLOAT* d); }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/Makefile.in0000644000101500007650000000110410764260211014507 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars LDLIBS += $(LAPACK) $(BLAS) -lpthread PSILIBS = -lPSI_basis -lPSI_qt -lPSI_chkpt -lPSI_psio -lPSI_ciomr -lPSI_ipv1 CXXSRC = dboc.cc geom.cc print.cc moinfo.cc overlap.cc mo_overlap.cc linalg.cc\ hfwfn.cc rhf.cc rohf.cc uhf.cc rci.cc roci.cc stringblocks.cc ci_overlap.cc BINOBJ = $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: dboc.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 psi3/src/bin/dboc/mo_overlap.cc0000644000101500007650000002205511005701667015130 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #include "float.h" #include "params.h" #include "linalg.h" #include "moinfo.h" #include "mo_overlap.h" #include "hfwfn.h" #include #include #include namespace psi { namespace dboc { extern void done(const char * message); extern "C" FILE *outfile; extern BasisSet* BasisSets[MAX_NUM_DISP]; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern Params_t Params; FLOAT **eval_S_alpha(DisplacementIndex LDisp, DisplacementIndex RDisp) { HFWavefunction* HFWfn_R = HFVectors[RDisp]; HFWavefunction* HFWfn_L = HFVectors[LDisp]; int num_ao = HFWfn_R->num_ao(); double** hf_evec_l = HFWfn_L->alpha_evec(); double** aotoso_l = HFWfn_L->aotoso(); double** rref_l = HFWfn_L->rref(); double** hf_evec_r = HFWfn_R->alpha_evec(); double** aotoso_r = HFWfn_R->aotoso(); double** rref_r = HFWfn_R->rref(); #if USE_MOINFO extern MOInfo_t MOInfo; int num_mo = MOInfo.num_mo; int num_so = MOInfo.num_so; #else int num_mo = HFWfn_R->num_mo(); int num_so = HFWfn_R->num_so(); #endif // // Convert matrices of doubles into matrices of FLOAT's // FLOAT** hf_evec_r_FLOAT = convert_matrix(hf_evec_r, num_so, num_mo, 0); FLOAT** hf_evec_l_FLOAT_transp = convert_matrix(hf_evec_l, num_so, num_mo, 1); // Compute plus/minus overlap OverlapEngine overlap(BasisSets[LDisp],BasisSets[RDisp]); double** Slr_AO_AO = overlap.compute_full_matrix(); // Rotate bases to the original coordinate systems (prior to reorientation into principal axis system) RotationOp Rop_r(BasisSets[RDisp]); RotationOp Rop_l(BasisSets[LDisp]); double** basisRref_r = Rop_r.full_rotation_mat(rref_r); double** basisRref_l = Rop_l.full_rotation_mat(rref_l); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " -Rotation matrix for AO basis (disp = %d)\n", RDisp); psi::dboc::print_mat(basisRref_r, num_ao, num_ao, outfile); fprintf(outfile, " -Rotation matrix for AO basis (disp = %d)\n", LDisp); psi::dboc::print_mat(basisRref_l, num_ao, num_ao, outfile); double** tmp_l1 = block_matrix(num_ao, num_mo); double** tmp_l2 = block_matrix(num_ao, num_mo); double** tmp_r1 = block_matrix(num_ao, num_mo); double** tmp_r2 = block_matrix(num_ao, num_mo); mmult(aotoso_r,1,hf_evec_r,0,tmp_r1,0,num_ao,num_so,num_mo,0); mmult(basisRref_r,0,tmp_r1,0,tmp_r2,0,num_ao,num_ao,num_mo,0); mmult(aotoso_l,1,hf_evec_l,0,tmp_l1,0,num_ao,num_so,num_mo,0); mmult(basisRref_l,0,tmp_l1,0,tmp_l2,0,num_ao,num_ao,num_mo,0); fprintf(outfile, " -Original alpha eigenvector (disp = %d)\n", RDisp); psi::dboc::print_mat(tmp_r1, num_ao, num_mo, outfile); fprintf(outfile, " -Rotated alpha eigenvector (disp = %d)\n", RDisp); psi::dboc::print_mat(tmp_r2, num_ao, num_mo, outfile); fprintf(outfile, " -Original alpha eigenvector (disp = %d)\n", LDisp); psi::dboc::print_mat(tmp_l1, num_ao, num_mo, outfile); fprintf(outfile, " -Rotated alpha eigenvector (disp = %d)\n", LDisp); psi::dboc::print_mat(tmp_l2, num_ao, num_mo, outfile); } double** tmpmat = block_matrix(num_ao,num_ao); mmult(Slr_AO_AO,0,basisRref_r,0,tmpmat,0,num_ao,num_ao,num_ao,0); mmult(basisRref_l,1,tmpmat,0,Slr_AO_AO,0,num_ao,num_ao,num_ao,0); free_block(tmpmat); free_block(basisRref_l); free_block(basisRref_r); double** Slr_AO_SO = block_matrix(num_ao,num_so); mmult(Slr_AO_AO, 0, aotoso_r, 1, Slr_AO_SO, 0, num_ao, num_ao, num_so, 0); free_block(Slr_AO_AO); double** Slr_SO_SO = block_matrix(num_so,num_so); mmult(aotoso_l, 0, Slr_AO_SO, 0, Slr_SO_SO, 0, num_so, num_ao, num_so, 0); free_block(Slr_AO_SO); FLOAT** Slr_FLOAT = convert_matrix(Slr_SO_SO, num_so, num_so, 0); free_block(Slr_SO_SO); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " (%d/%d) overlap matrix (SO basis)\n", LDisp, RDisp); psi::dboc::print_mat(Slr_FLOAT, num_so, num_so, outfile); } FLOAT** tmpmat1 = create_matrix(num_mo,num_so); if (matrix_mult(hf_evec_l_FLOAT_transp, num_mo, num_so, Slr_FLOAT, num_so, num_so, tmpmat1)) done("matrix_mult failed. Report the problem to the author."); FLOAT** S = create_matrix(num_mo, num_mo); if (matrix_mult(tmpmat1, num_mo, num_so, hf_evec_r_FLOAT, num_so, num_mo, S)) done("matrix_mult failed. Report the problem to the author."); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " (%d/%d) alpha overlap matrix (MO basis)\n", LDisp, RDisp); psi::dboc::print_mat(S, num_mo, num_mo, outfile); } delete_matrix(tmpmat1); delete_matrix(Slr_FLOAT); delete_matrix(hf_evec_l_FLOAT_transp); delete_matrix(hf_evec_r_FLOAT); return S; } FLOAT **eval_S_beta(DisplacementIndex LDisp, DisplacementIndex RDisp) { HFWavefunction* HFWfn_R = HFVectors[RDisp]; HFWavefunction* HFWfn_L = HFVectors[LDisp]; int num_ao = HFWfn_R->num_ao(); double** hf_evec_l = HFWfn_L->beta_evec(); double** aotoso_l = HFWfn_L->aotoso(); double** rref_l = HFWfn_L->rref(); double** hf_evec_r = HFWfn_R->beta_evec(); double** aotoso_r = HFWfn_R->aotoso(); double** rref_r = HFWfn_R->rref(); #if USE_MOINFO extern MOInfo_t MOInfo; int num_mo = MOInfo.num_mo; int num_so = MOInfo.num_so; #else int num_mo = HFWfn_R->num_mo(); int num_so = HFWfn_R->num_so(); #endif // // Convert matrices of doubles into matrices of FLOAT's // FLOAT** hf_evec_r_FLOAT = convert_matrix(hf_evec_r, num_so, num_mo, 0); FLOAT** hf_evec_l_FLOAT_transp = convert_matrix(hf_evec_l, num_so, num_mo, 1); // Compute plus/minus overlap OverlapEngine overlap(BasisSets[LDisp],BasisSets[RDisp]); double** Slr_AO_AO = overlap.compute_full_matrix(); // Rotate bases to the original coordinate systems (prior to reorientation into principal axis system) RotationOp Rop_r(BasisSets[RDisp]); RotationOp Rop_l(BasisSets[LDisp]); double** basisRref_r = Rop_r.full_rotation_mat(rref_r); double** basisRref_l = Rop_l.full_rotation_mat(rref_l); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " -Rotation matrix for AO basis (disp = %d)\n", RDisp); psi::dboc::print_mat(basisRref_r, num_ao, num_ao, outfile); fprintf(outfile, " -Rotation matrix for AO basis (disp = %d)\n", LDisp); psi::dboc::print_mat(basisRref_l, num_ao, num_ao, outfile); double** tmp_l1 = block_matrix(num_ao, num_mo); double** tmp_l2 = block_matrix(num_ao, num_mo); double** tmp_r1 = block_matrix(num_ao, num_mo); double** tmp_r2 = block_matrix(num_ao, num_mo); mmult(aotoso_r,1,hf_evec_r,0,tmp_r1,0,num_ao,num_so,num_mo,0); mmult(basisRref_r,0,tmp_r1,0,tmp_r2,0,num_ao,num_ao,num_mo,0); mmult(aotoso_l,1,hf_evec_l,0,tmp_l1,0,num_ao,num_so,num_mo,0); mmult(basisRref_l,0,tmp_l1,0,tmp_l2,0,num_ao,num_ao,num_mo,0); fprintf(outfile, " -Original beta eigenvector (disp = %d)\n", RDisp); psi::dboc::print_mat(tmp_r1, num_ao, num_mo, outfile); fprintf(outfile, " -Rotated beta eigenvector (disp = %d)\n", RDisp); psi::dboc::print_mat(tmp_r2, num_ao, num_mo, outfile); fprintf(outfile, " -Original beta eigenvector (disp = %d)\n", LDisp); psi::dboc::print_mat(tmp_l1, num_ao, num_mo, outfile); fprintf(outfile, " -Rotated beta eigenvector (disp = %d)\n", LDisp); psi::dboc::print_mat(tmp_l2, num_ao, num_mo, outfile); } double** tmpmat = block_matrix(num_ao,num_ao); mmult(Slr_AO_AO,0,basisRref_r,0,tmpmat,0,num_ao,num_ao,num_ao,0); mmult(basisRref_l,1,tmpmat,0,Slr_AO_AO,0,num_ao,num_ao,num_ao,0); free_block(tmpmat); free_block(basisRref_l); free_block(basisRref_r); double** Slr_AO_SO = block_matrix(num_ao,num_so); mmult(Slr_AO_AO, 0, aotoso_r, 1, Slr_AO_SO, 0, num_ao, num_ao, num_so, 0); free_block(Slr_AO_AO); double** Slr_SO_SO = block_matrix(num_so,num_so); mmult(aotoso_l, 0, Slr_AO_SO, 0, Slr_SO_SO, 0, num_so, num_ao, num_so, 0); free_block(Slr_AO_SO); FLOAT** Slr_FLOAT = convert_matrix(Slr_SO_SO, num_so, num_so, 0); free_block(Slr_SO_SO); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " (%d/%d) overlap matrix (SO basis)\n", LDisp, RDisp); psi::dboc::print_mat(Slr_FLOAT, num_so, num_so, outfile); } FLOAT** tmpmat1 = create_matrix(num_mo,num_so); if (matrix_mult(hf_evec_l_FLOAT_transp, num_mo, num_so, Slr_FLOAT, num_so, num_so, tmpmat1)) done("matrix_mult failed. Report the problem to the author."); FLOAT** S = create_matrix(num_mo, num_mo); if (matrix_mult(tmpmat1, num_mo, num_so, hf_evec_r_FLOAT, num_so, num_mo, S)) done("matrix_mult failed. Report the problem to the author."); if (Params.print_lvl > PrintLevels::print_contrib) { fprintf(outfile, " (%d/%d) beta overlap matrix (MO basis)\n", LDisp, RDisp); psi::dboc::print_mat(S, num_mo, num_mo, outfile); } delete_matrix(tmpmat1); delete_matrix(Slr_FLOAT); delete_matrix(hf_evec_l_FLOAT_transp); delete_matrix(hf_evec_r_FLOAT); return S; } }} // namespace psi::dboc psi3/src/bin/dboc/mo_overlap.h0000644000101500007650000000063210754663017014775 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_bin_dboc_mooverlap_h_ #define _psi3_bin_dboc_mooverlap_h_ #include "float.h" #include "defines.h" namespace psi { namespace dboc { FLOAT **eval_S_alpha(DisplacementIndex LDisp, DisplacementIndex RDisp); FLOAT **eval_S_beta(DisplacementIndex LDisp, DisplacementIndex RDisp); }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/moinfo.cc0000644000101500007650000000725510754663017014267 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include "moinfo.h" namespace psi { namespace dboc { extern MOInfo_t MOInfo; void read_moinfo() { chkpt_init(PSIO_OPEN_OLD); int nirreps = chkpt_rd_nirreps(); // if (nirreps != 1) // done("DBOC computations currently possible only in C1 symmetry"); MOInfo.num_so = chkpt_rd_nso(); MOInfo.num_mo = chkpt_rd_nmo(); int* orbspi = chkpt_rd_orbspi(); int* clsdpi = chkpt_rd_clsdpi(); MOInfo.ndocc = 0; for(int irrep=0; irrep= MOInfo.num_mo) throw std::runtime_error("ERROR: mo_maps -- nfzc > nmo"); if (MOInfo.nfzv >= MOInfo.num_mo) throw std::runtime_error("ERROR: mo_maps -- nfzv > nmo"); if ( (MOInfo.nfzc + MOInfo.nfzv) >= MOInfo.num_mo) throw std::runtime_error("ERROR: mo_maps -- nfzv + nfzc > nmo"); MOInfo.nact = MOInfo.num_mo - MOInfo.nfzc - MOInfo.nfzv; short int* aq2pmap = new short int[MOInfo.nact]; short int* q2pmap = new short int[MOInfo.num_mo]; // // Compute the map // int QTS_count = 0; int act_QTS_count = 0; // Add frozen doccs only to QTS_count int pitzer_offset = 0; for(int irr=0; irr atom index int *ua_degen; // Degeneracy (length of the orbit) of unique atom double **cartrep; // Group representation in cartesian basis } Molecule_t; }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/overlap.cc0000644000101500007650000000675510757640026014452 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include "defines.h" #include "params.h" #include "mo_overlap.h" namespace psi { namespace dboc { extern Params_t Params; extern "C" FILE *outfile; extern void done(const char *); extern double eval_rhf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp); extern double eval_rohf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp); extern double eval_uhf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp); extern double eval_rci_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp); extern double eval_roci_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp); double eval_derwfn_overlap(bool symm) { // Pointer to the function that we need to use double (*eval_overlap)(DisplacementIndex, DisplacementIndex); double S; if (!strcmp(Params.wfn,"SCF")) { if (Params.reftype == Params_t::rhf) { eval_overlap = eval_rhf_derwfn_overlap; } else if (Params.reftype == Params_t::rohf) { eval_overlap = eval_rohf_derwfn_overlap; } else if (Params.reftype == Params_t::uhf) { eval_overlap = eval_uhf_derwfn_overlap; } else done("This HF SCF method is not supported at the moment"); } else if (!strcmp(Params.wfn,"CCSD")) { done("CCSD method with this reference is not supported at the moment"); } else if (!strcmp(Params.wfn,"DETCI") || !strcmp(Params.wfn,"DETCAS")) { if (Params.reftype == Params_t::rhf) { eval_overlap = eval_rci_derwfn_overlap; } else if (Params.reftype == Params_t::rohf) { eval_overlap = eval_roci_derwfn_overlap; } else done("CI method with this reference is not supported at the moment"); } // // Only need (+Delta|-Delta) overlap if using a 2-point formula // if (Params.disp_per_coord == 2) { double S_P1_M1 = eval_overlap(PlusDelta,MinusDelta); if (Params.print_lvl >= PrintLevels::print_contrib) { fprintf(outfile," +1 -1 wave function overlap = %25.15lf\n",S_P1_M1); } S = (1.0-S_P1_M1)/(2.0*Params.delta*Params.delta); } // // Need up to 6 different overlaps if using a 4-point formula // else if (Params.disp_per_coord == 4) { double S_P1_M1 = eval_overlap(PlusDelta,MinusDelta); double S_P2_M2 = eval_overlap(Plus2Delta,Minus2Delta); double S_P2_M1 = eval_overlap(Plus2Delta,MinusDelta); double S_P2_P1 = eval_overlap(Plus2Delta,PlusDelta); double S_M2_P1, S_M2_M1; if (!symm) { S_M2_P1 = eval_overlap(Minus2Delta,PlusDelta); S_M2_M1 = eval_overlap(Minus2Delta,MinusDelta); } else { S_M2_P1 = S_P2_M1; S_M2_M1 = S_P2_P1; } if (Params.print_lvl >= PrintLevels::print_contrib) { fprintf(outfile," +1 -1 wave function overlap = %25.15lf\n",S_P1_M1); fprintf(outfile," +2 -2 wave function overlap = %25.15lf\n",S_P2_M2); fprintf(outfile," +2 -1 wave function overlap = %25.15lf\n",S_P2_M1); fprintf(outfile," -2 +1 wave function overlap = %25.15lf\n",S_M2_P1); fprintf(outfile," +2 +1 wave function overlap = %25.15lf\n",S_P2_P1); fprintf(outfile," -2 -1 wave function overlap = %25.15lf\n",S_M2_M1); } S = (128.0*(1.0-S_P1_M1) + 2.0*(1.0-S_P2_M2) + 16.0*((S_P2_M1 - S_P2_P1) + (S_M2_P1 - S_M2_M1)))/ (144.0 * Params.delta*Params.delta); } return S; } }} // namespace psi::dboc psi3/src/bin/dboc/params.h0000644000101500007650000000221710754663017014116 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_bin_dboc_params_h_ #define _psi3_bin_dboc_params_h_ namespace psi { namespace dboc { namespace PrintLevels { static const int print_intro = 1; static const int print_params = 1; static const int print_contrib = 2; static const int print_everything = 5; }; typedef struct { enum RefType { rhf=1, rohf=2, uhf=3}; // Cartesian coordinate structure typedef struct { int index; // index of the coordinate int atom; // which atom int xyz; // x (=0), y (=1), or z (=2) double coeff; // Degeneracy (number of equivalent coords) bool symm; // Whether plus displacement is equivalent to minus displacement } Coord_t; char *label; char *wfn; RefType reftype; double delta; int disp_per_coord; int ncoord; Coord_t* coords; int nisotope; char** isotopes; unsigned int num_threads; // number of threads size_t max_memory; // maximum available memory, in bytes size_t memory; // currently available memory, in bytes int print_lvl; } Params_t; }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/print.cc0000644000101500007650000000661010757640026014124 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include "params.h" #include "molecule.h" #include "float.h" #define PRINT_INTRO 1 #define PRINT_PARAMS 1 #define PRINT_DISP 2 namespace psi { namespace dboc { extern Params_t Params; extern Molecule_t Molecule; extern "C" FILE *outfile; void print_intro() { if (Params.print_lvl >= PrintLevels::print_intro) { fprintf(outfile," ----------------------------------------------\n"); fprintf(outfile," DBOC: diagonal Born-Oppenheimer correction\n"); fprintf(outfile," evaluation by numerical differentiation\n"); fprintf(outfile," ----------------------------------------------\n\n"); } fflush(outfile); } void print_params() { if (Params.print_lvl >= PrintLevels::print_params) { fprintf(outfile,"\n -OPTIONS:\n"); fprintf(outfile," Label = %s\n",Params.label); fprintf(outfile," # of disp. per coord = %d\n",Params.disp_per_coord); fprintf(outfile," Displacement size = %lf a.u.\n",Params.delta); if (strcmp(Params.wfn,"SCF")) fprintf(outfile," Wave function = %s\n",Params.wfn); else if (Params.reftype == Params_t::rhf) fprintf(outfile," Wave function = RHF SCF\n"); else if (Params.reftype == Params_t::rohf) fprintf(outfile," Wave function = ROHF SCF\n"); else if (Params.reftype == Params_t::uhf) fprintf(outfile," Wave function = UHF SCF\n"); fprintf(outfile," Print level = %d\n",Params.print_lvl); fprintf(outfile," Memory = %ld MB\n",Params.max_memory/(1L << 20)); fprintf(outfile," Number of threads = %d\n",Params.num_threads); fprintf(outfile," sizeof(double) = %d\n",sizeof(double)); fprintf(outfile," sizeof(long double) = %d\n",sizeof(long double)); fprintf(outfile," sizeof(FLOAT) = %d\n",sizeof(FLOAT)); fprintf(outfile,"\n"); fprintf(outfile," Cartesian displacements:\n"); for(int coord=0; coord= PrintLevels::print_intro) { fprintf(outfile, " -Reference Geometry:\n"); for(int i=0; i < Molecule.natom; i++) { fprintf(outfile, "\n %1.0f ", Molecule.zvals[i]); for(int j=0; j < 3; j++) fprintf(outfile, "%20.10f ", Molecule.geom[i][j]); } fprintf(outfile, "\n\n"); } } }} // namespace psi::dboc psi3/src/bin/dboc/rccsd.cc0000644000101500007650000001246310757640026014071 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "moinfo.h" #include "mo_overlap.h" #include "float.h" #include "linalg.h" using namespace std; // Wrap a,b indices into one composite index assuming S2 symmetry #define INDEX2(a,b) ((a) > (b)) ? ( (((a)*(a+1)) >> 1) + (b) ) : ( (((b)*(b+1)) >> 1) + (a) ) // Wrap a>=b indices into one composite index assuming S2 symmetry #define INDEX2_ORD(a,b) ( (((a)*(a+1))/2) + (b) ) // Wrap a>=b>=c indices into one composite index assuming S3 symmetry #define INDEX3_ORD(a,b,c) ( ((a)*(((a)+4)*((a)-1)+6)/6) + (((b)*(b+1))/2) + (c) ) namespace psi { namespace dboc { extern MOInfo_t MOInfo; extern void done(const char *); extern "C" FILE *outfile; double eval_rccsd_derwfn_overlap() { #if USE_MOINFO int ndocc = MOInfo.ndocc; int num_mo = MOInfo.num_mo; #else abort(); #endif int nvirt = num_mo - ndocc; FLOAT **CSC_full = eval_S_alpha(); FLOAT **CSC = create_matrix(ndocc,ndocc); int *tmpintvec = new int[ndocc]; FLOAT **RmSp = create_matrix(ndocc,nvirt); FLOAT **RmDp = create_matrix(INDEX2_ORD(ndocc,0),INDEX2_ORD(nvirt,0)); FLOAT **RmTp = create_matrix(INDEX3_ORD(ndocc,0,0),INDEX3_ORD(nvirt,0,0)); // // Evaluate reference-reference overlap // for(int i=0;i // fprintf(outfile,"\n -Overlap of Ref(-) with Singles(-):\n"); for(int mo_i=0; mo_i) overlap matrix for(int i=0;i // fprintf(outfile,"\n -Overlap of Ref(-) with IJABDoubles(-):\n"); for(int mo_i=0; mo_i) overlap matrix for(int i=0;i // fprintf(outfile,"\n -Overlap of Ref(-) with IJKABCTriples(-):\n"); for(int mo_i=0; mo_i) overlap matrix for(int i=0;i #include #include #include #include #include #include #include #include #include #include #include "moinfo.h" #include "params.h" #include "float.h" #include "linalg.h" #include "mo_overlap.h" #include "hfwfn.h" #include "stringblocks.h" #include "dets.h" #include "ci_overlap.h" using namespace std; using namespace psi::dboc; // Wrap a,b indices into one composite index assuming S2 symmetry #define INDEX2(a,b) ((a) > (b)) ? ( (((a)*(a+1)) >> 1) + (b) ) : ( (((b)*(b+1)) >> 1) + (a) ) // Wrap a>=b indices into one composite index assuming S2 symmetry #define INDEX2_ORD(a,b) ( (((a)*(a+1))/2) + (b) ) // Wrap a>=b>=c indices into one composite index assuming S3 symmetry #define INDEX3_ORD(a,b,c) ( ((a)*(((a)+4)*((a)-1)+6)/6) + (((b)*(b+1))/2) + (c) ) // Set to 1 to use the new threaded code #define USE_CI_OVERLAP 1 // Set to 1 to reduce I/O at the expense of more computation #define LOOP_OVER_BLOCKS 1 namespace psi { namespace dboc { extern MOInfo_t MOInfo; extern Params_t Params; extern char *CI_Vector_Labels[MAX_NUM_DISP]; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern void done(const char *); extern void mo_maps(short int**, short int**); extern "C" FILE *outfile; double eval_rci_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp) { #if USE_MOINFO int ndocc = MOInfo.ndocc; #else int ndocc = HFVectors[LDisp]->ndocc(); #endif FLOAT **CSC_full = eval_S_alpha(LDisp,RDisp); FLOAT **CSC = create_matrix(ndocc,ndocc); int *tmpintvec = new int[ndocc]; // Read in CI vectors SlaterDetVector *vecm, *vecp; slaterdetvector_read(PSIF_CIVECT,CI_Vector_Labels[RDisp],&vecm); slaterdetvector_read(PSIF_CIVECT,CI_Vector_Labels[LDisp],&vecp); // Compute overlap between strings for alpha spin case (beta is the same) StringSet *ssetm; ssetm = vecm->sdset->alphastrings; short int* fzc_occ = ssetm->fzc_occ; int nstr_a = ssetm->size; int nfzc = ssetm->nfzc; int nact = ndocc - nfzc; // Overlap matrix can be very large, especially for low excitation levels. // Must handle a block of strings at a time. // How many strings can handle at once? Need to hold 2 blocks of overlap // at the same time. const double nstr_per_block_float = std::sqrt((double)Params.memory/(2*sizeof(FLOAT))); int nstr_per_block = (int)std::floor(nstr_per_block_float); { if (nstr_per_block > nstr_a) nstr_per_block = nstr_a; else { const int nblks = (nstr_a + nstr_per_block - 1)/ nstr_per_block; nstr_per_block = (nstr_a + nblks - 1) / nblks; } } StringBlocks strblks_a(nstr_a,nstr_per_block); const int nblks_a = strblks_a.nblocks(); StringBlockedMatrix ovlp_a(&strblks_a,&strblks_a,"S_a"); double** S_a = ovlp_a.buffer(); // WARNING: Assume the order of strings is the same for - and + displacements!!! // Loop over blocks of + and - displacement strings for(int bp=0; bpstrings[jp]; for(int im=im_begin; im<=im_end; im++) { String *str_i = &ssetm->strings[im]; for(int j=0;jocc[j]][str_i->occ[i]]; // frozen orbitals need to be mapped to pitzer order manually for(int i=0; iocc[j]][ii]; } for(int j=0; jocc[i]]; } for(int i=0;isize; // // Sort list of determinants to increasing (Ia,Ib) order // // create vector of determinants to sort std::vector dets(ndets); for(int I=0; Isdset->dets + I; int Istra = detI->alphastring; int Istrb = detI->betastring; dets[I].second.Ia = strblks_a.block(Istra); dets[I].second.Ib = strblks_a.block(Istrb); } // sort std::sort(dets.begin(),dets.end(),detcomp); // print if (Params.print_lvl >= PrintLevels::print_everything) for(int I=0; Isdset->dets + II; int Istra = detI->alphastring; int Istrb = detI->betastring; // skip this determinant if these string overlap blocks don't contribute if (blk_ma != strblks_a.block(Istra) || blk_mb != strblks_a.block(Istrb)) continue; FLOAT cI = vecm->coeffs[II]; const int istra = strblks_a.rel_to_block_begin(Istra); const int istrb = strblks_a.rel_to_block_begin(Istrb); for(int J=0; Jsdset->dets + JJ; int Jstra = detJ->alphastring; int Jstrb = detJ->betastring; // skip this determinant if these string overlap blocks don't contribute if (blk_pa != strblks_b.block(Jstra) || blk_pb != strblks_b.block(Jstrb)) continue; FLOAT cJ = vecp->coeffs[JJ]; const int jstra = strblks_a.rel_to_block_begin(Jstra); const int jstrb = strblks_a.rel_to_block_begin(Jstrb); FLOAT S = S_a[jstra][istra] * S_b[jstrb][istrb]; FLOAT contrib = cJ * S * cI; S_tot += contrib; } } } } } } #else int blk_ma = 0, blk_mb = 0; // overlap between these string blocks is held in memory for(int I=0; Isdset->dets + II; int Istra = detI->alphastring; int Istrb = detI->betastring; FLOAT cI = vecm->coeffs[II]; const int istra = strblks_a.rel_to_block_begin(Istra); const int istrb = strblks_a.rel_to_block_begin(Istrb); blk_ma = strblks_a.block(Istra); blk_mb = strblks_a.block(Istrb); int blk_pa = 0, blk_pb = 0; // overlap between these string blocks is held in memory for(int J=0; Jsdset->dets + JJ; int Jstra = detJ->alphastring; int Jstrb = detJ->betastring; FLOAT cJ = vecp->coeffs[JJ]; const int jstra = strblks_a.rel_to_block_begin(Jstra); const int jstrb = strblks_a.rel_to_block_begin(Jstrb); blk_pa = strblks_a.block(Jstra); blk_pb = strblks_a.block(Jstrb); std::cout << "dets = (" << I << "," << J << ") : (" << blk_pa << "," << blk_ma << ") (" << blk_pb << "," << blk_mb << ")" << std::endl; ovlp_a.read(blk_pa, blk_ma); ovlp_b.read(blk_pb, blk_mb); FLOAT S = S_a[jstra][istra] * S_b[jstrb][istrb]; FLOAT contrib = cJ * S * cI; S_tot += contrib; /* fprintf(outfile," %3d %3d %+15.10Le", I, J, cI); fprintf(outfile," %+15.10Le", cJ); fprintf(outfile," %+25.15Le", S); fprintf(outfile," %+25.15Le", contrib); fprintf(outfile," %+25.15Le\n", S_tot); */ } } #endif // if LOOP_OVER_BLOCKS #endif // if USE_CI_OVERLAP // Cleanup slaterdetvector_delete_full(vecm); slaterdetvector_delete_full(vecp); delete[] tmpintvec; delete_matrix(CSC); delete_matrix(CSC_full); double S_tot_double = (double) S_tot; return fabs(S_tot_double); } }} // namespace psi::dbocpsi3/src/bin/dboc/rhf.cc0000644000101500007650000000405710757640026013552 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "defines.h" #include "params.h" #include "moinfo.h" #include "mo_overlap.h" #include "float.h" #include "linalg.h" #include "hfwfn.h" namespace psi { namespace dboc { extern MOInfo_t MOInfo; extern "C" FILE *outfile; extern Params_t Params; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern void done(const char *); double eval_rhf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp) { FLOAT **CSC = eval_S_alpha(LDisp,RDisp); int* clsdpi = HFVectors[LDisp]->clsdpi(); int* orbspi = HFVectors[LDisp]->orbspi(); int nirreps = HFVectors[LDisp]->nirreps(); #if USE_MOINFO int ndocc = MOInfo.ndocc; #else int ndocc = HFVectors[LDisp]->ndocc(); #endif // Extract the occupied block FLOAT **CSC_occ = create_matrix(ndocc,ndocc); int mo_offset1 = 0; int occ_offset1 = 0; for(int irrep1=0; irrep1 PrintLevels::print_contrib) { fprintf(outfile," +/- overlap in the basis of doubly-occupied MOs:\n"); psi::dboc::print_mat(CSC_occ, ndocc, ndocc, outfile); } // Compute the determinant int *tmpintvec = new int[ndocc]; FLOAT sign; lu_decom(CSC_occ, ndocc, tmpintvec, &sign); delete[] tmpintvec; FLOAT deter1 = 1.0; for(int i=0;i #include #include #include #include #include #include #include #include "moinfo.h" #include "float.h" #include "linalg.h" #include "mo_overlap.h" #include "hfwfn.h" // Set to 1 to try using unit MO overlap between + and - displacements #define TRY_UNIT_OVERLAP 0 using namespace std; namespace psi { namespace dboc { // Wrap a,b indices into one composite index assuming S2 symmetry #define INDEX2(a,b) ((a) > (b)) ? ( (((a)*(a+1)) >> 1) + (b) ) : ( (((b)*(b+1)) >> 1) + (a) ) // Wrap a>=b indices into one composite index assuming S2 symmetry #define INDEX2_ORD(a,b) ( (((a)*(a+1))/2) + (b) ) // Wrap a>=b>=c indices into one composite index assuming S3 symmetry #define INDEX3_ORD(a,b,c) ( ((a)*(((a)+4)*((a)-1)+6)/6) + (((b)*(b+1))/2) + (c) ) extern "C" FILE *outfile; extern char *CI_Vector_Labels[MAX_NUM_DISP]; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern void done(const char *); extern void mo_maps(short int**, short int**); double eval_roci_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp) { // Read in CI vectors SlaterDetVector *vecm, *vecp; slaterdetvector_read(PSIF_CIVECT,CI_Vector_Labels[RDisp],&vecm); slaterdetvector_read(PSIF_CIVECT,CI_Vector_Labels[LDisp],&vecp); int nfzc = vecm->sdset->alphastrings->nfzc; #if USE_MOINFO extern MOInfo_t MOInfo; int nalpha = MOInfo.nalpha; int nbeta = MOInfo.nbeta; #else int nalpha = HFVectors[LDisp]->nalpha(); int nbeta = HFVectors[LDisp]->nbeta(); #endif int nact_a = nalpha - nfzc; int nact_b = nbeta - nfzc; #if !TRY_UNIT_OVERLAP FLOAT **CSC_full = eval_S_alpha(LDisp,RDisp); #else const int num_mo = HFVectors[LDisp]->num_mo(); FLOAT **CSC_full = create_matrix(num_mo, num_mo); for(int i=0; isdset->alphastrings; short int* fzc_occ = ssetm->fzc_occ; int nstr_a = ssetm->size; FLOAT **S_a = create_matrix(nstr_a,nstr_a); // Assume the order of strings is the same for - and + displacements for(int jp=0; jpstrings[jp]; for(int im=0; imstrings[im]; for(int j=0;jocc[j]][str_i->occ[i]]; // frozen orbitals need to be mapped to pitzer order manually for(int i=0; iocc[j]][ii]; } for(int j=0; jocc[i]]; } for(int i=0;isdset->betastrings; int nstr_b = ssetm->size; FLOAT **S_b = create_matrix(nstr_b,nstr_b); // Assume the order of strings is the same for - and + displacements for(int jp=0; jpstrings[jp]; for(int im=0; imstrings[im]; for(int j=0;jocc[j]][str_i->occ[i]]; // frozen orbitals need to be mapped to pitzer order manually for(int i=0; iocc[j]][ii]; } for(int j=0; jocc[i]]; } for(int i=0;isize; FLOAT S_tot = 0.0; for(int I=0; Isdset->dets + I; int Istra = detI->alphastring; int Istrb = detI->betastring; FLOAT cI = vecm->coeffs[I]; for(int J=0; Jsdset->dets + J; int Jstra = detJ->alphastring; int Jstrb = detJ->betastring; FLOAT cJ = vecp->coeffs[J]; FLOAT S = S_a[Jstra][Istra] * S_b[Jstrb][Istrb]; FLOAT contrib = cI * S * cJ; S_tot += cI * S * cJ; /* fprintf(outfile," %3d %3d %+15.10Le", I, J, cI); fprintf(outfile," %+15.10Le", cJ); fprintf(outfile," %+25.15Le", S); fprintf(outfile," %+25.15Le", contrib); fprintf(outfile," %+25.15Le\n", S_tot); */ } } // Cleanup slaterdetvector_delete_full(vecm); slaterdetvector_delete_full(vecp); delete[] tmpintvec; delete_matrix(CSC_a); delete_matrix(CSC_full); delete_matrix(CSC_b); delete_matrix(S_a,nstr_a,nstr_a); delete_matrix(S_b,nstr_b,nstr_b); double S_tot_double = (double) S_tot; return fabs(S_tot_double); } }} // namespace psi::dboc psi3/src/bin/dboc/rohf.cc0000644000101500007650000000607210757640026013730 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "moinfo.h" #include "mo_overlap.h" #include "float.h" #include "linalg.h" #include "hfwfn.h" namespace psi { namespace dboc { extern MOInfo_t MOInfo; extern FILE *outfile; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern void done(const char *); // // High-spin ROHF case only // double eval_rohf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp) { FLOAT **CSC = eval_S_alpha(LDisp,RDisp); int* clsdpi = HFVectors[LDisp]->clsdpi(); int* openpi = HFVectors[LDisp]->openpi(); int* orbspi = HFVectors[LDisp]->orbspi(); int nirreps = HFVectors[LDisp]->nirreps(); #if USE_MOINFO int nalpha = MOInfo.nalpha; int nbeta = MOInfo.nbeta; int ndocc = nbeta; #else int nalpha = HFVectors[LDisp]->nalpha(); int nbeta = HFVectors[LDisp]->nbeta(); int ndocc = nbeta; #endif // Extract the alpha and beta blocks FLOAT **CSC_alpha = create_matrix(nalpha,nalpha); FLOAT **CSC_beta = create_matrix(nbeta,nbeta); int mo_offset1 = 0; int docc_offset1 = 0; int socc_offset1 = ndocc; for(int irrep1=0; irrep1 #include #include #include #include #include #include "stringblocks.h" #include "linalg.h" using namespace psi::dboc; StringBlocks::StringBlocks(int nstr, int nstr_per_block) : nstr_(nstr), nstr_per_block_(nstr_per_block) { nblocks_ = (nstr_ % nstr_per_block_) ? nstr_ / nstr_per_block_ + 1 : nstr_ / nstr_per_block_; if (nstr_per_block_ > nstr_) throw std::runtime_error("StringBlocks::StringBlocks -- nstr less than nstr_per_block"); } StringBlocks::~StringBlocks() { } int StringBlocks::nstr_per_block() const { return nstr_per_block_; } int StringBlocks::nblocks() const { return nblocks_; } int StringBlocks::block(int str) const { return str / nstr_per_block_; } int StringBlocks::rel_to_block_begin(int str) const { return str % nstr_per_block_; } int StringBlocks::begin(int block) const { return block*nstr_per_block_; } int StringBlocks::end(int block) const { return block == nblocks_-1 ? nstr_-1 : (block+1)*nstr_per_block_-1; } /////////// #define PSIO_INIT if (!psio_state()) { \ psio_init(); psio_ipv1_config(); \ need_to_init_psio_ = 1; \ } #define PSIO_OPEN(u,n) if (!psio_open_check(u)) { \ psio_open((u),n); \ unit_opened_ = 0; \ } #define PSIO_CLOSE(u) if (!unit_opened_) \ psio_close((u),1); #define PSIO_DONE if (need_to_init_psio_) \ psio_done(); StringBlockedMatrix::StringBlockedMatrix(const StringBlocks* strblk_bra, const StringBlocks* strblk_ket, const std::string& prefix) : prefix_(prefix), strblk_bra_(const_cast(strblk_bra)), strblk_ket_(const_cast(strblk_ket)), buffer_(0), current_brablk_(-1), current_ketblk_(-1), need_to_init_psio_(0), unit_opened_(1) { buffer_ = create_matrix(strblk_bra->nstr_per_block(), strblk_ket->nstr_per_block()); blksize_ = (size_t)strblk_bra->nstr_per_block() * strblk_ket->nstr_per_block() * sizeof(FLOAT); PSIO_INIT PSIO_OPEN(psio_unit_,PSIO_OPEN_NEW) } StringBlockedMatrix::StringBlockedMatrix(const StringBlockedMatrix& A) : prefix_(A.prefix_), strblk_bra_(A.strblk_bra_), strblk_ket_(A.strblk_ket_), buffer_(0), current_brablk_(-1), current_ketblk_(-1), need_to_init_psio_(0), unit_opened_(1) { buffer_ = create_matrix(strblk_bra_->nstr_per_block(), strblk_ket_->nstr_per_block()); blksize_ = (size_t)strblk_bra_->nstr_per_block() * strblk_ket_->nstr_per_block() * sizeof(FLOAT); void* tmp = memcpy(static_cast(buffer_[0]),static_cast(A.buffer_[0]),blksize_); PSIO_INIT PSIO_OPEN(psio_unit_,PSIO_OPEN_NEW) } StringBlockedMatrix::~StringBlockedMatrix() { PSIO_CLOSE(psio_unit_) PSIO_DONE delete_matrix(buffer_,strblk_bra_->nstr_per_block(), strblk_ket_->nstr_per_block()); } FLOAT** StringBlockedMatrix::buffer() { return buffer_; } std::string StringBlockedMatrix::key(int brablk, int ketblk) { #if 0 std::ostringstream oss; oss << prefix_ << "_blk_" << brablk << "_" << ketblk; return oss.str(); #endif char result[128]; sprintf(result,"%s_blk_%d_%d",prefix_.c_str(),brablk,ketblk); return std::string(result); } void StringBlockedMatrix::write(int brablk, int ketblk) { if (strblk_bra_->nblocks() == 1 && strblk_ket_->nblocks() == 1) return; psio_address junk; const std::string bkey = key(brablk,ketblk); const char* bkey_cstr = bkey.c_str(); int errcod = psio_write(psio_unit_, bkey_cstr, reinterpret_cast(buffer_[0]), blksize_, PSIO_ZERO, &junk); } void StringBlockedMatrix::read(int brablk, int ketblk) { if (strblk_bra_->nblocks() == 1 && strblk_ket_->nblocks() == 1) return; if (current_brablk_ != brablk || current_ketblk_ != ketblk) { #if 0 std::cout << "StringBlockedMatrix::read -- (" << brablk << "," << ketblk << ") (" << current_brablk_ << "," << current_ketblk_ << ")" << std::endl; #endif current_brablk_ = brablk; current_ketblk_ = ketblk; psio_address junk; const std::string bkey = key(brablk,ketblk); const char* bkey_cstr = bkey.c_str(); int errcod = psio_read(psio_unit_, bkey_cstr, reinterpret_cast(buffer_[0]), blksize_, PSIO_ZERO, &junk); } } psi3/src/bin/dboc/stringblocks.h0000644000101500007650000000350610754663017015341 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #ifndef _psi3_dboc_stringblocks_h_ #define _psi3_dboc_stringblocks_h_ #include #include #include "float.h" namespace psi { namespace dboc { /// Manages logic of arranging strings into blocks of manageble size class StringBlocks { public: StringBlocks(int nstr, int nstr_per_block); ~StringBlocks(); /// How many strings per block? int nstr_per_block() const; /// How many blocks? int nblocks() const; /// Size of the block int size(int block) const; /// To which block does this string belong? int block(int str) const; /// Index within the block int rel_to_block_begin(int str) const; /// First string in this block int begin(int block) const; /// Last string in this block int end(int block) const; private: int nstr_; int nblocks_; int nstr_per_block_; }; /// Manages matrices in the basis of blocked strings class StringBlockedMatrix { public: StringBlockedMatrix(const StringBlocks* strblk_bra, const StringBlocks* strblk_ket, const std::string& prefix); /// Makes a copy of A, including deep copy of the buffer StringBlockedMatrix(const StringBlockedMatrix& A); ~StringBlockedMatrix(); StringBlocks* strblk_bra() const { return strblk_bra_; } StringBlocks* strblk_ket() const { return strblk_ket_; } FLOAT** buffer(); void read(int brablk, int ketblk); void write(int brablk, int ketblk); private: std::string prefix_; FLOAT** buffer_; StringBlocks* strblk_bra_; StringBlocks* strblk_ket_; /// block size in bytes size_t blksize_; int current_brablk_, current_ketblk_; // PSIO status static const unsigned int psio_unit_ = PSIF_DBOC; int need_to_init_psio_; int unit_opened_; std::string key(int brablk, int ketblk); }; }} /* namespace psi::dboc */ #endif psi3/src/bin/dboc/uhf.cc0000644000101500007650000000615410757640026013555 0ustar crawdad/*! \file \ingroup DBOC \brief Enter brief description of file here */ #include #include #include #include #include #include #include #include "moinfo.h" #include "mo_overlap.h" #include "float.h" #include "linalg.h" #include "hfwfn.h" namespace psi { namespace dboc { extern MOInfo_t MOInfo; extern "C" FILE *outfile; extern HFWavefunction* HFVectors[MAX_NUM_DISP]; extern void done(const char *); double eval_uhf_derwfn_overlap(DisplacementIndex LDisp, DisplacementIndex RDisp) { FLOAT **CSC_a = eval_S_alpha(LDisp,RDisp); FLOAT **CSC_b = eval_S_beta(LDisp,RDisp); int* clsdpi = HFVectors[LDisp]->clsdpi(); int* openpi = HFVectors[LDisp]->openpi(); int* orbspi = HFVectors[LDisp]->orbspi(); int nirreps = HFVectors[LDisp]->nirreps(); #if USE_MOINFO int nalpha = MOInfo.nalpha; int nbeta = MOInfo.nbeta; int ndocc = nbeta; #else int nalpha = HFVectors[LDisp]->nalpha(); int nbeta = HFVectors[LDisp]->nbeta(); int ndocc = nbeta; #endif // Extract the alpha and beta blocks FLOAT **CSC_alpha = create_matrix(nalpha,nalpha); FLOAT **CSC_beta = create_matrix(nbeta,nbeta); int mo_offset1 = 0; int docc_offset1 = 0; int socc_offset1 = ndocc; for(int irrep1=0; irrep1 #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { /* ** cleanup() ** ** This function frees any allocated global variables ** */ void cleanup(void) { int i; free(CalcInfo.docc); free(CalcInfo.socc); free(CalcInfo.frozen_docc); free(CalcInfo.frozen_uocc); free(CalcInfo.rstr_docc); free(CalcInfo.rstr_uocc); free(CalcInfo.orbsym); free(CalcInfo.pitz2ci); free(CalcInfo.ci2pitz); free(CalcInfo.ci2relpitz); free(CalcInfo.first); free(CalcInfo.last); free(CalcInfo.fstact); free(CalcInfo.lstact); free(CalcInfo.active); free_int_matrix(CalcInfo.ras_opi); free_int_matrix(CalcInfo.fzc_orbs); free_int_matrix(CalcInfo.fzv_orbs); for (i=0; i #include #include #include #include #include #include #include #include #include #include "globals.h" #include "setup_io.h" #include "indpairs.h" namespace psi { namespace detcas { extern void get_mo_info(void); extern void get_parameters(void); extern void print_parameters(void); extern void read_integrals(void); extern void read_density_matrices(void); extern void read_lagrangian(void); extern void form_independent_pairs(void); extern void read_thetas(int npairs); extern void write_thetas(int npairs); extern int read_ref_orbs(void); extern int write_ref_orbs(void); extern void read_cur_orbs(void); extern void form_F_act(void); extern int diis(int veclen, double *vec, double *errvec); extern void get_mat_block(double **src, double **dst, int dst_dim, int dst_offset, int *dst2src); extern void calc_dE_dT(int n, double **dEU, int npairs, int *ppair, int *qpair, double *theta, double *dET); extern void form_appx_diag_mo_hess(int npairs, int *ppair, int *qpair, double *F_core, double *tei, double **opdm, double *tpdm, double *F_act, int firstact, int lastact, double *hess); extern void form_diag_mo_hess(int npairs, int *ppair, int *qpair, double *F_core, double *tei, double **opdm, double *tpdm, double *F_act, int firstact, int lastact, double *hess); extern void form_full_mo_hess(int npairs, int *ppair, int *qpair, double *oei, double *tei, double **opdm, double *tpdm, double **lag, double **hess); extern void form_diag_mo_hess_yy(int npairs, int *ppair, int *qpair, double *oei, double *tei, double **opdm, double *tpdm, double **lag, double *hess); extern void calc_orb_step(int npairs, double *grad, double *hess_diag, double *theta); extern void calc_orb_step_full(int npairs, double *grad, double **hess, double *theta); extern void calc_orb_step_bfgs(int npairs, double *grad, double **hess, double *theta); extern void print_step(int npairs, int steptype); extern void postmult_by_U(int irrep, int dim, double **mo_coeffs, int npairs, int *p_arr, int *q_arr, double *theta_arr); extern void premult_by_U(int irrep, int dim, double **mo_coeffs, int npairs, int *p_arr, int *q_arr, double *theta_arr); extern void postmult_by_exp_R(int irrep, int dim, double **mat, int npairs, int *p_arr, int *q_arr, double *theta_arr); extern void cleanup(void); void title(void); void quote(void); void init_ioff(void); void calc_gradient(void); void bfgs_hessian(void); void ds_hessian(void); void calc_hessian(void); void scale_gradient(void); int check_conv(void); int take_step(void); void rotate_orbs(void); struct calcinfo CalcInfo; struct params Params; int *ioff; IndepPairs IndPairs; #define MO_HESS_MIN 1.0E-1 }} // end namespace psi::detcas /* GLOBAL VARIABLES (other modules load these via globals.h) */ extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } using namespace psi::detcas; int main(int argc, char *argv[]) { int converged = 0; int num_pairs = 0; int steptype = 0; Params.print_lvl = 1; CalcInfo.mo_hess = NULL; CalcInfo.mo_hess_diag = NULL; init_io(argc,argv); /* open input and output files */ get_parameters(); /* get running params (convergence, etc) */ init_ioff(); /* set up the ioff array */ title(); /* print program identification */ if (Params.print_lvl) print_parameters(); get_mo_info(); /* read DOCC, SOCC, frozen, nbfso, etc */ read_integrals(); /* get the 1 and 2 elec MO integrals */ read_density_matrices(); read_lagrangian(); form_independent_pairs(); num_pairs = IndPairs.get_num_pairs(); read_thetas(num_pairs); if (Params.print_lvl > 2) IndPairs.print_vec(CalcInfo.theta_cur, "\n\tRotation Angles:", outfile); if (!read_ref_orbs()) { read_cur_orbs(); write_ref_orbs(); zero_arr(CalcInfo.theta_cur, num_pairs); write_thetas(num_pairs); } form_F_act(); calc_gradient(); converged = check_conv(); if (Params.bfgs) bfgs_hessian(); else if (Params.ds_hessian) ds_hessian(); else calc_hessian(); scale_gradient(); if (!converged) { steptype = take_step(); rotate_orbs(); write_thetas(num_pairs); } else steptype = 0; print_step(num_pairs, steptype); if (Params.print_lvl) quote(); cleanup(); close_io(); return(converged); } namespace psi { namespace detcas { /* ** init_ioff(): Set up the ioff array for quick indexing */ void init_ioff(void) { int i; /* set offsets for ij-type canonical ordering */ ioff = (int *) malloc (IOFF_MAX * sizeof(int)) ; ioff[0] = 0; for (i = 1; i < IOFF_MAX ; i++) ioff[i] = ioff[i-1] + i; } /* ** title(): Function prints a program identification */ void title(void) { if (Params.print_lvl) { fprintf(outfile,"\n"); fprintf(outfile,"*******************************************************\n"); fprintf(outfile," D E T C A S \n"); fprintf(outfile,"\n"); fprintf(outfile," C. David Sherrill\n") ; fprintf(outfile," April 27 1998\n") ; fprintf(outfile,"*******************************************************\n"); fprintf(outfile,"\n\n\n"); } else { fprintf(outfile, "\nD E T C A S: C. David Sherrill, April 27 1998\n"); } fflush(outfile); } void quote(void) { fprintf(outfile,"\n\t\t \"Good bug ... dead bug\" \n\n"); fprintf(outfile,"\t\t\t - Ed Valeev\n\n"); fflush(outfile); } void form_independent_pairs(void) { IndPairs.set(CalcInfo.nirreps, MAX_RAS_SPACES, CalcInfo.ras_opi, CalcInfo.ras_orbs, CalcInfo.frozen_docc, CalcInfo.fzc_orbs, CalcInfo.rstr_docc, CalcInfo.cor_orbs, CalcInfo.rstr_uocc, CalcInfo.vir_orbs, CalcInfo.frozen_uocc, CalcInfo.fzv_orbs, CalcInfo.ci2relpitz, Params.ignore_ras_ras, Params.ignore_fz); if (Params.print_lvl > 3) IndPairs.print(outfile); } /*! ** calc_gradient() ** ** This function calculates the MO gradient from the MO Lagrangian ** ** \ingroup DETCAS */ void calc_gradient(void) { int pair, npair, h, ir_npairs, ir_norbs, offset; double *ir_mo_grad, **ir_lag, *ir_theta_cur, value, rms; int *parr, *qarr, *ir_ppair, *ir_qpair; int p, q; npair = IndPairs.get_num_pairs(); parr = IndPairs.get_p_ptr(); qarr = IndPairs.get_q_ptr(); CalcInfo.mo_grad = init_array(npair); /* calc_grad_1(npair, parr, qarr, CalcInfo.lag, CalcInfo.mo_grad); calc_grad_2(npair, parr, qarr, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.opdm, CalcInfo.tpdm, CalcInfo.F_act, (CalcInfo.num_cor_orbs + CalcInfo.num_fzc_orbs), CalcInfo.npop, CalcInfo.mo_grad); */ // scratch array for dEdTheta, big enough for any irrep ir_mo_grad = init_array(npair); // calculate dEdU, then dEdTheta for (h=0,offset=0; h0) offset += CalcInfo.orbs_per_irr[h-1]; if (!ir_npairs) continue; ir_ppair = IndPairs.get_ir_prel_ptr(h); ir_qpair = IndPairs.get_ir_qrel_ptr(h); ir_lag = block_matrix(ir_norbs, ir_norbs); get_mat_block(CalcInfo.lag, ir_lag, ir_norbs, offset, CalcInfo.pitz2ci); if (Params.print_lvl > 3) { fprintf(outfile, "Irrep %d of lagrangian:\n", h); print_mat(ir_lag, ir_norbs, ir_norbs, outfile); } ir_theta_cur = IndPairs.get_irrep_vec(h, CalcInfo.theta_cur); // Need to mult the Lagrangian by 2 to get dEdU C_DSCAL(ir_norbs*ir_norbs, 2.0, ir_lag[0], 1); if (Params.print_lvl > 3) { fprintf(outfile, "Irrep %d of 2 * lagrangian:\n", h); print_mat(ir_lag, ir_norbs, ir_norbs, outfile); } if (Params.use_thetas) { // Calc dEdU premult_by_U(h, CalcInfo.orbs_per_irr[h], ir_lag, ir_npairs, ir_ppair, ir_qpair, ir_theta_cur); if (Params.print_lvl > 3) { fprintf(outfile, "dE/dU:\n", h); print_mat(ir_lag, ir_norbs, ir_norbs, outfile); } // Calculate dEdTheta calc_dE_dT(CalcInfo.orbs_per_irr[h], ir_lag, ir_npairs, ir_ppair, ir_qpair, ir_theta_cur, ir_mo_grad); } /* non-theta version */ else { for (pair=0; pair 2) IndPairs.print_vec(CalcInfo.mo_grad, "\n\tOrbital Gradient:", outfile); rms = sqrt(rms); CalcInfo.mo_grad_rms = rms; if (Params.print_lvl) fprintf(outfile, "\n\tRMS Orbital Gradient: %6.4E\n", rms); } /*! ** bfgs_hessian() ** ** This function calculates a BFGS-updated MO/MO Hessian ** ** C. David Sherrill ** March 2004 ** ** \ingroup DETCAS */ void bfgs_hessian(void) { int i, j, npairs; double fac, fad, fae, tval; double *dx, *dg, *hdg, **hess_copy, **hess_copy2, hess_det; int *idx; npairs = IndPairs.get_num_pairs(); psio_open(PSIF_DETCAS, PSIO_OPEN_OLD); /* If no Hessian in the file */ if (psio_tocscan(PSIF_DETCAS, "Hessian Inverse") == NULL) { calc_hessian(); if (strcmp(Params.hessian, "FULL") != 0) { CalcInfo.mo_hess = block_matrix(npairs,npairs); for (i=0; i 3) { fprintf(outfile, "\nInitial MO Hessian Inverse:\n"); print_mat(CalcInfo.mo_hess,npairs,npairs,outfile); fprintf(outfile, "\n"); } free(idx); free_block(hess_copy); } /* write Hessian */ psio_write_entry(PSIF_DETCAS, "Hessian Inverse", (char *) CalcInfo.mo_hess[0], npairs*npairs*sizeof(double)); /* write thetas */ psio_write_entry(PSIF_DETCAS, "Thetas", (char *) CalcInfo.theta_cur, npairs*sizeof(double)); /* write gradient */ psio_write_entry(PSIF_DETCAS, "MO Gradient", (char *) CalcInfo.mo_grad, npairs*sizeof(double)); psio_close(PSIF_DETCAS, 1); return; } /* end initialization of BFGS data */ dx = init_array(npairs); dg = init_array(npairs); hdg = init_array(npairs); /* read previous Hessian */ CalcInfo.mo_hess = block_matrix(npairs,npairs); psio_read_entry(PSIF_DETCAS, "Hessian Inverse", (char *) CalcInfo.mo_hess[0], npairs*npairs*sizeof(double)); /* read previous thetas */ psio_read_entry(PSIF_DETCAS, "Thetas", (char *) dx, npairs*sizeof(double)); /* read previous gradient */ psio_read_entry(PSIF_DETCAS, "MO Gradient", (char *) dg, npairs*sizeof(double)); /* compute updated Hessian by BFGS procedure, see Numerical Recipies in C */ /* get difference in thetas and gradient */ for (i=0; i 3) { fprintf(outfile, "Delta Theta and Delta Grad arrays:\n"); for (i=0; i 3) { fprintf(outfile, "\nBFGS MO Hessian Inverse:\n"); print_mat(CalcInfo.mo_hess,npairs,npairs,outfile); fprintf(outfile, "\n"); } /* this doesn't work unless you fix that dg is not overwritten above when that's ensured, it seems to match */ /* if (Params.print_lvl > 3) { fprintf(outfile, "Check of dx = H dg\n"); for (i=0; i 3) { fprintf(outfile, "\nMO Hessian:\n"); print_mat(hess_copy2,npairs,npairs,outfile); fprintf(outfile, "\n"); } ludcmp(hess_copy2,npairs,idx,&hess_det); for (i=0;i 3) { fprintf(outfile, "\nInitial MO Hessian:\n"); for (i=0; i 3) { fprintf(outfile, "Delta Theta and Delta Grad arrays:\n"); for (i=0; i 500.0) tval = 500.0; CalcInfo.mo_hess_diag[i] = 0.5 * (CalcInfo.mo_hess_diag[i] + tval); if (CalcInfo.mo_hess_diag[i] < MO_HESS_MIN) CalcInfo.mo_hess_diag[i] = MO_HESS_MIN; } if (Params.print_lvl > 3) { fprintf(outfile, "\nDS MO Hessian:\n"); for (i=0; i 3) IndPairs.print_vec(CalcInfo.mo_hess_diag,"\n\tDiagonal MO Hessian:", outfile); } else if (strcmp(Params.hessian, "APPROX_DIAG") == 0) { CalcInfo.mo_hess_diag = init_array(npairs); form_appx_diag_mo_hess(npairs, ppair, qpair, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.opdm, CalcInfo.tpdm, CalcInfo.F_act, ncore, CalcInfo.npop, CalcInfo.mo_hess_diag); if (Params.print_lvl > 3) IndPairs.print_vec(CalcInfo.mo_hess_diag,"\n\tAppx Diagonal MO Hessian:", outfile); } else if (strcmp(Params.hessian, "FULL") == 0) { CalcInfo.mo_hess = block_matrix(npairs,npairs); form_full_mo_hess(npairs, ppair, qpair, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.opdm, CalcInfo.tpdm, CalcInfo.lag, CalcInfo.mo_hess); if (Params.print_lvl > 3) { fprintf(outfile, "\nMO Hessian:\n"); print_mat(CalcInfo.mo_hess,npairs,npairs,outfile); fprintf(outfile, "\n"); } } else { fprintf(outfile, "(detcas): Unrecognized Hessian option %s\n", Params.hessian); } } /*! ** scale_gradient() ** ** Scales the orbital gradient by the approximate orbital Hessian ** ** \ingroup DETCAS */ void scale_gradient(void) { int pair, npairs; double rms, value; npairs = IndPairs.get_num_pairs(); CalcInfo.theta_step = init_array(npairs); // All this actually does is scale the gradient by the Hessian // If we have a diagonal (exact or approximate) Hessian // BFGS if (Params.scale_grad && Params.bfgs) { calc_orb_step_bfgs(npairs, CalcInfo.mo_grad, CalcInfo.mo_hess, CalcInfo.theta_step); } // non-BFGS diagonal Hessian else if (Params.scale_grad && (strcmp(Params.hessian,"DIAG")==0 || strcmp(Params.hessian,"APPROX_DIAG")==0)) { calc_orb_step(npairs, CalcInfo.mo_grad, CalcInfo.mo_hess_diag, CalcInfo.theta_step); } // non-BFGS full Hessian else if ((Params.scale_grad && strcmp(Params.hessian,"FULL")==0) || Params.bfgs) { calc_orb_step_full(npairs, CalcInfo.mo_grad, CalcInfo.mo_hess, CalcInfo.theta_step); } // No Hessian available: take unit step down gradient direction else { for (pair=0; pair 3) IndPairs.print_vec(CalcInfo.theta_step,"\n\tScaled Orbital Grad:", outfile); rms = 0.0; for (pair=0; pair= Params.diis_start) took_diis = diis(npairs, CalcInfo.theta_cur, CalcInfo.theta_step); //took_diis = diis(npairs, CalcInfo.theta_cur, CalcInfo.mo_grad); else took_diis = 0; if (!took_diis) { if (Params.print_lvl) fprintf(outfile, "Taking regular step\n"); } return(took_diis+1); } /*! ** ** rotate_orbs() ** ** Rotate the orbitals, irrep by irrep ** ** \ingroup DETCAS */ void rotate_orbs(void) { double *ir_theta; int h, pair, ir_norbs, ir_npairs, *ir_ppair, *ir_qpair; // First, we need to come up with Theta vectors for each irrep ir_theta = init_array(IndPairs.get_num_pairs()); // always big enough for (h=0; h 3) { fprintf(outfile, "Thetas for irrep %d\n", h); for (pair=0; pair #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { #define DIIS_MIN_DET 1.0E-16 /* ** diis() ** ** This top-level routine manages all the DIIS stuff. ** ** Parameters: ** veclen = length of the vectors to extrapolate ** vec = new vector to add ** errvec = new error vector to add ** ** Returns: ** 1 if DIIS step taken, otherwise 0 */ int diis(int veclen, double *vec, double *errvec) { int i, j, k; int num_vecs, new_num_vecs, offset, diis_iter, do_diis; double **vecs, **errvecs, **bmat, *bvec, tval, det, scale_factor; FILE *fp; /* add the vector and error vector to subspace */ ffileb_noexit(&fp,"diis.dat",2); if (fp != NULL) { if (fread(&num_vecs, sizeof(int), 1, fp) != 1) { fprintf(outfile, "(diis): Error reading number of diis vectors.\n"); return(0); } if (fread(&diis_iter, sizeof(int), 1, fp) != 1) { fprintf(outfile, "(diis): Error reading diis iteration number.\n"); return(0); } vecs = block_matrix(num_vecs+1, veclen); errvecs = block_matrix(num_vecs+1, veclen); for (i=0; i Params.diis_max_vecs) offset = num_vecs - Params.diis_max_vecs; if (Params.print_lvl > 2) fprintf(outfile, "Diis: iter %2d, vecs %d, do_diis %d, offset %d\n", diis_iter, num_vecs, do_diis, offset); new_num_vecs = num_vecs - offset; /* write out the diis info */ ffileb_noexit(&fp,"diis.dat",0); if (fp == NULL) { fprintf(outfile, "(diis): Error opening diis.dat\n"); return(0); } if (fwrite(&new_num_vecs, sizeof(int), 1, fp) != 1) { fprintf(outfile, "(diis): Error writing number of diis vectors.\n"); return(0); } if (fwrite(&diis_iter, sizeof(int), 1, fp) != 1) { fprintf(outfile, "(diis): Error writing diis iteration number.\n"); return(0); } for (i=offset; i 2) { fprintf(outfile, "DIIS B Matrix:\n"); print_mat(bmat, new_num_vecs+1, new_num_vecs+1, outfile); } /* scale the B matrix */ scale_factor = 1.0 / bmat[0][0]; for (i=0; i 2) { fprintf(outfile, "DIIS B Matrix:\n"); print_mat(bmat, new_num_vecs+1, new_num_vecs+1, outfile); } /* now solve the linear equations */ flin(bmat, bvec, new_num_vecs+1, 1, &det); if (fabs(det) < DIIS_MIN_DET) { fprintf(outfile, "Warning: diis matrix near-singular\n"); fprintf(outfile, "Determinant is %6.3E\n", det); } if (Params.print_lvl > 3) { fprintf(outfile, "\nCoefficients of DIIS extrapolant:\n"); for (i=0; i #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void calc_F_act(double *F_act, int nmo, int firstact, int lastact, double **onepdm, double *tei); void check_F_act(double *F_act, int nmo, int firstact, int lastact, double **onepdm, double *tei); void test_lag(int nbf, int ncore, int npop, double *onei, double *tei, double **opdm, double *tpdm); void test_fzc(int nbf, int ncore, double *onei, double *tei); void test_lag2(int nbf, int ncore, int npop, double *onei, double *tei, double **opdm, double *tpdm); void form_F_act(void) { int ncore; /* Form the intermediates we need */ CalcInfo.F_act = init_array(CalcInfo.nbstri); ncore = CalcInfo.num_fzc_orbs + CalcInfo.num_cor_orbs; calc_F_act(CalcInfo.F_act, CalcInfo.nmo, ncore, CalcInfo.npop, CalcInfo.opdm, CalcInfo.twoel_ints); /* check_F_act(CalcInfo.F_act, CalcInfo.nmo, ncore, CalcInfo.npop, CalcInfo.opdm, CalcInfo.twoel_ints); test_lag(CalcInfo.nmo, ncore, CalcInfo.npop, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.opdm, CalcInfo.tpdm); test_fzc(CalcInfo.nmo, ncore, CalcInfo.onel_ints, CalcInfo.twoel_ints); test_lag2(CalcInfo.nmo, ncore, CalcInfo.npop, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.opdm, CalcInfo.tpdm); */ if (Params.print_lvl > 3) { fprintf(outfile, "\nActive Fock matrix:\n"); print_array(CalcInfo.F_act, CalcInfo.nmo, outfile); } } /* ** calc_F_act ** ** This forms the "active" Fock matrix as defined by eq. 13b of ** Siegbahn, Heiberg, Roos, and Levy, Physica Scripta 21, 323 (1980). ** ** F_act_{pq} = \sum_{uv}^{active} \gamma_{uv} [ (pq|uv) - 1/2 (pu|qv) ] ** ** This thing looks symmetric so I will use that in the calculation ** I am assuming that the pairs (p,q) are always given such that p>=q ** */ void calc_F_act(double *F_act, int nmo, int firstact, int lastact, double **onepdm, double *tei) { int p,q,pq,u,v,pu,uv,qv,pquv,puqv; double val, I1, I2; for (p=0; p #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void pitzer_arrays(int nirreps, int *frdocc, int *fruocc, int *orbspi, int *first, int *last, int *fstact, int *lstact, int *active); double *** construct_evects(int nirreps, int *active, int *orbspi, int *first, int *last, int *fstact, int *lstact, int printflag); extern void check(int a, const char *errmsg); /* ** GET_MO_INFO ** ** Reads PSIF_CHKPT & input.dat and gets all sorts of useful information about ** the molecular orbitals (such as their reordering array, the docc ** array, frozen orbitals, etc.) ** ** Created by C. David Sherrill on 24 April 1998, ** based on the version in DETCI ** */ void get_mo_info(void) { int h, i, j, k, tmp, cnt, irrep, errcod, errbad; int size; double *eig_unsrt; /* set these to NULL so we'll know which one(s) to free in cleanup */ CalcInfo.mo_hess = NULL; CalcInfo.mo_hess_diag = NULL; /* information from checkpoint file */ chkpt_init(PSIO_OPEN_OLD); CalcInfo.nirreps = chkpt_rd_nirreps(); CalcInfo.nmo = chkpt_rd_nmo(); CalcInfo.nbfso = chkpt_rd_nmo(); /* change to nbfso after conversion */ CalcInfo.labels = chkpt_rd_irr_labs(); CalcInfo.orbs_per_irr = chkpt_rd_orbspi(); CalcInfo.enuc = chkpt_rd_enuc(); CalcInfo.efzc = chkpt_rd_efzc(); CalcInfo.docc = chkpt_rd_clsdpi(); CalcInfo.socc = chkpt_rd_openpi(); chkpt_close(); CalcInfo.frozen_docc = init_int_array(CalcInfo.nirreps); CalcInfo.frozen_uocc = init_int_array(CalcInfo.nirreps); CalcInfo.rstr_docc = init_int_array(CalcInfo.nirreps); CalcInfo.rstr_uocc = init_int_array(CalcInfo.nirreps); CalcInfo.pitz2ci = init_int_array(CalcInfo.nmo); CalcInfo.ras_opi = init_int_matrix(MAX_RAS_SPACES,CalcInfo.nirreps); if (!ras_set2(CalcInfo.nirreps, CalcInfo.nmo, 1, 1, CalcInfo.orbs_per_irr, CalcInfo.docc, CalcInfo.socc, CalcInfo.frozen_docc, CalcInfo.frozen_uocc, CalcInfo.rstr_docc, CalcInfo.rstr_uocc, CalcInfo.ras_opi, CalcInfo.pitz2ci, 1, 0)) { fprintf(outfile, "Error in ras_set(). Aborting.\n"); exit(1); } /* Compute maximum number of orbitals per irrep including ** and not including fzv */ CalcInfo.max_orbs_per_irrep = 0; CalcInfo.max_pop_per_irrep = 0; for (i=0; i 4) { fprintf(outfile, "\nPitzer to CI order array = \n"); for (i=0; i 0) { fprintf(outfile, "ORBITALS:"); fprintf(outfile, "\n FROZEN_DOCC = "); for (i=0; ij) ? (ioff[(i)] + (j)): (ioff[(j)] + (i)) ) #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) #define MAX_COMMENT 10 }} // end namespace psi::detcas #endif // header guard psi3/src/bin/detcas/globals.h0000644000101500007650000000125610754663017014614 0ustar crawdad/*! \file \ingroup DETCAS \brief Enter brief description of file here */ /* ** GLOBALS.H ** ** List of all the global data used by the program ** ** Note that these are given as "extern", so they must be defined ** in the main program! ** ** C. David Sherrill ** University of California, Berkeley */ #ifndef _psi_src_bin_detcas_globals_h #define _psi_src_bin_detcas_globals_h #include "calcinfo.h" #include "params.h" extern "C" { extern FILE *infile, *outfile; extern char *psi_file_prefix; } namespace psi { namespace detcas { extern struct calcinfo CalcInfo; extern struct params Params; extern int *ioff; }} // end namespace psi::detcas #endif // header guard psi3/src/bin/detcas/gradient.cc0000644000101500007650000000757410757640026015133 0ustar crawdad/*! \file \ingroup DETCAS \brief Enter brief description of file here */ #include #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { /* ** calc_grad_1 ** ** Calculates the orbital gradient from the MO Lagrangian read in ** from the CLAG program ** ** An alternative method is available using calc_grad_2() **/ void calc_grad_1(int npair, int *ppair, int *qpair, double **lag, double *grad) { int pair, p, q; double value; /* this def of the gradient is consistent with orbital rotations defined * in the same sense as our VBD paper...also, what we would call the * Lagrangian in the VBD paper is actually twice the Lagrangian computed * by CLAG, so double the contribution. */ for (pair=0; pair=q ** */ void calc_grad_2(int npairs, int *ppair, int *qpair, double *F_core, double *tei, double **opdm, double *tpdm, double *F_act, int firstact, int lastact, double *grad) { int pair, p, q, pq, pp, qq; int i,ii,a,aa,t,tt,ti,u,tu,au,iu,v,w,vw,tuvw,auvw,iuvw; double value; /* this def of the gradient is consistent with orbital rotations defined * in the same sense as our VBD paper...we have to reverse the sign * on all their terms */ /* loop over the independent pairs */ for (pair=0; pair= lastact && q < firstact) { grad[pair] = -4.0 * (F_core[pq] + F_act[pq]); } /* g_{at}, i.e., inactive virt with active orb */ else if (p >= lastact && q >= firstact) { a = p; t = q; aa = ioff[a] + a; value = 0.0; for (u=firstact; u= firstact && q < firstact) { t = p; i = q; tt = ioff[t] + t; ii = ioff[i] + i; ti = ioff[t] + i; grad[pair] = -4.0 * (F_core[ti] + F_act[ti]); value = 0.0; for (u=firstact; u #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { /* ** form_appx_diag_mo_hess ** ** Calculates the approximate diagonal MO Hessian according to ** G. Chaban, M. W. Schmidt, and M. S. Gordon, Theor. Chem. Acc., ** 97, 88-95 (1997) ** ** Also uses active-active formulae from G. Chaban, personal communication ** (derived from H. J. Aa. Jensen and H. Agren, Chem. Phys. 104, 229 (1986)) ** ** I am assuming that the pairs (p,q) are always given such that p>=q ** ** C. David Sherrill ** April 1998 ** ** Updated with active-active parts, March 2004 */ void form_appx_diag_mo_hess(int npairs, int *ppair, int *qpair, double *F_core, double *tei, double **opdm, double *tpdm, double *F_act, int firstact, int lastact, double *hess) { int pair, p, q, pq, pp, qq; int ia; int i,ii,a,aa,t,tt,u,tu,v,w,vw,uv,tuvw; int qv,puvw,quvw,pv,pu,qu,pupv,quqv,ppuv,qquv,pvqu,puqv,pquv; double value; fprintf(outfile, "Forming approximate diagonal orbital Hessian\n"); /* loop over the independent pairs */ for (pair=0; pair= lastact && q < firstact) { hess[pair] = 4.0 * (F_core[pp] + F_act[pp] - F_core[qq] - F_act[qq]); } /* H_{at,at}, i.e., inactive virt with active orb */ else if (p >= lastact && q >= firstact) { a = p; t = q; aa = ioff[a] + a; hess[pair] = 2.0 * opdm[t][t] * (F_core[aa] + F_act[aa]); value = 0.0; for (u=firstact; u= firstact && q < firstact) { t = p; i = q; tt = ioff[t] + t; ii = ioff[i] + i; hess[pair] = 2.0 * opdm[t][t] * (F_core[ii] + F_act[ii]); hess[pair] += 4.0 * (F_core[tt] + F_act[tt] - F_core[ii] - F_act[ii]); value = 0.0; for (u=firstact; u= firstact && q < lastact) { hess[pair] = 2.0 * ( opdm[q][q] * F_core[pp] + opdm[p][p] * F_core[qq] - 2.0 * opdm[p][q] * F_core[pq] ); value = 0.0; for (u=firstact; u=q ** ** G. O. Hyde ** January 2002 ** ** Active-active parts added by C. D. Sherrill, March 2004 */ void form_diag_mo_hess(int npairs, int *ppair, int *qpair, double *F_core, double *tei, double **opdm, double *tpdm, double *F_act, int firstact, int lastact, double *hess) { int pair, p, q, pq, pp, qq, pqpq, ppqq; int i,ii,a,aa,t,tt,u,tu,v,w,vw,tuvw; int au, uv, av, tv, ttuv, aauv, tvtu, avau; int ui, vi, ti, uvii, uivi, uiti, tuii; int qv,puvw,quvw,pv,pu,qu,pupv,quqv,ppuv,qquv,pvqu,puqv,pquv; int delta; double value; fprintf(outfile, "Forming diagonal orbital Hessian\n"); /* loop over the independent pairs */ for (pair=0; pair= lastact && q < firstact) { hess[pair] = 4.0 * (F_core[pp] + F_act[pp] - F_core[qq] - F_act[qq] + 3.0 * tei[pqpq] - tei[ppqq]); } /* H_{at,at}, i.e., inactive virt with active orb */ else if (p >= lastact && q >= firstact) { a = p; t = q; aa = ioff[a] + a; tt = ioff[t] + t; hess[pair] = 2.0 * opdm[t][t] * (F_core[aa]); value = 0.0; for (u=firstact; u= firstact && q < firstact) { t = p; i = q; tt = ioff[t] + t; ii = ioff[i] + i; ti = ioff[t] + i; hess[pair] = 2.0 * opdm[t][t] * (F_core[ii]); hess[pair] += 4.0 * (F_core[tt] + F_act[tt] - F_core[ii] - F_act[ii]); value = 0.0; for (u=firstact; u= firstact && q < lastact) { hess[pair] = 2.0 * ( opdm[q][q] * F_core[pp] + opdm[p][p] * F_core[qq] - 2.0 * opdm[p][q] * F_core[pq] ); value = 0.0; for (u=firstact; u=q. ** ** d^2 E / (Theta_{pq} Theta_{rs}) = ** y_{pqrs} - y_{qprs} - y_{pqsr} + y_{qpsr} ** + 1/2 delta_{ps} ( x_{qr} + x_{rq} ) ** - 1/2 delta_{qs} ( x_{pr} + x_{rp} ) ** - 1/2 delta_{pr} ( x_{qs} + x_{sq} ) ** + 1/2 delta_{qr} ( x_{ps} + x_{sp} ) ** ** x is the Lagrangian ** y_{pqrs} = gamma_{qs} ** + \sum_{mn} ( 2 Gamma_{qsmn} (pr|mn) + 4 Gamma_{qmsn} (pm|rn) ) ** ** note: indices q and s must be populated for y to be nonzero ** ** Based on notes by Yukio Yamaguchi (MCSCF eq. 22) ** We need twice his value to be consistent with the "actual" gradient ** (his eq. 21, not his eq. 27) or to match G. Chaban, M. W. Schmidt, ** and M. S. Gordon, Theor. Chem. Acc. 97, 88 (1997). ** ** C. David Sherrill ** September 2003 */ void form_full_mo_hess(int npairs, int *ppair, int *qpair, double *oei, double *tei, double **opdm, double *tpdm, double **lag, double **hess) { int npop, nmo; int pair1, pair2, p, q, r, s, m, n; int qs, ps, pr, qr, mn, qm, sn, pm, rn; int qsmn, prmn, qmsn, pmrn, psmn, pmsn, qrmn, qmrn; double sum, ysum; fprintf(outfile, "Forming full MCSCF orbital Hessian\n"); nmo = CalcInfo.nmo; npop = CalcInfo.npop; /* loop over the pairs of independent pairs */ for (pair1=0; pair1=q. ** ** d^2 E / Theta_{pq}^2 ** y_{pqpq} - y_{qppq} - y_{pqqp} + y_{qpqp} ** - 1/2 delta_{qq} ( x_{pp} + x_{pp} ) ** - 1/2 delta_{pp} ( x_{qq} + x_{qq} ) ** ** x is the Lagrangian ** y_{pqrs} = gamma_{qs} ** + \sum_{mn} ( 2 Gamma_{qsmn} (pr|mn) + 4 Gamma_{qmsn} (pm|rn) ) ** ** note: indices q and p must be populated for y to be nonzero ** ** Based on notes by Yukio Yamaguchi (MCSCF eq. 22) ** ** C. David Sherrill ** September 2003 */ void form_diag_mo_hess_yy(int npairs, int *ppair, int *qpair, double *oei, double *tei, double **opdm, double *tpdm, double **lag, double *hess) { int npop, nmo; int pair1, pair2, p, q, m, n; int pq, pp, qq, mn, pn, qn, pm, qm; int qqmn, ppmn, qmqn, pmpn, pqmn, qpmn, pmqn, qmpn; double sum, ysum; fprintf(outfile, "Forming diagonal MCSCF orbital Hessian (YY)\n"); nmo = CalcInfo.nmo; npop = CalcInfo.npop; /* loop over the pairs of independent pairs */ for (pair1=0; pair1 #include #include "indpairs.h" namespace psi { namespace detcas { IndepPairs::IndepPairs() // Default constructor { npairs = 0; nirreps = 0; p = NULL; q = NULL; map_pair_ir = NULL; map_pair_rel = NULL; ir_npairs = NULL; ir_p = NULL; ir_q = NULL; ir_p_rel = NULL; ir_q_rel = NULL; ir_map_pair = NULL; } // Regular constructor IndepPairs::IndepPairs(int nirr, int num_ras, int **ras_opi, int ***ras_orbs, int *fzc, int **fzc_orbs, int *cor, int **cor_orbs, int *vir, int **vir_orbs, int *fzv, int **fzv_orbs, int *ci2relpitz, int ignore_ras_ras, int ignore_fz) { set(nirr, num_ras, ras_opi, ras_orbs, fzc, fzc_orbs, cor, cor_orbs, vir, vir_orbs, fzv, fzv_orbs, ci2relpitz, ignore_ras_ras, ignore_fz); } /*! ** set() ** ** This function sets the independent pairs info ** ** \param nirr = number of irreps in point group ** \param num_ras = number of RAS spaces ** \param ras_opi = number of orbitals per irrep per RAS space ** \param ras_orbs = ras_orbs[ras][irr][cnt] gives an orbital number ** \param fzc = number of frozen core orbs per irrep ** \param fzc_orbs = fzc_orbs[irr][cnt] gives an orbital number ** \param cor = number of restricted core orbs per irrep ** \param cor_orbs = cor_orbs[irr][cnt] gives an orbital number ** \param vir = number of restricted virtual orbitals per irrep ** \param vir_orbs = vir_orbs[irr][cnt] gives an orbital number ** \param fzv = number of frozen virtual orbitals per irrep ** \param fzv_orbs = fzv_orbs[irr][cnt] gives an orbital number ** \param ci2relpitz = maps CI orbitals to relative Pitzer indices ** \param ignore_ras_ras = ignore RAS/RAS independent pairs ** \param ignore_fz = ignore FZC and FZV from all independent pairs ** */ void IndepPairs::set(int nirr, int num_ras, int **ras_opi, int ***ras_orbs, int *fzc, int **fzc_orbs, int *cor, int **cor_orbs, int *vir, int **vir_orbs, int *fzv, int **fzv_orbs, int *ci2relpitz, int ignore_ras_ras, int ignore_fz) { int count, ir_count, *ir_cnt; int rasi, rasj, irrep; int i, j; nirreps = nirr; ir_npairs = new int[nirreps]; // count everything up! for (irrep=0; irrep #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void read_integrals() { int i, j, ij, k, l, kl, ijkl; int nbstri; double value; /* allocate memory for one and two electron integrals */ nbstri = CalcInfo.nbstri; CalcInfo.onel_ints = init_array(nbstri); CalcInfo.twoel_ints = init_array(nbstri * (nbstri + 1) / 2); /* now read them in */ if (Params.use_fzc_h) { if (Params.print_lvl > 3) fprintf(outfile, "\n\tOne-electron integrals (frozen core operator):\n"); iwl_rdone(Params.oei_file, PSIF_MO_FZC, CalcInfo.onel_ints, nbstri, Params.oei_erase, (Params.print_lvl>3), outfile); } else { if (Params.print_lvl > 3) fprintf(outfile, "\n\tOne-electron integrals (bare):\n"); iwl_rdone(Params.oei_file, PSIF_MO_OEI, CalcInfo.onel_ints, nbstri, Params.oei_erase, (Params.print_lvl>3), outfile); } if (Params.print_lvl > 4) fprintf(outfile, "\n\tTwo-electron integrals:\n"); iwl_rdtwo(Params.tei_file, CalcInfo.twoel_ints, ioff, CalcInfo.nmo, Params.filter_ints ? CalcInfo.num_fzc_orbs : 0, Params.filter_ints ? CalcInfo.num_fzv_orbs : 0, (Params.print_lvl>4), outfile); } double get_onel(int i, int j) { int ij; ij = INDEX(i,j); return(CalcInfo.onel_ints[ij]); } double get_twoel(int i, int j, int k, int l) { int ij, kl, ijkl; ij = INDEX(i,j); kl = INDEX(k,l); ijkl = INDEX(ij,kl); return(CalcInfo.twoel_ints[ijkl]); } /* ** get_mat_block() ** ** This function gets an irrep block of a full matrix ** ** C. David Sherrill ** May 1998 */ void get_mat_block(double **src, double **dst, int dst_dim, int dst_offset, int *dst2src) { int P, Q, p, q; for (P=0; P #include #include #include #include #include #include "globals.h" namespace psi { namespace detcas { /* ** get_parameters(): Function gets the program running parameters such ** as convergence. These are stored in the Parameters data structure. */ void get_parameters(void) { int i, errcod; char line1[133]; errcod = ip_string("DERTYPE", &(Params.dertype),0); if(errcod == IPE_KEY_NOT_FOUND) { Params.dertype = (char *) malloc(sizeof(char)*5); strcpy(Params.dertype, "NONE"); } if (strcmp(Params.dertype, "NONE")==0) { Params.rms_grad_convergence = 4; Params.energy_convergence = 7; } else { Params.rms_grad_convergence = 7; Params.energy_convergence = 11; } errcod = ip_string("WFN", &(Params.wfn),0); if (errcod == IPE_KEY_NOT_FOUND) { Params.wfn = (char *) malloc(sizeof(char)*5); strcpy(Params.wfn, "NONE"); } /* Params.print_lvl is set in detcas.cc */ Params.print_mos = 0; Params.filter_ints = 0; /* assume we need all for MCSCF */ Params.oei_file = PSIF_OEI; /* contains frozen core operator */ Params.oei_erase = 0; Params.tei_file = PSIF_MO_TEI; Params.tei_erase = 0; Params.opdm_file = PSIF_MO_OPDM; Params.opdm_erase = 0; Params.tpdm_file = PSIF_MO_TPDM; Params.tpdm_erase = 0; Params.lag_file = PSIF_MO_LAG; Params.lag_erase = 0; Params.ignore_fz = 1; /* ignore frozen orbitals for ind pairs? */ if (strcmp(Params.wfn, "CASSCF")==0 || strcmp(Params.wfn, "DETCAS")==0) Params.ignore_ras_ras = 1; /* ignore RAS/RAS independent pairs? */ else Params.ignore_ras_ras = 0; Params.scale_grad = 1; /* scale the orbital gradient? */ Params.diis_start = 3; /* iteration to turn on DIIS */ Params.diis_freq = 1; /* how often to do a DIIS extrapolation */ Params.diis_min_vecs = 2; Params.diis_max_vecs = 8; Params.scale_step = 1.0; Params.use_fzc_h = 1; Params.level_shift = 1; /* levelshift by default */ Params.shift = 0.01; /* default shift value if level_shift=1 */ Params.determ_min = 0.00001; /* lowest allowed MO Hess before levelshift */ Params.step_max = 0.30; /* max allowed theta step */ Params.use_thetas = 1; /* Use thetas by default */ Params.invert_hessian = 1; /* directly invert MO Hessian instead of solving system of linear equations for orbital step if full Hessian available */ Params.force_step = 0; /* ignore usual step and force user-given */ Params.force_pair = 0; /* which pair to force a step along */ Params.force_value = 0.0; /* how far to step along forced direction */ Params.scale_act_act = 1.0; /* scale act/act Hessian elements by this */ Params.bfgs = 0; /* BFGS update of Hessian? */ Params.ds_hessian = 0; /* Do a DS update of the Hessian? */ errcod = ip_data("PRINT","%d",&(Params.print_lvl),0); errcod = ip_boolean("PRINT_MOS",&(Params.print_mos),0); errcod = ip_data("CONVERGENCE","%d", &(Params.rms_grad_convergence),0); errcod = ip_data("ENERGY_CONVERGENCE","%d", &(Params.energy_convergence),0); errcod = ip_data("OEI_FILE","%d",&(Params.oei_file),0); errcod = ip_boolean("OEI_ERASE",&(Params.oei_erase),0); errcod = ip_data("TEI_FILE","%d",&(Params.tei_file),0); errcod = ip_data("LAG_FILE","%d",&(Params.lag_file),0); errcod = ip_boolean("TEI_ERASE",&(Params.tei_erase),0); errcod = ip_boolean("IGNORE_FZ",&(Params.ignore_fz),0); errcod = ip_boolean("IGNORE_RAS_RAS",&(Params.ignore_ras_ras),0); errcod = ip_data("OPDM_FILE","%d",&(Params.opdm_file),0); errcod = ip_data("TPDM_FILE","%d",&(Params.tpdm_file),0); errcod = ip_boolean("SCALE_GRAD",&(Params.scale_grad),0); errcod = ip_data("DIIS_START","%d",&(Params.diis_start),0); errcod = ip_data("DIIS_FREQ","%d",&(Params.diis_freq),0); errcod = ip_data("DIIS_MIN_VECS","%d",&(Params.diis_min_vecs),0); errcod = ip_data("DIIS_MAX_VECS","%d",&(Params.diis_max_vecs),0); errcod = ip_data("SCALE_STEP","%lf",&(Params.scale_step),0); errcod = ip_boolean("USE_FZC_H",&(Params.use_fzc_h),0); errcod = ip_boolean("INVERT_HESSIAN",&(Params.invert_hessian),0); errcod = ip_string("HESSIAN",&(Params.hessian),0); if (errcod == IPE_KEY_NOT_FOUND) { Params.hessian = (char *) malloc(sizeof(char)*12); strcpy(Params.hessian, "APPROX_DIAG"); } if ((strcmp(Params.hessian, "FULL")!=0) && (strcmp(Params.hessian, "DIAG")!=0) && (strcmp(Params.hessian, "APPROX_DIAG")!=0)) { fprintf(outfile, "(detcas): Unrecognized Hessian option %s\n", Params.hessian); exit(0); } errcod = ip_boolean("LEVEL_SHIFT",&(Params.level_shift),0); errcod = ip_data("SHIFT","%lf",&(Params.shift),0); errcod = ip_data("DETERM_MIN","%lf",&(Params.determ_min),0); errcod = ip_data("MAX_STEP","%lf",&(Params.step_max),0); errcod = ip_boolean("USE_THETAS",&(Params.use_thetas),0); errcod = ip_boolean("FORCE_STEP",&(Params.force_step),0); errcod = ip_data("FORCE_PAIR","%d",&(Params.force_pair),0); errcod = ip_data("FORCE_VALUE","%lf",&(Params.force_value),0); /* at the moment, the following only work for diagonal (non-YY) Hessians */ errcod = ip_data("SCALE_ACT_ACT","%lf",&(Params.scale_act_act),0); errcod = ip_boolean("BFGS",&(Params.bfgs),0); errcod = ip_boolean("DS_HESSIAN",&(Params.ds_hessian),0); } /* ** print_parameters(): Function prints the program's running parameters ** found in the Parameters structure. */ void print_parameters(void) { fprintf(outfile, "\n") ; fprintf(outfile, "PARAMETERS: \n") ; fprintf(outfile, " PRINT = %6d PRINT_MOS = %6s\n", Params.print_lvl, Params.print_mos ? "yes" : "no"); fprintf(outfile, " CONVERGENCE = %6d E CONVERG = %6d\n", Params.rms_grad_convergence, Params.energy_convergence); fprintf(outfile, " IGNORE_RAS_RAS= %6s IGNORE_FZ = %6s\n", Params.ignore_ras_ras ? "yes" : "no", Params.ignore_fz ? "yes" : "no") ; fprintf(outfile, " OEI FILE = %6d OEI ERASE = %6s\n", Params.oei_file, Params.oei_erase ? "yes" : "no"); fprintf(outfile, " TEI FILE = %6d TEI ERASE = %6s\n", Params.tei_file, Params.tei_erase ? "yes" : "no"); fprintf(outfile, " OPDM FILE = %6d OPDM ERASE = %6s\n", Params.lag_file, Params.opdm_erase ? "yes" : "no"); fprintf(outfile, " TPDM FILE = %6d TPDM ERASE = %6s\n", Params.tpdm_file, Params.tpdm_erase ? "yes" : "no"); fprintf(outfile, " LAG FILE = %6d LAG ERASE = %6s\n", Params.lag_file, Params.lag_erase ? "yes" : "no"); fprintf(outfile, " DIIS START = %6d DIIS FREQ = %6d\n", Params.diis_start, Params.diis_freq); fprintf(outfile, " DIIS MIN VECS = %6d DIIS MAX VECS = %6d\n", Params.diis_min_vecs, Params.diis_max_vecs); fprintf(outfile, " SCALE STEP = %6.2E MAX STEP = %6.2lf\n", Params.scale_step, Params.step_max); fprintf(outfile, " LEVEL SHIFT = %6s SHIFT = %6.2lf\n", Params.level_shift ? "yes" : "no", Params.shift); fprintf(outfile, " USE FZC H = %6s HESSIAN = %-12s\n", Params.use_fzc_h ? "yes" : "no", Params.hessian); fprintf(outfile, "\n") ; fflush(outfile) ; } }} // end namespace psi::detcas psi3/src/bin/detcas/params.h0000644000101500007650000000743410754663017014460 0ustar crawdad/*! \file \ingroup DETCAS \brief Enter brief description of file here */ /* ** PARAMS.H ** ** C. David Sherrill ** University of California, Berkeley ** 1998 */ #ifndef _psi_src_bin_detcas_params_h #define _psi_src_bin_detcas_params_h namespace psi { namespace detcas { /* ** parameters structure: holds user-specified parameters */ struct params { char *dertype; /* derivative level: none, first, etc. */ char *wfn; /* wavefunction, CASSCF, RASSCF, .. */ int print_lvl; /* print verbosity level */ int print_mos; /* print the molecular orbitals ? */ int rms_grad_convergence;/* convergence, 10^-n, on RMS of orbital grad */ int energy_convergence; /* convergence, 10^-n, on CI energy */ int oei_file; /* file number for one-electron integrals */ int oei_erase; /* erase onel ints after reading them? */ int tei_file; /* file number for two-electron integrals */ int tei_erase; /* erase twoel ints after reading them? */ int opdm_file; /* file number for one-particle density matrix */ int opdm_erase; /* erase onepdm ints after reading? */ int tpdm_file; /* file number for two-particle density matrix */ int tpdm_erase; /* erase twopdm after reading? */ int lag_file; /* file number for lagrangian */ int lag_erase; /* erase lagrangian after reading? */ int ignore_ras_ras; /* ignore RAS/RAS rotations in independ pairs? */ int ignore_fz; /* ignore FZC/FZV in independent pair list? */ int filter_ints; /* filter out the frozen orbital integrals? */ int scale_grad; /* scale the orbital gradient by the appx Hess? */ int diis_start; /* how many diis vectors built up before start */ int diis_freq; /* how many iters to go before a diis step */ int diis_min_vecs; /* how many vectors required before do diis? */ int diis_max_vecs; /* how many vectors maximum to hold? */ double scale_step; /* stepsize scaling factor */ char *hessian; /* string describing type of MO Hessian */ /* DIAG, APPROX_DIAG, or FULL */ int use_fzc_h; /* Use frozen-core operator h?(1) Or bare h?(0) */ /* this determines which onel ints are read */ int level_shift; /* Allow for level shifting of the hessian? */ double shift; /* How much do I level shift the hessian */ double determ_min; /* Min det of MO Hessian before levelshift */ double step_max; /* Biggest single allowed theta step */ int invert_hessian; /* If=1, directly invert the Hessian, if=0, solve linear equations H delta = -g */ int use_thetas; /* If=1, use Givens matrix formalism, if=0, use YY 2nd-order expansion U=e^R */ int force_step; /* Ignore usual updating and force a user specified step? (For debugging) */ int force_pair; /* If force_step=1, which indep pair to step? */ double force_value; /* If force_step=1, how far to step? */ double scale_act_act; /* Scale the active-active Hessian by this */ int bfgs; /* Do BFGS update of Hessian? */ int ds_hessian; /* Do a DS Hessian update? */ }; }} // end namespace psi::detcas #endif // header guard psi3/src/bin/detcas/read_dens.cc0000644000101500007650000001205010757640026015243 0ustar crawdad/*! \file \ingroup DETCAS \brief Enter brief description of file here */ /* ** READ_DENS.C ** ** Read the one- and two-particle density matrices ** ** C. David Sherrill ** University of California, Berkeley ** ** Based on code from the CLAG program ** April 1998 */ #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { double **rdopdm(int nbf, int print_lvl, int opdm_file, int erase); double *rdtpdm(int nbf, int print_lvl, int tpdm_file, int erase); void read_density_matrices(void) { /* read the one-particle density matrix */ CalcInfo.opdm = rdopdm(CalcInfo.npop, Params.print_lvl, Params.opdm_file, Params.opdm_erase); /* read the two-particle density matrix */ CalcInfo.tpdm = rdtpdm(CalcInfo.npop, Params.print_lvl, Params.tpdm_file, Params.tpdm_erase); } /* ** RDOPDM ** ** reads the one particle density matrix from opdm_file and returns opdm ** as a block matrix ** ** Taken from CLAG, April 1998 ** upgraded to libpsio 6/03 by CDS */ double **rdopdm(int nbf, int print_lvl, int opdm_file, int erase) { int i, root, errcod; double **opdm; char opdm_key[80]; psio_open(opdm_file, PSIO_OPEN_OLD); opdm = block_matrix(nbf, nbf); /* if the user hasn't specified a root, just get "the" onepdm */ if (!ip_exist("ROOT",0)) { psio_read_entry(opdm_file, "MO-basis OPDM", (char *) opdm[0], nbf*nbf*sizeof(double)); } else { root = 1; errcod = ip_data("ROOT","%d",&root,0); sprintf(opdm_key, "MO-basis OPDM Root %d", root); psio_read_entry(opdm_file, opdm_key, (char *) opdm[0], nbf*nbf*sizeof(double)); } if (print_lvl > 3) { fprintf(outfile,"\nOne-Particle Density Matrix\n"); print_mat(opdm, nbf, nbf, outfile); fprintf(outfile,"\n\n"); } psio_close(opdm_file, erase ? 0 : 1); return(opdm); } /* ** RDTPDM ** ** reads the two particle density matrix from tpdm_file and returns tpdm ** as an array ** ** Note that nbf is really going to be the number of _populated_ orbitals ** (i.e., subtract frozen virtuals). ** ** Taken from CLAG, adapted to symmetrize the tpdm ** C. David Sherrill ** April 1998 */ double *rdtpdm(int nbf, int print_lvl, int tpdm_file, int erase) { double *tpdm, *symm_tpdm; int numslots, sqnbf, ntri; int *ioff_lt, i; /* offsets for left (or right) indices */ int p,q,r,s,smax,pq,qp,rs,sr,pqrs,qprs,pqsr,qpsr,target; struct iwlbuf TBuff; iwl_buf_init(&TBuff, tpdm_file, 0.0, 1, 1); sqnbf = nbf*nbf; numslots = (sqnbf*(sqnbf+1))/2; tpdm = init_array(numslots); /* Construct the ioff_lt array (same here as ioff_rt) : different than * regular ioff because there is no perm symmetry between left indices * or right indices. */ ioff_lt = init_int_array(nbf); for (i=0; i5), outfile); if (print_lvl > 4) { fprintf(outfile,"Non-symmetrized Two-Particle Density Matrix\n"); for (p=0; p 4) { fprintf(outfile,"Symmetrized Two-Particle Density Matrix\n"); for (p=0,target=0; p #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void read_lagrangian(void) { int nmo; nmo = CalcInfo.nmo; CalcInfo.lag = block_matrix(nmo, nmo); psio_open(Params.lag_file, PSIO_OPEN_OLD); psio_read_entry(Params.lag_file, "MO-basis Lagrangian", (char *) CalcInfo.lag[0], nmo*nmo*sizeof(double)); if (Params.print_lvl > 3) { fprintf(outfile, "Lagrangian matrix\n"); print_mat(CalcInfo.lag, nmo, nmo, outfile); } psio_close(Params.lag_file, Params.lag_erase ? 0 : 1); } }} // end namespace psi::detcas psi3/src/bin/detcas/ref_orbs.cc0000644000101500007650000000441110757640026015122 0ustar crawdad/*! \file \ingroup DETCAS \brief Enter brief description of file here */ /* ** REF_ORBS.C ** ** This file contains routines pertaining to the set of reference orbitals, ** C_0, from which the orbital rotation angles are defined. ** ** C. David Sherrill ** University of California, Berkeley ** May 1998 */ #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { /* ** read_ref_orbs() ** ** This function reads in the ``reference'' orbitals, C_0, from a special ** file. If this file does not exist, then it is created, and the ** current orbitals in file30 are placed there, and the array of orbital ** rotation angles is reset to zero. ** ** Returns: 1 if read is successful, otherwise 0 */ int read_ref_orbs(void) { FILE *fp; int h, ir_orbs; ffileb_noexit(&fp,"orbs.dat",2); if (fp == NULL) { if (Params.print_lvl) fprintf(outfile, "No orbs.dat file ... using new reference orbitals\n"); return(0); } for (h=0; h #include #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void rotate_test(int dim, int npairs, int *p_arr, int *q_arr, double *theta_arr); void rotate_orbs_irrep(int irrep, int dim, double **mo_coeffs, int npairs, int *p_arr, int *q_arr, double *theta_arr) { int p, q, i, j, pair; double **tmpmat, theta, sintheta, costheta; if (Params.print_lvl > 3) { fprintf(outfile, "Thetas for irrep %d\n", irrep); for (pair=0; pair #include #include #include #include #include #include #include "globals.h" namespace psi { namespace detcas { /* ** init_io(): Function opens input and output files */ void init_io(int argc, char *argv[]) { int i; int num_extra_args; char **extra_args; extra_args = (char **) malloc(argc*sizeof(char *)); for (i=1,num_extra_args=0; i #include #include #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { #define MO_HESS_MIN 1.0E-2 /* ** calc_orb_step() ** ** This function calculates the step in theta space for the orbitals ** given the orbital gradient and an approximate orbital Hessian ** ** C. David Sherrill ** April 1998 */ void calc_orb_step(int npairs, double *grad, double *hess_diag, double *theta) { int pair; double numer, denom; for (pair=0; pair biggest_step) biggest_step = fabs(tval); } fprintf(outfile,"\nLargest step in theta space is %12.6lf \n", biggest_step); if (biggest_step > Params.step_max) { fprintf(outfile, "Scaling the step\n"); for (i=0;i biggest_step) biggest_step = fabs(tval); } fprintf(outfile,"\nLargest step in theta space is %12.6lf \n", biggest_step); if (biggest_step > Params.step_max) { fprintf(outfile, "Largest allowed step %12.6lf --- scaling the step\n", Params.step_max); for (i=0;i #include #include #include namespace psi { namespace detcas { void test_bfgs(void) { int ndim, i, j; int iter, maxiter = 20; double E, E_last; double *x_cur, *x_last, *g_cur, *g_last; double *dx, *dg, *hdg; double **hessin; double fac, fad, fae; double dfunc(double *x, double *g); ndim = 2; E_last = 0.0; x_cur = init_array(ndim); x_last = init_array(ndim); g_cur = init_array(ndim); g_last = init_array(ndim); dx = init_array(ndim); dg = init_array(ndim); hdg = init_array(ndim); hessin = block_matrix(ndim,ndim); /* guess */ x_cur[0] = 1.0; x_cur[1] = 5.0; for (i=0; i #include #include #include #include #include #include "globaldefs.h" #include "globals.h" namespace psi { namespace detcas { void rotate_test(int dim, int npairs, int *p_arr, int *q_arr, double *theta_arr); /* ** postmult_by_U() ** ** Postmultiply a block matrix (must be contiguous memory!) by a ** unitary matrix U parameterized as a series of Givens rotations ** */ void postmult_by_U(int irrep, int dim, double **mat, int npairs, int *p_arr, int *q_arr, double *theta_arr) { int p, q, i, j, pair; double theta, sintheta, costheta; /* apply the transformation C = C^0 U, assuming square matrices */ /* U is a series of Givens rotation matrices */ for (pair=0; pair=0; pair--) { p = ppair[pair]; q = qpair[pair]; theta = theta_arr[pair]; costheta = cos(theta); sintheta = sin(theta); C_DROT(dim,&(mat[q][0]),1,&(mat[p][0]),1,costheta,sintheta); } } /* ** rotate_test ** ** This does about the same thing as rotate_orbs_irrep except that ** it does it on a unit matrix so the results can be checked easily */ void rotate_test(int dim, int npairs, int *p_arr, int *q_arr, double *theta_arr) { int p, q, i, j, pair; double **tmpmat, theta, sintheta, costheta; /* set up a unit matrix */ tmpmat = block_matrix(dim,dim); for (i=0; i 3) { fprintf(outfile, "\n\tMatrix after transformation:\n"); print_mat(tmpmat, dim, dim, outfile); } } /* print new coefficients */ fprintf(outfile, "\n\tNew molecular orbitals\n"); print_mat(tmpmat, dim, dim, outfile); free_block(tmpmat); } /* ** read_thetas() ** ** Read in the theta array from disk. If there is none, assume they're ** all set to 0. */ void read_thetas(int npairs) { FILE *fp; CalcInfo.theta_cur = init_array(npairs); /* look for the thetas on disk...if they're around, read them in */ ffileb_noexit(&fp,"thetas.dat",2); if (fp != NULL) { if (Params.print_lvl > 2) fprintf(outfile, "\nReading orbital rotation angles\n"); if (fread(CalcInfo.theta_cur, sizeof(double), npairs, fp) != npairs) { fprintf(outfile, "Error reading angles.\n"); zero_arr(CalcInfo.theta_cur, npairs); } fclose(fp); } } /* ** write_thetas() ** ** Write the theta array to disk. */ void write_thetas(int npairs) { FILE *fp; ffileb_noexit(&fp,"thetas.dat",0); if (fp != NULL) { if (Params.print_lvl > 2) fprintf(outfile, "\nWriting orbital rotation angles\n"); if (fwrite(CalcInfo.theta_cur, sizeof(double), npairs, fp) != npairs) { fprintf(outfile, "Error writing angles.\n"); } fclose(fp); } else { fprintf(outfile, "Error opening thetas.dat for writing\n"); } } /* ** calc_de_dtheta() ** ** This function calculates dE / dTheta = dE/dU * dU/dTheta ** ** Feed in a vector of thetas (theta) and a matrix dE/dU and write ** to a vector of dE/d(theta) (dET). Actually, this is called ** for an irrep at a time. ** ** Based on similar code from an old version of the VBD code. ** Can use blas calls to drot later. ** ** C. David Sherrill ** May 1998 ** */ void calc_dE_dT(int n, double **dEU, int npairs, int *ppair, int *qpair, double *theta, double *dET) { int i,a,m,l,pair; double temp, costheta, sintheta; double **Uleft, **Uright, **Scratch; zero_arr(dET, npairs); /* form temporary U matrices */ Uleft = block_matrix(n ,n); Uright = block_matrix(n, n); Scratch = block_matrix(n, n); /* init Uright and Uleft to unit matrix */ for(m=0; m < n; m++) { Uright[m][m] = 1.0; Uleft[m][m] = 1.0; } /* init Uleft to the U matrix */ for (pair=0; pair 3) { fprintf(outfile, "dE/dU after backtransform: \n"); print_mat(dEU, n, n, outfile); } /* Loop over i,a to form dE/d(theta): we are working right to left in this algorithm, hence we must go backwards through the theta list */ for (pair=npairs-1; pair>=0; pair--) { a = ppair[pair]; i = qpair[pair]; costheta = cos(theta[pair]); sintheta = sin(theta[pair]); /* fprintf(outfile, "Derivative (i=%d, a=%d)\n", i, a); fprintf(outfile, "Cos = %lf, Sin=%lf\n", costheta, sintheta); */ /* post-multiply Uleft by G(+) */ for(m=0; m < n; m++) { temp = Uleft[m][i]; Uleft[m][i] = temp*costheta + Uleft[m][a]*sintheta; Uleft[m][a] = Uleft[m][a]*costheta - temp*sintheta; } /* fprintf(outfile, "Uleft after postmultiplication by G(+)(%d,%d)\n", i, a); print_mat(Uleft, n, n, outfile); */ /* Now do Uleft*dG/d(theta)*Uright series of multi */ for(l=0; l < n; l++) { for(m=0; m < n; m++) { Scratch[l][m] = (-sintheta*Uleft[l][i] - costheta*Uleft[l][a]) *Uright[i][m] + (costheta*Uleft[l][i] - sintheta*Uleft[l][a]) *Uright[a][m]; } } /* fprintf(outfile, "Uleft * dG/dTheta(%d,%d) * Uright\n", i, a); print_mat(Scratch, n, n, outfile); */ for(l=0; l < n; l++) { for(m=0; m < n; m++) { dET[pair] += dEU[l][m]*Scratch[l][m]; /* if ((fabs(Scratch[l][m]) > 0.0001) && ((l= nocc && m >= nocc))) { fprintf(outfile, "nonzero element for theta(%d, %d) element", i, a); fprintf(outfile, "%d %d\n", l, m); } */ } } /* fprintf(outfile, "dE/dTheta(%d,%d) = %12.6lf\n", i, a, dET[pair]); */ /* pre-multiply Uright by G */ for(m=0; m < n; m++) { temp = Uright[i][m]; Uright[i][m] = temp*costheta + Uright[a][m]*sintheta; Uright[a][m] = Uright[a][m]*costheta - temp*sintheta; } /* fprintf(outfile, "Uright after premultiplication by G \n"); print_mat(Uright, n, n, outfile); */ } /* free memory */ free_block(Uleft); free_block(Uright); free_block(Scratch); } }} // end namespace psi::detcas psi3/src/bin/detcasman/0000755000101500007650000000000011146111671013476 5ustar crawdadpsi3/src/bin/detcasman/detcasman.10000644000101500007650000000272207046653677015547 0ustar crawdad.TH detcasman 1 " 8 Oct, 1998" "" "" . \" . \" Notice of Document Modification . \" . \" man page created by David Sherrill, 8 Oct 1998 . \" . \" .SH NAME detcasman \- Determinant Configuration Interaction / Complete Active Space Self-Consistent-Field Program Manager .SH DESCRIPTION .LP The program .B detcasman manages the orbital optimization in a complete-active-space self-consistent field (CASSCF) procedure. It is a very simple program that runs the integral transformation, CI calculation, Lagrangian, and orbital rotation modules that work with the DETCI program. The real work of orbital optimization is done in the program \fBdetcas\fP. .SH FILES REQUIRED .nf input.dat \- Input file .fi .SH FILES UPDATED .nf output.dat \- Output file .fi .SH INPUT FORMAT .LP .IP "\fBNCASITER =\fP \fIinteger\fP" The number of orbital optimization iterations to be carried out. The driver will stop when this many iterations have been completed, or earlier if convergence has been achieved. The default value is 30. See the man pages for \fBDETCI\fP and \fBDETCAS\fP for setting the convergence criteria. .IP "\fBSCALE_CONV =\fP \fIdouble\fP" The scale factor to be used to determine the CI convergence from the previous iteration's orbital convergence. We take the smaller of the scaled and unscaled orbital gradients, and multiply this by the scale factor to determine the CI vector convergence. The default is 0.01. psi3/src/bin/detcasman/detcasman.cc0000644000101500007650000001600211116052413015736 0ustar crawdad/*! \defgroup DETCASMAN detcasman: Determinant CASSCF/MCSCF manager */ /*! ** \file ** \ingroup DETCASMAN ** \brief Determinant CASSCF/MCSCF manager ** ** Program to manage the iteration of (transqt, detci, clag, detcas) ** required for orbital optimization using the DETCAS program. ** ** This program does not really do much...it simply iterates until ** convergence or until iterations are exhausted. It would not be ** necessary if it were possible to rewrite the PSI driver to be more ** general and allow non-crashing exits out of loops; somebody who ** knows how to do this should do it. ** ** C. David Sherrill ** University of California, Berkeley ** April 1998 ** ** ** Modification History: ** ** - Modified 10 February 1999 by C. David Sherrill - ** Added the ability to parse the orbital optimization log file (file14) ** so this information can be used to allow looser convergence on the ** CI during early iterations. ** */ #include #include #include #include #include #include #include "setup_io.h" extern "C" { FILE *infile, *outfile; char *psi_file_prefix; } namespace psi { namespace detcasman { #define MAX_COMMENT 10 void title(void); void quote(void); double calc_ci_conv(double scale, double *energy); void print_mos_aobasis(void); }} // end namespace psi::detcasman using namespace psi::detcasman; int main(int argc, char *argv[]) { int converged = 0; int i, errcod = 0; char *wfn; /* wavefunction type */ int ncasiter = 0; /* max cas iterations */ char detci_string[80]; /* string containing system call for DETCI */ char rmstring[100]; /* remove command for diis.dat, etc */ double ci_conv; /* desired CI convergence (changes dynamically during CAS opt) */ double scale_conv; /* CI convergence threshold = orbital gradient * scale_conv */ double energy_last; /* last CI energy */ init_io(argc,argv); /* open input and output files */ title(); /* print program identification */ ncasiter = 30; errcod = ip_data("NCASITER","%d",&ncasiter,0); scale_conv = 0.01; errcod = ip_data("SCALE_CONV","%lf",&scale_conv,0); errcod = ip_string("WFN", &wfn,0); if (errcod == IPE_KEY_NOT_FOUND) { wfn = (char *) malloc(sizeof(char)*7); strcpy(wfn, "DETCAS"); } /* First iteration prints DETCI information */ ci_conv = calc_ci_conv(scale_conv, &energy_last); if (ci_conv > 1.0E-7) { sprintf(detci_string, "detci -c %12.9lf\n", ci_conv); } else sprintf(detci_string, "detci \n"); check(!system("transqt2 --quiet"), "TRANSQT2 failed"); check(!system(detci_string), "DETCI failed"); check(!system("clag --quiet"), "CLAG failed"); converged = system("detcas --quiet"); for (i=1; i 1.0E-7) { sprintf(detci_string, "detci --quiet -c %12.9lf\n", ci_conv); } else sprintf(detci_string, "detci --quiet\n"); check(!system("transqt2 --quiet"), "TRANSQT2 failed"); check(!system(detci_string), "DETCI failed"); check(!system("clag --quiet"), "CLAG failed"); converged = system("detcas --quiet"); } fprintf(outfile,"\n"); fprintf(outfile,"*******************************************************\n"); if (converged) { fprintf(outfile," ORBITALS CONVERGED\n"); fprintf(outfile,"\n * %s total energy = %17.12lf\n", wfn, energy_last); } else fprintf(outfile," ORBITALS DID NOT CONVERGE\n"); if (converged) { sprintf(rmstring, "rm -f %s.%s %s.%s %s.%s", psi_file_prefix, "diis.dat", psi_file_prefix, "orbs.dat", psi_file_prefix, "thetas.dat"); system(rmstring); } quote(); close_io(); return(!converged); } namespace psi { namespace detcasman { /* ** title(): Function prints a program identification */ void title(void) { fprintf(outfile,"\n"); fprintf(outfile,"*******************************************************\n"); fprintf(outfile," D E T C A S M A N\n"); fprintf(outfile,"\n"); fprintf(outfile," C. David Sherrill\n") ; fprintf(outfile," October 7 1998\n") ; fprintf(outfile,"*******************************************************\n"); fprintf(outfile,"\n\n\n"); fflush(outfile); } void quote(void) { fprintf(outfile,"\n"); fprintf(outfile," DETCAS MANAGER EXITING\n"); fprintf(outfile,"*******************************************************\n"); fprintf(outfile,"\n\n\n"); fflush(outfile); } /* ** Read the current orbital convergence from file14 */ double calc_ci_conv(double scale_conv, double *energy_last) { FILE *sumfile; char sumfile_name[] = "file14.dat"; char comment[MAX_COMMENT]; int i, entries, iter, nind; double scaled_rmsgrad, rmsgrad; double tval; ffile_noexit(&sumfile,sumfile_name,2); if (sumfile == NULL) { return(scale_conv * 0.1); } if (fscanf(sumfile, "%d", &entries) != 1) { fprintf(outfile,"detcasman: Trouble reading num entries in file %s\n", sumfile_name); fclose(sumfile); return(scale_conv * 0.1); } for (i=0; i memcpy(d,s,n) bcopy(static_cast(usotbf[so_offset]),static_cast(usotbf_blk[0]),num_so*num_bf*sizeof(double)); */ memcpy(static_cast(usotbf_blk[0]),static_cast(usotbf[so_offset]),num_so*num_bf*sizeof(double)); double** mo_coeffs_bf = block_matrix(num_bf,num_mo); mmult(usotbf_blk,1,mo_coeffs_blk,0,mo_coeffs_bf,0,num_bf,num_so,num_mo,0); fprintf(outfile, "\n\tCASSCF MO vectors for irrep %s\n", irrep_labels[h]); print_mat(mo_coeffs_bf, num_bf, num_mo, outfile); free_block(mo_coeffs_blk); free_block(usotbf_blk); free_block(mo_coeffs_bf); } so_offset += num_so; } chkpt_close(); free_block(usotbf); } }} // end namespace psi::detcasman psi3/src/bin/detcasman/globals.h0000644000101500007650000000176110754663017015311 0ustar crawdad/*! \file \ingroup DETCASMAN \brief Enter brief description of file here */ /* ** GLOBALS.H ** ** List of all the global data used by the program ** ** Note that these are given as "extern", so they must be defined ** in the main program! ** ** C. David Sherrill ** University of California, Berkeley */ #ifndef _psi_src_bin_detcasman_globals_h_ #define _psi_src_bin_detcasman_globals_h_ extern "C" { extern FILE *infile, *outfile; extern char *psi_file_prefix; } namespace psi { namespace detcasman { extern int converged; extern int ncasiter; /* max cas iterations */ extern char detci_string[80]; /* string containing system call for DETCI */ extern double ci_conv; /* desired CI convergence (changes dynamically during CAS opt) */ extern double scale_conv; /* CI convergence threshold = orbital gradient * scale_conv */ }} // end namespace psi::detcasman #endif // header guard psi3/src/bin/detcasman/Makefile.in0000644000101500007650000000066411112606114015543 0ustar crawdadsrcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars PSILIBS = -lPSI_qt -lPSI_ciomr -lPSI_ipv1 -lPSI_chkpt -lPSI_psio CSRC = CXXSRC = detcasman.cc setup_io.cc BINOBJ = $(CSRC:%.c=%.o) $(CXXSRC:%.cc=%.o) include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: detcasman.1 $(MKDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_INCLUDE) $^ $(DESTDIR)$(mandir)/man1 psi3/src/bin/detcasman/setup_io.cc0000644000101500007650000000335611112564564015651 0ustar crawdad/*! ** \file ** \ingroup DETCASMAN ** \brief Set up and shut down I/O for detcasman ** ** C. David Sherrill ** University of California, Berkeley ** April 1998 */ #include #include #include #include #include #include #include "globals.h" namespace psi { namespace detcasman { /*! ** init_io(): Function opens input and output files ** ** \param argc = number of arguments from main ** \param argv = argument list from main ** ** Returns: none ** \ingroup detcasman */ void init_io(int argc, char *argv[]) { int i; int num_extra_args=0; char **extra_args; extra_args = (char **) malloc(argc*sizeof(char *)); for (i=1; i #include #include #include #include "structs.h" #include "globals.h" namespace psi { namespace detci { /* DEFINES */ #define MAX_EL 30 #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) /* PROTOS */ extern int subgr_lex_addr(struct level *head, int *occs, int nel, int norb); void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); void b2bgen1(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct level *subgr_head, int len, int ijsym, int nel, int ras1_lvl, int ras3_lvl, int ras4_lvl); void b2bgen2(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct level *subgr_head, int up, int down, int len, int ijsym, int nel, int ras1_lvl, int ras3_lvl, int ras4_lvl); /* ** b2brepl ** ** Generate block to block single replacements on the fly. ** Generates replacements from strings I in list Ilist to strings J in ** list Jlist. ** ** Parameters: ** occs = array of occupied orbitals for each string I ** Jcnt = array to hold number of replacements for each string I ** Jij = matrix of ij's to all J's for each I (Jij[I][J]) ** Joij = matrix of olsen ij's to all J's for each I (Joij[I][J]) ** Jridx = matrix of relative indices of resultant strings J, ** i.e. J'[J] = Jridx[I][J] where J' is the proper address of J ** Jsgn = matrix of signs as above ** Graph = Olsen Graph for the relevant strings ** Ilist = list number for I's ** Jlist = list number for J's ** len = length of occs array (how many I strings) ** ** David Sherrill ** August 1995 */ void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len) { int I_n1, I_n2, I_n3, I_n4; int J_n1, J_n2, J_n3, J_n4; int D_n1, D_n2, D_n3, D_n4; int Ilist_ir, Jlist_ir; int nel,Icode,Jcode,ijsym,up,down; struct level *subgr_head; /* zero out Jcnt so there's no mistake */ zero_int_array(Jcnt, len); /* get pointer to subgraph */ Icode = Ilist % Graph->subgr_per_irrep; Jcode = Jlist % Graph->subgr_per_irrep; Ilist_ir = Ilist / Graph->subgr_per_irrep; Jlist_ir = Jlist / Graph->subgr_per_irrep; subgr_head = Graph->sg[Jlist_ir][Jcode].lvl; /* first figure out how many electrons in RAS I, II, III, IV for * each of the blocks */ nel = Graph->num_el_expl; I_n1 = Graph->encode[0][Icode]; I_n3 = Graph->encode[1][Icode]; I_n4 = Graph->encode[2][Icode]; I_n2 = nel - I_n1 - I_n3 - I_n4; J_n1 = Graph->encode[0][Jcode]; J_n3 = Graph->encode[1][Jcode]; J_n4 = Graph->encode[2][Jcode]; J_n2 = nel - J_n1 - J_n3 - J_n4; if (I_n1 < 0 || I_n2 < 0 || I_n3 < 0 || J_n1 < 0 || J_n2 < 0 || J_n3 < 0 || I_n4 < 0 || J_n4 < 0) { printf("b2brepl: got less than 1 electron in a partition\n"); return; } /* now figure out the differences */ D_n1 = J_n1 - I_n1; D_n2 = J_n2 - I_n2; D_n3 = J_n3 - I_n3; D_n4 = J_n4 - I_n4; /* are these ok? */ if (abs(D_n1) + abs(D_n2) + abs(D_n3) + abs(D_n4) > 2) return; /* get ijsym */ ijsym = Ilist_ir ^ Jlist_ir; /* figure out the case */ if (D_n1 == 0 && D_n2 == 0 && D_n3 == 0 && D_n4 == 0) { b2bgen1(occs,Jcnt,Jij,Joij,Jridx,Jsgn,subgr_head,len,ijsym,nel, Graph->ras1_lvl, Graph->ras3_lvl, Graph->ras4_lvl); } else { /* figure out which is 1 and which is -1 */ if (D_n1 == 1) up = 0; else if (D_n2 == 1) up = 1; else if (D_n3 == 1) up = 2; else if (D_n4 == 1) up = 3; if (D_n1 == -1) down = 0; else if (D_n2 == -1) down = 1; else if (D_n3 == -1) down = 2; else if (D_n4 == -1) down = 3; b2bgen2(occs,Jcnt,Jij,Joij,Jridx,Jsgn,subgr_head,up,down,len,ijsym,nel, Graph->ras1_lvl, Graph->ras3_lvl, Graph->ras4_lvl); } } /* ** b2bgen1: Generate all single replacements going to another block ** in which the number of electrons in each RAS partition must ** remain constant (i.e. staying in same code, maybe irrep changes) ** */ void b2bgen1(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct level *subgr_head, int len, int ijsym, int nel, int ras1_lvl, int ras3_lvl, int ras4_lvl) { int I; int O[MAX_EL], T[MAX_EL], ras_occs[4][MAX_EL], ecnt[4]; int i,j,k,l,m,ij,oij,orb,r1cnt,r2cnt,r3cnt,r4cnt; int isym,jsym; int cnt,ridx,norb; signed char sgn; int ras,hole,part,abshole,hops,iused; int **ras_orbs[4], **ras_opi; for (i=0; i<4; i++) ras_orbs[i] = CalcInfo.ras_orbs[i]; ras_opi = CalcInfo.ras_opi; norb = CalcInfo.num_ci_orbs; /* loop over strings */ for (I=0; I= ras3_lvl && orb < ras4_lvl) ras_occs[2][r3cnt++] = orb; else if (orb >= ras4_lvl) ras_occs[3][r4cnt++] = orb; else ras_occs[1][r2cnt++] = orb; } ecnt[0] = r1cnt; ecnt[1] = r2cnt; ecnt[2] = r3cnt; ecnt[3] = r4cnt; /* do diagonals first */ if (ijsym == 0) { ridx = subgr_lex_addr(subgr_head, O, nel, norb); if (ridx < 0) { printf("b2bgen1: invalid string index = %d\n", ridx); continue; } for (k=0; k=ras3_lvl && orb= ras4_lvl) ras_occs[3][r4cnt++] = orb; else ras_occs[1][r2cnt++] = orb; } ecnt[0] = r1cnt; ecnt[1] = r2cnt; ecnt[2] = r3cnt; ecnt[3] = r4cnt; ras_occs_excite = ras_occs[down]; ras_occs_virt = ras_occs[up]; ras_opi = CalcInfo.ras_opi[up]; ras_orbs = CalcInfo.ras_orbs[up]; for (hole=0; holenirreps; ncodes = Graph->subgr_per_irrep; fprintf(outfile,"\nTesting block to block single-replacements b2brepl()\n"); for (Iirrep=0,Ilistnum=0; Iirrepsg[Iirrep] + Icode; if (!Isubgraph->num_strings) continue; for (Jirrep=0,Jlistnum=0; Jirrepsg[Jirrep] + Jcode; if (!Jsubgraph->num_strings) continue; b2brepl(occs[Ilistnum], Jcnt, Jij, Joij, Jridx, Jsgn, Graph, Ilistnum, Jlistnum, Isubgraph->num_strings); for (i=0; inum_strings; i++) { fprintf(outfile, "\nString %4d (",i); for (j=0; jnum_el_expl; j++) { fprintf(outfile, "%2d ", (int) occs[Ilistnum][i][j]); } fprintf(outfile, ")\n Links:\n") ; for (j=0; j #include #include "ci_tol.h" #include "structs.h" #include "globals.h" namespace psi { namespace detci { /* ** calc_d() ** ** Function calculates a block of the numerators for the Davidson ** algorithm correction vector d. ** ** Parameters: ** target = array to store result ** alpha = coefficient ** sigma = sigma block ** lambda = energy coefficient ** c = c vector block ** size = size of block ** ** Returns: none */ void calc_d(double *target, double alpha, double *sigma, double lambda, double *c, int size) { register int i; double tval; for (i=0; i HD_MIN) { tval2 = (target[i] /= tval); norm += tval2 * tval2; } else target[i] = 0.0; } return(norm); } /* ** calc_mpn_vec() ** ** Function calculates a block of the denominators for the kth order ** wavefunction in a perturbation series ** ** Parameters: ** target = array to store result ** energy = energy ** Hd = Diagonal Hamiltonian block ** size = size of block ** sign1 = sign1*E + sign2*Hd ** sign2 = sign1*E + sign2*Hd ** ** Returns: sum of squares of coefficients */ double calc_mpn_vec(double *target, double energy, double *Hd, int size, double sign1, double sign2, int precon) { register int i; double norm = 0.0, tval, tval2; for (i=0; i #include #include #include #include "structs.h" #include "globals.h" namespace psi { namespace detci { extern int calc_orb_diff(int cnt, unsigned char *I, unsigned char *J, int *I_alpha_diff, int *J_alpha_diff, int *sign, int *same, int extended); extern int *ioff; /* C "GLOBAL" VARIABLES FOR THIS MODULE */ extern struct stringwr **alplist; extern struct stringwr **betlist; #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) /* ** calc_hd_block(): Function calculates a block of H0, the diagonal elements of ** the Hamiltonian matrix. ** ** Parameters: ** alplist_local = list of alpha strings with replacements (used to get occs) ** betlist_local = list of beta strings with replacements ** nas = number of alpha strings in list ** nbs = number of beta strings in list ** H0 = matrix to hold results (stored as H0[alpidx][betidx]) ** oei = one-electron integrals ** tei = two-electron integrals ** na = number of explicit alpha electrons ** nb = number of explicit beta electrons ** nbf = number of orbitals in CI ** efzc = frozen core energy ** */ void calc_hd_block(struct stringwr *alplist_local, struct stringwr *betlist_local, double **H0, double *oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf) { int acnt, bcnt; int a1, a2, b1, b2; int i,j, ii, iii, jj, ij, iijj, ijij; double value; struct stringwr *betlist0; betlist0 = betlist_local; for (acnt=0; acntoccs[a1]; ii = ioff[i] + i; value += oei[ii]; /* fprintf(outfile,"oei[%d] = %lf\n",ii,oei[ii]); */ iii = ioff[ii]; for (a2=0; a2occs[a2]; jj = ioff[j] + j; iijj = iii + jj; ij = ioff[i] + j; ijij = ioff[ij] + ij; value += tei[iijj] - tei[ijij]; } for (b1=0; b1occs[b1]; jj = ioff[j] + j; iijj = ioff[MAX0(ii,jj)] + MIN0(ii,jj); value += tei[iijj]; } } for (b1=0; b1occs[b1]; ii = ioff[i] + i; value += oei[ii]; iii = ioff[ii]; for (b2=0; b2occs[b2]; jj = ioff[j] + j; iijj = iii + jj; ij = ioff[i] + j; ijij = ioff[ij] + ij; value += tei[iijj] - tei[ijij]; } } H0[acnt][bcnt] = value; /* fprintf(outfile,"H0[%d][%d] = %lf\n",acnt,bcnt,value); */ betlist_local++; } /* end loop over bcnt */ alplist_local++; } } /* ** calc_hd_block_ave(): Function calculates a block of H0 and the diagonal elements ** of the Hamiltonian matrix averaged over spin-coupling sets to correct any ** spin contamination of the c and sigma vectors. ** ** Parameters: ** alplist_local = list of alpha strings with replacements (used to get occs) ** betlist_local = list of beta strings with replacements ** nas = number of alpha strings in list ** nbs = number of beta strings in list ** H0 = matrix to hold results (stored as H0[alpidx][betidx]) ** oei = one-electron integrals ** tei = two-electron integrals ** na = number of explicit alpha electrons ** nb = number of explicit beta electrons ** nbf = number of orbitals in CI ** efzc = frozen core energy ** */ void calc_hd_block_ave(struct stringwr *alplist_local, struct stringwr *betlist_local, double **H0, double *tf_oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf) { int acnt, bcnt; int a1, a2, a3, b1, b2, b3; int i,j, ii, iii, jj, ij, iijj, ijij; double value, tval, tval2, Kave; struct stringwr *betlist0; double k_total; /* total number of K ints in energy expression */ int k_combo; /* total combination of unique K ints over spin-coupling set */ int *unique_occs; /* the uniquely occupied orbitals for a given determinant */ int num_el; /* total number of electrons explicitly treated */ int num_unique; /* number of unique orbitals */ betlist0 = betlist_local; k_total = combinations(na,2) + combinations(nb,2); num_el = na + nb; unique_occs = init_int_array(num_el); for (acnt=0; acntoccs[a1]; ii = ioff[i] + i; /* h_ii bar alpha alpha */ value += tf_oei[ii]; /* fprintf(outfile,"tf_oei[%d] = %lf\n",ii,tf_oei[ii]); */ iii = ioff[ii]; /* loop over alpha occs */ for (a2=0; a2occs[a2]; jj = ioff[j] + j; iijj = iii + jj; /* J alpha alpha */ value += tei[iijj]; } /* loop over beta occs */ for (b1=0; b1occs[b1]; jj = ioff[j] + j; iijj = ioff[MAX0(ii,jj)] + MIN0(ii,jj); value += tei[iijj]; } } /* loop over beta occs */ for (b1=0; b1occs[b1]; ii = ioff[i] + i; value += tf_oei[ii]; /* fprintf(outfile,"tf_oei[%d] = %lf\n",ii,tf_oei[ii]); */ iii = ioff[ii]; /* loop over beta occs */ for (b2=0; b2occs[b2]; jj = ioff[j] + j; iijj = iii + jj; ij = ioff[i] + j; ijij = ioff[ij] + ij; value += tei[iijj]; } } /* determine average K over spin-coupling set */ num_unique = 0; for (a1=0; a1occs[a1]; /* for (j=0; joccs[b1]; for (a1=0; a1num_el) fprintf(outfile,"WARNING: The number of explicit electrons" \ "!= num_el\n"); /* for (j=0; joccs[j]); for (j=0; joccs[j]); for (j=0; j 1) Kave /= ioff[num_unique-1]; value -= 0.5 * Kave * k_total; /* fprintf(outfile,"Kave = %lf\n",Kave); */ if (Parameters.print_lvl > 5) { fprintf(outfile,"acnt = %d\t bcnt = %d\n",acnt,bcnt); fprintf(outfile,"tval = %lf\n",tval); for(a1=0; a1occs[a1]); fprintf(outfile," \n"); for(b1=0; b1occs[b1]); fprintf(outfile," \n"); } H0[acnt][bcnt] = value; /* fprintf(outfile,"H0[%d][%d] = %lf\n",acnt,bcnt,value); */ betlist_local++; } /* end loop over bcnt */ alplist_local++; } } /* ** calc_hd_block_orbenergy(): Function calculates a block of H0 and the diagonal elements ** of the Hamiltonian matrix as the sum of orbital energies. ** ** Parameters: ** alplist_local = list of alpha strings with replacements (used to get occs) ** betlist_local = list of beta strings with replacements ** nas = number of alpha strings in list ** nbs = number of beta strings in list ** H0 = matrix to hold results (stored as H0[alpidx][betidx]) ** oei = one-electron integrals ** tei = two-electron integrals ** na = number of explicit alpha electrons ** nb = number of explicit beta electrons ** nbf = number of orbitals in CI ** efzc = frozen core energy ** */ void calc_hd_block_orbenergy(struct stringwr *alplist_local, struct stringwr *betlist_local, double **H0, double *oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf) { int acnt, bcnt; int a1, b1, i,j; double value, tval; struct stringwr *betlist0, *alplist0; double *orb_e_diff_alp, *orb_e_diff_bet; double sum_orb_energies = 0.0; betlist0 = betlist_local; alplist0 = alplist_local; orb_e_diff_alp = init_array(nas); orb_e_diff_bet = init_array(nbs); /* if (Parameters.Ms0) orb_e_diff_bet = &orb_e_diff_alp; else orb_e_diff_bet = init_array(CalcInfo.num_bet_str); */ for (acnt=0; acntoccs[a1]; i += CalcInfo.num_fzc_orbs; if(Parameters.zaptn) orb_e_diff_alp[acnt] += CalcInfo.scfeigvala[i]; else orb_e_diff_alp[acnt] += CalcInfo.scfeigval[i]; } alplist_local++; } for (bcnt=0; bcntoccs[b1]; j += CalcInfo.num_fzc_orbs; if(Parameters.zaptn) orb_e_diff_bet[bcnt] += CalcInfo.scfeigvalb[j]; else orb_e_diff_bet[bcnt] += CalcInfo.scfeigval[j]; } betlist_local++; } alplist_local = alplist0; betlist_local = betlist0; for (acnt=0; acntoccs, orb_diff[0], orb_diff[1], &sign, jnk, 1); for (a1=0; a1occs, orb_diff[0], orb_diff[1], &sign, jnk, 1); for (b1=0; b1occs[a1]; ii = ioff[i] + i; i_offset = i + CalcInfo.num_fzc_orbs; oei_alp[acnt] += oei[ii]; orb_e_diff_alp[acnt] += CalcInfo.scfeigval[i_offset] - oei[ii]; } alplist_local++; } for (bcnt=0; bcntoccs[b1]; jj = ioff[j] + j; j_offset = j + CalcInfo.num_fzc_orbs; oei_bet[bcnt] += oei[jj]; orb_e_diff_bet[bcnt] += CalcInfo.scfeigval[j_offset] - oei[jj]; } betlist_local++; } alplist_local = alplist0; betlist_local = betlist0; for (acnt=0; acntoccs[a1]; value += CalcInfo.scfeigval[i+CalcInfo.num_fzc_orbs]; ii = ioff[i] + i; /* h_ii bar alpha alpha */ iii = ioff[ii]; /* loop over alpha occs */ for (a2=0; a2occs[a2]; jj = ioff[j] + j; iijj = iii + jj; /* J alpha alpha */ value -= pert_param * tei[iijj]; } /* loop over beta occs */ for (b1=0; b1occs[b1]; jj = ioff[j] + j; iijj = ioff[MAX0(ii,jj)] + MIN0(ii,jj); value -= pert_param * tei[iijj]; } } /* loop over beta occs */ for (b1=0; b1occs[b1]; value += CalcInfo.scfeigval[i+CalcInfo.num_fzc_orbs]; ii = ioff[i] + i; iii = ioff[ii]; /* loop over beta occs */ for (b2=0; b2occs[b2]; jj = ioff[j] + j; iijj = iii + jj; ij = ioff[i] + j; ijij = ioff[ij] + ij; value -= pert_param * tei[iijj]; } } /* determine average K over spin-coupling set */ num_unique = 0; for (a1=0; a1occs[a1]; /* for (j=0; joccs[b1]; for (a1=0; a1num_el) fprintf(outfile,"WARNING: The number of explicit electrons" \ "!= num_el\n"); /* for (j=0; joccs[j]); for (j=0; joccs[j]); for (j=0; j 1) Kave /= ioff[num_unique-1]; value += 0.5 * Kave * k_total * pert_param; /* fprintf(outfile,"Kave = %lf\n",Kave); */ if (Parameters.print_lvl > 5) { fprintf(outfile,"acnt = %d\t bcnt = %d\n",acnt,bcnt); fprintf(outfile,"tval = %lf\n",tval); for(a1=0; a1occs[a1]); fprintf(outfile," \n"); for(b1=0; b1occs[b1]); fprintf(outfile," \n"); } H0[acnt][bcnt] = value; /* fprintf(outfile,"H0[%d][%d] = %lf\n",acnt,bcnt,value); */ betlist_local++; } /* end loop over bcnt */ alplist_local++; } } }} // namespace psi::detci psi3/src/bin/detci/calc_pt_block.cc0000644000101500007650000000626010757640026015731 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ #define EXTERN #include #include #include #include "structs.h" #include "globals.h" namespace psi { namespace detci { extern int *ioff; extern struct stringwr **alplist; extern struct stringwr **betlist; #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) /* ** calc_pt_block(): Function calculates the 2nd order perturbation theory ** correction to a block of the CI vector assuming all corrections ** involve excitations to the external orbitals only ** ** C. David Sherrill ** Feburary 2004 */ void calc_pt_block(struct stringwr *alplist_local, struct stringwr *betlist_local, double **C, int nas, int nbs) { int na; /* number of alpha electrons */ int nb; /* number of beta electrons */ int acnt, bcnt /* row (acnt) and column (bcnt) of block */ int first_external; /* first external orbital for PT */ int last_external; /* last external orbital for PT */ int a1, a2, b1, b2; /* string indices */ int i, j; /* internal orbitals */ int A, B; /* external orbitals */ int Ai, Aj, Bi, Bj; /* integral lookup indices */ int AiBj, AjBi; /* more integral lookup indices */ struct stringwr *betlist0; /* to reset the beta list for every alpha row */ double Cval; /* CI coefficient */ betlist0 = betlist_local; /* loop over all the elements of the block */ for (acnt=0; acntoccs[a1]; for (a2=0; a2occs[a2]; /* i > j */ for (A=first_external; A<=last_external; A++) { Ai = ioff[A]+i; Aj = ioff[A]+j; for (B=first_external; B B */ /* matrix element , will square so sign no matter */ /* = - = (Ai|Bj)-(Aj|Bi) */ Bj = ioff[B]+j; Bi = ioff[B]+i; AiBj = ioff[Ai]+Bj; AjBi = ioff[Aj]+Bi; value = tei[AiBj] - tei[AjBi]; value *= value; value *= Cval; value /= denom; } /* end loop over B */ } /* end loop over A */ } /* end loop over j */ } /* end loop over i */ betlist_local++; } /* end loop over beta list */ alplist_local++; } /* end loop over alpha list */ } }} // namespace psi::detci psi3/src/bin/detci/check_energy.cc0000644000101500007650000001163510757640026015602 0ustar crawdad/*! \file \ingroup DETCI \brief Check the SCF energy */ #include #include namespace psi { namespace detci { #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) extern int *ioff ; void scf_energy(double *H, double *TE, double *energy_1, double *energy_2, double *energy_e, int *docc, int *frozen_docc, int fzc_flag, int nirreps, int *reorder, int *opi); /*! ** check_energy(): check the SCF energy by calculating it from the two-electr. ** integrals in the MO basis ** ** \param H = lwr tri of one-electron integrals matrix (MO basis) ** \param twoel_ints = two electron integrals (lexically indexed, MO basis) ** \param nocc = num occupied orbitals (assume closed shell case) and ** exclude frozen core ** \param escf = scf energy to compare to ** \param enuc = nuclear repulsion energy ** \param efzc = frozen core energy ** \param nirreps = number of irreps ** \param reorder = reordering array for Pitzer->CI ordering ** \param opi = orbs per irrep in Pitzer ordering ** \param outfile = file to write output to ** ** Returns: the computed SCF energy ** \ingroup DETCI */ double check_energy(double *H, double *twoel_ints, int *docc, int *frozen_docc, int fzc_flag, double escf, double enuc, double efzc, int nirreps, int *reorder, int *opi, int print_lvl, FILE *outfile) { double energy_1 ; /* one-electron energy */ double energy_2 ; /* two-electron energy */ double energy_e ; /* total electronic energy */ scf_energy(H, twoel_ints, &energy_1, &energy_2, &energy_e, docc, frozen_docc, fzc_flag, nirreps, reorder, opi); if (print_lvl) { fprintf(outfile,"\nCheck SCF Energy from 1- and 2-electron integrals\n\n"); fprintf(outfile,"SCF Energy (ref): %16.10lf\n", escf) ; fprintf(outfile,"Nuclear repulsion energy: %16.10lf\n", enuc) ; fprintf(outfile,"One-electron energy: %16.10lf\n", energy_1) ; fprintf(outfile,"Two-electron energy: %16.10lf\n", energy_2) ; fprintf(outfile,"Frozen core energy: %16.10lf\n", efzc) ; fprintf(outfile,"Total electronic energy: %16.10lf\n", energy_e+efzc) ; fprintf(outfile,"Total SCF energy: %16.10lf\n", enuc + energy_e + efzc) ; if (fabs(enuc + efzc + energy_e - escf) > 0.00000001) { fprintf(outfile, "\n*** Calculated Energy Differs from SCF Energy in CHKPT ! ***\n") ; } } return(enuc+efzc+energy_e); } /*! ** scf_energy(): Function calculates the SCF energy from the one- and ** two-electron integrals in MO form (closed-shell case). ** ** David Sherrill, Sept 1993 ** ** \param H = Matrix of one-electron integrals in MO basis (lwr triangle) ** \param TE = Two-electron integrals in MO basis, stored in ** ijkl-indexed array ** \param energy_1 = pointer to hold one-electron energy ** \param energy_2 = pointer to hold two-electron energy ** \param energy_e = pointer to hold total electronic energy (sum of two ** terms above) ** \param docc = array of doubly-occupied orbitals per irrep ** \param frozen_docc = array of frozen doubly-occupied orbitals per irrep ** \param fzc_flag = remove explicit consideration of frozen core orbitals ? ** \param nirreps = number of irreps ** \param reorder = reordering array Pitzer->CI order ** \param opi = orbitals per irrep ** ** Returns: none ** ** \ingroup DETCI */ void scf_energy(double *H, double *TE, double *energy_1, double *energy_2, double *energy_e, int *docc, int *frozen_docc, int fzc_flag, int nirreps, int *reorder, int *opi) { int irrep, irrep2, d, d2, offset, offset2, ndoc, ndoc2, nfzc, nfzc2, totfzc; int i, j; int ii, jj, iijj, ij, ijij, iiii; *energy_1 = *energy_2 = *energy_e = 0.0; totfzc=0; if (fzc_flag) { for (irrep=0; irrep0) offset += opi[irrep-1]; ndoc = docc[irrep]; if (fzc_flag) { nfzc = frozen_docc[irrep]; ndoc -= nfzc; } else nfzc=0; for (d=offset+nfzc; d0) offset2 += opi[irrep2-1]; ndoc2 = docc[irrep2]; if (fzc_flag) { nfzc2 = frozen_docc[irrep2]; ndoc2 -= nfzc2; } else nfzc2=0; for (d2=offset2+nfzc2; d2 #include #include #include #include #include #include "structs.h" #include "globals.h" #include "ci_tol.h" #include "civect.h" namespace psi { namespace detci { extern void calc_hd_block(struct stringwr *alplist, struct stringwr *betlist, double **H0, double *oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void calc_hd_block_ave(struct stringwr *alplist, struct stringwr *betlist, double **H0, double *tf_oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void calc_hd_block_z_ave(struct stringwr *alplist, struct stringwr *betlist, double **H0, double pert_param, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void calc_hd_block_orbenergy(struct stringwr *alplist, struct stringwr *betlist, double **H0, double *oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void calc_hd_block_mll(struct stringwr *alplist, struct stringwr *betlist, double **H0, double *oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void calc_hd_block_evangelisti(struct stringwr *alplist, struct stringwr *betlist, double **H0, double *tf_oei, double *tei, double efzc, int nas, int nbs, int na, int nb, int nbf); extern void s1_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s2_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas); extern void s1_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s1_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs); extern void s2_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas); extern void s2_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nbs); extern void s3_block(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list); extern void s3_block_diag(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list); extern void s3_block_diag_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs); extern void s3_block_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs); extern void transp_sigma(double **a, int rows, int cols, int phase); extern void H0block_gather(double **mat, int al, int bl, int cscode, int mscode, int phase); extern double buf_xy1(double *c, double *hd, double E, int len); extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); extern void b2brepl_test(unsigned char ***occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph); extern void xey(double *x, double *y, int size); extern void xeay(double *x, double a, double *y, int size); extern void xpeay(double *x, double a, double *y, int size); extern void xpey(double *x, double *y, int size); extern void xeax(double *x, double a, int size); extern void xexmy(double *x, double *y, int size); extern void calc_d(double *target, double alpha, double *sigma, double lambda, double *c, int size); extern double calc_d2(double *target, double lambda, double *Hd, int size, int precon); extern double calc_mpn_vec(double *target, double energy, double *Hd, int size, double sign1, double sign2, int precon); extern void xeaxmy(double *x, double *y, double a, int size); extern void xeaxpby(double *x, double *y, double a, double b, int size); extern void xexy(double *x, double *y, int size); extern void buf_ols_denom(double *a, double *hd, double E, int len); extern void buf_ols_updt(double *a, double *c, double *norm, double *ovrlap, double *c1norm, int len, FILE *outfile); extern int H0block_calc(double E); extern double ssq(struct stringwr *alplist, struct stringwr *betlist, double **CL, double **CR, int nas, int nbs, int Ja_list, int Jb_list); extern unsigned char ***Occs; extern struct olsen_graph *AlphaG; extern struct olsen_graph *BetaG; extern void H0block_coupling_calc(double E, struct stringwr **alplist, struct stringwr **betlist); CIvect::CIvect() // Default constructor { vectlen = 0; num_blocks = 0; icore = 1; Ms0 = 0; Ia_code = NULL; Ib_code = NULL; Ia_size = NULL; Ib_size = NULL; offset = NULL; num_alpcodes = 0; num_betcodes = 0; nirreps = 0; codes_per_irrep = 0; buf_per_vect = 0; buf_total = 0; new_first_buf = 0; maxvect = 0; nvect = 0; nunits = 0; cur_vect = -1; cur_buf = -1; buffer_size = 0; units = NULL; file_number = NULL; buf_size = NULL; buf2blk = NULL; buf_offdiag = NULL; first_ablk = NULL; last_ablk = NULL; decode = NULL; blocks = NULL; zero_blocks = NULL; buf_locked = 0; buffer = NULL; in_file = 0; extras = 0; units_used = 0; cur_unit = 0; cur_size = 0; first_unit = 0; } CIvect::CIvect(BIGINT vl, int nb, int incor, int ms0, int *iac, int *ibc, int *ias, int *ibs, BIGINT *offs, int nac, int nbc, int nirr, int cdpirr, int mxv, int nu, int funit, int *fablk, int *lablk, int **dc) { vectlen = 0; num_blocks = 0; icore = 1; Ms0 = 0; Ia_code = NULL; Ib_code = NULL; Ia_size = NULL; Ib_size = NULL; offset = NULL; num_alpcodes = 0; num_betcodes = 0; nirreps = 0; codes_per_irrep = 0; buf_per_vect = 0; buf_total = 0; maxvect = 0; nvect = 0; nunits = 0; cur_vect = -1; cur_buf = -1; buffer_size = 0; units = NULL; file_number = NULL; buf_size = NULL; buf2blk = NULL; buf_offdiag = NULL; first_ablk = NULL; last_ablk = NULL; decode = NULL; blocks = NULL; zero_blocks = NULL; buf_locked = 0; buffer = NULL; in_file = 0; extras = 0; units_used = 0; cur_unit = 0; cur_size = 0; set(vl, nb, incor, ms0, iac, ibc, ias, ibs, offs, nac, nbc, nirr, cdpirr, mxv, nu, funit, fablk, lablk, dc); buffer = buf_malloc(); blocks[0][0] = buffer; buf_lock(buffer); } void CIvect::set(BIGINT vl, int nb, int incor, int ms0, int *iac, int *ibc, int *ias, int *ibs, BIGINT *offs, int nac, int nbc, int nirr, int cdpirr, int mxv, int nu, int fu, int *fablk, int *lablk, int **dc) { int i,j,ij,k,l; int maxrows = 0, maxcols = 0; unsigned long bufsize, maxbufsize; unsigned long size, cur_offset; static int first=1; /* int in_file, extras, units_used, cur_unit; */ vectlen = vl; num_blocks = nb; icore = incor; Ms0 = ms0; nirreps = nirr; codes_per_irrep = cdpirr; maxvect = mxv; nvect = 1; nunits = nu; if (nunits) units = init_int_array(nunits); first_unit = fu; for (i=0; i maxvect) nvect = maxvect; size = vectlen; /* may want to change for Ms=0 later */ for (i=0; i Ib_code[j]/codes_per_irrep) buf_per_vect++; } buf2blk = init_int_array(buf_per_vect); buf_offdiag = init_int_array(buf_per_vect); for (i=0,j=0; i Ib_code[k]/codes_per_irrep) { buf_offdiag[j] = 1; buf2blk[j] = i; j++; } } buf_total = maxvect * buf_per_vect; buf_size = (unsigned long *) malloc(buf_per_vect * sizeof(unsigned long)); for (i=0; i= Ib_code[i] && Ia_size[i]>0 && Ib_size[i]>0) buf_per_vect++; } } else { for (i=0; i 0 && Ib_size[i] > 0) buf_per_vect++; } } buf_total = buf_per_vect * maxvect; buf2blk = init_int_array(buf_per_vect); buf_offdiag = init_int_array(buf_per_vect); buf_size = (unsigned long *) malloc(buf_per_vect * sizeof(unsigned long)); if (Ms0) { for (i=0,j=0; i= Ib_code[i] && Ia_size[i]>0 && Ib_size[i]>0) { buf2blk[j] = i; buf_size[j] = (unsigned long) Ia_size[i] * (unsigned long) Ib_size[i]; if (Ia_code[i] != Ib_code[i]) buf_offdiag[j] = 1; j++; } } } else { for (i=0,j=0; i0 && Ib_size[i]>0) { buf2blk[j] = i; buf_size[j] = (unsigned long) Ia_size[i] * (unsigned long) Ib_size[i]; j++; } } } } /* end icore==0 */ file_number = init_int_array(buf_total); if (nunits) { in_file = 0; extras = buf_total % nunits; units_used = 0; cur_unit = units[0]; for (i=0; i maxbufsize) maxbufsize = bufsize; } for (i=0; i maxrows) maxrows = Ia_size[i]; if (Ib_size[i] > maxcols) maxcols = Ib_size[i]; if (Ia_size[i]) blocks[i] = (double **) malloc (Ia_size[i] * sizeof(double *)); else blocks[i] = (double **) malloc (sizeof(double *)); bufsize = (unsigned long) Ia_size[i] * (unsigned long) Ib_size[i]; if (bufsize > maxbufsize) maxbufsize = bufsize; } // CDS 11/5/97: Revise buffer_size, the size of the biggest buffer // buffer_size = maxrows * maxcols; Made buffers too large buffer_size = maxbufsize; // Why didn't I do it this way before? } /* end icore==0 */ else { printf("CIvect::set(): unrecognized option for icore = %d\n", icore); return; } // MLL 5/7/98: Want to know the subblock length of a vector // if (first) { if (Parameters.print_lvl) { fprintf(outfile,"\n CI vector/subblock length = %ld\n", buffer_size); fflush(outfile); } first=0; } } CIvect::~CIvect() { int i; if (num_blocks) { if (buf_locked) free(buffer); for (i=0; i vectlen) len = vectlen; if (icore == 1) { aptr = buffer; for (i=0; i 0.0) && (neg_only)) continue; abs_value = fabs(value); if (abs_value >= fabs(minval)) { for (m=0; m fabs(coeff[m])) { for (n=nval-1; n>m; n--) { coeff[n] = coeff[n-1]; iac[n] = iac[n-1]; ibc[n] = ibc[n-1]; iaidx[n] = iaidx[n-1]; ibidx[n] = ibidx[n-1]; } coeff[n] = value; iac[n] = iacode; ibc[n] = ibcode; iaidx[n] = j; ibidx[n] = k; break; } } H0block.spin_cp_vals = minval; minval = coeff[nval-1]; } if (offdiag) { if (Parameters.Ms0 && ((int) Parameters.S % 2) && (!neg_only)) value -= value; if (abs_value >= minval) { for (m=0; m fabs(coeff[m])) { for (n=nval-1; n>m; n--) { coeff[n] = coeff[n-1]; iac[n] = iac[n-1]; ibc[n] = ibc[n-1]; iaidx[n] = iaidx[n-1]; ibidx[n] = ibidx[n-1]; } coeff[n] = value; iac[n] = ibcode; ibc[n] = iacode; iaidx[n] = k; ibidx[n] = j; break; } } H0block.spin_cp_vals = minval; minval = coeff[nval-1]; } } } } /* for (i=0; i det) break; } *alp_code = Ia_code[i]; *bet_code = Ib_code[i]; *alp_idx = (int) ((det - offset[i]) / (BIGINT) Ib_size[i]); *bet_idx = ((det - offset[i]) % (BIGINT) Ib_size[i]); } BIGINT CIvect::strings2det(int alp_code, int alp_idx, int bet_code, int bet_idx) { int blknum; BIGINT addr; blknum = decode[alp_code][bet_code]; addr = offset[blknum]; addr += alp_idx * Ib_size[blknum] + bet_idx; return(addr); } void CIvect::diag_mat_els(struct stringwr **alplist, struct stringwr **betlist, double *oei, double *tei, double efzc, int na, int nb, int nbf, int method) { int block, buf, iac, ibc, ias, ibs, irrep; double minval=0.0; if (icore == 1) { /* whole vector in-core */ for (block=0; block 100000) { fprintf(outfile, "Not printing long (>100000) vector...\n"); return; } if (icore == 0) { for (buf=0; buf= PARM_GUESS_VEC_H0_BLOCK... but these are now gathered from a symnorm so I'll comment this out CDS 8/03 if (Parameters.guess_vector == PARM_GUESS_VEC_H0_BLOCK) { for (i=0; i= PARM_GUESS_VEC_H0_BLOCK... but these are now gathered from a symnorm so I'll comment this out CDS 8/03 if (Parameters.guess_vector == PARM_GUESS_VEC_H0_BLOCK) { for (i=0; i bc) { /* off-diagonal block */ xeax(blocks[blk][0], a, Ia_size[blk] * Ib_size[blk]); upper = decode[bc][ac]; if (upper >= 0) { zero_blocks[upper] = zero_blocks[blk]; for (i=0; i bc) { /* off-diagonal block in lower triangle */ xeax(blocks[blk][0], a, Ia_size[blk] * Ib_size[blk]); upper = decode[bc][ac]; if (upper >= 0) { zero_blocks[upper] = zero_blocks[blk]; for (i=0; i bc) { /* off-diagonal block */ upper = decode[bc][ac]; if (upper >= 0) { zero_blocks[upper] = zero_blocks[blk]; for (i=0; i bc) { /* off-diagonal block in lower triangle */ upper = decode[bc][ac]; if (upper >= 0) { zero_blocks[upper] = zero_blocks[blk]; for (i=0; i= buf_total) buf -= buf_total; sprintf(key, "buffer %d", buf); unit = file_number[buf]; psio_read_entry((ULI) unit, key, (char *) buffer, size); cur_vect = ivect; cur_buf = ibuf; detci_time.read_after_time = wall_time_new(); detci_time.read_total_time += detci_time.read_after_time - detci_time.read_before_time; return(1); } /* ** CIvect::write(): Write a section of a CI vector to external storage. ** ** Parameters: ** ivect = vector number ** ibuf = buffer number (ibuf can specify an irrep or a subblock ** within an irrep, depending on the value of icore. If ** icore = 1, then ibuf is ignored.) ** ** Returns: 1 for success, 0 for failure */ int CIvect::write(int ivect, int ibuf) { int unit, buf, i; unsigned long int size; int blk; char key[20]; detci_time.write_before_time = wall_time_new(); if (nunits < 1) return(1); if (ivect >= maxvect) { fprintf(outfile, "(CIvect::write): ivect >= maxvect\n"); return(0); } if (ivect > nvect) { fprintf(outfile, "(CIvect::write): ivect > nvect\n"); return(0); } if (icore == 1) ibuf = 0; buf = ivect * buf_per_vect + ibuf; size = buf_size[ibuf] * (unsigned long int) sizeof(double); /* translate buffer number in case we renumbered after collapse * */ buf += new_first_buf; if (buf >= buf_total) buf -= buf_total; sprintf(key, "buffer %d", buf); unit = file_number[buf]; psio_write_entry((ULI) unit, key, (char *) buffer, size); if (ivect >= nvect) nvect = ivect + 1; cur_vect = ivect; cur_buf = ibuf; detci_time.write_after_time = wall_time_new(); detci_time.write_total_time += detci_time.write_after_time - detci_time.write_before_time; return(1); } /* ** CIvect::schmidt_add() ** ** This function Gram-Schmidt orthogonalizes a new vector d and adds it to ** the list of vectors in the CIvector c, which must contain room ** for the new vector (i.e. after the new vector is added, nvect <= maxvect). ** Don't add orthogonalized d' if norm(d') < SA_NORM_TOL. ** ** Parameters: ** L = number of vectors in CIvect to consider ** ** Returns: 1 if a vector is added, 0 otherwise ** ** Notes: Assumes vectors c,d are same size. Should account for Ms0 now. */ int CIvect::schmidt_add(CIvect &c, int L) { double tval, norm, *dotval; int buf, cvect; norm = 0.0; dotval = init_array(L); for (buf=0; buf c.maxvect) { fprintf(stderr, "(CIvect::schmidt_add): no more room to add vectors!\n"); fprintf(stderr, " c.nvect = %d, c.maxvect = %d\n", c.nvect, c.maxvect); return(0); } else { /* add to c */ c.cur_vect = c.nvect; c.nvect++; for (buf=0; buf*ovlpmax) *ovlpmax = tval; } /* Schmidt orthogonalize and double check orthogonalization */ for (buf=0; buf c.maxvect) { fprintf(stderr, "(CIvect::schmidt_add2): no more room to add vectors!\n"); fprintf(stderr, " c.nvect = %d, c.maxvect = %d\n", c.nvect, c.maxvect); return(0); } else { /* add to c */ c.cur_vect = target_vec; if (c.cur_vect > c.nvect) c.nvect++; zero_arr(dotchk,100); for (buf=0; buf *ovlpmax) *ovlpmax = dotchk[i]; } return(1); } } /* ** CIvect::zero() ** ** Zero out the current memory buffer for a CI vector. ** ** Parameters: none ** Returns: none **/ void CIvect::zero(void) { zero_arr(buffer, (int) buffer_size); } /* ** CIvect::sigma_renorm() ** ** Function calculates the numerator part of the Davidson correction vector d ** ** Parameters: ** nr = number of roots (=number of d vectors to calculate) ** L = number of previous vectors in CI subspace ** alpha = subspace CI eigenvector matrix ** lambda = array of subspace eigenvalues ** norm_arr = norm array (hold norm of for each d vector) ** C = CIvect for subspace vectors ** printflag= 1 to print d vector(s), else 0 ** outfile = where to put any output ** ** Returns: none */ void CIvect::sigma_renorm(int nr, int L, double renorm_C, CIvect &S, double *buf1, int printflag, FILE *outfile) { int buf, ivect, root; double tval; for (buf=0; buf= PRECON_GEN_DAVIDSON) h0block_gather_vec(CI_VEC); tval = calc_d2(buffer, lambda, Hd.buffer, buf_size[buf], precon); } if (buf_offdiag[buf]) tval *= 2.0; norm += tval; write(rootnum, buf); } if (!Parameters.mpn) errcod = H0block_calc(lambda); /* MLL */ return(norm); } /* ** ** CIvect::construct_kth_order_wf() ** ** Function constructs the kth order wavefunction from all ** other nth order wavefunction (n 3) { fprintf(outfile,"\nwfn_overlap = \n"); print_mat(wfn_overlap, k+1, k+1, outfile); fprintf(outfile,"\t\t\t\t"); } /* Compute E_2k and E_2k+1 */ for (buf=0; buf - tval*2.0*mp2k_energy[k+1-i] = %20.10f\n", tval*2.0*mp2k_energy[k+1-i]); fprintf(outfile, "E2kp1 -> - tval2*2.0*mp2k_energy[k+2-i] = %20.10f\n", tval*2.0*mp2k_energy[k+2-i]); fprintf(outfile, "E2k -> - tval*mp2k_energy[k-i] = %20.10f\n", tval*mp2k_energy[k-i]); fprintf(outfile, "E2k -> - tval*2.0*mp2k_energy[k+1-i] = %20.10f\n", tval*2.0*mp2k_energy[k+1-i]); */ } E2kp1 += (CalcInfo.efzc-mp2k_energy[1])*wfn_overlap[k][k]; E2kp1 -= 2.0*mp2k_energy[2]*wfn_overlap[k-1][k]; E2kp1 -= mp2k_energy[3]*wfn_overlap[k-1][k-1]; E2k += (CalcInfo.efzc-mp2k_energy[1])*wfn_overlap[k][k-1]; E2k -= mp2k_energy[2]*wfn_overlap[k-1][k-1]; } /* else { C.buf_lock(buf2); for (I=1; I<=k; I++) { C.read(I,0); if (I==1) { fprintf(outfile,"Cvec %d = \n", I); C.print(outfile); } } C.buf_unlock(); for (i=1; i<=k-2; i++) { E2kp1 -= 2.0 * mp2k_energy[k+1-i] * wfn_overlap[i][k]; E2kp1 -= 2.0 * mp2k_energy[k+2-i] * wfn_overlap[i][k-1]; for (j=1; j<=k-2; j++) E2kp1 -= mp2k_energy[2*k+1-i-j] * wfn_overlap[i][j]; } for (i=1; i<=k-2; i++) { E2k -= mp2k_energy[k-i] * wfn_overlap[k][i]; E2k -= 2.0 * mp2k_energy[k+1-i] * wfn_overlap[k-1][i]; for (j=1; j<=k-2; j++) E2k -= mp2k_energy[2*k-i-j] * wfn_overlap[i][j]; } E2k += (CalcInfo.efzc-mp2k_energy[1]) * wfn_overlap[k][k-1]; E2k -= mp2k_energy[2] * wfn_overlap[k-1][k-1]; E2kp1 += (CalcInfo.efzc-mp2k_energy[1])*wfn_overlap[k][k]; E2kp1 -= mp2k_energy[3]*wfn_overlap[k-1][k-1]; E2kp1 -= 2.0 * mp2k_energy[2] * wfn_overlap[k-1][k]; } */ else { for (i=1; i<=k; i++) for (j=1; j<=k; j++) { E2kp1 -= mp2k_energy[2*k+1-i-j] * wfn_overlap[i][j]; if ((i==k) && (j==k)) E2kp1 += CalcInfo.efzc * wfn_overlap[k][k]; } for (i=1; i<=k; i++) for (j=1; j maxblksize) maxblksize = blksize; } return(maxblksize); } /* ** CIvect::checknorm() ** ** Check the norm of a CI vector */ double CIvect::checknorm(void) { double tval, dotprod = 0.0; int buf; for (buf=0; buf 1, it is not ** possible to restart and make CI vectors 0...nroot equal to the restarted ** approximate eigenvectors, since this overwrites info needed to construct ** them. Thus, the new CI vectors must occupy the LAST nroot positions. ** However, it is nevertheless useful to index them as 0...nroot. This ** is most easily accomplished by a remapping (rotation) of the file ** pointer info. The one parameter is L, the new "0" vector. ** ** Actually, it's slightly more complex. For multiple restarts in a given ** calc, the 0 position rotates around. This routine should still work. ** ** In the latest version, I am phasing out the "offset" array in favor ** of a new_first_buf array which basically gives the buffer number of ** the new "0" vector. This is more natural for the libpsio implementation. */ void CIvect::restart_reord_fp(int L) { int buf, newbuf; int *tmp_file_number; new_first_buf = L*buf_per_vect + new_first_buf; if (new_first_buf >= buf_total) new_first_buf -= buf_total; /* tmp_file_offset = (unsigned long *) malloc (buf_total * sizeof(unsigned long)); tmp_file_number = init_int_array(buf_total); for (buf=L*buf_per_vect,newbuf=0; buf */ for (Kb_list=0; Kb_list < S.num_betcodes && !found; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { Kbidx = *Ibridx++; Kb = betlist[Kb_list] + Kbidx; if (Kb->cnt[cbc]) { found=1; break; } } } } if (found) s1_contrib[sblock][cblock] = 1; } /* does this c block contribute to sigma2? */ if (sbc == cbc) { for (Ia=alplist[sac], Iaidx=0, found=0; Iaidx < nas && !found; Iaidx++, Ia++) { /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < S.num_alpcodes && !found; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { Kaidx = *Iaridx++; Ka = alplist[Ka_list] + Kaidx; if (Ka->cnt[cac]) { found=1; break; } } } } if (found) s2_contrib[sblock][cblock] = 1; } /* does this c block contribute to sigma3? */ for (Iaidx=0,found=0; Iaidx= PRECON_GEN_DAVIDSON) C.h0block_buf_ols(&tmp1,&tmp2,&tmpnorm,E_est); if (C.buf_offdiag[buf]) { tmp1 *= 2.0; tmp2 *= 2.0; tmpnorm *= 2.0; rnormtmp *= 2.0; } normc1 += tmpnorm; nx += tmp1; ox += tmp2; rnorm += rnormtmp; C.write(next, buf); C.buf_unlock(); } *norm = nx; /* fprintf(outfile,"\n ovrlap(ox) = %20.16f\n", ox); */ *ovrlap = ox; if (normc1 <= 1.0E-13) { fprintf(outfile,"Norm of correction vector = %5.4e\n", normc1); fprintf(outfile,"This may cause numerical errors which would" \ " deteriorate the diagonalization procedure.\n"); } *c1norm = sqrt(rnorm); normc1 = sqrt(normc1); } /* ** CIvect::h0block_buf_init() ** ** Initialize H0block stuff pertaining to buffers ** */ void CIvect::h0block_buf_init(void) { int i, cnt, irrep, buf, blk; int *tmparr; H0block.nbuf = buf_per_vect; H0block.buf_num = init_int_array(buf_per_vect); if (H0block.size < 1) return; tmparr = init_int_array(H0block.size+H0block.coupling_size); if (icore == 1) { H0block.buf_member = init_int_matrix(1, H0block.size+H0block.coupling_size); for (i=0; i<(H0block.size+H0block.coupling_size); i++) { H0block.buf_member[0][i] = i; } H0block.buf_num[0] = H0block.size+H0block.coupling_size; } else if (icore == 2) { H0block.buf_member = (int **) malloc (buf_per_vect * sizeof(int *)); for (buf=0; buf= 0 && k != j) { H0block.c0b[k] = tval * phase; } } */ *nx += tval * tval; *ox += tval * c; *c1norm += (tval - c) * (tval - c); } } /* ** CIvect::h0block_gather_vec(int vecode) ** ** Parameters: ** curr = current vector number ** vecode = 0 for C vector and 1 for Sigma vector */ void CIvect::h0block_gather_vec(int vecode) { int buf, i, j, k, blk, al, bl; double c, cn, tval, phase, norm = 0.0; if (!Parameters.Ms0) phase = 1.0; else phase = ((int) Parameters.S % 2) ? -1.0 : 1.0; for (i=0; i= 0 && k != j) { /* if (k >= 0 && k != j && Parameters.Ms0) */ if (vecode) H0block.s0b[k] = tval * phase; else H0block.c0b[k] = tval * phase; } } } /* if (!vecode) { fprintf(outfile,"c0b in h0block_gather_vec = \n"); print_mat(&(H0block.c0b), 1, H0block.size, outfile); } */ } /* ** CIvect::h0block_gather_multivec(double *vec) ** ** Parameters: ** curr = current vector number ** vecode = 0 for C vector and 1 for Sigma vector */ void CIvect::h0block_gather_multivec(double *vec) { int buf, i, j, k, blk, al, bl; double c, cn, tval, phase, norm = 0.0; if (!Parameters.Ms0) phase = 1.0; else phase = ((int) Parameters.S % 2) ? -1.0 : 1.0; for (i=0; i= 0 && k != j) { /* if (k >= 0 && k != j && Parameters.Ms0) */ vec[k] = tval * phase; } } } } /* ** CIvect::h0block_buf_precon(double *nx, int root) ** ** Routine used by sem ** Parameters: ** norm = block's norm */ void CIvect::h0block_buf_precon(double *nx, int root) { int i, j, k, blk, al, bl, buf; double c, cn, tval, phase, norm = 0.0; if (!Parameters.Ms0) phase = 1.0; else phase = ((int) Parameters.S % 2) ? -1.0 : 1.0; for (buf=0; buf= 0 && k!=j) *nx -= tval * phase; } tval = H0block.c0bp[j] * H0block.c0bp[j]; *nx += tval; if (buf_offdiag[buf]) { k = H0block.pair[j]; if (k>= 0 && k!=j) *nx += tval * phase; } blocks[blk][al][bl] = -H0block.c0bp[j]; } write(root,buf); } } /* ** mitrush_update() ** Perform the Mitrushenkov update. New version 3/96 ** */ void mitrush_update(CIvect &C, CIvect &S, double norm, double acur, double alast, double *buffer1, double *buffer2, int curr, int next) { int i, j, k, buf, blk, al, bl; double phase, tval; if (!Parameters.Ms0) phase = 1.0; else phase = ((int) Parameters.S % 2) ? -1.0 : 1.0; for (buf=0; bufsubgr_per_irrep; for (bra_block=0; bra_blocksubgr_per_irrep; tval2 = ssq(alplist[ket_ac], betlist[ket_bc], blocks[bra_block], blocks[ket_block], ket_nas, ket_nbs, bra_ac, bra_bc); tval += tval2; #ifdef DEBUG fprintf(outfile,"\nbra_block = %d\n",bra_block); fprintf(outfile,"ket_block = %d\n",ket_block); fprintf(outfile,"Contribution to = %lf\n",tval2); #endif } /* end loop over bra_blocks */ } /* end loop over ket_block */ Ms = 0.5 * (CalcInfo.num_alp_expl - CalcInfo.num_bet_expl); #ifdef DEBUG fprintf(outfile,"\n\n = %lf\n", Ms); fprintf(outfile,"^2 = %lf\n", Ms*Ms); fprintf(outfile," = %lf\n", tval); #endif S2 = CalcInfo.num_bet_expl + tval + Ms + Ms*Ms; fprintf(outfile,"Computed vector %d = %20.15f\n\n", vec_num, S2); buf_unlock(); return(S2); } int CIvect::check_zero_block(int blocknum) { if (blocknum < 0 || blocknum > num_blocks) { fprintf(stderr, "CIvect::check_zero_block(): Block %d out of range\n", blocknum); } return(zero_blocks[blocknum]); } void CIvect::set_zero_block(int blocknum, int value) { if (blocknum < 0 || blocknum > num_blocks) { fprintf(stderr, "CIvect::set_zero_block(): Block %d out of range\n", blocknum); } if (value != 0 && value != 1) { fprintf(stderr, "CIvect::set_zero_block(): Value %d out of range\n", value); } zero_blocks[blocknum] = value; } void CIvect::set_zero_blocks_all(void) { int i; for (i=0; i block number for icore=0, else buf->irrep for icore=2 */ int *buf_offdiag; /* is the buffer "off-diagonal"? only applies to Ms=0. If Ms<>0, always=0 */ int *first_ablk; /* first blocknum with a given Ia irrep */ int *last_ablk; /* last blocknum with a given Ia irrep */ int **decode; /* gives block number for a (alp,bet) code */ /* dimensions num_alpcodes * num_betcodes */ double ***blocks; /* a matrix for each block */ double *buffer; /* pointer to buffer, same as blocks[0][0] */ int *zero_blocks; /* array for which blocks happen to be 0 */ int in_file; /* increment for how many buffers in a file */ int extras; /* accounts for extra buffers */ int units_used; /* accounts for number of unit files used */ int cur_unit; /* current unit file */ int cur_size; /* current size of buffer */ int first_unit; /* first file unit number (if > 1) */ public: CIvect(); CIvect(BIGINT vl, int nb, int incor, int ms0, int *iac, int *ibc, int *ias, int *ibs, BIGINT *offs, int nac, int nbc, int nirr, int cdperirr, int maxvect, int nunits, int funit, int *fablk, int *lablk, int **dc); ~CIvect(); double * buf_malloc(void); void set(BIGINT vl, int nb, int incor, int ms0, int *iac, int *ibc, int *ias, int *ibs, BIGINT *offs, int nac, int nbc, int nirr, int cdperirr, int maxvect, int nunits, int funit, int *fablk, int *lablk, int **dc); void print(FILE *outfile); double operator*(CIvect &b); void set_nvect(int i); void setarray(const double *a, int len); void max_abs_vals(int nval, int *iac, int *ibc, int *iaidx, int *ibidx, double *coeff, int neg_only); double blk_max_abs_vals(int i, int offdiag, int nval, int *iac, int *ibc, int *iaidx, int *ibidx, double *coeff, double minval, int neg_only); void det2strings(BIGINT det, int *alp_code, int *bet_code, int *alp_idx, int *bet_idx); BIGINT strings2det(int alp_code, int alp_idx, int bet_code, int bet_idx); void diag_mat_els(struct stringwr **alplist, struct stringwr **betlist, double *oei, double *tei, double efzc, int na, int nb, int nbf, int method); void diag_mat_els_otf(struct stringwr **alplist, struct stringwr **betlist, double *oei, double *tei, double efzc, int na, int nb, int nbf, int buf, int method); void init_vals(int ivect, int nvals, int *alplist, int *alpidx, int *betlist, int *betidx, int *blknums, double *value); void set_vals(int ivect, int nvals, int *alplist, int *alpidx, int *betlist, int *betidx, int *blknums, double *value); void extract_vals(int ivect, int nvals, int *alplist, int *alpidx, int *betlist, int *betidx, int *blknums, double *value); void symnorm(double a, int vecode, int gather_vec); double zero_det(int iac, int ia, int ibc, int ib); void scale(double a, int vecode, int gather_vec); void symmetrize(double phase, int iblock); void buf_lock(double *a); void buf_unlock(void); double ** blockptr(int blknum); void init_io_files(void); void close_io_files(int keep); int read(int ivect, int ibuf); int write(int ivect, int ibuf); int schmidt_add(CIvect &c, int L); int schmidt_add2(CIvect &c, int first_vec, int last_vec, int source_vec, int target_vec, double *dotval, double *nrm, double *ovlpmax); void zero(void); void dcalc(int nr, int L, double **alpha, double *lambda, double *norm_arr, CIvect &C, CIvect &S, double *buf1, double *buf2, int *root_converged, int printflag, FILE *outfile, double *E_est); void sigma_renorm(int nr, int L, double renorm_C, CIvect &S, double *buf1, int printflag, FILE *outfile); double dcalc2(int rootnum, double lambda, CIvect &Hd, int precon, struct stringwr **alplist, struct stringwr **betlist); double dcalc_evangelisti(int rootnum, int num_vecs, double lambda, CIvect &Hd, CIvect &C, double *buf1, double *buf2, int precon, int L, struct stringwr **alplist, struct stringwr **betlist, double **alpha); void construct_kth_order_wf(CIvect &Hd, CIvect &S, CIvect &C, struct stringwr **alplist, struct stringwr **betlist, double *buf1, double *buf2, int k, double *mp_energy, double **bvec_overlap, double *bvec_norm); void wigner_E2k_formula(CIvect &Hd, CIvect &S, CIvect &C, struct stringwr **alplist, struct stringwr **betlist, double *buf1, double *buf2, int k, double *mp2k_energy, double **wfn_overlap, double **bvec_overlap, double *bvec_norm, int kvec_offset); void print_buf(FILE *outfile); void civ_xeay(double a, CIvect &Y, int xvect, int yvect); void civ_xpeay(double a, CIvect &Y, int xvect, int yvect); void transp_block(int iblock, double **tmparr); unsigned long get_max_blk_size(void); double checknorm(void); void copy(CIvect &Src, int targetvec, int srcvec); void restart_gather(int ivec, int nvec, int nroot, double **alpha, double *buffer1, double *buffer2); void gather(int ivec, int nvec, int nroot, double **alpha, CIvect &C); void restart_reord_fp(int L); void print_fptrs(void); double calc_ssq(double *buffer1, double *buffer2, struct stringwr **alplist, struct stringwr **betlist, int vec_num); void h0block_buf_init(void); void h0block_buf_ols(double *norm,double *ovrlap,double *c1norm, double E_est); void h0block_buf_precon(double *norm, int root); void h0block_gather_vec(int vecode); void h0block_gather_multivec(double *vec); int check_zero_block(int blocknum); void set_zero_block(int blocknum, int value); void set_zero_blocks_all(void); void copy_zero_blocks(CIvect &src); void print_zero_blocks(void); void scale_sigma(CIvect &Hd, CIvect &C, struct stringwr **alplist, struct stringwr **betlist, int i, double *buf1, double *buf2); int read_new_first_buf(void); void write_new_first_buf(void); void set_new_first_buf(int nfb); int read_num_vecs(void); void write_num_vecs(int nv); void write_toc(void); void civect_psio_debug(void); void pt_correction(struct stringwr **alplist, struct stringwr **betlist); double compute_follow_overlap(int troot, int ncoef, double *coef, int *Iac, int *Iaridx, int *Ibc, int *Ibridx); friend void sigma_init(CIvect& C, CIvect &S, struct stringwr **alplist, struct stringwr **betlist); friend void sigma(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int iter); friend void sigma_a(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int iter); friend void sigma_b(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int iter); friend void sigma_c(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int iter); friend void sigma_get_contrib(struct stringwr **alplist, struct stringwr **betlist, CIvect &C, CIvect &S, int **s1_contrib, int **s2_contrib, int **s3_contrib); friend void sigma_get_contrib_rotf(CIvect &C, CIvect &S, int **s1_contrib, int **s2_contrib, int **s3_contrib, int *Jcnt[2], int **Jij[2], int **Joij[2], int **Jridx[2], signed char **Jsgn[2], unsigned char **Toccs); friend void olsen_iter_xy(CIvect &C, CIvect &S, CIvect &Hd, double *x, double *y, double *buf1, double *buf2, double E, int curvect, int L, double **alpha, struct stringwr **alplist, struct stringwr **betlist); friend void olsen_update(CIvect &C, CIvect &S, CIvect &Hd, double E, double E_est, double *norm, double *c1norm, double *ovrlap, double *buffer1, double *buffer2, int curr, int next, FILE *outfile, int iter, struct stringwr **alplist, struct stringwr **betlist); friend void mitrush_update(CIvect &C, CIvect &S, double norm, double acur, double alast, double *buffer1, double *buffer2, int curr, int next); friend void opdm(struct stringwr **alplist, struct stringwr **betlist, int transdens, int dipmom, int Inroots, int Iroot, int Inunits, int Ifirstunit, int Jnroots, int Jroot, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag); friend void tpdm(struct stringwr **alplist, struct stringwr **betlist, int Inroots, int Inunits, int Ifirstunit, int Jnroots, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag); }; }} // namespace psi::detci #endif // header guard psi3/src/bin/detci/compute_cc.cc0000644000101500007650000000164510757640026015275 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Arbitrary-order coupled-cluster code ** ** C. David Sherrill ** Center for Computational Molecular Science and Technology ** Georgia Institute of Technology ** March 2005 ** ** Note: I think I need onel ints as g for formation of sigma ** in non-FCI cases, but make sure any CC parts don't try to get ** h and actually get g instead... */ #define EXTERN #include #include #include #include #include #include #include #include #include #include "structs.h" #include "globals.h" namespace psi { namespace detci { int cc_reqd_sblocks[CI_BLK_MAX]; /* ** compute_cc() ** ** This is the top-level function that controls the coupled-cluster ** computation ** */ void compute_cc(void) { printf("compute_cc: Not yet available\n"); } }} // namespace psi::detci psi3/src/bin/detci/datafiles/0000755000101500007650000000000011146111661014562 5ustar crawdadpsi3/src/bin/detci/datafiles/fciplot0000644000101500007650000000043307046653677016173 0ustar crawdadset terminal postscript set output 'fciplot.PS' set logscale set title "Timings for Full CI Benchmarks" set xlabel "Number of Determinants" set ylabel "Time per iteration (seconds)" set key 25000000,1 plot 't1.dat' title "GUGACI", 't2.dat' title "DETCI" psi3/src/bin/detci/datafiles/h2o.dz.fci0.out0000644000101500007650000001311107046653677017262 0ustar crawdad****************************************************************************** tstart called on harpagos.ccqc.uga.edu Wed Apr 17 18:58:56 1996 ****************************************************** D E T C I David Sherrill June 1995 ****************************************************** PARAMETERS: EX_LVL = 10 H0_BLOCKSIZE = 40 VAL_EX_LVL = 0 H0_MP2GUESS = 0 NPRINT = 20 MAX_DET = 1500000 MAXITER = 10 FREEZE_CORE = yes NUM_ROOTS = 1 RAS = no PRINT = 2 FCI = yes CONV = 6 MIXED = yes E_CONV = 6 MIXED4 = yes OEI FILE = 71 R4S = no OEI ERASE = no REPL_OTF = no TEI FILE = 72 DIAG_METHOD = SEM TEI ERASE = no MAXNVECT = 12 RESTART = no RESTART_VECS = 0 ICORE = 1 FILES = 90 91 92 93 ORBITALS: NBFSO = 14 1ST ALP ACT = 0 ORBS IN CI = 14 LST ALP OCC = 4 FROZEN CORE = 0 1ST BET ACT = 0 RESTR CORE = 0 LST BET OCC = 4 RAS1_LVL = 4 A_RAS3_MAX = 5 RAS1_MIN = 0 B_RAS3_MAX = 5 A_RAS1_LVL = 4 RAS4_LVL = 14 A_RAS1_MIN = 0 A_RAS4_MAX = 0 A_RAS1_MAX = 5 B_RAS4_MAX = 0 B_RAS1_LVL = 4 RAS4_MAX = 0 B_RAS1_MIN = 0 A_RAS34_MAX = 5 B_RAS1_MAX = 5 B_RAS34_MAX = 5 RAS3_LVL = 5 RAS34_MAX = 10 RAS3_MAX = 10 DOCC = 3 0 1 1 SOCC = 0 0 0 0 FROZEN_DOCC = 0 0 0 0 FROZEN_UOCC = 0 0 0 0 RAS 1 = 3 0 1 1 RAS 2 = 0 0 0 0 RAS 3 = 5 0 1 3 RAS 4 = 0 0 0 0 ****************************************************** There are 2002 alpha strings There are 2002 beta strings CI space contains 4 blocks CI space requires 1002708 determinants Check SCF Energy from 1- and 2-electron integrals SCF Energy (ref): -76.0110023991 Nuclear repulsion energy : 9.2342185209 One-electron energy: -123.0899318867 Two-electron energy: 37.8447109667 Frozen core energy: 0.0000000000 Total electronic energy: -85.2452209200 Total SCF energy: -76.0110023991 Bendazzoli algorithm selected for sigma3 Forming diagonal elements of H Forming H0 block *** H0 Block Eigenvalue = -76.01707791 Find the roots by the Simultaneous Expansion Method Energy convergence = 1e-06 RMS CI vector convergence = 1e-06 Using 1 initial trial vectors Iter 0 Root 1 = -76.017077907 Delta_E -8.525E+01 Delta_C 1.355E+00 Iter 1 Root 1 = -76.143333383 Delta_E -1.263E-01 Delta_C 4.445E-01 Iter 2 Root 1 = -76.155205462 Delta_E -1.187E-02 Delta_C 1.136E-01 Iter 3 Root 1 = -76.156239370 Delta_E -1.034E-03 Delta_C 5.027E-02 Iter 4 Root 1 = -76.156392901 Delta_E -1.535E-04 Delta_C 1.516E-02 Iter 5 Root 1 = -76.156406529 Delta_E -1.363E-05 Delta_C 4.724E-03 Iter 6 Root 1 = -76.156407911 Delta_E -1.382E-06 Delta_C 1.930E-03 Iter 7 Root 1 = -76.156408156 Delta_E -2.454E-07 Delta_C 7.264E-04 Iter 8 Root 1 = -76.156408192 Delta_E -3.574E-08 Delta_C 2.821E-04 Iter 9 Root 1 = -76.156408197 Delta_E -4.809E-09 Delta_C 1.096E-04 Iter 10 Root 1 = -76.156408197 Delta_E -6.520E-10 Delta_C 3.206E-05 Maximum number of iterations reached ROOT 1 ECI = -76.1564081972336 The 20 most important determinants 1 0.976353 ( 504, 504) 1A1X 2A1X 3A1X 1B1X 1B2X * 2 -0.056881 ( 560, 560) 1A1X 2A1X 3A1X 1B2X 2B1X * 3 -0.046472 ( 508, 508) 1A1X 2A1X 1B1X 1B2X 5A1X * 4 -0.039572 ( 616, 616) 1A1X 2A1X 3A1X 1B1X 2B2X * 5 -0.035354 ( 508, 560) 1A1X 2A1X 3A1B 1B1A 1B2X 5A1A 2B1B * 6 -0.035354 ( 560, 508) 1A1X 2A1X 3A1A 1B1B 1B2X 5A1B 2B1A * 7 -0.034812 ( 856, 856) 1A1X 2A1X 3A1X 1B1X 4B2X * 8 -0.029068 ( 616, 856) 1A1X 2A1X 3A1X 1B1X 2B2A 4B2B * 9 -0.029068 ( 856, 616) 1A1X 2A1X 3A1X 1B1X 2B2B 4B2A * 10 -0.027126 ( 1021, 1021) 1A1X 2A1X 3A1X 1B1X 6A1X * 11 0.026361 ( 560, 616) 1A1X 2A1X 3A1X 1B1B 1B2A 2B1A 2B2B * 12 0.026361 ( 616, 560) 1A1X 2A1X 3A1X 1B1A 1B2B 2B1B 2B2A * 13 0.024570 ( 504, 564) 1A1X 2A1X 3A1A 1B1A 1B2X 5A1B 2B1B * 14 0.024570 ( 564, 504) 1A1X 2A1X 3A1B 1B1B 1B2X 5A1A 2B1A * 15 0.023958 ( 508, 616) 1A1X 2A1X 3A1B 1B1X 1B2A 5A1A 2B2B * 16 0.023958 ( 616, 508) 1A1X 2A1X 3A1A 1B1X 1B2B 5A1B 2B2A 17 -0.022774 ( 1016, 1016) 1A1X 2A1X 3A1X 1B1X 4A1X * 18 0.021786 ( 506, 560) 1A1X 2A1B 3A1X 1B1A 1B2X 4A1A 2B1B * 19 0.021786 ( 560, 506) 1A1X 2A1A 3A1X 1B1B 1B2X 4A1B 2B1A * 20 0.021777 ( 560, 856) 1A1X 2A1X 3A1X 1B1B 1B2A 2B1A 4B2B ****************************************************************************** tstop called on harpagos.ccqc.uga.edu Wed Apr 17 19:12:17 1996 user time = 752.04 seconds system time = 34.68 seconds total time = 801 seconds ** Nb. These timings from obsolete and slow version of code ** ** should be more like 308s, 37s, 364s on a IBM 3CT ** psi3/src/bin/detci/datafiles/h2o.dz.fci2.out0000644000101500007650000001266207046653677017276 0ustar crawdad****************************************************************************** tstart called on seldon Mon Nov 18 22:55:14 1996 ******************************************************* D E T C I David Sherrill June 24 1996 ******************************************************* PARAMETERS: EX LVL = 10 H0 BLOCKSIZE = 40 VAL EX LVL = 0 H0 MP2GUESS = no NPRINT = 20 MAX DET = 1500000 MAXITER = 10 FREEZE CORE = yes NUM ROOTS = 1 ICORE = 1 PRINT = 2 FCI = yes CONV = 6 MIXED = yes E CONV = 6 MIXED4 = yes OEI FILE = 71 R4S = no OEI ERASE = no REPL OTF = no TEI FILE = 72 DIAG METHOD = SEM S = 0 Ms0 = yes TEI ERASE = no MAXNVECT = 12 RESTART = no RESTART VECS = 0 GUESS VECTOR = H0BLOCK OPENTYPE = NONE GENCI ALG = no FILES = 50 51 52 53 ORBITALS: NBFSO = 14 NUM ALP = 5 ORBS IN CI = 12 NUM ALP EXPL = 3 FROZEN CORE = 2 NUM BET = 5 RESTR CORE = 0 NUM BET EXPL = 3 IOPEN = no RAS1 LVL = 2 A RAS3 MAX = 3 RAS1 MIN = 4 B RAS3 MAX = 3 A RAS1 LVL = 2 RAS4 LVL = 12 A RAS1 MIN = 2 A RAS4 MAX = 0 A RAS1 MAX = 5 B RAS4 MAX = 0 B RAS1 LVL = 2 RAS4 MAX = 0 B RAS1 MIN = 2 A RAS34 MAX = 3 B RAS1 MAX = 5 B RAS34 MAX = 3 RAS3 LVL = 3 RAS34 MAX = 6 RAS3 MAX = 6 DOCC = 3 0 1 1 SOCC = 0 0 0 0 FROZEN DOCC = 2 0 0 0 FROZEN UOCC = 0 0 0 0 RAS 1 = 1 0 1 1 RAS 2 = 0 0 0 0 RAS 3 = 5 0 1 3 RAS 4 = 0 0 0 0 ******************************************************* There are 220 alpha strings There are 220 beta strings CI space contains 4 blocks CI space requires 12536 determinants Check SCF Energy from 1- and 2-electron integrals SCF Energy (ref): -76.0110023991 Nuclear repulsion energy: 9.2342185209 One-electron energy: -22.4682305194 Two-electron energy: 9.4431860277 Frozen core energy: -72.2201764283 Total electronic energy: -85.2452209200 Total SCF energy: -76.0110023991 Forming diagonal elements of H Forming H0 block *** H0 Block Eigenvalue = -76.01710366 Find the roots by the Simultaneous Expansion Method Energy convergence = 1e-06 RMS CI vector convergence = 1e-06 Using 1 initial trial vectors Iter 0 Root 1 = -76.017103657 Delta_E -1.303E+01 Delta_C 4.862E-01 Iter 1 Root 1 = -76.095909518 Delta_E -7.881E-02 Delta_C 1.383E-01 Iter 2 Root 1 = -76.100515457 Delta_E -4.606E-03 Delta_C 3.509E-02 Iter 3 Root 1 = -76.100812335 Delta_E -2.969E-04 Delta_C 9.812E-03 Iter 4 Root 1 = -76.100837804 Delta_E -2.547E-05 Delta_C 2.415E-03 Iter 5 Root 1 = -76.100839064 Delta_E -1.260E-06 Delta_C 7.230E-04 Iter 6 Root 1 = -76.100839189 Delta_E -1.251E-07 Delta_C 1.900E-04 Iter 7 Root 1 = -76.100839197 Delta_E -8.253E-09 Delta_C 4.778E-05 Iter 8 Root 1 = -76.100839198 Delta_E -5.642E-10 Delta_C 1.451E-05 Iter 9 Root 1 = -76.100839198 Delta_E -5.974E-11 Delta_C 4.284E-06 Iter 10 Root 1 = -76.100839198 Delta_E -5.150E-12 Delta_C 1.295E-06 Maximum number of iterations reached ROOT 1 ECI = -76.1008391981013 The 20 most important determinants 1 -0.982307 ( 62, 62) 3A1 X 1B1 X 1B2 X * 2 0.057635 ( 68, 68) 3A1 X 1B2 X 2B1 X * 3 0.046874 ( 64, 64) 1B1 X 1B2 X 5A1 X * 4 0.039581 ( 74, 74) 3A1 X 1B1 X 2B2 X * 5 -0.036407 ( 64, 68) 3A1 B 1B1 A 1B2 X 5A1 A 2B1 B * 6 -0.036407 ( 68, 64) 3A1 A 1B1 B 1B2 X 5A1 B 2B1 A * 7 0.033715 ( 98, 98) 3A1 X 1B1 X 4B2 X * 8 0.028785 ( 74, 98) 3A1 X 1B1 X 2B2 A 4B2 B * 9 0.028785 ( 98, 74) 3A1 X 1B1 X 2B2 B 4B2 A * 10 0.027305 ( 68, 74) 3A1 X 1B1 B 1B2 A 2B1 A 2B2 B * 11 0.027305 ( 74, 68) 3A1 X 1B1 A 1B2 B 2B1 B 2B2 A * 12 0.026880 ( 62, 70) 3A1 A 1B1 A 1B2 X 5A1 B 2B1 B * 13 0.026880 ( 70, 62) 3A1 B 1B1 B 1B2 X 5A1 A 2B1 A * 14 0.025979 ( 113, 113) 3A1 X 1B1 X 6A1 X * 15 -0.024815 ( 64, 74) 3A1 B 1B1 X 1B2 A 5A1 A 2B2 B * 16 -0.024815 ( 74, 64) 3A1 A 1B1 X 1B2 B 5A1 B 2B2 A * 17 0.022414 ( 68, 98) 3A1 X 1B1 B 1B2 A 2B1 A 4B2 B * 18 0.022414 ( 98, 68) 3A1 X 1B1 A 1B2 B 2B1 B 4B2 A * 19 -0.021504 ( 62, 80) 3A1 X 1B1 A 1B2 A 2B1 B 2B2 B * 20 -0.021504 ( 80, 62) 3A1 X 1B1 B 1B2 B 2B1 A 2B2 A ****************************************************************************** tstop called on seldon Mon Nov 18 22:56:02 1996 user time = 42.10 seconds system time = 4.82 seconds total time = 48 seconds psi3/src/bin/detci/datafiles/h2o.dz.input0000644000101500007650000000200510315312031016733 0ustar crawdad% H2O % DZ C2V psi: ( jobtype = sp ) default: ( label = "H2O DZ" memory = (20.0 MB) reference = rhf charge = 0 multp = 1 symmetry = c2v wfn = detci ex_lvl = 10 opentype = none dertype = none docc = (3 0 1 1) frozen_docc = (0 0 0 0) frozen_uocc = (0 0 0 0) files: ( default: ( name = "h2odz" nvolume = 1 volume1 = "/scratch/sherrill/" ) file30: (nvolume = 1 volume1 = "./" ) file32: (nvolume = 1 volume1 = "./" ) ) ) input: ( basis = dz units = bohr % H2O DZ SCF Opt Geom geometry = ( ( O .0000000000 .0000000000 -.0742719254) ( H .0000000000 -1.4949589982 -1.0728640373) ( H .0000000000 1.4949589982 -1.0728640373) ) origin = (0.0 0.0 0.0) ) scf: ( maxiter = 50 convergence = 12 delete34 = false ) trans: ( delete34 = false ) detci: ( fci = true convergence = 6 print = 2 maxiter = 10 diag_method = SEM h0_blocksize = 40 hd_ave = evangelisti ) psi3/src/bin/detci/datafiles/h2o.sto.c1.input0000644000101500007650000000247207046653677017474 0ustar crawdad% H2O % STO C1 psi: ( opt = false nopt = 4 geomupdate = ("bmat" "ugeom") % check = true ) default: ( label = "H2O STO" memory = (8.0 MB) symmetry = c1 wfn = scf opentype = none dertype = second % docc = (3 0 1 1) docc = (5) frozen_docc = (3) frozen_uocc = (0) files: ( default: ( name = "h2ostoc1" nvolume = 2 volume1 = "/tmp1/sherrill/" volume2 = "/tmp2/sherrill/" ) file30: ( nvolume = 1 volume1 = "./" ) file36: ( nvolume = 1 volume1 = "./" ) file61: ( nvolume = 1 volume1 = "./" ) file62: ( nvolume = 1 volume1 = "./" ) file63: ( nvolume = 1 volume1 = "./" ) file64: ( nvolume = 1 volume1 = "./" ) ) ) input: ( atoms = (oxygen hydrogen hydrogen) basis = sto charges = (8 1 1) units = bohr % STO-3G SCF Optimized Geometry for H2O geometry = ( ( .0000000000 .0000000000 .0609947951) ( .0000000000 1.4325649220 -1.1404973976) ( .0000000000 -1.4325649220 -1.1404973976) ) origin = (0.0 0.0 0.0) ) scf: ( maxiter = 50 convergence = 12 delete34 = false ) bmat: ( no_print = false ) cphf: convergence = 18 intder: ( derlvl = 2 trans_type = c_to_i freq_anal = false ) detci: ( ex_lvl = 2 print = 2 max_det = 5000 ) psi3/src/bin/detci/datafiles/h2o.sto.input0000644000101500007650000000167207046653677017173 0ustar crawdad% H2O % STO C2V default: ( label = "H2O STO" memory = (4.0 MB) symmetry = c2v wfn = ci ex_lvl = 2 opentype = none dertype = none docc = (3 0 1 1) frozen_docc = (2 0 0 0) frozen_uocc = (0 0 0 0) files: ( default: ( name = "h2osto" nvolume = 1 volume1 = "/tmp1/sherrill/" %volume1 = "/tmp/david/" ) ) ) input: ( atoms = (oxygen hydrogen) basis = sto charges = (8 1) units = bohr % STO-3G SCF Optimized Geometry for H2O geometry = ( ( .0000000000 .0000000000 .0609947951) ( .0000000000 1.4325649220 -1.1404973976) ) origin = (0.0 0.0 0.0) ) scf: ( maxiter = 50 convergence = 12 delete34 = false ) detci: ( icore = 1 fci = false print = 3 max_det = 5000 h0_blocksize = 4 maxiter = 10 convergence = 7 energy_convergence = 2 diag_method = SEM % diag_method = Mitrushenkov num_roots = 2 ) psi3/src/bin/detci/datafiles/h2o.sto.out0000644000101500007650000001553607046653677016647 0ustar crawdad****************************************************************************** tstart called on seldon Mon Nov 18 22:52:26 1996 ******************************************************* D E T C I David Sherrill June 24 1996 ******************************************************* PARAMETERS: EX LVL = 2 H0 BLOCKSIZE = 4 VAL EX LVL = 0 H0 MP2GUESS = no NPRINT = 20 MAX DET = 5000 MAXITER = 10 FREEZE CORE = yes NUM ROOTS = 2 ICORE = 1 PRINT = 3 FCI = no CONV = 7 MIXED = yes E CONV = 2 MIXED4 = yes OEI FILE = 71 R4S = no OEI ERASE = no REPL OTF = no TEI FILE = 72 DIAG METHOD = SEM S = 0 Ms0 = yes TEI ERASE = no MAXNVECT = 24 RESTART = no RESTART VECS = 0 GUESS VECTOR = H0BLOCK OPENTYPE = NONE GENCI ALG = no FILES = 50 51 52 53 ORBITALS: NBFSO = 7 NUM ALP = 5 ORBS IN CI = 5 NUM ALP EXPL = 3 FROZEN CORE = 2 NUM BET = 5 RESTR CORE = 0 NUM BET EXPL = 3 IOPEN = no RAS1 LVL = 2 A RAS3 MAX = 2 RAS1 MIN = 8 B RAS3 MAX = 2 A RAS1 LVL = 2 RAS4 LVL = 5 A RAS1 MIN = 3 A RAS4 MAX = 0 A RAS1 MAX = 5 B RAS4 MAX = 0 B RAS1 LVL = 2 RAS4 MAX = 0 B RAS1 MIN = 3 A RAS34 MAX = 2 B RAS1 MAX = 5 B RAS34 MAX = 2 RAS3 LVL = 3 RAS34 MAX = 2 RAS3 MAX = 2 DOCC = 3 0 1 1 SOCC = 0 0 0 0 FROZEN DOCC = 2 0 0 0 FROZEN UOCC = 0 0 0 0 RAS 1 = 1 0 1 1 RAS 2 = 0 0 0 0 RAS 3 = 1 0 0 1 RAS 4 = 0 0 0 0 ******************************************************* There are 10 alpha strings There are 10 beta strings CI space contains 9 blocks CI space requires 17 determinants Check SCF Energy from 1- and 2-electron integrals SCF Energy (ref): -74.9659005602 Nuclear repulsion energy: 8.9064885908 One-electron energy: -22.3667934571 Two-electron energy: 9.7371949632 Frozen core energy: -71.2427906571 Total electronic energy: -83.8723891510 Total SCF energy: -74.9659005602 Forming diagonal elements of H Forming H0 block H0block size reduced by 1 to ensure pairing. *** H0 Block Eigenvalue = -74.96590056 H0 Block Eigenvectors 1 2 3 1 1.0000000 0.0000000 -0.0000000 2 -0.0000000 -0.7071068 -0.7071068 3 -0.0000000 0.7071068 -0.7071068 -74.9659006 -74.4758696 -74.3205123 Members of H0 block: 1 [ 1] -83.872389 Block 1 ( 0, 0) 3A1 X 1B1 X 1B2 X 2 [ 3] -83.304680 Block 2 ( 0, 0) 3A1 A 1B1 X 1B2 X 4A1 B 3 [ 2] -83.304680 Block 4 ( 0, 0) 3A1 B 1B1 X 1B2 X 4A1 A Find the roots by the Simultaneous Expansion Method Energy convergence = 0.01 RMS CI vector convergence = 1e-07 Using 2 initial trial vectors Iter 0 Root 1 = -74.965900560 Delta_E -1.263E+01 Delta_C 2.534E-01 Iter 0 Root 2 = -74.320512304 Delta_E -1.198E+01 Delta_C 2.360E-01 Iter 1 Root 1 = -75.004194020 Delta_E -3.829E-02 Delta_C 2.076E-02 Iter 1 Root 2 = -74.393263132 Delta_E -7.275E-02 Delta_C 6.867E-02 Iter 2 Root 1 = -75.004477594 Delta_E -2.836E-04 Delta_C 1.558E-03 Iter 2 Root 2 = -74.398580676 Delta_E -5.318E-03 Delta_C 6.596E-03 Iter 3 Root 1 = -75.004479508 Delta_E -1.914E-06 Delta_C 1.980E-04 Iter 3 Root 2 = -74.398632531 Delta_E -5.186E-05 Delta_C 9.444E-04 Iter 4 Root 1 = -75.004479539 Delta_E -3.089E-08 Delta_C 1.104E-05 Iter 4 Root 2 = -74.398633752 Delta_E -1.221E-06 Delta_C 1.252E-04 Iter 5 Root 1 = -75.004479539 Delta_E -1.015E-10 Delta_C 4.555E-14 Iter 5 Root 2 = -74.398633781 Delta_E -2.898E-08 Delta_C 5.789E-13 ROOT 1 ECI = -75.0044795388563 The 17 most important determinants 1 0.987974 ( 2, 2) 3A1 X 1B1 X 1B2 X * 2 -0.081913 ( 4, 4) 3A1 X 1B1 X 2B2 X * 3 -0.054073 ( 3, 4) 3A1 B 1B1 X 1B2 A 4A1 A 2B2 B * 4 -0.054073 ( 4, 3) 3A1 A 1B1 X 1B2 B 4A1 B 2B2 A * 5 -0.048007 ( 7, 7) 1B1 X 1B2 X 2B2 X * 6 -0.047471 ( 3, 3) 1B1 X 1B2 X 4A1 X * 7 -0.042145 ( 6, 6) 3A1 X 1B1 X 4A1 X * 8 -0.035644 ( 6, 7) 3A1 A 1B1 X 1B2 B 4A1 A 2B2 B * 9 -0.035644 ( 7, 6) 3A1 B 1B1 X 1B2 A 4A1 B 2B2 A * 10 -0.027083 ( 8, 8) 3A1 X 1B2 X 4A1 X 11 -0.021258 ( 3, 2) 3A1 B 1B1 X 1B2 X 4A1 A 12 -0.021258 ( 2, 3) 3A1 A 1B1 X 1B2 X 4A1 B * 13 0.018429 ( 2, 5) 3A1 A 1B1 X 1B2 A 4A1 B 2B2 B * 14 0.018429 ( 5, 2) 3A1 B 1B1 X 1B2 B 4A1 A 2B2 A * 15 -0.012474 ( 0, 0) 3A1 X 1B2 X 2B2 X * 16 -0.000934 ( 2, 4) 3A1 X 1B1 X 1B2 A 2B2 B * 17 -0.000934 ( 4, 2) 3A1 X 1B1 X 1B2 B 2B2 A ROOT 2 ECI = -74.3986337806599 The 17 most important determinants 1 0.663074 ( 3, 2) 3A1 B 1B1 X 1B2 X 4A1 A 2 0.663074 ( 2, 3) 3A1 A 1B1 X 1B2 X 4A1 B * 3 -0.199030 ( 2, 4) 3A1 X 1B1 X 1B2 A 2B2 B * 4 -0.199030 ( 4, 2) 3A1 X 1B1 X 1B2 B 2B2 A * 5 0.111531 ( 3, 3) 1B1 X 1B2 X 4A1 X * 6 0.087043 ( 7, 7) 1B1 X 1B2 X 2B2 X * 7 -0.071796 ( 6, 6) 3A1 X 1B1 X 4A1 X * 8 0.067023 ( 3, 4) 3A1 B 1B1 X 1B2 A 4A1 A 2B2 B * 9 0.067023 ( 4, 3) 3A1 A 1B1 X 1B2 B 4A1 B 2B2 A 10 0.044962 ( 2, 2) 3A1 X 1B1 X 1B2 X * 11 0.041080 ( 6, 7) 3A1 A 1B1 X 1B2 B 4A1 A 2B2 B * 12 0.041080 ( 7, 6) 3A1 B 1B1 X 1B2 A 4A1 B 2B2 A * 13 -0.025943 ( 2, 5) 3A1 A 1B1 X 1B2 A 4A1 B 2B2 B * 14 -0.025943 ( 5, 2) 3A1 B 1B1 X 1B2 B 4A1 A 2B2 A * 15 -0.021542 ( 0, 0) 3A1 X 1B2 X 2B2 X * 16 -0.006734 ( 4, 4) 3A1 X 1B1 X 2B2 X * 17 -0.005816 ( 8, 8) 3A1 X 1B2 X 4A1 X ****************************************************************************** tstop called on seldon Mon Nov 18 22:52:27 1996 user time = 0.42 seconds system time = 0.11 seconds total time = 1 seconds psi3/src/bin/detci/datafiles/ne.dz-fci.input0000644000101500007650000000255307505722402017432 0ustar crawdaddefault: ( label = "Ne FCI Test" memory = (20.0 MB) symmetry = d2h opentype = none dertype = none charge = 0 multp = 1 reference = rhf wfn = detci ex_lvl = 10 docc = (2 0 0 0 0 1 1 1) files: ( default: ( name = "Ne" nvolume = 1 volume1 = "/scratch/sherrill/" ) file30: ( nvolume = 1 volume1 = "./" ) file32: ( nvolume = 1 volume1 = "./" ) ) ) input: ( basis = dzp puream = true units = angstrom geometry = ( ( Ne 0.0000000000 0.0000000000 0.0000000000 ) ) ) basis: ( neon: dzp = ( (S(12100.0000 0.001200) ( 1821.0000 0.009092) ( 432.8000 0.041305) ( 132.5000 0.137867) ( 43.7700 0.362433)) (S( 5.1270 0.130035)) (S( 14.9100 1.000000)) (S( 1.4910 1.000000)) (S( 0.4468 1.000000)) (P( 56.4500 0.020875) ( 12.9200 0.130032) ( 3.8650 0.395679)) (P( 1.2030 0.621450)) (P( 0.3444 1.000000)) (D( 2.1500 1.000000)) ) ) detci: ( fci = true h0_blocksize = 400 convergence = 6 maxiter = 10 ) psi3/src/bin/detci/datafiles/ne.dz-fci.output0000644000101500007650000004422707505710764017647 0ustar crawdad****************************************************************************** tstart called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:49 2002 -------------- WELCOME TO PSI 3 -------------- LABEL = Ne RAS Tests SHOWNORM = 0 PUREAM = 1 PRINT_LVL = 1 -Geometry before Center-of-Mass shift (a.u.): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 It is a spherical top. -Geometry after Center-of-Mass shift and reorientation (a.u.): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 -SYMMETRY INFORMATION: Computational point group is D2h Number of irr. rep. = 8 Number of atoms = 1 Number of unique atoms = 1 -BASIS SETS: -Basis set on unique center 1: ( (S ( 12100.00000000 0.00120000) ( 1821.00000000 0.00909200) ( 432.80000000 0.04130500) ( 132.50000000 0.13786700) ( 43.77000000 0.36243300) ) (S ( 5.12700000 0.13003500) ) (S ( 14.91000000 1.00000000) ) (S ( 1.49100000 1.00000000) ) (S ( 0.44680000 1.00000000) ) (P ( 56.45000000 0.02087500) ( 12.92000000 0.13003200) ( 3.86500000 0.39567900) ) (P ( 1.20300000 0.62145000) ) (P ( 0.34440000 1.00000000) ) (D ( 2.15000000 1.00000000) ) ) Wrote 11268 bytes to FILE30 -BASIS SET INFORMATION: Total number of shells = 9 Number of primitives = 15 Number of AO = 20 Number of SO = 19 Irrep Number of SO ----- ------------ 1 7 2 1 3 1 4 1 5 0 6 3 7 3 8 3 -Unique atoms in the canonical coordinate system (a.u.): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 -Geometry in the canonical coordinate system (a.u.): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 -Geometry in the canonical coordinate system (Angstrom): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 -Geometry in the reference coordinate system (a.u.): Center X Y Z ------------ ----------------- ----------------- ----------------- NEON 0.000000000000 0.000000000000 0.000000000000 -------------------------------------------------------------------------- ****************************************************************************** tstop called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:49 2002 user time = 0.10 seconds system time = 0.00 seconds total time = 0 seconds ****************************************************************************** tstart called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:50 2002 -------------------------------------------- CINTS: An integrals program written in C Justin T. Fermann and Edward F. Valeev -------------------------------------------- -OPTIONS: Print level = 1 Integral tolerance = 1e-15 Max. memory to use = 2500000 double words Number of threads = 1 LIBINT's real type length = 64 bit -CALCULATION CONSTANTS: Label = Ne RAS Tests Number of atoms = 1 Number of atomic orbitals = 20 Number of symmetry orbitals = 19 Maximum AM in the basis = 2 -SYMMETRY INFORMATION; Computational point group = D2h Number of irreps = 8 Wrote 2544 two-electron integrals to IWL file 33 ****************************************************************************** tstop called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:50 2002 user time = 0.02 seconds system time = 0.00 seconds total time = 0 seconds ****************************************************************************** tstart called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:50 2002 ------------------------------------------ CSCF3.0: An SCF program written in C Written by too many people to mention here ------------------------------------------ label = Ne RAS Tests wfn = DETCI reference = RHF multiplicity = 1 charge = 0 direct SCF = false dertype = NONE convergence = 10 maxiter = 40 guess = AUTO nuclear repulsion energy 0.0000000000000 first run, so defaulting to core-hamiltonian guess level shift = 0.100000 diis scale factor = 1.000000 iterations before extrapolation = 0 6 error matrices will be kept keeping integrals in 19680 bytes of core The lowest eigenvalue of the overlap matrix was 3.571099e-02 Using DOCC and SOCC to determine occupations Symmetry block: Ag B1g B2g B3g Au B1u B2u B3u DOCC: 2 0 0 0 0 1 1 1 SOCC: 0 0 0 0 0 0 0 0 reading integrals in the IWL format from files 33,35,36,37 wrote 976 integrals to file92 iter total energy delta E delta P diiser 1 -113.4942435866 1.134942e+02 0.000000e+00 0.000000e+00 2 -122.2474533088 8.753210e+00 1.089410e-01 3.191080e+00 3 -127.3265845862 5.079131e+00 8.073439e-02 1.385693e+00 4 -128.5135397602 1.186955e+00 2.150755e-02 8.210789e-01 5 -128.5238566167 1.031686e-02 2.838908e-03 6.370154e-02 6 -128.5240128879 1.562712e-04 2.770506e-04 8.247475e-03 7 -128.5240130170 1.290596e-07 8.657647e-06 3.292812e-04 8 -128.5240130213 4.290598e-09 1.658234e-06 6.121972e-05 9 -128.5240130213 6.781420e-11 2.732875e-07 8.366924e-06 10 -128.5240130213 1.421085e-13 8.605894e-09 2.842900e-07 11 -128.5240130213 0.000000e+00 6.285998e-10 1.962657e-08 12 -128.5240130213 0.000000e+00 2.492985e-12 7.945495e-11 Orbital energies (a.u.): Doubly occupied orbitals 1Ag -32.766993 2Ag -1.923342 1B1u -0.844461 1B2u -0.844461 1B3u -0.844461 Unoccupied orbitals 2B1u 1.161558 2B2u 1.161558 2B3u 1.161558 3Ag 1.700202 4Ag 5.077717 1B1g 5.077717 1B2g 5.077717 1B3g 5.077717 5Ag 5.077717 3B2u 6.529057 3B1u 6.529057 3B3u 6.529057 6Ag 13.035035 7Ag 82.779763 total energy = -128.524013021329 kinetic energy = 128.545262032203 nuc. attr. energy = -311.145854639588 elec. rep. energy = 54.076579586056 potential energy = -257.069275053532 virial theorem = 2.000165331057 wavefunction norm = 1.000000000000 ****************************************************************************** tstop called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:51 2002 user time = 0.01 seconds system time = 0.00 seconds total time = 1 seconds ****************************************************************************** tstart called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:51 2002 ************************************************** * TRANSQT: Program to transform integrals from * * the SO basis to the MO basis. * * * * Daniel, David, & Justin * * Sept 1995 * ************************************************** Input Parameters: ----------------- Wavefunction = DETCI Reference orbitals = RHF Backtrans = No Print MOs = No Freeze Core = Yes Do All TEI = No Memory (Mbytes) = 20.0 Max Buckets = 199 First Tmp File = 150 Presort File = 41 Source TEI File = 33 Opdm In File = 73 Opdm Out File = 76 Lag In File = 75 Keep Presort = No J File = 91 Keep J = No M File = 72 Bare OEI file = 35 Frozen Core OEI file = 35 Sorted TEI file = 72 Delete TEI source file = Yes Add TPDM Ref Part = No Do Bare OEI tranform = No Do FZC OEI tranform = Yes Tolerance = 1.0e-14 Print Level = 1 Print TE Ints = No Print OE Ints = No Print Sorted TE Ints = No Print Sorted OE Ints = No Reorder MOs = No Check C Orthonormality = No QRHF orbitals = No IVO orbitals = No Pitzer = No File30 Parameters: ------------------ Number of irreps = 8 Number of SOs = 19 Number of MOs = 19 Label # SOs # MOs # FZDC # DOCC # SOCC # VIRT # FZVR ----- ----- ----- ------ ------ ------ ------ ------ Ag 7 7 0 2 0 5 0 B1g 1 1 0 0 0 1 0 B2g 1 1 0 0 0 1 0 B3g 1 1 0 0 0 1 0 Au 0 0 0 0 0 0 0 B1u 3 3 0 1 0 2 0 B2u 3 3 0 1 0 2 0 B3u 3 3 0 1 0 2 0 Nuclear Repulsion Energy = 0.0000000000 Total SCF Energy = -128.5240130213 Reading one-electron integrals...done. Pre-sorting two-electron ints... Frozen core energy = 0.000000000000000 Transforming two-electron ints... Sorting half-transformed integrals... Finished half-transform... Working on second half... Transformation finished. Two-electron integrals written to file72. Transforming one-electron integrals... Frozen-core operator written to file 35. ****************************************************************************** tstop called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:51 2002 user time = 0.10 seconds system time = 0.06 seconds total time = 0 seconds ****************************************************************************** tstart called on aurelius.chemistry.gatech.edu Mon Jun 24 15:16:51 2002 ******************************************************* D E T C I C. David Sherrill Matt L. Leininger 18 June 1999 ******************************************************* PARAMETERS: EX LVL = 10 H0 BLOCKSIZE = 400 VAL EX LVL = 0 H0 GUESS SIZE= 400 H0COUPLINGSIZE= 0 H0 COUPLING = no NPRINT = 20 MAX DET = 10000 MAXITER = 12 FREEZE CORE = yes NUM ROOTS = 1 ICORE = 1 PRINT = 1 FCI = yes CONV = 6 MIXED = yes E CONV = 6 MIXED4 = yes OEI FILE = 35 R4S = no OEI ERASE = no REPL OTF = no TEI FILE = 72 DIAG METHOD = SEM PRECONDITIONER= DAVIDSON UPDATE = DAVIDSON S = 0 Ms0 = yes TEI ERASE = no MAXNVECT = 13 RESTART = no RESTART VECS = 0 GUESS VECTOR = H0BLOCK OPENTYPE = NONE GENCI ALG = no REF SYM = auto COLLAPSE SIZE = 1 HD AVE = EVANGELISTI LSE = no LSE ITER = 0 HD OTF = yes NO DFILE = no MPN = no MPN SCHMIDT = no WIGNER = no ZERO BLOCKS = no PERT Z = 1.0000 ROOT = 0 PTHREADS = no NTHREADS = 1 SF_RESTRICT = no FILES = 50 51 52 53 ORBITALS: NMO = 19 NUM ALP = 5 ORBS IN CI = 19 NUM ALP EXPL = 5 FROZEN CORE = 0 NUM BET = 5 RESTR CORE = 0 NUM BET EXPL = 5 IOPEN = no RAS1 LVL = 4 A RAS3 MAX = 5 RAS1 MIN = 0 B RAS3 MAX = 5 A RAS1 LVL = 4 RAS4 LVL = 19 A RAS1 MIN = 0 A RAS4 MAX = 0 A RAS1 MAX = 5 B RAS4 MAX = 0 B RAS1 LVL = 4 RAS4 MAX = 0 B RAS1 MIN = 0 A RAS34 MAX = 5 B RAS1 MAX = 5 B RAS34 MAX = 5 RAS3 LVL = 5 RAS34 MAX = 10 RAS3 MAX = 10 DOCC = 2 0 0 0 0 1 1 1 SOCC = 0 0 0 0 0 0 0 0 FROZEN DOCC = 0 0 0 0 0 0 0 0 FROZEN UOCC = 0 0 0 0 0 0 0 0 RAS 1 = 2 0 0 0 0 1 1 1 RAS 2 = 0 0 0 0 0 0 0 0 RAS 3 = 5 1 1 1 0 2 2 2 RAS 4 = 0 0 0 0 0 0 0 0 ******************************************************* There are 11628 alpha strings There are 11628 beta strings CI space contains 8 blocks CI space requires 16919232 determinants Check SCF Energy from 1- and 2-electron integrals SCF Energy (ref): -128.5240130213 Nuclear repulsion energy: 0.0000000000 One-electron energy: -182.6005926074 Two-electron energy: 54.0765795861 Frozen core energy: 0.0000000000 Total electronic energy: -128.5240130213 Total SCF energy: -128.5240130213 CI vector/subblock length = 16919232 *** H0 Block Eigenvalue = -128.61475490 Find the roots by the Simultaneous Expansion Method (Block Davidson Method) Energy convergence = 1e-06 RMS CI vector convergence = 1e-06 Using 1 initial trial vectors Iter 0 Root 1 = -128.614754897 Delta_E -1.286E+02 Delta_C 2.041E+00 Iter 1 Root 1 = -128.759970994 Delta_E -1.452E-01 Delta_C 2.836E-01 Iter 2 Root 1 = -128.762745000 Delta_E -2.774E-03 Delta_C 6.655E-02 Iter 3 Root 1 = -128.762893849 Delta_E -1.488E-04 Delta_C 1.306E-02 Iter 4 Root 1 = -128.762900401 Delta_E -6.553E-06 Delta_C 3.218E-03 Iter 5 Root 1 = -128.762900748 Delta_E -3.467E-07 Delta_C 9.742E-04 Iter 6 Root 1 = -128.762900782 Delta_E -3.445E-08 Delta_C 2.346E-04 Iter 7 Root 1 = -128.762900784 Delta_E -1.767E-09 Delta_C 5.846E-05 Iter 8 Root 1 = -128.762900784 Delta_E -1.090E-10 Delta_C 1.262E-05 Iter 9 Root 1 = -128.762900784 Delta_E -5.002E-12 Delta_C 2.686E-06 Warning: Norm of correction (root 0) is < 1.0E-13 Iter 10 Root 1 = -128.762900784 Delta_E -1.990E-13 Delta_C 5.903E-07 c ROOT 1 ECI = -128.7629007841444 The 20 most important determinants 1 -0.984931 ( 5832, 5832) 1Ag X 2Ag X 1B1uX 1B2uX 1B3uX 2 0.037659 ( 6021, 6021) 1Ag X 2Ag X 1B2uX 1B3uX 2B1uX 3 0.037659 ( 6232, 6232) 1Ag X 2Ag X 1B1uX 1B3uX 2B2uX 4 0.037659 ( 6627, 6627) 1Ag X 2Ag X 1B1uX 1B2uX 2B3uX 5 -0.027245 ( 6021, 6232) 1Ag X 2Ag X 1B1uB 1B2uA 1B3uX 2B1uA 2B2uB 6 -0.027245 ( 6232, 6021) 1Ag X 2Ag X 1B1uA 1B2uB 1B3uX 2B1uB 2B2uA 7 0.027245 ( 6021, 6627) 1Ag X 2Ag X 1B1uB 1B2uX 1B3uA 2B1uA 2B3uB 8 0.027245 ( 6627, 6021) 1Ag X 2Ag X 1B1uA 1B2uX 1B3uB 2B1uB 2B3uA 9 -0.027245 ( 6232, 6627) 1Ag X 2Ag X 1B1uX 1B2uB 1B3uA 2B2uA 2B3uB 10 -0.027245 ( 6627, 6232) 1Ag X 2Ag X 1B1uX 1B2uA 1B3uB 2B2uB 2B3uA 11 -0.021659 ( 5833, 6232) 1Ag X 2Ag B 1B1uX 1B2uA 1B3uX 3Ag A 2B2uB 12 -0.021659 ( 6232, 5833) 1Ag X 2Ag A 1B1uX 1B2uB 1B3uX 3Ag B 2B2uA 13 0.021659 ( 5833, 6021) 1Ag X 2Ag B 1B1uA 1B2uX 1B3uX 3Ag A 2B1uB 14 0.021659 ( 6021, 5833) 1Ag X 2Ag A 1B1uB 1B2uX 1B3uX 3Ag B 2B1uA 15 0.021659 ( 5833, 6627) 1Ag X 2Ag B 1B1uX 1B2uX 1B3uA 3Ag A 2B3uB 16 0.021659 ( 6627, 5833) 1Ag X 2Ag A 1B1uX 1B2uX 1B3uB 3Ag B 2B3uA 17 0.020765 ( 5832, 6325) 1Ag X 2Ag X 1B1uA 1B2uA 1B3uX 2B1uB 2B2uB 18 0.020765 ( 6325, 5832) 1Ag X 2Ag X 1B1uB 1B2uB 1B3uX 2B1uA 2B2uA 19 0.020765 ( 5832, 6803) 1Ag X 2Ag X 1B1uX 1B2uA 1B3uA 2B2uB 2B3uB 20 0.020765 ( 6803, 5832) 1Ag X 2Ag X 1B1uX 1B2uB 1B3uB 2B2uA 2B3uA Total Time (s) %Time %Relative ----------------------------------------------------- Read 654.456158 Write 65.028835 Sigma1 0.000000 Sigma2 419.969152 Sigma3 1788.805155 S1 Thread 0.000000 S2 Thread 0.000000 S3 Thread 0.000000 "A good bug is a dead bug" - Starship Troopers "I didn't write FORTRAN. That's the problem." - Edward Valeev ****************************************************************************** tstop called on aurelius.chemistry.gatech.edu Mon Jun 24 16:09:18 2002 user time = 2396.24 seconds system time = 432.54 seconds total time = 3147 seconds psi3/src/bin/detci/datafiles/ne.input0000644000101500007650000000323107046653677016272 0ustar crawdadpsi: ( exec = ($ints $drt $trans $cisort $gugaci $onepdm "psiclean") ) default: ( label = "Ne RAS Tests" memory = (8.0 MB) symmetry = d2h opentype = none dertype = none wfn = ci ex_lvl = 2 val_ex_lvl = 2 docc = (2 0 0 0 0 1 1 1) frozen_docc = (1 0 0 0 0 0 0 0) val_orb = (2 0 0 0 0 2 2 2) ras1 = (1 0 0 0 0 1 1 1) ras2 = (1 0 0 0 0 1 1 1) files: ( default: ( name = "Ne" volume1 = "/tmp1/sherrill/" volume2 = "/tmp2/sherrill/" volume3 = "/tmp3/sherrill/" volume4 = "/tmp4/sherrill/" ) file30: ( nvolume = 1 volume1 = "./" ) ) ) input: ( atoms = (neon) basis = (dzp) charges = (10) puream = true units = angstrom geometry = ( ( 0.0000000000 0.0000000000 0.0000000000 ) ) ) basis: ( neon: dzp = ( (S(12100.0000 0.001200) ( 1821.0000 0.009092) ( 432.8000 0.041305) ( 132.5000 0.137867) ( 43.7700 0.362433)) (S( 5.1270 0.130035)) (S( 14.9100 1.000000)) (S( 1.4910 1.000000)) (S( 0.4468 1.000000)) (P( 56.4500 0.020875) ( 12.9200 0.130032) ( 3.8650 0.395679)) (P( 1.2030 0.621450)) (P( 0.3444 1.000000)) (D( 2.1500 1.000000)) ) ) onepdm: ( mk_opdm = true print = ((on opdmmo)) ) detci: ( h0_blocksize = 400 maxiter = 35 convergence = 11 mixed = false ) psi3/src/bin/detci/datafiles/t1.dat0000644000101500007650000000013707046653677015627 0ustar crawdad 12536 3.22 128829 79.00 1002708 1465.00 9185280 14007.00 27944940 34831.00 psi3/src/bin/detci/datafiles/t2.dat0000644000101500007650000000013207046653677015623 0ustar crawdad 12536 0.36 128829 3.45 1002708 33.00 9185280 532.00 27944940 3160.00 psi3/src/bin/detci/datafiles/timings0000644000101500007650000003051410745422364016173 0ustar crawdadH2O DZ FZC (2 0 0 0) Hardly any symmetry adaptation: (unoptimized) 4 iterations only user time = 602.35 seconds system time = 0.30 seconds total time = 1033 seconds H2O DZ FZC (2 0 0 0) Hardly any symmetry adaptation: (optimized -O) 4 iterations only user time = 115.60 seconds system time = 0.05 seconds total time = 196 seconds H2O DZ FZC (2 0 0 0) Hardly any symmetry adaptation: (optimized -O -qmaf -qfold) 4 iterations only user time = 115.57 seconds system time = 0.04 seconds total time = 196 seconds H2O DZ FZC (2 0 0 0) Full symmetry adaptation with scatter/gather (unoptimized) 4 iterations only user time = 250.63 seconds system time = 0.02 seconds total time = 427 seconds H2O DZ FZC (2 0 0 0) Full symm adaptation with scatter/gather (opt -O) 4 iterations only user time = 50.38 seconds system time = 0.06 seconds total time = 81 seconds H2O DZ FZC (2 0 0 0) Full symm adaptation with scatter/gather (-O -qmaf -qfold) 4 iterations only user time = 50.44 seconds system time = 0.01 seconds total time = 86 seconds H2O DZ FZC (2 0 0 0) Full symm adaptation with scatter/gather (-O -qmaf -qfold) Extra speed enhancements in sigma3 added during December, should be fast now FCI convergence set to 1E-7 actually converged to 1E-5 (9 iterations) user time = 91.70 seconds system time = 0.06 seconds total time = 96 seconds Compares to 9 iteration GUGACI with user time = 30.45 seconds ========================================================================== More realistic timings 4/21/95 (IBM RS/6000 model 590) ========================================================================== H2O DZ 0fzc 0fzv GUGA takes 15650 s for 10 iterations E = -76.1564081972 C0=0.976353 FCI takes 1768 s for 11 iterations E = -76.1564067058 C0=0.976421 H2O DZ 1fzc 0fzv GUGA takes 949 s for 11 iterations E = -76.143084612027 C0=0.976398 FCI takes 109 s for 11 iterations E = -76.143083248457 C0=0.976421 H2O DZ 2fzc 0fzv GUGA takes 30 s for 9 iterations E = -76.1008391981 C0=0.982307 FCI takes 8 s for 11 iterations E = -76.1008391737 C0=0.982309 (note that maxiter=10 is really 11 iterations for now) ========================================================================== Timings using new SEM iterator (IBM RS/6000 model 3CT) See NB VIII-17 1/3/96 ========================================================================== H2O DZ 0fzc 0fzv GUGA takes 17118 s for 11 iterations E = -76.1564081973 C0=0.976353 256,473 CSFs RASCI takes 1825 s for 11 iterations E = -76.1564081972 C0=0.976353 1,002,708 determinants H2O DZ 1fzc 0fzv GUGA takes 856 s for 11 iterations E = -76.1430846120 C0=0.976398 37,353 CSFs RASCI takes 132 s for 11 iterations E = -76.1430846120 C0=0.976398 128,829 determinants H2O DZ 2fzc 0fzv GUGA takes 28 s for 9 iterations E = -76.1008391981 C0=0.982307 4,032 CSFs RASCI takes 8 s for 10 iterations E = -76.1008391981 C0=0.982307 12,536 determinants RASCI is doing one extra iteration (already counted above) to get the SCF energy and initial sigma vector ========================================================================== ========================================================================== Using new SEM iterator IBM RS/6000 model 590 Convergence = 5, Maxiter = 10, H0block = default(40), NumInitVecs=1 Init vec is using H0 eigenvector (same for above H20 set I think) Report user times again because I think timing routines are now fixed ========================================================================== Ne Jeppe's DZP+ basis, 0fzc 0fzv RASCI for 10 (11) iterations E = -128.68519268360 C0=0.985636 9,185,280 determinants user = 24174.85s, system = 779.25s, total = 30344s GUGACI for 9 iterations E = -128.68519268356 C0=0.985636 2,083,968 CSFs user = 124088.36s, system = 245.21s, total = 126059s DETCI v. 4/25/96 with -O3 and Olsen Sparse Vect DETCI Opts: SEM, conv=6, e_conv=10, H0block=40, FCI=true, GuessVect=H0block, MaxIter=10 DETCI for 10 (11) iterations E = -128.68519268360 C0=-0.985636 C1=0.040702 9,185,280 determinants user = 3103s, system = 698s, total = 5852s ========================================================================== ========================================================================== Using SEM iterator on IBM RS/6000 3CT DZP (5d) FCI C2; 2FZC, 2FZV; expt. geom [cf. NB IX 1-4] Convergence = 5, Energy_Convergence = 9, Maxiter = 12, H0block = 100, GuessVect = H0block, FCI = true GUGA for 16 iterations E = -75.728972446364 C0=0.837483 C1=-0.337678 6,571,116 CSFs user = 519828s, system = 3038s, total = 557296s DETCI for 12 (13) iterations E = -75.7289063383746 C0=0.829415 C1=-0.328357 **Does not match energy because GUGA used CISD-NO's** 27,944,940 determinants user = 125241s, system = 4055s, total = 141917s DETCI for an additional 9 (10) iterations E = -75.7289065652565 C0=0.829521 C1=-0.328267 user = 84040s, system = 3953s, total = 116672s (time/iter is v. different!) rerun using new version of code (5/7/96) on IBM RS/6000 3CT DETCI for 12 (13) iterations E = -75.7289063383745 C0=0.829415 C1=-0.328357 **Does not match energy because GUGA used CISD-NO's** 27,944,940 determinants user = 17282s, system = 4007s, total = 41080s ========================================================================== ========================================================================== Using new DETCI routine as of 5/7/96 on IBM RS/6000 3CT H2O DZ 0fzc 0fzv; Geometry of Bauschlicher and Taylor JCP 85, 2779 (1986) GUGA Opts : [default] conv=10, MaxIter=16 DETCI Opts: SEM, conv=6, e_conv=6, H0block=40, FCI=true, GuessVect=H0block, MaxIter=10 GUGA for 11 iterations E = -76.156698925642 C0=0.973964 C1=-0.056462 256 473 CSFs user = 15727s, system=28s, total=16113s DETCI for 10(11) iterations E = -76.156698925553 C0=-0.97396 C1=0.05646 1002708 determinants user = 308s, system = 37s, total = 364s fci=false, icore=1 user = 515s, system = 36s, total = 593s fci=false, icore=2 user = 517s, system = 45s, total = 601s fci=false, icore=0 user = 524s, system = 41s, total = 621s ------------------------------------------------------------------------- H2O DZ 1fzc 0fzv; Same options as above GUGA for 11 iterations E = -76.143399207763 C0=0.974008 C1=-0.056491 37 353 CSFs user = 849s, system = 4s, total = 869s DETCI for 10(11) iterations E = -76.143399207701 C0=-0.974007 C1=0.056491 128829 determinants user = 30s, system = 5s, total = 38s fci=false, icore=1 user = 57s, system = 4s, total = 72s fci=false, icore=2 user = 57s, system = 6s, total = 77s fci=false, icore=0 user = 60s, system = 5s, total = 67s ------------------------------------------------------------------------- H2O DZ 2fzc 0fzv; Same options as above GUGA for 9 iterations E = -76.100906329720 C0=0.979989 C1=-0.057161 4 302 CSFs user = 26.84s, system = 0.45s, total = 29s DETCI for 10(11) iterations E = -76.100906329746 C0=0.979989 C1=-0.057162 12536 determinants user = 2.39s, system = 0.51s, total = 4s ========================================================================== 7 June 1999 Recent timings for my DZ FCI test case. N.B. These are now at the DZP SCF Opt Geom in datafiles/h2o.dz.input DETCI for 10(11) iterations E = -76.1564081972266 C0=0.976353 C1=-0.056881 These differ from older timings above from around 1996 because the h0_blocksize default has gone up to 400 from 40, and the H0 block calcluation method default has changed to allow various pure-eigenfunction preconditioners now. ------------------------------------------------------------------------ IBM 3CT (scimitar.cchem.berkeley.edu) 256 MB RAM 2fzc regl: 14.190u 0.680s 0:15.46 96.1% 283+6354k 0+0io 71pf+0w essl: 15.090u 0.740s 0:17.90 88.4% 287+6385k 0+0io 146pf+0w 0fzc regl: 564.700u 57.510s 12:23.81 83.6% 333+22372k 0+0io 7465pf+0w essl: 563.810u 51.410s 10:39.56 96.1% 324+22664k 0+0io 613pf+0w 0fzc fci=false icore=1 regl: 764.680u 50.100s 13:44.51 98.8% 331+23695k 0+0io 350pf+0w essl: 857u 55s 994t Dual Pentium II 350MHz (venabili.ix.netcom.com) 128 MB RAM 2fzc: regular: 14.030u 0.460s 0:14.73 98.3% 0+0k 0+0io 883pf+0w dual blas: 19.270u 0.490s 0:20.32 97.2% 0+0k 0+0io 316pf+0w 0fzc: regular 472.210u 64.880s 12:27.51 71.8% 0+0k 0+0io 399709pf+2815w dual blas: 416.480u 63.270s 11:16.86 70.8% 0+0k 0+0io 328869pf+3367w ------------------------------------------------------------------------ Profiled on scimitar (3CT): The extra time is due to the new average diagonal elements routine with HD_AVE = HD_KAVE (default) Final energy = -76.1564081972266 Delta_C = 3.164E-05 Timings from tstop (regular no-blas version): 553u, 56s, 752t .s3_block_vdiag 43.6 240.33 240.33 176 1365.51 .calc_hd_block_ave 36.4 200.62 440.95 44 4559.5 .s2_block_vfci 9.7 53.44 494.39 44 1214.5 Try other options....(all set to same maxiter=10) HD_AVE = HD_EXACT (old version?) Final energy = -76.1564081972818 Delta_C = 1.422E-05 regular: 442u, 55s, 571t .s3_block_vdiag 53.3 235.15 235.15 176 1336.08 .calc_hd_block 21.7 95.90 331.05 44 2179.5 .s2_block_vfci 11.8 51.86 382.91 44 1178.6 EVANGELISTI Final energy = -76.1564081972673 Delta_C = 1.945E-05 regular: 347.720u 53.360s 6:56.19 96.3% 352+22472k 0+0io 87pf+0w (or 347u, 53s, 416t) [tracks time output, good] .s3_block_vdiag 67.8 235.14 235.14 176 1336.02 .s2_block_vfci 15.1 52.42 287.56 44 1191.4 .memset 3.6 12.40 299.96 LEININGER Final energy = -76.1564081966751 Delta_C = 9.823E-05 regular: 347.820u 53.350s 7:04.54 94.4% 353+22331k 0+0io 74pf+0w .s3_block_vdiag 67.9 235.33 235.33 176 1337.10 .s2_block_vfci 15.0 52.09 287.42 44 1183.9 .memset 3.6 12.44 299.86 These results lead me to believe that the default H0_blocksize of 400 is too large for CAS calculations, at least in conjunction with the default of HD_KAVE. Changing default down to 100 for wfn=detcas. ====================================================================== H2O FCI 0fzc 1002708 dets H0_blocksize = 40 (as in older tests above) HD_AVE = HD_KAVE (current default) E = -76.1564081968497 C0=-0.976353 C1=0.056880 venabili regular: 463u, 64s, 751t venabili dual opt blas: 403u, 64s, 650t scimitar regular: 555u, 53s, 677t scimitar essl blas: 509u, 53s, 633t indicates a slight advantage to blas...should run something bigger ====================================================================== H2O FCI 0fzc 1002708 dets H0_blocksize = 40 (as in older tests above) HD_AVE = EVANGELISTI (new default) for aurelius, KD_AVE for dido E = -76.1564081972099 C0=-0.976353 C1=0.056881 aurelius (2GB RAM, RedHat Linux 7.3, Dual Athlon MP 2000+, 2 RAID0 OS striped 36GB U160 10k SCSI HDD) (new) plato (4GB RAM, RedHat Linux 7.3, Dual P4-Xeon 2.4GHz, 2 RAID0 OS striped 36GB U160 10k SCSI HDD) (new) cicero (4GB RAM, Fedora Core 4, Dual-core Pentium-D EMT-64, 2 RAID0 OS striped 80GB SATA 10k HDD) 10 (11) iters as usual (iters start from 0 so really 11). dido (375MHz PowerIII-2) : 89u, 29s, 132t aurelius : 109u, 19s, 130t plato : 59u, 13s, 73t cicero : 52u, 5s, 57t Threaded code as of 6/24/02; 2 threads, was less efficient for aurelius, didn't seem to take for dido (maybe wasn't compiled right?). ====================================================================== Ne custom DZP basis FCI 0fzc file ne.dz-fci.input 16,919,232 determinants h0_blocksize = 400 convergence = 6 10 (11) iterations E = -128.7629007841444 C0=-0.984931 C1=0.037659 dido : 2899u, 540s, 3820t aurelius : 2396u, 433s, 3147t plato : 1164u, 226s, 1468t plato** : 1092u, 194s, 1289t (3 disks... above was 2 or 3) cicero: : 966u, 76s, 1048t ====================================================================== BH cc-pVQZ FCI 1fzc 3,068,596 determinants convergence = 6 8 (9) iterations E = -25.2351554791625 for R(BH)=1.2 SP2 node (PowerIII-2 375MHz) : 1905u, 60s, 1978t cicero* : 1087u, 12s, 1103t *Some defaults must have changed, did not converge in 8 iters. Terminated at 8 iters to allow comparison of timings. psi3/src/bin/detci/detci.10000644000101500007650000005160510745410775014023 0ustar crawdad.TH detci 1 " 9 Feb, 1996" "" "" . \" . \" Notice of Document Modification . \" . \" man page created by David Sherrill, 9 Feb 96 . \" . \" .SH NAME detci \- Determinant Configuration Interaction Program .SH DESCRIPTION .LP The program .B detci diagonalizes the nonrelativistic electronic Hamiltonian operator in a basis of Slater determinants. The set of determinants used (CI space) may be chosen in a variety of ways. The program can handle any CI space which can be formulated as a Restricted Active Space CI. This includes CISD, CISDT, CISDTQ, etc., up to Full CI, as well as multireference CI's in which the references are chosen as all determinants in which up to n electrons are excited in some MO active space. This includes CISD[T], CISD[TQ], and second-order CI (SOCI). .SH REFERENCES .LP Restricted Active Space CI: .IP "1." Determinant Based Configuration Interaction Algorithms for Complete and Restricted Configuration Interaction Spaces, J. Olsen, B. O. Roos, P. Jorgensen, and H. J. Aa. Jensen, J. Chem. Phys. 89, 2185 (1988). .IP "2." Passing the One-Billion Limit in Full Configuration-Interaction (FCI) Calculations, J. Olsen, P. Jorgensen, and J. Simons, Chem. Phys. Lett. 169, 463 (1990). .LP Tertiary virtual subspaces (RAS IV): .IP "1." Compact Variational Wavefunctions Incorporating Limited Triple and Quadruple Excitations, C. D. Sherrill and H. F. Schaefer, J. Phys. Chem. 100, 6069-6075 (1996). .LP DETCI Program: .IP "1." C. D. Sherrill, Computational Algorithms for Large-Scale Full and Multi-Reference Configuration Interaction Wavefunctions, PhD thesis, University of Georgia, Athens, GA, 1996. .SH FILES REQUIRED .nf input.dat \- Input file file71 \- Transformed one-electron integrals file72 \- Transformed two-electron integrals .fi .SH TEMPORARY FILES USED .nf file50 \- Diagonal of Hamiltonian file51 \- CI vectors file52 \- Sigma vectors file53 \- D file (correction vectors) .fi .SH FILES UPDATED .nf output.dat \- Output file .fi .SH INPUT FORMAT .LP The following command-line arguments are available: .IP "\fI-quiet\fP" This gives the same result as \fBPRINT=0\fP. .IP "\fI-o fname\fP" Gives the filename for the output file. Defaults to output.dat. .IP "\fI-e\fP" This option causes the total CI energy or energies to be written to a file called detci_energies.dat. .IP "\fI-c value\fP" Gives a looser convergence on the CI vector, useful in DETCAS calculations. The value is a real number, not an integer as in \fBCONVERGENCE\fP. The convergence used will be the looser of \fBvalue\fP and \fBCONVERGENCE\fP. Additional input for this program is read from the file .pN INPUT . The following keywords are valid: .IP "\fBCONVERGENCE =\fP \fIinteger\fP" Convergence desired on the CI vector. Convergence is achieved when the RMS of the error in the CI vector is less than 10**(-n). The default is 4 for energies and 7 for gradients. This is not the same CI vector convergence criterion as found in GUGACI. .IP "\fBDOCC =\fP \fIinteger_array\fP" This vector gives the number of doubly occupied orbitals in each irrep. There is no default. .IP "\fBSOCC =\fP \fIinteger_array\fP" This vector gives the number of singly occupied orbitals in each irrep. There is no default. .IP "\fBDIAG_METHOD =\fP \fIstring\fP" This specifies which method is to be used in diagonalizing the Hamiltonian. The valid options are: \fBRSP\fP, to form the entire H matrix and diagonalize using libciomr to obtain all eigenvalues (n.b. requires HUGE memory); \fBOLSEN\fP, to use Olsen's preconditioned inverse subspace method (1990); \fBMITRUSHENKOV\fP, to use a 2x2 Olsen/Davidson method; and \fBDAVIDSON\fP (or \fBSEM\fP) to use Liu's Simultaneous Expansion Method, which is identical to the Davidson method if only one root is to be found. There also exists a SEM debugging mode, \fBSEMTEST\fP. The \fBSEM\fP method is the most robust, but it also requires 2(N*M)+1 CI vectors on disk, where N is the maximum number of iterations and M is the number of roots. .IP "\fBPRECONDITIONER =\fP \fIstring\fP" This specifies the type of preconditioner to use in the selected diagonalization method. The valid options are: \fBDAVIDSON\fP which approximates the Hamiltonian matrix by the diagonal elements; \fBH0BLOCK_INV\fP which uses an exact Hamiltonian of H0_BLOCKSIZE and explicitly inverts it; \fBGEN_DAVIDSON\fP which does a spectral decomposition of H0BLOCK; \fBITER_INV\fP using an iterative approach to obtain the correction vector of H0BLOCK. The H0BLOCK_INV, GEN_DAVIDSON, and ITER_INV approaches are all formally equivalent but the ITER_INV is less computationally expensive. Default is \fBDAVIDSON\fP. .IP "\fBREFERENCE =\fP \fIstring\fP" This specifies the type of reference function. This is RHF or ROHF. UHF and TWOCON are not supported. For ROHF, a multiplicity of 1 implies an open-shell singlet. The program will run for open-shell singlets, but it has not been properly adapted to use a correct two-determinant reference in this case, so running with open-shell singlet references is not advised except for full CI's. .IP "\fBUPDATE =\fP \fIstring\fP" \fBDAVIDSON\fP employs the standard DAVIDSON update or correction vector formula, while \fBOLSEN\fP uses the OLSEN correction vector. Default is \fBDAVIDSON\fP. .IP "\fBHD_OTF =\fP \fIboolean\fP" If TRUE the diagonal elements of the Hamiltonian matrix are computed on-the-fly, otherwise a diagonal element vector is written to a separate file on disk. Default is TRUE. .IP "\fBHD_AVE =\fP \fIstring\fP" \fBHD_EXACT\fP uses the exact diagonal energies which results in expansion vectors which break spin symmetry. \fBHD_KAVE\fP averages the diagonal energies over a spin-coupling set yielding spin pure expansion vectors. \fBORB_ENER\fP employs the sum of orbital energy approximation giving spin pure expansion vectors but usually doubles the number of davidson iterations. \fBEVANGELISTI\fP uses the sums and differences of orbital energies with the SCF reference energy to produce spin pure expansion vectors. \fBLEININGER\fP approximation which subtracts the one-electron contribution from the orbital energies, multiplies by 0.5, and adds the one-electron contribution back in, producing spin pure expansion vectors and developed by yours truly and works as well as \fBEVANGELISTI\fP. .IP "\fBNODFILE =\fP \fIboolean\fP" Only possible if NUM_ROOTS = 1. Uses the last vector space in the BVEC file to write scratch DVEC rather than using a separate DVEC file. .IP "\fBENERGY_CONVERGENCE =\fP \fIinteger\fP" Convergence desired on the CI energy. The default is 6 for single point energies and 8 for gradients or CASSCF. .IP "\fBEX_LVL =\fP \fIinteger\fP" Excitation level for excitations into virtual orbitals (default 2, i.e. CISD). .IP "\fBVAL_EX_LVL =\fP \fIinteger\fP" Excitation level for references in orbitals of RAS II. Defaults to zero. .IP "\fBFCI =\fP \fIboolean\fP" If this flag is set to \fBTRUE\fP, then the storage of strings is simplified for a Full CI and the calculation requires less overhead. However, the final results should be identical to those when \fBFCI = FALSE\fP. May cause unpredictable results if \fBFCI = TRUE\fP but \fBEX_LVL\fP is not consistent with a Full CI. .IP "\fBFROZEN_DOCC =\fP \fIinteger_array\fP" The number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. The Cotton ordering of the irredicible representations is used. The default is the zero vector. .IP "\fBFROZEN_UOCC =\fP \fIinteger_vector\fP" The number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. The default is the zero vector. .IP "\fBFREEZE_CORE = \fP \fIboolean\fP" This option determines whether the frozen core orbitals are to be included implicitly (true) or explicitly (false). In the former case, the energetic contributions from the frozen core orbitals are folded into the one-electron integrals and into the "frozen core energy" computed by the transformation program. The default is true. .IP "\fBEXPORT_VECTOR =\fP \fIboolean\fP" This specifies whether to store converged vector(s) at the end of the run. The vector(s) is(are) stored in a transparent format such that other programs can use it easily. The format is specified in \fBsrc/lib/libqt/slaterdset.h\fP. The default is false. .IP "\fBNUM_EXPORT =\fP \fIinteger\fP" If \fBEXPORT_VECTOR\fP is set to true, the this determines the number of vectors that need to be exported at the end of the run. The default is 1. .IP "\fBGUESS_VECTOR =\fP \fIstring\fP" This specifies which type of guess vector to use in the CI iteration. Currently only used by the SEM iteration method. Accepted values are \fBUNIT\fP for a unit vector guess (\fBNUM_ROOTS\fP and \fBNUM_INIT_VECS\fP must both be 1); \fBH0_BLOCK\fP to use eigenvectors from the H0 BLOCK submatrix (default); \fBDFILE\fP to use \fBNUM_ROOTS\fP previously converged vectors in the D file; and \fBMP2\fP to use the MP2 wavefunction as a guess (not working at the moment). .IP "\fBH0_BLOCKSIZE =\fP \fIinteger\fP" This parameter specifies the size of the "H0" block of the Hamiltonian which is solved exactly. The n determinants with the lowest SCF energy are selected, and a submatrix of the Hamiltonian is formed using these determinants. This submatrix is used to accelerate convergence of the CI iterations in the \fBOLSEN\fP and \fBMITRUSHENKOV\fP iteration schemes, and also to find a good starting guess for the \fBSEM\fP method if \fBGUESS_VECTOR = H0_BLOCK\fP. Defaults to 40. Note that the program may change the given size for Ms=0 cases (\fBMs0 = TRUE\fP) if it determines that the H0 block includes only one member of a pair of determinants related by time reversal symmetry. For very small block sizes, this could conceivably eliminate the entire H0 block; the program should print warnings if this occurs. .IP "\fBH0_BLOCK_COUPLING_SIZE = \fP \fIinteger\fP" Parameters which specifies the size of the coupling block within the generalized davidson preconditioner. Default value is 1000. .IP "\fBMAX_DET = \fP \fIinteger\fP" Sets the maximum number of determinants; if the CI space is larger than this, the program aborts. This option exists to ensure that very large calculations are not run by accident. During the current developmental phase, the default is 10000, but it will be raised before long. .IP "\fBMAXITER =\fP \fIinteger\fP" Maximum number of iterations to diagonalize the Hamiltonian. Defaults to 12. .IP "\fBMs0 =\fP \fIboolean\fP" If \fBTRUE\fP, use the Ms=0 component of the state. Defaults to \fBTRUE\fP if closed-shell and to \fBFALSE\fP otherwise. Related to the \fBS\fP parameter. .IP "\fBNPRINT =\fP \fIinteger\fP" This value specifies the number of determinants which will be printed, along with their coefficients, in the list of most important determinants in the final CI vector. The default is 20. .IP "\fBNUM_ROOTS =\fP \fIinteger\fP" This value gives the number of roots which are to be obtained from the secular equations. The default is one. If more than one root is required, set \fBDIAG_METHOD\fP to \fBSEM\fP (or, for very small cases, \fBRSP\fP or \fBSEMTEST\fP). .IP "\fBNUM_INIT_VECS =\fP \fIinteger\fP" The number of initial vectors to use in the CI iterative procedure. Defaults to the number of roots. .IP "\fBOPDM =\fP \fIboolean\fP" If \fBTRUE\fP calculate the one-particle density matrix and make \fBOPDM_WRITE\fP default to \fBTRUE\fP. The default value of \fBOPDM\fP is \fBFALSE\fP. .IP "\fBOPDM_FILE =\fP \fIinteger\fP" File (unit number) for writing the one-particle density matrix if \fBOPDM_WRITE = TRUE\fP. The default value is currently 73. .IP "\fBOPDM_WRITE =\fP \fIboolean\fP" Flag for whether or not to write the one-particle density matrix to disk. .IP "\fBOPDM_PRINT =\fP \fIboolean\fP" Flag for whether or not to print the one-particle density matrix. .IP "\fBOPDM_DIAG =\fP \fIboolean\fP" Flag for whether or not to diagonalize the one-particle density matrix. .IP "\fBWRTNOS =\fP \fIboolean\fP" Flag for whether or not to write the CI natural orbitals to PSIF_CHKPT. .IP "\fBORBSFILE =\fP \fIinteger\fP" File (unit number) for writing various CI natural orbitals. The default value is 76. .IP "\fBOPDM_AVE =\fP \fIboolean\fP" Flag for whether or not to average the OPDM over several roots in order to obtain a state-average one-particle density matrix. This density matrix can be diagonalized to obtain the CI natural orbitals. .IP "\fBORBS_ROOT =\fP \fIinteger\fP" Flag for setting the root number for which CI natural orbitals are written to PSIF_CHKPT. The default value is 1 (lowest root). .IP "\fBPRINT =\fP \fIinteger\fP" This option determines the verbosity of the output. A value of 1 or 2 specifies minimal printing, a value of 3 specifies verbose printing. Values of 4 or 5 are used for debugging. Do not use level 5 unless the test case is very small (e.g. STO H2O CISD). .IP "\fBROOT =\fP \fIinteger\fP" The root to write out the two-particle density matrix for (the one-particle density matrices are written for all roots). Useful for a state-specific CASSCF or CI optimization on an excited state. .IP "\fBS =\fP \fIinteger\fP" The value of the spin quantum number S is given by this option. The default is 0 (singlet). The only thing this is actually used for is determining the phase of the redundant half of the CI vector when the Ms=0 component is used (i.e., \fBMs0 = TRUE\fP). For cases where S is not an integer, this parameter need not be entered because such a state can't have an Ms=0 component. .IP "\fBTPDM =\fP \fIboolean\fP" If \fBTRUE\fP calculate the two-particle density matrix and make \fBTPDM_WRITE\fP default to \fBTRUE\fP. The default value of \fBTPDM\fP is \fBFALSE\fP. .IP "\fBTPDM_FILE =\fP \fIinteger\fP" File (unit number) for writing the two-particle density matrix if \fBTPDM_WRITE = TRUE\fP. The default value is currently 74. .IP "\fBTPDM_WRITE =\fP \fIboolean\fP" Flag for whether or not to write the two-particle density matrix to disk. .IP "\fBTPDM_PRINT =\fP \fIboolean\fP" Flag for whether or not to print the two-particle density matrix. Typically a very bad idea except for debugging small cases. .LP There is also some less commonly used input, which novice uses of PSI will have no need to use. .IP "\fBBENDAZZOLI =\fP \fIboolean\fP" Use some routines to calculate sigma based on the papers of Bendazzoli et al. Seems to be slower and not worthwhile; may disappear eventually. Works only for full CI and I don't remember if I could see how their clever scheme might be extended to RAS in general. .IP "\fBCALC_SSQ =\fP \fIboolean\fP" If TRUE, calculate the expectation value of the S^2 operator for the final CI wavefunction for each root. In principle, DETCI should yield S^2 eigenfunctions. The default is FALSE. .IP "\fBCOLLAPSE_SIZE \fP \fIinteger\fP" Gives the number of vectors to retain when the Davidson subspace is collapsed (see \fBMAXNVECT\fP below). If greater than one, the collapsed subspace retains the best estimate of the CI vector for the previous n iterations. Defaults to 1. .IP "\fBFIRST_TMP_UNIT =\fP \fIinteger\fP" Gives the file (unit) number associated with the first scratch file used by DETCI. Other scratch files are numbered consecutively from this point, int the order H(diag), C, S, D. Each of these logical files takes up a number of physical files specified by the even more obscure input parameters \fBNUM_HD_TMP_UNITS, NUM_C_TMP_UNITS, NUM_S_TMP_UNITS, NUM_D_TMP_UNITS.\fP The user can also specify different starting points for each of these sets using the parameters \fBFIRST_HD_TMP_UNIT\fP and so forth. Splitting a file across several units may help avoid the size-of-integer problem in addressing large files that is present in DETCI and in PSI I/O libraries; but then again, I haven't tested it to see what happens. The first unit of each section is printed out under the heading FILES in the parameter output beginning the DETCI run. .IP "\fBFZC =\fP \fIboolean\fP" Determines whether the frozen core orbitals are treated as truly frozen (i.e., absent entirely from calculation, \fBFZC = TRUE\fP) or whether they are present but restricted to be doubly occupied (\fBFZC = FALSE\fP). In the GUGA CI program, this is the distinction between what it calls FZC and COR orbitals. Generally, the integrals for frozen core orbitals are not needed by DETCI but they may be needed for MCSCF or gradients. .IP "\fBICORE =\fP \fIinteger\fP" Specifies how to handle buffering of CI vectors. A value of 0 makes the program perform I/O one RAS subblock at a time; 1 uses entire CI vectors at a time; and 2 uses one irrep block at a time. Values of 0 or 2 cause some inefficiency in the I/O (requiring multiple reads of the C vector when constructing H in the iterative subspace if DIAG_METHOD = SEM), but require less core memory. .IP "\fBISTOP =\fP \fIboolean\fP" If \fBTRUE\fP then DETCI will stop after string information is formed and before integrals are read. May eventually change to an integer so that the user can select from multiple stopping points. .IP "\fBMAXNVECT =\fP \fIinteger\fP" Gives the maximum number of Davidson subspace vectors which can be held on disk for the CI coefficient and sigma vectors. (There is one H(diag) vector and the number of D vectors is equal to the number of roots). When the number of vectors on disk reaches the value of \fBMAXNVECT\fP, the Davidson subspace will be collapsed to \fBCOLLAPSE_SIZE\fP vectors for each root. This is very helpful for saving disk space. Defaults to \fBMAXITER\fP * \fBNUM_ROOTS\fP + \fBNUM_INIT_VECS\fP. .IP "\fBMIXED =\fP \fIboolean\fP" This determines whether "mixed" RAS II/RAS III excitations are allowed into the CI space. This is useful for placing additional constraints on a RAS CI. .IP "\fBMIXED4 =\fP \fIboolean\fP" This is similar to the MIXED keyword, but refers to excitations into RAS IV. .IP "\fBNUNITS =\fP \fIinteger\fP" Number of scratch files to be used in storing the C vectors (and also for the sigma vectors). .IP "\fBOEI_ERASE =\fP \fIboolean\fP" This determines whether the program erases the one-electron integrals file after it has been read. The default will eventually be true, but during development the default is false. .IP "\fBOEI_FILE =\fP \fIinteger\fP" This keyword allows the user to specify the transformed one-electron integral file. The default is 71. .IP "\fBPRINT_CIBLKS =\fP \fIboolean\fP" Specifies whether the program should print out a summary of all the blocks in the CI vector (which can be cast into matrix form, see refs.) .IP "\fBR4S =\fP \fIboolean\fP" Restricts the RAS IV strings to the minimal set, saving memory. If you are concerned about this option, you should write David for advice unless you are a DETCI expert. .IP "\fBREF_SYM =\fP \fIinteger\fP" This option allows the user to look for CI vectors of a different irrep than the reference. This probably only makes sense for Full CI, and it would probably not work with unit vector guesses. Numbering starts from zero for the totally-symmetric irrep. .IP "\fBREPL_OTF =\fP \fIboolean\fP" Tells DETCI whether or not to do string replacements on the fly. Can save a gigantic amount of memory (especially for truncated CI's) but is somewhat flaky and hasn't been tested for a while. As I recall, it only works for certain classes of RAS calculations. Contact David for assistance. Eventually, the on-the-fly replacement stuff should be redone in a much smarter way so that it doesn't take eons of CPU time. Work along these lines was once started and may be completed eventually. .IP "\fBRESTART =\fP \fIboolean\fP" This option allows the user to resume a DETCI iteration that terminated prematurely. It assumes that the CI and sigma vectors are on disk; the number of vectors specified by \fBRESTART_VECS\fP is collapsed down to one vector per root. .IP "\fBRESTART_VECS =\fP \fIinteger\fP" If \fBRESTART = TRUE\fP this specifies the number of CI (and sigma) vectors to read from disk. Typically this is the number of successfully completed iterations from a previous run times the number of roots for that run. .IP "\fBTEI_ERASE =\fP \fIboolean\fP" This determines whether the program erases the two-electron integrals file after it has been read. The default will eventually be true, but during development the default is false. .IP "\fBTEI_FILE =\fP \fIinteger\fP" This keyword allows the user to specify the transformed two-electron integral file. The default is 72. .IP "\fBMPN =\fP \fIboolean\fP" When this option is TRUE DETCI will compute the MPn series out to kth order where k is determined by maxnvect. For open-shell systems (REF=ROHF, WFN = ZAPTN), DETCI will compute the ZAPTn series. GUESS_VECTOR must be set to TRUE. HD_OTF must be set to TRUE. HD_AVE must be set to orb_ener. .IP "\fBSAVE_MPN2 = \fP \fIinteger\fP" When MPN is TRUE and WIGNER is TRUE then this option becomes valid. If set to 1 then MP(2n-1) energy is saved. If set to 2 then MP(2n-2) energy is saved. If any other value MPn energy is saved. The default is 0. psi3/src/bin/detci/detci.cc0000644000101500007650000013272011112564564014241 0ustar crawdad/*! \defgroup DETCI detci: The Determinant CI code */ /*! \file \ingroup DETCI \brief Determinant-based CI program DETCI DETERMINANT CI Program, incorporating Abelian point-group symmetry C. David Sherrill Center for Computational Quantum Chemistry University of Georgia August 1994 Updated 3/95 to do frozen core and virtuals correctly Updated 5/95 to do RAS CI's again Updated 2/96 to clean up code and rename DETCI */ #include #include #include #include #include #include #include #include #include #include #include #include #include "structs.h" #include "globals.h" #include "ci_tol.h" #include #include "tpool.h" #include #include "odometer.h" #include "slaterd.h" #include "civect.h" namespace psi { namespace detci { #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) unsigned char ***Occs; struct stringwr **alplist; struct stringwr **betlist; extern void eivout_t(double **evecs, double *evals, int rows, int cols, FILE *outfile); extern void read_integrals(void); extern void tf_onel_ints(int printflg, FILE *outfile); extern void zapt_shift(double *TEI, int nirreps, int nmo, int *doccpi, int *soccpi, int *orbspi, int *frzdoccpi, int *reorder); extern void form_gmat(int printflg, FILE *outfile); extern void get_mo_info(void); extern void print_vec(unsigned int nprint, int *Iacode, int *Ibcode, int *Iaidx, int *Ibidx, double *coeff, struct olsen_graph *AlphaG, struct olsen_graph *BetaG, struct stringwr **alplist, struct stringwr **betlist, FILE *outfile); extern void print_config(int nbf, int num_alp_el, int num_bet_el, struct stringwr *stralp, struct stringwr *strbet, int num_fzc_orbs, char *outstring); extern void init_stringwr_temps(int nel, int num_ci_orbs, int nsym); extern void free_stringwr_temps(int nsym); extern void str_abs2rel(int absidx, int *relidx, int *listnum, struct olsen_graph *Graph); extern int str_rel2abs(int relidx, int listnum, struct olsen_graph *Graph); extern void H0block_init(unsigned int size); extern void H0block_fill(struct stringwr **alplist, struct stringwr **betlist); extern void H0block_free(void); extern void H0block_print(void); extern void H0block_setup(int num_blocks, int *Ia_code, int *Ib_code); extern void H0block_pairup(int guess); extern void H0block_spin_cpl_chk(void); extern void H0block_filter_setup(void); extern void sem_test(double **A, int N, int M, int L, double **evecs, double *evals, double **b, double conv_e, double conv_rms, int maxiter, double offst, int *vu, int maxnvect, FILE *outfile); extern void form_ov(struct stringwr **alplist); extern void write_energy(int nroots, double *evals, double offset); void init_io(int argc, char *argv[]); void close_io(void); void title(void); void quote(void); void init_ioff(void); void diag_h(struct stringwr **strlista, struct stringwr **strlistb); void mpn(struct stringwr **strlista, struct stringwr **strlistb); void form_opdm(void); void form_tpdm(void); extern void get_parameters(void); extern void print_parameters(void); extern void set_ras_parms(void); extern void print_ras_parms(void); extern void form_strings(void); extern void mitrush_iter(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist, int nroots, double *evals, double conv_rms, double conv_e, double enuc, double efzc, int maxiter, int maxnvect, FILE *outfile, int print_lvl); extern void sem_iter(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist, double *evals, double conv_e, double conv_rms, double enuc, double efzc, int nroots, int maxiter, int maxnvect, FILE *outfile, int print_lvl); extern void mpn_generator(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist); extern void opdm(struct stringwr **alplist, struct stringwr **betlist, int transdens, int dipmom, int Inroots, int Iroot, int Inunits, int Ifirstunit, int Jnroots, int Jroot, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag); extern void tpdm(struct stringwr **alplist, struct stringwr **betlist, int Inroots, int Inunits, int Ifirstunit, int Jnroots, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag); extern void compute_cc(void); extern void calc_mrpt(void); }} // namespace psi::detci using namespace psi::detci; int main(int argc, char *argv[]) { Parameters.print_lvl = 1; Parameters.have_special_conv = 0; int fci_norb_check = 0; int i = 0; init_io(argc, argv); /* parse cmd line and open input and output */ get_parameters(); /* get running params (convergence, etc) */ init_ioff(); /* set up the ioff array */ title(); /* print program identification */ get_mo_info(); /* read DOCC, SOCC, frozen, nmo, etc */ set_ras_parms(); /* set fermi levels and the like */ if (Parameters.print_lvl) { print_parameters(); /* print running parameters */ print_ras_parms(); } fflush(outfile); form_strings(); /* form the alpha/beta strings */ if (Parameters.pthreads) tpool_init(&thread_pool, Parameters.nthreads, CalcInfo.num_alp_str, 0); /* initialize thread pool */ init_time_new(detci_time); /* initialize timing routines */ fflush(outfile); if (Parameters.istop) { /* Print size of space, other stuff, only */ close_io(); return(0); } read_integrals(); /* get the 1 and 2 elec MO integrals */ if(Parameters.zaptn) /* Shift SCF eigenvalues for ZAPTn */ zapt_shift(CalcInfo.twoel_ints, CalcInfo.nirreps, CalcInfo.nmo, CalcInfo.docc, CalcInfo.socc, CalcInfo.orbs_per_irr, CalcInfo.frozen_docc, CalcInfo.reorder); if (Parameters.bendazzoli) /* form the Bendazzoli OV arrays */ form_ov(alplist); /* lump together one-electron contributions */ tf_onel_ints((Parameters.print_lvl>3), outfile); /* form the RAS g matrix (eq 28-29) */ form_gmat((Parameters.print_lvl>3), outfile); fflush(outfile); if (Parameters.mpn) mpn(alplist, betlist); else if (Parameters.cc) compute_cc(); else diag_h(alplist, betlist); if (Parameters.opdm || Parameters.transdens) form_opdm(); if (Parameters.tpdm) form_tpdm(); if (Parameters.print_lvl) print_time_new(detci_time); if (Parameters.pthreads) tpool_destroy(thread_pool, 1); if (Parameters.print_lvl > 0) quote(); close_io(); return(0); } namespace psi { namespace detci { /* ** init_io(): Figure out command-line arguments and start up I/O for ** input and output files. ** */ void init_io(int argc, char *argv[]) { int i, num_unparsed; char *argv_unparsed[100]; Parameters.write_energy = 0; for (i=1,num_unparsed=0; i= argc) { fprintf(stderr, "detci: -c flag requires an argument\n"); exit(1); } if (sscanf(argv[i+1], "%lf", &(Parameters.special_conv)) != 1) { fprintf(stderr, "detci: trouble reading argument to -c flag\n"); exit(1); } i++; } else { argv_unparsed[num_unparsed++] = argv[i]; } } /* initialize input and output files. We want to pass the list * of arguments starting after the last one we have parsed, so * we do pointer arithmetic on argv */ /* init_in_out(argc-parsed,argv+parsed); */ errcod = psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed,argv_unparsed,0); if (Parameters.print_lvl) tstart(outfile); /* * this stuff is now inside psi_start ip_set_uppercase(1); ip_initialize(infile, outfile); ip_cwk_clear(); ip_cwk_add(":DEFAULT"); */ ip_cwk_add(":DETCI"); psio_init(); psio_ipv1_config(); } /* ** init_ioff(): Set up the ioff array for quick indexing ** */ void init_ioff(void) { int i; /* set offsets for ij-type canonical ordering */ ioff = (int *) malloc (IOFF_MAX * sizeof(int)) ; ioff[0] = 0; for (i = 1; i < IOFF_MAX ; i++) { ioff[i] = ioff[i-1] + i; } } /* ** close_io(): Function closes down I/O and exits */ void close_io(void) { int errcod; psio_done(); if (Parameters.print_lvl) tstop(outfile); errcod = psi_stop(infile,outfile,psi_file_prefix); } /* ** title(): Function prints a program identification */ void title(void) { if (Parameters.print_lvl) { fprintf(outfile,"\n"); fprintf(outfile,"*******************************************************\n"); fprintf(outfile," D E T C I \n"); fprintf(outfile,"\n"); fprintf(outfile," C. David Sherrill\n") ; fprintf(outfile," Matt L. Leininger\n") ; fprintf(outfile," 18 June 1999\n") ; fprintf(outfile,"*******************************************************\n"); fprintf(outfile,"\n\n\n"); } else { fprintf(outfile, "\nD E T C I : C. David Sherrill and Matt L. Leininger, 18 June 1999\n"); } fflush(outfile); } /* ** diag_h(): Function diagonalizes the hamiltonian ** ** Parameters: ** alplist = list of alpha strings ** betlist = list of beta strings ** ** Returns: none */ void diag_h(struct stringwr **alplist, struct stringwr **betlist) { int nroots, i, j, size; double conv_rms, conv_e, *evals, **evecs, nucrep, efzc, tval; int *tptr; double *cbuf; char e_label[PSIO_KEYLEN]; /* 80... */ nroots = Parameters.num_roots; conv_rms = pow(10.0, -(Parameters.convergence)); conv_e = pow(10.0, -(Parameters.energy_convergence)); if (Parameters.have_special_conv) { tval = sqrt(conv_rms) * 10.0; if (tval > conv_e) conv_e = tval; if (Parameters.special_conv > conv_rms) conv_rms = Parameters.special_conv; } size = CIblks.vectlen; if (Parameters.nprint > size) Parameters.nprint = size; nucrep = CalcInfo.enuc; efzc = CalcInfo.efzc; tmp_ras_array = init_array(1024); H0block.size = 0; H0block.osize = 0; if (Parameters.bendazzoli) fprintf(outfile, "\nBendazzoli algorithm selected for sigma3\n"); /* Direct Method --- use RSP diagonalization routine */ if (Parameters.diag_method == METHOD_RSP) { CIvect Cvec(CIblks.vectlen, CIblks.num_blocks, 1, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, 1, 0, 0, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); double **H, **rsp_evecs; int Iarel, Ialist, Ibrel, Iblist; unsigned long int ii, jj; SlaterDeterminant I, J; int *mi_iac, *mi_ibc, *mi_iaidx, *mi_ibidx; double *mi_coeff; if (Parameters.print_lvl) { fprintf(outfile, "\nFind all roots with RSP\n") ; fprintf(outfile, "\n") ; fflush(outfile) ; } /* construct and print one block at a time for debugging */ /* int ii2, jj2, blk, blk2, det1, det2; double **Hpart; for (blk = 0; blk < CIblks.num_blocks; blk++) { for (blk2 = 0; blk2 < CIblks.num_blocks; blk2++) { Hpart = init_matrix(CIblks.Ia_size[blk]*CIblks.Ib_size[blk], CIblks.Ia_size[blk2]*CIblks.Ib_size[blk2]); for (ii=0,det1=0; ii 4 && size < 200) { fprintf(outfile, "\nBlock %d %d of ", blk, blk2); fprintf(outfile, "Hamiltonian matrix:\n"); print_mat(Hpart, CIblks.Ia_size[blk]*CIblks.Ib_size[blk], CIblks.Ia_size[blk2]*CIblks.Ib_size[blk2], outfile); } free_matrix(Hpart, CIblks.Ia_size[blk]*CIblks.Ib_size[blk]); } } */ /* end block-at-a-time stuff */ H = init_matrix(size, size); rsp_evecs = init_matrix(size, size) ; evals = init_array(size) ; for (ii=0; ii 4 && size < 200) { fprintf(outfile, "\nHamiltonian matrix:\n"); print_mat(H, size, size, outfile); } sq_rsp(size, size, H, evals, 1, rsp_evecs, 1.0E-14); if (Parameters.print_lvl > 4) { eivout(rsp_evecs, evals, size, nroots, outfile) ; } evecs = init_matrix(nroots, size); for (ii=0; ii 0) { fzc_occ = (short int *) malloc(CalcInfo.num_fzc_orbs*sizeof(short int)); for (int l=0; lnum_el > BetaG->num_el) ? AlphaG->num_el : BetaG->num_el)*sizeof(unsigned char)); stringset_init(&alphastrings,AlphaG->num_str,AlphaG->num_el, CalcInfo.num_fzc_orbs, fzc_occ); int list_gr = 0; int offset = 0; for(int irrep=0; irrepnirreps; irrep++) { for(int gr=0; grsubgr_per_irrep; gr++,list_gr++) { int nlists_per_gr = AlphaG->sg[irrep][gr].num_strings; for(int l=0; lnum_el; n++) { newocc[n] = (unsigned char) CalcInfo.order[alplist[list_gr][l].occs[n] + CalcInfo.num_fzc_orbs]; } stringset_add(&alphastrings,l+offset,newocc); } offset += nlists_per_gr; } } stringset_init(&betastrings,BetaG->num_str,BetaG->num_el, CalcInfo.num_fzc_orbs, fzc_occ); list_gr = 0; offset = 0; for(int irrep=0; irrepnirreps; irrep++) { for(int gr=0; grsubgr_per_irrep; gr++,list_gr++) { int nlists_per_gr = BetaG->sg[irrep][gr].num_strings; for(int l=0; lnum_el; n++) { newocc[n] = (unsigned char) CalcInfo.order[betlist[list_gr][l].occs[n] + CalcInfo.num_fzc_orbs]; } stringset_add(&betastrings,l+offset,newocc); } offset += nlists_per_gr; } } free(newocc); if (CalcInfo.num_fzc_orbs > 0) free(fzc_occ); int Iarel, Ialist, Ibrel, Iblist; slaterdetset_init(&dets,size,&alphastrings,&betastrings); for (int ii=0; iisubgr_per_irrep; int gr = Ialist%AlphaG->subgr_per_irrep; int Ia = Iarel + AlphaG->list_offset[Ialist]; irrep = Iblist/BetaG->subgr_per_irrep; gr = Iblist%BetaG->subgr_per_irrep; int Ib = Ibrel + BetaG->list_offset[Iblist]; slaterdetset_add(&dets, ii, Ia, Ib); } slaterdetvector_init(&vec, &dets); slaterdetvector_set(&vec, evecs[0]); slaterdetvector_write(PSIF_CIVECT,"CI vector",&vec); slaterdetvector_delete(&vec); slaterdetset_delete(&dets); stringset_delete(&alphastrings); stringset_delete(&betastrings); } } /* end RSP section */ /* RSP test of Davidson/Liu (SEM) diagonalization routine */ else if (Parameters.diag_method == METHOD_RSPTEST_OF_SEM) { CIvect Cvec(CIblks.vectlen, CIblks.num_blocks, 1, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, 1, 0, 0, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); CIvect Hd(CIblks.vectlen, CIblks.num_blocks, 1, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, 1, 0, 0, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); double **H, **b; int Ia, Ib, Iarel, Ialist, Ibrel, Iblist, ij, k, l, tmpi, L; unsigned long int ii, jj; SlaterDeterminant I, J; int *mi_iac, *mi_ibc, *mi_iaidx, *mi_ibidx; double *mi_coeff; int sm_tridim; double *sm_evals, *sm_mat, **sm_evecs, tval; if (Parameters.print_lvl) { fprintf(outfile, "\nFind the roots by the SEM Test Method\n"); fprintf(outfile, "(n.b. this is for debugging purposes only!)\n"); fprintf(outfile, "Energy convergence = %3g\n", conv_e); fprintf(outfile, "RMS CI vector convergence = %3g\n\n", conv_rms); fflush(outfile) ; } H0block_init(size); /* get the diagonal elements of H into an array Hd */ Hd.diag_mat_els(alplist, betlist, CalcInfo.onel_ints, CalcInfo.twoel_ints, efzc, CalcInfo.num_alp_expl, CalcInfo.num_bet_expl, CalcInfo.num_ci_orbs, Parameters.hd_ave); /* get the biggest elements and put in H0block */ if (H0block.size) { Hd.max_abs_vals(H0block.size, H0block.alplist, H0block.betlist, H0block.alpidx, H0block.betidx, H0block.H00, Parameters.neg_only); } /* MLL added this line 5-21-98 */ /* if (Parameters.hd_otf) rclose(Parameters.first_hd_tmp_unit,4); */ H0block_setup(CIblks.num_blocks, CIblks.Ia_code, CIblks.Ib_code); if (Parameters.hd_ave) { H0block_spin_cpl_chk(); if (H0block.osize - H0block.size) { fprintf(outfile,"H0block size reduced by %d to %d to ensure" "completion of spin-coupling sets\n", (H0block.osize - H0block.size), H0block.size); fflush(outfile); } } if (Parameters.Ms0) { H0block_pairup(0); if (H0block.osize - H0block.size) { fprintf(outfile,"H0block size reduced by %d to ensure pairing.\n", (H0block.osize - H0block.size)); fflush(outfile); } } if (Parameters.print_lvl > 4 && Parameters.hd_otf == FALSE) { fprintf(outfile, "\nDiagonal elements of the Hamiltonian\n"); Hd.print(outfile); } if (H0block.size) { H0block_fill(alplist, betlist); } if (Parameters.print_lvl > 2 && H0block.size) { H0block_print(); } if (Parameters.print_lvl > 3 && H0block.size) { fprintf(outfile, "\n\nH0 Block:\n"); print_mat(H0block.H0b, H0block.size, H0block.size, outfile); } H = init_matrix(size, size); evals = init_array(size) ; for (ii=0; ii nroots */ b = (double **) malloc (Parameters.maxnvect * sizeof(double *)) ; for (i=0; i 1.0E-12) tmpi=1; } if (tmpi) continue; for (j=0; j 4) { eivout(evecs, evals, size, nroots, outfile) ; } free_matrix(H, size); if (Parameters.print_lvl) { mi_iac = init_int_array(Parameters.nprint); mi_ibc = init_int_array(Parameters.nprint); mi_iaidx = init_int_array(Parameters.nprint); mi_ibidx = init_int_array(Parameters.nprint); mi_coeff = init_array(Parameters.nprint); for (i=0; isubgr_per_irrep, 1, Parameters.num_hd_tmp_units, Parameters.first_hd_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); /* get the diagonal elements of H into an array Hd */ if (!Parameters.restart || (Parameters.restart && Parameters.hd_otf)) { if (Parameters.print_lvl > 1) { fprintf(outfile, "\nForming diagonal elements of H\n"); fflush(outfile); } Hd.diag_mat_els(alplist, betlist, CalcInfo.onel_ints, CalcInfo.twoel_ints, efzc, CalcInfo.num_alp_expl, CalcInfo.num_bet_expl, CalcInfo.num_ci_orbs, Parameters.hd_ave); } else { Hd.read(0,0); } /* get the biggest elements and put in H0block */ if (H0block.size) { if (Parameters.print_lvl > 1) { fprintf(outfile, "\nForming H0 block\n"); fflush(outfile); } if (!Parameters.hd_otf) Hd.max_abs_vals(H0block.size+H0block.coupling_size, H0block.alplist, H0block.betlist, H0block.alpidx, H0block.betidx, H0block.H00, Parameters.neg_only); } //if (Parameters.hd_otf) rclose(Parameters.first_hd_tmp_unit,4); if (Parameters.hd_otf) psio_close(Parameters.first_hd_tmp_unit,1); H0block_setup(CIblks.num_blocks, CIblks.Ia_code, CIblks.Ib_code); if (Parameters.filter_guess) H0block_filter_setup(); if (Parameters.hd_ave) { H0block_spin_cpl_chk(); if ((H0block.osize - H0block.size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block size reduced by %d to ensure " "completion of spin-coupling sets\n", (H0block.osize - H0block.size)); H0block.osize = H0block.size; } if ((H0block.oguess_size - H0block.guess_size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block guess size reduced by %d to ensure " "completion of spin-coupling sets\n", (H0block.oguess_size - H0block.guess_size)); H0block.oguess_size = H0block.guess_size; } if ((H0block.ocoupling_size - H0block.coupling_size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block coupling size reduced by %d to ensure " "completion of spin-coupling sets\n", (H0block.ocoupling_size - H0block.coupling_size)); H0block.ocoupling_size = H0block.coupling_size; } fflush(outfile); } if (Parameters.Ms0) { /* if (H0block.guess_size < H0block.size) */ H0block_pairup(0); /* pairup h0block size */ H0block_pairup(1); /* pairup guess_size */ H0block_pairup(2); /* pairup coupling size */ if ((H0block.osize - H0block.size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block size reduced by %d to ensure pairing" "and spin-coupling.\n", (H0block.osize - H0block.size)); } if ((H0block.oguess_size - H0block.guess_size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block guess size reduced by %d to " "ensure pairing and spin-coupling.\n", (H0block.oguess_size - H0block.guess_size)); } if ((H0block.ocoupling_size - H0block.coupling_size) && Parameters.print_lvl > 1) { fprintf(outfile,"H0block coupling size reduced by %d to " "ensure pairing and spin-coupling.\n", (H0block.ocoupling_size - H0block.coupling_size)); } fflush(outfile); } Parameters.neg_only = 0; /* MLL 7-2-97 */ if (Parameters.print_lvl > 4) { fprintf(outfile, "\nDiagonal elements of the Hamiltonian\n"); Hd.print(outfile); } if (H0block.size) { H0block_fill(alplist, betlist); } if (Parameters.print_lvl > 2 && H0block.size) { H0block_print(); } if (Parameters.print_lvl > 3 && H0block.size) { fprintf(outfile, "\n\nH0 Block:\n"); print_mat(H0block.H0b, H0block.size, H0block.size, outfile); } /* Davidson/Liu Simultaneous Expansion Method */ if (Parameters.diag_method == METHOD_DAVIDSON_LIU_SEM) { if (Parameters.print_lvl) { fprintf(outfile, "\nFind the roots by the Simultaneous Expansion Method "); fprintf(outfile, "(Block Davidson Method)\n"); fprintf(outfile, "Energy convergence = %3g\n", conv_e); fprintf(outfile, "RMS CI vector convergence = %3g\n\n", conv_rms); fflush(outfile); } evals = init_array(nroots); sem_iter(Hd, alplist, betlist, evals, conv_e, conv_rms, nucrep, efzc, nroots, Parameters.maxiter, Parameters.maxnvect, outfile, Parameters.print_lvl); } /* Mitrushenkov's Olsen Method */ else { if (Parameters.print_lvl) { if (Parameters.diag_method == METHOD_MITRUSHENKOV) fprintf(outfile, "\nFind the roots with Mitrushenkov's two vector algorithm\n"); else if (Parameters.diag_method == METHOD_OLSEN) fprintf(outfile, "\nFind the roots with Olsen's single vector algorithm\n"); fprintf(outfile, "Energy convergence = %3g\n", conv_e); fprintf(outfile, "RMS CI vector convergence = %3g\n", conv_rms); fflush(outfile); } evals = init_array(nroots); mitrush_iter(Hd, alplist, betlist, nroots, evals, conv_rms, conv_e, nucrep, efzc, Parameters.maxiter, Parameters.maxnvect, outfile, Parameters.print_lvl); H0block_free(); } if (Parameters.write_energy) write_energy(nroots, evals, nucrep+efzc); } /* end the Davidson-Liu/Mitrushenkov-Olsen-Davidson section */ /* write the CI energy to PSIF_CHKPT: later fix this to loop over roots */ chkpt_init(PSIO_OPEN_OLD); chkpt_wt_etot(evals[Parameters.root]+efzc+nucrep); for (i=0; i 1) { tval = 0.0; for (i=0; i 2) { fprintf(outfile,"H0block size = %d in H0block_fill\n",H0block.size); fprintf(outfile, "H0block guess size = %d in H0block_fill\n",H0block.guess_size); fprintf(outfile, "H0block coupling size = %d in H0block_fill\n", H0block.coupling_size); fprintf(outfile,"Diagonalizing H0block.H0b size %d in h0block_fill in" " detci.cc ... ", size); fflush(outfile); } sq_rsp(size, size, H0block.H0b, H0block.H0b_eigvals, 1, H0block.H0b_diag, 1.0E-14); if (Parameters.print_lvl) { fprintf(outfile, "\n*** H0 Block Eigenvalue = %12.8lf\n", H0block.H0b_eigvals[0] + CalcInfo.enuc); fflush(outfile); } if (Parameters.print_lvl > 5 && size < 1000) { for (i=0; i 5) { fprintf(outfile, "\nc0b in H0block_coupling_calc = \n"); print_mat(&(H0block.c0b), 1, size2, outfile); fprintf(outfile, "\nc0bp in H0block_coupling_calc = \n"); print_mat(&(H0block.c0bp), 1, size2, outfile); } /* copy to delta_1 */ for (i=0; i HD_MIN) H0block.c0bp[i] = H0block.c0b[i]/tval1; else H0block.c0bp[i] = 0.0; delta_2[i-size] = H0block.c0bp[i]; } /* for (i=0; i HD_MIN) delta_2[i-size] = gamma_2[i-size]/tval1; else delta_2[i-size] = 0.0; } /* Now delta_1 */ /* form H0b-E and take its inverse */ for (i=0; i 4) { fprintf(outfile, "\n E = %lf\n", E); fprintf(outfile, " H0 - E\n"); print_mat(H0block.tmp1, H0block.size, H0block.size, outfile); } /* for (i=0; i=H0block.coupling_size) H0block.c0bp[i] -= delta_2[i-size]; else H0block.c0bp[i] -= delta_1[i]; } */ /* free(gamma_1); free(gamma_2); free(delta_2); */ } /* ** mpn(): Function which sets up and generates the mpn series ** ** Parameters: ** alplist = list of alpha strings ** betlist = list of beta strings ** ** Returns: none */ void mpn(struct stringwr **alplist, struct stringwr **betlist) { int i, j, irrep, cnt; struct stringwr *stralp, *strbet; int **fzc_orbs; double tval; H0block_init(CIblks.vectlen); CIvect Hd(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, 1, Parameters.num_hd_tmp_units, Parameters.first_hd_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); /* Compute E0 from orbital energies */ stralp = alplist[CalcInfo.ref_alp_list] + CalcInfo.ref_alp_rel; strbet = betlist[CalcInfo.ref_bet_list] + CalcInfo.ref_bet_rel; fzc_orbs = init_int_matrix(CalcInfo.nirreps, CalcInfo.num_fzc_orbs); cnt = 0; for (irrep=0; irrepoccs)[i] + CalcInfo.num_fzc_orbs; CalcInfo.e0 += CalcInfo.scfeigvala[j]; } for (i=0; ioccs)[i] + CalcInfo.num_fzc_orbs; CalcInfo.e0 += CalcInfo.scfeigvalb[j]; } } else { for (i=0; ioccs)[i] + CalcInfo.num_fzc_orbs; CalcInfo.e0 += CalcInfo.scfeigval[j]; } for (i=0; ioccs)[i] + CalcInfo.num_fzc_orbs; CalcInfo.e0 += CalcInfo.scfeigval[j]; } } /* prepare the H0 block */ Hd.diag_mat_els(alplist, betlist, CalcInfo.onel_ints, CalcInfo.twoel_ints, CalcInfo.e0_fzc, CalcInfo.num_alp_expl, CalcInfo.num_bet_expl, CalcInfo.num_ci_orbs, Parameters.hd_ave); H0block_setup(CIblks.num_blocks, CIblks.Ia_code, CIblks.Ib_code); mpn_generator(Hd, alplist, betlist); } BIGINT strings2det(int alp_code, int alp_idx, int bet_code, int bet_idx) { int blknum; BIGINT addr; blknum = CIblks.decode[alp_code][bet_code]; addr = CIblks.offset[blknum]; addr += alp_idx * CIblks.Ib_size[blknum] + bet_idx; return(addr); } }} // namespace psi::detci extern "C" { const char *gprgid(void) { const char *prgid = "DETCI"; return (prgid); } } psi3/src/bin/detci/form_ov.cc0000644000101500007650000000474710757640026014631 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Form OV arrays of Bendazzoli and Evangelisti, JCP 98, 3141 (1993) ** ** David Sherrill ** University of Georgia ** 8 April 1996 ** */ #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { /* ** FORM_OV() ** This will only work for Full CI's right now (where Parameters.fci=true) */ void form_ov(struct stringwr **alplist) { int i, j, nirreps, norbs; int irrep, strnum, strsym, cnt=0; int fullij, idx, ovcnt; struct stringwr *strlist; int signmask,nsignmask; /* bitwise sign stuff */ signmask = 1 << (sizeof(int)*8-1); nsignmask = ~signmask; /* allocate memory for OV[list][fullij][string] */ norbs = CalcInfo.num_ci_orbs; nirreps = AlphaG->nirreps; OV = (int ***) malloc (sizeof(int **) * nirreps); for (i=0; imax_str_per_irrep+1); OV[i][j][0] = 0; } } /* now fill up OV by walking through the stringwr lists */ for (irrep=0; irrep < nirreps; irrep++) { strnum = AlphaG->sg[irrep][0].num_strings; cnt=0; strlist = alplist[irrep]; while (cnt != strnum) { for (strsym=0; strsym < nirreps; strsym++) { for (i=0; icnt[strsym]; i++) { fullij = strlist->oij[strsym][i]; /* idx = cnt + 1; */ idx = cnt; if (strlist->sgn[strsym][i] != 1) idx = idx | signmask; ovcnt = OV[irrep][fullij][0]; ovcnt++; OV[irrep][fullij][ovcnt] = idx; OV[irrep][fullij][0] = ovcnt; } } strlist++; cnt++; } } /* print out the OV data */ if (Parameters.print_lvl > 3) { for (irrep=0; irrep < nirreps; irrep++) { for (fullij=0; fullij #include #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { /* ** GET_MO_INFO ** ** Reads PSIF_CHKPT & input.dat and gets all sorts of useful information about ** the molecular orbitals (such as their reordering array, the docc ** array, frozen orbitals, etc.) ** ** Created by C. David Sherrill on 17 November 1994 ** ** Updated ** CDS 1/18/95 to read SCF eigenvalues also (for MP2 guess vector) ** CDS 1/ 5/97 to use nifty new ras_set() function (which transqt has been ** using for some time). ** */ void get_mo_info(void) { int i, j, k, tmp, cnt, irrep, errcod, errbad; int size; double *eig_unsrt; int parsed_ras1=0, parsed_ras2=0, do_ras4; int *rstr_docc, *rstr_uocc; CalcInfo.maxKlist = 0.0; chkpt_init(PSIO_OPEN_OLD); CalcInfo.nirreps = chkpt_rd_nirreps(); CalcInfo.nso = chkpt_rd_nmo(); CalcInfo.nmo = chkpt_rd_nmo(); CalcInfo.iopen = chkpt_rd_iopen(); CalcInfo.labels = chkpt_rd_irr_labs(); CalcInfo.orbs_per_irr = chkpt_rd_orbspi(); CalcInfo.so_per_irr = chkpt_rd_sopi(); CalcInfo.docc = chkpt_rd_clsdpi(); CalcInfo.socc = chkpt_rd_openpi(); CalcInfo.enuc = chkpt_rd_enuc(); CalcInfo.escf = chkpt_rd_escf(); CalcInfo.efzc = chkpt_rd_efzc(); eig_unsrt = chkpt_rd_evals(); chkpt_close(); if (CalcInfo.iopen && Parameters.opentype == PARM_OPENTYPE_NONE) { fprintf(outfile, "Warning: iopen=1,opentype=none. Making iopen=0\n"); CalcInfo.iopen = 0; } else if (!CalcInfo.iopen && (Parameters.opentype == PARM_OPENTYPE_HIGHSPIN || Parameters.opentype == PARM_OPENTYPE_SINGLET)) { fprintf(outfile,"Warning: iopen=0,opentype!=closed. Making iopen=1\n"); CalcInfo.iopen = 1; } if (Parameters.ref_sym >= CalcInfo.nirreps) { fprintf(outfile,"Warning: ref_sym >= nirreps. Setting ref_sym=0\n"); Parameters.ref_sym = 0; } CalcInfo.frozen_docc = init_int_array(CalcInfo.nirreps); CalcInfo.frozen_uocc = init_int_array(CalcInfo.nirreps); rstr_docc = init_int_array(CalcInfo.nirreps); rstr_uocc = init_int_array(CalcInfo.nirreps); CalcInfo.explicit_core = init_int_array(CalcInfo.nirreps); CalcInfo.explicit_vir = init_int_array(CalcInfo.nirreps); CalcInfo.reorder = init_int_array(CalcInfo.nmo); CalcInfo.ras_opi = init_int_matrix(4,CalcInfo.nirreps); if (!ras_set2(CalcInfo.nirreps, CalcInfo.nmo, 1, (Parameters.fzc) ? 1:0, CalcInfo.orbs_per_irr, CalcInfo.docc, CalcInfo.socc, CalcInfo.frozen_docc, CalcInfo.frozen_uocc, rstr_docc, rstr_uocc, CalcInfo.ras_opi, CalcInfo.reorder, 1, 0)) { fprintf(outfile, "Error in ras_set(). Aborting.\n"); exit(1); } if (1) { /* for now, always treat restricted as frozen */ for (i=0; i 4) { fprintf(outfile, "\nReordering array = \n"); for (i=0; i IOFF_MAX) { fprintf(outfile, "Error: IOFF_MAX not large enough!\n"); exit(1); } CalcInfo.num_alp_expl = CalcInfo.num_alp - CalcInfo.num_fzc_orbs; CalcInfo.num_bet_expl = CalcInfo.num_bet - CalcInfo.num_fzc_orbs; /* construct the CalcInfo.ras_orbs array (may not be of any use now) */ cnt = 0; for (i=0; i<4; i++) { CalcInfo.ras_orbs[i] = init_int_matrix(CalcInfo.nirreps, CalcInfo.num_ci_orbs); for (irrep=0; irrep #include #include #include #include "structs.h" #include "globals.h" #include #include "odometer.h" namespace psi { namespace detci { extern struct stringwr **alplist; extern struct stringwr **betlist; extern void gs_stringlist(struct graph_set *AG, struct stringwr **slist); extern void gs_set_ciblks(struct graph_set *AG, struct graph_set *BG); extern void print_ci_space(struct stringwr *strlist, int num_strings, int nirreps, int strtypes, int nel, FILE *outfile); #define UOC_BIT 1 #define OCC_BIT 2 #define N_RAS_SPACES 4 //#define DEBUG /* GLOBALS THIS MODULE */ int **Tij, **Toij; unsigned int **Tridx; signed char **Tsgn; /* FUNCTION PROTOTYPES for this module */ void graphset(struct graph_set *GraphSet, int ci_orbs, int num_el, int nirreps, int *orbsym, int ras1_lvl, int ras1_min, int ras1_max, int ras3_lvl, int ras3_max, int num_fzc_orbs, int num_cor_orbs, int ras4_lvl, int ras4_max, int ras34_max); void gs_add_walk(int ras1_idx, int ras3_num, int ras4_num, int *occs, int nel_expl, int norb, int nirreps, int num_fzc_orbs, struct graph_set *GraphSet); void gs_fill(int num_el, int norb, int nirreps, int num_fzc_orbs, struct graph_set *GraphSet); int gs_glex_addr(struct fastgraph *Graph, int *occs, int nel); void gs_print(struct graph_set *GraphSet, FILE *outfile); void gs_stringlist(struct graph_set *GraphSet, struct stringwr **slist); void gs_init_repinfo_temps(int nel, int norbs); void gs_free_repinfo_temps(void); /* ** formstrings(): Form the alpha and beta string graphs. Use a different ** graph for every irrep * (num el in RAS I) * (num el in RAS III) ** */ void formstrings(void) { int i, nlists, nirreps, ncodes; int irrep, code, listnum; int *occs; AlphaGraph = new graph_set[1]; // Make the graph graphset(AlphaGraph, CalcInfo.num_ci_orbs, CalcInfo.num_alp, CalcInfo.nirreps, CalcInfo.orbsym, Parameters.a_ras1_lvl, Parameters.a_ras1_min, Parameters.a_ras1_max, Parameters.ras3_lvl, Parameters.a_ras3_max, CalcInfo.num_fzc_orbs, CalcInfo.num_cor_orbs, Parameters.ras4_lvl, Parameters.a_ras4_max, Parameters.a_ras34_max); if (Parameters.print_lvl > 3) gs_print(AlphaGraph, outfile) ; ncodes = AlphaGraph->num_codes; nirreps = AlphaGraph->nirreps; nlists = AlphaGraph->num_graphs; alplist = (struct stringwr **) malloc(nlists * sizeof(struct stringwr *)); for (i=0; i=4) { for (listnum=0; listnumnum_graphs; listnum++) { fprintf(outfile, "Strings for list %2d, irrep=%d\n", listnum, AlphaGraph->graph_irrep[listnum]); print_ci_space(alplist[listnum], AlphaGraph->Graph[listnum].num_strings, nirreps, nlists, AlphaGraph->num_el_expl, outfile) ; } } /* for beta string graph if necessary */ if (CalcInfo.iopen) { BetaGraph = new graph_set[1]; graphset(BetaGraph, CalcInfo.num_ci_orbs, CalcInfo.num_bet, CalcInfo.nirreps, CalcInfo.orbsym, Parameters.b_ras1_lvl, Parameters.b_ras1_min, Parameters.b_ras1_max, Parameters.ras3_lvl, Parameters.b_ras3_max, CalcInfo.num_fzc_orbs, CalcInfo.num_cor_orbs, Parameters.ras4_lvl, Parameters.b_ras4_max, Parameters.b_ras3_max); if (Parameters.print_lvl > 1) og_print(BetaGraph, outfile) ; ncodes = BetaGraph->num_codes; nirreps = BetaGraph->nirreps; nlists = BetaGraph->num_graphs; betlist = (struct stringwr **) malloc(nlists * sizeof(struct stringwr *)); for (i=0; i=4) { for (listnum=0; listnumnum_graphs; listnum++) { fprintf(outfile, "Strings for list %2d, irrep=%d\n", listnum, AlphaGraph->graph_irrep[listnum]); print_ci_space(alplist[listnum], AlphaGraph->Graph[listnum].num_strings, nirreps, nlists, AlphaGraph->num_el_expl, outfile) ; } } } /* end if(iopen) */ else { betlist = alplist; BetaGraph = AlphaGraph; } /* get number of alpha/beta strings, ref symmetry, etc */ gs_set_ciblks(AlphaG, BetaG) ; } /* ** graphset(): Form an Olsen/Roos graph for the alpha/beta strings. ** ** Unfortunately, I found it necessary to split the DRT graph into many ** subgraphs, as described in Olsen & Roos 1988. Each graph must ** contain walks of only one irrep, and with only one value for the ** number of electrons at the RAS I level. All these graphs are ** stored in a collective container, struct olsen_graph. For open ** shell systems, there will be two of these, one for alpha and one ** for beta. For closed shell systems only the alpha graph is stored. ** ** Even more unfortunately, each subgraph must also be labeled according ** to the number of electrons in RAS III, or so I believe I figured ** out at one time. That's how I'll do it now. [CDS 5/95] ** ** Even more more unfortunately, I'm going to split it according to ** number of electrons in RAS IV!!! That's just crazy. [CDS 8/95] ** ** For a full CI, make all strings with a given irrep belong to the same ** graph. [CDS 6/95] ** ** New, faster, simpler version based on previous OlsenGraph version. ** [CDS 5/96] ** ** Parameters: ** GraphSet = struct graph_set to hold all subgraphs ** ci_orbs = number of orbitals explicitly in CI ** num_el = number of electrons for the relevant string ** nirreps = number of irreducible representations ** orbsym = orbital symmetry array ** ras1_lvl = last level in RAS I ** ras1_min = min number of electrons at RAS I level for the string ** (nb this definition includes core electrons!) ** ras1_max = maximum number of electrons at RAS I level ** ras3_lvl = first level in RAS III ** ras3_max = max number of electrons in RAS III _for the string_ ** num_fzc_orbs = number of frozen core orbitals ** num_cor_orbs = number of restricted core orbitals ** ras4_lvl = first level of the new RAS IV ** ras4_max = max number of electrons in RAS IV for the string ** ras34_max = max number of electrons in RAS III and IV ** ** Returns: none */ void graphset(struct graph_set *GraphSet, int ci_orbs, int num_el, int nirreps, int *orbsym, int ras1_lvl, int ras1_min, int ras1_max, int ras3_lvl, int ras3_max, int num_fzc_orbs, int num_cor_orbs, int ras4_lvl, int ras4_max, int ras34_max) { Odometer Ras1, Ras2, Ras3, Ras4; int n1, n2, n3, n4; int n1max, n1min; int max_el_ras1; int *occs, *array1, *array2, *array3, *array4, **encode_tmp; int i, j, ij, k, l; int orbs_frozen, fzc_sym=0, code=0, num_el_expl; #ifdef DEBUG fprintf(outfile, "ras1_lvl = %d ras1_min = %d ras1_max = %d\n", ras1_lvl, ras1_min, ras1_max) ; fprintf(outfile, "ras3_lvl = %d ras3_max = %d\n", ras3_lvl, ras3_max) ; #endif // Go ahead and set the occupations of the frozen orbs occs = init_int_array(num_el) ; for (i=0; inum_el = num_el; num_el_expl = num_el - num_fzc_orbs; GraphSet->num_el_expl = num_el_expl; GraphSet->num_orb = ci_orbs ; GraphSet->num_fzc_orbs = num_fzc_orbs; GraphSet->num_cor_orbs = num_cor_orbs; GraphSet->fzc_sym = fzc_sym; GraphSet->orbsym = init_int_array(ci_orbs); for (i=0; iorbsym[i] = orbsym[i+num_fzc_orbs]; } GraphSet->ras1_lvl = ras1_lvl; GraphSet->ras1_min = ras1_min; GraphSet->ras1_max = ras1_max; GraphSet->ras3_lvl = ras3_lvl; GraphSet->ras3_max = ras3_max; GraphSet->ras4_lvl = ras4_lvl; GraphSet->ras4_max = ras4_max; GraphSet->ras34_max = ras34_max; GraphSet->nirreps = nirreps; GraphSet->str_per_irrep = init_int_array(nirreps); n1max = ras1_max - orbs_frozen; n1min = ras1_min - orbs_frozen; GraphSet->decode = (int ***) malloc ((ras1_max - ras1_min + 1) * sizeof(int **)); for (i=0; i<(ras1_max - ras1_min + 1); i++) { GraphSet->decode[i] = init_int_matrix(ras3_max + 1, ras4_max + 1); } encode_tmp = init_int_matrix(3, (ras1_max - ras1_min + 1) * (ras3_max + 1) * (ras4_max + 1)); /* need to know how many possible RAS I/RAS III/RAS IV combinations */ if (!Parameters.fci_strings) { for (i=ras1_max; i>=ras1_min; i--) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((i+j+k<=num_el) && (num_el-i-j-k<=ras3_lvl-ras1_lvl-1) && (j+k <= ras34_max) && (!(Parameters.r4s && k>=2 && ras1_max - i > Parameters.ex_lvl))) { GraphSet->decode[i-ras1_min][j][k] = code; encode_tmp[0][code] = i - num_fzc_orbs; encode_tmp[1][code] = j; encode_tmp[2][code] = k; code++; } else GraphSet->decode[i-ras1_min][j][k] = -1; } } } } else { /* all strings w/ given irrep belong to same graph for FCI */ for (i=ras1_max; i>=ras1_min; i--) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((i+j+k<=num_el) && (num_el-i-j-k<=ras3_lvl-ras1_lvl-1) && (j+k <= ras34_max)) { GraphSet->decode[i-ras1_min][j][k] = 0; } else GraphSet->decode[i-ras1_min][j][k] = -1; } } } code = 1; } GraphSet->encode = init_int_matrix(3,code); for (i=0; iencode[0][i] = encode_tmp[0][i]; GraphSet->encode[1][i] = encode_tmp[1][i]; GraphSet->encode[2][i] = encode_tmp[2][i]; } free_int_matrix(encode_tmp); GraphSet->num_codes = code; GraphSet->AllGraph = (struct fastgraph **) malloc (nirreps * code * sizeof(struct fastgraph *)); for (i=0; iAllGraph[i] = (struct fastgraph *) malloc (sizeof(struct fastgraph); GraphSet->AllGraph[i]->data = NULL; GraphSet->AllGraph[i]->num_strings = 0; } // loop over the possible number of e- in RAS I (n1) and III (n3). // and now IV (n4) // the number of electrons in RAS II is defined via // n2 = num_el_this_spin - n1 - n3 - n4 // // Employ the very useful Generalized Odometer // for (n1 = n1max; n1 >= n1min; n1--) { Ras1.resize(n1) ; Ras1.set_min_lex(num_cor_orbs) ; Ras1.set_max_lex(ras1_lvl) ; for (n3 = 0; n3 <= ras3_max; n3++) { Ras3.resize(n3) ; Ras3.set_min_lex(ras3_lvl) ; /* Ras3.set_max_lex(ci_orbs-1) ; */ Ras3.set_max_lex(ras4_lvl-1); for (n4 = 0; n4 <= ras4_max && n4 <= ras34_max - n3; n4++) { n2 = num_el - orbs_frozen - n1 - n3 - n4; if (n2 < 0 || n2 > ras3_lvl - ras1_lvl - 1) continue ; /* CDS 8/24/95 */ if (Parameters.r4s && n4 >= 2 && n1max - n1 > Parameters.ex_lvl) continue; #ifdef DEBUG fprintf(outfile, "n1 = %d, n2 = %d, n3 = %d, n4 = %d\n", n1, n2, n3, n4) ; if (n2 < 0) printf("Error: n2 < 0 in form_strings()\n") ; #endif Ras2.resize(n2) ; Ras4.resize(n4) ; Ras2.set_min_lex(ras1_lvl+1) ; Ras2.set_max_lex(ras3_lvl-1) ; Ras4.set_min_lex(ras4_lvl); Ras4.set_max_lex(ci_orbs-1); Ras1.reset() ; Ras2.reset() ; Ras3.reset() ; Ras4.reset() ; do { Ras1.get_value(array1) ; do { Ras2.get_value(array2) ; do { Ras3.get_value(array3) ; do { Ras4.get_value(array4) ; for (i=n1-1, j = num_cor_orbs; i>=0; i--) occs[j++] = array1[i] ; for (i=n2-1; i>=0; i--) occs[j++] = array2[i] ; for (i=n3-1; i>=0; i--) occs[j++] = array3[i] ; for (i=n4-1; i>=0; i--) occs[j++] = array4[i] ; // print out occupations for debugging #ifdef DEBUG for (i=0; inum_str = 0; for (i=0,ij=0,k=0; iAllGraph[ij]->num_strings) { GraphSet->num_str += l; GraphSet->Graph[k] = GraphSet->AllGraph[ij]; GraphSet->graph_irrep[k] = i; GraphSet->graph_code[k] = j; k++; } else free(GraphSet->AllGraph[ij]); } } GraphSet->num_graphs = k; /* at this point, AllGraph pointers are no longer valid: use Graph */ return; } /* ** gs_add_walk(): Add a walk to a subgraph within the Olsen/Roos scheme ** of subgraphs. Uses struct graph_set. ** ** Parameters: ** ras1_idx = Number of e- in RAS I - minimum # of e- in RAS I ** for the given _string_ ** ras3_num = Number of electrons in RAS III ** ras4_num = Number of electrons in RAS IV ** occs = array listing orbital each electron occupies ** nel_expl = number of electrons explicitly treated (i.e. minus ** all implicitly treated frozen core electrons) ** norb = number of orbitals _explicitly_ included ** nirreps = number of irreps ** num_fzc_orbs = number of frozen core orbitals ** Graph = Olsen Graph structure containing all subgraphs for a ** given electron spin (alpha or beta) ** ** Returns: none ** ** Note: The newidx code excludes frozen core electrons from the num_el ** factor */ void gs_add_walk(int ras1_idx, int ras3_num, int ras4_num, int *occs, int nel_expl, int norb, int nirreps, int num_fzc_orbs, struct olsen_graph *GraphSet) { int i; int irrep, ncodes; int cur_el=0, orb=0; struct fastgraph *graph; int code; int *orbsym; orbsym = GraphSet->orbsym; irrep = GraphSet->fzc_sym; /* figure out the irrep for this walk */ for (i=0; idecode[ras1_idx][ras3_num][ras4_num]; ncodes = GraphSet->num_codes; graph = GraphSet->AllGraph[irrep * ncodes + code]; if (graph == NULL) { printf("Error (gs_add_walk): NULL subgraph pointer\n"); return; } if (code < 0) { printf("Error (gs_add_walk): negative RAS code\n"); return; } /* make sure that graph's data has been malloc'd */ if (graph->data == NULL) { graph->data = init_int_matrix(nel_expl+1, norb+1); } /* loop over all (explicitly included) orbitals */ for (i=0; idata[cur_el][i] |= OCC_BIT; cur_el++ ; } else { graph->data[cur_el][i] |= UOC_BIT; } } /* end loop over i */ graph->num_strings++; } /* ** gs_fill(): Fill out the Olsen-Roos subgraph DRT's. So far, all we have ** is a list of preliminary links. ** ** Parameters: ** nel = total of explicit electrons for string ** norb = number of CI orbitals ** nirreps = number of irreps ** Graph = GraphSet structure containing all subgraphs for a given ** electron spin (alpha or beta) ** ** Returns: none ** ** David Sherrill, May 1996 */ void gs_fill(int nel, int norb, int nirreps, struct graph_set *GraphSet) { int gnum, orb, el; int **xmat; /* allocate scratch matrices */ xmat = init_int_matrix(nel+1, norb+1); /* loop over graphs */ for (gnum=0; gnumnum_codes * nirreps; gnum++) { graph = GraphSet->AllGraph[gnum]; if (graph==NULL) { printf("(gs_fill): Error, get NULL graph pointer!\n"); exit(1); } /* calculate vertex weights x first */ zero_mat(xmat, nel+1, norb+1); xmat[0][0] = 1; for (orb=1; orb<=norb; orb++) { for (el=0; el<=nel; el++) { if (graph->data[el][orb-1] & UOC_BIT) xmat[el][orb] += xmat[el][orb-1]; if (el > 0 && graph->data[el-1][orb-1] & OCC_BIT) xmat[el][orb] += xmat[el-1][orb-1]; } } /* now we have x, so calculate y */ zero_mat(graph->data, nel+1, norb+1); for (orb=0; orbdata[el][orb] = xmat[el+1][orb]; } } /* check the value of num_strings */ if (graph->num_strings != xmat[nel][norb]) { printf("(gs_fill): num_strings != x[nel][norb] for graph %2d\n",gnum); exit(1); } } /* end loop over graphs */ /* free scratch matrices */ free_matrix(xmat, nel+1); } void gs_print(struct graphset *GraphSet, FILE *outfile) { int ras1_min, ras1_max, ras3_max, ras4_max, code; int i,j,k; struct fastgraph *graph; ras1_min = GraphSet->ras1_min; ras1_max = GraphSet->ras1_max; ras3_max = GraphSet->ras3_max; ras4_max = GraphSet->ras4_max; fprintf(outfile,"\nGraphSet:\n"); fprintf(outfile,"%3c%2d Electrons\n",' ',GraphSet->num_el); fprintf(outfile,"%3c%2d Frozen core orbitals\n",' ',GraphSet->num_fzc_orbs); fprintf(outfile,"%3c%2d Restricted core orbs\n",' ',GraphSet->num_cor_orbs); fprintf(outfile,"%3c%2d Explicit electrons\n",' ',GraphSet->num_el_expl); fprintf(outfile,"%3c%2d Explicit Orbitals\n",' ',GraphSet->num_orb); fprintf(outfile,"%3c%2d RAS I level\n",' ',GraphSet->ras1_lvl); fprintf(outfile,"%3c%2d RAS I minimum\n",' ',ras1_min); fprintf(outfile,"%3c%2d RAS I maximum\n",' ',ras1_max); fprintf(outfile,"%3c%2d RAS III level\n",' ',GraphSet->ras3_lvl); fprintf(outfile,"%3c%2d RAS III maximum\n",' ',ras3_max); fprintf(outfile,"%3c%2d RAS IV maximum\n",' ',ras4_max); fprintf(outfile,"%3c%2d Number of irreps\n",' ',GraphSet->nirreps); fprintf(outfile,"%3c%2d Number of codes\n",' ', Graph->num_codes); fprintf(outfile,"%3c%2d Max strings in irrep\n", ' ', Graph->max_str_per_irrep); fprintf(outfile,"%3c%2d Strings in total\n\n", ' ', GraphSet->num_str); fprintf(outfile, "\n"); for (i=ras1_min; i<=ras1_max; i++) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((code = GraphSet->decode[i-ras1_min][j][k]) >= 0) { fprintf(outfile, "%5cDecode (%2d,%2d,%2d) = %3d\n",' ', i,j,k,code); } } } } fprintf(outfile, "\n%4cString Digraphs\n", ' '); for (i=0; inum_graphs; i++) { graph = GraphSet->Graph[i]; fprintf(outfile, "%6cGraph %3d (Code=%2d,Irrep=%1d): %4d strings, offset = %4d\n", ' ', i, GraphSet->graph_code[i], GraphSet->graph_irrep[i], graph->num_strings, GraphSet->graph_offset[i]); print_int_mat(outfile, graph->data, GraphSet->num_el_expl+1, GraphSet->num_orb+1); fprintf(outfile, "\n"); } fprintf(outfile, "\n"); fflush(outfile); } void gs_stringlist(struct graph_set *GraphSet, struct stringwr **slist) { Odometer Ras1, Ras2, Ras3, Ras4; int n1, n2, n3, n4; int n1max, n1min, orbs_frozen, ci_orbs; int *occs, *array1, *array2, *array3, *array4; int ras1_lvl, ras3_lvl, ras4_lvl, ras3_max, ras4_max, ras34_max; int i, num_el_expl, irrep, code, ncodes, gnum, snum; /* Regenerate all strings, store occs, and get replacement info */ num_el_expl = GraphSet->num_el_expl; GraphSet->Occs = (unsigned char ***) malloc (GraphSet->num_graphs * sizeof(unsigned char **)); for (i=0; inum_graphs; i++) { GraphSet->Occs[i] = (unsigned char **) malloc (sizeof(unsigned char *) * GraphSet->Graph[i]->num_strings); for (j=0; jGraph[i]->num_strings; j++) { GraphSet->Occs[i][j] = (unsigned char *) malloc (num_el_expl * sizeof(unsigned char)); } } ncodes = GraphSet->num_codes; occs = init_int_array(num_el_expl) ; for (i=0; inum_orb; array1 = init_int_array(num_el); array2 = init_int_array(num_el); array3 = init_int_array(num_el); array4 = init_int_array(num_el); n1max = GraphSet->ras1_max - orbs_frozen; n1min = GraphSet->ras1_min - orbs_frozen; ras1_lvl = GraphSet->ras1_lvl; ras3_lvl = GraphSet->ras3_lvl; ras4_lvl = GraphSet->ras4_lvl; ras3_max = GraphSet->ras3_max; ras4_max = GraphSet->ras4_max; ras34_max = GraphSet->ras34_max; // loop over the possible number of e- in RAS I (n1) and III (n3). // and now IV (n4) // the number of electrons in RAS II is defined via // n2 = num_el_this_spin - n1 - n3 - n4 // // Employ the very useful Generalized Odometer // for (n1 = n1max; n1 >= n1min; n1--) { Ras1.resize(n1) ; Ras1.set_min_lex(num_cor_orbs) ; Ras1.set_max_lex(ras1_lvl) ; for (n3 = 0; n3 <= ras3_max; n3++) { Ras3.resize(n3) ; Ras3.set_min_lex(ras3_lvl) ; /* Ras3.set_max_lex(ci_orbs-1) ; */ Ras3.set_max_lex(ras4_lvl-1); for (n4 = 0; n4 <= ras4_max && n4 <= ras34_max - n3; n4++) { n2 = num_el - orbs_frozen - n1 - n3 - n4; if (n2 < 0 || n2 > ras3_lvl - ras1_lvl - 1) continue ; /* CDS 8/24/95 */ if (Parameters.r4s && n4 >= 2 && n1max - n1 > Parameters.ex_lvl) continue; #ifdef DEBUG fprintf(outfile, "n1 = %d, n2 = %d, n3 = %d, n4 = %d\n", n1, n2, n3, n4) ; if (n2 < 0) printf("Error: n2 < 0 in form_strings()\n") ; #endif Ras2.resize(n2) ; Ras4.resize(n4) ; Ras2.set_min_lex(ras1_lvl+1) ; Ras2.set_max_lex(ras3_lvl-1) ; Ras4.set_min_lex(ras4_lvl); Ras4.set_max_lex(ci_orbs-1); Ras1.reset() ; Ras2.reset() ; Ras3.reset() ; Ras4.reset() ; do { Ras1.get_value(array1) ; do { Ras2.get_value(array2) ; do { Ras3.get_value(array3) ; do { Ras4.get_value(array4) ; for (i=n1-1, j = num_cor_orbs; i>=0; i--) occs[j++] = array1[i] ; for (i=n2-1; i>=0; i--) occs[j++] = array2[i] ; for (i=n3-1; i>=0; i--) occs[j++] = array3[i] ; for (i=n4-1; i>=0; i--) occs[j++] = array4[i] ; // print out occupations for debugging #ifdef DEBUG for (i=0; ifzc_sym; for (i=0; idecode[n1-n1min][n3][n4]; gnum = GraphSet->AllGraph2Graph[irrep * ncodes + code]; snum = gs_glex_addr(GraphSet->Graph[gnum], occs, num_el_expl); for (i=0; inum_orb, GraphSet->Graph[gnum], GraphSet, GraphSet->num_cor_orbs); Ras4.increment_lex() ; } while (!Ras4.at_min()) ; Ras3.increment_lex() ; } while (!Ras3.at_min()) ; Ras2.increment_lex() ; } while (!Ras2.at_min()) ; Ras1.increment_lex() ; } while (!Ras1.at_min()) ; } /* end loop over n4 */ } /* end loop over n3 */ } /* end loop over n1 */ free(array1); free(array2); free(array3); free(array4); free(occs); } int gs_glex_addr(struct fastgraph *graph, int *occs, int nel) { int addr = 0; int *yptr; yptr = graph->data; for (i=0; ioccs = occlist; if (!Parameters.repl_otf) { gs_init_repinfo_temps(GraphSet->num_el_expl, GraphSet->num_orbs); gs_form_repinfo(node, GraphSet, occs, gnum, first_orb_active); gs_free_repinfo_temps(); } } void gs_form_repinfo(struct stringwr *string, struct graph_set *GraphSet, int *occs, int sgraph, int first_orb_active) { int i, j, ngraphs, nel, nras, cnt, tgraph; int *I_n[N_RAS_SPACES]; int *J_n[N_RAS_SPACES]; int *D_n[N_RAS_SPACES]; int Isym, Jsym; ngraphs = GraphSet->num_graphs; nel = GraphSet->num_el_expl; nras = GraphSet->num_ras_spaces; Isym = GraphSet->graph_irrep[sgraph]; Icode = GraphSet->graph_code[sgraph]; for (i=0; iencode2[i][Icode]; if (I_n[i] < 0) { printf("(gs_form_repinfo): Got less than 0 e- in a partition!\n"); return; } } string->cnt = init_int_array(ngraphs); string->ij = (int **) malloc (sizeof(int *) * ngraphs); string->oij = (int **) malloc(sizeof(int *) * ngraphs); string->ridx = (unsigned int **) malloc(sizeof(unsigned int *) * ngraphs); string->sgn = (signed char **) malloc(sizeof(signed char *) * ngraphs); for (tgraph=0; tgraphgraph_code[tgraph]; for (i=0; iencode2[i][Jcode]; if (J_n[i] < 0) { printf("(gs_form_repinfo): Got less than 0 e- in a partition!\n"); return; } D_n[i] = J_n[i] - I_n[i]; } /* are these ok? */ if ((i = abs(D_n1) + abs(D_n2) + abs(D_n3) + abs(D_n4)) > 2) { string->cnt[tgraph] = 0; continue; } Jsym = GraphSet->graph_irrep[tgraph]; ijsym = Isym ^ Jsym; if (i==0) { cnt = s2bgen1(GraphSet->Graph[tgraph], occs, I_n, ijsym, nel, GraphSet->num_orb, nras, GraphSet->raslevels, GraphSet->orbsym); } else { cnt = s2bgen2(occs, ijsym, nel, nras, GraphSet->raslevels, tgraph); } string->cnt[tgraph] = cnt; if (cnt) { string->ij[i] = init_int_array(cnt); string->oij[i] = init_int_array(cnt); string->ridx[i] = (unsigned int *) malloc(cnt * sizeof(unsigned int)); string->sgn[i] = (signed char *) malloc(cnt * sizeof(signed char)); /* could sort by ij, only takes a few ll (see stringlist.c l.369) */ for (i=0; iij[i] = Jij[i]; string->oij[i] = Joij[i]; string->ridx[i] = Jridx[i]; string->sgn[i] = Jsgn[i]; } } else { string->ij[tgraph] = NULL; string->oij[tgraph] = NULL; string->ridx[tgraph] = NULL; string->sgn[tgraph] = NULL; } } /* end loop over tgraph */ } int s2bgen1(struct fastgraph *graph, int *occs, int *I_n, int ijsym, int nel, int norb, int nras, int *raslevels, int *orbsym) { int i, j, ij, oij, k, orb, ridx; int tloc, tloc2, iused, hole, abshole, part; int T[MAX_EL], ecnt[N_RAS_SPACES], ras_occs[N_RAS_SPACES][MAX_EL]; int cnt = 0; /* how many singlerepls found for this string */ for (i=0; i #include #include #include #include #include "structs.h" #include "ci_tol.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define SMALL_DET 1e-10 extern struct stringwr **alplist; extern struct stringwr **betlist; #define CONFIG_STRING_MAX 200 extern void print_config(int nbf, int num_alp_el, int num_bet_el, struct stringwr *stralp, struct stringwr *strbet, int num_fzc_orbs, char *outstring); /* ** H0block_init() ** ** initialize everything but buf_num and buf_member, which depend on the ** CIvector structure */ void H0block_init(unsigned int size) { unsigned int size2; if (size > Parameters.h0blocksize) H0block.size = Parameters.h0blocksize; else H0block.size = size; H0block.coupling_size = Parameters.h0block_coupling_size; if (H0block.coupling_size) size2 = H0block.size + H0block.coupling_size; else size2 = H0block.size; if (Parameters.print_lvl > 1) fprintf(outfile,"Total H0block size (including coupling): %d\n",size2); H0block.osize = H0block.size; H0block.guess_size = Parameters.h0guess_size; H0block.oguess_size = H0block.guess_size; H0block.ocoupling_size = H0block.coupling_size; if (H0block.size) { H0block.H0b = init_matrix(H0block.size, H0block.size); if (Parameters.precon == PRECON_GEN_DAVIDSON) H0block.H0b_diag_transpose = init_array(H0block.size); /* H0block.H0b_diag_transpose = init_matrix(H0block.size, H0block.size); */ H0block.H0b_diag = init_matrix(H0block.size, H0block.size); H0block.H0b_eigvals = init_array(H0block.size); /* if (Parameters.precon == PRECON_H0BLOCK_INVERT || Parameters.precon == PRECON_H0BLOCK_ITER_INVERT) */ H0block.tmp1 = init_matrix(H0block.size, H0block.size); if (Parameters.precon == PRECON_H0BLOCK_INVERT) H0block.H0b_inv = init_matrix(H0block.size, H0block.size); H0block.H00 = init_array(size2); H0block.c0b = init_array(size2); H0block.c0bp = init_array(size2); H0block.s0b = init_array(size2); H0block.s0bp = init_array(size2); H0block.alplist = init_int_array(size2); H0block.betlist = init_int_array(size2); H0block.alpidx = init_int_array(size2); H0block.betidx = init_int_array(size2); H0block.blknum = init_int_array(size2); H0block.pair = init_int_array(size2); if (Parameters.h0block_coupling) { H0block.tmp_array1 = init_array(size2); H0block.tmp_array2 = init_array(size2); } } } void H0block_free(void) { int i; if (H0block.osize) { free(H0block.H00); free(H0block.c0b); free(H0block.c0bp); free(H0block.s0b); free(H0block.s0bp); free(H0block.alplist); free(H0block.betlist); free(H0block.alpidx); free(H0block.betidx); free(H0block.blknum); if (Parameters.precon == PRECON_GEN_DAVIDSON) free(H0block.H0b_diag_transpose); free_matrix(H0block.H0b, H0block.osize); if (Parameters.precon == PRECON_H0BLOCK_INVERT) free_matrix(H0block.H0b_inv, H0block.osize); /* if (Parameters.precon == PRECON_H0BLOCK_INVERT || Parameters.precon == PRECON_H0BLOCK_ITER_INVERT) */ free_matrix(H0block.tmp1, H0block.osize); free(H0block.pair); if (H0block.nbuf) { free(H0block.buf_num); for (i=0; i 4) { fprintf(outfile, "\nc0b = \n"); print_mat(&(H0block.c0b), 1, H0block.size, outfile); fprintf(outfile, "\ns0b = \n"); print_mat(&(H0block.s0b), 1, H0block.size, outfile); } if (Parameters.precon == PRECON_GEN_DAVIDSON) { if (first_call) { first_call = 0; /* for (i=0; i 4) { fprintf(outfile, "\nc0b = \n"); print_mat(&(H0block.c0b),1,H0block.size+H0block.coupling_size,outfile); fprintf(outfile, "\nc0bp = \n"); print_mat(&(H0block.c0bp),1,H0block.size+H0block.coupling_size,outfile); fprintf(outfile, "\ns0b = \n"); print_mat(&(H0block.s0b), 1, H0block.size, outfile); fprintf(outfile, "\ns0bp = \n"); print_mat(&(H0block.s0bp), 1, H0block.size, outfile); } free(H0xc0); free(H0xs0); return(1); } else if (Parameters.precon == PRECON_H0BLOCK_INVERT || Parameters.precon == PRECON_H0BLOCK_ITER_INVERT) { /* form H0b-E and take its inverse */ /* subtract E from the diagonal */ for (i=0; i 4) { fprintf(outfile, "\n E = %lf\n", E); fprintf(outfile, " H0 - E\n"); print_mat(H0block.tmp1, H0block.size, H0block.size, outfile); } if (Parameters.precon == PRECON_H0BLOCK_ITER_INVERT) { pople(H0block.tmp1, H0block.c0bp, size, 1, 1e-9, outfile, Parameters.print_lvl); if (Parameters.update == UPDATE_OLSEN) { for (i=0; i 4) { fprintf(outfile, "\nINV(H0 - E)\n"); print_mat(H0block.H0b_inv, H0block.size, H0block.size, outfile); } /* get c0bp = (H0b - E)^{-1} * c0b */ mmult(H0block.H0b_inv, 0, &(H0block.c0b), 1, &(H0block.c0bp), 1, size, size, 1, 0); /* get s0bp = (H0b - E)^{-1} * s0b */ mmult(H0block.H0b_inv, 0, &(H0block.s0b), 1, &(H0block.s0bp), 1, size, size, 1, 0); } if (Parameters.print_lvl > 4) { fprintf(outfile, "\nc0b = \n"); print_mat(&(H0block.c0b), 1, H0block.size, outfile); fprintf(outfile, "\nc0bp = \n"); print_mat(&(H0block.c0bp), 1, H0block.size, outfile); fprintf(outfile, "\ns0b = \n"); print_mat(&(H0block.s0b), 1, H0block.size, outfile); fprintf(outfile, "\ns0bp = \n"); print_mat(&(H0block.s0bp), 1, H0block.size, outfile); fprintf(outfile,"DET H0 = %5.4E\n", detH0); } if (detH0 < SMALL_DET) return(0); else return(1); } } /* ** eventually replace this with a somewhat more efficient CIvect member ** function which employs the new H0block.buf_member matrix. ** ** cscode == 0 refers to c0b, while cscode == 1 refers to s0b ** */ void H0block_gather(double **mat, int al, int bl, int cscode, int mscode, int phase) { double *target; int i, aidx, bidx; if (cscode == 0) target = H0block.c0b; else if (cscode == 1) target = H0block.s0b; else { printf("(H0block_gather): invalid cscode\n"); return; } for (i=0; i<(H0block.size+H0block.coupling_size); i++) { if (H0block.alplist[i] == al && H0block.betlist[i] == bl) { aidx = H0block.alpidx[i]; bidx = H0block.betidx[i]; target[i] = mat[aidx][bidx]; } if (mscode && H0block.alplist[i] == bl && H0block.betlist[i] == al) { aidx = H0block.alpidx[i]; bidx = H0block.betidx[i]; if (phase==1) target[i] = mat[bidx][aidx] ; else target[i] = -mat[bidx][aidx]; } } } /* ** Calculate the contributions to x and y due to the H0 block */ void H0block_xy(double *x, double *y, double E) { int i; double tx=0.0, ty=0.0, tval, c; for (i=0; i= newsize) H0block.pair[i] = -1; } } if (first == 0) { fprintf(outfile, "Warning! H0block size reduced to zero by "); fprintf(outfile, "H0block_pairup!\n"); } if (guess==2) H0block.coupling_size = newsize - H0block.size; else if (guess==1) H0block.guess_size = newsize; else if (guess==0) H0block.size = newsize; H0block_pairup(guess); } /* ** H0block_spin_cpl_chk ** ** This function makes sure that all element of a spin-coupling set ** are included in H0 block. If a member does not have all determinants ** of the spin-coupling set in the block, it is removed from the ** block in order to ensure that the proper spin symmetry is present ** in the eigenvectors of the H0 block. This only works if the ** averaged diagonal elements over a spin-coupling set are used. ** ** All parameters are taken from the H0block structure. ** ** Author: Matt Leininger, February 1998 ** Substantial modifications by David Sherrill, October 1998 ** */ void H0block_spin_cpl_chk(void) { int i,newsize,tmpsize; double zero = 1E-13; double diff = 0.0, spin_cpl_vals2; /* nothing to be done if no H0block */ if (H0block.size > 0) { if (H0block.coupling_size > 0) spin_cpl_vals2 = H0block.H00[H0block.size]; else spin_cpl_vals2 = H0block.spin_cp_vals; i = H0block.size-1; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ while (i > 0 && diff < zero) { i--; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ } newsize = i+1; if (newsize == 0) { fprintf(outfile, "Warning! H0block size reduced to zero by "); fprintf(outfile, "H0block_spin_cpl_chk!\n"); } H0block.size = newsize; } /**************************************************************** ** Also need to check the H0 block of the initial guess which may ** be smaller than the H0block.size ** CDS: I am assuming that guess_size has to be <= H0block.size *******************************************************************/ if (H0block.guess_size > 0) { if (H0block.guess_size >= H0block.osize) { if (H0block.coupling_size > 0) spin_cpl_vals2 = H0block.H00[H0block.size]; else spin_cpl_vals2 = H0block.spin_cp_vals; newsize = H0block.osize; } else { spin_cpl_vals2 = H0block.H00[H0block.guess_size]; newsize = H0block.guess_size; } i = newsize - 1; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ while (i > 0 && fabs(diff) < zero) { i--; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ } newsize = i+1; if (newsize == 0) { fprintf(outfile, "Warning! H0block guess size reduced to zero by "); fprintf(outfile, "H0block_spin_cpl_chk!\n"); } H0block.guess_size = newsize; } /**************************************************************** ** Also need to check the H0 block of the h0block coupling which ** will be larger than the H0block.size *****************************************************************/ if (H0block.coupling_size > 0) { spin_cpl_vals2 = H0block.spin_cp_vals; newsize = H0block.size + H0block.coupling_size; i = newsize - 1; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ while (i > 0 && fabs(diff) < zero) { i--; diff = fabs(H0block.H00[i] - spin_cpl_vals2); /* fprintf(outfile,"diff[%d] = %20.15f\n", i, diff); */ } newsize = i+1; if (newsize < H0block.size) { fprintf(outfile, "H0block coupling size reduced below 0 ???\n"); newsize = H0block.size; } if (newsize == H0block.size) { fprintf(outfile, "Warning! H0block coupling size reduced to H0block size by "); fprintf(outfile, "H0block_spin_cpl_chk!\n"); } H0block.coupling_size = newsize - H0block.size; } } /* ** H0block_filter_setup() ** ** This function takes a pair of user-specified ** determinants and adds them to the most H0block space (at the expense ** of two previously determined determinants, if they aren't already ** present) and stores which H0block determinant numbers they are. ** ** C. David Sherrill, July 2003 */ void H0block_filter_setup(void) { int Iac, Ibc, Iaridx, Ibridx; int Jac, Jbc, Jaridx, Jbridx; int i, found1, found2, replace; Iac = Parameters.filter_guess_Iac; Ibc = Parameters.filter_guess_Ibc; Iaridx = Parameters.filter_guess_Iaridx; Ibridx = Parameters.filter_guess_Ibridx; Jac = Parameters.filter_guess_Jac; Jbc = Parameters.filter_guess_Jbc; Jaridx = Parameters.filter_guess_Jaridx; Jbridx = Parameters.filter_guess_Jbridx; /* figure out if these determinants are in the list already */ found1 = 0; for (i=0; i #include #include #include #include #include #include #include "structs.h" #include "ci_tol.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { extern int og_lex_addr(struct olsen_graph *Graph, int *occs, int nel, int *listnum); void stringset_translate_addr(StringSet *sset, int new_nel, int new_nfzc, int *pitz2corr, struct olsen_graph *Graph, int *new_list, int *new_idx); /* ** parse_import_vector ** ** This function takes an imported CI vector using the SlaterDetVector, etc, ** structures and converts it to the new CI space by determining ** an alpha list, alpha relative index, beta list, beta relative index, ** and CI block number for each imported determinant in vec. ** ** C. David Sherrill ** August 2003 */ void parse_import_vector(SlaterDetSet *sdset, int *ialplist, int *ialpidx, int *ibetlist, int *ibetidx, int *blknums) { int i,j; StringSet *alphastrings, *betastrings; SlaterDet *dets; int alphastr, betastr; int *new_alphastr_list, *new_alphastr_idx; int *new_betastr_list, *new_betastr_idx; dets = sdset->dets; alphastrings = sdset->alphastrings; betastrings = sdset->betastrings; /* now figure out how the frozen stuff is going to map */ if (CalcInfo.num_fzc_orbs > alphastrings->nfzc || CalcInfo.num_fzc_orbs > betastrings->nfzc) { fprintf(outfile, "(parse_import_vector): Can't freeze more orbitals now" \ " than in the imported guess!\n"); abort(); } if (alphastrings->nfzc != betastrings->nfzc) { fprintf(outfile, "(parse_import_vector): alpha nfzc != beta nfzc!\n"); abort(); } new_alphastr_list = init_int_array(alphastrings->size); new_alphastr_idx = init_int_array(alphastrings->size); new_betastr_list = init_int_array(betastrings->size); new_betastr_idx = init_int_array(betastrings->size); stringset_translate_addr(alphastrings, CalcInfo.num_alp_expl, CalcInfo.num_fzc_orbs, CalcInfo.reorder, AlphaG, new_alphastr_list, new_alphastr_idx); stringset_translate_addr(betastrings, CalcInfo.num_bet_expl, CalcInfo.num_fzc_orbs, CalcInfo.reorder, BetaG, new_betastr_list, new_betastr_idx); /* loop over all the dets in the imported vector and translate each of them to the new determinant number. */ for (i=0; isize; i++) { alphastr = dets[i].alphastring; ialplist[i] = new_alphastr_list[alphastr]; ialpidx[i] = new_alphastr_idx[alphastr]; betastr = dets[i].betastring; ibetlist[i] = new_betastr_list[betastr]; ibetidx[i] = new_betastr_idx[betastr]; /* figure out what block we're in */ j = CIblks.decode[ialplist[i]][ibetlist[i]]; if (j == -1) { fprintf(outfile, "Import vector: can't find CI block!\n"); fprintf(outfile, "Determinant number %d\n", i); fprintf(outfile, "\nialplist=%d, ialpidx=%d, ibetlist=%d, ibetidx=%d\n", ialplist[i], ialpidx[i], ibetlist[i], ibetidx[i]); abort(); } else blknums[i] = j; } /* end loop over determinants */ free(new_alphastr_list); free(new_alphastr_idx); free(new_betastr_list); free(new_betastr_idx); } /* ** stringset_translate_addr ** ** This function takes a StringSet and translates the occupations ** for each string, taking into account that some formerly frozen orbitals ** may now be unfrozen, and that the StringSet occupations are stored ** in Pitzer order and we need correlated order, and produces a new ** occupation list which is used to generate a new graph list ** (new_list[s]) and relative index (new_idx[s]). The original StringSet ** is untouched because it does not carry enough storage space to hold ** both a list number and relative index (and the number of active electrons ** in the occupations array may also have changed). ** ** C. David Sherrill ** August 2003 */ void stringset_translate_addr(StringSet *sset, int new_nel, int new_nfzc, int *pitz2corr, struct olsen_graph *Graph, int *new_list, int *new_idx) { int i, j, l, s; int old_nel; int *former_fzc_occ, num_former_fzc, *tmpocc; short int *old_occ; old_nel = sset->nelec - sset->nfzc; former_fzc_occ = init_int_array(sset->nfzc); for (i=0,num_former_fzc=0; infzc; i++) { j = (int) sset->fzc_occ[i]; j = pitz2corr[j] - new_nfzc; if (j >= 0) former_fzc_occ[num_former_fzc++] = j; } if (num_former_fzc + old_nel > new_nel) { fprintf(outfile, "(stringset_translate_addr): num_former_fzc + old_nel" \ " > new_nel!\n"); fflush(outfile); abort(); } tmpocc = init_int_array(new_nel); /* Loop over all the strings in the imported stringset and translate each of them to the new lexical string address. We won't store the translated occs array itself simply because the size might have changed. */ for (s=0; ssize; s++) { old_occ = sset->strings[s].occ; for (i=0,l=0; i= 0) tmpocc[l++] = j; } if (l != new_nel) { fprintf(outfile, "(stringset_translate_addr): Imported string has wrong" \ " number of electrons, %d vs. %d\n", l, new_nel); fflush(outfile); abort(); } new_idx[s] = og_lex_addr(Graph,tmpocc,new_nel,&(new_list[s])); } free(former_fzc_occ); free(tmpocc); } }} // namespace psi::detci psi3/src/bin/detci/ints.cc0000644000101500007650000002215310757640026014126 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** INTS.C ** ** Return values of one and two-electron integrals ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** ** Updated 3/18/95 to exclude frozen virtual orbitals. ** Updated 3/28/95 to exclude frozen core orbitals. */ #include #include #include #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) void read_integrals() { int i, j, ij, k, l, kl, ijkl, ijij; int nmotri, nmotri_full; double value; extern double check_energy(double *H, double *twoel_ints, int *docc, int *frozen_docc, int fzc_flag, double escf, double enuc, double efzc, int nirreps, int *reorder, int *opi, int print_lvl, FILE *outfile); int junk; double *tmp_onel_ints; int *tmp_frdocc, *tmp_fruocc; int nfilter_core, nfilter_vir; /* allocate memory for one and two electron integrals */ nmotri_full = (CalcInfo.nmo * (CalcInfo.nmo + 1)) / 2; nmotri = (CalcInfo.num_ci_orbs * (CalcInfo.num_ci_orbs + 1)) / 2 ; CalcInfo.onel_ints = (double *) init_array(nmotri) ; CalcInfo.twoel_ints = (double *) init_array(nmotri * (nmotri + 1) / 2); CalcInfo.maxK = (double *) init_array(CalcInfo.num_ci_orbs); /* One-electron integrals: always filter what DETCI considers frozen (whatever is in the fzc arrays, which internally DETCI uses for user's frozen core or user's frozen core + restricted core) because the one-electron integrals are written out as the full size over all MO's regardless of the computation type. */ tmp_onel_ints = init_array(nmotri_full); iwl_rdone(Parameters.oei_file, PSIF_MO_FZC, tmp_onel_ints, nmotri_full, Parameters.oei_erase, (Parameters.print_lvl>4), outfile); filter(tmp_onel_ints, CalcInfo.onel_ints, ioff, CalcInfo.nmo, CalcInfo.num_fzc_orbs, CalcInfo.num_fzv_orbs); free(tmp_onel_ints); /* Two-electron integrals: filter out what we don't need. TRANSQT2 supplies restricted orbitals always (well, for now). It will also supply frozen core if it's a gradient calculation (need for orbital response) or an MCSCF (need for MO Hessian). We normally want to filter all these out of the CI energy computation. Likewise, we normally won't need restricted or frozen virtuals in the CI energy computation and should filter them out if they are in the TEI file */ if (Parameters.filter_ints) { nfilter_core = CalcInfo.num_fzc_orbs; nfilter_vir = CalcInfo.num_fzv_orbs; } else { nfilter_core = 0; nfilter_vir = 0; } iwl_rdtwo(Parameters.tei_file, CalcInfo.twoel_ints, ioff, CalcInfo.nmo, nfilter_core, nfilter_vir, (Parameters.print_lvl>4), outfile); /* Determine maximum K integral for use in averaging the diagonal */ /* Hamiltonian matrix elements over spin-coupling set */ if (Parameters.hd_ave) { for(i=0; i CalcInfo.maxK[i]) CalcInfo.maxK[i] = value; } for(i=0; i CalcInfo.maxKlist) CalcInfo.maxKlist = CalcInfo.maxK[i]; if (Parameters.print_lvl > 4) fprintf(outfile,"maxK[%d] = %lf\n",i, CalcInfo.maxK[i]); } } if (Parameters.print_lvl > 4) { fprintf(outfile, "\nOne-electron integrals\n") ; for (i=0, ij=0; i 4) { fprintf(outfile, "\nmaxKlist = %lf\n",CalcInfo.maxKlist); fprintf(outfile, "\nTwo-electron integrals\n"); for (i=0; i j) { ij = ioff[i] + j; value = CalcInfo.onel_ints[ij] ; return(value) ; } else { ij = ioff[j] + i ; value = CalcInfo.onel_ints[ij] ; return(value) ; } return(CalcInfo.onel_ints[ij]) ; } double get_twoel(int i, int j, int k, int l) { int ij, kl, ijkl ; ij = ioff[MAX0(i,j)] ; ij += MIN0(i,j) ; kl = ioff[MAX0(k,l)] ; kl += MIN0(k,l) ; ijkl = ioff[MAX0(ij,kl)] ; ijkl += MIN0(ij,kl) ; return(CalcInfo.twoel_ints[ijkl]) ; } /* ** tf_onel_ints(): Function lumps together one-electron contributions ** so that h'_{ij} = h_{ij} - 1/2 SUM_k (ik|kj) ** The term h' arises in the calculation of sigma1 and sigma2 via ** equation (20) of Olsen, Roos, et. al. JCP 1988 ** */ void tf_onel_ints(int printflag, FILE *outfile) { int i, j, k, ij, ik, kj, ikkj ; int nbf ; double *tei, *teptr ; double tval ; int ntri; /* set up some shorthand notation (speed up access) */ nbf = CalcInfo.num_ci_orbs ; tei = CalcInfo.twoel_ints ; ntri = (nbf * (nbf + 1)) / 2; /* ok, new special thing for CASSCF...if there are *no* excitations into restricted orbitals, and if Parameters.fci=TRUE, then we do *not* want to sum over the restricted virts in h' or else we would need to account for RAS-out-of-space contributions (requiring fci=false). */ if (Parameters.fci && (nbf > Parameters.ras3_lvl) && Parameters.ras34_max == 0) nbf = Parameters.ras3_lvl; /* allocate space for the new array */ CalcInfo.tf_onel_ints = init_array(ntri) ; /* fill up the new array */ for (i=0,ij=0; i namespace psi { namespace detci { /* ** TRANSP_SIGMA(): Function adds the transpose (times a phase factor) of ** a matrix to itself. ** */ void transp_sigma(double **a, int rows, int cols, int phase) { int i,j; if (rows != cols) { printf("(transp_sigma): Error, rows != cols\n"); printf("\trows = %d, cols = %d\n", rows, cols); return; } /* do lower triangle */ if (phase == 1) { for (i=0; i #include #include #include #include #include "structs.h" #include "globals.h" #include "civect.h" #include "ci_tol.h" namespace psi { namespace detci { extern int H0block_calc(double E); extern int H0block_coupling_calc(double E, struct stringwr *alplist, struct stringwr *betlist); extern void H0block_xy(double *x, double *y, double E); extern void print_vec(unsigned int nprint, int *Iacode, int *Ibcode, int *Iaidx, int *Ibidx, double *coeff, struct olsen_graph *AlphaG, struct olsen_graph *BetaG, struct stringwr **alplist, struct stringwr **betlist, FILE *outfile); /* #define DEBUG */ #define MITRUSH_E_DIFF_MIN 5.0E-6 /* ** mitrush_iter() ** ** Adapted from ci_iter() in the FCI program (5/95 and before). ** Performs Olsen and Mitrushenkov iterations to converge on the CI vector. ** New version uses the CIvect class. ** ** David Sherrill ** 19 June 1995 ** */ void mitrush_iter(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist, int nroots, double *evals, double conv_rms, double conv_e, double enuc, double efzc, int maxiter, int maxnvect, FILE *outfile, int print_lvl) { int i, j, ij, k, l, curr, last, iter=0, L, tmpi; int num_alp_str, num_bet_str, detH0 = -1; double *oei, *tei; double E, E_curr, E_last, E_est, E12, norm=1.0, S; double **H2x2, *evals2x2, **evecs2x2, alast, acur; double x, y, c1norm = 0.0; int sm_tridim, buf; double *sm_mat, *sm_evals, **sm_evecs; int *mi_iac, *mi_ibc, *mi_iaidx, *mi_ibidx; double testS = 0.0; double tval, *mi_coeff, *buffer1, *buffer2; double **alpha, chknorm; int diag_method; CIvect Cvec; CIvect Sigma; Cvec.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Sigma.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_s_tmp_units, Parameters.first_s_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); /* set up the vector pointers/info */ if (Cvec.read_new_first_buf() == -1) Cvec.write_new_first_buf(); if (Sigma.read_new_first_buf() == -1) Sigma.write_new_first_buf(); if (Cvec.read_num_vecs() == -1) Cvec.write_num_vecs(0); if (Sigma.read_num_vecs() == -1) Sigma.write_num_vecs(0); Cvec.h0block_buf_init(); curr = 0; last = (Parameters.diag_method == METHOD_MITRUSHENKOV) ? 1 : 0; diag_method = Parameters.diag_method; /* set buffer pointers */ buffer1 = *(Hd.blockptr(0)); buffer2 = Hd.buf_malloc(); Hd.buf_unlock(); /* get some of the stuff from CalcInfo for easier access */ num_alp_str = CalcInfo.num_alp_str; num_bet_str = CalcInfo.num_bet_str; if (Parameters.fci) oei = CalcInfo.tf_onel_ints; else oei = CalcInfo.gmat[0]; tei = CalcInfo.twoel_ints; /* small arrays to hold most important config information */ mi_iac = init_int_array(Parameters.nprint); mi_ibc = init_int_array(Parameters.nprint); mi_iaidx = init_int_array(Parameters.nprint); mi_ibidx = init_int_array(Parameters.nprint); mi_coeff = init_array(Parameters.nprint); /* stuff for the 2x2 Davidson procedure */ H2x2 = init_matrix(2,2); evals2x2 = init_array(2); evecs2x2 = init_matrix(2,2); alpha = init_matrix(1,1); /* not used but is necessary for call to olsen_iter_xy */ /* setup initial guess vector */ if (Parameters.restart) { fprintf(outfile,"\nAttempting Restart with 1 vector\n"); if ((i=Cvec.read_num_vecs())< 1) { fprintf(outfile, "CI vector file contains %d vectors, need 1.\n", i); exit(0); } fflush(outfile); Cvec.buf_lock(buffer1); Cvec.read(0, 0); tval = Cvec * Cvec; if ((tval - 1.0) > ZERO) fprintf(outfile,"CI vector may be corrupted." " Attempting to correct by renormalizing.\n"); Cvec.symnorm(tval,CI_VEC,TRUE); } else if (Parameters.guess_vector == PARM_GUESS_VEC_UNIT && nroots == 1 && Parameters.num_init_vecs == 1) { /* use unit vector */ tval = 1.0; Cvec.buf_lock(buffer1); Cvec.init_vals(0, 1, &(CalcInfo.ref_alp_list), &(CalcInfo.ref_alp_rel), &(CalcInfo.ref_bet_list), &(CalcInfo.ref_bet_rel), H0block.blknum, &tval); Cvec.write_num_vecs(1); k = 1; Cvec.read(0, 0); Cvec.symnorm(1.0,CI_VEC,TRUE); Sigma.set_zero_blocks_all(); } else { /* use H0BLOCK eigenvector guess */ if (Parameters.precon == PRECON_GEN_DAVIDSON) L = H0block.size; else L = H0block.guess_size; sm_evals = init_array(L); /* need to fill out sm_evecs into b (pad w/ 0's) */ fprintf(outfile, "Using %d initial trial vectors\n", Parameters.num_init_vecs); Cvec.buf_lock(buffer1); for (i=0,k=0; i 1.0E-8) tmpi = 1; } if (tmpi) continue; for (j=0; j 4) { fprintf(outfile, "\nC(0) vector = \n"); Cvec.print(outfile); } Sigma.buf_lock(buffer2); Cvec.read(0, 0); sigma(alplist, betlist, Cvec, Sigma, oei, tei, Parameters.fci, 0); Sigma.write_num_vecs(1); Cvec.copy_zero_blocks(Sigma); if (print_lvl > 4) { fprintf(outfile, "\nSigma vector\n"); Sigma.print(outfile); fflush(outfile); } /* get H00 */ E = Cvec * Sigma; E += efzc; E_last = CalcInfo.escf - CalcInfo.enuc; /* Cvec.print(outfile); */ Cvec.buf_unlock(); Sigma.buf_unlock(); /* * get y = C(0) * (Hd - E)^-1 * sigma(0) * and x = C(0) * (Hd - E)^-1 * C(0) * Mental note: x and y are doubles not vectors */ olsen_iter_xy(Cvec,Sigma,Hd,&x,&y,buffer1,buffer2,E,curr,1,alpha,alplist, betlist); if (Parameters.print_lvl > 3) { fprintf(outfile, "Straight x = %12.6lf\n", x); fprintf(outfile, "Straight y = %12.6lf\n", y); } if (Parameters.precon >= PRECON_GEN_DAVIDSON && H0block.size) { detH0 = 1; /* detH0 = H0block_calc(E); */ fflush(outfile); if (detH0 == 0) { fprintf(outfile, "H0block inverse is nearly nonsingular:"); fprintf(outfile," initiating DAVIDSON preconditioner\n"); fflush(outfile); Parameters.precon = PRECON_DAVIDSON; } if (Parameters.precon >= PRECON_GEN_DAVIDSON) { /* H0block_xy(&x,&y,E); */ if (Parameters.print_lvl > 3) { fprintf(outfile, "x = %12.6lf\n", x); fprintf(outfile, "y = %12.6lf\n", y); } } } E_est = y / x; /* should I add fzc here? */ if (Parameters.print_lvl > 2) { fprintf(outfile, "E_est = %12.6lf E-efzc = %12.6lf E = %12.6lf\n", E_est,E-efzc,E); fprintf(outfile, "x = %lf y = %lf\n",x,y); } /* calculate delta_C and C(1) */ olsen_update(Cvec, Sigma, Hd, E, E_est, &norm, &c1norm, &S, buffer1, buffer2, curr, last, outfile, iter, alplist, betlist); norm = sqrt(1.0 / norm); Cvec.buf_lock(buffer1); Cvec.read(last, 0); Cvec.symnorm(norm,CI_VEC,TRUE); S *= norm; Cvec.buf_unlock(); if (Parameters.calc_ssq && Parameters.icore==1) Cvec.calc_ssq(buffer1, buffer2, alplist, betlist, 0); /* Cvec.buf_lock(buffer1); Cvec.read(0,0); fprintf(outfile," Cvec[0] = \n"); Cvec.print(outfile); Cvec.read(1,0); fprintf(outfile," Cvec[1] = \n"); Cvec.print(outfile); Cvec.buf_unlock(); */ /* S is the overlap of the C_(i-1) and C_i */ fprintf(outfile,"Iter 0 ROOT 1 ECI = %14.9lf", enuc + E); fprintf(outfile," Delta_E %10.3E Delta_C %10.3E\n", E - E_last, c1norm); fflush(outfile); iter = 1; if (Parameters.diag_method == METHOD_MITRUSHENKOV) { curr = 1; last = 0; } while (1) { Cvec.buf_lock(buffer1); Sigma.buf_lock(buffer2); Cvec.read(curr,0); /* chknorm = Cvec.checknorm(); fprintf(outfile,"Norm of curr CI vect = %lf\n",chknorm); */ if (print_lvl > 4) { fprintf(outfile, "\nC(%2d) vector (symm'd norm'd)\n", iter) ; Cvec.print(outfile); fflush(outfile); } Cvec.read(curr,0); /* Sigma.read(curr,0); */ sigma(alplist, betlist, Cvec, Sigma, oei, tei, Parameters.fci, curr); Cvec.copy_zero_blocks(Sigma); Cvec.read(curr,0); if (print_lvl > 4) { fprintf(outfile,"\nC(%2d) vector (symm'd norm'd) second time\n",iter); Cvec.print(outfile); fflush(outfile); } if (print_lvl > 4) { Sigma.read(curr,0); fprintf(outfile, "\n curr = %d\n", curr); fprintf(outfile, "\nSigma(%2d) vector\n", iter); Sigma.print(outfile); fflush(outfile); } Cvec.read(curr,0); Sigma.read(curr,0); /* calculate H(ii) */ E_curr = Cvec * Sigma; E_curr += efzc; E = E_curr; /* check for convergence and exit if reached */ if (iter == maxiter) fprintf(outfile, "Maximum number of iterations reached!\n"); /* if the 2x2 matrix diagonalization can be done, take Mitrush Step */ if (Parameters.diag_method==METHOD_MITRUSHENKOV && diag_method==METHOD_MITRUSHENKOV && S < S_MAX && fabs(E_last-E_curr) > MITRUSH_E_DIFF_MIN) { fprintf(outfile, "Taking Mitrushenkov step (S =%10.6lf <%10.6lf)\n", S, S_MAX); /* calculate H(i,i-1) = H(i-1,i) */ Cvec.read(last, 0); E12 = Cvec * Sigma; E12 += efzc * S; /* fill up little H matrix and solve 2x2 eigenvalue problem */ H2x2[0][0] = E_last; H2x2[0][1] = H2x2[1][0] = E12; H2x2[1][1] = E_curr; solve_2x2_pep(H2x2, S, evals2x2, evecs2x2); /* recalculate C(i) = alpha(i-1) * C(i-1) + alpha(i) * C(i) */ /* and sigma(i) = alpha(i-1) * sigma(i-1) + alpha(i) * sigma(i) */ alast = evecs2x2[0][0]; acur = evecs2x2[0][1]; norm = 1.0/sqrt(acur * acur + alast * alast + 2.0 * acur * alast * S); Cvec.buf_unlock(); Sigma.buf_unlock(); /* fprintf(outfile,"alpha_0 = %lf alpha_1 = %lf\n", evecs2x2[0][0],evecs2x2[0][1]); Cvec.buf_lock(buffer1); Cvec.read(0,0); fprintf(outfile," Cvec[%d] = \n",0); Cvec.print(outfile); Cvec.read(1,0); fprintf(outfile," Cvec[%d] = \n",1); Cvec.print(outfile); Cvec.buf_unlock(); */ /* Construct C(i) = alpha(i)*C(i) + alpha(i-1)*C(i-1) */ mitrush_update(Cvec,Sigma,norm,acur,alast,buffer1,buffer2,curr,last); /* put H(ii) = E(i) */ E = evals2x2[0]; } /* end Mitrushenkov Step */ else { Cvec.buf_unlock(); Sigma.buf_unlock(); if (Parameters.diag_method==METHOD_MITRUSHENKOV && diag_method==METHOD_MITRUSHENKOV) { diag_method = METHOD_OLSEN; last = curr; } } /* ** get y = C(0) * (Hd - E)^-1 * sigma(0) ** and x = C(0) * (Hd - E)^-1 * C(0) */ olsen_iter_xy(Cvec,Sigma,Hd,&x,&y,buffer1,buffer2,E,curr,1,alpha, alplist, betlist); if (Parameters.print_lvl > 3) { fprintf(outfile, "Straight x = %12.6lf\n", x); fprintf(outfile, "Straight y = %12.6lf\n", y); } if (Parameters.precon >= PRECON_GEN_DAVIDSON && H0block.size) { detH0 = H0block_calc(E); /* fprintf(outfile,"detH0 = %d\n", detH0); fflush(outfile); */ if (detH0 == 0) { fprintf(outfile, "H0block inverse is nearly singular:"); fprintf(outfile," initiating DAVIDSON preconditioner\n"); Parameters.precon = PRECON_DAVIDSON; } if (Parameters.precon >= PRECON_GEN_DAVIDSON) { H0block_xy(&x,&y,E); if (Parameters.print_lvl > 3) { fprintf(outfile, "x = %12.6lf\n", x); fprintf(outfile, "y = %12.6lf\n", y); } } } E_est = y / x; if (Parameters.print_lvl > 2) { fprintf(outfile, "E_est = %12.6lf E = %12.6lf\n", E_est+efzc+enuc, E+enuc); /* fprintf(outfile, "x = %lf y = %lf\n",x,y); */ } /* calculate delta_C and C(next) */ olsen_update(Cvec,Sigma,Hd,E,E_est,&norm,&c1norm,&S,buffer1,buffer2, curr,last,outfile,iter, alplist, betlist); norm = sqrt(1.0 / norm); Cvec.buf_lock(buffer1); Cvec.read(last, 0); S *= norm; if (Parameters.precon >= PRECON_GEN_DAVIDSON && diag_method==METHOD_MITRUSHENKOV && S=maxiter) { fprintf(outfile, "Iter %2d ROOT 1 ECI = %14.9lf", iter, E + enuc); fprintf(outfile, " Delta_E %10.3E Delta_C %10.3E %c\n" ,E-E_last,c1norm,(fabs(E - E_last) < conv_e && c1norm < conv_rms) ? 'c' : ' '); evals[0] = E; free_matrix(H2x2,2); free(evals2x2); free_matrix(evecs2x2,2); fprintf(outfile, "\n\n* ROOT 1 CI total energy = %19.15lf\n", E + enuc); Cvec.max_abs_vals(Parameters.nprint, mi_iac, mi_ibc, mi_iaidx, mi_ibidx, mi_coeff, Parameters.neg_only); print_vec(Parameters.nprint, mi_iac, mi_ibc, mi_iaidx, mi_ibidx, mi_coeff, AlphaG, BetaG, alplist, betlist, outfile); free(mi_iac); free(mi_ibc); free(mi_iaidx); free(mi_ibidx); free(mi_coeff); return; } Cvec.buf_unlock(); Sigma.buf_unlock(); fprintf(outfile,"Iter %2d ROOT 1 ECI = %14.9lf", iter, enuc+E); fprintf(outfile," Delta_E %10.3E Delta_C %10.3E\n",E-E_last,c1norm); fflush(outfile); iter++; E_last = E; if (Parameters.calc_ssq && Parameters.icore==1) Cvec.calc_ssq(buffer1, buffer2, alplist, betlist, 0); } /* end while (1) */ } }} // namespace psi::detci psi3/src/bin/detci/mpn.cc0000644000101500007650000002764410757640026013755 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** Moeller Plesset Perturbation Series Generator ** ** Matt L. Leininger ** August 11, 1998 ** */ /* #define DEBUG */ #include #include #include #include #include #include #include "structs.h" #include "ci_tol.h" #define EXTERN #include "globals.h" #include "civect.h" namespace psi { namespace detci { extern void print_vec(unsigned int nprint, int *Iacode, int *Ibcode, int *Iaidx, int *Ibidx, double *coeff, struct olsen_graph *AlphaG, struct olsen_graph *BetaG, struct stringwr **alplist, struct stringwr **betlist, FILE *outfile); void mpn_generator(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist) { double *mpk_energy, *mp2k_energy, *oei, *tei, *buffer1, *buffer2; double tval, Empn = 0.0, **wfn_overlap, Empn2 = 0.0, **cvec_coeff; double Empn2a = 0.0; double *cvec_norm, norm, *tmp_coeff, tmp_norm, max_overlap = 1.0; int i, j, k, order, did_vec=0; int kvec_offset; /* offset if c_0 is not stored on disk */ CIvect Cvec; CIvect Cvec2; CIvect Sigma; Cvec.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Parameters.maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Sigma.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, 1, Parameters.num_s_tmp_units, Parameters.first_s_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Cvec2.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Parameters.maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); /* set up the vector pointers/info */ if (Cvec.read_new_first_buf() == -1) Cvec.write_new_first_buf(); if (Sigma.read_new_first_buf() == -1) Sigma.write_new_first_buf(); Cvec.h0block_buf_init(); buffer1 = *(Hd.blockptr(0)); buffer2 = Hd.buf_malloc(); Hd.buf_unlock(); wfn_overlap = init_matrix(Parameters.maxnvect+1, Parameters.maxnvect+1); cvec_coeff = init_matrix(Parameters.maxnvect+1, Parameters.maxnvect+1); tmp_coeff = init_array(Parameters.maxnvect+1); cvec_norm = init_array(Parameters.maxnvect+1); mpk_energy = init_array(Parameters.maxnvect+1); mp2k_energy = init_array(2*(Parameters.maxnvect+1)+1); mpk_energy[0] = mp2k_energy[0] = CalcInfo.e0; mpk_energy[1] = CalcInfo.e1 = mp2k_energy[1] = CalcInfo.escf - CalcInfo.e0 - CalcInfo.enuc; if (CalcInfo.iopen) kvec_offset = 0; else kvec_offset = 0; for (i=0; i<=Parameters.maxnvect; i++) cvec_coeff[i][i] = 1.0; cvec_norm[0] = 1.0; wfn_overlap[0][0] = 1.0; /* oei = CalcInfo.tf_onel_ints; */ if (Parameters.fci) oei = CalcInfo.tf_onel_ints; else oei = CalcInfo.gmat[0]; tei = CalcInfo.twoel_ints; fprintf(outfile," CalcInfo.escf = %25.15f\n", CalcInfo.escf); fprintf(outfile," CalcInfo.e0 = %25.15f\n", CalcInfo.e0); fprintf(outfile," CalcInfo.enuc = %25.15f\n", CalcInfo.enuc); fprintf(outfile," CalcInfo.e1 = %25.15f\n\n", CalcInfo.e1); if(Parameters.zaptn) { fprintf(outfile," n Corr. Energy \t\t E(ZAPTn) \t\t" " n Corr. Energy \t\t E(ZAPTn)\n\n"); } else { fprintf(outfile," n Corr. Energy \t\t E(MPn) \t\t" " n Corr. Energy \t\t E(MPn)\n\n"); } fprintf(outfile," 0 %25.15f %25.15f\n", 0.0000000000, CalcInfo.e0+CalcInfo.enuc); fprintf(outfile," 1 %25.15f %25.15f\n",mpk_energy[1], mpk_energy[0]+mpk_energy[1]+CalcInfo.enuc); Empn = mpk_energy[0]+mpk_energy[1]+CalcInfo.enuc; Empn2 = Empn; fflush(outfile); Cvec.buf_lock(buffer1); Cvec.h0block_buf_init(); tval = 1.0; Cvec.init_vals(0, 1, &(CalcInfo.ref_alp_list), &(CalcInfo.ref_alp_rel), &(CalcInfo.ref_bet_list), &(CalcInfo.ref_bet_rel), H0block.blknum, &tval); if (Parameters.print_lvl >= 5) { fprintf(outfile,"Zeroth-order wavefunction\n"); Cvec.print(outfile); } Sigma.buf_lock(buffer2); Cvec.read(0, 0); /* Set Cvec up correctly ? */ //fprintf(outfile,"Cvec zero_blocks:\n"); //Cvec.print_zero_blocks(); Sigma.set_zero_blocks_all(); //fprintf(outfile,"Sigma zero_blocks after set_zero_blocks_all.\n"); //Sigma.print_zero_blocks(); sigma(alplist, betlist, Cvec, Sigma, oei, tei, Parameters.fci, 0); if (Parameters.print_lvl >= 5) { fprintf(outfile,"Sigma vector for 0 C vector\n"); Sigma.read(0,0); Sigma.print(outfile); } //fprintf(outfile,"Sigma zero_blocks after sigma call.\n"); //Sigma.print_zero_blocks(); Cvec.read(0,0); /* Set Cvec up correctly ? */ Sigma.read(0,0); /* Set Sigma up correctly ? */ tval = Cvec * Sigma; //fprintf(outfile," CalcInfo.enuc = %25.15f\n", CalcInfo.enuc); //fprintf(outfile," = %25.15f\n", tval); //fprintf(outfile," CalcInfo.efzc = %25.15f\n", CalcInfo.efzc); //fprintf(outfile," mpk_energy[0] = %25.15f\n", mpk_energy[0]); tval += CalcInfo.efzc - mpk_energy[0]; fprintf(outfile," 1 %25.15f %25.15f\n", tval, tval+mpk_energy[0]+CalcInfo.enuc); if (tval - mpk_energy[1] > ZERO) fprintf(outfile, "First-order energies do not agree!\n"); fflush(outfile); Cvec.copy_zero_blocks(Sigma); /* Probably don't need this anymore */ Cvec.copy(Sigma, (1-kvec_offset), 0); if (Parameters.print_lvl >= 5) { fprintf(outfile, "Cvec copying Sigma.\n"); Cvec.print(outfile); } Sigma.buf_unlock(); Hd.buf_lock(buffer2); tval = Cvec.dcalc2(1, CalcInfo.e0, Hd, 1, alplist, betlist); Hd.buf_unlock(); tval = 0.0; if (Parameters.print_lvl >= 5) { fprintf(outfile, "Cvec after dcalc2.\n"); Cvec.print(outfile); } Cvec.read((1-kvec_offset),0); Cvec.set_vals((1-kvec_offset), 1, &(CalcInfo.ref_alp_list), &(CalcInfo.ref_alp_rel), &(CalcInfo.ref_bet_list), &(CalcInfo.ref_bet_rel), H0block.blknum, &tval); Sigma.buf_lock(buffer2); if (Parameters.print_lvl >= 5) { fprintf(outfile, "Cvec after set_vals.\n"); Cvec.print(outfile); } /* Here buffer1 = Cvec and buffer2 = Sigma */ k=1; while (k1) { Cvec2.buf_lock(buffer2); if (Cvec.schmidt_add2(Cvec2,0,k-2,k-1,k-1,cvec_coeff[k-1], (&cvec_norm[k-1]),&max_overlap)) did_vec = 1; else { fprintf(outfile," %d vector norm = %20.15f < %20.15f\n", k-1, cvec_norm[k-1], MPn_NORM_TOL); exit(0); } while (max_overlap > MPn_ZERO) { fprintf(outfile,"Second Schmidt-Orthogonalization performed.\n"); Cvec.read(k-1,0); tval = Cvec * Cvec; tval = 1.0/sqrt(tval); fprintf(outfile,"Norm constant for %d S.O. Cvec = %20.15f\n", k-1, tval); Cvec2.read(k-1,0); tval = Cvec2 * Cvec2; tval = 1.0/sqrt(tval); fprintf(outfile,"Norm constant for %d S.O. Cvec2 = %20.15f\n", k-1, tval); if (Cvec.schmidt_add2(Cvec2,0,k-2,k-1,k-1,tmp_coeff, &tmp_norm,&max_overlap)) did_vec = 1; else { fprintf(outfile," %d vector norm = %20.15f < %20.15f\n", k-1, cvec_norm[k-1], MPn_NORM_TOL); exit(0); } for (i=0; i #include from structs.h -- seems ok w/out it. **************************************************************************** 23 January 2008: CDS I'm going to extract the remaining wreadw/wwritw calls over the next few days. As I'm working on this, I notice that there's a lot of leftover junk having to do with file offsets that we used before we had the convenience of keyword access with libpsio. This code is (a) confusing and (b) not used anymore. This might be a good opportunity to remove it to keep the code maintained in good shape. Specifically, a lot of this has to do with zero_blocks. Now zero_blocks tries to keep up with what blocks are zero and avoid unnecessary computations. But it *also* tries to avoid unnecessary disk storage in MPn calculations. The former is in and works and is all ok (and is NOT turned off by Parameters.zero_blocks = 0). The latter is what is controlled by Parameters.zero_blocks, and it is all messed up and obsolete (I assume). Let me try an MPn calculation with it turned on and see if I even get the same answer. Hm, I can't even do it, b/c file51 isn't opened properly for the old I/O. While this could be fixed, I think it would be better to scrap this Parameters.zero_blocks feature since it is essentially never used, doesn't work now, and complicates the code. I think it could be re-implemented better if it became of interest again. Before I go ripping this stuff out (as well as the presumably obsolete file_offsets junk), let me make a couple more test cases that might check the fancier versions of CIvect I/O; non-A1 open-shells states would be perfect, as well as different icore options. Ok, added several new test cases. I then ripped out all I/O offset and I/O-related zero block stuff. Amazingly, all test cases seem to pass. This is actually somewhat surprising... psi3/src/bin/detci/odometer.cc0000644000101500007650000000737210757640026014775 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** ODOMETER.CC ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia */ #include #include "odometer.h" namespace psi { namespace detci { // #define STANDALONE #ifdef STANDALONE #include #endif Odometer::Odometer() { length = 0 ; max = NULL ; min = NULL ; value = NULL ; } Odometer::~Odometer() { if (length) { delete [] max; delete [] min; delete [] value; } length = 0; } void Odometer::size(unsigned n) { int i ; length = n ; max = new int[n] ; min = new int[n] ; value = new int[n] ; for (i=0; i=0; i--,j++) min[i] = m + j; } void Odometer::set_min(int* m) { int i ; for (i=0; i=0; j--) { if (value[j+1] + 1 >= min[j]) value[j] = value[j+1] + 1; else value[j] = min[j] ; } break ; } else { value[i] = min[i] ; } } } void Odometer::print() { int i ; for (i=length-1; i>=0; i--) { printf("%d ", value[i]); } printf("\n"); } unsigned Odometer::at_max() { int i ; unsigned tval=1 ; if (length == 0) return (1) ; for (i=0; i max[i])) return(0) ; return(1) ; } #ifdef STANDALONE main() { Odometer od ; int maxvals[] = {7, 6, 5} ; int minvals[] = {3, 2, 1} ; od.size(3) ; od.print() ; // od.set_min(minvals) ; od.set_min_lex(1) ; od.reset() ; // od.set_max(maxvals) ; od.set_max_lex(7) ; while (!od.at_max()) { od.print(); od.increment_lex() ; } od.print() ; } #endif }} // namespace psi::detci psi3/src/bin/detci/odometer.h0000644000101500007650000000555410754663017014641 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** ODOMETER(): Generalized odometer object. Each `digit' can have its ** own min and max values (and actually each position can be filled by an ** integer, not just a single digit). The low-index digits are the ** faster moving ones. There is also a special lexical increment which ** ensures that digit i is greater than digit i+1. ** ** Methods: ** Odometer(): Default constructor gives 0 digits and all NULL arrays. ** Odometer(int n): Construct an odometer with n digits ** ~Odometer(): Free's the dynamically allocated memory ** size(int m): Set the length of a default-constructed odometer to m ** resize(int m): Change the length of an odometer to m ** set_max(int m): set the maximum for every digit to m ** set_max(int *m): set the max for each digit according to array m ** set_min(int m), set_min(int *m): similar to set_max() ** set_value(int m), set_value(int *m): similar to set_max() ** set_max_lex(int m): set max values for each digit such that the ** lowest index digit has max m, the next has max m-1, etc. ** set_min_lex(int m): set min values for each digit such that the ** highest index digit has min m, the next has min m-1, etc. ** get_value(int *m): copy the values array into array m ** increment(): increment the odometer (at position 0) ** increment_lex(): lexical index...increment but make sure that ** value[i] > value[i+1] ** reset(): return all digits to their min values ** print(): print out odometer reading (high index digits first) ** at_max(): has the odometer reached its maximum reading? (1 or 0) ** at_min(): has the odometer reached its minimum reading? (1 or 0) ** get_length(): returns the length (number of digits) of the odometer ** boundscheck(): make sure max's are > min's, and vice versa ** */ #ifndef _psi_src_bin_detci_odometer_h #define _psi_src_bin_detci_odometer_h namespace psi { namespace detci { class Odometer { protected: unsigned length ; int* max ; int* min ; int* value ; public: Odometer() ; Odometer(unsigned len) { size(len); } ~Odometer() ; void size(unsigned s) ; void resize(unsigned s) ; void set_max(int m) ; void set_max_lex(int m) ; void set_max(int* m) ; void set_min(int m) ; void set_min_lex(int m) ; void set_min(int* m) ; void set_value(int m) ; void set_value(int* m) ; void get_value(int* m) ; void increment() ; void increment_lex() ; void reset() ; void print() ; unsigned at_max() ; unsigned at_min() ; unsigned get_length() {return length; } unsigned boundscheck() ; } ; }} // namespace psi::detci #endif // header guard psi3/src/bin/detci/og_addr.cc0000644000101500007650000001056610757640026014555 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** OG_ADDR.C: Code to calculate lexical addresses of strings for ** olsen graph structures. ** ** C. David Sherrill, June 1995 ** */ #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { /* FUNCTION PROTOTYPES */ int subgr_lex_addr(struct level *head, int *occs, int nel, int norb); /* ** subgr_lex_addr(): Function takes a pointer to the head of a subgraph ** and a list of occupied orbitals, and returns the lexical ** address (within the given subgraph) of the walk. ** ** Parameters: ** head = pointer to first level of subgraph (struct level *) ** occs = integer array containing a list of occupied orbitals ** nel = number of electrons in the walk (or length of occs[]) ** norb = number of orbitals in subgraph ** ** Returns: the lexical address of the walk, OR -1 if not found */ int subgr_lex_addr(struct level *head, int *occs, int nel, int norb) { int i=0, j=1, c=0; int addr=0; struct level *curr; curr = head; while (i < norb) { if (c < nel && occs[c] == i) { addr += curr->y[j-1]; j = curr->k[1][j-1]; c++; } else { j = curr->k[0][j-1]; } if (j == 0) { fprintf(outfile, "(subgr_lex_addr): Impossible walk!\n"); return(-1); } i++; curr++; } return(addr); } /* ** og_lex_addr(): Function determines the lexical address for a given ** string. Also returns the id for the string list containing the ** given string. ** ** Parameters: ** Graph = pointer to olsen graph ** occs = array holding orbital numbers for occupied orbitals ** nel = number of explicit electrons (i.e. length of occs array) ** listnum = ptr to hold id of the list containing the given string ** ** Returns: the relative index within the given list, OR -1 if not found ** */ int og_lex_addr(struct olsen_graph *Graph, int *occs, int nel, int *listnum) { int i,j,irrep,code; int inras1 = 0, inras2 = 0, inras3 = 0, inras4 = 0; int addr; int *orbsym; struct stringgraph *subgraph; irrep = Graph->fzc_sym; orbsym = Graph->orbsym + Graph->num_fzc_orbs; for (i=0; iras1_lvl) inras1++; else if (j >= Graph->ras3_lvl && j < Graph->ras4_lvl) inras3++; else if (j >= Graph->ras4_lvl) inras4++; else inras2++; } inras1 += Graph->num_fzc_orbs; inras1 -= Graph->ras1_min; if (inras1 < 0) return(-1); if (inras3 > Graph->ras3_max) return(-1); if (inras4 > Graph->ras4_max) return(-1); code = Graph->decode[inras1][inras3][inras4]; if (code < 0) return(-1); subgraph = Graph->sg[irrep] + code; if (subgraph->num_strings < 1) return(-1); *listnum = irrep * Graph->subgr_per_irrep + code; addr = subgr_lex_addr(subgraph->lvl, occs, nel, Graph->num_orb); return(addr); } /* ** str_abs2rel(): Function returns the relative index and string list ** number corresponding to the given absolute string number. ** ** Parameters: ** absidx = the absolute index ** relidx = ptr to hold the relative index ** listnum = ptr to hold the code for the list holding this string ** Graph = olsen graph */ void str_abs2rel(int absidx, int *relidx, int *listnum, struct olsen_graph *Graph) { int tot=0; int irrep, code; for (irrep=0; irrepnirreps; irrep++) { if (tot + Graph->str_per_irrep[irrep] > absidx) break; else tot += Graph->str_per_irrep[irrep]; } for (code=0; codesubgr_per_irrep; code++) { if (tot + Graph->sg[irrep][code].num_strings > absidx) break; else tot += Graph->sg[irrep][code].num_strings; } *relidx = absidx - tot; *listnum = irrep * Graph->subgr_per_irrep + code; } /* ** str_rel2abs(): Function returns the absolute index for a string ** when given a list number and a relative index within that list. ** ** Parameters: ** relidx = the relative index ** listnum = the code for the list holding this string ** Graph = olsen graph ** ** Returns: the absolute index */ int str_rel2abs(int relidx, int listnum, struct olsen_graph *Graph) { int tot=0; tot = Graph->list_offset[listnum] + relidx; return(tot); } }} // namespace psi::detci psi3/src/bin/detci/oldcode/0000755000101500007650000000000011146111661014237 5ustar crawdadpsi3/src/bin/detci/oldcode/block_xy.c0000644000101500007650000000201110757640026016220 0ustar crawdad#include #include #define HD_MIN 1.0E-4 /* for H(diag) calculations */ /* ** block_xy() ** This function evaluates a block's contribution to the quantities x and y ** x = C^(i) * (Hd - E)^-1 * C^(i) ** y = C^(i) * (Hd - E)^-1 * sigma^(i) ** ** Parameters: ** C = reference of current iteration's ci vector ** S = reference of current iteration's sigma vector ** Hd = reference of vector of diagonal elements of H ** E = current iteration's energy ** x = pointer to double to hold x ** y = pointer to doulbe to hold y ** ** Returns: none */ void block_xy(double *C, double *S, double *Hd, int len, double E, double *x, double *y) { int i; double ci, tval; double tx = 0.0, ty = 0.0; for (i=0; i #include #include #include #include #include #include #include "structs.h" #include "globals.h" #include "genci.h" #include "slaterd.h" namespace psi { namespace detci { #define MAX_B_ROWS 200 #define MIN_F_DENOM 1.0E-3 #define INDEX(i,j) ( (i>j) ? (ioff[(i)] + (j)): (ioff[(j)] + (i)) ) extern struct stringwr **alplist; extern struct stringwr **betlist; /*** FUNCTION PROTOTYPES ***/ void sem_genci(struct stringwr **alplist, struct stringwr **betlist, int N, int M, double *evals, double conv_e, double conv_rms, int maxiter, double nucrep, double efzc, int maxnvect, FILE *outfile, int print_lvl, int h0blocksize, int guess_vector, int restart, int restart_vecs); void calc_h0_blk(double *h0, int *detref, double *detval, int h0blocksize, int tridim, struct stringwr **alplist, struct stringwr **betlist); void gen_mat(unsigned long i, unsigned long j, int buf_size, double *A, struct stringwr **alplist, struct stringwr **betlist); void gendi_a(unsigned long i, unsigned long buf_size, double *A, struct stringwr **alplist, struct stringwr **betlist); PSI_FPTR sigma(struct stringwr **alplist, struct stringwr **betlist, double **buffer, int L, int switch_buf3, int buf_size, int num_buf, int num_new_vec, int extra_buf3, int b_file, int bA_file, int buf_val3, int N, int extra_buf, PSI_FPTR byte, int print_lvl); void h0_guess(int alp_code, int alp_idx, int bet_code, int bet_idx, int switch_buf3, double *buffer, int buf_size, int num_buf, int extra_buf, int b_file, PSI_FPTR b_writ, int M, int N, int h0blocksize, double nucrep, double efzc, struct stringwr **alplist, struct stringwr **betlist); /*** GLOBAL VARIABLES THIS MODULE ***/ int print_lvl = 1; /* print flag */ void diag_h_genci(struct stringwr **alplist, struct stringwr **betlist) { int nroots, i, j, size ; double conv_rms, conv_e, *evals, **evecs, nucrep, efzc ; int *tptr; double *cbuf; int restart, restart_vecs; nroots = Parameters.num_roots ; conv_rms = pow(10.0, -(Parameters.convergence)); conv_e = pow(10.0, -(Parameters.energy_convergence)); size = CIblks.vectlen; if (Parameters.nprint > size) Parameters.nprint = size; nucrep = CalcInfo.enuc; efzc = CalcInfo.efzc; restart = Parameters.restart; restart_vecs = Parameters.restart_vecs; /* Davidson-Liu SEM for GENCI */ if (Parameters.diag_method == 3) { if (Parameters.print_lvl) { fprintf(outfile, "\nFind the roots by the Simultaneous Expansion Method \n"); fprintf(outfile, "Energy convergence = %3g\n", conv_e); fprintf(outfile, "RMS CI vector convergence = %3g\n\n", conv_rms); fflush(outfile); } evals = init_array(nroots); sem_genci(alplist, betlist, size, nroots, evals, conv_e, conv_rms, Parameters.maxiter, nucrep, efzc, Parameters.maxnvect, outfile, Parameters.print_lvl, Parameters.h0blocksize, Parameters.guess_vector, restart, restart_vecs); } /* end the Davidson-Liu section for GENCI */ else { fprintf(outfile, "\n Diagonalization Method not available for GENCI\n"); return; } /* write the CI energy to file30: later fix this to loop over roots */ chkpt_init(PSIO_OPEN_OLD); chkpt_wt_etot(evals[Parameters.root]); /* need nucrep or efzc also? */ chkpt_close(); } /* ** sem_genci ** ** Based on the Simultaneous Expansion Method (SEM), a variation on the ** Davidson algorithm, by Bowen Liu. Adapted for the GENCI module. ** ** Matt Leininger ** Center for Computational Quantum Chemistry, UGA ** June 1996 ** ** Arguments: ** N = size of matrix ** M = number of eigenvalues to solve for ** evals = array for eigenvalues ** conv_e = convergence tolerance. The lowest energy eigenvalue must ** be converged to within this range. It is interesting ** that higher roots _may_ converge faster. ** conv_rms = the required tolerance for convergence of the CI correction ** vector ** maxiter = max number of iterations allowed ** nucrep = nucrep to add to eigenvalues in printing (e.g. enuc) ** efzv = frozen core energy to add to eigenvalues in printing ** vu = pointer to int to hold how many expansion vectors used ** ** Returns: none */ void sem_genci(struct stringwr **alplist, struct stringwr **betlist, int N, int M, double *evals, double conv_e, double conv_rms, int maxiter, double nucrep, double efzc, int maxnvect, FILE *outfile, int print_lvl, int h0blocksize, int guess_vector, int restart, int restart_vecs) { double *G, *Gprime, *lambda; /* arrays for G, Gprime, and lambda */ double **alpha; /* matrices for eigenvecs, */ double *dotval; /* array for dot products of b vecs */ double tval = 0.0; /* value of a dot product */ double **buffer; /* matrix of buffers */ double *buffer4; /* tmp buffer */ double *buffer5; /* tmp buffer */ double *lastroot; /* stores previous eigenvalue array */ double tmp = 0.0; /* tmp component of a dot product */ double tmp_val = 0.0; /* used when forming G */ double memory; /* amount of memory to be used in MB */ register int i = 0, j; /* various loop variables */ register int k, I, m, l; int imdet; /* number of important determinants */ int L; /* number of total b vectors */ int converged = 0, iter = 1; /* convergence flag and iter counter */ int buf_size = 0; /* the size of a buffer */ int rownum = 0; /* row number variable for H matrix */ int num_new_vec = 0; /* number of new b vectors in an iter */ int num_buf, core_memory; /* number of buffers and memory(bytes) */ int extra_buf; /* number of extra buffers necessary */ int A_col_index = 0; /* column variable */ int tridim, errcod; /* dimension of low tri and error code */ int old_vec = 0; /* represents the last old b vector */ int b_file = 96; /* file number for b vectors */ int bA_file = 97; /* file number for sigma vectors */ int d_file = 98; /* file number for d corr. vectors */ int c_file = 77; /* file number for final ci vector */ int buf_val2 = 0; /* num bufs if large_core for 2 buf met */ int buf_val3 = 0; /* num bufs if large_core for 3 buf met */ int switch_buf2 = 1; /* if small core then switch buf sizes */ int switch_buf3 = 1; /* if small core then switch buf sizes */ PSI_FPTR bT_index = 0;/* index for b transpose during bA . bT */ PSI_FPTR buf_size2; /* buf size for two buf method */ PSI_FPTR extra_buf2; /* extra buf size for two buf method */ PSI_FPTR num_buf2; /* num bufs for two buf method */ PSI_FPTR buf_size3 =0;/* buf size for three buf method */ PSI_FPTR extra_buf3; /* extra buf size for three buf method */ PSI_FPTR num_buf3; /* num bufs for three buf method */ PSI_FPTR index = 0; /* index for extra_buf of d corr. vector */ PSI_FPTR d_index = 0; /* index for d correction vector */ PSI_FPTR dummy = 0; /* dummy index */ PSI_FPTR byte = 0; /* position for writing bA to disk */ PSI_FPTR jnk = 0; /* another dummy index */ PSI_FPTR c_index = 0; /* position fow writting of CI vector */ PSI_FPTR b_index2 = 0; /* b index for convergence check */ PSI_FPTR b_writ = 0; /* b index for initial guess */ PSI_FPTR bA_index = 0;/* index for bA during bA . bT */ tridim = (maxnvect*(maxnvect+1))/2; memory = 16.0005; /* default memory */ errcod = ip_data("MEMORY","%lf", &memory,0); L = M; /* set number of b vec to num roots */ num_new_vec = L; /* number of new b vectors */ core_memory = (int) (((memory)*1E6)/sizeof(double)); if (core_memory > (3*N)) { buf_size3 = N; num_buf3 = (core_memory/N)-2; if (num_buf3 > N) num_buf3 = N-1; extra_buf3 = (N%(num_buf3)); switch_buf3 = 0; fprintf(outfile,"Using himem\n"); fflush(outfile); } if (core_memory > (2*N)) { buf_size2 = N; /* buf_size2 = core_memory/2; */ num_buf2 = (core_memory/N)-1; /* num_buf2 = (N/buf_size2 - (N%buf_size2)/buf_size2); */ if (num_buf2 > N) num_buf2 = N; extra_buf2 = (N%(num_buf2)); switch_buf2 = 0; fflush(outfile); if (!buf_size3) { fprintf(outfile,"Using core_memory > (2*N)\n"); fflush(outfile); buf_size3 = core_memory/3; /* num_buf3 = N/buf_size3; */ num_buf3 = (N/buf_size3 - (N%buf_size3)/buf_size3); extra_buf3 = N - num_buf3*buf_size3; } /* buffer = block_matrix(num_buf2+1, buf_size2); */ buffer = block_matrix(num_buf2+1, buf_size2); } else { buf_size3 = core_memory/3; extra_buf3 = N%buf_size3; num_buf3 = (N/buf_size3 - (N%buf_size3)/buf_size3); buf_val3 = 1; buf_size2 = core_memory/2; extra_buf2 = N%buf_size2; num_buf2 = (N/buf_size2 - (N%buf_size2)/buf_size2); buf_val2 = 1; buffer = block_matrix(2, buf_size2); fprintf(outfile,"Using lomem\n"); fflush(outfile); } buf_size = buf_size3; extra_buf = extra_buf3; num_buf = num_buf3; fprintf(outfile,"\n"); fprintf(outfile,"memory = %lf\n", memory); fprintf(outfile,"num_roots = %d\n", M); fprintf(outfile,"maxiter = %d\n", maxiter); fprintf(outfile,"core_memeory = %d\n", core_memory); fprintf(outfile,"buf_size2 = %d\n", buf_size2); fprintf(outfile,"num_buf2 = %d\n", num_buf2); fprintf(outfile,"extra_buf2 = %d\n", extra_buf2); fprintf(outfile,"switch_buf2 = %d\n", switch_buf2); fprintf(outfile,"buf_size3 = %d\n", buf_size3); fprintf(outfile,"num_buf3 = %d\n", num_buf3); fprintf(outfile,"extra_buf3 = %d\n", extra_buf3); fprintf(outfile,"switch_buf3 = %d\n", switch_buf3); fprintf(outfile,"nucrep = %lf\n", nucrep); fprintf(outfile,"efzc = %lf\n", efzc); fprintf(outfile,"\n"); fprintf(outfile,"\n"); fflush(outfile); if (switch_buf3) { buffer4 = buffer[1]; buffer5 = buffer[2]; buffer[1] = buffer[0]+buf_size3; buffer[2] = buffer[0]+2*buf_size3; } /* allocate other arrays with ~fixed dimensions during iteration */ lambda = init_array(maxnvect); alpha = init_matrix(maxnvect, maxnvect); lastroot = init_array(maxnvect); evals = init_array(maxnvect); G = init_array(tridim); /* Gprime = init_array(tridim); */ /* open up storage files for b vectors and product of bA */ rfile(b_file); /* file store b vectors */ rfile(bA_file); /* file stores the bA matrix */ rfile(d_file); /* file store the d part of the correction vectors */ rfile(c_file); /* file to write CI vector to */ fprintf(outfile,"Determining initial guess vector(s)...."); if (restart == 1) read_c(switch_buf3, buffer[0], buf_size, num_buf, extra_buf, b_file, b_writ, c_file, c_index); else if (guess_vector == 0 && M==1) unit_guess(CalcInfo.ref_alp_list, CalcInfo.ref_alp_rel, CalcInfo.ref_bet_list, CalcInfo.ref_bet_rel, switch_buf3, buffer[0], buf_size, num_buf, extra_buf, b_file, b_writ, M, N); else if (guess_vector == 1 || M!=1) h0_guess(CalcInfo.ref_alp_list, CalcInfo.ref_alp_rel, CalcInfo.ref_bet_list, CalcInfo.ref_bet_rel, switch_buf3, buffer[0], buf_size, num_buf, extra_buf, b_file, b_writ, M, N, h0blocksize, nucrep, efzc, alplist, betlist); while (!converged && iter-1 <= maxiter) { buf_size = buf_size3; extra_buf = extra_buf3; num_buf = num_buf3; zero_arr(buffer[0], buf_size); zero_arr(buffer[1], buf_size); byte = sigma(alplist, betlist, buffer, L, switch_buf3, buf_size, num_buf, num_new_vec, extra_buf3, b_file, bA_file, buf_val3, N, extra_buf, byte, print_lvl); /* form G matrix - bA.b*/ buf_size = buf_size2; extra_buf = extra_buf2; num_buf = num_buf2; if (switch_buf3) { buffer[1] = buffer4; buffer[2] = buffer5; } if (!switch_buf3) { extra_buf = 0; num_buf = 1; } bA_index = 0 ; old_vec = (L-num_new_vec)*N*sizeof(double); i = 0; while (bA_index < (L*N*sizeof(double))) { if ((bA_index < old_vec) || ((bA_index == 0) && (iter == 1))){ /* mult by all new b vectors */ for (j=0; jL */ dummy = bA_index; for (j=0; j 4) { fprintf(outfile,"-----------------------------------------------------\n"); print_array(G, L,outfile); fprintf(outfile,"-----------------------------------------------------\n"); } /* solve the L x L eigenvalue problem G a = lambda a for M roots */ rsp(L, L, tridim, G, lambda, 1, alpha, 1E-14); /* form the d part of the correction vector */ if (!switch_buf2) { num_buf = 1; extra_buf = 0; } for (k=0; k 1) fprintf(outfile,"\n"); if (fabs(lambda[0]-lastroot[0]) <= conv_e && tval <= conv_rms) { converged = 1; for (i=0; i 20) ? 20 : N; if (k == -1) { fprintf(outfile,"The %d most important determinants\n",imdet); for (I=0; Imaxnvect) { fprintf(outfile, "(test_sem): L(%2d) > maxnvect(%2d)!",L,maxnvect); fprintf(outfile, " Aborting!\n"); exit(0); } /* Again Schmidt orthog b's (minimize numerical error) */ dotval = v_schmidt(buffer[0], buffer[1], buf_size, extra_buf, num_buf, N, L, b_file); if (switch_buf3) { /* set up three buffer for b.A */ buffer4 = buffer[1]; buffer5 = buffer[2]; buffer[1] = buffer[0]+buf_size3; buffer[2] = buffer[0]+2*buf_size3; } iter++; free(dotval); } /* iterate till convergence (while loop) */ if (converged == 0) { for (i=0; i 5) for (I=0; I 5) { for (I=0; I 5) { for (I=0; I min) { tmp1 = max; tmp2 = detref[max_num]; detval[max_num] = min; detref[max_num] = tmpref[min_num]; tmpval[min_num] = tmp1; tmpref[min_num] = tmp2; max_element(detval, h0blocksize, &max, &max_num); min_element(tmpval, h0blocksize, &min, &min_num); } } } if (extra_h0blocksize != 0) { offst = h0blocksize*num_h0blocksize; gendi_a(offst, extra_h0blocksize, tmpval, alplist, betlist); for (I=0; I min) { offst = h0blocksize*num_h0blocksize; tmp1 = max; tmp2 = detref[max_num]; detval[max_num] = min; detref[max_num] = tmpref[min_num]; tmpval[min_num] = tmp1; tmpref[min_num] = tmp2; } } /* for (I=0; I= (j*buf_size)) && (tmp1 < ((j+1)*buf_size))) buffer[tmp2-j*buf_size] = eigvec[I][k]; } wwritw(b_file, (char *) buffer, sizeof(double)*buf_size, b_writ, &b_writ); zero_arr(buffer, buf_size); } if (extra_buf != 0) { for (I=0; I= num_buf*buf_size) && (tmp2 < (extra_buf+num_buf*buf_size))) buffer[tmp2-num_buf*buf_size] = eigvec[I][k]; } wwritw(b_file, (char *) buffer, sizeof(double)*extra_buf, b_writ, &b_writ); zero_arr(buffer, extra_buf); } } v_normalize(buffer, (b_writ-M*N*sizeof(double)), buf_size, extra_buf, num_buf, b_file); } /* b_writ -= N*sizeof(double); wreadw(b_file, (char *) buffer, sizeof(double)*buf_size, b_writ, &b_writ); for (I=0; I #include #include #include #include "structs.h" #include "globals.h" #include "genci.h" namespace psi { namespace detci { /*** DEFINES ***/ #define NORM_TOL 1.0E-5 #define INDEX(i,j) ( (i>j) ? (ioff[(i)] + (j)): (ioff[(j)] + (i)) ) #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) /* ** SCHMIDT_ADDOC(): Assume A is a orthogonal matrix. ** This function Gram-Schmidt ** orthogonalizes a new vector v and adds it to matrix A. A must contain ** a free row pointer for a new row. Don't add orthogonalized v' if ** norm(v') < NORM_TOL. ** ** David Sherrill, Feb 1994 ** Matt Leininger, June 1996 Rewrote for out-of-core ** ** Arguments: ** buffer4 = buffer to store d or f vectors ** buffer5 = buffer to store b vectors ** buf_size = size of buffers ** extra_buf = size of the last extra buffer of a vector ** num_buf = number of buffers of size buf_size in a vector length N ** f_index = ** N = dimension (length) of b, d, or f vectors ** ** Returns: 1 if a vector is added to A, 0 otherwise */ int schmidt_addoc(double *buffer4, double *buffer5, int buf_size, int extra_buf, int num_buf, PSI_FPTR d_index, int N, int L, int b_file, int d_file) { double *dotval, normval = 0.0, tval; int i, j, I; PSI_FPTR b_index = 0, jnk = 0, f_index; /* determine array of dot products b.f */ f_index = d_index; dotval = init_array(L); for (i=0; i det) break; } *alp_code = CIblks.Ia_code[i]; *bet_code = CIblks.Ib_code[i]; *alp_idx = (det - CIblks.offset[i]) / CIblks.Ib_size[i]; *bet_idx = (det - CIblks.offset[i]) % CIblks.Ib_size[i]; } BIGINT strings2det(int alp_code, int alp_idx, int bet_code, int bet_idx) { int blknum; BIGINT addr; blknum = CIblks.decode[alp_code][bet_code]; if (blknum == -1) { fprintf(outfile, "CIvect::strings2det failed --- invalid block\n"); exit(1); } addr = CIblks.offset[blknum]; addr += alp_idx * CIblks.Ib_size[blknum] + bet_idx; return(addr); } /* ** unit_guess - uses a unit guess for the first b vector in the ** davidson-liu algorithm ** ** */ void unit_guess(int alp_code, int alp_idx, int bet_code, int bet_idx, int switch_buf3, double *buffer, int buf_size, int num_buf, int extra_buf, PSI_FPTR b_file, PSI_FPTR b_writ, int M, int N) { int i; register int j; /* Form initial guess b vector */ i = strings2det(CalcInfo.ref_alp_list, CalcInfo.ref_alp_rel, CalcInfo.ref_bet_list, CalcInfo.ref_bet_rel); if (!switch_buf3) { buffer[i] = 1.0; wwritw(b_file, (char *) buffer, sizeof(double)*buf_size, b_writ, &b_writ); buffer[i] = 0.0; v_normalize(buffer, (b_writ-M*N*sizeof(double)), buf_size, 0, 1, b_file); } else if (switch_buf3) { for (j=0; j= (j*buf_size)) && (i < ((j+1)*buf_size))) buffer[i-j*buf_size] = 1.0; wwritw(b_file, (char *) buffer, sizeof(double)*buf_size, b_writ, &b_writ); if ((i >= (j*buf_size)) && (i < ((j+1)*buf_size))) buffer[i-j*buf_size] = 0.0; } if (extra_buf != 0) { if ((i >= num_buf*buf_size) && (i < (extra_buf+num_buf*buf_size))) buffer[i-num_buf*buf_size] = 1.0; wwritw(b_file, (char *) buffer, sizeof(double)*extra_buf, b_writ, &b_writ); if ((i > num_buf*buf_size) && (i < (extra_buf+num_buf*buf_size))) buffer[i-num_buf*buf_size] = 0.0; } v_normalize(buffer, (b_writ-M*N*sizeof(double)), buf_size, extra_buf, num_buf, b_file); } /* b_writ -= N*sizeof(double); wreadw(b_file, (char *) buffer, sizeof(double)*buf_size, b_writ, &b_writ); for (I=0; I (*max)) { (*max) = buffer[i]; (*max_num) = i; } } } /* ** min_element - determines the minimum value in a list of diagonal ** matrix elements. ** buffer - array of matrix elements ** num_elements - number of elements in array buffer ** min - pointer to max value ** min_num - the element number to the minimum value */ void min_element(double *buffer, int num_elements, double *min, int *min_num) { register int i; (*min) = buffer[0]; (*min_num) = 0; for (i=1; i bl) { tval2 = Cn[al][bl]; nx -= 2.0 * tval2 * tval2; ox -= 2.0 * tval2 * c; tval = c + E_est * H0block.c0bp[i]; tval -= H0block.s0bp[i]; Cn[al][bl] = tval; nx += 2.0 * tval * tval; ox += 2.0 * tval * c; H0block.c0b[i] = tval; /* this should gather all of c0b. Norm later */ } else if (al == bl) { tval2 = Cn[al][bl]; nx -= tval2 * tval2; ox -= tval2 * c; tval = c + E_est * H0block.c0bp[i]; tval -= H0block.s0bp[i]; Cn[al][bl] = tval; nx += tval * tval; ox += tval * c; H0block.c0b[i] = tval; /* this should gather all of c0b. Norm later */ } } for (i=0; i #include #include "structs.h" #define EXTERN #include "globals.h" int form_ilist(struct stringwr *alplist, int Ja_list, int nas, int kl, int *L, int *R, double *Sgn); /* ** S3_BLOCK_VECT() ** ** Calculate a block of the sigma3 vector in equation (9c) of ** Olsen, Roos, et al. For diagonal blocks of sigma. ** ** currently assumes that (ij|ij)'s have not been halved ** Try to get the Olsen vector version working....again!!!! */ void s3_block_vect(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int cnbs, int Ia_list, int Ja_list, int Jb_list, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R) { struct stringwr *Ib; unsigned int Ib_ex; int ij, k, l, kl, I, J, RI; double tval, *CprimeI0, *CI0; int Ja_sym, Ia_sym; int ilen, Ib_idx, Jbcnt, *Iaij, *Ibij, *orbsym, norbs; unsigned int *Ibridx; signed char *Ibsgn; double *Tptr; norbs = CalcInfo.num_ci_orbs; orbsym = CalcInfo.orbsym + CalcInfo.num_fzc_orbs; /* assume fci for now */ Ia_sym = Ia_list; Ja_sym = Ja_list; /* loop over k, l */ for (k=0; k */ Jbcnt = Ib->cnt[Jb_list]; Ibridx = Ib->ridx[Jb_list]; Ibsgn = Ib->sgn[Jb_list]; Ibij = Ib->ij[Jb_list]; for (Ib_ex=0; Ib_ex < Jbcnt && (ij = *Ibij++)<=kl; Ib_ex++) { J = *Ibridx++; tval = *Ibsgn++; if (ij == kl) tval *= 0.5; F[J] += tval * Tptr[ij]; } mmult(Cprime, 0, &F, 1, &V, 1, ilen, cnbs, 1, 0); for (I=0; I */ Iacnt = Ia->cnt[Ja_list]; if (!Iacnt) continue; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; Ia_ex=0; while (Ia_ex < Iacnt && (ij = *Iaij++) #include #include "structs.h" #include "CalcInfo.h" #include "Parameters.h" #include "globals.h" #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) /* prototypes within this module */ int form_ilist(int Iasym, struct stringwr *slist, unsigned int *L, unsigned int *R, int *S, int Jasym, int klsym, int kl); /* ** calc_sigma3(): Calculate the sigma3 vector in equation (9c) of ** Olsen, Roos, et. al. ** ** Modified 4/8/94 to make C and s one-dimensional ** Modified 11/18/94 for virtual scatter/gather method ** Warning to C neophytes: C is case-sensitive! (e.g. s is not S) ** */ void calc_sigma3(struct stringwr *slist, double **C, double **s, double *tei, int nas, int nbs, unsigned int *bfora, unsigned int *bfirst) { struct stringwr *Ib ; int Ia_sym, Ja_sym, Ib_sym, Jb_sym, Ib_idx, Jb_idx; int Ib_offset, Ib_end, Jb_end, *Ibij; int k, l, ij, kl, klsym; int ioffk, Inum, I; unsigned int Jbcnt, *Ibridx, Ib_ex; signed char *Ibsgn; double Jb_sgn; static unsigned int *L, LI, *L0 = NULL; static unsigned int *R, RI, *R0 = NULL; static int *S, *S0 = NULL; /* hmmm... */ double tsgn; static double *F0 = NULL; static double *V = NULL; static double **Cprime = NULL; double *Tptr; int *orbsym; orbsym = CalcInfo.orbsym + CalcInfo.num_fzc_orbs; if (F0 == NULL) F0 = init_array(nbs); if (Cprime == NULL) { Cprime = init_matrix(nas, nbs); } if (V == NULL) V = init_array(nas); if (L0 == NULL) L0 = (unsigned int *) malloc(nas * sizeof(unsigned int)); if (R0 == NULL) R0 = (unsigned int *) malloc(nas * sizeof(unsigned int)); if (S0 == NULL) S0 = (int *) malloc (nas * sizeof(int)); /* set up list L(I), R(I), and S(I) */ for (Ia_sym=0; Ia_sym < CalcInfo.nirreps; Ia_sym++) { for (Ja_sym=0; Ja_sym < CalcInfo.nirreps; Ja_sym++) { Jb_sym = CalcInfo.ref_sym ^ Ja_sym; Jb_end = CalcInfo.bsymnum[Jb_sym]; for (k=0; k */ Jbcnt = Ib->cnt[Jb_sym][klsym]; Ibridx = Ib->ridx[Jb_sym][klsym]; Ibsgn = Ib->sgn[Jb_sym][klsym]; Ibij = Ib->ij[Jb_sym][klsym]; for (Ib_ex=0; Ib_ex < Jbcnt && (ij = *Ibij++)<=kl; Ib_ex++) { Jb_idx = *Ibridx++; Jb_sgn = (double) *Ibsgn++; F0[Jb_idx] += Jb_sgn * Tptr[ij]; } /* V(I) = \Sum{J_b} F(J_b) * C'(I, J_b) */ mmult(Cprime, 0, &F0, 1, &V, 1, Inum, Jb_end, 1, 0); /* vectorized scattering */ R = R0; for (I=0,R=R0; Icnt[Jasym][klsym]; Iaridx = Ia->ridx[Jasym][klsym]; Iasgn = Ia->sgn[Jasym][klsym]; Iaij = Ia->ij[Jasym][klsym]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { if (Iaij[Ia_ex] == kl) { *R++ = Ia_idx; *L++ = Iaridx[Ia_ex] + CalcInfo.asymst[Jasym]; *S++ = Iasgn[Ia_ex]; Inum++; } } } /* end construction of I lists */ return(Inum); } psi3/src/bin/detci/oldcode/sigma.cc.last0000644000101500007650000004614407046653677016647 0ustar crawdad /* ** sigma(): This function computes the sigma vector for a given C vector ** using the CIvector class. Is somewhat intelligent about constructing ** the sigma vector blockwise; will attempt to reduce I/O for out-of-core ** cases. ** ** Parameters: ** alplist = list of alpha strings with replacements ** betlist = same for beta strings ** C = current ci vector ** S = sigma vector to be computed ** oei = one-electron integrals ** tei = two-electron integrals ** fci = full-ci flag (helps determine which sigma1 routine called) ** ** Notes: assumes M_s = 0 for now */ void sigma(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci) { int sblock, cblock; /* id of sigma and C blocks */ int sairr; /* irrep of alpha string for sigma block */ int cairr; /* irrep of alpha string for C block */ int sbirr, cbirr; int i,j,k; int sac, sbc, nas, nbs; int cac, cbc, cnas, cnbs; static int first_call=1; static int **s1_contrib, **s2_contrib, **s3_contrib; static double *F; static int **Jij[2]; static int **Joij[2]; static int **Jridx[2]; static signed char **Jsgn[2]; static int *Jcnt[2]; static unsigned char **Toccs; int nsingles; if (first_call) { int max_dim=0; for (i=0; i max_dim) max_dim = C.Ib_size[i]; if (C.Ia_size[i] > max_dim) max_dim = C.Ia_size[i]; } F = init_array(max_dim); if (Parameters.repl_otf) { max_dim += AlphaG->num_el_expl; nsingles = AlphaG->num_el_expl * AlphaG->num_orb; for (i=0; i<2; i++) { Jcnt[i] = init_int_array(max_dim); Jij[i] = init_int_matrix(max_dim, nsingles); Joij[i] = init_int_matrix(max_dim, nsingles); Jridx[i] = init_int_matrix(max_dim, nsingles); Jsgn[i] = (signed char **) malloc (max_dim * sizeof(signed char *)); for (j=0; j= sbc) { H0block_gather(S.blocks[sblock], sac, sbc, 1, 1, 1); } } } /* end loop over sigma irrep */ } /* ** sigma(): This function computes the sigma vector for a given C vector ** using the CIvector class. Is somewhat intelligent about constructing ** the sigma vector blockwise; will attempt to reduce I/O for out-of-core ** cases. ** ** Parameters: ** alplist = list of alpha strings with replacements ** betlist = same for beta strings ** C = current ci vector ** S = sigma vector to be computed ** oei = one-electron integrals ** tei = two-electron integrals ** fci = full-ci flag (helps determine which sigma1 routine called) ** ** Notes: assumes M_s = 0 for now */ void sigma(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci) { int sblock, cblock; /* id of sigma and C blocks */ int sairr; /* irrep of alpha string for sigma block */ int cairr; /* irrep of alpha string for C block */ int sbirr, cbirr; int i,j,k; int sac, sbc, nas, nbs; int cac, cbc, cnas, cnbs; static int first_call=1; static int **s1_contrib, **s2_contrib, **s3_contrib; static double *F; static int **Jij[2]; static int **Joij[2]; static int **Jridx[2]; static signed char **Jsgn[2]; static int *Jcnt[2]; static unsigned char **Toccs; int nsingles; if (first_call) { int max_dim=0; for (i=0; i max_dim) max_dim = C.Ib_size[i]; if (C.Ia_size[i] > max_dim) max_dim = C.Ia_size[i]; } F = init_array(max_dim); if (Parameters.repl_otf) { max_dim += AlphaG->num_el_expl; nsingles = AlphaG->num_el_expl * AlphaG->num_orb; for (i=0; i<2; i++) { Jcnt[i] = init_int_array(max_dim); Jij[i] = init_int_matrix(max_dim, nsingles); Joij[i] = init_int_matrix(max_dim, nsingles); Jridx[i] = init_int_matrix(max_dim, nsingles); Jsgn[i] = (signed char **) malloc (max_dim * sizeof(signed char *)); for (j=0; j= sbc) { H0block_gather(S.blocks[sblock], sac, sbc, 1, 1, 1); } } } /* end loop over sigma irrep */ } psi3/src/bin/detci/oldcode/symmetrize.cc0000644000101500007650000000625010754602072016766 0ustar crawdad/* ** CIvect::symmetrize(): This function symmetrizes the CI vector ** to maintain the appropriate spin symmetry. It is the same ** as the symnorm function except that it does no normalization. ** Assume that this function is called only if Ms=0 ** ** Parameters: ** phase = the exponent S in C(Ia,Ib) = (-1)^S * C(Ib,Ia) ** */ void CIvect::symmetrize(double phase) { int i,j; int blk,buf,irrep,ac,bc,len,upper; double **mat,*arr; double phase; if (icore == 1) { read(cur_vect, 0); for (blk=0; blk bc) { /* off-diagonal block */ upper = decode[bc][ac]; if (upper >= 0) { for (i=0; i bc) { /* off-diagonal block in lower triangle */ upper = decode[bc][ac]; if (upper >= 0) { for (i=0; i #include #include #include #include "structs.h" #include "globals.h" #include #include "odometer.h" namespace psi { namespace detci { extern struct stringwr **alplist; extern struct stringwr **betlist; extern void stringlist(struct olsen_graph *Graph, struct stringwr **slist); extern void set_ciblks(struct olsen_graph *AG, struct olsen_graph *BG); extern void print_ci_space(struct stringwr *strlist, int num_strings, int nirreps, int strtypes, int nel, FILE *outfile); extern void str_abs2rel(int absidx, int *relidx, int *listnum, struct olsen_graph *Graph); //#define DEBUG /* FUNCTION PROTOTYPES for this module */ void olsengraph(struct olsen_graph *Graph, int ci_orbs, int num_el, int nirreps, int *orbsym, int ras1_lvl, int ras1_min, int ras1_max, int ras3_lvl, int ras3_max, int num_fzc_orbs, int num_cor_orbs, int ras4_lvl, int ras4_max, int ras34_max); void og_add_walk(int ras1_idx, int ras3_num, int ras4_num, int *occs, int nel_expl, int norb, int nirreps, int num_fzc_orbs, struct olsen_graph *Graph); int og_calc_y(struct level *lvl, int ci_orbs); void og_fill(int num_el, int norb, int nirreps, int num_fzc_orbs, struct olsen_graph *Graph); int subgr_lex_addr(struct level *head, int *occs, int nel, int norb); int og_lex_addr(struct olsen_graph *Graph, int *occs, int nel, int *listnum); void og_print(struct olsen_graph *Graph, FILE *outfile); /* ** form_strings(): Form the alpha and beta string graphs. Use a different ** graph for every irrep * (num el in RAS I) * (num el in RAS III) ** */ void form_strings(void) { int i, nlists, nirreps, ncodes; int irrep, code, listnum; int *occs; AlphaG = new olsen_graph[1]; // Make the graph olsengraph(AlphaG, CalcInfo.num_ci_orbs, CalcInfo.num_alp, CalcInfo.nirreps, CalcInfo.orbsym, Parameters.a_ras1_lvl, Parameters.a_ras1_min, Parameters.a_ras1_max, Parameters.ras3_lvl, Parameters.a_ras3_max, CalcInfo.num_fzc_orbs, CalcInfo.num_cor_orbs, Parameters.ras4_lvl, Parameters.a_ras4_max, Parameters.a_ras34_max); if (Parameters.print_lvl > 3) og_print(AlphaG, outfile) ; ncodes = AlphaG->subgr_per_irrep; nirreps = AlphaG->nirreps; nlists = nirreps * ncodes; /* alplist = new stringwr*[nlists]; */ alplist = (struct stringwr **) malloc(nlists * sizeof(struct stringwr *)); for (i=0; i=4) { for (irrep=0,listnum=0; irrep < nirreps; irrep++) { for (code=0; code < ncodes; code++, listnum++) { fprintf(outfile, "Strings for irrep %d code %2d (list %2d)\n", irrep, code, listnum); print_ci_space(alplist[irrep * ncodes + code], AlphaG->sg[irrep][code].num_strings, nirreps, nlists, AlphaG->num_el_expl, outfile) ; } } } /* for beta string graph if necessary */ if (CalcInfo.iopen && !(Parameters.Ms0)) { BetaG = new olsen_graph[1]; olsengraph(BetaG, CalcInfo.num_ci_orbs, CalcInfo.num_bet, CalcInfo.nirreps, CalcInfo.orbsym, Parameters.b_ras1_lvl, Parameters.b_ras1_min, Parameters.b_ras1_max, Parameters.ras3_lvl, Parameters.b_ras3_max, CalcInfo.num_fzc_orbs, CalcInfo.num_cor_orbs, Parameters.ras4_lvl, Parameters.b_ras4_max, Parameters.b_ras3_max); if (Parameters.print_lvl > 3) og_print(BetaG, outfile) ; ncodes = BetaG->subgr_per_irrep; nirreps = BetaG->nirreps; nlists = nirreps * ncodes; betlist = (struct stringwr **) malloc(nlists * sizeof(struct stringwr *)); for (i=0; i=4) { for (irrep=0; irrep < nirreps; irrep++) { for (code=0; code < ncodes; code++) { fprintf(outfile, "Strings for irrep %d code %2d\n", irrep, code); print_ci_space(betlist[irrep * ncodes + code], BetaG->sg[irrep][code].num_strings, nirreps, nlists, BetaG->num_el_expl, outfile) ; } } } } else { betlist = alplist; BetaG = AlphaG; } /* get number of alpha/beta strings, ref symmetry, etc */ set_ciblks(AlphaG, BetaG) ; /* if the user wants to filter out some initial guesses based on phases of two determinants, we need to convert their absolute string numbers into string lists (subgraphs) and relative addresses */ if (Parameters.filter_guess) { str_abs2rel(Parameters.filter_guess_Ia, &Parameters.filter_guess_Iaridx, &Parameters.filter_guess_Iac, AlphaG); str_abs2rel(Parameters.filter_guess_Ib, &Parameters.filter_guess_Ibridx, &Parameters.filter_guess_Ibc, BetaG); str_abs2rel(Parameters.filter_guess_Ja, &Parameters.filter_guess_Jaridx, &Parameters.filter_guess_Jac, AlphaG); str_abs2rel(Parameters.filter_guess_Jb, &Parameters.filter_guess_Jbridx, &Parameters.filter_guess_Jbc, BetaG); } if (Parameters.zero_det) { str_abs2rel(Parameters.zero_det_Ia, &Parameters.zero_det_Iaridx, &Parameters.zero_det_Iac, AlphaG); str_abs2rel(Parameters.zero_det_Ib, &Parameters.zero_det_Ibridx, &Parameters.zero_det_Ibc, BetaG); } for (i=0; inum_el = num_el; Graph->num_el_expl = num_el - num_fzc_orbs; Graph->num_orb = ci_orbs ; Graph->num_fzc_orbs = num_fzc_orbs; Graph->num_cor_orbs = num_cor_orbs; Graph->fzc_sym = fzc_sym; Graph->orbsym = orbsym; Graph->ras1_lvl = ras1_lvl ; Graph->ras1_min = ras1_min ; Graph->ras1_max = ras1_max ; Graph->ras3_lvl = ras3_lvl ; Graph->ras3_max = ras3_max ; Graph->ras4_lvl = ras4_lvl ; Graph->ras4_max = ras4_max ; Graph->nirreps = nirreps; Graph->str_per_irrep = init_int_array(nirreps); n1max = ras1_max - orbs_frozen; n1min = ras1_min - orbs_frozen; Graph->decode = (int ***) malloc ((ras1_max - ras1_min + 1) * sizeof(int **)); for (i=0; i<(ras1_max - ras1_min + 1); i++) { Graph->decode[i] = init_int_matrix(ras3_max + 1, ras4_max + 1); } encode_tmp = init_int_matrix(3, (ras1_max - ras1_min + 1) * (ras3_max + 1) * (ras4_max + 1)); /* need to know how many possible RAS I/RAS III/RAS IV combinations */ if (!Parameters.fci_strings) { for (i=ras1_max; i>=ras1_min; i--) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((i+j+k<=num_el) && (num_el-i-j-k<=ras3_lvl-ras1_lvl-1) && (j+k <= ras34_max) && (!(Parameters.r4s && k>=2 && ras1_max - i > Parameters.ex_lvl))) { Graph->decode[i-ras1_min][j][k] = code; encode_tmp[0][code] = i - num_fzc_orbs; encode_tmp[1][code] = j; encode_tmp[2][code] = k; code++; } else Graph->decode[i-ras1_min][j][k] = -1; } } } } else { /* all strings w/ given irrep belong to same graph for FCI */ for (i=ras1_max; i>=ras1_min; i--) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((i+j+k<=num_el) && (num_el-i-j-k<=ras3_lvl-ras1_lvl-1) && (j+k <= ras34_max)) { Graph->decode[i-ras1_min][j][k] = 0; } else Graph->decode[i-ras1_min][j][k] = -1; } } } code = 1; } Graph->encode = init_int_matrix(3,code); for (i=0; iencode[0][i] = encode_tmp[0][i]; Graph->encode[1][i] = encode_tmp[1][i]; Graph->encode[2][i] = encode_tmp[2][i]; } free_int_matrix(encode_tmp); Graph->subgr_per_irrep = code; Graph->sg = (struct stringgraph **) malloc (nirreps * sizeof(struct stringgraph *)); Graph->list_offset = init_int_array(nirreps * Graph->subgr_per_irrep); for (i=0; isg)[i] = (struct stringgraph *) malloc (code * sizeof(struct stringgraph)); for (j=0; jsg)[i] + j; sgptr->lvl = (struct level *) malloc ((ci_orbs+1) * sizeof(struct level)); sgptr->ktmp = (int ***) malloc (2 * sizeof (int **)); sgptr->ktmp[0] = init_int_matrix(maxj, ci_orbs); sgptr->ktmp[1] = init_int_matrix(maxj, ci_orbs); for (k=0; k < ci_orbs+1; k++) { (sgptr->lvl)[k].num_j = 0; } } } // loop over the possible number of e- in RAS I (n1) and III (n3). // and now IV (n4) // the number of electrons in RAS II is defined via // n2 = num_el_this_spin - n1 - n3 - n4 // // Employ the very useful Generalized Odometer // for (n1 = n1max; n1 >= n1min; n1--) { Ras1.resize(n1) ; Ras1.set_min_lex(num_cor_orbs) ; Ras1.set_max_lex(ras1_lvl) ; for (n3 = 0; n3 <= ras3_max; n3++) { Ras3.resize(n3) ; Ras3.set_min_lex(ras3_lvl) ; /* Ras3.set_max_lex(ci_orbs-1) ; */ Ras3.set_max_lex(ras4_lvl-1); for (n4 = 0; n4 <= ras4_max && n4 <= ras34_max - n3; n4++) { n2 = num_el - orbs_frozen - n1 - n3 - n4; if (n2 < 0 || n2 > ras3_lvl - ras1_lvl - 1) continue ; /* CDS 8/24/95 */ if (Parameters.r4s && n4 >= 2 && n1max - n1 > Parameters.ex_lvl) continue; #ifdef DEBUG fprintf(outfile, "n1 = %d, n2 = %d, n3 = %d, n4 = %d\n", n1, n2, n3, n4) ; if (n2 < 0) printf("Error: n2 < 0 in form_strings()\n") ; #endif Ras2.resize(n2) ; Ras4.resize(n4) ; Ras2.set_min_lex(ras1_lvl+1) ; Ras2.set_max_lex(ras3_lvl-1) ; Ras4.set_min_lex(ras4_lvl); Ras4.set_max_lex(ci_orbs-1); Ras1.reset() ; Ras2.reset() ; Ras3.reset() ; Ras4.reset() ; do { Ras1.get_value(array1) ; do { Ras2.get_value(array2) ; do { Ras3.get_value(array3) ; do { Ras4.get_value(array4) ; for (i=n1-1, j = num_cor_orbs; i>=0; i--) occs[j++] = array1[i] ; for (i=n2-1; i>=0; i--) occs[j++] = array2[i] ; for (i=n3-1; i>=0; i--) occs[j++] = array3[i] ; for (i=n4-1; i>=0; i--) occs[j++] = array4[i] ; // print out occupations for debugging #ifdef DEBUG for (i=0; isg[i] + j; free_int_matrix(sgptr->ktmp[0]); free_int_matrix(sgptr->ktmp[1]); } } return; } /* ** og_add_walk(): Add a walk to a subgraph within the Olsen/Roos scheme ** of subgraphs. Uses struct olsen_graph. ** ** Parameters: ** ras1_idx = Number of e- in RAS I - minimum # of e- in RAS I ** for the given _string_ ** ras3_num = Number of electrons in RAS III ** ras4_num = Number of electrons in RAS IV ** occs = array listing orbital each electron occupies ** nel_expl = number of electrons explicitly treated (i.e. minus ** all implicitly treated frozen core electrons) ** norb = number of orbitals _explicitly_ included ** nirreps = number of irreps ** num_fzc_orbs = number of frozen core orbitals ** Graph = Olsen Graph structure containing all subgraphs for a ** given electron spin (alpha or beta) ** ** Returns: none ** ** Note: The newidx code excludes frozen core electrons from the num_el ** factor */ void og_add_walk(int ras1_idx, int ras3_num, int ras4_num, int *occs, int nel_expl, int norb, int nirreps, int num_fzc_orbs, struct olsen_graph *Graph) { int i; int irrep; int orb = 0; int cur_el = 0, idx, newidx, cur_b = 0; int ***ktp; struct stringgraph *subgraph; int code; int *orbsym; orbsym = Graph->orbsym; orbsym += num_fzc_orbs; irrep = Graph->fzc_sym; idx = irrep + 1; /* figure out the irrep for this walk */ for (i=0; idecode[ras1_idx][ras3_num][ras4_num]; subgraph = Graph->sg[irrep] + code; if (subgraph == NULL) { printf("Error (og_add_walk): NULL subgraph pointer\n"); return; } if (code < 0) { printf("Error (og_add_walk): negative RAS code\n"); return; } /* loop over all (explicitly included) orbitals */ cur_b = Graph->fzc_sym; ktp = subgraph->ktmp; for (i=0; isubgr_per_irrep; /* loop over all the subgraphs */ for (irrep=0,absoffset=0; irreplist_offset[irrep*ncodes+code] = absoffset; subgraph = (Graph->sg)[irrep] + code; if (subgraph == NULL) { printf("Error (fill_og): NULL subgraph pointer\n") ; return; } /* set up the first row, make sure this subgraph is used */ a = 0; b = Graph->fzc_sym; if (subgraph->ktmp[0][b][0] == 0 && subgraph->ktmp[1][b][0] == 0) { subgraph->num_strings = 0; free(subgraph->lvl); continue; } else { curr = subgraph->lvl; curr->num_j = 1; curr->a = init_int_array(1); curr->b = init_int_array(1); curr->k = init_int_matrix(2,1); curr->kbar = init_int_matrix(2,1); curr->x = init_int_array(1); curr->y = init_int_array(1); (curr->a)[0] = num_fzc_orbs; (curr->b)[0] = Graph->fzc_sym; (curr->x)[0] = 1; } for (i=0; ilvl + i ; /* pointer to current row */ next = subgraph->lvl + i + 1 ; zero_int_matrix(temp_kbar, 2, maxj); for (j=0; j < curr->num_j; j++) { a = curr->a[j]; b = curr->b[j]; idx = (a - num_fzc_orbs) * nirreps + b + 1; for (s=0; s<2; s++) { newidx = subgraph->ktmp[s][idx-1][i]; if (newidx) { newa = (newidx - 1) / nirreps + num_fzc_orbs ; newb = (newidx - 1) % nirreps ; // now get a j for this new row if it's already // been seen, else assign it the next ava j value for (m=0; m<(next->num_j); m++) { if (temp_a[m] == newa && temp_b[m] == newb) { newj = m+1; break; } } if (m == next->num_j) { temp_a[m] = newa ; temp_b[m] = newb ; next->num_j++ ; newj = m+1 ; } (curr->k)[s][j] = newj ; /* j may be wrong var here */ temp_kbar[s][newj-1] = j+1 ; /* "" */ } } } next->a = init_int_array(next->num_j); next->b = init_int_array(next->num_j); next->k = init_int_matrix(2, next->num_j); next->y = init_int_array(next->num_j); next->x = init_int_array(next->num_j); next->kbar = init_int_matrix(2, next->num_j); for (j=0; j<(next->num_j); j++) { (next->a)[j] = temp_a[j]; (next->b)[j] = temp_b[j]; for (s=0; s<2; s++) (next->kbar)[s][j] = temp_kbar[s][j]; } } /* end loop over i (orbitals) */ /* probably best to do x,y's of subgraph here because we know the current one has >= 1 string */ subgraph->num_strings = og_calc_y(subgraph->lvl, norb); subgraph->offset = offset; offset += subgraph->num_strings; absoffset += subgraph->num_strings; } /* end loop over code */ Graph->str_per_irrep[irrep] = offset; if (offset > max_str) max_str = offset; tot_num_str += offset; } /* end loop over irreps */ Graph->num_str = tot_num_str; Graph->max_str_per_irrep = max_str; free(temp_a); free(temp_b); free(temp_kbar); } /* ** og_calc_y() : Function calculates the lexical indices y ** ** ** Returns: The number of strings in the subgraph */ int og_calc_y(struct level *lvl, int ci_orbs) { struct level *curr, *next ; int i, j, s ; int xcur ; int ksij, ksijbar ; int num_strings = 0; /* first get the x's (vertex weights) */ for (i=0; inum_j); j++) { xcur = (curr->x)[j] ; for (s=0; s<2; s++) { ksij = (curr->k)[s][j] - 1 ; if (ksij >= 0) (next->x)[ksij] += xcur ; } } } /* count up how many strings */ for (i=0; inum_j; i++) num_strings += next->x[i]; /* now get the y's (arc weights) */ for (i=0; inum_j); j++) { ksij = (curr->k)[1][j] - 1 ; if (ksij < 0) (curr->y)[j] = 0 ; else { ksijbar = (next->kbar)[0][ksij] - 1 ; if (ksijbar >= 0) (curr->y)[j] = (curr->x)[ksijbar] ; } } } return(num_strings); } void og_print(struct olsen_graph *Graph, FILE *outfile) { struct level *curr; int ras1_min, ras1_max, ras3_max, ras4_max, code; int i,j,k,l,a,b; struct stringgraph *subgraph; ras1_min = Graph->ras1_min; ras1_max = Graph->ras1_max; ras3_max = Graph->ras3_max; ras4_max = Graph->ras4_max; fprintf(outfile,"\nOlsen Graph:\n"); fprintf(outfile,"%3c%2d Electrons\n",' ',Graph->num_el); fprintf(outfile,"%3c%2d Frozen core orbitals\n",' ',Graph->num_fzc_orbs); fprintf(outfile,"%3c%2d Restricted core orbs\n",' ',Graph->num_cor_orbs); fprintf(outfile,"%3c%2d Explicit electrons\n",' ',Graph->num_el_expl); fprintf(outfile,"%3c%2d Explicit Orbitals\n",' ',Graph->num_orb); fprintf(outfile,"%3c%2d RAS I level\n",' ',Graph->ras1_lvl); fprintf(outfile,"%3c%2d RAS I minimum\n",' ',ras1_min); fprintf(outfile,"%3c%2d RAS I maximum\n",' ',ras1_max); fprintf(outfile,"%3c%2d RAS III level\n",' ',Graph->ras3_lvl); fprintf(outfile,"%3c%2d RAS III maximum\n",' ',ras3_max); fprintf(outfile,"%3c%2d RAS IV maximum\n",' ',ras4_max); fprintf(outfile,"%3c%2d Number of irreps\n",' ',Graph->nirreps); fprintf(outfile,"%3c%2d Subgraphs per irrep\n",' ', Graph->subgr_per_irrep); fprintf(outfile,"%3c%2d Max strings in irrep\n", ' ', Graph->max_str_per_irrep); fprintf(outfile,"%3c%2d Strings in total\n\n", ' ', Graph->num_str); fprintf(outfile, "\n"); for (i=ras1_min; i<=ras1_max; i++) { for (j=0; j<=ras3_max; j++) { for (k=0; k<=ras4_max; k++) { if ((code = Graph->decode[i-ras1_min][j][k]) >= 0) { fprintf(outfile, "%5cDecode (%2d,%2d,%2d) = %3d\n",' ', i,j,k,code); } } } } fprintf(outfile, "\n%4cString Distinct Row Tables\n", ' '); fprintf(outfile, "%7c%3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", ' ', "i", "j", "a", "b", "k0", "k1", "k0b", "k1b", "x", "y"); for (i=0; inirreps; i++) { fprintf(outfile, "\n%4cIrrep %2d has %d strings\n", ' ', i, Graph->str_per_irrep[i]); for (j=0; jsubgr_per_irrep; j++) { subgraph = Graph->sg[i] + j; if (subgraph->num_strings) { fprintf(outfile, "%6cCode(%3d) : %4d strings, offset = %4d\n", ' ', j, subgraph->num_strings, subgraph->offset); curr = subgraph->lvl; for (k=0; knum_orb+1; k++,curr++) { for (l=0; lnum_j; l++) { a = (curr->a)[l]; b = (curr->b)[l]; fprintf(outfile, "%7c%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n", ' ', k, l+1, a, b, (curr->k)[0][l], (curr->k)[1][l], (curr->kbar)[0][l], (curr->kbar)[1][l], (curr->x)[l], (curr->y)[l]); } } } } } fprintf(outfile, "\n"); fflush(outfile); } }} // namespace psi::detci psi3/src/bin/detci/olsenupdt.cc0000644000101500007650000000417010757640026015165 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** OLSENUPDT.C ** ** Contains some code related to the Olsen iterative scheme ** ** David Sherrill ** Center for Computational Quantum Chemistry ** February 1996 */ #define EXTERN #include #include #include "globals.h" #include "structs.h" #include "ci_tol.h" namespace psi { namespace detci { /* ** buf_xy1() ** ** Do some of the work to get x and y ** ** x = C^(i) * (Hd - E)^-1 * C^(i) ** y = C^(i) * (Hd - E)^-1 * sigma^(i) ** ** Specifically this function replaces the buffer ** (not the vector on disk) of Hd vector ** with the vector C^(i) * (Hd - E)^-1 for use in ** the evaluation of x and y as described above ** while tx returns the result of C^(i) * the new ** Hd vector (i.e. x from above) ** */ double buf_xy1(double *c, double *hd, double E, int len) { int i; double ci, tval1, tval2; double tx = 0.0; for (i=0; i #include #include #include #include #include #include #include #include #include "structs.h" #include "globals.h" #include "civect.h" namespace psi { namespace detci { #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) #define TOL 1E-14 void orbsfile_rd_blk(int targetfile, int root, int irrep, double **orbs_vector); void orbsfile_wt_blk(int targetfile, int root, int irrep, double **orbs_vector); void ave(int targetfile); void opdm_block(struct stringwr **alplist, struct stringwr **betlist, double **onepdm_a, double **onepdm_b, double **CJ, double **CI, int Ja_list, int Jb_list, int Jnas, int Jnbs, int Ia_list, int Ib_list, int Inas, int Inbs); void opdm_ke(double **onepdm); void get_mo_dipmom_ints(double **mux_mo, double **muy_mo, double **muz_mo); void get_dipmom_nuc(double *mu_x_n, double *mu_y_n, double *mu_z_n); /* ** Computes the one-particle density matrix for all n roots. If ** transdens is set, then will compute the transition densities ** from Iroot to Jroot where Jroot will run over all roots */ void opdm(struct stringwr **alplist, struct stringwr **betlist, int transdens, int dipmom, int Inroots, int Iroot, int Inunits, int Ifirstunit, int Jnroots, int Jroot, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag) { CIvect Ivec, Jvec; int i, j, k, l, klast, roots; int maxrows, maxcols; unsigned long bufsz; int max_orb_per_irrep; double **transp_tmp = NULL; double **transp_tmp2 = NULL; double *buffer1, *buffer2, **onepdm, **onepdm_a, **onepdm_b; int i_ci, j_ci, irrep, mo_offset, so_offset, orb_length=0, opdm_length=0; double *opdm_eigval, **opdm_eigvec, **opdm_blk, **scfvec; int Iblock, Iblock2, Ibuf, Iac, Ibc, Inas, Inbs, Iairr; int Jblock, Jblock2, Jbuf, Jac, Jbc, Jnas, Jnbs, Jairr; int do_Jblock, do_Jblock2; int populated_orbs; double **tmp_mat, **opdmso; double overlap, max_overlap; char opdm_key[80]; /* libpsio TOC entry name for OPDM for each root */ double **mux_mo, **muy_mo, **muz_mo, mu_x, mu_y, mu_z, mu_tot; double mux_n, muy_n, muz_n; /* nuclear parts of dipole moments */ if (!transdens) Iroot = 0; if (transdens) Jroot = 1; else Jroot = 0; if (Jroot > Jnroots) return; Ivec.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Inroots, Inunits, Ifirstunit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Jvec.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Jnroots, Jnunits, Jfirstunit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); populated_orbs = CalcInfo.num_ci_orbs + CalcInfo.num_fzc_orbs; for (irrep=0; irrep max_orb_per_irrep) max_orb_per_irrep = CalcInfo.so_per_irr[irrep]; } opdm_eigvec = block_matrix(max_orb_per_irrep, max_orb_per_irrep); opdm_eigval = init_array(max_orb_per_irrep); opdm_blk = block_matrix(max_orb_per_irrep, max_orb_per_irrep); opdmso = block_matrix(CalcInfo.nso, CalcInfo.nso); tmp_mat = block_matrix(max_orb_per_irrep, max_orb_per_irrep); /* this index stuff is probably irrelevant now ... CDS 6/03 */ /* Parameters.opdm_idxmat = init_int_matrix(Parameters.num_roots+2, CalcInfo.nirreps); Parameters.orbs_idxmat = init_int_matrix(Parameters.num_roots+2, CalcInfo.nirreps); for (l=0; l<=(Parameters.num_roots+1); l++) { Parameters.opdm_idxmat[l][0] = l * opdm_length * sizeof(double); Parameters.orbs_idxmat[l][0] = l * orb_length * sizeof(double); for (irrep=1; irrep maxrows) maxrows = Ivec.Ia_size[i]; if (Ivec.Ib_size[i] > maxcols) maxcols = Ivec.Ib_size[i]; } if (maxcols > maxrows) maxrows = maxcols; transp_tmp = (double **) malloc (maxrows * sizeof(double *)); transp_tmp2 = (double **) malloc (maxrows * sizeof(double *)); if (transp_tmp == NULL || transp_tmp2 == NULL) { printf("(opdm): Trouble with malloc'ing transp_tmp\n"); } bufsz = Ivec.get_max_blk_size(); transp_tmp[0] = init_array(bufsz); transp_tmp2[0] = init_array(bufsz); if (transp_tmp[0] == NULL || transp_tmp2[0] == NULL) { printf("(opdm): Trouble with malloc'ing transp_tmp[0]\n"); } } if (writeflag) psio_open(targetfile, PSIO_OPEN_OLD); /* if we're trying to follow a root, figure out which one here */ if (Parameters.follow_vec_num > 0 && !transdens) { max_overlap = 0.0; for (i=0,j=0; i max_overlap) { max_overlap = overlap; j = i; } } Parameters.root = j; fprintf(outfile, "DETCI following root %d (overlap %6.4lf)\n", Parameters.root+1,max_overlap); for (i=0; i0 */ psio_write_entry(targetfile, opdm_key, (char *) &i, sizeof(int)); psio_close(targetfile, 1); } if (transp_tmp != NULL) free_block(transp_tmp); if (transp_tmp2 != NULL) free_block(transp_tmp2); Ivec.buf_unlock(); Jvec.buf_unlock(); free(buffer1); free(buffer2); if (dipmom) { free_block(mux_mo); free_block(muy_mo); free_block(muz_mo); } if (transdens) { fflush(outfile); free_block(opdm_blk); return; } /* Average the opdm's */ /* if (Parameters.opdm_diag) rfile(targetfile); */ if (Parameters.opdm_ave) { psio_open(targetfile, PSIO_OPEN_OLD); ave(targetfile); psio_close(targetfile, 1); } /* get CI Natural Orbitals */ if (Parameters.opdm_diag) { psio_open(targetfile, PSIO_OPEN_OLD); chkpt_init(PSIO_OPEN_OLD); /* reorder opdm from ci to pitzer and diagonalize each ** symmetry blk */ if (Parameters.opdm_ave) { klast = 1; } else { klast = Parameters.num_roots; } /* loop over roots or averaged opdm */ for(k=0; k 1) { fprintf(outfile,"\n\n\t\t\tCI Natural Orbitals for the Averaged\n"); fprintf(outfile,"\t\t\tOPDM of %d Roots in terms of Molecular" " Orbitals\n\n",k); } else if (Parameters.print_lvl > 1) { fprintf(outfile, "\n\t\t\tCI Natural Orbitals in terms of Molecular Orbitals\n\n"); fprintf(outfile,"\t\t\t Root %d\n\n",k+1); fflush(outfile); } mo_offset = 0; if (!Parameters.opdm_ave) sprintf(opdm_key, "MO-basis OPDM Root %d", k); else sprintf(opdm_key, "MO-basis OPDM Ave"); psio_read_entry(targetfile, opdm_key, (char *) onepdm[0], populated_orbs * populated_orbs * sizeof(double)); for (irrep=0; irrep 0) { sq_rsp(CalcInfo.orbs_per_irr[irrep]-CalcInfo.frozen_uocc[irrep], CalcInfo.orbs_per_irr[irrep]-CalcInfo.frozen_uocc[irrep], opdm_blk, opdm_eigval, 1, opdm_eigvec, TOL); } for (i=CalcInfo.orbs_per_irr[irrep]-CalcInfo.frozen_uocc[irrep]; i max_overlap){ m = j; max_overlap = overlap; } } for (j=0;j 0) { if (irrep==0) { if (Parameters.opdm_ave) { fprintf(outfile, "\n Averaged CI Natural Orbitals in terms " "of Molecular Orbitals\n\n"); } else fprintf(outfile, "\n CI Natural Orbitals in terms of " "Molecular Orbitals: Root %d\n\n", k+1); } fprintf(outfile,"\n %s Block (MO basis)\n", CalcInfo.labels[irrep]); eivout(opdm_eigvec, opdm_eigval, CalcInfo.orbs_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], outfile); } /* Write them if we need to */ if (Parameters.opdm_wrtnos && (k==Parameters.opdm_orbs_root)) { if (irrep==0) { if (!Parameters.opdm_ave) { fprintf(outfile,"\n Writing CI Natural Orbitals for root %d" " to checkpoint in terms of Symmetry Orbitals\n\n",k+1); } } scfvec = block_matrix(CalcInfo.orbs_per_irr[irrep], CalcInfo.orbs_per_irr[irrep]); sprintf(opdm_key, "Old SCF Matrix Irrep %d", irrep); psio_read_entry(targetfile, opdm_key, (char *) scfvec[0], CalcInfo.orbs_per_irr[irrep] * CalcInfo.orbs_per_irr[irrep] * sizeof(double)); #ifdef DEBUG fprintf(outfile,"\nCvec read for MO to SO trans\n\n"); fprintf(outfile," %s Block \n", CalcInfo.labels[irrep]); print_mat(scfvec, CalcInfo.orbs_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], outfile); fprintf(outfile,"\nOpdm_eigvec before MO to SO trans\n\n"); fprintf(outfile," %s Block \n", CalcInfo.labels[irrep]); print_mat(opdm_eigvec, CalcInfo.orbs_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], outfile); #endif mmult(scfvec, 0, opdm_eigvec, 0, opdm_blk, 0, CalcInfo.so_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], 0); free_block(scfvec); if (Parameters.print_lvl > 0) { // FAE fprintf(outfile," %s Block (SO basis)\n", CalcInfo.labels[irrep]); print_mat(opdm_blk, CalcInfo.so_per_irr[irrep], CalcInfo.orbs_per_irr[irrep], outfile); } chkpt_wt_scf_irrep(opdm_blk, irrep); fprintf(outfile, "\n Warning: Natural Orbitals for the "); if (Parameters.opdm_ave) fprintf(outfile, "Averaged OPDM "); else fprintf(outfile, "Root %d OPDM ", k); fprintf(outfile, "have been written to the checkpoint file!\n\n"); } /* end code to write the NO's to disk */ mo_offset += CalcInfo.orbs_per_irr[irrep]; } /* end loop over irreps */ } /* end loop over roots */ free_block(onepdm); free_block(onepdm_a); free_block(onepdm_b); free_block(opdm_eigvec); free(opdm_eigval); chkpt_close(); psio_close(targetfile, 1); } /* CINOS completed */ fflush(outfile); free_block(opdm_blk); } void opdm_block(struct stringwr **alplist, struct stringwr **betlist, double **onepdm_a, double **onepdm_b, double **CJ, double **CI, int Ja_list, int Jb_list, int Jnas, int Jnbs, int Ia_list, int Ib_list, int Inas, int Inbs) { int Ia_idx, Ib_idx, Ja_idx, Jb_idx, Ja_ex, Jb_ex, Jbcnt, Jacnt; struct stringwr *Jb, *Ja; signed char *Jbsgn, *Jasgn; unsigned int *Jbridx, *Jaridx; double C1, C2, Ib_sgn, Ia_sgn; int i, j, oij, nfzc, *Jboij, *Jaoij; nfzc = CalcInfo.num_fzc_orbs; /* loop over Ia in Ia_list */ if (Ia_list == Ja_list) { for (Ia_idx=0; Ia_idx */ Jbcnt = Jb->cnt[Ib_list]; Jbridx = Jb->ridx[Ib_list]; Jbsgn = Jb->sgn[Ib_list]; Jboij = Jb->oij[Ib_list]; for (Jb_ex=0; Jb_ex < Jbcnt; Jb_ex++) { oij = *Jboij++; Ib_idx = *Jbridx++; Ib_sgn = (double) *Jbsgn++; C2 = CI[Ia_idx][Ib_idx]; i = oij/CalcInfo.num_ci_orbs + nfzc; j = oij%CalcInfo.num_ci_orbs + nfzc; onepdm_b[i][j] += C1 * C2 * Ib_sgn; } } } } /* loop over Ib in Ib_list */ if (Ib_list == Jb_list) { for (Ib_idx=0; Ib_idxcnt[Ia_list]; Jaridx = Ja->ridx[Ia_list]; Jasgn = Ja->sgn[Ia_list]; Jaoij = Ja->oij[Ia_list]; for (Ja_ex=0; Ja_ex < Jacnt; Ja_ex++) { oij = *Jaoij++; Ia_idx = *Jaridx++; Ia_sgn = (double) *Jasgn++; C2 = CI[Ia_idx][Ib_idx]; i = oij/CalcInfo.num_ci_orbs + nfzc; j = oij%CalcInfo.num_ci_orbs + nfzc; onepdm_a[i][j] += C1 * C2 * Ia_sgn; } } } } } /* ** ave() ** ** Parameters: ** targetfile = file number to obtain matrices from ** ** Modified 7/13/04 to use new state average parameters --- CDS ** */ void ave(int targetfile) { int root, root_count, i, j, populated_orbs; double **tmp_mat1, **tmp_mat2; char opdm_key[80]; const char spinlabels[][10] = { "", "Alpha ", "Beta " }; const int nspincases = 3; populated_orbs = CalcInfo.nmo-CalcInfo.num_fzv_orbs; tmp_mat1 = block_matrix(populated_orbs, populated_orbs); tmp_mat2 = block_matrix(populated_orbs, populated_orbs); for(int spincase=0; spincase 0 || Parameters.opdm_print) { fprintf(outfile, "\n\t\t\t Averaged %sOPDM's for %d Roots written to opdm_file \n\n", spinlabels[spincase], Parameters.average_num); } if (Parameters.opdm_print) { print_mat(tmp_mat1, populated_orbs, populated_orbs, outfile); } } // loop over spincases free_block(tmp_mat1); free_block(tmp_mat2); } /* ** opdm_ke ** ** Compute the kinetic energy contribution from the correlated part of the ** one-particle density matrix. For Daniel Crawford */ void opdm_ke(double **onepdm) { int errcod; int src_T_file, mo_offset, so_offset, irrep, i, j, i_ci, j_ci, i2, j2, ij; int maxorbs; int noeints; double *T, **scfmat, **opdm_blk, **tmp_mat, ke, kei; ke = kei = 0.0; /* read in the kinetic energy integrals */ noeints = CalcInfo.nso*(CalcInfo.nso+1)/2; src_T_file = PSIF_OEI; T = init_array(noeints); if (Parameters.print_lvl>2) fprintf(outfile, "Kinetic energy integrals (SO basis):\n"); errcod = iwl_rdone(src_T_file,PSIF_SO_T,T,noeints,0, (Parameters.print_lvl>2),outfile); if (!errcod) { printf("(detci): Error reading kinetic energy ints\n"); exit(1); } /* find biggest blocksize */ for (irrep=0,maxorbs=0; irrep maxorbs) maxorbs = CalcInfo.so_per_irr[irrep]; } opdm_blk = block_matrix(maxorbs, maxorbs); tmp_mat = block_matrix(maxorbs, maxorbs); /* transform the onepdm into SO form, one irrep at a time */ so_offset = mo_offset = 0; fprintf(outfile,"Correlation Piece of OPDM in SO basis\n"); for (irrep=0; irrep MO ordering */ for (j=0; j #include #include #include #include #include #include #include #include #include "structs.h" #include "globals.h" namespace psi { namespace detci { /* ** get_parameters(): Function gets the program running parameters such ** as convergence. These are stored in the Parameters data structure. */ void get_parameters(void) { int i, j, k, errcod; int iopen=0, tval; char line1[133]; double junk; if (ip_exist(":DETCI:FROZEN_DOCC",0) && !(ip_exist(":DEFAULT:FROZEN_DOCC",0) || ip_exist(":PSI:FROZEN_DOCC",0)) ) { fprintf(outfile, "\nDETCI: Error - FROZEN_DOCC needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); exit(PSI_RETURN_FAILURE); } if (ip_exist(":DETCI:FROZEN_UOCC",0) && !(ip_exist(":DEFAULT:FROZEN_UOCC",0) || ip_exist(":PSI:FROZEN_UOCC",0)) ) { fprintf(outfile, "\nDETCI: Error - FROZEN_UOCC needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); exit(PSI_RETURN_FAILURE); } if (ip_exist(":DETCI:RAS1",0) && !(ip_exist(":DEFAULT:RAS1",0) || ip_exist(":PSI:RAS1",0)) ) { fprintf(outfile, "\nDETCI: Warning - RAS1 needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); } if (ip_exist(":DETCI:RAS2",0) && !(ip_exist(":DEFAULT:RAS2",0) || ip_exist(":PSI:RAS2",0)) ) { fprintf(outfile, "\nDETCI: Warning - RAS2 needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); } if (ip_exist(":DETCI:RAS3",0) && !(ip_exist(":DEFAULT:RAS3",0) || ip_exist(":PSI:RAS3",0)) ) { fprintf(outfile, "\nDETCI: Warning - RAS3 needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); } if (ip_exist(":DETCI:RESTRICTED_DOCC",0) && !(ip_exist(":DEFAULT:RESTRICTED_DOCC",0) || ip_exist(":PSI:RESTRICTED_DOCC",0)) ) { fprintf(outfile,"\nDETCI: Warning-RESTRICTED_DOCC needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); } if (ip_exist(":DETCI:RESTRICTED_UOCC",0) && !(ip_exist(":DEFAULT:RESTRICTED_UOCC",0) || ip_exist(":PSI:RESTRICTED_UOCC",0)) ) { fprintf(outfile,"\nDETCI: Warning-RESTRICTED_UOCC needs to be readable\n"); fprintf(outfile, "by the transformation program also! Move it to\n"); fprintf(outfile, "the psi: or default: sections of input.\n\n"); } /* default value of Ms0 depends on iopen but is modified below * depending on value of opentype */ chkpt_init(PSIO_OPEN_OLD); Parameters.Ms0 = !(chkpt_rd_iopen()); chkpt_close(); /* need to figure out wheter to filter tei's */ errcod = ip_string("DERTYPE", &(Parameters.dertype),0); if(errcod == IPE_KEY_NOT_FOUND) { Parameters.dertype = (char *) malloc(sizeof(char)*5); strcpy(Parameters.dertype, "NONE"); } errcod = ip_string("WFN", &(Parameters.wfn),0); if(errcod == IPE_KEY_NOT_FOUND) { Parameters.wfn = (char *) malloc(sizeof(char)*5); strcpy(Parameters.wfn, "NONE"); } /* Two-electron integrals: filter out what we don't need. TRANSQT2 supplies restricted orbitals always (well, for now). It will also supply frozen core if it's a gradient calculation (need for orbital response) or an MCSCF (need for MO Hessian). We normally want to filter all these out of the CI energy computation. Likewise, we normally won't need restricted or frozen virtuals in the CI energy computation and should filter them out if they are in the TEI file */ if (strcmp(Parameters.dertype, "NONE")!=0 || strcmp(Parameters.wfn, "DETCAS")==0 || strcmp(Parameters.wfn, "CASSCF")==0 || strcmp(Parameters.wfn, "RASSCF")==0) Parameters.filter_ints = 1; else Parameters.filter_ints = 0; /* Parameters.print_lvl is set in detci.cc */ /* Parameters.have_special_conv is set in detci.cc */ Parameters.ex_lvl = 2; Parameters.cc_ex_lvl = 2; Parameters.val_ex_lvl = 0; Parameters.cc_val_ex_lvl = 0; Parameters.cc_a_val_ex_lvl = -1; Parameters.cc_b_val_ex_lvl = -1; Parameters.max_dets = 10000; Parameters.num_roots = 1; Parameters.istop = 0; Parameters.print_ciblks = 0; Parameters.opentype = PARM_OPENTYPE_UNKNOWN; Parameters.ref_sym = -1; Parameters.oei_file = PSIF_OEI; /* always need fzc operator */ Parameters.oei_erase = 0; Parameters.tei_file = PSIF_MO_TEI; Parameters.tei_erase = 0; Parameters.h0blocksize = 400; Parameters.h0guess_size = 100; Parameters.h0block_coupling = 0; Parameters.h0block_coupling_size = 0; Parameters.nprint = 20; Parameters.cc_nprint = 10; Parameters.hd_ave = EVANGELISTI; Parameters.hd_otf = TRUE; Parameters.nodfile = 0; Parameters.fzc = 1; if (strcmp(Parameters.wfn, "CASSCF")==0) Parameters.fci = 1; else Parameters.fci = 0; Parameters.fci_strings = 0; Parameters.mixed = 1; Parameters.mixed4 = 1; Parameters.r4s = 0; Parameters.repl_otf = 0; Parameters.calc_ssq = 0; if (strcmp(Parameters.wfn, "ZAPTN")==0) { Parameters.mpn = 1; Parameters.zaptn = 1; } else { Parameters.mpn = 0; Parameters.zaptn = 0; } Parameters.save_mpn2 = 0; Parameters.mpn_schmidt = 0; Parameters.wigner = 0; Parameters.perturbation_parameter = 1.0; Parameters.z_scale_H = 0; Parameters.ras1_lvl = -1; Parameters.ras1_min = -1; Parameters.a_ras1_lvl = -1; Parameters.a_ras1_min = -1; Parameters.b_ras1_lvl = -1; Parameters.b_ras1_min = -1; Parameters.a_ras3_max = -1; Parameters.b_ras3_max = -1; Parameters.cc_a_ras3_max = -1; Parameters.cc_b_ras3_max = -1; Parameters.ras3_lvl = -1; Parameters.ras3_max = -1; Parameters.cc_ras3_max = -1; Parameters.ras4_lvl = -1; Parameters.ras4_max = -1; Parameters.cc_ras4_max = -1; Parameters.ras34_max = -1; Parameters.cc_ras34_max = -1; if (strcmp(Parameters.wfn, "DETCAS")==0 || strcmp(Parameters.wfn, "CASSCF")==0 || strcmp(Parameters.wfn, "RASSCF")==0) Parameters.guess_vector = PARM_GUESS_VEC_DFILE; else Parameters.guess_vector = PARM_GUESS_VEC_H0_BLOCK; Parameters.icore = 1; Parameters.diag_method = METHOD_DAVIDSON_LIU_SEM; Parameters.precon = PRECON_DAVIDSON; Parameters.update = UPDATE_DAVIDSON; Parameters.maxnvect = 0; Parameters.collapse_size = 1; Parameters.lse = 0; Parameters.lse_collapse = 3; Parameters.lse_tolerance = 3; Parameters.neg_only = 1; Parameters.zero_blocks = 0; Parameters.nunits = 1; Parameters.first_tmp_unit = 50; Parameters.first_hd_tmp_unit = 0; Parameters.num_hd_tmp_units = 0; Parameters.first_c_tmp_unit = 0; Parameters.num_c_tmp_units = 0; Parameters.first_s_tmp_unit = 0; Parameters.num_s_tmp_units = 0; Parameters.first_d_tmp_unit = 0; Parameters.num_d_tmp_units = 0; Parameters.restart = 0; Parameters.restart_vecs = 0; Parameters.restart_iter = 0; Parameters.bendazzoli = 0; Parameters.cc = 0; errcod = ip_boolean("CC",&(Parameters.cc),0); if (strcmp(Parameters.dertype, "FIRST")==0 || strcmp(Parameters.wfn, "DETCAS")==0 || strcmp(Parameters.wfn, "CASSCF")==0 || strcmp(Parameters.wfn, "RASSCF")==0) { Parameters.convergence = 7; Parameters.energy_convergence = 8; Parameters.opdm = 1; Parameters.opdm_write = 1; Parameters.tpdm = 1; Parameters.tpdm_write = 1; Parameters.maxiter = 12; } else { if (Parameters.cc) { Parameters.convergence = 5; Parameters.energy_convergence = 7; Parameters.maxiter = 20; } else { Parameters.convergence = 4; Parameters.energy_convergence = 6; Parameters.maxiter = 12; } Parameters.opdm = 0; Parameters.opdm_write = 0; Parameters.tpdm = 0; Parameters.tpdm_write = 0; } Parameters.opdm_file = PSIF_MO_OPDM; Parameters.opdm_print = 0; Parameters.opdm_diag = 0; Parameters.opdm_wrtnos = 0; Parameters.opdm_orbsfile = 76; Parameters.opdm_ave = 0; Parameters.opdm_orbs_root = -1; Parameters.opdm_ke = 0; Parameters.tpdm_file = PSIF_MO_TPDM; Parameters.tpdm_print = 0; Parameters.root = 1; Parameters.nthreads = 1; Parameters.pthreads = 0; Parameters.sf_restrict = 0; Parameters.print_sigma_overlap = 0; tval = 1; if (ip_exist("MULTP",0)) { errcod = ip_data("MULTP","%d",&tval,0); } Parameters.S = (((double) tval) - 1.0) / 2.0; errcod = ip_data("S","%lf",&(Parameters.S),0); errcod = ip_data("EX_LVL","%d",&(Parameters.ex_lvl),0); errcod = ip_data("CC_EX_LVL","%d",&(Parameters.cc_ex_lvl),0); errcod = ip_data("VAL_EX_LVL","%d",&(Parameters.val_ex_lvl),0); errcod = ip_data("CC_VAL_EX_LVL","%d",&(Parameters.cc_val_ex_lvl),0); errcod = ip_data("MAX_DET","%d",&(Parameters.max_dets),0); errcod = ip_data("MAXITER","%d",&(Parameters.maxiter),0); errcod = ip_data("NUM_ROOTS","%d",&(Parameters.num_roots),0); errcod = ip_boolean("ISTOP",&(Parameters.istop),0); errcod = ip_data("PRINT","%d",&(Parameters.print_lvl),0); errcod = ip_boolean("PRINT_CIBLKS",&(Parameters.print_ciblks),0); errcod = ip_data("CONVERGENCE","%d",&(Parameters.convergence),0); errcod = ip_data("ENERGY_CONVERGENCE","%d", &(Parameters.energy_convergence),0); /* this handles backwards compatibility for PSI2 */ errcod = ip_data("OPENTYPE","%s",line1,0); if (errcod == IPE_OK) { if (strcmp(line1, "NONE")==0) { Parameters.opentype = PARM_OPENTYPE_NONE; Parameters.Ms0 = 1; } else if (strcmp(line1, "HIGHSPIN")==0) { Parameters.opentype = PARM_OPENTYPE_HIGHSPIN; Parameters.Ms0 = 0; } else if (strcmp(line1, "SINGLET")==0) { Parameters.opentype = PARM_OPENTYPE_SINGLET; Parameters.Ms0 = 1; } else Parameters.opentype = PARM_OPENTYPE_UNKNOWN; } else { /* this handles new PSI3 keywords */ errcod = ip_data("REFERENCE","%s",line1,0); /* fprintf(outfile, "line1 = "); for (int ij = 0; ij<3; ij++) fprintf(outfile, "%1c", line1[ij]); fprintf(outfile,"\n"); */ if (errcod == IPE_OK) { if (strcmp(line1, "RHF")==0) { Parameters.opentype = PARM_OPENTYPE_NONE; Parameters.Ms0 = 1; } else if (strcmp(line1, "ROHF")==0) { if (ip_data("MULTP","%d",&tval,0) == IPE_OK) { if (tval == 1) { Parameters.opentype = PARM_OPENTYPE_SINGLET; Parameters.Ms0 = 1; } else { Parameters.opentype = PARM_OPENTYPE_HIGHSPIN; Parameters.Ms0 = 0; } } else { fprintf(outfile, "detci: trouble reading MULTP\n"); exit(0); } } /* end ROHF parsing */ else { fprintf(outfile, "detci: can only handle RHF or ROHF\n"); exit(0); } } else Parameters.opentype = PARM_OPENTYPE_UNKNOWN; } /* end PSI3 parsing */ errcod = ip_boolean("MS0",&(Parameters.Ms0),0); errcod = ip_data("REF_SYM","%d",&(Parameters.ref_sym),0); errcod = ip_data("OEI_FILE","%d",&(Parameters.oei_file),0); errcod = ip_boolean("OEI_ERASE",&(Parameters.oei_erase),0); errcod = ip_data("TEI_FILE","%d",&(Parameters.tei_file),0); errcod = ip_boolean("TEI_ERASE",&(Parameters.tei_erase),0); errcod = ip_data("H0_BLOCKSIZE","%d",&(Parameters.h0blocksize),0); Parameters.h0guess_size = Parameters.h0blocksize; errcod = ip_data("H0_GUESS_SIZE","%d",&(Parameters.h0guess_size),0); if (Parameters.h0guess_size > Parameters.h0blocksize) Parameters.h0guess_size = Parameters.h0blocksize; errcod = ip_data("H0_BLOCK_COUPLING_SIZE","%d", &(Parameters.h0block_coupling_size),0); errcod = ip_boolean("H0_BLOCK_COUPLING",&(Parameters.h0block_coupling),0); errcod = ip_data("NPRINT","%d",&(Parameters.nprint),0); errcod = ip_data("CC_NPRINT","%d",&(Parameters.cc_nprint),0); errcod = ip_boolean("FREEZE_CORE",&(Parameters.fzc),0); errcod = ip_boolean("FCI",&(Parameters.fci),0); if (Parameters.fci) Parameters.fci_strings = 1; errcod = ip_boolean("FCI_STRINGS",&(Parameters.fci_strings),0); errcod = ip_boolean("MIXED",&(Parameters.mixed),0); errcod = ip_boolean("MIXED4",&(Parameters.mixed4),0); errcod = ip_boolean("R4S",&(Parameters.r4s),0); errcod = ip_boolean("REPL_OTF",&(Parameters.repl_otf),0); errcod = ip_boolean("CALC_SSQ",&(Parameters.calc_ssq),0); errcod = ip_boolean("MPN",&(Parameters.mpn),0); if (Parameters.mpn) { Parameters.fci = 1; Parameters.mpn_schmidt = FALSE; Parameters.wigner = TRUE; Parameters.guess_vector = PARM_GUESS_VEC_UNIT; Parameters.hd_ave = ORB_ENER; Parameters.update = UPDATE_DAVIDSON; Parameters.hd_otf = TRUE; Parameters.nodfile = TRUE; } errcod = ip_data("SAVE_MPN2","%d",&(Parameters.save_mpn2),0); errcod = ip_data("PERTURBATION_PARAMETER","%lf", &(Parameters.perturbation_parameter),0); if (Parameters.perturbation_parameter <= 1.0 && Parameters.perturbation_parameter >= -1.0) Parameters.z_scale_H = 1; /* else { fprintf(outfile, "Parameters.perturbation_parameters beyond the" "bounds of -1.0 >= z <= 1.0\n"); exit(0); } */ errcod = ip_boolean("MPN_SCHMIDT",&(Parameters.mpn_schmidt),0); errcod = ip_boolean("WIGNER",&(Parameters.wigner),0); errcod = ip_data("A_RAS3_MAX","%d",&(Parameters.a_ras3_max),0); errcod = ip_data("B_RAS3_MAX","%d",&(Parameters.b_ras3_max),0); errcod = ip_data("RAS3_MAX","%d",&(Parameters.ras3_max),0); errcod = ip_data("RAS4_MAX","%d",&(Parameters.ras4_max),0); errcod = ip_data("RAS34_MAX","%d",&(Parameters.ras34_max),0); errcod = ip_data("CC_A_RAS3_MAX","%d",&(Parameters.cc_a_ras3_max),0); errcod = ip_data("CC_B_RAS3_MAX","%d",&(Parameters.cc_b_ras3_max),0); errcod = ip_data("CC_RAS3_MAX","%d",&(Parameters.cc_ras3_max),0); errcod = ip_data("CC_RAS4_MAX","%d",&(Parameters.cc_ras4_max),0); errcod = ip_data("CC_RAS34_MAX","%d",&(Parameters.cc_ras34_max),0); errcod = ip_data("GUESS_VECTOR", "%s", line1, 0); if (errcod == IPE_OK) { if (strcmp(line1, "UNIT")==0) Parameters.guess_vector = PARM_GUESS_VEC_UNIT; else if (strcmp(line1, "H0_BLOCK")==0) Parameters.guess_vector = PARM_GUESS_VEC_H0_BLOCK; else if (strcmp(line1, "DFILE")==0) Parameters.guess_vector = PARM_GUESS_VEC_DFILE; /* else if (Parameters.mpn) Parameters.guess_vector = PARM_GUESS_VEC_UNIT; */ else if (strcmp(line1, "IMPORT")==0) Parameters.guess_vector = PARM_GUESS_VEC_IMPORT; else Parameters.guess_vector = PARM_GUESS_VEC_UNIT; } errcod = ip_data("ICORE", "%d", &(Parameters.icore),0); errcod = ip_data("HD_AVE","%s",line1, 0); if (errcod == IPE_OK) { if (strcmp(line1, "HD_EXACT")==0) Parameters.hd_ave = HD_EXACT; if (strcmp(line1, "HD_KAVE")==0) Parameters.hd_ave = HD_KAVE; if (strcmp(line1, "ORB_ENER")==0) Parameters.hd_ave = ORB_ENER; if (strcmp(line1, "EVANGELISTI")==0) Parameters.hd_ave = EVANGELISTI; if (strcmp(line1, "LEININGER")==0) Parameters.hd_ave = LEININGER; if (strcmp(line1, "Z_KAVE")==0) Parameters.hd_ave = Z_HD_KAVE; /* if (Parameters.mpn) Parameters.hd_ave = ORB_ENER; */ } errcod = ip_boolean("HD_OTF",&(Parameters.hd_otf),0); if (errcod == IPE_OK) Parameters.hd_otf = TRUE; errcod = ip_boolean("NODFILE",&(Parameters.nodfile),0); if (Parameters.num_roots > 1) Parameters.nodfile = FALSE; errcod = ip_data("DIAG_METHOD","%s",line1, 0); if (errcod == IPE_OK) { if (strcmp(line1, "RSP")==0) Parameters.diag_method = METHOD_RSP; if (strcmp(line1, "OLSEN")==0) Parameters.diag_method = METHOD_OLSEN; if (strcmp(line1, "MITRUSHENKOV")==0) Parameters.diag_method = METHOD_MITRUSHENKOV; if (strcmp(line1, "DAVIDSON")==0) Parameters.diag_method = METHOD_DAVIDSON_LIU_SEM; if (strcmp(line1, "SEM")==0) Parameters.diag_method = METHOD_DAVIDSON_LIU_SEM; if (strcmp(line1, "SEMTEST")==0) Parameters.diag_method = METHOD_RSPTEST_OF_SEM; } errcod = ip_data("PRECONDITIONER","%s",line1, 0); if (errcod == IPE_OK) { if (strcmp(line1, "LANCZOS")==0) Parameters.precon = PRECON_LANCZOS; if (strcmp(line1, "DAVIDSON")==0) Parameters.precon = PRECON_DAVIDSON; if (strcmp(line1, "GEN_DAVIDSON")==0) Parameters.precon = PRECON_GEN_DAVIDSON; if (strcmp(line1, "H0BLOCK")==0) Parameters.precon = PRECON_GEN_DAVIDSON; if (strcmp(line1, "H0BLOCK_INV")==0) Parameters.precon = PRECON_H0BLOCK_INVERT; if (strcmp(line1, "ITER_INV")==0) Parameters.precon = PRECON_H0BLOCK_ITER_INVERT; if (strcmp(line1, "H0BLOCK_COUPLING")==0) Parameters.precon = PRECON_H0BLOCK_COUPLING; if (strcmp(line1, "EVANGELISTI")==0) Parameters.precon = PRECON_EVANGELISTI; } errcod = ip_data("UPDATE","%s",line1, 0); if (errcod == IPE_OK) { if (strcmp(line1, "DAVIDSON")==0) Parameters.update = UPDATE_DAVIDSON; if (strcmp(line1, "OLSEN")==0) Parameters.update = UPDATE_OLSEN; } if (Parameters.diag_method < METHOD_DAVIDSON_LIU_SEM && Parameters.update==UPDATE_DAVIDSON) { fprintf(outfile,"DAVIDSON update not available for OLSEN or MITRUSH" " iterators\n"); Parameters.update = UPDATE_OLSEN; } if (Parameters.precon==PRECON_EVANGELISTI && (Parameters.update!=UPDATE_DAVIDSON || Parameters.diag_method!=METHOD_DAVIDSON_LIU_SEM)) { fprintf(outfile,"EVANGELISTI preconditioner not available for OLSEN or" " MITRUSH iterators or updates.\n"); Parameters.update = UPDATE_DAVIDSON; } errcod = ip_boolean("ZERO_BLOCKS",&(Parameters.zero_blocks),0); if (Parameters.icore || !Parameters.mpn) Parameters.zero_blocks = 0; Parameters.num_init_vecs = Parameters.num_roots; errcod = ip_data("NUM_INIT_VECS","%d",&(Parameters.num_init_vecs),0); errcod = ip_data("COLLAPSE_SIZE", "%d", &(Parameters.collapse_size),0); if (Parameters.collapse_size < 1) Parameters.collapse_size = 1; errcod = ip_data("LSE_COLLAPSE", "%d", &(Parameters.lse_collapse),0); if (Parameters.lse_collapse < 1) Parameters.lse_collapse = 3; errcod = ip_boolean("LSE",&(Parameters.lse),0) ; errcod = ip_data("LSE_TOLERANCE", "%d", &(Parameters.lse_tolerance),0); errcod = ip_data("MAXNVECT", "%d", &(Parameters.maxnvect),0); if (Parameters.maxnvect == 0 && Parameters.diag_method == METHOD_DAVIDSON_LIU_SEM) { Parameters.maxnvect = Parameters.maxiter * Parameters.num_roots + Parameters.num_init_vecs; } else if (Parameters.maxnvect == 0 && Parameters.diag_method == METHOD_RSPTEST_OF_SEM) { Parameters.maxnvect = Parameters.maxiter * Parameters.num_roots + Parameters.num_init_vecs; } else if (Parameters.maxnvect == 0 && Parameters.diag_method == METHOD_MITRUSHENKOV) { Parameters.maxnvect = 2; } else if (Parameters.maxnvect == 0 && Parameters.diag_method == METHOD_OLSEN) { Parameters.maxnvect = 1; } else { /* the user tried to specify a value for maxnvect...check it */ /* if (Parameters.maxnvect / (Parameters.collapse_size * Parameters.num_roots) < 2) { fprintf(outfile, "maxnvect must be at least twice collapse_size *"); fprintf(outfile, " num_roots.\n"); exit(0); } */ } errcod = ip_data("NUNITS", "%d", &(Parameters.nunits),0); errcod = ip_data("FIRST_TMP_UNIT", "%d", &(Parameters.first_tmp_unit),0); errcod = ip_data("FIRST_HD_TMP_UNIT","%d",&(Parameters.first_hd_tmp_unit),0); errcod = ip_data("FIRST_C_TMP_UNIT","%d",&(Parameters.first_c_tmp_unit),0); errcod = ip_data("FIRST_S_TMP_UNIT","%d",&(Parameters.first_s_tmp_unit),0); errcod = ip_data("FIRST_D_TMP_UNIT","%d",&(Parameters.first_d_tmp_unit),0); errcod = ip_data("NUM_HD_TMP_UNITS","%d",&(Parameters.num_hd_tmp_units),0); errcod = ip_data("NUM_C_TMP_UNITS","%d",&(Parameters.num_c_tmp_units),0); errcod = ip_data("NUM_S_TMP_UNITS","%d",&(Parameters.num_s_tmp_units),0); errcod = ip_data("NUM_D_TMP_UNITS","%d",&(Parameters.num_d_tmp_units),0); if (Parameters.first_hd_tmp_unit == 0) Parameters.first_hd_tmp_unit = Parameters.first_tmp_unit; /* if ( (Parameters.num_hd_tmp_units == 0) && (!Parameters.hd_otf) ) */ if (Parameters.num_hd_tmp_units == 0) Parameters.num_hd_tmp_units = 1; if (Parameters.first_c_tmp_unit == 0) Parameters.first_c_tmp_unit = Parameters.first_hd_tmp_unit + Parameters.num_hd_tmp_units; if (Parameters.num_c_tmp_units == 0) Parameters.num_c_tmp_units = Parameters.nunits; if (Parameters.first_s_tmp_unit == 0) Parameters.first_s_tmp_unit = Parameters.first_c_tmp_unit + Parameters.num_c_tmp_units; if (Parameters.num_s_tmp_units == 0) Parameters.num_s_tmp_units = Parameters.nunits; if (Parameters.first_d_tmp_unit == 0) Parameters.first_d_tmp_unit = Parameters.first_s_tmp_unit + Parameters.num_s_tmp_units; /* if ( (Parameters.num_d_tmp_units == 0) && (!Parameters.nodfile) ) */ if (Parameters.num_d_tmp_units == 0) Parameters.num_d_tmp_units = 1; errcod = ip_boolean("RESTART",&(Parameters.restart),0); /* obsolete due to new restart procedure errcod = ip_data("RESTART_ITER","%d",&(Parameters.restart_iter),0); errcod = ip_data("RESTART_VECS","%d",&(Parameters.restart_vecs),0); if (Parameters.restart && (errcod!=IPE_OK || Parameters.restart_vecs==0)) { fprintf(outfile, "For RESTART must specify nonzero RESTART_VECS\n"); exit(0); } */ errcod = ip_boolean("BENDAZZOLI",&(Parameters.bendazzoli),0) ; if (Parameters.bendazzoli & !Parameters.fci) Parameters.bendazzoli=0; /* Parse the OPDM stuff. It is possible to give incompatible options, * but we will try to eliminate some of those. Parameters_opdm will * function as the master switch for all other OPDM parameters. */ errcod = ip_boolean("OPDM_PRINT",&(Parameters.opdm_print),0); errcod = ip_data("OPDM_FILE","%d",&(Parameters.opdm_file),0); errcod = ip_boolean("WRTNOS",&(Parameters.opdm_wrtnos),0); errcod = ip_boolean("OPDM_DIAG",&(Parameters.opdm_diag),0); errcod = ip_boolean("OPDM_AVE",&(Parameters.opdm_ave),0); errcod = ip_data("ORBSFILE","%d",&(Parameters.opdm_orbsfile),0); errcod = ip_data("ORBS_ROOT","%d",&(Parameters.opdm_orbs_root),0); errcod = ip_boolean("OPDM_KE",&(Parameters.opdm_ke),0); if (Parameters.opdm_orbs_root != -1) Parameters.opdm_orbs_root -= 1; if (Parameters.opdm_orbs_root < 0) Parameters.opdm_orbs_root = 0; if (Parameters.opdm_wrtnos) Parameters.opdm_diag = 1; if (Parameters.opdm_print || Parameters.opdm_diag || Parameters.opdm_wrtnos || Parameters.opdm_ave || Parameters.opdm_ke) Parameters.opdm = 1; errcod = ip_boolean("OPDM",&(Parameters.opdm),0); if (Parameters.opdm) Parameters.opdm_write = 1; errcod = ip_boolean("OPDM_WRITE",&(Parameters.opdm_write),0); errcod = ip_boolean("OPDM_PRINT",&(Parameters.opdm_print),0); errcod = ip_data("OPDM_DIAG","%d",&(Parameters.opdm_diag),0); /* transition density matrices */ Parameters.tdm_print = 0; Parameters.tdm_write = 0; Parameters.transdens = 0; errcod = ip_boolean("TDM_PRINT",&(Parameters.tdm_print),0); errcod = ip_boolean("TDM_WRITE",&(Parameters.tdm_write),0); if (Parameters.tdm_print || Parameters.tdm_write || (Parameters.num_roots > 1)) Parameters.transdens = 1; else Parameters.transdens = 0; errcod = ip_boolean("TRANSITION_DENSITY",&(Parameters.transdens),0); if (Parameters.transdens) Parameters.tdm_write = 1; errcod = ip_boolean("TDM_WRITE",&(Parameters.tdm_write),0); /* dipole or transition dipole moment? */ if (Parameters.opdm) Parameters.dipmom = 1; else Parameters.dipmom = 0; if (strcmp(Parameters.wfn, "RASSCF")==0 || strcmp(Parameters.wfn, "CASSCF")==0 || strcmp(Parameters.wfn, "DETCAS")==0) Parameters.dipmom = 0; if (Parameters.transdens) Parameters.dipmom = 1; errcod = ip_boolean("DIPMOM",&(Parameters.dipmom),0); if (Parameters.dipmom == 1) Parameters.opdm = 1; errcod = ip_data("ROOT","%d",&(Parameters.root),0); Parameters.root -= 1; errcod = ip_boolean("TPDM",&(Parameters.tpdm),0); if (Parameters.tpdm) Parameters.tpdm_write = 1; errcod = ip_boolean("TPDM_WRITE",&(Parameters.tpdm_write),0); errcod = ip_boolean("TPDM_PRINT",&(Parameters.tpdm_print),0); errcod = ip_data("TPDM_FILE","%d",&(Parameters.tpdm_file),0); if (Parameters.guess_vector == PARM_GUESS_VEC_DFILE && strcmp(Parameters.wfn, "DETCAS")!=0 && strcmp(Parameters.wfn, "CASSCF")!=0 && strcmp(Parameters.wfn, "RASSCF")!=0) { chkpt_init(PSIO_OPEN_OLD); i = chkpt_rd_phase_check(); chkpt_close(); if (!i) { fprintf(outfile, "Can't use d file guess: SCF phase not checked\n"); if (Parameters.h0guess_size) { Parameters.guess_vector = PARM_GUESS_VEC_H0_BLOCK; if (Parameters.precon == PRECON_GEN_DAVIDSON) Parameters.precon = PRECON_H0BLOCK_ITER_INVERT; } else Parameters.guess_vector = PARM_GUESS_VEC_UNIT; } } if (Parameters.num_init_vecs < Parameters.num_roots) Parameters.num_init_vecs = Parameters.num_roots; if (Parameters.guess_vector == PARM_GUESS_VEC_UNIT && Parameters.num_init_vecs > 1) { Parameters.guess_vector = PARM_GUESS_VEC_H0_BLOCK; fprintf(outfile,"Warning: Unit vec option not available for more than" " one root\n"); } if (Parameters.guess_vector == PARM_GUESS_VEC_UNIT) Parameters.h0blocksize = Parameters.h0guess_size = 1; errcod = ip_data("NTHREADS", "%d", &(Parameters.nthreads),0); if (Parameters.nthreads < 1) Parameters.nthreads = 1; errcod = ip_boolean("PTHREADS",&(Parameters.pthreads),0); if (!Parameters.pthreads) Parameters.nthreads = 1; Parameters.export_ci_vector = 0; errcod = ip_boolean("EXPORT_VECTOR", &(Parameters.export_ci_vector), 0); Parameters.num_export = 0; if (Parameters.export_ci_vector) { Parameters.num_export = 1; errcod = ip_data("NUM_EXPORT", "%d", &(Parameters.num_export), 0); if (Parameters.num_export > Parameters.num_roots) { fprintf(outfile, "Warning: can't export %d roots if %d requested\n", Parameters.num_export, Parameters.num_roots); Parameters.num_export = Parameters.num_roots; } } errcod = ip_boolean("SF_RESTRICT",&(Parameters.sf_restrict),0); errcod = ip_boolean("SIGMA_OVERLAP",&(Parameters.print_sigma_overlap),0); if (Parameters.cc) Parameters.ex_lvl = Parameters.cc_ex_lvl + 2; Parameters.ex_type = (int *)malloc(Parameters.ex_lvl*sizeof(int)); if (ip_exist("EX_TYPE",0)) { ip_count("EX_TYPE", &i, 0); if (i != Parameters.ex_lvl) { fprintf(outfile,"Dim. of excitation type must be %d\n", Parameters.ex_lvl); exit(0); } for (i=0;i Parameters.num_roots) { fprintf(outfile,"Invalid number of states to average (%d)\n", i); exit(1); } Parameters.average_states = init_int_array(i); Parameters.average_weights = init_array(i); Parameters.average_num = i; for (i=0;i 1) Parameters.opdm_ave = 1; if ((!ip_exist("ROOT",0)) && (Parameters.average_num==1)) { Parameters.root = Parameters.average_states[0]; } } else { Parameters.average_num = 1; Parameters.average_states = init_int_array(1); Parameters.average_weights = init_array(1); Parameters.average_states[0] = Parameters.root; Parameters.average_weights[0] = 1.0; } /* end state-average parsing */ /* Follow a vector to determine the root number? */ Parameters.follow_vec_num = 0; if (ip_exist("FOLLOW_VECTOR",0)) { errcod = ip_count("FOLLOW_VECTOR",&i,0); if (errcod != IPE_OK || (i % 2)!=0) { fprintf(outfile, "Need to specify FOLLOW_VECTOR = " "((alphastr_i betastr_i) coeff_i ... )\n"); abort(); } i = i/2; Parameters.follow_vec_num = i; Parameters.follow_vec_coef = init_array(i); Parameters.follow_vec_Ia = init_int_array(i); Parameters.follow_vec_Ib = init_int_array(i); Parameters.follow_vec_Iac = init_int_array(i); Parameters.follow_vec_Ibc = init_int_array(i); Parameters.follow_vec_Iaridx = init_int_array(i); Parameters.follow_vec_Ibridx = init_int_array(i); /* now parse each piece */ for (i=0; i 0) { fprintf(outfile,"\nDensity matrices will follow vector like:\n"); for (i=0; i Parameters.ex_lvl) { Parameters.val_ex_lvl = 0; Parameters.ex_lvl = CalcInfo.num_alp_expl + CalcInfo.num_bet_expl; free(Parameters.ex_type); Parameters.ex_type = init_int_array(Parameters.ex_lvl); for (i=0; i CalcInfo.num_alp_expl + CalcInfo.num_bet_expl)) { Parameters.cc_ex_lvl = CalcInfo.num_alp_expl + CalcInfo.num_bet_expl; } if (Parameters.ex_lvl > CalcInfo.num_alp_expl + CalcInfo.num_bet_expl) { Parameters.ex_lvl = CalcInfo.num_alp_expl + CalcInfo.num_bet_expl; } for (i=0,j=0; i 0) nras2alp += j; if (j > CalcInfo.ras_opi[1][i]) { fprintf(outfile, "(set_ras_parms): detecting %d electrons ", j - CalcInfo.ras_opi[1][i]); fprintf(outfile, "in RAS III for irrep %d.\n", i); fprintf(outfile, "Some parts of DETCI assume all elec in I and II\n"); } } /* beta electrons */ for (i=0,nras2bet=0,betsocc=0; i 0) nras2bet += j; if (j > CalcInfo.ras_opi[1][i]) { fprintf(outfile, "(set_ras_parms): detecting %d electrons ", j - CalcInfo.ras_opi[1][i]); fprintf(outfile, "in RAS III for irrep %d.\n", i); fprintf(outfile, "Some parts of DETCI assume all elec in I and II\n"); } } Parameters.a_ras1_max = (CalcInfo.num_alp_expl > Parameters.a_ras1_lvl + 1) ? Parameters.a_ras1_lvl + 1 : (CalcInfo.num_alp_expl) ; if (Parameters.fzc) Parameters.a_ras1_max += CalcInfo.num_fzc_orbs; Parameters.b_ras1_max = (CalcInfo.num_bet_expl > Parameters.b_ras1_lvl + 1) ? Parameters.b_ras1_lvl + 1: (CalcInfo.num_bet_expl) ; if (Parameters.fzc) Parameters.b_ras1_max += CalcInfo.num_fzc_orbs; for (i=0,j=0; i Parameters.ras3_lvl - Parameters.ras1_lvl - 1) Parameters.cc_a_val_ex_lvl = Parameters.ras3_lvl-Parameters.ras1_lvl-1; if (Parameters.cc_b_val_ex_lvl > Parameters.ras3_lvl - Parameters.ras1_lvl - 1) Parameters.cc_b_val_ex_lvl = Parameters.ras3_lvl-Parameters.ras1_lvl-1; if (Parameters.cc_val_ex_lvl > Parameters.cc_a_val_ex_lvl + Parameters.cc_b_val_ex_lvl) Parameters.cc_val_ex_lvl = Parameters.cc_a_val_ex_lvl + Parameters.cc_b_val_ex_lvl; } /* deduce Parameters.cc_a_ras3_max and Parameters.cc_b_ras3_max if needed */ if (Parameters.cc & (Parameters.cc_a_ras3_max == -1 || Parameters.cc_b_ras3_max == -1)) { if (Parameters.cc_ras3_max != -1) { /* have parsed cc_ras3_max */ Parameters.cc_a_ras3_max = (Parameters.cc_ras3_max <= CalcInfo.num_alp_expl) ? Parameters.cc_ras3_max : CalcInfo.num_alp_expl; Parameters.cc_b_ras3_max = (Parameters.cc_ras3_max <= CalcInfo.num_bet_expl) ? Parameters.cc_ras3_max : CalcInfo.num_bet_expl; } else { Parameters.cc_a_ras3_max = (Parameters.cc_ex_lvl <= CalcInfo.num_alp_expl) ? Parameters.cc_ex_lvl : CalcInfo.num_alp_expl; Parameters.cc_b_ras3_max = (Parameters.cc_ex_lvl <= CalcInfo.num_bet_expl) ? Parameters.cc_ex_lvl : CalcInfo.num_bet_expl; } } if (Parameters.cc) { Parameters.a_ras3_max = (Parameters.cc_a_ras3_max+2<=CalcInfo.num_alp_expl) ? Parameters.cc_a_ras3_max+2 : CalcInfo.num_alp_expl; Parameters.b_ras3_max = (Parameters.cc_b_ras3_max+2<=CalcInfo.num_bet_expl) ? Parameters.cc_b_ras3_max+2 : CalcInfo.num_bet_expl; } if (Parameters.a_ras3_max == -1 || Parameters.b_ras3_max == -1) { if (Parameters.ras3_max != -1) { /* have parsed ras3_max */ Parameters.a_ras3_max = (Parameters.ras3_max <= CalcInfo.num_alp_expl) ? Parameters.ras3_max : CalcInfo.num_alp_expl; Parameters.b_ras3_max = (Parameters.ras3_max <= CalcInfo.num_bet_expl) ? Parameters.ras3_max : CalcInfo.num_bet_expl; } else { Parameters.a_ras3_max = (Parameters.ex_lvl <= CalcInfo.num_alp_expl) ? Parameters.ex_lvl : CalcInfo.num_alp_expl; Parameters.b_ras3_max = (Parameters.ex_lvl <= CalcInfo.num_bet_expl) ? Parameters.ex_lvl : CalcInfo.num_bet_expl; } } if (Parameters.cc) { if (Parameters.cc_ras4_max != -1) { /* have parsed */ Parameters.cc_a_ras4_max = (Parameters.cc_ras4_max <= CalcInfo.num_alp_expl) ? Parameters.cc_ras4_max : CalcInfo.num_alp_expl; Parameters.cc_b_ras4_max = (Parameters.cc_ras4_max <= CalcInfo.num_bet_expl) ? Parameters.cc_ras4_max : CalcInfo.num_bet_expl; } else { Parameters.cc_a_ras4_max = Parameters.cc_a_ras3_max; Parameters.cc_b_ras4_max = Parameters.cc_b_ras3_max; } Parameters.a_ras4_max = (Parameters.cc_a_ras4_max+2 <= CalcInfo.num_alp_expl) ? Parameters.cc_a_ras4_max+2 : CalcInfo.num_alp_expl; Parameters.b_ras4_max = (Parameters.cc_b_ras4_max+2 <= CalcInfo.num_bet_expl) ? Parameters.cc_b_ras4_max+2 : CalcInfo.num_bet_expl; } else { if (Parameters.ras4_max != -1) { /* have parsed */ Parameters.a_ras4_max = (Parameters.ras4_max <= CalcInfo.num_alp_expl) ? Parameters.ras4_max : CalcInfo.num_alp_expl; Parameters.b_ras4_max = (Parameters.ras4_max <= CalcInfo.num_bet_expl) ? Parameters.ras4_max : CalcInfo.num_bet_expl; } else { Parameters.a_ras4_max = Parameters.a_ras3_max; Parameters.b_ras4_max = Parameters.b_ras3_max; } } if (Parameters.cc) { if (Parameters.cc_ras34_max != -1) { /* have parsed */ Parameters.cc_a_ras34_max = Parameters.cc_ras34_max; Parameters.cc_b_ras34_max = Parameters.cc_ras34_max; } else { Parameters.cc_a_ras34_max = Parameters.cc_a_ras3_max + Parameters.cc_a_ras4_max; Parameters.cc_b_ras34_max = Parameters.cc_b_ras3_max + Parameters.cc_b_ras4_max; } if (Parameters.ras34_max != -1) { /* have parsed */ Parameters.a_ras34_max = Parameters.ras34_max; Parameters.b_ras34_max = Parameters.ras34_max; } else { Parameters.a_ras34_max = Parameters.cc_a_ras34_max+2; if (Parameters.a_ras34_max > CalcInfo.num_alp_expl) Parameters.a_ras34_max = CalcInfo.num_alp_expl; Parameters.b_ras34_max = Parameters.cc_b_ras34_max+2; if (Parameters.b_ras34_max > CalcInfo.num_bet_expl) Parameters.b_ras34_max = CalcInfo.num_bet_expl; Parameters.ras34_max = Parameters.cc_ras34_max+2; if (Parameters.ras34_max > Parameters.a_ras34_max + Parameters.b_ras34_max) Parameters.ras34_max = Parameters.a_ras34_max + Parameters.b_ras34_max; } } else { /* non-CC */ if (Parameters.ras34_max != -1) { /* have parsed */ Parameters.a_ras34_max = Parameters.ras34_max; Parameters.b_ras34_max = Parameters.ras34_max; } else { Parameters.a_ras34_max = Parameters.a_ras3_max; Parameters.b_ras34_max = Parameters.b_ras3_max; } } i = Parameters.ras4_lvl - Parameters.ras3_lvl; if (Parameters.a_ras3_max > i) Parameters.a_ras3_max = i; if (Parameters.b_ras3_max > i) Parameters.b_ras3_max = i; if (Parameters.cc) { if (Parameters.cc_a_ras3_max > i) Parameters.cc_a_ras3_max = i; if (Parameters.cc_b_ras3_max > i) Parameters.cc_b_ras3_max = i; } i = CalcInfo.num_ci_orbs - Parameters.ras4_lvl; if (Parameters.a_ras4_max > i) Parameters.a_ras4_max = i; if (Parameters.b_ras4_max > i) Parameters.b_ras4_max = i; if (Parameters.cc) { if (Parameters.cc_a_ras4_max > i) Parameters.cc_a_ras4_max = i; if (Parameters.cc_b_ras4_max > i) Parameters.cc_b_ras4_max = i; } i = CalcInfo.num_ci_orbs - Parameters.ras3_lvl; if (Parameters.a_ras34_max > i) Parameters.a_ras34_max = i; if (Parameters.b_ras34_max > i) Parameters.b_ras34_max = i; if (Parameters.cc) { if (Parameters.cc_a_ras34_max > i) Parameters.cc_a_ras34_max = i; if (Parameters.cc_b_ras34_max > i) Parameters.cc_b_ras34_max = i; } i = (CalcInfo.num_alp_expl <= Parameters.a_ras1_lvl + 1) ? CalcInfo.num_alp_expl : Parameters.a_ras1_lvl + 1; Parameters.a_ras1_min = i - Parameters.ex_lvl - Parameters.val_ex_lvl; if (Parameters.a_ras1_min < 0) Parameters.a_ras1_min = 0; Parameters.a_ras1_min += CalcInfo.num_fzc_orbs; Parameters.a_ras1_min += CalcInfo.num_cor_orbs; i = (CalcInfo.num_bet_expl <= Parameters.b_ras1_lvl + 1) ? CalcInfo.num_bet_expl : Parameters.b_ras1_lvl + 1; Parameters.b_ras1_min = i - Parameters.ex_lvl - Parameters.val_ex_lvl; if (Parameters.b_ras1_min < 0) Parameters.b_ras1_min = 0; Parameters.b_ras1_min += CalcInfo.num_fzc_orbs; Parameters.b_ras1_min += CalcInfo.num_cor_orbs; tot_expl_el = CalcInfo.num_alp_expl + CalcInfo.num_bet_expl; if (Parameters.cc) { if (Parameters.cc_val_ex_lvl != 0) i = Parameters.cc_val_ex_lvl; else i = Parameters.cc_ex_lvl; if (Parameters.cc_ras3_max == -1) { Parameters.cc_ras3_max = (i <= tot_expl_el) ? i : tot_expl_el ; } else { if (Parameters.cc_ras3_max > tot_expl_el) Parameters.cc_ras3_max = tot_expl_el; } if (Parameters.ras3_max == -1) Parameters.ras3_max = Parameters.cc_ras3_max + 2; } if (Parameters.ras3_max == -1) { Parameters.ras3_max = (Parameters.ex_lvl <= tot_expl_el) ? Parameters.ex_lvl : tot_expl_el ; } else { if (Parameters.ras3_max > tot_expl_el) Parameters.ras3_max = tot_expl_el; } i = 2 * (Parameters.ras4_lvl - Parameters.ras3_lvl); if (i < Parameters.ras3_max) Parameters.ras3_max = i; if (Parameters.cc) { if (i < Parameters.cc_ras3_max) Parameters.cc_ras3_max = i; } i = (tot_expl_el < 2*(Parameters.ras1_lvl + 1)) ? tot_expl_el : 2*(Parameters.ras1_lvl + 1) ; Parameters.ras1_min = i - Parameters.ex_lvl - Parameters.val_ex_lvl + 2 * CalcInfo.num_fzc_orbs; if (Parameters.a_ras1_min + Parameters.b_ras1_min > Parameters.ras1_min) Parameters.ras1_min = Parameters.a_ras1_min + Parameters.b_ras1_min; if (Parameters.cc && Parameters.cc_ras4_max == -1) { Parameters.cc_ras4_max = (Parameters.cc_ex_lvl <= tot_expl_el) ? Parameters.cc_ex_lvl : tot_expl_el; } if (Parameters.ras4_max == -1) { if (Parameters.cc) { Parameters.ras4_max = (Parameters.cc_ras4_max+2 <= tot_expl_el) ? Parameters.cc_ras4_max+2 : tot_expl_el; } else Parameters.ras4_max = (Parameters.ex_lvl <= tot_expl_el) ? Parameters.ex_lvl : tot_expl_el; } i = 2 * (CalcInfo.num_ci_orbs - Parameters.ras4_lvl); if (i < Parameters.ras4_max) Parameters.ras4_max = i; if (Parameters.cc) { if (i < Parameters.cc_ras4_max) Parameters.cc_ras4_max = i; } if (Parameters.cc && Parameters.cc_ras34_max == -1) Parameters.cc_ras34_max = Parameters.cc_ras3_max + Parameters.cc_ras4_max; i = 2 * (CalcInfo.num_ci_orbs - Parameters.ras3_lvl); if (Parameters.cc) { if (i < Parameters.cc_ras34_max) Parameters.cc_ras34_max = i; } if (Parameters.ras34_max == -1 && !Parameters.cc) Parameters.ras34_max = Parameters.ras3_max; else Parameters.ras34_max = Parameters.cc_ras34_max + 2; i = 2 * (CalcInfo.num_ci_orbs - Parameters.ras3_lvl); if (i < Parameters.ras34_max) Parameters.ras34_max = i; if (Parameters.ras34_max > tot_expl_el) Parameters.ras34_max = tot_expl_el; if (Parameters.a_ras34_max > Parameters.a_ras3_max + Parameters.a_ras4_max) Parameters.a_ras34_max = Parameters.a_ras3_max + Parameters.a_ras4_max; if (Parameters.cc && (Parameters.cc_a_ras34_max > Parameters.cc_a_ras3_max + Parameters.cc_b_ras4_max)) Parameters.cc_a_ras34_max = Parameters.cc_a_ras3_max + Parameters.cc_a_ras4_max; if (Parameters.b_ras34_max > Parameters.b_ras3_max + Parameters.b_ras4_max) Parameters.b_ras34_max = Parameters.b_ras3_max + Parameters.b_ras4_max; if (Parameters.cc && (Parameters.cc_b_ras34_max > Parameters.cc_b_ras3_max + Parameters.cc_b_ras4_max)) Parameters.cc_b_ras34_max = Parameters.cc_b_ras3_max + Parameters.cc_b_ras4_max; /* now just re-check some basic things */ if (Parameters.a_ras34_max > CalcInfo.num_alp_expl) Parameters.a_ras34_max = CalcInfo.num_alp_expl; if (Parameters.b_ras34_max > CalcInfo.num_bet_expl) Parameters.b_ras34_max = CalcInfo.num_bet_expl; if (Parameters.cc) { if (Parameters.cc_a_ras34_max > CalcInfo.num_alp_expl) Parameters.cc_a_ras34_max = CalcInfo.num_alp_expl; if (Parameters.cc_b_ras34_max > CalcInfo.num_bet_expl) Parameters.cc_b_ras34_max = CalcInfo.num_bet_expl; } if (Parameters.ras34_max > Parameters.a_ras34_max + Parameters.b_ras34_max) Parameters.ras34_max = Parameters.a_ras34_max + Parameters.b_ras34_max; } /* ** print_ras_parms(): Set the RAS parameters or their conventional equivalents ** (i.e. fermi level, etc). ** */ void print_ras_parms(void) { int i, j; fprintf(outfile, "ORBITALS:\n") ; fprintf(outfile, " NMO = %6d NUM ALP = %6d\n", CalcInfo.nmo, CalcInfo.num_alp); fprintf(outfile, " ORBS IN CI = %6d NUM ALP EXPL = %6d\n", CalcInfo.num_ci_orbs, CalcInfo.num_alp_expl); fprintf(outfile, " FROZEN CORE = %6d NUM BET = %6d\n", CalcInfo.num_fzc_orbs, CalcInfo.num_bet); fprintf(outfile, " RESTR CORE = %6d NUM BET EXPL = %6d\n", CalcInfo.num_cor_orbs, CalcInfo.num_bet_expl); fprintf(outfile, " IOPEN = %6s\n", CalcInfo.iopen ? "yes" : "no"); fprintf(outfile, " RAS1 LVL = %6d A RAS3 MAX = %6d\n", Parameters.ras1_lvl, Parameters.a_ras3_max); fprintf(outfile, " RAS1 MIN = %6d B RAS3 MAX = %6d\n", Parameters.ras1_min, Parameters.b_ras3_max); fprintf(outfile, " A RAS1 LVL = %6d RAS4 LVL = %6d\n", Parameters.a_ras1_lvl, Parameters.ras4_lvl); fprintf(outfile, " A RAS1 MIN = %6d A RAS4 MAX = %6d\n", Parameters.a_ras1_min, Parameters.a_ras4_max); fprintf(outfile, " A RAS1 MAX = %6d B RAS4 MAX = %6d\n", Parameters.a_ras1_max, Parameters.b_ras4_max); fprintf(outfile, " B RAS1 LVL = %6d RAS4 MAX = %6d\n", Parameters.b_ras1_lvl, Parameters.ras4_max); fprintf(outfile, " B RAS1 MIN = %6d A RAS34 MAX = %6d\n", Parameters.b_ras1_min, Parameters.a_ras34_max); fprintf(outfile, " B RAS1 MAX = %6d B RAS34 MAX = %6d\n", Parameters.b_ras1_max, Parameters.b_ras34_max); fprintf(outfile, " RAS3 LVL = %6d RAS34 MAX = %6d\n", Parameters.ras3_lvl, Parameters.ras34_max); fprintf(outfile, " RAS3 MAX = %6d\n", Parameters.ras3_max); if (Parameters.cc) { fprintf(outfile, " CC RAS3 MAX = %6d CC RAS4 MAX = %6d\n", Parameters.cc_ras3_max, Parameters.cc_ras4_max); fprintf(outfile, " CC A RAS3 MAX= %6d CC B RAS3 MAX= %6d\n", Parameters.cc_a_ras3_max, Parameters.cc_b_ras3_max); fprintf(outfile, " CC A RAS4 MAX= %6d CC B RAS4 MAX= %6d\n", Parameters.cc_a_ras4_max, Parameters.cc_b_ras4_max); fprintf(outfile, " CC RAS34 MAX = %6d\n", Parameters.cc_ras34_max); fprintf(outfile, " CC A RAS34 MAX= %6d CC B RAS34 MAX= %6d\n", Parameters.cc_a_ras34_max, Parameters.cc_b_ras34_max); fprintf(outfile, " CC MIXED = %6s CC FIX EXTERN = %6s\n", Parameters.cc_mixed ? "yes" : "no", Parameters.cc_fix_external ? "yes" : "no"); fprintf(outfile, " CC VARIATIONAL= %6s\n", Parameters.cc_variational ? "yes" : "no"); } fprintf(outfile, "\n"); fprintf(outfile, " DOCC = ") ; for (i=0; i #include #include #include // for toupper() #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define CONFIG_STRING_MAX 200 #define FLAG_NONBLOCKS #define MIN_COEFF 1.0E-13 void orb2lbl(int orbnum, char *label); void print_config(int nbf, int num_alp_el, int num_bet_el, struct stringwr *stralp, struct stringwr *strbet, int num_fzc_orbs, char *outstring); extern int str_rel2abs(int relidx, int listnum, struct olsen_graph *Graph); /* ** PRINT_VEC() ** ** Print the Most Important Determinants in the CI vector ** David Sherrill, February 1995 */ void print_vec(unsigned int nprint, int *Ialist, int *Iblist, int *Iaidx, int *Ibidx, double *coeff, struct olsen_graph *AlphaG, struct olsen_graph *BetaG, struct stringwr **alplist, struct stringwr **betlist, FILE *outfile) { int i,j,k; unsigned long *index; double value, abs_value, minval=0.0; unsigned int alp_idx, bet_idx; char configstring[CONFIG_STRING_MAX]; int Ia_abs, Ib_abs; #ifdef FLAG_NONBLOCKS int found_inblock=0; #endif /* print out the list of most important determinants */ fprintf(outfile, "\n\nThe %d most important determinants\n\n", nprint) ; for (i=0; inum_orb, AlphaG->num_el_expl, BetaG->num_el_expl, alplist[Ialist[i]] + Iaidx[i], betlist[Iblist[i]] + Ibidx[i], AlphaG->num_fzc_orbs, configstring); fprintf(outfile, "%s\n", configstring); } /* end loop over important determinants */ fprintf(outfile, "\n\n"); } /* ** PRINT_CONFIG() ** ** Function prints a configuration, given a list of ** alpha and beta string occupancies. ** ** David Sherrill, February 1995 ** */ void print_config(int nbf, int num_alp_el, int num_bet_el, struct stringwr *stralp, struct stringwr *strbet, int num_fzc_orbs, char *outstring) { int j,k; int afound, bfound; char olabel[10]; sprintf(outstring, ""); /* loop over orbitals */ for (j=0; joccs)[k] > j) break; else if ((stralp->occs)[k] == j) { afound = 1; break; } } for (k=0, bfound=0; koccs)[k] > j) break; else if ((strbet->occs)[k] == j) { bfound = 1; break; } } if (afound || bfound) strcat(outstring, olabel); if (afound && bfound) strcat(outstring, "X "); else if (afound) strcat(outstring, "A "); else if (bfound) strcat(outstring, "B "); } /* end loop over orbitals */ } /* ** PRINT_CI_SPACE() ** ** This function is for debugging purposes. It prints the ** CI space and the associated single-replacement lists. ** ** Arguments: ** strlist = list of alpha/beta strings ** num_strings = number of strings in list ** nirreps = number of irreducible representations in molecular pt grp ** strtypes = number of possible string types (nirreps * ncodes) ** nel = number of electrons explicitly included ** outfile = file to print to */ void print_ci_space(struct stringwr *strlist, int num_strings, int nirreps, int strtypes, int nel, FILE *outfile) { int i, j, strsym, cnt=0 ; while (cnt != num_strings) { fprintf(outfile, "\nString %4d (", cnt++); for (i=0; ioccs)[i]) ; fprintf(outfile, ")\n"); if (!Parameters.repl_otf) { fprintf(outfile, " Links:\n") ; for (strsym=0; strsym < strtypes; strsym++) { for (j=0; jcnt[strsym]; j++) { fprintf(outfile, " %3d [%3d] %c (%2d %3d) %d\n", strlist->ij[strsym][j], strlist->oij[strsym][j], (strlist->sgn[strsym][j] == 1) ? '+' : '-', strsym, strlist->ridx[strsym][j], (int) strlist->sgn[strsym][j]); } } /* end loop over strsym */ } strlist++; } } /* ** orb2lbl(): Function converts an absolute orbital number into a ** label such as 4A1, 2B2, etc. ** ** Parameters: ** orbnum = orbital number in CI order (add frozen core!) ** label = place to put constructed label ** ** Needs Global (CalcInfo): ** orbs_per_irrep = number of orbitals per irrep ** order = ordering array which maps a CI orbital to a ** Pitzer orbital (the opposite mapping from the ** "reorder" array) ** irreps = number of irreducible reps ** nmo = num of molecular orbitals ** labels = labels for all the irreps ** ** Notes: ** If there are frozen core (FZC) orbitals, they are not included in the ** CI numbering (unless they're "restricted" or COR orbitals). This ** is bothersome because some of the arrays constructed in the CI program ** do start numbering from FZC orbitals. Thus, pass orbnum as the CI ** orbital PLUS any frozen core orbitals. ** ** Updated 8/16/95 by CDS ** Allow it to handle more complex spaces...don't assume QT orbital order. ** It was getting labels all mixed up for RAS's. */ void orb2lbl(int orbnum, char *label) { int ir, i, j, pitzer_orb, rel_orb; /* get Pitzer ordering */ pitzer_orb = CalcInfo.order[orbnum]; if (pitzer_orb > CalcInfo.nmo) { fprintf(outfile, "(orb2lbl): pitzer_orb > nmo!\n"); } for (ir=0,j=0; ir pitzer_orb) break; else j += CalcInfo.orbs_per_irr[ir]; } rel_orb = pitzer_orb - j; if (rel_orb < 0) { fprintf(outfile, "(orb2lbl): rel_orb < 0\n"); } else if (rel_orb > CalcInfo.orbs_per_irr[ir]) { fprintf(outfile, "(orb2lbl): rel_orb > orbs_per_irrep[ir]\n"); } sprintf(label, "%d%s", rel_orb+1, CalcInfo.labels[ir]); } /* ** lbl2orb(): Function converts a label such as 4A1, 2B2, etc., to ** an absolute orbital number. The reverse of the above function ** orb2lbl(). ** ** Parameters: ** orbnum = orbital number in CI order (add frozen core!) ** label = place to put constructed label ** ** Returns: ** absolute orbital number for the correlated calc (less frozen) ** */ int lbl2orb(char *orbstring) { int ir, i, j, pitzer_orb, rel_orb, corr_orb; char *s, *t; char orblbl[10]; sscanf(orbstring, "%d%s", &rel_orb, orblbl); /* get the irrep */ for (i=0,ir=-1; i CalcInfo.num_ci_orbs) { fprintf(outfile, "lbl2orb: error corr_orb out of bounds, %d\n", corr_orb); return(0); } return(corr_orb); } void eivout_t(double **a, double *b, int m, int n, FILE *out) { int ii,jj,kk,nn,ll; int i,j,k; ii=0;jj=0; L200: ii++; jj++; kk=10*jj; nn=n; if (nn > kk) nn=kk; ll = 2*(nn-ii+1)+1; fprintf (out,"\n"); for (i=ii; i <= nn; i++) fprintf(out," %5d",i); fprintf (out,"\n"); for (i=0; i < m; i++) { fprintf (out,"\n%5d",i+1); for (j=ii-1; j < nn; j++) { fprintf (out,"%12.7f",a[j][i]); } } fprintf (out,"\n"); fprintf (out,"\n "); for (j=ii-1; j < nn; j++) { fprintf(out,"%12.7f",b[j]); } fprintf (out,"\n"); if (n <= kk) { fflush(out); return; } ii=kk; goto L200; } /* ** PRINT_CIBLK_SUMMARY() ** ** C. David Sherrill ** April 1996 ** */ void print_ciblk_summary(FILE *outfile) { int blk; fprintf(outfile, "\nCI Block Summary:\n"); for (blk=0; blk #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { extern unsigned char ***Occs; #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); /*! ** S1_BLOCK_FCI(): ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 21 June 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** ** \ingroup DETCI */ void s1_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib, *Kb; unsigned int Ia_idx, Ib_idx, Kb_idx, Jb_idx; unsigned int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; unsigned int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij; signed char *Ibsgn, *Kbsgn; int ij,kl,ijkl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_b */ for (Ib=betlist[Ib_list], Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[kl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ib */ } /* ** S1_BLOCK_RAS.C: ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 2 August 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program (C, s now 2D again!) ** Modified 8/2/95 to make RAS again ** */ void s1_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib, *Kb; unsigned int Ia_idx, Ib_idx, Kb_idx, Jb_idx; unsigned int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; unsigned int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij, *Iboij, *Kboij; signed char *Ibsgn, *Kbsgn; int ij,kl,ijkl,oij,okl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_b */ for (Ib=betlist[Ib_list], Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; Iboij = Ib->oij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; okl = *Iboij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; /* note okl on next line, not kl */ if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[okl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; Kboij = Kb->oij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; oij = *Kboij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; if (oij > okl) F[Jb_idx] += Kb_sgn * Jb_sgn * tei[ijkl] ; else if (oij == okl) F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ib */ } /* ** S1_BLOCK_RAS_ROTF ** ** String replacements on-the-fly version ** ** This sigma1 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 13 August 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program (C, s now 2D again!) ** Modified 8/2/95 to make RAS again ** */ void s1_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { int Ia_idx, Ib_idx, Kb_idx, Jb_idx; int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij, *Iboij, *Kboij; signed char *Ibsgn, *Kbsgn; int i,ij,kl,ijkl,oij,okl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; for (Kb_list=0; Kb_list < nlists; Kb_list++) { b2brepl(Occs[Ib_list], Cnt[0], Ij[0], Oij[0], Ridx[0], Sgn[0], BetaG, Ib_list, Kb_list, nbs); /* loop over I_b */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { if ((Ibcnt = Cnt[0][Ib_idx]) < 0) continue; zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ Ibridx = Ridx[0][Ib_idx]; Ibsgn = Sgn[0][Ib_idx]; Ibij = Ij[0][Ib_idx]; Iboij = Oij[0][Ib_idx]; for (i=0; i */ /* note okl on next line, not kl */ if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[okl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Cnt[1][Ib_ex]; Kbridx = Ridx[1][Ib_ex]; Kbsgn = Sgn[1][Ib_ex]; Kbij = Ij[1][Ib_ex]; Kboij = Oij[1][Ib_ex]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; oij = *Kboij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; if (oij > okl) F[Jb_idx] += Kb_sgn * Jb_sgn * tei[ijkl] ; else if (oij == okl) F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ib */ } /* end loop over Kb_list */ } }} // namespace psi::detci psi3/src/bin/detci/s1v.cc0000644000101500007650000005737110757640026013674 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** S1.C ** ** File contains code to calculate sigma1 in various ways, all ** block-at-a-time now. ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** */ #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" #include #include "tpool.h" namespace psi { namespace detci { extern unsigned char ***Occs; extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); void s1_block_vfci_pthread(void *threadarg); void s1_block_vras_pthread(void *threadarg); #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** S1_BLOCK_VFCI(): ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Modified 5/10/96 for new sparse-F method */ void s1_block_vfci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib, *Kb; unsigned int Ia_idx, Ib_idx, Kb_idx, Jb_idx; unsigned int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; unsigned int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij; signed char *Ibsgn, *Kbsgn; int ij,kl,ijkl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_b */ for (Ib=betlist[Ib_list], Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[kl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; ijkl = INDEX(ij,kl); F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ /* for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } */ /* need to improve mem access pattern here! Above vers may be better! */ /* min op cnt may also be better */ for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { if ((tval=F[Jb_idx]) == 0.0) continue; #ifdef USE_BLAS C_DAXPY(nas,tval,(C[0]+Jb_idx),Jb_list_nbs,(S[0]+Ib_idx),nbs); #else for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { S[Ia_idx][Ib_idx] += tval * C[Ia_idx][Jb_idx]; } #endif } } /* end loop over Ib */ } /* ** S1_BLOCK_VFCI_THREAD(): ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Modified 5/10/96 for new sparse-F method */ void s1_block_vfci_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib, *Kb; unsigned int Ia_idx, Ib_idx, Kb_idx, Jb_idx; unsigned int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; unsigned int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij; signed char *Ibsgn, *Kbsgn; int ij,kl,ijkl; double Kb_sgn, Jb_sgn; double tval; struct pthreads_s1vfci **thread_info; int i; thread_info = (struct pthreads_s1vfci **) malloc(sizeof(struct pthreads_s1vfci *) * nbs); for (i=0; ialplist=alplist; thread_info[Ib_idx]->betlist=betlist; thread_info[Ib_idx]->C=C; thread_info[Ib_idx]->S=S; thread_info[Ib_idx]->oei=oei; thread_info[Ib_idx]->tei=tei; thread_info[Ib_idx]->nlists=nlists; thread_info[Ib_idx]->nas=nas; thread_info[Ib_idx]->nbs=nbs; thread_info[Ib_idx]->Ib_list=Ib_list; thread_info[Ib_idx]->Jb_list=Jb_list; thread_info[Ib_idx]->Jb_list_nbs=Jb_list_nbs; thread_info[Ib_idx]->Ib=Ib; thread_info[Ib_idx]->Ib_idx=Ib_idx; tpool_add_work(thread_pool, s1_block_vfci_pthread, (void *) thread_info[Ib_idx]); } /* end loop over Ib */ tpool_queue_close(thread_pool, 1); detci_time.s1_mt_after_time = wall_time_new(); detci_time.s1_mt_total_time += detci_time.s1_mt_after_time - detci_time.s1_mt_before_time; for (i=0; ialplist; betlist = thread_info->betlist; C = thread_info->C; S = thread_info->S; oei = thread_info->oei; tei = thread_info->tei; nlists = thread_info->nlists; nas = thread_info->nas; nbs = thread_info->nbs; Ib_list = thread_info->Ib_list; Jb_list = thread_info->Jb_list; Jb_list_nbs = thread_info->Jb_list_nbs; Ib = thread_info->Ib; Ib_idx = thread_info->Ib_idx; nirreps = CalcInfo.nirreps; F = init_array(Jb_list_nbs); zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[kl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; ijkl = INDEX(ij,kl); F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ /* for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } */ /* need to improve mem access pattern here! Above vers may be better! */ /* min op cnt may also be better */ for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { if ((tval=F[Jb_idx]) == 0.0) continue; #ifdef USE_BLAS C_DAXPY(nas,tval,(C[0]+Jb_idx),Jb_list_nbs,(S[0]+Ib_idx),nbs); #else for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { S[Ia_idx][Ib_idx] += tval * C[Ia_idx][Jb_idx]; } #endif } free(F); } /* ** S1_BLOCK_VRAS.C: ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program (C, s now 2D again!) ** Modified 8/2/95 to make RAS again ** Modified 5/10/96 for new sparse-F method */ void s1_block_vras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib, *Kb; unsigned int Ia_idx, Ib_idx, Kb_idx, Jb_idx; unsigned int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; unsigned int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij, *Iboij, *Kboij; signed char *Ibsgn, *Kbsgn; int ij,kl,ijkl,oij,okl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_b */ for (Ib=betlist[Ib_list], Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; Iboij = Ib->oij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; okl = *Iboij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; /* note okl on next line, not kl */ if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[okl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; Kboij = Kb->oij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; oij = *Kboij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Jb_idx] += Kb_sgn * Jb_sgn * tei[ijkl] ; else if (oij == okl) F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ /* for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } */ /* need to improve mem access pattern here! Above vers may be better! */ /* min op cnt may also be better */ for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { if ((tval=F[Jb_idx]) == 0.0) continue; #ifdef USE_BLAS C_DAXPY(nas,tval, (C[0]+Jb_idx), Jb_list_nbs, (S[0]+Ib_idx), nbs); #else for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { S[Ia_idx][Ib_idx] += tval * C[Ia_idx][Jb_idx]; } #endif } } /* end loop over Ib */ } /* ** S1_BLOCK_VRAS_THREAD.C: ** ** Calculate the sigma_1 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program (C, s now 2D again!) ** Modified 8/2/95 to make RAS again ** Modified 5/10/96 for new sparse-F method */ void s1_block_vras_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { struct stringwr *Ib; unsigned int Ib_idx; struct pthreads_s1vfci **thread_info; int i; thread_info = (struct pthreads_s1vfci **) malloc(sizeof(struct pthreads_s1vfci *) * nbs); for (i=0; ialplist=alplist; thread_info[Ib_idx]->betlist=betlist; thread_info[Ib_idx]->C=C; thread_info[Ib_idx]->S=S; thread_info[Ib_idx]->oei=oei; thread_info[Ib_idx]->tei=tei; thread_info[Ib_idx]->nlists=nlists; thread_info[Ib_idx]->nas=nas; thread_info[Ib_idx]->nbs=nbs; thread_info[Ib_idx]->Ib_list=Ib_list; thread_info[Ib_idx]->Jb_list=Jb_list; thread_info[Ib_idx]->Jb_list_nbs=Jb_list_nbs; thread_info[Ib_idx]->Ib=Ib; thread_info[Ib_idx]->Ib_idx=Ib_idx; tpool_add_work(thread_pool, s1_block_vras_pthread, (void *) thread_info[Ib_idx]); } /* end loop over Ib */ tpool_queue_close(thread_pool, 1); detci_time.s1_mt_after_time = wall_time_new(); detci_time.s1_mt_total_time += detci_time.s1_mt_after_time - detci_time.s1_mt_before_time; for (i=0; ialplist; betlist = thread_info->betlist; C = thread_info->C; S = thread_info->S; oei = thread_info->oei; tei = thread_info->tei; nlists = thread_info->nlists; nas = thread_info->nas; nbs = thread_info->nbs; Ib_list = thread_info->Ib_list; Jb_list = thread_info->Jb_list; Jb_list_nbs = thread_info->Jb_list_nbs; Ib = thread_info->Ib; Ib_idx = thread_info->Ib_idx; nirreps = CalcInfo.nirreps; F = init_array(Jb_list_nbs); zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ for (Kb_list=0; Kb_list < nlists; Kb_list++) { Ibcnt = Ib->cnt[Kb_list]; Ibridx = Ib->ridx[Kb_list]; Ibsgn = Ib->sgn[Kb_list]; Ibij = Ib->ij[Kb_list]; Iboij = Ib->oij[Kb_list]; for (Ib_ex=0; Ib_ex < Ibcnt; Ib_ex++) { kl = *Ibij++; okl = *Iboij++; Kb_idx = *Ibridx++; Kb_sgn = (double) *Ibsgn++; /* B(K_b) = sgn(kl) * E^b_{kl} |B(I_b)> */ Kb = betlist[Kb_list] + Kb_idx; /* note okl on next line, not kl */ if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[okl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Jb_list]; Kbridx = Kb->ridx[Jb_list]; Kbsgn = Kb->sgn[Jb_list]; Kbij = Kb->ij[Jb_list]; Kboij = Kb->oij[Jb_list]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; oij = *Kboij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Jb_idx] += Kb_sgn * Jb_sgn * tei[ijkl] ; else if (oij == okl) F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ } /* end loop over Kb_list */ /* for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } */ /* need to improve mem access pattern here! Above vers may be better! */ /* min op cnt may also be better */ for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { if ((tval=F[Jb_idx]) == 0.0) continue; #ifdef USE_BLAS C_DAXPY(nas,tval, (C[0]+Jb_idx), Jb_list_nbs, (S[0]+Ib_idx), nbs); #else for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { S[Ia_idx][Ib_idx] += tval * C[Ia_idx][Jb_idx]; } #endif } free(F); } /* ** S1_BLOCK_VRAS_ROTF ** ** String replacements on-the-fly version ** ** This sigma1 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 13 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program (C, s now 2D again!) ** Modified 8/2/95 to make RAS again ** Modified 5/13/96 for new sparse-F method ** */ void s1_block_vras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs) { int Ia_idx, Ib_idx, Kb_idx, Jb_idx; int Ibcnt, Kbcnt, Kb_list, Ib_ex, Kb_ex; int *Ibridx, *Kbridx; int nirreps, *Ibij, *Kbij, *Iboij, *Kboij; signed char *Ibsgn, *Kbsgn; int i,ij,kl,ijkl,oij,okl; double Kb_sgn, Jb_sgn; double tval; nirreps = CalcInfo.nirreps; for (Kb_list=0; Kb_list < nlists; Kb_list++) { b2brepl(Occs[Ib_list], Cnt[0], Ij[0], Oij[0], Ridx[0], Sgn[0], BetaG, Ib_list, Kb_list, nbs); /* loop over I_b */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { if ((Ibcnt = Cnt[0][Ib_idx]) < 0) continue; zero_arr(F, Jb_list_nbs); /* loop over excitations E^b_{kl} from |B(I_b)> */ Ibridx = Ridx[0][Ib_idx]; Ibsgn = Sgn[0][Ib_idx]; Ibij = Ij[0][Ib_idx]; Iboij = Oij[0][Ib_idx]; for (i=0; i */ /* note okl on next line, not kl */ if (Kb_list == Jb_list) F[Kb_idx] += Kb_sgn * oei[okl]; /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Jb_list pre-determined because of C blocking */ Kbcnt = Cnt[1][Ib_ex]; Kbridx = Ridx[1][Ib_ex]; Kbsgn = Sgn[1][Ib_ex]; Kbij = Ij[1][Ib_ex]; Kboij = Oij[1][Ib_ex]; for (Kb_ex=0; Kb_ex < Kbcnt; Kb_ex++) { Jb_idx = *Kbridx++; Jb_sgn = (double) *Kbsgn++; ij = *Kbij++; oij = *Kboij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Jb_idx] += Kb_sgn * Jb_sgn * tei[ijkl] ; else if (oij == okl) F[Jb_idx] += 0.5 * Kb_sgn * Jb_sgn * tei[ijkl] ; } } /* end loop over Ib excitations */ /* for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { tval = 0.0; for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { tval += C[Ia_idx][Jb_idx] * F[Jb_idx]; } S[Ia_idx][Ib_idx] += tval; } */ /* need to improve mem access pattern here! Above vers may be better! */ /* min op cnt may also be better */ for (Jb_idx=0; Jb_idx < Jb_list_nbs; Jb_idx++) { if ((tval=F[Jb_idx]) == 0.0) continue; for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { S[Ia_idx][Ib_idx] += tval * C[Ia_idx][Jb_idx]; } } } /* end loop over Ib */ } /* end loop over Kb_list */ } }} // namespace psi::detci psi3/src/bin/detci/s2.cc0000644000101500007650000002421110757640026013472 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** S2.C ** ** File contains code to calculate sigma2 in various ways, all ** block-at-a-time now. ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** */ #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { extern unsigned char ***Occs; #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); /* ** S2_BLOCK_FCI() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma2 routine is for Full CI's only. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 21 June 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa ** */ void s2_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia, *Ka; unsigned int Ia_idx, Ib_idx, Ka_idx, Ja_idx; unsigned int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; unsigned int *Iaridx, *Karidx; int nirreps, *Iaij, *Kaij; signed char *Iasgn, *Kasgn; int ij,kl,ijkl; double Ka_sgn, Ja_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_a */ for (Ia=alplist[Ia_list], Ia_idx=0; Ia_idx < nas; Ia_idx++, Ia++) { zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[kl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ia */ } /* ** S2_BLOCK_RAS() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma2 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 21 June 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa */ void s2_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia, *Ka; unsigned int Ia_idx, Ib_idx, Ka_idx, Ja_idx; unsigned int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; unsigned int *Iaridx, *Karidx; int nirreps, *Iaij, *Kaij, *Iaoij, *Kaoij; signed char *Iasgn, *Kasgn; int ij,kl,ijkl,oij,okl; double Ka_sgn, Ja_sgn; double tval; nirreps = CalcInfo.nirreps; /* loop over I_a */ for (Ia=alplist[Ia_list], Ia_idx=0; Ia_idx < nas; Ia_idx++, Ia++) { zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; Iaoij = Ia->oij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; okl = *Iaoij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; /* note okl on next line, not kl */ if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[okl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; Kaoij = Ka->oij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; oij = *Kaoij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; if (oij > okl) F[Ja_idx] += Ka_sgn * Ja_sgn * tei[ijkl] ; else if (oij == okl) F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ia */ } /* ** S2_BLOCK_RAS_ROTF() ** ** s2_block_ras_rotf(): Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** String replacements on-the-fly version ** currently assumes that (ij|ij)'s have not been halved!! ** ** This sigma2 routine is for RAS CI's. ** ** David Sherrill, 14 August 1995 ** Based on previous code by David Sherrill, 1994 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa ** */ void s2_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { int Ia_idx, Ib_idx, Ka_idx, Ja_idx; int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; int *Iaridx, *Karidx; int nirreps, *Iaij, *Kaij, *Iaoij, *Kaoij; signed char *Iasgn, *Kasgn; int i,ij,kl,ijkl,oij,okl; double Ka_sgn, Ja_sgn; double tval; nirreps = CalcInfo.nirreps; for (Ka_list=0; Ka_list < nlists; Ka_list++) { b2brepl(Occs[Ia_list], Cnt[0], Ij[0], Oij[0], Ridx[0], Sgn[0], BetaG, Ia_list, Ka_list, nas); /* loop over I_a */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { if ((Iacnt = Cnt[0][Ia_idx]) < 0) continue; zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ Iaridx = Ridx[0][Ia_idx]; Iasgn = Sgn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; Iaoij = Oij[0][Ia_idx]; for (i=0; i */ /* note okl on next line, not kl */ if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[okl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Cnt[1][Ia_ex]; Karidx = Ridx[1][Ia_ex]; Kasgn = Sgn[1][Ia_ex]; Kaij = Ij[1][Ia_ex]; Kaoij = Oij[1][Ia_ex]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; oij = *Kaoij++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl) ; if (oij > okl) F[Ja_idx] += Ka_sgn * Ja_sgn * tei[ijkl] ; else if (oij == okl) F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } } /* end loop over Ia */ } /* end loop over Ka_list */ } }} // namespace psi::detci psi3/src/bin/detci/s2v.cc0000644000101500007650000005471110757640026013670 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" #include #include "tpool.h" namespace psi { namespace detci { extern unsigned char ***Occs; extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); void s2_block_vfci_pthread(void *threadarg); void s2_block_vras_pthread(void *threadarg); #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** S2_BLOCK_VFCI() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 18 April 1996 ** Based on many previous versions by David Sherrill 1994-5 */ void s2_block_vfci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia, *Ka; unsigned int Ia_idx, Ib_idx, Ka_idx, Ja_idx; unsigned int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; unsigned int *Iaridx, *Karidx; int *Iaij, *Kaij; signed char *Iasgn, *Kasgn; int ij,kl,ijkl; double Ka_sgn, Ja_sgn; double tval; double *Sptr, *Cptr; /* loop over I_a */ for (Ia=alplist[Ia_list], Ia_idx=0; Ia_idx < nas; Ia_idx++, Ia++) { Sptr = S[Ia_idx]; zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[kl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; ijkl = INDEX(ij,kl); F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ /* for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } */ for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { if ((tval=F[Ja_idx]) == 0.0) continue; Cptr = C[Ja_idx]; #ifdef USE_BLAS C_DAXPY(nbs, tval, Cptr, 1, Sptr, 1); #else for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { Sptr[Ib_idx] += tval * Cptr[Ib_idx]; } #endif } } /* end loop over Ia */ } /* ** S2_BLOCK_VFCI_THREAD() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma1 routine is for Full CI's only, assumes (ij|ij)'s have not ** been halved, and attempts to follow Olsen's vectorized algorithm more ** closely than previous versions, using sparsity of F. ** ** David Sherrill, 18 April 1996 ** Based on many previous versions by David Sherrill 1994-5 */ void s2_block_vfci_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia, *Ka; unsigned int Ia_idx, Ib_idx, Ka_idx, Ja_idx; unsigned int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; unsigned int *Iaridx, *Karidx; int *Iaij, *Kaij; signed char *Iasgn, *Kasgn; int ij,kl,ijkl; double Ka_sgn, Ja_sgn; double tval; double *Sptr, *Cptr; struct pthreads_s2vfci **thread_info; int i; thread_info = (struct pthreads_s2vfci **) malloc(sizeof(struct pthreads_s2vfci *) * nas); for (i=0; ialplist=alplist; thread_info[Ia_idx]->betlist=betlist; thread_info[Ia_idx]->C=C; thread_info[Ia_idx]->S=S; thread_info[Ia_idx]->oei=oei; thread_info[Ia_idx]->tei=tei; thread_info[Ia_idx]->nlists=nlists; thread_info[Ia_idx]->nas=nas; thread_info[Ia_idx]->nbs=nbs; thread_info[Ia_idx]->Ia_list=Ia_list; thread_info[Ia_idx]->Ja_list=Ja_list; thread_info[Ia_idx]->Ja_list_nas=Ja_list_nas; thread_info[Ia_idx]->Ia=Ia; thread_info[Ia_idx]->Ia_idx=Ia_idx; tpool_add_work(thread_pool, s2_block_vfci_pthread, (void *) thread_info[Ia_idx]); } /* end loop over Ia */ tpool_queue_close(thread_pool, 1); detci_time.s2_mt_after_time = wall_time_new(); detci_time.s2_mt_total_time += detci_time.s2_mt_after_time - detci_time.s2_mt_before_time; for (i=0; ialplist; betlist = thread_info->betlist; C = thread_info->C; S = thread_info->S; oei = thread_info->oei; tei = thread_info->tei; nlists = thread_info->nlists; nas = thread_info->nas; nbs = thread_info->nbs; Ia_list = thread_info->Ia_list; Ja_list = thread_info->Ja_list; Ja_list_nas = thread_info->Ja_list_nas; Ia = thread_info->Ia; Ia_idx = thread_info->Ia_idx; F = init_array(Ja_list_nas); Sptr = S[Ia_idx]; zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[kl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; ijkl = INDEX(ij,kl); F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ /* for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } */ for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { if ((tval=F[Ja_idx]) == 0.0) continue; Cptr = C[Ja_idx]; #ifdef USE_BLAS C_DAXPY(nbs, tval, Cptr, 1, Sptr, 1); #else for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { Sptr[Ib_idx] += tval * Cptr[Ib_idx]; } #endif } free(F); } /* ** S2_BLOCK_VRAS() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma2 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa ** Modified 5/10/96 for more vectorized approach */ void s2_block_vras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia, *Ka; unsigned int Ia_idx, Ib_idx, Ka_idx, Ja_idx; unsigned int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; unsigned int *Iaridx, *Karidx; int nirreps, *Iaij, *Kaij, *Iaoij, *Kaoij; signed char *Iasgn, *Kasgn; int ij,kl,ijkl,oij,okl; double Ka_sgn, Ja_sgn; double tval; double *Sptr, *Cptr; nirreps = CalcInfo.nirreps; /* loop over I_a */ for (Ia=alplist[Ia_list], Ia_idx=0; Ia_idx < nas; Ia_idx++, Ia++) { Sptr = S[Ia_idx]; zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; Iaoij = Ia->oij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; okl = *Iaoij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; /* note okl on next line, not kl */ if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[okl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; Kaoij = Ka->oij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; oij = *Kaoij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Ja_idx] += Ka_sgn * Ja_sgn * tei[ijkl] ; else if (oij == okl) F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ /* for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } */ for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { if ((tval=F[Ja_idx]) == 0.0) continue; Cptr = C[Ja_idx]; #ifdef USE_BLAS C_DAXPY(nbs, tval, Cptr, 1, Sptr, 1); #else for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { Sptr[Ib_idx] += tval * Cptr[Ib_idx]; } #endif } } /* end loop over Ia */ } /* ** S2_BLOCK_VRAS_THREAD() ** ** Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** This sigma2 routine is for RAS CI's. ** currently assumes that (ij|ij)'s have not been halved!! ** ** David Sherrill, 10 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa ** Modified 5/10/96 for more vectorized approach */ void s2_block_vras_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { struct stringwr *Ia; unsigned int Ia_idx; struct pthreads_s2vfci **thread_info; int i; thread_info = (struct pthreads_s2vfci **) malloc(sizeof(struct pthreads_s2vfci *) * nas); for (i=0; ialplist=alplist; thread_info[Ia_idx]->betlist=betlist; thread_info[Ia_idx]->C=C; thread_info[Ia_idx]->S=S; thread_info[Ia_idx]->oei=oei; thread_info[Ia_idx]->tei=tei; thread_info[Ia_idx]->nlists=nlists; thread_info[Ia_idx]->nas=nas; thread_info[Ia_idx]->nbs=nbs; thread_info[Ia_idx]->Ia_list=Ia_list; thread_info[Ia_idx]->Ja_list=Ja_list; thread_info[Ia_idx]->Ja_list_nas=Ja_list_nas; thread_info[Ia_idx]->Ia=Ia; thread_info[Ia_idx]->Ia_idx=Ia_idx; tpool_add_work(thread_pool, s2_block_vras_pthread, (void *) thread_info[Ia_idx]); } /* end loop over Ia */ tpool_queue_close(thread_pool, 1); detci_time.s2_mt_after_time = wall_time_new(); detci_time.s2_mt_total_time += detci_time.s2_mt_after_time - detci_time.s2_mt_before_time; for (i=0; ialplist; betlist = thread_info->betlist; C = thread_info->C; S = thread_info->S; oei = thread_info->oei; tei = thread_info->tei; nlists = thread_info->nlists; nas = thread_info->nas; nbs = thread_info->nbs; Ia_list = thread_info->Ia_list; Ja_list = thread_info->Ja_list; Ja_list_nas = thread_info->Ja_list_nas; Ia = thread_info->Ia; Ia_idx = thread_info->Ia_idx; F = init_array(Ja_list_nas); Sptr = S[Ia_idx]; zero_arr(F, Ja_list_nas); nirreps = CalcInfo.nirreps; /* loop over excitations E^a_{kl} from |A(I_a)> */ for (Ka_list=0; Ka_list < nlists; Ka_list++) { Iacnt = Ia->cnt[Ka_list]; Iaridx = Ia->ridx[Ka_list]; Iasgn = Ia->sgn[Ka_list]; Iaij = Ia->ij[Ka_list]; Iaoij = Ia->oij[Ka_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; okl = *Iaoij++; Ka_idx = *Iaridx++; Ka_sgn = (double) *Iasgn++; /* A(K_a) = sgn(kl) * E^a_{kl} |A(I_a)> */ Ka = alplist[Ka_list] + Ka_idx; /* note okl on next line, not kl */ if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[okl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ja_list]; Karidx = Ka->ridx[Ja_list]; Kasgn = Ka->sgn[Ja_list]; Kaij = Ka->ij[Ja_list]; Kaoij = Ka->oij[Ja_list]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; oij = *Kaoij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Ja_idx] += Ka_sgn * Ja_sgn * tei[ijkl] ; else if (oij == okl) F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ } /* end loop over Ka_list */ /* for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } */ for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { if ((tval=F[Ja_idx]) == 0.0) continue; Cptr = C[Ja_idx]; #ifdef USE_BLAS C_DAXPY(nbs, tval, Cptr, 1, Sptr, 1); #else for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { Sptr[Ib_idx] += tval * Cptr[Ib_idx]; } #endif } free(F); } /* ** S2_BLOCK_VRAS_ROTF() ** ** s2_block_vras_rotf(): Calculate the sigma_2 vector as described by ** equation (20) of RAS Paper (Olsen, Roos, Jorgensen, Aa. Jensen JCP 1988) ** ** String replacements on-the-fly version ** currently assumes that (ij|ij)'s have not been halved!! ** ** This sigma2 routine is for RAS CI's. ** ** David Sherrill, 13 May 1996 ** Based on previous code by David Sherrill, 1994-5 ** ** Updated 3/27/94 to include g matrix for RAS ** Modified 4/8/94 to make C and s one-dimensional ** Modified 4/10/94 to make FCI-only (for now) and use new string structs ** Modified 6/21/95 for use in new RAS program ** Obtained 7/22/95 from s1 routine by changing a's to b's and vice versa ** Modified 5/13/96 for new sparse-F vectorized version ** */ void s2_block_vras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas) { int Ia_idx, Ib_idx, Ka_idx, Ja_idx; int Iacnt, Kacnt, Ka_list, Ia_ex, Ka_ex; int *Iaridx, *Karidx; int nirreps, *Iaij, *Kaij, *Iaoij, *Kaoij; signed char *Iasgn, *Kasgn; int i,ij,kl,ijkl,oij,okl; double Ka_sgn, Ja_sgn; double tval, *Cptr, *Sptr; nirreps = CalcInfo.nirreps; for (Ka_list=0; Ka_list < nlists; Ka_list++) { b2brepl(Occs[Ia_list], Cnt[0], Ij[0], Oij[0], Ridx[0], Sgn[0], BetaG, Ia_list, Ka_list, nas); /* loop over I_a */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { if ((Iacnt = Cnt[0][Ia_idx]) < 0) continue; Sptr = S[Ia_idx]; zero_arr(F, Ja_list_nas); /* loop over excitations E^a_{kl} from |A(I_a)> */ Iaridx = Ridx[0][Ia_idx]; Iasgn = Sgn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; Iaoij = Oij[0][Ia_idx]; for (i=0; i */ /* note okl on next line, not kl */ if (Ka_list == Ja_list) F[Ka_idx] += Ka_sgn * oei[okl]; /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ja_list pre-determined because of C blocking */ Kacnt = Cnt[1][Ia_ex]; Karidx = Ridx[1][Ia_ex]; Kasgn = Sgn[1][Ia_ex]; Kaij = Ij[1][Ia_ex]; Kaoij = Oij[1][Ia_ex]; for (Ka_ex=0; Ka_ex < Kacnt; Ka_ex++) { Ja_idx = *Karidx++; Ja_sgn = (double) *Kasgn++; ij = *Kaij++; oij = *Kaoij++; ijkl = INDEX(ij,kl); if (oij > okl) F[Ja_idx] += Ka_sgn * Ja_sgn * tei[ijkl] ; else if (oij == okl) F[Ja_idx] += 0.5 * Ka_sgn * Ja_sgn * tei[ijkl] ; } } /* end loop over Ia excitations */ /* for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { tval = 0.0; for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { tval += C[Ja_idx][Ib_idx] * F[Ja_idx]; } S[Ia_idx][Ib_idx] += tval; } */ for (Ja_idx=0; Ja_idx < Ja_list_nas; Ja_idx++) { if ((tval=F[Ja_idx]) == 0.0) continue; Cptr = C[Ja_idx]; for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { Sptr[Ib_idx] += tval * Cptr[Ib_idx]; } } } /* end loop over Ia */ } /* end loop over Ka_list */ } }} // namespace psi::detci psi3/src/bin/detci/s3.cc0000644000101500007650000002015510757640026013476 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /* ** S3.C ** ** Routines for calculating a block of the sigma3 (alpha-beta) vector ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** 21 June 1995 ** */ #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** S3_BLOCK() ** ** Calculate a block of the sigma3 vector in equation (9c) of ** Olsen, Roos, et al. ** */ void s3_block(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list) { struct stringwr *Ia, *Ib ; unsigned int Ia_ex, Ib_ex; int Ia_idx, Ib_idx ; int Ja_idx, Jb_idx ; int Ja_sgn, Jb_sgn ; int ij, kl, ijkl ; double tval ; int Iacnt, Jbcnt, *Iaij, *Ibij; unsigned int *Iaridx, *Ibridx; signed char *Iasgn, *Ibsgn; int nirreps; double *Tptr; nirreps = CalcInfo.nirreps; /* loop over Ia */ for (Ia=alplist,Ia_idx=0; Ia_idx < nas; Ia_idx++,Ia++) { /* loop over excitations E^a_{kl} from |A(I_a)> */ Iacnt = Ia->cnt[Ja_list]; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Tptr = tei + ioff[kl]; Ja_idx = *Iaridx++; Ja_sgn = *Iasgn++; /* loop over Ib */ for (Ib=betlist, Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { /* loop over excitations E^b_{ij} from |B(I_b)> */ Jbcnt = Ib->cnt[Jb_list]; Ibridx = Ib->ridx[Jb_list]; Ibsgn = Ib->sgn[Jb_list]; Ibij = Ib->ij[Jb_list]; tval = 0.0; for (Ib_ex=0; Ib_ex < Jbcnt; Ib_ex++) { ij = *Ibij++; Jb_idx = *Ibridx++; Jb_sgn = *Ibsgn++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl); tval += tei[ijkl] * C[Ja_idx][Jb_idx] * (double) Ja_sgn * (double) Jb_sgn; } S[Ia_idx][Ib_idx] += tval; } /* end loop over Ib */ } /* end loop over Ia excitations */ } /* end loop over Ia */ } /* ** S3_BLOCK_DIAG() ** ** Calculate a block of the sigma3 vector in equation (9c) of ** Olsen, Roos, et al. For diagonal blocks of sigma. ** ** currently assumes that (ij|ij)'s have not been halved ** */ void s3_block_diag(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list) { struct stringwr *Ia, *Ib; unsigned int Ia_ex, Ib_ex; int Ia_idx, Ib_idx; int Ja_idx, Jb_idx; int Ja_sgn, Jb_sgn; int ij, kl; double tval,tval2; int Iacnt, Jbcnt, *Iaij, *Ibij; unsigned int *Iaridx, *Ibridx; signed char *Iasgn, *Ibsgn; double *Tptr, *Cptr, *Sptr; /* loop over Ia */ for (Ia=alplist,Ia_idx=0; Ia_idx < nas; Ia_idx++,Ia++) { /* loop over excitations E^a_{kl} from |A(I_a)> */ Iacnt = Ia->cnt[Ja_list]; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { Sptr = S[Ia_idx]; kl = *Iaij++; Tptr = tei + ioff[kl]; Ja_idx = *Iaridx++; Cptr = C[Ja_idx]; Ja_sgn = *Iasgn++; /* loop over Ib */ for (Ib=betlist, Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { /* loop over excitations E^b_{ij} from |B(I_b)> */ Jbcnt = Ib->cnt[Jb_list]; Ibridx = Ib->ridx[Jb_list]; Ibsgn = Ib->sgn[Jb_list]; Ibij = Ib->ij[Jb_list]; tval = 0.0; for (Ib_ex=0; Ib_ex < Jbcnt && (ij = *Ibij++)<=kl; Ib_ex++) { Jb_idx = *Ibridx++; Jb_sgn = *Ibsgn++ * Ja_sgn; tval2 = Tptr[ij] * Cptr[Jb_idx] * Jb_sgn; if (ij == kl) tval2 *= 0.5; tval += tval2; } *Sptr++ += tval; } /* end loop over Ib */ } /* end loop over Ia excitations */ } /* end loop over Ia */ } /* ** S3_BLOCK_ROTF() ** ** Calculate a block of the sigma3 (alpha-beta) vector for a diagonal ** block of sigma. The string replacements are fed in through arrays. ** Assumes that (ij|ij)'s have not been halved ** ** David Sherrill, 13 August 1995 ** */ void s3_block_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs) { int Ia_ex, Ib_ex; int Ia_idx, Ib_idx ; int Ja_idx, Jb_idx ; int Ja_sgn, Jb_sgn ; int ij, kl, ijkl ; double tval; int Iacnt, Jbcnt, *Iaij, *Ibij; int *Iaridx, *Ibridx; signed char *Iasgn, *Ibsgn; double *Tptr; /* loop over Ia */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { /* loop over excitations E^a_{kl} from |A(I_a)> */ Iacnt = Cnt[0][Ia_idx]; Iaridx = Ridx[0][Ia_idx]; Iasgn = Sgn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Tptr = tei + ioff[kl]; Ja_idx = *Iaridx++; Ja_sgn = *Iasgn++; /* loop over Ib */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { /* loop over excitations E^b_{ij} from |B(I_b)> */ Jbcnt = Cnt[1][Ib_idx]; Ibridx = Ridx[1][Ib_idx]; Ibsgn = Sgn[1][Ib_idx]; Ibij = Ij[1][Ib_idx]; tval = 0.0; for (Ib_ex=0; Ib_ex < Jbcnt; Ib_ex++) { ij = *Ibij++; Jb_idx = *Ibridx++; Jb_sgn = *Ibsgn++; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl); tval += tei[ijkl] * C[Ja_idx][Jb_idx] * (double) Ja_sgn * (double) Jb_sgn; } S[Ia_idx][Ib_idx] += tval; } /* end loop over Ib */ } /* end loop over Ia excitations */ } /* end loop over Ia */ } /* ** S3_BLOCK_DIAG_ROTF() ** ** Calculate a block of the sigma3 vector in equation ** (9c) of Olsen, Roos, et al. For diagonal blocks of sigma. ** The string replacements are fed in through arrays. ** Assumes that (ij|ij)'s have not been halved. ** */ void s3_block_diag_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs) { int Ia_ex, Ib_ex; int Ia_idx, Ib_idx ; int Ja_idx, Jb_idx ; int Ja_sgn, Jb_sgn ; int ij, kl, ijkl ; double tval,tval2 ; int Iacnt, Jbcnt, *Iaij, *Ibij; int *Iaridx, *Ibridx; signed char *Iasgn, *Ibsgn; double *Tptr; /* loop over Ia */ for (Ia_idx=0; Ia_idx < nas; Ia_idx++) { /* loop over excitations E^a_{kl} from |A(I_a)> */ Iacnt = Cnt[0][Ia_idx]; Iaridx = Ridx[0][Ia_idx]; Iasgn = Sgn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { kl = *Iaij++; Tptr = tei + ioff[kl]; Ja_idx = *Iaridx++; Ja_sgn = *Iasgn++; /* loop over Ib */ for (Ib_idx=0; Ib_idx < nbs; Ib_idx++) { /* loop over excitations E^b_{ij} from |B(I_b)> */ Jbcnt = Cnt[1][Ib_idx]; Ibridx = Ridx[1][Ib_idx]; Ibsgn = Sgn[1][Ib_idx]; Ibij = Ij[1][Ib_idx]; tval = 0.0; for (Ib_ex=0; Ib_ex < Jbcnt; Ib_ex++) { ij = *Ibij++; Jb_idx = *Ibridx++; Jb_sgn = *Ibsgn++; if (ij > kl) continue; ijkl = ioff[MAX0(ij,kl)] + MIN0(ij,kl); tval2 = tei[ijkl] * C[Ja_idx][Jb_idx] * (double) Ja_sgn * (double) Jb_sgn; if (ij == kl) tval2 *= 0.5; tval += tval2; } S[Ia_idx][Ib_idx] += tval; } /* end loop over Ib */ } /* end loop over Ia excitations */ } /* end loop over Ia */ } }} // namespace psi::detci psi3/src/bin/detci/s3_block_bz.cc0000644000101500007650000002511710757640026015346 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** S3_BLOCK_BZ1() ** ** Calculate a block of the sigma3 vector in equation (9c) of ** Olsen, Roos, et al. For diagonal blocks of sigma. ** ** Try routine from Bendazzoli and Evangelisti ** ** Pass in Ialist, Iblist, Jalist, Jblist. Need to convert these ** to irreps for now; later we can make even more general. ** */ void s3_block_bz1(int Ialist, int Iblist, int Jalist, int Jblist, int nas, int nbs, int cnbs, double *tei, double **C, double **S, double **Cprime, double **Sprime) { int Iasym, Jasym, Ibsym, Jbsym; int norbs, *orbsym; int i, j, k, l, ij, fullij, fullji, kl, fullkl, fulllk, tmpi, tmpj; int I, J, I1, I2, J1, J2, S2; /* also try S2 as double */ int ilen, jlen; double V, VS; double *Tptr; int *OVptr, *OVptr2; int signmask, nsignmask; double *SprimeI0, *SprimeI1, *SprimeI2, *SprimeI3; double *SprimeI4, *SprimeI5, *SprimeI6, *SprimeI7; double *CprimeI0, *CprimeI1, *CprimeI2, *CprimeI3; double *CprimeI4, *CprimeI5, *CprimeI6, *CprimeI7; orbsym = CalcInfo.orbsym + CalcInfo.num_fzc_orbs; Iasym = Ialist; Jasym = Jalist; Ibsym = Iblist; Jbsym = Jblist; norbs = CalcInfo.num_ci_orbs; signmask = 1 << (sizeof(int)*8-1); nsignmask = ~signmask; /* loop over k,l */ for (k=0; k kl) continue; V = Tptr[ij]; if (ij==kl) V = V/2.0; fullij = i * norbs + j; fullji = j * norbs + i; jlen = OV[Jblist][fullji][0]; OVptr = OV[Jblist][fullji] + 1; OVptr2 = OV[Iblist][fullij] + 1; for (J=0; J ij) continue; V = Tptr[kl]; if (ij==kl) V = V/2.0; fullkl = k * norbs + l; fulllk = l * norbs + k; ilen = OV[Jalist][fulllk][0]; OVptr = OV[Jalist][fulllk] + 1; OVptr2 = OV[Ialist][fullkl] + 1; for (I=0; I #include #include #include #include "structs.h" #define EXTERN #include "globals.h" #include #include "tpool.h" namespace psi { namespace detci { /* Global variables necessary for pthreads */ pthread_mutex_t inc_Ia_mutex; struct stringwr *Ia_global; int Ia_idx_global; int form_ilist(struct stringwr *alplist, int Ja_list, int nas, int kl, int *L, int *R, double *Sgn); int form_ilist_rotf(int *Cnt, int **Ridx, signed char **Sn, int **Ij, int nas, int kl, int *L, int *R, double *Sgn); void s3_block_vdiag_pthread(void *threadarg); void s3_block_v_pthread(void *threadarg); #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** S3_BLOCK_VDIAG() ** ** Calculate a block of the sigma3 vector in equation (9c) of ** Olsen, Roos, et al. For diagonal blocks of sigma. ** ** currently assumes that (ij|ij)'s have not been halved ** Try to get the Olsen vector version working....again!!!! */ void s3_block_vdiag(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int cnas, int Ib_list, int Ja_list, int Jb_list, int Ib_sym, int Jb_sym, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R) { struct stringwr *Ia; unsigned int Ia_ex; int ij, i, j, t, kl, I, J, RJ; double tval, VS, *CprimeI0, *CI0; int jlen, Jacnt, *Iaij, *orbsym, norbs, Ia_idx; unsigned int *Iaridx; signed char *Iasgn; double *Tptr; struct pthreads_s3diag **thread_info; int npthreads, rc, status; pthread_t *thread; npthreads = Parameters.nthreads-1; /* subtract out the main thread */ thread = (pthread_t *) malloc(sizeof(pthread_t)*Parameters.nthreads); thread_info = (struct pthreads_s3diag **) malloc(sizeof(struct pthreads_s3diag *) * nas); for (i=0; inas = nas; thread_info[Ia_idx]->jlen = jlen; thread_info[Ia_idx]->ij = ij; thread_info[Ia_idx]->Cprime = Cprime; thread_info[Ia_idx]->Ja_list = Ja_list; thread_info[Ia_idx]->Tptr = Tptr; thread_info[Ia_idx]->S = S; thread_info[Ia_idx]->R = R; thread_info[Ia_idx]->Ia_local = Ia; thread_info[Ia_idx]->Ia_idx_local = Ia_idx; tpool_add_work(thread_pool , s3_block_vdiag_pthread, (void *) thread_info[Ia_idx]); } tpool_queue_close(thread_pool, 1); detci_time.s3_mt_after_time = wall_time_new(); detci_time.s3_mt_total_time += detci_time.s3_mt_after_time - detci_time.s3_mt_before_time; } else { for (Ia=alplist, Ia_idx=0; Ia_idx */ Jacnt = Ia->cnt[Ja_list]; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; zero_arr(V, jlen); /* fprintf(outfile,"Ia = %x\t Ia_idx = %d\n", Ia, Ia_idx); fflush(outfile); if (Jacnt) { fprintf(outfile,"S3_BLOCK_VDIAG: Jacnt = %d\n", Jacnt); fflush(outfile); } */ for (Ia_ex=0; Ia_ex < Jacnt && (kl = *Iaij++)<=ij; Ia_ex++) { I = *Iaridx++; tval = *Iasgn++; if (ij == kl) tval *= 0.5; VS = Tptr[kl] * tval; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; Jnas; jlen = thread_info_i->jlen; ij = thread_info_i->ij; Ja_list = thread_info_i->Ja_list; S = thread_info_i->S; Cprime = thread_info_i->Cprime; Tptr = thread_info_i->Tptr; R = thread_info_i->R; Ia_idx_local = thread_info_i->Ia_idx_local; Ia_local = thread_info_i->Ia_local; V = init_array(jlen); /* loop over excitations E^a_{kl} from |A(I_a)> */ Jacnt = Ia_local->cnt[Ja_list]; Iaridx = Ia_local->ridx[Ja_list]; Iasgn = Ia_local->sgn[Ja_list]; Iaij = Ia_local->ij[Ja_list]; /* fprintf(outfile,"Ia_local = %x\t Ia_idx_local = %d\n", Ia_local, Ia_idx_local); fflush(outfile); fprintf(outfile,"Jacnt = %d\n", Jacnt); */ zero_arr(V, jlen); for (Ia_ex=0; Ia_ex < Jacnt && (kl = *Iaij++)<=ij; Ia_ex++) { I = *Iaridx++; tval = *Iasgn++; if (ij == kl) tval *= 0.5; VS = Tptr[kl] * tval; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; Jnas = nas; thread_info[Ia_idx]->jlen = jlen; thread_info[Ia_idx]->ij = ij; thread_info[Ia_idx]->Cprime = Cprime; thread_info[Ia_idx]->Ja_list = Ja_list; thread_info[Ia_idx]->Tptr = tei; thread_info[Ia_idx]->S = S; thread_info[Ia_idx]->R = R; thread_info[Ia_idx]->Ia_local = Ia; thread_info[Ia_idx]->Ia_idx_local = Ia_idx; tpool_add_work(thread_pool, s3_block_v_pthread, (void *) thread_info[Ia_idx]); } tpool_queue_close(thread_pool, 1); detci_time.s3_mt_after_time = wall_time_new(); detci_time.s3_mt_total_time += detci_time.s3_mt_after_time - detci_time.s3_mt_before_time; } else { for (Ia=alplist, Ia_idx=0; Ia_idx */ Jacnt = Ia->cnt[Ja_list]; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; zero_arr(V, jlen); for (Ia_ex=0; Ia_ex < Jacnt; Ia_ex++) { kl = *Iaij++; I = *Iaridx++; tval = *Iasgn++; ijkl = INDEX(ij,kl); VS = tval * tei[ijkl]; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; Jnas; jlen = thread_info_i->jlen; ij = thread_info_i->ij; Ja_list = thread_info_i->Ja_list; S = thread_info_i->S; Cprime = thread_info_i->Cprime; tei = thread_info_i->Tptr; R = thread_info_i->R; thread_id = thread_info_i->thread_id; Ia_idx_local = thread_info_i->Ia_idx_local; Ia_local = thread_info_i->Ia_local; V = init_array(jlen); /* loop over excitations E^a_{kl} from |A(I_a)> */ Jacnt = Ia_local->cnt[Ja_list]; Iaridx = Ia_local->ridx[Ja_list]; Iasgn = Ia_local->sgn[Ja_list]; Iaij = Ia_local->ij[Ja_list]; work_units++; zero_arr(V, jlen); for (Ia_ex=0; Ia_ex < Jacnt; Ia_ex++) { kl = *Iaij++; I = *Iaridx++; tval = *Iasgn++; ijkl = INDEX(ij,kl); VS = tval * tei[ijkl]; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; J */ Iacnt = Ia->cnt[Ja_list]; if (!Iacnt) continue; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->ij[Ja_list]; Ia_ex=0; while (Ia_ex < Iacnt && (ij = *Iaij++) */ Jacnt = Cnt[0][Ia_idx]; Iaridx = Ridx[0][Ia_idx]; Iasgn = Sn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; zero_arr(V, jlen); /* rotf doesn't yet ensure kl's in order */ for (Ia_ex=0; Ia_ex < Jacnt; Ia_ex++) { kl = *Iaij++; I = *Iaridx++; tval = *Iasgn++; if (kl > ij) continue; if (ij == kl) tval *= 0.5; VS = Tptr[kl] * tval; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; J */ Jacnt = Cnt[0][Ia_idx]; Iaridx = Ridx[0][Ia_idx]; Iasgn = Sn[0][Ia_idx]; Iaij = Ij[0][Ia_idx]; zero_arr(V, jlen); for (Ia_ex=0; Ia_ex < Jacnt; Ia_ex++) { kl = *Iaij++; I = *Iaridx++; tval = *Iasgn++; ijkl = INDEX(ij,kl); VS = tval * tei[ijkl]; CprimeI0 = Cprime[I]; #ifdef USE_BLAS C_DAXPY(jlen, VS, CprimeI0, 1, V, 1); #else for (J=0; J */ Iacnt = Cnt[Ia_idx]; if (!Iacnt) continue; Iaridx = Ridx[Ia_idx]; Iasgn = Sn[Ia_idx]; Iaij = Ij[Ia_idx]; Ia_ex=0; for (Ia_ex=0; Ia_ex #include #include #include #include #include #include #include #include "structs.h" #include "ci_tol.h" #define EXTERN #include "globals.h" #include "civect.h" namespace psi { namespace detci { extern int H0block_calc(double E); extern void H0block_xy(double *x, double *y, double E); extern void print_vec(unsigned int nprint, int *Iacode, int *Ibcode, int *Iaidx, int *Ibidx, double *coeff, struct olsen_graph *AlphaG, struct olsen_graph *BetaG, struct stringwr **alplist, struct stringwr **betlist, FILE *outfile); extern void parse_import_vector(SlaterDetSet *sdset, int *i_alplist, int *i_alpidx, int *i_betlist, int *i_betidx, int *i_blknums); extern void H0block_coupling_calc(double E, struct stringwr **alplist, struct stringwr **betlist); #define MALPHA_TOLERANCE 1E-15 void sem_iter(CIvect &Hd, struct stringwr **alplist, struct stringwr **betlist, double *evals, double conv_e, double conv_rms, double enuc, double efzc, int nroots, int maxiter, int maxnvect, FILE *outfile, int print_lvl) { int i, j, k, l, ij, I, L, L2=0, L3=0, tmpi, detH0; unsigned long det1, N; int num_alp_str, num_bet_str, Llast; int *mi_iac, *mi_ibc, *mi_iaidx, *mi_ibidx, *root_converged; int *Lvec, *did_root, num_root_converged; double *mi_coeff, *clpse_norm, **clpse_dot, **tmpmat; double *oei, *tei, **G, ***alpha, **lambda, ****m_alpha, ***m_lambda; int sm_tridim; double *sm_mat, *sm_evals, **sm_evecs; int iter = 0, converged = 0; int iter2 = 0; /* iterations since last collapse */ double tval, tval2, *lastroot, *dvecnorm, *buffer1, *buffer2; double ***M, **sigma_overlap, Mtmp, **cmp_cncoe, **tr_cmp_cncoe; int *lse_do_arr, lse_do = 0, collapse_num = 0, iter_tmp = 0; int form_M = 0, tmpval; int last_lse_collapse_num = -Parameters.lse_collapse; double *x, *y, tmpx, tmpy; double lse_tolerance, *renorm_c, *E_est, ovlpmax=0.0; double cknorm, tvalmatt=0.0, tmp; /* Add by CDS for debugging purposes */ int errcod; CIvect Cvec; CIvect Cvec2; CIvect Sigma; CIvect Sigma2; CIvect Dvec; CIvect Dvec2; Cvec.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Cvec2.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Sigma.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_s_tmp_units, Parameters.first_s_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Sigma2.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_s_tmp_units, Parameters.first_s_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); if (!Parameters.nodfile) { Dvec.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, nroots, Parameters.num_d_tmp_units, Parameters.first_d_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Dvec2.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, nroots, Parameters.num_d_tmp_units, Parameters.first_d_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); } else { Dvec.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_c_tmp_units, Parameters.first_c_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Dvec2.set(CIblks.vectlen,CIblks.num_blocks,Parameters.icore,Parameters.Ms0, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, maxnvect, Parameters.num_s_tmp_units, Parameters.first_s_tmp_unit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); } /* set up the vector pointers/info */ if (Cvec.read_new_first_buf() == -1) Cvec.write_new_first_buf(); if (Sigma.read_new_first_buf() == -1) Sigma.write_new_first_buf(); /* should not need to have first_buf info in D file, it never changes * unless it is only a logical D file, which isn't controlled here * anyway. */ if (Cvec.read_num_vecs() == -1) Cvec.write_num_vecs(0); if (Sigma.read_num_vecs() == -1) Sigma.write_num_vecs(0); if (Dvec.read_num_vecs() == -1) Dvec.write_num_vecs(0); /* allocate memory */ Dvec.h0block_buf_init(); buffer1 = *(Hd.blockptr(0)); buffer2 = Hd.buf_malloc(); Hd.buf_unlock(); /* get some of the stuff from CalcInfo for easier access */ num_alp_str = CalcInfo.num_alp_str; num_bet_str = CalcInfo.num_bet_str; if (Parameters.fci) oei = CalcInfo.tf_onel_ints; else oei = CalcInfo.gmat[0]; tei = CalcInfo.twoel_ints; lastroot = init_array(nroots); dvecnorm = init_array(nroots); root_converged = init_int_array(nroots); did_root = init_int_array(nroots); clpse_norm = init_array(maxnvect); clpse_dot = init_matrix(maxnvect, maxnvect); tmpmat = init_matrix(maxnvect, nroots); lse_do_arr = init_int_array(nroots); renorm_c = init_array(nroots); x = init_array(nroots); y = init_array(nroots); E_est = init_array(nroots); /* small arrays to hold most important config information */ mi_iac = init_int_array(Parameters.nprint); mi_ibc = init_int_array(Parameters.nprint); mi_iaidx = init_int_array(Parameters.nprint); mi_ibidx = init_int_array(Parameters.nprint); mi_coeff = init_array(Parameters.nprint); G = init_matrix(maxnvect, maxnvect); cmp_cncoe = init_matrix(maxnvect, maxnvect); tr_cmp_cncoe = init_matrix(maxnvect, maxnvect); sigma_overlap = init_matrix(maxnvect, maxnvect); Lvec = init_int_array(maxnvect); lambda = init_matrix(maxnvect, maxnvect); m_lambda = (double ***) malloc (sizeof(double **) * maxnvect); for (i=0; i 4) { fprintf(outfile, "Sigma[%d] =\n", i); Sigma.print(outfile); } for (j=0; j<=i; j++) { Cvec.read(j, 0); if (print_lvl > 4) { fprintf(outfile, "C[%d] =\n", j); Cvec.print(outfile); } G[j][i] = G[i][j] = Cvec * Sigma; } } Cvec.buf_unlock(); Sigma.buf_unlock(); if (print_lvl > 3) { fprintf(outfile, "\nG matrix (%2d) = \n", iter); print_mat(G, L, L, outfile); } /* solve the L x L eigenvalue problem G a = lambda a for M roots */ sq_rsp(L, L, G, lambda[iter2], 1, alpha[iter2], 1.0E-14); if (print_lvl > 4) { fprintf(outfile, "\n G eigenvectors and eigenvalues:\n"); eivout(alpha[iter2], lambda[iter2], L, L, outfile); } /* loop over roots and write out the required number of vects */ if (nroots + L > maxnvect) { fprintf(outfile,"Error: Can't do restart if maxnvect < nroots + L\n"); exit(0); } /* gather C and Sigma */ Cvec.buf_lock(buffer1); Dvec.buf_lock(buffer2); for (i=0; isize); import_alpidx = init_int_array(dets->size); import_betlist = init_int_array(dets->size); import_betidx = init_int_array(dets->size); import_blknums = init_int_array(dets->size); parse_import_vector(dets, import_alplist, import_alpidx, import_betlist, import_betidx, import_blknums); k=0; for (i=0; isize); slaterdetset_read_vect(PSIF_CIVECT, "CI vector", buffer2, dets->size, i); // initialize the values in Cvec Cvec.buf_lock(buffer1); Cvec.init_vals(i, dets->size, import_alplist, import_alpidx, import_betlist, import_betidx, import_blknums, buffer2); Cvec.buf_unlock(); k++; // increment number of vectors } Cvec.write_num_vecs(k); Sigma.set_zero_blocks_all(); // when we're done, free the memory slaterdetset_delete_full(dets); free(import_alplist); free(import_alpidx); free(import_betlist); free(import_betidx); free(import_blknums); } else { /* use H0BLOCK eigenvector guess */ if (Parameters.precon == PRECON_GEN_DAVIDSON) L = H0block.size; else L = H0block.guess_size; /* fprintf(outfile, " L = %d in sem.cc line 345\n", L); */ /* N = CIblks.vectlen; The variable N is never used */ sm_evals = init_array(L); /* need to fill out sm_evecs into b (pad w/ 0's) */ fprintf(outfile, "Using %d initial trial vectors\n", Parameters.num_init_vecs); Cvec.buf_lock(buffer1); for (i=0,k=0; i 1.0E-8) { tmpi = 1; fprintf(outfile,"(sem_iter): H0block.H0b_diag[%d][%d]" " - H0block.H0b_diag[%d][%d] = %lf - %lf = %lf" " > 1.0E-8\n", j, i, l, i, H0block.H0b_diag[j][i], tval, (H0block.H0b_diag[j][i] - tval)); } } /* also check that it satisfies any user-specified properties */ if (!tmpi && Parameters.filter_guess) { j = Parameters.filter_guess_H0_det1; l = Parameters.filter_guess_H0_det2; tval = H0block.H0b_diag[l][i]; if (Parameters.filter_guess_sign == -1) tval = -tval; if (fabs(H0block.H0b_diag[j][i] - tval) > 1.0E-8) { tmpi = 1; fprintf(outfile, "(sem_iter): Guess vector failed user-specified" " criterion.\n"); fprintf(outfile, "(sem_iter): H0block.H0b_diag[%d][%d]" " - H0block.H0b_diag[%d][%d] = %lf - %lf = %lf" " > 1.0E-8\n", j, i, l, i, H0block.H0b_diag[j][i], tval, (H0block.H0b_diag[j][i] - tval)); } } if (tmpi) continue; for (j=0; j 1.0E-3) { fprintf(outfile, "Computed not as desired, discarding guess\n"); } else k++; } else k++; } Cvec.buf_unlock(); Cvec.write_num_vecs(k); Sigma.set_zero_blocks_all(); free(sm_evals); /* free(sm_mat); free_matrix(sm_evecs, L); */ } /* Gather h0block elemts of initial CI_VEC - could move this to init_vals */ Cvec.buf_lock(buffer1); Cvec.read(0,0); Cvec.symnorm(1.0,CI_VEC,TRUE); Cvec.buf_unlock(); /* write file_offset and file_number array out to detci.dat */ //Cvec.write_detfile(CI_VEC); //Sigma.write_detfile(SIGMA_VEC); //if (Parameters.print_lvl > 1) // fprintf(outfile,"Restart info written.\n"); fflush(outfile); if (k < nroots) { printf("(sem_iter): Failure to get required number of guess vects.\n"); printf(" Got %d, need nroots=%d to proceed. Aborting\n", k, nroots); exit(1); } L = k; Llast = 0; if (Parameters.nodfile) { Dvec.restart_reord_fp(maxnvect-1); Dvec2.restart_reord_fp(maxnvect-1); } /* begin iteration */ while (!converged && iter <= maxiter) { Lvec[iter2] = L; #ifdef DEBUG fprintf(outfile, "L[cur] = %3d, L[last] = %3d\n", L, iter2 > 0 ? Lvec[iter2-1] : 999); #endif /* form contributions to the G matrix */ Cvec.buf_lock(buffer1); Sigma.buf_lock(buffer2); for (i=Llast; i 3) { fprintf(outfile, "b[%d] =\n", i); Cvec.print(outfile); } sigma(alplist, betlist, Cvec, Sigma, oei, tei, Parameters.fci, i); if (Parameters.z_scale_H) { Cvec.buf_unlock(); Sigma.buf_unlock(); Sigma.scale_sigma(Hd, Cvec, alplist, betlist, i, buffer1, buffer2); Cvec.buf_lock(buffer1); Sigma.buf_lock(buffer2); Sigma.read(i,0); } if (print_lvl > 3) { /* and this as well */ fprintf(outfile, "H * b[%d] = \n", i); Sigma.print(outfile); } for (j=0; j 4) { fprintf(outfile, "\n G eigenvectors and eigenvalues:\n"); eivout(alpha[iter2], lambda[iter2], L, L, outfile); } if (print_lvl > 3) { fprintf(outfile, "\nG matrix (%2d) = \n", iter); print_mat(G, L, L, outfile); } Cvec.buf_unlock(); Sigma.buf_unlock(); if (Parameters.lse && (maxnvect-L <= nroots*Parameters.collapse_size) && L>2) form_M = 1; else form_M = 0; if (form_M) { /* Form sigma_overlap matrix */ Sigma.buf_lock(buffer1); Sigma2.buf_lock(buffer2); zero_mat(sigma_overlap,maxnvect, maxnvect); for (i=0; i 2) { fprintf(outfile,"Sigma[%d] = ", i); Sigma.print(outfile); fflush(outfile); } for (j=i; j 2) { fprintf(outfile,"Sigma2[%d] = ", j); Sigma2.print(outfile); fflush(outfile); } sigma_overlap[i][j] = sigma_overlap[j][i] = Sigma * Sigma2; } } Sigma.buf_unlock(); Sigma2.buf_unlock(); /* Form Mij matrix */ /* This formula assumes the b vectors are orthogonal */ for (k=0; k 2) { fprintf(outfile, "\nsigma_overlap matrix (%2d) = \n", iter); print_mat(sigma_overlap, L, L, outfile); for (k=0; k 2) { fprintf(outfile, "\n M eigenvectors and eigenvalues root %d:\n",k); eivout(m_alpha[iter2][k], m_lambda[iter2][k], L, L, outfile); } } } if (Parameters.print_sigma_overlap) { /* Form sigma_overlap matrix */ Sigma.buf_lock(buffer1); Sigma2.buf_lock(buffer2); zero_mat(sigma_overlap,maxnvect, maxnvect); for (i=0; i 2) { fprintf(outfile,"Sigma[%d] = ", i); Sigma.print(outfile); fflush(outfile); } for (j=i; j 2) { fprintf(outfile,"Sigma2[%d] = ", j); Sigma2.print(outfile); fflush(outfile); } sigma_overlap[i][j] = sigma_overlap[j][i] = Sigma * Sigma2; } } Sigma.buf_unlock(); Sigma2.buf_unlock(); fprintf(outfile, "\nsigma_overlap matrix (%2d) = \n", iter); print_mat(sigma_overlap, L, L, outfile); for (i=0; i= 0) && (Lvec[iter2 - Parameters.collapse_size + 1] + nroots * Parameters.collapse_size > maxnvect) && iter != maxiter) { Cvec.set_nvect(maxnvect); Cvec2.set_nvect(maxnvect); Sigma.set_nvect(maxnvect); if (Parameters.lse) Sigma2.set_nvect(maxnvect); collapse_num++; lse_do = 0; Cvec.buf_lock(buffer1); Dvec.buf_lock(buffer2); zero_int_array(lse_do_arr, nroots); for (i=0; i= Parameters.lse_collapse) && (fabs(lambda[iter2][i]-lastroot[i]) < lse_tolerance) && (m_lambda[iter2][i][0] > MALPHA_TOLERANCE)) { lse_do_arr[i] = 1; lse_do++; } else { lse_do_arr[i] = 0; if (i==0) break; } } for (i=0; i1) schmidt(tr_cmp_cncoe, nroots, L, outfile); /* transpose the cmp_cncoe matrix to prepare for schmidt orthog */ for (i=0; iovlpmax) ovlpmax = tval; } } Cvec.buf_unlock(); Dvec.buf_unlock(); /* do all the Sigmas */ Sigma.buf_lock(buffer1); Dvec2.buf_lock(buffer2); for (j=0; j 1 */ if (L2 != L3) { printf("(sem_iter): L2 != L3. Bad. \n"); fprintf(outfile,"(sem_iter): L2 != L3. Bad. \n"); } Cvec.restart_reord_fp(maxnvect-L2); Cvec2.restart_reord_fp(maxnvect-L2); Cvec.write_new_first_buf(); Sigma.restart_reord_fp(maxnvect-L3); Sigma2.restart_reord_fp(maxnvect-L3); Sigma.write_new_first_buf(); Cvec.set_nvect(L2); Cvec2.set_nvect(L2); Sigma.set_nvect(L3); Sigma2.set_nvect(L3); Cvec.write_num_vecs(L2); Sigma.write_num_vecs(L3); L = L2; Llast = L; iter2 = 0; Lvec[0] = L; #ifdef DEBUG fprintf(outfile, "L = %d, L2 = %d, L3 = %d\n",L, L2, L3); #endif /* write file_offset and file_number array out to detci.dat */ /* Cvec.write_detfile(CI_VEC); Sigma.write_detfile(SIGMA_VEC); if (Parameters.print_lvl > 1) fprintf(outfile,"Restart info written.\n"); fflush(outfile); */ if (Parameters.nodfile) { Dvec.set_nvect(L2); Dvec2.set_nvect(L3); //Dvec.reset_detfile(CI_VEC); //Dvec2.reset_detfile(SIGMA_VEC); Dvec.restart_reord_fp(maxnvect-1); Dvec2.restart_reord_fp(maxnvect-1); } /* Schmidt-Orthogonalize again to ensure numerical stability */ if (ovlpmax > S_MAX) { Cvec.buf_lock(buffer1); Cvec2.buf_lock(buffer2); L2 = L3 = 1; zero_mat(clpse_dot,maxnvect,maxnvect); zero_arr(clpse_norm,nroots); for (j=1; j S_MAX) fprintf(outfile,"Near degeneracy in b space\n"); Cvec.buf_unlock(); Cvec2.buf_unlock(); Sigma.buf_lock(buffer1); Sigma2.buf_lock(buffer2); for (j=1; j 1) { fprintf(outfile, "Exact Sigma: (redid multiplication) H * b[%d] = \n", i); Sigma.print(outfile); } } } */ /* Reforming G matrix after collapse */ for (i=0; i 4) { fprintf(outfile, "\n G eigenvectors and eigenvalues:\n"); eivout(alpha[iter2], lambda[iter2], L, L, outfile); } Cvec.buf_unlock(); Sigma.buf_unlock(); if (print_lvl > 1) { fprintf(outfile," Collapsed Davidson subspace to %d vectors\n",L); if (lse_do) { fprintf(outfile," Least Squares Extrapolation for Root%c", (lse_do>1) ? 's' : ' '); for (i=0; i 4), outfile, E_est); } else if (Parameters.update == UPDATE_OLSEN) { /* Compute x and y values for E_est */ Cvec.buf_lock(buffer1); Dvec.buf_lock(buffer2); for (i=0; i=PRECON_GEN_DAVIDSON) H0block_xy(&x[i],&y[i],lambda[iter2][i]); /* fprintf(outfile, "Modified x[%d] = %lf y[%d] = %lf\n",i,x[i],i,y[i]); */ E_est[i] = y[i]/x[i]; /* fprintf(outfile,"E_est[%d] = %20.12f lambda[%d] = %20.12f\n",i, E_est[i]+efzc+enuc,i,lambda[iter2][i]+efzc+enuc); */ } Dvec.dcalc(nroots,L,alpha[iter2],lambda[iter2],dvecnorm,Cvec,Sigma, buffer1,buffer2,root_converged,(print_lvl > 4),outfile,E_est); } else { fprintf(outfile, "UPDATE option not recognized. Choose DAVIDSON or OLSEN\n"); exit(0); } Cvec.copy_zero_blocks(Sigma); /* check for convergence */ converged = 1; for (i=0; i 1) fprintf(outfile, "\n"); if (iter == maxiter) { fprintf(outfile, "\nMaximum number of iterations reached\n"); } if (converged || iter == maxiter) { fflush(outfile); Cvec.buf_lock(buffer1); Dvec.buf_lock(buffer2); //if (Parameters.nodfile) Dvec.reset_detfile(CI_VEC); for (i=0; i 1) { fprintf(outfile, " (%6.4lf eV, %9.2lf 1/cm)\n", (evals[i] - evals[0]) * _hartree2ev, (evals[i] - evals[0]) * _hartree2wavenumbers); } else fprintf(outfile, "\n"); if (Parameters.print_lvl) { zero_arr(mi_coeff, Parameters.nprint); Dvec.max_abs_vals(Parameters.nprint, mi_iac, mi_ibc, mi_iaidx, mi_ibidx, mi_coeff, Parameters.neg_only); print_vec(Parameters.nprint, mi_iac, mi_ibc, mi_iaidx, mi_ibidx, mi_coeff, AlphaG, BetaG, alplist, betlist, outfile); fprintf(outfile, "\n"); } Dvec.write_num_vecs(i+1); // only if nodfile ? } Cvec.buf_unlock(); Dvec.buf_unlock(); break; } else { for (i=0; i= PRECON_GEN_DAVIDSON && (iter >= 1)) { if (Parameters.h0block_coupling && (iter >= 2)) H0block_coupling_calc(lambda[iter2][k]+efzc, alplist, betlist); Dvec.h0block_buf_precon(&tval, k); } if (tval < 1.0E-13 && print_lvl > 0) { fprintf(outfile,"Warning: Norm of " "correction (root %d) is < 1.0E-13\n", k); } Dvec.read(k,0); if (Parameters.zero_det) { tval -= Dvec.zero_det(Parameters.zero_det_Iac, Parameters.zero_det_Iaridx, Parameters.zero_det_Ibc, Parameters.zero_det_Ibridx); } tval = sqrt(1.0 / tval); Dvec.symnorm(tval,0,0); if (print_lvl > 4) { fprintf(outfile, "\nsecond d matrix root %d\n", k); Dvec.print(outfile); } Hd.buf_unlock(); Cvec.buf_lock(buffer2); /* Schmidt orthog and append d's to b */ if (Dvec.schmidt_add(Cvec, L)) L++; Cvec.buf_unlock(); if (L > maxnvect) { fprintf(outfile, "(sem_iter): L(%2d) > maxnvect(%2d)!",L,maxnvect); fprintf(outfile, " Aborting!\n"); exit(0); } } /* end loop over roots for new expansion vectors */ Dvec.buf_unlock(); Cvec.write_num_vecs(L); /* MLL Debug 1-8-98 If CI vector is converged too tight the ** norm of the correction vector i.e. the residual vector ** may become exceedingly small resulting in numerical instabilities */ /* Cvec.buf_lock(buffer1); for (i=0; i 0) { fzc_occ = (short int *) malloc(CalcInfo.num_fzc_orbs*sizeof(short int)); for (int l=0; lnum_el > BetaG->num_el) ? AlphaG->num_el : BetaG->num_el)*sizeof(unsigned char)); stringset_init(&alphastrings,AlphaG->num_str,AlphaG->num_el, CalcInfo.num_fzc_orbs, fzc_occ); int list_gr = 0; int offset = 0; for(irrep=0; irrepnirreps; irrep++) { for(gr=0; grsubgr_per_irrep; gr++,list_gr++) { int nlists_per_gr = AlphaG->sg[irrep][gr].num_strings; for(l=0; lnum_el; n++) { newocc[n] = (unsigned char) CalcInfo.order[alplist[list_gr][l].occs[n] + CalcInfo.num_fzc_orbs]; } stringset_add(&alphastrings,l+offset,newocc); } offset += nlists_per_gr; } } stringset_init(&betastrings,BetaG->num_str,BetaG->num_el, CalcInfo.num_fzc_orbs, fzc_occ); list_gr = 0; offset = 0; for(irrep=0; irrepnirreps; irrep++) { for(gr=0; grsubgr_per_irrep; gr++,list_gr++) { int nlists_per_gr = BetaG->sg[irrep][gr].num_strings; for(l=0; lnum_el; n++) { newocc[n] = (unsigned char) CalcInfo.order[betlist[list_gr][l].occs[n] + CalcInfo.num_fzc_orbs]; } stringset_add(&betastrings,l+offset,newocc); } offset += nlists_per_gr; } } free(newocc); if (CalcInfo.num_fzc_orbs > 0) free(fzc_occ); int ii; int size = CIblks.vectlen; int Iarel, Ialist, Ibrel, Iblist; slaterdetset_init(&dets,size,&alphastrings,&betastrings); for (ii=0; iisubgr_per_irrep; int gr = Ialist%AlphaG->subgr_per_irrep; int Ia = Iarel + AlphaG->list_offset[Ialist]; irrep = Iblist/BetaG->subgr_per_irrep; gr = Iblist%BetaG->subgr_per_irrep; int Ib = Ibrel + BetaG->list_offset[Iblist]; slaterdetset_add(&dets, ii, Ia, Ib); } // Don't init, don't need the memory allocated // slaterdetvector_init(&vec, &dets); Dvec.buf_lock(buffer1); for (ii=0; ii #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define MAX_B_ROWS 200 #define MIN_F_DENOM 1.0E-3 /*** do a little test routine main() { double **A ; double *evals, **evecs ; int i, j, used; void sem() ; FILE *outfile ; ffile(&outfile, "output.dat", 0) ; tstart(outfile) ; A = init_matrix(50,50) ; evals = init_array(4) ; evecs = init_matrix(4, 50) ; for (i=0; i<50; i++) { for (j=0; j<=i; j++) { if (i!=j) {A[i][j] = 1.0; A[j][i] = 1.0; } else if (i<5) A[i][j] = 1.0 + 0.1 * (double) i ; else A[i][j] = 2.0 * (double) i + 1.0; } } sem(A, 50, 4, evecs, evals, 1.0E-10, 6, &used); fprintf(outfile, "Ok, the eigenvectors are sideways!\n"); eivout(evecs, evals, 4, 50, outfile); fprintf(outfile, "\nused %d expansion vectors\n", used); tstop(outfile); fclose(outfile); } ***/ /* ** sem(): Use Liu's Simultaneous Expansion Method to find the lowest ** few eigenvalues of a real matrix. ** ** Arguments: ** A = matrix to find eigenvalues of ** N = size of matrix ** M = number of eigenvalues to solve for ** L = number of initial vectors in subspace ** evecs = matrix for eigenvectors ** evals = array for eigenvalues ** b = set of subspace vectors (dimensions maxiter x N) ** space for rows i < L should not yet be allocated!! ** conv_e = convergence tolerance. The lowest energy eigenvalue must ** be converged to within this range. It is interesting ** that higher roots _may_ converge faster. ** conv_rms = the required tolerance for convergence of the CI correction ** vector ** maxiter = max number of iterations allowed ** offst = offset to add to eigenvalues in printing (e.g. enuc) ** vu = pointer to int to hold how many expansion vectors used ** outfile = output file ** ** Returns: none */ void sem_test(double **A, int N, int M, int L, double **evecs, double *evals, double **b, double conv_e, double conv_rms, int maxiter, double offst, int *vu, int maxnvect, FILE *outfile) { double *tmp_vec, **tmp_mat ; double **jnk; int sm_tridim; double *sm_mat; double *sm_evals; double **sm_evecs; int i, j, ij, k, I; double **G, **d; double *lambda, **alpha, **f ; double *converged_root; double **m_lambda, ***m_alpha; double tval, *dvecnorm; int converged=0, iter=1; int iter2=0; /* iterations since last collapse */ double *lastroot; int lse_do=0, last_lse_collapse_num=-Parameters.lse_collapse, collapse_num=0; double lse_tolerance=5e-3; double **sigma_overlap, ***Mmatrix; int *Lvec; /* check parameters */ if (evecs == NULL || evals == NULL) { printf("(sem): passed uncallocated pointers for evecs or evals\n") ; return ; } for (I=0; I=3) { fprintf(outfile,"\n b matrix\n"); print_mat(b,L,N,outfile); fprintf(outfile,"\n sigma matrix\n"); print_mat(tmp_mat,L,N,outfile); fprintf(outfile,"\n G matrix (%d)\n", iter-1); print_mat(G,L,L,outfile); fprintf(outfile,"\n Eigenvectors and eigenvalues of G matrix (%d)\n", iter-1); eivout(alpha, lambda, L, L, outfile); } lse_do = 0; if (Parameters.lse && (maxnvect-L <= M*Parameters.collapse_size) && L>2 && (lse_tolerance > fabs(lambda[0]-lastroot[0])) && iter>=3 && ((collapse_num-last_lse_collapse_num)>= Parameters.lse_collapse)) lse_do = 1; if (lse_do) { /* Form sigma_overlap matrix */ zero_mat(sigma_overlap,maxnvect,maxnvect); mmult(b, 0, A, 0, tmp_mat, 0, L, N, N, 0); mmult(tmp_mat, 0, tmp_mat, 1, sigma_overlap, 0, L, N, L, 0); /* Form Mij matrix */ for (k=0; k 2) { fprintf(outfile, "\nsigma_overlap matrix (%2d) = \n", iter-1); print_mat(sigma_overlap, L, L, outfile); for (k=0; k 2) { fprintf(outfile, "\n M eigenvectors and eigenvalues root %d:\n",k); eivout(m_alpha[k], m_lambda[k], L, L, outfile); } } } /* end if lse_do */ if ((Parameters.collapse_size>0) && (iter2-Parameters.collapse_size+1 > 0) && (Lvec[iter2-Parameters.collapse_size+1]+M*Parameters.collapse_size > maxnvect) && iter!=maxiter) { collapse_num++; if (lse_do) last_lse_collapse_num = collapse_num; /* copy ci vector into d matrix */ zero_mat(d, M, N); if (lse_do) for (k=0; k= 3) { fprintf(outfile," Reformed G matrix (%d)\n",iter-1); print_mat(G,L,L,outfile); fprintf(outfile,"\n"); } if (lse_do) fprintf(outfile," Least Squares Extrapolation\n"); fprintf(outfile," Collapse Davidson subspace to %d vectors\n", L); } /* end collapse */ /* form the d part of the correction vector */ zero_mat(d, M, N); for (k=0; k= 3) { fprintf(outfile," D vectors for iter (%d)\n",iter-1); print_mat(d,M,N,outfile); } /* check for convergence */ converged = 1; for (i=0; i1) { fprintf(outfile, "\n"); fflush(outfile); } if (converged || iter == maxiter) { for (i=0; i maxnvect) { fprintf(outfile, "(test_sem): L(%2d) > maxnvect(%2d)!",L,maxnvect); fprintf(outfile, " Aborting!\n"); exit(0); } /* Again Schmidt orthog b's (minimize numerical error) */ /* Doesn't this mess up the sigma vectors slightly */ schmidt(b, L, N, outfile); iter++ ; iter2++; } *vu = L; free(lambda); free(tmp_vec); free_matrix(d, M); free_matrix(f, M); free_matrix(b, maxnvect); free_matrix(G, maxnvect); free_matrix(tmp_mat, maxnvect); free_matrix(alpha, maxnvect); free_matrix(sigma_overlap, maxnvect); for (i=0; i #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { extern int og_lex_addr(struct olsen_graph *Graph, int *occs, int nel, int *listnum); extern void print_ciblk_summary(FILE *outfile); void set_ciblks(struct olsen_graph *AlphaG, struct olsen_graph *BetaG) { int *occs, *occs2; int i, j, k, l, m, irrep, cnt, cnt2, betirrep; int betsocc; /* number of beta singly occupied orbitals accounted for */ int alp_sym, bet_sym; int nalp1, nalp3, alpcode, nbet1, nbet3, betcode; int nalp4, nbet4, maxblk, xlvl; int nas, nbs; int nblocks=0; double orbsum = 0.0; int set = 0; CalcInfo.num_alp_str = AlphaG->num_str; CalcInfo.num_bet_str = BetaG->num_str; xlvl = Parameters.ex_lvl; if (Parameters.print_lvl) { fprintf(outfile, "\nThere are %d alpha strings\n", CalcInfo.num_alp_str); fprintf(outfile, "There are %d beta strings\n", CalcInfo.num_bet_str); } /* Get the occupations for the reference alpha and beta strings. * This used to be one line (occupy orbitals 0 to CalcInfo.num_alp_expl) * but now it's got to be more complicated due to orbital renumbering * (now by RAS then by symm then by energy) and due to open-shell * cases. Assume that occupied orbs in reference belong only to RAS I * or RAS II. Should add a check for this sometime. The following * routine is by MLL and CDS 11/96. Modified to put RAS II occs in * separate array because otherwise you get strings like |0 1 3 2>. */ occs = init_int_array(CalcInfo.num_alp_expl); occs2 = init_int_array(CalcInfo.num_alp_expl); betsocc = 0; cnt = 0; cnt2 = 0; for (i=0; ilist_offset[CalcInfo.ref_alp_list]; alp_sym = CalcInfo.ref_alp_list / AlphaG->subgr_per_irrep; if (CalcInfo.iopen) { betsocc = 0; cnt = 0; cnt2 = 0; zero_int_array(occs, CalcInfo.num_alp_expl); for (i=0; ilist_offset[CalcInfo.ref_bet_list]; bet_sym = CalcInfo.ref_bet_list / BetaG->subgr_per_irrep; } else { /* closed-shell case */ CalcInfo.ref_bet = CalcInfo.ref_alp; bet_sym = alp_sym; CalcInfo.ref_bet_list = CalcInfo.ref_alp_list; CalcInfo.ref_bet_rel = CalcInfo.ref_alp_rel; } if (Parameters.ref_sym == -1) CalcInfo.ref_sym = alp_sym ^ bet_sym; else CalcInfo.ref_sym = Parameters.ref_sym; /* form the new CIvect structure...watch for codex's with no strings...*/ CIblks.num_blocks = 0; CIblks.num_alp_codes = AlphaG->nirreps * AlphaG->subgr_per_irrep; CIblks.num_bet_codes = BetaG->nirreps * BetaG->subgr_per_irrep; CIblks.decode = init_int_matrix(CIblks.num_alp_codes, CIblks.num_bet_codes); /* figure out the possible alpha/beta combinations */ if (Parameters.fci_strings) { for (irrep=0; irrepnirreps; irrep++) { betirrep = irrep ^ CalcInfo.ref_sym; if (AlphaG->sg[irrep][0].num_strings && BetaG->sg[betirrep][0].num_strings) { CIblks.Ia_code[nblocks] = irrep; CIblks.Ib_code[nblocks] = betirrep; CIblks.Ia_size[nblocks] = AlphaG->sg[irrep][0].num_strings; CIblks.Ib_size[nblocks] = BetaG->sg[betirrep][0].num_strings; nblocks++; } } } else { for (irrep=0; irrepnirreps; irrep++) { for (nalp1=AlphaG->ras1_max; nalp1>=AlphaG->ras1_min; nalp1--) { for (nalp3=0; nalp3<=AlphaG->ras3_max; nalp3++) { for (nalp4=0; nalp4<=AlphaG->ras4_max; nalp4++) { alpcode=AlphaG->decode[nalp1-AlphaG->ras1_min][nalp3][nalp4]; if (alpcode == -1) continue; nas = AlphaG->sg[irrep][alpcode].num_strings; if (!nas) continue; for (nbet1=BetaG->ras1_max; (nbet1>=Parameters.ras1_min-nalp1 && nbet1>=BetaG->ras1_min); nbet1--) { for (nbet3=0; (nbet3<=Parameters.ras3_max-nalp3 && nbet3<=BetaG->ras3_max); nbet3++) { if (!Parameters.mixed && (nalp3 || nbet3) && (AlphaG->ras1_max - nalp1 + BetaG->ras1_max - nbet1 > xlvl)) continue; for (nbet4=0; (nbet4<=Parameters.ras4_max-nalp4 && nbet4<=BetaG->ras4_max); nbet4++) { if (nalp3 + nalp4 + nbet3 + nbet4 > Parameters.ras34_max) continue; if (!Parameters.mixed4 && (nalp4 || nbet4) && (AlphaG->ras1_max - nalp1 + BetaG->ras1_max - nbet1 > xlvl)) continue; if (!Parameters.cc_mixed && nalp3+nalp4+nbet3+nbet4 > xlvl && (nalp4>2 || nbet4>2 || nalp1-AlphaG->ras1_min > 2 || nbet1-BetaG->ras1_min > 2)) continue; /* add special constraint if we want to kick out any determinants which would not be included in (spin-complete) DETCI translations of Anna Krylov's SF-CI stuff CDS 3/19/02 */ if (Parameters.sf_restrict && (nalp4 || nbet4) && (nalp1ras1_max || nbet1ras1_max) && (nalp3+nbet3==0)) continue; betcode = BetaG->decode[nbet1-BetaG->ras1_min][nbet3][nbet4]; if (betcode == -1) continue; betirrep = irrep ^ CalcInfo.ref_sym; nbs = BetaG->sg[betirrep][betcode].num_strings; if (!nbs) continue; /* add nonstandard excitation types, such as CID, CIST, CIDTQ, etc. Parameters.ex_type[0] = Single excitations Parameters.ex_type[1] = Double excitations etc. MLA 12/16/03 */ set = 0; for (i=0; isubgr_per_irrep * irrep + alpcode; CIblks.Ia_size[nblocks] = nas; CIblks.Ib_code[nblocks] = BetaG->subgr_per_irrep * betirrep + betcode; CIblks.Ib_size[nblocks] = nbs; nblocks++; } /* end loop over nbet4 */ } /* end loop over nbet3 */ } /* end loop over nbet1 */ } /* end loop over nalp4 */ } /* end loop over nalp3 */ } /* end loop over nalp1 */ } /* end loop over irrep */ } /* end RAS case */ /* get the first_iablk[] and last_iablk[] arrays */ CIblks.first_iablk = init_int_array(AlphaG->nirreps); CIblks.last_iablk = init_int_array(AlphaG->nirreps); for (irrep=0; irrep < AlphaG->nirreps; irrep++) { for (i=0; isubgr_per_irrep; if (j == irrep) break; } if (j == irrep) CIblks.first_iablk[irrep] = i; else CIblks.first_iablk[irrep] = -1; } for (irrep=0; irrep < AlphaG->nirreps; irrep++) { maxblk = -2; for (i=0; isubgr_per_irrep; if (j == irrep && i > maxblk) maxblk = i; } CIblks.last_iablk[irrep] = maxblk; } /* calculate the offsets */ CIblks.num_blocks = nblocks; if (Parameters.print_lvl) fprintf(outfile, "CI space contains %4d blocks\n", nblocks); if (nblocks > CI_BLK_MAX) { fprintf(outfile, "nblocks = %d > CI_BLK_MAX = %d\n", nblocks, CI_BLK_MAX); exit(0); } CIblks.offset[0] = 0; for (i=1; i #include #include #include #include #include #include "structs.h" #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) #define EXTERN #include "globals.h" namespace psi { namespace detci { void zapt_shift(double *TEI, int nirreps, int nmo, int *doccpi, int *soccpi, int *orbspi, int *frzdoccpi, int *reorder) { int h1, h2; int x, y, i, j; int offset, offset2; int ij, ijij; int docc, socc; int docc2, socc2; int totfzc; for(h1=0,totfzc=0; h10) offset += orbspi[h1-1]; docc = doccpi[h1]; socc = soccpi[h1]; for(x = offset+docc; x0) offset2 += orbspi[h2-1]; docc2 = doccpi[h2]; socc2 = soccpi[h2]; for(y=offset2+docc2;y #include #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" #include "civect.h" namespace psi { namespace detci { extern void transp_sigma(double **a, int rows, int cols, int phase); extern void H0block_gather(double **mat, int al, int bl, int cscode, int mscode, int phase); extern void b2brepl(unsigned char **occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph, int Ilist, int Jlist, int len); extern void b2brepl_test(unsigned char ***occs, int *Jcnt, int **Jij, int **Joij, int **Jridx, signed char **Jsgn, struct olsen_graph *Graph); extern void s3_block_bz(int Ialist, int Iblist, int Jalist, int Jblist, int nas, int nbs, int cnas, double *tei, double **C, double **S, double **Cprime, double **Sprime); extern void set_row_ptrs(int rows, int cols, double **matrix); #ifdef OLD_CDS_ALG extern void s1_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s2_block_fci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas); extern void s1_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s1_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs); extern void s2_block_ras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sac, int cac, int cnas); extern void s2_block_ras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nbs); extern void s3_block(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list); extern void s3_block_diag(struct stringwr *alplist,struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int Ja_list, int Jb_list); extern void s3_block_diag_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs); extern void s3_block_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sgn[2], double **C, double **S, double *tei, int nas, int nbs); #else extern void s1_block_vfci_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs); extern void s1_block_vfci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs); extern void s1_block_vras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s1_block_vras_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sbc, int cbc, int cnbs); extern void s1_block_vras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ib_list, int Jb_list, int Jb_list_nbs); extern void s2_block_vfci_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas); extern void s2_block_vfci(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nas); extern void s2_block_vras(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sac, int cac, int cnas); extern void s2_block_vras_thread(struct stringwr **alplist, struct stringwr **betlist, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int sac, int cac, int cnas); extern void s2_block_vras_rotf(int *Cnt[2], int **Ij[2], int **Oij[2], int **Ridx[2], signed char **Sgn[2], unsigned char **Toccs, double **C, double **S, double *oei, double *tei, double *F, int nlists, int nas, int nbs, int Ia_list, int Ja_list, int Ja_list_nbs); extern void s3_block_vdiag(struct stringwr *alplist, struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int cnas, int Ib_list, int Ja_list, int Jb_list, int Ib_sym, int Jb_sym, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R); extern void s3_block_v(struct stringwr *alplist,struct stringwr *betlist, double **C, double **S, double *tei, int nas, int nbs, int cnas, int Ib_list, int Ja_list, int Jb_list, int Ib_sym, int Jb_sym, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R); extern void s3_block_vrotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sn[2], double **C, double **S, double *tei, int nas, int nbs, int cnas, int Ib_list, int Ja_list, int Jb_list, int Ib_sym, int Jb_sym, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R); extern void s3_block_vdiag_rotf(int *Cnt[2], int **Ij[2], int **Ridx[2], signed char **Sn[2], double **C, double **S, double *tei, int nas, int nbs, int cnas, int Ib_list, int Ja_list, int Jb_list, int Ib_sym, int Jb_sym, double **Cprime, double *F, double *V, double *Sgn, int *L, int *R); #endif extern unsigned char ***Occs; extern struct olsen_graph *AlphaG; extern struct olsen_graph *BetaG; extern int cc_reqd_sblocks[CI_BLK_MAX]; /* FUNCTION PROTOS THIS MODULE */ void sigma_block(struct stringwr **alplist, struct stringwr **betlist, double **cmat, double **smat, double *oei, double *tei, int fci, int cblock, int sblock, int nas, int nbs, int sac, int sbc, int cac, int cbc, int cnas, int cnbs, int cnac, int cnbc, int sbirr, int cbirr, int Ms0); /* GLOBALS THIS MODULE */ int sigma_initialized=0; double *F; int **Jij[2]; int **Joij[2]; int **Jridx[2]; signed char **Jsgn[2]; int *Jcnt[2]; unsigned char **Toccs; double **transp_tmp = NULL; double **cprime = NULL, **sprime = NULL; #ifndef OLD_CDS_ALG double *V, *Sgn; int *L, *R; #endif /* ** sigma_init() ** ** This function initializes all the globals associated with calculating ** the sigma vector. ** */ void sigma_init(CIvect& C, CIvect &S, struct stringwr **alplist, struct stringwr **betlist) { int i,j; int maxcols=0, maxrows=0; int nsingles, max_dim=0; unsigned long int bufsz=0; if (sigma_initialized) { printf("(sigma_init): sigma_initialized already set to 1\n"); return; } for (i=0; i max_dim) max_dim = C.Ib_size[i]; if (C.Ia_size[i] > max_dim) max_dim = C.Ia_size[i]; } F = init_array(max_dim); #ifndef OLD_CDS_ALG Sgn = init_array(max_dim); V = init_array(max_dim); L = init_int_array(max_dim); R = init_int_array(max_dim); #endif if (Parameters.repl_otf) { max_dim += AlphaG->num_el_expl; nsingles = AlphaG->num_el_expl * AlphaG->num_orb; for (i=0; i<2; i++) { Jcnt[i] = init_int_array(max_dim); Jij[i] = init_int_matrix(max_dim, nsingles); Joij[i] = init_int_matrix(max_dim, nsingles); Jridx[i] = init_int_matrix(max_dim, nsingles); Jsgn[i] = (signed char **) malloc (max_dim * sizeof(signed char *)); for (j=0; j maxrows) maxrows = C.Ia_size[i]; if (C.Ib_size[i] > maxcols) maxcols = C.Ib_size[i]; } if (maxcols > maxrows) maxrows = maxcols; transp_tmp = (double **) malloc (maxrows * sizeof(double *)); if (transp_tmp == NULL) { printf("(sigma_init): Trouble with malloc'ing transp_tmp\n"); } bufsz = C.get_max_blk_size(); transp_tmp[0] = init_array(bufsz); if (transp_tmp[0] == NULL) { printf("(sigma_init): Trouble with malloc'ing transp_tmp[0]\n"); } } /* make room for cprime and sprime if necessary */ for (i=0, maxrows=0; i maxrows) maxrows = C.Ia_size[i]; if (C.Ib_size[i] > maxcols) maxcols = C.Ib_size[i]; } if ((C.icore==2 && C.Ms0 && CalcInfo.ref_sym != 0) || (C.icore==0 && C.Ms0)) { if (maxcols > maxrows) maxrows = maxcols; } bufsz = C.get_max_blk_size(); #ifndef OLD_CDS_ALG cprime = (double **) malloc (maxrows * sizeof(double *)); if (cprime == NULL) { printf("(sigma_init): Trouble with malloc'ing cprime\n"); } if (C.icore==0 && C.Ms0 && transp_tmp != NULL && transp_tmp[0] != NULL) cprime[0] = transp_tmp[0]; else cprime[0] = init_array(bufsz); if (cprime[0] == NULL) { printf("(sigma_init): Trouble with malloc'ing cprime[0]\n"); } if (Parameters.bendazzoli) { sprime = (double **) malloc (maxrows * sizeof(double *)); if (sprime == NULL) { printf("(sigma_init): Trouble with malloc'ing sprime\n"); } sprime[0] = init_array(bufsz); if (sprime[0] == NULL) { printf("(sigma_init): Trouble with malloc'ing sprime[0]\n"); } } #else if (Parameters.bendazzoli) { cprime = (double **) malloc (maxrows * sizeof(double *)); if (cprime == NULL) { printf("(sigma_init): Trouble with malloc'ing cprime\n"); } if (C.icore==0 && C.Ms0 && transp_tmp != NULL && transp_tmp[0] != NULL) cprime[0] = transp_tmp[0]; else cprime[0] = init_array(bufsz); if (cprime[0] == NULL) { printf("(sigma_init): Trouble with malloc'ing cprime[0]\n"); } sprime = (double **) malloc (maxrows * sizeof(double *)); if (sprime == NULL) { printf("(sigma_init): Trouble with malloc'ing sprime\n"); } sprime[0] = init_array(bufsz); if (sprime[0] == NULL) { printf("(sigma_init): Trouble with malloc'ing sprime[0]\n"); } } #endif sigma_initialized = 1; } /* ** sigma() ** ** Routine to get the sigma vector using the CI vector class ** ** Changed into a master function which calls the appropriate subfunction ** */ void sigma(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int ivec) { if (!sigma_initialized) sigma_init(C, S, alplist, betlist); switch (C.icore) { case 0: sigma_a(alplist, betlist, C, S, oei, tei, fci, ivec); break; case 1: sigma_b(alplist, betlist, C, S, oei, tei, fci, ivec); break; case 2: sigma_c(alplist, betlist, C, S, oei, tei, fci, ivec); break; default: fprintf(stderr, "(sigma): Error, invalid icore option\n"); break; } } /* ** sigma_a(): This function computes the sigma vector for a given C vector ** using the CIvector class. Is somewhat intelligent about constructing ** the sigma vector blockwise; will attempt to reduce I/O for out-of-core ** cases. This version is for icore==0. ** ** Parameters: ** alplist = list of alpha strings with replacements ** betlist = same for beta strings ** C = current ci vector ** S = sigma vector to be computed ** oei = one-electron integrals ** tei = two-electron integrals ** fci = full-ci flag (helps determine which sigma1 routine called) ** ivec = sigma vector number (for write call) ** ** Notes: assumes M_s = 0 for now */ void sigma_a(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int ivec) { int buf, cbuf; int sblock, cblock, cblock2; /* id of sigma and C blocks */ int i,j,k; int sac, sbc, nas, nbs; int cac, cbc, cnas, cnbs; int do_cblock, do_cblock2; int cairr, cbirr, sbirr; int did_sblock = 0; int phase; if (!Parameters.Ms0) phase = 1; else phase = ((int) Parameters.S % 2) ? -1 : 1; /* this does a sigma subblock at a time: icore==0 */ for (buf=0; bufsubgr_per_irrep; if (sprime != NULL) set_row_ptrs(nas, nbs, sprime); for (cbuf=0; cbufsubgr_per_irrep; cairr = cac / AlphaG->subgr_per_irrep; if (C.Ms0) cblock2 = C.decode[cbc][cac]; cnas = C.Ia_size[cblock]; cnbs = C.Ib_size[cblock]; if (s1_contrib[sblock][cblock] || s2_contrib[sblock][cblock] || s3_contrib[sblock][cblock]) do_cblock = 1; if (C.buf_offdiag[cbuf] && (s1_contrib[sblock][cblock2] || s2_contrib[sblock][cblock2] || s3_contrib[sblock][cblock2])) do_cblock2 = 1; if (C.check_zero_block(cblock)) do_cblock = 0; if (cblock2 >= 0 && C.check_zero_block(cblock2)) do_cblock2 = 0; if (!do_cblock && !do_cblock2) continue; C.read(C.cur_vect, cbuf); if (do_cblock) { if (cprime != NULL) set_row_ptrs(cnas, cnbs, cprime); sigma_block(alplist, betlist, C.blocks[cblock], S.blocks[sblock], oei, tei, fci, cblock, sblock, nas, nbs, sac, sbc, cac, cbc, cnas, cnbs, C.num_alpcodes, C.num_betcodes, sbirr, cbirr, S.Ms0); did_sblock = 1; } /* what's with this bcopy stuff? what's going on? -DS 6/11/96 */ /* I think I should copy to cblock2 not cblock */ if (do_cblock2) { C.transp_block(cblock, transp_tmp); // bcopy((char *) transp_tmp[0], (char *) C.blocks[cblock][0], // cnas * cnbs * sizeof(double)); // bcopy is non-ANSI. memcpy reverses the arguments. memcpy((void *) C.blocks[cblock][0], (void *) transp_tmp[0], cnas * cnbs * sizeof(double)); /* set_row_ptrs(cnbs, cnas, C.blocks[cblock]); */ if (cprime != NULL) set_row_ptrs(cnbs, cnas, cprime); sigma_block(alplist, betlist, C.blocks[cblock2], S.blocks[sblock], oei, tei, fci, cblock2, sblock, nas, nbs, sac, sbc, cbc, cac, cnbs, cnas, C.num_alpcodes, C.num_betcodes, sbirr, cairr, S.Ms0); did_sblock = 1; } } /* end loop over c buffers */ if (did_sblock) { S.set_zero_block(sblock, 0); if (S.Ms0) S.set_zero_block(S.decode[sbc][sac], 0); } if (S.Ms0 && (sac==sbc)) transp_sigma(S.blocks[sblock], nas, nbs, phase); H0block_gather(S.blocks[sblock], sac, sbc, 1, Parameters.Ms0, phase); if (S.Ms0) { if ((int) Parameters.S % 2) S.symmetrize(-1.0, sblock); else S.symmetrize(1.0, sblock); } S.write(ivec, buf); } /* end loop over sigma buffers */ } /* ** sigma_b(): This function computes the sigma vector for a given C vector ** using the CIvector class. Is somewhat intelligent about constructing ** the sigma vector blockwise; will attempt to reduce I/O for out-of-core ** cases. This version is for icore=1 (whole vector in-core) ** ** Parameters: ** alplist = list of alpha strings with replacements ** betlist = same for beta strings ** C = current ci vector ** S = sigma vector to be computed ** oei = one-electron integrals ** tei = two-electron integrals ** fci = full-ci flag (helps determine which sigma1 routine called) ** ivec = sigma vector number (for write call) ** ** Notes: I think I removed the M_s = 0 assumption from this one */ void sigma_b(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int ivec) { int sblock, cblock; /* id of sigma and C blocks */ int sac, sbc, nas, nbs; int cac, cbc, cnas, cnbs; int sbirr, cbirr; int did_sblock = 0; int phase; if (!Parameters.Ms0) phase = 1; else phase = ((int) Parameters.S % 2) ? -1 : 1; S.zero(); C.read(C.cur_vect, 0); /* loop over unique sigma subblocks */ for (sblock=0; sblock sac) continue; sbirr = sbc / BetaG->subgr_per_irrep; if (sprime != NULL) set_row_ptrs(nas, nbs, sprime); for (cblock=0; cblocksubgr_per_irrep; if (s1_contrib[sblock][cblock] || s2_contrib[sblock][cblock] || s3_contrib[sblock][cblock]) { if (cprime != NULL) set_row_ptrs(cnas, cnbs, cprime); sigma_block(alplist, betlist, C.blocks[cblock], S.blocks[sblock], oei, tei, fci, cblock, sblock, nas, nbs, sac, sbc, cac, cbc, cnas, cnbs, C.num_alpcodes, C.num_betcodes, sbirr, cbirr, S.Ms0); did_sblock = 1; } } /* end loop over c blocks */ if (did_sblock) S.set_zero_block(sblock, 0); if (S.Ms0 && (sac==sbc)) transp_sigma(S.blocks[sblock], nas, nbs, phase); H0block_gather(S.blocks[sblock], sac, sbc, 1, Parameters.Ms0, phase); } /* end loop over sigma blocks */ if (S.Ms0) { if ((int) Parameters.S % 2) S.symmetrize(-1.0, 0); else S.symmetrize(1.0, 0); } S.write(ivec, 0); } /* ** sigma_c(): This function computes the sigma vector for a given C vector ** using the CIvector class. Is somewhat intelligent about constructing ** the sigma vector blockwise; will attempt to reduce I/O for out-of-core ** cases. This version is for icore=2 (irrep at a time) ** ** Parameters: ** alplist = list of alpha strings with replacements ** betlist = same for beta strings ** C = current ci vector ** S = sigma vector to be computed ** oei = one-electron integrals ** tei = two-electron integrals ** fci = full-ci flag (helps determine which sigma1 routine called) ** ivec = sigma vector number (for write call) ** ** Notes: tried to remove Ms=0 assumption */ void sigma_c(struct stringwr **alplist, struct stringwr **betlist, CIvect& C, CIvect& S, double *oei, double *tei, int fci, int ivec) { int buf, cbuf; int sblock, cblock, cblock2; /* id of sigma and C blocks */ int sairr; /* irrep of alpha string for sigma block */ int cairr; /* irrep of alpha string for C block */ int sbirr, cbirr; int i,j,k; int sac, sbc, nas, nbs; int cac, cbc, cnas, cnbs; int did_sblock = 0; int phase; if (!Parameters.Ms0) phase = 1; else phase = ((int) Parameters.S % 2) ? -1 : 1; for (buf=0; buf= sbc) { H0block_gather(S.blocks[sblock], sac, sbc, 1, Parameters.Ms0, phase); } } if (S.Ms0) { if ((int) Parameters.S % 2) S.symmetrize(-1.0, sairr); else S.symmetrize(1.0, sairr); } S.write(ivec, buf); } /* end loop over sigma irrep */ } /* ** sigma_block() ** ** Calculate the contribution to sigma block sblock from C block cblock ** */ void sigma_block(struct stringwr **alplist, struct stringwr **betlist, double **cmat, double **smat, double *oei, double *tei, int fci, int cblock, int sblock, int nas, int nbs, int sac, int sbc, int cac, int cbc, int cnas, int cnbs, int cnac, int cnbc, int sbirr, int cbirr, int Ms0) { /* SIGMA2 CONTRIBUTION */ if (s2_contrib[sblock][cblock]) { detci_time.s2_before_time = wall_time_new(); #ifndef OLD_CDS_ALG if (fci) { if (Parameters.pthreads) s2_block_vfci_thread(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); else s2_block_vfci(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } else { if (Parameters.repl_otf) { s2_block_vras_rotf(Jcnt, Jij, Joij, Jridx, Jsgn, Toccs, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } else if (Parameters.pthreads) { s2_block_vras_thread(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } else { s2_block_vras(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } } #else if (fci) { s2_block_fci(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } else { if (Parameters.repl_otf) { s2_block_ras_rotf(Jcnt, Jij, Joij, Jridx, Jsgn, Toccs, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } else { s2_block_ras(alplist, betlist, cmat, smat, oei, tei, F, cnac, nas, nbs, sac, cac, cnas); } } #endif detci_time.s2_after_time = wall_time_new(); detci_time.s2_total_time += detci_time.s2_after_time - detci_time.s2_before_time; } /* end sigma2 */ #ifdef DEBUG fprintf(outfile, "s2: Contribution to sblock=%d from cblock=%d\n", sblock, cblock); print_mat(smat, nas, nbs, outfile); #endif /* SIGMA1 CONTRIBUTION */ if (!Ms0 || (sac != sbc)) { detci_time.s1_before_time = wall_time_new(); if (s1_contrib[sblock][cblock]) { #ifndef OLD_CDS_ALG if (fci) { if (Parameters.pthreads) s1_block_vfci_thread(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); else s1_block_vfci(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } else { if (Parameters.repl_otf) { s1_block_vras_rotf(Jcnt, Jij, Joij, Jridx, Jsgn, Toccs, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } else if (Parameters.pthreads) { s1_block_vras_thread(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } else { s1_block_vras(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } } #else if (fci) { s1_block_fci(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } else { if (Parameters.repl_otf) { s1_block_ras_rotf(Jcnt, Jij, Joij, Jridx, Jsgn, Toccs, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } else { s1_block_ras(alplist, betlist, cmat, smat, oei, tei, F, cnbc, nas, nbs, sbc, cbc, cnbs); } } #endif } detci_time.s1_after_time = wall_time_new(); detci_time.s1_total_time += detci_time.s1_after_time - detci_time.s1_before_time; } /* end sigma1 */ #ifdef DEBUG fprintf(outfile, "s1: Contribution to sblock=%d from cblock=%d\n", sblock, cblock); print_mat(smat, nas, nbs, outfile); #endif /* SIGMA3 CONTRIBUTION */ if (s3_contrib[sblock][cblock]) { detci_time.s3_before_time = wall_time_new(); /* zero_mat(smat, nas, nbs); */ if (!Ms0 || (sac != sbc)) { if (Parameters.repl_otf) { b2brepl(Occs[sac], Jcnt[0], Jij[0], Joij[0], Jridx[0], Jsgn[0], AlphaG, sac, cac, nas); b2brepl(Occs[sbc], Jcnt[1], Jij[1], Joij[1], Jridx[1], Jsgn[1], BetaG, sbc, cbc, nbs); #ifndef OLD_CDS_ALG s3_block_vrotf(Jcnt, Jij, Jridx, Jsgn, cmat, smat, tei, nas, nbs, cnas, sbc, cac, cbc, sbirr, cbirr, cprime, F, V, Sgn, L, R); #else s3_block_rotf(Jcnt, Jij, Jridx, Jsgn, cmat, smat, tei, nas, nbs); #endif } else { #ifndef OLD_CDS_ALG s3_block_v(alplist[sac], betlist[sbc], cmat, smat, tei, nas, nbs, cnas, sbc, cac, cbc, sbirr, cbirr, cprime, F, V, Sgn, L, R); #else s3_block(alplist[sac], betlist[sbc], cmat, smat, tei, nas, nbs, cac, cbc); #endif } } else if (Parameters.bendazzoli) { s3_block_bz(sac, sbc, cac, cbc, nas, nbs, cnas, tei, cmat, smat, cprime, sprime); } else { if (Parameters.repl_otf) { b2brepl(Occs[sac], Jcnt[0], Jij[0], Joij[0], Jridx[0], Jsgn[0], AlphaG, sac, cac, nas); b2brepl(Occs[sbc], Jcnt[1], Jij[1], Joij[1], Jridx[1], Jsgn[1], BetaG, sbc, cbc, nbs); #ifndef OLD_CDS_ALG s3_block_vdiag_rotf(Jcnt, Jij, Jridx, Jsgn, cmat, smat, tei, nas, nbs, cnas, sbc, cac, cbc, sbirr, cbirr, cprime, F, V, Sgn, L, R); #else s3_block_diag_rotf(Jcnt, Jij, Jridx, Jsgn, cmat, smat, tei, nas, nbs); #endif } else { #ifndef OLD_CDS_ALG s3_block_vdiag(alplist[sac], betlist[sbc], cmat, smat, tei, nas, nbs, cnas, sbc, cac, cbc, sbirr, cbirr, cprime, F, V, Sgn, L, R); #else s3_block_diag(alplist[sac], betlist[sbc], cmat, smat, tei, nas, nbs, cac, cbc); #endif } } #ifdef DEBUG fprintf(outfile, "s3: Contribution to sblock=%d from cblock=%d\n", sblock, cblock); print_mat(smat, nas, nbs, outfile); #endif detci_time.s3_after_time = wall_time_new(); detci_time.s3_total_time += detci_time.s3_after_time - detci_time.s3_before_time; } /* end sigma3 */ } }} // namespace psi::detci psi3/src/bin/detci/slater.cc0000644000101500007650000000716710757640026014453 0ustar crawdad/*! \file \ingroup DETCI \brief Some of the Slater determinant routines */ #include namespace psi { namespace detci { /* ** calc_orb_diff() ** ** Function calculates the differences in the inputed alpha(beta) strings ** and returns whether this difference is in 0, 1, 2, or more spin orbitals ** ** extended = 0 if strings which differ by > 2 orbitals are not considered ** and 1 if the I and J diff array should be setup for > 2 ** orbital differences. ** */ int calc_orb_diff(int cnt, unsigned char *I, unsigned char *J, int *I_alpha_diff, int *J_alpha_diff, int *sign, int *same, int extended) { register int i = 0; register int j = 0; register int k = 0; int icnt = 0; /* number of counts in I array */ int jcnt = 0; /* number of counts in J array */ int flipI = 0; /* number of flips in I string to have max coincidence */ int flipJ = 0; /* number of flips in J string to have max coincidence */ int ndoI = 0; /* number of different orbitals in I string */ int ndoJ = 0; /* number of different orbitals in J string */ while ((i < cnt) && (j < cnt)) { if (I[i] == J[j]) { same[k] = (int) I[i]; i++; j++; k++; } else if (I[i] < J[j]) { I_alpha_diff[icnt++] = (int) I[i]; flipI += i - ndoI; ndoI++; i++; if ( ((icnt + jcnt) > 4) && !extended) return(-1); } else if (I[i] > J[j]) { J_alpha_diff[jcnt++] = (int) J[j]; flipJ += j - ndoJ; ndoJ++; j++; if ( ((icnt + jcnt) > 4) && !extended) return(-1); } } /* end while loop */ /* Matt: this used to be a bit different...is this version * actually faster? Seemed better the other way but I dunno ..CDS */ if (i != j) { if (i=3) && !extended) return(-1); while (i=3) && !extended) return(-1); while (j same_beta[j]) { common_beta_socc[(*cnt_beta_socc)++] = same_beta[j]; j++; } } /* end top while loop */ while (i #include /* was libc.h */ /* gcc 2.7.0 doesn't like #include */ #include "slaterd.h" namespace psi { namespace detci { extern double get_twoel(int i, int j, int k, int l); extern double get_onel(int i, int j); extern int calc_orb_diff(int cnt, unsigned char *I, unsigned char *J, int *I_alpha_diff, int *J_alpha_diff, int *sign, int *same, int extended); extern void common_orbs(int *same_alpha, int *same_beta, int cnt_alpha, int cnt_beta, int *common_docc, int *common_alpha_socc, int *common_beta_socc, int *cnt_docc, int *cnt_alpha_socc, int *cnt_beta_socc); void SlaterDeterminant::set(unsigned int na, unsigned char *alpoccs, unsigned int nb, unsigned char *betoccs) { int i; if (nalp != na) { if (Occs[0] != NULL) free(Occs[0]); Occs[0] = (unsigned char *) malloc (sizeof(unsigned char) * na); nalp = na; } if (nbet != nb) { if (Occs[1] != NULL) free(Occs[1]); Occs[1] = (unsigned char *) malloc (sizeof(unsigned char) * nb); nbet = nb; } for (i=0; i Occs[1][j]) { fprintf(outfile, "%dB ", Occs[1][j]+1); j++; } } if (i < j) { while (i < nalp) { fprintf(outfile, "%dA ", Occs[0][i]+1); i++; } } else if (i > j) { while (j < nbet) { fprintf(outfile, "%dB ", Occs[1][j]+1); j++; } } fprintf(outfile, "\n") ; } SlaterDeterminant& SlaterDeterminant::operator=(const SlaterDeterminant& s) { if (nalp != s.nalp) { if (Occs[0] != NULL) free(Occs[0]); Occs[0] = (unsigned char *) malloc (sizeof(unsigned char) * s.nalp); } if (nbet != s.nbet) { if (Occs[1] != NULL) free(Occs[1]); Occs[1] = (unsigned char *) malloc (sizeof(unsigned char) * s.nbet); } set(s.nalp, s.Occs[0], s.nbet, s.Occs[1]); return(*this); } int operator ==(SlaterDeterminant& s1, SlaterDeterminant& s2) { int i; if (s1.nalp != s2.nalp || s1.nbet != s2.nbet) return(0); for (i=0; inalp != J->nalp || I->nbet != J->nbet) { fprintf(stderr,"(matrix_element): unequal length alp/bet strings!\n"); return(0.0); } nalp = I->nalp; nbet = I->nbet; if (first_call) { same_alpha = (int *) malloc(sizeof(int) * nalp); same_beta = (int *) malloc(sizeof(int) * nbet); common_alp_socc = (int *) malloc(sizeof(int) * nalp); common_bet_socc = (int *) malloc(sizeof(int) * nbet); common_docc = (int *) malloc(sizeof(int) * nalp); I_diff = (int **) malloc(sizeof(int *) * 2); I_diff[0] = (int *) malloc(sizeof(int) * nalp); I_diff[1] = (int *) malloc(sizeof(int) * nalp); J_diff = (int **) malloc(sizeof(int *) * 2); J_diff[0] = (int *) malloc(sizeof(int) * nalp); J_diff[1] = (int *) malloc(sizeof(int) * nalp); init_nalp = nalp; init_nbet = nbet; first_call = 0; } // make sure that subsequent calls don't change the number of alpha or // beta electrons without re-initializing the static arrays else { if ((nalp != init_nalp) || (nbet != init_nbet)) { fprintf(stderr, "(matrix_element): nalp/nbet != init_nalp/nbet\n"); exit(1); } } alpha_diff = calc_orb_diff(nalp, I->Occs[0], J->Occs[0], I_diff[0], J_diff[0], &sign, same_alpha, 0); beta_diff = calc_orb_diff(nbet, I->Occs[1], J->Occs[1], I_diff[1], J_diff[1], &sign, same_beta, 0); total_diff = alpha_diff + beta_diff ; nalp_same = nalp - alpha_diff ; nbet_same = nbet - beta_diff ; #ifdef DEBUG printf(" alpha_diff = %d\n", alpha_diff) ; printf(" beta_diff = %d\n", beta_diff) ; printf(" total_diff = %d\n", total_diff) ; printf(" sign = %d\n", sign) ; for (i=0; i 2) { return(0.0); } else if (total_diff == 2) { if (alpha_diff == 1) { /* Case 1: 1 in alpha and 1 in beta */ /* assign i,j,k,l for */ i = I_diff[0][0]; j = I_diff[1][0]; k = J_diff[0][0]; l = J_diff[1][0]; #ifdef PRINT_INTS if (sign % 2) printf("-"); #endif val = get_twoel(i,k,j,l); if (sign % 2) val = -val; return(val); } /* end Case 1 */ else if ((alpha_diff == 2) || (beta_diff == 2)) { /* Case 2: 2 in alpha */ if (alpha_diff == 2) diffspin = 0; else diffspin = 1; /* assign */ i = I_diff[diffspin][0]; j = I_diff[diffspin][1]; k = J_diff[diffspin][0]; l = J_diff[diffspin][1]; #ifdef PRINT_INTS if (sign % 2) printf("- [ "); #endif val = get_twoel(i,k,j,l); val -= get_twoel(i,l,j,k); #ifdef PRINT_INTS if (sign % 2) printf(" ] "); #endif if (sign % 2) val = -val; return(val); } /* end else if for differ by 2 in alpha or beta */ else { fprintf(stderr, "Error (matrix_element): total_diff != alpha_diff "); fprintf(stderr, "+ beta_diff\n"); exit(1); } } /* end else if for differ by 2 spin orbitals */ /* Differ by 1 spin orbital */ else if (total_diff == 1) { common_orbs(same_alpha, same_beta, nalp_same, nbet_same, common_docc, common_alp_socc, common_bet_socc, &cnt_docc, &cnt_alp_socc, &cnt_bet_socc); #ifdef DEBUG printf("cnt_docc = %d\n", cnt_docc); printf("cnt_alp_socc = %d\n", cnt_alp_socc); printf("cnt_bet_socc = %d\n", cnt_bet_socc); for (i=0; i before this file ** ** Assume number of alpha electrons is greater than or equal to the number ** of beta electrons ** ** Currently matrix_element() uses static temp arrays which are never free'd. ** The arrays should always be small, so this shouldn't be a problem. The ** malloc'ing is only done once, no matter how many times matrix_element is ** called. */ #ifndef _psi_src_bin_detci_slaterd_h #define _psi_src_bin_detci_slaterd_h namespace psi { namespace detci { class SlaterDeterminant { protected: unsigned nalp; unsigned nbet; unsigned char *Occs[2]; public: SlaterDeterminant() { nalp=0; nbet=0; Occs[0]=NULL; Occs[1]=NULL; } ~SlaterDeterminant() { if (Occs[0] != NULL) free(Occs[0]); if (Occs[1] != NULL) free(Occs[1]); } void set(unsigned int nalp, unsigned char *alpoccs, unsigned int nbet, unsigned char *betoccs); void print(void); void print(FILE *outfile); void print_config(FILE *outfile) ; SlaterDeterminant& operator=(const SlaterDeterminant& s) ; friend int operator==(SlaterDeterminant& s1, SlaterDeterminant& s2) ; friend double matrix_element(SlaterDeterminant* I, SlaterDeterminant* J); }; }} // namespace psi::detci #endif // header guard psi3/src/bin/detci/ssq.cc0000644000101500007650000000651010757640026013756 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Compute expectation value of S^2 ** ** Routine for computing the expectation value of S^2. ** Useful for determining if spin-contamination (due to the davidson ** procedure) is a problem. ** ** 24 June 1997 ** */ /* #define DEBUG */ #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) /* ** SSQ() ** ** Calculates the expectation value of S^2. ** */ double ssq(struct stringwr *alplist, struct stringwr *betlist, double **CL, double **CR, int nas, int nbs, int Ja_list, int Jb_list) { struct stringwr *Ia, *Ib ; unsigned int Ia_ex, Ib_ex; int Ia_idx, Ib_idx; int Ja_idx, Jb_idx; int Ja_sgn, Jb_sgn; int ij, ji, i1, j1, i2, j2; double tval, Ms, S2, smin_spls = 0.0; int Iacnt, Jbcnt, *Iaij, *Ibij; unsigned int *Iaridx, *Ibridx; signed char *Iasgn, *Ibsgn; /* = + ^2 + */ /* First determine the expection value of */ /* loop over Ia */ #ifdef DEBUG fprintf(outfile,"number of alpha strings = %d\n",nas); #endif for (Ia=alplist,Ia_idx=0; Ia_idx < nas; Ia_idx++,Ia++) { /* loop over excitations E^a_{ji} from |A(I_a)> */ Iacnt = Ia->cnt[Ja_list]; Iaridx = Ia->ridx[Ja_list]; Iasgn = Ia->sgn[Ja_list]; Iaij = Ia->oij[Ja_list]; for (Ia_ex=0; Ia_ex < Iacnt; Ia_ex++) { ji = *Iaij++; Ja_idx = *Iaridx++; Ja_sgn = *Iasgn++; i1 = ji/CalcInfo.num_ci_orbs; j1 = ji%CalcInfo.num_ci_orbs; /* loop over Ib */ #ifdef DEBUG fprintf(outfile,"number of beta strings = %d\n",nbs); #endif for (Ib=betlist, Ib_idx=0; Ib_idx < nbs; Ib_idx++, Ib++) { /* loop over excitations E^b_{ij} from |B(I_b)> */ Jbcnt = Ib->cnt[Jb_list]; Ibridx = Ib->ridx[Jb_list]; Ibsgn = Ib->sgn[Jb_list]; Ibij = Ib->oij[Jb_list]; tval = 0.0; for (Ib_ex=0; Ib_ex < Jbcnt; Ib_ex++) { ij = *Ibij++; Jb_idx = *Ibridx++; Jb_sgn = *Ibsgn++; i2 = ij/CalcInfo.num_ci_orbs; j2 = ij%CalcInfo.num_ci_orbs; if (i1!=j2 || i2!=j1) continue; tval += CR[Ia_idx][Ib_idx] * CL[Ja_idx][Jb_idx] * (double) Ja_sgn * (double) Jb_sgn; #ifdef DEBUG fprintf(outfile,"\n\nIa_idx = %d\n",Ia_idx); fprintf(outfile,"Ib_idx = %d\n",Ib_idx); fprintf(outfile,"Ja_idx = %d\n",Ja_idx); fprintf(outfile,"Jb_idx = %d\n",Jb_idx); fprintf(outfile,"tval_ssq = %lf\n",-tval); fprintf(outfile,"CR = %lf\n",CR[Ia_idx][Ib_idx]); fprintf(outfile,"LR = %lf\n",CL[Ja_idx][Jb_idx]); fprintf(outfile,"Ja_sgn = %lf\n",Ja_sgn); fprintf(outfile,"Jb_sgn = %lf\n",Jb_sgn); #endif } smin_spls += tval; } /* end loop over Ib */ } /* end loop over Ia excitations */ } /* end loop over Ia */ S2 = -smin_spls; return(S2); } }} // namespace psi::detci psi3/src/bin/detci/stringlist.cc0000644000101500007650000003046610757640026015361 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Code to form the CI space as strings with all single replacements. ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** June 1995 ** */ #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { /* DEFINES */ #define MIN0(a,b) (((a)<(b)) ? (a) : (b)) #define MAX0(a,b) (((a)>(b)) ? (a) : (b)) #define MAXIJ 100000 extern unsigned char ***Occs; /* GLOBALS for this module */ struct level *sbgr_tr_head; int sbgr_tr_orbs; int **sbgr_tr_out; int sbgr_tr_walks; int *sbgr_tr_alist=NULL; int *O, *U, *T ; int **Tij, **Toij, *Tcnt; unsigned int **Tidx; signed char **Tsgn; extern int subgr_lex_addr(struct level *head, int *occs, int nel, int norb); extern int og_lex_addr(struct olsen_graph *Graph, int *occs, int nel, int *listnum); /* FUNCTION PROTOTYPES this module */ void subgr_trav_init(struct level *head, int ci_orbs, int **outarr, int walks); void subgr_traverse(int i, int j); void form_stringwr(struct stringwr *strlist, int *occs, int N, int num_ci_orbs, struct stringgraph *subgraph, struct olsen_graph *Graph, int first_orb_active); void og_form_repinfo(struct stringwr *string, int num_ci_orbs, struct olsen_graph *Graph, int first_orb_active); void init_stringwr_temps(int nel, int num_ci_orbs, int nsym); void free_stringwr_temps(int nsym); /* ** stringlist(): This function forms the list of strings with their ** single replacements using the Olsen Graph structures. ** */ void stringlist(struct olsen_graph *Graph, struct stringwr **slist) { int i; int nirreps, irrep, code, ncodes, walk, listnum, addr; int nel_expl; struct stringgraph *subgraph; int **outarr, *occs; nel_expl = Graph->num_el_expl; ncodes = Graph->subgr_per_irrep; nirreps = Graph->nirreps; if (sbgr_tr_alist == NULL) sbgr_tr_alist = init_int_array(Graph->num_orb+1); outarr = init_int_matrix(nel_expl, Graph->max_str_per_irrep); occs = init_int_array(nel_expl); if (!Parameters.repl_otf) { init_stringwr_temps(Graph->num_el_expl, Graph->num_orb, nirreps * ncodes); } Occs = (unsigned char ***) malloc (nirreps * ncodes * sizeof(unsigned char **)); for (irrep=0,listnum=0; irrep < nirreps; irrep++) { for (code = 0; code < ncodes; code++,listnum++) { Occs[listnum] = NULL; subgraph = Graph->sg[irrep] + code; if (!subgraph->num_strings) continue; Occs[listnum] = (unsigned char **) malloc (subgraph->num_strings * sizeof(unsigned char *)); for (i=0; inum_strings; i++) Occs[listnum][i] = (unsigned char *) malloc (nel_expl * sizeof(unsigned char)); slist[listnum] = (struct stringwr *) malloc (subgraph->num_strings * sizeof(struct stringwr)); subgr_trav_init(subgraph->lvl, Graph->num_orb, outarr, 0); subgr_traverse(0, 0); for (walk=0; walknum_strings; walk++) { for (i=0; ilvl,occs,nel_expl,Graph->num_orb); if (addr < 0) { printf("(stringlist): Impossible string addr\n"); } for (i=0; inum_orb, subgraph, Graph, Graph->num_cor_orbs); } } /* end loop over subgraph codes */ } /* end loop over irreps */ /* free the stringwr scratch space */ if (!Parameters.repl_otf) { free_stringwr_temps(nirreps * ncodes); } free_int_matrix(outarr); free(occs); } void subgr_trav_init(struct level *head, int ci_orbs, int **outarr, int walks) { sbgr_tr_head = head; sbgr_tr_orbs = ci_orbs; sbgr_tr_out = outarr; sbgr_tr_walks = walks; } void subgr_traverse(int i, int j) { int m,n; int k0, k1; sbgr_tr_alist[i] = sbgr_tr_head[i].a[j]; if (i == sbgr_tr_orbs) { for (m=1,n=0; m<=sbgr_tr_orbs; m++) { if (sbgr_tr_alist[m] != sbgr_tr_alist[m-1]) sbgr_tr_out[n++][sbgr_tr_walks] = m-1; } sbgr_tr_walks++; return; } k0 = sbgr_tr_head[i].k[0][j]; k1 = sbgr_tr_head[i].k[1][j]; if (k0) subgr_traverse(i+1, k0-1); if (k1) subgr_traverse(i+1, k1-1); } /* ** form_stringwr(): Make the string with replacements list. ** This version uses the Olsen Graph structures. ** ** Parameters: ** strlist = list of strings (may be different for alpha and beta) ** occs = list of occupied orbitals (N long) ** N = number of electrons explicitly included ** num_ci_orbs = number of active CI orbitals ** subgraph = the subgraph including the given walk ** Graph = the olsengraph for the alpha or beta strings ** first_orb_active = first alp/bet orb active */ void form_stringwr(struct stringwr *strlist, int *occs, int N, int num_ci_orbs, struct stringgraph *subgraph, struct olsen_graph *Graph, int first_orb_active) { unsigned char *occlist; unsigned int addr; int i; struct stringwr *node; occlist = (unsigned char *) malloc (N * sizeof(unsigned char)); if (occlist == NULL) { fprintf(stderr, "(form_stringwr): Malloc error\n"); exit(0); } for (i=0; ilvl, occs, N, num_ci_orbs); node = strlist + addr; node->occs = occlist; if (!Parameters.repl_otf) { og_form_repinfo(node, num_ci_orbs, Graph, first_orb_active); } } /* ** og_form_repinfo(): This function is a slightly-modified version of the ** form_repinfo() function, which forms the single replacement info ** for each string. This version uses the Olsen Graph structures. ** */ void og_form_repinfo(struct stringwr *string, int num_ci_orbs, struct olsen_graph *Graph, int first_orb_active) { int nel, p, q, i, j, k, l, ij, oij; int nlists, listnum, strlistnum, nsym, jused, nfzc; int diagcnt=0; static int *diagij = NULL; static int *diagoij = NULL; unsigned int cnt, stringridx; int ridx; signed char sgn; nel = Graph->num_el_expl; nfzc = Graph->num_fzc_orbs; nsym = Graph->nirreps; nlists = Graph->subgr_per_irrep * nsym; /* Zero out the counting array and O, U, and T */ zero_int_array(Tcnt, nlists); zero_int_array(O, nel+1); zero_int_array(U, num_ci_orbs-nel); zero_int_array(T, nel); for (i=0; ioccs)[i] ; stringridx = og_lex_addr(Graph, O, nel, &strlistnum); /* set up the ij indices for the 'diagonal' entries E_ii */ /* this assumes that the values in array O are strictly increasing */ if (diagij == NULL) diagij = init_int_array(nel); if (diagoij == NULL) diagoij = init_int_array(nel); for (i=0; ioccs)[i]; q = (string->occs)[i]; ij = ioff[p] + q; oij = p * num_ci_orbs + q; sgn = (signed char) 1; cnt = Tcnt[strlistnum]; Tij[strlistnum][cnt] = ij; Toij[strlistnum][cnt] = oij; Tidx[strlistnum][cnt] = stringridx; Tsgn[strlistnum][cnt] = sgn; Tcnt[strlistnum] += 1; diagcnt++; } /* now do the single replacements. first form arrays O and U */ for (i=0,j=0,k=0; i= 0) { while (diagcnt < nel && ij > diagij[diagcnt]) { cnt = Tcnt[strlistnum]; Tij[strlistnum][cnt] = diagij[diagcnt]; Toij[strlistnum][cnt] = diagoij[diagcnt]; Tidx[strlistnum][cnt] = stringridx; Tsgn[strlistnum][cnt] = (signed char) 1; Tcnt[strlistnum] += 1; diagcnt++; } /* get the sign: * there are i occupied orbitals before the one to be annihilated * contributing (-1)^i to the sign. Need number of occupied orbs * (not counting any annihilated) before the one to be created * contributing (-1)^l to the sign. Sign = (-1)^(i+l) */ for (k=0,l=0; k= U[j]) break; } sgn = ((i + l) % 2) ? -1 : 1 ; cnt = Tcnt[listnum]; Tij[listnum][cnt] = ij; Toij[listnum][cnt] = oij; Tidx[listnum][cnt] = ridx; Tsgn[listnum][cnt] = sgn; Tcnt[listnum] += 1; } } } /* end loop over electrons */ while (diagcnt < nel) { sgn = (signed char) 1; listnum = strlistnum; cnt = Tcnt[strlistnum]; Tij[strlistnum][cnt] = diagij[diagcnt]; Toij[strlistnum][cnt] = diagoij[diagcnt]; Tidx[strlistnum][cnt] = stringridx; Tsgn[strlistnum][cnt] = sgn; Tcnt[strlistnum] += 1; diagcnt++; } /* now write the info in the T matrices */ string->cnt = init_int_array(nlists); string->ij = (int **) malloc(sizeof(int *) * nlists); string->oij = (int **) malloc(sizeof(int *) * nlists); string->ridx = (unsigned int **) malloc(sizeof(unsigned int *) * nlists); string->sgn = (signed char **) malloc(sizeof(signed char *) * nlists); for (i=0; icnt[i] = cnt = Tcnt[i]; string->ij[i] = NULL; string->oij[i] = NULL; string->ridx[i] = NULL; string->sgn[i] = NULL; if (cnt) { string->ij[i] = init_int_array(cnt); string->oij[i] = init_int_array(cnt); string->ridx[i] = (unsigned int *) malloc(cnt * sizeof(unsigned int)); string->sgn[i] = (signed char *) malloc(cnt * sizeof(signed char)); for (k=0; kij[i][k] = Tij[i][p]; string->oij[i][k] = Toij[i][p]; string->ridx[i][k] = Tidx[i][p]; string->sgn[i][k] = Tsgn[i][p]; Tij[i][p] = MAXIJ; } } } /* end loop over i */ } void init_stringwr_temps(int nel, int num_ci_orbs, int nsym) { int maxcnt, i, j; O = init_int_array(nel+1) ; /* U = init_int_array(num_ci_orbs - nel) ; */ /* MLL and CDS +1 in case of no virtual alpha electrons */ U = init_int_array(num_ci_orbs - nel + 1) ; T = init_int_array(nel) ; Tcnt = init_int_array(nsym); maxcnt = nel * num_ci_orbs; /* num single replacements inc. self-repl */ Tij = (int **) malloc(sizeof(int *) * nsym); Toij = (int **) malloc(sizeof(int *) * nsym); Tidx = (unsigned int **) malloc(sizeof(unsigned int *) * nsym); Tsgn = (signed char **) malloc(sizeof(signed char *) * nsym); for (i=0; i // #include > /*** DEFINES ***/ /* typedef unsigned long long int BIGINT; */ typedef unsigned long int BIGINT; #define CI_BLK_MAX 5000 #define IOFF_MAX 50604 #define PARM_GUESS_VEC_UNIT 0 #define PARM_GUESS_VEC_H0_BLOCK 1 #define PARM_GUESS_VEC_DFILE 3 #define PARM_GUESS_VEC_IMPORT 4 #define PARM_OPENTYPE_UNKNOWN -1 #define PARM_OPENTYPE_NONE 0 #define PARM_OPENTYPE_HIGHSPIN 1 #define PARM_OPENTYPE_SINGLET 2 #define PARM_OUTFILE_MAX 132 #define METHOD_RSP 0 #define METHOD_OLSEN 1 #define METHOD_MITRUSHENKOV 2 #define METHOD_DAVIDSON_LIU_SEM 3 #define METHOD_RSPTEST_OF_SEM 4 #define PRECON_LANCZOS 0 #define PRECON_DAVIDSON 1 #define PRECON_EVANGELISTI 2 #define PRECON_GEN_DAVIDSON 3 #define PRECON_H0BLOCK_INVERT 4 #define PRECON_H0BLOCK_ITER_INVERT 5 #define PRECON_H0BLOCK_COUPLING 6 #define MULT 0 #define DIV 1 #define UPDATE_DAVIDSON 1 #define UPDATE_OLSEN 2 #define CI_VEC 0 #define SIGMA_VEC 1 #define TRUE 1 #define FALSE 0 #define HD_EXACT 0 #define HD_KAVE 1 #define ORB_ENER 2 #define EVANGELISTI 3 #define LEININGER 4 #define Z_HD_KAVE 5 struct stringwr { unsigned char *occs; int **ij; int **oij; unsigned int **ridx; signed char **sgn; int *cnt; }; struct level { int num_j; int *a; int *b; int **k; int **kbar; int *y; int *x; }; struct stringgraph { int offset; int num_strings; struct level *lvl; int ***ktmp; /* ktmp[case][row][level] */ }; /* ** OLSEN_GRAPH structure. This maintains a graphical ** representation of alpha and/or beta strings according to the method ** of Roos and Olsen, which maintains a different subgraph for each ** possible combination of point-group irrep, #RAS I electrons, and ** #RAS III electrons. */ struct olsen_graph { int num_str; /* total number of strings */ int num_fzc_orbs; /* number of frozen core orbitals */ int num_cor_orbs; /* number of restricted core orbitals */ int fzc_sym; /* symmetry (irrep) for the frozen core */ int num_el; /* number of electrons (total) in graph */ int num_el_expl; /* number of electrons (explicit) in graph */ int num_orb; /* number of orbitals explicitly treated */ int ras1_lvl; /* orbital number where RAS I ends (less fzc), or the last level in RAS I */ int ras1_min; /* minimum number of electrons in RAS I (for the _strings_), incl. frozen core */ int ras1_max; /* max number of RAS I electrons (useful when the RAS I level may extend beyond the last occupied orbital), incl. frozen core */ int ras3_lvl ; /* orbital num where RAS III begins (less fzc) */ int ras3_max ; /* maximum number of electrons in RAS III */ int ras4_lvl ; /* orbital number where RAS IV begins (less fzc) */ int ras4_max ; /* maximum number of electrons in RAS IV */ int nirreps; /* number of irreps */ int subgr_per_irrep; /* possible number of Olsen subgraphs per irrep */ int max_str_per_irrep; /* largest number of strings found in an irrep */ int *str_per_irrep; /* array containing num strings per irrep */ int ***decode; /* decode[ras1_holes][ras3_e][ras4_e] */ int **encode; /* encode[0,1,2][code] gives ras1 e- (excl fzc) and ras3 e- and ras4 e- */ struct stringgraph **sg; /* sg[irrep][code] */ int *orbsym; /* array for orbital irreps (incl. fzc) */ int *list_offset; /* absolute offset for each list */ }; /* ** FASTGRAPH structure. Should provide a more straightforward (if ** also more restrictive) version of struct stringgraph. Although ** somewhat more memory intensive, should allow for fast OTF ** computation of string addresses. The memory requirements are not ** really severe in any case (0-5 MB total for all subgraphs). */ struct fastgraph { int num_strings; /* number of strings in this subgraph */ int **data; /* holds k, then x, then y */ }; /* ** GRAPH_SET structure. This maintains a graphical ** representation of alpha and/or beta strings according to the method ** of Roos and Olsen, which maintains a different subgraph for each ** possible combination of point-group irrep, #RAS I electrons, and ** #RAS III electrons. New implementation of previous olsen_graph ** structure; this one uses the more simplified fastgraph structure ** instead of stringgraph. */ struct graph_set { int num_str; /* total number of strings */ int num_graphs; /* total number of valid subgraphs */ int num_fzc_orbs; /* number of frozen core orbitals */ int num_cor_orbs; /* number of restricted core orbitals */ int fzc_sym; /* symmetry (irrep) for the frozen core */ int num_el; /* number of electrons (total) in graph */ int num_el_expl; /* number of electrons (explicit) in graph */ int num_orb; /* number of orbitals explicitly treated */ int ras1_lvl; /* orbital number where RAS I ends (less fzc), or the last level in RAS I */ int ras1_min; /* minimum number of electrons in RAS I (for the _strings_), incl. frozen core */ int ras1_max; /* max number of RAS I electrons (useful when the RAS I level may extend beyond the last occupied orbital), incl. frozen core */ int ras3_lvl; /* orbital num where RAS III begins (less fzc) */ int ras3_max; /* maximum number of electrons in RAS III */ int ras4_lvl; /* orbital number where RAS IV begins (less fzc) */ int ras4_max; /* maximum number of electrons in RAS IV */ int ras34_max; /* max number of electrons in RAS III AND IV */ int nirreps; /* number of irreps */ int num_codes; /* possible number of subgraphs per irrep */ int ***decode; /* decode[ras1_holes][ras3_e][ras4_e] */ int **encode; /* encode[0,1,2][code] gives ras1 e- (excl fzc) and ras3 e- and ras4 e- */ struct fastgraph **AllGraph; /* Pointers to all subgraphs */ struct fastgraph **Graph;/* Pointers to allowed subgraphs */ int *graph_irrep; /* irrep of each non-null graph */ int *graph_code; /* code for each non-null graph */ int *graph_offset; /* absolute offset for each list */ int *orbsym; /* array for orbital irreps (incl. fzc) */ unsigned char ***Occs; /* Orbital occupancies for each string */ }; struct H_zero_block { double **H0b; /* H0 block */ double **H0b_inv; /* inverse of block (H0 - E) */ double **H0b_diag; /* Eigenvectors of H0 block */ double *H0b_diag_transpose; /* tmp array for Transpose of Eigenvectors of H0 block */ double *H0b_eigvals; /* Eigenvalues of H0 block */ double *H00; /* diag elements of H0 block */ int size; /* size of H0 block */ int osize; /* original (dimensioned size); can be reduced for Ms=0 cases by H0block_pairup() */ int guess_size; /* size of initial H0 block guess which may differ from size */ int oguess_size; /* original guess size may change with spin_cpl_chk() and pairup() */ int coupling_size; /* size of H0 block coupling to secondary space */ int ocoupling_size; /* original size of coupling_size */ double *c0b, *s0b; /* gathered C and sigma vectors */ double *c0bp, *s0bp; /* INV(H0 - E) times c0b and s0b */ int *alplist; /* list (graph) containing alpha string */ int *betlist; /* list containing beta string */ int *alpidx; /* relative index of alpha string */ int *betidx; /* relative index of beta string */ int *blknum; /* block number for each member */ int *pair; /* which H0block member is related by interchange of alpha and beta indices */ double **tmp1; /* tmp matrix to hold (H0 - E) */ int nbuf; /* number of buffers in CIvect */ int *buf_num; /* number of H0block elements per buffer */ int **buf_member; /* H0block members for each buffer */ double spin_cp_vals; /* Values of dets which should be added to the h0block but were not due to size restrictions of h0block.size */ double *tmp_array1; /* temporary array 1 */ double *tmp_array2; /* temporary array 2 */ }; /* ** CalcInfo: Data Structure for holding calculation information such ** as nuclear repulsion energy, number of atoms, number of basis functions, ** etc. */ struct calcinfo { int natom; /* number of atoms */ int nso; /* number of symmetry orbitals */ int nmo; /* number of molecular orbitals */ int nmotri; /* num elements in lwr diag matrix nmo big */ int nirreps; /* number of irreducible representations in pt grp */ int *docc; /* doubly occupied orbitals per irrep */ int *socc; /* singly occupied orbitals per irrep */ int *frozen_docc; /* frozen doubly occupied orbs per irrep */ int *explicit_core; /* explicit core orbitals per irrep: integrals involving these orbs are read, but excitations from these orbs are not allowed (maybe in +PT2) */ int *explicit_vir; /* explicit virtual orbitals per irrep: these orbs are beyond the last RAS space and not accessible in normal CI computations, but their integrals and indices are available for possible +PT2 corrections, etc */ int *frozen_uocc; /* frozen virtual orbs per irrep */ int iopen; /* flag for whether open shell or not */ double enuc; /* nuclear repulsion energy */ double escf; /* scf energy */ double eref; /* ref det energy as computed here in detci */ double efzc; /* frozen core energy */ double e0; /* E0, zeroth order energy */ double e0_fzc; /* two times the sum of the fzc orbitals */ double e1; /* E1, first order energy */ int num_alp; /* number of alpha electrons */ int num_bet; /* number of beta electrons */ int num_alp_expl; /* number of alpha electrons explicitly treated */ int num_bet_expl; /* number of beta electrons explicitly treated */ char **labels; /* labels for irreps */ int *orbs_per_irr; /* (molecular) orbitals per irrep */ int *so_per_irr; /* symmetry orbitals per irrep */ int *orbsym; /* irrep for each orbital */ int *reorder; /* map Pitzer-ordered orbitals to our ordering */ int *order; /* map our ordering back to Pitzer ordering */ double *scfeigval; /* SCF eigenvalues */ double *scfeigvala; /* For ZAPTn, alpha and beta eigenvalues different */ double *scfeigvalb; /* in SOCC space */ double *onel_ints; /* one-electron integrals */ double *tf_onel_ints; /* transformed (avg) one-electron integrals */ double *maxK; /* maximum K integral - ave diag elements */ double maxKlist; /* maximum K integral in entire integral list */ double **gmat; /* onel ints in RAS g matrix form */ double *twoel_ints; /* two-electron integrals */ double **fock; /* fock matrix */ int num_fzc_orbs; /* number of FZC orbitals (i.e. frozen core) */ int num_cor_orbs; /* number of COR orbitals (see explicit_core) */ int num_alp_str; /* number of alpha strings */ int num_bet_str; /* number of beta strings */ int num_ci_orbs; /* nmo - num orbs frozen */ int num_fzv_orbs; /* number of frozen/deleted virtual orbitals */ int num_vir_orbs; /* number of explicit virtual orbitals beyond the last RAS space (see explicit_vir) */ int ref_alp; /* address of reference alpha string */ int ref_bet; /* address of reference beta string */ int ref_alp_list; /* string list containing reference alpha string */ int ref_bet_list; /* string list containing reference beta string */ int ref_alp_rel; /* relative index of reference alpha string */ int ref_bet_rel; /* relative index of reference beta string */ int ref_sym; /* symmetry (irrep) of reference determinant */ int spab; /* socc per alpha or beta, for singlet states */ unsigned int *asymst; /* starting (abs) addresses of alp str for ea irrep */ unsigned int *asymnum;/* number of alpha strings per irrep */ unsigned int *bsymst; /* starting (abs) addresses of bet str for ea irrep */ unsigned int *bsymnum;/* number of beta strings per irrep */ int **ras_opi; /* num orbs per irr per ras space ras_opi[ras][irr] */ int **ras_orbs[4]; /* ras_orbs[ras][irr][cnt] gives an orbital number */ int max_orbs_per_irrep; /* maximum orbials per irrep fzv not included */ int max_pop_per_irrep;/* maximum populated orbitals per irrep fzv included */ }; /* ** parameters structure: holds run-time parameters */ struct params { char *dertype; /* derivative level: none, first, etc */ char *wfn; /* wavefunction type: CI, DETCAS, etc. */ int write_energy; /* flag to write energies to detci_energies.dat */ int filter_ints; /* true (1) if some integrals in tei file to be ignored */ int ex_lvl; /* excitation level */ int val_ex_lvl; /* valence excitation level, used for RAS's */ int cc_val_ex_lvl;/* NOT analogous to val_ex_lvl ... this controls how many holes allowed from RAS II for MRCC */ int cc_a_val_ex_lvl; /* alpha part of cc_val_ex_lvl */ int cc_b_val_ex_lvl; /* beta part of cc_val_ex_lvl */ int max_dets; /* maximum number of allowed determinants */ int maxiter; /* maximum number of allowed iterations */ int num_roots; /* number of CI roots to find */ int istop; /* stop after setting up CI space */ int print_lvl; /* print verbosity level */ int print_ciblks; /* print a summary of the CI blocks? */ int convergence; /* convergence, 10^-n, on RMS of the CI update vector */ /* (i.e. the Davidson/Liu d vector) applied to ea root */ int energy_convergence; /* convergence, 10^-n, on CI energy */ int oei_file; /* file number for one-electron integrals */ int oei_erase; /* erase onel ints after reading them? */ int tei_file; /* file number for two-electron integrals */ int tei_erase; /* erase twoel ints after reading them? */ int ras; /* do a RAS calculation? Set true if "RAS1" keyword */ int fci; /* do a FULL ci calc? (affects sigma1-2 subroutines) */ int fci_strings; /* do a FULL ci calc? (affects string storage) */ int fzc; /* do implicit frozen core (remove those orbs)? */ /* the alternative is a "restricted core" calc */ double S; /* the value of quantum number S */ int Ms0; /* 1 if Ms=0, 0 otherwise */ int ref_sym; /* irrep for CI vectors; -1 = find automatically */ int opentype; /* closed, highspin, or open-shell singlet; see #define */ int a_ras1_lvl; /* orbital number defining RAS I for alpha electrons */ int a_ras1_min; /* minimum number of alpha electrons in RAS I */ int a_ras1_max; /* maximum number of alpha electrons in RAS I */ int b_ras1_lvl; /* orbital number defining RAS I for beta electrons */ int b_ras1_min; /* minimum number of beta electrons in RAS I */ int b_ras1_max; /* maximum number of beta electrons in RAS I */ int a_ras3_max; /* maximum number of alpha electrons in RAS III */ int b_ras3_max; /* maximum number of beta electrons in RAS III */ int cc_a_ras3_max;/* as above but for CC */ int cc_b_ras3_max;/* as above but for CC */ int a_ras4_max; /* maximum number of alpha electrons in RAS IV */ int b_ras4_max; /* maximum number of beta electrons in RAS IV */ int cc_a_ras4_max;/* as above but for CC */ int cc_b_ras4_max;/* as above but for CC */ int ras1_lvl; /* orbital number defining RAS I overall */ int ras1_min; /* currently min #e AT THE RAS I LEVEL (incl fzc) */ int ras3_lvl; /* orbital number defining RAS III overall */ int ras4_lvl; /* orbital number defining RAS IV overall */ /* make larger than num_ci_orbs if there is no RAS IV */ int ras3_max; /* maximum number of electrons in RAS III */ int cc_ras3_max; /* as above but for CC */ int ras4_max; /* maximum number of electrons in RAS IV */ int cc_ras4_max; /* as above but for CC */ int ras34_max; /* max number of electrons in RAS III AND IV */ int cc_ras34_max; /* as above but for CC */ int a_ras34_max; /* max number of alp electrons in RAS III AND IV */ int b_ras34_max; /* max number of bet electrons in RAS III AND IV */ int cc_a_ras34_max;/* as above but for CC */ int cc_b_ras34_max;/* as above but for CC */ int guess_vector; /* what kind of CI vector to start with; see #define */ int h0blocksize; /* size of H0 block in preconditioner. */ int h0guess_size; /* size of H0 block for initial guess */ int h0block_coupling_size; /* size of coupling block in preconditioner */ int h0block_coupling; /* 1 if true; 0 otherwise */ int hd_ave; /* 1 if average H diag energies over spin coupling sets */ int hd_otf; /* 1 if diag energies computed on the fly 0 otherwise */ int nodfile; /* 1 if no dfile used 0 otherwise works for nroots=1 */ int nprint; /* number of important determinants to print out */ int cc_nprint; /* number of most important CC amps per ex lvl to print */ int mixed; /* 1=allow mixed excitations, 0=don't */ int mixed4; /* 1=allow mixed excitations in RAS IV, 0=don't */ int repl_otf; /* generate single-replacements on-the-fly */ int r4s; /* restrict strings with e- in RAS IV: i.e. if an electron is in RAS IV, then the holes in RAS I must equal the particles in RAS III + RAS IV else the string is discarded */ int calc_ssq; /* calculate the value of or not */ int icore; /* core option: 0 = RAS subblock at a time 1 = Entire CI vector at a time 2 = Symmetry block at a time */ int diag_method; /* diagonalization method: 0 = RSP 1 = Olsen 2 = Mitrushenkov 3 = Davidson/Liu SEM method 4 = Stupid test of Davidson/Liu SEM method */ int precon; /* preconditioner for diagonalization method 0 = Lanczos 1 = Davidson 2 = Generalized Davidson or H0block 3 = H0block inverse */ int update; /* update vector in diag method 1 = Davidson 2 = Olsen */ int mpn; /* 1(0) if computing mpn series is TRUE(FALSE) */ int zaptn; /* 1(0) if computing zaptn series is TRUE(FALSE) */ int save_mpn2; /* 1 = save MP(2n-1) energy, 0 = save MPn energy */ int mpn_schmidt; /* 1(0) if a orthonormal vector space is employed rather than storing the kth order wfn */ int wigner; /* 1(0) if wigner formulas used in Empn series */ int maxnvect; /* maximum number of b vectors for SEM method */ int nunits; /* num of tmp files to use for CI vects and such */ int collapse_size; /* how many vectors to collapse to in SEM */ int lse_collapse; /* iterations between lst sqr ext */ int lse_iter; /* iterations between last lst sqr ext */ int lse; /* 1(0) if lst sqr ext is TRUE or FALSE */ int lse_tolerance; /* energy converged to tol to perform lse */ int neg_only; /* 1(0) if get -(+) values of diag elements */ int first_tmp_unit; /* first number for the tmp files */ int first_hd_tmp_unit; /* first tmp file for H diagonal */ int num_hd_tmp_units; /* the number of such files */ int first_c_tmp_unit; /* first tmp file for CI coeffs */ int num_c_tmp_units; /* the number of such files */ int first_s_tmp_unit; /* first tmp file for sigma coeffs */ int num_s_tmp_units; /* the number of such files */ int first_d_tmp_unit; /* first tmp file for D correction vectors */ int num_d_tmp_units; /* the number of such files */ int num_init_vecs; /* number of initial vectors for Davidson method */ int restart; /* restart flag, 0 or 1 */ int restart_vecs; /* number of previous vectors to read for restart */ int restart_iter; /* number of iterations previously completed */ int bendazzoli; /* use bendazzoli algorithm */ int opdm; /* call the opdm subroutine? */ int opdm_write; /* write the opdm? */ int opdm_print; /* print the opdm? */ int opdm_file; /* file number for opdm */ int opdm_diag; /* get ci natural orbitals? */ int opdm_wrtnos; /* write ci natural orbitals to file 30? */ int opdm_ke; /* get kinetic energy dotted with opdm? for TDC */ int opdm_ave; /* average the opdm over several states */ int opdm_orbsfile; /* file number to write various orbitals */ int opdm_orbs_root; /* write ci natural orbs of this root to checkpt */ int **opdm_idxmat; /* matrix of index values for the various roots and irreps of opdm in opdmfile */ int **orbs_idxmat; /* matrix of index values for various roots and irreps of orbitals in orbsfile */ int transdens; /* compute transition densities? */ int dipmom; /* compute dipole moment or transition dip mom? */ int tdm_write; /* write the transition density matrix/matrices? */ int tdm_print; /* print the transition density matrix/matrices? */ int tpdm; /* call the tpdm subroutine? */ int tpdm_write; /* write the tpdm? */ int tpdm_print; /* print the tpdm? */ int tpdm_file; /* file number for tpdm */ int root; /* which root to optimize (write opdm/tpdm for) */ int zero_blocks; /* 1(0) if use/ignore zero_blocks array icore=0,2 */ double perturbation_parameter; /* z in H = H0 + z * H1 */ int z_scale_H; /* 1(0) if pert. scaling used */ int have_special_conv; /* have a special convergence value from the command line or the DETCASMAN driver? */ double special_conv; /* special convergence value */ int nthreads; /* number of threads to use in sigma routines */ int pthreads; /* 1(0) if use/not multithreading */ int export_ci_vector; /* 1 if export the CI vector with string info, useful for BODC */ int num_export; /* number of vectors to export */ int sf_restrict; /* 1 if restrict CI space (CI blocks) to do only determinants (or their spin-complements) in RASCI versions of Krylov's SF CI */ int print_sigma_overlap;/* Print sigma overlap matrix? Test for Arteum */ int filter_guess; /* 1 if we want to filter out some of our guess vectors by checking the phase of a pair of determinants */ int filter_guess_sign; /* the desired phase between dets 1 and 2 */ int filter_guess_Ia; /* absolute alpha string addr for determinant 1 */ int filter_guess_Ib; /* absolute beta string addr for determinant 1 */ int filter_guess_Ja; /* absolute alpha string addr for determinant 2 */ int filter_guess_Jb; /* absolute beta string addr for determinant 2 */ int filter_guess_Iaridx;/* relative alpha string addr for det 1 */ int filter_guess_Ibridx;/* relative beta string addr for det 1 */ int filter_guess_Jaridx;/* relative alpha string addr for det 2 */ int filter_guess_Jbridx;/* relative beta string addr for det 2 */ int filter_guess_Iac; /* string list number for alpha of det 1 */ int filter_guess_Ibc; /* string list number for beta of det 1 */ int filter_guess_Jac; /* string list number for alpha of det 2 */ int filter_guess_Jbc; /* string list number for beta of det 2 */ int filter_guess_H0_det1; /* H0block determinant number for det 1 */ int filter_guess_H0_det2; /* H0block determinant number for det 2 */ int zero_det; /* zero out any particular determinant? */ int zero_det_Ia; /* absolute alpha string addr for zero det */ int zero_det_Ib; /* absolute beta string addr for zero det */ int zero_det_Iac; /* string list number for alpha of zero det */ int zero_det_Ibc; /* string list number for beta of zero det */ int zero_det_Iaridx; /* relative alpha string for zero det */ int zero_det_Ibridx; /* relative beta string for zero det */ int follow_vec_num; /* num components in user-specified vec to follow */ double *follow_vec_coef;/* array of coefficients for vec to follow */ int *follow_vec_Ia; /* array of absolute alpha strings for vector */ int *follow_vec_Ib; /* array of absolute beta strings for vector */ int *follow_vec_Iac; /* array of alpha string lists for vector */ int *follow_vec_Ibc; /* array of beta string lists for vector */ int *follow_vec_Iaridx; /* array of alpha relative idx for vector */ int *follow_vec_Ibridx; /* array of beta relative idx for vector */ int *ex_type; /* Determine nonstandard excitation types, such as CID, CIST, CIDTQ, etc. */ int *average_states; /* which states to average in a SA calc */ double *average_weights;/* the weights for each state in a SA calc */ int average_num; /* length of the above two arrays */ int cc; /* do coupled-cluster */ int cc_ex_lvl; /* coupled-cluster excitation level */ int cc_export; /* export a CC vector? */ int cc_import; /* import a CC vector? */ int cc_fix_external; /* fix amplitudes involving RAS I or IV ? */ int cc_fix_external_min;/* num external indices before amp gets fixed */ int cc_mixed; /* ignore block if num holes in RAS I and II is > cc_ex_lvl and if any indices correspond to RAS I or IV (i.e., include only all-active higher excitations) */ int cc_update_eps; /* update T amps with orb eigvals or not? */ int diis; /* do DIIS? */ int diis_start; /* how many diis vectors built up before start */ int diis_freq; /* how many iters to go before a diis step */ int diis_min_vecs; /* how many vectors required before do diis? */ int diis_max_vecs; /* how many vectors maximum to hold? */ int cc_macro_on; /* add restrictions to macroconfigurations */ int *cc_macro_parsed; /* did the user specify a macro for this ex_lvl? */ int **cc_macro; /* specify T vector macroconfigurations each ex_lvl has different specifications cc_macro[ex_lvl][0] = max I holes [1] = max IV particles [2] = max (I h + IV p) */ int cc_variational; /* variational energy expression? */ }; /* ** CI Vector structure which keeps track of how many ** symmetry or RAS blocks in a CI vector, the string graph ** codes for each block, offsets for each block (to compute absolute ** indices), and a decoder which takes two block codes (alpha and ** beta) and determines the CI vector block number. */ struct ci_blks { BIGINT vectlen; /* total number of elements in the CI vector */ int num_blocks; /* number of blocks in the CI vector */ int Ia_code[CI_BLK_MAX]; /* gives the block's alpha string code */ int Ib_code[CI_BLK_MAX]; /* gives the block's beta string code */ int Ia_size[CI_BLK_MAX]; /* num of alp strings in the block */ int Ib_size[CI_BLK_MAX]; /* num of bet strings in the block */ BIGINT offset[CI_BLK_MAX]; /* offset for absolute numbering */ int **decode; /* gives the block number for a given pair of alpha and beta codes */ int num_alp_codes; /* number of alpha codes in decode matrix */ int num_bet_codes; /* number of beta codes in decode matrix */ int *first_iablk; /* first blocknum for a given Ia irrep */ int *last_iablk; /* last blocknum for a given Ia irrep */ }; /* ** Structure for pthreads information in s3v.c (s3_block_vdiag) ** */ struct pthreads_s3diag { int nas; /* number of alpha strings */ int jlen; /* number of single-excitations */ int ij; /* compound orbital index */ double **Cprime; /* ptr to Cprime scratch matrix */ int Ja_list; /* strings block offset */ double *Tptr; /* Temp ptr */ double **S; /* Sigma vector */ int *R; /* ket determinants for ij */ int thread_id; /* thread id number */ struct stringwr *Ia_local; /* ptr to string replacement struct */ int Ia_idx_local; /* index of c block string */ }; struct pthreads_s2vfci { struct stringwr **alplist; struct stringwr **betlist; double **C; double **S; double *oei; double *tei; int nlists; int nas; int nbs; int Ia_list; int Ja_list; int Ja_list_nas; struct stringwr *Ia; unsigned int Ia_idx; }; struct pthreads_s1vfci { struct stringwr **alplist; struct stringwr **betlist; double **C; double **S; double *oei; double *tei; int nlists; int nas; int nbs; int Ib_list; int Jb_list; int Jb_list_nbs; struct stringwr *Ib; unsigned int Ib_idx; }; struct detci_timings { double s1_total_time; double s1_before_time; double s1_after_time; double s2_total_time; double s2_before_time; double s2_after_time; double s3_total_time; double s3_before_time; double s3_after_time; double s1_mt_before_time; double s1_mt_after_time; double s1_mt_total_time; double s2_mt_before_time; double s2_mt_after_time; double s2_mt_total_time; double s3_mt_before_time; double s3_mt_after_time; double s3_mt_total_time; double read_total_time; double read_before_time; double read_after_time; double write_total_time; double write_after_time; double write_before_time; double Hd_total_time; double Hd_before_time; double Hd_after_time; double total_before_time; double total_after_time; }; double wall_time_new(void); void init_time_new(struct detci_timings time); void print_time_new(struct detci_timings time); }} // namespace psi::detci #endif // header guard psi3/src/bin/detci/time.cc0000644000101500007650000000323210757640026014104 0ustar crawdad/*! \file \ingroup DETCI \brief DETCI-specific timing routines */ #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { double wall_time_new(void) { struct timeval tod; gettimeofday(&tod,0); return (double) (tod.tv_sec + 0.000001 * tod.tv_usec); } void init_time_new(struct detci_timings time) { time.s1_total_time = time.s1_before_time = time.s1_after_time = 0.0; time.s2_total_time = time.s2_before_time = time.s2_after_time = 0.0; time.s3_total_time = time.s3_before_time = time.s3_after_time = 0.0; time.write_total_time = time.write_after_time = time.write_before_time = 0.0; time.read_total_time = time.read_after_time = time.read_before_time = 0.0; time.Hd_total_time = time.Hd_before_time = time.Hd_after_time = 0.0; time.total_before_time = time.total_after_time = 0.0; } void print_time_new(struct detci_timings time) { fprintf(outfile,"\n"); fprintf(outfile," Total Time (s) %%Time %%Relative\n"); fprintf(outfile," -----------------------------------------------------\n"); fprintf(outfile," Read %lf\n", time.read_total_time); fprintf(outfile," Write %lf\n", time.write_total_time); fprintf(outfile," Sigma1 %lf\n", time.s1_total_time); fprintf(outfile," Sigma2 %lf\n", time.s2_total_time); fprintf(outfile," Sigma3 %lf\n", time.s3_total_time); fprintf(outfile," S1 Thread %lf\n", time.s1_mt_total_time); fprintf(outfile," S2 Thread %lf\n", time.s2_mt_total_time); fprintf(outfile," S3 Thread %lf\n", time.s3_mt_total_time); fprintf(outfile,"\n"); } }} // namespace psi::detci psi3/src/bin/detci/TODO0000644000101500007650000000060307570254042013324 0ustar crawdadDETCI TO-DO LIST =============================================================== Buffers bigger than 2E9 still don't work. Known issues: o Calls to wreadw can't handle size > 2E9 o vector.c contains lots of calls to be done on a per-buffer basis which allow only integer buffer sizes o need to finish converting to libpsio to avoid 2GB file pointer problem on Linux psi3/src/bin/detci/tpdm.cc0000644000101500007650000005720111033162745014112 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Compute the two-particle density matrix (TPDM) ** ** C. David Sherrill */ #include #include #include /* may no longer need #include */ #include #include #include #include #include "structs.h" #define EXTERN #include "globals.h" #include "civect.h" namespace psi { namespace detci { #define INDEX(i,j) ((i>j) ? (ioff[(i)]+(j)) : (ioff[(j)]+(i))) #define INDEX2(i,j,n) ((i)*(n) + (j)) void tpdm_block(struct stringwr **alplist, struct stringwr **betlist, int nbf, int nalpcodes, int nbetcodes, double *twopdm_aa, double *twopdm_bb, double *twopdm_ab, double **CJ, double **CI, int Ja_list, int Jb_list, int Jnas, int Jnbs, int Ia_list, int Ib_list, int Inas, int Inbs, double weight); void tpdm(struct stringwr **alplist, struct stringwr **betlist, int Inroots, int Inunits, int Ifirstunit, int Jnroots, int Jnunits, int Jfirstunit, int targetfile, int writeflag, int printflag) { CIvect Ivec, Jvec; struct iwlbuf TBuff; struct iwlbuf TBuff_aa; struct iwlbuf TBuff_bb; struct iwlbuf TBuff_ab; int i, j, k, l, lmax, ij, kl, ijkl, ijksym; int i2, j2, k2, l2, nfzc, populated_orbs; int *orbsym; int maxrows, maxcols, ntri, ntri2; unsigned long bufsz; double **transp_tmp = NULL; double **transp_tmp2 = NULL; double *buffer1, *buffer2, value; double **onepdm_a, **onepdm_b; double *twopdm_aa, *twopdm_bb, *twopdm_ab; int Iroot, Jroot; int Iblock, Iblock2, Ibuf, Iac, Ibc, Inas, Inbs, Iairr; int Jblock, Jblock2, Jbuf, Jac, Jbc, Jnas, Jnbs, Jairr; int do_Jblock, do_Jblock2; char opdm_key[80]; int root_idx; /* what root we're on */ double weight; /* the weight of that root */ nfzc = CalcInfo.num_fzc_orbs; populated_orbs = CalcInfo.nmo - CalcInfo.num_fzv_orbs; if (nfzc) { psio_open(Parameters.opdm_file, PSIO_OPEN_OLD); onepdm_a = block_matrix(populated_orbs, populated_orbs); onepdm_b = block_matrix(populated_orbs, populated_orbs); } Ivec.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, 1, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Inroots, Inunits, Ifirstunit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); Jvec.set(CIblks.vectlen, CIblks.num_blocks, Parameters.icore, 1, CIblks.Ia_code, CIblks.Ib_code, CIblks.Ia_size, CIblks.Ib_size, CIblks.offset, CIblks.num_alp_codes, CIblks.num_bet_codes, CalcInfo.nirreps, AlphaG->subgr_per_irrep, Jnroots, Jnunits, Jfirstunit, CIblks.first_iablk, CIblks.last_iablk, CIblks.decode); buffer1 = Ivec.buf_malloc(); buffer2 = Jvec.buf_malloc(); Ivec.buf_lock(buffer1); Jvec.buf_lock(buffer2); ntri = CalcInfo.num_ci_orbs * CalcInfo.num_ci_orbs; ntri2 = (ntri * (ntri + 1)) / 2; twopdm_aa = init_array(ntri2); twopdm_bb = init_array(ntri2); twopdm_ab = init_array(ntri * ntri); if ((Ivec.icore==2 && Ivec.Ms0 && CalcInfo.ref_sym != 0) || (Ivec.icore==0 && Ivec.Ms0)) { for (i=0, maxrows=0, maxcols=0; i maxrows) maxrows = Ivec.Ia_size[i]; if (Ivec.Ib_size[i] > maxcols) maxcols = Ivec.Ib_size[i]; } if (maxcols > maxrows) maxrows = maxcols; transp_tmp = (double **) malloc (maxrows * sizeof(double *)); transp_tmp2 = (double **) malloc (maxrows * sizeof(double *)); if (transp_tmp == NULL || transp_tmp2 == NULL) { printf("(tpdm): Trouble with malloc'ing transp_tmp\n"); } bufsz = Ivec.get_max_blk_size(); transp_tmp[0] = init_array(bufsz); transp_tmp2[0] = init_array(bufsz); if (transp_tmp[0] == NULL || transp_tmp2[0] == NULL) { printf("(tpdm): Trouble with malloc'ing transp_tmp[0]\n"); } } if (Parameters.icore == 0) { /* loop over all the roots requested */ for (root_idx=0; root_idx */ for (Kb_list=0; Kb_list < nbetlists; Kb_list++) { Jbcnt = Jb->cnt[Kb_list]; Jbridx = Jb->ridx[Kb_list]; Jbsgn = Jb->sgn[Kb_list]; Jboij = Jb->oij[Kb_list]; for (Jb_ex=0; Jb_ex < Jbcnt; Jb_ex++) { okl = *Jboij++; Kb_idx = *Jbridx++; Kb_sgn = (double) *Jbsgn++; Kb = betlist[Kb_list] + Kb_idx; if (Kb_list == Ib_list) { C2 = CI[Ia_idx][Kb_idx]; i = okl / nbf; l = okl % nbf; for (j=0; j= kl) { ijkl = INDEX(ij,kl); twopdm_bb[ijkl] -= Kb_sgn * C1 * C2; } } } /* loop over excitations E^b_{ij} from |B(K_b)> */ /* Ib_list pre-determined because of C blocking */ Kbcnt = Kb->cnt[Ib_list]; Kbridx = Kb->ridx[Ib_list]; Kbsgn = Kb->sgn[Ib_list]; Kboij = Kb->oij[Ib_list]; for (Kb_ex=0; Kb_ex= okl) { C2 = CI[Ia_idx][Ib_idx]; ijkl = INDEX(oij,okl); twopdm_bb[ijkl] += Ib_sgn * Kb_sgn * C1 * C2; } } } /* end loop over Jb_ex */ } /* end loop over Kb_list */ } /* end loop over Jb_idx */ } /* end loop over Ia_idx */ } /* end case Ia_list == Ja_list */ /* loop over Ib in Ib_list */ if (Ib_list == Jb_list) { for (Ib_idx=0; Ib_idx */ for (Ka_list=0; Ka_list < nalplists; Ka_list++) { Jacnt = Ja->cnt[Ka_list]; Jaridx = Ja->ridx[Ka_list]; Jasgn = Ja->sgn[Ka_list]; Jaoij = Ja->oij[Ka_list]; for (Ja_ex=0; Ja_ex < Jacnt; Ja_ex++) { okl = *Jaoij++; Ka_idx = *Jaridx++; Ka_sgn = (double) *Jasgn++; Ka = alplist[Ka_list] + Ka_idx; if (Ka_list == Ia_list) { C2 = CI[Ka_idx][Ib_idx]; i = okl / nbf; l = okl % nbf; for (j=0; j= kl) { ijkl = INDEX(ij,kl); twopdm_aa[ijkl] -= Ka_sgn * C1 * C2; } } } /* loop over excitations E^a_{ij} from |A(K_a)> */ /* Ia_list pre-determined because of C blocking */ Kacnt = Ka->cnt[Ia_list]; Karidx = Ka->ridx[Ia_list]; Kasgn = Ka->sgn[Ia_list]; Kaoij = Ka->oij[Ia_list]; for (Ka_ex=0; Ka_ex= okl) { C2 = CI[Ia_idx][Ib_idx]; ijkl = INDEX(oij,okl); twopdm_aa[ijkl] += Ia_sgn * Ka_sgn * C1 * C2; } } } /* end loop over Ja_ex */ } /* end loop over Ka_list */ } /* end loop over Ja_idx */ } /* end loop over Ib_idx */ } /* end case Ib_list == Jb_list */ /* now do the sigma3 looking (alpha-beta) part */ /* loop over Ja */ for (Ja=alplist[Ja_list], Ja_idx=0; Ja_idx */ Jacnt = Ja->cnt[Ia_list]; Jaridx = Ja->ridx[Ia_list]; Jasgn = Ja->sgn[Ia_list]; Jaoij = Ja->oij[Ia_list]; for (Ja_ex=0; Ja_ex < Jacnt; Ja_ex++) { okl = *Jaoij++; Ia_idx = *Jaridx++; Ia_sgn = (double) *Jasgn++; /* loop over Jb */ for (Jb=betlist[Jb_list], Jb_idx=0; Jb_idx */ Jbcnt = Jb->cnt[Ib_list]; Jbridx = Jb->ridx[Ib_list]; Jbsgn = Jb->sgn[Ib_list]; Jboij = Jb->oij[Ib_list]; for (Jb_ex=0; Jb_ex < Jbcnt; Jb_ex++) { oij = *Jboij++; Ib_idx = *Jbridx++; Ib_sgn = (double) *Jbsgn++; C2 = CI[Ia_idx][Ib_idx]; // alpha-beta matrix is stored without packing bra and ket together ijkl = INDEX2(oij, okl, nbf2); tval = Ib_sgn * Ia_sgn * C1 * C2; // in orbital (i.e. non-spi-orbital) code had to scale the diagonal by 2 // because d(ij,kl) += d_ab(ij,kl) + d_ab(kl,ij), hence // d(ij,ij) += 2 d_ab(ij,ij) //if (oij == okl) tval *= 2.0; twopdm_ab[ijkl] += tval; } } /* end loop over Jb */ } /* end loop over Ja_ex */ } /* end loop over Ja */ } }} // namespace psi::detci psi3/src/bin/detci/tpool.cc0000644000101500007650000002100110757640026014275 0ustar crawdad/*! \file * \ingroup DETCI * \brief Thread pools * * An example source module to accompany... * * "Using POSIX Threads: Programming with Pthreads" * by Brad nichols, Dick Buttlar, Jackie Farrell * O'Reilly & Associates, Inc. * ******************************************************** * tpool.c -- * * Example thread pooling library */ #include #include #include #include #include #include #include "tpool.h" #include "structs.h" #define EXTERN #include "globals.h" namespace psi { namespace detci { void *tpool_thread(void *); void tpool_init(tpool_t *tpoolp, int num_worker_threads, int max_queue_size, int do_not_block_when_full) { int i, rtn; tpool_t tpool; /* allocate a pool data structure */ if ((tpool = (tpool_t )malloc(sizeof(struct tpool))) == NULL) perror("malloc"), exit(1); /* initialize th fields */ tpool->num_threads = num_worker_threads; tpool->max_queue_size = max_queue_size; tpool->do_not_block_when_full = do_not_block_when_full; if ((tpool->threads = (pthread_t *)malloc(sizeof(pthread_t)*num_worker_threads)) == NULL) perror("malloc"), exit(1); tpool->cur_queue_size = 0; tpool->queue_head = NULL; tpool->queue_tail = NULL; tpool->queue_closed = 0; tpool->shutdown = 0; tpool->threads_awake = 0; if ((rtn = pthread_mutex_init(&(tpool->queue_lock), NULL)) != 0) fprintf(stderr,"pthread_mutex_init %s",strerror(rtn)), exit(1); if ((rtn = pthread_cond_init(&(tpool->queue_not_empty), NULL)) != 0) fprintf(stderr,"pthread_cond_init %s",strerror(rtn)), exit(1); if ((rtn = pthread_cond_init(&(tpool->queue_not_full), NULL)) != 0) fprintf(stderr,"pthread_cond_init %s",strerror(rtn)), exit(1); if ((rtn = pthread_cond_init(&(tpool->queue_empty), NULL)) != 0) fprintf(stderr,"pthread_cond_init %s",strerror(rtn)), exit(1); if ((rtn = pthread_cond_init(&(tpool->all_work_done), NULL)) != 0) fprintf(stderr,"pthread_cond_init %s",strerror(rtn)), exit(1); /* create threads */ for (i=0; ithreads[i]), NULL, tpool_thread, (void *)tpool)) != 0) fprintf(stderr,"pthread_create %d",rtn), exit(1); tpool->threads_awake++; } *tpoolp = tpool; } int tpool_add_work( tpool_t tpool, void (*routine)(void *), void *arg) { int rtn; tpool_work_t *workp; if ((rtn = pthread_mutex_lock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_lock %d",rtn), exit(1); /* no space and this caller doesn't want to wait */ if ((tpool->cur_queue_size == tpool->max_queue_size) && tpool->do_not_block_when_full) { if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); return -1; } while( (tpool->cur_queue_size == tpool->max_queue_size) && (!(tpool->shutdown || tpool->queue_closed)) ) { if ((rtn = pthread_cond_wait(&(tpool->queue_not_full), &(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_cond_wait %d",rtn), exit(1); } /* the pool is in the process of being destroyed */ if (tpool->shutdown || tpool->queue_closed) { if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); return -1; } /* allocate work structure */ if ((workp = (tpool_work_t *)malloc(sizeof(tpool_work_t))) == NULL) perror("malloc"), exit(1); workp->routine = routine; workp->arg = arg; workp->next = NULL; if (tpool->cur_queue_size == 0) { tpool->queue_tail = tpool->queue_head = workp; if ((rtn = pthread_cond_broadcast(&(tpool->queue_not_empty))) != 0) fprintf(stderr,"pthread_cond_signal %d",rtn), exit(1);; } else { tpool->queue_tail->next = workp; tpool->queue_tail = workp; } tpool->cur_queue_size++; if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); return 1; } int tpool_destroy(tpool_t tpool, int finish) { int i,rtn; tpool_work_t *cur_nodep; if ((rtn = pthread_mutex_lock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_lock %d",rtn), exit(1); /* Is a shutdown already in progress? */ if (tpool->queue_closed && tpool->shutdown) { if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); return 0; } tpool->queue_closed = 1; /* If the finish flag is set, wait for workers to drain queue */ if (finish == 1) { while (tpool->cur_queue_size != 0) { if ((rtn = pthread_cond_wait(&(tpool->queue_empty), &(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_cond_wait %d",rtn), exit(1); } } tpool->shutdown = 1; if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); /* Wake up any workers so they recheck shutdown flag */ if ((rtn = pthread_cond_broadcast(&(tpool->queue_not_empty))) != 0) fprintf(stderr,"pthread_cond_broadcast %d",rtn), exit(1); if ((rtn = pthread_cond_broadcast(&(tpool->queue_not_full))) != 0) fprintf(stderr,"pthread_cond_broadcast %d",rtn), exit(1); /* Wait for workers to exit */ for(i=0; i < tpool->num_threads; i++) { if ((rtn = pthread_join(tpool->threads[i],NULL)) != 0) fprintf(stderr,"pthread_join %d",rtn), exit(1); } /* Now free pool structures */ free(tpool->threads); while(tpool->queue_head != NULL) { cur_nodep = tpool->queue_head->next; tpool->queue_head = tpool->queue_head->next; free(cur_nodep); } free(tpool); return(1); } void tpool_queue_open(tpool_t tpool) { pthread_mutex_lock(&tpool->queue_lock); tpool->queue_closed = 0; tpool->threads_awake = 0; pthread_mutex_unlock(&tpool->queue_lock); } void tpool_queue_close(tpool_t tpool, int finish) { int rtn; pthread_mutex_lock(&tpool->queue_lock); tpool->queue_closed = 1; if (finish) { if (tpool->cur_queue_size !=0 || tpool->threads_awake != 0) { if ((rtn = pthread_cond_wait(&(tpool->all_work_done), &(tpool->queue_lock))) !=0) fprintf(stderr,"pthread_cond_wait %d", rtn), exit(-1); } } pthread_mutex_unlock(&tpool->queue_lock); } void *tpool_thread(void *arg) { tpool_t tpool = (tpool_t)arg; int rtn; tpool_work_t *my_workp; for(;;) { /* Check queue for work */ if ((rtn = pthread_mutex_lock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_lock %d",rtn), exit(1); while ((tpool->cur_queue_size == 0) && (!tpool->shutdown)) { tpool->threads_awake--; if (tpool->threads_awake == 0 && tpool->queue_closed) { if ((rtn = pthread_cond_signal(&(tpool->all_work_done))) != 0) fprintf(stderr,"pthread_cond_signal %d",rtn), exit(1); } if ((rtn = pthread_cond_wait(&(tpool->queue_not_empty), &(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_cond_wait %d",rtn), exit(1); tpool->threads_awake++; } /* Has a shutdown started while i was sleeping? */ if (tpool->shutdown == 1) { tpool->threads_awake--; if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); pthread_exit(NULL); } /* Get to work, dequeue the next item */ my_workp = tpool->queue_head; tpool->cur_queue_size--; if (tpool->cur_queue_size == 0) tpool->queue_head = tpool->queue_tail = NULL; else tpool->queue_head = my_workp->next; /* Handle waiting add_work threads */ if ((!tpool->do_not_block_when_full) && (tpool->cur_queue_size == (tpool->max_queue_size - 1))) if ((rtn = pthread_cond_broadcast(&(tpool->queue_not_full))) != 0) fprintf(stderr,"pthread_cond_broadcast %d",rtn), exit(1); /* Handle waiting destroyer threads */ if (tpool->cur_queue_size == 0) if ((rtn = pthread_cond_signal(&(tpool->queue_empty))) != 0) fprintf(stderr,"pthread_cond_signal %d",rtn), exit(1); if ((rtn = pthread_mutex_unlock(&(tpool->queue_lock))) != 0) fprintf(stderr,"pthread_mutex_unlock %d",rtn), exit(1); /* Do this work item */ (*(my_workp->routine))(my_workp->arg); free(my_workp); } return(NULL); } }} // namespace psi::detci psi3/src/bin/detci/tpool.h0000644000101500007650000000372610754663017014157 0ustar crawdad/*! \file \ingroup DETCI \brief Enter brief description of file here */ /******************************************************** * An example source module to accompany... * * "Using POSIX Threads: Programming with Pthreads" * by Brad nichols, Dick Buttlar, Jackie Farrell * O'Reilly & Associates, Inc. * ******************************************************** * tpool.h -- * * Structures for thread pool */ #ifndef _psi_src_bin_detci_tpool_h #define _psi_src_bin_detci_tpool_h #ifdef EXTERN # undef EXTERN # define EXTERN extern #else # define EXTERN #endif namespace psi { namespace detci { typedef struct tpool_work { void (*routine)(void *); void *arg; struct tpool_work *next; } tpool_work_t; typedef struct tpool { /* pool characteristics */ int num_threads; int max_queue_size; int do_not_block_when_full; /* pool state */ pthread_t *threads; int cur_queue_size; tpool_work_t *queue_head; tpool_work_t *queue_tail; int queue_closed; int shutdown; int threads_awake; /* pool synchronization */ pthread_mutex_t queue_lock; pthread_cond_t queue_not_empty; pthread_cond_t queue_not_full; pthread_cond_t queue_empty; pthread_cond_t all_work_done; } *tpool_t; void tpool_init( tpool_t *tpoolp, int num_threads, int max_queue_size, int do_not_block_when_full); int tpool_add_work( tpool_t tpool, void (*routine)(void *), void *arg); int tpool_destroy( tpool_t tpool, int finish); EXTERN tpool_t thread_pool; void tpool_queue_open(tpool_t tpool); void tpool_queue_close(tpool_t tpool, int finish); }} // namespace psi::detci #endif // header guard psi3/src/bin/detci/vector.cc0000644000101500007650000000447610757640026014463 0ustar crawdad/*! \file ** \ingroup DETCI ** \brief Contains C code for vector operations ** ** C. David Sherrill ** Center for Computational Quantum Chemistry ** University of Georgia ** */ #include namespace psi { namespace detci { /* ** xey ** ** Perform the operation X[] = Y[] for vectors 'x' and 'y' ** of length 'size' ** */ void xey(double *x, double *y, int size) { int i; for (i=0; imath_tools update functions. */ /*---------------------------------------------------------------------------*/ void coord_base :: update_Hi() { int i; double *coord_dif, *grad_dif; coord_dif = init_array(num_coords); grad_dif = init_array(num_coords); for(i=0;i= RIDICULOUS_PRINT) { fprintf(outfile,"\n Hi matrix from previous itertation:\n"); print_mat(Hi_old,num_coords,num_coords,outfile); fprintf(outfile,"\n Coordinate differences:\n"); for(i=0;i (1.0/pow(10.0,(double)grad_max))) conv = 0; if(conv) { fprintf(outfile,"\n All gradients below convergence criteria of"); fprintf(outfile," 10^-%d",grad_max); fprintf(outfile,"\n Optimization completed\n"); fprintf(stdout,"\n Optimization completed\n"); stop_io(); /* stop_io() calls psi_stop psi_stop(infile,outfile,psi_file_prefix) closes infile and outfile */ exit(PSI_RETURN_ENDLOOP); } return; } /*--------------------------------------------------------------------------*/ /*! \fn coord_base::H_test() \brief Computes hessian and its eigenvalues. */ /*-------------------------------------------------------------------------*/ void coord_base :: H_test() { int i; double *evals, **evecs, **H; evals = init_array(num_coords); evecs = init_matrix(num_coords,num_coords); H = symm_matrix_invert(Hi,num_coords,0,0); sq_rsp( num_coords, num_coords, H, evals, 1, evecs, 1.0e-14); if(print_lvl > NORMAL_PRINT) { fprintf(outfile,"\n H matrix (a.u.):\n"); print_mat(H, num_coords, num_coords, outfile); fprintf(outfile,"\n H eigenvalues:"); for(i=0;icoord_base class contains data and functions common to all coordinate types. All coordinate types derive from this class. Member data includes generic coordinates and gradients, cartesians and cartesian gradients, a generic Hessian, information form previous iterations ("old" variables), and basic user suppied parameters. Generic functions for coordinate data manipulations are members of this class. "generic" variables hold values and no information regarding coordinates to which they correspond. Classes deriving from this class determine the actual coordinate type and are responsible for proper handling of these variables. */ /* Joseph P. Kenny 11/29/01 ###########################################################################*/ class coord_base : protected coord_base_carts, protected math_tools { protected: int iteration, /*!< current iteration */ num_coords, /*!< number of coordinates which are actually optimized */ grad_max, /*!< max allowable gradient is 10^-(grad_max) */ print_lvl, /*!< print level */ do_deriv, /*!< are we doing derivatives */ do_opt, /*!< are we doing optimization */ angle_abort; /*!< die if bad angle */ double *coords, /*!< generic coordinate array */ *grads, /*!< generic gradient array */ *atomic_nums, /*!< atomic numbers */ **Hi, /*!< generic inverse hessian matrix */ *coords_old, /*!< generic coordinates from previous iteration */ *grads_old, /*!< generic gradients from previous iteration */ **Hi_old, /*!< generic hessian inverse */ *coord_write; /*!< holds coordinate values prior to optimization step until opt.dat is written */ /*! \note "generic" variables hold values and no information regarding coordinates to which they correspond. Classes deriving from this class determine the actual coordinate type and are responsible for proper handling of these variables */ const char *update; /*!< the hessian inverse update method */ char **felement; /*!< the full list of element names (including dummy atoms) */ coord_base(); ~coord_base(){ free(coords); free(grads); free_matrix(Hi, num_coords); free(coords_old); free(grads_old); free_matrix(Hi_old,num_coords); free(coord_write); free(atomic_nums); int i; for(i=0;i1.0e-15) carts[i] = t_carts[0][p]; } free(t_carts); coord_base_carts::read_file11(); return; } /*---------------------------------------------------------------------------*/ /*! \fn coord_base_carts::read_file11() \brief Reads cartesian gradients from file11. */ /*---------------------------------------------------------------------------*/ void coord_base_carts :: read_file11() { int i, natom, count = 1, continue_flag = 1; char label[133]; char line1[133]; char *tmp_ptr; FILE *fp_11; double an,x,y,z,energy; ffile(&fp_11,"file11.dat",2); if (fp_11 == NULL) { punt("Could not open file11.dat"); } tmp_ptr = fgets(label, MAX_LINELENGTH, fp_11); if (tmp_ptr == NULL) { punt("Touble reading first line of file11.dat"); } fgets(line1, MAX_LINELENGTH, fp_11); if (sscanf(line1, "%d %lf", &natom, &energy) != 2) { punt("Trouble reading natoms and energy from file11.dat"); } if(natom!=num_atoms) punt("Numbers of atoms differ in file11 and chkpt"); rewind(fp_11); while ( fgets(label, MAX_LINELENGTH, fp_11) != NULL ) { fgets(line1, MAX_LINELENGTH, fp_11); sscanf(line1, "%d %lf", &natom, &energy); /*read in one chunk at a time*/ for (i=0; i1.0 for bohr or _bohr2angstroms for angstroms */ /*---------------------------------------------------------------------------*/ void coord_base_carts :: print_carts(double conv) { int i, j; double **temp; temp = init_matrix(num_entries,3); for(i=0;icartesians iterative back transformation */ #define POS_NEG_TORS 1.0e-6 /*!< tolerance for pos/neg torsion pairs */ #define BT_LOOP 1000 /*!< max iterations for internals->cartesians iterative back transformation */ #define MAX_LINELENGTH 133 /*!< max length of lines in file11 */ #define EQUIV_GRAD 1.0e-6 /*!< tolerance for equivalent gradients */ #define ALMOST_ONE 1.0e-8 /*!< tolerance for numbers near 1.0 in cart_to_internals */ #define BOND_LIM 0.1 /*!< bond limit in angstroms */ #define ANGLE_LIM 5.0 /*!< angle limit in degrees */ #define DELOC_EV_TOL 1.0e-4 /*!< nonzero eigenvalue if G matrix tolerance */ #define BOND_TYPE 0 /*!< simple bond type id */ #define ANGLE_TYPE 1 /*!< simple angle type id */ #define TORS_TYPE 2 /*!< simple tors type id */ #define IRREP_TOL 0.05 /*!< smallest valid irrep coefficient */ #define ALMOST_ZERO 1.0e-14 /*!< used when computing norms */ #define ANOTHER_ZERO 1.0e-8 /*!< another zero */ #define NEAR_180 179.0 /*!< valence angle near 180? */ #define NOT_180 (180.0 - 1e-5) /*!< greater than this is 180 */ #define CART_TYPE 1 /*!< cartesian coordinate id */ #define ZMAT_TYPE 2 /*!< zmat coordinate id */ #define DELOC_TYPE 3 /*!< deloc coordinate id */ #endif // header guard psi3/src/bin/extrema/Deloc/0000755000101500007650000000000011146111665014235 5ustar crawdadpsi3/src/bin/extrema/Deloc/bondl.h0000755000101500007650000002230010754663017015513 0ustar crawdad#ifndef _psi_bin_extrema_bondl_h_ #define _psi_bin_extrema_bondl_h_ namespace psi { namespace extrema { /*##########################################################################*/ /*! \file \ingroup EXTREMA \brief Contains bond length array. */ /* J. Kenny 12/08/01 ##########################################################################*/ /* version especially designed by the shameous murdogh mcprsr Daten aus Huber/Herzberg, UwS, 1990/08/03 common /bondle/ b(3486),ib(3486) common bondle contains typical bond lengths for single bonds most data are taken from Landoldt-Boernstein II/6, II/7, II/15 zero bond lengths indicate not yet specified bonds metals : molecular bond lengths have been taken which are smaller by about 10% than bulk atomic distances metal-c distances for transition metals are from carbonyls */ /*! Used to determine whether two atoms should be considered bonded when automatically generating redundant internal coordinates. \note I don't like how this works, lots of zeroes present, need to implement some sort of backup procedure using atomic radii */ static float bondl[1485] = { /* h */ 1.42, /* he*/ .00, .00, /* li*/ 3.02, .00,5.10, /* be*/ 2.65, .00,4.63,4.16, /* b */ 2.27, .00,4.06,3.69,3.21, /* c */ 2.08, .00,3.69,3.21,3.02,2.93, /* n */ 1.89, .00,3.31,3.12,2.74,2.74,2.74, /* o */ 1.80, .00,3.02,3.02,2.55,2.65,2.74,2.74, /* f */ 1.74, .00,2.93,2.83,2.46,2.55,2.55,2.65, 2.65, /* ne*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* na*/ 3.40, .00,5.48,5.01,4.63,4.54,4.35,4.16, 3.59, .00,5.86, /* mg*/ 3.21, .00, .00, .00, .00,3.97,3.59, .00, .00, .00, .00,5.67, /* al*/ 2.93, .00, .00, .00,4.06,3.59,3.59,3.31, 3.21, .00, .00, .00,5.01, /* si*/ 2.74, .00, .00, .00,3.69,3.50,3.21,3.12, 2.93, .00, .00, .00,4.54,4.35, /* p */ 2.74, .00, .00, .00,3.50,3.40,3.21,3.12, 3.02, .00, .00, .00,4.25,4.25,4.16, /* s */ 2.55, .00, .00, .00,3.40,3.40,3.12,2.83, 2.83, .00, .00, .00,4.16,3.97,3.97,3.87, /* cl*/ 2.36, .00,3.78,3.50,3.31,3.40,3.31,3.21, 3.21, .00,4.44,4.16,3.97,3.78,3.87,3.97, 3.78, /* ar*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* k */ .00, .00, .00, .00, .00, .00, .00,4.63, 4.06, .00, .00, .00, .00, .00, .00, .00, 5.01, .00,7.37, /* ca*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* sc*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ti*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* v */ .00, .00, .00, .00, .00, .00,3.30, .00, .00, .00, .00, .00, .00, .00, .00, .00, 4.05, .00, .00, .00, .00, .00, .00, /* cr*/ .00, .00, .00, .00, .00, .00, .00,3.40, 3.78, .00, .00, .00, .00, .00, .00, .00, 3.97, .00, .00, .00, .00, .00, .00, .00, /* mn*/ 2.83, .00, .00, .00, .00,3.50, .00, .00, .00, .00, .00, .00, .00,4.54, .00, .00, 4.16, .00, .00, .00, .00, .00, .00, .00, .00, /* fe*/ 2.83, .00, .00, .00, .00,3.40, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, 4.06, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* co*/ .00, .00, .00, .00, .00,3.21, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ni*/ .00, .00, .00, .00, .00,3.50, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* cu*/ 2.74, .00, .00, .00, .00,3.78,3.59,3.40, 3.31, .00, .00, .00, .00, .00, .00, .00, 3.87, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00,4.35, /* zn*/ .00, .00, .00, .00, .00, .00,3.40, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ga*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, 4.06, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ge*/ 2.83, .00, .00, .00, .00,3.78, .00, .00, 3.31, .00, .00, .00, .00, .00,4.35,4.25, 3.40, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* as*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* se*/ 2.76, .00, .00, .00,3.69,3.59,3.50,3.21, 3.12, .00, .00, .00, .00,4.25,4.16,4.16, 4.06, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00,4.44, /* br*/ 2.65, .00,4.06, .00, .00,3.78,3.97,3.50, 3.40, .00,4.72,4.44,4.25,4.16,3.97,4.06, .00, .00,5.29, .00, .00, .00, .00, .00, 4.44,4.35, .00, .00, .00, .00,4.35,4.35, .00, .00,4.35, /* kr*/ .00, .00, .00, .00, .00, .00, .00, .00, 3.59, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* rb*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* sr*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* y */ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* zr*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* nb*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* mo*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* tc*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ru*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* rh*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* pd*/ .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* ag*/ .00, .00, .00, .00, .00, .00, .00, .00, 3.78, .00, .00, .00, .00, .00, .00, .00, 4.35, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00,4.54, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* cd*/ .00, .00, .00, .00, .00,3.97, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* in*/ .00, .00, .00, .00, .00, .00, .00,3.78, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* sn*/ 3.21, .00, .00, .00, .00,3.97,3.97, .00, .00, .00, .00, .00, .00, .00, .00, .00, 4.44, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* sb*/ 3.21, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00,4.82, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* te*/ 3.12, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, /* i */ 3.02, .00,4.54, .00, .00,4.06, .00,3.59, 3.59, .00,5.10, .00,4.82, .00,4.72, .00, 4.35, .00,5.76, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00,5.01, /* xe*/ .00, .00, .00, .00, .00, .00, .00,3.97, 3.59, .00, .00, .00, .00, .00, .00, .00, 5.01, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00, .00 }; }} // namespace psi::extrema #endif // header guard psi3/src/bin/extrema/Deloc/deloc.cc0000755000101500007650000006214711112564564015652 0ustar crawdad/*###########################################################################*/ /*! \file \ingroup EXTREMA \brief Member functions for deloc (delocalized internals) derived class Contains the deloc constructor, method driver functions, interfaces to lower level classes, and several small functions needed to implement delocalized internal coordinates */ /* Joseph P. Kenny 12/06/01 ###########################################################################*/ #define EXTERN #include"extrema.h" #include"bondl.h" #include"inline.h" using namespace psi::extrema; /*---------------------------------------------------------------------------*/ /*! \fn deloc::deloc() Constructor for the top-level delocalized internals derived class. /*---------------------------------------------------------------------------*/ deloc :: deloc() : internals() { int i,j,pos; deloc::parse_input(); felement = (char **) chkpt_rd_felement(); point_group = chkpt_rd_sym_label(); FILE *opt_ptr; ffile_noexit(&opt_ptr,"opt.dat",2); int form_deloc=0; if( opt_ptr == NULL ) { form_deloc=1; if( do_opt ) do_deriv=0; iteration = 1; } else { ip_done(); ip_set_uppercase(1); ip_initialize(opt_ptr,outfile); ip_cwk_add(":OPT_INFO"); if(ip_exist("DO_DERIV",0)) { do_deriv=1; punt("Can't do derivatives yet"); } else do_deriv=0; iteration = 2; /* proper number set in read_opt */ read_bonds(); } deloc::init_simples(); if(print_lvl > NORMAL_PRINT) deloc::print_simples(); /* form B matrix */ deloc::compute_B_simple(); if(print_lvl >= RIDICULOUS_PRINT) { fprintf(outfile,"\n B matrix in simples representation:\n"); fnum_coords = num_simples; print_B(); } if(form_deloc) { fprintf(outfile,"\n\n Forming delocalized internal coordinates\n"); iteration = 1; /* form and diagonalize G */ fnum_coords = num_simples; /* for now */ G = init_matrix(num_simples,num_simples); internals::compute_G(); double **temp_mat, *evals, **evects; evals = init_array(num_simples); evects = init_matrix(num_simples,num_simples); temp_mat = init_matrix(num_simples,num_simples); sq_rsp(num_simples,num_simples, G, evals, 1, evects, 1.0e-14); mmult(G,0,evects,0,temp_mat,0,num_simples,num_simples,num_simples,0); for (j=0;j 1.0e-13) error=1; if (error == 1) { fprintf(outfile, "\n WARNING error detected in evect %d\n",j); error = 0; } } } free_matrix(temp_mat,num_simples); if(print_lvl>NORMAL_PRINT) { pos=0; fprintf(outfile,"\n Eigenvalues of G:\n"); for(i=(num_simples-1);i>-1;--i) { if(pos==4) { fprintf(outfile,"\n"); pos=0; } fprintf(outfile," % 15.10lf",evals[i]); ++pos; } } num_nonzero = 0; for (i=0;i ev_tol ) ++num_nonzero; fprintf(outfile, "\n %d nonzero eigenvalues of G (non-redundant coordinates)\n", num_nonzero); /* check for proper number of non-redundant coordinates */ int rotor_type; rotor_type = chkpt_rd_rottype(); switch (rotor_type) { case 3: if(num_atoms==2) degrees_of_freedom = 3*num_atoms -5; else punt("Use z-matrix for linear molecules"); break; case 6: degrees_of_freedom = 0; break; default: degrees_of_freedom = 3 * num_atoms - 6; break; } if(num_nonzero == degrees_of_freedom) { fprintf(outfile, " Non-zero eigenvalues of G equal degrees of freedom"); fprintf(outfile,"(%d)\n",num_nonzero); } else if(num_nonzero > degrees_of_freedom) { fprintf(outfile," Only %d degrees of freedom",degrees_of_freedom); fprintf(outfile,"\n Symmetry projection and orthogonalization"); fprintf(outfile," will be performed\n"); } if (num_nonzero < degrees_of_freedom) { fprintf(outfile,"\n Not enough non-redundant coordinates,"); fprintf(outfile, "\n try reducing 'ev_tol' and check atom connectivity\n"); punt("Not enough non-redundant coordinates"); } /* define delocalized internal coordinates */ deloc_define = init_matrix(num_nonzero, num_simples); pos=0; for(i=0;i ev_tol) { for(j=0;j=RIDICULOUS_PRINT) { fprintf(outfile,"\n Initial coordinates:\n"); print_mat(deloc_define,num_nonzero,num_simples,outfile); } /* clean up coordinate symmetry */ deloc::ir_project(); if(num_coords!=degrees_of_freedom) punt("number of coordinates != degrees of freedom"); for(i=0;i NORMAL_PRINT) print_H(); deloc::newton_step(); deloc::back_transform(); print_carts(_bohr2angstroms); // print_internals(); write_opt(); write_chkpt(); return; return; } /*---------------------------------------------------------------------------*/ /*! \fn deloc::back_transform() \brief Computes cartesians corresponding to the current delocalized coords. Interface for internals::back_transform(). */ /*---------------------------------------------------------------------------*/ void deloc::back_transform() { int i; double *coord_temp; coord_temp = init_array(num_coords); for(i=0;i ((int) atomic_nums[j]) ) { max = (int) atomic_nums[i]; min = (int) atomic_nums[j]; } else { max = (int) atomic_nums[j]; min = (int) atomic_nums[i]; } index = ioff[max-1]+ (min-1); if(bondl[index] != 0.0) { if( distance[ioff[i]+j] < (1.2*bondl[index]) ) bonds[i][j] = bonds[j][i] = 1; else if ((bondl[index] != 0.0) && (warn=0)) { fprintf(outfile, "\n\n WARNING Bond lengths not known "); fprintf(outfile,"for all atoms.\n"); fprintf(outfile, " BONDS keyword can fix this.\n"); ++warn; } } } /* check input for user specified bonds or nobonds */ int a,b; if (ip_exist("BONDS",0)) { ip_count("BONDS",&num,0); for(i=0;i1) && (num<1) ) punt("Can't find any bonds"); /* count number of bends*/ num=0; for(i=0;i NORMAL_PRINT) { fprintf(outfile, "\n\n %d bonds, %d valence angles and %d torsion angles" ,count_array[0],count_array[1],count_array[2]); fprintf(outfile," have been found"); } num_simples = (count_array[0] + count_array[1] + count_array[2] + count_array[3]); simples = (simple *) malloc(num_simples*sizeof(simple)); /* set bonds */ pos=-1; for(i=0;i NEAR_180*_pi/180.0 ) punt("Simple valence angle near 180 degrees"); } else if (simples[i].get_type() == TORS_TYPE) if( (fabs(simples[i].get_val()) > NEAR_180*_pi/180.0 ) && (fabs(simples[i].get_val()) < NOT_180*_pi/180.0) ) punt("Simple torsion near 180 degrees"); } return; } /*---------------------------------------------------------------------------*/ /*! \fn deloc::set_simples() \brief Sets values of simple internal objects. /*---------------------------------------------------------------------------*/ void deloc::set_simples() { int i,j,k,l,pos; double internal_val; /* set values */ for(i=0;imath_tools::newton_step(). */ /*-------------------------------------------------------------------------*/ void deloc :: newton_step() { int i, j, k, p; double *s, num, con; for(i=0;i0.1) s[i] = 0.1; if(s[i]<-0.1) s[i] = -0.1; } /* ugly fix for linear fragments for(i=0;i= RIDICULOUS_PRINT) { fprintf(outfile,"\n B matrix: \n"); print_mat(B,num_coords,3*num_atoms,outfile); } free_matrix(B_temp,num_simples); fflush(outfile); return; } /*---------------------------------------------------------------------------*/ /*! \fn void compute_block_G() \brief Computes block diagonal G matrix. A block diagonal G matrix is formed by multiplying only rows of the B matrix corresponding to like simple types*/ /*---------------------------------------------------------------------------*/ void deloc::compute_block_G() { int i, j, first_row[4]; first_row[0] = 0; first_row[1] = count_array[0]; first_row[2] = first_row[1]+count_array[1]; first_row[3] = first_row[2]+count_array[2]; double **ptr; ptr = (double **) malloc(num_simples*sizeof(double *)); for (i=0;i<4;++i) { for (j=0;j= RIDICULOUS_PRINT) { fprintf(outfile,"\n intermediate internals:\n"); for(i=0; i0) ) punt("Trouble reading delocalized coordinate definitions"); } coord_base::read_opt(); return; } /*---------------------------------------------------------------------------*/ /*! \fn deloc::read_bonds() \brief Reads bonds matrix from opt.dat() /*---------------------------------------------------------------------------*/ void deloc :: read_bonds() { FILE *opt_ptr; int i, j, dim; ffile(&opt_ptr,"opt.dat",2); if( opt_ptr != NULL ) { ip_done(); ip_set_uppercase(1); ip_initialize(opt_ptr,outfile); ip_cwk_add(":DELOC_INFO"); error += (!ip_exist("BONDS",0)); ip_count("BONDS",&dim,0); bonds = init_int_matrix(dim,dim); for (i=0;i 1.0e-14 ) ++nspan; /* this counts only what we want to keep */ if( initial_irrep[coord][i] > IRREP_TOL ) ++nproj; } } fprintf(outfile,"\n %d coordinates will be symmetry projected\n",nproj); if(print_lvl>=RIDICULOUS_PRINT) { fprintf(outfile,"\n Representation reduction coefficients:\n"); print_mat(initial_irrep,num_nonzero,ct.num_irreps,outfile); } results = init_matrix(ct.num_irreps,num_simples); project = init_int_array(ct.num_irreps); proj_coords = init_matrix(nproj,num_simples); proj_irreps = init_int_array(nproj); /* project out irreps for each coordinate */ p=p2=-1; for(coord=0;coord IRREP_TOL) { project[i] = 1; ++nproj_coord; } if(nproj_coord) { /* determine result of each symmetry operation */ for(i=0;i=RIDICULOUS_PRINT) { p=0; fprintf(outfile,"\n Projected coordinate irreps:\n"); for(i=0;i